Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vomitting now empties your stomach #6527

Closed
wants to merge 9 commits into from

Conversation

blackdragonTOW
Copy link
Contributor

@blackdragonTOW blackdragonTOW commented Jun 22, 2024

About the pull request

After much fun talking to a medic about inducing vomiting to remove toxins/pills I figured this might be a fun addition.

  • Vomiting now removes 30% of whatever is in your stomach
  • PROPERTY_EMETIC now has use
  • Emetic's vomit chance was very low for a chemically induced trigger
  • Created a pill packet, pill, and reagent for Ipicac
  • Added the pill packet to WeyYu Med vendors

Explain why it's good for the game

This allows players to deal with ingested chems rapidly at the cost of getting rid of ALL of the chems ingested and the imbiber not having a great time as they eject whatever is in them.

Testing Photographs and Procedure

Screenshots & Videos

Put screenshots and videos here with an empty line between the screenshots and the <details> tags.

Changelog

🆑
add: Ipicac Pills
code: Vomiting now removes 30% of everything in the users system
imageadd: added Ipicac Pills
/:cl:

@github-actions github-actions bot added Sprites Remove the soul from the game. Feature Feature coder badge Code Improvement Make the code longer labels Jun 22, 2024
@blackdragonTOW
Copy link
Contributor Author

I'm stupid

@blackdragonTOW
Copy link
Contributor Author

Still learning source control. :C

@@ -894,9 +894,14 @@
if(istype(location, /turf))
location.add_vomit_floor(src, 1)

if(reagents.reagent_list.len)
Copy link
Contributor

Choose a reason for hiding this comment

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

length(), not .len

Copy link
Contributor Author

Choose a reason for hiding this comment

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

if(reagents.reagent_list.length())

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sorry, if(length(reagents.reagent_list))

My javascript background comes back to haunt me.

@@ -894,9 +894,14 @@
if(istype(location, /turf))
location.add_vomit_floor(src, 1)

if(reagents.reagent_list.len)
var/purge_percent = 0.7 //30%
Copy link
Contributor

Choose a reason for hiding this comment

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

what's the point of making this a local var if you're using it nowhere else but line 900

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Originally I was just exposing vars for ease of seeing what value was being used (I thought I needed three, but over time managed to whittle it down to one) I'll just set line 900 to * 0.7

@@ -894,9 +894,14 @@
if(istype(location, /turf))
location.add_vomit_floor(src, 1)

if(reagents.reagent_list.len)
var/purge_percent = 0.7 //30%
for(var/datum/reagent/ingested_chem in reagents.reagent_list)
Copy link
Contributor

Choose a reason for hiding this comment

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

as anything

Copy link
Contributor Author

Choose a reason for hiding this comment

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

	for(var/datum/reagent/ingested_chem as anything in reagents.reagent_list)

@@ -411,3 +411,12 @@
custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS)
data = 0
properties = list(PROPERTY_CURING = 2)

/datum/reagent/medical/ipicac
Copy link
Contributor

Choose a reason for hiding this comment

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

Isn't it Ipecac

Copy link
Contributor Author

Choose a reason for hiding this comment

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

...........yes

@BeagleGaming1 BeagleGaming1 added Balance You need to be a professional veteran game maintainer to comprehend what is being done here. and removed Code Improvement Make the code longer labels Jun 23, 2024
@@ -894,9 +894,13 @@
if(istype(location, /turf))
location.add_vomit_floor(src, 1)

if(length(reagents.reagent_list))
for(var/datum/reagent/ingested_chem as anything in reagents.reagent_list)
ingested_chem.volume = (ingested_chem.volume * 0.7)
Copy link
Contributor

Choose a reason for hiding this comment

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

This behavior of removing chems in your stomach needs to set a cooldown of something like I dunno 15 minutes or so. Doesn't need to restrict the act of vomiting nor the stun associated, but just "You heave but your stomach is empty" or something along those lines.

