Commit Graph

8823 Commits

Author SHA1 Message Date
GoldenAlpharex
dc0efd8d63 Fixes the Nebula Station Trait strength scaling to be properly capped at its maximum value (#79981)
## About The Pull Request
The maximum value wasn't properly taking into account the intensity
steps, meaning that it would simply keep on scaling past the expected
maximum of one hour and forty minutes that was set in the original PR.
Not really noticeable when your round doesn't really scale past the two
hours mark, but if it ends up going past that, it ends up being very
noticeable.

`maximum_nebula_intensity` is actually not intensity, but rather the
time at which the maximum intensity will have been reached, hence why
this fix had to be done in order for it to work.

I could alternatively make it so the intensity is properly
representative of the maximum intensity the nebula can reach, if that's
what we want, it would technically make the math a bit simpler to
calculate the amount of shielding will be needed to protect the station
entirely, but I opted not to just to reduce the amount of changes I
would have to do, and because it gives a better idea of how long the
scaling takes. I don't mind doing it that way if asked to, however.

## Why It's Good For The Game
Makes a maximum properly work like a maximum, so that caps can be
properly respected.

## Changelog

🆑 GoldenAlpharex
fix: The Radioactive Nebula station trait will now respect its upper
intensity cap set at one hour and forty minutes, no longer scaling past
that, as was initially intended.
/🆑
2023-11-29 18:23:07 +01:00
Ben10Omintrix
ce6f2724cd basic cats and mini kitchen helpers (#79800)
## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.


![catmouse](https://github.com/tgstation/tgstation/assets/138636438/8f146be4-c7b2-41d3-8301-734be49b5efc)

![catfish](https://github.com/tgstation/tgstation/assets/138636438/f8df54f2-9183-406d-afbd-f90f415f7f3d)

if a kitten sees you holding food, it will point at you and meow loudly
until u give it the food.
becareful when putting male cats near each other, there is a small
chance they get into a heated argument and meow loudly at each other
until one of them flees.
also added a new small cat house for cats. cats will use these homes if
u build one near them (using 5 wood planks)


![cathouse](https://github.com/tgstation/tgstation/assets/138636438/9515a78c-fdfe-461b-bad2-6b497117c694)

Chefs can craft the cake cat and breadcat. these are useful cats because
they can help the chef around in the kitchen. they will turn stoves and
grills off when food is ready, so they dont burn. and the cake cat will
help the chef decorate his donuts

## Why It's Good For The Game
refactors cats into basic mobs and gives them a deeper ai

## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑
2023-11-28 21:51:37 -07:00
Tim
d42a8c3ba6 Fix bitrunning triggering claustrophobia (#79944)
## About The Pull Request
Fixes #79226

Bitrunning while having claustrophobia would kill you after you left the
VR pod. This is no longer the case since your mind is functionally
outside of your body, which is similar to the other checks performed to
see if you are unconscious.

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

## Changelog
🆑
fix: Fix bitrunning triggering claustrophobia
/🆑
2023-11-28 20:29:00 -05:00
Ghom
837ddf7d00 Standing on structures such as crates, tables and bed will now look like it. (#79797)
## About The Pull Request
From the creator of 'cosmetic' elements such as footstep_override and
immerse...

I've made an element called elevation that nudges mobs a few pixels up
while standing on things like tables, crates and beds.

Screenshots of many clones of the same character standing on different
objects:
![the clone
army](https://github.com/tgstation/tgstation/assets/42542238/43ecdc25-f0d2-47fd-96dc-acafcf63483c)

## Why It's Good For The Game
It makes it look like the mob is actually standing on an elevated
surface.

## Changelog

🆑
add: Standing on structures such as crates, tables and bed will now look
like it.
/🆑
2023-11-28 15:44:54 -07:00
Bloop
521247110a [NO GBP] Fixes footsteps runtimes, part 2 (#79936)
## About The Pull Request

https://github.com/tgstation/tgstation/pull/79903 Fixed the most common
one, but there are still more of these runtimes it seems.


![image](https://github.com/tgstation/tgstation/assets/13398309/3574d756-d6d6-4c0a-84fa-8512f610bf8d)

This should take care of all the rest. It turns out that any one of the
step types keys in the list returned by `prepare_step()` can have `null`
values—not just the barefoot one—so we have to check for that in every
instance where we read from it.

(Shown here: the list that gets returned. Note that any one of these
turf vars can be `null`, aka these are the values that we need to
nullcheck for)


4a6d2b9297/code/datums/elements/footstep.dm (L96)

## Why It's Good For The Game

Bugfix

## Changelog

🆑
fix: fixed remaining footstep runtimes
/🆑
2023-11-28 14:47:34 -05:00
Xander3359
d17e0754cb Standardizes formatting in vv_do_topic() (#79914)
## About The Pull Request
Standardizes vv_do_topic() procs on subtypes
Mostly formatting changes
- Add a !. check for every subtype
- Add a space in between each href_list
- Standardize !check_rights(), default is !check_rights(NONE) in the
event that something isnt specified
2023-11-28 13:04:05 -05:00
MGOOOOOO
c00f7d53a3 The Inversenning : Superior Healing Medications (#79342)
Introducing new inverse reagents for existing superior healing
medications! This push includes...

**Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that
provides a decent range of benefits for plant life.

**Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that
promotes the growth of muscle during and after exercise.

**Bamethan** : Inverse of Salbutamol. Blood thinner that drastically
increases the chance of receiving bleeding wounds.

**Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug
that purges basic radiation healing chems. Also increases the severity
of radiation poisoning.

**Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage,
and slowly removes minor toxin damage.

**Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking
mess of mercury by-product which causes bursts of manic hysteria.

**Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of
all things related to carps.

This is an effort to add more variety to the existing inverse reagent
system within chemistry. Not only should this variety serve to provide
additional options for a Chemist to experiment with, they should also
broaden the possibilities for already existing strategies.
2023-11-28 14:53:09 +00:00
Higgin
26c9d37004 ARDS and AN code cleanup (#79957)
## About The Pull Request

Just cleans up some unused code in the necrosis symptom (it was supposed
to give romerol at some point? what?) and makes it so the threshold for
instant killdeath oxyloss on ARDS is a proportion of mob.maxHealth as
opposed to a static number.

## Why It's Good For The Game

Gets rid of unused code and makes it so we can adjust maxHealth without
unexpected consequences. Should probably do this in other areas like
check_passout too.

## Changelog

🆑
code: Made ARDS death check respect maxHealth.
/🆑
2023-11-28 15:07:33 +01:00
wesoda25
d847ea8737 rolls Heavy Sleeper into the new All Nighter quirk, which carries extra... baggage (#79725)
## About The Pull Request

Removes the Heavy Sleeper quirk and rolls its effects into the brand new
All Nighter! On top of the effects of sleeping longer, All Nighter gives
you permanent bags under your eyes as well as a permanent -3 moodlet.
## Why It's Good For The Game

I've been wanting for a way to get bags under your eyes for a while, I
think it'd be a fun visual aspect that can aid with RP and whatnot. I
rolled heavy sleeper into all nighter because the two are both quite
similar, and I didn't feel heavy sleeper quite justified itself on it's
own.

Here's what the bags look like currently on a variety of skin tones and
species:

![dreamseeker_Vlc4rDlHaJ](https://github.com/tgstation/tgstation/assets/37246588/9bb5ba08-f5c7-4976-9f44-8b9993e2162e)

## Room for Improvement

Currently drafting for a few reasons. looking for input on all this
stuff

- [x] bag sprites could be improved
- [x] bags don't work well on moths/grayer skin tones. cest la vie?
- [x] should heavy sleeper stay? ultimately all I want is bags here, is
there a better way of doing this?
- [x] all quirk elements are not properly applied and removed via VV (no
need for input, i can figure this out myself)

## Changelog
🆑
add: the All Nighter quirk!
remove: Heavy Sleeper (functionality has been rolled into All Nighter)
/🆑
2023-11-28 03:33:32 +01:00
Kylerace
6448fdbff0 makes verb callbacks not execute if the original client disconnected (#79964)
## About The Pull Request
currently verb callbacks still execute if the usr at the time of their
creation got deleted or had their client disconnected before they got
invoked. this can cause issues if the verb being deferred assumes usr
exists, now the callback will return instead of calling its proc if its
invoked after usr is deleted or disconnected.
## Why It's Good For The Game
less runtimes
## Changelog
🆑
code: verb callbacks will no longer execute if the original client
disconnected
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-27 16:20:28 -07:00
san7890
3339983108 Fixes Ranged Guardians from Shooting while Incorporeal (#79925)
## About The Pull Request

Fixes #79921

Otherwise, on the tin. Attack mode is for attacking, scouting mode is
for scouting. We were listening for clicking and stuff like that but it
was still failing somehow so this is le fix
## Why It's Good For The Game

You aren't supposed to shoot in this mode, only scout. 
## Changelog
🆑
fix: Ranged Guardians (Holoparasites/Power Miners/etc.) can no longer
use ranged attacks in scouting (incorporeal) mode.
/🆑
2023-11-27 11:22:13 +08:00
Bloop
f02c503911 Fixes a hard del in overlay lighting, fixes inconsistent light overlays (#79939)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/79418
Fixes https://github.com/tgstation/tgstation/issues/79345
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/25220


![image](https://github.com/tgstation/tgstation/assets/13398309/ada64f8d-32ce-4128-924a-d2711eae0d60)

The root of the issue though was an early return in `on_holder_qdeleted`
that resulted in not setting the `current_holder` to null.

I'm assuming this can also happen because `check_holder()` can
potentially set the `current_holder` back to the original parent's `loc`
(in this case, the mechanical toolbox) in the code below, after the
parent has been qdeleted.


8c0becb4f0/code/datums/components/overlay_lighting.dm (L276-L278)

Adds checks to ensure that this cannot happen. 

Edit:

On top of this, stored light sources were behaving inconsistently where
if you placed a storage item (like a backpack for instance) on the floor
and then put the flashlight inside of that, it would allow the light to
shine through. However as soon as you picked the storage item up, the
light would mysteriously vanish.

<details><summary>For simplicity's sake, the light will always get
blocked if placed inside of a storage item now.</summary>


![dreamseeker_KwOvnmEOtJ](https://github.com/tgstation/tgstation/assets/13398309/d413c6fc-dd83-4251-8a2c-f1082e911150)

</details>

## Why It's Good For The Game

Bugfix

## Changelog

🆑
fix: fixes an overlay lighting hard del
fix: flashlights placed inside of backpacks and other storage items that
were on the floor will no longer allow light to shine through
/🆑
2023-11-26 20:16:19 -07:00
san7890
3e82c97a8b Fixes Poly not saving data between shifts (#79922)
## About The Pull Request

Screwup in #79762 (b251b9dbb0)

This definitely worked two months ago I have no clue when this check got
swapped around.

## Changelog
🆑
fix: Poly should now remember phrases between shifts.
/🆑
2023-11-26 17:42:29 +01:00
LemonInTheDark
1d6533c525 Bumps compile to 515 (#79134)
## About The Pull Request

LSP supports it, let's GOOOOOO
I've removed the 515 tests since they're stable, alongside the libcall
wrapper. left the rustgcall wrapper cause yaknow memes
Just removed all the 515 and 514 particular define wrappers. gaming

## Changelog
🆑
server: Minimum compile version has been bumped to 515. clients still
support 514 but we're gonna start using 515 restricted features for
serverside now.
/🆑

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2023-11-25 21:03:29 -08:00
Time-Green
ffa554b1ed Babyproofs rad nebula against ADMINS! (#79904)
Fixes #79845 

Honestly this whole thing is awkward. I really don't want to block being
able to force traits under any conditions, but admins keep forcing it on
icebox which just kills everyone. This blocks nebula's storm specificaly
from running on planetary maps

🆑
fix: Fixes nebula killing everyone when forced by an admin on icebox
/🆑
2023-11-25 06:39:40 +01:00
Nathan Singer
f47378a80d Fixes cyborged heretics seeing influences (#79868)
## About The Pull Request

They simply weren't being removed from the influence list

Fixes https://github.com/tgstation/tgstation/issues/79510
## Why It's Good For The Game

cyborgs aren't supposed to see these things
## Changelog
🆑
fix: Fixes cyborged heretics seeing influences.
/🆑
2023-11-25 06:37:41 +01:00
Bloop
f7eb3956a2 Fixes a footsteps runtime (#79903)
## About The Pull Request

Tin. Fixes the following runtime:


![image](https://github.com/tgstation/tgstation/assets/13398309/e4cd087f-3c6e-49f7-aaa4-2a91ca1b9a79)

Which happened because `barefoot_type` can potentially be null if
`turf.barefootstep` is null.


![Code_KnExLVOSD4](https://github.com/tgstation/tgstation/assets/13398309/1b3c97d5-500b-4d3d-a104-8dac7071fae0)

This results in trying to access `GLOB.barefootstep[null]`, which
results in a runtime, which prevents the `play_fov_effect()` from
executing.

## Why It's Good For The Game

Less CI failures, and fixes a bug.

## Changelog

🆑
fix: fixes a runtime in footstep code that would prevent the fov effect
from playing to nearby mobs
/🆑
2023-11-25 04:15:54 +01:00
Rhials
21a101bf31 Gives Cargo its own departmental wires (#79912)
## About The Pull Request

Gives Cargo its own area wires, instead of having them use the same wire
layouts as the Service areas.
## Why It's Good For The Game

Back when the original PR (#52563) was made, cargo was a weird subset of
"quartermaster" areas that must have just been swept into service. I
looked into it and to my surprise cargo just wasn't ever mentioned in
it. When the QM areas were converted to cargo areas, there weren't any
cargo wires so they probably just inherited the service wires and were
forgotten about?

Now, with the QM being a head and cargo being a more defined department
than ever, it shall receive the distinction of being called "its own
department" in the worst way possible -- by giving it its own wires.
## Changelog
🆑 Rhials
qol: Gives Cargo areas its own wire layout, instead of having it use the
same wires as Service areas.
/🆑
2023-11-24 15:23:07 -07:00
Jacquerel
ab5b06fadc Adds INTJ skillchip (#79902)
## About The Pull Request

Adds a new skillchip, it lets you taste food by examining it.

![image](https://github.com/tgstation/tgstation/assets/7483112/666ab42e-2918-43e5-835c-99c71a552325)
This has all of the effects of tasting food (various moodlets based on
quality and food type) and can also trigger food allergies if you have
them, however it does not consume the food nor give you any nutritional
benefit.
You can buy it from a vendor or sometimes it spawns in maintenance.

## Why It's Good For The Game

The players are constantly clamouring for more additions to our most
loved and useful feature, skill chips.
<details>


![intj](https://github.com/tgstation/tgstation/assets/7483112/58de56aa-b4bc-48fc-8c22-fa9c7a74314b)

</details>

## Changelog

🆑
add: A new skill chip can be found in maintenance or purchased from the
vendor, allowing you to experience food in new and exciting ways.
add: Abductors also have access to this incredible power, simply using
their genius level brains.
/🆑
2023-11-24 10:44:08 +13:00
SyncIt21
464ba0af94 Final optimizations for reagent holder (#79862)
## About The Pull Request
Yup this is the last time I'll lay hands on `holder.dm` after 2 rounds
of code compression the file was still over 2000 lines long so now the
next best thing to reduce it is organizing procs into logical files,
that and even more proc removals. As you can see we are still able to
reduce code size even further

**1. Removes & merges `expose_multiple()` proc into `expose()`**
Th only difference between these 2 procs is that `expose()` uses all
reagents inside the holder whereas `expose_multiple()` uses a select few
reagents. We can just add a 4th parameter to `expose()` that will accept
a list of reagents thus achieving the same results and that was done
reducing overall code


**2. Removes `conditonal_update()` proc & `on_update()` proc**
The proc `on_update()` definition is empty and no reagent was overriding
it and as a result `conditonal_update()` that calls this proc is also
functionally useless therefore both of these procs were removed reducing
overall code

**3. Finally splits `holder.dm` into logical files under the folder
`code/modules/reagents/holder`**
- `holder.dm`: this is the still the file for core functionality it's
just now moved into this new folder. Added comments to group procs under
separate categories for easy readability.
- `mob_life.dm`: contains reagent code for metabolizing reagents and for
handling stasis
- `reactions.dm`: all code for reagents reacting inside the holder
- `properties.dm`: procs for editing/reading the volume, temperature,
ph, purity properties of reagents inside the holder, also for reading
its taste description
- `ui_data.dm`: all code for displaying & interacting with reagent data
via UI

## Changelog
🆑
code: removes & merges `expose_multiple()` proc into `expose()` proc
inside reagent holder
code: removes `conditonal_update()` proc & `on_update()` proc inside
reagent holder and reagent
refactor: Reagent code has been trimmed and split into multiple files.
report bugs on github
/🆑
2023-11-23 11:17:01 -08:00
Y0SH1M4S73R
c670e5d921 [NO GBP] Makes dart insert projectile var modification code slightly better (#79886)
## About The Pull Request

Ninja told me that I shouldn't use a signal to get the variable
modifiers that a dart insert applies to its projectile. When I asked if
using a callback passed as an initialization param was okay, Potato told
me it was better.

## Why It's Good For The Game

Less code smells.

## Changelog

No player-facing changes.
2023-11-23 18:01:34 +01:00
jjpark-kb
d2291631f5 fixes gutlunch udder production & some general changes to the udder (#79893)
## About The Pull Request
When the ranching PR came out (we love it downstream), there seemed to
be an issue-- the gutlunches would produce milk instead of the miner's
salve that the code said it would. I looked into it and realized that
some of the code would not take into consideration if the udder already
had a preset reagent to create.

I've changed some of the arguments for the procs to be called override
instead, which will be empty. If you want something that functions
similarly to the udder but want it to produce something else and not
care about creating a new udder, you can just use the override when
attaching the component; otherwise, leave it blank for milk (or whatever
kind of reagent the udder you want will produce).

Additionally, gutlunches not only did not produce miner's salve, but
with the special ores, it did not produce any of the additional
reagents. This was fixed by just adding a return TRUE at the end of the
normal udder.


![image](https://github.com/tgstation/tgstation/assets/55967837/c13676d7-7b05-4007-8786-744bfcb70673)

![image](https://github.com/tgstation/tgstation/assets/55967837/3edf912e-49c5-4931-853f-7fc463b17852)


Perhaps it is out of scope (if it is too extreme, please let me know),
but I have changed the probability 95 to not produce milk to a var
instead, which means you can have udders that are more prone to
producing their milk reagent. 95 is still technically the default, but I
have made it 5 in a more readable manner (as in you have a 5 percent
chance to get milk every 2 seconds if the udder has it's required food
type, if any).
## Why It's Good For The Game
Some of this PR is fixes-- we wanted certain behaviors that were not
happening and so I fixed that. Other parts of the PR are for, in the
future, if we want udders that have higher/lower chances to produce its
milk reagent.
## Changelog
🆑
fix: gutlunches now produce miner salve instead of milk, as well as the
other reagents if fed the correct ore
/🆑
2023-11-23 17:54:39 +01:00
die_amond
bbc7e0096b Gives roundstart prisoners a key memory of what their crime is (#79881)
## About The Pull Request
Says it on the tin, roundstart permabrig prisoners a key memory so they
can remember what crime they committed.

![image](https://github.com/tgstation/tgstation/assets/58376695/325dbd36-bc24-43ea-8f64-1fcf5d613e5f)
## Why It's Good For The Game
Prisoners typically remember why they are locked in a jail forever.
Also, if you have the "random" crime selected in your preferences,
sometimes you can forget what crime you committed if you missed it at
the start of the round.
## Changelog
🆑
qol: gives roundstart prisoners a key memory of what their crime is
/🆑
2023-11-23 17:47:39 +01:00
necromanceranne
ef52047274 [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things (#79721)
## About The Pull Request

### Tackling Outcomes

Tackling now determines success based on outcome categories. These are
derived from the typical attacker/defender roll that would have
previously determined the outcome on its own. A negative roll results in
a negative outcome, a positive roll a positive outcome, and a result of
exactly 0 resulting in a neutral outcome.

The result of your roll are then passed along to the relevant proc to
determine severity. The derived roll is multiplied by 10 (or -10 for the
negative roll to get a positive value to roll with). Then we see if our
final roll fits a severity bracket. Negative outcomes will roll to
determine their outcome, and potentially could roll a less severe
outcome than what our first roll would suggest.

For positive outcomes, the defender's melee armor reduces the severity
of the outcome.
For negative outcomes, the attacker's melee armor improves the potential
outcome and at least prevents more severe backlash. It'll still be
negative, you can't move from a negative outcome to a positive outcome
just from good armor.

Most of the outcomes are fairly similar to the current outcomes, but
with the inclusion of staggering one or both parties to make the
subsequent potential grabs _stickier_, if that makes sense.

Neutral is now a mutual stagger, but also the tackler being left
upright. It's effectively net zero.

### Blocking

Blocking is checked on impact, and results in a neutral outcome if the
defender successfully blocks. This means our tackler isn't too severely
impacted from an unsuccessful tackle

### Additional Changes

Your arms ``unarmed_effectiveness`` now contributes to the attack mod
and defense mod of tackles. For humans tackling humans, this often
results in a net neutral result. But if you have a better arm, or the
tackle target has worse arms, this can alter the outcome significantly.

Any tackler with the trait TRAIT_NOGUNS (like bezerkers, Sleeping Carp
users or the very unlikely chance ninjas are tackling while wearing
their armor) gains a bonus to their tackles.

Any suit that prevents shove knockdowns grants an attack bonus, and not
just riot armor. This now includes Mk.1 Swat suits, the ones from the
SWAT crate in cargo.

Settlers are vulnerable to tackles, much like their dwarf cousins.
They're also just as bad at tackles.

Security lockers come with gripper gloves, and the sec vendor has 5 sets
of gripper gloves as standard items. They also have a +1 skill bonus.
This should encourage people to use tackling a bit more without having
to always seek out the best gear to accomplish the task. (particularly
since security is inherently pretty good at tackling with the outcome
changes).

The HoS gets a pair of gorilla gloves in his garment bag. If he wants
them.

The shove slowdown is now a new status effect, Staggered. This is just
better functionality overall. Any instance of adding the shove slowdown
now makes our target staggered.

## Why It's Good For The Game

Tackling is a bit outdated, to say the least. Not much content has been
added for a while that isn't strictly meme content. With these changes,
tackling should be slightly more nuanced, considering elements such as
unarmed effectiveness, the presence of martial arts, and actually
properly checking block rather than notionally checking block. There is
also more opportunity to protect yourself from tackle outcomes, both
positive and negative.

It also should be a little fairer to be on the receiving end of tackles
if you have taken the time to layer up defenses against it. Attackers
often overwhelmed defenders due to numbers favoring attackers more than
defenders.

Closes some really outdated design that was resulting in some really
bizarre behaviour with regards to layered defenses against attack not
having the same meaning against tackles, if only because it was looking
for the wrong things and not even the correct parts of what it was
looking for. Namely, blocking and shielding.

The inclusion of more gripper gloves and a good outcome from using them
will hopefully incentivize people to consider tacking as a useful tool,
if a bit risky still due to the splat mechanics.

## Changelog
🆑
balance: Judo Joe, archnemesis of Maint Khan, has begun re-airing his
midnight infomercials shilling his extremely expensive Tackle Supreme
Judo Karate Training video tapes. Unable to pass up a 'bargain',
Nanotrasen has purchased these tapes en masse. Tackling techniques have
started to improve, as well as Nanotrasen's tackling instructional
algorithms within tackle gloves.
balance: The outcomes for tackling are more equalized. It isn't as feast
or famine, and should be somewhat more controllable without becoming too
severe.
add: Blocking successfully against a tackle will force the tackle to be
a neutral outcome.
add: Unarmed effectiveness from arms now contributes to attacking with
and defending from tackles.
add: Those who refuse to use firearms (like Sleeping Carp users and
insane unholy berzerkers) are better at tackling others.
add: Riot specialized armor, and not just riot armor, now contributes
meaningfully to tackling effectiveness.
balance: MK.1 Swat Suits, the ones that come in SWAT crates, now
functions similarly to riot armor.
add: Settlers from the outer rims have noticed they aren't very good at
protecting themselves against Judo Joe's clearly discriminatory tackling
techniques.
add: Security lockers come with gripper gloves, security vendors now
sell them as standard items, and the HoS' garment bag now has a pair of
gorilla gloves. Gripper gloves have a positive skill bonus to tackling.
add: Being insane also makes you INSANELY good at tackling but also
INSANELY likely to eat shit on a whiff. DO OR DIE, BITCH.
refactor: Shoving slowdown and all its implementations now use a status
effect, Staggered.
/🆑
2023-11-22 17:36:04 +00:00
Y0SH1M4S73R
376781879c Different pen types have unique behavior when used in foam darts. (#79587)
## About The Pull Request

This PR makes the following changes:
- Refactors inserting items into foam darts into a component on items
that can be inserted into darts
- Adds the aforementioned component to pens
- Provides an inspection tip for how to modify a foam dart
- Gives different pen types specific behavior when used in a foam dart

Pens typically give a foam dart 5 brute and 50% embed chance (affected
by falloff). The following types of pens give the specified properties
(usually directly derived from the pen's stats and additional
functions):
- Red pen (and four-color pen set to red): Slightly faster dart
- Captain's fountain pen: Slightly faster dart, and 75% base embed
chance
- Sleepypen: Tries to inject its reagents into the hit mob, but doesn't
penetrate thick clothing like syringe guns do
- Energy Dagger: 35 brute, 100% base embed chance, and slightly faster
dart
- Survival Pen: Mines rocks on impact
- Fine Tip Pen (if someone somehow manages to get one): 100 bare wound
bonus and 9000 demolition modifier

## Why It's Good For The Game

Expands the emergent gameplay possibilities of using pens in foam darts.

While there are balance risks involved with traitors being able to buy
the equivalent of reusable 45u syringe shots and 35 brute bullets, you
are not likely to get your pen back once it hits its target, unless you
somehow have the recall spell and have bound the pen to it. There are
probably more TC-efficient ways to achieve comparable projectile
weaponry, but foam dart guns have an air of subtlety to them... at least
until your skin is pierced by a pointy writing implement that may also
be something more deadly. If maintainers still have balance concerns,
please let me know.

## Changelog

🆑
add: Certain types of pens now function like you expect they would when
inserted into a foam dart
qol: Examining a foam dart closely will show you how to modify it, or
what it is modified with
/🆑
2023-11-21 20:34:41 -05:00
lessthanthree
d541df5604 Fixes cursed/bad luck initializing with the wrong amount of incidents (#79846)
## About The Pull Request

Fixes cursed/bad luck always spawning with only 1 incident.
incidents_left should not have a default value for the arg, as if it's
called with null it will use the incidents_left var.

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

## Changelog

🆑 LT3
fix: Cursed/bad luck omen will now stick with the player for more than 1
incident
/🆑
2023-11-21 04:03:01 +01:00
MrMelbert
c1ed62915b Adds UPSIDE_DOWN movetype for negative gravity / makes Atrocinator affected by less things (#79785)
## About The Pull Request

Fixes #79764

I was going to tackle this issue by slamming `TRAIT_NO_SLIP_ALL` on
Atrocinator users and calling it a day, but like, that didn't feel
proper.

So I thought hey, we could just give them the flying movetype, even
though they technically aren't flying it means they're unaffected by
things that flying would make you unaffected by.

Nope, this means the mob technically "negates gravity", so no falling
and no feetsteps.

Let's try floating - this give us feetsteps but no falling upwards. 

So instead of going back to square one, with `TRAIT_NO_SLIP_ALL`, I
decided to go for the more complex route of just adding a movetype.

Hence, move type `UPSIDE_DOWN`. This covers situations where a mob would
be "floating" above the ground, but still walking. ...Negative gravity.

This means overall the Atrociator acts more as you'd expect - you don't
slip on ice, you don't trigger bear traps or mouse traps, you can walk
over railings, unaffected by conveyor belts, etc.

## Why It's Good For The Game

Makes the Atrocinator a lot more consistent with how you'd expect for it
to work.

Admittedly it is a bit niche use of movetypes, but it can possibly be
expanded to more things in the future, who knows? I applied it to mobs
on meat spikes (even though they don't move), just for proof of concept.

## Changelog

🆑 Melbert
fix: Atrocinating mobs will now behave more as you'd expect. Meaning
they don't slip on wet patches, can't trigger bear traps / landmines /
mouse traps, ignore conveyors, and can walk over tables and railings.
fix: Floating mobs are unaffected by conveyor belts, acid (on the
ground), glass tables
fix: Floating mobs won't squish stuff like roaches anymore 
fix: Fixes bear traps triggering on floating / flying mobs 
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-20 21:19:13 +00:00
Thlumyn
62ff3b7091 Floor Viruses Return Unique IDs (#79840)
## About The Pull Request

Changes the floor disease viruses so that they return unique IDs (their
typepath) instead of numeric IDs generated like normal Advanced viruses
do.
## Why It's Good For The Game

Bug reported downstream: 
https://github.com/Skyrat-SS13/Skyrat-tg/issues/24724
https://github.com/Skyrat-SS13/Skyrat-tg/issues/24643

When players make a virus with the symptoms of only Fever or Headache in
the pandemic (which are common to buff viruses), those will generate
with the same ID as gastritium or carpellosis, because the floor viruses
generated IDs like they were normal advanced viruses. If the virologist
creates a virus sample from that, it will give it the subtype of the
floor virus, and then if that sample is used to generate a healing virus
the healing virus will get the symptoms and name of the healing virus
but keep the subtype (including cure and other affects, like burping
tritium) of the floor virus.

This change makes it so that the floor viruses cant be modified in the
pandemic (trying to modify it and printing a culture tube will just make
the culture tube of the original floor virus), and so that virology
players can't accidentally create healing virus with those nasty
effects.

The typepath was used as the ID to mimic what it looks like for the
other (non-advanced) unique diseases.

If you can think of a better way to fix this, please let me know, I was
just getting tired of having to put up with burping green gas to have a
standard healing virus if the virologist wasn't aware of this bug.
## Changelog
🆑
fix: healing viruses can no longer have floor virus side effects
/🆑
2023-11-20 11:24:55 -05:00
YesterdaysPromise
f4535255c0 Nukes radio.dmi, adds inhands for somewhat relevant items. (#79792)
## About The Pull Request

Third /icon/ cleansing splinter 1. Comments on commits say all it does
pretty much.


![image](https://github.com/tgstation/tgstation/assets/122572637/6540e588-bed8-4e98-81f5-2a6f449c53c3)


## Why It's Good For The Game

Inhand for walkietalkie was requested in the project, gets rid of some
usecases of old 'gangtool', headset splitoff requested by Fazzie.
Inhands reflecting the items they are supposed to represent is nice.

## Changelog

🆑
image: Following now have unique item sprites: syndicate war declaration
radio, curator and chief beacon's, chaplain beacon.
image: Following now have unique inhand sprites: radio, export scanner,
walkie-talkie, syndicate war declaration radio, curator and chief
beacon's, chaplain beacon.
/🆑
2023-11-20 14:22:07 +01:00
_0Steven
c63b233f42 Make sign language unaffected by the Social Anxiety quirk's direct speech effects (#79809)
## About The Pull Request

Alternative title: "Make going non-verbal make you less anxious."

This is a two line change to `social_anxiety.dm` to quit out its
`handle_speech` method when user has the `TRAIT_SIGN_LANG` trait.
This stops the Social Anxiety quirk from applying its
stutters/fillers/blockers for as long as the speaker is using sign
language.
This does nothing to any of social anxiety's non-verbal effects, those
are still active regardless and entirely unaffected.
## Why It's Good For The Game

Primarily: I think giving people the choice between using anxious talk
or sign language, and thus the different hurdles inherent to both, makes
for a more interesting gameplay interaction than simply blanket-applying
the quirk's speech effects to both.

Secondarily: Social Anxiety's non-verbal penalties are entirely
unaffected. One will still get the penalties from making eye contact and
occasionally make eye contact with objects. Notably this includes the
stuttering making eye contact could get you, which still makes your
signing shaky. You're still anxious, after all.
On top of this, it still costs more to pick up Signer than Social
Anxiety allows for, and thus the change doesn't simply make the
combination free points.

Tertiarily: when one has trouble speaking verbally, non-verbal
communication can be helpful in overcoming that hurdle. This is
especially so when the trigger for said anxiety is speaking verbally in
the first place. This is part of why I was so enamoured by the
combination before a broader and, mind you, fairly needed fix to sign
language made these interact differently.
## Changelog
🆑
balance: signers no longer suffer from social anxiety's speech changes
when they go non-verbal. Other effects are maintained.
/🆑
2023-11-20 04:23:09 +01:00
necromanceranne
84cb29b23e [READY] The Cyberbrawlening: Augment your Unarmed Strikes for Maximum Damage (#79705)
## About The Pull Request

Robotics can print Advanced cybernetic arms and legs. These limbs have a
higher max health (though contribute the exact same amount to core
health as normal limbs), higher unarmed damage and higher unarmed
effectiveness than organic limbs.

In addition, Strongarm implants now respect the unarmed potential of the
limb it occupies. This means you can potentially get much higher damage
output if your arm would be capable of higher potential damage and armor
penetration. They also do additional stamina damage (1.5x punch damage)
so that you can capitalize better on unarmed combinations.

Surplus Prosthetic limbs now contribute a total of 250% of their carried
damage against overall health. With only 20 max HP, that means at full
damage, the user suffers 50 damage per limb. They also have terrible
unarmed values.

Cleans up exofabricators a touch and creates some defines for limb
values.

New Sprites 


![image](https://github.com/tgstation/tgstation/assets/40847847/96855c64-e5d4-4bfc-a508-a33a704ce3a6)

![advanced limbs
2](https://github.com/tgstation/tgstation/assets/40847847/ac8cf765-7904-4191-a79c-5b38ccf895b5)

## Why It's Good For The Game

I really want to encourage people to get involved in unarmed combat, so
I want to include some potential ways to seek out improving your unarmed
combat ability. One possibility should be robotics!

Currently, Strongarm implants are....possibly worse than unarmed
attacks? To solve that slightly, they now utilize the attacking limb's
unarmed potential as bonuses to the damage dealt as well as penetrative
power. I don't have a perfect solution for this at the moment, but at
least anyone utilizing this implant isn't unintentionally harming their
unarmed combat potency...too much.

Surplus Limbs are, once again, extremely good at taking damage and have
almost no actual negatives at the moment. I tried to resolve this in
https://github.com/tgstation/tgstation/pull/71739, but the code changes
I added have since become obsolete once again, leaving us once again
with surplus limbs acting as a health _boost_ rather than a health
_malus_. This fixes that issue once and for all, and if you have these
limbs, they're going to fucking _suck_.

## Changelog
🆑
add: The battle against Maint Khan's forces rages on in the periphery
stations of the Spinward Sector. And with it, a new breed of unarmed
warrior has emerged; the cybernetic martial artist. Nanotrasen, rather
than quell the minor maintenance civil war brewing in their sector, have
chosen to exploit this conflict to push their weapons and cybernetics
research to new heights!
add: Advanced cybernetic arms can be printed at the Robotics
exofabricator once researched. They are unlocked by researching the
Advanced Robotics Research node.
add: Advanced cybernetic arms are more durable than standard limbs, and
also have higher unarmed potential.
balance: Strongarm implants now utilize the attacking limb's unarmed
potential to determine damage and potential armor penetration. It also
does additional stamina damage (1.5x punch damage)
balance: Surplus prosthetic limbs contribute more of their carried
damage to overall health (AKA they make you actively more vulnerable to
damage), and deal less damage with unarmed attacks. Take Quadruple
Amputee at your own risk.
/🆑
2023-11-20 02:43:57 +00:00
Ephemeralis
0141f96a13 Refactor icemoon wolves into basic mobs and add taming + pack behavior (#79736)
## About The Pull Request

Ports icemoon wolves over to the basic mob framework with a bit of extra
stuff:

- Wolves call for help when attacked within a decently large radius.
Because you know, pack animals.
- Wolves can now be tamed with a slab of meat
- When tamed, wolves can be ridden like goliath mounts. Ride wolf, life
good. Pretend you're playing ARK and start shivering to death in thatch
huts for that High Roleplay experience.
- Tamed wolves have access to a bunch of pet commands (following, point
fetching, point attacking, play dead, etc) and will also defend their
owners vehemently if they're attacked.

You can probably tame multiple if you wanted to.

## Why It's Good For The Game

What part about riding wolves isn't entertaining? I don't really play
/tg/ that much so I can't argue too much about the balance implications
this might pose, but it's undoubtedly a stupid little gimmick and is
likely to be used by bored assistants and miners with too much time on
their hands.

Especially robust individuals will probably find a million things to do
with a basic mob capable of fetching, attacking on command and generally
being able to defend themselves decently well.

## Changelog

🆑 yooriss
refactor: Icemoon wolves now use the basic mob framework and should act
more intelligently, defending their pack.
add: Icemoon wolves can be tamed with slabs of meat and can be ridden as
mounts once friendly. Being rather large dogs, they also have access to
most of the pet commands you'd expect, such as fetching things, and
violently mauling people their owners point at.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-19 10:51:21 -08:00
SyncIt21
e4029ed9cd More code compression for reagent holder (#79796)
## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.

**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"

We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code

**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code

**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code


## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑
2023-11-19 10:40:09 -08:00
Bloop
f77d9a7270 Fixes a race condition in mutations code (#79829)
## About The Pull Request

One of the timers has a callback to the `modify()` proc which also
doesn't check whether the mutation owner has been deleted since the
timer began, potentially resulting in a runtime.


![image](https://github.com/tgstation/tgstation/assets/13398309/1e41c48b-2620-4473-9278-702d490871cc)

## Why It's Good For The Game

Fixes bugs

## Changelog

🆑
fix: fixed a race condition with mutations
/🆑
2023-11-19 18:08:59 +01:00
Jeremiah
bbe440b3d6 More standardization for ghost notifications (READY) (#79596)
## About The Pull Request
I'm still not satisfied with how ghost notifications work. This gives
every notification with a source (99% of all notifications, in other
words) a link to jump/orbit. Currently, notifications with "play"
interactions would only get the interact link, so jumping to the source
was pretty annoying.

It removes posting the entire message in the alert tooltip, as some got
pretty lengthy and it didn't seem to fit. To replace this, they will
always use headers

After:


![image](https://github.com/tgstation/tgstation/assets/42397676/debfce52-3627-4a43-8663-33d61d893161)


![image](https://github.com/tgstation/tgstation/assets/42397676/01f299ae-dc6a-45f8-a97a-cb2c815088b2)


![image](https://github.com/tgstation/tgstation/assets/42397676/99567376-063e-458e-af2a-2dd4306747cc)

NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference
seems to be whether it's a turf. The result shaves off some redundant
lines of code, since most-every usage of notify_ghosts uses
NOTIFY_ORBIT.
## Why It's Good For The Game
More standardization for the ghost notification system. Adds a few alert
headers that never had them. All in all, makes it easier for creators to
throw alerts at ghosts
## Changelog
🆑
qol: Nearly every ghost alert should now feature a "VIEW" button, even
those with click interaction.
del: Ghost alerts no longer show the entire message in the tooltip,
instead have been replaced with titles.
/🆑
2023-11-19 05:13:25 +01:00
Jeremiah
7a1b1fa9ad Splits placeontop proc (#79702)
## About The Pull Request
I find the proc hard to read honestly. There's no reason we can't split
this into two functions - the secondary functionality is used only once,
in reader.dmm.
## Why It's Good For The Game
Code improvement
Glorious snake case
## Changelog
N/A nothing player facing

---------

Co-authored-by: san7890 <34697715+san7890@users.noreply.github.com>
2023-11-19 04:58:31 +01:00
san7890
b251b9dbb0 Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa) (#79762) 2023-11-18 19:24:32 -08:00
san7890
eb246c21f6 Fixes sending stuff to "Old" Chat (#79819)
## About The Pull Request

This functionality was removed in #79479
(e1c6cfdce8), and we should still be
supporting the old chat anyways because it contains a plethora of useful
BYOND information that we still can really leverage (such as the
built-in profiler and stuff like that) and it's going to be painful to
do that if you have to keep spamming `fix-chat` to see OOC/ASAY while
alternating every damn time.
## Why It's Good For The Game

It's ugly but we still need it. There's a reason why we still have it.
## Changelog
🆑
fix: "Old Chat" (AKA: The old-styled non-TGUI raw-HTMLesque chat that
you might see when it prods you with the "Failed to load fancy chat!"
issue) should now get all text messages as expected.
/🆑
2023-11-18 08:48:37 -05:00
san7890
71b45e54ad Puts all traits in the globalvars file + CI Testing (#79642)
## About The Pull Request

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
## Why It's Good For The Game

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)
## Changelog

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).
2023-11-18 13:06:00 +01:00
MrMelbert
6ae59ebf52 Fixes some fried food exploits (#79789)
## About The Pull Request

I would've been content to leave these, but you guys just haaaad to
overdo it

- Plates now respect weight class of items on top
- Fried food now respect volume of existing items

## Why It's Good For The Game

These exploits are not intended and have potential and, if abused, can
severely detract from rounds.

## Changelog

🆑 Melbert
fix: Plates now respect the weight class of items on top.
fix: Fried items now respect existing volume cap.
fix: Smartfridges now don't accept bulky food items, good thing we have
none of those right guys?
/🆑
2023-11-17 23:52:22 -07:00
MrMelbert
365e50bbce Mob attackedby / check_block refactor, plus some minor cleanup of attack_x procs (#79563)
## About The Pull Request

- Deletes `spec_attacked_by`
- Elements simple/basic mob attack threshold
- There was a skeleton mob that "mimics armor" but didn't use the actual
mimicing armor thing we have, so I changed that.
- Moves `check_shields` down to the living level, renames it to
`check_block`
 - Martial art blocking is now signalized (only CQC uses it anyways) 
- Cleaned up a bit of `attack_x` procs, but not a lot. Should have an
entire PR dedicated to this .... mess.
 - Deprecates `/obj/item/melee`

## Why It's Good For The Game

Second verse, same as the first. 

- Less bad species related procs. 
- Largely brings a lot of code in line, making combat more consistent
across types.
- Makes it a lot easier to add new code relating to blocking or taking
damage.

## Changelog

🆑 Melbert
refactor: Refactored another large chuck of attack code, primarily
involving melee item attacks and non-human mob attacks. Report if you
see anything weird
fix: Pacifists clicking on simple robots or silicons no longer causes
sparks
fix: Blocked thrown batons are now properly... blocked
/🆑
2023-11-17 19:57:51 -07:00
Shroopy
bc78411eac Adds a toggle action to implant HUDs (#79777)
<!-- 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
Adds an action for all implanted HUDs to toggle them on and off. The
default state is on, and the state is toggled appropriately when the
implant is added or removed. This is done by using hud.hide_from and
hud.show_to.
<!-- 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
Quality of life change for roleplay situations where the HUD is usless
clutter.
<!-- 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. -->

🆑
qol: Implanted HUDs can now be toggled on and off with an action.
/🆑

<!-- 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: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-17 19:49:47 -07:00
lessthanthree
810569afe1 Fixes tram electrocuting law abiding crosswalk users [NO GBP] (#79780)
## About The Pull Request

Fixes the tram_pos var to actually use the tram's position when
calculating the tram's velocity.

## Changelog

🆑 LT3
fix: Tram will no longer electrocute innocent, law abiding crew trying
to use the crosswalk when there's no tram in sight
/🆑
2023-11-17 19:45:55 -07:00
Zephyr
e1c6cfdce8 Adds a Chat Reliability Layer (#79479)
## About The Pull Request

Everyone knows that chat will just eat your messages now and then, isn't
that annoying?
What if SSchat was smart enough to keep track of your messages and
notice when you didn't get one?
Well, now it can!
## Why It's Good For The Game

Chat messages poofing into the aether is bad, really bad.
## Changelog
🆑
add: Chat Reliability Layer
code: TGUI chat messages now track their sequence and will be resent if
the client notices a discrepenency
/🆑

---------

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2023-11-18 07:52:56 +13:00
Ben10Omintrix
2c21a73ed0 [no gbp] gutlunch pop control (#79772) 2023-11-17 11:04:26 -07:00
John Willard
2893b7fb97 TGUI for Safes and Secure briefcases (Safes are now a structure, too) (#79594) 2023-11-16 18:00:43 -08:00
Jeremiah
ba5ae73dac Adds more bitrunning antagonists + fixes (READY) (#79522)
## About The Pull Request
Reopened #78997
Larger patch for bitrunning that addresses a few issues.

- Two new antagonists: cyber tac and netguardian
- Quantum server emag opportunity
- Modular mob packs: Like random spawners, but for groups
- Antag spawning fixed: vdom antags now have up to a 10% chance to spawn
based on domains loaded
- Virtual domains are no longer all fullbright by default, only the
outdoorsy ones
- Actually deletes legion map file, since it was removed in #79424

<details>
<summary>images</summary>

The netguardian prime

![dreamseeker_eKi7Mhv45s](https://github.com/tgstation/tgstation/assets/42397676/099a0982-d6f8-4c93-a64c-8c7d45d9204e)


![robot_48_animation](https://github.com/tgstation/tgstation/assets/42397676/a2147195-61e6-4584-8645-56333ecd3e07)

The glitch effect - this mob is being mutated

![dreamseeker_NE4j4rCoez](https://github.com/tgstation/tgstation/assets/42397676/273892c7-e396-417b-8a9d-3709a210e3ff)

Cyber tac (t2 antagonist)
![Screenshot 2023-10-27
211732](https://github.com/tgstation/tgstation/assets/42397676/6ff79337-cb0d-4a1f-80cf-dce99a4991d5)

</details>

## Why It's Good For The Game
- Bitrunning antagonists are so incredibly rare that it's underwhelming
to play as one for the solid second they offer if you even get the role
- Bitrunners had basically no traitor route to follow, they became
assistants with black outfits

Fixes #79465

<details>
<summary>More info</summary>

Bitrunners don't have any type of traitor options. If they're made into
traitors, there's nothing bitrunner related they can do, and their
access is particularly bad so it's like they're a worse assistant. I've
coupled this with the bitrunning antagonist system, which is now
fixed.\. Bitrunners can now attempt to coax these entities to come onto
the station, however they are not given any form of allegiance for doing
so (and are quite counterable).

Previously, vdom antagonists relied on so many factors to spawn that it
basically wouldn't happen. Now, it runs on the server each time there is
a map loaded, with increasing probability as the round progresses. This
builds up the list of spawnable antagonists, of which two are new,
including an entirely new giant mech megafauna. This is the first
"megafauna-esque" basic mob in the game. Its AI is bad, it's really only
meant to be player controlled, but this does mean an admin can spawn
them. Being mech, they are very counterable with ion rifles and the
like.

Several refactors, rewrites, and overall bug fixes are included in this
PR.

Lastly, I added a framework for making bitrunner maps more random, the
modular mob spawning system, which works in conjunction with random
crate locations.
</details>

## Changelog
jlsnow301, infraredbaron
🆑
add: Bitrunning Patch 1 features a host of changes!
add: Added randomized mobs to virtual domains, which will be indicated
with a unique icon.
add: New emag interaction with the quantum server. Antags will spawn
more frequently, and they can hack themselves onto the station. You have
been warned.
add: Both living and dead players can now see which mob is going to
spawn an antagonist in the vdom.
add: Two new vdom antagonists: Cyber Tac and the NetGuardian. These
unlock at specific thresholds.
balance: You can no longer stack copies of the same ability with
bitrunning disks.
balance: Some of the disk items have been replaced with stronger
versions.
fix: You can no longer spy on crew using the advanced camera console on
syndicate assault.
fix: Fixed the spawning mechanism of virtual domain antagonists. You
should now have a chance of playing as one. This chance increases as
more domains are completed.
fix: Vdom antagonists shouldn't spawn at the end of the run any longer.
fix: The preference for vdom antagonists has been changed to factor in
the new types. Check your preferences!
fix: The quantum server will now show its balloon alerts to all
observers.
fix: Random domains should be fully random again.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-11-17 11:56:17 +13:00
SyncIt21
130b3dfa64 Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.

The following code changes can be summarized into points.

**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code

**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE

**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.

We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code

**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves  so
the while loop has been removed

## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
2023-11-16 21:44:48 +01:00
Fikou
f6b7f96190 grabs no longer trigger krav maga (#79734)
## About The Pull Request
small thing introduced with combat mode, previously you needed to click
with an empty hand to do your moves, now you can just ctrl click while
holding anything
so we stop that

## Why It's Good For The Game
holding 2 riot shields and ctrl clicking on people to kill them is funny
but stupid
also one time as warden i tried to grab my dog and i neck chopped it

## Changelog
🆑
fix: grabs no longer trigger krav maga
/🆑
2023-11-16 02:47:21 +01:00
san7890
742971675d Fixes Relay Attackers Misfire (#79731)
## About The Pull Request

Fixes #76079

Basically we were both not getting all of the args that we recieve from
`COMSIG_ITEM_AFTERATTACK` which included the very important
`proximity_flag` which tells us if the person was in range to actually
hurt us or not. This means that clicking a mob with this element with a
stack of metal from across the room would cause them to aggro, which
makes no sense whatsoever. Let's actually use that proximity check.

We listen for projectiles hitting us separately, don't worry.
## Why It's Good For The Game

It just makes no damn sense, fixes some weird ass behavior. 
## Changelog
🆑
fix: Bar Bots (and several other mobs) will no longer aggro on you if
you click on them with a "forceful" item from halfway across the room.
/🆑
2023-11-16 14:40:38 +13:00