Merge pull request #5773 from Neerti/identification_system

Adds Identification System, New Autoinjectors
This commit is contained in:
Neerti
2018-12-14 21:06:06 -06:00
committed by Anewbe
parent d5b0840feb
commit 68d3406898
21 changed files with 751 additions and 95 deletions
+10 -7
View File
@@ -410,25 +410,28 @@ HALOGEN COUNTER - Radcount on mobs
var/details = 0
var/recent_fail = 0
/obj/item/device/reagent_scanner/afterattack(obj/O, mob/user as mob, proximity)
/obj/item/device/reagent_scanner/afterattack(obj/O, mob/living/user, proximity)
if(!proximity || user.stat || !istype(O))
return
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
if(!istype(user))
return
if(!isnull(O.reagents))
if(!(O.flags & OPENCONTAINER)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors.
to_chat(user, span("warning", "\The [O] is sealed, and cannot be scanned by \the [src] until unsealed."))
return
var/dat = ""
if(O.reagents.reagent_list.len > 0)
var/one_percent = O.reagents.total_volume / 100
for (var/datum/reagent/R in O.reagents.reagent_list)
dat += "\n \t <span class='notice'>[R][details ? ": [R.volume / one_percent]%" : ""]</span>"
dat += "\n \t " + span("notice", "[R][details ? ": [R.volume / one_percent]%" : ""]")
if(dat)
to_chat(user, "<span class='notice'>Chemicals found: [dat]</span>")
to_chat(user, span("notice", "Chemicals found: [dat]"))
else
to_chat(user, "<span class='notice'>No active chemical agents found in [O].</span>")
to_chat(user, span("notice", "No active chemical agents found in [O]."))
else
to_chat(user, "<span class='notice'>No significant chemical agents found in [O].</span>")
to_chat(user, span("notice", "No significant chemical agents found in [O]."))
return
@@ -0,0 +1,149 @@
/*
Semi-randomized loot for PoIs involving medicine.
Note that most of these include both 'good' and 'bad' results, with the bad results often being
much more likely to show up. This is done for several purposes;
* A large influx of valuable medicine makes medical/SAR less needed for explorers, which is something we want to avoid.
* Blindly using autoinjectors should be risky, and to accomplish that, it needs to be more likely to get a bad effect.
* A large amount of bad loot helps make the good loot feel better to acquire.
*/
// This one makes a purely random hypo. Not recommended for PoIs since it will produce nonsensical results for a PoI's theme.
// It's more of a thing to help pick specific hypos for the other lists.
/obj/random/unidentified_medicine
name = "unidentified medicine"
desc = "This will make a random hypo."
icon = 'icons/obj/syringe.dmi'
item_state = "hypo"
/obj/random/unidentified_medicine/item_to_spawn()
return pick(
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/space_drugs/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified)
// Produces things you might find in an old medicine cabinet in a PoI.
// Old cabinets are typical of ruins and abandoned buildings in the plains, meaning they're usually easier to reach, and as such, inferior loot.
/obj/random/unidentified_medicine/old_medicine/item_to_spawn()
// 30 Good, 70 Bad. 30% to get something good.
// Poor odds, but these are fairly easy to reach as they're in abandoned areas.
return pick(
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified,
prob(65);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified)
// Medicine belonging to a place still being occupied (or was recently), meaning the goods might still be fresh, and better.
/obj/random/unidentified_medicine/fresh_medicine/item_to_spawn()
// More likely to get something good, and a chance to get rare medicines.
// 75 Good, 25 Bad. 75% chance of getting something good.
// Good odds, but the contents aren't super great unless someone gets lucky.
return pick(
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed/unidentified,
prob(25);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified)
// For military PoIs like BSD. High odds of good loot since those PoIs are really hard.
/obj/random/unidentified_medicine/combat_medicine/item_to_spawn()
// More likely to get something good, and a chance to get rare medicines.
// 75 Good, 30 Bad, roughly 71.4% chance to get something good.
// Very high but very hard to reach and still has a chance of ending poorly if injecting blind.
return pick(
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed/unidentified,
prob(30);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified,
prob(30);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified)
// Hyposprays found inside various illicit places.
/obj/random/unidentified_medicine/drug_den/item_to_spawn()
// Combat stims are common, but so are nasty drugs.
// 65 Good, 160 Bad, roughly 28.8% to get something good.
// Poor odds, but there are a lot of these scattered in the drug dens and illegal chem labs.
return pick(
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed/unidentified,
prob(40);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/space_drugs/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified)
// Medicine made FOR SCIENCE.
/obj/random/unidentified_medicine/scientific/item_to_spawn()
// Potential for amazing loot, also potential for very nasty consequences if injecting blind.
// 45 Good, 45 Bad, 50% chance to get something good.
// Do you feel lucky?
return pick(
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified,
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified)
// Nanomachines, son. Found in very advanced places such as the Crashed UFO.
/obj/random/unidentified_medicine/nanites/item_to_spawn()
// You better identify this if you value your life.
// 30 Good, 70 Bad. 30% of getting a good outcome.
return pick(
prob(30);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified,
prob(70);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified)
// Found in virus-related areas like the Quarantined Shuttle.
/obj/random/unidentified_medicine/viral/item_to_spawn()
// Another one where's its important to identify the hypo.
// 30 Good, 70 Bad. 30% of getting a good outcome.
return pick(
prob(30);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified,
prob(40);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified,
prob(10);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified)
+25 -1
View File
@@ -911,4 +911,28 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/borg/upgrade/tasercooler,
/obj/item/borg/upgrade/syndicate,
/obj/item/borg/upgrade/vtec
)
)
// Contains old mediciation, most of it unidentified and has a good chance of being useless.
/obj/structure/loot_pile/surface/medicine_cabinet
name = "abandoned medicine cabinet"
desc = "An old cabinet, it might still have something of use inside."
icon_state = "medicine_cabinet"
density = FALSE
chance_uncommon = 0
chance_rare = 0
common_loot = list(
/obj/random/unidentified_medicine/old_medicine
)
// Like the above but has way better odds, in exchange for being in a place still inhabited (or was recently).
/obj/structure/loot_pile/surface/medicine_cabinet/fresh
name = "medicine cabinet"
desc = "A cabinet designed to hold medicine, it might still have something of use inside."
icon_state = "medicine_cabinet"
density = FALSE
common_loot = list(
/obj/random/unidentified_medicine/fresh_medicine
)