Commit Graph

8518 Commits

Author SHA1 Message Date
Jacquerel
ef10313b70 [no gbp] Jump jets activate a linked jetpack in a more sensible way (#78296)
## About The Pull Request

fikou pointed out that the code I wrote not only wasn't reliable on
destroy but also was overengineered
but only _after_ he merged it 😠 

now we just ask the jetpack module if it is on rather than using a weird
trait

## Changelog

not player facing
2023-09-14 18:54:25 +02:00
Rhials
1dd1bf4a29 An Assortment of Positive Station Traits (#78211)
## About The Pull Request

This adds five new positive station traits, of varying weight and
impact.

**Loaner Shuttle** (Weight - 4): The shuttle loan event will occur more
frequently, can occur more times per round, and has a 1.15x payout
multiplier (only for the loan offers that pay out with credits).

**Medibot Mania** (Weight - 5): Station medibots will start as advanced
medibots, able to heal all damage types. Medbot hiring scope has
expanded to include medbots that have recently earned their doctorates
as well.

**Wise Cow Invasion** (Weight - 1): Wisdom Cow visits can happen more
than once during the round, and will occur more frequently. _"You will
give someone a piece of your mind, which you can ill afford." -Wisdom
Cow_

**Shuttle Firesale** (Weight - 4): Some emergency shuttle options are
offered at a discount. Neat!

![the
sales](https://github.com/tgstation/tgstation/assets/28870487/4dec2fa6-5874-44bf-98f6-c11b97aaf3f2)

The shuttle purchase menu has been changed to sort by initial value, so
the list order shouldn't get scrambled.

**Misplaced Wallet** (Weight - 5): A repair technician from the
between-shift crew left their wallet in a locker somewhere. Good thing
the famously trustworthy crew of Space Station 13 will get it back to
them safe and sound! Is your integrity as an honest person worth more
than free maintenance access and 500 credits?

**OH ALSO**

The station trait report will now italicize trait titles, for easier
reading.

Also, this fixes a small typo in the shuttle purchase screen.
## Why It's Good For The Game

A fair number of the positive traits are just inverses of negative
traits, and there's more negative ones than positive ones (I think).
This adds some more fun, unique-ish entries to the roster.
## Changelog
🆑 Rhials
add: Shuttle Firesale positive station trait. Some emergency shuttle
options have been put on sale!
add: Misplaced Wallet positive station trait. You wouldn't steal from a
missing wallet, would you??
add: Wisdom Cow Invasion positive station trait.
add: Advanced Medbots positive station trait. Better roundstart medbots!
add: Loaner Shuttle positive station trait. More shuttle loan offers and
more payout!
qol: Station Trait titles are now italicized for easier reading.
spellcheck: Fixes a "prerequisites" typo in the shuttle purchase menu.
/🆑
2023-09-13 22:08:14 +01:00
Lufferly
dbaae7ee1e Supermatter Delamination Balance Changes (Real) (#77996)
## About The Pull Request

lord forgive me I fucked up the merge conflict

The supermatter delamination countdown timer (how long it takes to go
boom-boom after hitting 0 integrity) has been lowered from 30 seconds to
13 seconds.
Removing a sliver from the supermatter, the traitor objective, will
further lower that down to 3 seconds.
Changes the wording on the mood effects from the supermatter
delaminating slightly.
The crystal uses SPAN_COMMAND on its final countdown, which means it
talk bigger.

## Why It's Good For The Game

Currently I feel that the supermatter delamination countdown overstays
its welcome. Ideally it provides tension to get the hell out, or perhaps
to make a risky last second play to try and save the supermatter.
However right now its at 30 seconds, which gives no danger of staying in
engineering right up to integrity 0, and keeps the tension at a high
note for too long, almost to the point of awkwardness. 13 seconds is a
good balance between get-the-fuck-out while still giving some leeway for
engineers to escape and crewmembers to jump in lockers, and feels quick
enough to give that danger that the supermatter should provide.
Additionally, removing a sliver from the supermatter lowers the cooldown
to 3 seconds. Right now this is one of the harder tasks a traitor can be
tasked with, while giving relatively little payoff sabatoge-wise. To the
point where I have seen engineers just let the traitor do it, as the
debuff it gives to the supermatter is minor. Now it makes the
supermatter delaminate almost immediately after hitting 0 integrity,
which means it will likely catch some engineers in the blast if a
traitor did it stealthy. This also makes it more risky to try and fix a
delamination if the engineering/security team did not stop the sliver
from being removed. All meaning succeeding at this task should be more
rewarding and damaging.
Finally the mood descriptions for the mood effects you get when a
supermatter delaminates have been changed. Currently they are pretty
gamey, and represent what the player might be thinking more than their
character. Additionally they were not very descriptive of where they
came from, which could be confusing.

## Changelog

🆑 Seven
balance: The supermatter delamination countdown has been lowered from 30
to 13 seconds
balance: Removing a sliver from the supermatter further lowers that down
to 3 seconds
balance: The supermatter crystal uses bigger text on its final countdown
spellcheck: Some supermatter delamination related mood descriptions have
been edited to explain the mood effect better
/🆑

---------

Co-authored-by: Shadow-Quill <44811257+Shadow-Quill@users.noreply.github.com>
2023-09-12 22:08:40 -04:00
Jacquerel
172f65989e Nuclear Operative Jump Jets (#78088)
## About The Pull Request

This PR gives operative MODsuits access to "jump jets".
This is an activated module (starts pinned) with a 30 second cooldown
which removes your personal gravity for 5 seconds and (if possible)
pushes you upwards by one z level. In combination with your regular
jetpack this allows you to fly over gaps, and (most importantly) out of
pits such as you may inadvertently find yourself wandering into on
Icebox.
I have a few other changes I want to make specifically targetted at the
experience of Icebox station destruction causing people to fall several
z levels and get trapped, but this is the first one.

You have to stand still for 1 second to activate the jump jet. This is
because jetpack movement without gravity is actually usually faster than
an operative will walk, and I don't want them to just toggle it as a
sprint button while running around. If people find other tactical uses
for this though I think that's cool.

This module currently isn't available to crew on the tech web, although
maybe someone could add it later if they wanted to. It's not quite so
useful if you don't _also_ have a jetpack though.
I bumped the available complexity of the suits I attached it to up by
the complexity cost of this module so it's not taking up previously
available space.

## Why It's Good For The Game

It's funny when the whole ops team falls in a hole after an explosion
they caused and gets stuck in there fighting Snow Legions but they
should probably have some method for dealing with that.
It also lets them pop back up from the tram hole, a risky proposition
because any flying mob hit by the tram dies almost instantly.

## Changelog

🆑
add: Operative MODsuits now have an attached "jump jet" which sends you
upwards and allows you to use your jetpack under gravity for a few
seconds, perfect for navigating the pits and valleys of Icebox Station.
/🆑
2023-09-12 18:54:58 +02:00
Fikou
5046a7d3ae decks of cards no longer have their own wielded var (#78260)
## About The Pull Request
we have the trait for that

## Why It's Good For The Game
Throughout UNDERTALE, we get treated to three story sequences (4 if you
include flowey's fakeout but that's not important). The first is the
intro story, telling the tale of humans and monsters, which shortly
thereafter leads into 201X, and Chara (Toriel's house has “An old
calendar from 201X.”) falling into the underground.

The second is the waterfall flashback, its contents taking place
immediately after the intro segment, as a voice (Asriel) finds the
fallen child.

And finally, the third takes place in the True Pacifist final boss.
We'll get to it in due course, and it will have its own section, but
let's address the first two. Regarding the intro, the first thought one
might have is that simply, while narratively relevant, is not a diegetic
presentation. However, We know that everything after the “201X” frame is
Chara's memory (from an outside perspective, that is,) and we also know
that UNDERTALE LOVES bringing the non-diegetic, the mechanical, the
game, INTO the narrative. Saving, RPG Stats, hell, even the
NarratorChara. Surely the intro can be as well? On top of this, what
does the intro do for the player, as the player? Well, aside from
setting the tone, the intro gives us some setting backstory. It's all
important context, and it certainly helps… but it being in the intro
sequence is not that important; It's all presented throughout the game
via diegetic signs, books, and expositional tortoise war heroes/angry
fish guardswomen. The second half is how Chara fell to the underground,
and while also setting tone and informing the player how their character
arrived. It also creates the false impression for the player that their
character is Frisk, feeding into UNDERTALE's meta narrative; “You are
not your character, and their happy ending is not yours.” If we weren't
playing Chara, this would have no narrative impact. The story beat fails
to land by showing us someone elses' character. But, sure. This could be
a purely non-diegetic intro sequence. Simply put, The 201X portion of
the intro sequence does not make sense from a diegetic or a storytelling
perspective unless we play as Chara.

Flashback number two is explicitly a canonical, diegetic flashback. It
occurs when Frisk escapes Undyne by falling down a massive pit… again.
This time, they land in the garbage zone, black out, and have a
flashback sequence of the first time Asriel found Chara. While serving
the main narrative by setting up Asriel as a character, furthering the
final twist of the meta narrative's pacifist route, and neatly
transitioning between overworld areas, it's also very explicitly
diegetic and cannot be dismissed as an intro sequence. With this in
mind, one question is raised. Why do we see this flashback? If the
player character is Frisk, this makes little sense, why would we see
someone else's flashback and not our own? Same thing applies for a Third
Entity, but even more abstract and illogical. What even are we? Sure,
you could say Chara is somehow attached to us/Frisk and that somehow we
get a flashback from Chara who is somehow knocked unconscious by Frisk
also being knocked unconscious. I used the word somehow three times.
That's not good storytelling. A simpler answer, at least in my view, is
that We Are Chara. When Frisk is knocked unconscious, we, being
ostensibly linked to them as a Spirit/Ghost/Reincarnation/Possessing
Dead Frisk/Demon/Insert fan-theory here/SOUL Fragment, have our only
connection to the world temporarily disabled, rendering us effectively
unconscious and prompting a flashback. Nothing weird with multiple
entities or memory sharing. The waterfall flashback is simply our
memory. Simple. The simplest answers are usually the correct ones.

<details>
<summary>DO NOT RESEARCH</summary>
The third sequence is a connection/extension of the first two, displayed
when we SAVE “Someone Else” during the true pacifist battle with Asriel.
To refresh everyone, here is the direct quotes, taken from the Wiki:


[SAVE]: Someone Else
Strangely, as your friends remembered you... Something else began
resonating within the SOUL, stronger and stronger. It seems that there's
still one last person that needs to be saved. But who...? ... Suddenly,
you realize. You reach out and call their name.
Asriel: “Huh? What are you doing...?”
s
It's at this point that the sequence plays. There's no narration, but we
see the sequence of interactions between Asriel and Chara. There are no
panels (except for the first) that don't contain the both of them.
Following this, we get:

You feel your friends' SOULs resonating within ASRIEL! [This is the
generic flavour text for saving all 6, before “Someone Else”, and
appears at the asterisk above as well]
[SAVE]: Asriel Dreemurr
Asriel:
> “Wh... what did you do...?”
“What's this feeling…? What's happening to me?”
Etc. etc. let me win…
During my first and consecutive playthroughs of UNDERTALE, I came to the
conclusion that Asriel's soul still “Had Some Chara In It.” Saving
“Someone Else” was saving Chara, and then you save Asriel Dreemurr after
the story sequence.

This interpretation no longer feels particularly potent to me, but in
the spirit of completeness I'll address it alongside the more reasonable
“You just save Asriel.” Assuming for a moment though, that we do “Save
Chara”, it's not unreasonable to assume that some of Chara's ‘essence'
(or whatever) was merged with Asriel's and by SAVING them, we're SAVING
the part of them that's inside Asriel.

But I don't like that theory.

Let's talk about SAVING Asriel for a moment.

What is the motivation for doing that? Why would we, in universe, wish
to SAVE him, something that the narration explicitly prompts us to do?
He tried and probably succeeded to kill us, at least once, he wants to
reset the entire timeline, he wants to erase all our friendships, all
our progress.

So, why? Well, it's simple. He's our brother. And we know better than
anyone that he's worth saving. And at the very least, there's something
about Frisk (who appears to have absolutely no personality) that reminds
him of Chara, of us. This is, by his own admission, weird;

Asriel:
“Frisk… You really ARE different from Chara. In fact, though you have
similar, uh, fashion choices… I don't know why I ever acted as if you
were the same person.”

To summarise.

The player SAVING Asriel Dreemurr works best if they are Chara, it
becomes Chara encouraging Frisk to SAVE Asriel too.

Asriel recognises Frisk as Chara throughout the True Pacifist battle
(And Beyond), despite his own admission that this is basically
unfounded. Something is causing this recognition.

In Alphys' true lab, there lies a dusty TV and a stack of VHSes. On
them, lie some of the last words Chara had ever heard from their father.

[Asgore] Chara! You have to stay determined! You can't give up... You
are the future of humans and monsters...

These tapes are not the first time they are heard. Sleeping in Toriel's
guest bed, we dream about them. Suffering a fatal injury, they echo in
our ears. Watching the tape is yet another reveal. It's the chilling
truth that in fact, the words we (if we die a lot) are so familiar with,
are in fact the words we hear on our deathbed.

Storytelling-wise, this reveal; like all the others, fails if we do not
play as Chara.

Aside from Asriel's dialogue, Chara's genocide Narration, and the coffin
in Asgore's basement, this is the only time we hear Chara's name. That
and, this following exchange.

[Flowey]
Hi.
…
Monsters have returned to the surface
Peace and prosperity will rule across the land.
…
Well.
There is one last thing.
…
One being with the power to erase EVERYTHING…
…
I'm talking about YOU.
…
So, please.
Just let them go.
Let Frisk be happy.
…
Well, that's all.
See you later…
Chara.
This, I think, is pretty explicitly definitive. Flowey comes to you. To
us. Tells us to take a deep breath and leave the happy ending intact,
then bids us farewell by our own name.

Regardless of anything else, this definitively proves Chara is the
entity with the power to reset everything by the end of True Pacifist
(Which is a power we have). Flowey positively identifies us as “Chara”,
despite his mistake we discussed in 3C. He's not talking to Frisk,
because he refers to them in the third person.

He is talking to Us. Chara.

I don't want to discuss Flowey's use of “Chara” in Genocide all that
much, because the counter-argument is blindingly simple.

“By the time Flowey first says that name, Chara has overtaken Frisk by
feeding on the power we create for them.”

Of course, under PlayerChara, Flowey's lines still make sense, and
arguably more.

Implications
At this point, I believe the evidence is sufficient to support the
theory. With this in mind, I want to discuss the implications this has
on the narrative and meta-narrative. This is where all those funny
glossary terms come into play.

The pacifist route in UNDERTALE, as discussed above, is textually quite
simple when accepting PlayerChara. The meta-text is also relatively
simple. Meta textually, the Pacifist Route is a dissection of the
suspension of disbelief, examining how we emotionally place ourselves
within fictional worlds, and are often-times torn away from those worlds
as the game comes to an end, left wanting the true emotional connection,
wanting a happy ending that cannot be good enough for us because we're
real and it's not. The reflection of this meta narrative in the textual
narrative, quite naturally flows. We, Chara, want a happy ending. But we
can't have it, it's not our happy ending. We're gone. We've been gone a
long time. Frisk's happy ending can't be good enough for us, because we
won't be around to see it. So, we're left with a choice.

To let Frisk live happily? To accept an ending that might leave us
emotionally wanting, yet preserves our emotional journey?

To reset? To refuse an ending and satiate our emotional emptiness, yet
destroy that very emotional journey we took in the process?

The choice is the same. There is practically no separation between the
diegetic and the meta.

“Can a happy ending be good enough for you?” This question applies to
us, as the real world player running UNDERTALE.exe on our computer, and
us, Chara, the long deceased human who can do little but watch as Frisk
lives the life they wish they still had, or can destroy everything for a
hollow mimicry of that very life.

This message, however, breaks down under one specific circumstance.
Where we force a Third Entity into the mix. This one decision fractures
the cohesion and creates a meta-textually dissonant mess. Now, all of a
sudden, “Can a happy ending be good enough for you?” no longer runs
parallel through both narratives. There is no reason for the Player
Entity to wish to remain, the happy ending should automatically be good
enough because it's the happy ending. Meanwhile, Chara, despite being an
inextricable representation of “A happy ending I can't achieve,” gets
absolutely nothing to do with this meta-narrative because they're just…
not you.

“we are mario in Super Mario 64, but when he says "Thank you so much for
playing my game!" that doesn't mean we aren't still playing as mario” -
PopitTart

This is where things get weird. See, in the Genocide route.. Well, we
see Chara. On Screen. Talk to us.

Now, it can easily be argued that this completely shatters the theory,
but I would disagree. I'm going to endeavour to present a textual
explanation (or two) for this. But first, I want to dissect the
meta-text here.

Now, I'm sure the idea that “The Genocide Route's Meta-Narratve is
Fading Emotional Investment and the way emotional connection with video
games can lead to the very sabotage of that emotional connection” is not
revolutionary. However, what's conspicuously absent from all of the
third entity theorising is the way that this meta-text is mirrored in
the textual narrative.

Once satisfied with a game, having extracted all lines of dialogue and
stat boosts, once reaching all endings, a user will close the game down.
And at some point, perhaps to make room for a new game or perhaps on a
new device, will leave the game uninstalled, either deliberately, or
simply as a consequence of time.

Textually, what happens in the Genocide ending?
Now we have reached the absolute.
There is nothing left for us here.
Let us erase this pointless world, and move on to the next.

The world is destroyed. So much is left unanswered here.
Who is Chara talking to?
Where did Frisk go?
How do they have this much power?
Why would they want this?
If we ‘corrupted' them, what the hell does that even mean?
What is Chara?
For now, let's talk about who Chara is talking to.

The simplest answer is “Perspective switch.” Suddenly, we're not Chara
anymore, now we are Frisk. This meets all the dialogue options and even
vaguely mirrors the meta-text. It also manages to avoid bringing a third
entity along and so is automatically better! But, I find myself still
not fully enjoying this idea.

Remember what I said about Occam's Razor?

I think there's another option. One that doesn't involve three entities,
or even two entities, just Chara. One that mirrors the meta-text to a
degree only Toby Fox could pull off. It's a weird one, and I don't fault
you if you don't get it on your first read, but bear with me here,
because things are about to get

A little
Fucking
Abstract

Let's discard any and all pre-concieved notions of anything and hold one
singular truth above all else. “Chara Is The Player.” What does this
mean for this cutscene?

Well… it means the player is talking to…

THe player?

It also neatly answers the question of motive, so let's throw that out
the skeleton-shaped hole in the window for now.

If the player is talking to the player, this frames Chara's words in a
whole new light.

Every time a number increases, that feeling… That's me. “Chara.”

This line becomes explicitly literal. The Chara on-screen is literally
the player's feeling of satisfaction watching stat increases. But this
is all meta-textual, right? What does this mean for the textual
narrative?

Here's the thing. It can't mean anything, yet means everything.

There is no way to reconcile the fact that a Textually Real character is
directly talking about what the player feels when playing a game to
completion. The barrier between Meta and Textual no longer exists. It
can't. Not here. And with this revelation, everything begins to make
sense.

Your power awakened me from death.

Our power. Our desire to complete UNDERTALE awakens Chara from death.
They become startlingly real. We imbue this fictional character with the
real world desire to consume fiction, destroying enemies and worlds as
we go, increasing our power and our stats. Video Game Accomplishments.
And UNDERTALE has just finished being consumed.

My “human soul”... My “determination”... They were not mine, but YOURS.

Chara, the textual player, acknowledges the meta-textual player's
control over the game world. A control that we surrendered. By engaging
in UNDERTALE in a fully immersed way, we have fed the Diegetic character
that is our player character, Chara. This has continued until we haul
ourself out of the Internal Mode and into the External Mode, revoking
our immersion to make the consumption of content easier, to distance
ourself from the killing.

Raising our LV.

The more we distance ourselves, the less real UNDERTALE's world appears
to us. Once it's done, we're ready to erase this pointless world and
move onto the next. There's just one problem. UNDERTALE knows about us.
It knows we exist and it will abuse that to convey meaning. By revoking
our immersion in UNDERTALE, we end up shattering the barrier between
Meta and Textual, and this occurs because revoking our immersion is a
diegetic decision. Without this barrier, WE, as a character, gain
control of UNDERTALE and use this external mode control to

Erase the world. To uninstall.


This code doesn't actually work, of course. That was pretty obvious by
the fact that it didn't delete your game. But still, this exists in the
code that makes the game window shake when Chara attacks it. This is,
quite literally, intent for Chara to delete UNDERTALE. If you didn't
think Chara was capable of uninstalling your game before, you should
now.

Who is chara talking to?

Us.
How do hey have this much power?

We gave it to them. We Are them, and we deleted UNDERTALE when we were
done with it.
Why would they want this?

We wanted to move onto a new game.
What is Chara?

Us. ( I'll come back to this.)
But wait! What about soulless pacifist?
Well, at that point, you've surrendered Frisk's SOUL to Chara, as in,
you the real player has revoked your emotional attachment to UNDERTALE
and accepted that Chara can have control over the game. You've revoked
your immersion AS Chara, you no longer see yourself a Chara and as such
Chara becomes their own being. You've surrendered, basically. But they
let you play through it. Because why not. You might get attached again,
but that's fine. All that means is that the happy ending that was once
Frisk's, that you, the player, and you, Chara, both once lamented not
being able to live, has now been surrendered to Chara. A warped,
completionist, Chara.

You don't get your happy ending. But Chara does.

You don't even get the solace of knowing someone gets their happy
ending. Because Chara gets it.

Frankly, outside of being “The Player”, I don't think the exact nature
of “Chara” is that crucial. My personal thought is that they're a SOUL
fragment, absorbed by Frisk when they fell on Chara's grave (Frisk could
absorb a human SOUL fragment because said fragment was part monster
SOUL). This fragment gives Frisk the final edge of determination needed
to SAVE.

But, ultimately, that's little more than a fanfiction. And frankly, I
think that's okay. Not everything needs to be impenetrable, as long as
there's enough there to build a stable foundation.

I'd also like to address the nature of SAVING quickly, specifically the
normal version, not the Asriel fight version. People have asked “Why do
we save if it's Frisk's SOUL.” There could be many reasons. Frisk might
just defer control to us. Because we're pushing Frisk over that
Determination limit, we might be privileged to have that control.
</details>

## Changelog

not player visible
2023-09-12 14:55:14 +01:00
Hatterhat
ac18420676 John Splintercell: a gun that is only good for shooting out lights (#78128)
## About The Pull Request
adds the SC/FISHER lightbreaker self-charging energy pistol, which does
0 damage. As a joke.

![image](https://github.com/tgstation/tgstation/assets/31829017/84603fcd-dbc3-4857-a657-98c4bd34e881)


https://github.com/tgstation/tgstation/assets/31829017/97572baa-7421-4800-a60e-2db03f4adc6d

<details><summary>actual details, in case the video wasn't good
enough:</summary>

unless you shoot at light fixtures,

![image](https://github.com/tgstation/tgstation/assets/31829017/54092fbf-cbf6-4750-b2b8-37d643efba2a)
floodlights,

![image](https://github.com/tgstation/tgstation/assets/31829017/90b19560-fa25-471b-9f6f-3147c33e5c56)
or people with flashlights/seclites (even on helmets or guns) (it still
does 0 damage, it just turns off their lights. not permanently)

![image](https://github.com/tgstation/tgstation/assets/31829017/1a83c6f9-8fff-4035-aeeb-515319a3dd40)
it also works on crusher lights. and cyborg headlights. i don't have a
screenshot for it.
doesn't work on flares though.

also it can shoot past machines and lockers

![image](https://github.com/tgstation/tgstation/assets/31829017/8fb0a213-8e4a-42cc-9daa-eae5faf6ee77)
</details>
(also adds a variable for deciding how loud a dry fire sound is, in case
you want to make your gun's empty sound be less loud.)

## Why It's Good For The Game

Adds a silly little tool for silly little men who either really hate
lightbulbs or want to recreate the experience of being John
Splintercell, the lightbulb-assasinating secret agent from Fork Echelon.

## Changelog

🆑
add: The SC/FISHER disruptor pistol, a very compact, permanently
silenced energy gun, is now stocked in Nanotrasen-accessible black
markets with a price generally somewhere between 400 and 800 credits.
Aspiring users are warned that it's really bad for trying to actually
kill people. Caveat emptor.
add: Guns now have a dry_fire_sound_volume variable, allowing for guns
to be less loud when trying to fire while empty.
fix: Closets and crates now properly count as structures for pass flags
again.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-09-12 14:02:10 +02:00
nikothedude
c0105406b0 Blacklists quantum medicine from allergy (#78251)
## About The Pull Request

Title.
## Why It's Good For The Game

Its a subtype of adminorazine that you're probably never going to ever
get (only high alert ERTs can spawn with them, meaning its admin-only)
and was probably unintentionally left in.

Getting quantum medicine is basically just getting a free "empty"
allergy slot.
## Changelog
🆑
fix: Medicine allergy can no longer roll quantum medicine
/🆑
2023-09-12 02:07:42 +02:00
san7890
a7060641bb Converts vomit() to use bitflags (#78191)
## About The Pull Request

Having seven trillion boolean arguments isn't kino nor poggerchampion,
let's adjust it so we use a define flag-based system that works really
nice. I also cleaned up a lot of jank and stuff that simply just never
was meant to work.

We also had sprites for nanite vomit, but this was completely unused!
Since we still have an interaction where you're meant to throw up
nanites, I added that it so it could be leveraged. Neato.
## Why It's Good For The Game

Much easier to pass in the right args or special args to a high-profile
proc.
## Changelog
🆑
image: When you throw up nanites, your vomit should now be appropriately
nanite-colored.
/🆑

Let me know if I glonked anything.

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-11 21:39:16 +00:00
carlarctg
dd8d13d8bc Several common 'household' reagents can be used as improvised medicine treatment. Updated first aid analyzer information. (#77746)
## About The Pull Request

Several common 'household' reagents can be used as improvised medicine
treatment.

Drinking tea will help mend (non-bone) wounds over time.

Flour and corn starch may be splashed onto wounds to help dry them up,
though they'll have a negative effect on burn wounds.

Added a new reagent, saltwater, made by combining table salt with water.

Table salt and saltwater can be splashed onto wounds as well, reducing
bleeding and improving sanitization and disinfection significantly.
However, the coarse undiluted salt will irritate the wounds, reducing
clot rate and flesh healing, and both of the reagents will increase a
burn wound's infestation rate.

Altered Table Salt's recipe to just need sodium and chloride. Changed
the recipe of Pentetic Acid and Heparin to need table salt (sodium x
chloride) and thus slightly altered the total output of those reagents
(pentacid went from 5u per reaction to 4u, heparin 4u->3u)

Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar,
meaning the overall recipe should be completely unchanged in practice.
Contact me on discord if any issues arise from these chemical changes!

First aid analyzers now give easy-to-understand direct information, with
the specific recommended treatments bolded in the analysis text. They
also have a 'unique' extra bit of info, telling you about improvised
ways to remedy your wound.
## Why It's Good For The Game

Wounds have a very poor amount of interaction with the rest of the game
and have not had much added to them post-merge, especially in
'improvised' ways to help Not Die to a wound while you crawl your way to
a emergency medkit or medbay. I researched info on this and found some
interesting ideas - some of them I'll have to leave for later because
this PR kept growing out of scope (Improvised bone gel, ice on wounds
which turned into wound temperature mechanics, crutches, a 'suture item'
component refactor...)

As for what this actually does to benefit the game, it allows more
dynamic wound Gameplay as people use first aid analyzers to get
information on treatment when medbay blows up, helps them stabilize by
splashing flour onto themselves before looking for some actual
treatment, helps traitors realize how they can self-treat many crippling
wounds (at risk, of course). It expands treatment options to things
beside medkits and medbay, but always does so in ways that have
downsides that make them not ideal as _treatment_, and more beneficial
as stabilizing before seeking true professional help. This thus
significantly increases the rather shallow depth of wounds as a system
to interact with.

> Several common 'household' reagents can be used as improvised medicine
treatment.

From what I could tell by looking at several sources for each
'realistic' treatment, these are indeed semi-reasonable things that are
done to wounds by some people as household treatment.

It goes without saying that you should **not do any of these things in
real life** without consulting a doctor unless your blood is also
spilling out by the gallon into the floor. All these 'realistic
treatments' have drastic downsides and are meant for the short-term
only. Except the tea.

> Drinking tea will help mend (non-bone) wounds over time.

Tea is healthy, we all know that.

> Flour and corn starch may be splashed onto wounds to help dry them up,
though they'll have a negative effect on burn wounds.

Flour and apparently starch dries wounds up but risks infection. That's
not a thing for blood wounds yet but oh well.

> Table salt and saltwater can be splashed onto wounds as well, reducing
bleeding and improving sanitization and disinfection significantly.
However, the coarse undiluted salt will irritate the wounds, reducing
clot rate and flesh healing, and both of the reagents will increase a
burn wound's infestation rate.

Salt kills bacteria via osmosis, but it also kills your own cells, and
some bacteria like salt.

> Added a new reagent, saltwater, made by combining table salt with
water.

> Altered Table Salt's recipe to just need sodium and chloride. Changed
the recipe of Pentetic Acid and Heparin to need table salt (sodium x
chloride) and thus slightly altered the total output of those reagents
(pentacid went from 5u per reaction to 4u, heparin 4u->3u)

> Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar,
meaning the overall recipe should be completely unchanged in practice.
Contact me on discord if any issues arise from these chemical changes!

I wish I hadn't had to mess with reagents like this, but I needed to
because just adding mixing salt and water caused the saline glucose
recipe to basically split itself into half saltwater half glucose.

I removed the water requirement for table salt (Why did it even have
that, salt ain't wet bro?), made saline-glucose need 2u saltwater and 1u
sugar, and altered relevant recipes so they didn't also cause unwanted
table salt to react from their sodium and chloride ingredients.

A happy side-effect is that saline glucose solution is even easier to
make now as an improvised chem by mixing salt, water, and sugar, which
fits pretty perfectly (especially as a temporary blood substitute)

> First aid analyzers now give easy-to-understand direct information,
with the specific recommended treatments bolded in the analysis text.
They also have a 'unique' extra bit of info, telling you about
improvised ways to remedy your wound.

You might notice that as the wounds get more serious the text gets more
direct and concise and reluctantly hands out more and more improvised
treatment options, so that's fun. As for the improvised section itself,
it helps people be actually aware of these ways to help treat themselves
rather than delegating it to hyper-gamer knowledge.

The bolded treatment bit is pretty neat and means your eyes can
inmediately focus on what you can do to save yourself - very useful if
you have a weeping avulsion and no bandages.
## Changelog
🆑
add: Several common 'household' reagents can be used as improvised
medicine treatment.
add: Drinking tea will help mend (non-bone) wounds over time.
add: Flour and corn starch may be splashed onto wounds to help dry them
up, though they'll have a negative effect on burn wounds.
add: Added a new reagent, saltwater, made by combining table salt with
water.
add: Table salt and saltwater can be splashed onto wounds as well,
reducing bleeding and improving sanitization and disinfection
significantly. However, the coarse undiluted salt will irritate the
wounds, reducing clot rate and flesh healing, and both of the reagents
will increase a burn wound's infestation rate.
add: Altered Table Salt's recipe to just need sodium and chloride.
Changed the recipe of Pentetic Acid and Heparin to need table salt
(sodium x chloride) and thus slightly altered the total output of those
reagents (pentacid went from 5u per reaction to 4u, heparin 4u->3u)
add: Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar,
meaning the overall recipe should be completely unchanged in practice.
Contact me on discord if any issues arise from these chemical changes!
qol: First aid analyzers now give easy-to-understand direct information,
with the specific recommended treatments bolded in the analysis text.
They also have a 'unique' extra bit of info, telling you about
improvised ways to remedy your wound.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-09-11 14:44:31 -06:00
MrMelbert
013ae256ec Reverts Makes Spacers Taller #76909 (#78195)
## About The Pull Request

Reverts Makes Spacers Taller #76909 

Spacers are back to "Taller" height rather than "Tallest"

## Why It's Good For The Game

Quite simply, I don't like the look of it on humans, the filters really
weren't designed to stretch that much. If someone wants another shot at
making the spacers taller again they'll probably need to make a new
displacement map.

I did move it out to a var so downstreams can override it and set their
own if they'd like.

## Changelog

🆑 Melbert
del: Spacers are slightly shorter. They're still taller than other
people, just not as much.
/🆑
2023-09-11 09:56:21 +12:00
Sealed101
5e9e45f1b6 Polymorph belt blacklists several biotypes instead of allowing only organics (#78229)
## About The Pull Request

Title; this makes the belt able to morph into _more_ mobs, but _less
problematic/abusable_ mobs hopefully. It still only functions on
basic/simple_animals, however.

~~Headslugs get a `MOB_UNDEAD` bioflag to prevent morphing into them
completely. Though catching a sentient ling slug and morphing everyone
into it is funny, it's only funny the first 5 times someone does it.
(disclaimer: this is an approximation, i did not actually see a
polymorph belt in-game because i currently play miner and like 10 games
a week tops)
Arguably, this isn't ideal, but it's the closest we get unless we rename
`MOB_EPIC` or something into `MOB_SPECIAL` and let that one be the go-to
bioflag for mobs we don't want **fun** things happen to.~~
`MOB_EPIC` is now `MOB_SPECIAL`. Headslugs get that.
I think the alternative methow could use whatever the gold cores use to
determine what to spawn but that would shift the mobs available for the
belt even more and I can't be assed to figure out how _much_ of a shift
that would be. Dragons or slimes or lavaland mobs would be out, for
example. Don't really vibe with that.

Fixes headslug's description bit that discerns a sentient slug from an
AI one showing up on a dead slug. It can't move while it's dead, no
matter its mind/AI.

Also adds simple dmdoc comments to the defines to help discern a few of
them more easily. Non-quip text suggestions welcome.

## Why It's Good For The Game
- Resolves #77756
- Resolves #78227

More mobs available for the funny belt but less _fun_ mobs should allow
for more stable use of the damn thing. Arguably, some of the mobs that
have been found to be incompatible with the belt are simply lacking a
`MOB_ORGANIC` flag, some of them with no apparent reason. However,
blacklisting potentially problematic biotypes should be easier to design
the unwanted mobs around.
Also consistency, less all-ling stations, code clarity. Whatever.

## Changelog

🆑
balance: polymorph belt now blacklists mobs that are undead, humanoid,
robotic or spiritual (in nature, not religiously), as well as megafauna
balance: however, this means that it works with more mobs that it should
logically work with, like slimes/bugs/lightgeists etc
fix: fixed headslug shenanigans with the polymorph belt hopefully for
good this time
fix: fixed headslug description mentioning its movement despite the slug
being dead
/🆑
2023-09-10 21:09:01 +02:00
jimmyl
d61b582165 humpback emergency shuttle (#78021)
## About The Pull Request

![2023-08-31 10 20
06](https://github.com/tgstation/tgstation/assets/70376633/6f372852-cde0-48df-95dd-8d482d43085b)

adds that thing
has a medbay, brig is at the air supply controls, air supply is there to
make sure the shuttle doesnt get depressurized when people go to the
outside part to see spess

also has a bar

also forces a carp shuttle event but it should be usually the passive
carp one
## Why It's Good For The Game

it could probably bring another cool layout to the shuttle roster

## Changelog
🆑
add: humpback emergency shuttle
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2023-09-10 13:16:41 +02:00
nikothedude
009af8c2ce [TEST-MERGE FIRST] Wound refactor number two: Full synthetic support (#78124)
## About The Pull Request

Heavily refactors wounds AGAIN.

The primary thing this PR does is completely change how wounds are
generated and added - while the normal "hit a guy til they bleed" stuff
works about the same, asking for a specific type of wound, say, like how
vending machines try to apply a compound fracture sometimes, isnt going
to work if we ever get any non-organic wounds, which the previous
refactor allowed.

With this PR, however...
* You can now ask for a specific type of wound via
get_corresponding_wound_type(), which takes wound types, a limb, wound
series, etc. and will try to give you a wound fitting those
specifications - but also, a wound that can be applied to a limb.
* This will allow for a vending machine to apply a compound fracture to
a human, but a collapsed superstructure (assuming my synth wounds go in)
to a robot

There are now new "series types" and "wound specific types" that allow
us to designate what series are "mainline" and randomly generatable, and
what are "alternate types" and must be generated manually - you can see
the documentation in wounds.dm.

The behavior of limping and interaction delays has been abstracted to
datum/wound from bone wounds to allow just, general ease of development

Pregen data now allows for series-specific wound penalties. Example: You
could set a burn wound's series wound penalty to 40, which would make
wound progression in the burn category easier - but it would not make it
any easier to get a slashing wound. As it stands wound penalties are for
wounds globally

Scar files are now picked in a "priority" list, where the wound checks
to see if the limb has a biostate before moving down in said list.
Example: Wounds will check for flesh first, if it finds it - it will use
the flesh scar list. Failing that, they then check bone - if it uses
that, it will use the bone scar list. This allows for significantly more
modular scars that dont even need much proc editing when a new wound
type is added

Misc changes: most initial() usage has been replaced by singleton
datums, wound_type is now wound_types and thus wounds can accept
multiple wound types, wounds can now accept multiple tool behaviors for
treatment, wounds now have a picking weight so we can make certain
wounds rarer flatly,

This PR also allows for wounds to override lower severity wounds on
generation, allowing eswords to jump to avulsions - but in spirit of
refactoring, this has been disabled by default (see pregen data's
competition_mode var).
## Why It's Good For The Game

Code quality is good!

Also, all the changes above allow wounds to be a MUCH more modular
system, which is one of its biggest problems right now - everything is
kinda hardcoded and static, making creative work within wounds harder to
do.

## Changelog
🆑
refactor: Refactored wounds yet again
fix: Wounds are now picked from the most severe down again, meaning
eswords can jump to avulsions
fix: Scar descs are now properly applied
/🆑
2023-09-09 19:20:21 -04:00
Jacquerel
50dcb9f85a Allow spawner component to be instantiated with an empty list (#78188)
## About The Pull Request

Supplementary to ffd3edc22b

Fixes #78172
The spawner component could be added to arbitrary items by admins but
would always throw an error because it was passed an empty list. Admins
were not capable of providing anything _other_ than an empty list to it
on init, due to limitations in our interface.
We (I but I had help) broke this in #73645 by removing the default
"spawns carp" list.
It is still silly for it to default to spawning carp, but instead it can
now be instantiated with an empty list without breaking, and an admin
can then VV it to further modify the list to what they actually want it
to do.

## Changelog

🆑 
admin: Admins can add/remove the spawner component from arbitrary items
again.
/🆑
2023-09-09 10:54:27 -06:00
Jacquerel
5dddedf340 Collected food fixes (#78190)
I went through the code and tried to find all of the remaining places we
forgot to update the arguments passed into `item/food/Initialize` after
more arguments were added to it, because there were a couple and they
caused things to stop working.
Most notably, golems were unable to eat anything because nothing would
correctly spawn "golem food".

_Additionally_ we were using a bunch of named arguments in new whenever
crafting or cooking food. This runtimed, causing the food not to init
properly.
_On top of that_ a late code review on a recent PR processed a list into
a string_assoc_list twice causing it to become null.

Finally, we were trying to check the food preferences of examining
ghosts or dogs or other non-human mobs. We shouldn't do that.

I also added a unit test for moth and golem food in the hopes that we'll
notice them breaking.
2023-09-09 12:39:42 +00:00
san7890
7ce5f04e49 Canonizes Robot Yawns (#78175)
## About The Pull Request

Closes #77592

I agree that it's silly that robots shouldn't be able to yawn, but I
think that instead of removing the potential for this interaction to
occur outright (which can be done with moving around a check), it should
be embraced instead.

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/34697715/43aaeda1-4cb2-4ca5-b9ef-fd11a37ee583)

Robots fake-yawning to make them feel more realistic to the workers of
the station (and if they aren't station based, their once-creators
(which is fine because we removed swarmers)) and not being exempt from a
really cutesy niche interaction greatly appeals to me.

## Changelog

🆑
add: Ever see a robot yawn? Don't worry, it makes sense now.
/🆑
2023-09-08 17:27:25 +02:00
Jacquerel
6d258e5527 Choose your own Objective (#78118)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/7483112/12d3cf8d-4538-42c3-a962-bf2d6653ef55)

![image](https://github.com/tgstation/tgstation/assets/7483112/60981726-8495-47e8-8924-dd18c000fdfe)

This PR adds the ability for solo antagonists (Traitor, Changeling,
Heretic, Wizard, Malfunctioning AI, and Ninja) to "write-in" their own
objectives in place of the ones the game gave them.
For traitors this is located on the uplink (though the button is not
present if you aren't the owner of the uplink, thieves can't give you a
troll objective) and for everyone else it is on the antagonist
information panel.

Pressing this button will replace all of your objectives _except_ ones
like "escape alive" or "survive" or "die a glorious death".
By default a player can only do this once per round, but the Traitor
Panel admin tool contains a button which can display the prompt again.

Custom-entered objectives are not mechanically tracked in any way and do
not report success or failure on the round end screen, whether they were
successful or not is up to you the audience. Resultingly, doing this
will make you ineligible for getting the hardcore random points from
completing your objectives.

Admins are capable of using this button to show the prompt to _any_
antagonist, including team antagonists, but do so at their own risk. A
single cultist changing their objective to something else only updates
them, not their team.
Admins can also choose whether or not it replaces existing objectives or
just adds a new one entered by the player.

When someone sets a new objective, it informs any active administrators
of their choice and provides linked buttons to send them a syndicate
radio message or immediately smite them, because unfortunately our
players cannot always be trusted with arbitrary text entry.
I _didn't_ make this a system which requires approval because I don't
think admins _want_ that level of micromanagement, although plausibly if
it is thought to be a good idea I could add a time delay and reject
button similar to the "rename the station" charter item.

Heretics work slightly differently and have an "Are you sure?"
confirmation other antagonists lack.
This is because Heretic objectives are directly tied to ascension, thus
by replacing the objectives you are locking yourself out from being able
to do it.
I don't _necessarily_ think this is a terrible thing, because "try to
ascend" _is_ the default objective. There's no point entering a new one
if that is what you want to do anyway.

While I was in here I gave Ninjas a very rudimentary custom antagonist
panel, because they didn't have one.
I also made their C4 display where it can be detonated on examine, in
case you no longer have the relevant objective to reference.

<details>
  <summary>Other previews</summary>
  

![image](https://github.com/tgstation/tgstation/assets/7483112/55ca6ce5-a5a5-4201-9bc6-88dd4e4e35a1)

![image](https://github.com/tgstation/tgstation/assets/7483112/cba5b921-addd-4886-8d83-b0b383607efc)

![image](https://github.com/tgstation/tgstation/assets/7483112/69212c87-5a93-4524-ab9a-f2540fc61617)

![image](https://github.com/tgstation/tgstation/assets/7483112/fc5c1d26-18ef-4481-857d-ae4142e13f95)

![image](https://github.com/tgstation/tgstation/assets/7483112/046589ac-e7a5-4006-8087-42e9bcd1016e)
</details>

## Why It's Good For The Game

It's a reasonably frequent refrain that "Objectives are just guidelines"
and that more interesting players should strive to ignore them and do
something else, I would hope this would encourage that kind of
behaviour.
If you _are_ going off and doing your own thing, now other players can
actually see what it was that you were trying to do when the round ends
(and judge you based on whether you actually did it).

## Changelog

🆑
add: Traitors, Changelings, Heretics, Wizards, Malfunctioning AIs, and
Ninjas can now all reject their original objectives and provide one of
their own in its place. A Heretic doing this will no longer be able to
ascend.
add: "Custom" objectives which aren't mechanically tracked will no
longer report success or failure upon round end.
qol: Space Ninja spider charges will now display where they can be
detonated when examined, if you are a ninja.
/🆑
2023-09-07 20:25:52 +01:00
Bloop
86f0eaab3a Fixing this dead mouse related harddel (#78150)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/78085

Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23510
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23506


![image](https://github.com/tgstation/tgstation/assets/13398309/fab09657-12e8-4fb8-9e84-05ef48c9d55e)

When the foodening added some args to the constructor of
`/obj/item/food` some instances of the constructor being passed stuff
got overlooked and were not updated.

This resulted in a mob ref potentially being passed in to
`starting_reagent_purity` in some cases, ultimately resulting in this
harddel.

@SyncIt21 this is exactly the reason I was being so paranoid with #77946
the other day. Tracking constructor uses down can be such a pain when
they aren't prefaced with a type, and are almost guaranteed to get
overlooked during refactors if the compiler does not say anything about
it.

I hate DM.

edit: and I just tested this only to find a second bug with the ice
cream. I can confirm that it is in fact working now after fixing that
one too.

<details><summary>evil ice cream</summary>


![image](https://github.com/tgstation/tgstation/assets/13398309/46cd85cd-1051-46d9-9642-0275af098dbe)

</details>

## Why It's Good For The Game

Fixing a harddel that was causing many CI failures

## Changelog

🆑
fix: fixes creamatorium not producing any suspicious ice cream, and
fixes a dead mouse related harrdel
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-07 19:33:16 +01:00
Ghom
2563528d89 GAGS, recolorable and actually glowing glow shoes. (#78071)
## About The Pull Request
I've converted the gags_recolorable component into an element (it has no
var of its own) and the glow shoes icons to greyscale, added emissive
icon states for the shoes, both for its own sprite or when worn, and the
ability to recolor them with a spraycan (tbh a lot of clothing should be
recolorable with a spraycan in general but that's beyond the scope of
this PR)

Oh yeah, if you examine an item with the gags_recolorable element twice,
it now tells you can use a spraycan to recolor it.

## Why It's Good For The Game
They are called glow shoes yet don't glow, and the supposed glowing
stripes only come in a single flavor of blue. Truly the definition of
lame.

Overall, it looks as goofy as ever: I didn't put much effort into the
grayscale icons beyond the necessary:

![proofthatitworks](https://github.com/tgstation/tgstation/assets/42542238/93aa7701-122d-4214-a890-7f69df3cb309)


## Changelog

🆑
image: The glow shoes from the ClothesMate now actually glow and can be
recolored, even with a spraycan.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-09-07 14:11:32 -04:00
san7890
4b8de7b79f Refactors the notransform variable into a trait. (#78146)
## About The Pull Request

Hey there,

There were more than a few times (like in cinematic code) where we might
need to accurately know the source of what's adding this trait (or have
multiple sources for the whole 'we don't want this mob to do shit while
we transform this mob'), so in order to rectify this potential issue,
let's refactor it into a trait.

## Why It's Good For The Game

Some code already declared that there might be issues with this being a
boolean var (with no way of knowing _why_ we don't want this mob to not
transform (or not do anything idk). Let's remove those comments and any
future doubt in those instances with the trait macros. Also, stuff like
`TRAIT_IMMOBILIZED` which does a similar thing in many contexts was
already a trait that was regularly added in conjunction with flipping
the variable, so we're able to flatten all that stuff into
`add_traits()` and `remove_traits()` now. nice

I also cleaned up quite a bit of code as I saw it, let me know if it
should be split out but I guarantee that if I didn't do it- no one will
for the next two years.

## Changelog

🆑
refactor: If you transform into another mob and notice bugs with
interacting with the game world, please create a bug report as this
framework was recently refactored.
/🆑

Probably fucked up somewhere, lmk

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-09-07 16:45:50 +01:00
Sealed101
00236a1e20 Colossus' Titan's Finale ability has a 0.5 seconds delay before starting the attack (#78171)
## About The Pull Request

ided pls nerf

## Why It's Good For The Game

This motherfucker is horrid to fight with a crusher because the first
attack that he does in this action is a shotgun blast, which you just
eat with your face and die. The only reasonable way to trigger this
attack is with a ranged weapon or with a hiero's trophy, the former
being antithetical to the challenge/playstyle that is crusher mining and
the latter being wildly uncontrollable.
Half a second should be ample time to dodge out of harm's way before
server-lagging touhou begins.

## Changelog

🆑
balance: colossus' near-death attack now starts after a 0.5 seconds
delay
/🆑
2023-09-07 16:12:32 +02:00
die_amond
f309886bf3 Adds special lung sprites for smoker quirk (#78119)
## About The Pull Request
What it says on the tin, adds special sprites for ethereal, plasmaman,
and regular lungs for if you use the smoker quirk.

Top is normal lungs, bottom is lungs if you use the smoker quirk

![smokerlungs](https://github.com/tgstation/tgstation/assets/58376695/eeb95ab6-3f99-4f64-8cfb-6d9ded0b9413)

Adds some cool flavor and a visual difference between regular and smoker
lungs. Previously, smoker lungs looked identical to normal ones but had
less health and healed slower.
## Why It's Good For The Game
Details are nice, and it was weird there was no visual difference before
since realistically, smoking constantly makes your lungs very visually
different and deteriorate over time.
## Changelog
🆑
image: adds special sprites for lungs when you use the smoker quirk
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-09-06 13:32:37 -06:00
Ben10Omintrix
4a8ce66e81 fix basic mobs ranged burst attacks (#78163)
## About The Pull Request
the burst attacks wasnt working because a cooldown in the ranged
component qwas added recently. this now moves the burst attacks option
to the component itself so even sapiant player mobs can use these burst
ranged attacks

## Why It's Good For The Game
fix basic mobs ranged burst attacks

## Changelog
🆑
fix: basic mobs can now use ranged burst attacks
/🆑
2023-09-06 13:30:57 -06:00
Time-Green
1be0841d98 Removes COMSIG_AREA_INITIALIZED_IN (#78143)
Literally just me stealing #77207 completely muhahahhahahah screw you
@Mothblocks
I did add some documentation and some radnebula related cleaning and
testing to make it work well

Copied from original PR:

> Please do NOT add code to InitAtom, it is extremely hot. The
conditions on this alone were costing nearly 200ms on my extremely
powerful machine.
> 
> Changes the radioactive nebula to perform its work by looping over
every space tile on init (which on my machine is faster than the time
being wasted on this signal), and adds a subsystem that does this in
SS_BACKGROUND every 30 seconds (usually completeable in about half a
second) for any new atoms, because the effect is hardly noticeable
anyway with how green space is.

Honestly we really don't care that much about stuff being initialized in
space. Everything that walks into space (about everything that matters
to players), is completely unaffected by this change, but roundstart is
now slightly faster
2023-09-06 15:32:44 +00:00
Sealed101
d29b3df5e7 Cursed actually breaks mirrors when it procs (#78094) 2023-09-06 01:48:35 -04:00
Nerevar
c962e90ed2 Worn Shirt Resprite (& GAGS Enhancement) (#78014)
## About The Pull Request
Hi! Sheets gave me some new sprites for the worn shirt, the Ian shirt,
and the gamer shirt you can find on MetaStation. These come in three
variants.


![image](https://github.com/tgstation/tgstation/assets/12636964/0111d5a5-5c78-4f59-912b-05184e9e06df)
Clean, worn out, and messy, for varying degrees of 'washedness.'


![image](https://github.com/tgstation/tgstation/assets/12636964/d083bd00-e272-467f-8c95-60f7f0168b64)
As seen here on these mobs.

They are now also GAGS grayscaled, which means 

![image](https://github.com/tgstation/tgstation/assets/12636964/d099a459-a6cd-47d3-b5eb-915b7c5e3501)
they are highly recolorable; and look good to boot.

However, I have also elected to give them a variant for each version; a
'graphics' variant with either Ian, or Phanic the Weasel.

![image](https://github.com/tgstation/tgstation/assets/12636964/6fdb7dd8-9b04-46ab-bfc9-3711685401bd)
The gamer shirt and the Ian shirt retain their unique names and
descriptions, luckily.

Due to the Phanic shirt using an uncolorable third zone, this allows you
to make your very own Phanic OCs, seen here in the full vignette.

![image](https://github.com/tgstation/tgstation/assets/12636964/92d3f8ea-be3d-47d1-9e76-7d98dfa0b629)

## Why It's Good For The Game
Drip drip drip.

## Changelog
🆑 Sheets and Nerev4r
sprite: Complete redo of the worn shirt, Ian shirt, and gamer shirts;
now GAGS-compatible!
/🆑

---------

Co-authored-by: Snakebittenn <12636964+Snakebittenn@users.noreply.github.com>
2023-09-06 10:38:29 +12:00
Acantharctia
f83c5f72a0 Adds a "Hurt no More" quirk (#78102) 2023-09-05 15:49:24 -04:00
lizardqueenlexi
36e0f671d7 Improved dismemberment mood messages. (#78134)
## About The Pull Request

Implements suggestions in #78107 

Old:

![265254748-b7a2d9e6-1be8-4246-bd67-3c13a9dd2d6c](https://github.com/tgstation/tgstation/assets/105025397/8473ccc4-957b-4a7e-a3c5-9bdb52899f19)

New:

![image](https://github.com/tgstation/tgstation/assets/105025397/bff75fdd-046b-4a25-a3f5-5dcc3d68d537)
## Why It's Good For The Game

Proper all-caps looks significantly less awkward than the current
message, and the rearranged phrasing flows better than "I WAS USING THAT
LEFT LEG!" and such.
## Changelog
🆑
spellcheck: Improved phrasing and syntax on dismemberment mood messages.
/🆑
2023-09-05 17:53:59 +08:00
Ben10Omintrix
4aa50ea5c2 minebots basic bots (#78032)
## About The Pull Request
Transforms the minebots into basic robots. You can now command these
minebots to extract minerals for you. To activate automated mining mode,
simply instruct them with the command "mine." They will then proceed to
autonomously mine walls and gather ores. If you wish to make the bot
deposit all the collected ores, use the command "drop." Alternatively,
you can leave it in collection mode, and it will gather all the ores you
mine. Additionally, the bot now responds to several more commands; you
can instruct it to follow you, toggle its lights on or off by saying
"lights." In attack mode, it refrains from mining or collecting ores but
will engage in combat alongside you. If it detects you as deceased or
unconscious, it will alert all miners, request assistance, and relay
your coordinates via the mining communication channel. to power it on u
will need to feed it any type of ore first so it may listen to ur
commands

## Why It's Good For The Game
makes the non sapiant minebots more useful

## Changelog
🆑
refactor: the minebots have been refactored please report any bugs
add: minebots can now mine walls and collect ores automatically and they
will alert everyone if they find u dead
/🆑
2023-09-04 21:37:16 -06:00
Emmett Gaines
6dd42926c7 Revert "Only checks for greyscale json config folder (#74782)" (#78028)
Puts back the restriction on greyscale config location so that all the
configs have to be in the same overall place. Having all the configs in
a single folder *is* a mess, but this is why subfolders exist. Having
configs scattered throughout the code folder would make it a pain to
keep track of all the different configs, especially when it comes time
for breaking changes. The config folder should be thought of similarly
to the icons folder.

Put your configs in subfolders meant for their type, and make new ones
if it seems appropriate just like how we do with icons.
2023-09-05 03:18:30 +02:00
Sealed101
1bd5635a61 mob_transformation_simple sends a COMSIG_MOB_CHANGED_TYPE signal, letting content_barfer mobs spit things out (#78093)
## About The Pull Request

Title; also makes bileworm devour message have a warning span.
~~it's a bit cheeky but i didn't want to add a deletion signal to the
content_barfer's signal list, and the wabbajack signal here kinda makes
sense?~~

## Why It's Good For The Game

Fixes #76791

## Changelog

🆑
fix: fixed bileworm evolution deleting anything they devoured; they will
now eject their contents upon evolution to vileworms
/🆑
2023-09-04 17:23:05 +01:00
A miscellaneous Fern
a92843744b Simplifies the way burning food is handled, kills burns_in_oven and burns_on_grill (#77570)
## About The Pull Request

Currently, burning food is handled in the following way (for the sake of
brevity I'll explain it with baking but it's essentially the exact same
with grilling):
- If a recipe has a baking recipe added in it's `make_bakeable`, then it
will produce that when baked.
- If it does not have a recipe added, but `burns_in_oven` is TRUE, then
it will have a negative baking recipe for "burned mess" added by the
parent of `make_bakeable`, and be turned to that after 20 to 25 seconds.
- If it has neither, it will instantly be set on fire.

What this PR does is, basically, remove the check for
`burns_in_oven/burns_on_grill` and make food always have a negative
burned mess recipe unless overriden by an actual recipe.

Also modified the examines a bit to better fit food that hasn't
necessarily been baked/grilled before but would still turn to a burnt
mess if put in either.

## Why It's Good For The Game

My issues with the way it currently works are:

1. The "default" case is one that largely doesn't make sense for food.
Most things would logically just get turned to a burnt mess after being
overcooked for some time rather than combusting the very moment you
close the range.
2. If you make any cooking item the result of a baking recipe, then you
must also remember to make its `burns_in_oven` var true, because
otherwise it will be set on fire as soon as it finishes baking, making
it impossible to cook. (See issue #77377) This is pretty bad because
it's easy not to notice or add these vars, given that they're a bit out
of the way mechanically and...
3. ...the var names are very unintuitive. In practical terms all
`burns_in_oven` and `burns_in_grill` do is add a timer before the item
is ruined, not actually cause or prevent the ruining.

By removing these vars and their function we deal with all three, as
turning into a burnt mess is now the default outcome for food that
shouldn't be baked/grilled and coders adding food/recipes don't need to
worry about the confusingly-named vars.

Also, as mentioned before, fixes #77377.

## Changelog
🆑
fix: boiled rice doesn't burn instantly after being baked
code: simplifies the way burning food is handled, grilled/baked food now
turns to a burnt mess rather than being set on fire, unless they have a
baking/grilling recipe
/🆑
2023-09-04 01:07:27 +02:00
Lamb
3c0159b143 replaces surgical and coroner duffels with surgery trays and medical carts, resprites razor (#77975)
## About The Pull Request
replaces all instances of surgical duffels with surgery trays, and all
coroner duffels with morgue surgical trays.
they contain about the same items, with surgical trays/carts also having
bone gel and tape, since their list of holdable items is much more
limited.
the surgery tray is a diagetic storage unit that displays any surgery
tool it's holding in a small, almost world-state esque form on top of
it. it can be carried around by dragging it on to yourself, but it will
slow you down like an unzipped duffel would. it can also be deployed by
activating it, and pulled around, but it will roll noisily in the
process.
currently, all tool tiers are supported - from alien, to advanced, to
cruel, to normal.

![image](https://github.com/tgstation/tgstation/assets/110322848/5b31767e-de27-4352-b2bf-89cde06a7b5c)
here you can see just a few of the possible combinations of tools -
default, default morgue, advanced, and alien. but any combination of
these tools should work together somewhat cleanly, as you can see here:

![image](https://github.com/tgstation/tgstation/assets/110322848/12ae3501-44bc-41a5-b4f4-d01c05cc6038)
also adds a medical razor variant, because otherwise they wouldn't fit
with the look of the other tools on the tray, before and after here:

![image](https://github.com/tgstation/tgstation/assets/110322848/c71af9ed-e9bb-40ff-81b8-0395d8afdf5a)
## Why It's Good For The Game
having constantly visible tool storage like this means you don't have to
worry about the one tool you need from the bag being stolen - if it is,
you can see it before an operation starts, and plan around that! it also
gives a little flexibility to mappers - if they'd like a more mobile
cart for their medbay, or if they'd like the somewhat stationary tray.
it also plain looks cool, and isn't quite as clunky as a duffelbag would
be.
## Changelog
🆑
add: adds medical carts and surgery trays
image: gives the surgery razor a unique sprite
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-04 00:58:11 +02:00
distributivgesetz
73e1ec9296 Move some job related achievements into the job achievement category (#78092)
## About The Pull Request

Read title, this only affects the UI and not the database as far as I am
aware
## Why It's Good For The Game

The jobs category is painfully empty, only being home to four
achievements total. Meanwhile we have a ton of achievements inside the
miscellaneous category, a lot of which are not miscellaneous
achievements at all. Right now I just wanna focus on moving around
achievements from existing category to existing category though. This
improves achievement category spread overall by a small but necessary
amount.
## Changelog
🆑 distributivgesetz
code: Moved some job-related achievements from the misc category to the
jobs category.
/🆑
2023-09-03 20:05:14 +02:00
Time-Green
85a5705994 Remove swarmer beacon achievements (#78090)
No has ever obtained them, and since the swarmer beacon has been gone
for a long time, no one has been able to get them for a long time


![image](https://github.com/tgstation/tgstation/assets/7501474/798c7cbd-36bc-481d-a2d8-bebce7d81138)

![image](https://github.com/tgstation/tgstation/assets/7501474/e60bb5aa-04de-4996-aa07-a6d5749b878e)

🆑
del: Removes the swarmer beacon achievements from the game (no one ever
got them, and they haven't been obtainable for years)
/🆑
2023-09-03 15:39:20 +02:00
carlarctg
4792a8e19d Nerfs Confusion symptom for diseases (#77991)
## About The Pull Request

Removed the threshold for confusion symptom that adds illiteracy to the
disease.

Clamps confusion symptom's confusion to a maximum of 30 seconds.

Confusion as a debuff no longer guarantees random movement if you're
resting.

## Why It's Good For The Game

> Removed the threshold for confusion symptom that adds illiteracy to
the disease.

This virus makes you unable to actually treat yourself when cured, which
is frankly bonkers. Viruses are too virulent and it's rare that a doctor
actually gets to a biosuit in time to inoculate themselves, and if they
forget internals they're screwed anyways. People should be able to fix
their own got damn disease, this is asinine.

> Clamps confusion symptom's confusion to a maximum of 30 seconds.

The lack of clamping literally makes this symptom send your confusion
level to the fucking atmosphere, you can easily get upwards of 5 minutes
of confusion left because it doesn't clamp, adds 16 seconds per
activation, which is made even worse by the fact that confusion gets
stronger the more duration confusion has on you.

> Confusion as a debuff no longer guarantees random movement if you're
resting.

This remedies the last bit by not making it a literal guarantee that you
can't move in any direction after...... *3* triggers of confusion. It
should be obvious to anyone how absurd this is.

Honestly, it's plain as day that the only reason any of this ended up
like it is because of poor coding and oversights. This is just bringing
things down to their designed level.

## Changelog

🆑
del: Removed the threshold for confusion symptom that adds illiteracy to
the disease.
balance: Clamps confusion symptom's confusion to a maximum of 30
seconds.
qol: Confusion as a debuff no longer guarantees random movement if
you're resting.
/🆑
2023-09-03 01:44:53 +02:00
MrMelbert
a5aef3b823 Replaces Ascended Blade Heretic stun imminuty with a stun absorption effect (it's not as cool as it sounds) (#78060)
## About The Pull Request

Instead of being completely immune to stuns after ascension, blade
heretics now have a stun absorption. This is the effect that His Grace
and the Bastard Sword use.

It functions similarly, in that it stops you from being hardstunned, but
the difference it is they are only immune to a limited amount of stuns
for a limited amount of time before it recharges.

Currently that number is 45 seconds of stuns, with a 2 minute recharge,
meaning if you take more than 45 seconds of stun effects you will stop
being immune.

Bear in mind this still provides full immunity to being stamcrit*, as
stam doesn't contribute towards "seconds stunned" number.

*Unless you used all 45 seconds of stun immunity then you will no longer
be immune until you recharge.

Also to compensate, I gave them a slightly modifier protecting against
knockdowns.

## Why It's Good For The Game

I forgot Stun Absorptions were a thing entirely when making this even
though I refactored the darn things.

Anyways, the reason why I'm doing this is that Stun Absorptions are just
a slightly more fair, less overt way of providing stun immunity, and I
think it fits the theme more.

You're supposed to be a master duelist, but being able to take on a
dozen people at once is not entirely intended (even though this is the
ascension, I know). Stun Absorptions lend better to that, since you run
out of stun juice eventually before you have to pull back.

Though ultimately this doesn't change very much, as we use very few
hardstuns now-a-days:

- A flashbang will contribute about 10 seconds of stun time
- A flash is similar to a flashbang
- Bodythrows and tackles are less than 5 seconds
- Beepsky, 10 seconds
- Stamcrit, 0 seconds, but you are still slowed by stamina damage
- A banana peel, default is roughly 6 seconds. <-- (This is why I gave
them a knockdown modifier)

However it does mean you can't really tank an AI stun turret all day.
That's Rust's thing. Go play Rust Heretic.

## Changelog

🆑 Melbert
balance: Ascended Blade Heretics no longer have blanket stun immunity,
they now have 45 seconds of stun absorption that recharges after 2
minutes - think His Grace. This doesn't affect stamcrit (still immune to
that) (assuming you haven't consumed all of your immunity charge) but
does affect hard CC such as slips, flashbangs, or beepsky.
balance: Ascended Blade Heretics now have a 0.75 modifier to incoming
knockdowns.
/🆑
2023-09-02 18:00:26 +00:00
nikothedude
d99ff40b43 [GBP NO UPDATE] Fixes a incorrect wound series (#78075)
## About The Pull Request

Makes pierce wounds compatable with slash
## Why It's Good For The Game

Bugs bad
## Changelog
🆑
fix: Slash wounds are now compatable with pierce wounds
/🆑
2023-09-02 18:24:07 +01:00
Ben10Omintrix
14df914591 fix basic ranged mobs not chasing the victims (#78073)
## About The Pull Request
if the victim is outside the shooting distance the mob will go through
an endless cycle of finding the target and deleting the target instead
of chasing them

## Why It's Good For The Game
fix basic ranged mobs not chasing the targets

## Changelog
🆑
fix: basic ranged mobs will now chase victims
/🆑
2023-09-02 18:23:45 +01:00
Bloop
69f51c6c65 Fixes typo 'transfered', olive oil reaction repath (#78064)
## About The Pull Request

Transferred.

## Why It's Good For The Game

How did this get to be in 71 files?! This bothers me.

Also changes 'quality_oil' typepath in the reactions to 'olive_oil' to
match its rename post-foodening.

## Changelog
N/A
2023-09-02 18:23:18 +01:00
Bloop
19233741c4 [NO GBP] Fixes more retrieve typos (#78069)
## About The Pull Request

Continuation of https://github.com/tgstation/tgstation/pull/77946, I
missed quite a few of these it seems.

## Why It's Good For The Game

Stop the spread of these typos!!

## Changelog

Nothing player facing
2023-09-02 16:14:56 +01:00
MrMelbert
9edcc15a7d Fix bastard sword not getting duration passed to its callback (#78056)
## About The Pull Request

The cult bastard sword has a callback called on spin, that gives you
some buffs and effects based on the duration of the spin


33c9ffa6c8/code/modules/antagonists/cult/cult_bastard_sword.dm (L46-L62)

But... it didn't pass a duration. 

So now it does. 

## Why It's Good For The Game

Lol infinite stun absorption 

## Changelog

🆑 Melbert
fix: Fix bastard sword granting infinite stun immunity
/🆑
2023-09-02 16:08:30 +01:00
Sealed101
2734dbfd37 Fixes implanted legion cores being available for use when dead/unconscious (#78042)
## About The Pull Request

Ever since #70546 implanted legion cores have become available for use
when the user is unconscious/dead, which was not the case before — it
was using an organ action, which checks for `AB_CHECK_CONSCIOUS`

#### cores before #70546

475a4ab7f5/code/modules/mining/equipment/regenerative_core.dm (L23-L34)


07fbdbb4e4/code/datums/actions/items/organ_action.dm (L1-L3)

## Why It's Good For The Game

Prevents this


https://user-images.githubusercontent.com/104979184/264586219-8cab1fef-d2ea-4e1c-af43-158865b42b23.mp4

## Changelog

🆑
fix: fixed implanted legion cores being available for use when
unconscious/dead.
/🆑
2023-09-02 16:04:01 +01:00
GuillaumePrata
06e7270008 Funny clown internals (#77963)
# About The Pull Request
This PR changes the internals that spawn inside the clown's survival box
for a new one with a rainbow sprite, higher O2 volume (same as the engi
ones) and a secondary gas on top of O2 to make things more interesting
for the clowns.
The gas options are:
BZ, which just adds hallucinations for the clown, without the brain
damage effect as it is in low percentages.
N2O will make the clown giggle and laugh, without the sleep.
Helium will give the clown a "funny voice".

These tanks are also added to the mail list of clown fans and the clown
costume crate at cargo.

And codersprites, I can polish them later if people think it is pixel
soup, I'm not happy with them that much, but making this looks good
might be above my paygrade...
<details><summary>Pics here</summary>
<p>


![clown_internals](https://github.com/tgstation/tgstation/assets/55374212/f5eda877-a01a-4dfa-b481-7d406c4fb768)

![in game clown
internals](https://github.com/tgstation/tgstation/assets/55374212/342285ae-919b-49ab-a97e-cdf25a975f83)


</p>
</details>

## Why It's Good For The Game
The main goal I have with this is to add more uses for Atmos Content to
other players in a flavorful way.
Atmos is not something the crew interacts in a positive way often and I
want to change that.

These tanks are something quite minor but flavorful IMO, also will make
people know Helium fucking exists...

The tanks *shouldn't* change much of the clown's round in a negative
way, and the default O2 internals are in every hallway's locker so even
if they don't want to deal with the hallucinations it is not a big deal
to dodge them.
## Changelog
🆑 Guillaume Prata
add: New funny internals for the clowns to spawn with. They come with O2
and a secondary gas between 3 options: BZ, Helium and N2O. Talk with a
"different tone" with Helium, giggle and laugh "uncontrollably" while
under the minor effects of N2O or have "fun" hallucinations while under
the minor effects of BZ.
balance: To not cut on how long the clown's O2 internals last due to the
mixed gases, the funny internals have 50% more gas volume, same as
engineers' internals.
/🆑

---------

Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-09-02 13:04:34 +02:00
Profakos
b2119337a0 Renames the ex interdyne pirate shuttle (#78024)
## About The Pull Request

I saw #76676 has staled out and wasn't reopened with the required
changes, so I have done it myself, and renamed the map and the
template's suffix.

## Why It's Good For The Game

Now linux hosts can also experience being raided by angry pharmacists
from space.

## Changelog

🆑
fix: Ex-Interdyne pirates can now successfully spawn on case sensitive
host systems, such as Linux
/🆑
2023-08-31 18:08:22 -07:00
GoldenAlpharex
dd2784c29d Fixes an edge case in personal crafting that could result in the crafting window getting stuck forever (#77994)
## About The Pull Request
Basically, if either the crafter or the recipe was null, it would
runtime and just leave the window stuck forever. Now, instead, it'll
give a message, so if you somehow manage to lag so hard that your
crafting recipe is somehow null (like I witnessed in-game earlier), you
won't be shit out of luck from crafting forever.

Also removes some single-letter variables while I'm at it.

## Why It's Good For The Game
Getting stuck unable to craft for the rest of the round really sucks.

Also code improvements good.

## Changelog

🆑 GoldenAlpharex
fix: Fixed the crafting menu being able to get stuck if your crafting
recipe somehow goes missing.
code: Improves the quality of the item crafting code slightly.
/🆑
2023-08-31 15:48:03 -04:00
Emmett Gaines
08ab70cba4 Adds links to additional help documents on hackmd to the GAGS readme (#78027)
Just some additional links in the readme for coders and spriters, no
player facing changes. I'll update the guides themselves more as I see
what information people need or issues they have.
2023-08-31 15:25:07 -04:00
Andrew
b1c5e5e0f6 Foodening (#77887) 2023-08-31 14:57:19 -04:00
Alexis
4a1b458afd Ports poppy and geranium sprites from beestation (plus flower crowns!!) (#78022)
## About The Pull Request
Ported from
[here](https://github.com/BeeStation/BeeStation-Hornet/pull/5397).
I have for the longest time hated how geraniums and lilies are just a
resprite of poppies, so, with the permission of the original PR author

![image](https://github.com/tgstation/tgstation/assets/20053168/19480651-8924-40c7-b57d-ad4e6f06c6e2)
I present you, plants.

![image](https://github.com/tgstation/tgstation/assets/20053168/fa13cc16-929e-44ec-b4cf-065e06772c21)

![image](https://github.com/tgstation/tgstation/assets/20053168/318cc7c2-8f40-47b7-a6df-562255173027)
## Why It's Good For The Game
No more recoloured poppies, plants have soul now. Also flower crowns are
pretty.
## Changelog
🆑 xPokee, Pirill
add: Added flower crowns, craftable via the clothing menu.
image: Resprited geraniums, poppies, and lilys, along with changing
their worn icon.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-08-31 10:36:39 -06:00
nikothedude
b49d31916c [NO GBP] Removes a redundant file from my refactor (#78026)
## About The Pull Request

Title. It just wasnt used.
## Why It's Good For The Game

Redundant files bad
## Changelog
🆑
del: Deleted a unused file
/🆑
2023-08-31 10:32:04 -06:00