Okay, this is a pretty big revision!

Viruses:
     The virus system was COMPLETELY reworked.

     Good news, Virologists! This means people can now be infected by multiple viruses at once. Some of the virus-spreading protocols were tweaked to support this change, and as a result, they are now considerably more infectious. I also changed some background reagent variables to better support DNA, blood type, and virus combination.


Turrets:
     Fixed some lingering bugs that would bog down the global event processor.


Changelings:
     People turned into "husks" after being drained of their DNA by changelings can no longer be cloned.


Miscellaneous:
     I tweaked a LOT of mob code. This shouldn't have any noticeable impact on anything, but was required in order support the virus overhaul.



git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1753 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
vageyenaman@gmail.com
2011-07-02 04:00:25 +00:00
parent dfc0156af7
commit eee36e4f7e
43 changed files with 432 additions and 234 deletions
+5 -4
View File
@@ -251,11 +251,12 @@
if (!lamarr)
var/mob/trg = target
death()
if(trg.virus)//Viruses are stored in a global database.
trg.virus.cure(0)//You need to either cure() or del() them to stop their processing.
//if(trg.virus)//Viruses are stored in a global database.
//trg.virus.cure(0)//You need to either cure() or del() them to stop their processing.
trg.contract_disease(new /datum/disease/alien_embryo(0))//So after that you need to infect the target anew.
if(target.virus)//If they actually get infected. They may not.
target.alien_egg_flag = 1//We finally set their flag to 1.
for(var/datum/disease/alien_embryo/A in trg.viruses)
if(target.virus)//If they actually get infected. They may not.
target.alien_egg_flag = 1//We finally set their flag to 1.
return
else
sleep(50)
+4 -4
View File
@@ -20,8 +20,8 @@
sleep(3)
if (i > 0)
var/obj/decal/cleanable/blood/b = new /obj/decal/cleanable/blood/splatter(src.loc)
if (src.virus)
b.virus = src.virus
for(var/datum/disease/D in src.viruses)
b.viruses += D
if (step_to(src, get_step(src, direction), 0))
break
@@ -32,8 +32,8 @@
sleep(3)
if (i > 0)
var/obj/decal/cleanable/xenoblood/b = new /obj/decal/cleanable/xenoblood/xsplatter(src.loc)
if (src.virus)
b.virus = src.virus
for(var/datum/disease/D in src.viruses)
b.viruses += D
if (step_to(src, get_step(src, direction), 0))
break
+2 -2
View File
@@ -690,8 +690,8 @@
user.show_message("\blue \t Damage Specifics: [C.oxyloss > 50 ? "\red" : "\blue"][C.oxyloss]-[C.toxloss > 50 ? "\red" : "\blue"][C.toxloss]-[C.fireloss > 50 ? "\red" : "\blue"][C.fireloss]-[C.bruteloss > 50 ? "\red" : "\blue"][C.bruteloss]", 1)
user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1)
if(C.virus)
user.show_message(text("\red <b>Warning Virus Detected.</b>\nName: [C.virus.name].\nType: [C.virus.spread].\nStage: [C.virus.stage]/[C.virus.max_stages].\nPossible Cure: [C.virus.cure]"))
for(var/datum/disease/D in C.viruses)
user.show_message(text("\red <b>Warning Virus Detected.</b>\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
if(2)
if (!istype(C:dna, /datum/dna) || !isnull(C:gloves))
+2 -4
View File
@@ -114,8 +114,6 @@ MASS SPECTROMETER
if (istype(A, /obj/decal/cleanable/blood) || istype(A, /obj/rune))
if(A.blood_DNA)
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
if(A:virus)
user << "\red Warning, virus found in the blood! Name: [A:virus.name]"
else if (A.blood_DNA)
user << "\blue Blood found on [A]. Analysing..."
sleep(15)
@@ -175,8 +173,8 @@ MASS SPECTROMETER
user.show_message(text("\blue [] | [] | [] | []", M.oxyloss > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.toxloss > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.bruteloss > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
if (M.cloneloss)
user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
if (M.virus)
user.show_message(text("\red <b>Warning: Virus Detected.</b>\nName: [M.virus.name].\nType: [M.virus.spread].\nStage: [M.virus.stage]/[M.virus.max_stages].\nPossible Cure: [M.virus.cure]"))
for(var/datum/disease/D in M.viruses)
user.show_message(text("\red <b>Warning: Virus Detected</b>\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
if (M.brainloss >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
+23 -18
View File
@@ -1,13 +1,13 @@
//HUMANS
/proc/gibs(atom/location, var/datum/disease/virus)
new /obj/gibspawner/human(get_turf(location),virus)
/proc/gibs(atom/location, var/list/viruses)
new /obj/gibspawner/human(get_turf(location),viruses)
/proc/xgibs(atom/location, var/datum/disease/virus)
new /obj/gibspawner/xeno(get_turf(location),virus)
/proc/xgibs(atom/location, var/list/viruses)
new /obj/gibspawner/xeno(get_turf(location),viruses)
/proc/robogibs(atom/location, var/datum/disease/virus)
new /obj/gibspawner/robot(get_turf(location),virus)
/proc/robogibs(atom/location, var/list/viruses)
new /obj/gibspawner/robot(get_turf(location),viruses)
/obj/gibspawner
var/sparks = 0 //whether sparks spread on Gib()
@@ -16,20 +16,21 @@
var/list/gibamounts = list()
var/list/gibdirections = list() //of lists
New(location, var/datum/disease/virus = null)
New(location, var/list/viruses)
..()
if(istype(loc,/turf)) //basically if a badmin spawns it
Gib(loc,virus)
Gib(loc,viruses)
proc/Gib(atom/location, var/datum/disease/virus = null)
proc/Gib(atom/location, var/list/viruses = list())
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
world << "\red Gib list length mismatch!"
return
var/obj/decal/cleanable/blood/gibs/gib = null
if(virus && virus.spread_type == SPECIAL)
virus = null
for(var/datum/disease/D in viruses)
if(D.spread_type == SPECIAL)
del(D)
if(sparks)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
@@ -41,13 +42,17 @@
for(var/j = 1, j<= gibamounts[i], j++)
var/gibType = gibtypes[i]
gib = new gibType(location)
if(virus && prob(virusProb))
gib.virus = new virus.type
gib.virus.holder = gib
gib.virus.spread_type = CONTACT_FEET
var/list/directions = gibdirections[i]
if(directions.len)
gib.streak(directions)
if(viruses.len > 0)
for(var/datum/disease/D in viruses)
if(prob(virusProb))
var/datum/disease/viruus = new D.type
gib.viruses += viruus
viruus.holder = gib
viruus.spread_type = CONTACT_FEET
var/list/directions = gibdirections[i]
if(directions.len)
gib.streak(directions)
del(src)