Files
Bubberstation/code/datums/diseases/cold.dm
Time-Green 108880a1e6 Sneeze Rework: Projectile Combat Edition (#83361)
## About The Pull Request
Reworks sneezing. Instead of a range check that checks if you're facing
someone, it is now a skill check


https://github.com/tgstation/tgstation/assets/7501474/c11ffa16-9bd2-4ed1-8022-2094360657bc

All sneezes shoot projectiles, but depends on the virus if they're
infectious. Using the sneeze emote is the only method that doesn't shoot
a sneeze

## Why It's Good For The Game
I think the invisible infection mechanics are unfun. A lot of station
dangers challenge your knowledge and mechanical skill, while viruses are
gotten by being around people in a roleplay game. You can get a round
seriously ruined if you walk past someone with a sneezing virus and
don't immediately rush spaceillin or chemistry, which I don't think is
mechanically interesting.

Now if you get infected, it's a skill issue. Get good and dodge the
sneeze

Note that this is just one method of infection. I didn't touch coughing
and airborne viruses, which do constant area checks and infect everyone
around. I plan to, but not now. I'll probably make coughing do a cone or
something, and ignore the airborne viruses since they can't be modified
and are generally less broken

## Changelog
🆑
balance: You can now dodge sneezes
balance: Infectious simple diseases that use sneezes now infect with
sneezes and have lowered airborn transmission
balance: Damageless attacks, projectiles, hugs etc no longer drain
shields
/🆑

- [x] Make sneezes shoot to your cursor so you can either intentionally
sneeze on people or sneeze away from people if you react fast

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-07 13:40:05 -04:00

52 lines
2.0 KiB
Plaintext

/datum/disease/cold
name = "The Cold"
desc = "If left untreated the subject will contract the flu."
max_stages = 3
cure_text = "Rest & Spaceacillin"
cures = list(/datum/reagent/medicine/spaceacillin)
agent = "XY-rhinovirus"
viable_mobtypes = list(/mob/living/carbon/human)
spreading_modifier = 0.1
spread_text = "Airborne"
severity = DISEASE_SEVERITY_NONTHREAT
required_organ = ORGAN_SLOT_LUNGS
/datum/disease/cold/stage_act(seconds_per_tick, times_fired)
. = ..()
if(!.)
return
switch(stage)
if(2)
if(SPT_PROB(0.5, seconds_per_tick))
affected_mob.infectious_sneeze(src, TRUE)
if(SPT_PROB(0.5, seconds_per_tick))
affected_mob.emote("cough")
if(SPT_PROB(0.5, seconds_per_tick))
to_chat(affected_mob, span_danger("Your throat feels sore."))
if(SPT_PROB(0.5, seconds_per_tick))
to_chat(affected_mob, span_danger("Mucous runs down the back of your throat."))
if((affected_mob.body_position == LYING_DOWN && SPT_PROB(23, seconds_per_tick)) || SPT_PROB(0.025, seconds_per_tick)) //changed FROM prob(10) until sleeping is fixed // Has sleeping been fixed yet?
to_chat(affected_mob, span_notice("You feel better."))
cure()
return FALSE
if(3)
if(SPT_PROB(0.5, seconds_per_tick))
affected_mob.infectious_sneeze(src, TRUE)
if(SPT_PROB(0.5, seconds_per_tick))
affected_mob.emote("cough")
if(SPT_PROB(0.5, seconds_per_tick))
to_chat(affected_mob, span_danger("Your throat feels sore."))
if(SPT_PROB(0.5, seconds_per_tick))
to_chat(affected_mob, span_danger("Mucous runs down the back of your throat."))
if(SPT_PROB(0.25, seconds_per_tick) && !LAZYFIND(affected_mob.disease_resistances, /datum/disease/flu))
var/datum/disease/Flu = new /datum/disease/flu()
affected_mob.ForceContractDisease(Flu, FALSE, TRUE)
cure()
return FALSE
if((affected_mob.body_position == LYING_DOWN && SPT_PROB(12.5, seconds_per_tick)) || SPT_PROB(0.005, seconds_per_tick)) //changed FROM prob(5) until sleeping is fixed
to_chat(affected_mob, span_notice("You feel better."))
cure()
return FALSE