mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user