Ported virus2 system and machinery.

Viruses2 do not spawn anywhere yet, until machinery is on map.
This commit is contained in:
Chinsky
2012-10-29 04:27:58 +04:00
parent 9716049b4e
commit 27eaaa01d1
15 changed files with 123 additions and 14 deletions

View File

@@ -9,10 +9,13 @@ datum/reagent/antibodies
color = "#0050F0"
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(istype(M,/mob/living/carbon/human))
if(istype(M,/mob/living/carbon))
if(src.data && method == INGEST)
if(src.data["antibodies"] & M:virus2.antigen)
if(M:virus2) if(src.data["antibodies"] & M:virus2.antigen)
M:virus2.dead = 1
// if the virus is killed this way it immunizes
// M:antibodies |= M:virus2.antigen
M:antibodies |= src.data["antibodies"]
return
// reserving some numbers for later special antigens
@@ -42,7 +45,7 @@ var/global/list/ANTIGENS = list("[ANTIGEN_A]" = "A", "[ANTIGEN_B]" = "B", "[ANTI
icon_state = "health"
w_class = 2.0
item_state = "electronic"
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
/obj/item/device/antibody_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)

View File

@@ -44,6 +44,17 @@
return 1
proc/airborne_can_reach(turf/source, turf/target)
var/obj/dummy = new(source)
dummy.flags = FPRINT | TABLEPASS
dummy.pass_flags = PASSTABLE
for(var/i=0, i<5, i++) if(!step_towards(dummy, target)) break
var/rval = (dummy.loc in range(1,target))
del dummy
return rval
/proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0)
if(M.virus2)
return

View File

@@ -40,7 +40,21 @@
container = I
C.drop_item()
I.loc = src
if(istype(I,/obj/item/weapon/virusdish))
if(virusing)
user << "<b>The pathogen materializer is still recharging.."
return
var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc)
var/list/data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0)
data["virus2"] = I:virus2
product.reagents.add_reagent("blood",30,data)
virusing = 1
spawn(1200) virusing = 0
state("The [src.name] Buzzes", "blue")
return
//else
src.attack_hand(user)
return
@@ -68,6 +82,9 @@
if(B)
dat = "Blood sample inserted."
var/code = ""
for(var/V in ANTIGENS) if(text2num(V) & B.data["antibodies"]) code += ANTIGENS[V]
dat += "<BR>Antibodies: [code]"
dat += "<BR><A href='?src=\ref[src];antibody=1'>Begin antibody production</a>"
else
dat += "<BR>Please check container contents."
@@ -121,9 +138,10 @@
product.reagents.add_reagent("antibodies",30,data)
state("The [src.name] Buzzes", "blue")
/*
/obj/machinery/computer/curer/proc/createvirus(var/datum/disease2/disease/virus2)
var/obj/item/weapon/cureimplanter/implanter = new /obj/item/weapon/cureimplanter(src.loc)
implanter.name = "Viral implanter (MAJOR BIOHAZARD)"
implanter.works = 3
state("The [src.name] Buzzes", "blue")
state("The [src.name] Buzzes", "blue")
*/

View File

@@ -163,7 +163,7 @@
if(beaker)
if(beaker.reagents.remove_reagent("virusfood",5))
if(!beaker.reagents.remove_reagent("virusfood",5))
foodsupply += 10
if(beaker.reagents.remove_reagent("toxins",1))
if(!beaker.reagents.remove_reagent("toxins",1))
toxins += 1

View File

@@ -138,7 +138,7 @@
growth = rand(5, 50)
/obj/item/weapon/virusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob)
if(istype(W,/obj/item/weapon/label) || istype(W,/obj/item/weapon/reagent_containers/syringe))
if(istype(W,/obj/item/weapon/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe))
return
..()
if(prob(50))

View File

@@ -10,6 +10,7 @@
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
var/list/viruses = list()
blood_DNA = list()
var/datum/disease2/disease/virus2 = null
/obj/effect/decal/cleanable/blood/Del()
for(var/datum/disease/D in viruses)
@@ -72,4 +73,17 @@
for(var/datum/disease/D in src.viruses)
b.viruses += D
if (step_to(src, get_step(src, direction), 0))
break
break
/obj/effect/decal/cleanable/mucus
name = "mucus"
desc = "Disgusting mucus."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'blood.dmi'
icon_state = "mucus"
random_icon_states = list("mucus")
var/datum/disease2/disease/virus2 = null

