Files
Batrachophreno db452842bf Greimorian Egg Cluster Implantation Refactor (#21554)
Fixes https://github.com/Aurorastation/Aurora.3/issues/21509

**Summary:**
Cleans up a lot of old Greimorian egg implantation code- rewrote the
actual worker injection behavior to use the organ/internal/parasite code
we have, instead of creating effects with their loc set to the organ
itself.

This largely means that not only is Greimorian implantation able to be
treated pharmaceutically (as you'd expect, with them being parasitic and
medicine including antiparasitics), but it also means that 'greimorian
eggs' also get the same treatment as nerve flukes, etc. That is to say,
antags can now purchase Greimorian Clade Kits from the uplink and inject
people or monkeys with them to cause Unhappy Tidings.

This code is also fairly easy to modify, if one wanted to create more
implantable parasites that burst out of people, unrelated to
Greimorians.

**Changes:**
- refactor: "Refactors the egg injection of Greimorian Workers to use
parasite code; it can now be treated with anti-parasitic medicines in
addition to amputation of the affected limb. Works on all playable
species, and monkeys."
- rscadd: "New reagent 'Greimorian Eggs' creates an egg cluster parasite
in a random organ when metabolized in the bloodstream. It also has very
mild soporific effects."
- balance: "Greimorian Workers and playable Greimorian Servants/Queen
now inject Greimorian Eggs instead of Soporific."
- rscadd: "Greimorian Clade Kit now available in Uplink under Bioweapons
section (Greimorians now able to be introduced to ship by egg cluster or
injectable reagent)."
- balance: "All parasite kit bioweapons have had their vial reagent
count increased from 2 -> 5."
- balance: "Helmizole no longer treats K'ois Mycosis, Black K'ois
Mycosis, Zombification, or Tumors (Benign or Malignant)."
  - code_imp: "Updates a lot of code documentation to dmdocs."
2025-12-02 10:53:54 +00:00

187 lines
7.1 KiB
Plaintext

//Let's get some REAL contraband stuff in here. Because come on, getting brigged for LIPSTICK is no fun.
//Illicit drugs~
/obj/item/storage/pill_bottle/happy
name = "bottle of Happy pills"
desc = "Highly illegal drug. When you want to see the rainbow."
starts_with = list(/obj/item/reagent_containers/pill/happy = 7)
/obj/item/storage/pill_bottle/zoom
name = "bottle of Zoom pills"
desc = "Highly illegal drug. Trade brain for speed."
starts_with = list(/obj/item/reagent_containers/pill/zoom = 7)
/obj/item/storage/pill_bottle/joy
name = "bottle of Joy pills"
desc = "Highly illegal drug. Bang - and your stress is gone."
starts_with = list(/obj/item/reagent_containers/pill/joy = 3)
/obj/item/storage/pill_bottle/heroin
name = "bottle of heroin pills"
desc = "Highly illegal drug. For quick pain removal."
starts_with = list(/obj/item/reagent_containers/pill/heroin = 3)
/obj/item/storage/pill_bottle/cocaine
name = "bottle of cocaine tablets"
desc = "Supposedly a highly illegal drug... yet the labeling on the bottle is suspiciously perfect..."
starts_with = list(/obj/item/reagent_containers/pill/cocaine = 5)
/obj/item/storage/pill_bottle/contemplus
name = "bottle of Contemplus tablets"
desc = "A Yomi Genetics bottle clearly marked as 'for animal testing only.' You doubt this is followed often on Venus..."
starts_with = list(/obj/item/reagent_containers/pill/contemplus = 5)
/obj/item/storage/pill_bottle/spotlight
name = "bottle of Spotlight tablets"
desc = "A Zavodskoi bottle with a conspicuous 'defective' stamp on it. You doubt this was actually defective."
starts_with = list(/obj/item/reagent_containers/pill/spotlight = 5)
/obj/item/storage/pill_bottle/sparkle
name = "bottle of Sparkle tablets"
desc = "A Zeng-Hu bottle clearly marked as being for 'medical testing purposes only.' As if..."
starts_with = list(/obj/item/reagent_containers/pill/sparkle = 5)
/obj/item/storage/pill_bottle/smart
name = "bottle of Smart pills"
desc = "Highly illegal drug. For exam season."
starts_with = list(/obj/item/reagent_containers/pill/skrell_nootropic = 7)
/obj/item/reagent_containers/glass/beaker/vial/random
atom_flags = 0
var/list/random_reagent_list = list(list(/singleton/reagent/water = 15) = 1, list(/singleton/reagent/spacecleaner = 15) = 1)
/obj/item/reagent_containers/glass/beaker/vial/random/toxin
random_reagent_list = list(
list(/singleton/reagent/drugs/mindbreaker = 10, /singleton/reagent/drugs/mms = 20) = 3,
list(/singleton/reagent/mercury = 15) = 3,
list(/singleton/reagent/toxin/carpotoxin = 15) = 2,
list(/singleton/reagent/drugs/impedrezene = 15) = 2,
list(/singleton/reagent/toxin/dextrotoxin = 10) = 1,
list(/singleton/reagent/toxin/spectrocybin = 15) = 1,
list(/singleton/reagent/drugs/joy = 10, /singleton/reagent/water = 20) = 1,
list(/singleton/reagent/toxin/berserk = 10) = 1,
list(/singleton/reagent/ammonia = 15) = 3)
/obj/item/reagent_containers/glass/beaker/vial/random/Initialize()
. = ..()
if(is_open_container())
atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
var/list/picked_reagents = pickweight(random_reagent_list)
for(var/reagent in picked_reagents)
reagents.add_reagent(reagent, picked_reagents[reagent])
var/list/names = new
for(var/_R in reagents.reagent_volumes)
var/singleton/reagent/R = GET_SINGLETON(_R)
names += R.name
desc = "Contains [english_list(names)]."
update_icon()
/obj/item/reagent_containers/glass/beaker/vial/venenum
atom_flags = 0
/obj/item/reagent_containers/glass/beaker/vial/venenum/Initialize()
. = ..()
if(is_open_container())
atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
reagents.add_reagent(/singleton/reagent/venenum,volume)
desc = "Contains venenum."
update_icon()
/obj/item/reagent_containers/glass/beaker/vial/nerveworm_eggs
atom_flags = 0
/obj/item/reagent_containers/glass/beaker/vial/nerveworm_eggs/Initialize()
. = ..()
if(is_open_container())
atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
reagents.add_reagent(/singleton/reagent/toxin/nerveworm_eggs, 5)
desc = "<b>BIOHAZARDOUS! - Nerve Fluke eggs.</b> Purchased from <i>SciSupply Eridani</i>, recently incorporated into <i>Zeng-Hu Pharmaceuticals' Keiretsu</i>!"
update_icon()
/obj/item/reagent_containers/glass/beaker/vial/heartworm_eggs
atom_flags = 0
/obj/item/reagent_containers/glass/beaker/vial/heartworm_eggs/Initialize()
. = ..()
if(is_open_container())
atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
reagents.add_reagent(/singleton/reagent/toxin/heartworm_eggs, 5)
desc = "<b>BIOHAZARDOUS! - Heart Fluke eggs.</b> Purchased from <i>SciSupply Eridani</i>, recently incorporated into <i>Zeng-Hu Pharmaceuticals' Keiretsu</i>!"
update_icon()
/obj/item/reagent_containers/glass/beaker/vial/greimorian_eggs
atom_flags = 0
/obj/item/reagent_containers/glass/beaker/vial/greimorian_eggs/Initialize()
. = ..()
if(is_open_container())
atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
reagents.add_reagent(/singleton/reagent/toxin/greimorian_eggs, 5)
desc = "<b>BIOHAZARDOUS! - Greimorian eggs.</b> Purchased from <i>SciSupply Eridani</i>, recently incorporated into <i>Zeng-Hu Pharmaceuticals' Keiretsu</i>!"
update_icon()
/obj/item/reagent_containers/powder
name = "chemical powder"
desc = "A powdered form of... something."
icon = 'icons/obj/chemical.dmi'
icon_state = "powder"
item_state = "powder"
amount_per_transfer_from_this = 5
possible_transfer_amounts = 5
w_class = WEIGHT_CLASS_TINY
volume = 50
/obj/item/reagent_containers/powder/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(reagents)
. += SPAN_NOTICE("There's about <b>[reagents.total_volume] unit\s</b> here.")
/obj/item/reagent_containers/powder/Initialize()
. = ..()
get_appearance()
/obj/item/reagent_containers/powder/proc/get_appearance()
/// Color based on dominant reagent.
color = reagents.get_color()
// Proc to shove them up your nose
/obj/item/reagent_containers/powder/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/paper/cig) || attacking_item.type == /obj/item/spacecash)
var/mob/living/carbon/human/H = user
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
to_chat(user, SPAN_WARNING("\The [blocked] is in the way!"))
return TRUE
if(!H.check_has_mouth())
to_chat(user, SPAN_WARNING("You cannot seem to snort \the [src]."))
return TRUE
user.visible_message(
SPAN_WARNING("\The [user] starts to snort some of \the [src] with \a [attacking_item]!"),
SPAN_NOTICE("You start to snort some of \the [src] with \the [attacking_item]!")
)
playsound(loc, 'sound/effects/snort.ogg', 50, 1)
if (!do_after(user, 2 SECONDS))
return TRUE
user.visible_message(
SPAN_WARNING("\The [user] snorts some of \the [src] with \a [attacking_item]!"),
SPAN_NOTICE("You snort \the [src] with \the [attacking_item]!")
)
playsound(loc, 'sound/effects/snort.ogg', 50, 1)
if(reagents)
var/contained = reagentlist()
var/temp = reagents.get_temperature()
var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_BREATHE, bypass_checks = TRUE)
admin_inject_log(user, H, src, contained, temp, trans)
if(!reagents.total_volume)
qdel(src)
return TRUE
return ..()