Antibodies rework.

This commit is contained in:
GinjaNinja32
2015-01-26 05:32:00 +00:00
parent e49c6de525
commit 1b08463b7e
15 changed files with 110 additions and 129 deletions
+11 -8
View File
@@ -13,6 +13,8 @@
usr << "[E.stage]: [E.effect.name]; chance=[E.chance]; multiplier=[E.multiplier]"
usr << "Antigens: [antigens2string(antigen)]"
return 1
/datum/admins/var/datum/virus2_editor/virus2_editor_datum = new
/client/proc/virus2_editor()
set name = "Virus Editor"
@@ -28,7 +30,7 @@
var/species = list()
var/infectionchance = 70
var/spreadtype = "Contact"
var/antigens = 0
var/list/antigens = list()
var/speed = 1
var/mob/living/carbon/infectee = null
@@ -84,10 +86,10 @@
<br />
"}
f = 1
for(var/k in ANTIGENS)
for(var/k in ALL_ANTIGENS)
if(!f) H += " | "
else f = 0
H += "<a href='?src=\ref[src];what=antigen;toggle=[k]' style='color:[(text2num(k) & antigens) ? "#006600" : "#ff0000"]'>[ANTIGENS[k]]</a>"
H += "<a href='?src=\ref[src];what=antigen;toggle=[k]' style='color:[(k in antigens) ? "#006600" : "#ff0000"]'>[k]</a>"
H += {"
<a href="?src=\ref[src];what=antigen;reset=1" style="color:#0000aa">Reset</a>
<br />
@@ -145,13 +147,14 @@
speed = S
if("antigen")
if(href_list["toggle"])
var/T = text2num(href_list["toggle"])
if(T&antigens)
antigens &= ~T
var/T = href_list["toggle"]
if(length(T) != 1) return
if(T in antigens)
antigens -= T
else
antigens |= T
else if(href_list["reset"])
antigens = 0
antigens = list()
if("infectee")
var/list/candidates = list()
for(var/mob/living/carbon/G in living_mob_list)
@@ -167,7 +170,7 @@
infectee = candidates[I]
species |= infectee.species.name
if("go")
if(!antigens)
if(!antigens.len)
var/a = alert("This disease has no antigens; it will be impossible to permanently immunise anyone without them.\
It is strongly recommended to set at least one antigen. Do you want to go back and edit your virus?", "Antigens", "Yes", "Yes", "No")
if(a == "Yes") return
+27 -6
View File
@@ -1,5 +1,6 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/*
// reserving some numbers for later special antigens
var/global/const/ANTIGEN_A = 1
var/global/const/ANTIGEN_B = 2
@@ -36,10 +37,18 @@ var/global/list/ANTIGENS = list(
"[ANTIGEN_Y]" = "Y",
"[ANTIGEN_Z]" = "Z"
)
*/
var/global/list/ALL_ANTIGENS = list(
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
)
/hook/startup/proc/randomise_antigens_order()
ALL_ANTIGENS = shuffle(ALL_ANTIGENS)
// pure concentrated antibodies
datum/reagent/antibodies
data = list("antibodies"=0)
data = list("antibodies"=list())
name = "Antibodies"
id = "antibodies"
reagent_state = LIQUID
@@ -47,14 +56,26 @@ datum/reagent/antibodies
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(istype(M,/mob/living/carbon))
var/mob/living/carbon/C = M
if(src.data && method == INGEST)
if(M:virus2) if(src.data["antibodies"] & M:virus2.antigen)
M:virus2.dead = 1
M:antibodies |= src.data["antibodies"]
//if(C.virus2) if(src.data["antibodies"] & C.virus2.antigen)
// C.virus2.dead = 1
C.antibodies |= src.data["antibodies"]
return
// iterate over the list of antigens and see what matches
/proc/antigens2string(var/antigens)
/proc/antigens2string(list/antigens, none="None")
if(!istype(antigens))
CRASH("Illegal type!")
if(!antigens.len)
return none
var/code = ""
for(var/V in ANTIGENS) if(text2num(V) & antigens) code += ANTIGENS[V]
for(var/V in ALL_ANTIGENS)
if(V in antigens)
code += V
if(!code)
return none
return code
+5 -4
View File
@@ -54,7 +54,7 @@
if (sample)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (B)
data["antibodies"] = B.data["antibodies"] ? antigens2string(B.data["antibodies"]) : null
data["antibodies"] = antigens2string(B.data["antibodies"], none=null)
var/list/pathogens[0]
var/list/virus = B.data["virus2"]
@@ -67,7 +67,8 @@
else
var/datum/reagent/antibodies/A = locate(/datum/reagent/antibodies) in sample.reagents.reagent_list
data["antibodies"] = A && A.data["antibodies"] ? antigens2string(A.data["antibodies"]) : null
if(A)
data["antibodies"] = antigens2string(A.data["antibodies"], none=null)
data["is_antibody_sample"] = 1
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
@@ -186,7 +187,7 @@
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (B)
P.info += "<u>Antibodies:</u> "
P.info += B.data["antibodies"] ? antigens2string(B.data["antibodies"]) : "None"
P.info += antigens2string(B.data["antibodies"])
P.info += "<br>"
var/list/virus = B.data["virus2"]
@@ -202,7 +203,7 @@
var/datum/reagent/antibodies/A = locate(/datum/reagent/antibodies) in sample.reagents.reagent_list
if (A)
P.info += "The following antibodies have been isolated from the blood sample: "
P.info += A.data["antibodies"] ? antigens2string(A.data["antibodies"]) : "None"
P.info += antigens2string(A.data["antibodies"])
P.info += "<br>"
P.info += {"
+2 -4
View File
@@ -22,7 +22,7 @@
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"=list(),"antibodies"=0)
var/list/data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=list(),"antibodies"=list())
data["virus2"] |= I:virus2
product.reagents.add_reagent("blood",30,data)
@@ -52,9 +52,7 @@
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>Antibodies: [antigens2string(B.data["antibodies"])]"
dat += "<BR><A href='?src=\ref[src];antibody=1'>Begin antibody production</a>"
else
dat += "<BR>Please check container contents."
+6 -6
View File
@@ -8,7 +8,7 @@
var/clicks = 0
var/uniqueID = 0
var/list/datum/disease2/effectholder/effects = list()
var/antigen = 0 // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here
var/antigen = list() // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here
var/max_stage = 4
var/list/affected_species = list("Human","Unathi","Skrell","Tajara")
@@ -33,8 +33,8 @@
else
infectionchance = rand(60,90)
antigen |= text2num(pick(ANTIGENS))
antigen |= text2num(pick(ANTIGENS))
antigen = list(pick(ALL_ANTIGENS))
antigen |= pick(ALL_ANTIGENS)
spreadtype = prob(70) ? "Airborne" : "Contact"
if(all_species.len)
@@ -123,8 +123,8 @@
exclude += D.effect.type
holder.majormutate(exclude)
if (prob(5))
antigen = text2num(pick(ANTIGENS))
antigen |= text2num(pick(ANTIGENS))
antigen = list(pick(ALL_ANTIGENS))
antigen |= pick(ALL_ANTIGENS)
if (prob(5) && all_species.len)
affected_species = get_infectable_species()
@@ -250,7 +250,7 @@ proc/virology_letterhead(var/report_name)
<hr>
"}
proc/can_add_symptom(type)
/datum/disease2/disease/proc/can_add_symptom(type)
for(var/datum/disease2/effectholder/H in effects)
if(H.effect.type == type)
return 0
+4 -3
View File
@@ -68,14 +68,15 @@ proc/airborne_can_reach(turf/source, turf/target)
if ("[disease.uniqueID]" in M.virus2)
return
// if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect
if((M.antibodies & disease.antigen) != 0)
var/list/antibodies_in_common = M.antibodies & disease.antigen
if(antibodies_in_common.len)
return
if(M.reagents.has_reagent("spaceacillin"))
return
if(!disease.affected_species.len)
return
if (!(M.species.name in disease.affected_species))
if (forced)
disease.affected_species[1] = M.species.name
+2 -2
View File
@@ -20,7 +20,7 @@
report("Scan aborted: The target does not have blood.", user)
return
if(!C.antibodies)
if(!C.antibodies.len)
report("Scan Complete: No antibodies detected.", user)
return
@@ -76,7 +76,7 @@
if(.) return
if(href_list["info"])
usr << browse(info, "window=virusinfo")
usr << browse(info, "window=info_\ref[src]")
return 1
/obj/item/weapon/ruinedvirusdish