mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-09 07:46:20 +00:00
## 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
118 lines
6.1 KiB
Plaintext
118 lines
6.1 KiB
Plaintext
#define DISEASE_LIMIT 1
|
|
#define VIRUS_SYMPTOM_LIMIT 6
|
|
|
|
//Visibility Flags
|
|
#define HIDDEN_SCANNER (1<<0)
|
|
#define HIDDEN_PANDEMIC (1<<1)
|
|
#define HIDDEN_MEDHUD (1<<2) // BUBBER EDIT ADDITION - DISEASE OUTBREAK UPDATES
|
|
|
|
//Bitfield for Visibility Flags
|
|
DEFINE_BITFIELD(visibility_flags, list(
|
|
"HIDDEN_FROM_ANALYZER" = HIDDEN_SCANNER,
|
|
"HIDDEN_FROM_PANDEMIC" = HIDDEN_PANDEMIC,
|
|
"HIDDEN_FROM_MEDHUD" = HIDDEN_MEDHUD, // BUBBER EDIT ADDITION - DISEASE OUTBREAK UPDATES
|
|
))
|
|
|
|
//Disease Flags
|
|
#define CURABLE (1<<0)
|
|
#define CAN_CARRY (1<<1)
|
|
#define CAN_RESIST (1<<2)
|
|
#define CHRONIC (1<<3)
|
|
/// Instead of instantly curing the disease, cures will simply reduce the stage
|
|
#define INCREMENTAL_CURE (1<<4)
|
|
|
|
//Spread Flags
|
|
#define DISEASE_SPREAD_SPECIAL (1<<0)
|
|
#define DISEASE_SPREAD_NON_CONTAGIOUS (1<<1)
|
|
#define DISEASE_SPREAD_BLOOD (1<<2)
|
|
#define DISEASE_SPREAD_CONTACT_FLUIDS (1<<3)
|
|
#define DISEASE_SPREAD_CONTACT_SKIN (1<<4)
|
|
#define DISEASE_SPREAD_AIRBORNE (1<<5)
|
|
|
|
//Bitfield for Spread Flags
|
|
DEFINE_BITFIELD(spread_flags, list(
|
|
"SPREAD_SPECIAL" = DISEASE_SPREAD_SPECIAL,
|
|
"SPREAD_NON_CONTAGIOUS" = DISEASE_SPREAD_NON_CONTAGIOUS,
|
|
"SPREAD_BLOOD" = DISEASE_SPREAD_BLOOD,
|
|
"SPREAD_FLUIDS" = DISEASE_SPREAD_CONTACT_FLUIDS,
|
|
"SPREAD_SKIN_CONTACT" = DISEASE_SPREAD_CONTACT_SKIN,
|
|
"SPREAD_AIRBORNE" = DISEASE_SPREAD_AIRBORNE,
|
|
))
|
|
|
|
//Severity Defines
|
|
/// Diseases that buff, heal, or at least do nothing at all
|
|
#define DISEASE_SEVERITY_POSITIVE "Positive"
|
|
/// Diseases that may have annoying effects, but nothing disruptive (sneezing)
|
|
#define DISEASE_SEVERITY_NONTHREAT "Harmless"
|
|
/// Diseases that can annoy in concrete ways (dizziness)
|
|
#define DISEASE_SEVERITY_MINOR "Minor"
|
|
/// Diseases that can do minor harm, or severe annoyance (vomit)
|
|
#define DISEASE_SEVERITY_MEDIUM "Medium"
|
|
/// Diseases that can do significant harm, or severe disruption (brainrot)
|
|
#define DISEASE_SEVERITY_HARMFUL "Harmful"
|
|
/// Diseases that can kill or maim if left untreated (flesh eating, blindness)
|
|
#define DISEASE_SEVERITY_DANGEROUS "Dangerous"
|
|
/// Diseases that can quickly kill an unprepared victim (fungal tb, gbs)
|
|
#define DISEASE_SEVERITY_BIOHAZARD "BIOHAZARD"
|
|
/// Diseases that are uncurable (hms)
|
|
#define DISEASE_SEVERITY_UNCURABLE "Uncurable"
|
|
|
|
//Severity Guaranteed Cycles or how long before a disease can potentially self-cure
|
|
/// Positive diseases should not self-cure by themselves, but if they do, they cure fast
|
|
#define DISEASE_CYCLES_POSITIVE 15
|
|
/// Roughly 6 minutes for a harmless virus
|
|
#define DISEASE_CYCLES_NONTHREAT 180
|
|
/// Roughly 5 minutes for a disruptive nuisance virus
|
|
#define DISEASE_CYCLES_MINOR 150
|
|
/// Roughly 4 minutes for a medium virus
|
|
#define DISEASE_CYCLES_MEDIUM 120
|
|
/// Roughly 3 minutes for a dangerous virus
|
|
#define DISEASE_CYCLES_DANGEROUS 90
|
|
/// Roughly 2 minutes for a harmful virus
|
|
#define DISEASE_CYCLES_HARMFUL 60
|
|
/// Roughly 1 minute for a biohazard kill-death-evil-bad virus
|
|
#define DISEASE_CYCLES_BIOHAZARD 30
|
|
|
|
//Natural Immunity/Recovery Balance Levers
|
|
/// Recovery Constant - starting point, 'base' recovery when you get initially infected.
|
|
//// Minimum stage_prob is 1 for most advanced diseases. Don't raise it above that if you don't want those diseases to start naturally curing themselves.
|
|
#define DISEASE_RECOVERY_CONSTANT 0
|
|
/// Recovery Scaling - the divisor of the number of adjusted cycles at max_stages divided by Severity Guaranteed Cycles.
|
|
//// Raise to make over-time scaling more aggressive as you get further away from Severity Guaranteed Cycles.
|
|
//// Basically, once you hit Severity Guaranteed Cycles or equivalent, this will be your flat recovery chance, increasing by 1% for every Severity Guaranteed Cycles/this value cycles. So, if SGC = 30 and this = 3, every 10 cycles should give you another 1% per-cycle chance to recover.
|
|
#define DISEASE_RECOVERY_SCALING 2
|
|
/// Peaked Recovery Multiplier - Once we hit max_stages, multiplicative bonus to recovery scaling.
|
|
//// Adjust to make it faster or slower to cure once the virus has reached its peak.
|
|
#define DISEASE_PEAKED_RECOVERY_MULTIPLIER 1.2
|
|
/// Slowdown Recovery Bonus - set this to the maximum extra chance per tick you want people to get to recover from spaceacillin or other slowdown/virus resistance effects
|
|
#define DISEASE_SLOWDOWN_RECOVERY_BONUS 3
|
|
/// Slowdown Recovery Bonus Duration - set this to the maximum # of cycles you want things that cause slowdown/virus resistance to be able to add a bonus up to DISEASE_SLOWDOWN_RECOVERY_BONUS.
|
|
//// Scales down linearly over time.
|
|
#define DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION 200
|
|
/// Negative Malnutrition Recovery Penalty
|
|
//// Flat penalty to recovery chance if malnourished or starving
|
|
#define DISEASE_MALNUTRITION_RECOVERY_PENALTY 3
|
|
/// Satiety Recovery Multiplier - added chance to recover based on positive satiety
|
|
//// Multiplier of satiety/max_satiety if satiety is positive or zero. Increase to make satiety more valuable, decrease for less.
|
|
#define DISEASE_SATIETY_RECOVERY_MULTIPLIER 3
|
|
/// Good Sleeping Recovery Bonus - additive benefits for various types of good sleep (blanket, bed, darkness, pillows.)
|
|
//// Raise to make each factor add this much chance to recover.
|
|
#define DISEASE_GOOD_SLEEPING_RECOVERY_BONUS 0.6
|
|
/// Sleeping Recovery Multiplier - multiplies ALL recovery chance effects by this amount.
|
|
//// Set to 1 for no effect on recovery chances from sleeping.
|
|
#define DISEASE_SLEEPING_RECOVERY_MULTIPLIER 6
|
|
/// Final Cure Chance Multiplier - multiplies the disease's cure chance to get the probability of moving from stage 1 to a final cure.
|
|
//// Must be greater than zero for diseases to self cure.
|
|
#define DISEASE_FINAL_CURE_CHANCE_MULTIPLIER 6
|
|
/// Symptom Offset Duration - number of cycles over which sleeping/having spaceacillin or a slowdown effect can prevent symptoms appearing
|
|
//// Set to maximum # of cycles you want to be able to offset symptoms. Scales down linearly over time.
|
|
#define DISEASE_SYMPTOM_OFFSET_DURATION 200
|
|
|
|
/// Symptom Frequency Modifier
|
|
//// Raise to make symptoms fire less frequently, lower to make them fire more frequently. Keep at 0 or above.
|
|
#define DISEASE_SYMPTOM_FREQUENCY_MODIFIER 1
|
|
|
|
/// Minimum Chemical Cure Chance
|
|
//// Minimum per-cycle chance we want of being able to cure an advanced disease with the chemicals present.
|
|
#define DISEASE_MINIMUM_CHEMICAL_CURE_CHANCE 5
|