Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upstream-merge #3

Merged
merged 508 commits into from
Mar 1, 2024
Merged

upstream-merge #3

merged 508 commits into from
Mar 1, 2024

Conversation

larentoun
Copy link
Owner

upstream merge

comfyorange and others added 30 commits February 19, 2024 03:32
## About The Pull Request
The modal number input is extremely user unfriendly in it's current
state whenever used for negative and decimal numbers See #81457 for
details. The code might not be the best and if someone has suggestions
to optimize it, I'm all open for it, but it takes into aspect a lot of
edge cases to make the input as user friendly as possible. I've also
heard form some other code bases that they have issues with the
tgui_input_number proc.

The RestrictedNumber will get a new event to listen to though:

` onBlur={(_, value) => onBlur(value)}`

This will run the number through the previous, hard sanitation and
ensures that we always submit an allowed number and not a string value
as we are using it shortly during input for the pure `-` input.
(Especially important for the "Submit" button. Enter always handles it
that way). During testing, all the tested numbers were handled properly,
I could not see any issues on the inputs. We still keep some in Field
replacement, but it's for a limited range where we can have the field
handle numbers smart:

`min <= 1 && max >= 0`: Within that range, the field updates the value
to the restrains on input. In all other cases only onBlur.

Testcase table:


<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>

<meta name=ProgId content=Excel.Sheet>
<!--table
	{mso-displayed-decimal-separator:"\,";
	mso-displayed-thousand-separator:"\.";}
@page
	{margin:.79in .7in .79in .7in;
	mso-header-margin:.3in;
	mso-footer-margin:.3in;}
tr
	{mso-height-source:auto;}
col
	{mso-width-source:auto;}
br
	{mso-data-placement:same-cell;}
td
	{padding-top:1px;
	padding-right:1px;
	padding-left:1px;
	mso-ignore:padding;
	color:black;
	font-size:11.0pt;
	font-weight:400;
	font-style:normal;
	text-decoration:none;
	font-family:Calibri, sans-serif;
	mso-font-charset:0;
	mso-number-format:General;
	text-align:general;
	vertical-align:bottom;
	border:none;
	mso-background-source:auto;
	mso-pattern:auto;
	mso-protection:locked visible;
	white-space:nowrap;
	mso-rotate:0;}
.xl63
	{text-align:left;}
.xl64
	{mso-number-format:"dd\/\\ mmm";
	text-align:left;}
.xl65
	{text-align:left;
	vertical-align:top;}
.xl66
	{mso-number-format:"\#\,\#\#0";
	text-align:left;}
.xl67
	{mso-number-format:"\@";
	text-align:left;}
.xl68
	{mso-number-format:"mmm\\ yy";
	text-align:left;}
-->
</head>

<body link="#0563C1" vlink="#954F72">


Test case | Field Limit | Input | InField | OnEnter | OnSubmit | OnBlur
-- | -- | -- | -- | -- | -- | --
Float (smart) | 1-20 | 0 | 1 | 1 | 1 | 1
  |   | 1.1 | 1.1 | 1.1 | 1.1 | 1.1
  |   | 20.1 | 20 | 20 | 20 | 20
  |   | - |   | 1 | 1 | 1
  |   | . | 1. | 1. | 1. | 1.
  |   | 5 | 5 | 5 | 5 | 5
Float | 2-20 | 0 | 0 | 2 | 2 | 2
  |   | 2.1 | 2.1 | 2.1 | 2.1 | 2.1
  |   | 5 | 5 | 5 | 5 | 5
  |   | 20.1 | 20.1 | 20 | 20 | 20
  |   | - |   | 2 | 2 | 2
  |   | . | 2. | 2. | 2. | 2.
Float with decimal limit | 20.2-200.2 | 0 | 0 | 20.2 | 20.2 | 20.2
  |   | 20. | 20. | 20.2 | 20.2 | 20.2
  |   | 50 | 50 | 50 | 50 | 50
  |   | 200.3 | 200.3 | 200.2 | 200.2 | 200.2
  |   | - |   | 20.2 | 20.2 | 20.2
  |   | . | 20. | 20.2 | 20.2 | 20.2
