Skip to content

Pouch, Autoinjector, Smart Refill Tank, Wey-Med Update PR Remake#11357

Open
Puckaboo2 wants to merge 62 commits into
cmss13-devs:masterfrom
Puckaboo2:5uautoinjector
Open

Pouch, Autoinjector, Smart Refill Tank, Wey-Med Update PR Remake#11357
Puckaboo2 wants to merge 62 commits into
cmss13-devs:masterfrom
Puckaboo2:5uautoinjector

Conversation

@Puckaboo2

@Puckaboo2 Puckaboo2 commented Dec 21, 2025

Copy link
Copy Markdown
Contributor

About the pull request

PART ONE: Autoinjectors

  • 1. We now can choose from 5u, up to 15u reagent pouch autoinjectors from Weymed Plus machines.
  • 2. Updates some icons; reagent pouch autoinjectors are the same color as the little overlay on the pouch.
  • 3. Renames autoinjectors in Medilathe.
  • 4. Adds the ability to flush a custom autoinjector by right clicking it and flushing it, right clicking a reagent canister pouch with the autoinjector inside and flushing, or right clicking and flushing it inside a reagent canister pouch with a canister, wherein it will dump its contents and flush the rest that cannot fit.
  • 5. Changes pain-stop and first-aid autoinjector sprites to look more like and behave like refillable one-use autoinjectors but still keeping the 'marine' autoinjector beige style.
  • 6. Reorganizes and renames paths of autoinjectors to better categorize them and know their code function from a glance.
  • 7. Applies the Dexalin+ in emergency autoinjector suggestion in Emergency autoinjectors now contain dexalin #10397
  • 8. Restores the 4 shades autoinjector fills used to have.

