Commit Graph

40421 Commits

Author SHA1 Message Date
LemonInTheDark
830d2e50b4 Fixes some stupid airlock sleeps (#75961)
## About The Pull Request

[A common problem with explosions is an overabundance of
sleeping](6499077a09)

In an attempt to solve this issue, let's not continue to sleep and do
work in door closing if the door is already deleted

(This is caused by firelocks activating due to other adjacent objects
deleting, triggering an atmos update, and closing the firelocks before
they get bombed. I don't have a elegant way of resolving that core
problem, so let's just minimize the impact)

[Nukes a stupid sleep loop in airlock
code](5b16360520)

When an airlock was depowered, it would enter a sleep loop, decrementing
its delay by 1 second every well, one second, so long as it had the
right wires flipped
This is very stupid

Instead, let's use signals off wire changes and a combo of timer and
remaining time var to do this with JUST a timer

Most of the changes here are just swapping over wires to a setter to
make signal registration work\

## Why It's Good For The Game

Less sleeping around explosions means less dropped ticks after a bomb
goes off. Good just in general
Also this excises dumb boomer code and adds some hooks for other devs to
use (we should use wires more man)
2023-06-19 02:18:48 +00:00
distributivgesetz
997210290e Robust Photocopiers + Adds the Access Request blank (#76048)
## About The Pull Request
Currently, photocopiers parse the `blanks.json` file in `ui_data` and
send the entire thing to the client. Then, the client sends the entire
blank back to the server to commit it into the paper, in raw form. This
is a detriment to server performance. This PR puts paper blanks into a
global associative list that uses the `code` field as an index.

Printer toner color for some reason would check if the charges were
below 10, even though default cartridges only go up to 5. The value has
been changed to 2, which is still a high number. Toner cartridges are
scams.

Also photocopiers now have to hold actual paper and no longer
materialize it out of thin air. It's done similarly to paper bins, where
there is a starting integer value dictating how much paper is inside so
paper is lazily loaded into existence, as well as a paper stack list
that holds newly inserted paper. Photocopier paper starts out at 30 and
can go up to 60.

Additionally, the photocopier copying loop has been refactored to be a
lot more sane. The previous version ~~ab~~used timers for copying,
making a timer for each i interval to num_copies. I changed it to be a
proc that loops from i to num_copies, sleeping for a short amount of
time whilst playing a sound. This is a lot tidier and nicer since we
don't deal with timers, plus we get to play a printing sound too.
`make_thing_copy` now works by returning the copied object, or null if
something went wrong, so we know when to continue or exit.

This PR refactors UI code so entire blanks aren't sent to the client,
instead relying on the IDs for the blanks. Also, photocopiers now store
actual paper and also run out of it instead of materializing some out of
thin air.

Also, while I am already editing `blanks.json`, I added the Access
Request blank because people asked me to.

I can revert the config changes if it's too much of a hassle.

<details>
<summary>Screenshots/Me testing a printer for 5 minutes</summary>


![dreamseeker_gZ4Kl3QZbF](https://github.com/tgstation/tgstation/assets/47710522/b601b79a-1b2f-4d7f-b72a-f62dad217698)


https://github.com/tgstation/tgstation/assets/47710522/11c4b63b-7cfc-4425-96c6-970d4a5f51ca


https://github.com/tgstation/tgstation/assets/47710522/2f7a4a15-3400-49f3-9aca-c4d04c886bec


https://github.com/tgstation/tgstation/assets/47710522/14afe7d9-53ea-4d17-870f-1e90319284eb

</details>

<details>
<summary>Access Request form</summary>


![image](https://github.com/tgstation/tgstation/assets/47710522/0cf99542-24d1-41ca-8aa9-26bb201a79c0)


![image](https://github.com/tgstation/tgstation/assets/47710522/36418c42-eb82-4c13-ab65-08f6486cf613)


![image](https://github.com/tgstation/tgstation/assets/47710522/7acde2ff-040a-40bf-8898-398c2150655e)


</details>

## Why It's Good For The Game
Speeb. Also having photocopiers relying on an ingame stock of paper is
also very cool.

## Changelog
🆑 distributivgesetz
add: Photocopiers now use actual paper instead of materializing it out
of thin air.
add: Adds the "Access Request" form.
refactor: Greatly improve the reliability and performance of
photocopiers.
qol: Changed the blanks so they look nicer, whilst also fixing the
lawsuit request form.
qol: Nanotrasen's bureaucracy division has ""improved"" the quality of
their printer toner after many complaints from furious customers.
/🆑
2023-06-18 18:45:09 -06:00
OrionTheFox
ccd26c2f1c Puts Balaclavas on a layer below glasses and radios (#76126)
## About The Pull Request
This has been annoying me for a while. Balaclavas being above glasses
made them cut them off in a really weird way.
So this moves them to a LOWER_FACEMASK_LAYER that's below glasses and
ears (since headsets are worn over balaclavas typically)

This layer has to be below the hair layer, but any masks that use it
should have HIDEHAIR anyways
## Why It's Good For The Game
It just looks cooler:
Befores

![dreamseeker_VHue08sjRq](https://github.com/tgstation/tgstation/assets/76465278/6a5e915f-d1bf-459c-a7a1-04e7294f8e1f)

![dreamseeker_x2sSpZ0ZNs](https://github.com/tgstation/tgstation/assets/76465278/eecc9416-a813-4265-a541-d2b62fb7bd71)

![dreamseeker_vPTk7n4bRW](https://github.com/tgstation/tgstation/assets/76465278/78cc8281-a158-4d6e-a80a-90c5978db44e)

Afters

![dreamseeker_2YY2BH3C6P](https://github.com/tgstation/tgstation/assets/76465278/f67a2428-4082-405e-9682-1cd715b9d403)

![dreamseeker_3TuQ4Jh6gV](https://github.com/tgstation/tgstation/assets/76465278/9f71505d-f984-4c0a-9f90-fc2d7e3a8dfb)

![dreamseeker_0QDakTo6kj](https://github.com/tgstation/tgstation/assets/76465278/114adeec-4331-4097-97bd-3b8a44e6193b)
## Changelog
🆑
qol: made Balaclavas layer below glasses and radios
/🆑
2023-06-18 18:39:27 -06:00
DaydreamIQ
43405ce46f Makes abductor organ surgery consistent with other surgeries (#76124)
## About The Pull Request
Just swaps the Hemo and Retractor steps to make it more in line with
other surgeries
## Why It's Good For The Game
This might just be me but I always forget that the order is different
and it throws off my muscle memory
## Changelog
🆑
qol: Abductor organ surgery steps shifted around to match other
surgeries
/🆑
2023-06-18 18:38:17 -06:00
GoldenAlpharex
b500778c6c Fixes wheelchair making sounds only on conveyor belts (#76121)
## About The Pull Request
That's all it is, really. They went quiet because the logic check was
done backwards.

## Why It's Good For The Game
Wheelchairs making sounds when they're meant to is good.

## Changelog

🆑 GoldenAlpharex
fix: Wheelchairs now make noises when they're meant to again, and don't
make noises on the tram nor on conveyor belts
/🆑
2023-06-18 18:29:54 -06:00
OrionTheFox
9db5166da8 Fixes several issues and a runtime with paper cutters (#76131)
<!-- 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. -->

## About The Pull Request
Was meant to just fix a runtime in the context screentips for
papercutters but now I've got several things fixed:
- Fixes context tips runtiming 
- Fixes some context tips that just didnt ever appear
- Fixes the icons not updating when removing papers/blades
- Moves the blade to an overlay
- Adds a list of blocked paper types that don't fit: paperslips, NSpect
inspections, calling cards, pamphlets, and sparring contracts
- Fixes papers and blades not actually removing when removed
- Fixes being able to add papers when one is already inside
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Fixes



https://github.com/tgstation/tgstation/assets/76465278/c30127d3-24b0-4a1d-8272-76af68b24469


<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- 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. -->

🆑
fix: fixed the context tips on papercutters
fix: fixes papercutters not properly updating their icons, removing
their stored papers/blades, and eating papers when one is already stored
/🆑

<!-- 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. -->
2023-06-18 16:52:35 -04:00
Time-Green
8788e48378 Shuttle events (#76008)
## About The Pull Request


https://github.com/tgstation/tgstation/assets/7501474/a2d83ce8-eba1-42d9-a1f8-9d73f7c40b21

Adds shuttle events! Stuff can now start to happen outside the shuttle,
either benign or spicy (but usually just fun to watch)!
## Why It's Good For The Game

The shuttle escape sequence is an important part of the game, uniting
about every player surviving player. Recently, #71906 has made the
escape sequence more forgiving as well as more interesting by
conditionally doubling the playing field. The area outside the shuttle
is still mostly empty though, except for the few people being spaced,
daredevils and the occasional epic space fight.

This PR adds adds some space events to spice up the outside of the
shuttle! This both gives people something too look at, making the escape
sequence feel less static and more lively, as well as give people a
reason to go outside and get the full experience of ~being decapitated
by a meteor~ swimming with the fishes!

<details>
  <summary>Shuttle Events</summary>

**Friendly carp swarm**
Spawns a group of carp that flies past the shuttle, completely friendly
unless provoked.

**Friendly meteors**
Spawns a lot of strong meteors, but they all miss the shuttle.
Completely safe as long as you don't go EVA

**Maintenance debris**
Picks random stuff from the maintenance spawn pool and throws it at the
shuttle. Completely benign, unless you get hit in the head by a toolbox.
Could get you some cool stuff though!

**Dust storm**
Spawns a bunch of dust meteors. Has a rare chance to hit the shuttle,
doing minimal damage but can damage windows and might need inflight
maintenance

**Alien queen**
One in every 250 escapes. Spawns a player controlled alien queen and a
ripley mech. RIP AND TEAR!! Really not that dangerous when you realize
the entire crew is on the shuttle and the queen is fat as fuck, but can
still be fun to throw people around a bit before being torn to shreds.

**ANGRY CARP**
Once in every 500 escapes. Spawns 12 normal carp and 3 big carps, who
may just decide to go through the shuttle or try and bust through the
window if you look at them wrong. Somewhat dangerous, you could stay
away from the windows and try to hide, or more likely shoot at them and
weld the windows

**Fake TTV**
Lol

**Italian Storm**
Once in every 2000 rounds. Throws pasta, pizza and meatballs at the
shuttle. Definitely not me going off the rails with a testing event

**Player controlled carp trio**
Once in every 100 escapes. Spawns three player controlled carp to harass
the shuttle. May rarely be a magicarp, megacarp or chaos carp. I can't
honestly see them do anything other than be annoying for 3 seconds and
die

There are some other admin only ones: a group of passive carps going
directly through the shuttle and just being little shits, and a magic
carp swarm
</details>

Events are selected seperately, there isn't a crazy weighting system,
each just has a chance to run, and multiple could run at once. They also
don't immediately trigger, so people can get settled a bit, and to make
sure just waiting out the more dangerous ones is still a valid strategy.

## Changelog
🆑
add: Adds shuttle events! If shuttle escapes weren't exciting before
(doubtful), they definitely are now! I'm joking it's mostly an
atmosphere thing.
admin: Adds an admin panel to interact with shuttle events, under the
Events tab: Change Shuttle Events
fix: Objects spawned in hyperspace will properly catch hyperspace drift
/🆑

There's a few things I'd like to do later (another PR) (honestly anyone
can do them because I suck at follow-ups), because this is too big as
is:
- Hijack triggered shuttle events
- More events (got a lot of cool suggestions, but I'm putting most of
them on hold)
- Maybe stration announcements if some more dangerous ones get added
- Structures appearing next to the escape shuttle???

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-06-18 08:14:05 -04:00
Pepsilawn
dcbe081f64 Cannot use departmental budget cards as source of credit withdraw (#76113)
Currently you can put cargo's budget card into your PDA, go into NT Pay
and send over the budget to any pay token you want including yours. This
just adds a check to ensure you aren't using that kind of card as
withdrawal source.
2023-06-18 08:18:20 +00:00
MrMelbert
d48f8c53f7 Fix crusher harddel (#76096)
## About The Pull Request

Fixes #60047

## Why It's Good For The Game

Hard del and bricking things are bad. 

Guess it's still an issue that burning tropheys are a thing but Shrug

## Changelog

🆑 Melbert
fix: Fixed hard delete with Kinetic Crusher causing the projectile
function to brick
/🆑
2023-06-18 16:14:32 +08:00
MrMelbert
7b5f270057 Fix Biscuit (paper) hard delete (#76097)
## About The Pull Request

`contained_slip` is a reference to one paperslip in the "folder"
contents, when said slip was removed and eventually deleted caused a
hard delete.

## Why It's Good For The Game

Hard deletes bad

## Changelog

🆑 Melbert
fix: Fix Hard Delete from the captain's spare ID code paper
/🆑
2023-06-18 16:13:34 +08:00
ChungusGamer666
01900cdbe6 Fixes exotic blood types persisting through species change (#76114)
## About The Pull Request

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

## Why It's Good For The Game

It's funny but it's a bad evil bug

## Changelog

🆑
fix: Exotic blood types no longer persist through species change if the
new species does not have an exotic blood type
/🆑
2023-06-18 16:12:55 +08:00
MrMelbert
a5a32ce012 Fix traitor trapper tool hard delete (#76098)
## About The Pull Request

There's no need to hold an unmanaged reference to something just to
check if it's been created or not

If the intent was to be "let the traitor re-summon it if it gets deleted
somehow", this should be using a weakref and resolving it, but I'm not
sure if that was the intention so I'm changing it to a bool

## Why It's Good For The Game

Hard deletes bad

## Changelog

🆑 Melbert
fix: Fix hard delete in traitor trap tool objective
/🆑
2023-06-18 16:10:41 +08:00
LemonInTheDark
a913f0859d Saves about 0.2 seconds of init re:air updates (#76108)
## About The Pull Request

We should be blocking the primary ssair activity updates if the
subsystem hasn't started yet

## Why It's Good For The Game

https://github.com/tgstation/dev-cycles-initiative/issues/25

Total waste of time, wins maybe 0.2 seconds of init
2023-06-18 16:09:06 +08:00
Fikou
8be54ac1df dont send raw href to admins (#76125)
## About The Pull Request
if href exploiting the shuttle computer it no longer sends admins the
raw html

## Why It's Good For The Game
lol

## Changelog
2023-06-17 20:23:00 -04:00
ChungusGamer666
f07b74ea90 Moves species brutemod and burnmod to be handled by bodyparts (#76060)
## About The Pull Request

Title.
Brute modifier and burn modifier are now handled by bodyparts. Cold
modifier and heat modifier are still handled by species, though
mmmmmaybe I'll make a PR addressing those later, yes?

## Why It's Good For The Game

Medical abominations will have even more consistent behavior!
Also bloating the species datum less is kinda good.

## Changelog

🆑
refactor: Species brute and burn damage modifiers are now handled by
bodyparts, instead of being universal. Go ham at the surgical bay.
/🆑
2023-06-17 18:46:27 +02:00
Zephyr
a690c37b17 Refactors papercutters (#75965)
## About The Pull Request

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

Fixes https://github.com/tgstation/tgstation/issues/74505
## Changelog
🆑
fix: Deconstructing a papercutter will now spit out its internals if
present.
qol: Papercutters now have contextual tips
/🆑
2023-06-17 17:59:06 +02:00
LemonInTheDark
5b2cd2f34b Always contracts lists when VVing GLOB (#76091)
## About The Pull Request

This takes render times from like 20 seconds to maybe 2 Most of the time
appears to be clientside rn, so the best we could do further would be
reducing the amount of shit that actually needs to render

So like, removing the E C M buttons (or at least adding a toggle to
render them), that sort of thing

## Why It's Good For The Game

A glob vv you can actually use

![image](https://github.com/tgstation/tgstation/assets/58055496/d7c29c9a-aa45-4cad-9f38-7131140cab5b)

## Changelog
🆑
admin: VV for global vars will now load MUCH faster, in exchange lists
are now perma contracted in that particular pane
/🆑
2023-06-17 17:56:05 +02:00
SyncIt21
4d2ff43244 Ton of turbine patches (#75968)
## About The Pull Request
1. Fixes #66994
Round start turbines have their power net initialized but not player
constructed one's. Now the rotor will connect itself to the power net
once you close it with a screwdriver & disconnect itself when you open
it. Make sure there is a cable beneath the rotor for it to work
2. Fixes #72235
Turbine's can be built vertically if the rotor is parallel or in the
opposite direction with respect to its compressor & rotor. If any part
is missing or not aligned, you will get fully detailed balloon alert's
telling you exactly how you have wasted your life playing this game and
why it's too late to do anything about it
3. Fixes #36284
The total rpm is now rounded to an integer value cause it actually makes
sense and the gas moles during computation's are quantized(i.e. rounded
to zero if they become very small) so in near vacuum environment's you
won't get free power.
Also turbine now respects the value of `pump_gas_to()` proc which means
if this proc fails to move gas the work returned is 0 so hopefully this
should fix other gas related issues in the turbine as well
4. Turbine's don't start processing round start or during init as it
waste's a lot of processing power. They only begin processing when
turned on by computer & stop processing when turned off by the computer
5. The rotor component will now tightly monitor the state of its
compressor & turbine outlet during it's processing lifetime. This wasn't
the case previously because after you link all part's if the compressor
or rotor was destroyed/moved/whatever the rotor would still continue to
function as normal if it was already running.
Now if anything happens to these component's everything is reset & you
have to link them again so you don't get weird behaviour.
This was the old behaviour notice 3 wrong things
- the turbine is still rotating even after the compressor is deleted,
it's animation is still there
- the computer is showing the turbine is still working, only after i
turn it on & off does it show the error message
- the error message is all wrong it shows parts have their panel open
even though they are missing


https://github.com/tgstation/tgstation/assets/110812394/0a64e5a6-80ca-442b-bbac-2eabc5060777

This is the new behvaiour
- as soon as the compressor is deleted the turbine output also stops
working because the whole turbine was shutdown when it detected a
missing part(the turbine animation stops working)
- the computer immediately shows you an error message without switching
it on/off first. it also shows you the correct message telling you about
missing parts


https://github.com/tgstation/tgstation/assets/110812394/bf05224b-8fe4-41ca-a2e4-ca26b11fd3c7

6. Merged a lot of procs into big ones to improve readability & also
because it was unnecessary and early return's and a ton of sanity
check's to make sure everything fails gracefully if anything get's
deleted

**Imporant mathematical changes**
1. The not so important change `do_calculations()` is renamed to
`transfer_gases()` which does exactly what it says
2. The important changes `transfer_gases()` will now return the work
done(which can be +ve or -ve) ONLY IF `pump_gas_to()` succeds. i.e. only
if gas was successfully moved from one mixture to the other only then is
the work computed. This was done because logically makes sense.
All work is computed based on how much gas was moved i.e. the return
value of `pump_gas_to()`. So rather than computing the work done based
on how much gas is "Stored"[like how much gas is in the turbine] we
calculate work done based on How much gas was "Moved" from turbine to
the outside turf. i.e. all work calculated is relative


## Changelog
🆑
fix: finishing & closing the turbine core rotor part will now connect
itself to the cable beneath it allowing it to share its produced power
with everyone.
fix: turbine's now give detailed balloon alerts if you have a missing
component, or something is not aligned correctly during turbine
construction
fix: turbine's will not produce power in vaccume
fix: turbine's won't function if any of it's components are damaged or
misaligned after linking or during processing
/🆑
2023-06-17 17:46:56 +02:00
Pickle-Coding
2210455830 Fixes space dragon hitting the same target multiple times in a single fire breath stream. (#75996)
Moves the scope of the hit_list to the fire_stream proc. It gets passed
as a parameter that the other proc accesses instead of creating a new
list for everybturf.
## About The Pull Request
Moves the scope of the hit_list to the fire breath rather than creating
a new list for every turf action.

This is an untested webedit. I'll test this later.
## Why It's Good For The Game
Closes #75930 
## Changelog
🆑
fix: Fix space dragon fire breath hitting the same target multiple times
in a single stream.
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-06-17 17:40:11 +02:00
Rhials
803658dc30 Deadchat Announcement Variety Pack 2 and also some fixes to other popups (#76053)
## About The Pull Request

This adds ghost orbit popups for the following: 
- Macrobombs (or stacked microbombs) being triggered.
- HFR Meltdowns.
- Living players about to be gored by an emagged organ harvester.
- Nuclear devices being armed.
- Doomsday devices.
- Blob hosts bursting.

This also modifies the following ghost orbit popups:
- Toy hot potatoes will no longer cause a popup when armed.
- Normal spider eggs will not flash the byond window, only special egg
types.
## Why It's Good For The Game

Gives more gathering spots/information to deadchat. Let no entertaining
moment in this game go unobserved.

Spider eggs flashing your window for every single egg produced makes
alt-tabbing suck. I saw some guy on the forums complaining about it and
thought "huh yeah I guess he's got a point that pisses me off too" so
here we are.
## Changelog
🆑 Rhials
qol: Basic spider eggs no longer flash the byond window when ready to
hatch.
qol: Toy hot potatoes no longer give a ghost notification.
qol: Deadchat will be notified in the event of an imminent macrobomb
detonation, HFR meltdown, organ harvesting,
qol: Deadchat will be notified when a nuclear/doomsday device is
activated, as well as when a blob-infection bursts.
/🆑
2023-06-17 17:20:49 +02:00
YehnBeep
988a6dcc21 Removes suicide check from positronic brains (#76081)
# About The Pull Request

This removes the suicide check from positronic brains.

# Why It's Good For The Game

There seems to be 2 arguments for why suicide should forbid ghost roles:
1. "If they suicided they didn't want to play"
2. "antag rolling"

So let's look at each.

And an addendum on scope: This is meant only to apply to ghost roles
(and new characters from said roles); I do not wish to change that
people are not allowed back onto the same character they suicided on.

## "Suiciders left the round of their own choice and shouldn't be
allowed back in"

There are many, many ways in this game to end up with a character in a
state that's nearly/effectively unplayable, even if the controlling
player doesn't truly wish to completely leave. Some things can be
resolved with competent medical or science staff, but competent staff
are not always available in a round or might be beleaguered by round
events.

Then there are a number of conditions/states which the game provides no
path to resolve (save drastic measures like abandoning the
character/body, of course).

Or one might have simply become stuck in a place where rescue is
unlikely.

## Antag rolling

The problem here is this code does not particularly target antag
rollers. It paints such a broad brush that it simply catches everyone
whom might not know "No no, you have to **ghost** here, not suicide".
Even if an antag roller is stopped once, they'll easily bypass it next
time through the many, many means open to them - and if 'ghost' is made
effectively the same as 'suicide', it simply punishes people who got
stuck or similar even more.

Because of the wide range of means to kill oneself on a normal
character, to effectively stop antag rolling requires discerning intent
through context and patterns of one's actions. This might not be
possible in code until General Intelligence is a solved problem, and if
it is possible, this doesn't do it. It's a shotgun that kills everyone
in the room and if there happened to be an antag roller there, well,
even a stopped clock is right twice a day.

And then, of course, that the code was broken for so long would seem to
indicate it's not done that much.

## Practical Impact and Design Philosophy

Just from my personal observations, even wanting into a posibrain is a
niche thing usually only taken by a small number of the same players
round-to-round. In practice, whether this PR is merged or not likely
won't have a great impact on the game. But that could change if the
philosophy behind this check is applied to a wider number of things.

If someone wants to die, it's not hard. Walk out an airlock. Into the
supermatter. Blob, Xenos, or some other hazard present? Walk towards
them. Step in front of a shuttle. Turn on internals and wait a bit.
Countless other ways. Except, perhaps, if a character is disabled or
crippled or stuck, in which case use of a verb may be necessary.

In other games with much narrower sets of mechanics, it may be possible
to close certain paths on the assumption it would mostly be used for bad
faith reasons. In SS13, the sheer number of ways in which a good faith
character be "screwed" but not quite killed off, and which a bad faith
actor can find to kill themselves while bypassing restrictions placed on
verbs, means that I think this code's design philosophy is harmful to
the game and its good faith players.

# Changelog

🆑
del: Positronic brains no longer check for suicide verb use.
/🆑
2023-06-17 16:20:22 +01:00
John Willard
5509c32ced Improves some confusing aspects of the Library (#75781)
## About The Pull Request

The barcode scanner now uses balloon alerts and only has 2 modes: check
in and add to inventory. It used to have 4, 2 of which were useless.

Added a title and author to chuuni granter so it's not broken to the
Curator's console. Moves inventory ui data stuff to ui static data so we
can reference it in checkout, which now uses a dropdown list of all
books in checkout, instead of having you fill out the name of the book
yourself.

Removes sending things to a computer by scanning a book then connecting
it to a computer. Just connect it to a computer first, there's no need
for this copy and paste stuff.

Finally, lets the book bag hold posters, since the Curator prints them
and it would be nice if they can also carry them without filling a bag.

Video was taken before the balloon alert stuff so just ignore that part

https://github.com/tgstation/tgstation/assets/53777086/e78011af-fb23-4553-a92d-f3dcc8bb5601

## Why It's Good For The Game

The library is currently very confusing for new people to figure out, I
thought this might be able to help with that.
The dropdown in the UI now means it's easier to give out books in
inventory, and you can no longer just type whatever the hell you wanted.

## Changelog

🆑
qol: The Curator's barcode scanner has been simplified into 2 modes:
check-in and add to inventory.
qol: The Book bag can now hold posters.
ui: The library console can now lend books out easier with a dropdown
menu to all inventory books.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-06-17 00:34:17 -07:00
Pickle-Coding
eb4b040a04 Multiplicative armour penetration. (#75925)
## About The Pull Request
Basically #71396 but for armour penetration. The formula gets changed to
be the inverse function of stacking armour. An example is if you had 75%
armour. That is equivalent to having two sets of 50% armour stacked. If
the armour wearer gets hit by a 50% armour penetrating force, it is the
same as losing a piece of armour worth 50%, knocking the 75% protection
down to a 50% protection, instead of 25%.
## Why It's Good For The Game
Makes it more consistent with how armour stacking works. It also lets
very strong armour be less fragile to small armour penetration. Kinda
silly for 90% armour value to be half as effective if it gets hit by 10%
armour penetration. This also allows it to be much easier to balance
lavaland armour and fauna piercing, allowing fauna to pierce through
crew armour while still letting mining armour have significant
protection. That isn't included in this balance change, but it allows
the option for someone to do that without changing any armour values.
## Changelog
🆑
balance: Armour penetration calculation is now the inverse function of
armour stacking.
/🆑
2023-06-16 20:35:47 -07:00
Nick
142164187d Fixes coin values (#76066)
## About The Pull Request

This brings coins values back from being severely undervalued after
#75437. Coins are supposed to be made of and worth 400 units of mats,
but the numbers weren't updated and so they were made of significantly
less than that.

## Why It's Good For The Game

Brings coins back to what they're supposed to be worth.
## Changelog
🆑
fix: After destroying unfathomable quantities of excess coins, their
value is back to what it's supposed to be!
/🆑
2023-06-16 20:13:30 -04:00
SuperDrish
fc54fd6a60 Add new check for character age for jobs. (#75992)
## About The Pull Request

Simply as it is. Every job _can_ have a minimal character age and will
not let underages to occupy for it.

Can be configured in config. Disabled(all zeros) by default.


![изображение](https://github.com/tgstation/tgstation/assets/59139863/797febd5-5b59-44d0-8767-b2347629197b)


## Why It's Good For The Game

Good for RP downstreams.

## Changelog
🆑 SuperDrish
add: Minimal Job Age requirments added. Disabled by default.
/🆑
2023-06-16 14:50:26 -06:00
EliteCreature
bafedce4b9 A mention of 'nitrogen' was mislabeled as 'tritium'. (#76082)
## About The Pull Request

Line 101 in the gas_reactions file had a gas mislabeled.

## Why It's Good For The Game

Helps new Atmos techs when they are looking up gas reactions in the Tank
Monitor/Gas Supply Control Computer

## Changelog
🆑

spellcheck: changed gas to correct type in description

/🆑
2023-06-17 08:48:25 +12:00
MrMelbert
43f1a52223 Removes some boilerplate from transforming component (#75998)
## About The Pull Request

Removes some boilerplate from transforming component, uses traits in a
similar way to the two-handed component

Also fixes #74955 (If it's still broken?)

## Why It's Good For The Game

Makes it a bit cleaner to work with. Cause I wanna do something with
this in the future maybe.

## Changelog

🆑 Melbert
fix: Fixed e-cutlasses and bananium swords having invisible inhands
code: Removed boilerplate from transforming component
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-06-16 14:47:50 -06:00
MrMelbert
22799fcb89 Refactors the worst list ever, Stun Absorptions, into status effects + makes status flags more accurate (making certain mobs more vulnerable to incapacitations?) (#76000)
## About The Pull Request

- Refactors the stun absorption list into a status effect

- Does a fair bit of cleanup around stun code

Weird thing involved in this.
Check out this define. 
`IS_STUN_IMMUNE(source, ignore_canstun) ((source.status_flags & GODMODE)
|| (!ignore_canstun && (!(source.status_flags & CANKNOCKDOWN) ||
HAS_TRAIT(source, TRAIT_STUNIMMUNE))))`
Notice anything odd about it?
It only checks for `CANKNOCKDOWN`. 
What does this mean?
Well, *every single* one of the stun procs used this macro for checking
stun immunity. Which means every method of stun checked the
`CANKNOCKDOWN`.
This means that, say you have a mob which has `CANSTUN` but not
`CANKNOCKDOWN`.
Intuitively this means that the mob cannot be knocked down, but can be
stunned.
But instead, this means the mob can't be stunned either. 
This doesn't affect humans, they have all the status flags, but it does
affect some other mobs.
Alien adults (not queens) have `CANUNCONSCIOUS|CANPUSH`. Before, they
didn't have `CANKNOCKDOWN`, so they were fully immune to stuns and
sleeps. But now, they can be knocked unconscious.
However, overall it doesn't change much, as most mobs that flipped off
`CANKNOCKDOWN` flipped off the others too.
For consistency though it makes sense for these flags to work as they
imply.

- `incapacitate` didn't have a signal, now it does

## Why It's Good For The Game

More consistent, better code? I may use this in the future.

## Changelog

🆑 Melbert
refactor: Refactored Stun Absorptions (Bastard Sword, His Grace)
refactor: Refactored Stun Immunity. Note this means that some mobs
which, prior, were immune to all forms of incapacitation are now
vulnerable to some. Notably, adult non-queen xenomorphs are now
vulnerable to falling unconscious.
/🆑
2023-06-16 14:44:25 -06:00
jimmyl
cccdd2cda5 Latejoining crew start with emergency large crowbars if arrivals is not powered (#75827)
If you latejoin, and arrivals environmental power is off (airlocks
depowered), you start with an emergency large crowbar in your hands (or
floor if both hands are full already)

Some arrival shuttles start with a crowbar, but its not enough if
someone already took it before you arrived.
Being stuck in airlock + firelock CBT especially with no air is very
shit (unless youre the CE or an Engineer who start with tools, unlikely)
Having a crowbar resolves movement
2023-06-16 19:56:56 +00:00
A miscellaneous Fern
1110229f70 Shipping manifests now display repeated items on a single line & Makes an adjustment to manifest errors (#76012)
## About The Pull Request

Firstly, what is says on the tin. Screenshots for comparison:
| Old | New |
| ------------- | ------------- |
|
![imagen](https://github.com/tgstation/tgstation/assets/80640114/28f5f3d0-addd-4c48-a3e2-291a540c31ed)
|
![imagen](https://github.com/tgstation/tgstation/assets/80640114/e8e0a6f2-c45c-49c4-8e08-924b1603e759)
|

Secondly, I had to rewrite the way manifest content errors work and took
the liberty of making some adjustments:
- Items are now guaranteed to be missing from the manifest if the error
is rolled (Otherwise you could get unlucky and receive a manifest that's
labelled as erroneous but has no signs of it)
- Rather than being a 50% chance to omit each item, it will remove a
random number of items from 1 to half of the total amount of items.
## Why It's Good For The Game

Improves the readability of the manifests.
Removes a fairly annoying edge case with manifest errors.
## Changelog
🆑
fix: shipping manifests labelled as erroneous due to missing contents
are now guaranteed to be missing contents
spellcheck: shipping manifests now display repeated items on a single
line
/🆑
2023-06-16 11:29:01 -07:00
Andrew
e03941b5dc [NO GBP] Tube and Bottles get main reagent in their name (#76040)
![image](https://github.com/tgstation/tgstation/assets/3625094/f361b36b-b769-4d6f-84cb-37ae402622c0)

## About The Pull Request

I made only pills and patches have reagent name by default because I
thought that open containers are temporary, and if you empty them and
then fill with other reagent, it will be confusing. I was wrong, they're
better be named.

## Why It's Good For The Game

Less manual input for those who want their tubes and bottles named to
not rely just on reagent color

## Changelog

🆑
qol: Tubes and Bottles have the main reagent name prefix in
Chem/CondiMaster
/🆑
2023-06-16 11:27:26 -07:00
MrMelbert
dfc3e61d1f Fixes ghosts being unable to click gateways to teleport through (#76070)
## About The Pull Request

Ghosts can click gateways to teleport again 

## Why It's Good For The Game

I *believe* the "gateway visual" update made it so the bumper was
unclickable, not sure why

Seemed easier to move it to the gateway itself rather than be on the
bumper

Also made it so you cant teleport into secret gateways

## Changelog

🆑 Melbert
fix: Ghosts can click on active gateways to teleport to the destination
set. Doesn't work for secret gateways.
/🆑
2023-06-16 15:04:10 +02:00
ChungusGamer666
1bede4dcff Acid particles (+unsorted acid/burning/thermite component changes) (#75248)
This PR is way less than the file changes make it seem like it is.
Okay, first, the boring part:
- Picking up burning items is now a signal registered on the burning
component itself, instead of being a direct /obj/item/attack_hand()
check
- Sear sound now has an SFX define for convenience, since it is very
commonly used
- Fire stacks when extinguished on mobs will no longer clean acid on
items (WTF?)
2023-06-16 06:39:24 +00:00
Rhials
abc0820466 Gives Fugitive Hunters credible IDs, access restricts the hunter shuttles, minor hunter shuttle improvements (#75913)
## About The Pull Request

This standardizes fugitive hunter IDs, making all hunter packs use the
same subtype and giving them to hunters who would spawn with no ID at
all.

The badass flaming ID color that the OG Bounty Hunter team got are now
the standard for fugitive hunter IDs. Additionally, these IDs now come
with a radical skull trim.

(Spacepol Officers don't get the badass flaming skull ID, and instead
get a more modest Police Officer ID).

**These IDs come with access, too. Airlocks, bolt buttons, shuttle
controls, and shutters on all of the hunter shuttles now require a
hunter's ID to operate.**

While I was in the area doing mapping stuff to get the accesses in
place, I made a few other very minor changes to the shuttles. These
include:

- The Bounty Hunter shuttle now has an oxygen dispenser. Two walls have
been moved to make space.
- The Russian Hunter shuttle now gets enough oxygen tanks to share with
everyone.
- The Psyker Hunter spawners now have proper spawner menu text. This was
due to duplicate-but-not-really subtypes existing, and me mistakenly
putting the wrong ones there in a previous PR.
- The cut ai wire helpers from the Russian/Psyker shuttles have been
extended to the Bounty/Spacepol shuttles.
- Every hunter shuttle now has a shuttle pinpointer on it somewhere, and
is no longer exclusive to a single Bounty Hunter's loadout.
## Why It's Good For The Game

Some of the hunter IDs would spawn without trims or coloration, and some
hunters wouldn't spawn with IDs at all. Now, everyone gets a credible,
cool-looking ID that lets everyone know what you're here to do at a
glance.

One of these is a crazed larper with an unregistered firearm, the other
is a certified bounty hunter.

As for the hunter access, it's pretty nonsensical that anyone can just
walk into the hunter ship and set up shop. At least the pirates get
turrets! Not to mention, it's hard to balance or give hunters new
equipment in good conscience when their entire domain is public-access
and anything they can't carry is considered forfeit to the crew. Now it
can be used as a base of operations, storage area, etc. more securely.

Locking down the shuttle with accesses isn't going to stop a determined
gamer with a toolset, but it'll at least make it more interesting and an
actual risk. If the fugitives want to try and loot/hijack the shuttle,
it will require the effort of taking down one of their hunters first.

While hunters stand out for the differences/imbalances between each
group, I don't see the shuttle pinpointer as something that contributes
positively to the OG bounty hunter's uniqueness. There's no reason why
the other hunters shouldn't also be able to track their ship.
2023-06-15 22:27:19 -05:00
Nick
f6fe52c976 Adds armour to divine archer hood (#76069)
## About The Pull Request
Addresses #75999 and adds armor to the hood of the chaplain's divine
archer coat to make it consistent
## Why It's Good For The Game
Makes the coat more consistent with itself, fixes an oversight
## Changelog
🆑
fix: The divine archer coat's hood now has armor like it's supposed to
/🆑
2023-06-15 20:13:09 -06:00
MrMelbert
2173106e99 Fix *wing runtimes (#76056)
## About The Pull Request

Seemed like this emote never got updated to newer "wing organ"
standards.

This fixes some runtimes that are caused by humans without wings using
*wing.

## Why It's Good For The Game

Runtimes, makes the emote a bit more clear on how it's used

## Changelog

🆑 Melbert
fix: Runtimes from wingless humans using *wing
/🆑
2023-06-15 19:59:55 -06:00
AnturK
bd1098b874 Removes amount_list_postion from reagent containers, adds related unit test. (#76057)
We had more issues like what #76013 addressed, now they're gone.
Variable transfer amount is now explicit. 
Amount is now inferred from current value, performance concern here is
minimal. Less work and mistakes when making new types.
2023-06-15 19:58:58 -06:00
A miscellaneous Fern
7eed7de897 Head Revolutionary promotions now exclude Monkeys unless absolutely necessary... again. (#75995)
## About The Pull Request

Makes #40938 work again.
Eventually, monkeys became a human subtype too, which broke the code
that used to make them only be promoted to rev heads if there were no
human candidates available. The other fixes of #40938 seem to have
already been accounted for at some point or another.

Updates the comments and var names as well to make it clear that it is
meant to exclude monkeys and not non-human races (lizards, moths, etc.).
## Why It's Good For The Game

A fix of a fix. How meta is that?
## Changelog
🆑
fix: Monkey revolutionaries will not be considered for a promotion into
Head Revolutionaries unless they're the only candidates... again.
/🆑
2023-06-15 19:57:02 -06:00
MrMelbert
438decaa8f Fixes chem master replace beaker runtime (#76062)
## About The Pull Request

I think it was rather silly to put this call in this proc, but I'm not
about to audit it

`new_beaker` can be `null` if this proc is being called to drop the
current beaker, so this needed a sanity check

## Why It's Good For The Game

Runtime

## Changelog

🆑 Melbert
fix: Runtime from ejecting beakers from a chem-master
/🆑
2023-06-15 19:52:32 -06:00
MrMelbert
39cd229574 Welding gas masks make the same sound "pwah" sound as welding hardhats (#76068)
## About The Pull Request

Welding gas masks make the same sound effect that welding hardhats use

## Why It's Good For The Game

I could've sworn they used to but I think I'm being Mandela Effected.

Provides some nice audio feedback that's similar to existing items. 

## Changelog

🆑 Melbert
sound: Welding Gas Masks make the same sound effect as Welding Hard Hats
when they toggle
/🆑
2023-06-15 19:51:34 -06:00
A miscellaneous Fern
9bdda1015b Positronic brains now correctly reject ghosts who have used the suicide verb (#76039)
## About The Pull Request

What it says on the tin. It was always meant to work like this, but the
code checked whether the positronic brain had the suicided trait rather
than the ghost trying to enter it.

Also removes a redundant check to see if the brainmob is qdeleted.
## Why It's Good For The Game

It's a bugfix.
## Changelog
🆑
fix: positronic brains now correctly reject the ghosts of people who
have used the suicide verb
/🆑
2023-06-15 19:43:56 -06:00
John Willard
b5975bd915 Unit tests now catch decals in walls/space (#75189)
## About The Pull Request

Unit tests will now fail if there's a decal in a wall or open space
turf. Open space turf could be limiting to mappers but I don't think it
makes sense for decals (like dirt, glass shards, etc) to be floating
around in space in the exact same spot.

If there's a decal you want to put in space, decals have a
``turf_loc_check`` var that will bypass this.

**Important note: This is not changing existing behavior. Decals already
delete themselves when they spawn in these incorrect locations, we're
just avoiding them from spawning in the first place.**

### Changes I made

- Ash flora are now lava immune, rivers spawn after flora does, so I
decided that it would be easiest (and more flavorful) to have them be
lava-immune rather than to not have them spawn at all.
- Decals can now be spawned in non-turf locations. This is currently
done by mail, which can give you bones as part of the mail. Currently it
will just delete itself instead.
- Trading Card button is now on the same tile as their display, which
now uses an offset. Before it would spawn it on the tile next to it,
which could be a wall in some instances.
- Mirrors now have floating movement type. They ARE floating since
they're attached to the wall, and it prevents them from burning up due
to lava in the Pride ruin.
- I also added a broken mirror subtype because I thought the icon_state
check was terrible.
- Bubblegum called ``DestroySurroundings`` several times on the same
thing, I hopefully fixed some of that. Their charge ability also
registered ``COMSIG_MOB_STATCHANGE`` despite ``/datum/action`` doing it
by default, so I fixed that too.

## Why It's Good For The Game

Decals in walls is already a bad idea, but currently all it does is
delete it on Initialize. It would be better if we ensured they wouldn't
spawn in the first place.

## Changelog

🆑
fix: Lava will no longer burn 6 of the mirrors in pride ruin
fix: Lava will no longer burn plants that spawn in them.
/🆑
2023-06-15 16:39:22 -07:00
tattle
351e4c923c Split drinks into different files (#75898)
Splits our nearly 4000 and 1600 line long files. Mostly just moves the
glass appearances into their own files.
2023-06-15 04:03:42 +00:00
jimmyl
b0aa56e4cb ""Fixes"" Siliconnect log UI updating (#75890)
i dont think borg logs are static why are they in static update
changes them to normal ui update
2023-06-15 04:00:58 +00:00
carlarctg
8dc89dcacf Heretic runes are easier to click through and have a windup for clearing them (#75868)
Heretic runes no longer have every single transparent pixel set to 1
alpha, to make it easier to click on objects.

Clearing heretic runes with mansus grasp takes 0.4 seconds of standing
still, to prevent you from accidentally clearing it in combat.

Added code for effect remover element to use a windup if set.
2023-06-15 03:56:30 +00:00
Ghom
2bb4dfe76c Expanding the Experimental MODsuit Bepis Node with three new modules. (#75801)
## About The Pull Request
So, I've had this idea to make a contribution to the Bepis feature with
some modsuit stuff. The gimmicky stuff is ok and a good way to even out
the better content since it has game of chance design it has (you can
find those disks in space anyway so...). However, the Experimental
MODsuit node feels very underwhelming right now, compared to how big
that feature is.

This PR adds three MOD modules to the Experimental MODsuit node, plus
two more:
- Magneto Charger: While the Modsuit is activated, each step the user
takes will charge the installed power cell by a tiny bit, enough to
sustain a standard modsuit of generic slow speed with only a few, easy
modules installed. It won't work in zero G, while flying, pulled by
someone else, on a conveyor belt, riding a vehicle or crawling on the
floor, though.
- Recycler: It collects (most) garbage and casings off the ground and
recycles them into material sheets that can be dispensed on an adjacent
location or storage with with Middle Mouse Button. Doesn't clean debris,
and scuffed because most trash doesn't yield material anyway.
- - It also has two subtypes, unbound from the node: one that dispenses
riot foam darts and can be found on the black market, and another that
dispenses the more innocuous foam darts, rarely found in maints.
- Shooting Assistant: A configurable module. On Stormtrooper mode, it
will give the user a faster fire rate (the double tap trait) at the cost
of accuracy. On Sharpshooter mode, it will improve the user accuracy and
make their shots ricochet against walls at least once (if the hit atom
allows that, that is, e.g. lasers don't ricochet against iron walls), at
the cost of movement speed. Both modes also prevent the user from dual
wielding guns.

To make the Stormtrooper mode stackable with the poor aim quirk and
refrain from making a new trait for the sharpshooter mode, the gun
spread code in gun.dm has also received a little refactor and cleanup.
Also, it's been tested.

## Why It's Good For The Game
The Experimental MODsuit node is quite shabby and could use something
extra to make it more appealing to MODsuit enjoyers.

Also doubles down as a small addition to the black market and maint
loot, and code cleanup, since gun code gives off some garbled vibes.

## Changelog

🆑
add: Expanded the Experimental MODsuit Bepis node with three new
modules: Magneto Charger, Recycler and Shooting Assistant.
add: Added a Riot Foam Recycler module to the black market, as well a
more innocuous version as maint loot.
/🆑
2023-06-14 23:00:05 -04:00
Andrew
baaf4f24cd Named barrels (#75976)
![dreamseeker_qLlw7wAl94](https://github.com/tgstation/tgstation/assets/3625094/747f61a0-533f-4cc2-ac61-2901d2d3afb4)

## About The Pull Request

Barrels are nice stationary reagent containers, but it's hard to use
many of them because they're non-transparent and to see the reagents
with science glasses, you need to open the lid.

Now you can name barrels to not mistake them.

## Why It's Good For The Game

You don't need to open the barrel to figure out what you're going to get
from the tap.

## Changelog

🆑
qol: You can name barrels with a pen now, changing its icon
/🆑
2023-06-14 19:32:08 -07:00
FlufflesTheDog
c69454c0c8 Fixes pipenet gasses not being gc'd (#76041)
## About The Pull Request
Fixes a small bug that slipped by a couple days ago that made
trillionth-of-a-mole gasses stick around in pipes and canisters. This
restores to behavior to what it was no more than a week ago, and gas
analyzers will still show 0 moles for a decent while before a gas is
fully removed.
## Why It's Good For The Game
Fixes #76034
get that plasma out of my air tank
## Changelog
🆑
fix: VERY small amounts of a gas (<0.0001 mol) in pipenets will once
again be fully removed
/🆑
2023-06-14 17:24:56 -06:00
Brett
702a1c02aa Re-add missing categories to externally formatted log files (#76051)
## About The Pull Request
Currently externally-formatted log files (handled by rust-g) do not
include categories. This seems erroneous, and causes a discrepancy
between the internal and externally formatted files as external
formatting only seems to add the timestamp and some newline handling.

Currently:

![image](https://github.com/tgstation/tgstation/assets/10467687/a8979eca-833a-4c44-9d0b-82b9925ddde4)

With this PR:

![image](https://github.com/tgstation/tgstation/assets/10467687/eeeb87ee-3395-4ecc-b97c-ec35f965eac0)


## Why It's Good For The Game

Resolves a disparity between external and internal formatting made
evident by #75972.
## Changelog
🆑 bobbahbrown
server: Fix log categories being erroneously excluded from log files.
/🆑
2023-06-14 22:06:48 +02:00
Hatterhat
7554538aca Fixes MOD plasma core recharge amount from plasma sheets (#76022)
## About The Pull Request
title

## Why It's Good For The Game
this looks like it was erroneously done and has kneecapped recharging
off sheets in the process
## Changelog
🆑
fix: MOD plasma cores' improved recharging from sheets (2000 charge up
from 1500) is back again.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-06-14 21:50:55 +02:00