Files
Bubberstation/code/__DEFINES/alerts.dm
nikothedude ee99d0e5b0 Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/79691

A while back, I made this PR, but lost motivation after diving too deep
into the code soup of can_breathe and related procs. Now, I have removed
those parts, and have simplified that part of the code to the point I
think it's ready for review.

Many reviews from the previous PR have been addressed in this PR.

<hr>

<details>
  <summary>Details</summary>

Asthma is a 4 point negative quirk that emulates real life asthma. It
works by slowly decreasing the amount of pressure each breath you take
receives, until your lungs completely seal, ensuring death if you dont
get oxyloss meds/windpipe surgery.

Inflammation (the tracker for intensity) increases whenever you breathe
smoke, use a cigarette, metabolize histimine, or suffer an asthma
attack.

Asthma attacks have a low chance of happening every second, starting 10
minutes after you spawn and with a 20-30 grace period between attacks.
They are "diseases" that cant be outright cured by albuterol, only put
into remission. They increase inflammation at varying rates depending on
their severity, with extreme asthma attacks being a immediate threat to
your life while mild ones might not even cause inflammation. The
response to these is always the same - use your inhaler before you start
choking.

Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded
with albuterol, which I will get to later.

Albuterol is a new medicine thats a little tricky to make but still
doable. It can be efficiently created with inverse convermol, or
transmutated from salbutamol and convermol. The opposite is true, with
albuterol able to be turned into salbutamol. Two canisters are available
in chemvends.

Upon use, it increases the virtual pressure of all breaths taken by 40%.
This allows for you to breathe in lower pressure environments, as well
as enhancing the effects of things like healium.

It's OD causes your diaphram to spasm, causing sporadic losebreath and
forced breathing.

Inhalers are a fancy new reagent application apparatus that uses the
INHALE reagent bitflag.

Inhalers themselves are rather unremarkable, they are merely the method
of using inhaler canisters (they also have a rotary display
approximating the uses left in a canister - just like real life
inhalers).

Inhaler canisters are the reagent containers, and are generally low
capacity. They can only be used in a inhaler, and contain aerosolized
chemicals.

Inhaler canisters and inhalers are unlocked from chemical synthesis, and
are printable for cheap from a medlathe.

In order to use a inhaler, one must uncover the mouth of a carbon and
wait a few seconds (its faster if its a self-application) before a small
amount of the reagents are delivered via the INHALE bitflag. This only
works on things currently breathing - if theyre dead, have no lungs, or
just, arent breathing - it will fail. This includes asthmatics with 100%
inflammation.

</details>

<img width="181" height="74"
alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521"
src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e"
/>

<img width="1465" height="202"
alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963"
src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667"
/>

Sprites are not mine; they are from swanni and I can NOT sprite for the
life of me
## Why It's Good For The Game

1. Asthma is just cool. One of my favorite features on bay was the fact
lung damage required you to turn up the pressure on your O2 tank to
survive, and this does precisely that.
2. Its always fun to add new ways to interact with atmos as a player
that arent grossly broken, and I fail to see how a 40% increase of gas
intake will really affect balance too badly.
3. Inhalers are badass.
## Changelog
🆑
add: Asthma quirk, based on IRL asthma
add: Inhalers, a new reagent administering method that uses INHALE
add: Albuterol, a new reagent that increases the amount of gas you
inhale by 40%
balance: Inverse convermol now forms once the reaction is done, not on
metabolize
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
# Conflicts:
#	code/datums/quirks/negative_quirks/allergic.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
2025-09-09 23:24:54 -04:00

78 lines
2.3 KiB
Plaintext

/** Atmos related */
#define ALERT_TOO_MUCH_OXYGEN "too_much_oxy"
#define ALERT_NOT_ENOUGH_OXYGEN "not_enough_oxy"
#define ALERT_TOO_MUCH_PLASMA "too_much_plas"
#define ALERT_NOT_ENOUGH_PLASMA "not_enough_plas"
#define ALERT_TOO_MUCH_CO2 "too_much_co2"
#define ALERT_NOT_ENOUGH_CO2 "not_enough_co2"
#define ALERT_TOO_MUCH_N2O "too_much_n2o"
#define ALERT_NOT_ENOUGH_N2O "not_enough_n2o"
#define ALERT_TOO_MUCH_NITRO "too_much_nitro"
#define ALERT_NOT_ENOUGH_NITRO "not_enough_nitro"
#define ALERT_BRONCHODILATION "bronchodilation"
#define ALERT_NOT_ENOUGH_WATER "not_enough_water"
/** Mob related */
#define ALERT_SUCCUMB "succumb"
#define ALERT_BUCKLED "buckled"
#define ALERT_HANDCUFFED "handcuffed"
#define ALERT_LEGCUFFED "legcuffed"
#define ALERT_IRRADIATED "irradiated"
#define ALERT_EMBEDDED_OBJECT "embeddedobject"
#define ALERT_SHOES_KNOT "shoealert"
#define ALERT_RADIOACTIVE_AREA "radioactive_area"
#define ALERT_UNPOSSESS_OBJECT "unpossess_object"
//antag related
#define ALERT_HYPNOSIS "hypnosis"
#define ALERT_MIND_CONTROL "mind_control"
//ethereal alerts
#define ALERT_ETHEREAL_CHARGE "ethereal_charge"
#define ALERT_ETHEREAL_OVERCHARGE "ethereal_overcharge"
/** Alien related */
#define ALERT_XENO_FIRE "alien_fire"
#define ALERT_XENO_PLASMA "alien_plas"
#define ALERT_XENO_NOQUEEN "alien_noqueen"
/** Silicon related */
#define ALERT_NEW_LAW "newlaw"
#define ALERT_CHARGE "charge"
#define ALERT_LOCKED "locked"
#define ALERT_HACKED "hacked"
#define ALERT_HACKING_APC "hackingapc"
/** MODsuit/Mech related */
#define ALERT_MECH_DAMAGE "mech_damage"
/** Food related */
#define ALERT_DISGUST "disgust"
/** Environment related */
#define ALERT_PRESSURE "pressure"
#define ALERT_GRAVITY "gravity"
#define ALERT_FIRE "fire"
#define ALERT_TEMPERATURE "temp"
#define ALERT_TEMPERATURE_HOT "temphot"
#define ALERT_TEMPERATURE_COLD "tempcold"
/** Bitrunning */
#define ALERT_BITRUNNER_CROWBAR "bitrunning_crowbar"
#define ALERT_BITRUNNER_COMPLETED "bitrunning_complete"
#define ALERT_BITRUNNER_INTEGRITY "bitrunning_integrity"
#define ALERT_BITRUNNER_SHUTDOWN "bitrunning_shutdown"
#define ALERT_BITRUNNER_RESET "bitrunning_reset"
#define ALERT_BITRUNNER_THREAT "bitrunning_threat"
#define ALERT_BITRUNNER_BREACH "bitrunning_breach"
#define ALERT_BITRUNNER_GLITCH "bitrunning_glitch"
#define ALERT_SILICON_RECORDING "silicon_recording"