PART TWO: POUCHES (Was in #11118)

  • 1. Oxycodone pouches carry a 5u autoinjector, now.
  • 2. Updates some icons; the autoinjector overlay matches the color of the custom reagent autoinjectors.
  • 3. Fixes a misaligned reagent overlay sprite.
  • 4. Adds name, descriptions, icon states, overlays, and limitations to stim pouches.
  • 5. Adds Oxycodone Revival Mix, Surgery Prep Mix, and Damage Mender Mix to vends.
  • 6. Removes Tricordrazine, Bicaridine, and Kelotane pouches.

PART THREE: Tank and Canister Update

  • 1. Fixes Smart Refill Tank does not refill autoinjectors #10916
  • 2. Smart Refill tanks are even smarter, now! It has 6 error dialogues for why it cannot fill an autoinjector.
  • 3. Smart Refill tanks can now refill autoinjectors that are partially filled.
  • 4. Smart Refill tanks recognize pathogen cure autoinjectors and ultrazine autoinjectors.
  • 5. You can now flush a Pressurized Reagent Canister without the need for it to be in the pouch, first.
  • 6. Adds inhand and back sprites for the Pressurized Reagent Canister

PART FOUR MEDI-VENDS

  • 1. Alphabetizes things that were not alphabetized.
  • 2. Adds Epinephrine bottles and epinephrine hyposprays exclusively to Wey-Med vending machines.
  • 3. Adds empty hyposprays.
  • 4. Gives exact reasons for refusing to refill or accept an item for stocking.
  • 5. Gives vials and hyposprays with chemicals initialized into them unique names and descriptions.
  • 6. Ninja adds tricordrazine bottles as refillable.

Explain why it's good for the game

PART ONE

  1. This actually goes in-hand with the changes to reagent pouches; if people want their 15u custom autoinjectors back, they can always purchase one in wey-meds.
  2. Consistency is good. Also, I had not realized the old autoinjectors had 4 shades for their fill sprites, not three. Whoops. Fixed.
  3. At a glance, the new names of the autoinjectors in the medilathe are easier to understand for everybody involved. Unit, autoinjector type, (unitxdose).
  4. I mean, these are special research autoinjectors. Surely, they have some extra sciencey-features, right?
  5. An expended pain-stop or first-aid autoinjector is a little TOO on the nose to identify. Dulled-out color, tip chopped off... It is almost insulting. Instead, I made it look like a single-use autoinjector but it still has an identifiable color on its butt indicating what type it was. Plus, those two autoinjectors were the last two types that did not take advantage of the new reagent overlay system put in place, so... Yeah. Done.
  6. There is an issue with mini tanks that I cannot fix without an inordinate amount of extra, needless code that would take me days to figure out, so this is the alternative.
  7. Reorganizes and renames paths of autoinjectors to better categorize them and know their code function from a glance (tested, successful)
  8. I had not realized the old autoinjectors had 4 shades for their fill sprites, not three. Whoops. Fixed it.

PART TWO

  1. With Oxycodone having less than the standard 30u overdose, I have often seen and experienced accidental overdoses because of somebody having drank a bunch of unga, or somebody sneaking an injector before surgery. I especially feel wasteful injecting 15u every time I need to do a quick surgery while the patient is awake when I could get away with 5u or 10u instead. We can better gauge our doses with these smaller autoinjectors.
  2. Sprite consistency is good.
  3. Uh... Whoops. How did that happen? -whistles innocently- In all seriousness, I have made a lot of mistakes in my PRs and I deeply apologize for not checking and testing enough. I swear that was not an issue when I tested the new reagent pouch fill overlay sprites!
  4. It was impossible to differentiate three pouches that had the same name and the same sprite, so now they have different sprites, colors, descriptions, and limitations on what they can hold. Plus, the pouches could carry ALL types of stimpacks, not just the designated type, so we could exploit that by stuffing 3 redemption stimpacks into the brain or speed stimpack pouch.
  5. Brute Mender Mixes contain TriBiKelo. Classic mix. Oxycodone revival mix eliminates paincrit upon revival, and surgery prep mix prevents patients from dying on the table from the effects of organ damage, especially ruptured lungs that cannot breathe anesthetic.
  6. Nobody uses those. Literally nobody. Not one person complained in CM Discussion when I asked.

PART THREE (Fixes #10916)

  1. Smart Refill tanks were not very smart at all! They could not identify single-use autoinjectors; refilling pain-stop, first-aid, and ez autoinjectors were out of the question. In addition, it only recognized empty autoinjectors that needed refilling. Now, it intelligently differentiates between single-use and three-use autoinjectors AND can partially refill said autoinjectors with the precise amount of chemicals left in the tank.

  2. It's a very smart tank! Now, it has several reasons for refusal:

    1. It recognizes the autoinjector in question must be refilled with a pressurized reagent canister pouch.
    2. It recognizes the autoinjector cannot be refilled by any means and must be disposed of. (You have an emergency autoinjector or a sleep toxin autoinjector.)
    3. It recognizes that the autoinjector's valves are incompatible with the tank. ((It does not accept autoinjectors that contain massive amounts of chemicals or potentially toxic chemicals, like sleep toxin+chloral hydrate.))
    4. The tank knows when it is empty. No chemicals until you fill it with something.
    5. It knows the autoinjector is full, so it refuses to add any more chemicals.
    6. Tank recognizes the autoinjector, but it cannot find enough reagents inside itself to fill it.
  3. It's a smart little tank.

  4. It's a VERY smart little tank. If this is too OP, maybe this can be a research upgrade.

  5. You can flush the canister while it's in the pouch... But not flush the canister by itself? That did not make any sense to me, so I decided to add this feature.

  6. I forgot to add them after I resprited the reagent canister pouches.

PART FOUR MEDI-VENDS

  1. I done alphabetized them before! I must have missed some things.
  2. We can have little a salami as a treat. Also, actually, UPPs cannot refill their Epinephrine bottles and autoinjectors, so they need a place to refill them in the wey-med vends they're provided. Since this is a significant balance change, please offer me alternatives.
  3. What if I DON'T want tricordrazine in my vial when I start out with it?
  4. I always felt bad for smacking the poor machine without knowing exactly why it won't let me interact with it.
  5. The pre-filled vials didn't have a description, nor any indication for what they are used for. Also, you could have an empty hypospray, an epinephrine hypospray, and a tricordrazine hypospray, all with empty vials, with no indicator of which is which unless you try to refill each of them.
  6. Just in case we ever add them.

Testing Photographs and Procedure

Screenshots & Videos

New Reagent Pouch lineup. On the floor is Damage Mend Mix, Oxycodone Revival Mix, and Surgery Prep Mix.
image

Reagent Pouch Autoinjectors in Weymed (Also Epi bottle)
image

New Hyposprays
image

Stimpack pouches
image

Medilathe autoinjector names
image

Slightly modified autoinjector overlay on the pouch
image

Flush autoinjector inside and outside pouch
image
image

Can flush pressurized reagent canister in-hand
image

New pain-stop and first-aid autoinjectors
dreamseeker_2025-11-12_23-50-45

Displays the types of autoinjectors you can use on smart tanks (You could only use regular and EZ bicaridine autoinjectors before, in this example. Now, you can fill one-use autoinjectors like pain-stop/first-aid and one-use EZs.)
dreamseeker_2025-11-12_23-41-30

Changelog

🆑 Puckaboo2
add: Adds 5u, 10u, and 20u reagent pouch autoinjectors. Also adds 5u, 10u, and 15u reagent pouch autoinjectors in Weymed Plus.
add: Adds several new reagent pouches for medics.
add: Adds the ability to flush a custom autoinjector outside and inside a pouch.
balance: Adds 1u Dex+ to emergency autoinjectors. You're welcome!
code: Renamed autoinjectors in the Medilathe to make the names easier to understand.
code: Repaths and sorts autoinjector types to facilitate path and parenting referencing.
del: Replaces tramadol EZ one-use autoinjectors with pain-stop autoinjectors. They do the same thing, and the pain-stops can be refilled.
del: Nukes some pouch options literally nobody uses in the Medbay Clothing Vend
imageadd: Re-sprited pain-stop and first-aid autoinjectors to look like one-use autoinjectors.
imagedel: Removed expended PS and FA autoinjector sprites because they can be refilled.
imagetweak: Tweaked autoinjector, fill sprites, and hypospray to look more detailed.
add: Adds names and sprites to variants of stimpack pouches.
add: All pouches, belts, and attachable storage articles of clothing will tell you how much storage space they have.
balance: The contents of stimpack pouches are limited to their stimpacks in question. (for example, speed stimpack pouches can only hold speed stimpacks)
balance: Oxycodone pouches come with a 5u autoinjector instead of a 15u to decrease the chance of overdosing.
fix: Fixes a misaligned reagent fill sprite for reagent pouches.
fix: You can no longer exploit the redemption stimpack pouch's limitation of 1 storage space by stuffing your redemption stimpacks in the speed or brain stimpack pouch.
imageadd: Adds sprites and overlays for redemption, brain, and speed stimpack pouches.
imagetweak: Re-shaded the autoinjector overlay on the pouch.
add: Smart Refill tanks have 6 complete reasons for refusing to fill an autoinjector.
add: Smart Refill tanks can now recognize autoinjectors that are not fully emptied and try to refill them without wasting chemicals.
add: Smart Refill tanks can now fill pain-stop/first-aid autoinjectors and one-use EZ autoinjectors. As a bonus, it can also fill Ultrazine and pathogen cure autoinjectors.
add: Adds the ability to flush a Pressurized Reagent Canister without the need for it to be in a pouch, first.
fix: Smart Refill tanks can now differentiate between ez/pain-stop/first-aid autoinjectors and standard Wey-Med varieties and fill both kinds without wasting chemicals.
add: Adds empty hyposprays to Wey-Med vending machines.
add: Gives vials and hyposprays with chemicals initialized into them unique names and descriptions.
add: Wey-Meds gives exact reasons for refusing to refill or accept an item for stocking.
balance: Adds Epinephrine bottles and epinephrine hyposprays exclusively to Wey-Med vending machines.
code: Alphabetizes things in Wey-Med.
fix: UPPs can now refill their epinephrine autoinjectors and their epinephrine bottles in their provided Wey-Med machine.
maptweak: Replaces the deleted Tricord reagent pouch on White Andre Research Facility with a Damage-mending pouch.
refactor: Did a thing with single-letter variables here in edited files.
/:cl:

Autoinjector Update
pouch update

Update pouch.dm
Update glass.dm

Update glass.dm

Update glass.dm

Update glass.dm

Update glass.dm
Update medical.dm

Update medical.dm
@github-project-automation github-project-automation Bot moved this to Awaiting Review in Review Backlog Dec 21, 2025
@cmss13-ci cmss13-ci Bot added Sprites Remove the soul from the game. Feature Feature coder badge Balance You need to be a professional veteran game maintainer to comprehend what is being done here. Code Improvement Make the code longer Removal snap Fix Fix one bug, make ten more Refactor Make the code harder to read size/XL Denotes a PR that changes 799-1999 lines, ignoring generated files. labels Dec 21, 2025
@cm13-github cm13-github removed the Merge Conflict PR can't be merged because it touched too much code label Mar 7, 2026
@cm13-github

Copy link
Copy Markdown
Contributor

Conflicts have been resolved. A maintainer will review the pull request shortly.

@cmss13-ci cmss13-ci Bot added size/XXL Denotes a PR that changes 2000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 799-1999 lines, ignoring generated files. labels Mar 8, 2026
Comment on lines +76 to +122
message_to_player("Good. Now, the third type of damage is <b>Oxy</b> damage. Oxy damage, or oxygen deprivation, is an indicator your organs are struggling to receive oxygen, either due to blood loss, heart and lung injuries, or breathing in a low oxygen environment. To simulate this, we're forcing you to hold your breath for a very long time.")
update_objective("Try not to pass out.")
var/mob/living/living_mob = tutorial_mob
living_mob.adjustOxyLoss(85)
addtimer(CALLBACK(src, PROC_REF(oxy_tutorial)), 4 SECONDS)

/datum/tutorial/marine/medical_basic/proc/oxy_tutorial()
message_to_player("<b>Dexalin Plus</b> is a miraculous medication that instantly removes all Oxy damage. Quickly, inject yourself with the <b>dexalin plus EZ autoinjector</b> before you pass out!")
update_objective("Inject yourself with the dexalin plus autoinjector.")
var/obj/item/reagent_container/hypospray/autoinjector/tutorial/dexalinp/oxy_injector = new(loc_from_corner(0, 4))
add_to_tracking_atoms(oxy_injector)
add_highlight(oxy_injector)
RegisterSignal(tutorial_mob, COMSIG_LIVING_HYPOSPRAY_INJECTED, PROC_REF(on_oxy_inject))

/datum/tutorial/marine/medical_basic/proc/on_oxy_inject(datum/source, obj/item/reagent_container/hypospray/injector)
SIGNAL_HANDLER

if(!istype(injector, /obj/item/reagent_container/hypospray/autoinjector/tutorial/dexalinp))
return

UnregisterSignal(tutorial_mob, COMSIG_LIVING_HYPOSPRAY_INJECTED)
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/tutorial/dexalinp, oxy_injector)
remove_highlight(oxy_injector)
message_to_player("Amazing. A breath of fresh air without breathing. ... You can breathe, now. Good. The next type of damage is toxin damage, which accumulates from ingesting or breathing toxic chemicals, overdosing on medicine, drinking too much alcohol, and liver damage.")
update_objective("")
var/mob/living/living_mob = tutorial_mob
living_mob.adjustToxLoss(20)
addtimer(CALLBACK(src, PROC_REF(tox_tutorial)), 4 SECONDS)

/datum/tutorial/marine/medical_basic/proc/tox_tutorial()
message_to_player("<b>Dylovene</b> slowly removes toxin damage over time. Inject yourself with the <b>dylovene EZ autoinjector</b>.")
update_objective("Inject yourself with the dylovene autoinjector.")
var/obj/item/reagent_container/hypospray/autoinjector/tutorial/antitoxin/tox_injector = new(loc_from_corner(0, 4))
add_to_tracking_atoms(tox_injector)
add_highlight(tox_injector)
RegisterSignal(tutorial_mob, COMSIG_LIVING_HYPOSPRAY_INJECTED, PROC_REF(on_tox_inject))

/datum/tutorial/marine/medical_basic/proc/on_tox_inject(datum/source, obj/item/reagent_container/hypospray/injector)
SIGNAL_HANDLER

if(!istype(injector, /obj/item/reagent_container/hypospray/autoinjector/tutorial/antitoxin))
return

UnregisterSignal(tutorial_mob, COMSIG_LIVING_HYPOSPRAY_INJECTED)
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/tutorial/dexalinp, tox_injector)
remove_highlight(tox_injector)
message_to_player("Good. Now, you may have noticed that toxins, in addition to other types of damage, cause <b>pain</b>. Pain slows you down and can knock you out if left unchecked.")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this section of code is not within the scope of this PR, and needs to be atomized into its own

