* 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 an issue with multiz visholders duplicating (#73835)
## About The Pull Request
I think the inherent issue here has to do with turf refs or something,
but the big problem was I assumed if there was only once source, then
the turf must be new. This was an invalid assumption, since we can add
sources more then once, and | is used
Because of this, each time a shuttle moved, we'd add an extra source for
no reason, and stack extra vis holders. This lead to really bad
clientside lag on some out of repo maps, which is how this issue came to
my attention.
Instead checking if the sources list exists or not solves the problem
pretty handily, so let's do that.
## Why It's Good For The Game
Closes#73834, prevents a potential future OOM
* Fixes an issue with multiz visholders duplicating
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes slime processor taking in slimes from behind glass panes/otherwise blocked locations (#73811)
## About The Pull Request
Title; also removes an unnecessary `isslime` check
## Why It's Good For The Game
Fixes#42334
## Changelog
🆑
fix: slime processor no longer sucks in slimes that it can't reach
(glass panes, blocked by other machines etc)
/🆑
* Fixes slime processor taking in slimes from behind glass panes/otherwise blocked locations
---------
Co-authored-by: Sealed101 <75863639+Sealed101@users.noreply.github.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 some invisible inhands from the transforming component (#73807)
## About The Pull Request
The original issue caused by #70037
Esword issue caused by #73716
Originally the transforming component did not override the inhand icon
state of the the item on its own (instead putting the onus on the item
itself if they wanted unique behavior). It was changed to always update
inhand icon state, most of which don't have one
I don't really like this fix, it should be explicit "I want inhand to
change" and not default, but this will work for now
Also the PR that fixed the Jaws issue didn't actually set the var they
created
Fixes#73805Fixes#73711 (Actually)
## Why It's Good For The Game
Invisible sword bad
## Changelog
🆑 Melbert
fix: Fixed a eswords, some tools, and some other misc. items from being
invisible while extended / active
fix: Teleshields and other misc items not extending in hand when active
fix: Switchblades click on extend again
fix: Pendrivers click on extend
/🆑
* Fixes some invisible inhands from the transforming component
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* [no gbp] orm correctly displays borg id data (#73808)
## About The Pull Request
this is a minor thing i forgot to add in my last PR, now the borg's name
will be displayed as well when interacting with the ORM rather than
displaying "no id detected"
## Why It's Good For The Game
## Changelog
🆑
qol: Borgs are now acknowledged by the orm
/🆑
* [no gbp] orm correctly displays borg id data
---------
Co-authored-by: SMOSMOSMOSMOSMO <95004236+SmoSmoSmoSmok@users.noreply.github.com>
* Fixes the 20+ TC items' discounts being applied incorrectly (#73597)
## About The Pull Request
When #22429 was added, the author's expressed intention was to make 20+
TC items discount less. However, by accident, it has been instead
doubled. I have fixed this problem, while also inverting the values in
`get_discount` to make the calculations easier, and make it clearer what
the return value of the proc is for.
This way, if the 140 TC mauler rolls 75% off, it will be 38% off instead
for 87.5 TC, instead of 87% off for 17 TC.
Also autodocced some procs.
## Why It's Good For The Game
Makes the code work as originally intended.
## Changelog
🆑
fix: 20+ item's discounts are properly smaller, instead of being larger
/🆑
* Fixes the 20+ TC items' discounts being applied incorrectly
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Fixes Luminescence actions (#73802)
## About The Pull Request
- Add Component was supposed to use a named arg, quick fix
- While testing the fix I noticed it doesn't properly remove the
appearance when the item is lost, cuts the overlay on failures
## Why It's Good For The Game
Mothblox said this broke things (it was making a weakref of a callback
on accident)
## Changelog
🆑 Melbert
fix: Luminsecent slime actions correctly update their appearance when
integrating or ejecting slime cores
/🆑
* Fixes Luminescence actions
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes bread dog butchering producing error bread and adds some warnings to bread that shouldn't appear in-game. (#73783)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/73765
Also adds some warnings and description to bread/breadslice so you can
more easily notice that something is wrong.
Not much to discuss i think.
## Why It's Good For The Game
You can get normal bread from butchering bread dog. And potentially less
issues with bread in future.
## Changelog
🆑
fix: fixed butchering bread dog spawning error bread.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Fixes bread dog butchering producing error bread and adds some warnings to bread that shouldn't appear in-game.
---------
Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Fixes another instance of fortnite gaming on SS13 (#73770)
🆑 Iamgoofball
fix: You can no longer fortnite with glass sheets
/🆑
---------
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
* Fixes another instance of fortnite gaming on SS13
---------
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
* Adds logic to regal rat butchering, will now produce mouse meat. (#73715)
## About The Pull Request
Okay, I had fun with the alert system. Simply, this just adds 2 meat to
the butcher completion of regal rats. It's a pretty low amount of meat
considering that they look like this.

I chose a low number for the meat considering that players will still be
able to get a massive influx of meat from butchering the small rats.
## Why It's Good For The Game
Regal Rats are often dragged to the kitchen immediately upon being
killed, leaving confused chefs/assistants wondering why they only
received a crown upon successful butchering. Hopefully, this change will
leave people less baffled by the lack of meatiness from the huge
creatures.
## Changelog
🆑
qol: Regal Rats produce meat on butchering, reducing player confusion.
/🆑
* Adds logic to regal rat butchering, will now produce mouse meat.
---------
Co-authored-by: carshalash <carshalash@gmail.com>
* Refactor egg to chick logic into component (#73537)
Refactored how eggs growing into chicks is implemented, and
how the number of chickens and chicks are tracked. It's now possible for
admins to make anything into an egg.
- Instead of the "fertility" of an egg being whether or not it's
processing (along with the ugliness of adding a variable to a item
defined in another file), fertile eggs are now implemented via
components.
- The number of chickens in the world, and the number of chicks hatched
from egg throwing are now global variables, rather than static variables
on the class.
I've tried very hard to keep these changes completely feature freeze
compatible, any variation in the old behaviour is non-intended (at this
point).
* Refactor egg to chick logic into component
---------
Co-authored-by: Jack Edge <yellowbounder@gmail.com>
* Fixes humanoid examine easter egg's pronoun game (#73766)
Fixes#41175 - it's in the issue, I can't come up with anything funny to
put in the PR body.
## Changelog
🆑
spellcheck: fixed humanoid examine easter egg's pronoun usage
/🆑
* Fixes humanoid examine easter egg's pronoun game
---------
Co-authored-by: Sealed101 <75863639+Sealed101@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>
* Removes Cult perms from Survival pods (#73757)
## About The Pull Request
Removes Cult permitted from survival pods, as it's very uninteresting to
have cult bases in places no one will check.
This doesn't affect the mining base itself.
## Why It's Good For The Game
One of the drawbacks of Cult is that they get stronger at the cost of
being more easy to spot, so being to completely bypass the negative part
makes it unfair to fight cult if there's a single shaft miner, or
literally anyone if it's icebox.
## Changelog
🆑
balance: Cult can no longer draw runes in survival pods.
/🆑
* Removes Cult perms from Survival pods
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Adds a martial artist gi to the AutoDrobe. (#73794)
## About The Pull Request
On a dark and stormy night, @ Cheshify asked in OOC if anyone would be
down to make a martial arts gi of no known origin for an event idea they
had.
Naturally, I decided to put my talent (CITATION NEEDED) to use, and I
have both sprited and coded in (the latter with the help of Cheshify
ofc) the aforementioned gi of no known origin.
<details>
<summary>Picture</summary>

</details>
## Why It's Good For The Game

## Changelog
🆑 dessysalta, Cheshify
add: Nanotrasen has added a martial artist gi to the AutoDrobe for those
who want to go even further byond.
imageadd: Aforementioned gi sprites.
/🆑
* Adds a martial artist gi to the AutoDrobe.
---------
Co-authored-by: Rem/Dess <117083785+dessysalta@users.noreply.github.com>
* Updates Coderbus and Adminbus Ruin (#73675)
## About The Pull Request
Updates the people inside the coderbus and adminbus. Removes the
meatballs, because... well, they used to be called something that
actually accurately describes the admin team but now they're just
meatballs. The banhammer now takes the driver seat of adminbus, with a
sacrificial altar in the back. RIP to all the good players lost when
they became admin
## Why It's Good For The Game
It was really out of date lol
## Changelog
🆑
add: Updated the bus ruin
/🆑
* Updates Coderbus and Adminbus Ruin
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Fix admin lookup/follow on disease outbreak [NO GBP] (#73717)
## About The Pull Request
In https://github.com/tgstation/tgstation/pull/73599 my copy/paste
screwup removed the admin lookup in Disease Outbreak: Advanced. Puts it
back.
## Why It's Good For The Game
Admins are supposed to have a link to jump/follow, not message the ckey.
## Changelog
🆑 LT3
fix: Admins can jump to/follow patient zero of a disease outbreak again
/🆑
* Fix admin lookup/follow on disease outbreak [NO GBP]
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Brings back Bartenders fountain pen (#73775)
## About The Pull Request
When PDAs were switched over to tablets, it seems that the bartender's
fountain pen was forgotten. This PR will add it back as the round start
pen of choice for bartenders, replacing the old generic one.
Bardic bartenders rejoice.
## Why It's Good For The Game
A lot of bartenders are snobby and would use fountain pens. Non-snobby
bartenders would still be able to write vulgar words with precise
calligraphy abilities. Both sides win.

## Changelog
🆑
fix: Bartender's fountain pen was omitted during the swap over to
tablets, this has been amended.
/🆑
* Brings back Bartenders fountain pen
---------
Co-authored-by: carshalash <carshalash@gmail.com>
* [no gbp] Latejoin Rulesets sync (#73772)
## About The Pull Request
Syncs the codebase inherent values for dynamic rulesets with the current
config-side values used on our LRP servers.
## Why It's Good For The Game
This is technically irrelevant for the game as these numbers are the
ones currently used on the servers - it's more for the good of the
codebase than the game.
## Changelog
🆑
balance: Latejoin dynamic rulesets have been rebalanced to reduce the
frequency of midround revolution spawns.
/🆑
* [no gbp] Latejoin Rulesets sync
---------
Co-authored-by: Spookuni <70739420+Spookuni@users.noreply.github.com>
* basement
* change a variant of adminhelp converting. like on screenshots
* Removing mentor converting. More modularisation. More describe to proc
* Small part in mentorhelp which i forget to remove
* Comment
* Another comment about skyrat.
* Update modular_skyrat/master_files/code/modules/admin/admin.dm
Good Idea
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
---------
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.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>
* Sourced Component Backend (#73571)
## About The Pull Request
Adds a backend for sourced components. which was requested by @ Fikou
Also cleans up a little bit of the AddComponent logic
## Why It's Good For The Game
Backend for fancy stuff and having a component from multiple sources
---------
Signed-off-by: GitHub <noreply@ github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Sourced Component Backend
---------
Signed-off-by: GitHub <noreply@ github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Optimizes INVOKE_ASYNC by making it a macro and avoiding a proc call (#73264)
## About The Pull Request
This is quite literally the same behavior but faster, and also catches
improper arguments better than the old macro/proc approach.
Credit to Lohikar for writing the macro.
Port of https://github.com/DaedalusDock/daedalusdock/pull/196
Also, `world.ImmediateInvokeAsync()` never set a return value, so
expecting one was never valid behavior.
At MSO's request, the documentation of `spawn(-1)`:
As per the reference, calling `spawn()` with a negative value will
execute the spawned code until a blocking action (such as `sleep()`) is
encountered. Then, it will step outside of the spawned code, and
continue the proc. This is the same behavior as calling a `waitfor =
FALSE` proc. Specifically, under the hood, `spawn(-1)` creates a copy of
the callstack like `sleep()`, incase the spawned code is blocked and
needs to be rescheduled.
As an added bonus, `spawn(-1)` silences SHOULD_NOT_SLEEP errors, whereas
`waitfor = FALSE` does not.
## Why It's Good For The Game
ITS FREE FUCKING CPU TIME
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
* Optimizes INVOKE_ASYNC by making it a macro and avoiding a proc call
---------
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
* Thermomachines no longer self-destruct when built on blocked ports (#73580)
## About The Pull Request
Ever felt the utter pain when you make a new thermomachine, hook it up
perfectly and then screwdriver it only for it to immediately become a
pile of iron and components without warning? This PR fixes that.
Instead of doing what it did previously, it unanchors itself and opens
its panel.
Right, almost forgot to mention, failing to wrench down a thermomachine
no longer bonks it with the wrench.
Due to not being allowed to use visual messages for when the port is
blocked, I've added a mob/user variable to all on_construction() procs.
(This allowed me to use balloon messages instead.)
## Why It's Good For The Game
Saves a lot of unnecessary headaches when working with thermomachines.
## Changelog
🆑
fix: Atmosians have finally convinced the thermomachines to not
self-destruct when built on blocked ports.
fix: Failing to wrench down a thermomachine no longer hits it with the
wrench.
/🆑
* Thermomachines no longer self-destruct when built on blocked ports
---------
Co-authored-by: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com>
* Vote System: Approval Voting (#73749)
## About The Pull Request
Approval Voting is a system in which voters can select as many maps as
they want, instead of selecting only one. Final tallies show how many
votes each map received, and the winner is the map with the most
support.
## Changes since https://github.com/tgstation/tgstation/pull/73413
- Custom votes can now be started using either system
- Icon during AV votes indicating your selections
- Map population filter counts active players and participating ghosts
https://user-images.githubusercontent.com/83487515/222580901-61506cc3-dc42-4435-9775-1e6291a3f734.mp4
## Why It's Good For The Game
First-past-the-post (our current voting system) has flaws such as
creating a bunch of wasted votes, in that a large number of selections
ultimately have no impact and for example, a map can win a 3 way race
11/10/10, even though 2/3 of the votes were not for that map. This leads
to people having to vote strategically, and perhaps not what their true
choice is.
Approval Voting solves this by instead allowing the player to select all
the maps they would like to play, so they can vote for their true
preferred choice, as well as alternates.
For example, a player that wants Metastation, is okay with Icebox, and
doesn't want Delta may feel pressured to vote Icebox if it's in a 2 way
race with Delta.
AV lets them vote for Meta, and Icebox or as many others as they want as
their alternates and creates a more fair outcome of a map vote.
Map population filter removing AFK/lobby screen dwellers gives a better
number of active players so as to not trip the map filter's population
cap earlier than it should.
tl;dr: Less of this

## Changelog
🆑 LT3
rscadd: Added new multi-vote system
balance: Map votes are now calculated using multi-vote instead of the
old single-vote system
admin: Admins can now use either multi-vote or single-vote for custom
votes
code: Map choice filtering uses active player count, not all connected
clients
/🆑
* Vote System: Approval Voting
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* this code is so fucking funny it makes me want to merge w/o looking
* safety component stuff
* safeties should be finished
* I loooove safety component
* I swear that's all for gun safety
* manufacturer component
* cant forget this
* this is so awful
* 1100 line long gun file
* ok it actually compiles now
* that should not be an addition of any sort
* these defines should not be used anymore
* why?? the fuck??? are there var edited fire modes on black mesa?????
* how did that even happen
* maybe ci will shut up now
* oh man so many guns are lacking autofire now
* probably fixes safety toggling
* that should reference the gun not the component
* that should probably return
* makes it replicate current behavior, defaults safeties to being ON
* and that is all i have to say about that
* its automagically
* new smite: deadchat control (#73725)
## About The Pull Request
I played around with the deadchat control component for some stuff
downstream and then decided to turn it into a smite, something that is
harsh but really funny especially with all of the inputs that ghosts
have.
The emotes are ones that have the character do something, coordinated
spins and flips have their usual consequences probably, drop causes them
to drop their held items, fall causes them to fall over (and drop their
held items), throw makes them throw whatever item they are holding in
their active hand in a random direction, shove causes them to shove a
random person or mob around them, sit and stand make them buckle and
unbuckle themselves from a chair, and run and walk change their speed
intent. Seven second cooldown and on anarchy ruleset because it _is_ a
smite.
There is a large range of smites from the small pay docking to the
instant and absolute gib but it doesn't feel like there's a lot in for a
nuisance. This would give an option that lets all of the ghosts annoy
one person in particular as they struggle to play while ghosts interfere
with them and constantly make them drop their items and interfere with
their movements, which is obviously fun for the ghosts.
Also I personally think that it is very funny.
* new smite: deadchat control
---------
Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
* Fixes a major source of papercode lag and optimises paper for less (but still some) lag. (#73628)
## About The Pull Request
Doesn't quite fix but helps mitigate #71697 - The issue report is still
valid, just less so.
Marked.js is just... Slow when used in BYOND's web browsing environment.
New markdown elements **and HTML tags** add significant fractions of a
millisecond to parsing time on my local.
However, I suspect I messed up with using the custom extensions and
every parsing pass it may have be appending a new extension to the
extension list.
I'm not sure why this never manifested in my 6 minutes of testing gif
from the original PR, mind you. I checked out that commit and local and
everything worked the same as I remember. Perhaps a change or version
bump in the interim modified the behaviour.
That aside, on current master it's MASSIVELY obvious something is
fucked.
Spamming 1000 characters of
```
# Slow
## Slower
### Slowest
```
then saving it, then puting **another** 1000 characters of the same
thing for 2000 previewed characters total gave the following performance
metrics:

The marked.js parse time was about 150-180ms for the saved text and
220+ms for the input box text.
Moreso, if you leave the paper open for for a few minutes...

Yeah. That's 500+ms per parse (with 2 per render - one from the paper's
saved text and one from the input box) and the game will basically
crash.
Similar results using this template provided to me for testing purposes:
```
<center><b>Department Psychological Evaluation Survey</b></center>
<center><i>Test Log 230126-01</i></center>
<b>Question 1</b>
What department do you work in?
[_____________________________________]
<b>Question 2</b>
Which department are you least likely to recommend to a friend that they should work in?
<i>Please only choose one</i>
* Command [__]
* Security [__]
* Service [__]
* Cargo [__]
* Medical [__]
* Science [__]
* Engineering [__]
<b>Question 3</b>
Which department are you most likely to recommend to a friend that they should work in?
<i>Please only choose one</i>
* Command [__]
* Security [__]
* Service [__]
* Cargo [__]
* Medical [__]
* Science [__]
* Engineering [__]
<b>Question 4</b>
What is your favorite animal?
[_____________________________________]
---
Please sign here to confirm you are completing this survey voluntarily:
[_____________________________________]
<i>All Nanotrasen brand pens have an automatic signature system. Please write % s to automatically sign it.</i>
```
On first input + save, render time is normal but you can see it clearly
rising each second...


You get the idea.
Fixing the problem by using the proper markdown method for accomplishing
the same thing:
Markdown # Slow # Slower # Slowest test:

HoPaperwork Form

And these numbers don't increase over time. So I think I nailed an
interim fix.
Ultimately, marked.js in tgui/BYOND just seems slow as molasses. But it
can at least be **usable** for now and this should majorly mitigate or
even eliminate problems players have been having with paper (depending
on how loaded it is with HTML and markdown tags).
All the features we had before seem to still work after I feex. So
hopefully good for now?

## Beeg edit
I decided I'd go a step further and implement some basic caching logic.

This means that you don't pay a parsing cost from already saved text
while writing new text, allowing complex forms to be created in multiple
saved or one big copy-paste.
This means that reading paper and filling in input boxes in paper is
free after the first parse, using the cache afterwards.
This is a workaround for the fact a parse can take longer than we'd like
for complicated paper forms.
## Why It's Good For The Game
Paper good.
## Changelog
🆑
fix: Papercode has been significantly improved and trivially filled
paper forms should no longer lag or crash players' game clients.
/🆑
* Fixes a major source of papercode lag and optimises paper for less (but still some) lag.
---------
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Makes the food trash element detach on trash making (#73748)
This PR makes the trash maker element detach on trash creation. Most of
the times, the food is deleted soon after this element is activated.
However, there has been one exception: when you place it in a custom,
sliceable item, it will generate the trash, and then store the item in a
list. When you slice the custom item, the saved item will be added to
every slice, producing a trash for each. And this is how you get seven
banana peels out of one banana, or seven revolvers out of one gatfruit
using nothing but a humble knife and a plain pizza bread.
By detaching the trash creation element, we will prevent this behaviour,
and further future proof this element, in case someone adds another
behaviour that creates trash without destroying the food.
This PR also makes the element unregister all signals it has registered
on.
* Makes the food trash element detach on trash making
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Fixes wrong inhand icon state for jaws of life (#73716)
## About The Pull Request
Fixes#73711
## Why It's Good For The Game
## Changelog
🆑
fix: fixed missing inhand icon state for jaws of life
/🆑
* Fixes wrong inhand icon state for jaws of life
---------
Co-authored-by: FinancialGoose <92416224+TheBoondock@users.noreply.github.com>
* Fixes hijacked shuttles not counting as escaped, cleans up associated code (#73623)
## About The Pull Request
Fixes#72240
So, in the past, `onCentCom` ran a check at the end that said "if we're
on centcom z, in centcom area, or in shuttle that is endgame launched:
return TRUE"
Meanwhile its brother `onSyndieBase` did not need to run the same
checks, because it was also on the centcom z-level.
This meant that for the purposes of `considered_escaped`, `onCentCom`
pretty much entirely eclipsed `onSyndieBase`, only mattering for, well,
Nuke Ops
So the fix was simple - add the check for "in shuttle that is engame
launched" to `onSyndieBase`.
I took this opportunity to do a quick audit of associated "escaped" and
"alive" code. Did you know that hardcore random only checked that you
were on centcom to award survival points? Instead of any other checks
for escaped like stat?
Also the ancient "romerol zombies can't be used as an easy way to
greentext escape" was broken, because it checked the wrong species ID?
Bonus performance optimization: `in area` -> `in
area.get_contained_turfs()`
## Why It's Good For The Game
Hijack does not turn around to become an L
## Changelog
🆑 Melbert
fix: Hijacked shuttles now count as "escaping alive" once agian
fix: Hardcore random survival now actually checks that you've escaped
alive, and not just made it to centcom
fix: Intelligent zombies can now escape.
fix: Infectious zombies now don't count as escaped as intended.
/🆑
* Fixes hijacked shuttles not counting as escaped, cleans up associated code
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Lawyer PDAs can't be painted by the HoS (#70697)
## About The Pull Request
Removes the Lawyer's PDA from the head of security's PDA painter, as
they're a Service job.
## Why It's Good For The Game
They're a Service job, there's no reason for the Head of Security to be
able to have any authority over them or their equipment.
## Changelog
🆑
fix: The HoS' PDA painter can no longer paint PDAs into Lawyer ones.
/🆑
* Lawyer PDAs can't be painted by the HoS
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Allows mob spawners to be infinite (#73726)
## About The Pull Request
Gives a more 'proper' way for mob spawners to be infinite than just "set
a very large number".
## Why It's Good For The Game
Useful for admins
## Changelog
not really player facing
* Allows mob spawners to be infinite
---------
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Feature Request: Bunny crate (#73714)
## About The Pull Request
A common player on manual recently requested the ability to more easily
have rabbits as crewmembers. This feature introduces a reasonably priced
rabbit crate to cargo to amend it.
## Why It's Good For The Game
Bunnies are cool I guess.
## Changelog
🆑
add: Introduces orderable rabbit crate to cargo livestock.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Feature Request: Bunny crate
---------
Co-authored-by: carshalash <carshalash@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Fixes an erroneous khinkali recipe in the cooking menu (#73742)
## About The Pull Request
Removes erroneous khinkali recipe that was using a microwave. The true
way to make khinkali in spess is by grill.
## Why It's Good For The Game
Fixes#73677
## Changelog
🆑
fix: fixed erroneous khinkali microwave recipe in the cooking menu. use
a grill like a normal chef
/🆑
* Fixes an erroneous khinkali recipe in the cooking menu
---------
Co-authored-by: Sealed101 <75863639+Sealed101@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
* Removes the pipegun's chance to misfire and make you shoot yourself (#73738)
## About The Pull Request
As the title might imply, the increasing percentage chance that a
pipegun misfires and fires at the user has been removed.
## Why It's Good For The Game
The pipegun already has a large number of other downsides, like a 1
round ammo capacity, it being bolt action, the fact it can get dirty and
have the bolt jam, and the 3/4 damage modifier. While these all make
sense and can make for a pretty fun improvised weapon, the chance to
misfire brings it from 'interesting' to 'unusuable in 99% of
situations'.
## Changelog
🆑
balance: The pipegun's chance to misfire and shoot at you rather than
the person you're pointing it at has been removed
/🆑
* Removes the pipegun's chance to misfire and make you shoot yourself
---------
Co-authored-by: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
* Frozen tanks now release the gasses inside them when shattered (#73475)
## About The Pull Request
Instead of simply being qdel'ed, shattered items have their deconstruct
proc called (with flags set to prevent items from being dropped in the
process). This means that if an object has code that should run before
it's destroyed in order to maintain in-game consistency, that will be
called instead of ignored.
As a result:
- Internals tanks release gasses inside of them (what I wanted to fix)
- Frozen containers only destroy themselves, not everything inside of
them (unintended side effect -- I think it's good but others might
disagree)
- Grenades detonate (unintended side effect -- can be disabled by
changing the disassembled flag to true instead of false)
- Gas crystals release their contents (because theyre grenades)
- Hot Ice does NOT release anything, since it's a datum and not an
object
Also, fixes a potential bug where holodeck canisters wouldn't be
destroyed when their deconstruct was called, making them (possibly?)
indestructible. I doubt this would ever have shown up, but... it's fixed
now!
## Why It's Good For The Game
Fixes https://github.com/tgstation/tgstation/issues/71121, adds
potential support for similar future cases.
Fixes an issue where holodeck canisters (should those ever exist) would
be indestructible.
## Changelog
🆑
fix: frozen gas tanks now release their contents upon shattering
fix: holodeck gas tanks can now be deconstructed
/🆑
* Frozen tanks now release the gasses inside them when shattered
---------
Co-authored-by: skylord-a52 <skylord-a52@users.noreply.github.com>
Buff scythes, goats, and plantbgone vs PLANT biotypes (#72889)
This buffs scythes, goats, and plantbgone vs PLANT biotypes:
- Scythes now deal x1.5 damage to venus flytraps (3 hits to kill)
- Scythes now target the flower bud vines
- Goats now target flower bud vines and deal 15 damage to PLANT biotypes
- Goats have a eating sound whenever they bite PLANT biotypes
- Plantbgone now does 2 dmg per unit to PLANT biotypes (10 dmg per
spray)
- Plantbgone now has a 75% chance to remove weeds and deals large damage
to flower buds
- Weed control crates now come with a pair of leather gloves
- Golems are immune to thorn effects
- Any kind of thick glove material will prevent thorn effects when
attacking
- Flower buds will now take x4 damage from fire and sharp weapons
(unless they have fire trait)
- Regular scythes are now a sharp object
Also this fixes a few runtimes with spacevines and nulls. The bane
element now accepts `mob_biotypes` bitflags as an argument.
Before my changes:
- Plant-b-gone was doing 0.4 dmg per unit to PLANT biotypes (2 dmg per
spray)
- Scythes took 5 hits to kill venus flytraps
- Goats only affected podpeople
- Flower bud vines were being ignored by weed killing code
- Plantbgone only had a 50% chance to remove weeds (and this was very
inconsistent due to RNG)
- Botanical gloves and thick gloves didn't protect from thorns
- Golems were getting pierced by thorns despite having pierce immunity
- Flower buds were not taking the x4 damage like they should have been
- Regular scythes were not a sharp object, but other scythes
(chaplain's, megafauna loot) were sharp
This makes the weed killer crate more effective since people were
complaining about it being worthless vs vines and flower buds. These
changes give people more options to respond to threats vs plants.
🆑
add: Add a pair of leather gloves to weed control crate
balance: Mobs with the PLANT biotypes (venus flytraps, pod people,
killer tomatoes) are now much weaker vs scythes, goats, and plantbgone.
balance: Plantbgone is now more effective at destroying weeds.
balance: Regular scythes are now a sharp object
fix: Fixed scythes, goats, and plantbgone not affecting flower bud
vines.
fix: Thick and botanical gloves not protecting from thorns
fix: Golems not having pierce immunity from thorns
fix: Runtime where vines tried to spread into null turf
fix: Runtime where null vines that were destroyed were trying to spread
to nearby turfs
soundadd: Add eat food sound when goats eat plants
code: Improved goat targeting code
code: The bane element now accepts `mob_biotypes` bitflags as an
argument.
/🆑
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Fully removes departmentType var from Requests Consoles (#72916)
I was thinking about updating the requests console's UI, when I noticed
that #67219 started the process of moving away from the ancient
departmentType field. I have decided to put off the UI update until
later, and finished the necessary map updates using the power of
UpdatePaths.
Also autodocced the requests console vars and procs.
Finishes the removal of a deprecated (and may I say, badly named)
variable. Mappers will not accidentally try to set the outdated bitflag
fields, instead they will the more descriptive fields.
* Fully removes departmentType var from Requests Consoles
* Update CentCom.dmm
* update paths
* fix var edits
* fix
* a
---------
Co-authored-by: Profakos <profakos@gmail.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>