## About The Pull Request
Re-adds nanites, balance changes pending.
No plans to do mapping/role changes
Based on https://github.com/tgstation/tgstation/pull/60473 with a lot of
work on modularizing
## Why It's Good For The Game
Nanites are a rather interesting system, my hope is to port it in a more
balanced format.
## Proof Of Testing
Works, thoroughly tested
## Changelog
🆑
add: Re-adds nanites
/🆑
TODO:
- [x] Add techweb linking for nanites
- [x] Prevent stacking of armor mods (fortitude + dna vault + nanite
armor)
- [x] Rebalance damage regeneration programs
- [x] Remove force speak program by @StrangeWeirdKitten request
- [x] Convert UI's to TSX
- [x] Fix Nanite program uhb and programmer overlays not working
---------
Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
## About The Pull Request
I toppled a house of cards when I merged in the new changes to game
announcements
## Why It's Good For The Game
Being notified when a new round starts is good
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

</details>
Introduces 6 new Heretic Sideknowledges.
**Warren King's Welcome:** Starting side-knowledge, Grants to the
Heretic's id Maints and External Airlock access.
**Phylactery Of Damnation:** T1 Knowledge, located between Imperfect
Ritual and Keykeeper's Burden, creates a bottle that can Siphon a small
quantity of blood from your victim, (they'll still feel a tiny prick).

**Ether Of The Newborn:** T2 knowledge, replaces Curse Of Paralysis slot
in the tree (Inbetween Mark of Madness and Moonlight Amulette).

1 use potion, fully restores the inbiber to full health, removes any
sort of affliction,trauma,disease or implant at the cost of knocking the
user out for 1 minute.
**Codex Morbus:** T3 knowledge, located between Caretaker's Refuge and
Ringleader's RIse.


Upgrade of the Codex Cicatrix, draws and siphons runes and essences a
bit faster, can be used on a rune to curse a crewmember, provided their
blood is on the rune or on the Heretic.
**Greaves Of The Prophet:** T3 knowledge, located between Entropic Plume
and Wolves Among Sheep.

They work as magical magboots minus the slowdown; they confer full
immunity to slips (yes, even space lube).
**Rust Sower Grenade:** T2 knowledge, replaces curse of corrosion in the
tree (between Aggressive Spread and Star Blast).

Eldritch grenade, Releases a smoke that rusts all affected turfs, blinds
whoever doesn't have mask protection and utterly annihilates silicons,
mechs, augs and bots.
Video Showcase: https://www.youtube.com/watch?v=H1GeO7MYFek
**New Blade Path Spell: Wolves Among Sheep**
Video Showcase: https://www.youtube.com/watch?v=2LsmUiQzpzA
- Briefly transforms the surrounding the heretic into an arena.
- Both The Heretic and Crew members caught inside the spell cannot leave
or change z level until the spell expires.
- The arena is impassable to outsiders.
- Everyone caught inside the spell receives a special buff that makes
them immune to most enviromental hazards and all forms of Crowd Control
while blocking teleportation.
- Non Heretics are granted a temporary Heretic Blade and an antag datum.
- Scoring a critical hit grants the winner the ability to leave the
arena, Critting the heretic fully dissolves the spell.
- Critting yourself doesn't remove the debuff.
- The Heretic receives a heal upon critting someone.
- Breaking a blade while inside the arena will rip off your arm
regardless if you are crew or a Heretic.
- 2 minutes cooldown.
- Replaces Furious Steel as the last spell unlocked pre-ascension.
Lastly as you may have guessed, curses have been completely refactored,
they are now bound to the new item (Codex Morbus), are no longer
empowered by blood but require it as a reagent.
Curse of Corrosion and Paralysis have been rebalanced to be slightly
stronger than they were at their base value now that they can no longer
be empowered.
2 new curses have be introduced.
**Curse Of Indulgence:** tanks the target hunger, makes them a carnivore
and drastically increases their hunger decay rate, lasts 8 minutes.
**Curse Of Transmogrification:** Allows the Heretic to change the
target's Race(minus plasmamen for obvious reasons), lasts until the
Codex Morbus is destroyed.
Lastly the Blade Heretic tree has been shuffled a bit to introduce the
new spell.
Stance Of the Torn Champion has been **TEMPORARILY** Removed, it will
come back in a later PR.
Code by me and Xander
Sprites by INFRARED_BARON and OrcaCora.
Lore tibids by NecromancerAnne.
The following is an atomisation of The Heretic Knowledge Rework I'm
currently working on alongside Edge (Heretic's Grandaddy).
Given the whole PR was probably going to be impossibly big to review; I
asked Melbert If could introduce the new knowledges first, so here we
are.
Do not stress the locations of these knowledges in the tree; While they
do fill what few empty slots we still have, it doesn't change the fact
that the Heretic tree is an incomprehensible mess and will soon be
reworked.
**Warren King's Welcome:**
Not having mantainence access as an antag sucks.
Arguably it sucks even more for Heretics as they are required to find
some place discrete in order to be able to cast their rituals.
It's not unusual for the station to be so crowded, that setting up a
base in space is the only option, the external access helps with that a
little bit.
**Phylactery Of Damnation and Codex Morbus**
Explaining them in the same paragraph as they are intended to be used
together.
Curses might as well not exist in their current state.
The process of cursing a crewmember is way too machineous, annoying, and
nowhere near as affective as simply running to your victim and smacking
it with your blade.
All Curses have now been bundled to the new Codex, they no longer
require X reagents, only a drip of the victim's blood.
That's when the phylactery comes into play.
Victims still feel "a tiny prick" upon being juiced, so beware.
**Ether Of The Newborn:** The point of this knowledge is to serve as a
backup plan to "random bullshittery".
It's not really fun rolling one bad trauma or disease and have it
completely invalidate your Heretic round.
We already have potions that either heal or provide remedies against
wounds/limb loss, the Ether is supposed to be an extreme solution, hence
why it causes a 1 minute sleep upon consumption.
**Greaves Of The Prophet:** Heretic to this day is fairly lacking when
it comes to passive immunities or tools we grant to most of our core
antagonists.
Specifically, for a melee-focused antagonist, a total lack of antislip
is kinda lame, being one of the most common defense tools employed by
the crew against newbie antagonist players.
Given these cannot be concealed unlike the traitor counterpart and how
far down the tree they are, i felt like making them lube resistant was a
unique twist and sensible for what's essentialy our core progression
antagonist.
**Rust Sower Grenade:** directly inspired by the 40k Blight Grenades.
The Rust Sower nades serve a double purpose.
1) They introduce a new form of area Denial available to all heretic
paths.
2) They confer to non Rust Heretics a way to deal with the so hated
Silicon Menace.
I'm of the not-so-unpopular school of thought of "Mechs and Silicons
have had it too good for too long".
A massive chunk of our threat roster gets to this day completely shut
down by mechs.
I feel like it was about time to make everything Inorganic feel afraid
again.
To make it a bit more fair, these grenades have a fairly long detonation
timer and have been given a couple of unique SFX.
**Wolves Among Sheep**
Even after the last batch of Changes, Blade Heretic still felt a bit
uninspired to me.
The path is still essentialy just about running at people and stabbing
them in the face.
While that's part of the appreal, I'd reckon it's still lacking a bit on
the eldritch side of things.
Trapping opponents into an arena when they are forced to either engage
you or betray their friends to escape can create some potentially
interesting story-telling.
It also warps the ,oh, so beloathed stun meta we live in by forcing
participants to resort to lethal weaponry.
Ultimately, this is supposed to be a high risk/high reward spell, if you
trap 5 people arm them with heretic blades, and make them all fully stun
immune, you are likely gonna get lynched.
To free up a slot in the tree I **TEMPORARILY** Removed Stance of the
Torn champion, it will come back in my nextish pr, so don't worry about
it too much.
🆑
add: New Heretic starting Side-Knowdge Warren King's Welcome
add: New Heretic T1 Side knowledge, Phylactery Of Damnation.
add: New Heretic T2 Side knowledge, Ether Of The Newborn.
add: New Heretic T3 Side knowledge, Codex Morbus.
add: New Heretic T2 Side knowledge, Rust Sower grenade.
add: New Heretic T3 Side knowledge, Greaves Of The Prophet.
add: New Blade Path Spell, Wolves Among Sheep.
balance: Heretic curses have been removed from the tree and bundled in
the new Knowledge, Codex Morbus.
balance: Blade Path tree has been shuffled a bit, all spells have been
moved up by one tier to make space for the new spell.
removal: Stance Of The Torn Champion has been removed.
/🆑
---------
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Ironically enough, not a 516 issue but rather a fuckup on our part
revealed by a 516 plane switch.
Also adjusted the warning, as 516 is outside of beta and we're (supposed
to) have almost complete support at this point.
Closes#89877🆑
fix: Fixes black vision for dextrous mobs using 516 version of BYOND
/🆑
---------
Co-authored-by: Lucy <lucy@absolucy.moe>
## About The Pull Request
Instead of immediately dusting, there's now a chance, depending on size
and weight (lower is better) as well as the fishing skill of who tries
to remove it (higher is better). At no skill (or if the fish is removed
indirectly), the odds of it not dusting can be as low as about 3~4% (BIG
FISH) and as high as 50% (tiny feesh), while each level in the skill
provides an additional 4% to the roll, up to a bonus 28% (legendary
level).
As always, regardless of RNG, the fish won't be removed from the
persistence system if removed from the trophy mount, and only if
replaced.
This PR also allows trophy fish to retain traits between rounds, but
keep in mind the fish starts dead and may have to be revived first. Also
trying to sell it will yield a pitiful 1/20 of its theorical export
value, much like for fish from fish cases.
## Why It's Good For The Game
The persistent trophy fish mount at the bar seems to fare fairly well
without outstanding issues so far, so maybe I should let people get
their hands on rare and valuable fish from previous rounds, and give
players some more practical reasons to place a fish on the mount for
future rounds. As long as people don't start beelining the trophy mount
by the bar on regular basis.
## Changelog
🆑
balance: It's now possible to take trophy fish from previous shifts off
their mounts without turning them into dust based on a probability
revolving around the size and weight of the fish against your fishing
skill.
/🆑
## About The Pull Request
The title pretty much says it all. I'm told that this was done because,
previously, the station would be exploded by the nuclear device - but
when that was removed, all that remained was `qdel(bomb)`.
That said, there's some bizarre stuff behind what pushed me to make this
PR. See below if you want to know.
<details><summary>Bizarre stuff</summary>
For some reason, while trying to port
<https://github.com/tgstation/tgstation/pull/77868> over to
Monkestation, I started getting hard-deletes for the nuclear bomb used
in the `nuke_cinematic` unit test.
```
## REF SEARCH Beginning search for references to a /obj/machinery/nuclearbomb/syndicate.
## REF SEARCH Refcount for /obj/machinery/nuclearbomb/syndicate: 7
## REF SEARCH Finished searching globals
## REF SEARCH Finished searching native globals
## REF SEARCH Finished searching atoms
## REF SEARCH Found /obj/machinery/nuclearbomb/syndicate [0x201f850] in list Datums -> /datum/controller/subsystem/garbage [0x2100001c] -> queues (list) -> /list (list) -> /list (list).
## REF SEARCH Found /obj/machinery/nuclearbomb/syndicate [0x201f850] in list Datums -> /datum/callback [0x21057da8] (obj: Ticker proc: station_explosion_detonation args: ["the nuclear fission explosive"] user: null) -> arguments (list).
## REF SEARCH Finished searching datums
## REF SEARCH Finished searching clients
## REF SEARCH Completed search for references to a /obj/machinery/nuclearbomb/syndicate.
## TESTING: GC: -- [0x201f850] | /obj/machinery/nuclearbomb/syndicate was unable to be GC'd -- (ref count of 3)
Error: /obj/machinery/nuclearbomb/syndicate hard deleted 1 times out of a total del count of 3
FAILURE #1: /obj/machinery/nuclearbomb/syndicate hard deleted 1 times out of a total del count of 3 at code/modules/unit_tests/create_and_destroy.dm:99
Error: FAIL /datum/unit_test/create_and_destroy 308.1s
```
This hard-del would happen on every integration test, no matter the map
and no matter the byond version. I was even able to have it happen
locally.
Thing is, Monkestation only seems to have two differences in our code
for actually exploding a nuke:
1. We mark some z-levels as safe from the nuclear bomb (so you can go to
the lowest reaches of icebox and be safe from the bomb). This only
modifies the list of z-levels to call the "gib everyone on z" code for.
2. We don't have tgstation/tgstation#75967 ported over - but making a
new branch and cherry-picking both 77868 and 75967 didn't seem to fix
the issue either.
So something with how the callback is handled by the `play_cutscene`
global proc is preventing this from being qdel'd properly - resulting in
a hard-delete over five minutes after the nuke cinematic plays.
I tried several things to understand why the callback was causing a
hard-del, but only one gave me any tangible info - changing the
reference to the bomb, into a weakref reference, which stopped the
hard-del.
However, I eventually realized the callback was entirely pointless -
right now, all it does is qdel the bomb. So I just moved it from a
callback to part of the `really_actually_explode()` proc.
</details>
## Why It's Good For The Game
I'd say it fixes a hard-delete, but that hard-delete was only happening
on Monkestation.
So I guess it removes a bit of unnecessary indirection?
## Changelog
:cl:MichiRecRoom
fix: Nukes will now always be deleted upon exploding, no matter if they
have a valid cutscene to play.
/🆑
Ports the helpers from
https://github.com/BeeStation/BeeStation-Hornet/pull/12240
This should fix some more of the 516 issues that I've seen while giving
a quick check through the code
The remaining browse should work now.
Also fixing another sass warning while being on it.
## About The Pull Request
## Why It's Good For The Game
## Changelog
🆑
fix: tgui say 516 will no longer change channels when the button is used
to drag it
fix: tgui say 516 will no longer leak radio messages into the wrong
channel
fix: runechat flickering when faded up messages fade out
/🆑
Replaces the asset subsystem's spritesheet generator with a rust-based
implementation (https://github.com/tgstation/rust-g/pull/160).
This is a rough port of
https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it
includes fixes for some cases I didn't catch that apply on TG.
(FWIW we've been using this system on prod for over a year and
encountered no major issues.)

`/datum/asset/spritesheet_batched`: A version of the spritesheet system
that collects a list of `/datum/universal_icon`s and sends them off to
rustg asynchronously, and the generation also runs on another thread, so
the game doesn't block during realize_spritesheet. The rust generation
is about 10x faster when it comes to actual icon generation, but the
biggest perk of the batched spritesheets is the caching system.
This PR notably does not convert a few things to the new spritesheet
generator.
- Species and antagonist icons in the preferences view because they use
getFlatIcon ~~which can't be converted to universal icons~~.
- Yes, this is still a *massive* cost to init, unfortunately. On Bee, I
actually enabled the 'legacy' cache on prod and development, which you
can see in my PR. That's why I added the 'clear cache' verb and the
`unregister()` procs, because it can force a regeneration at runtime. I
decided not to port this, since I think it would be detrimental to the
large amount of contributors here.
- It is *technically* possible to port parts of this to the uni_icon
system by making a uni_icon version of getFlatIcon. However, some
overlays use runtime-generated icons which are ~~completely unparseable
to IconForge, since they're stored in the RSC and don't exist as files
anywhere~~. This is most noticeable with things like hair (which blend
additively with the hair mask on the server, thus making them invisible
to `get_flat_uni_icon`). It also doesn't help that species and antag
icons will still need to generate a bunch of dummies and delete them to
even verify cache validity.
- It is actually possible to write the RSC icons to the filesystem
(using fcopy) and reference them in IconForge. However, I'm going to
wait on doing this until I port my GAGS implementation because it
requires GAGS to exist on the filesystem as well.
IconForge generates a cache based on the set of icons used, all
transform operations applied, and the source DMIs of each icon used
within the spritesheet. It can compare the hashes and invalidate the
cache automatically if any of these change. This means we can enable
caching on development, and have absolutely no downsides, because if
anything changes, the cache invalidates itself.
The caching has a mean cost of ~5ms and saves a lot of time compared to
generating the spritesheet, even with rust's faster generation. The main
downside is that the cache still requires building the list of icons and
their transforms, then json encoding it to send to rustg.
Here's an abbreviated example of a cache JSON. All of these need to
match for the cache to be valid. `input_hash` contains the transform
definitions for all the sprites in the spritesheet, so if the input to
iconforge changes, that hash catches it. The `sizes` and `sprites` are
loaded into DM.
```json
{
"input_hash": "99f1bc67d590e000",
"dmi_hashes": {
"icons/ui/achievements/achievements.dmi": "771200c75da11c62"
},
"sizes": [
"76x76"
],
"sprites": {
"achievement-rustascend": {
"size_id": "76x76",
"position": 1
}
},
"rustg_version": "3.6.0",
"dm_version": 1
}
```
Universal icons are just a collection of DMI, Icon State, and any icon
transformation procs you apply (blends, crops, scales). They can be
convered to DM icons via `to_icon()`. I've included an implementation of
GAGS that produces universal icons, allowing GAGS items to be converted
into them. IconForge can read universal icons and add them to
spritesheets. It's basically just a wrapper that reimplements BYOND icon
procs.
Converts some uses of md5asfile within legacy spritesheets to use
rustg_hash_file instead, improving the performance of their generation.
Fixes lizard body markings not showing in previews, and re-adds eyes to
the ethereal color preview. This is a side effect of IconForge having
*much* better error handling than DM icon procs. Invalid stuff that gets
passed around will error instead of silently doing nothing.
Changes the CSS used in legacy spritesheet generation to split
`background: url(...) no-repeat` into separate props. This is necessary
for WebView2, as IE treats these properties differently - adding
`background-color` to an icon object (as seen in the R&D console) won't
work if you don't split these out.
Deletes unused spritesheets and their associated icons (condiments
spritesheet, old PDA spritesheet)
If you press "Character Setup", the 10-13sec of lag is now approximately
0.5-2 seconds.
Tracy profile showing the time spent on get_asset_datum. I pressed the
preferences button during init on both branches. Do note that this was
ran with a smart cache HIT, so no generation occurred.

Much lower worst-case for /datum/asset/New (which includes
`create_spritesheets()` and `register()`)

Here's a look at the internal costs from rustg - as you can see
`generate_spritesheet()` is very fast:

**Before**

**After**

🆑
fix: Fixed lizard body markings and ethereal feature previews in the
preference menu missing some overlays.
refactor: Optimized spritesheet asset generation greatly using rustg
IconForge, greatly reducing post-initialization lag as well as reducing
init times and saving server computation.
config: Added 'smart' asset caching, for batched rustg IconForge
spritesheets. It is persistent and suitable for use on local, with
automatic invalidation.
add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for
spritesheets.
fix: Fixed R&D console icons breaking on WebView2/516
/🆑
## About The Pull Request
1. April Fools set the lobby music, but order of operations says
holidays might be initialized before ticker. So we need to ensure it
won't get overridden.
2. Lobby music pref was changed from a toggle to a number, but the proc
already passed the number as an argument, so the arg did nothing. Now
it'll (properly) play at half volume during end-of-round.
3. When using default repo lobby music, it will not play the same music
after two rounds (as it does with configured lobby music)
## Changelog
🆑 Melbert
fix: Roundend title music will play at half volume again
fix: April Fools lobby music will correctly always be clown music
fix: Lobby Music will repeat across sequential rounds less often
/🆑
This PR allows you to extract tail organs from xenomorphs and surgically
attach xenomorph tails to people.
(Despite being a carbon the xenomorph sprite is not built out of
component overlays so this technically does not remove the tail from its
corpse sorry).
Having a xenomorph tail makes you better at tackling, changes your
tackle verb to "pounce" like if you are a felinid, and also gives you
the parkour benefits of the Freerunning quirk.

You can also surgically attach a xenomorph _queen_'s tail to someone.
This arguably is a bad idea because it makes you slower (it's much too
heavy) but it does give you access to the queen's tail spin attack
(after which you will fall over if you aren't inhumanly strong). Also
more importantly, it is comically large.
Look I'm racking my brain but this one really mostly comes down to "it's
funny to do this".
But let's pretend that it also increases the depth and complexity of the
sandbox and promotes interesting interactions between crewmembers or
something like that.
Ideally sometimes in the future we will either decide that xenomorphs
are not carbons (is it purely because they have organs?) or decide that
they _are_ carbons and build them accordingly. In the latter case this
will have been a useful addition.
🆑
add: You can transplant xenomorph tails onto people.
/🆑
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).
Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
## About The Pull Request
For some reason, that either wasn't an issue before, or it always was
and I did not fix it. Either way, `List()` is a proc and `material_path`
variable is being read as an arg called "material_path" which is what
the key is being set to, instead of the stored value of the variable, I
think.
## Why It's Good For The Game
Fixing stuff.
## Changelog
🆑
fix: Fixing loaded trophy fishes possibly not having materials.
/🆑
## About The Pull Request
This incredibly detailed PR adds the ability to construct custom
shuttles, which function similarly to whiteships.
To construct a custom shuttle, you need the following items:
- Shuttle frame rods
These rods can be hand-crafted by using 5 rods on 1 sheet of titanium,
or printed at a sci/engi/cargo lathe after researching the Shuttle
Engineering techweb node.
Lattices built with these rods, and catwalks/floors built on top of
these lattices, are valid for shuttle construction.
- Shuttle engines
Did you know shuttle engines have boards that weren't normally
obtainable? Well the board for one specific engine type is now available
from the sci/engi/cargo lathe after researching Shuttle Engineering. Of
course, the old options remain. You can steal engines from other
shuttles, including escape pods (it's not like engines are strictly
necessary for *those* shuttles anyways). Alternatively, the shuttle
engine supply pack is no longer locked behind the purchase of the BYOS.
- Flight Control & Navigation Console boards
These boards are printed at the sci/engi/cargo lathe after researching
the Shuttle Engineering techweb node.
If built on a custom shuttle, it will automatically link to it, unless
the shuttle already has such a console.
If built on a turf that is valid for custom shuttle construction, it
will automatically link to any shuttle constructed from or expanded with
that turf.
- Shuttle blueprints
Standard shuttle blueprints can be printed at the sci/engi/cargo lathe
after researching the Shuttle Engineering techweb node.
A cyborg upgrade granting access to a shuttle blueprint database can be
printed at the exofab after researching the aforementioned node.
Crude shuttle blueprints can be crafted by hand with a sheet of paper
and either a rainbow crayon or 10 uses of a blue crayon or spraycan.
If Science won't research the tech, you can also buy a goody pack
containing a flight control board, a docker board, two engine boards,
and a set of shuttle blueprints for 1200 credits, if you have aux base
access.
A shuttle can be constructed atop any continuous region of turfs
containing a shuttle rod lattice or a catwalk/tile built upon such.
Currently, this region cannot intersect any area other than space,
lavaland, the icemoon, or the station asteroid. Preexisting custom areas
can be included in the construction of the shuttle, but only if every
turf in the custom area is valid for shuttle construction.
In the shuttle blueprint UI, you can toggle a visualizer to display
which turfs fulfill all of the aforementioned conditions.
The following video goes through the basic process of shuttle
construction.
https://github.com/user-attachments/assets/3283422e-a201-4978-972d-67527b5df4ee
The blueprint used to construct the shuttle will be its master
blueprint. The master blueprint can be copied to other blank shuttle
blueprints (or to engiborgs with the shuttle database upgrade), and
allows the holder to perform a christening ritual on the shuttle to
rename it.
If a shuttle's master blueprint ceases to exist, a blank blueprint can
be linked to the shuttle to become the new master blueprint, or an
existing blueprint associated with that shuttle can be promoted to the
master blueprint.
Once constructed, the following options are available from the blueprint
UI to modify it:
- Create Area
Convert a continuous open area of the shuttle into a new area with the
name written in the above text input. This operates very similarly to
regular area construction.
- Rename Area
Change the name of the area you're currently in to the name written in
the above text input.
- Expand Area
Add a continuous open area of the shuttle to the neighboring area
selected from the dropdown to the left. This operates like regular area
expansion.
- Expand Shuttle
Expand a shuttle with valid frame turfs as defined above. These turfs
must be physically connected to the shuttle.
- Remove Area
Remove an area, giving its tiles to the default shuttle area.
- Cleanup Empty Space (implemented after the above video was recorded)
Removes all completely empty turfs from the shuttle. If all the turfs in
one of the shuttle's areas were removed, that area is deleted. If
absolutely no turfs of the shuttle remain, the shuttle itself is
deleted. Due to the ability for this action to delete the shuttle, only
the master blueprint can do it.
As mentioned above, the shuttle's master blueprint can be used to
christen its associated shuttle. To do this, fill a glass drink bottle
with some amount of reagents, then hit it against one of the shuttle's
walls from outside while holding the master blueprint. You will be
prompted to enter a new name for the shuttle. The variety of things that
can happen while inputting a new name can cause the christening rite to
fail in one of several humorous ways.
### Optional (Unless specifically requested by a maintainer) Todo's
- [x] A way for shuttle circuits to be obtainable without techweb nodes
- [x] A more convenient way to carry around shuttle engines or the means
to deploy them
- [ ] A shuttle construction guide available as a reference book
- [ ] Allow boards to be linked to shuttles before construction so they
can be used outside the shuttle
## Why It's Good For The Game
Shuttles have been part of the sandbox for an incredibly long time, but
their limited accessibility has rendered them the exclusive territory of
lucky space explorers or the few antagonists who get one off the bat
(nukies and pirates). Giving players the means to construct shuttles to
their liking opens up a variety of possibilities for gimmicks for antags
and non-antags alike.
Besides the applications for antaggery and crew-sided gimmicks, this
provides side content for several departments to engage with during the
relatively-frequent periods of time where they have little else to do as
part of their intended roles.
With respect to engineering, if the station isn't actively being
damaged, the supermatter is in perfect working order, and nobody is
clamoring for machine upgrades, engineers have little else to resort to
other than construction projects. While the BSA station goal provides an
incentive for engineers to construct dedicated rooms for the cannon, it
will not necessarily be available every round. Custom shuttles not only
provide such a construction project to pursue, but provide the rare
opportunity, as well as a very good reason, to set up an independent
power network, complete with its own power source.
While atmos techs have a lot to do with gas mixing and the crystallizer,
they rarely get the opportunity to set up working life support systems
outside of repairing the ones that get blown up. Custom shuttles will
frequently start with no air, and unless the design settled upon is an
open floor plan, it will have several independent chambers that cannot
so easily be profused with a proper airmix by just opening a canister.
Furthermore, if the air in a custom shuttle gets messed up, a proper
scrubber and distro network is a significantly less tedious method of
rectifying the problem than cleaning the air manually with portable
scrubbers and pumps.
Scientists, it can be argued, with their access to RPDs through
ordnance, have similar opportunities to atmos techs, even though the act
in and of itself is not exactly part of their duties. But compared to
the other job content they could be working with after they've completed
most of their gameplay loop, custom shuttle construction is a
substantially more active endeavor. And I know how much people complain
about late-game science content just being sitting around at a console
and making gamer gear. Roboticists can have a part to play in this too.
They can put their mech RCDs to a use other than 2D topdown Fortnite,
and with the shuttle database upgrade, they can help interested cyborgs
get in on the action.
Cargo is yet another department known for having significant amounts of
downtime during a considerable number of rounds. If every other
department has gone through their initial rounds of departmental orders,
and there isn't an active need for cargo to order lots of one thing or
another, cargo techs have little to do besides mail (at least on the
days where there **is** mail to deliver). Usually, if cargo techs do, in
fact, do something as a department when not presented with more pressing
duties, they order guns and other contraband. As funny as this is,
there's not a lot of variety in how this behavior manifests. With custom
shuttles, cargo can use their free time to plan, and execute, a unique
collective expression of design sensibilities, not limited by the size
and shape constraints of the cargo bay itself.
## Changelog
🆑 Y0SH1_M4S73R (with special thanks to Vect0r, whose original PR
inspired the implementation of these changes)
add: Shuttle blueprints, the tool used to construct and modify custom
shuttles. Print a set at a science, engineering, or cargo techfab after
researching Shuttle Engineering, or craft a crude set from the crafting
menu.
add: Shuttle blueprint database upgrade for engineering cyborgs,
printable from the Exosuit Fabricator after researching Shuttle
Engineering. A version of shuttle blueprints designed for use by
cyborgs.
add: Shuttle frame rods, usable to construct custom shuttles. Hand-craft
by using 5 rods on 1 titanium sheet, or by printing them at a science,
engineering, or cargo techfab after researching Shuttle Engineering.
add: Custom shuttle flight control and navigation boards, printable from
a science, engineering, or cargo techfab after researching Shuttle
Engineering.
add: Shuttle engine boards can be printed from a science, engineering,
or cargo techfab after researching shuttle engineering.
add: The shuttle engine supply pack is no longer locked behind the
purchase of the Build Your Own Shuttle kit.
add: Shuttle Construction Starter Kit goodie pack, containing a set of
shuttle blueprints, flight control and navigation console boards, and
two engine boards, can be purchased from cargo for 1200 credits.
Requires aux base access to purchase.
refactor: Shuttles now keep track of what areas are underneath each of
their individual turfs, so that the areas left behind on movement are
consistent with what they were beforehand.
refactor: Shuttle ceilings now place themselves down as baseturfs,
instead of only appearing if the turf above is open space.
/🆑
---------
Co-authored-by: vect0r <71346830+Vect0r2@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
## About The Pull Request
Closes#89617
Prior to progression traitor some items were only available with a
minimum number of (normally 25) players in the round.
These items were:
- The dual esword
- Noslip shoes
- The ebow
- Holoparasite
- Sleeping Carp
- Contractor Kit
- Maybe a couple of others that I forgot to write down
When we moved to a progression system this concept was merged with
reputation; under 20 players your reputation would advance more slowly
thus making these "dangerous" items less obtainable and also serving as
a sort of scaling factor on rewards (with fewer players the secondary
objectives are easier to complete, so the reward is commesurately
lower).
Now that we have removed secondary objectives this doesn't really make
sense any more, so now reputation simply advances at a rate of one
second per second all the time, but that leaves the old population locks
in question.
So... I just recoded items that are only available when there are enough
players


(This iconography simply vanishes once the pop level is reached).
Note that this is based on "players who have joined" (roundstart +
latejoin), not "players who are online" or "players who are alive".
Once an item becomes available it will never stop being available, but
it only becomes available based on people who are playing and not
watching.
Currently the only items I applied this to (with a value of 20 players)
are:
- Dual esword
- Sleeping Carp
- Spider Extract (the spider antagonist usually requires like 27
players)
- Romerol
It isn't applied to anything else.
## Why It's Good For The Game
Reputation isn't really a tool used to designate how dangerous an item
is any more (if it ever was) and resultingly it doesn't make any sense
to slow its gain based on population.
Some items though we maybe still don't want to show up in a "low pop"
round because they'll create an overall unsatisfying experience, so we
should be able to remove those items from play.
## Changelog
🆑
balance: Traitor reputation now advances at a fixed rate, not dependent
on current server population.
balance: The dual esword, sleeping carp scroll, spider extract, and
romerol vial cannot be purchased if fewer than 20 players have joined
the game.
/🆑
## About The Pull Request
Fixes#89458
Adds a config for auto-deadminning admins who ready up before the round
starts, or click join game after.
The deadminning happens as soon as the button is pressed, not when a job
is selected or the round starts. I figure it's better to do it straight
away since both have opportunities for metainfo to be posted in admin
chat. Before there's admins messing with dynamic config / plotting
events etc. and during the round there's basically everything that gets
posted to admin logs.
I've had to add a typecheck to the auto_deadmin proc, since the lobby
menu technically happens on the centcom Z-level, and there's a pref for
ignoring deadminning on centcom Z, so it checks to see if the admin is a
new player mob.
Changed the old config from auto_deadmin_player to auto_deadmin_always
to make it less deceptive.
Was suggested a pref could be added to do this. I can do that if people
want it maybe, but it's not in this PR at the time of posting it.
Is now a pref
<img src="https://i.ibb.co/211sBMYd/Deadmin-Prefs1.png">
<img src="https://i.ibb.co/r20Srbw4/Deadmin-Prefs2.png">
I dunno if the latejoin proccall is in the right spot in the click
sequence thing I can move it if people want.
## Why It's Good For The Game
Admins spawning themselves on station is very important for both
shenanigans and troubleshooting. It's annoying to have to click readmin
every time and I'm too lazy to figure out how to perms escalate my way
into disabling that config every round (Though I have tried).
This PR is marginally more likely to convince Timber to turn that off
than cussing him out in adminbus.
## Changelog
🆑
admin: Added a new config to force admins to deadmin when readying up or
latejoining the round.
/🆑
## About The Pull Request
Fixes revert_next_map() not actually reverting the map vote. Also added
an admin verb for it for ease of access.
## Why It's Good For The Game
Fix bug, revert map vote without having to poke around in the subsystem.
## Changelog
🆑 LT3
fix: Revert next map command actually reverts the map vote
admin: Admins now have a verb to revert the map vote
/🆑
I standardized stuff in AASs code, and all current reference to it. Also
added interactions for bounty cubes, weather reports and request
consoles, all of it can be changed from AASs UI.
Also it's easier now to add new config entries for AAS to proceed, and
it's now downstream friendly.
Well, because kind of order in code and because it's funny to make
custom messages for... Almost everything?
BTW any entry can be blocked from ingame changes, by default you can't
change Broken Arrival shuttle and Security Officer arrival
announcements, how it was before. But may be we should allow it - it's
an open question.
🆑
add: Many things now handles via AAS: Bounty Cubes, Request Consoles,
Brig Cells, Vending Machines and Orion Trails alerts, Weather Reports,
Cargo Order Console
code: Now anyone can make their own entry for AAS
refactor: AAS internals, also cleanup
/🆑
## About The Pull Request
So, some admin verbs/tools that used tguis, i.e edit/debug planes, were
available to admins with +DEBUG... but the ui_state used
`GLOB.admin_state`, which checks for +ADMIN - meaning that if they
_only_ had +DEBUG, they would have the verb... but it would do nothing
when they used it.
I've refactored `GLOB.admin_state`, `GLOB.debug_state`, and
`GLOB.fun_state` into a merged `/datum/ui_state/admin_state`, with a var
for which specific permissions are being checked for.
You now use the `ADMIN_STATE(perms)` macro to get the UI state for those
specific perms, i.e `admin_state(R_ADMIN)` or `admin_state(R_DEBUG)`,
and the resulting UI state will check for _those specific perms_.
These are initialized and cached in `GLOB.admin_states` (which should
never be directly accessed).
So, I've went thru every single usage of `GLOB.admin_state`,
`GLOB.fun_state`, and `GLOB.debug_state`, and made them all use
`ADMIN_STATE()` with the actual permission flags needed to use said UI
in the first place.
## Why It's Good For The Game
Kinda dumb for specific admin permissions to be granted verbs that don't
let them use it anyways.
## Changelog
🆑
admin: Certain UI-based tools (plane debugger, filter editor, etc) that
were given to admins with only +VAREDIT or +DEBUG, but refused to open
without +ADMIN, now actually work for admins that have the needed
permission.
/🆑
Part 1 by grungussuss: https://github.com/tgstation/tgstation/pull/87529

gives players more control over how loud they want certain sounds to be
🆑 Rengan
sound: the volume that vox, admin sound, insturments play at can now be
tweaked in preferences, check your preferences!
sound: Elevator now uses ambience volume preference, jukeboxes uses
instrument volume preference and end of round musics uses admin music
volume preference.
/🆑
previous system was weird, you had to add a comma separated list in the
channel tag in TGS itself. this is much more intuitive. also it should
not break older configs
🆑
config: Added support for multiple chat channel configs for channel
announcements.
/🆑
## Why It's Good For The Game
it's still too loud. grungus' pr is closed for now so here's this.
## Changelog
🆑
sound: The ghost poll sound is quieter.
/🆑
## About The Pull Request

Pre-discussed with @Watermelon914, this PR removes Secondary & Final
Objectives from all Traitors, rather than just midround ones. It also
removes all of the surrounding supporting code.
Randomly assigned Primary Objectives still exist, I just used the
ability to rewrite mine to take the screenshot.
In terms of final objectives, the surrounding items that were available
still exist but don't necessarily have sources.
If anyone has good ideas for readding these in some other form it can be
done in future PRs.
It also allows all traitors to buy the Contractor kit, previously
limited to midround traitors which lacked secondary objectives, because
now all traitors lack secondary objectives.
This essentially limits all traitors to a maximum of 20 TC (16 if they
spawn with an uplink implant). Currently I don't foresee that they
strictly need any additional way of gaining TC during a round as 20 is
quite sufficient, but it may take some time to adjust and get used to it
after such a long time of having access to more. If we need to adjust
the starting value or add a slow drip of more points over time or
something, that can be done in followup PRs.
This also removes the ability to recreate your uplink added by my
beautiful wife in #74315
This was part of the progression traitor design document, but ultimately
probably a bad idea as it essentially made traitors impossible to
properly disarm. You will once more just need to carefully protect your
uplink.
**This does not remove the threat/progression system**.
Like midround traitors, all Reputation requirements on gear are now
simple timelocks, most of which will have elapsed by the time 30 minutes
have passed.
**Finally** this PR also adds Romerol to the traitor uplink for 25 TC
and 30 minutes of reputation, as a treat (and because I removed the
final objective that previously granted it).
## Why It's Good For The Game
We've tried this system for a long time (3 years last month!) and while
I think it had a lot of promise, enabled some cool moments, and also
solved several of the problems it set out to solve, overall I think some
of the behaviours it has encouraged in players have been overall
negative for the game.
While the _game systems_ are fine, even quite fun and cool (especially
final objectives) I am of the opinion that having them in the game
creates a net negative purely in the way that they react with players'
_brains_, creating incentives towards behaviour we don't actually want
people to pursue.
While it's hard-to-impossible to prove any of this with hard data, there
has been a prevailing feeling for some time among many (though certainly
not all) people that the simple fact of _having_ a constant drip-feed of
objective available to players leads directly to less interesting
antagonist play. While certainly nobody is _forced_ to do secondary
objectives you are directly and quite strongly rewarded for doing so,
doing so efficiently, and doing so in a way which makes sure that nobody
(alive) sees you do it. This leads to a tendency to play defensively and
try to maximise the number of tasks you can complete in one round, which
also has a knock-on effect of generally minimising the number of people
you attempt to interact with in a round (unless you are killing them).
Even people who _intend_ on doing some more interesting gimmick can fall
into this trap, as "having more tools" is always useful for anyone who
is intending on any kind of plan at all, but then executing on the
secondary objectives again incentivises you to lay low, not interact
with anyone, be efficient, and then reduces the time you are spending
doing the thing that's your actual plan for the round. Removing the
ever-present temptation to fish for extra TC leaves "doing whatever your
actual plan is" as the sole thing to optimise.
Final Objectives too have created unfortunate psychological effects
between crewsided players and other antagonists. Because of the _threat_
(no matter how remote, Final Objectives have always been tuned to be
appropriately rare) that leaving any antagonist alone will cause them to
snowball by acquiring more power, it starts to feel foolish to respond
to any threat with less than the maximum possible level of force even if
they seem relatively innocuous in the moment. This even has an effect on
other non-progression antagonists, as traitors are the most common
antagonist type and how people treat them is going to be their default
level of reaction to most other station threats.
While there has always been the promise of expanding the system with
novel and exciting objectives that leverage appearing mid-round to do
something unique, we've taken very little advantage of that over time.
Most objectives we have added that didn't boil down to "kill someone,
with a twist" have been somewhat unsuccessful, serving either as ways to
get yourself arrested and killed for no reason or ways to get free
telecrystals by doing something the crew don't really care about
stopping you from doing. The option still exists to add more roundstart
objectives to traitors, if someone suddenly has a great idea that would
fit in this space.
The ideal outcome of making this change is a slight relaxation of crew
attitude towards feeling like their only option after catching an
antagonist that isn't sandbagging is to permanently remove them from the
round (although it's fine to do this still in many scenarios), and a
broadening of traitorous activity which is not purely focused on
collecting as many checkboxes as possible and might give people more
time to roleplay with other players, not worrying that this time could
have been more efficiently spent pursuing a different secondary goal.
I don't anticipate or desire that this will prevent traitors from
killing anyone (or even stop them from killing people they don't have a
specific objective to kill), I just want to remove the FOMO from
people's minds.
Also this gives us something to talk about at the coder townhall meeting
on the 22nd.
## Changelog
🆑
del: Misplaced or stolen traitor uplinks can no longer be recreated
using a radio code and special device, guard yours carefully or buy a
backup implant.
del: Roundstart traitors can no longer take on additional objectives in
order to earn additional Telecrystals and fast-forward any unlock timers
on items. They also cannot earn the ability to complete a Final
Objective.
balance: Roundstart traitors can now buy the Contractor Kit from their
traitor uplink, rather than only midround traitors.
add: Traitors can buy Romerol for 25 TC, after 30 minutes of time has
passed in a round.
/🆑
## About The Pull Request
For some reason I was getting this station trait a lot while testing and
it would runtime on my usual setup where I spawn myself in from
observer, because there were no bank accounts in existence.
This won't have any particular impact on a real round because you are
probably not getting a real round with no bank accounts.
## Changelog
Not player facing
## About The Pull Request
Adds a disease outbreak counter for medbay.

## Why It's Good For The Game
More amusing counters the better. More useful in medbay than the delam
counter.
## Changelog
🆑 LT3
add: Added disease outbreak incident display
/🆑
## About The Pull Request
Adds a "Seamless Heels" quirk that's neutral. You spawn with heels you
can't take off. (More items TBD)
## Why It's Good For The Game
Something for those who like to be a robot or something with heels. But
also I wanted this for a long time, and I bent reality to my whims.
## Proof Of Testing
- Heels being removed from you removes the quirk
- Color picker works
- quirk works
- we test things on prod
- merp merp meow meow squeak squeak
## Changelog
🆑
add: Seamless heels quirk
/🆑
## About The Pull Request
The sequel to https://github.com/tgstation/tgstation/pull/89234
> someone should do the rest at some point
guess what, I'm that someone :3
## Why It's Good For The Game
Same reasoning as the previous PR:
> less cluttered code is nice, and it should in theory be more optimized
as we avoid the need to run min, max, and locate.
## Changelog
No user-facing changes
## About The Pull Request
this adds a new define, `DISABLE_DREAMLUAU` (commented out by default),
which does... exactly what it says on the tin. it fully disables any
dreamluau-related code (the "Open Lua Editor" admin verb is left in,
albeit just giving the user a warning saying Lua is disabled, just so
there's no confusion about the verb itself being missing)
when compiling with OpenDream outside of CI (so dreamluau code will
still be linted), `DISABLE_DREAMLUAU` will be defined by default, tho.
## Why It's Good For The Game
makes OpenDream testing easier
## Changelog
no user-facing changes. or even code changes for most cases.
## About The Pull Request
This PR reimplements https://github.com/tgstation/tgstation/pull/71538
atop `master`. Quoting the original PR:
> Every `icon_exists()` call will cache the entire file. Past me didn't
realise _why_ file opts were so expensive, but I do now. This is
immeasurably slower on a single call, and _significantly_ faster on
subsequent calls to the same file.
I attempted to handle some of the review comments that were posted
there, by splitting screaming functionality into its own proc.
* `if(icon_state in icon_states(file))` and `if(!(icon_state in
icon_states(file)))` were refactored to use `icon_exists(file,
icon_state)`.
* Where screaming was seemingly wanted (and where there wasn't a more
descriptive error inside the `if` block), I refactored them to use
`icon_exists_or_scream(file, icon_state)`
* The exception to the above was under
`/datum/unit_test/turf_icons/Run()` and
`/datum/unit_test/worn_icons/Run()`, where `icon_states()` was being
passed a mode flag. Given that this is only used in unit tests (where
performance isn't a priority), I opted to leave these be.
Additionally, I revised the documentation comment for
`/proc/icon_exists()`, as I felt it was a bit vague currently.
## Why It's Good For The Game
https://youtu.be/Z9G1Mf6TZRs
## Changelog
No player-facing changes (hopefully).
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
## About The Pull Request
Hovering over `Current Tallies` offers a tooltip explaining how they
work
## Why It's Good For The Game
The Tallies aren't an immediately obvious system so this should help
people understand it
## Changelog
🆑 Melbert
qol: Map vote tallies explains how they work if you hover them
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Sets the fused MODsuit's defence values to be the same as the civilian
suit, removes its free insulated gloves and makes it unable to be taken
with Bad Back for the free +8 points. Additionally bumps the Mod
Complexity of the Entombed suit to 13, it will functionally be 10 since
the default storage module the entombed suits has consumes 3, and 10
complexity sets it in line with other suits.
## Why It's Good For The Game
The entombed quirk provides a comical amount of benefits for a so called
neutral quirk, including an abusable interaction with the Bad Back Quirk
that allows the player to ignore all the downsides of Bad Back and get a
free +8 points as a result.
## Proof Of Testing
Works on literally everyone else's machine. Glory to Dream-Maker. Tested
and maintainer approved.
<details>
<summary>Screenshots/Videos</summary>
</details>
## Changelog
🆑
balance: Made entombed not insulated, lowered its defences and is unable
to be taken with Bad Back.
/🆑
---------
Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
## About The Pull Request
### _**HEY HUSTLERS**_
Do you want to know all about the station's real GDP **_BREADWINNERS_**
this shift? Well, look no further than the all new GMM SPOTLIGHT. On
select shifts (Where the trait is rolled), the GMM SPOTLIGHT will shine
on who's HUSTLING and GRINDING the hardest so YOU CAN ~~know who has
enough money to try and mug them~~ LEARN THE SECRETS OF THE CREDIT
WHISPERS **AMONG US**.
Don't know where these legendary GRIND-O-HOLICS are this very SECOND?
Well, the GMM will UPDATE the SPOTLIGHT every 5 minutes, with their
IDENTITY MADE KNOWN to all crewmates via the station updates and
economic summary newcaster channels.
WHAT ARE YOU WAITING FOR? ALIEN JIM KRAMER??? UNLEASH THE SECRETS OF THE
HUSTLERS **TODAY**!!!
(The original idea for this station trait was given to me by
xhorian/@YesterdaysPromise a few months back, so big thanks to him for
the inspiration.)
Video of it in action:
https://discord.com/channels/326822144233439242/326831214667235328/1330408517248614432
## Why It's Good For The Game
This is, obviously, a negative station trait. On shifts where players
are working to make lots of personal profit, it can either serve as a
badge of honor, or as a target being painted on your back about who has
the most money. Still, it's somewhat flavorful, and I think it could be
interesting to have happen to a player, where suddenly a beam of light
from above ™️ suddenly appears and starts following you.
I wouldn't be against giving command some kind of control to let them
cancel the effect early by un-subscribing from their newsletter, but it
depends on how people feel about this.
## Changelog
🆑
add: Stations in your sector may start with the GMM spotlight, a massive
economic broadcast spotlight that will follow the wealthiest crewmate on
board until the next paycheck
/🆑
## About The Pull Request
Fishing UI has received a major glowup:
https://github.com/user-attachments/assets/e255822c-9c2c-4e09-843d-20ea70f470f5
All fishing rods now have unique frames (with material rods' frames'
colors being based on their material), and most fishing sources now have
unique backgrounds. Completion bar now uses alpha filters, making it
much smoother, and bait bar is assembled from thin lines, which allows
us to avoid stretching it when we need to resize the bar.
Fixed experiments not unlinking after being completed, resulting in
infinitely stacking examine lines on advanced fishing rods.
Fish death messages now use more fitting span_warning.
Removed devious SS_POST_FIRE_TIMING from the fishing SS, as it made
sometimes the fishing SS only fire every ***two*** ticks instead of
every tick, despite passing 0.05s (1 tick) into its process() calls -
this flag only makes sense on heavy and costly subsystems, not on a
subsystem dedicated mostly to fishing minigames. This is required as now
instead of directly assigning coordinates (why???) fishing UI uses
animate() to control the bait bar and fish icons, making it much
smoother.
Also gave blue dough its own bait overlay and mansus rift its own portal
icon because why not.
## Why It's Good For The Game
Fishing UI didn't look very nice, and removing the subsystem flag makes
the game smoother.
## Changelog
🆑
qol: Fishing minigame should be smoother now
fix: Fixed infinitely stacking examine lines on advanced fishing rods
image: Resprited fishing UI
image: Blue doughballs now have their own fishing rod overlay
image: Resprited mansus rift fishing portal overlay
/🆑
## About The Pull Request
Surprisingly never came up until now, anyways this needs to deleted in
case the `Execute()` fails because undeleted SQL queries are bad (iirc)
## Why It's Good For The Game
No more random errors
## Changelog
Unneeded