Effectively what this is imitating is that chems that haven't entered your bloodstream yet you can eject from your stomach without going so far as tracking the age of each reagent in the body.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This behavior of removing chems in your stomach needs to set a cooldown of something like I dunno 15 minutes or so. Doesn't need to restrict the act of vomiting nor the stun associated, but just "You heave but your stomach is empty" or something along those lines.

Effectively what this is imitating is that chems that haven't entered your bloodstream yet you can eject from your stomach without going so far as tracking the age of each reagent in the body.

That's what the percentage does in this case. It's impossible to vomit the "entirety" of whatever is in you. The larger the volume (and thus, technically a more "recently ingested" chem) the more you'll purge, the smaller values however will remove even less as say if you had 16u of a chem, even 6 vomit cycles (a very long time in this case) would reduce that number down to 2u. (200u of something though very clearly loses a lot more than that on the first purge)

Regardless, the percentage based system specifically works to target higher volume (and again: thus more recent) items in the system rather than long sitting, smaller value chems. I feel the curve that comes with 30% to be smartly applied in this case and would ask a reconsideration on a cooldown as I don't think anyone is willing to wait 15 minutes to actually use this potential avenue for the sake of vomitting twice (and there would be no reasonable way to express to the player that the 15min interval was up and their next puke will be another "good" one)

Copy link
Contributor

@Drulikar Drulikar Jun 23, 2024

Choose a reason for hiding this comment

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

Those are the requested changes. Merely having a percentage means nothing. Simply ingest lots of some harmless reagent to work around it. Its per reagent so this doesn't apply, but doesn't change my position. The alternative is to have a more in depth tracking of whether reagents would be new enough to still reside in the stomach.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Aight well, that's way off theme and a 15 minute timer makes the entire feature useless. GG I guess.

Copy link
Contributor

Choose a reason for hiding this comment

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

All this ultimately is conveying stomach emptiness so this can't be abused. Behaves the same in real life. You can only vomit so much before there's nothing to vomit.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I guess what you mean but the timer inherent to vomit() and the random draw already means that you're naturally going to be spending 30s-50s between purges. Asking for a 900s cooldown just means that people will naturally metabolize 90u (rate @ .1 per sec) of whatever is in their system which baring a laughably horrible OD where you've ingested 200u of Bica somehow, this would never affect them. Subjecting yourself to uncontrollable stuns for a couple minutes should have a tangible reward on the other end of it, especially since the best case for this is for OD control. I don't see a world where OD control can really be abused in any capacity as being OD'd never conveys any benefits, and thus you undergo a slightly less bad outcome to not have to deal with a worse outcome. It's an emergency stopgap. The alternative is getting connected to the blood cleaner device which has zero downsides and takes seconds to purge -everything- from your system. The bonus here is that you don't have to go back to FOB, the trade off being that you're going to be screwed for two minutes while you wait (time that could have been spent going to FOB)

Regardless, I'll close this out as it's not going to be considered.

Copy link
Contributor

@Drulikar Drulikar Jun 23, 2024

Choose a reason for hiding this comment

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

I don't know how you got the notion that I was just outright denying what you intended to do. I just requested that using this substance to evoke vomiting needs to be something that can only be done sparingly, so to simulate how you actually need contents in your stomach but we don't actually simulate stomach contents getting absorbed, to just put the positive effect of it on a cooldown.

I see this as a in-field way to deal with an overdose. I would want it to be an inferior solution to hemodialysis. But this shouldn't be a tool that can just be used freely. It should only be used in an emergency like with an overdose.

Copy link
Contributor

Choose a reason for hiding this comment

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

If your concern was that with a cooldown like this then the 30% is too small of an effect, sure then make it 50% or something. I wasn't even hard on how long the time needed to be but IMO I think 15 mins is probably too short. Someone shouldn't be having to deal with ODs that quickly.

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. Feature Feature coder badge Sprites Remove the soul from the game.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants