diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 360b261d893..aaa7f8ad1cf 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -424,4 +424,33 @@ var/list/advance_cures = list( src << "[D.name] - [D.holder]" */ + +/datum/disease/advance/proc/totalStageSpeed() + var/total_stage_speed = 0 + for(var/i in symptoms) + var/datum/symptom/S = i + total_stage_speed += S.stage_speed + return total_stage_speed + +/datum/disease/advance/proc/totalStealth() + var/total_stealth = 0 + for(var/i in symptoms) + var/datum/symptom/S = i + total_stealth += S.stealth + return total_stealth + +/datum/disease/advance/proc/totalResistance() + var/total_resistance = 0 + for(var/i in symptoms) + var/datum/symptom/S = i + total_resistance += S.resistance + return total_resistance + +/datum/disease/advance/proc/totalTransmittable() + var/total_transmittable = 0 + for(var/i in symptoms) + var/datum/symptom/S = i + total_transmittable += S.transmittable + return total_transmittable + #undef RANDOM_STARTING_LEVEL diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm index b124caa0a4e..e5b338728d0 100644 --- a/code/datums/diseases/advance/symptoms/choking.dm +++ b/code/datums/diseases/advance/symptoms/choking.dm @@ -34,10 +34,20 @@ Bonus M << "[pick("You're having difficulty breathing.", "Your breathing becomes heavy.")]" if(3, 4) M << "[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]" - M.adjustOxyLoss(5) + Choke_stage_3_4(M, A) M.emote("gasp") else M << "[pick("You're choking!", "You can't breathe!")]" - M.adjustOxyLoss(20) + Choke(M, A) M.emote("gasp") - return \ No newline at end of file + return + +/datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A) + var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth())*1) + M.adjustOxyLoss(get_damage) + return 1 + +/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A) + var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth()*5)) + M.adjustOxyLoss(get_damage) + return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/fever.dm b/code/datums/diseases/advance/symptoms/fever.dm index cf92785998b..15aadb73294 100644 --- a/code/datums/diseases/advance/symptoms/fever.dm +++ b/code/datums/diseases/advance/symptoms/fever.dm @@ -31,6 +31,11 @@ Bonus var/mob/living/carbon/M = A.affected_mob M << "[pick("You feel hot.", "You feel like you're burning.")]" if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT) - M.bodytemperature = min(M.bodytemperature + (20 * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1) + Heat(M, A) return + +/datum/symptom/fever/proc/Heat(mob/living/M, datum/disease/advance/A) + var/get_heat = (sqrt(21+A.totalTransmittable()*2))+(sqrt(20+A.totalStageSpeed()*3)) + M.bodytemperature = min(M.bodytemperature + (get_heat * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1) + 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 c1540f24f82..ea805861082 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -33,15 +33,25 @@ Bonus if(3) M << "[pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")]" if(4) - M.adjust_fire_stacks(5) + Firestacks_stage_4(M, A) M.IgniteMob() M << "Your skin bursts into flames!" - M.adjustFireLoss(5) M.emote("scream") if(5) - M.adjust_fire_stacks(10) + Firestacks_stage_5(M, A) M.IgniteMob() M << "Your skin erupts into an inferno!" - M.adjustFireLoss(10) M.emote("scream") - return \ No newline at end of file + return + +/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A) + var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(16+A.totalStealth())) + M.adjust_fire_stacks(get_stacks) + M.adjustFireLoss(get_stacks/2) + return 1 + +/datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/advance/A) + var/get_stacks = (sqrt(20+A.totalStageSpeed()*3))-(sqrt(16+A.totalStealth())) + M.adjust_fire_stacks(get_stacks) + M.adjustFireLoss(get_stacks) + 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 4bae6d34181..462d5f333a2 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -34,5 +34,10 @@ Bonus M << "[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]" if(4,5) M << "[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]" - M.adjustBruteLoss(5) - return \ No newline at end of file + Flesheat(M, A) + return + +/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 \ 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 024868c344e..6a3b4aa459f 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -34,8 +34,7 @@ Bonus return /datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A) - - var/get_damage = rand(4, 8) + var/get_damage = (sqrt(20+A.totalStageSpeed())*(2+rand())) M.adjustToxLoss(-get_damage) return 1 @@ -149,7 +148,7 @@ Bonus /datum/symptom/heal/dna/Heal(mob/living/carbon/M, datum/disease/advance/A) - var/amt_healed = rand(5, 10) + var/amt_healed = (sqrt(20+A.totalStageSpeed()*3))-(sqrt(16+A.totalStealth()*(1+rand()))) M.adjustBrainLoss(-amt_healed) //Non-power mutations, excluding race, so the virus does not force monkey -> human transformations. var/list/unclean_mutations = (not_good_mutations|bad_mutations) - mutations_list[RACEMUT] diff --git a/code/datums/diseases/advance/symptoms/shivering.dm b/code/datums/diseases/advance/symptoms/shivering.dm index 70364598438..efa8465e45f 100644 --- a/code/datums/diseases/advance/symptoms/shivering.dm +++ b/code/datums/diseases/advance/symptoms/shivering.dm @@ -31,6 +31,10 @@ Bonus var/mob/living/carbon/M = A.affected_mob M << "[pick("You feel cold.", "You start shivering.")]" if(M.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT) - M.bodytemperature = min(M.bodytemperature - (20 * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1) - + Chill(M, A) return + +/datum/symptom/shivering/proc/Chill(mob/living/M, datum/disease/advance/A) + var/get_cold = (sqrt(16+A.totalStealth()*2))+(sqrt(21+A.totalResistance()*2)) + M.bodytemperature = min(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1) + return 1 \ No newline at end of file