View File

@@ -6,6 +6,9 @@
var/eye_op_stage = 0.0
var/appendix_op_stage = 0.0
*/
var/datum/disease2/disease/virus2 = null
var/list/datum/disease2/disease/resistances2 = list()
var/antibodies = 0
var/silent = null //Can't talk. Value goes down every life proc.

View File

@@ -117,7 +117,7 @@
/mob/living/carbon/human/proc/fixblood()
for(var/datum/reagent/blood/B in vessel.reagent_list)
if(B.id == "blood")
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.b_type,"resistances"=null,"trace_chem"=null)
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.b_type,"resistances"=null,"trace_chem"=null, "virus2" = null, "antobodies" = null)
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)

View File

@@ -1367,7 +1367,28 @@
if(bodytemperature > 406)
for(var/datum/disease/D in viruses)
D.cure()
return
if(!virus2)
for(var/obj/effect/decal/cleanable/blood/B in view(1,src))
if(B.virus2 && get_infection_chance())
infect_virus2(src,B.virus2)
for(var/obj/effect/decal/cleanable/mucus/M in view(1,src))
if(M.virus2 && get_infection_chance())
infect_virus2(src,M.virus2)
else
if(isnull(virus2)) // Trying to figure out a runtime error that keeps repeating
CRASH("virus2 nulled before calling activate()")
else
virus2.activate(src)
// activate may have deleted the virus
if(!virus2) return
// check if we're immune
if(virus2.antigen & src.antibodies) virus2.dead = 1
return
proc/handle_stomach()
spawn(0)

View File

@@ -91,7 +91,7 @@ datum
blood
data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null)
data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=null )
name = "Blood"
id = "blood"
reagent_state = LIQUID
@@ -108,6 +108,19 @@ datum
else //injected
M.contract_disease(virus, 1, 0)
if(self.data["virus2"])
if(method == TOUCH)
infect_virus2(M,self.data["virus2"])
else
infect_virus2(M,self.data["virus2"],1)
if(istype(M,/mob/living/carbon))
// add the host's antibodies to their blood
self.data["antibodies"] |= M:antibodies
// check if the blood has antibodies that cure our disease
if (M:virus2) if((self.data["antibodies"] & M:virus2.antigen) && prob(10))
M:virus2.dead = 1
/*
if(self.data["virus"])
@@ -797,6 +810,15 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.apply_effect(2,IRRADIATE,0)
// radium may increase your chances to cure a disease
if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
if(M:virus2 && prob(5))
if(prob(50))
M.radiation += 50 // curing it that way may kill you instead
M.adjustToxLoss(100)
M:antibodies |= M:virus2.antigen
..()
return

View File

@@ -181,6 +181,13 @@ datum
required_reagents = list("silicon" = 1, "carbon" = 1)
result_amount = 2
virus_food
name = "Virus Food"
id = "virusfood"
result = "virusfood"
required_reagents = list("water" = 1, "milk" = 1)
result_amount = 5
leporazine
name = "Leporazine"
id = "leporazine"

View File

@@ -27,7 +27,8 @@
/obj/machinery/computer/pandemic,
/obj/item/weapon/secstorage/ssafe,
/obj/machinery/disposal,
/obj/machinery/iv_drip
/obj/machinery/iv_drip,
/obj/machinery/disease2/incubator
)
examine()

View File

@@ -96,6 +96,8 @@
B.data["viruses"] += new D.type
if(T.virus2)
B.data["virus2"] = T.virus2.getcopy()
B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
if(T.resistances&&T.resistances.len)
@@ -108,6 +110,7 @@
temp_chem += R.name
temp_chem[R.name] = R.volume
B.data["trace_chem"] = list2params(temp_chem)
B.data["antibodies"] = T.antibodies
if(ishuman(T))
T:vessel.remove_reagent("blood",amount) // Removes blood if human