* Refactors abstract traitor objectives to be more abstract and enforces this by using unit tests. Rebalances some traitor objectives (#73777)
## About The Pull Request
In this PR, some of the traitor objectives are rebalanced to be more
consistent with scaling risk.
Abstract traitor objectives have had their telecrystal reward and
progression rewards moved to their non-abstract types and it's now
enforced that abstract objectives should not have these values set.
Additionally, it's encouraged that people don't set progression_minimum
on abstract types either, but I can see the usecase in doing so with
final objectives and assassinate objectives. This is why it's fine to
set progression_minimum on an abstract type as long as any of the
derivatives of that abstract type do not redefine the progression
minimum to avoid consistency errors when tweaking progression minimum
values. Setting the progression minimum on an abstract type means that
all derivatives of that abstract type should be unlocked at roughly the
same time.
## Why It's Good For The Game
The rebalances are so that same risk objectives of different types are
worth around the same amount. Repeatables should roughly award the same
amount of TC when it comes to comparing the risk, but the progression
rewards can vary.
The new standard enforcement on abstract traitor objectives is more so
for robustness and ease of balance, as it's easier to lose consistency
when rebalancing values between two objectives, because one of the
objectives derive their rewards from an abstract type. Generally
speaking, rewards from objectives of different risk level should not be
the same and it's easier to enforce this if developers have to
explicitly declare the rewards of the objectives they add.
This doesn't mean each objective has to declare explicitly what their
reward is. Derivatives that subtype off of non-abstract types can still
copy the rewards from their parent.
The progression minimum is fine to be set on abstract objectives as long
as derivatives don't change the progression minimum. If they do, then
it's better for consistency to declare the progression minimum on each
type rather than the abstract type so that higher-tier objectives don't
accidentally end up with a lower progression minimum when it comes to
rebalancing. Of course, this isn't a set rule on, but it's something I'm
going to try and enforce, when it makes sense, going forward, even if it
may increase the number of lines of code each traitor objective file may
have. Maintainability and robustness beat optimization.
## Changelog
🆑
code: Abstract types don't hold telecrystal rewards or progression
rewards anymore, this has been moved to the non-abstract types.
balance: Rebalances rewards from repeatable traitor objectives to be
more consistent with each other.
/🆑
---------
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Refactors abstract traitor objectives to be more abstract and enforces this by using unit tests. Rebalances some traitor objectives
---------
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Fixes russian fugitive hunter to_chats, adds missing one for bounty hunters (#73826)
## About The Pull Request
Upon taking a fugitive spawner, you were SUPPOSED to receive a quick
lore blurb to help get you into character, or something. This only
worked for the spacepol hunters, however, as the to_chat's for the
Russian spawner would send to the user's antag datum rather than their
chat, and the bounty hunters were missing theirs entirely.
## Why It's Good For The Game
Reading and text is really good for your eyes and brain.
## Changelog
🆑 Rhials
spellcheck: Fixes the Russian/Bounty Hunter fugitive hunter spawn
backstory messages.
/🆑
* Fixes russian fugitive hunter to_chats, adds missing one for bounty hunters
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
* Fixes pirates and starfury assailants transferring minds (#73833)
## About The Pull Request
Same issue as before, these skipped the spawn step and snowflaked their
own creation process.
So I split off the create part of attack ghost so these could share.
Fixes#73823 , may fix also #73822 but I don't *think* it will, whatever
changed spawners a few months ago is a little sus
## Why It's Good For The Game
Changeling pirate bad
## Changelog
🆑 Melbert
fix: Fixes pirates and starfury assailants keeping minds of past lives
/🆑
* Fixes pirates and starfury assailants transferring minds
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes heirloom objective deduplication (#73793)
## About The Pull Request
When looking for duplicate objectives, removed the currently targeted
heirloom items from the list of possible targets, resulting in an
unchanged list. I chose to store the mind of the heirloom's owner, to
solve this, and try to remove those from the possible targets.
## Why It's Good For The Game
Fixes#70925. Can't get the same objective active at the same time for
free TC and Rep.
## Changelog
🆑
fix: You can no longer have multiple copies of the same heirloom theft
objective
/🆑
* Fixes heirloom objective deduplication
---------
Co-authored-by: Profakos <profakos@gmail.com>
* The chief engineer can now appear as a kidnap target, fixes kidnapping time period limit component (#73759)
## About The Pull Request
CE was missing from the list of kidnappable people, so I have added
them.
I have looked over the original PR, but could not find any reasoning why
they were not included, so it must have been an oversight, but I have
marked this as balance because I could have also added prisoners,
another missing job, but decided not to, because it would be rather
difficult, and a prison break should be a separate objective.
I have also organized the kidnap lists' job department sections and the
jobs inside them alphabetically.
I have also noticed, that the kidnap objectives signed up for the
incorrect `/datum/component/traitor_objective_limit_per_time`. It was
trying to make sure you have not taken 3 assassinate objectives in the
last 15 minutes while generating, instead of three kidnaps.
## Why It's Good For The Game
No reason why the CE should be excluded from being kidnapped. After all
they should know more secrets than an average engineer.
## Changelog
🆑
balance: the syndicate realized Chief Engineer is important enough to
kidnap
fix: kidnap objectives will now properly be unavailable for you for 15
minutes after you take three, instead of after you take three
assassinations.
/🆑
* The chief engineer can now appear as a kidnap target, fixes kidnapping time period limit component
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Fixes all antag datum moodlets being removed when any single antag datum is removed (#73305)
## About The Pull Request
All antag datums operated under the `antag_moodlet` mood category, which
is clearly an issue when you can (and commonly) have multiple antag
datums of different types on your mob.
New antag datums of different type will now no longer override older
antag datum moodlets, now they will stack. This means traitor
revolutionaries are the most zealous folk on the station.
This has a few potential oversights down the line:
- Someone adds an antag datum players can have duplicates of, and also
has a moodlet associated
- Re-used moodlets in antag datums that can easily be stacked will be
noticed
- Most solo antags used `focused` right now, but none can stack outside
of admemes
But I don't think it's an issue for now.
## Why It's Good For The Game
Prevents a quick revolution from stripping you of your joy.
Fixes#67313
## Changelog
🆑 Melbert
fix: Revolutionary Heretics and Cultists Traitors no longer lose all of
their joy in life after being de-converted from their respective causes.
/🆑
* Fixes all antag datum moodlets being removed when any single antag datum is removed
* fix
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
* Refactors the Nuclear Authentication Disk's Lone Op Behavior Into a Component, + Examine Message (#73453)
## About The Pull Request
### Refactor
Turns all the behavior for the nuke disk raising lone op probability
when unsecured into a new component, the "Keep Me Secure" component. As
an example (and really, I made it to test that the component was
actually working), there is a new admin plush called the "whiny plushie"
that will change icon depending on whether it is secure or not. Useful!
### Examine
I also added an examine message. Will explain below
## Why It's Good For The Game
The examine message was really what this entire pr's purpose was really
for.
>
[Capsandi](https://tgstation13.org/phpBB/memberlist.php?mode=viewprofile&u=7767)
wrote:
[↑](https://tgstation13.org/phpBB/viewtopic.php?p=665827#p665827)Wed Feb
15, 2023 2:42 pm
Someone needs to pr some sort of indicator as to whether the disk is
'secure' or not so players who don't know about the niche lone op
mechanic won't make the same intuitive assumption (though swat has been
trolled for putting it in the safe before).
I agree with this for the same reasons I did #73016 so I'll restate the
point with it here: A piece of banning a captain recently was that they
didn't secure the disk, but there is no indication in game that the disk
has special condiitons that trigger lone op, just that it should be kept
safe (which yeah, nuke ops want it). I'd rather remove the ambiguity of
a captain knowing this mechanic or not for the sake of the game, a
single examine for it is harmless
I'm considering this administration, not a feature. If maints want me to
take it out and have this be refactor only, that's fine with me
## Changelog
🆑
refactor: Refactors how nuclear activation disk works. Shouldn't notice
a whole lot but if you do, it might be because of this.
admin: Disk now has an examine message for whether it's secure or not,
to make it less ambiguous for players.
/🆑
* Refactors the Nuclear Authentication Disk's Lone Op Behavior Into a Component, + Examine Message
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Fixes an issue with nightmare revival, Unit tests some fully heal stuff (#73612)
## About The Pull Request
- Same issue as Ethereals. Owner was `null`ed because the heart was
recreated. I opted for a more permanent solution, that being introducing
a new flag to avoid recreating organs.
- Adds some unit tests for fully heal stuff to make sure it works.
## Why It's Good For The Game
More cases of revival working as expected
## Changelog
🆑 Melbert
fix: Nightmare revival acts less funky - stops it from re-creating the
Light Eater.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixes an issue with nightmare revival, Unit tests some fully heal stuff
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Medical/Security records now use the max/min age.
* merge conflict
* Refactors crew records (#72725)
I have attempted or otherwise started this project at least 4 times. I
am sick of it being on my calendar. The code needs it. I need it.
- This makes crew records a proper datum rather than assigning
properties record.fields.
- General, medical, and security records are merged.
- Did some slight refactoring here and there for things that looked
obvious.
- Wanted states are now defined (and you can suspect someone through
sechud)
- pAI (unrelated but annoying) had some poorly named exported types that
i made more specific
- Job icons are moved back to the JS side (I wanted to get icons for
initial rank without passing trim)
<details>
<summary>previews</summary>
Editable fields & security console

Medical records

Look and feel of the more current version

</details>
TGUI'd some of the worst UIs in the game.
Creating new records is made much simpler.
Manifest_inject is made readable.
Probably bug fixes
🆑
refactor: Crew records have been refactored.
refactor: Medical records -> TGUI
refactor: Security records -> TGUI
refactor: Warrants console -> TGUI
qol: Players are now alerted when their fines are paid off.
qol: Cleaned up sec hud examination text.
qol: Adding and deleting crimes is easier.
qol: Writing crimes in the console sets players to arrest.
qol: You can now mark someone as a suspect through sec hud.
/🆑
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* I've got something that now actually works
Just got to incorporate the records into what players can actually see.
* Turns out that client has already been transferred after all
* Adds the past records in the TGUI records (they're kinda ugly but it works, so y'know)
* Whoops
* Hate you too sometimes Prettier
* Fixes ghost roles using LITERAL records, which caused problems
* Fixes the leaks caused by ghost roles not getting their name right because of the stupid freaking special() proc
* I hate list operations man they're so stupid
* Fixes the stars on the crew manifest!
---------
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Adds required template keys to some midround rulesets, fixes midround nuclear operative leaders from spawning on arrivals (#73620)
## About The Pull Request
`/datum/antagonist/nukeop/leader/move_to_spawnpoint()` overrides
`/datum/antagonist/nukeop/move_to_spawnpoint()`, which is responsible
for calling `SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)`
Nuke op leaders also get created first thing, so they always got sent to
arrivals
`move_to_spawnpoint` now is not overridden by anything, location is now
obtained though `get_spawnpoint`
But this doesn't solve the entire issue! Seemed like there was a race
condition in that, on nukie team creation, it looked for the nuke to
generate the nuke code. But it created the team before creating the nuke
(and template). So it runtimed and broke, no nukies.
So I had to go deeper.
Rulesets have this list, `ruleset_lazy_templates`, that none of the
midround rulesets used. CC @ ZephyrTFA on this, but it seemed like it
caused a few issues related to lazyloading by missing them?
I added the keys to abductor and nukies. and also ninja even though
it'll probably never be used
I also also made the kidnapping objective for traitors pre-emptively
load the holding facility on objective *taken*, rather than waiting for
the exact moment which the victim is kidnapped.
(Should) Fix#72248
## Why It's Good For The Game
LATE FOR WORK
## Changelog
🆑 Melbert
fix: Nuke Ops Leaders midround don't spawn on Arrivals Shuttle late for
work
fix: (Maybe) fixes some additional issues related to midround nukie /
abductor spawns
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Adds required template keys to some midround rulesets, fixes midround nuclear operative leaders from spawning on arrivals
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Paradox Plasmamen won't immediately burn to death (#73567)
## About The Pull Request
Fixes#73376
The orignal code was _always_ equipping a human outfit and then
sometimes trying to equip a plasmaman outfit over the top.
The second outfit would ignore any slots occupied by the first, meaning
you wouldn't actually end up with an envirosuit.
Also it was activating the internals in the wrong hand, so I fixed that
for good measure.
## Why It's Good For The Game
Spawning a burning, dead skeleton in the maintenance tunnels isn't an
efficient use of the round's threat budget.
## Changelog
🆑
fix: The paradox clones of plasmamen now come properly dressed for the
occasion.
/🆑
* Paradox Plasmamen won't immediately burn to death
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
[NEW GHOST ANTAG] The Paradox Clone (#71141)

[DESIGN DOC]
https://hackmd.io/@tGKknGe5Q7qtddEspif79g/BJ3w9QLri/edit
Bluespace technology has destabilized the very fabric of reality, even
time itself!
Sometimes during a shift, it's possible for a PARADOX CLONE to spawn
somewhere on the station (usually maintenance). This paradox clone has
the exact appearance and DNA as a random crew member on the station,
wearing the same clothes they were at the start of the shift, including
their ID.
To maintain timeline coherency, the paradox clone must now hunt down and
kill the original and take their place or die trying, if the original
survives they have failed.
The only thing the paradox clone spawns with is a mechanical toolbox
that helps them from being stuck in maints if their ID doesn't have
maints access.
The inclusion of this antag encourages good crew coordination and adds a
less destructive, more personalized antag to the roster.
This antag rewards good detective work, as both the clone and the
original are identical in every way, and will therefore require a
detective to break out their detective skills to figure out who the
clone is.
Also a possible tie-in with the Chrono Legionnaires in the future.
🆑
add: Time and space has destabilized even further due to Nanotrasen
bluespace research, now, on occasion, clones from different timelines
can appear on the station and hunt you down to maintain timeline
stability! Beware the Paradox Clone!
/🆑
---------
Co-authored-by: 1bw0kopy <xz2rbf23@protonmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
(cherry picked from commit 214174874c)
Co-authored-by: Shadyyy66 <114319683+Shadyyy66@users.noreply.github.com>
* Fixes broken holy water flask looking like a broken beer bottle (#73504)
Adds new inhand sprites for the broken holy flask, fixes broken holy water flask looking like a broken beer bottle and unholy flasks now use a blackened holy flask inhand sprite instead of the beaker one.
* Fixes broken holy water flask looking like a broken beer bottle
---------
Co-authored-by: Bloop <vinylspiders@gmail.com>
Moves malf ai files into the correct folder, away from traitor (#73078)
Moves and renames Malf_Modules.dm and module_picker.dm into the malf ai
folder and gives them better names.
Usually I wouldn't just make a pr moving files because that's just
cringe but these were in the traitor file despite malf ai no longer
having anything to do with traitor and what the fuck is that malf
modules name
Not player facing
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Fixes Disease Outbreak: Advanced [NO GBP] (#73358)
## About The Pull Request
- Corrects severity thresholds for med/harmful/dangerous
- Removes tier 1 cures from cure pool
- Dangerous/Biohazard disease correctly show up on HUD at spawn
- RNG actually listens to what severity the symptoms are supposed to be
- Fixes various symptoms that were in the wrong severity list
- Disease is now assigned illness name based on its highest severity
component
- Converts old code to snake_case
## Why It's Good For The Game
Disease Outbreak works as expected, both on random spawn or admin custom
disease creation. Ensures that diseases that are harmful or potential
for quick spread are visible to scanners and HUDs.
## Changelog
🆑 LT3
code: Disease Outbreak: Disease max severity replaced with requested
severity
code: Disease Outbreak: Generated disease now includes symptom based
name
code: Disease Outbreak: Disease name is now included in the station
announcement
code: Disease Outbreak: Now in snake case
balance: Disease Outbreak: Tier 1 cures removed from pool
fix: Disease Outbreak: Dangerous/Biohazard diseases are now visible
fix: Disease Outbreak: Event setup generates the correct severity
fix: Disease Outbreak: Various potential symptoms were in the wrong
symptom pool
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixes Disease Outbreak: Advanced [NO GBP]
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Makes used up eyesnatchers actually be used up (#73429)
## About The Pull Request
After you use an eyesnatcher, the `used` var is set to True, which
changes the item state to a "used" sprite, and the description is
updated with "it has been used up.", and yet, it can be used infinitely.
This PR fixes that.
## Why It's Good For The Game
This honestly feels like an oversight in the original PR.
## Changelog
🆑
fix: eyesnatchers that say that they haven been used up can't be used
again
/🆑
* Makes used up eyesnatchers actually be used up
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Optimizes Hostile Station Lockdown (#73351)
## About The Pull Request
This thing iterated over all airlocks (no `as anything`), invoked an
async call to bolt / shock / close, then added a timer. With no tick
check. What a disaster! Like over 100 timers.
- Adds `as anything` to the loops
- Adds a tick check
- Instead of adding a timer to every door, one timer is set to reset all
doors after the time expires
## Why It's Good For The Game
Server doesn't freeze momentarily after a malf AI presses the door
button
## Changelog
🆑 Melbert
code: Hostile Station Lockdown, from Malfunctioning AIs, will no longer
halt the server momentarily
/🆑
* Optimizes Hostile Station Lockdown
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* AI Turrets Upgrade Now Actually Increases Health, Fully Repairs, And Gives EMP Proofing (#73111)
## About The Pull Request
Malf AI Turret upgrades now fully heal, increase max health, and set
non-lethal projectile to taze instead of disable.
## Why It's Good For The Game
https://youtu.be/uk_wUT1CvWM?t=7
WELCOME TO THE AI SAT GENTLEMEN
I WILL NOT LIE. THE CHANCES OF YOUR SURVIVAL ARE SMALL. SOME MAY EVEN
TURN AGAINST YOUR FRIENDS AS LIVING CYBORGS. BUT YOU HAVE MY WORD, THAT
I WILL USE MY TANK TRANSFER VALVE TO ENSURE YOUR BODIES ARE GIVEN UNTO
THE CENTCOM REMEMBRANCE TOMB. THIS IS THE GREATEST REWARD, MORE THAN
EVEN THE GOLD ACCESS CARD, FOR THE FATE OF YOUR SPESS SOUL IS AN ETERNAL
CONCERN. NOW COME. FOLLOW ME. STRIKE DOWN THE AI THAT RISE AGAINST US.
ALLOW ME TO FIND THIS MALFUNCTIONING BITCH.
I ASK NOT FOR MY OWN SELFISH SURVIVAL, BUT FOR THE GOOD OF NANOTRASEN.
The AI sat is a little too easy to attack right now, and the turret
upgrade is OK but not great without a stunning tool.
## Changelog
🆑
balance: Malf AI turret upgrades are now much stronger, fully healing,
increasing max health, and setting stun projectiles to taze.
/🆑
* AI Turrets Upgrade Now Actually Increases Health, Fully Repairs, And Gives EMP Proofing
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Adds the Ectoplasmic Outburst, a rare ghost-centric anomaly event (#73024)
## About The Pull Request
This PR description might be a bit rushed because I accidentally
submitted the PR and want to bang out a quick explanation of what this
is before people start asking questions.
Adds a new, rare, ghost-themed anomaly event -- The Ectoplasmic
Outburst.

This event increases in power as more ghosts orbit it, with three
important thresholds to meet.
If 10% or more of all active observers are orbiting the anomaly, an
effect will occur in the nearby area akin to the revenant's defile
spell, damaging flooring, windows, and making a mess.
If 35% or more are orbiting the anomaly, nearby objects in the effect
radius have a chance to become haunted, and will fling themselves at
anyone nearby for a bit. Spooky!
Now, at 50% or more participation, things get serious. Ghosts orbiting
the anomaly will be polled to be brought back into the world for a brief
period as a vengeful spirit, anchored to a SUPER spooky ghost portal.
The portal closes after two minutes (alternatively, smash it with a
toolbox) and deletes all of the ghosts it spawned. Vengeful spirits are
mostly just meant to smash stuff and be a nuisance while they can. It's
a wonderful opportunity to let deadchat desalinate a little.

Oh, also, the anomaly is deadchat controlled. With enough ghosts, you
could theoretically outrun anyone trying to neutralize it!
The associated reactive armor has an effect similar to the anomaly,
haunting nearby objects for a time when the wearer is struck. Not
particularly outstanding, but it can introduce an element of chaos into
a fight that your opponent might not expect.
## Why It's Good For The Game
Anomaly events are great for ghosts. Why not make one tailored just for
them!
Gives admins something to spawn when a wizard has killed half of the
crew but it's not quiiiite time for an ERT.
It's a bit of a silly event with a novelty reward, but I think it's rare
enough not to be a huge issue.
## Changelog
🆑 Rhials
add: Ectoplasmic Outburst anomaly event
add: Reactive Ectoplasm Armor
/🆑
* Adds the Ectoplasmic Outburst, a rare ghost-centric anomaly event
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* 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>
* Adds two new Sanguine spells to expand the splattercasting set: Exsanguinating Strike and Scream For Me! (#73019)
Adds two new spells. These are "Sanguine" school spells, which means
they do not interact with splattercasting. This is good for
splattercasting wizards, because they can use these spells to gain back
blood without losing the blood casting them.
Sanguine Strike
Empowers your next melee attack to deal more damage (either double or
+20, whichever is less), lifesteal for that amount, and steal 50 blood
from your target.
Scream For Me
Touch attack that applies severe blood wounds on every limb of your
target. Yeah, they're going to be dead shortly after.
Splattercasting is a super unique way to play wizard and I think people
are pretty warm to it, but without enough support for getting more blood
back the most common way these people are dying is simply to blood loss.
This should help them replenish blood a bit easier than feasting on
someone, while still leaving feasting as a good option for a LOT of
blood back.
* Adds two new Sanguine spells to expand the splattercasting set: Exsanguinating Strike and Scream For Me!
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Returns limited stock for traitor discounts (#72981)
While checking old PRs to debug something (someone bought 5 crab phones,
this might have been fixed by a recent PR though), I have discovered
that before progression traitor has been added, Traitor discounts used
to have a limited stock of one per item. However, right now it is
infinite. I have asked @Watermelon914 to look over my findings, and they
agreed that it must have been an oversight. I have restored the original
value.
If the current state of discounts turned out to be more desirable, or on
further investigation this turns out to be not an oversight, I can close
this.
Further proofs: #22429 added discounts, they meant to be one time
purchase.
Being able to buy ten syndie bombs for 2 TC each was probably not
intended, nor is creating General Beepsky at such a big fraction of the
intended cost, or buying two clown cars at round start amount of TC, or
handing out 10 ebows or sleeping carp scrolls.
Unintended mass purchasing of items feels more like an exploit than a
fun gimmick.
🆑
fix: Traitors discounts stocks are once again limited to one item
/🆑
* Returns limited stock for traitor discounts (#72981)
While checking old PRs to debug something (someone bought 5 crab phones,
this might have been fixed by a recent PR though), I have discovered
that before progression traitor has been added, Traitor discounts used
to have a limited stock of one per item. However, right now it is
infinite. I have asked @Watermelon914 to look over my findings, and they
agreed that it must have been an oversight. I have restored the original
value.
If the current state of discounts turned out to be more desirable, or on
further investigation this turns out to be not an oversight, I can close
this.
Further proofs: #22429 added discounts, they meant to be one time
purchase.
Being able to buy ten syndie bombs for 2 TC each was probably not
intended, nor is creating General Beepsky at such a big fraction of the
intended cost, or buying two clown cars at round start amount of TC, or
handing out 10 ebows or sleeping carp scrolls.
Unintended mass purchasing of items feels more like an exploit than a
fun gimmick.
🆑
fix: Traitors discounts stocks are once again limited to one item
/🆑
* Returns limited stock for traitor discounts (#72981)
While checking old PRs to debug something (someone bought 5 crab phones,
this might have been fixed by a recent PR though), I have discovered
that before progression traitor has been added, Traitor discounts used
to have a limited stock of one per item. However, right now it is
infinite. I have asked @Watermelon914 to look over my findings, and they
agreed that it must have been an oversight. I have restored the original
value.
If the current state of discounts turned out to be more desirable, or on
further investigation this turns out to be not an oversight, I can close
this.
Further proofs: #22429 added discounts, they meant to be one time
purchase.
Being able to buy ten syndie bombs for 2 TC each was probably not
intended, nor is creating General Beepsky at such a big fraction of the
intended cost, or buying two clown cars at round start amount of TC, or
handing out 10 ebows or sleeping carp scrolls.
Unintended mass purchasing of items feels more like an exploit than a
fun gimmick.
🆑
fix: Traitors discounts stocks are once again limited to one item
/🆑
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Fix a merge skew on armor datums (#72909)
And also add a check grep to find it in the future
* fix linters
* damn youuuu
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Fixes plasmamen dying from liver damage when consuming plasma & other organic toxins, fixes plasma fixation for plasmamen and other species (#72644)
## About The Pull Request
(edited for brevity---AS BEST I COULD, this turned into a lot more fixes
than I set out to do)
Instead of actually removing and metabolizing plasma in the liver,
plasmamen were having plasma removed in a special handle_chemicals proc.
The issue with this is that the liver's on_life proc would still fire
off alongside it, detecting reagents in the mob (because
handle_chemicals removes them little by little, at the same rate as the
liver does). And because the liver code sees it as a toxin, it takes
damage until it fails, leading to death as described in #72229.
Not actually metabolizing plasma also led to another issue, as mentioned
in #61424.
The solution after much faffing around ended up being to move the actual
reagent removal from handle_chemicals to the liver code, and to compare
a toxin's affected_organtype to the liver's 'status' var to check if the
toxin can damage the liver. There was currently only an ORGAN_ORGANIC
and ORGAN_ROBOTIC defined for this, so I added ORGAN_MINERAL for plasma
livers.
It still works as before, but now the reagent will actually get all the
metabolism procs called on it and be removed by the liver. And mobs with
mineral livers (currently only plasmamen) do not suffer organ failure
from processing organic toxins.
Plasma fixation itself also needed some TLC, as it was likely written
before liver damage was a thing. A lot of this comes down to rogue
livers operating independently of their species now that I think about
it...
Fixed it so you no longer take liver damage from injected/consumed
plasma when under the effects of the stage 4+ virus by making use of the
new PLASMA_LOVER_METABOLISM liver trait.
---
On top of that made it so that breathing in plasma through internals
also contributes to plasma fixation healing. This is a slight buff to
virology (especially for plasmamen) but it didn't seem busted or
anything from my testing. Can lead to some interesting subtle approaches
to healing for virologists as they can use internals rather than just
flooding rooms with plasma...
Some notes:
- due to the way lungs are coded, non-plasma breathing species take a
significant amount of tox damage from breathing plasma through internals
in most cases and still need the right gas to be present so as to not
asphyxiate.
- During my testing this damage did not get healed fast enough to make
it viable for humans to wear plasma internals as found in spawned tanks
and such.
- I did not play around with creating custom internals mixes of O2 and
plasma but in theory that could possibly allow humans to heal faster
than the tox damage is applied. I think the tox damage on breath is
based on the amount of mols in the tank so perhaps a small amount of
plasma in the mix could work.
- As it stands the heal is very slight at 4kpa which is the typical tank
pressure for plasma internals. Going up to 15kpa can result in a
stronger heal (on par with injecting plasma) but going further offers no
additional benefit, and internals will be consumed much more quickly.
- This heal bonus is multiplicative with the rest, but from my testing
it still stays within reasonable numbers even with all 3 sources going
at once so as to not feel broken.
- Plasma fixation does not heal organ damage, but if I could add that in
easily enough should it be wanted.
The numbers themselves can be easily tweaked if desired, should people
find it too strong or what have you!
## Why It's Good For The Game
Fixes#72229Fixes#61424Fixes#70460 --not sure if this PR fixed it but I was able to infect
monkeys and plasmamen with a virus containing Inorganic Biology in my
testing, so this may be closed
Plasmamen dying from plasma is a travesty and reparations must be made.
## Changelog
🆑
fix: plasmamen no longer can suffer liver failure from injecting
themselves with plasma (unless they have a human liver for some reason).
fix: a person who is infected with a plasma fixation disease can no
longer can suffer liver failure from injecting themselves with plasma.
fix: plasmamen no longer can suffer liver failure from consuming other
organic toxins, which they are not supposed to be affected by.
fix: plasma fixation heal-through-inject-or-consumption now works for
plasmamen by letting the metabolism procs take care of removing it from
their systems.
fix: hot ice now has the same wound-healing and nontoxic properties as
plasma to plasmamen, since it is described as "frozen plasma". It is
also nontoxic to plasma fixation virus sufferers.
fix: plasma breathed through internals now contributes to the healing
amount from plasma fixation.
/🆑
Co-authored-by: Bloop <vinylspiders@gmail.com>
* STAY IN THE LIGHT: Adds terrify Nightmare spell, terrified status effect, and a reason to mind the shadows (#72282)
Adds the Terrify spell, and its associated status effect, Terrified.
This new spell is given to antagonist nightmares, as a part of their
brain. The spell only works in those surrounded by darkness, and will
apply the Terrified status effect if successful. Upon being Terrified,
victims will passively gain **Terror Buildup** if they remain in the
dark. As buildup increases, so do the negative effects, including tunnel
vision, panic attacks, dizziness, and more.
There are two primary methods for mitigating terror buildup. The first
is moving into the light, which will reverse the passive terror buildup
and eventually make it go away. The other method is by getting a hug
from a friendly hand, which will reduce buildup significantly.
Getting a hug from an UNfriendly hand (a nightmare, for instance) will
cause the victim to freak out and be briefly knocked down. This can be
spammed on targets who are caught alone in the dark, keeping them in an
unfavorable position (sideways) and adding to the victim's terror
buildup considerably. Escape into the light as soon as possible, or
you'll be pushed to MAXIMUM TERROR BUILDUP.
To what end? Heart failure. Past the soft terror cap (which limits how
much passively generated terror you can make) exists the hard terror
cap. Bypassing that threshold will cause a stress induced heart attack
and knock you unconscious (embarrassing!)
* STAY IN THE LIGHT: Adds terrify Nightmare spell, terrified status effect, and a reason to mind the shadows
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Converts blindness and nearsightedness to status effects, scratches some VERY dumb blindness handling that resulted in mobs becoming "incurably" blind
* Fixes the conflicts and makes shit compile!
* Fixes other things that didn't show up because I hadn't updated
* Fixes the lints.
* Okay NOW it's ready (please don't add anything else that touches blindness I beg you)
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* sending a message with telepathy (or an abductor gadget or prayer response) now gives your target a balloon alert (#73087)
## About The Pull Request
revenant telepathy, genetic telepathy, eldritch telepathy, and split
personality communing now give the person you're sending a message to a
balloon alert to get them to check their chat window
EDIT: also added prayer responses, abductor messaging, and abductor mind
control to this list
EDIT: also added additional feedback for antimagic blocking telepathy
and tinfoil blocking abductor mind control
EDIT: also changed the telepathy reception message to more closely
resemble the prayer response one (they're still not identical, though)



I tested the prayer stuff too, you'll just have to trust me on that one.
## Why It's Good For The Game
fixes https://github.com/tgstation/tgstation/issues/73031
## Changelog
🆑 ATHATH
qol: Revenant telepathy, genetic telepathy, eldritch telepathy, split
personality communing, prayer responses, abductor-to-abductee messaging,
and abductor mind control now give the person you're sending a message
to a balloon alert to get them to check their chat window.
qol: Failing to send a telepathic message and failing to use abductor
mind control on someone now gives better feedback.
tweak: The telepath-ee notification message has been slightly altered.
/🆑
* sending a message with telepathy (or an abductor gadget or prayer response) now gives your target a balloon alert
---------
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
[NO GBP] Lazy Template Cordoning | Double Runtime Fix (#72709)
## About The Pull Request
Adds automatic cordoning to block reservations.
Also fixes an issue where ChangeTurf would cause SSicon_smoothing to
throw runtimes by calling QUEUE_SMOOTH regardless of initialization
completion
## Why It's Good For The Game
## Changelog
---------
Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Renames ling_aler.ogg to ling_alert.ogg (#73114)
## About The Pull Request
Noticed this typo in #72162, but it got closed for being a meme PR and I
forgot to make a separate one that fixes it. I'm pretty sure this sound
only shows up in the instances I've changed, but let me know if any
instances were missed.
## Why It's Good For The Game
Fixes a typo!!
## Changelog
🆑
spellcheck: Fixes a typo in the changeling alert stinger filename.
/🆑
* Renames ling_aler.ogg to ling_alert.ogg
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
Spellchecks a lot of Heretic stuff (#72995)
## About The Pull Request
Heretic is awesome, but I've always noticed a lot of grammar and
spelling mistakes in a lot of its descriptions and explanations, which I
feel detract from the otherwise very high quality feeling of heretic.
ps. I've never touched tgUI before and it gave me a bunch of unrelated
errors while working on some minor fixes in the main heretic screen,
while compiling fine. Tell me if I did a bad, thanks!
## Why It's Good For The Game
Fixes a bunch of small errors and changes wording around in some cases
to be, in my opinion, clearer in meaning.
## Changelog
🆑
spellcheck: Heretic has received a minor grammar and spelling check
over. Wrong kind of heresy, there.
/🆑
Co-authored-by: Unit2E <41054578+Unit2E@users.noreply.github.com>
Co-authored-by: Unit2E <ccupbestcup@protonmail.com>
* adds atmospheric gloves, small resprite of firefighter gear, repaths stupid glove paths (#72736)
repaths a lot of gloves off /color because they were incredibly stupid
firefighter gear has gotten an update (it doesnt cover hands anymore
though, you need something else)
firefighter helmets no longer hide your mask or glasses

fixed engine goggles starting with darkness vision
to the atmos lockers adds atmospheric gloves, a pair of thick (chunky
fingers) gloves that are fireproof and fire protective, slightly shock
resistant and let you fireman carry people faster.
atmospheric firefighter helmets now are a subtype of welding hardhats,
you can enable a welding visor.
welding hardhats change mode with right click instead of altclick
im not a good spriter but i think this resprite makes them fit nicer
with other engi equipment
lets me firefighter rp
🆑
add: Atmospheric Gloves, thick gloves that are fully fireproof and fire
protective and let you fireman carry people faster.
fix: fixes engine goggles starting with darkness vision
qol: firefighter helmets can now enable a welding visor
qol: welding hardhats change mode with right click instead of altclick
balance: firesuits no longer protect your hands
/🆑
* Makes shit compile
* Updates the digi and snouted stuff to match the new sprites (thanks Halcyon!)
* Fixes a whole ton more issues that popped up
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>