Proper mirror PR for the disease refactor because I fucked up the first one. (#2026)

* Revert "im a dumbass and didn't see the .rej files Revert "[MIRROR] Disease Refactor" (#2025)"

This reverts commit 44742cb115.

* Delete shuttle_loan.dm.rej

* Delete life.dm.rej

* Update life.dm

* Delete life.dm.rej

* compile
This commit is contained in:
kevinz000
2017-07-31 23:41:22 -07:00
committed by GitHub
parent 277b7e6f80
commit bbcad2fa58
55 changed files with 246 additions and 322 deletions
+3 -2
View File
@@ -149,8 +149,9 @@
var/choice = input("Are you sure you want to cure all disease?") in list("Yes", "Cancel")
if(choice == "Yes")
message_admins("[key_name_admin(usr)] has cured all diseases.")
for(var/datum/disease/D in SSdisease.processing)
D.cure(D)
for(var/thing in SSdisease.active_diseases)
var/datum/disease/D = thing
D.cure(0)
if("set_name")
if(!check_rights(R_ADMIN))
return
+1 -1
View File
@@ -615,7 +615,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]")
if(isobserver(M))
new /obj/effect/gibspawner/generic(M.loc, M.viruses)
new /obj/effect/gibspawner/generic(get_turf(M))
return
if(confirm == "Yes")
M.gib()
+1 -1
View File
@@ -47,4 +47,4 @@
H.update_inv_ears()
H.update_inv_neck()
H.update_inv_head()
to_chat(owner, "<span class='notice'>You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]</span>")
to_chat(owner, "<span class='notice'>You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]</span>")
+11 -5
View File
@@ -27,11 +27,17 @@
continue
if(T.z != ZLEVEL_STATION)
continue
var/foundAlready = 0 // don't infect someone that already has the virus
for(var/datum/disease/D in H.viruses)
foundAlready = 1
if(!H.client)
continue
if(H.stat == DEAD)
continue
if(VIRUSIMMUNE in H.dna.species.species_traits) //Don't pick someone who's virus immune, only for it to not do anything.
continue
var/foundAlready = FALSE // don't infect someone that already has a disease
for(var/thing in H.viruses)
foundAlready = TRUE
break
if(H.stat == DEAD || foundAlready)
if(foundAlready)
continue
var/datum/disease/D
@@ -45,6 +51,6 @@
DS.strain_data["SE"] = H.dna.struc_enzymes
else
D = new virus_type()
D.carrier = 1
D.carrier = TRUE
H.AddDisease(D)
break
+2 -6
View File
@@ -135,7 +135,7 @@
new /obj/structure/spider/stickyweb(T)
if(ANTIDOTE_NEEDED)
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish)
var/obj/item/weapon/reagent_containers/glass/bottle/virus_type = pick(/obj/item/weapon/reagent_containers/glass/bottle/beesease, /obj/item/weapon/reagent_containers/glass/bottle/brainrot, /obj/item/weapon/reagent_containers/glass/bottle/fluspanish)
var/turf/T
for(var/i=0, i<10, i++)
if(prob(15))
@@ -145,11 +145,7 @@
else if(prob(25))
shuttle_spawns.Add(/obj/item/weapon/shard)
T = pick_n_take(empty_shuttle_turfs)
var/obj/effect/decal/cleanable/blood/b = new(T)
var/datum/disease/D = new virus_type()
D.longevity = 1000
b.viruses += D
D.holder = b
new virus_type(T)
shuttle_spawns.Add(/obj/structure/closet/crate)
shuttle_spawns.Add(/obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat)
shuttle_spawns.Add(/obj/item/weapon/reagent_containers/glass/bottle/magnitis)
@@ -8,10 +8,17 @@
/datum/round_event/spontaneous_appendicitis/start()
for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
var/foundAlready = 0 //don't infect someone that already has the virus
for(var/datum/disease/D in H.viruses)
foundAlready = 1
if(H.stat == 2 || foundAlready)
if(!H.client)
continue
if(H.stat == DEAD)
continue
if(!H.getorgan(/obj/item/organ/appendix)) //Don't give the disease to some who lacks it, only for it to be auto-cured
continue
var/foundAlready = FALSE //don't infect someone that already has appendicitis
for(var/datum/disease/appendicitis/A in H.viruses)
foundAlready = TRUE
break
if(foundAlready)
continue
var/datum/disease/D = new /datum/disease/appendicitis
@@ -162,7 +162,8 @@
//set reagent data
B.data["donor"] = O
for(var/datum/disease/D in O.viruses)
for(var/thing in O.viruses)
var/datum/disease/D = thing
if(!(D.spread_flags & SPECIAL))
B.data["viruses"] += D.Copy()
if(O.has_dna())
+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()
@@ -111,11 +111,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)
@@ -128,11 +130,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)
@@ -141,7 +145,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)
@@ -131,7 +131,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
@@ -224,6 +224,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)
+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
+10 -3
View File
@@ -18,12 +18,16 @@
return
var/datum/gas_mixture/environment = loc.return_air()
if(stat != DEAD)
//Breathing, if applicable
handle_breathing(times_fired)
if(stat != DEAD)
//Mutations and radiation
handle_mutations_and_radiation()
if(stat != DEAD)
//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()
@@ -60,6 +64,9 @@
radiation = 0 //so radiation don't accumulate in simple animals
return
/mob/living/proc/handle_diseases()
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>
@@ -373,7 +373,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 \
@@ -424,7 +425,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?
@@ -150,7 +150,7 @@
if(!new_name || ..())
return
A.AssignName(new_name)
for(var/datum/disease/advance/AD in SSdisease.processing)
for(var/datum/disease/advance/AD in SSdisease.active_diseases)
AD.Refresh()
. = TRUE
if("create_culture_bottle")
@@ -58,13 +58,11 @@
M.confused = 0
M.SetSleeping(0, 0)
M.jitteriness = 0
for(var/datum/disease/D in M.viruses)
for(var/thing in M.viruses)
var/datum/disease/D = thing
if(D.severity == NONTHREAT)
continue
D.spread_text = "Remissive"
D.stage--
if(D.stage < 1)
D.cure()
D.cure()
..()
. = 1
@@ -686,7 +684,7 @@
taste_description = "dull toxin"
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
var/obj/item/organ/eyes/eyes = M.getorganslot("eye_sight")
var/obj/item/organ/eyes/eyes = M.getorganslot("eyes_sight")
if (!eyes)
return
if(M.disabilities & BLIND)
@@ -13,7 +13,8 @@
/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume)
if(data && data["viruses"])
for(var/datum/disease/D in data["viruses"])
for(var/thing in data["viruses"])
var/datum/disease/D = thing
if((D.spread_flags & SPECIAL) || (D.spread_flags & NON_CONTAGIOUS))
continue
@@ -73,11 +74,6 @@
if(data["blood_DNA"])
B.blood_DNA[data["blood_DNA"]] = data["blood_type"]
for(var/datum/disease/D in data["viruses"])
var/datum/disease/newVirus = D.Copy(1)
B.viruses += newVirus
newVirus.holder = B
/datum/reagent/liquidgibs
name = "Liquid gibs"
@@ -96,7 +92,8 @@
/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, reac_volume)
if(islist(data) && (method == INGEST || method == INJECT))
for(var/datum/disease/D in M.viruses)
for(var/thing in M.viruses)
var/datum/disease/D = thing
if(D.GetDiseaseID() in data)
D.cure()
M.resistances |= data