mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
- Effects can now appear and be spliced in at higher stages than their set stages (e.g. Waiting Syndrome can now occur in any block) - Gibbingtons changed to not instantly gib infected on activation, instead either dealing massive brute damage or making humanoids' limbs fall off; this avoids three copies of Waiting Syndrome then Gibbingtons going undetected until it instagibs the entire station one after the other. - New effect: chemical synthesis. Picks one reagent from its list, and keeps infected at 5-7u of that reagent. Infecting others, splicing the gene, etc does not change the reagent, only generating an entirely new chemical synthesis effect does that. - Admin panel for spawning viruses - Virus dish examine() now doesn't print 15+ lines to output, instead printing one line and a link to open a window with the rest (and it calls ..() now) - Lowercased most virology machinery's names - Renamed/reordered antigens, there are now 16 antigens rather than 11, and they don't use the blood markers' names despite not being affected by blood type at all - Generating random effects does not rely so much on the GC
113 lines
3.3 KiB
Plaintext
113 lines
3.3 KiB
Plaintext
///////////////ANTIBODY SCANNER///////////////
|
|
|
|
/obj/item/device/antibody_scanner
|
|
name = "antibody scanner"
|
|
desc = "Scans living beings for antibodies in their blood."
|
|
icon_state = "health"
|
|
w_class = 2.0
|
|
item_state = "electronic"
|
|
flags = FPRINT | TABLEPASS | CONDUCT
|
|
|
|
/obj/item/device/antibody_scanner/attack(mob/M as mob, mob/user as mob)
|
|
if(!istype(M,/mob/living/carbon/))
|
|
report("Scan aborted: Incompatible target.", user)
|
|
return
|
|
|
|
var/mob/living/carbon/C = M
|
|
if (istype(C,/mob/living/carbon/human/))
|
|
var/mob/living/carbon/human/H = C
|
|
if(H.species && H.species.flags & NO_BLOOD)
|
|
report("Scan aborted: The target does not have blood.", user)
|
|
return
|
|
|
|
if(!C.antibodies)
|
|
report("Scan Complete: No antibodies detected.", user)
|
|
return
|
|
|
|
if (CLUMSY in user.mutations && prob(50))
|
|
// I was tempted to be really evil and rot13 the output.
|
|
report("Antibodies detected: [reverse_text(antigens2string(C.antibodies))]", user)
|
|
else
|
|
report("Antibodies detected: [antigens2string(C.antibodies)]", user)
|
|
|
|
/obj/item/device/antibody_scanner/proc/report(var/text, mob/user as mob)
|
|
user << "\blue \icon[src] \The [src] beeps, \"[text]\""
|
|
|
|
///////////////VIRUS DISH///////////////
|
|
|
|
/obj/item/weapon/virusdish
|
|
name = "virus dish"
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "implantcase-b"
|
|
var/datum/disease2/disease/virus2 = null
|
|
var/growth = 0
|
|
var/basic_info = null
|
|
var/info = 0
|
|
var/analysed = 0
|
|
|
|
/obj/item/weapon/virusdish/random
|
|
name = "virus sample"
|
|
|
|
/obj/item/weapon/virusdish/random/New()
|
|
..()
|
|
src.virus2 = new /datum/disease2/disease
|
|
src.virus2.makerandom()
|
|
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/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe))
|
|
return
|
|
..()
|
|
if(prob(50))
|
|
user << "<span class='danger'>\The [src] shatters!</span>"
|
|
if(virus2.infectionchance > 0)
|
|
for(var/mob/living/carbon/target in view(1, get_turf(src)))
|
|
if(airborne_can_reach(get_turf(src), get_turf(target)))
|
|
infect_virus2(target, src.virus2)
|
|
del src
|
|
|
|
/obj/item/weapon/virusdish/examine(mob/user)
|
|
..()
|
|
if(basic_info)
|
|
user << "[basic_info] : <a href='?src=\ref[src];info=1'>More Information</a>"
|
|
|
|
/obj/item/weapon/virusdish/Topic(href, href_list)
|
|
. = ..()
|
|
if(.) return
|
|
|
|
if(href_list["info"])
|
|
usr << browse(info, "window=virusinfo")
|
|
return 1
|
|
|
|
/obj/item/weapon/ruinedvirusdish
|
|
name = "ruined virus sample"
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "implantcase-b"
|
|
desc = "The bacteria in the dish are completely dead."
|
|
|
|
/obj/item/weapon/ruinedvirusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob)
|
|
if(istype(W,/obj/item/weapon/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe))
|
|
return ..()
|
|
|
|
if(prob(50))
|
|
user << "\The [src] shatters!"
|
|
del src
|
|
|
|
///////////////GNA DISK///////////////
|
|
|
|
/obj/item/weapon/diseasedisk
|
|
name = "blank GNA disk"
|
|
icon = 'icons/obj/cloning.dmi'
|
|
icon_state = "datadisk0"
|
|
w_class = 1
|
|
var/datum/disease2/effectholder/effect = null
|
|
var/list/species = null
|
|
var/stage = 1
|
|
var/analysed = 1
|
|
|
|
/obj/item/weapon/diseasedisk/premade/New()
|
|
name = "blank GNA disk (stage: [stage])"
|
|
effect = new /datum/disease2/effectholder
|
|
effect.effect = new /datum/disease2/effect/invisible
|
|
effect.stage = stage
|