@Puckaboo2 Puckaboo2 Mar 10, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

o/ it will be done... But I can't make a PR for it until this goes though, so...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did it. Pls re-review.

@github-project-automation github-project-automation Bot moved this from Awaiting Review to Changes Requested in Review Backlog Mar 9, 2026
@SpypigDev SpypigDev marked this pull request as draft March 9, 2026 04:35
@cmss13-ci cmss13-ci Bot added size/XL Denotes a PR that changes 799-1999 lines, ignoring generated files. and removed size/XXL Denotes a PR that changes 2000+ lines, ignoring generated files. labels Mar 10, 2026
@Puckaboo2 Puckaboo2 requested a review from SpypigDev March 16, 2026 17:40
@Puckaboo2 Puckaboo2 marked this pull request as ready for review March 17, 2026 05:16
@cm13-github cm13-github added the Merge Conflict PR can't be merged because it touched too much code label Jun 8, 2026
@cm13-github

Copy link
Copy Markdown
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@cm13-github

Copy link
Copy Markdown
Contributor

Conflicts have been resolved. A maintainer will review the pull request shortly.

@cm13-github cm13-github removed the Merge Conflict PR can't be merged because it touched too much code label Jun 10, 2026
@Puckaboo2 Puckaboo2 requested a review from Nanu308 as a code owner June 10, 2026 22:41
@cmss13-ci cmss13-ci Bot added the Mapping did you remember to save in tgm format? label Jun 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Balance You need to be a professional veteran game maintainer to comprehend what is being done here. Code Improvement Make the code longer Feature Feature coder badge Fix Fix one bug, make ten more Mapping did you remember to save in tgm format? Refactor Make the code harder to read Removal snap size/XL Denotes a PR that changes 799-1999 lines, ignoring generated files. Sprites Remove the soul from the game.

Projects

Status: Changes Requested

Development

Successfully merging this pull request may close these issues.

Smart Refill Tank does not refill autoinjectors

3 participants