From bd17a91ac02bd8665101646a13ed88e410f5d189 Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 12:49:35 -0700 Subject: [PATCH 01/12] Added --- .../items/sentient_disease_injector.dm | 124 ++++++++++++++++++ yogstation.dme | 1 + yogstation/code/modules/uplink/uplink_item.dm | 12 ++ 3 files changed, 137 insertions(+) create mode 100644 code/game/objects/items/sentient_disease_injector.dm diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm new file mode 100644 index 000000000000..08d9200403ab --- /dev/null +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -0,0 +1,124 @@ +/obj/item/sentient_disease_injector + name = "\improper CVS recipient injector" + desc = "It doesn't look like it prints recipts." + + + var/used = FALSE + + var/obj/item/reagent_containers/glass/bottle/vial/stored_vial + +/obj/item/sentient_disease_injector/attackby(obj/item/I, mob/user, params) + + if(!istype(I,/obj/item/reagent_containers)) + return ..() //Something else. + + if(stored_vial) //Already exists. + to_chat(user, span_warning("There is already \a [stored_vial] inside.")) + return + + if(!istype(I, /obj/item/reagent_containers/glass/bottle/vial)) + to_chat(user, span_warning("\The [stored_vial] won't fit inside.")) + return + + var/datum/reagent/R = I.reagents.get_master_reagent() + + if(!R) + to_chat(user, span_warning("\The [I] is empty!")) + return + + if(!length(R.data["viruses"])) + to_chat(user, span_warning("\The [src] can't seem to detect any viruses inside \the [I]...")) + return + + stored_vial = I + stored_vial.forceMove(src) + + to_chat(user, span_notice("You insert \the [I] into \the [src].")) + + return TRUE + +/obj/item/sentient_disease_injector/attack_self(mob/user) + + if(!stored_vial) + return + + stored_vial.forceMove(user.loc) + user.put_in_hands(stored_vial) + to_chat(user, span_notice("You eject \the [stored_vial] from \the [src].")) + stored_vial = null + + return TRUE + +/obj/item/sentient_disease_injector/attack(obj/item/I, mob/user, params) + return //Prevents damage. + +/obj/item/sentient_disease_injector/afterattack(atom/target, mob/user, proximity) + + if(!proximity || !istype(target,/mob/living/carbon)) + return ..() + + var/mob/living/carbon/C = target + + if(!C.can_inject(user, 1, user.zone_selected, TRUE)) + to_chat(user, span_warning("You can't seem to inject \the [C] that way!")) + + + if(ishuman(C)) + var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected)) + if(!affecting) + to_chat(user, span_warning("\The [src] can't inject a missing limb!")) + return + if(affecting.status != BODYPART_ORGANIC) + to_chat(user, span_warning("\The [src] won't work on a robotic limb!")) + return + + to_chat(user, span_notice("You stealthily inject \the [C] with \the [src].")) + + used = TRUE + + for(var/k in C.diseases) //Cure all existing diseases + var/datum/disease/D = k + D.cure(add_resistance = FALSE) + + if(stored_vial && stored_vial.reagents.total_volume) //If there is a stored vial, inject. + var/list/injected = list() + for(var/k in stored_vial.reagents) + var/datum/reagent/R = k + injected += R.name + log_combat(user, C, "attempted to inject", src, "([english_list(injected)])") + stored_vial.reagents.reaction(C, INJECT, 1) + stored_vial.reagents.trans_to(C, stored_vial.reagents.total_volume, transfered_by = user) + else + log_combat(user, C, "attempted to inject", src) + + if(length(C.diseases)) + INVOKE_ASYNC(src, .proc/create_sentient_virus, target, user) + + return TRUE + +/obj/item/sentient_disease_injector/Destroy() + QDEL_NULL(stored_vial) + . = ..() + +/obj/item/sentient_disease_injector/proc/create_sentient_virus(mob/living/carbon/target,mob/user) + + var/list/candidates = pollGhostCandidates("Do you wish to be considered for the special role of 'custom sentient disease'?", ROLE_ALIEN, null, ROLE_ALIEN) + if(!candidates.len) + return FALSE //No candidates. + + var/mob/dead/observer/selected = pick_n_take(candidates) + var/mob/camera/disease/virus = new/mob/camera/disease(get_turf(target)) + virus.key = selected.key + message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by [ADMIN_LOOKUPFLW(usr)]'s [src].") + log_game("[key_name(virus)] was spawned as a sentient disease by [ADMIN_LOOKUPFLW(usr)]'s [src].") + //Mix and cure all existing diseases. + for(var/k in target.diseases) + var/datum/disease/D = k + if(D == virus) + continue + virus.disease_template.Mix(D) + D.cure(add_resistance = FALSE) + + return virus.force_infect(target) + + diff --git a/yogstation.dme b/yogstation.dme index 2afe45aa9dd8..8e8d08383aab 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1099,6 +1099,7 @@ #include "code\game\objects\items\RPD.dm" #include "code\game\objects\items\RSF.dm" #include "code\game\objects\items\scrolls.dm" +#include "code\game\objects\items\sentient_disease_injector.dm" #include "code\game\objects\items\sharpener.dm" #include "code\game\objects\items\shields.dm" #include "code\game\objects\items\shooting_range.dm" diff --git a/yogstation/code/modules/uplink/uplink_item.dm b/yogstation/code/modules/uplink/uplink_item.dm index 7294f8940c10..1225b83eb83d 100644 --- a/yogstation/code/modules/uplink/uplink_item.dm +++ b/yogstation/code/modules/uplink/uplink_item.dm @@ -28,6 +28,18 @@ category = "Conspicuous Weapons" include_objectives = list(/datum/objective/hijack, /datum/objective/martyr, /datum/objective/nuclear) +/datum/uplink_item/stealthy_weapons/sentient_disease_injector + name = "CVS recipient injector" + desc = "The Contagion Viral Supplementor injector is a state of the art Syndicate hyposyringe that can inject the target with a \ + sentient virus. A vial can be inserted with a virus sample to give that sentient virus those symptoms. Doesn't come with a miniprinter." + item = /obj/item/sentient_disease_injector + cost = 25 + surplus = 0 //Hijack-only, don't let this exist in surplus + cant_discount = TRUE + include_objectives = list(/datum/objective/hijack) //Hijack only. + exclude_modes = list(/datum/game_mode/infiltration) // yogs: infiltration + restricted_roles = list("Virologist","Chief Medical Officer") + /datum/uplink_item/stealthy_weapons/soap_clusterbang category = "Conspicuous Weapons" From 3aa50a4cdcf5a78e8b156510b55c7dc2c25a9dcf Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 12:52:27 -0700 Subject: [PATCH 02/12] 25TC to 20TC --- yogstation/code/modules/uplink/uplink_item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yogstation/code/modules/uplink/uplink_item.dm b/yogstation/code/modules/uplink/uplink_item.dm index 1225b83eb83d..11b9b97bbd85 100644 --- a/yogstation/code/modules/uplink/uplink_item.dm +++ b/yogstation/code/modules/uplink/uplink_item.dm @@ -33,7 +33,7 @@ desc = "The Contagion Viral Supplementor injector is a state of the art Syndicate hyposyringe that can inject the target with a \ sentient virus. A vial can be inserted with a virus sample to give that sentient virus those symptoms. Doesn't come with a miniprinter." item = /obj/item/sentient_disease_injector - cost = 25 + cost = 20 surplus = 0 //Hijack-only, don't let this exist in surplus cant_discount = TRUE include_objectives = list(/datum/objective/hijack) //Hijack only. From 6b8c56883668864714e6ea082b927fcb68fb7141 Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 12:55:49 -0700 Subject: [PATCH 03/12] no longer unlimited --- code/game/objects/items/sentient_disease_injector.dm | 6 ++++-- yogstation/code/modules/uplink/uplink_item.dm | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 08d9200403ab..7453f403b3e6 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -2,7 +2,6 @@ name = "\improper CVS recipient injector" desc = "It doesn't look like it prints recipts." - var/used = FALSE var/obj/item/reagent_containers/glass/bottle/vial/stored_vial @@ -57,12 +56,15 @@ if(!proximity || !istype(target,/mob/living/carbon)) return ..() + if(!used) + to_chat(user, span_warning("\The [src] is already spent!")) + return + var/mob/living/carbon/C = target if(!C.can_inject(user, 1, user.zone_selected, TRUE)) to_chat(user, span_warning("You can't seem to inject \the [C] that way!")) - if(ishuman(C)) var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected)) if(!affecting) diff --git a/yogstation/code/modules/uplink/uplink_item.dm b/yogstation/code/modules/uplink/uplink_item.dm index 11b9b97bbd85..92d94f43e470 100644 --- a/yogstation/code/modules/uplink/uplink_item.dm +++ b/yogstation/code/modules/uplink/uplink_item.dm @@ -31,7 +31,7 @@ /datum/uplink_item/stealthy_weapons/sentient_disease_injector name = "CVS recipient injector" desc = "The Contagion Viral Supplementor injector is a state of the art Syndicate hyposyringe that can inject the target with a \ - sentient virus. A vial can be inserted with a virus sample to give that sentient virus those symptoms. Doesn't come with a miniprinter." + sentient virus. A vial can be inserted with a virus sample to give that sentient virus those symptoms. Single use. Doesn't come with a miniprinter." item = /obj/item/sentient_disease_injector cost = 20 surplus = 0 //Hijack-only, don't let this exist in surplus From bcd4420ef775b34859ee1c1dbea91badb18e18b8 Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 13:05:21 -0700 Subject: [PATCH 04/12] fixes lint --- code/datums/diseases/gastrolisis.dm | 2 +- code/datums/diseases/parrotpossession.dm | 2 +- code/datums/diseases/transformation.dm | 6 +++--- code/modules/antagonists/revenant/revenant_blight.dm | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm index 9f1ba1be626d..051bb85838a5 100644 --- a/code/datums/diseases/gastrolisis.dm +++ b/code/datums/diseases/gastrolisis.dm @@ -66,7 +66,7 @@ if(isopenturf(OT)) OT.MakeSlippery(TURF_WET_LUBE, 100) -/datum/disease/gastrolosis/cure() +/datum/disease/gastrolosis/cure(add_resistance = TRUE) . = ..() if(!is_species(affected_mob, /datum/species/snail)) //undo all the snail fuckening var/mob/living/carbon/human/H = affected_mob diff --git a/code/datums/diseases/parrotpossession.dm b/code/datums/diseases/parrotpossession.dm index 0715a7748dd3..988cc360b97e 100644 --- a/code/datums/diseases/parrotpossession.dm +++ b/code/datums/diseases/parrotpossession.dm @@ -23,7 +23,7 @@ if(parrot.speech_buffer.len) affected_mob.say(pick(parrot.speech_buffer), forced = "parrot possession") -/datum/disease/parrot_possession/cure() +/datum/disease/parrot_possession/cure(add_resistance = TRUE) if(parrot && parrot.loc == affected_mob) parrot.forceMove(affected_mob.drop_location()) affected_mob.visible_message(span_danger("[parrot] is violently driven out of [affected_mob]!"), span_userdanger("[parrot] bursts out of your chest!")) diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 5f1c86f4260e..9e80c87252fd 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -138,7 +138,7 @@ if(prob(3)) affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."), forced = "jungle fever") -/datum/disease/transformation/jungle_fever/cure() +/datum/disease/transformation/jungle_fever/cure(add_resistance = TRUE) remove_monkey(affected_mob.mind) ..() @@ -147,7 +147,7 @@ disease_flags = CAN_CARRY //no vaccines! no cure! cure_text = "Clown's Tears." cures = list(/datum/reagent/consumable/clownstears) - + /datum/disease/transformation/jungle_fever/monkeymode/after_add() if(affected_mob && !is_monkey_leader(affected_mob.mind)) visibility_flags = NONE @@ -286,7 +286,7 @@ stage5 = list(span_danger("You have become a morph.")) new_form = /mob/living/simple_animal/hostile/morph infectable_biotypes = list(MOB_ORGANIC, MOB_INORGANIC, MOB_UNDEAD) //magic! - + /datum/disease/transformation/ghost name = "Spectral Curse" cure_text = "Holy Water" diff --git a/code/modules/antagonists/revenant/revenant_blight.dm b/code/modules/antagonists/revenant/revenant_blight.dm index 05e972caeaa9..bdc958fdc707 100644 --- a/code/modules/antagonists/revenant/revenant_blight.dm +++ b/code/modules/antagonists/revenant/revenant_blight.dm @@ -15,7 +15,7 @@ var/stagedamage = 0 //Highest stage reached. var/finalstage = 0 //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects. -/datum/disease/revblight/cure() +/datum/disease/revblight/cure(add_resistance = TRUE) if(affected_mob) affected_mob.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#1d2953") if(affected_mob.dna && affected_mob.dna.species) From fec0d25369b62db186c482874f69e0f1a5d5908f Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 17:38:31 -0700 Subject: [PATCH 05/12] Update sentient_disease_injector.dm --- .../items/sentient_disease_injector.dm | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 7453f403b3e6..4e36160d4bbf 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -1,11 +1,20 @@ /obj/item/sentient_disease_injector name = "\improper CVS recipient injector" - desc = "It doesn't look like it prints recipts." + desc = "It doesn't look like it prints receipts." - var/used = FALSE + var/uses = 3 var/obj/item/reagent_containers/glass/bottle/vial/stored_vial +/obj/item/sentient_disease_injector/examine(mob/user) + . = ..() + if(stored_vial) + . += span_notice("It has a [stored_vial] inserted.") + if(uses > 0) + . += span_notice("The charge meter indicates it has [uses] [uses == 1 ? "use" : "uses"] remaining.") + else + . += span_notice("The charge meter indicates it is spent..") + /obj/item/sentient_disease_injector/attackby(obj/item/I, mob/user, params) if(!istype(I,/obj/item/reagent_containers)) @@ -56,8 +65,8 @@ if(!proximity || !istype(target,/mob/living/carbon)) return ..() - if(!used) - to_chat(user, span_warning("\The [src] is already spent!")) + if(uses <= 0) + to_chat(user, span_warning("\The [src] is spent!")) return var/mob/living/carbon/C = target @@ -76,7 +85,7 @@ to_chat(user, span_notice("You stealthily inject \the [C] with \the [src].")) - used = TRUE + uses -= 1 for(var/k in C.diseases) //Cure all existing diseases var/datum/disease/D = k From 794bb84ebda70ddb2d69f169ebb8cf2198ef115e Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 17:39:26 -0700 Subject: [PATCH 06/12] Apply suggestions from code review Co-authored-by: tattax <71668564+tattax@users.noreply.github.com> --- .../game/objects/items/sentient_disease_injector.dm | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 4e36160d4bbf..1e16d23819fc 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -62,7 +62,7 @@ /obj/item/sentient_disease_injector/afterattack(atom/target, mob/user, proximity) - if(!proximity || !istype(target,/mob/living/carbon)) + if(!proximity || !icarbon(target)) return ..() if(uses <= 0) @@ -87,14 +87,12 @@ uses -= 1 - for(var/k in C.diseases) //Cure all existing diseases - var/datum/disease/D = k + for(var/datum/disease/D as anything in C.diseases) //Cure all existing diseases D.cure(add_resistance = FALSE) if(stored_vial && stored_vial.reagents.total_volume) //If there is a stored vial, inject. var/list/injected = list() - for(var/k in stored_vial.reagents) - var/datum/reagent/R = k + for(var/datum/reagent/R as anything in stored_vial.reagents) injected += R.name log_combat(user, C, "attempted to inject", src, "([english_list(injected)])") stored_vial.reagents.reaction(C, INJECT, 1) @@ -103,7 +101,7 @@ log_combat(user, C, "attempted to inject", src) if(length(C.diseases)) - INVOKE_ASYNC(src, .proc/create_sentient_virus, target, user) + INVOKE_ASYNC(src, PROC_REF(create_sentient_virus), target, user) return TRUE @@ -123,8 +121,7 @@ message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by [ADMIN_LOOKUPFLW(usr)]'s [src].") log_game("[key_name(virus)] was spawned as a sentient disease by [ADMIN_LOOKUPFLW(usr)]'s [src].") //Mix and cure all existing diseases. - for(var/k in target.diseases) - var/datum/disease/D = k + for(var/datum/disease/D as anything in target.diseases) if(D == virus) continue virus.disease_template.Mix(D) From 545e96f255f0859ca6d0a5f685a78241273fef80 Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 18:13:29 -0700 Subject: [PATCH 07/12] adds icons --- .../items/sentient_disease_injector.dm | 46 ++++++++++++++++-- yogstation/icons/obj/syringe.dmi | Bin 1076 -> 1683 bytes 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 4e36160d4bbf..50b402023ec7 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -1,19 +1,51 @@ /obj/item/sentient_disease_injector name = "\improper CVS recipient injector" - desc = "It doesn't look like it prints receipts." + desc = "It doesn't look like it prints receipts..." + + icon = 'yogstation/icons/obj/syringe.dmi' + icon_state = "cvs" var/uses = 3 var/obj/item/reagent_containers/glass/bottle/vial/stored_vial + resistance_flags = ACID_PROOF + slot_flags = ITEM_SLOT_BELT + +/obj/item/sentient_disease_injector/update_icon() + + . = ..() + + cut_overlays() + + if(uses > 0) + add_overlay( + image( + icon = icon, + icon_state = "[icon_state]_virus[min(uses,3)]" + ) + ) + + if(stored_vial) + add_overlay( + image( + icon = icon, + icon_state = "[icon_state]_vial]" + ) + ) + if(stored_vial.reagents.total_volume > 0) + var/mutable_appearance/filling = mutable_appearance(icon,"[icon_state]_reagents") + filling.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(filling) + /obj/item/sentient_disease_injector/examine(mob/user) . = ..() if(stored_vial) . += span_notice("It has a [stored_vial] inserted.") if(uses > 0) - . += span_notice("The charge meter indicates it has [uses] [uses == 1 ? "use" : "uses"] remaining.") + . += span_notice("It has [uses] [uses == 1 ? "use" : "uses"] remaining.") else - . += span_notice("The charge meter indicates it is spent..") + . += span_notice("It is spent.") /obj/item/sentient_disease_injector/attackby(obj/item/I, mob/user, params) @@ -43,6 +75,8 @@ to_chat(user, span_notice("You insert \the [I] into \the [src].")) + update_icon() + return TRUE /obj/item/sentient_disease_injector/attack_self(mob/user) @@ -55,6 +89,8 @@ to_chat(user, span_notice("You eject \the [stored_vial] from \the [src].")) stored_vial = null + update_icon() + return TRUE /obj/item/sentient_disease_injector/attack(obj/item/I, mob/user, params) @@ -105,6 +141,8 @@ if(length(C.diseases)) INVOKE_ASYNC(src, .proc/create_sentient_virus, target, user) + update_icon() + return TRUE /obj/item/sentient_disease_injector/Destroy() @@ -131,5 +169,3 @@ D.cure(add_resistance = FALSE) return virus.force_infect(target) - - diff --git a/yogstation/icons/obj/syringe.dmi b/yogstation/icons/obj/syringe.dmi index 04d67369d352e593fba2c6a05dd55ba6118013ea..036f1bcc9749a9aa4c276ee3520d4cb24aa197f4 100644 GIT binary patch literal 1683 zcmah~eKZq#82*uuk&i@Dsjy4FB4s|3%UFq)xvUVeDSaqJ$tq0TjgpAeVk>ePB@BgV zDQmf`VY0=n`N$;S6ScK;>%Y#q_jLbwpXZ$Syzd|Hd7ksUmwdcE)K%B20sz!KcO!hi zGv-G@l)mFIDc<2bkdf)zC;)KeJT^_^xq%L0XwB{6Qo-ImaffYe ziA9Nu?voE!Y_=P)pwr#`GaD!_5~5!#&81I^g$ZXOhP2?VNxa>2s@fO2y3EXW5c}qJ z8CSJz(F|;$Ao4|krwsv7Sd=%MKaj#-a_t?`9FW!BL>i08?&p2|z4tjrW*l>~KlF}M zKfR>R?aESOVMf;#WF%XQGF?gmP^|Gpz|lDJ6!`?w@2K9(ZyqEI55y@2{ZB;&r?p|Q zizl%fbk?NX)*J$X5t%ct+WHvrCOs)xeWkq)>oBxSz&Pkub1Yb%crv%bFL=LBuwEdi z5pc!>TrV2M1`Z089Ui(y??!Fx8v8WfJmvV+#rf%{W@qYHq;YXKgm^Xlwc@};H3$m; zHkQeHx~^)=4Ty>>TIJJY%rJM&_9AUdR6m=7Q#A3o&*BndBnrJH8q?uXK@re-n_-S(YwY)b~z)XU$ zJCVrittEyg>a2u6NWgn&CVk0El4ia%gi01i4m{u%^m!MtteCk?C>=;mQX`Ox$^Sz)0Yo4*(F6_Z%e$a$$N3LGV#HwRAqGA z9q1s(*uWuCXW0aGvRLvvNcN`IF0?!wvf)d4QEKiZGc#gH_Fn+)?|US_e7y{Kj7^OWAgUG&yYV0>yZ92Xs3WnW8iqs&w&!Nh{3RYi4) ziN;^yO2iByA?=QwYWvVpp?0E59NjlHUt*=WkpB&ql$_=Y9LO%aMP@$zobF&SODGf3x zrp3$7I)yNq?%j|pJ2pjyEXm;?X~1)3h8-m4RNeK}w^7=ts6DiYn+5(|LSEW!e3hf% zNb5+!$&OnT=Rs(T;|5K5J4pi=78OBM)Fb0*Qs#S7K)~awva<@;ohe2&zBz>#-auMM zb@aF87uKOBw@A>73wPyXsFJA8ln*GL=TkDQzyC(1Hv+M%alpiAt15Qr1OQLt2Hd_l z>B?dj%*unTt~JAC&DU0>EfH-K<|dTtW+dl!@p+cN35$EWq&;!I`@#um^FS@VhLxrB zW5Jct+wmHkS0k&>#0_WL-ff?)g_f#z*!hnPc3UAf2G|!*ozTs3nJK@-b#~f$5t34J zzvmo0MsseQnl?M&6ZYAQ^m9u5Qm21q%1_fICn3C^}` zg2M`mO22;zF8KKMiI%sn*10q1gExd4Tr__0Nawtd=E(pc$L!IgGahGs&TBLlba@MT z2Z`p0PU-SCD&`j2%pLT3$_|TQqwX%CAkR*V%Uwdn!HPLLUcEk^0XYrcYd1Bmp5NWn zy=_4>P2J+HN)ijF zFKK4iZ)*SNaBxeYY)p%|wr$Ib_MVB>E>SH4UF@u!Jt})r+S>hM%Q~GVWK}y~O8RGY zro8v<_q@s9?D#i*FRuDuKfkuV{#*6^=Yrkc-5P1%3fT|z<}#Es+_}M4fMBLrOU7qS z{lsd$w%BN}+?#*~3%(-|t{xh`r9pkS~AVbK9An?;JnAdYH?}AbtG2Ur2a3 zGlPlm;px|fr!y}2dM)7I+O!w-7Bg>bkBVQik5B&$>(c`lxMnqlcAT?#n0Nok%BRjh zR^~2TULIq!_qy)?Bijp~wU}3)KU2iAbzV_S{bLpe6G`+I~z92FI1)U;~#YTukULHA#{ixx8MFI)5hMlPrkHJX@|EkZ68b5b^78UE)_62VhV#Ot9i+mKB#*&7U`C&Xl=x z=T7_28}v&1IfJuFt>mtK`{F!ugEhVu>$UdQzM85qwJy&4;ntsmo_mFsTnazO$mS;Q zlgsI)@ny4A0M8A1mmSOxj+r%BGvwtk1DVTS@CNMT4!CsZ&Y4y5Uu+K`WMGPlVh=>h zJ2;+W;#~KOLF=1KZNtA;u7n-k_R|KlN`xbo> zjn)&fvOoXVD#wZ?#FWWh=frvOAK%|dEoDqIWxD?*-r)54^w*5LSMo1#n<;5@`eO9N z`OoE;maQ}l?Yr0Y$7Va@vf>6UcmGg%2hTX~#D;x#4PCZ@@(HSzmmj~JD%ILn&3ED^ q^Nud%6&vh3kkU7h>3dQ7gZL58w0) Date: Sun, 9 Apr 2023 18:31:33 -0700 Subject: [PATCH 08/12] wow it actually works --- code/game/objects/items/sentient_disease_injector.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 805700a1a6cf..f60897366424 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -12,6 +12,10 @@ resistance_flags = ACID_PROOF slot_flags = ITEM_SLOT_BELT +/obj/item/sentient_disease_injector/Initialize() + . = ..() + update_icon() + /obj/item/sentient_disease_injector/update_icon() . = ..() @@ -35,7 +39,7 @@ ) if(stored_vial.reagents.total_volume > 0) var/mutable_appearance/filling = mutable_appearance(icon,"[icon_state]_reagents") - filling.color = mix_color_from_reagents(reagents.reagent_list) + filling.color = mix_color_from_reagents(stored_vial.reagents.reagent_list) add_overlay(filling) /obj/item/sentient_disease_injector/examine(mob/user) @@ -66,7 +70,7 @@ to_chat(user, span_warning("\The [I] is empty!")) return - if(!length(R.data["viruses"])) + if(!length(R.data) || !length(R.data["viruses"])) to_chat(user, span_warning("\The [src] can't seem to detect any viruses inside \the [I]...")) return @@ -98,7 +102,7 @@ /obj/item/sentient_disease_injector/afterattack(atom/target, mob/user, proximity) - if(!proximity || !icarbon(target)) + if(!proximity || !iscarbon(target)) return ..() if(uses <= 0) @@ -150,7 +154,7 @@ /obj/item/sentient_disease_injector/proc/create_sentient_virus(mob/living/carbon/target,mob/user) var/list/candidates = pollGhostCandidates("Do you wish to be considered for the special role of 'custom sentient disease'?", ROLE_ALIEN, null, ROLE_ALIEN) - if(!candidates.len) + if(!length(candidates)) return FALSE //No candidates. var/mob/dead/observer/selected = pick_n_take(candidates) From 8076e36f95bd125d5f7b3bc872783ed92b3b45ea Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 9 Apr 2023 18:33:53 -0700 Subject: [PATCH 09/12] reorders --- code/game/objects/items/sentient_disease_injector.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index f60897366424..a97bfd4aafe7 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -31,16 +31,16 @@ ) if(stored_vial) + if(stored_vial.reagents.total_volume > 0) + var/mutable_appearance/filling = mutable_appearance(icon,"[icon_state]_reagents") + filling.color = mix_color_from_reagents(stored_vial.reagents.reagent_list) + add_overlay(filling) add_overlay( image( icon = icon, icon_state = "[icon_state]_vial]" ) ) - if(stored_vial.reagents.total_volume > 0) - var/mutable_appearance/filling = mutable_appearance(icon,"[icon_state]_reagents") - filling.color = mix_color_from_reagents(stored_vial.reagents.reagent_list) - add_overlay(filling) /obj/item/sentient_disease_injector/examine(mob/user) . = ..() From 9a2dd600d64e5b5ee6be18cff10b87445fd2bbd1 Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Fri, 14 Apr 2023 05:28:26 -0700 Subject: [PATCH 10/12] Update sentient_disease_injector.dm --- code/game/objects/items/sentient_disease_injector.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index a97bfd4aafe7..2583c0e2b717 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -132,7 +132,8 @@ if(stored_vial && stored_vial.reagents.total_volume) //If there is a stored vial, inject. var/list/injected = list() - for(var/datum/reagent/R as anything in stored_vial.reagents) + for(var/k in stored_vial.reagents) + var/datum/reagent/R = k injected += R.name log_combat(user, C, "attempted to inject", src, "([english_list(injected)])") stored_vial.reagents.reaction(C, INJECT, 1) From 7d772b38d5b6f3a26ca8bd567507368239566fc9 Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Fri, 14 Apr 2023 05:42:03 -0700 Subject: [PATCH 11/12] Update sentient_disease_injector.dm --- code/game/objects/items/sentient_disease_injector.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 2583c0e2b717..1597e1c51787 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -132,8 +132,7 @@ if(stored_vial && stored_vial.reagents.total_volume) //If there is a stored vial, inject. var/list/injected = list() - for(var/k in stored_vial.reagents) - var/datum/reagent/R = k + for(var/datum/reagent/R in stored_vial.reagents.reagent_list as anything) injected += R.name log_combat(user, C, "attempted to inject", src, "([english_list(injected)])") stored_vial.reagents.reaction(C, INJECT, 1) From 3b348cdb2d10e75fd01a1214e1ea9e592b9c8bef Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Fri, 14 Apr 2023 05:43:19 -0700 Subject: [PATCH 12/12] Update sentient_disease_injector.dm --- code/game/objects/items/sentient_disease_injector.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/sentient_disease_injector.dm b/code/game/objects/items/sentient_disease_injector.dm index 1597e1c51787..b3a06026c280 100644 --- a/code/game/objects/items/sentient_disease_injector.dm +++ b/code/game/objects/items/sentient_disease_injector.dm @@ -132,7 +132,7 @@ if(stored_vial && stored_vial.reagents.total_volume) //If there is a stored vial, inject. var/list/injected = list() - for(var/datum/reagent/R in stored_vial.reagents.reagent_list as anything) + for(var/datum/reagent/R as anything in stored_vial.reagents.reagent_list) injected += R.name log_combat(user, C, "attempted to inject", src, "([english_list(injected)])") stored_vial.reagents.reaction(C, INJECT, 1)