mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-25 06:06:34 +01:00
Merge pull request #5773 from Neerti/identification_system
Adds Identification System, New Autoinjectors
This commit is contained in:
@@ -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)
|
||||
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user