Float with decimal limit   (smart) | 0-20.2 | 0 | 0 | 0 | 0 | 0
  |   | 20. | 20. | 20. | 20. | 20.
  |   | 5 | 5 | 5 | 5 | 5
  |   | 20.3 | 20.2 | 20.2 | 20.2 | 20.2
  |   | - |   | 0 | 0 | 0
  |   | . | 0. | 0. | 0. | 0.
Negative Float (smart) | -10-20 | -10.2 | -10 | -10 | -10 | -10
  |   | 20. | 20. | 20. | 20. | 20.
  |   | 20.1 | 20 | 20 | 20 | 20
  |   | 0 | 0 | 0 | 0 | 0
  |   | - | - | -10 | -10 | -10
  |   | . | -10 | -10 | -10 | -10
  |   | -. | -10. | -10. | -10. | -10.
  |   | -10- | 10 | 10 | 10 | 10
  |   | 10- | -10 | -10 | -10 | -10
Negative Float with decimal limit | -10.2--20.2 | -10.1 | -10.1 | -10.2
| -10.2 | -10.2
  |   | -20. | -20. | -20. | -20. | -20.
  |   | -20.3 | -20.3 | -20.2 | -20.2 | -20.2
  |   | 0 | 0 | -10.2 | -10.2 | -10.2
  |   | - | - | -20.2 | -20.2 | -20.2
  |   | . | -20. | -20. | -20. | -20.
  |   | -. | -20. | -20. | -20. | -20.
  |   | -10.2- | 10.2 | -10.2 | -10.2 | -10.2
  |   | 10.2- | -10.2 | -10.2 | -10.2 | -10.2
Int (smart) | 1-20 | 0 | 1 | 1 | 1 | 1
  |   | 1. | 1 | 1 | 1 | 1
  |   | 21 | 20 | 20 | 20 | 20
  |   | 5 | 5 | 5 | 5 | 5
  |   | - |   | 1 | 1 | 1
  |   | . |   | 1 | 1 | 1
Int | 20-200 | 19 | 19 | 20 | 20 | 20
  |   | 201 | 201 | 200 | 200 | 200
  |   | 50 | 50 | 50 | 50 | 50
  |   | - |   | 20 | 20 | 20
  |   | . |   | 20 | 20 | 20
Negative Int (smart) | -10-20 | -11 | -10 | -10 | -10 | -10
  |   | 0 | 0 | 0 | 0 | 0
  |   | 21 | 20 | 20 | 20 | 20
  |   | - | - | -10 | -10 | -10
  |   | . |   | -10 | -10 | -10
  |   | -. | - | -10 | -10 | -10
  |   | -10- | 10 | 10 | 10 | 10
  |   | 10- | -10 | -10 | -10 | -10
Negative Int | -200---20 | -201 | -201 | -200 | -200 | -200
  |   | -19 | -19 | -20 | -20 | -20
  |   | -50 | -50 | -50 | -50 | -50
  |   | - | - | -200 | -200 | -200
  |   | . |   | -200 | -200 | -200
  |   | -. | - | -200 | -200 | -200
  |   | -20- | 20 | -20 | -20 | -20
  |   | 20- | -20 | -20 | -20 | -20



</body>

</html>

## Why It's Good For The Game
Even though not used often on TG code, the modal inputs are used on
other code bases and inputting numbers has been a hell if it was
anything other than a positive integer. This PR aims to make the
handling as user friendly as possible, even if it's a lot more edge case
checking than the very simple code beforehand.
## Changelog
fixes #81457
🆑
qol: makes the tgui_input_number user friendly for negative and decimal
inputs
code: the onBlur={(_, value) => onBlur(value)} event should now be used
on all uses of RestrictedInput to ensure that the number is fully
sanitized whenever the user leaves the field or submits it through a
button
/🆑
## About The Pull Request

Big changes:

- Participation is Valentines day requires consent, as consent is
important.
- When the event triggers, all valid players are automatically signed up
to get a random date. However if you're uninterested, you can opt out of
getting a date.
- This uses the same system as ghost role polling, so it's a
non-obstrusive screen alert + chat box entry.

- AIs are now given a zeroth law to protect their date. 
   - This does not override existing zeroth laws (for malf ais). 
