Disease Refactor (#2021)

This commit is contained in:
CitadelStationBot
2017-07-15 13:40:49 -05:00
committed by kevinz000
parent 2ae38397c9
commit f2ac487927
56 changed files with 210 additions and 255 deletions
+4 -2
View File
@@ -137,7 +137,8 @@
if(blood_id == C.get_blood_id())//both mobs have the same blood substance
if(blood_id == "blood") //normal blood
if(blood_data["viruses"])
for(var/datum/disease/D in blood_data["viruses"])
for(var/thing in blood_data["viruses"])
var/datum/disease/D = thing
if((D.spread_flags & SPECIAL) || (D.spread_flags & NON_CONTAGIOUS))
continue
C.ForceContractDisease(D)
@@ -162,7 +163,8 @@
blood_data["donor"] = src
blood_data["viruses"] = list()
for(var/datum/disease/D in viruses)
for(var/thing in viruses)
var/datum/disease/D = thing
blood_data["viruses"] += D.Copy()
blood_data["blood_DNA"] = copytext(dna.unique_enzymes,1,0)
@@ -1,8 +1,8 @@
/mob/living/carbon/alien/spawn_gibs(with_bodyparts)
if(with_bodyparts)
new /obj/effect/gibspawner/xeno(loc,viruses)
new /obj/effect/gibspawner/xeno(get_turf(src))
else
new /obj/effect/gibspawner/xenobodypartless(loc,viruses)
new /obj/effect/gibspawner/xenobodypartless(get_turf(src))
/mob/living/carbon/alien/gib_animation()
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-a")
@@ -8,9 +8,9 @@
/mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts)
if(with_bodyparts)
new /obj/effect/gibspawner/larva(loc,viruses)
new /obj/effect/gibspawner/larva(get_turf(src))
else
new /obj/effect/gibspawner/larvabodypartless(loc,viruses)
new /obj/effect/gibspawner/larvabodypartless(get_turf(src))
/mob/living/carbon/alien/larva/gib_animation()
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-l")
+3 -2
View File
@@ -716,8 +716,9 @@
var/obj/item/organ/brain/B = getorgan(/obj/item/organ/brain)
if(B)
B.damaged_brain = 0
for(var/datum/disease/D in viruses)
if (D.severity != NONTHREAT)
for(var/thing in viruses)
var/datum/disease/D = thing
if(D.severity != NONTHREAT)
D.cure(0)
if(admin_revive)
regenerate_limbs()
@@ -107,11 +107,13 @@
/mob/living/carbon/attack_hand(mob/living/carbon/human/user)
for(var/datum/disease/D in viruses)
for(var/thing in viruses)
var/datum/disease/D = thing
if(D.IsSpreadByTouch())
user.ContractDisease(D)
for(var/datum/disease/D in user.viruses)
for(var/thing in user.viruses)
var/datum/disease/D = thing
if(D.IsSpreadByTouch())
ContractDisease(D)
@@ -124,11 +126,13 @@
/mob/living/carbon/attack_paw(mob/living/carbon/monkey/M)
for(var/datum/disease/D in viruses)
for(var/thing in viruses)
var/datum/disease/D = thing
if(D.IsSpreadByTouch())
M.ContractDisease(D)
for(var/datum/disease/D in M.viruses)
for(var/thing in M.viruses)
var/datum/disease/D = thing
if(D.IsSpreadByTouch())
ContractDisease(D)
@@ -137,7 +141,8 @@
return 0
if(..()) //successful monkey bite.
for(var/datum/disease/D in M.viruses)
for(var/thing in M.viruses)
var/datum/disease/D = thing
ForceContractDisease(D)
return 1
@@ -6,9 +6,9 @@
/mob/living/carbon/human/spawn_gibs(with_bodyparts)
if(with_bodyparts)
new /obj/effect/gibspawner/human(loc, viruses, dna)
new /obj/effect/gibspawner/human(get_turf(src), dna)
else
new /obj/effect/gibspawner/humanbodypartless(loc, viruses, dna)
new /obj/effect/gibspawner/humanbodypartless(get_turf(src), dna)
/mob/living/carbon/human/spawn_dust(just_ash = FALSE)
if(just_ash)
@@ -119,7 +119,8 @@
//Virsuses
if(viruses.len)
stat("Viruses:", null)
for(var/datum/disease/D in viruses)
for(var/thing in viruses)
var/datum/disease/D = thing
stat("*", "[D.name], Type: [D.spread_text], Stage: [D.stage]/[D.max_stages], Possible Cure: [D.cure_text]")
+9
View File
@@ -222,6 +222,15 @@
/mob/living/carbon/proc/handle_blood()
return
/mob/living/carbon/handle_diseases()
for(var/thing in viruses)
var/datum/disease/D = thing
if(prob(D.infectivity))
D.spread()
if(stat != DEAD)
D.stage_act()
/mob/living/carbon/proc/handle_changeling()
if(mind && hud_used && hud_used.lingchemdisplay)
if(mind.changeling)
@@ -0,0 +1,10 @@
diff a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm (rejected hunks)
@@ -12,7 +12,7 @@
if(..()) //not dead
handle_blood()
- if(stat != DEAD) // Reagent processing needs to be handled before breathing and such, to prevent edge cases
+ if(stat != DEAD)
handle_organs()
if(stat == DEAD)
+1 -1
View File
@@ -18,7 +18,7 @@
return
/mob/living/proc/spawn_gibs()
new /obj/effect/gibspawner/generic(loc, viruses)
new /obj/effect/gibspawner/generic(get_turf(src))
/mob/living/proc/spill_organs()
return
+12 -4
View File
@@ -19,14 +19,19 @@
var/datum/gas_mixture/environment = loc.return_air()
if(stat != DEAD)
//Breathing, if applicable
handle_breathing(times_fired)
//Chemicals in the body
handle_chemicals_in_body()
if(stat != DEAD)
//Mutations and radiation
handle_mutations_and_radiation()
if(stat != DEAD)
//Chemicals in the body
handle_chemicals_in_body()
//Breathing, if applicable
handle_breathing(times_fired)
handle_diseases() // DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not.
if(stat != DEAD)
//Random events (vomiting etc)
handle_random_events()
@@ -66,6 +71,9 @@
/mob/living/proc/handle_chemicals_in_body()
return
/mob/living/proc/handle_diseases()
return
/mob/living/proc/handle_diginvis()
if(!digitaldisguise)
src.digitaldisguise = image(loc = src)
+11
View File
@@ -0,0 +1,11 @@
diff a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm (rejected hunks)
@@ -64,9 +64,6 @@
/mob/living/proc/handle_diseases()
return
-/mob/living/proc/handle_chemicals_in_body()
- return
-
/mob/living/proc/handle_diginvis()
if(!digitaldisguise)
src.digitaldisguise = image(loc = src)
+1 -1
View File
@@ -1,5 +1,5 @@
/mob/living/silicon/spawn_gibs()
new /obj/effect/gibspawner/robot(loc,viruses)
new /obj/effect/gibspawner/robot(get_turf(src))
/mob/living/silicon/spawn_dust()
new /obj/effect/decal/remains/robot(loc)
@@ -513,7 +513,8 @@
Structural Integrity: [M.getBruteLoss() > 50 ? "<font color=#FF5555>" : "<font color=#55FF55>"][M.getBruteLoss()]</font><br>
Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)<br>
"}
for(var/datum/disease/D in M.viruses)
for(var/thing in M.viruses)
var/datum/disease/D = thing
dat += {"<h4>Infection Detected.</h4><br>
Name: [D.name]<br>
Type: [D.spread_text]<br>
@@ -372,7 +372,8 @@
return 1
if(treat_virus && !C.reagents.has_reagent(treatment_virus_avoid) && !C.reagents.has_reagent(treatment_virus))
for(var/datum/disease/D in C.viruses)
for(var/thing in C.viruses)
var/datum/disease/D = thing
//the medibot can't detect viruses that are undetectable to Health Analyzers or Pandemic machines.
if(!(D.visibility_flags & HIDDEN_SCANNER || D.visibility_flags & HIDDEN_PANDEMIC) \
&& D.severity != NONTHREAT \
@@ -423,7 +424,8 @@
else
if(treat_virus)
var/virus = 0
for(var/datum/disease/D in C.viruses)
for(var/thing in C.viruses)
var/datum/disease/D = thing
//detectable virus
if((!(D.visibility_flags & HIDDEN_SCANNER)) || (!(D.visibility_flags & HIDDEN_PANDEMIC)))
if(D.severity != NONTHREAT) //virus is harmful
+1 -2
View File
@@ -11,8 +11,7 @@
qdel(hud_used)
if(mind && mind.current == src)
spellremove(src)
for(var/infection in viruses)
qdel(infection)
QDEL_LIST(viruses)
for(var/cc in client_colours)
qdel(cc)
client_colours = null
+1 -1
View File
@@ -113,7 +113,7 @@
//List of active diseases
var/list/viruses = list() // replaces var/datum/disease/virus
var/list/viruses = list() // list of all diseases in a mob
var/list/resistances = list()
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
+4 -4
View File
@@ -65,9 +65,9 @@
if (tr_flags & TR_KEEPVIRUS)
O.viruses = viruses
viruses = list()
for(var/datum/disease/D in O.viruses)
for(var/thing in O.viruses)
var/datum/disease/D = thing
D.affected_mob = O
D.holder = O
//keep damage?
if (tr_flags & TR_KEEPDAMAGE)
@@ -219,9 +219,9 @@
if (tr_flags & TR_KEEPVIRUS)
O.viruses = viruses
viruses = list()
for(var/datum/disease/D in O.viruses)
for(var/thing in O.viruses)
var/datum/disease/D = thing
D.affected_mob = O
D.holder = O
O.med_hud_set_status()
//keep damage?