Commit Graph

8936 Commits

Author SHA1 Message Date
SkyratBot
4c804e8215 [MIRROR] Fixes riding vehicles on tables and lying on beds [MDB IGNORE] (#25374)
* Fixes riding vehicles on tables and lying on beds (#80053)

## About The Pull Request
Fixes #80027. My bad.
EDIT: Also fixes #80050.

## Why It's Good For The Game
See the issues above.

## Changelog
🆑
fix: Fixed an issue with the offsets of ridden vehicles on tables, and
another when buckled to a bed.
/🆑

* Fixes riding vehicles on tables and lying on beds

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-12-02 09:06:02 -05:00
SkyratBot
f40c5a5102 [MIRROR] psyker echolocatione improvementa [MDB IGNORE] (#25380)
* psyker echolocatione improvementa (#80042)

## About The Pull Request
psyker echolocation cooldown time has been reduced from 2 to 1.8 seconds
psyker heads no longer render an overlay of not having eyes
psyker echolocation rendering has been reworked to hopefully not crash
the game anymore when theres many psykers

## Why It's Good For The Game
these changes make psyker better

## Changelog
🆑
qol: psyker echolocation cooldown time has been reduced from 2 to 1.8
seconds
fix: psyker heads no longer render an overlay of not having eyes
/🆑

* psyker echolocatione improvementa

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-12-02 08:55:36 -05:00
SkyratBot
148c205512 [MIRROR] Fixes crafting menu incorrect use of reagents [MDB IGNORE] (#25382)
* Fixes crafting menu incorrect use of reagents (#80046)

## About The Pull Request
- Fixes #79931

The way crafting menu handles reagents is an abomination. It manually
updates its volume, rather than calling the correct procs for it and
also "clones" reagents like... it does some weird stuff that can leave
the beaker in an inconsistent state let's just leave it at that.

Now we properly consume the reagent via `remove_reagent()` proc and
don't do stuff manually so it works now. Also added some sanity checks
such as `>=` and not simply `>` when checking for reagent volumes and
also checks if we actually found a container in our surroundings which
could runtime if none was available

Also for my sanity please don't tell me to change any single letter var
names here. This whole file is crawling with them so let someone else
get their GBP from that

## Changelog
🆑
fix: crafting food or any other items that require reagents will not
leave behind blank reagents. That and properly updates the holder those
reagents are stored in
/🆑

* Fixes crafting menu incorrect use of reagents

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2023-12-02 08:54:53 -05:00
SkyratBot
44a94b071a [MIRROR] Sign Language action now properly updates its background when toggled [MDB IGNORE] (#25376)
* Sign Language action now properly updates its background when toggled (#80052)

## About The Pull Request

Changes two lines in `sign_language.dm` such that it actually updates
its background when toggled, rather than only when forced to update by
some other signal.
## Why It's Good For The Game

The Sign Language action has a visual distinction for whether it's
active or not, but it did not update this properly when toggled. This
fixes that problem.
## Changelog
🆑
fix: Sign Language action properly toggles between an active/inactive
background again.
/🆑

* Sign Language action now properly updates its background when toggled

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2023-12-01 18:33:23 -06:00
SkyratBot
910673ef35 [MIRROR] Certain ID trims affect secbot response [MDB IGNORE] (#25360)
* Certain ID trims affect secbot response (#79980)

## About The Pull Request

A prior refactor of how ID cards worked removed (without commentary?)
the long-previously-existing behaviour that Agent IDs cause a
subtraction from the level of suspicion that security bots see from you.
I have not only restored this behaviour, but applied it to a handful of
other ID cards (based on trim).

When Beepsky looks at you he will make an assessment based on various
factors controlled by his bot settings:

- If Beepsky is set to check ID and your identity is concealed (you
appear as "Unknown") add 4 points.
- If Beepsky is set to check Weapons and you are holding a restricted
weapon without a permit, add 4 points.
- If Beepsky is set to check Weapons and you are wearing a restricted
weapon on your belt or back without a permit, add 2 points.
- If Beepsky is set to check records and you are set to Arrest, add 5
points.
- If Beepsky is set to check records and you have some other
non-innocent status, add 2 points.
- If you are wearing a wizard's hat, add 2 points.
- If you are not human, add 1 point (police are racist).
- If you are loyalty implanted, subtract 1 point.

Factors added or restored in this PR based on your ID now are:

- If you are wearing an Agent ID, subtract 5 points.
- If you are wearing a Cybercop ID, subtract 1 point.
- If you are wearing a Centcomm ID, subtract 10 points.
- If you are wearing an Admin ID, subtract infinite points.
- If you are wearing a prisoner ID, add 1 point.
- If you are wearing a Syndicate or Battlecruiser ID, add 5 or 10
points.

If Beepsky is _emagged_ then he will view all targets as having 10
threat, regardless of their ID card.
If you complete this process with >4 points he will attempt to arrest
you.

The upshot of my changes are:
Wearing an Agent ID card will cause Beepsky to overlook the fact that
you are carrying a gun in your hands without a permit, unless you are
also set to arrest.
Wearing an Agent ID card will cause Beepsky to overlook the fact that
you are set to arrest, unless you are carrying a gun in your hands.
Wearing a prisoner ID while not human will cause Beepsky to try and
arrest you if you have a weapon on your belt or back (if he is set to
care about weapons permits or unless you have one).
Wearing a centcomm ID card will cause Beepsky to treat you as above the
law in basically all circumstances, up to and including when you try and
beat him to death. He will simply sit there and take it.

In addition to this, this information forwarded to AI is now also
available to player secbots upon examine.
Players can't become secbots very easily because you can't upload PAIs
into them or enable their sentience in the panel, but it sometimes
happens via random event or admin intervention.

## Why It's Good For The Game

I think this was removed by mistake? It wasn't included in the changelog
and everyone I talked to thought it was still true.
It's a fun feature which makes agent IDs marginally more useful.
I think Beepsky and pals judging you based on your job makes sense, even
if it is mostly applied to fluff roles.

## Changelog

🆑
add: Agent IDs once more trick Beepsky into treating you more leniently.
add: Prisoner IDs make Beepsky treat you somewhat more suspiciously, as
do Syndicate IDs. Wearing a Centcomm ID means that Beepsky is aware that
you are above the law.
add: Player-controlled security bots can view someone's assessed threat
level by examining them.
/🆑

* Certain ID trims affect secbot response

* Quick pass on Skyrat based ID_trims

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com>
2023-12-01 18:33:13 -06:00
SkyratBot
cd91d1530f [MIRROR] xenobio shield gens can be rebuilt + some code cleanup and changes [MDB IGNORE] (#25353)
* xenobio shield gens can be rebuilt + some code cleanup and changes (#79887)

## About The Pull Request
shield gens now have a board, cant be printed
![2023-11-22
06_49_55-Window](https://github.com/tgstation/tgstation/assets/70376633/0041d965-98ae-40a1-b36a-fd6ce15f4720)

you may now screw open an unlocked shield generator to access its sole
wire, the wire that toggles it on and off
you may also after that crowbar it if it isnt active to deconstruct

converted things to balloon alerts and some cleaning

## Why It's Good For The Game

these things just vanishing if destroyed is dumb and wiring allows for
shenanigans

## Changelog
🆑
fix: shield wall gens actually use power now
qol: shield wall gens may now be rebuilt and use some balloon alerts,
and have wiring
/🆑

---------

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

* xenobio shield gens can be rebuilt + some code cleanup and changes

---------

Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
2023-12-01 17:06:28 -05:00
SkyratBot
8cdfc4103d [MIRROR] Fix typo in spacer negative moodlet [MDB IGNORE] (#25359)
* Fix typo in spacer negative moodlet (#80036)

## About The Pull Request

Fixes a typo in one of the spacer quirk's negative moodlets.
## Why It's Good For The Game

Typos aren't good.
## Changelog
🆑
spellcheck: fixed typo in one of spacer's moodlets
/🆑

* Fix typo in spacer negative moodlet

---------

Co-authored-by: Verm <32827189+Vermidia@users.noreply.github.com>
2023-11-30 20:10:46 -06:00
SkyratBot
faddb632cc [MIRROR] turns triple ai mode into a station trait [MDB IGNORE] (#25346)
* turns triple ai mode into a station trait (#79995)

## About The Pull Request
removes the triple ai mode secret and makes it into a station trait

## Why It's Good For The Game
it seems to be an interesting way to spice up the gameplay of a given
round

## Changelog
🆑
add: turns triple ai mode into a station trait
/🆑

* turns triple ai mode into a station trait

* Set the weight to 0

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com>
2023-11-29 23:39:33 -06:00
SkyratBot
d6bbd24873 [MIRROR] Fixes the Nebula Station Trait strength scaling to be properly capped at its maximum value [MDB IGNORE] (#25335)
* 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.
/🆑

* Fixes the Nebula Station Trait strength scaling to be properly capped at its maximum value

---------

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-11-29 16:02:33 -05:00
SkyratBot
4857762f21 [MIRROR] Fix bitrunning triggering claustrophobia [MDB IGNORE] (#25327)
* 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
/🆑

* Fix bitrunning triggering claustrophobia

---------

Co-authored-by: Tim <timothymtorres@gmail.com>
2023-11-28 22:47:05 -06:00
SkyratBot
3d074e7ede [MIRROR] Standing on structures such as crates, tables and bed will now look like it. [MDB IGNORE] (#25324)
* Standing on structures such as crates, tables and bed will now look like it.

* Update deployable.dm

* Makes this modular

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-28 19:37:33 -05:00
SkyratBot
3dfded5c3a [MIRROR] Standardizes formatting in vv_do_topic() [MDB IGNORE] (#25316)
* Standardizes formatting in vv_do_topic()

* Update human.dm

---------

Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-28 21:45:11 +00:00
SkyratBot
d820b57d7f [MIRROR] ARDS and AN code cleanup [MDB IGNORE] (#25313)
* ARDS and AN code cleanup

* Update flesh_eating.dm

---------

Co-authored-by: Higgin <cdonny11@yahoo.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-28 21:36:17 +00:00
SkyratBot
35cf52a0f9 [MIRROR] The Inversenning : Superior Healing Medications [MDB IGNORE] (#25315)
* 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.

* The Inversenning : Superior Healing Medications

---------

Co-authored-by: MGOOOOOO <97645027+MGOOOOOO@users.noreply.github.com>
2023-11-28 15:40:54 -05:00
SkyratBot
b8e738cb6b [MIRROR] [NO GBP] Fixes footsteps runtimes, part 2 [MDB IGNORE] (#25319)
* [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
/🆑

* [NO GBP] Fixes footsteps runtimes, part 2

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-28 15:40:07 -05:00
SkyratBot
290dd34fd0 [MIRROR] rolls Heavy Sleeper into the new All Nighter quirk, which carries extra... baggage [MDB IGNORE] (#25298)
* 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)
/🆑

* rolls Heavy Sleeper into the new All Nighter quirk, which carries extra... baggage

* Adds back heavy sleeper

* Reorganizes these quirks

* Fixes same icon being used for both quirks

---------

Co-authored-by: wesoda25 <37246588+wesoda25@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-28 02:34:03 -05:00
SkyratBot
e23d563544 [MIRROR] makes verb callbacks not execute if the original client disconnected [MDB IGNORE] (#25287)
* 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>

* makes verb callbacks not execute if the original client disconnected

---------

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-11-28 00:06:44 -05:00
GoldenAlpharex
c49e0959c9 Removes the radiation storm from the Radioactive Nebula station trait (#24839)
* Removes the Radioactive Nebula station trait from the station traits pool

* Updates the station trait so that it simply never runs the radiation storm

* Tweaks this slightly

* Lets admins toggle the storms on/off

* Revert "Lets admins toggle the storms on/off"

This reverts commit c4a56e2701ee8ad44e0cd922ac731c239a01f1e1.

* Let's try this again

* Update negative_traits.dm

* Update negative_traits.dm

* Update negative_traits.dm

* Update negative_traits.dm

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-27 17:48:18 -05:00
SkyratBot
b520b27165 [MIRROR] Fixes Ranged Guardians from Shooting while Incorporeal [MDB IGNORE] (#25275)
* 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.
/🆑

* Fixes Ranged Guardians from Shooting while Incorporeal

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-27 01:02:48 -05:00
SkyratBot
71c1528fe3 [MIRROR] Fixes a hard del in overlay lighting, fixes inconsistent light overlays [MDB IGNORE] (#25270)
* 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
/🆑

* Fixes a hard del in overlay lighting, fixes inconsistent light overlays

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-27 03:21:50 +00:00
SkyratBot
c3eade54a0 [MIRROR] Fixes Poly not saving data between shifts [MDB IGNORE] (#25263)
* 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.
/🆑

* Fixes Poly not saving data between shifts

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-26 11:29:14 -06:00
SkyratBot
95ce0145fc [MIRROR] Gives Cargo its own departmental wires [MDB IGNORE] (#25232)
* 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.
/🆑

* Gives Cargo its own departmental wires

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-25 15:25:54 -05:00
SkyratBot
f035b1673d [MIRROR] Fixes cyborged heretics seeing influences [MDB IGNORE] (#25241)
* 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.
/🆑

* Fixes cyborged heretics seeing influences

---------

Co-authored-by: Nathan Singer <supernovaa41@gmx.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-25 15:25:01 -05:00
SkyratBot
2182516ba9 [MIRROR] Babyproofs rad nebula against ADMINS! [MDB IGNORE] (#25242)
* 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
/🆑

* Babyproofs rad nebula against ADMINS!

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2023-11-25 13:17:39 -05:00
SkyratBot
4927d33e27 [MIRROR] Fixes a footsteps runtime [MDB IGNORE] (#25240)
* 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
/🆑

* Fixes a footsteps runtime

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-25 13:17:29 -05:00
SkyratBot
f654cb78c8 [MIRROR] Gives roundstart prisoners a key memory of what their crime is [MDB IGNORE] (#25205)
* 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
/🆑

* Gives roundstart prisoners a key memory of what their crime is

---------

Co-authored-by: die_amond <58376695+dieamond13@users.noreply.github.com>
2023-11-23 19:03:11 -05:00
SkyratBot
ed67fa1a29 [MIRROR] Final optimizations for reagent holder [MDB IGNORE] (#25216)
* Final optimizations for reagent holder

* Modular

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-23 19:02:57 -05:00
SkyratBot
2c8f0151a4 [MIRROR] Adds INTJ skillchip [MDB IGNORE] (#25223)
* 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.
/🆑

* Adds INTJ skillchip

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-23 19:02:29 -05:00
SkyratBot
15a2ca6a84 [MIRROR] [NO GBP] Makes dart insert projectile var modification code slightly better [MDB IGNORE] (#25209)
* [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.

* [NO GBP] Makes dart insert projectile var modification code slightly better

---------

Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
2023-11-23 15:22:20 -05:00
SkyratBot
8269acedc3 [MIRROR] fixes gutlunch udder production & some general changes to the udder [MDB IGNORE] (#25208)
* 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
/🆑

* fixes gutlunch udder production & some general changes to the udder

---------

Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
2023-11-23 13:07:28 -05:00
SkyratBot
b0a9ec864c [MIRROR] [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things [MDB IGNORE] (#25191)
* [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things

* Update tackle.dm

* Update living.dm

* Update tackle.dm

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-22 19:13:26 +00:00
Bloop
1abcefe710 [MISSED MIRROR] Bumps rust-g to 3.0.0 (#76663) (#25186)
Bumps rust-g to `3.0.0`  (#76663)

## About The Pull Request

You can read more about what's introduced in the last four versions
here:

https://github.com/tgstation/rust-g/releases

The immediate effects for us are as follows:
Closes #76549
Closes #76514
Closes #76502
Closes #76490
Closes #76398
Closes #76798
Closes #76921
Closes #76934
Closes #76950

the updates to install rust_g.sh were to cut down on the copypasta code
and prevent desyncs.

🆑
code: The currently operating rust-g version on a live server is posted
to places like the runtime.log, in the same place where the revision
information and any applicable test merges already were.
/🆑

Co-authored-by: san7890 <the@san7890.com>
2023-11-22 00:16:11 -05:00
SkyratBot
57af94957d [MIRROR] Different pen types have unique behavior when used in foam darts. [MDB IGNORE] (#25183)
* 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
/🆑

* Different pen types have unique behavior when used in foam darts.

---------

Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
2023-11-21 22:54:35 -05:00
SkyratBot
5540632705 [MIRROR] Reworks transformation sting to be temporarily in living mobs, forever in dead mobs [MDB IGNORE] (#24002)
* Reworks transformation sting to be temporarily in living mobs, forever in dead mobs

* Modular updates

* Recaches the icons generated in the `changeling` unit test

* Pain

* More tweaks

* Disable unit test

* Let's see if we can pass test temporarily

* Makes transformation sting unobtainable more cleanly

* Unit test

* Cursed proc

* Kill the unholy copy pasta

Seriously this stuff is just awful. This is not maintainable.

* test this

* Update comments

* Fixing the screenshot test, maybe?

* grrr

* Update changeling.dm

* Attempt to fix this nonsense

* Update changeling.dm

* Update changeling.dm

* Update changeling.dm

* Update dna.dm

* Fixes it?

* Screenshot test

* Update _traits.dm

* Update _traits.dm

* Fix this

* Update dna.dm

* Update dna.dm

* Hmm

* This proc needs a new name

* I want to scream but I have no mutant parts

* Fix

* Update species.dm

* Update species.dm

* Update species.dm

* Update species.dm

* Some touch ups

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Jolly <70232195+Jolly-66@users.noreply.github.com>
2023-11-21 13:21:37 -05:00
SkyratBot
533127589c [MIRROR] Fixes cursed/bad luck initializing with the wrong amount of incidents [MDB IGNORE] (#25162)
* 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
/🆑

* Fixes cursed/bad luck initializing with the wrong amount of incidents

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-11-21 02:23:58 -05:00
SkyratBot
3fa98bd2cc [MIRROR] Adds UPSIDE_DOWN movetype for negative gravity / makes Atrocinator affected by less things [MDB IGNORE] (#25155)
* 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>

* Adds `UPSIDE_DOWN` movetype for negative gravity / makes Atrocinator affected by less things

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
2023-11-20 17:10:59 -05:00
SkyratBot
192c62a13e [MIRROR] Floor Viruses Return Unique IDs [MDB IGNORE] (#25152)
* 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
/🆑

* Floor Viruses Return Unique IDs

---------

Co-authored-by: Thlumyn <102194057+Thlumyn@users.noreply.github.com>
2023-11-20 11:35:44 -05:00
SkyratBot
6627b1a9c1 [MIRROR] Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa) [MDB IGNORE] (#25100)
* Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa)

* UpdatePaths

* Modular, cleanup, porting parrot commands into the new system

* makes poly slightly less of a dick

* Update parrot.dm

* Update parrot.dm

* Update tgstation.dme

* Revert "Update tgstation.dme"

This reverts commit a8b40c4aba524c271db02c271089664649dea1eb.

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-20 09:57:34 -05:00
SkyratBot
9c78808284 [MIRROR] Nukes radio.dmi, adds inhands for somewhat relevant items. [MDB IGNORE] (#25147)
* 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.
/🆑

* Nukes radio.dmi, adds inhands for somewhat relevant items.

---------

Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
2023-11-20 09:05:49 -05:00
SkyratBot
5da40bd0b3 [MIRROR] [READY] The Cyberbrawlening: Augment your Unarmed Strikes for Maximum Damage [MDB IGNORE] (#25139)
* [READY] The Cyberbrawlening: Augment your Unarmed Strikes for Maximum Damage

* Update parts.dm

* Update parts.dm

* Update bodyparts.dm

* Update head.dm

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-20 00:16:27 -05:00
SkyratBot
67ddf1507c [MIRROR] Make sign language unaffected by the Social Anxiety quirk's direct speech effects [MDB IGNORE] (#25140)
* 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.
/🆑

* Make sign language unaffected by the Social Anxiety quirk's direct speech effects

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2023-11-19 23:41:21 -05:00
Bloop
17cba0dccf [MISSED MIRROR] Puts all traits in the globalvars file + CI Testing (#79642) (#25131)
* Puts all traits in the globalvars file + CI Testing (#79642)

Fixes #76349

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

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

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

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

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

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

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

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

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

* Update tgstation.dme

* Update _traits.dm

* Comment these out for now

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-19 18:12:03 -05:00
SkyratBot
c34cd6fd3d [MIRROR] More code compression for reagent holder [MDB IGNORE] (#25121)
* 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
/🆑

* More code compression for reagent holder

* Update hemophage_organs.dm

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 16:05:16 -05:00
SkyratBot
8f3d1036c8 [MIRROR] Refactor icemoon wolves into basic mobs and add taming + pack behavior [MDB IGNORE] (#25126)
* 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>

* Refactor icemoon wolves into basic mobs and add taming + pack behavior

---------

Co-authored-by: Ephemeralis <Ephemeralis@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-11-19 14:56:37 -05:00
SkyratBot
0edf5c1f70 [MIRROR] Fixes a race condition in mutations code [MDB IGNORE] (#25116)
* 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
/🆑

* Fixes a race condition in mutations code

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 17:14:48 +00:00
SkyratBot
b557e89855 [MIRROR] More standardization for ghost notifications (READY) [MDB IGNORE] (#25104)
* 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.
/🆑

* More standardization for ghost notifications (READY)

* Modular

* Update outpost_of_cogs.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 11:25:32 -05:00
SkyratBot
558c466b81 [MIRROR] Splits placeontop proc [MDB IGNORE] (#25103)
* 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>

* Splits placeontop proc

* Update brass_spreader.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: san7890 <34697715+san7890@ users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 10:28:18 -05:00
SkyratBot
c045caebae [MIRROR] Fixes sending stuff to "Old" Chat [MDB IGNORE] (#25088)
* 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.
/🆑

* Fixes sending stuff to "Old" Chat

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-18 10:13:39 -05:00
SkyratBot
b237afa316 [MIRROR] Mob attackedby / check_block refactor, plus some minor cleanup of attack_x procs [MDB IGNORE] (#25079)
* Mob `attackedby` / `check_block` refactor, plus some minor cleanup of `attack_x` procs

* Fix the race condition

* Modular

* Ooops

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-18 02:19:31 -05:00
SkyratBot
293f12a424 [MIRROR] Fixes some fried food exploits [MDB IGNORE] (#25083)
* 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?
/🆑

* Fixes some fried food exploits

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-18 02:03:18 -05:00