## About The Pull Request
This overhauls nearly all aspects related to heart attacks, making them
more urgent and threatening. It also enables the use of defibrillators
for quicker, less invasive treatment of heart attacks.
They are now a status effect instead of a virus, with a fixed countdown
of about two and a half minutes before full stoppage. As this timer
counts down, symptoms steadily escalate from audio cues to suffocation
and dizziness. Through treatment, the countdown can be wound back and
eventually cured (or you can just swap the heart like usual. Boring!!).
### Treatment
Replacing the heart is no longer the *only* option for treatment. Now,
heart attacks can be cured with the use of a defib. Each shock will
rewind the countdown (and symptoms) heavily, curing it after 2-4 zaps in
quick succession. In lieu of a defib, most other shock sources will
work, albeit much less effectively.
So, if you're in security and *really* don't feel like going to medical,
you can just have your fellow officers taze you back to health!

The emergency penthrite given after the attack has a new icon/message,
and is slightly less forgiving. You can still use it to shock yourself
back to life, still being a very risky move.
The heart attack doesn't manifest on medical HUDs immediately. It only
appears after the victim has reached stage 3 for the first time. At
stage 3, it's pretty apparent to both the victim and anyone around that
they're having a heart attack anyways, but until then it will be on the
victim to identify symptoms. Heart attacks will always be reported on
health analyzer scans, shown as the organ failing due to a myocardial
infarction and a tooltip suggesting defibs/other shocks to treat it.
This also adds two tips, for secoffs and medics, on how to treat a heart
attack.
Defibs also now use up charge for restarting a stopped heart, instead of
only when reviving a corpse.
## Why It's Good For The Game
Making heart attacks more of a threat gives way more weight to something
people should be afraid of, but aren't. Heart attacks fail to emulate
anything resembling a heart attack, to the point that it is lame and
dissapointing. They're an annoyance and a trip to the surgery room for
anyone familiar enough with the game. This iteration may be more
dangerous, but it's also more *exciting* (and can be treated faster).
Broadening the ways to treat a heart attack, or just stave off symptoms,
gives an amount of player agency over this threat. It may be more
urgent, but it doesn't mean it has to be a trip to medbay every time.
You can look for other ways to get zapped (security will help if asked,
I promise) or sandbox up your own solution.
Also, treating heart attacks with defib shocks just makes sense. Why do
we have to trash the whole heart? Usually after a heart attack it still
has like, a year or so of juice left before it quits for good.
More threatening heart attacks also further incentivize synthetic hearts
and working out, or any other clever ways of shielding oneself from an
attack (in case you're paranoid like that).
And lastly, the whole reason I started with this PR in the first place
-- I think it is a bit odd having heart attacks be handled as *diseases*
in the code. Status effects make more sense.
## Changelog
🆑 Rhials
balance: Heart attacks are now more violent and urgent. If you can hear
your own heartbeat and are short of breath, you should probably see a
doctor.
balance: Heart attacks can now be treated and eventually cured with
repeated defibrillation shocks.
balance: Heart attacks can now be treated and eventually cured with
repeated shocks from other sources.
/🆑
## About The Pull Request
<details>
- renamed ai folder to announcer
-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer
- separated the ambience folder into ambience and instrumental
-- ambience --
- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it
-- instrumental --
- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)
-- items --
- moved secdeath to hailer
- moved surgery to handling
-- effects --
- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects
-- vehicles --
- moved mecha into vehicles
created mobs folder
-- mobs --
- moved creatures folder into mobs
- moved voice into mobs
renamed creatures to non-humanoids
renamed voice to humanoids
-- non-humanoids--
created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg
-- humanoids --
-- misc --
moved ghostwhisper to misc
moved insane_low_laugh to misc
I give up trying to document this.
</details>
- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc
- [X] mobs
- [X] runtime
- [X] vehicles
- [ ] attributions
## Why It's Good For The Game
This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.
## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
## About The Pull Request
I've stumbled across this enough to finally go through the entire
codebase and fix it. I left out changelogs simply because rewriting
history logs is bad.
## Why It's Good For The Game
I find it pretty annoying because I stumble across words that are
misspelled for a few seconds, and I'm likely not the only one who feels
like this. Less spelling mistakes in code are better.
## Changelog
🆑
spellcheck: Occurrences of "recieve" has been changed to "receive".
/🆑
* Minor typo fixes (#74317)
## About The Why It's Good For The Game Pull Request
Immersion
## Changelog
🆑 Tattle
spellcheck: fixed a few typos, mostly around breathing
/🆑
Co-authored-by: tattle <article.disaster@ gmail.com>
* Minor typo fixes
---------
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@ gmail.com>
## About The Why It's Good For The Game Pull Request
Immersion
## Changelog
🆑 Tattle
spellcheck: fixed a few typos, mostly around breathing
/🆑
Co-authored-by: tattle <article.disaster@gmail.com>
* Grand Ritual: Alternate Wizard objective (Wizard Events II) (#72918)
Adds an alternate greentext objective for Wizards known as the "Grand
Ritual". This was initially the gimmick of a different wizard-related
antagonist downstream. I didn't get permission to port it, so I'm
attaching it to regular Wizards instead.
Wizards will spawn in with a new Grand Ritual button next to their
antagonist info button. Pressing it will pinpoint them towards their
next Ritual Location (a randomly chosen region of the space station).
Once within that location, pressing it will summon a magic circle and
obliterate any dense objects which are in the way. This also puts the
ability on a two minute cooldown.
Clicking on the magic circle with an empty hand will begin a three-stage
invocation to gather magical power. You can interrupt this invocation at
any time and will resume from the last stage you completed (if you
finished two stages you only need to do one more).
Once you complete a ritual, a random event will be triggered based on
how many rituals you have performed so far. These tend to be ones which
annoy the crew in some manner, and Wizard Events are included in the
list. Additionally, something weird will usually happen to the room you
are in.
Then you are assigned a new location and can toddle off to do it again.
Once you have done this three times, you will be picked up by the
station's sensors every time you start a subsequent ritual and should
expect annoyed company to come investigate.
Once you have done this six times, you can finally spend all of that
accumulated power on the seventh Grand Finale ritual. Completing this
grants you victory at the end of the round and will have a larger,
flashier effect which you can pick from a list of options, think of it
like a wizard equivalent of a Traitor Final Objective or Heretic
Ascension.
After that you can still keep doing rituals if you want to pester the
crew further by summoning more random events, you've already "won" at
this point so now it's your job to make them want to go home.
I think it'd be more fun to just find out what the Finale ritual can do
by seeing it happen but maintainers will probably want a list of its
precise capabilities, so here it is:
Currently completing a ritual also has a chance to create Heretic
Reality Tears (of both varieties, available for Heretics to eat and
visible to crew) as a kind of cross-antagonist interaction which seemed
to make sense to me but if this seems thematically or mechanically
inappropriate it's easy to strip out.
* wew
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
Requested by @tralezab
Admin event setups now use a list rather than a single setup. This means
common functionality list setting position and picking an option from a
list can be applied to events that have multiple customizable factors
rather than needing to making entirely overridden subtypes for every
event.
Adds a few new subtypes of event_admin_setup:
- input_number for setting a number value. An example can be found in
the heart attack event.
- set_location for causing an event to occur in a specific location. An
example can be found in the stray cargo pod event.
- question, yes no question that returns true/false. An example of its
usage can be found in immovable rod
- candidate_check, a more niche subtype used to block events that do not
function unless theres a specific number of valid candidates. An example
of its usage can be found in the disease events.
While doing the refactor I also implemented some simple extra options
for some of the refactored events. Classic Disease now has an option for
admins to roll **any** disease rather than just the "safe" ones. And
shuttle catastrophe now allows admins to select which shuttle is used.
## Why It's Good For The Game
Cuts back on duplicate lines of code a lot, should make adding more
customization to events slightly easier. Also more admin customization.
## Changelog
🆑
refactor: Admin event setup's have been refactored to use lists.
fix: When admins customize the pirate event all options will be
available rather than just options that have not been randomly rolled.
fix: The stray meteor event no longer runtimes when customized by
admins.
admin: Admins can now select the shuttle brought in by the shuttle
catastrophe event.
admin: Admins can now randomize the disease outbreak classic event to
roll any disease type, including transformation diseases so have fun
with that.
/🆑
* Disease Outbreak/Heart Attack candidate lists clear themselves before generating (#73596)
## About The Pull Request
When canSpawnEvent is run for the disease outbreak event, it would
generate_candidates() and add whoever was a valid infectee to a list.
Unfortunately, this list would not be cleared until the event was
actually run, meaning the candidate list could become malformed if the
event was cancelled, interrupted, or otherwise stopped before it could
properly start.
Additionally, this issue would arise if the admin setup process was
begun without actually running the event, or if two admins were
attempting to press buttons at the same time.
The list could contain duplicates, or players who were valid candidates
on the first candidacy check, but not at the present moment. The list
now clears itself every time it is generated, meaning that a fresh
candidate list is made every time one is needed.
Since the heart attack event uses the same candidate generating system
as the disease event, the change has been made there as well.
## Why It's Good For The Game
Closes#73552, hopefully? I can't imagine it's an issue with how the
candidates are selected, and am like 99% sure it's just the list getting
fudged somehow.
## Changelog
🆑
fix: The disease outbreak/heart attack event candidate list will now
clear itself before generating.
/🆑
* Disease Outbreak/Heart Attack candidate lists clear themselves before generating
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
## About The Pull Request
When canSpawnEvent is run for the disease outbreak event, it would
generate_candidates() and add whoever was a valid infectee to a list.
Unfortunately, this list would not be cleared until the event was
actually run, meaning the candidate list could become malformed if the
event was cancelled, interrupted, or otherwise stopped before it could
properly start.
Additionally, this issue would arise if the admin setup process was
begun without actually running the event, or if two admins were
attempting to press buttons at the same time.
The list could contain duplicates, or players who were valid candidates
on the first candidacy check, but not at the present moment. The list
now clears itself every time it is generated, meaning that a fresh
candidate list is made every time one is needed.
Since the heart attack event uses the same candidate generating system
as the disease event, the change has been made there as well.
## Why It's Good For The Game
Closes#73552, hopefully? I can't imagine it's an issue with how the
candidates are selected, and am like 99% sure it's just the list getting
fudged somehow.
## Changelog
🆑
fix: The disease outbreak/heart attack event candidate list will now
clear itself before generating.
/🆑
Adds an alternate greentext objective for Wizards known as the "Grand
Ritual". This was initially the gimmick of a different wizard-related
antagonist downstream. I didn't get permission to port it, so I'm
attaching it to regular Wizards instead.
Wizards will spawn in with a new Grand Ritual button next to their
antagonist info button. Pressing it will pinpoint them towards their
next Ritual Location (a randomly chosen region of the space station).
Once within that location, pressing it will summon a magic circle and
obliterate any dense objects which are in the way. This also puts the
ability on a two minute cooldown.
Clicking on the magic circle with an empty hand will begin a three-stage
invocation to gather magical power. You can interrupt this invocation at
any time and will resume from the last stage you completed (if you
finished two stages you only need to do one more).
Once you complete a ritual, a random event will be triggered based on
how many rituals you have performed so far. These tend to be ones which
annoy the crew in some manner, and Wizard Events are included in the
list. Additionally, something weird will usually happen to the room you
are in.
Then you are assigned a new location and can toddle off to do it again.
Once you have done this three times, you will be picked up by the
station's sensors every time you start a subsequent ritual and should
expect annoyed company to come investigate.
Once you have done this six times, you can finally spend all of that
accumulated power on the seventh Grand Finale ritual. Completing this
grants you victory at the end of the round and will have a larger,
flashier effect which you can pick from a list of options, think of it
like a wizard equivalent of a Traitor Final Objective or Heretic
Ascension.
After that you can still keep doing rituals if you want to pester the
crew further by summoning more random events, you've already "won" at
this point so now it's your job to make them want to go home.
I think it'd be more fun to just find out what the Finale ritual can do
by seeing it happen but maintainers will probably want a list of its
precise capabilities, so here it is:
Currently completing a ritual also has a chance to create Heretic
Reality Tears (of both varieties, available for Heretics to eat and
visible to crew) as a kind of cross-antagonist interaction which seemed
to make sense to me but if this seems thematically or mechanically
inappropriate it's easy to strip out.
* Refactors Admin Setups on Forced Events + Refactors Vending Sentience + Refactors Shuttle Loans (#72998)
- [x] TEST EVERYTHING
tested:
- Pirates
- Vending Machines
- Shuttle Catastrophe
- Anomalies
- Immovable Rod
- Sandstorms
- Scrubber Overflow
- Stray Meteor
- Madness
- Department Revolt (Well obviously, it is my super robust code after
all)
- Shuttle Loan
- Mass Hallucination
- Heart Attack
- False Alarm
Disease Outbreak is probably fine aha... It correctly reports that there
are no candidates before aborting.
allow you to let the game decide where previously you had to choose!
I need to refactor and datumize how admins set up special conditions on
forced events, so I did! Now `/datum/event_admin_setup` handles admin
settings, with a few prototypes to make it easier to give events admin
options in the future. This was exhausting and what 90% of the pr is.
The code was so bad I could not datumize the admin part of it so I
cleaned it up, making a lot of things in the event get decided in
`setup()` where they should.
The code was so bad I could not datumize the admin part of it so I
cleaned it up AS WELL, by datumizing the shuttle loans. Should be easier
to add more types in the future, actually kinda stoked.
This is preparation for a tgui change to ForceEvent.ts an admin has
requested. Phew!
🆑
refactor: Refactored a bunch of admin-related event code, hopefully you
won't notice much
admin: ... But you specifically may notice some minor differences. Raw
inputs changed into tgui ones, minor soul removal, etc.
/🆑
* remove override
* merge conflict
* dm update
* merge conflict
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
## About The Pull Request
- [x] TEST EVERYTHING
tested:
- Pirates
- Vending Machines
- Shuttle Catastrophe
- Anomalies
- Immovable Rod
- Sandstorms
- Scrubber Overflow
- Stray Meteor
- Madness
- Department Revolt (Well obviously, it is my super robust code after
all)
- Shuttle Loan
- Mass Hallucination
- Heart Attack
- False Alarm
Disease Outbreak is probably fine aha... It correctly reports that there
are no candidates before aborting.
#### The biggest change you'll notice is that some admin setup questions
allow you to let the game decide where previously you had to choose!
### Refactors Admin Setups on Forced Events
I need to refactor and datumize how admins set up special conditions on
forced events, so I did! Now `/datum/event_admin_setup` handles admin
settings, with a few prototypes to make it easier to give events admin
options in the future. This was exhausting and what 90% of the pr is.
### Refactors Vending Sentience
The code was so bad I could not datumize the admin part of it so I
cleaned it up, making a lot of things in the event get decided in
`setup()` where they should.
### Refactors Shuttle Loans
The code was so bad I could not datumize the admin part of it so I
cleaned it up AS WELL, by datumizing the shuttle loans. Should be easier
to add more types in the future, actually kinda stoked.
## Why It's Good For The Game
This is preparation for a tgui change to ForceEvent.ts an admin has
requested. Phew!
## Changelog
🆑
refactor: Refactored a bunch of admin-related event code, hopefully you
won't notice much
admin: ... But you specifically may notice some minor differences. Raw
inputs changed into tgui ones, minor soul removal, etc.
/🆑
* [NO GBP] Cleans up some round_event_control setup variables in certain events (#70468)
* Choosing admin setup options on certain events will no longer retain the chosen options for future events.
* [NO GBP] Cleans up some round_event_control setup variables in certain events
Co-authored-by: Rhials <Datguy33456@gmail.com>
* Refactors the Heart Attack event. Adds a new related achievement and admin setup. (#70048)
* So, this moves the "candidate" selection into round_event_control and integrates it into part of canspawnevent. The actual selection is part of a new proc, generate_candidates, which was created so that canspawnevent() and admin_setup() (WHICH OVERRIDES CANSPAWNEVENT AND THEREFORE CANDIDATE GENERATION) don't have to share any code.
The heart attack candidates list is passed down from the event control to the round event. This is used for running a second series of checks via attack_heart(), a new proc on the round event.
The heart attack now fires on every tick, until "attacks_left" reaches zero, which is a value inhereted from the round event control (default 1, modifiable in admin setup).
In attack_heart, the victim pick_weight-ed from the victims (formerly candidates) and is checked to see if they'll be spared from their fate for some special reason. This is so that feedback can be given and smugness can be felt over surviving a heart attack. This check was literally the only thing I wanted to implement in this PR and I ended up rewriting most of the entire thing. Wowee.
* Refactors the Heart Attack event. Adds a new related achievement and admin setup.
Co-authored-by: Rhials <Datguy33456@gmail.com>
* So, this moves the "candidate" selection into round_event_control and integrates it into part of canspawnevent. The actual selection is part of a new proc, generate_candidates, which was created so that canspawnevent() and admin_setup() (WHICH OVERRIDES CANSPAWNEVENT AND THEREFORE CANDIDATE GENERATION) don't have to share any code.
The heart attack candidates list is passed down from the event control to the round event. This is used for running a second series of checks via attack_heart(), a new proc on the round event.
The heart attack now fires on every tick, until "attacks_left" reaches zero, which is a value inhereted from the round event control (default 1, modifiable in admin setup).
In attack_heart, the victim pick_weight-ed from the victims (formerly candidates) and is checked to see if they'll be spared from their fate for some special reason. This is so that feedback can be given and smugness can be felt over surviving a heart attack. This check was literally the only thing I wanted to implement in this PR and I ended up rewriting most of the entire thing. Wowee.
About The Pull Request
kép
This PR does the following:
Force event menu uses tgUI.
Arranged events into categories, and added a little description to each. The descriptions appear as tooltips when you hover over the Trigger button.
Rewrote how "Announce to crew?" works. It no longer pops up a panel after the event has been already announced. Instead, the admins select it via a checkbox, and the result is passed through an optional argument.
announceChance's comment is tweaked a bit to reflect how it actually works at the moment.
Moved rpgtitles to wizard events, where it belongs.
Fake Virus and Electric Storms show up to observers, as I believe they are not as common as Space Dust or Camera Failure, and should be cancelable.
Potential issues:
This only solves half of #68408, I don't think admin triggering having a timer and a cancel button is a big issue, as it allows other admins to overrule you if needed, but if i is, I will try to fix it within this PR.
Fixes#68408. Events now spawn immediately, and the the announceChance is overwritten before it begins.
My choices for categories and descriptions might not be the best, feedback would be appreciated.
Why It's Good For The Game
The old spawn menu was completely unorganized, and you could only search using the browser search tool. I believe a built in search bar helps with this issue a bit. I also believe that organizing the events into categories, and adding descriptions will help with newer admins who might not be familiar with all events.
Changelog
cl
refactor: The Force Event UI has been refactored
refactor: Events now have categories and descriptions
refactor: Admin triggered events happen immediately
balance: Fake Virus and Electric Storms are shown to admins, making them cancelable
/cl
Bring _HELPERS/_lists.dm to latest standards by:
-Adding proper documentation and fixing existing one
-Giving vars proper names
-Procs now use snake case as per standard (many files that use those procs will be affected)
* makes some events only work on crewmembers, and some not work on centcom (#52966)
brain trauma, fake virus, and heart attack only work on crewmembers.
mass hallucination and appendicitis don't give the effect/pick to people on centcom, respectively
* makes some events only work on crewmembers, and some not work on centcom
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
brain trauma, fake virus, and heart attack only work on crewmembers.
mass hallucination and appendicitis don't give the effect/pick to people on centcom, respectively
Fixes#41217
cl MrDoomBringer
fix: Events now announce follow-able atoms to ghosts much more reliably
/cl
Implements @ShizCalev's suggestion to just have the event ghost-announce normally, then call a separate ghost announcement for the "atom of interest" as it is created.
Also improves the code for anomalies a bit
cl MrDoomBringer
tweak: Random Events now have a follow link for ghosts!
/cl
Untested, and anomalies are broken right now but that takes like 2 seconds to fix
* Virus antagonist initial commit
* Updated disease code
* Sentient virus improvements
* Renamed /mob/living/var/viruses to diseases, and /mob/living/var/resistances to disease_resistances
* Added sentient virus event
* Renamed VIRUS defines to DISEASE defines
* Fixed bugs in rewritten disease code
* Fixed advanced disease Copy()
* Finalized disease antagonist
* Made cooldown buttons stop processing if they are removed from an owner.
Made sentient disease active sneeze and cough not available if the host is unconscious.
Made sentient disease menu refresh when adaptations are ready or hosts are added or removed.
Made sentient disease following use movement signals instead of fastprocess.
* Added better icons to sentient disease abilities