Commit Graph

1511 Commits

Author SHA1 Message Date
SpaceLoveSs13
ba5c112a86 Huge Mirror fixes (#27488)
* Fixes incorrect operator usage in mecha code (#82570)

## About The Pull Request

I completely screwed up and told the original PR author of #82415
(9922d2f237) to use the `XOR` operator
instead of the `OR` operator (I wasn't thinking right for some reason
when I was reading the ref), anyways this PR just fixes that because I
misled the contributor into doing something that wasn't correct and
actually would BREAK functionality instead.

* Fixes TGUI debugging tools (#82569)

This project doesn't interfere with the game logic and aims to fix
multiple debugging features that are currently broken. Unfortunately,
kitchen sink and debug layout became broken after migration to Redux.
This PR aims to fix those features.

* Removes unused code for HTML UIs (#82589)

## About The Pull Request

This is the final PR for https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA that
I've been slowly inching towards the past few months.

This removes ``updateDialog``, ``updateUsrDialog``, ``IN_USE``,
``INTERACT_MACHINE_SET_MACHINE``, and everything surrounding it. Also
fixes advanced camera consoles not booting you off when you're moved out
of reach.

We called ``check_eye`` on mob life whenever they had their machine var
set, but their machine var would never be set to anything that actually
used it, which I found to be a little funny but was also probably my
fault.

## Why It's Good For The Game

This is poor and unmaintained code used for HTML UIs that we no longer
need thanks to TGUI, we should get rid of it to encourage the use of
TGUI in the future instead.

## Changelog


🆑
fix: Advanced camera consoles now boots you off when you're moved out of
reach.
/🆑

* Fixes a variety of input stalling exploits (#82577)

## About The Pull Request

Fixes the following input stalling exploits (maybe missed some): 

- Changing GPS tag 
- Setting teleporter destination
- Request Console Reply
- Various AI law board interactions
- Note, I used `is_holding` but technically this means these fail with
telekinesis. I can swap them to `can_perform_action(...)`, which allows
TK, but I noticed some places explicitly deny TK interactions with Ai
law boards. Not sure which is preferred.
- Borg Rename Board
- Plumbing Machines and Ducts
- APCs and SMES terminal placements
- Stargazers Telepathy
- Go Go Gadget Hat

## Changelog

🆑 Melbert
fix: You can't change the GPS tag of something unless you can actually
use the GPS
fix: You can't set the teleporter to a location unless you can actually
use the teleporter
fix: You can't reply to request console requests unless you can actually
use the console
fix: You can't update AI lawboards unless you're actually holding them 
fix: You can't update a borg rename board unless you're actually holding
it
fix: You can't mess with plumbing machines unless you can actually use
them
fix: You can't recolor / relayer ducts unless you're actually holding
them
fix: You can't magically wire APCs and SMESs unless you're right by them
fix: You can't use Stargazer Telepathy on people who you can't see
fix: You can't configure the Inspector Hat unless you can actually use
it
/🆑

* [NO GBP] Power outage operation fixes for chem master (#82591)

## About The Pull Request
- If the chem master runs out of power mid printing, it will properly
stop the printing process and its animation
- When transferring reagents it correctly checks if we have enough power
without forcing it

## Changelog
🆑
fix: chem master properly shuts down if it loses power mid printing and
won't transfer reagents for the same
/🆑

* Refactor renaming UNIQUE_RENAME items from the pen to an element (#82491)

## About The Pull Request

So a bit ago someone in code_general wanted to make plushies renamable,
but learnt that just adding the `UNIQUE_RENAME` flag wouldn't work as
pens would murder the plushie and only THEN let you rename it. I noted
refactoring both pens and plushies to use the new
`item_interaction(...)` procs would Just Solve This, but, well, they
didn't really have any coding experience.

But, hey, renaming being hardcoded to the pens has annoyed me ever since
I laid my eyes upon the hot mess that is paperwork code.
So here we are!

### We're making it an element.

There's not really much to this, this is mostly the same code but moved
to an element and with some minor cleanups.

First, we move it all from `/obj/item/pen` to a new element we called
`/datum/element/tool_renaming`. With this, instead of having it proc on
`/obj/item/pen/afterattack(...)`, we register it to proc on the
`COMSIG_ITEM_INTERACTING_WITH_ATOM` signal.

6e36ed9840/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm (L59-L62)
Secondly, we realize the code is just going through each if statement
regardless of whether the previous was correct.

6e36ed9840/code/modules/paperwork/pen.dm (L225-L258)
And, as we're dealing with text, just make it a switch statement
instead.
```dm
switch(pen_choice)
		if("Rename")
			(...)

		if("Description")
			(...)

		if("Reset")
			(...)
```
Then, we replace all single letter variables with descriptive ones,
replace the if-elses with early returns, and make it actually return
item interaction flags.

Finally, we slap this onto the pen, and we're done.
Now we can slap it onto other fitting renaming tools, and it uses the
proper item interaction system.
## Why It's Good For The Game

I feel it's generally better to not hardcode this to just pens, we have
plenty other writing utensils and possible renaming tools.
It's also a bit cleaner than before.
Apart from that, moves it from using `afterattack(...)` to the proper
item interaction chain by using `COMSIG_ITEM_INTERACTING_WITH_ATOM`,
which should reduce janky interactions.
## Changelog
🆑
refactor: Instead of being hardcoded to the pen, renaming items is now
an element. Currently only pens have this, and functionality should be
the same, but please report it if you find any items that were renamable
but now aren't.
/🆑

* Adds various quality of life changes for cooking to make it less click intensive. (#82566)

## About The Pull Request

- Increases tray item size by 1 item.

- Ranges and griddles can now be fed from trays.

Click when closed => fill soup pot.
Click when open => fill associated oven tray.
Right click when open => fill tray from oven tray
Click griddle => fill griddle surface.
Right click => fill tray from griddle surface

- Martian batter is now 5u of each ingredient into 10u of batter.

Hopefully will make it bug out less where it makes far fewer reagents
than it is supposed to, fixing reagents, or well soups specifically...
is out of scope for this PR.

- Adds the ability to print soup pots and large trays from the service
lathe

Soup pot: 5 Iron sheets, 0.4 bluespace crystal (given their size of
200U)
Large serving tray: 2 iron sheets

## Why It's Good For The Game

Makes cooking a lot less tedious. Especially for people with low
precision when it comes to filling oven trays. This also bring the
behavior up to parity with how you can click microwaves with trays to
fill them, ditto for the food processor. It also allows chef to use the
whole capacity of an oven, as previously you couldn't easily click 6
cake batters or other giant sprites onto the tiny tray.

The tray is now sized to be able to easily feed a griddle 8 items.

## Changelog

🆑
qol: chef equipment can now deposit and withdraw to/from trays!
qol: chef now has access to griddle and oven sized trays!
qol: service can now print soup pots
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>

* Removes grid usage + heavy refactors (#82571)

## About The Pull Request
Grid has been deprecated for quite some time and we still use it. I
won't completely remove the component, this way downstreams won't
immediately suffer, but I can remove it from usage.

Some of these UIs had issues with them and as a hobby project I've
refactored them into typescript / rebuilt them. Airlock electronics, for
instance, looks substantially better.

<details>
<summary>before/after as requested</summary>

current airlock electronics scrolls into oblivion

![6RJ29HCPob](https://github.com/tgstation/tgstation/assets/42397676/ba82bc20-40fa-4af0-b709-7c8846c25652)

updated
![Screenshot 2024-04-11
164321](https://github.com/tgstation/tgstation/assets/42397676/05507e06-6305-4175-8476-778c345f02c8)

</details>

## Why It's Good For The Game
Code improvement + probably UI bug fixes
## Changelog
🆑
fix: Airlock electronics and other access-config type UIs should look
much better.
/🆑

* modular fixes

* [No GBP] Removes cogbar from some stealthy actions (#82593)

Issue brought some missed hidden actions to my attention.

I left cogbars in for _breaking_ handcuffs because resisting is sort of
a gray area. On one hand, you don't want someone to see you doing it; on
the other, there is a visible warning that you started doing it. So,
meet in the the middle, breaking handcuffs is still visible while
resisting isn't.
Closes #82583
Cogbars are not intended to ruin stealth
🆑
fix: Deviants buffed: Rogue shoelacing, pickpocketing and restraint
resisting no longer give cogbar icons.
/🆑

* [NO GBP] ...Remember to add SIGNAL_HANDLER (#82630)

## About The Pull Request

Just realized I forgot to add `SIGNAL_HANDLER` to the all-nighter
`on_removed_limb(...)` proc, even though it handles signals.
## Why It's Good For The Game


fe26373572/code/__DEFINES/dcs/helpers.dm (L9-L11)

* React cleanup (#82607)

## About The Pull Request
- No defaultHooks in react. Might fix issues where pages were not
scrollable on hover.
- createRef in a functional component. should be useref

## Why It's Good For The Game
Code improvement

* Security photobooths have their own ID (#82628)

## About The Pull Request

Prevents the HoP's photobooth button from connecting to the security
photobooth via having the same ID.

## Why It's Good For The Game

I forgot to add this when I made the security photobooth but it's
important that by default without any varedits, the HoP and security
photobooths stay separate.

## Changelog

🆑
fix: The HoP's photobooth button is now consistently connected to the
HoP's photobooth.
/🆑

* Fix buckled alert unbuckling not working properly (#82627)

## About The Pull Request

So funny thing, while trying to reproduce a different issue on the
current master, I coincidentally let my local instance start without
reading, latejoined on the shuttle, and I noticed it wasn't letting me
unbuckle as easily.

Looking into this a bit later, it seems as if it's a line #82593
accidentally changed while moving around the
`/mob/living/carbon/resist_buckle()` proc's flow.

fe26373572/code/modules/mob/living/carbon/carbon.dm (L238-L241)
While before it was
```dm
/mob/living/carbon/resist_buckle()
	if(HAS_TRAIT(src, TRAIT_RESTRAINED))
		(...)
	else
		buckled.user_unbuckle_mob(src,src)
```
Just changing this to `buckled.user_unbuckle_mob(src, src)` fixes this.
## Why It's Good For The Game

Fixes buckled alert unbuckling not working properly.
Fixes #82627.

## Changelog
🆑
fix: Clicking the buckled alert unbuckles you again.
/🆑

* Advanced camera consoles correctly deactivates when something happens to it or the user (#82619)

## About The Pull Request
- Fixes #82520

1. The eye deactivates when the machine is destroyed/deleted
2. The eye deactivates when the machine loses power
3. The computer constantly moniters the users status inside `process()`
and will deactivate when anything happens to them. Its not enough to
just hook onto to the mobs `COMSIG_MOVABLE_MOVED` signal. Literarly
anything can happen to them so we have to check constantly for any
changes

## Changelog
🆑
fix: advanced camera consoles correctly deactivate when something
happens(no proximity, no power etc) to its user
/🆑

* Oven tray checks for ovens (#82615)

## About The Pull Request
- Fixes #82610

Only oven trays have this proc not serving trays or other stuff
![Screenshot
(408)](https://github.com/tgstation/tgstation/assets/110812394/4867cc14-9df3-4398-9d2d-f8e38b5f0da9)

Also oven trays have a null atom storage which prevents it from being
put back in the oven after taking it out. So we remove that check

## Changelog
🆑
fix: you can put back the oven tray after you take it out
fix: only oven trays are allowed in ovens preventing baked food runtimes
/🆑

* Living Limb fixes (feat: Basic mobs attack random body zones again) (#82556)

## About The Pull Request

Reworks Living Limb code to fix a bunch of runtimes and issues I saw
while testing Bioscrambler.
Specifically, the contained mobs are now initialised via element
following attachment so that signal registration can occur at the
correct time. This allows limbs to function correctly when added from
nullspace via admin panel or bioscrambler.

Secondarily (and more wide-ranging) at some point (probably #79563) we
inadvertently made basic mobs only attack the target's chest instead of
spreading damage.
This is problematic for Living Flesh which can only attach itself to
damaged limbs but was left unable to attack damaged limbs.

I've fixed this in a way which is maybe stupid: adding an element which
randomises attack zone pre-attack.
Living limbs also limit this to _only_ limbs (although it will fall back
to chest if you have no limbs at all).
This is _technically_ still different, the previous behaviour used
`adjustBruteLoss` and `adjustFireLoss` and would spread the damage
across your entire body, but there isn't a route to that via the new
interface and this seems close enough.

## Changelog

🆑
fix: Living Limbs created by Bioscrambler will be alive.
fix: Living Limbs can once more attach themselves to your body.
balance: Living Limbs will prioritise attacking your limbs.
fix: Basic Mobs will once again spread their damage across body zones
instead of only attacking your chest.
/🆑

* RPG Loot: Revisited & READY (#82533)

Revival of #72881

A new alt click window with a tarkov-y loading spinner. Replaces the
object item window in stat panel.

<details>
<summary>vids</summary>

toggleable grouping:

![syAA5zf6RK](https://github.com/tgstation/tgstation/assets/42397676/c89b372d-29f6-4ebe-895d-f73bbdc41c19)

now lists the floor as first obj:

![abc](https://github.com/tgstation/tgstation/assets/42397676/cd8dc962-2ac7-41bf-a5d3-b9e926116b06)

in action:

![dreamseeker_IkrPKt2QZt](https://github.com/tgstation/tgstation/assets/42397676/1f990aa0-60f0-47e7-9d93-b63e35d05273)

</details>

- search by name
- 515 image generator is much faster than alt click menu
- opening a gargantuan amount of items shouldnt freeze your screen
- groups similar items together in stacks by default, toggleable
- shows tile as first item
- <kbd>Shift</kbd> and <kbd>Ctrl</kbd> compatible with LMB
🖱️
- RMB points points at items (sry i could not get MMB working)
- key <kbd>Esc</kbd> to exit the window.

For devs:
- A new image generation tech.
- An error refetch mechanic to the Image component
- It does not "smart track" the items being added to the pile, just
reopen or refresh. This was a design decision.

Honestly I just dislike the stat panel

Fixes #53824

Fixes

![image](https://github.com/tgstation/tgstation/assets/42397676/0e50faab-7d4d-4bf7-8c5b-4ac28547bfbd)

🆑
add: Added a loot window for alt-clicking tiles.
del: Removed the item browser from the stat panel.
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

* Reverts parts of #82602 (nodeath checks) (#82637)

## About The Pull Request

Reverts the nodeath checks of #82602

I opened a review thinking these checks were sus and the PR author said
they would remove them, but it was merged before that happened.

TL;DR 

1. I just noticed this now but it only affects carbons / humans it
doesn't even cover living or any other subtypes
2. Kinda sus. Some code intentionally skips checking nodeath (I guess?
Like removing the brain for example) so we would need a larger audit of
this rather than haphazardly throwing it in.

* Fixes to battle arcade (#82620)

## About The Pull Request

Added gear for world nine, removed the "Gear" gear that did nothing.
Made counterattacks to kill an enemy properly kill the enemy.
I renamed some gear items to fit the theme of the area they are unlocked
in just as a small thing.

## Why It's Good For The Game

Closes https://github.com/tgstation/tgstation/issues/82613

## Changelog

🆑
fix: Battle arcade's higher levels no longer gives you a "Gear" gear,
and counterattacks can now properly kill enemies.
/🆑

* Fixes SMES terminal placing under the SMES and not under the player (#82665)

## About The Pull Request

Changes `src` to`user` to get intended behavior.

* Birdshot: Toy crate (#82633)

## About The Pull Request
Gives the clown+mime their toy crate.
## Why It's Good For The Game
*honk*

* tram ai sat starts with a full smes (#82646)

## About The Pull Request

consistency and also this is fixes a bug introduced by that one power
refactor

## Why It's Good For The Game

bug bad

## Changelog
🆑
fix: tramstation AI sat starts full
/🆑

* [no gbp] Space Ruin bioscramblers shouldn't chase people around (#82649)

## About The Pull Request

See title
They wouldn't lock on to people on the station from a space ruin, but
would to whoever entered their z level the second it was entered.
Also fixes bug where I changed `status_flags` to `status_effects` for
some reason which isn't where you look for godmode

## Why It's Good For The Game

We have a space ruin whcih several (coreless) anomalies spawn on, the
bioscrambler was put as an option because it was already immortal. It's
weird though to zone into the ruin and immediately have every anomaly in
there lock onto you, the best intended effect is probably for these ones
specifically not to be bloodthirsty.
We kind of only care about that behaviour on the station.

## Changelog

🆑
fix: Anomalous Research ruin Bioscrambler anomalies won't home in on
targets
fix: Bioscrambler won't randomly drop its target for no reason
/🆑

* Sunders the many unused sprites and organizes what's left in structures.dmi (#82658)

## About The Pull Request
Hello again, I noticed the /obj/structures.dmi file had a lot of unused
stuff like tables from two generations ago, so I changed some stuff
around:
- Many unused, old icons deleted, mostly window variants used in old
smoothing systems I imagine
- Reorganized many sprites in the file so they're more grouped together
- Tweaked some barricade sprite naming to be consistent/standardized,
and to let others know they're not _too_ old...
- Fixed a misnomer that I believe was making directional tinted windows
look like frosted windows

## Why It's Good For The Game
Saves on file space, and satisfies your brain's pattern recognition bits

### Spriting
Old: 

![image](https://github.com/tgstation/tgstation/assets/143908044/0717940e-787e-40ee-85e2-0a0c5ebc0837)

New:

![image](https://github.com/tgstation/tgstation/assets/143908044/3954ba3b-b261-4700-986a-d30f3aa0e2a6)
also good lord those linen bin sprites are a crime

## Changelog
🆑
fix: Probably fixed directional tinted windows looking like directional
frosted windows
image: Deleted a bunch of unused structure sprites
/🆑

* Birdshot Wall Sanity Pass (#82598)

## About The Pull Request

Cleans up minor artifacting in the Birdshot Sec-Tram Closed Turfs

## Why It's Good For The Game

Someone definitely didn't mean to place some machines under Closed
Turfs. This barely qualifies as player facing.

## Changelog

🆑
fix: Cleans up some rocks on Birdshot
/🆑

* [NO GBP] Fixes deconstruction of closets & crates under a special case (#82612)

## About The Pull Request
So if a closet/crate has the `NO_DEBRIS_AFTER_DECONSTRUCTION` set on it
and if someone/something is still inside, then after deconstruction they
get deleted rather than getting dumped out first.

Could cause potential hard delete of mobs & stuff. We don't want to deal
with that

## Changelog
🆑
fix: closets & crates will dump all contents out first before deleting
itself regardless of `NO_DEBRIS_AFTER_DECONSTRUCTION` thus not for e.g.
hard deleting mobs inside it
/🆑

* Fixes ordinance lab igniter in IceBox (#82595)

## About The Pull Request
- Fixes #82294

Basically the same idea of merging ordanance lab with the burn chamber
so they share the same apc as already implemented in #82322

## Changelog
🆑
fix: Ordinance lab igniter in Icebox works again 
/🆑

* Birdshot: engi wardrope. (#82639)

## About The Pull Request

Add engi wardrope on Birdshot.

## Why It's Good For The Game

Birdshot doesn't have engi wardrope.

🆑
fix: Birdshot now have engi wardrope
/🆑

* Gives shadow walk a new, spookier, and shorter sound effect that no longer ignores walls (#82689)

## About The Pull Request

This gives shadow walk a snazzy new sound effect for entering/exiting
jaunt.


https://github.com/tgstation/tgstation/assets/28870487/c25f720f-5bad-4063-8d6e-140fd41bd740

This also has the sounds it plays no longer passes through walls.
## Why It's Good For The Game

The ethereal_entrance/exit sound effects are drawn out, and pretty
grating. They work for the other jaunts they're used for because a jaunt
typically lasts longer than the sound itself. Nightmares are frequently
dancing in and out of jaunt, and the sound effects for entering/exiting
tend to overlap. It gets loud and annoying really fast.

This sound effect is quicker, spookier, and more distinct.

As for making the sound not ignore walls, I think it's pretty dumb how
easy it is to detect the spooky scary shadow antag just by sitting in
your department. It takes a lot of the initial fear and paranoia they
have the potential for is wasted when Joe Geneticist can hear them
messing around in their territory without having to leave their chair.
## Changelog
🆑 Rhials
sound: Nightmare has a new sound effect for entering/exiting shadow
jaunt. It also no longer can be heard through walls.
/🆑

* [MIRROR] Alt click refactor (#2029)

* Alt click refactor

* Some early conflict removal

* Big modular refactor

* Update console.dm

* Update paper.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com>

* Yeets `ATTACK_QDELETED`, fixes welding torches not using fuel on attacking non-mobs (2 year old bug)  (#82694)

## About The Pull Request

- Deletes `ATTACK_QDELETED`
- May have been necessary in the past but it's pointless now. All it
does is clutter the attack chain. Perish.

- Fixes welders not using fuel on attacking non-mobs
- #65762 "fixed" welders consuming fuel on clicking turfs by adding an
`isliving` check and not an `ismovable` check?


## Changelog

🆑 Melbert
fix: Blobs may rejoice, welding torches now consume fuel when attacking
objects again after two years.
/🆑

* electric_welder fire

* Quirks, which give items, now have quirk_item arg specified as obj/item, instead of being just a var (#82650)

## About The Pull Request
quirk_item is now /obj/item, since it will allow for calling procs or
getting variables from this item

It's required for non-modular translation to call for item's name to
remove articles

## Why It's Good For The Game
It's always an item, and if it's a path, it's already checked for it.
Better usage in the future.

* turns martial arts gloves into a component (#82599)

sleeping carp gloves also work on mind init

this means for the sake of deathmatch you dont have to put them off and
on

fixes #82321

🆑
fix: you no longer need to put your sleeping carp gloves off and on in
Deathmatch to get the martial art
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>

* Regal Rats can now tear down posters (#82673)

## About The Pull Request

i was fixing something on bagil and someone who was playing a regal rat
(after the round ended) said they wanted to be able to tear down posters
as a regal rat so i decided to code it because it made sense.

it's an element so literally any mob can tear down posters but i can't
think of any other mobs that would make sense to let it tear down
posters so we'll leave it just for _The Champion of All Mislaid
Creatures_ for now
## Why It's Good For The Game

Regal Rats should be all about sludgemaxxing and fucking up maintenance
to make it look even more grody than it should be. Being able to tear up
those disgusting and well-drawn posters to leave behind nothing but
scraps fits that motif. The element has a `do_after()` just to make sure
His Holiness doesn't accidentally tear down his posters while clicking
(i think all mobs should have this but that's a different issue man)

also includes some code improvement and user feedback in some failure
cases that already existed in the code.
## Changelog
🆑
add: Regal Rats are now able to tear down those colorful posters those
weird grey creatures keep spackling up on the walls of their rightful
domain.
/🆑

* Adds "Strong Stomach" quirk, a core CDDA/PZ quirk we've sorely been missing. Also Deviant Tastes dirty food re-nerf. (#82562)

## About The Pull Request

- Adds Strong Stomach quirk. 
   - 4 points
   - You can eat dirty food without risk of getting disease. 
- You suffer less negative effects from vomiting. Vomit stuns you for
half the duration, and you lose half as much nutrition.

- Reverts https://github.com/tgstation/tgstation/pull/76864 , integrates
its effects into Strong Stomach instead.

## Why It's Good For The Game

- Lotta people (namely Lizards and sometimes Felines with Deviant
Tastes) run gimmicks involving them being a gremlin person and eating
trash off the ground, and it's rather hard to accomplish this now since
it makes you a public medbay enemy # 1. This quirk should give them an
option to avoid that.
- Also (as mentioned in the title) both CDDA and PZ have this trait and
I can't believe we're missing it! This is something in
modifiable-character-traits/quirks-101.

- I moved the effects from #76864 to this quirk because 1. I thought it
was more fitting and 2. I thought the original PR was kinda wack for
what is (generally) a neutral quirk.

## Changelog

🆑 Melbert
add: Adds the Strong Stomach quirk, which allows you to eat grimy food
without worry about disease, and makes you a bit more resilient to the
effects of vomiting.
del: Deviant Tastes no longer prevents you from getting a negative
moodlet from eating dirty food. Strong Stomach does that now.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>

* Remove several functions from collections.js which have ES5 equivalents (#82417)

* Makes it EVEN EASIER to work with atom item interactions ft. "Leaf and Branch" & "Death to Chains" (#82625)

* apc fix

* Gulag Adjustments Two (#82561)

## About The Pull Request

I have received feedback that after the prior changes in #81971, the
gulag is still a little bit too subject to RNG.
The main culprit (as in my previous PR) is Iron being kind of cheap and
the fact that unlike the old Gulag you no longer have any way of
headhunting more valuable materials (everything appears as boulders on
your ore scanner).

My solution to this is wider than the last one of tweaking point values,
but also much simpler:
Just make every boulder you mine be worth the same amount of points
regardless of what is inside of it.

On the average test I made I could comfortably mine about 40-45 boulders
in ten minutes.
We'll make some adjustments to that rather than leaving 40 as the target
number;
Most players upon being teleported to the gulag are going to spend a few
minutes whining and bemoaning their fate instead of getting straight to
work. I had the benefit of being able to make sure my run started as
soon as a storm ended so I wouldn't need any kind of midpoint break. I
was also always the only person playing on my local instance, there
hadn't been any other pesky prisoners before me who had already mined
out all the nearest available deposits. And of course, let us not
forget, I am an MLG master league ss13 player who was surely performing
well above average.

So we'll round that down to: Each boulder is worth 33 points, meaning
you need to collect 31 boulders to complete a 1000 point (roughly ten
minute) sentence.

How do I ensure that every boulder is worth the same amount of points?
Well it's pretty easy.
One boulder = one material sheet. One material sheet = 33 points.
Simple.

"Now Jacquerel", I hear you not saying because you don't want me to know
about this thing you would prefer to do instead of hitting rocks
outside; "if I simply smash all of the tables and microwaves and botany
trays and bed in the gulag I can easily get like 65 sheets of Iron,
which is almost enough to buy the freedom for two entire people!"
Unfortunately I knew you were going to try and do that and the prisoner
point machine will only give you points for material sheets which have
been printed from the material smelter (well, any material smelter
actually but you should probably use the one in the gulag). You'll be
able to tell because if you examine a valid material sheet it will
mention a little maker's mark on it, which is absent in the beat-up iron
that you get from smashing furniture to bits.

Also glass is worth 0 points. Don't waste time digging up that shit. 

As glass has had all of its point value removed, I have added a "work
pit" to the gulag to compensate. You can pull boulders out of this
indefinitely via effort, however it also stamcrits you every time.
It's not very fun to do this, but that's because I would prefer you to
go find the rocks out in the field instead. This is a last resort.
You can do this if there's no boulders left to mine or if you really
really really hate mining and would rather very slowly click on one tile
repeatedly to get your boulders instead.
As a tiny bonus doing this gives workout experience.

This isn't a totally ideal solution but I think it'll do for now.

## Why It's Good For The Game

What we want out of the gulag is:
- Something where officers can vaguely approximate an expected sentence
duration.
- A task that requires players to actually be spending that time doing
something to get out of here.
- Produces at least some amount of useful materials.

In I think roughly that order.
I hope this change accomplishes all three of these in a way that is
somewhat predictable rather than throwing darts at a board.

## Changelog

🆑
balance: Gulag mining has been rebalanced so that every boulder is worth
the same amount of points to mine for a prisoner regardless of what it
contains, and should be more consistent.
add: A vent which boulders can be hauled out of by hand has been added
to the gulag which you can use if there's nothing left to mine. It is
very slow, but at least it gives you a workout...
/🆑

* stone

* Makes test merge bot continue with other PRs if updating one fails. (#82717)

Right now updating
https://github.com/tgstation/tgstation/pull/81089#issuecomment-1907296233
fails because it exceeds github character limit for comments.

This will make it work until backed is updated.

* Fixes the RnD console by adding a removed import (#82750)

## About The Pull Request
The 'map' import was removed from this file by #82417 but it's still
used in place in code. This re-adds the import

## Why It's Good For The Game
Fixes RnD consoles

## Changelog
🆑
fix: Fixed RnD consoles not being able to be opened.
/🆑

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>

* Fixes cargo import (#82755)

## About The Pull Request
One of the imports got removed and there were no warnings... Man if only
there were a technology that could warn us in advance
## Why It's Good For The Game
UI fixes
## Changelog
🆑
fix: Fixed a bluescreen in cargo console
/🆑

* fixes

* Fixes, fixes.

* Pre-emptive mirror of https://github.com/tgstation/tgstation/pull/82892

* Turf weakref persists in changeturf / Fix plasma cutters  (#82906)

## About The Pull Request

Turf references don't change so logically, turf weakrefs wouldn't change
if the turf changes.

By not doing this this can cause bugs: See #82886 . (This Fixes #82886) 

(Projectiles hold a list of weakrefs to atoms hit to determine what they
have already hit.

Because turf weakrefs reset, we could "hit" the same turf twice if it
destroyed the turf.

Old behavior - this was fine but now that they're weakrefs, we get two
weakref datums in the list that point to the same ref.)

Less hacky alternative to #82901 . (Closes #82901) 

## Changelog

🆑 Melbert
fix: Plasma cutters work again
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Interception&? <137328283+intercepti0n@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Ketrai <zottielolly@gmail.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com>
Co-authored-by: vect0r <71346830+Vect0r2@users.noreply.github.com>
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: AMyriad <143908044+AMyriad@users.noreply.github.com>
Co-authored-by: Zytolg <33048583+Zytolg@users.noreply.github.com>
Co-authored-by: Xackii <120736708+Xackii@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com>
Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com>
Co-authored-by: Arthri <41360489+Arthri@users.noreply.github.com>
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-04-28 22:24:01 +02:00
SpaceLoveSs13
7aa6664021 Mirror (#27453)
* Fix Conflicts

* Change COGBAR_ANIMATION_TIME to seconds and not deciseconds (#82530)

Most people should not be using this define

* New Battle Arcade (#81810)

Remakes Battle Arcade from just about the ground up, with exceptions
taken for emagged stuff since I didn't really want to touch its
behavior.

The Battle Arcade now has stages that players can go through, unlocking
a stage by beating 2 enemies and the boss of the previous one, but this
must all be done in a row. You can choose to take a break between each
battle and there's a good chance you'll sleep just fine but there's also
a chance it can go wrong either through an ambush or robbery.

The Inn lets you restore everything for 15 gold and you can buy a sword
and armor, each level you unlock is a new sword and armor pair you can
buy that's better than the last, it's 30 gold each but scales up as you
progress through levels. They are really worth getting so it's best to
try to not lose your money early in.

The battle system is nearly the same as how it was before but I removed
the poor combo system that plagued the old arcade as one big knowledge
lock, now it's more just turn based. The game is built on permadeath so
dying means you restart from the beginning, but if you are going to lose
you can try to escape instead which costs you half of your gold.

Getting to higher levels increases the difficulty of enemies but also
increases the gaming exp rewards which could make this a better way to
get exp if you can get good at it.

Gaming EXP is used to increase chances of counterattacking but doesn't
give any extra health to the player.

I also removed the exploit of being able to screwdriver arcade cabinets
because people would do that if they thought they were on the verge of
losing to bypass the effects of loss. I instead replaced it with a new
interaction that the Curator's display case key can be used to reset
arcade cabinets (there's several keys on the chain so it made sense to
me), which I added solely because I thought Curators would be the type
of person to have run an actual arcade.

This is some gameplay

https://github.com/tgstation/tgstation/assets/53777086/499083f5-75cc-43b5-b457-017a012beede

As a misc sidenote, I also split up the arcade file just like how Orion
Trail was before, just for neat code organization.
The Inn keeper is straight up just a photo of my localhost dude, he's
not a player reference or anything it's not my actual character.
I also have no idea how well balanced this is cause I suck at it lol.

Battle Arcade is one of 3 last machines in my hackmd here to turn into
TGUI https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view
I've always thought the current version of battle arcade is quite lame
and lacks any progression, like Orion Trail I thought that since I was
moving this to TGUI, it would also be a perfect opportunity to revamp it
and try to improve on where it failed before, especially since the
alternative (NTOS Arcade) is also lame as hell and is even lamer than
HTML battle arcade (spam mana, then spam health, then just spam attack,
rinse and repeat).
This will hopefully be more entertaining and give players sense that
they are getting through a series of tasks rather than doing one same
one again and again.

🆑 JohnFulpWillard, Zeek the Rat
add: Battle Arcade has been completely overhauled in a new progression
system, this time using TGUI.
add: The Curator's keys can now reset arcade cabinets.
balance: You now need to be literate to play arcade games, except for
Mediborg's Amputation Adventure.
fix: You can no longer screwdriver emagged arcade consoles. Accept your
fate.
fix: Silicons can no longer play Mediborg's Amputation Adventure.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>

* Change setting item weight class to a setter to patch some weight class related shenanigans (#82494)

## About The Pull Request

Fixes #81052 
Fixes #58008

Setting weight class of items is now done via `update_weight_class`.

I updated as many occurrences of manually setting `w_class` as I could
find but I may have missed some. Let me know if you know of any I
missed.

This is done to allow datums to react to an item having its weight class
changed.

Humans and atom storage are two such datums which now react to having an
item in its contents change weight class, to allow it to expel items
that grow to a weight class beyond what is normally allowed.

## Changelog

🆑 Melbert
fix: You can't fit items which are normally too large for a storage by
fitting it in the storage when it is small, then growing it to a larger
size.
/🆑

* Material datum color update, plus touching up some material items (knight armor, tiles) (#82500)

## About The Pull Request

Tries to bring the material datum colors in closer approximation to the
stacks they're attached too. I literally used the colors on the stacks.
some might need to be lighter or darker, but for the most part they'll
look...closer to their actual material hues.

![material datum stuff
2](https://github.com/tgstation/tgstation/assets/40847847/a3a5968f-cab3-43dd-8699-3dae879b21fb)

I've also tweaked the sprites of both the tile object and the actual
material tile turf to give it the right shading.


![image](https://github.com/tgstation/tgstation/assets/40847847/56489479-8774-492b-b8cc-aeabc6c0a67f)

In addition to the tiles, I've also updated the knight armor and helmet
to look closer to the much higher quality plate armor already in the
game.

## Why It's Good For The Game

It bothered me that the material datum coloring was inconsistent with
the actual colors used for the material stacks. When they were updated,
and even before they were updated, material datum stuff just never
looked _right_. I wanted to change that so that it looks just right.

I did not like the old material knight armor whatsoever. It was a
dithered mess, and seemed to already use parts of the standard plate
armor but with all the actual shading removed or replaced with the wrong
colors. This fixes that so that the armor is actually readable for what
it is.

## Changelog
🆑
image: Updates the colors of various material datum to bring them closer
in-line with their actual material stacks
image: Improves the sprites for the material knight armor and helmet.
/🆑

* LateInitialize is not allowed to call parent anymore (#82540)

## About The Pull Request

I've seen a few cases in the past where LateInitialize is done cause of
the init return value being set to do so for no real reason, I thought I
should try to avoid that by ensuring LateInitialize isn't ever called
without overriding.

This fixes a ton of machine's LateInitialize not calling parent
(mechpad, door buttons, message monitor, a lot of tram machines,
abductor console, holodeck computer & disposal bin), avoiding having to
set itself up to be connected to power. If they were intended to not
connect to power, they should be using ``NO_POWER_USE`` instead.

Also removes a ton of returns to LateInit when it's already getting it
from parent regardless (many cases of that in machine code).

## Why It's Good For The Game

I think this is better for coding standard reasons as well as just
making sure we're not calling this proc on things that does absolutely
nothing with them. A machine not using power can be seen evidently not
using power with ``NO_POWER_USE``, not so much if it's LateInitialize
not calling parent.

## Changelog

🆑
fix: Mech pads, door buttons, message monitors, tram machines, abductor
consoles & holodeck computers now use power.
/🆑

* Fix table top deconstruction (#82508)

## About The Pull Request

Edited: updated changelog, read comments for changes in implementation
details

So previously, tables would let you use a wrench to fully deconstruct
them, or a screwdriver to take off only their top.
This, however, broke in two different ways in #82280, when their
deconstruction logic got changed.

First off, deconstructed tables would only drop the materials for their
top and not their frame.
For this, the primary culprit seems to be on line 307:

c34d56a45b/code/game/objects/structures/tables_racks.dm (L300-L307)
Where `new framestack(target_turf, framestackamount)` accidentally got
an extra indent, and ended up in the less common half of the if-else
chain.
Just moving this outside of the if-else chain again fixes it.

Secondly, tables had their own special deconstruction logic, which got
'standardized'.
Issue. This was special to accommodate for having two different
deconstruction logics: full or top only.
With `deconstruct(...)` no longer being overridable, I feel it's awkward
to attempt to proxy that information to the new `atom_deconstruct(...)`
So we introduce a new method, `deconstruct_top`, for the screwdriver to
use, which handles deconstructing only the top.
```dm
/obj/structure/table/proc/deconstruct_top()
	var/obj/table_frame = new frame(loc)
	if(obj_flags & NO_DECONSTRUCTION)
		table_frame.obj_flags |= NO_DECONSTRUCTION
	else // Mimic deconstruction logic, only drop our materials without NO_DECONSTRUCTION
		var/turf/target_turf = get_turf(src)
		drop_top_mats(target_turf)
	qdel(src)
```
Mimicking the `NO_DECONSTRUCTION` logic of normal deconstruction, and
copying over the flag onto its frames if need be.
This fixes screwdriver deconstruction.
## Why It's Good For The Game

Fixes #82503.
We can now deconstruct the table top separately again, AND get the right
materials back too.

## Changelog
🆑 00-Steven, SyncIt21
fix: Wrench table deconstruction gives the right materials again.
fix: Screwdriver table deconstruction only deconstructs the top again.
/🆑

* [NO GBP] Reagent grinders display reagents on examination (#82535)

## About The Pull Request
- Fixes #82531

Somehow omitted this during the general maintenance thing

## Changelog
🆑
fix: Reagent grinders display reagents of its beaker on examination
/🆑

* Monkeys now use height offset (and monkey tail works) (#81598)

This PR adds the ability for monkeys to wear any jumpsuit in the game,
and adds support for them to wear things like coats, gloves, and shoes
(though this cannot be obtained in-game and is solely achieved through
admins, which I also improved a bit upon by adding a defined bitfield
for no equip flags).

This reverts a lot of changes from
https://github.com/tgstation/tgstation/pull/73325 - We no longer check
height from limbs and such to bring sprites down, instead monkeys now
work more similarly to humans, so the entire PR was made irrelevant, and
I didn't really want to leave around dead code for the sake of having a
human with longer legs.

I've now also added support for Dwarfism, which makes monkeys look even
smaller. Very minor change but at least now the mutation doesn't feel
like it does literally nothing to monkeys (since they can already walk
over tables).

Here's a few examples of how it can appear in game (purely for
demonstration, as it is currently intentionally made impossible to
obtain in-game, though if someone wants to change that post-this PR now
that support is added, feel free):

Tails have been broken for a while now, the only reason you see them
in-game is because they are baked into the monkey sprites. This fixes
that, which means humans can now get monkey tails implanted into them
(hell yeah) and monkeys can have their tails removed (also hell yeah)

* Gets [weird] with (spies) by adding protect and deuteragonist-flavored objectives. (#82447)

## About The Pull Request

What are their goals? Why are they doing this? gets weird with Spy
objectives - namely by adding a lot more ways spies might be asked to
affect various targets around the station.

the first of these is by several flavors of Protecting targets (these do
NOT print a success at roundend in keeping with Spy design:)
- Protect (get a humanoid target off alive)
- Protect Nonhuman (get an entity off alive)
- Jailbreak (make sure a humanoid target escapes free)
- Detain (make sure a humanoid target gets taken out arrested)

the second of this is by a new escape condition: 
- Exile (get off-station or off the Z-level by the end of the shift -
sometimes it's not just pods, you need to fuck off to space to win.)

the third is through a massive increase in the number of possible:
- objective templates 
- departments to target (Command + Service added)
- specific locations to target
- general classes of objects to target (medicines, floor tiles, critical
infrastructure, etc.)
- efforts to target (such as meals, mechs, public supplies)
- ways to leave (you can be asked to abscond from the scene of your
crimes?)

## Why It's Good For The Game

More goofy and weird prompts to do more interesting things with Spies.
One thing I think we're sorely missing in our lineup is antagonists that
can act a bit more as deuteragonists - very possibly helping the crew
under certain conditions and frustrating the Hell out of them in others.

Since there's no way to check their objectives, and they get their
gear/progression through stealing shit, they're still very much an
antagonist and exist under the suspicion of doing bad... but, just going
by their objectives, introducing more varied (and in some cases even
benign) goals for them creates suggestions pointing to a lot more varied
and interesting stories if people choose to run with it.

* Adds anosmia quirk (#82206)

## About The Pull Request

Adds anosmia quirk. Anosmia, also known as smell blindness, is the loss
of the ability to detect one or more smells.

I tried to find all smells action and (most likely) update all of them,
unfortunately I can't change descriptions for this quirk.

## Why It's Good For The Game

Some characters will be able to not feel smells
That affect:
* Gases feelings and alerts (CO2, Plasma, miasm) - you don't feel them
* Bakery and cooking
* Changeling ability to feel other changelings by smell
* Some unimportant spans

* Explosions Part I - Directional Explosions (#82429)

## About The Pull Request

Adds the ability for explosions to be directional. This is achieved by
adding an angle check to `prepare_explosion_turfs()` to drop any turfs
outside the cone of the explosion. If the arc covers a full 360 degrees,
as is the default, it will accept all the turfs without performing the
angle check.

Uses this functionality to rework both rocket launcher backblast and X4
explosions. Rocket launcher backblast has been changed from a shotgun of
indendiary bullets to a directional explosion of similar length. X4 now
uses a directional explosion to "ensure user safety".

Apparently the old method of moving the explosion one tile away didn't
even work, as it blew up `target` before trying to check its density for
the directional behaviour.

https://youtu.be/Mzdt7d7Le2Y

## Why It's Good For The Game

Directional explosions - Useful functionality for a range of potential
use cases, which can be implemented with minimal extra processing cost
(Worst case scenario being very large directional explosions)

Backblast - Looks way cooler than a bunch of projectiles, and should be
significantly more functional in high-lag situations where projectile
code tends to get fucky

X4 - More predictable for players wanting to use it as a breaching
charge, you can actually stand near the charge and not have to worry
about being hoist upon your own petard.

## Changelog
🆑
add: Added support for directional explosions.
add: Rocket launcher backblast is now 271% more explosive, check your
six for friendlies!
add: X4 charges now explode in a cone away from the user when placed on
a sufficiently solid object.
fix: X4 charges will now behave correctly when placed on dense atoms
(note: don't try to read a variable from an atom you just blew up)
/🆑

* Add balloon alerts to plunging (#82559)

## About The Pull Request

Makes all plunging actions (pretty much anything using `plunger_act`)
have a visible balloon alert.

## Why It's Good For The Game

Makes sense that others would easily notice you plunging the shit out of
something.

Also, more people might finally learn that you can plunge the vent clogs
instead of welding them.

## Changelog
🆑
qol: Added balloon alerts whenever you start plunging something (i.e )
/🆑

* Fixes spurious runtime on Icemoon caused by turf calling unimplemented LateInitialize() (#82572)

## About The Pull Request

As of https://github.com/tgstation/tgstation/pull/82540 this runtime was
happening,


![image](https://github.com/tgstation/tgstation/assets/13398309/4d838fda-c157-4e33-ae64-77eafca1806f)

`/turf/open/openspace/icemoon/` can be changed to
`/turf/open/misc/asteroid/snow/icemoon/do_not_chasm` before
`Initialize()` returns, which resulted in it `INITIALIZE_HINT_LATELOAD`
getting returned on a turf that does not have an implementation of that
proc.

This should fix that.

## Why It's Good For The Game

Fixes CI error

* Blueprints tgui (#82565)

Blueprints now use a TGUI panel instead of the old HTML one.
Also did general code improvement and maintaining to blueprints in
general and also destroyed the ``areaeditor`` level, repathing it to
just 'blueprints'.
Also adds a sound when you look at structural data cause why not

Video demonstration:

https://github.com/tgstation/tgstation/assets/53777086/861773fd-3d57-472d-bc94-d67b0d4f1dbd

The 4 blueprint types:

![image](https://github.com/tgstation/tgstation/assets/53777086/bfd68eb5-c430-4608-a3f7-d6ac86727882)

Another HTML menu dead underground.
This is more responsive and doesn't require constant updating to see
which area you're in, feels less OOC (instead of saying "the blueprints
say", just say it, you ARE the blueprints).

Like, come on

![image](https://github.com/tgstation/tgstation/assets/53777086/fcf1b8b6-37c3-4c94-969f-3b121c983dc0)

Look at all this wasted space

![image](https://github.com/tgstation/tgstation/assets/53777086/1d3e61cd-bc56-4280-a3bb-0c66604e75b3)

🆑
refactor: Blueprints now use TGUI.
qol: Blueprints can now be used while lying down.
/🆑

* General maintenance for chem master (#82002)

**1. Qol**
- Adds screen tips & examines for screwdriver, wrench, crowbar & beaker
insertion, removal & replacing actions
- Analyzing reagents is now a client side feature & not a back end mode,
meaning one person can see details of a reagent while the other can
print stuff and do other operations so it's a non blocking operation.
This also means 2 players can see information of 2 different reagents in
their own screens, With that the overlay for analysis mode has been
removed
- You cannot do any tool acts on machines while printing. Balloon alerts
will be displayed warning you of that.
- The preferred container for the master reagent in the beaker is now
showed in both condiment & chem master. It can be enabled/disabled via a
CheckBox

**2. Code Improvements**
- Removed defines like `TARGET_BEAKER` , `TARGET_BEAKER` etc. ther
functionality is implemented as params in the `transfer_reagent()` proc
directly
- Removed all variables relating to analyzing reagents like
`reagent_analysis_mode`, `has_container_suggestion` etc. all memory
savings
- `printable_containers` now stores static values that can be shared
across many chem masters
- Updates only overlays and not the whole icon during operations for
efficiency

**3. Fixes**
- You can hit the chem master with the screwdriver, wrench, crowbar &
beaker when in combat mode
 - You cannot insert hologram items into the chem master
- Deconstructing a condiment master will give you the circuit board
already pre-programmed with that option selected so you don't need to
use a screwdriver to re program it
- `printing_amount` is now the maximum number of containers that can be
printed at a time. Presently this number with upgraded parts would print
out empty containers especially for patches. This is because
`volume_per_item` does not take into consideration this var. Also this
var would not give control to the player on exactly how many containers
to print as whatever amount the player entered would be multiplied with
this value producing a lot of waste & worse empty containers. Now this
var determines exactly how many containers you can print and is imposed
on the client side UI as well

**4. Refactors (UI performance)**
- Beaker data is compressed into a single entity & sent to the UI. This
is set to null if no beaker is loaded thus saving data sent
- Reuses Beaker props from chem synthesizer to reduce code
- reagent REF replaced with direct type converted to text and later
converted with `text2path()` cause its much faster

🆑
qol: Adds screen tips & examines for screwdriver, wrench, crowbar &
beaker insertion, removal & replacing actions
qol: Analyzing reagents no longer blocks other players from doing other
operations. Multiple players can analyze different reagents on the same
machine
qol: You cannot do any tool acts on the machine while printing to
prevent any side effects.
qol: The preferred container for the master reagent in the beaker is now
showed in both condiment & chem master. The feature can be
enabled/disabled via a check box
code: removed defines for reagent transfer, vars for reagent analyzis to
save memory. Autodoc for other vars & procs
fix: You can hit the chem master with tools like screwdriver, crowbar,
wrench & beaker in combat mode
fix: You cannot insert hologram items into the chem master
fix: Deconstructing a condiment master will give you the circuit board
already pre-programmed with that option
fix: You now print the exact amount of containers requested even with
upgraded parts without creating empty containers. Max printable
containers is 13 with tier 4 parts able to print 50 containers.
refactor: Optimized client side UI code & chem master as a whole.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* Wraps `lowertext()` to ensure proper stringification. (#82442)

Fixes #82440

This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not
lost on me) to wrap around all calls of `lowertext()` and ensure that
whatever we input into that proc will be stringified using the `"[]"`
(or `tostring()` for the nerds) operator. very simple.

I also added a linter to enforce this (and prevent all forms of
regression) because I think that machines should do the menial work and
we shouldn't expect maintainers to remember this, let me know if you
disagree. if there is a time when it should be opted out for some
reason, the linter does respect it if you wrap your input with the
`UNLINT()` function.

* Clowns can now make balloon... toys. And also mallets and hats. (#82288)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

Clowns will now start with a box of 24 random long balloons and a
skillchip in their noggin allowing them to create balloon animals by
combining two of them of different colour together. Owners of the
skillchip also gain access to crafting recepies of balloon mallets,
vests, helmets and tophats, all created from long balloons. A crate of
long balloons, with a box of balloons inside, can be bought at cargo, in
case the clown runs out. I might edit this once I wake up, its 3 in the
morning right now.
Oh also, resprited how balloons look in inventory.

![image](https://github.com/tgstation/tgstation/assets/122572637/2d7ce955-c787-48a5-bfda-4613d2eed837)

Balloon animals funny.
Silly features are my favourite kind of features, and this one's
open-ended too.
Someone on the coder chat recommended someone would do it that one time,
here it goes.

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Added long balloon box to the clown's starting inventory, and a
skill-chip of long lost honk-motherian knowledge to their brain.
add: Added long balloons. Consequently, added balloon animals to make
from such balloons. Also, balloon top hat, vest, helmet, and a mallet.
Don't ask about the mallet.
add: A long balloons box harvested fresh from the farms on the clown
planet will be able to be shipped in a crate to the cargo department
near you!
add: As per requests; water balloons can now be printed at service
lathe, and entertainment modsuit can now blow long balloons!
image: Balloons will now have an unique sprite when in the inventory,
compared when to on the ground.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>

* Quick spellcheck 'steall' (#82560)

## About The Pull Request

https://github.com/tgstation/tgstation/pull/82447 quick followup to
this, caught it while glancing through the code.

* Fix

* merge conflicts

* Revert "Monkeys now use height offset (and monkey tail works) (#81598)"

This reverts commit 5cfdc5972d16c6b509220e8874a927696249d36a.

* fix

* Fixed lateinitialize

* This should cut it

* Oh right

* There?

* Damn, here?

* There

* [NO GBP] Fixes spurious runtime caused by icemoon (again) (#82582)

## About The Pull Request

https://github.com/tgstation/tgstation/pull/82572 I tried to fix this
but there was an unaccounted race condition which just caused a separate
runtime...


![firefox_GxGibAO281](https://github.com/tgstation/tgstation/assets/13398309/f251aecc-ef17-4bae-a741-5aade40de423)

Since the type is being changed mid-execution `replacement_turf` will
become out of scope. My bad--this should fix it now for good.

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Higgin <cdonny11@yahoo.com>
Co-authored-by: NeonNik2245 <106491639+NeonNik2245@users.noreply.github.com>
Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-04-26 01:22:24 +02:00
Nidvex250
5da39ab9ee Hypospray and ICSpawning ports (#27279)
* Hypospray Port

The fancy new GAG enabled hyposprays.

* [MIRROR] ICSpawning Module: Quirks, Loadout, and BST RPED buff

Ports CliffracerX's work which allows quirks and/or loadout items when using the ICSpawning (ctrl+clicking a ghost)

* oops

got rid of that accidental absolute nested path thingy. (I think)
2024-04-20 17:07:14 +02:00
Useroth
20c0599ce6 Some more mirrors again (#27366)
* Ports additional Felinid ears from Orbstation (#82066)

Adds 5 new ear options from Orbstation, originally PRed in
lizardqueenlexi/orbstation#360. Sprites by @Or-Fi-S.

Big:

![image](https://github.com/tgstation/tgstation/assets/7019927/5f847130-e5f5-44cc-adb4-c740c4c4f69b)

Coeurl (FFXIV Miqo'te style):

![image](https://github.com/tgstation/tgstation/assets/7019927/34448bee-d6af-4d3c-b796-384ec9904368)

Fold:

![image](https://github.com/tgstation/tgstation/assets/7019927/a7dafd05-f652-460e-9386-f7fcbef696e9)

Lynx:

![image](https://github.com/tgstation/tgstation/assets/7019927/174ff630-6eb8-4bb9-8f4f-791b70356c58)

Round:

![image](https://github.com/tgstation/tgstation/assets/7019927/b3a24d1b-66fa-4883-8c27-871ae8966d6c)

Also makes it so the code guarantees that custom ears on a felinid
actually count as felinid ears and not human ones, as the code wasn't
checking properly when preferences were applied. There's probably a
cleaner, more permanent way to do this and a refactor is needed
somewhere down the line (man that sprite accessories file is getting
long huh) but I'll leave that to a more competent coder.

More customization options are good also Cobby said I could

![image](https://github.com/tgstation/tgstation/assets/7019927/56bbe285-068f-41a1-92cc-9f3861875090)

🆑
add: Added 5 new Felinid ear options, ported from Orbstation! (Sprites
by Or-Fi-S)
/🆑

---------

Co-authored-by: _0Steven <jaydondegenerschool@gmail.com>

* Standardizes object deconstruction  throughout the codebase.  (#82280)

When it comes to deconstructing an object we have `proc/deconstruct()` &
`NO_DECONSTRUCT`

Lets talk about the flag first.

**Problems with `NO_DECONSTRUCTION`**
I know what the comment says on what it should do

b5593bc693/code/__DEFINES/obj_flags.dm (L18)

But everywhere people have decided to give their own meaning/definition
to this flag. Here are some examples on how this flag is used

**1. Make the object just disappear(not drop anything) when
deconstructed**
This is by far the largest use case everywhere. If an object is
deconstructed(either via tools or smashed apart) then if it has this
flag it should not drop any of its contents but just disappear. You have
seen this code pattern used everywhere

b5593bc693/code/game/machinery/constructable_frame.dm (L26-L31)

This behaviour is then leveraged by 2 important components.

When an object is frozen, if it is deconstructed it should just
disappear without leaving any traces behind

b5593bc693/code/datums/elements/frozen.dm (L66-L67)

By hologram objects. Obviously if you destroy an hologram nothing real
should drop out

b5593bc693/code/modules/holodeck/computer.dm (L301-L304)

And there are other use cases as well but we won't go into them as they
aren't as significant as these.

**2. To stop an object from being wrenched ??**
Yeah this one is weird. Like why? I understand in some instances (chair,
table, rack etc) a wrench can be used to deconstruct a object so using
the flag there to stop it from happening makes sense but why can't we
even anchor an object just because of this flag?

b5593bc693/code/game/objects/objs.dm (L368-L369)
This is one of those instances where somebody just decided this
behaviour for their own convenience just like the above example with no
explanation as to why

**3. To stop using tools to deconstruct the object**
This was the original intent of the flag but it is enforced in few
places far & between. One example is when deconstructing the a machine
via crowbar.

b5593bc693/code/game/machinery/_machinery.dm (L811)

But machines are a special dual use case for this flag. Because if you
look at its deconstruct proc the flag also prevents the machine from
spawning a frame.

b5593bc693/code/game/machinery/_machinery.dm (L820-L822)

How can 1 flag serve 2 purposes within the same type?

**4. Simply forget to check for this flag altogether**
Yup if you find this flag not doing its job for some objects don't be
surprised. People & sometimes even maintainers just forget that it even
exists

b5593bc693/code/game/objects/items/piggy_bank.dm (L66-L67)

**Solution**
These are the main examples i found. As you can see the same flag can
perform 2 different functions within the same type and do something else
in a different object & in some instances don't even work cause people
just forget, etc.

In order to bring consistency to this flag we need to move it to the
atom level where it means the same thing everywhere. Where in the atom
you may ask? .Well, I'll just post what MrMelbert said in
https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862

> ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION
handling as it wants,

Yup that's the ideal case now. This flag is checked directly in
`deconstruct()`. Now like i said we want to give a universal definition
to this flag and as you have seen from my examples it is used in 3 cases
1) Make an object disappear(doesn't dropping anything) when
deconstructed
2) Stop it from being wrenched
3) Stop it from being deconstructed via tools

We can't enforce points 2 & 3 inside `deconstruct()` which leaves us
with only case 1) i.e. make the object disappear. And that's what i have
done. Therefore after more than a decade or since this flag got
introduced `NO_DECONSTRUCT` now has a new definition as of 2024

_"Make an object disappear(don't dropping anything) when deconstructed
either via tools or forcefully smashed apart"_

Now i very well understand this will open up bugs in places where cases
2 & 3 are required but its worth it. In fact they could even be qol
changes for all we know so who knows it might even benefit us but for
now we need to give a universal definition to this flag to bring some
consistency & that's what this PR does.

**Problem with deconstruct()**
This proc actually sends out a signal which is currently used by the
material container but could be used by other objects later on.

3e84c3e6da/code/game/objects/obj_defense.dm (L160)

So objects that override this proc should call its parent. Sadly that
isn't the case in many instances like such

3e84c3e6da/code/game/machinery/deployable.dm (L20-L23)

Instead of `return ..()` which would delete the object & send the signal
it deletes the object directly thus the signal never gets sent.

**Solution**
Make this proc non overridable. For objects to add their own custom
deconstruction behaviour a new proc has been introduced
`atom_deconstruct()` Subtypes should now override this proc to handle
object deconstruction.

If objects have certain important stuff inside them (like mobs in
machines for example) they want to drop by handling `NO_DECONSTRUCT`
flag in a more carefully customized way they can do this by overriding
`handle_deconstruct()` which by default delegates to
`atom_deconstruct()` if the `NO_DECONSTRUCT` flag is absent. This proc
will allow you to handle the flag in a more customized way if you ever
need to.

1) I'm goanna post the full comment from MrMelbert
https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862

> ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION
handling as it wants, but there's a shocking lack of consistency around
NO_DECONSTRUCTION, where some objects treat it as "allow deconstruction,
but make it drop no parts" and others simply "disallow deconstruction at
all"

This PR now makes `NO_DECONSTRUCTION` handled by `deconstruct()` & gives
this flag the consistency it deserves. Not to mention as shown in case 4
there are objects that simply forgot to check for this flag. Now it
applies for those missing instances as well.

2) No more copying pasting the most overused code pattern in this code
base history `if(obj_flags & NO_DECONSTRUCTION)`. Just makes code
cleaner everywhere

3) All objects now send the `COMSIG_OBJ_DECONSTRUCT` signal on object
deconstruction which is now available for use should you need it

🆑
refactor: refactors how objects are deconstructed in relation to the
`NO_DECONSTRUCTION` flag. Certain objects & machinery may display
different tool interactions & behaviours when destroyed/deconstructed.
Report these changes if you feel like they are bugs
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>

* Makes attempting to refresh the logs not just throw a runtime error (#82432)

## About The Pull Request

Really all this seems to be is a mismatch between the tgui and dm side
of the menu.

3c71b14df0/tgui/packages/tgui/interfaces/LogViewer.tsx (L71)

3c71b14df0/code/modules/logging/log_holder.dm (L110-L113)
Making these line up by renaming `re-render` to `refresh` seems to make
it work just fine, and not just throw an error.
## Why It's Good For The Game

Life tends to be better when refreshing to see new runtimes doesn't just
add its own lovely little runtimes.

![image](https://github.com/tgstation/tgstation/assets/42909981/79bee3db-5c28-409b-9ff5-3a315fb4ed1c)

![image](https://github.com/tgstation/tgstation/assets/42909981/82a25038-ba7a-430a-bb79-f59d5f4b262b)
And then not show them til you re-open the window cause it doesn't
refresh.
## Changelog
🆑
admin: Refresh button on the View Round Logs menu actually works,
instead of just adding a runtime to the logs (and not updating them).
/🆑

* Creates a "busy" animation for players (#82416)

Little indicator above a player when they're currently doing something.

<details>
<summary>vids</summary>

Perspective: You are the moth

![dreamseeker_b2LA4PpPAr](https://github.com/tgstation/tgstation/assets/42397676/3a38dd3c-23f2-430f-acf4-444ad5c478d3)

Hides under runechat

![dreamseeker_ZgkCWTGqDz](https://github.com/tgstation/tgstation/assets/42397676/ec1d9665-4ff0-47f7-85b6-65998c31b9be)

</details>

Todo:

- [x] Feedback?
- [x] Sneaky params so it doesn't spoil your stealth run
- [x] Possible refactor
- [x] Probably missed some "sneaky" actions
- [x] coggers

<details>
<summary>sound on:</summary>

https://github.com/tgstation/tgstation/assets/42397676/ad71c567-0202-4158-ba50-c2946375f988

</details>

🆑 jlsnow301, infraredbaron
add: Added a new UI element over players that are interacting, building,
etc.
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>

* New operative reinforcement option: Intelligence Overwatch Agent (#82307)

## About The Pull Request

Introducing a new Nuclear Operative reinforcement option: The Overwatch
Intelligence Agent.

Equipped with multi-hudglasses, they have an advanced camera console,
station alerts, and bodycams of every operative! If something can be
known, they will know about it.

They can also remotely pilot your ship. Finally, everyone can ride in
the Steel Rain without getting stuck on the station!

This role spawns in the formerly unused outpost just north of the nukie
base. With a few shelves of supplies and some tools in the back room,
they can set up their workplace however they like. This also gives them
something to work on while they wait for the operatives to gear up.


![image](https://github.com/tgstation/tgstation/assets/28870487/4a39ec5f-0578-4825-8c6b-cc4db47bf726)

As you can see, it's rather cramped and the lights are quite dim in the
backroom. Set it up however you like, this is how I did mine:


![image](https://github.com/tgstation/tgstation/assets/28870487/f80b65fa-dcd1-425e-a6ce-c0ed94a8a3a5)

Total price? 12 TC per agent. It might get a bit cramped, but you could
buy a second to make sure the first guy doesn't get lonely!

This turned into a 30-commit ugly because the bodycams were originally
meant to be accomplished via a refactoring of the spyglass kit. Big
mistake that made me shelve the project -- until Melbert's simple
bodycam component conveniently did exactly what I needed in a much
simpler way.
## Why It's Good For The Game

Having a "guy in the chair" for your kickass murder operator squad
enables more brainy strategizing, and is thematically sound. Also,
nukies have the opportunity to bring in another player to participate in
the fun!
## Changelog
🆑 Rhials
add: Nuclear Operatives now purchase an Intelligence Agent, who can
watch cameras and bodycams, move the shuttle, and provide radio support.
Only 12 Telecrystals!
/🆑

* re-adds list of components for admins to remove (#82461)

## About The Pull Request

The list of components on a mob when admins try to remove one didn't
actually show them, now it does.

![image](https://github.com/tgstation/tgstation/assets/53777086/a6102c3a-df30-4e9c-b7fd-29a4d8ddaa89)

## Why It's Good For The Game

Messing with components/elements on mobs are such a pain, in this case
was broken entirely.

![admin-toolings](https://github.com/tgstation/tgstation/assets/53777086/3d190c66-34e4-4424-824b-37f95e88b003)

## Changelog

🆑
admin: Removing components button now lists components to remove
/🆑

* Reboots the CNS Rebooter Implant. (#82441)

## About The Pull Request
The CNS Rebooter Implant will now pull you out of stuns and stamcrit,
while granting you a few seconds of stun immunity, comes with a 60
seconds cooldown
## Why It's Good For The Game
The CNS Rebooter Implant is a strong candidate for the absolute worst
implant in the game, it caps your stuns at 4 seconds
(which is plenty of time to get murdered) and does nothing to prevent
stamina damage, for something accessible in one of the latest research
nodes and in the nukie uplink it should perform better than it does now.
Besides, the game is in dire need for more tools to keep the stun meta
at bay, and this is a good place to start.

This PR makes it so the rebooter will bail you out stamcrit every 60
seconds, along with giving you a few seconds of immunity to run away or
get a couple of hits in.
## Changelog
🆑
balance: CNS Rebooter Implant will now pull you out of stamcrit and
grant you a few seconds of stun immunity
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* Fix "Aheal" for ears deafness (#82448)

## About The Pull Request
Make the admin button "Aheal" and Magic Wand of Healing (resurrection)
actually full heal carbon's Ears.

File _ears.dm contains timer variable "deaf" that should be updated to 0
after complete healing.

But I think this must be properly code-refactored because looks like
it's just duplicates(?) standart variable "damage" for organ type.

## Why It's Good For The Game
Aheal - means FULLY HEAL.

## Changelog

🆑
fix: aheal now properly heals ears deafness
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* Medipens can't have reagents removed from them anymore. (#82451)

## About The Pull Request

This will be needed for
https://github.com/tgstation/tgstation/pull/82449 because this removes
the machine's ability to make infinite chems.
Basically in https://github.com/tgstation/tgstation/pull/29139 they
removed medipen's ability to have reagents injected into them, but never
removed the ability to take reagents out.
You could take a syringe, remove all chemicals from a medipen, put the
main ingredient in a medipen refiller, then refill. You could do this
right now on live servers with an epipen for infinite formaldehyde.

This doesn't affect the hypospray.

## Why It's Good For The Game

Removes a way of infinitely making reagents with a medipen refiller and
also removes a dumb mechanic.
You could take all chemicals out of an EHMS autoinjector, which removes
the visual and feedback tell to the target that they've been injected,
and even with 0 chemicals they get the disease anyways.
You could buy medipens as a miner, take the chemicals out, and put them
in a syringe or pill that you can inject yourself instantly with.
You can take otherwise hard-to-get chemicals like fungal TB's 2-use cure
injector, and make 40 cure pills instead.

## Changelog

🆑
fix: You can no longer take chemicals out of medipens with a syringe.
/🆑

* Search string in catalogs in char prefs (#82423)

* actually just removes stamina damage and knockdown from punches (#82400)

removes punch knockdowns and stamina damage from them

knockdown punches were also around the time disarm could just hardstun
you to RNG
this is dumb so we remove that
also watermelon supposedly wanted to remove stamina damage from punches
so idk about that

anyway so this is a problem because you could be randomly floored by
sheer luck through thick plates of metal and is overall not a very fun
thing to play against especially with northstar gloves

resolves unfun RNG by removing knockdowns and does something watermelon
wanted by removing stam damage from it

🆑
balance: punches no longer knock down or deal stamina damage
/🆑

* Fix slime `check_item_passthrough` effect (#82484)

## About The Pull Request

This proc expects a user but is not passed one. 

## Changelog

🆑 Melbert
fix: Items will properly pass through slime on occasion
/🆑

* Basic mobs now use z-level turnoff instead of simple (#82469)

## About The Pull Request

On one compile of MetaStation, I saw that there's 45 basic mobs on the
station, 256 on lavaland (the number growing from tendrils), and 59 in
all other z levels combined.

While we do expect Lavaland to be visited every round, at least it won't
be running during the times when no one is there, but even more
importantly, space exploration is something not done every round, so we
don't have any reason to waste our resources on AIs that will never be
interacted with.

Simple animals had an easy solution to this:
If no one is on the Z level, their AI turns off
If someone is on the Z level, they are idle unless needed.

The last simple animals that exists right now are bots, megafauna,
geese, gondolas, and some minor ones like mimic, zombie, dark wizard,
soulscythe, etc.
Point is, we're very much nearly done going through all simple animals,
so this code is being wasted just to ensure things like cleanbots won't
work if no one is on the z level, something I doubt happens often, so I
took their code and made it work for basic mobs instead. I could've done
both but I thought it would look very bad, and maybe this is a good
incentivize to get more basic mob conversions.

There's one major change here and it's that we're missing the "Idle"
mode, some basic mobs like the Lavaland village seems to be made with
intent that they'll be running even if players aren't around, so this
sets up a future PR that makes idle AI easier to add, and I want to make
sure those cases are taken into account.

## Why It's Good For The Game

We don't need to always be processing these basic mobs, and sets us in
the future to hopefully also implement idle AIs.

## Changelog

🆑
balance: Basic mob AIs with no mobs on the Z level now stop.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>

* adds preferences to transhumanist (#82435)

## About The Pull Request
You may remember this, that's because I accidentally deleted it before
while trying to change things. Anyways!
Adds drop-down selections and new options to transhumanist. also fixes a
minor typo
Previously, you could choose your replaced limb by taking prosthetic
limb, setting what you want changed, and then switching to
transhumanist, since they used the same preference previously.

## Why It's Good For The Game

Transhumanist felt strange because it was hypothetically a voluntary
operation, but the augmentation clinic just spun the wheel on what you
got replaced. From a role-playing perspective, being unable to choose is
uninteresting and confusing. Also it always says your limb being was
being replaced with a robotic arm and that annoyed me. Now that you are
able to select your replacement part, I've added two new options, the
robotic voice box, good for a more prominent change then a limb that
will be hidden for most of a round, and flashlight eyes, for when you
are truly committed to being rushed directly to robotics seeing the
bright future ahead of humanity!

## Changelog
🆑
add: Transhumanist now allows you to select your augmentation
add: Transhumanist can now provide a robotic voice box, or flashlight
eyes
spellcheck: Transhumanist's roundstart text has been re-written to not
be wrong
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>

* Watcher wreaths; Normal and Icewing varieties (#82457)

Adds Watcher Wreaths. An item that makes it look like you have a
slightly floating thorn crown that you can make from some of their
material parts (and the icewing crusher trophy for the icewing variant).

The wreath has emissives. They don't do anything mechanically, they're
just for show.

![wreath](https://github.com/tgstation/tgstation/assets/40847847/84b7cf89-2087-4c5c-85c1-d911c2e7ea13)

![image](https://github.com/tgstation/tgstation/assets/40847847/77bcda12-e29f-45f0-ad4a-8f25de12c0ef)

![image](https://github.com/tgstation/tgstation/assets/40847847/da3321bb-b24d-4e60-8648-455483e955d6)

I really like the whole thing with turning lavaland monsters into
trophies and cosmetics. Going down and coming back up looking like
someone who just crawled through a horror movie and took some souvenirs
is great. Stuff like the trophy accessories, bone and drake armor and
many of the various lavaland items have this quality, and it always
amuses me when a tech sees a dressed up miner and just goes 'holy shit,
where did you get that'?

Drip is the ultimate reward for playing miner. Nobody can tell me
otherwise. this is the endgame every miner craves. And I crave a goddamn
crown made from the broken remains of my enemies.

🆑
add: Watcher wreaths. Made from the mangled remains of a watcher, now a
handsome accessory for you to wear a few inches behind your head. Comes
in Normal and Icewing variants.
add: Some bounties for the two variants of watcher wreaths.
/🆑

* CHEAP_HYPOTENUSE() no longer makes the differences between the coordinates absolute. (#82468)

## About The Pull Request
CHEAP_HYPOTENUSE() no longer absolutes the differences between the
coordinates.
## Why It's Good For The Game
It gets squared so it doesn't need to be done.

* Neutered symptoms no longer activate (#82467)

## About The Pull Request

Stops activation of all neutered symptoms in a advanced disease.

## Why It's Good For The Game

Closes https://github.com/tgstation/tgstation/issues/68944

## Changelog

🆑
fix: Narcolepsy is no longer activated while neutered.
/🆑

* Fixes the color matrix editor (#82478)

## About The Pull Request

It was sending back stringified numbers as inputs. This came from a
typescript cleanup pr from sync (#82000) and was ultimately caused by
a... I think misunderstanding of how the color list works (#67967)

## Why It's Good For The Game

Works like a charm now, which is good cause I use it a lot

## Changelog
🆑
fix: The color matrix editor now works properly again
/🆑

* Hats no longer cover mouths (#82498)

* Fixes banned/days remaining preferences display for non-dynamic ruleset antagonists. (#82506)

* Reverts reversion: tgui will 516 or else (#82527)

## About The Pull Request
Context: #82522

Apparently you cant just stuff the byond helper functions into an
external js file, but if you do, byond won't even let you know its a
problem until the servers crash and you have to run `bin/clean` just to
unbork your entire repo

This reimplements the changes from #82473 without:
- moving the byond helper functions externally
- causing a tooltip render issue in panel

## Why It's Good For The Game
516 prep (again this time)

* Final Objective: Battle Royale (#82258)

## About The Pull Request

Adds a new final objective option with a classic premise; the forced
battle to the death.
The concept is that the Syndicate will provide you with an implanter
tool you can use on an arbitrary number of crew members. Once you have
at least 6 (though there is no ceiling) you can activate the implants to
start the Battle Royale and broadcast the perspectives of everyone you
implanted live to the entertainment monitor.

After activation these implants cause you to explode upon death. If at
the end of 10 minutes, more than one person remains unexploded then all
of the remaining implants will detonate simultaneously.
Additionally, one of the station's departments (Medbay, Cargo, Science,
or Engineering) will be chosen as the arena. If after 5 minutes pass
you're not within that department (or if you leave it after that time
has passed) then you will be killed.

The Syndicate plan on both using the recorded footage to study
Nanotrasen technology, and also to sell it as an underground blood
sport, and so have employed a pirate broadcasting station to provide
colour commentary.

The implantation is silent, however it requires you and your target to
be adjacent and stood still for one and a half seconds.
Once implanted, it will occasionally itch and eventually signal to the
implantee that something is up, so once you start implanting someone
you're on a soft timer until you are given away. You can also implant
yourself if you want to do that for some reason.

Removing an implant from someone has a 70% chance of setting it off
instantly, but it _is_ possible. If the implant is exposed to EMP, this
value is randomised between 0 and 100%. You could also try doing surgery
while the patient is wearing a bomb suit or something, that puzzle is
for you to solve and I'm not going to tell you the answers. I'm sure
you'll think of ones I haven't.

## Why It's Good For The Game

Adds a somewhat more down-to-earth but still hopefully exciting and
threatening option which should let people mess around with the sandbox.
The mutual death element provides some roleplaying prompts; nothing
actually _forces_ you to fight apart from fear of death and it may be
possible to find other ways to survive, or perform some kind of
solidarity behaviour with your fellow contestants. Maybe you'll try that
but one of your fellow contestants just wants to be the last survivor
anyway. Maybe you'll pretend you're setting up some kind of mutual
survivorship thing in order to make sure you're the sole survivor.
Gives some people to watch on the bar TV channel.
The crew apparently love playing Deathmatch while dead so we might as
well enable doing it while alive.

Also I'm going to follow this up with a separate PR to remove the Space
Dragon objective and it felt like it'd be a good idea to do one out one
in

## Changelog

🆑
add: Adds a new Final Objective where you force your fellow crew to
fight to the death on pain of... death.
/🆑

---------

Co-authored-by: _0Steven <jaydondegenerschool@gmail.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: EnterTheJake <102721711+EnterTheJake@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Artemchik542 <32270644+Artemchik542@users.noreply.github.com>
Co-authored-by: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com>
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: Skeleton-In-Disguise <49223093+Skeleton-In-Disguise@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
Co-authored-by: Bilbo367 <163439532+Bilbo367@users.noreply.github.com>
Co-authored-by: FlufflesTheDog <piecopresident@gmail.com>
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2024-04-17 22:59:33 -04:00
SkyratBot
42f6f57dc0 [MIRROR] Replaces even more deciseconds with SECONDS (#27205)
Replaces even more deciseconds with SECONDS

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Waterpig <wtryoutube@seznam.cz>
2024-04-16 12:58:35 +02:00
SkyratBot
e816ae0593 [MIRROR] Deconstruct Wooden/Cardboard Crates Without Welder (#27004)
* Deconstruct Wooden/Cardboard Crates Without Welder (#82108)

## About The Pull Request

Wooden crates are now deconstructed with a crowbar. Cardboard crates are
now deconstructed with wirecutters. The context tips for deconstruction
are determined by the required tool now.
## Why It's Good For The Game

It doesn't make sense to deconstruct those crate types with a welder,
they would just burn. The logic for different cutting tool types was
already in there, and mentioned in a comment, but the variable was not
assigned to the sub types; I also changed the context tip to use that
instead of checking the held item for welder behavior.
## Changelog
🆑
add: Crowbars/wirecutters now deconstruct wooden/cardboard crates/boxes
/🆑

* Deconstruct Wooden/Cardboard Crates Without Welder

---------

Co-authored-by: Sable <102194057+Thlumyn@users.noreply.github.com>
2024-03-31 22:56:52 -04:00
SkyratBot
251908062c [MIRROR] Gold and Silver crate now reflects NT corporate greed (#27019)
* Gold and Silver crate now reflects NT corporate greed (#82170)

## About The Pull Request
The gold and silver crates desc now accurately reflects NT corporate
greed

## Why It's Good For The Game
More lore correct crate

## Changelog

🆑
qol: Gold and silver crates now accurately reflects NT's greed
/🆑

* Gold and Silver crate now reflects NT corporate greed

---------

Co-authored-by: FinancialGoose <92416224+TheBoondock@users.noreply.github.com>
2024-03-25 13:32:14 -04:00
SkyratBot
4fb4a50167 [MIRROR] A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief (#26711)
* A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief

* Update code/__DEFINES/role_preferences.dm

* Update code/__DEFINES/role_preferences.dm

* closet fix

* I am stupid

* fix effects

* there we go

* is this the end?

* ugh

* please stop

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com>
2024-03-23 16:27:57 -04:00
SkyratBot
32c9fdd55f [MIRROR] Lockers and crates shake when someone is trying to break out of them (#26764)
* Lockers and crates shake when someone is trying to break out of them (#81801)

## About The Pull Request

Makes lockers and crates do a little shake when someone is trying to
resist out of them.

https://github.com/tgstation/tgstation/assets/40921881/94703c79-a22c-43e6-ac31-8621173a0953

## Why It's Good For The Game

A little bit of visual flair, lets players know if someone is trying to
get out of a locker.

## Changelog

🆑 Seven
add: Lockers and crates now shake when someone is attempting to resist
out of them.
/🆑

---------

Co-authored-by: san7890 <the@ san7890.com>

* Lockers and crates shake when someone is trying to break out of them

---------

Co-authored-by: Lufferly <40921881+Lufferly@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2024-03-06 22:15:55 -05:00
SkyratBot
d4867029fc [MIRROR] Fixes funky closet type (#26469)
* Fixes funky closet type (#81389)

## About The Pull Request

`secure/closet` -> `secure_closet`.

Changes nothing besides making the mapped in closet use the right name.

## Changelog

🆑 Melbert
fix: Lavaland Beech Bartender's clothing storage is named the right
thing now
/🆑

* Fixes funky closet type

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-02-11 10:57:37 -05:00
SkyratBot
0d0c901be2 [MIRROR] Disarm refactor, plus shoving people with shields [MDB IGNORE] (#26144)
* Disarm refactor, plus shoving people with shields

* wew

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2024-01-19 01:58:37 +00:00
SkyratBot
7d963d05c8 [MIRROR] Closet screentip clarification [MDB IGNORE] (#25990)
* Closet screentip clarification (#80759)

## About The Pull Request

Fixes some issues with closet screentips.
Previously, it would give anchor/unanchor screentips even if the closet
was not anchorable
Also, the deconstruct screentip would never actually appear as it never
touched screentip_change
## Why It's Good For The Game

Addressing a bug reported downstream:
https://github.com/NovaSector/NovaSector/issues/213
These specific issues were making it confusing for people to understand
how to deconstruct a supply pod (unanchorable closet subtype)
## Changelog
🆑
fix: closets now have a working welder deconstruct screentip
/🆑

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@ users.noreply.github.com>

* Closet screentip clarification

---------

Co-authored-by: Sable <102194057+Thlumyn@users.noreply.github.com>
Co-authored-by: Watermelon914 <37270891+Watermelon914@ users.noreply.github.com>
2024-01-04 19:33:19 +00:00
SkyratBot
1f065774e6 [MIRROR] Fixes a cardboard box hard del [MDB IGNORE] (#25845)
* Fixes a cardboard box hard del (#80547)

## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/13398309/7d0d805b-2e1e-4063-926d-6c148cd835a7)

Should fix this hard del caused by a mob being deleted while inside the
`alerted` list. Also cleans up the code a little bit.

## Why It's Good For The Game

Bugfix

## Changelog

🆑
fix: fixes a potential mob hard del with cardboard boxes
/🆑

* Fixes a cardboard box hard del

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-12-25 12:15:43 +00:00
SkyratBot
31ab9cb461 [MIRROR] Adds Head of Security beret and bowman to their locker [MDB IGNORE] (#25806)
* Adds Head of Security beret and bowman to their locker (#80503)

## About The Pull Request

adds Head of Security beret to their garmet bag and adds Head of
Security bowman to their locker

## Why It's Good For The Game
Other departments start with their round start drip in their lockers,
Head of Security should too, for consistency!
Promoted Head of Security should get their fancy beret and headset

## Changelog
🆑
qol: Head of Security beret added to their garmet bag
qol: Head of Security bowman added to their locker
/🆑

* Adds Head of Security beret and bowman to their locker

---------

Co-authored-by: Redbert <109347230+Deadgebert@users.noreply.github.com>
2023-12-23 19:24:42 -05:00
SkyratBot
6f9c05d8f7 [MIRROR] Reworks morgue trays. Freezers and morgue trays now have their own internal air. Organs no longer take damage when below freezing temperatures. [MDB IGNORE] (#25579)
* Reworks morgue trays. Freezers and morgue trays now have their own internal air. Organs no longer take damage when below freezing temperatures.

* Move the SR Edit to can_defib_client

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: SomeRandomOwl <somerandomowl@ratchtnet.com>
2023-12-12 22:50:29 -06:00
SkyratBot
fc0dc4ec6f [MIRROR] Changes Virology Rather Than Killing It [MDB IGNORE] (#25483)
* Changes Virology Rather Than Killing It (#79854)

## About The Pull Request
God, alright, here we go. See HackMD here:
https://hackmd.io/@ Higgin/HJljdBuNp

Alternative proposal to #79849 addressing the big problems with
virology. ~~If you need a HackMD for it, I'll put one together, but I
made a comment on that PR and can make it pretty simple here.~~ its done

1. Makes viruses eventually self-cure as long as you're alive. If you
can keep somebody from dying, they can develop immunity.
2. Makes it so you can sleep comfortably and be well-fed to slow and
even potentially defeat viruses without a cure.
3. Makes it so more dangerous viruses can start self-curing faster. This
means Space Ebola is going to burn itself out quicker if a person stays
alive from the other effects.
4. Makes spaceacillin helpful in naturally curing viruses, period, but
with declining effectiveness over 100 cycles.
5. Makes it so curing a virus naturally without being well-fed or having
rode it out from the peak may allow you to be reinfected/not have
natural immunity.
6. Makes it so being well-fed is a much stronger protection against
random virus spread.
7. Makes it so bypasses_immunity stuff like fungal TB and heart failure
isn't subject to any of this.
8. Makes it so using ~~antibiotics~~ spaceacillin jesus christ or being
malnourished can make you lose your healing viruses too. Pay attention
to what you put in your body.
9. ** Makes it so blood can ~~transmit resistances again, not just
vaccines. It's been a hot minute, but it used to work like this.~~ blood
now can cure a virus if the donor has a resistance, but it doesn't
confer lasting immunity. You need to overcome the virus yourself, carry
a constant supply of pure blood, or get a vaccine to get a lasting fix.
10. ** makes severity a function of disease stats and all active
symptoms - not just the highest severity of the active symptoms.
11. ** makes it so you can nosell symptoms firing with spaceacillin or
resting down to a minimum chance of cure_chance to avoid symptoms each
cycle, declining over time, over 100 cycles for a given disease.
12. ** makes it so wearing protective equipment prevents you from
spreading respiratory-spread diseases normally - not just on the
cough/sneezing symptoms.
13. ** gives MDs virology access standard, paramedics and coroners
virology access on skeleton crew. virologists also get pharmacy access.
14. ** makes bypasses_immunity advanced diseases always override
non-bypasses_immunity advanced diseases and resist being overridden by
other advanced diseases. Sentient Disease now has bypasses_immunity.
Sentient Disease fans rejoice!
15. ** also gives SD a buffer of extra stealth points so it has a bit
longer to build up instead of almost uniformly getting spotted and dying
early.
16. ** viruses now scale their severity as a function of their max
symptoms. There's a lot more room to get viruses of varying duration and
severity by adding fewer symptoms now - so creating a tradeoff between
stats (and good thresholds) and the duration of your virus.
17. ** a whole bunch of defines to control all of this stuff - most
recently added a multiplier for symptom appearance frequency.

MAJOR UPDATES: REBALANCING TOWARDS 50% LETHALITY

https://docs.google.com/spreadsheets/d/e/2PACX-1vQ8rqMYFsR1mYj_FGzVjTfcnAF7un-VofOByPxcCCQr6lOOF5fhUgZga0oA4Q5-7K4hr7fCV0jFdmd9/pubhtml#
[Viro Rework Rebalance
Tests.pdf](https://github.com/tgstation/tgstation/files/13447208/Viro.Rework.Rebalance.Tests.pdf)

After a shitload of testing, makes some of the most reliable,
transmissible killers into less-reliable threats. See the above graphs
and pictures for demonstrations of exactly how this was tested and done.

## Why It's Good For The Game

It sucks to be hard-stuck to needing chemistry and medical to deal with
viruses that somebody can randomly blast out without a care in the
world, then be left to sit around waiting to die or otherwise be unable
to do anything as the max-level symptoms fire off on repeat.

This should put curing and surviving viruses much more back in the hands
of normal crew without always ending up at the chemistry front window,
although that is still the fastest and most reliable way to get better.

This also nerfs healing viruses a bit, or makes them a bit less
fire-and-forget if you fail to attend to your body. There's more I'd
like to do in the future and potentially some of the other classic
viruses that could use bypasses_immunity added, values tweaked, but for
now - this seems like the best way to preserve virology as a level of
depth and complexity in the game in a way that rewards people doing
intuitive things to counterplay it when used harmfully.

This also puts more of the mid-range bad symptoms into a better place
balance-wise because the worst ones pretty much only fire at max stages.
With the way this works out, you bounce back and forth between the max
stage and lower stages before, over time, trending towards a cure.
Symptoms that provide more significant effects at lower stages now have
a place that isn't totally overshadowed by the killdeath stage 5 ARDS +
junk symptoms virus Dr. Ambatu Popov shat out in five minutes (as long
as you survive the initial run-in with it.)

## Changelog

🆑
balance: most diseases can now be slowed, mitigated, and eventually
cured through being well-fed, resting, and using spaceacillin. Curing
diseases through this way will give you immunity if you experience them
at their peak/maximum and aren't starving/malnourished when they cure.
balance: disease symptoms can be forestalled for up to 100 cycles with a
declining chance of avoiding them over time using rest or spaceacillin.
balance: This does not apply to things like fungal TB; it does apply to
healing viruses if you don't take care of yourself by staying fed and
avoiding spaceacillin.
balance: disease can be cured through direct injection or ingestion of
cured blood. However, curing disease in this way does not provide
lasting immunity. You need to naturally beat the virus or get a vaccine
for that.
balance: Wearing internals or using protective equipment while infected
can limit the spread of respiratory illnesses from yourself to others.
Contact transmission is still possible however.
balance: Medical Doctors now have roundstart virology access. Paramedics
and coroners now get virology access on skeleton shift access.
Virologists now have roundstart pharmacy access.
balance: Sentient Diseases now resist being overridden by other advanced
diseases and can always override other advanced diseases; they also have
an extra bonus on their stealth stat to help make up for early outing
without a bit more testing.
balance: biohazard lockers now also contain a syringe of spaceacillin
(in line with the orderable kit from cargo.)
balance: Virus severity is now also a function of the number of symptoms
out of max your virus has. Experiment with different combinations using
less than six symptoms to make viruses that are deceptively less-obvious
and less quick to self-cure at the tradeoff of stats.
/🆑

* Changes Virology Rather Than Killing It

---------

Co-authored-by: Higgin <cdonny11@yahoo.com>
2023-12-09 20:33:41 -05:00
SkyratBot
41ea46d5f2 [MIRROR] Scopes NODECONSTRUCT_1 from flags_1 to obj_flags [MDB IGNORE] (#25496)
* Scopes `NODECONSTRUCT_1` from `flags_1` to `obj_flags`

* Update bitfields.dm

* Modular

* Update rack.dm

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-12-08 23:24:46 -05:00
SkyratBot
013003e732 [MIRROR] The maintenance crate spawning crate is now a spawner [MDB IGNORE] (#25417)
* The maintenance crate spawning crate is now a spawner (#80083)

## About The Pull Request

`/obj/structure/closet/crate/maint` was a type of crate that spawned a
completely different crate, and then deleted itself. I have decided to
swap this out for an actual spawning effect.

I have also did some subtypery to remove some duplicate code that
handled randomly opening the spawned closet/crate (through I am not that
satisfied with
`/obj/effect/spawner/random/structure/closet_empty/crate/with_loot` as a
sensible typepath name, I would like to ask for suggestions). I also
removed a loot define, because it was no longer needed as its contents
were used on a single page.

## Why It's Good For The Game

Things that act like spawners should be spawners.

Maybe this fixes the CI issue on northstar where a mousetrap box gets
deleted before it initializes during create and destroy? It was placed
above a spawner that spawned one of these self deleting crates. I am
unsure, I could not replicate this issue during testing.

## Changelog

Nothing player facing.

* The maintenance crate spawning crate is now a spawner

* UpdatePaths

* Update Blueshift.dmm

---------

Co-authored-by: Profakos <profakos@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-12-03 19:02:42 -05:00
Nerevar
7c3dd07987 Gives Security The Correct Tackle Gloves (#25386)
* what if i tackled you haha

* actually this

* Update code/game/objects/structures/crates_lockers/closets/secure/security.dm

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-12-03 08:53:00 +00:00
SkyratBot
a6975112ed [MIRROR] Basic bots (medibots) [MDB IGNORE] (#25384)
* Basic bots (medibots)

* UpdatePaths, modular

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-12-03 02:10:21 -05:00
SkyratBot
3d074e7ede [MIRROR] Standing on structures such as crates, tables and bed will now look like it. [MDB IGNORE] (#25324)
* Standing on structures such as crates, tables and bed will now look like it.

* Update deployable.dm

* Makes this modular

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-28 19:37:33 -05:00
SkyratBot
df23153c79 [MIRROR] New closets [MDB IGNORE] (#25167)
* New closets

* Grammar checks every closet that spawns on a station. (#73331)

All closets now are called either closets, lockers, wardrobes etc. (e.g.
the lethal injections locker was previously called "lethal injections")
Head of staff and the cook's locker are no longer proper nouns, it
didn't make much grammatical sense and it keeps consistency with other
lockers (Example: detective's cabinet)
All locker names de-capitalized except the Thunderdome ones since those
made sense.
The empty freezer is now just called a freezer since it being empty or
not depends on what players and mappers do to it.
Tram now has evidence lockers labelled from 1 through 7 instead of 7
evidence lockers labelled as 1.

Changes have been made to all station maps and in code, I've not gone
through all ruins, away missions, etc.

Cleans up a lot  of minor name issues.
🆑
spellcheck: All station closet and lockers have had their naming
conventions standardized.
fix: Tram now has evidence lockers labelled 1 through 7 instead of 7
evidence lockers labelled as locker 1.
/🆑

* Removed Duplicates, Modularized Overrides.

* Added Base States, Removed Unused Icons

* Icon states

* Fix wall closets to not fail CI

---------

Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com>
2023-11-24 19:30:18 -05:00
SkyratBot
b0a9ec864c [MIRROR] [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things [MDB IGNORE] (#25191)
* [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things

* Update tackle.dm

* Update living.dm

* Update tackle.dm

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-22 19:13:26 +00:00
Bloop
17cba0dccf [MISSED MIRROR] Puts all traits in the globalvars file + CI Testing (#79642) (#25131)
* Puts all traits in the globalvars file + CI Testing (#79642)

Fixes #76349

I didn't know that people needed to add any new traits to a global list
so they can be easily read in View Variables, and was pretty shocked to
find out many other people didn't know it was a thing. Let's make it a
thing by testing it using a new CI Python Linter to check this. But oh
no-

![image](https://github.com/tgstation/tgstation/assets/34697715/c093f1a8-00ce-40a6-8e1d-f344107ce7b8)

There were about 200+ missing traits. Alright, so let's do the
following:

* Move trait defines to their own dedicated folder in the `_DEFINES`
folder.
* Split up the traits mega-file into different files, for better
organization. One for the macros, one for the sources, and a few for the
"trait declarations"
* Run the linter a load of times and add everything to the globalvars
file, removing anything that's no longer used and figuring out where the
best categorization of it is. also minor code improvements. also rename
all of the ones that look weird. also fix list indentations
* Also alphabetize the lists because it's easy
* Move everything to a new `traits_by_type` list, while keeping the
admin one the way it is for the time being while we figure out a better
way to show that list to admins.
* Profit

Mapping trait injectors will now work for any type of trait. You
shouldn't add any trait via this injector though, but you're no longer
limited to coders remembering to add it to that critical list you
needed.

Lays the framework for a better view variables experience. This work is
too lengthy to presently do, but hopefully we can get this done sooner
rather than later. we will need a code-accessible way to view these
traits for such a framework to be implemented, so let's just do that.

Future steps are to break down the mega-declarations file into a folder
full of separate files by typepath, but that requires a lot of auditing.
Does need to happen one day though, there's a lot of mob traits mingled
with datum traits and auuugh we gotta do this later this PR is already
massive.

there's probably ways to game this but this catches _my_ mistakes so
good luck to everyone else (it should work for 99% of everyone)

Nothing applicable to players. However, to mappers, the mapping trait
injector should always be able to add any kind of trait (which is rather
good for the times when you need it).

* Update tgstation.dme

* Update _traits.dm

* Comment these out for now

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-19 18:12:03 -05:00
SkyratBot
39ed263093 [MIRROR] New crates [MDB IGNORE] (#24988)
* New crates (#79665)

image: Crates got new sprites
image: Added more crate styles

* New crates

* Crate-b-gone

* The Nuclear Option

* The Nuke Clear Option

---------

Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: Name <w4rd3nn@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-14 23:42:02 -05:00
SomeRandomOwl
b2dafd1d5a [Semi-Modular] Department Cards! (Attempt the second) (#24609)
Department Cards! (Attempt the second)
2023-11-09 13:13:01 -05:00
SkyratBot
333a350db8 [MIRROR] Locker deconstruction message spellcheck [MDB IGNORE] (#24849)
* Locker deconstruction message spellcheck (#79512)

## About The Pull Request

Fixes a couple typos when deconstructing lockers.

## Why It's Good For The Game

Better spelling, better game.

## Changelog
🆑 Bumtickley00
spellcheck: You no longer hear weaponelding when deconstructing a
closet.
/🆑

Co-authored-by: bumtickley00 <pebis@ lol.com>

* Locker deconstruction message spellcheck

---------

Co-authored-by: Jay <19880843+AdmiralPancakes1@users.noreply.github.com>
Co-authored-by: bumtickley00 <pebis@ lol.com>
2023-11-07 21:02:47 -05:00
SkyratBot
58be66a653 [MIRROR] Nukie Update Followup: Returns CQC to the previous price range, Core Gear kit for newbies, hat stabilizers for everyone [MDB IGNORE] (#24679)
* Nukie Update Followup: Returns CQC to the previous price range, Core Gear kit for newbies, hat stabilizers for everyone (#79232)

## About The Pull Request

Brings the CQC kit back down to the same price range of 14 TC (it's 1
more than before weapon kits). It feels like currently that CQC is
overpriced, even with the stealth box coming along with it, and by
comparison the energy sword and shield got a huge value increase by
combining the two. They're both melee styles and also equally difficult
play styles. It isn't really necessary to make one more expensive than
the other. Also now comes with syndicate smokes. It's a whatever change,
ops get these for free on the base.

Adds a core gear kit in the weapon category. This kit comes with a
doormag, a freedom implant, stimpack and c-4 charge. All of these are
items almost every nukie buys if they want to succeed, so let's inform
newer players by putting it RIGHT on top of the list. This isn't at any
discount, this is mostly to help inform players what items help make you
successful.

Hat stabilizers are now a part of every syndicate modsuit for FREE. It
comes built in, can't be removed, and has no complexity cost. Now
everyone can wear their wacky hats as they operate.

## Why It's Good For The Game

CQC felt like it got shafted waaay too hard with the weapon case
changes. Definitely don't believe that it is punching at the same weight
as many of the other high cost weapons. So we've dropped it down a
category. 14 TC is still a large upfront cost, even if it comes bundled
with a lot of goods.

Melbert gave me the idea of a core bundle kit to help newer players and
I was really taken with that. So I added it as part of this followup.

I want people to wear their hats goddamnit, and I didn't learn my
mistake with the tool parcels. So now everyone has hat stands on their
suits. WEAR THE SOMBRERO YOU **FUCK**.

### THIS IS NOW A THREAT.

## Changelog
🆑
balance: Operatives can once again read about the basics of CQC at a
reasonable price of 14 TC.
qol: All Syndicate MODsuits come with the potent ability to wear hats on
their helmets FOR FREE. No longer does any operative need be shamed by
their bald helmet's unhatted state when they spot the captain, in their
MODsuit, wearing a hat on their helmet. The embarrassment has resulted
in more than a few operatives prematurely detonating their implants! BUT
NO LONGER! FASHION IS YOURS!
qol: There is now a Core Gear Box, containing a few essential pieces of
gear for success as an operative. This is right at the top of the
uplink, you can't miss it! Great for those operatives just starting out,
or operatives who need all their baseline equipment NOW.
/🆑

* Nukie Update Followup: Returns CQC to the previous price range, Core Gear kit for newbies, hat stabilizers for everyone

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2023-10-31 10:24:57 -07:00
SkyratBot
85f883f22c [MIRROR] Export scanner no longer shows shipping manifest value + manifest error changes [MDB IGNORE] (#24478)
* Export scanner no longer shows shipping manifest value + manifest error changes (#78923)

## About The Pull Request

Adds a variable to exports called `scannable`. If you are trying to scan
it and its set to false, then it won't show the value. When the actual
sale is done, the value will still be added/subtracted.

I also reorganized the message the scanner sends because I didn't want
to put multiple inline if statements.

Lastly, made it so that locked crates and private order lockboxes can't
get the shipping manifest contents error by adding a new trait
`TRAIT_NO_MANIFEST_CONTENTS_ERROR`. For departmental orders, I just
entirely disabled the manifests having errors by setting it to
`MANIFEST_CAN_FAIL` to false.

This PR conflicts with #78911, sorry but that PR was what reminded me to
fix this bug.

## Why It's Good For The Game

Some may call it tedium but having to read paperwork is part of the
cargo experience. Since it is harder to determine the crates value,
there has been a few balance changes. The penalty for incorrect manifest
is half the crates price or 500 credits, whichever is less.

![image](https://github.com/tgstation/tgstation/assets/47338680/b7549d11-eb49-43a2-8bb2-70ca8817e04d)

Let me know if you have any suggestions for how the message is worded,
it might be too long.

Locked crates and private orders can no longer get the shipping manifest
contents error because it is basically impossible to get someone to tell
you all the contents of their purchase. It's only a 5% chance of being
wrong and if they're not in cargo they probably don't care about the
cargo budget.

## Changelog
🆑
balance: Export scanner no longer shows value of shipping manifests, now
you actually have to read them.
balance: Shipping manifest penalty is now only half crate cost as well
as capped to 500 credits.
balance: Shipping manifests for private orders or locked crates can no
longer have the incorrect contents error. Shipping manifests for
departmental orders can n longer have any error.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@ gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Export scanner no longer shows shipping manifest value + manifest error changes

---------

Co-authored-by: BlueMemesauce <47338680+BlueMemesauce@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
2023-10-20 22:48:13 -04:00
Paxilmaniac
42dbc6d028 Armadyne Antitrust Act 2563 :: Disintegrates armadyne as a concept and replaces basically everything related (#23424)
* oh yeah oh woag

* maybe we can make uncommon into that

* gunnenshooter

* hard work work

* just now realised i forgot inhands

* inhands and worn

* soundsmith tf2

* does the rifles

* puts some of the pistol suppressor images in

* awawawa

* shotgun override apparently

* pistola

* grendae launcher

* dont forget the evil one too

* yeah lets fix that

* oops

* now lets see what kind of errors compiling gives us

* should hopefully be all the compile errors

* i understand morbius now

* surely it will work now

* fixes shrapnel grenades runtiming

* also fixed grenade rangefinding

* how'd I mess thta up

* fixes various issues

* granata!!!

* haha surely this will gow ell

* should fix the grendades for real

* opening this pr then dropping dead

* uhhh fixes some stuff i think?

* armory stuff

* random mapping things pt 2

* blehh :3

* fixes it forever and ever

* whar??

* turns out that needs a tweak

* curious

* that'll work 4 sure now

* fixes vr

* come on over wont you sway with me

* mhm yup

* should hopefully be all that's it?

* missing icons

* makes the rifle more expensive

* makes the smg a little less awful feeling

* dollar store suppressors, just a week away

* mmsmrmmrsgg

* lets the shotguns actually be sawn off

* the propaganda

* hey thats important

* sprite error  (comical)

* gives the casings custom materials for printing

* i love code ordering

* 'lets just be safe' ifies the weight classes of mags and ammo boxes

* reworks the sol defense selection a bit

* Update modular_skyrat/modules/ammo_workbench/code/design_disks.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* act three

* defines

* undefine

* restores the clothing

* some stuff part 3

* fixes the outfit guns not existing

* adjusts firerates and grenade launcher sprites

* fixes .35 sol revolvers??

* slightly un-nerfs the rifle firing rates

* makes the revolver jus tuse the normal sound

* makes the pistol case the right path

* its a machinegun!

* slight little tiny tweaks

* british weather service

* puts the blueshield gun box in their locker

* makes rifle less lethals a bit more normal

* slightly changes the smg burst and firerate

* the pepperball had raygun

* pepperball caliber

* forgot to push the include

* i love testmerges

* revolver sillies

* makes the kiboko's examine_more not just the rifle's

* smallens the eland and enlargens the cost of the kiboko

* lets change the machinegun a bit too why not

* gfl larp (real)

* fixes modular armory templates

* lets cases be ordered dont worry about the other stuff

* makes the takbok say its from the right company

* makes sawn off shotgun suppressors visibile

* those aren't used at all

* tweaks some of the rifle sprites

* shortens the shotgun a bit

* puts the pixel shifting out of initialize to make certain things work b

* granata!!!1!!!

* large number of weapon and ammo tweaks

* windup autofire seems broken somehow?

* fixes the inhands

* outfit sanity

* .40 armor piercing ammo box name correction

* removes var that doesnt exist anymore

* .40 armor piercing rework

---------

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
2023-10-03 11:20:23 -04:00
SkyratBot
340f3d1bba [MIRROR] The Medal Epilogue: Engineering (And Medical) Now Gets Them Too [MDB IGNORE] (#23855)
* The Medal Epilogue: Engineering (And Medical) Now Gets Them Too (#78461)

## About The Pull Request

**Credits to @ CoiledLamb for the awesome sprites in this PR!**

CE 🤝 CMO

Finally, the last department to receive their own medal box, the
engineering department. The saga is complete, we can go home now.

Adds two types of medals: 1. For assisting the station in a crisis, the
"emergency services award" 2. For showing your atmospheric prowess with
a project, the "atmospheric mastery award"

To me, those two awards symbolize the best engineering (and medical) has
to offer. On the one hand, assisting the station and its crew in a
calamity, and on the other hand just absolutely flexing your atmos
knowledge on your boss.

CEs now have a lockbox in their locker with 3 emergency service medals
and 1 atmospheric mastery medal, and CMOs get 3 emergency services
medals in their lockbox.

3 emergency service medals may seem like a lot, but remember that
assisting the station is often done in a team and not alone. An
engineering/medical department who can work together in a crisis really
demonstrates how robust they are.

As for the atmos mastery medal, well...
### THERE CAN ONLY BE ONE !

<details>
<summary>Pictures</summary>

![image](https://github.com/tgstation/tgstation/assets/47710522/d3237b6a-df4e-44f6-90e0-4eed3202b351)
Upper row: emergency services award, engineering
Middle row: atmospheric mastery award
Lower row: emergency services award, medical

![image](https://github.com/tgstation/tgstation/assets/47710522/27543c0e-e77b-46ec-8c79-3f56c0940271)

![image](https://github.com/tgstation/tgstation/assets/47710522/7b3c0a6c-2c47-4e0f-af3f-b9d0037c19d4)

![image](https://github.com/tgstation/tgstation/assets/47710522/ae5bbeb3-42af-4b52-ae02-aa48480c8fd5)

Sprites without funky byond scaling

![image](https://github.com/tgstation/tgstation/assets/47710522/eab183dd-18c5-4e21-ad83-ee4bed7733b6)

![image](https://github.com/tgstation/tgstation/assets/47710522/66a85894-8163-40e7-bc91-b5c27e75b943)

</details>

## Why It's Good For The Game

medals are cute and awesome, i think you can agree
## Changelog
🆑 distributivgesetz, CoiledLamb
add: Added two new awards specifically for engineering and medical: The
"Emergency Services Award" and the "Atmospheric Mastery Award". CEs get
3 Emergency Services Awards and 1 Atmospheric Mastery Award and CMOs get
3 Emergency Services Awards.
/🆑

* The Medal Epilogue: Engineering (And Medical) Now Gets Them Too

---------

Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
2023-09-22 08:52:04 -07:00
SkyratBot
f2bae6ceab [MIRROR] Fixes the comments in closets.dm [MDB IGNORE] (#23844)
* Fixes the comments in closets.dm (#78468)

## About The Pull Request

It looks like someone in a previous PR was a little too zealous with
find-and-replace, and replaced every 'w' in some of the comments in
closets.dm with 'weapon.' This PR just fixes those comments, making them
easily readable again.
## Why It's Good For The Game

Comments should be readable.
## Changelog
No player-facing changes.

* Fixes the comments in closets.dm

---------

Co-authored-by: GPeckman <21979502+GPeckman@users.noreply.github.com>
2023-09-21 16:03:37 -04:00
SkyratBot
dc4e1f184c [MIRROR] go go gadget hat [MDB IGNORE] (#23758)
* go go gadget hat (#78293)

## About The Pull Request

adds a hat that you can say a phrase for it to put something in your hands

* go go gadget hat

---------

Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
2023-09-17 15:35:58 -04:00
SkyratBot
50fa2f4263 [MIRROR] climbing hooks for multiz planetary maps [MDB IGNORE] (#23718)
* climbing hooks for multiz planetary maps  (#78340)

## About The Pull Request

https://github.com/tgstation/tgstation/assets/70376633/6c65925e-5276-41fb-8062-cafc2de94b2f

allows you to climb up holes by clicking on tiles above the hole youre
on
examining the rope shows you your current binds for looking up

emergency variant can be found in internals boxes on planetary maps that
have multiz levels (2 uses)
a better one can be bought from cargo for 250 credits (5 uses)
syndies can buy a much much better one for 1TC or can be found in the
nukie base personal lockers (10 uses)

## Why It's Good For The Game

being fucked because you fell down a 1 tile hole in the dark and now
youre in a 1x1 box of snow on the middle of nowhere sucks
or falling down a hole and bam 30 watchers
or falling down a hole and now youre completely lost and might have to
weld your way into the station if youre lucky

## Changelog
🆑
add: climbing hooks that allow you to go up holes for multiz, found in
internals boxes (on planetary maps), the uplink, cargo and nukie
personal lockers
/🆑

* climbing hooks for multiz planetary maps

---------

Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
2023-09-17 14:39:40 -04:00
SkyratBot
82b8f4d051 [MIRROR] An Assortment of Positive Station Traits [MDB IGNORE] (#23676)
* 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.
/🆑

* An Assortment of Positive Station Traits

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
2023-09-13 14:42:09 -07:00
SkyratBot
e45f17efae [MIRROR] John Splintercell: a gun that is only good for shooting out lights [MDB IGNORE] (#23650)
* John Splintercell: a gun that is only good for shooting out lights

* Removes this flashlight nonsense, we don't need copy pasted procs for something this simple

---------

Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-09-12 16:57:44 -04:00
SkyratBot
2580babcf1 [MIRROR] Atmos overalls take 2 [MDB IGNORE] (#23492)
* Atmos overalls take 2 (#78007)

## About The Pull Request
This is a reinmagining of #72768 as I never was never given a chance and
feedback to polish the sprites or remake it as a suit item as was
suggested before the PR was closed.

This adds Atmos Overalls that ATs will spawn with, the sprite is based
on the GAGS overalls we already have, but I dodged the GAGS system and
made it a standalone item following the AT firesuit palette and design
to fit in.

It can carry the same gear as the wintercoat and the overalls themselves
have fire and acid armor in parity with the firesuit, but that is for
the clothing itself and not the wearer.

This is first and foremost a fashion item, as with how our game manages
fires, being fireproof on your legs and torso won't do anything with
your arms exposed...

![atmos
overall](https://github.com/tgstation/tgstation/assets/55374212/b66fbb21-067e-4f11-8f83-3ee791bee6ea)

<details><summary>This is how ATs looked at spawn before as
reference</summary>
<p>

![before_atmos_overalls](https://github.com/tgstation/tgstation/assets/55374212/6c6abed2-46d4-4bc8-890c-3a5174868be7)

</p>
</details>

## Why It's Good For The Game
The only "fashion" suit atmos have is their wintercoat, if an AT is not
using their "functional" clothing (MOD/Firesuit) they all default to the
wintercoat and look mostly the same and even their functional uniform
makes everyone also look the same as it covers everything (That is
something I like to be clear)

There is also the "issue" that AT and Engies have the same jumpsuit and
wintercoat with small changes, and that their department bags use orange
instead of yellow as a second color, which makes them look weird on ATs
and the CE.

So now we have something that ATs can use to look different from each
other while still keeping their job identity.

And, as I said in my previous PR, I just really want the pumbler job to
look like a plumber, when they are not firefighting at least.
## Changelog
:cl:Guillaume Prata
add: Atmos Tech now have new drip and will spawn with Atmos Overalls to
protect their clothing from gas leaks! (It will actually not protect you
against fire or leaks, but hey! It's the thought that counts!!)
/🆑

* Atmos overalls take 2

* Worn digi sprite refit

---------

Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-09-03 13:04:11 -07:00
SkyratBot
1edbfcd0f0 [MIRROR] Nuclear operatives can now be other species. Pref toggle to always be human as operative [MDB IGNORE] (#23433)
* Nuclear operatives can now be other species. Pref toggle to always be human as operative

* remove skyrat edit

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-08-31 14:27:59 -07:00
SkyratBot
e74d3c5331 [MIRROR] roundstart scryers now come with the nt frequency [MDB IGNORE] (#23376)
* roundstart scryers now come with the nt frequency (#77957)

## About The Pull Request
fixes #77934

## Why It's Good For The Game
blegh

## Changelog
🆑
fix: roundstart modlink scryers now come with the nt frequency
/🆑

* roundstart scryers now come with the nt frequency

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-08-28 01:54:16 -04:00
SkyratBot
4d2196c7cc [MIRROR] New Backpack Type: Messenger Bags! [MDB IGNORE] (#23287)
* woo yeah baby

* i find myself of a potent dislike for the antichrist

* she was forced to do data entry

* lmao

* wew

* New Backpack Type: Messenger Bags!

* Update clothing.dm

* Update clothing.dm

---------

Co-authored-by: Snakebittenn <12636964+Snakebittenn@users.noreply.github.com>
Co-authored-by: Nerevar <12636964+Nerev4r@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-08-24 22:47:13 -04:00
SkyratBot
a987777c30 [MIRROR] Compact shotgun re-added [MDB IGNORE] (#23248)
* Compact shotgun re-added

* Update inventory.dm

* Update inventory.dm

* Modular icon de-override

* And the rest of them

* There is more..

---------

Co-authored-by: LukasBeedellCodestuff <92578337+LukasBeedellCodestuff@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2023-08-23 16:44:32 -04:00
SkyratBot
5fd1f08b7e [MIRROR] Replaces the poster and graffiti objectives with assault and early steal & destroy ones. [MDB IGNORE] (#23235)
* Replaces the poster and graffiti objectives with assault and early steal & destroy ones.

* Update engineering.dm

* Update cargo.dm

* Update mapping_helpers.dm

* Update mapping_helpers.dm

---------

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-08-21 18:18:28 -04:00
SkyratBot
12c4cd77c4 [MIRROR] Fixes a 1-in-20 chance RNG CI failure. [MDB IGNORE] (#23246)
* Fixes a 1-in-20 chance RNG CI failure. (#77827)

Fixes RNG CI failure. Insuls became a traitor objective and have to be
created in populate_contents_immediate() instead of PopulateContents()
for closets. Some closets only spawn insuls 5% of the time, so this
slipped past CI and created a new CI failure that randomly does or
doesn't fail.

Moved the offending item over the populate_contents_immediate().

* Fixes a 1-in-20 chance RNG CI failure.

---------

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
2023-08-21 17:02:49 -04:00
SkyratBot
b73b8b7d0a [MIRROR] Mining mob tweaks [MDB IGNORE] (#23242)
* Mining mob tweaks (#77763)

## About The Pull Request

~~I wanted to do this after #77700 (wow cool numbers) but nobody has
merged it yet despite how simple it is so i'll just hope they don't
conflict.~~ Thanks san

I'm fucking about with mining mobs with the intention of making them
more interesting but not necessarily towards making mining _harder_, but
some of these changes unquestionably have done so.

These changes are mostly in response to feedback about Watchers who are
definitely significantly more threatening than previously, although some
of this is user error.

- Watchers are annoying when traversing lavaland because they use their
ability on you instantly upon acquiring a target, if you are trying to
escape other fauna this quickly becomes deadly.
- A lot of players don't really realise what the overwatch ability is
actually doing and so just complain about getting machine gunned.
- If you _do_ react properly to the ability it still makes fighting them
take a lot longer than it used to.
- The "look away" icon is hard to see in the dark sometimes

To ammeliorate these factors I have:

- Reduced watcher health by ~20%
- Display an alerted graphic over the head of the watcher every time you
trigger the overwatch.
- Multiple watchers now won't overwatch you at the same time (this made
the "penalty" volley essentially become instant death)
- The "look away" icon is rendered above the lighting plane so you can
always see it
- Added a new component which tracks how long a mob has had a specific
target.
- - Watchers will now only Overwatch you if they've seen you for at
least 5 seconds (usually they'll try and shoot at you twice before
this).
- - Goliaths will only tentacle you if they've seen you for at least 3
seconds.

If overwatch is still problematic after this I guess I can just nerf it
to not track movement at all and only respond to attacks.

## Why It's Good For The Game

I don't want to discourage miners from "actually mining" by having them
get sniped just for walking around and the added time-to-kill on these
guys could make clearing tendrils more tedious too.

## Changelog

🆑
balance: Watchers have less health
balance: You can't be overwatched by several watchers at a time
balance: Watchers won't overwatch you instantly upon seeing you
balance: Goliaths won't launch tentacles at you instantly upon seeing
you
/🆑

* Mining mob tweaks

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-08-21 14:32:45 -04:00
SkyratBot
68f4deff40 [MIRROR] MODLink System (+ NWTLMM) [MDB IGNORE] (#23199)
* MODLink System (+ NWTLMM) (#77639)

## About The Pull Request
A pact made with `@ Kapu1178`
Small changes you should not care about:
RD MODsuit outfit (admin only) no longer has a beret that blocks the
activation of the suit
The beret used by death squad officers no longer is blocked from being
put on a hat stabilizer module
Admins can now Shear matrices of objects in Modify Transform
Multitool buffers have been a little refactored to use a setter proc
that saves them from causing hard dels
Cooler stuff:
A revival and remake of [Nobody Wants To Learn Matrix
Math](https://github.com/tgstation/tgstation/pull/59103), this time with
additional tooling for quick matrix calculations.

![image](https://github.com/tgstation/tgstation/assets/23585223/eb387738-0839-463a-aed8-4703d139b11a)
The MODLink system, available through every MODsuit and MODLink scryers
(a neck item obtainable from advanced modsuit research or
charliestation)
Let's you make a holographic call with any other MODLink user, where you
can chat in realtime and see what's up with em

![image](https://github.com/tgstation/tgstation/assets/23585223/5a822f9f-e823-497e-b766-40055f2fc0d6)
![image](https://github.com/tgstation/tgstation/assets/23585223/062983ee-6058-4e78-a3aa-bccda1a3e224)

## Why It's Good For The Game
Adds a fun way for the crew to communicate with each other that can be
done in real-time with relative privacy compared to radio.

## Changelog
🆑 Fikou, Armhulen, Sheets (+rep for Mothblocks and Potato)
fix: RD MODsuit outfit (admin only) no longer has a beret that blocks
the activation of the suit
fix: The beret used by death squad officers no longer is blocked from
being put on a hat stabilizer module
admin: Admins can now Shear matrices of objects in Modify Transform
admin: Admins now have access to Test Matrices in the VV dropdown, an
all-in-one tool for editing transforms.
add: MODLink system, available through scryers (from RnD and Charlie
Station) and through MODsuits. Lets you call people with holographs!
/🆑

* MODLink System (+ NWTLMM)

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-08-19 05:09:31 -04:00
SkyratBot
6357ddb9eb [MIRROR] Fixes lavaland beach bartender closets. [MDB IGNORE] (#23189)
* Fixes lavaland beach bartender closets. (#77698)

## About The Pull Request
I subtyped the closets under bar closet as we have no wooden closet
subtype which is stupid, and this may not be the best solution. But hey,
now it's not varedited just in the map.
Fixes https://github.com/tgstation/tgstation/issues/76943.
## Changelog
🆑
fix: fixed lavaland beach bartender closets looking off.
/🆑

* Fixes lavaland beach bartender closets.

---------

Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
2023-08-18 23:08:39 -04:00
SkyratBot
f98c727416 [MIRROR] Fixes an invalid bartender suit spawn [MDB IGNORE] (#23146)
* Fixes an invalid bartender suit spawn (#77662)

## About The Pull Request

https://github.com/tgstation/tgstation/pull/77558 removed the bartender
outfit but there was still one instance of the path left over, leading
to an invalid icon state bartender suit spawning in a locker.

![dreamseeker_mc0gjQkreo](https://github.com/tgstation/tgstation/assets/13398309/863f77ce-2cf2-463d-b552-2ac632b49624)

![image](https://github.com/tgstation/tgstation/assets/13398309/43aeb546-c3e1-44bb-8cb6-13b680a4aca4)

This gets rid of that. The bartender outfit has been replaced with the
greyscale buttondown suit with slacks now.

Also repaths `/obj/item/clothing/under/rank/civilian/bartender/purple`
to `/obj/item/clothing/under/rank/civilian/purple_bartender` to avoid
having a defunct basetype for this same reason.

## Why It's Good For The Game

Fixes an oversight

## Changelog

🆑
fix: formal closet will no longer spawn with two 'error' icon suits
inside of it
/🆑

* Fixes an invalid bartender suit spawn

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-08-17 09:56:05 -04:00
SkyratBot
51d62e685e [MIRROR] More Suits resprites (Bonus: Chef/Bartender updates!) [MDB IGNORE] (#23088)
* More Suits resprites (Bonus: Chef/Bartender updates!) (#77558)

## About The Pull Request
Finally, my ultimate goal:
All Lawyer suits are now under suits.dmi. Having some suits in suits.dmi
and some in civilian.dmi was just really really weird and confusing.

Also updated some more Service stuff, specifically the Chef and
Bartender. Their uniform is the generic Service Buttondown, and their
other gear has been updated. The Bartender, notably, now has a new item,
the bowtie!

Full changelog:
- Adds Bowtie (and yes, it's in relevant vendors)
- Adds a greyscale Formal Jacket (the lawyer jackets but greyscaled)
- Removes `/obj/item/clothing/under/rank/civilian/chef` and
`/obj/item/clothing/under/rank/civilian/bartender`; replaces them with
`/obj/item/clothing/under/costume/buttondown/slacks/service`
- **Moves all Lawyer suit sprites to the suits.dmi**
- Converted `/obj/item/clothing/under/rank/civilian/lawyer/bluesuit` to
use the same GAGS configs as the buttondown (path unchanged)
- Resprited all Lawyer suits (except galaxy ones)
- Resprited the Lawyer jackets to match (including a currently unused
GAGS-palette one)
- Resprited the Chef Apron-Jacket and Hat
- Resprited the Botanist Overalls (and made them Greyscale)
- Updated the shirt on the Cook Jorts to be more up-to-date instead of
being new pants on a super crusty old shirt sprite.
- Puts stuff into vendors

## Why It's Good For The Game
Sprote updates yahoo!

Chef/Bartender showed their age, and essentially had the same uniform.
Now they look much more at home.

![image](https://github.com/tgstation/tgstation/assets/76465278/c4c317c3-e62a-41d3-87fe-bb38c2a46552)
GAGS Suit jacket yippee!

![image](https://github.com/tgstation/tgstation/assets/76465278/a1eaf9a9-58c9-44ef-b967-fdc62311afbd)
This jacket was put into to the Bartender's vendor for the sake of
allowing them their own gimmicks, such as this:

![image](https://github.com/tgstation/tgstation/assets/76465278/eb42e93b-9442-4cd4-891f-091a74aaccbf)
New greyscale overalls wahooo! Since they're greyscaled they're also in
the clothesmate for anybody who really wants them.

![image](https://github.com/tgstation/tgstation/assets/76465278/c8aea289-d2d9-467d-949a-82563bccb2d3)
The Lawyer suits just used an entirely different type of shading and it
made them stick out weird... I'm not quite sure on reshaping their
jackets but figured it's better to start with this and update them if
requested.

![image](https://github.com/tgstation/tgstation/assets/76465278/9a74c3a3-a2b8-48d6-89f9-77d1e0fdd86a)

As for moving Lawyer suits to suits.dmi... I just don't like them being
split up. It makes it annoying to prevent duplicates or keep them all
updated.
## Changelog
🆑
add: Added the Bowtie! Bartenders start with one on, but they can also
be found in the Bardrobe, Autodrobe, and Clothesmate. No need to tie it
either, it's just a clip-on.
add: Added a Greyscale "Formal Jacket" of the style that most suits use,
for crew who want to make their own using the buttondown shirt.
del: Removed the generic Cook/Bartender uniforms and changed them to use
the Service buttondown w/ slacks.
image: updated the majority of Lawyer suit sprites, along with the
Cook's Apron-Jacket and Hat, and updated/greyscaled Botany's Overalls!
Also the Overalls are available in the clothesmate, and the Cook Jorts'
shirt is less crusty.
/🆑

* More Suits resprites (Bonus: Chef/Bartender updates!)

* Modular path changes/removals

* Modular adjustments: removing deleted sprites, creating digi sprites for overalls and purple bartender resprite, removing greyscale overalls

* Fix grayscale configs

* Update misc.dm

* Moves icons to new location

* Update civilian.dm

* I hate all of this so very much.

* Update civilian.dm

* Update loadout_datum_suit.dm

---------

Co-authored-by: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-08-16 18:13:39 -04:00
SkyratBot
2dcb293050 [MIRROR] prevents welding bodybags or at least the text [MDB IGNORE] (#23100)
* prevents welding bodybags or at least the text (#77606)

## About The Pull Request

sets canweld = false
## Why It's Good For The Game

fixes #77596
## Changelog
🆑
fix: removes bodybag welding tooltip
/🆑

Co-authored-by: oilysnake <63020759+oilysnake@ users.noreply.github.com>

* prevents welding bodybags or at least the text

---------

Co-authored-by: DeerJesus <willgiscool@gmail.com>
Co-authored-by: oilysnake <63020759+oilysnake@ users.noreply.github.com>
2023-08-15 19:58:57 -04:00
SkyratBot
e922ac6008 [MIRROR] Ports LETPASSCLICKS from Daedalus Dock [MDB IGNORE] (#23078)
* Ports LETPASSCLICKS from Daedalus Dock (#77568)

## About The Pull Request
A deal with @ Fikou
- https://github.com/DaedalusDock/daedalusdock/pull/106

In layman's terms, you can grab this wrench now.

![205561405-902f1795-0c63-4dab-8435-d8902f9c4499](https://github.com/tgstation/tgstation/assets/75460809/08f2e782-7532-44a5-beea-fd1278985017)

Adds a new pass_flags_self value for click transparency, allowing
objects to be dense without blocking click attempts.
## Why It's Good For The Game
## Changelog
🆑
add: Lockers, crates, and machines no longer block click attempts in
adjacency checks. Basically, you can reach tables cornered between
lockers/machines.
/🆑

* Ports LETPASSCLICKS from Daedalus Dock

---------

Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
2023-08-14 16:53:51 -04:00