From e123df8cdc8fb7cb81506193aaf6cd1b6522e9ce Mon Sep 17 00:00:00 2001 From: Guti Date: Thu, 21 Nov 2024 00:00:05 +0100 Subject: [PATCH] Fixes --- code/datums/diseases/_MobProcs.dm | 2 +- code/datums/diseases/_disease.dm | 4 ++-- code/datums/diseases/advance/advance.dm | 7 ++++--- code/datums/diseases/advance/symptoms/heal.dm | 2 +- code/datums/diseases/cold.dm | 4 ++-- code/datums/diseases/flu.dm | 4 ++-- code/modules/events/disease_outbreak.dm | 15 ++++++++------- code/modules/events/event_container_vr.dm | 1 + code/modules/organs/blood.dm | 2 +- 9 files changed, 22 insertions(+), 19 deletions(-) diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index b664a349a6..d223679aa6 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -80,7 +80,7 @@ if(prob(15/D.permeability_mod)) return - if(nutrition > 300 && prob(nutrition/10)) + if(nutrition > 300 && prob(nutrition/50)) return var/list/zone_weights = list( diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 6ae5cdbb9e..18bff1bc9e 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease)) var/cures_found = 0 for(var/C_id in cures) - if(affected_mob.reagents.has_reagent(C_id)) + if(affected_mob.bloodstr.has_reagent(C_id) || affected_mob.ingested.has_reagent(C_id)) cures_found++ if(needs_all_cures && cures_found < length(cures)) @@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease)) if((spread_flags & SPECIAL || spread_flags & NON_CONTAGIOUS || spread_flags & BLOOD) && !force_spread) return - if(affected_mob.reagents.has_reagent("spaceacilin") || (affected_mob.nutrition > 300 && prob(affected_mob.nutrition/10))) + if(affected_mob.bloodstr.has_reagent("spaceacilin") || (affected_mob.nutrition > 300 && prob(affected_mob.nutrition/50))) return var/spread_range = 1 diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 4e593ea7f1..308d1c4de0 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -16,6 +16,7 @@ GLOBAL_LIST_INIT(advance_cures, list( spread_text = "Unknown" viable_mobtypes = list(/mob/living/carbon/human) + var/s_processing = FALSE var/list/symptoms = list() var/id = "" @@ -36,7 +37,7 @@ GLOBAL_LIST_INIT(advance_cures, list( return /datum/disease/advance/Destroy() - if(processing) + if(s_processing) for(var/datum/symptom/S in symptoms) S.End(src) return ..() @@ -46,8 +47,8 @@ GLOBAL_LIST_INIT(advance_cures, list( return FALSE if(symptoms && length(symptoms)) - if(!processing) - processing = TRUE + if(!s_processing) + s_processing = TRUE for(var/datum/symptom/S in symptoms) S.Start(src) diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index f02ad95c32..e3c2feed54 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -144,7 +144,7 @@ Bonus level = 5 /datum/symptom/heal/dna/Heal(var/mob/living/carbon/M, var/datum/disease/advance/A) - var/amt_healed = (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand())) + var/amt_healed = max(0, (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand()))) M.adjustBrainLoss(-amt_healed) M.radiation = max(M.radiation - 3, 0) return TRUE diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm index c6b6cf0f17..4e942e0d2b 100644 --- a/code/datums/diseases/cold.dm +++ b/code/datums/diseases/cold.dm @@ -3,8 +3,8 @@ max_stages = 3 spread_text = "Airborne" spread_flags = AIRBORNE - cure_text = "Rest & Spaceacilin" - cures = list("spaceacilin") + cure_text = "Rest & Spaceacillin" + cures = list("spaceacillin", "chicken_soup") agent = "XY-rhinovirus" viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey) permeability_mod = 0.5 diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm index 6a30af6f85..9423b23f43 100644 --- a/code/datums/diseases/flu.dm +++ b/code/datums/diseases/flu.dm @@ -2,8 +2,8 @@ name = "The Flu" max_stages = 3 spread_text = "Airborne" - cure_text = "Spaceacilin" - cures = list("spaceacilin") + cure_text = "Spaceacillin" + cures = list("spaceacillin", "chicken_soup") cure_chance = 10 agent = "H13N1 flu virion" viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 25e1ea5c4f..6f5e2b9497 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY(current_pending_diseases) else stack_trace("Disease Outbreak: Invalid Event Level [severity]. Expected: 1-2") virus = /datum/disease/cold - chosen_disease = new virus() + chosen_disease = new virus else if(severity == EVENT_LEVEL_MAJOR) chosen_disease = create_virus(severity * pick(2,3)) //50% chance for a major disease instead of a moderate one @@ -37,7 +37,7 @@ GLOBAL_LIST_EMPTY(current_pending_diseases) GLOB.current_pending_diseases += chosen_disease var/list/candidates = list() - for(var/mob/living/carbon/human/G in player_list) + for(var/mob/living/carbon/human/G in human_mob_list) if(G.mind && G.stat != DEAD && G.is_client_active(5) && !player_is_antag(G.mind)) var/area/A = get_area(G) if(!A) @@ -48,17 +48,18 @@ GLOBAL_LIST_EMPTY(current_pending_diseases) continue if(isbelly(G.loc)) continue - if(!G.CanContractDisease()) + if(G.species.virus_immune) continue candidates += G var/chosen_infect = rand(3, 5) while(chosen_infect) - var/mob/living/carbon/human/H = pick(candidates) - H.ContractDisease(chosen_disease) - candidates -= H - + if(!isemptylist(candidates)) + var/mob/living/carbon/human/H = pick(candidates) + H.ForceContractDisease(chosen_disease) + candidates -= H + chosen_infect-- //Creates a virus with a harmful effect, guaranteed to be spreadable by contact or airborne /datum/event/disease_outbreak/proc/create_virus(max_severity = 6) diff --git a/code/modules/events/event_container_vr.dm b/code/modules/events/event_container_vr.dm index 71911302b7..1410f4b17c 100644 --- a/code/modules/events/event_container_vr.dm +++ b/code/modules/events/event_container_vr.dm @@ -108,6 +108,7 @@ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, -30, list(ASSIGNMENT_MEDICAL = 30, ASSIGNMENT_ANY = 1), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 2)), )) #undef ASSIGNMENT_ANY diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 3364d33068..ea0661c8cd 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -296,7 +296,7 @@ var/const/CE_STABLE_THRESHOLD = 0.5 var/datum/disease/D = ID if((D.spread_flags & SPECIAL) || (D.spread_flags & NON_CONTAGIOUS)) // You can't put non-contagius diseases in blood, but just in case continue - ContractDisease(D) + ForceContractDisease(D) if (injected.data["resistances"] && prob(5)) antibodies |= injected.data["resistances"] if (injected.data["antibodies"] && prob(5))