- This zeroth is law is worded in a way such that they are not
effectively malf AIs. Their other laws still apply, but not for
situations pertaining to their date.

- Cyborgs are desynced from AIs and are given similar zeroth laws to
protect their date.


![image](https://github.com/tgstation/tgstation/assets/51863163/0d1cca3e-f483-484c-90a8-9bb5492e2c69)

Small changes: 

- Valentines cards are now paper. Meaning you can write on them, stamp
them, or yes, burn them.

- Third wheeling is more codified than before. Third wheels get their
own antag datum type.

- The antag panel listing in roundend takes up significantly less room
for each date. Additionally, dates are now paired up with each other.

- Adds implementations for getting pronouns from mind datums. 


![image](https://github.com/tgstation/tgstation/assets/51863163/2107e7d2-6197-4f64-9245-54037ca6c0ec)

## Why It's Good For The Game

It's 2024 and our Valentines day is sooo 2012. 

I'm a big fan of Valentines Day, personally - it gives me the
opportunity to mess around with another player that I probably would not
otherwise mess around with, getting into shenanigans I would not
otherwise.

But as the years have gone by it's gotten pretty lackluster. Some people
like it as much as I do, but others ditch it entirely and ignore the
objectives.

And if you get paired with someone ignoring it, well, now you're out of
luck!

This is something I'm aiming to rectify by making it opt-in when it
triggers rather than forced. All the people participating will be
guaranteed to get someone who cares about the event as much, which makes
it more fun.

As for the silicon changes, there's been lots of confusion around
silicons and their dates, so I thought I'd fix it here as well.

Also, better late than never? 

## Changelog

:cl: Melbert
add: Valentines Day now polls all players for candidates when it
triggers rather than forcing all players to be a Valentine. Consent is
important.
add: Valentine silicons now gain special laws pertaining to their date. 
qol: Valentines Cards are now paper, so you can write on them, stamp
them, or burn them.
qol: Valentine's roundend report no longer takes up a massive amount of
space and also no longer sound so, so weird.
/:cl:
…81215)

## About The Pull Request
Title. This includes a small change to the get_visible_items proc, only
used by phobias until now, to include worn accessories. Not really worth
of a changelog entry itself.

## Why It's Good For The Game
This makes the process of scanning oft worn equipment a bit easier,
perhaps weavering the need of consent for some pranks and shenanigans.


![immagine](https://github.com/tgstation/tgstation/assets/42542238/a0d62488-2ee1-4051-9737-62c9247a6137)

I've added a bit of contrast to the icon for the "mob" option since
then.

## Changelog

:cl:
qol: Circuit multitools can now mark (visible) items worn/held by a mob.
/:cl:
…deconstructs them (#81535)

## About The Pull Request

if a goliath and such forcefully move chutes,bins,disposal outlets and
maybe one other they are reverted into disposal constructs instead of
being a poor mans eigenstatium locker

## Why It's Good For The Game

CC moment

## Changelog
:cl:
fix: forcefully pushing disposal outlets and chutes deconstructs them
instead of making them behave like budget eigenstatium lockers
/:cl:
## About The Pull Request

Reverts map vote to single selection rather than multi selection

## Why It's Good For The Game

Now that map vote is weighted, multi selection serves no purpose anymore
other than allowing people to gain "additional weight" in the vote,
which is unfair. It's weighted, everyone should have 1 vote.


![image](https://github.com/tgstation/tgstation/assets/51863163/c1831505-f638-4036-8d53-d3524f4a5d4a)

## Changelog

:cl: Melbert
del: You can only vote for 1 map at a time again
/:cl:
## About The Pull Request
This pull request aims to hide the delete button from the main chat tab
as well as to allow reordering of the other chat tabs.
((Not to cause any issues with existing tabs, the variable has to be
true, so the hiding of the delete button only takes effect for new
players or when someone deleted all tabs once))

![grafik](https://github.com/tgstation/tgstation/assets/144968721/c1682cef-3e4f-4c4f-8394-bbf1345d4630)

![grafik](https://github.com/tgstation/tgstation/assets/144968721/ffe973a5-24eb-44ed-b8db-e3c1867935d1)
## Why It's Good For The Game
- I'm not quite sure, why the main tab has the delete button in the
first place, after all, it's not like the tab should be removed?
So, we can just hide the delete button on that tab and keep it always
there.
- Accidentally deleting a chat tab when one has multiple tabs set up
requires to change all tabs to the right to regain the previous order,
so why not simply allow to reorder all tabs except for the main tab.
(The main tab can neither be moved, nor can anything swapped with it)
## Changelog
:cl:
qol: hides the delete button on the main tab allows to reorder all other
chat tabs
/:cl:
…s delay as to not give lighting a stroke (#81549)

## About The Pull Request

removes an unused proc, and spawners should be slightly more reliable

deathmatch now has a 8 second delay before spawning you in as to give
lighting and smoothing a breather
the match being in progress is now shown in lobby UI

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/8a275232-e186-4685-ab28-94c077532870)

also unused proc bad

## Changelog
:cl:
code: deathmatch lobbies take 8 seconds to start as to give lighting a
breather
/:cl:
## About The Pull Request

Arcane did this a few months back, but he ported the WRONG ONES (kryson
snuck a new version in underneath a bunch of other changes, he wasn't
all that organized).


![image](https://github.com/tgstation/tgstation/assets/58055496/688f358c-fe0e-44cf-b4b1-44f7806af84e)

## Why It's Good For The Game

It's annoying to have to balance two different sets of sprites.

## Changelog
:cl: LemonInTheDark, Kryson
image: Modified railing sprites to be a bit more three-d
/:cl:
## About The Pull Request
- The time from which the boulder is picked to when it's teleported onto
the conveyer belt is 1.5 seconds. During that time the boulder could get
deleted due to many factors and we lose our materials. No one like's
that that so now both steps are combined into 1 proc so we no longer
loose boulders during teleportation.
- Batch processing cooldown was not working when
`boulder_processing_max` is > 1. Now it does

## Changelog
:cl:
fix: boulders are no longer lost when teleported by the BRM
fix: batch processing cooldown works when teleporting multiple boulders
/:cl:
## About The Pull Request

Currently to use items like the regenerative core, you can either attack
yourself (or someone else), or use Z to use the item in-hand, unless you
are lying down in which case you have to specifically click, and can't
use in-hand. It's kinda dumb and this has been an issue I had since I've
started playing, and today I thought "wait why did I just never fix it
then?", so now I am.

## Why It's Good For The Game

Mostly explained in the about section, you can already use cores while
resting, this just means you can't use Z instead of having to click on
your character sprite.

## Changelog

:cl:
fix: Regenerative cores (and other monster organs) now work when using
it in-hand while resting.
/:cl:
## About The Pull Request

The DNA console's Joker button, when used and goes through its cooldown,
currently automatically reactivates itself, which causes Geneticists who
aren't aware of this and who do not want to use their joker yet, waste
it and have to wait its cooldown once again.

## Why It's Good For The Game

You are waiting at minimum a 300 second timer (on t4) between Joker
uses, so I do not expect people to think that this is something that
would remain active once its cooldown has expired. It's just better UI.

## Changelog

:cl:
fix: The DNA scanner's joker button no longer instantly activates itself
when the cooldown between uses is done.
/:cl:
## About The Pull Request

Adds additional information to triggered fire alarms, viewable on the
air alarm. Displays the method of alarm trigger and the source of the
alarm.


![image](https://github.com/tgstation/tgstation/assets/83487515/2b8bb334-e641-451b-9d6d-97e650e74032)

## Why It's Good For The Game

Useful for engineers to track down the source of why the fire
alarm/firedoors are triggering. Fire alarms that are manually triggered
will never reset without intervention, so this also identifies these
cases instead of chasing down an issue that may not exist.

## Changelog

:cl: LT3
qol: Air alarms now display the source of triggered fire
alarms/firedoors
/:cl:
## About The Pull Request
- Fixes #81537. For competing reactions where reaction B consumes the
results formed from reaction A `total_step_added` yields values higher
than the actual volume of products formed causing the reaction to end
early leading to less volume of product formed as explained in the
comment
- Removes `update_total()` from instant reactions as it already does
that for us making it a little faster
- merges `remove_all_direct()` with `remove_all()` to reduce code as
their functionalities are very similar

## Changelog
:cl:
fix: multiple reactions occuring in the same holder like mixing drinks
will yield correct reagent result volumes
code: Removes `update_total()` from instant reactions improving
performance slightly
code: merges `remove_all_direct()` with `remove_all()` to reduce code
size
/:cl:
…y changes to fishing. (#81407)

## About The Pull Request
This PR adds a new line reel, which speeds up the baiting phase of the
fishing minigame and skips the biting phase, thus starting the minigame
without the initial input from the player.
The auto-reel line will also throw items (or other people/things, if you
have the right hook) in your direction when snagged, with the added
bonus of catching the item mid-air. Turn your fishing rod into a
discount meat hook.

I've lowered the deceleration coefficient and bounce threshold of the
minigame by 1/4. My rationale is that these two numbers are a must lest
we end up with an uncontrollable mess of a minigame, though they also
feel like a sack of flour hitting gravel rn, making specific hooks like
the bi-directional one and the weighted other a bit useless.

Another change is to the baiting and biting phase. Previously, if you
clicked anywhere during the baiting phase, it'd reset the whole timer
back to any value between 1 and 30 seconds, spelling futility to the
time you've just spent waiting. Now, it'll simply add another 4 seconds
or so to the current timer, capping at 30s.

One last thing*. Once the biting phase start, the faster your input is,
the higher the starting completion of the minigame will be, and the
other way around, if you're very slow. The difficulty variable can also
lower the starting completion.

*I lied. I've also added a short cooldown to casting a fishing rod so
you can't just spam it.


## Why It's Good For The Game
Finetuning the minigame, quality of life and balance, making fishing
even more gimmicky.

## Changelog

:cl: Ghommie
add: Added a new fishing line reel that speeds up the first half of the
fishing minigame, and also let's you catch things from afar like a
discount meat hook.
balance: During the biting phase preceeding the actual minigame,
initiating it as soon as the "!!!" alert pops up will net you an
advantage. Conversely...
qol: Clicking during the baiting phase will no longer wholly reset it
and make you lose your patience. Instead, it'll delay the next phase by
about 4 seconds.
balance: The deceleration and bounce should feel less sudden and stiff,
meaning the controls are 25% more slippery again.
balance: Added a cooldown to spam-casting fishing rods.
imageadd: Resprited line reels a little.
/:cl:
…ns on UI (#81500)

## About The Pull Request
(Roundstart) Curators now get a 22.5% cut on credits spent on painting
patronages (divided by the number of curators). The service department
also gets another, 12.5% cut.

This PR also adds zoom in/out buttons to the painting canvas UI. So you
don't have to stare at a blob of such enormous squares while the UI is
open, which is only good when drawing.

Screenshot copypaste in paint:

## Why It's Good For The Game
The painting feature is mostly an end in itself, which is totally fine.
I've put quite a few quality-of-life changes into it through the years,
and I still want to kick in some stuff. However, I think the curator
should actually benefit from them in a more "mechanical" way.
Furthermore, I personally prefer them over the random written crap that
players make.

Also, as I said above, the canvas UI can feel a tad too big at times.
comfyorange and others added 29 commits March 1, 2024 06:47
## About The Pull Request

This var is used for modular PCs to swap between programs but it is
unused on the machinery entirely, if someone wants to re-add it as
something that is actually used then feel free but currently it is
useless and confused me for a moment on tgui stuff, so I thought I
should kill it.
## About The Pull Request

was getting wrapped in with #81618, here atomized out.

makes shadow eyes (that nightmares and shadowpeople have)
light-sensitive.

## Why It's Good For The Game

main consequences of this PR:
- nightmares need welding helmets or similar to get full flash
protection
- this makes sense because the light literally kills them, why are they
better-adapted than moths
- this is good because the recent moves to give nightmares more
abilities for ambush hit-and-runs (terrify, stun-crits) have also made
them stronger in protracted fights
- adding a bit more risk for nightmares in protracted fights is good
because the antag hits its thematic peak when it's involved in terrible
ambushes at inopportune moments, not when it's making constant
harassment or dueling in the dark
- this adds more risk to nightmares by making them need to limit their
vision in order to get full flash protection - which matters more when
people have time to anticipate that you're close and on the attack,
giving them a chance to whip their flash out

also seriously: shadow eyes. not sensitive to light?
## About The Pull Request
Thanks Floofies for the PR title.

This removes a warning that flew under the radar, passed the CI without
me taking a deeper look basically.
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/70376633/2c2a8ddf-d210-468b-9403-f7de4fa1fd9b)

removes IEDs, these are its replacement


![image](https://github.com/tgstation/tgstation/assets/70376633/95cc67d7-ed41-481b-9b9d-f31897fdb46d)

this recipe produces a finished pipebomb

you can craft pipes (of the atmos kind) with some metal
then you can make it into a pair of halved pipes with a welder
then you stuff in items for extra effect (optional, only works if it
does something)
then you put in welding fuel OR gunpowder (no other options as of now,
gunpowder is a better explosive)
cable finishes that part
after that, you can attach an unsecured assembly to finish the bomb

also this is the math for the explosion, power is decided by fuel

![image](https://github.com/tgstation/tgstation/assets/70376633/95ac3101-a2af-4bdc-9730-6c9c20195b59)

using it in-hand activates the assembly, using it off-hand allows you to
configure the assembly

## Why It's Good For The Game

IEDs suck and stuff and this would be a better upgrade/replacement
because with assemblies you could make a circuit sentient pipebomb or
gift a pipebomb via cargo or something and gimmicks i guess
## Changelog
:cl:
add: Pipebombs
del: Improvised Firebombs
/:cl:
## About The Pull Request

Brains might not always be located in the head, e.g. HARS puts it in the
chest, thus making the assumption that the brain will always be in the
head in this conditional false.


![image](https://github.com/tgstation/tgstation/assets/13398309/e920f8e7-45ae-4715-8077-0dc3ab23c760)

Also fixes this compiler warning


![cmd_nLK3wfCmVx](https://github.com/tgstation/tgstation/assets/13398309/e21686f1-f315-48c9-99fa-05d528e9ece2)

## Why It's Good For The Game

Fixes a bug/oversight of a niche edge case.

## Changelog

:cl:
fix: fixes an issue where being gibbed while under the HARS mutation can
sometimes lead to the brain being deleted when it's not supposed to be
/:cl:
## About The Pull Request
Simply allows you to drag from storage containers directly onto
All-In-One Grinders. Current behavior just spills it on the same tile.

## Why It's Good For The Game
I already had to put all these items in the box in the first place, this
just makes it slightly easier on the way back.
## About The Pull Request
Changes the "Fitness" skill title to "Powerlifter"
## Why It's Good For The Game
Fixes: #81531
## Changelog
:cl:
spellcheck: changed the fitness skill title to powerlifter
/:cl:
…81734)

## About The Pull Request

something something the universe of all possible cases 
 
fixes #81731

## Why It's Good For The Game

cyborg bait not good. also follow your laws first robot!

## Changelog
#81512

i accidentally added it to the emagged console it should be on
contraband now.
also added a backpack to present it from interfering.
and its available in uplink

:cl:
add: box with a set of floortile camo, which can be ordered in black
market uplink
add: also adds a backpack to camouflage
fix: i had the crate under emagged console, should be fixed now.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
…nspired by Goonstation's Spy-Thief (#81231)

# Disclaimer: No Goon code was referenced or used in the making of this
PR

## About The Pull Request

[Design Document (Read this for more
information)](https://hackmd.io/@L9JPMsZhRO2wI25rNI6GYg/rkYKM9Yc6)

This PR adds Spies as a new roundstart antagonist type, inspired by
Spy-Thiefs from Goonstation.

Spies are tasked with stealing various objects around the station, from
insulated gloves to the black box, from the clown's left leg to the
bridge's communications console.

For every item stolen, the Spy is rewarded with a random item from the
Syndicate Uplink, plus some items uniquely available to the Spy. Stolen
items are then shipped off and sold on the Black Market Uplink, allowing
the crew - or maybe some other evil-doers - to get their hands on them.


![image](https://github.com/tgstation/tgstation/assets/51863163/f057d480-4545-44da-b8fe-a8d09a5d2dcf)

More ideas for theft items and bounties are welcome. 

## Why It's Good For The Game

See the design document for more information. 

In short: Adds a solo antagonist which has less impact than your
Traitors and Heretics, but more impact than Paradox Clones and Thieves.
In other words: On the same tier as old traitors.

Seeks to embrace the sandbox aspect of antagonists more by having no
precise greentext objective, and instead some suggestions for chaos you
can embark in. Have fun with it!

## Changelog

:cl: Melbert
add: Spies may now roam the halls of Space Station 13. Watch your
belongings closely.
/:cl:
## About The Pull Request

Fixes wall-nerds#100
Replaces a couple of instances of abilities using the icons of walls or
floors with different, somewhat more descriptive icons.

I will be honest I do not understand why two of these were even using
iron walls as an icon.
Both of these instances were cases of "I want to surround something" so
I have replaced them with this icon:

![image](https://github.com/tgstation/tgstation/assets/7483112/264da818-5c33-4093-b993-45ee1b06c24f)

I have also replaced the "freeze floors" ability icon with the ice cube
icon, rather than a 32x32 ice floor icon.

![image](https://github.com/tgstation/tgstation/assets/7483112/524af0ac-4128-4bd3-a3f0-f82583f6cbcb)

I removed a bunch of old copies of goggles items from the `robot-items`
dmi and made them just reference the corresponding item sprites that
they were copies of, because they were out of date with the items and
using deprecated sprites. X-Ray now just looks like the red sam fisher
goggles instead of a caution sign (not that it is obtainable in game).

Oh also I added a tooltip to Ice Demon afterimages because it didn't
have one.

## Why It's Good For The Game

The previous icons don't even look like anything.

## Changelog

:cl:
image: Bubblegum Hallucination Surround Charge, Wendigo Shockwave
Scream, and Ice Demon Floor Freeze all have more appropriate action
icons.
qol: Adds a tooltip to Ice Demon Afterimages ability.
image: Cyborg view items now use the same sprites as their corresponding
goggles instead of old versions of those sprites.
/:cl:
## About The Pull Request
Updates shield sprites to new more polished and 3/4 perspective ones.

<details>

![shielding
show](https://github.com/tgstation/tgstation/assets/42353186/823d1d24-6fdd-40c9-84b4-2b9b61d70813)

</details>

Adds 2 new shield types:
- **Improvised Shield.** Made out of 10 iron sheets and 2 sticky tape
pieces. Weaker then buckler shield and breaks after 2 gunshots or 4
baton hits, but has a 50% (BASE FOR ALL OTHER SHIELDS) blocking chance
instead of 30% that buckler has. Bulky
- **Ballistic Shield.** Printed at Security Techfab for a lot of
titanium after getting weapon research. Strong against projectiles, but
weaker than riot shield against melee. Bulky

Both of these shields break, and both of them are their own subtype. As
such you can still only craft strobe shield with a riot shield.
## Why It's Good For The Game

The sprites of shields were very ancient and extremely flat, this gives
them a more refreshed look.

Ballistic Shield is added because Riot Shield was weakened against
projectiles, Ballistic Shield gives the crew a way to get access to
protection against projectiles at some point in the round.
Improvised Shield adds a second improvised shield in the game (after
Buckler Shield). It's balanced by being weaker than Buckler, but higher
block chance, this adds an interesting choice for players on which
shield to craft.
## Changelog
:cl:
add: Adds 2 new shields to the game! Ballistic Shield - researched by
Science, and Improvised Shield - made out of iron and sticky tape
image: Riot, Strobe, Telescopic, Energy shields got new less flat
sprites!
/:cl:
…#81746)

## About The Pull Request

Buying the advanced plastic surgery disk currently gives you a
brainwashing disk instead, this fixes that.

## Why It's Good For The Game

big oversight, you now get the right program you bought.

## Changelog

:cl:
fix: Buying the advanced plastic surgery disk from the uplink now gives
you advanced plastic surgery instead of brainwashing.
/:cl:
@larentoun larentoun merged this pull request into larentoun:upstream-merge Mar 1, 2024
6 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.