diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm index ffe25551553..a785bcc3001 100644 --- a/code/datums/diseases/advance/symptoms/choking.dm +++ b/code/datums/diseases/advance/symptoms/choking.dm @@ -50,4 +50,66 @@ Bonus /datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A) var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth()*5) M.adjustOxyLoss(get_damage) + return 1 + +/* +////////////////////////////////////// + +Asphyxiation + + Very very noticable. + Decreases stage speed. + Decreases transmittablity. + +Bonus + Inflicts large spikes of oxyloss + Introduces Asphyxiating drugs to the system + Causes cardiac arrest on dying victims. + +////////////////////////////////////// +*/ + +/datum/symptom/asphyxiation + + name = "Acute respiratory distress syndrome" + stealth = -2 + resistance = -0 + stage_speed = -1 + transmittable = -2 + level = 7 + severity = 3 + +/datum/symptom/asphyxiation/Activate(datum/disease/advance/A) + ..() + if(prob(SYMPTOM_ACTIVATION_PROB)) + var/mob/living/M = A.affected_mob + switch(A.stage) + if(3, 4) + M << "[pick("Your windpipe feels thin.", "Your lungs feel small.")]" + Asphyxiate_stage_3_4(M, A) + M.emote("gasp") + else + M << "[pick("Your lungs hurt!", "It hurts to breathe!")]" + Asphyxiate(M, A) + M.emote("gasp") + if(M.getOxyLoss() >= 120) + M.visible_message("[M] stops breathing, as if their lungs have totally collapsed!") + Asphyxiate_death(M, A) + return + +/datum/symptom/asphyxiation/proc/Asphyxiate_stage_3_4(mob/living/M, datum/disease/advance/A) + var/get_damage = sqrt(21+A.totalStageSpeed()*0.7)+sqrt(16+A.totalStealth()) + M.adjustOxyLoss(get_damage) + return 1 + +/datum/symptom/asphyxiation/proc/Asphyxiate(mob/living/M, datum/disease/advance/A) + var/get_damage = sqrt(21+A.totalStageSpeed())+sqrt(16+A.totalStealth()*5) + M.adjustOxyLoss(get_damage) + M.reagents.add_reagent_list(list("pancuronium" = 2, "sodium_thiopental" = 2)) + return 1 + +/datum/symptom/asphyxiation/proc/Asphyxiate_death(mob/living/M, datum/disease/advance/A) + var/get_damage = sqrt(21+A.totalStageSpeed()*1.5)+sqrt(16+A.totalStealth()*7) + M.adjustOxyLoss(get_damage) + M.adjustBrainLoss(get_damage/2) return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/damage_converter.dm b/code/datums/diseases/advance/symptoms/damage_converter.dm index c6b4f0a87d0..ba315278a20 100644 --- a/code/datums/diseases/advance/symptoms/damage_converter.dm +++ b/code/datums/diseases/advance/symptoms/damage_converter.dm @@ -59,6 +59,62 @@ Bonus return 1 +/* +////////////////////////////////////// +Damage Converter (uranium) + Less Stealth easier to work with. + Lowers resistance. + Decreases stage speed. + Uranium only +Bonus + Slowly converts brute/fire damage to toxin even faster without limb compensation + +////////////////////////////////////// +*/ + +/datum/symptom/damage_converter_uranium + + name = "Toxic metabolism" + stealth = 0 + resistance = -2 + stage_speed = -2 + transmittable = 0 + level = 7 + +/datum/symptom/damage_converter_uranium/Activate(datum/disease/advance/A) + ..() + if(prob(SYMPTOM_ACTIVATION_PROB * 15)) + var/mob/living/M = A.affected_mob + switch(A.stage) + if(4, 5) + Convert(M) + return + +/datum/symptom/damage_converter_uranium/proc/Convert(mob/living/M) + + var/get_damage = rand(1, 2) + + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + var/list/parts = H.get_damaged_bodyparts(1,1) + + if(!parts.len) + return + + for(var/obj/item/bodypart/L in parts) + L.heal_damage(get_damage, get_damage, 0) + M.adjustToxLoss(get_damage) + + else + if(M.getFireLoss() > 0 || M.getBruteLoss() > 0) + M.adjustFireLoss(-get_damage) + M.adjustBruteLoss(-get_damage) + M.adjustToxLoss(get_damage) + else + return + + return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index ea805861082..087abdd62aa 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -54,4 +54,69 @@ Bonus var/get_stacks = (sqrt(20+A.totalStageSpeed()*3))-(sqrt(16+A.totalStealth())) M.adjust_fire_stacks(get_stacks) M.adjustFireLoss(get_stacks) + return 1 + +/* +////////////////////////////////////// + +Alkali perspiration + + Hidden. + Lowers resistance. + Decreases stage speed. + Decreases transmittablity. + Fatal Level. + +Bonus + Ignites infected mob. + Explodes mob on contact with water. + +////////////////////////////////////// +*/ + +/datum/symptom/alkali + + name = "Alkali perspiration" + stealth = 2 + resistance = -2 + stage_speed = -2 + transmittable = -2 + level = 7 + severity = 6 + +/datum/symptom/alkali/Activate(datum/disease/advance/A) + ..() + if(prob(SYMPTOM_ACTIVATION_PROB)) + var/mob/living/M = A.affected_mob + switch(A.stage) + if(3) + M << "[pick("Your veins boil.", "You feel hot.", "You smell meat cooking.")]" + if(4) + Alkali_fire_stage_4(M, A) + M.IgniteMob() + M << "Your sweat bursts into flames!" + M.emote("scream") + if(5) + Alkali_fire_stage_5(M, A) + M.IgniteMob() + M << "Your skin erupts into an inferno!" + M.emote("scream") + if(M.fire_stacks < 0) + M.visible_message("[M]'s sweat sizzles and pops on contact with water!") + explosion(M.loc,0,0,2) + Alkali_fire_stage_5(M, A) + return + +/datum/symptom/alkali/proc/Alkali_fire_stage_4(mob/living/M, datum/disease/advance/A) + var/get_stacks = (sqrt(20+A.totalStageSpeed()*5)) + M.adjust_fire_stacks(get_stacks) + M.adjustFireLoss(get_stacks/2) + M.reagents.add_reagent("clf3", 1) + return 1 + +/datum/symptom/alkali/proc/Alkali_fire_stage_5(mob/living/M, datum/disease/advance/A) + var/get_stacks = (sqrt(20+A.totalStageSpeed()*8)) + M.adjust_fire_stacks(get_stacks) + M.adjustFireLoss(get_stacks) + M.reagents.add_reagent_list(list("napalm" = 3, "clf3" = 3)) return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index 462d5f333a2..77904433cfb 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -40,4 +40,49 @@ Bonus /datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A) var/get_damage = ((sqrt(16-A.totalStealth()))*5) M.adjustBruteLoss(get_damage) + return 1 + +/* +////////////////////////////////////// + +Autophagocytosis (AKA Programmed mass cell death) + + Very noticable. + Lowers resistance. + Fast stage speed. + Decreases transmittablity. + Fatal Level. + +Bonus + Deals brute damage over time. + +////////////////////////////////////// +*/ + +/datum/symptom/flesh_death + + name = "Autophagocytosis Necrosis" + stealth = -2 + resistance = -2 + stage_speed = 1 + transmittable = -2 + level = 7 + severity = 6 + +/datum/symptom/flesh_death/Activate(datum/disease/advance/A) + ..() + if(prob(SYMPTOM_ACTIVATION_PROB)) + var/mob/living/M = A.affected_mob + switch(A.stage) + if(2,3) + M << "[pick("You feel your body break apart.", "Your skin rubs off like dust.")]" + if(4,5) + M << "[pick("You feel your muscles weakening.", "Your skin begins detaching itself.", "You feel sandy.")]" + Flesh_death(M, A) + return + +/datum/symptom/flesh_death/proc/Flesh_death(mob/living/M, datum/disease/advance/A) + var/get_damage = ((sqrt(16-A.totalStealth()))*6) + M.adjustBruteLoss(get_damage) + M.reagents.add_reagent_list(list("heparin" = 5, "lipolicide" = 5)) return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 9622f9246d7..ed98544b26d 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -41,6 +41,45 @@ Bonus /* ////////////////////////////////////// +Apoptosis + + Lowers resistance. + Decreases stage speed. + Decreases transmittablity. + +Bonus + Heals toxins in the affected mob's blood stream faster. + +////////////////////////////////////// +*/ + +/datum/symptom/aptx + + name = "Apoptoxin filter" + stealth = 0 + resistance = -2 + stage_speed = -2 + transmittable = -2 + level = 8 + +/datum/symptom/aptx/Activate(datum/disease/advance/A) + ..() + if(prob(SYMPTOM_ACTIVATION_PROB * 10)) + var/mob/living/M = A.affected_mob + switch(A.stage) + if(4, 5) + Apoptosis(M, A) + return + +/datum/symptom/aptx/proc/Apoptosis(mob/living/M, datum/disease/advance/A) + var/get_damage = (sqrt(20+A.totalStageSpeed())*(2+rand())) + M.adjustToxLoss(-get_damage) + return 1 + + +/* +////////////////////////////////////// + Metabolism Little bit hidden. diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index f8aa4d08d30..db9c21bdcb3 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -175,6 +175,34 @@ required_reagents = list("salglu_solution" = 1, "mutagenvirusfood" = 1) result_amount = 2 +/datum/chemical_reaction/virus_food_uranium + name = "Decaying uranium gel" + id = "uraniumvirusfood" + result = "uraniumvirusfood" + required_reagents = list("uranium" = 1, "virusfood" = 1) + result_amount = 1 + +/datum/chemical_reaction/virus_food_uranium_plasma + name = "Unstable uranium gel" + id = "uraniumvirusfood_plasma" + result = "uraniumplasmavirusfood_unstable" + required_reagents = list("uranium" = 5, "plasmavirusfood" = 1) + result_amount = 1 + +/datum/chemical_reaction/virus_food_uranium_plasma_gold + name = "Stable uranium gel" + id = "uraniumvirusfood_gold" + result = "uraniumplasmavirusfood_stable" + required_reagents = list("uranium" = 10, "gold" = 10, "plasmavirusfood" = 1) + result_amount = 1 + +/datum/chemical_reaction/virus_food_uranium_plasma_silver + name = "Stable uranium gel" + id = "uraniumvirusfood_silver" + result = "uraniumplasmavirusfood_stable" + required_reagents = list("uranium" = 10, "silver" = 10, "plasmavirusfood" = 1) + result_amount = 1 + /datum/chemical_reaction/mix_virus name = "Mix Virus" id = "mixvirus" @@ -257,6 +285,30 @@ level_min = 1 level_max = 1 +/datum/chemical_reaction/mix_virus/mix_virus_10 + + name = "Mix Virus 10" + id = "mixvirus10" + required_reagents = list("uraniumvirusfood" = 5) + level_min = 6 + level_max = 7 + +/datum/chemical_reaction/mix_virus/mix_virus_11 + + name = "Mix Virus 11" + id = "mixvirus11" + required_reagents = list("uraniumplasmavirusfood_unstable" = 5) + level_min = 7 + level_max = 7 + +/datum/chemical_reaction/mix_virus/mix_virus_12 + + name = "Mix Virus 12" + id = "mixvirus12" + required_reagents = list("uraniumplasmavirusfood_stable" = 5) + level_min = 8 + level_max = 8 + /datum/chemical_reaction/mix_virus/rem_virus name = "Devolve Virus"