Commit Graph

4838 Commits

Author SHA1 Message Date
D4C-420
91505224f5 Being drunk gives a chance to harm yourself when working out (#79548)
## About The Pull Request
Working out when sufficiently drunk (around the amount that drunk
resilience begins to heal you) now has a scaling chance to cause you to
fail and harm yourself (similar to how clumsy works) when using an
exercise machine

None of these values are final and I'm open to making the failure it
more severe (bone wounds)

## Why It's Good For The Game
Partly cause its funny, partly cause realism, really cause I felt like
expanding on interactions for the exercise equipment

## Changelog
🆑
add: Being sufficiently drunk now has a chance to cause working out to
fail and harm you
/🆑
2023-11-07 13:56:07 +01:00
san7890
1a62886a8b Fixes Shaving Beards + Mirror Code Improvement (#79529)
## About The Pull Request

Fixes #79519

Basically we did a lot of assumptions that we really shouldn't do in the
whole magical mirror framework (like having a boolean value for magical
mirrors, what?). Anyways, I just made the UX experience a lot better
when it came to bearded persons with feminine physiques to easily shave
off their beard with an additional confirmatory prompt + details as well
as keeping the nature of the magical mirror (giving you a swagadocious
beard due to magic™️) intact.
## Why It's Good For The Game

There was a lot of convoluted code that skipped through the quality
filter checks (it was me i think) so let's both make the code far easier
to grasp as well as ensure that people who legitimately acquire beards
and wish to keep them, keep them.

We were also doing some FUCK shit on attack_hand and the like
(overriding a FALSE return signal to return TRUE is not what we should
be doing there)- so that's also cleaned up.
## Changelog
🆑
fix: Both magic mirrors and regular mirrors are far better at respecting
the choice of the beard you wish to wear (within reason, of course).
/🆑
2023-11-06 23:34:53 +01:00
Rhials
3c7005a37c Converts some notify_ghosts args to bitflags, multilines all notify_ghosts calls (#79320)
## About The Pull Request

This helps clean up my favorite helper proc in the whole codebase,
`notify_ghosts()`.

The notify_suiciders, ignore_mapload, and flashwindow args are GONE.
They have been replaced with the notify_flags bitflag argument. This was
intended to make deadchat announcements a bitflag argument too, but
those got reverted right before I originally wanted to submit this PR.

The on-screen popup now shows the notification body when you hover it
with your mouse again. The format is now `[notify_ghosts message] --
[click action (orbit/jump/play)]`

Every single `notify_ghosts()` call has been changed to multiline format
and has been given trailing commas. Pretty!
## Why It's Good For The Game

Cleans up a proc that is very popular and going through a lot of changes
at the time.

Allows for further flexibility when this proc inevitably gets tweaked or
improved. 12 -> 10 args is an improvement, and it doesn't impact the
helper's flexibility at all.
## Changelog
🆑 Rhials
code: The notify_ghosts proc has been cleaned up. Please report any
abnormal changes in deadchat notification behavior.
qol: The on-screen deadchat popups now contain the notification blurb
when hovered with your mouse again.
/🆑
2023-11-05 15:26:50 -08:00
san7890
c4c1b17643 Reworks Rolling Table Code (#79490)
## About The Pull Request

Should be a good first step towards reducing the behavior declared in
#79411, but since I couldn't get a good reproduction case, we'll have to
live with that.

Basically, our SIGNAL_HANDLER procs were using some way outdated
arguments, causing some bits of the code to seem rather... illogical (we
thought the old location was the new location??? it's wack). Anyways, I
just gutted most of it and kept the same overall behavior that only
lives on signals rather than doing weird stuff with proc overrides.
## Why It's Good For The Game

If it doesn't root out the cause of the aforementioned issue, it should
be far easier to figure out what the true issue is (when we get a proper
reprod. case) beyond having weird arguments on our signals.
## Changelog
I'm not certain if this fixes the issue but if it does, yippie. Worst
case scenario it's a good code improvement- neither of those are good
enough to show to players.
2023-11-04 03:51:35 +01:00
Tim
aebebc824e [NO GBP] Fix fireplace smoke particles to work properly with all directions (#79417)
## About The Pull Request
I wasn't aware we had different icon dir states for fireplaces. Although
it seems that no icon state exists for `NORTH` dir fireplaces.

Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/24626

## Why It's Good For The Game

![dreamseeker_35EfgeAdLH](https://github.com/tgstation/tgstation/assets/5195984/79d5b463-5f45-4067-a586-ccfc85b70146)

## Changelog
🆑
fix: Fix fireplace smoke particles to work properly with all directions
/🆑
2023-11-02 13:39:08 +00:00
lizardqueenlexi
08274f8343 Basic Constructs: Proteon (#79425)
## About The Pull Request

Last one! Makes proteons into a basic mob, and completely removes the
simple_animal construct supertype.

Proteons aren't really designed to be played by a player, instead being
a nuisance mapped into various ruins and traps. As such, they don't
really have any special abilities. Instead, the hostile variant has a
somewhat unique behavior. They'll viciously attack anyone who comes
close, but, being frail little cowards, if a proteon takes damage it
will immediately flee. After a random period between 2 and 4 seconds, it
will stop fleeing and come back for more.

In addition to this, a few other things have been done, some only
related because they're in files I touched.
- Moved proteons from the file for the Cleric's Den to their own file in
the basic constructs folder. Given that they're used in several
different ruins, they might as well not just be in the file for one.
- Simple constructs have been cut, and with them the procs for
healing/repairing on shades and cult structures, as those are no longer
needed.
- Because I was touching it anyway, I touched up the file for trap
structures. They no longer use any one-letter variable names, and time
is now universally listed in seconds rather than deciseconds in that
file.
- I removed a completely unused blackboard key from ice demons. This is
something I noticed due to a change I ended up not making while working
on proteon AI, but I figured I might as well leave it gone.
## Why It's Good For The Game

Kills the last three simple construct typepaths, bringing us to the
destined 19 removed. Huzzah!

The proteon AI routine should inject a little spice into fighting
proteons, especially for the unprepared - unlike many mobs, they won't
stand there and take it if you decide to fight back, but you can never
safely ignore them when they run away. They still aren't particularly
dangerous.
## Changelog
🆑
refactor: Proteon constructs now use the basic mob framework. The ones
encountered in ruins are a bit flightier now, and will briefly flee
combat if attacked - only so that they can return and menace you again
soon after. Please report any bugs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-01 17:07:20 -06:00
ArcaneMusic
3722399baf Steam vent tooltips (#79420)
## About The Pull Request

Steam vents now have basic tooltips to show you how to toggle them
in-hand. I've also added a tooltip to show you to use the wrench to
deconstruct.

## Why It's Good For The Game

Improves the clarity of an otherwise common maintenance object, both in
regular use as well as when deconstructing.

## Changelog

🆑
qol: Steam vents in maintenance now have tooltips.
/🆑
2023-10-31 21:50:45 -07:00
deathrobotpunch
6c749cf9a3 Holobarrier toggle removal (#79293)
## About The Pull Request
this PR removes the PENLITE holobarrier’s biometric scanner toggle
function activated by hitting the holobarrier.

## Why It's Good For The Game
This is good for the game as having the toggle is quite useless because
the only reason someone would have it up is to keep sick people out.

There is no point to turning off the biometric scanning because you may
as well have nothing put up in the first place.

This also prevents people from unknowingly turning it off allowing sick
patients to infect valuable medical staff.
## Changelog
:cl:deathrobotpunch1
del: Removed the biometric scanning toggle from the PENLITE holobarrier
/🆑
2023-10-31 17:05:51 -07:00
Pickle-Coding
15e2aa056d [NO GBP]Fixes tesla zaps. (#79398)
## About The Pull Request
Closes #79297 
Closes #79312 

Due to the new cutoff parameter being added to tesla_zap() (from
#78310), and most callers used positional arguments instead of keywords,
the zap flags was getting fed the shocked_targets list and maybe other
junk. This caused a bunch of unusual phenomena. This is fixed by using
keyword arguments.

Tesla zaps that use the grid were significantly weaker in terms of
damage than they're supposed to be. This was a byproduct of trying to
convert everything to joules and removing unnecessary power multipliers.
This is fixed by reverting the damage scaling and zap power of zap
sources that aren't based on grid. Technically this will cause the zaps
from other sources to have less power, but these tend to not be able to
put power on grid, so this wouldn't have any change other than what a
grounding rod displays. Doesn't really matter.

Logs machine explosions from zap_act. Not the most helpful log (would
take a lot of effort to add an extra parameter to pass the source), but
better than nothing.

Probably other stuff I did, lol.
## Why It's Good For The Game
Stops zap fuckery. Admins can now find the explosions when a 9GeV engine
decides to go haywire or whatever.
## Changelog
🆑
fix: Fixes tesla zaps being weird.
admin: Logs explosions from explosive zaps.
/🆑
2023-10-31 17:10:15 +00:00
necromanceranne
d1ad9b6658 Nukie Update Followup: Returns CQC to the previous price range, Core Gear kit for newbies, hat stabilizers for everyone (#79232)
## About The Pull Request

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

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

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

## Why It's Good For The Game

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

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

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

### THIS IS NOW A THREAT.

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

![2023-10-21 18 02
39](https://github.com/tgstation/tgstation/assets/70376633/5829e939-3b04-465f-a186-095ceb360bba)

adds this ruin to space ruin pool
this is a shady (as NT always is) bioresearch outpost that got fucked up
by an experiment
this has like some puzzle aspect to it since you gotta find keycards and
shit and press buttons to unlock shield gates
this ends with you fighting a heart which if you defeat, destroys the
blockade that prevents you from entering the outpost vault

also you can no longer literally just cut indestructible grilles or
unanchor indestructible windows

### new puzzle elements or something idk
variant of pressure plate that you cannot remove and it sends a puzzle
signal
cooler red puzzle doors that look very foreboding or something idk
theyre for this ruin
also puzzle blockades, which are indestructible dense objects that are
destroyed if they receive a puzzle signal
and also buttons and keycard pads for puzzles


https://github.com/tgstation/tgstation/assets/70376633/c98807ec-1e7b-49c4-a757-cdbb76a1b566



https://github.com/tgstation/tgstation/assets/70376633/9d5d9dd1-5868-44e6-a978-5ea57b30c298

stuff that throws electric shocks in a pattern, ignores insuls and only
knocks down, and no you cannot just run past


https://github.com/tgstation/tgstation/assets/70376633/5772917c-a963-48a4-a743-b0f610801d25

### enemies
living floor, it can only attack stuff on top of it and it attacks until
the victim is dead
it is invincible to all but a crowbar, and it cannot move, and it
remains hidden until a victim is in range


https://github.com/tgstation/tgstation/assets/70376633/aa1d54f6-b259-4e58-9d44-e393d2131acf

living flesh, it can replace your limbs with itself
the conditions for that are; the limb must have 20 or more brute, victim
must be alive and dismemberable, the limb may not be torso or head, or
the limb may not be living flesh
alternatively it can replace a missing limb
these are all checked with every attack
they have 20 hp
the limbs in question will sometimes act up, while passively draining
nutrition, arms will randomly start pulling nearby stuff, legs may step
randomly
limbs when detached, turn into mobs and reactivate AI 2 seconds later.
if the host is shocked, all living flesh limbs will detach, or if the
host dies they will also do that


https://github.com/tgstation/tgstation/assets/70376633/765cc99e-c800-4efb-aabe-d68817bbd7ae



## Why It's Good For The Game

ruin variety is cool i think
also the other things i added should be useful for other mappers for
bitrunning or whatever

also bug bad for that one fix
## Changelog
🆑
add: living floor, living flesh, and other stuff for the bioresearch
outpost ruin
add: bioresearch outpost ruin
fix: you may not defeat indestructible grilles and windows with mere
tools
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-31 08:15:42 +13:00
Tim
8f18b0bd8a Add smoke particles to fireplace (#79228)
## About The Pull Request
Adds some smoke particles to the fireplace while it's burning.

## Why It's Good For The Game

![dreamseeker_PyMQFJc8Gz](https://github.com/tgstation/tgstation/assets/5195984/ce35b21b-b0b0-4bc3-8b71-c359e08d72b5)
## Changelog
🆑
qol: Add smoke particles to burning fireplace
/🆑
2023-10-25 14:48:52 +02:00
carlarctg
071f6063e6 Adds charges to omens and omen smiting. Reduces omen bad luck if nobody's nearby. (#78899)
## About The Pull Request

refactor: Adds charges to omens and omen smiting rather than only being
permanent or one-use. Mirrors now grant seven bad luckers.

qol: Reduces omen bad luck if nobody's nearby to witness the funny.
(Ghosts are included in the check!)

fix: Fixed an issue where a monkey check in doorcrushing was never
actually able to pass. Also they screech now.

## Why It's Good For The Game

> refactor: Adds charges to omens and omen smiting rather than only
being permanent or one-use. Mirrors now grant seven bad luckers.

Allows for someone to get between 1-infinity omen accidents. Seriously
why wasnt this a thing before

> qol: Reduces omen bad luck if nobody's nearby.

I LOVE this quirk, but trying to do antything at all except 'Suffer
Miserably' is nigh impossible. To alleviate life a little, making it so
that you have a lesser chance of suffering misfortune if nobody's around
will be the perfect compromise. It makes life easier but doesn't
compromise funny moments.

Any client in viewrange will disable the reduction. This includes
ghosts.

## Changelog

🆑
refactor: Adds charges to omens and omen smiting rather than only being
permanent or one-use. Mirrors now grant seven bad luckers.
qol: Reduces omen bad luck if nobody's nearby to witness the funny.
(Ghosts are included in the check!)
fix: Fixed an issue where a monkey check in doorcrushing was never
actually able to pass. Also they screech now.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-25 12:39:54 +00:00
lizardqueenlexi
b65f729901 Nanotrasen basic mobs. (#78917)
## About The Pull Request

First and foremost, converts all Nanotrasen simplemobs into basic mobs.

To avoid messy and redundant code, or god forbid, making Nanotrasen mobs
a subtype of Syndicate ones, I've made Syndicate, Russian, and
Nanotrasen mobs all share a unified "Trooper" parent. This should have
no effect on their behaviors, but makes things much easier to extend
further in the future.

While most of this PR is pretty cut-and-dry, I've done a couple notable
things. For one, all types of ranged trooper will now avoid friendly
fire, instead of shooting their friends in the back. Even the Russians
have trigger discipline.

I've also created a new AI subtree that allows mobs to call for
reinforcements. I've hopefully made this easy to extend, but the
existing version works as follows:

- A mob with this subtree that gains a target that is also a mob will
call out to all mobs within 15 tiles.
- If they share a faction, mobs receiving the call will have the target
added to their retaliate list, and have a new key set targeting the
calling mob.
- If they have the correct subtree in their AI controller, called-to
mobs will then run over to help out.

Sadly, this behavior is currently used only by a few completely unused
Nanotrasen mobs, so in practice it will not yet be seen.

Finally, I've fixed a minor issue where melee Russian mobs punch people
to death despite holding a knife. They now use the proper effects for
stabbing instead of punching.
## Why It's Good For The Game

Removes 8 more simple animals from the list.

As said above, making all "trooper" type mobs share a common parent cuts
down on code reuse, ensures consistency of behavior, and makes it much
easier to add new troopers not affiliated with these groups. I expect
that I'll make pirates share this same parent next.

The new "reinforcements" behavior, though extremely powerful, opens up
exciting new opportunities in the future. There aren't many existing
behaviors that allow basic mobs to work _together_ in interesting ways,
and I think adding some enemy teamwork could be fun.
## Changelog
🆑
refactor: Hostile Nanotrasen mobs now use the basic mob framework. This
should make them a little smarter and more dangerous. Please report any
bugs.
fix: Russian mobs will now actually use those knives they're holding.
/🆑
2023-10-24 23:20:27 +00:00
OrionTheFox
8ee3e8a6ba Adds Examine hints for Railing Deconstruction (#79205)
## About The Pull Request
While railings already have contextual tips, the context requires you to
already know what tool to be holding. Would probably be helpful to know
at a glance which tool that is.


![image](https://github.com/tgstation/tgstation/assets/76465278/7626b3d9-2c18-4c82-b6e7-44423027914c)
## Why It's Good For The Game
Usability? Is that the word? IDK I noticed it was missing as I kept
hitting it with a screwdriver so I'm sure I can't be the only one.
## Changelog
🆑
qol: Railings now have Examine hints for how to deconstruct them
/🆑
2023-10-24 18:20:53 +01:00
lizardqueenlexi
9e6cbf2538 Basic skeletons (#79206)
## About The Pull Request

Turns skeletons (the simple animal version) into basic mobs. This was
another incredibly simple conversion, since skeletons don't really do
anything but walk at you and beat you to death.

Because I thought it was funny, though, skeletons will now seek out
cartons of milk and drink them. Real milk will heal them for a
significant amount, but soymilk, being false milk, will deal them
grievous injury instead! Skeletons beware... I didn't add any other
sorts of milk due to limited ability with existing AI behaviors to
identify milk containers (they actually only look for the carton items).

Other than that, I've done some flavor adjustment for skeletons' attacks
- their effects and sounds will now suit the weapon they're actually
holding - for example, skeleton templars now actually use their swords
instead of slashing you with their horrible fingers. Along with this I
gave the basic skeletons a normal slashing sound, instead of the weird,
impactless hallucination sound they used to use for some reason. I never
liked that sound.

Finally, I've reflavored the spear-wielding skeleton mobs to "undead
settlers", following the naming of the corpses dropped by snow legions
as of #76898, rather than being named after an offensive term for Inuit
people. These skeletons do, after all, appear in settlements on alien
worlds.

To enable the flavor of milk drinking, I expanded the `basic_eating`
component to allow drinking rather than eating flavor, with a different
sound and its own set of verbs. This deletes whatever they drink from,
but c'est la vie.
## Why It's Good For The Game

Ticks 6 more entries off the simple animal freeze. While skeletons are
still extremely simple, being largely-identical mobs that only exist to
beat you to death, being basic mobs should make them slightly better at
this job. Also, again, I think it's really funny that you can distract
skeleton mobs with milk, or even hurt them.
## Changelog
🆑
refactor: Hostile skeleton NPCs now use the basic mob framework. They're
a little smarter, and they also have a slightly improved set of attack
effects and sounds. They love to drink milk, but will be harmed greatly
if any heartless spaceman tricks them into drinking soymilk instead.
Please report any bugs.
/🆑
2023-10-23 23:48:22 -06:00
Jacquerel
10f194781d It is now possible to survive the Mansus (#79131)
## About The Pull Request

Fixes #79113

There were a handful of bugs with the Mansus realm, this PR fixes them.

Firstly an most importantly, a refactor to damage handling touched the
"unholy determination" effect incorrectly (and I'm not even sure why?),
causing it to damage you instead of healing you most of the time. This
damage was not avoidable, so most people would be crit shortly after
entering the area and stay there.

Secondly, some of the heretic realms were unlit. A change to when
lazyloaded template atmosphere initialises means that the bonfires were
trying to light themselves with no air. Now they do this in
late_initialize instead, giving time for air to arrive.

Thirdly, the spooky hands were runtiming when passing through transit
tiles outside of the bounds of the heretic map. They shouldn't be
effected by shuttle drag anyway, so now they aren't.

Fourthly, I removed a row of empty space at the edge of the heretic map,
just because it annoyed me slightly.

Finally, while I was touching the heretic buff I made it heal you 1/4 as
much as it originally did. This is a balance change rather than a fix,
I'll atomise it out if it is controversial but I don't really expect it
to be.
In the future I would like to come back to these and make each realm
more specific to the path, because I think we could make these both more
exciting and more characterful.

## Why It's Good For The Game

Once it is working properly, the hand dodging minigame is actually
extremely forgiving, even if you don't move very much and get frequently
hit. This means some of those hits might actually add some tension.

## Changelog

🆑
fix: You should be revived properly when entering the mansus realm
following a heretic sacrifice
fix: The buff which is supposed to heal you in the mansus realm will now
do that instead of unavoidably damaging you
balance: The mansus realm's healing buff heals for 25% as much as it did
before it was broken
/🆑
2023-10-21 13:34:57 -04:00
BlueMemesauce
9a129de703 Export scanner no longer shows shipping manifest value + manifest error changes (#78923)
## About The Pull Request

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

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

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

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

## Why It's Good For The Game

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


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

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

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

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

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-21 03:48:54 +02:00
Tim
af43f39737 Add new fitness skill and mechanics (#78922)
## About The Pull Request

![dreamseeker_9pl5F22vN3](https://github.com/tgstation/tgstation/assets/5195984/95d16788-7160-425f-8c95-07aeddb53e9f)

## New Fitness Skill
- Working out on the weight machines will require less stamina
- The exercised status effect durations are increased by the level
- The more fitness you have, the bigger your mob sprite

## Exercised Status Effect
- Boost your metabolism x2
- The max duration is determined by the fitness skill
- Uses multipliers based on a good diet and ~~steriods~~ medicine to
increase the duration
- Will convert into fitness skill xp while sleeping based on the quality
of sleep

## Weight Training Equipment
- Weight machines now drain stamina and nutrition
- Weight machines now give fitness xp
- Punching bags now drain stamina (wearing boxing gloves lowers it) and
gives a small amount of fitness xp
- Being clumsy has a chance to hurt you, but it can be overcome with
persistence. (the higher your fitness skill, the less chance of getting
injuried)

## Why It's Good For The Game
HUSTLE FOR THAT MUSCLE!!!


![dreamseeker_YFfxcRhaJE](https://github.com/tgstation/tgstation/assets/5195984/4be2c98a-b090-42fe-b3c1-3368bf586c47)

## Changelog
🆑
add: Add new fitness skill and mechanics for weight machines and
punching bags. Working out with a proper diet and good sleep will result
in massive fitness gains. As your fitness increases, so does your mass.
/🆑
2023-10-20 14:06:02 +13:00
lessthanthree
5e1b6922a5 Medical beds show correct overlay [NO GBP] (#79057)
## About The Pull Request

Update the overlay if the brakes are on at mapload

## Changelog

🆑 LT3
fix: Maploaded medical beds now have correct brake lights
/🆑
2023-10-19 22:12:34 +02:00
MrMelbert
93ec5a72f7 A comprehensive refactor / cleanup of bullet_hit and on_hit to cut out a single bad species / mob proc (#79024)
## About The Pull Request

- Refactored `bullet_act`. Adds `should_call_parent` and refactors
associated children to support that.
   - Fixes silicons sparking off when hit by disabler fire. 
- Desnowflakes firing range target integrity and cleans up its
bullet-hole code a bit.
- Cleans up changeling tentacle code a fair bit and fixes it not taking
off throw mode if you fail to catch something.
   - The Sleeping Carp deflection is now signalized 
- Nightmare projectile dodging is now signalized and sourced from the
Nightmare's brain rather than species
- Refactored how cardboard cutouts get knocked over to be less
snowflaked / use integrity
- Also adds projectile `on_hit` `should_call_parent` and cleans up a bit
of that, particularly their arguments.
- On hit arguments were passed wrong this entire time, it's a good thing
nothing relied on that.

## Why It's Good For The Game

This is cringe. 


1863eb2cd8/code/modules/mob/living/carbon/human/_species.dm (L1430-L1442)

Bullets should overall act more consistent across mob types and objects.

## Changelog

🆑 Melbert
fix: Silicons don't spark when shot by disablers
fix: Changelings who fail to catch something with a tencacle will have
throw mode disabled automatically
fix: Fixes occasions where you can reflect with Sleeping Carp when you
shouldn't be able to
fix: Fixes some projectiles causing like 20x less eye blur than they
should be
refactor: Refactored bullet-mob interactions
refactor: Nightmare "shadow dodge" projectile ability is now sourced
from their brain
/🆑
2023-10-18 23:08:13 -06:00
MrMelbert
46b4e3e733 Fixes two improper calls to ADD_TRAIT (magic mirror, robo customer) (#79072)
## About The Pull Request

`ADD_TRAIT` doesn't take a list

## Changelog

🆑 Melbert
fix: Magic Mirrors properly prevent you from being soft locked
fix: Robo customers are as robust as before
/🆑
2023-10-18 23:05:04 -06:00
MrMelbert
8ac1cab916 Fixes magic mirrors not being able to change your race (?) (#79075)
## About The Pull Request

Not sure why this exactly was happening but I just changed around some
vars and it fixed


![image](https://github.com/tgstation/tgstation/assets/51863163/2d8c3d17-593d-4df2-bb67-b18f70a73add)

Also it was assigning a qdeling datum to a mob. Bad bad bad

## Changelog

🆑 Melbert
fix: Magic Mirrors can change your race again (?)
/🆑
2023-10-18 22:50:56 -06:00
LemonInTheDark
2532911353 Adds pathmaps, refactors pathfinding a bit (#78684)
## About The Pull Request

Implements /datum/pathfind/sssp, which generates /datum/path_map

/datum/path_maps allow us to very efficently generate paths to any turf
they contain from their central point.

We're effectively running the single source shortest paths algorithm.
We expand from the center turf, adding turfs as they're found, and then
processing them in order of addition.
As we go, we remember what turf "found" us first. Reversing this chain
gives us the shortest possible path from the center turf to any turf in
its range (or the inverse).

This isn't all that useful on its own, outside of a few niche cases
(Like if we wanted to get the farthest reachable turf from the center)
but if we could reuse the map more then once, we'd be able to swarm
to/from a point very easily.

Reuse is a bit troublesome, reqiures a timeout system and a way to
compare different movables trying to get paths.
I've implemented it tho. I've refactored CanAStarPass to take a datum,
/datum/can_pass_info. This is built from a movable and a list of access,
and copies all the properties that would impact pathfinding over onto
itself.

There is one case where we don't do this, pathing over openspace
requires checking if we'd fall through the openspace, and the proc for
that takes an atom.
So instead we use the weakref to the owner that we hold onto, and hold
copies of all the values that would impact the check on the datum.

When someone requests a swarmed path their pass info is compared with
the pass info of all other path_maps centered on their target turf. If
it matches and their requested timeout isn't too short, we just reuse
the map.

Timeout is a tricky thing because the longer a map exists the more out
of date it gets.
I've added a few age defines that let you modulate your level of risk
here. We default to only allowing maps that are currently
being generated, or finished generating in our tick. 
Hopefully this prevents falling into trouble, but consumers will need to
allow "failed" movements.

As a part of this datumized pass info, I've refactored pathfinding to
use access lists, rather then id cards directly. This also avoids some
dumbass harddel oppertunities, and prevents an idcard from changing mid
path.

Did a few things to the zPass procs, they took args that they did NOT
need, and I thought it'd be better to yeet em.

If you'd all like I could undo the caching/can_pass_info stuff if you'd
all like. I think it's useful generally because it avoids stuff changing
mid pathfind attempt, but if it's too clunky I could nuke it.

Oh also I added optional args to jps that constricts how it handles
diagonals. I've used this to fix bot paths.

## Why It's Good For The Game

Much of this is redundant currently. I'm adding it because it could have
saved hugglebippers, and because I get the feeling it'll be useful for
"grouping" mobs like bees and such.
We're doing more basic mob work currently and I want to provide extra
tools for that work.


https://github.com/tgstation/tgstation/assets/58055496/66aca1f9-c6e7-4173-9c38-c40516d6d853

## Changelog
🆑
add: Adds swarmed pathfinding, trading accuracy for potential
optimization of used correctly
fix: Bots will no longer take diagonal paths, preventing weirdo looking
path visuals
refactor: Refactored bits of pathfinding code, hopefully easier to add
new pathfinding strategies now
/🆑
2023-10-17 23:52:54 -06:00
Emmett Gaines
96d7e9c690 Invisibility refactor (#78908)
This adds a tracker for sources of invisibility and a priority system. I
needed this for another thing so I'm doing this first since it touches a
lot of code. As for the bugs fixed in the changelog, it's only what I
noticed while going through everything and there's likely a few more
things fixed with this. This should be testmerged for a while, I'll
bring this out of draft when it feels safe.

🆑
admin: Invisimin can now be used on mobs that are already invisible,
whether through temporary or permanent effects.
fix: Monkeyize/Humanize mob transformations no longer permanently reveal
invisible mobs if they had effects making them invisible otherwise.
fix: Objects with the undertile element that have been made invisible
through other means are no longer revealed by being uncovered.
/🆑
2023-10-17 13:07:31 -06:00
MrMelbert
7ee129be86 Revenants can use spirit boards (#79029)
## About The Pull Request

Allows Revenants to use Ouija boards. 
Cleans up some code of Ouija boards in general.
Default Ouija boards now have some more options to select. 
Admins can now VV Ouija board options. 
Adds a 1% chance for a Ouija board to be called Luigi board.  

## Why It's Good For The Game

Revenants being excluded from spirit board fun is kinda messed up, even
though they're telepaths.

## Changelog

🆑 Melbert
add: Revenants can now use Ouija Boards
add: Ouija Boards now have more options to select from by default (and
admins can VV it to even more options)
fix: Blind people are now worse at using Ouija Boards
/🆑
2023-10-17 13:06:09 -06:00
lessthanthree
7626c3bd6c Tram v6/Transport Subsystem (#78230)
Co-authored-by: Unit0016 <50649185+unit0016@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2023-10-17 10:52:38 -07:00
Bloop
847514310d Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)
## About The Pull Request

Saw this in CI.


![firefox_lCYnPMJIqm](https://github.com/tgstation/tgstation/assets/13398309/8ef309df-09b6-4096-b6aa-340b59f7446b)

~~Quick fix for it--because turrets are not mobs trying to call this
proc on them will runtime. So let's give them their own implementation
of the proc.~~ Just kidding, let's refactor faction checking entirely

## Why It's Good For The Game

Fixes an issue with basic mob AI targeting and turrets.

## Changelog

🆑
fix: basic mobs will no longer runtime when trying to check the faction
of a porta turret
refactor: faction checking is now done at the atom/movable level
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-16 17:22:44 -06:00
BlueMemesauce
626a2aedad Gives broken canisters a description (#79005)
## About The Pull Request

A torn apart canister. It looks like some metal can be salvaged with a
wrench.
## Why It's Good For The Game

It fixes a part of #79003, the rest seems like balance or qol changes. 
## Changelog
🆑
spellcheck: Broken canisters now have a description
/🆑
2023-10-15 17:02:23 -06:00
Jacquerel
cf5c1fa08c Basic Space Dragon (#78979) 2023-10-14 15:53:28 -07:00
SyncIt21
66f726dfe3 General code maintenance for rcd devices and their DEFINE file (#78443)
## About The Pull Request
The changes made can be best summarized into points

**1. Cleans up `code/_DEFINES/construction.dm`**

Looking at the top comment of this file 

0fb8b8b218/code/__DEFINES/construction.dm (L1)

One would expect stuff related to materials, rcd, and other construction
related stuff. Well this file is anything but

Why is there stuff related to food & crafting over here then?

0fb8b8b218/code/__DEFINES/construction.dm (L91-L94)

It gets worse why are global lists declared here?

0fb8b8b218/code/__DEFINES/construction.dm (L115)
There is a dedicated folder to store global lists i.e.
`code/_globalvars/lists` for lists like these. These clearly don't
belong here

On top of that a lot of construction related defines has been just
dumped here making it too large for it's purposes. which is why this
file has been scraped and it's
1. crafting related stuff have been moved to its
`code/_DEFINES/crafting.dm`
2. global lists for crafting moved to
`code/_globalvars/lists/crafting.dm`
3. Finally remaining construction related defines split apart into 4
file types under the new `code/_DEFINES/construction` folder
- `code/_DEFINES/construction/actions.dm` -> for wrench act or other
construction related actions
- `code/_DEFINES/construction/material.dm` -> contains your sheet
defines and cable & stack related values. Also merged
`code/_DEFINES/material.dm` with this file so it belongs in one place
- `code/_DEFINES/construction/rcd.dm` -> dedicated file for everything
rcd related
- `code/_DEFINES/construction/structures.dm` -> contains the
construction states for various stuff like walls, girders, floodlight
etc

By splitting this file into multiple meaningful define file names will
help in reducing merge conflicts and will aid in faster navigation so
this is the 1st part of this PR

**2. Debloats the `RCD.dm` file(Part 1)**

This uses the same concepts as above. i.e. moving defines into their
appropriate files for e.g.

0fb8b8b218/code/game/objects/items/rcd/RCD.dm (L170)

1. Global vars belong in the `code/_globalvars` folder so these vars and
their related functions to initialize them are moved into the
`code/_globalvars/rcd.dm` file
2. See this proc

0fb8b8b218/code/game/objects/items/rcd/RCD.dm (L200)
This proc does not belong to the `obj/item/construction/rcd` type it's a
global "helper function" this is an effect proc as it creates rcd
holograms so it has been moved to the `code/game/objects/effects/rcd.dm`
file which is a global effect that can be used by anyone

And with that we have moved these vars & procs into their correct places
& reduced the size of this file . We can go even further

**3. Debloats the `RCD.dm` file(Part 2)**
This deals with the large list which contains all the designs supported
by the RCD

0fb8b8b218/code/game/objects/items/rcd/RCD.dm (L42)

This list contains a lot of local defines. We can scrape some of them
and reduce the overall bulkiness & memory requirements of this list and
so the following defines

```
#define WINDOW_TYPE "window_type"
#define COMPUTER_DIR "computer_dir"
#define WALLFRAME_TYPE "wallframe_type"
#define FURNISH_TYPE "furnish_type"
#define AIRLOCK_TYPE "airlock_type"
#define TITLE "title"
#define ICON "icon"
#define CATEGORY_ICON_STATE  "category_icon_state"
#define CATEGORY_ICON_SUFFIX "category_icon_suffix"
#define TITLE_ICON "ICON=TITLE"
```

Have all been removed making this list a lot more cleaner. Why? because
a lot of these are just semantic sugar, we can infer the value of a lot
of these defines if we just know the type path of the structure the rcd
is trying to build for e.g. take these 2 defines

0fb8b8b218/code/game/objects/items/rcd/RCD.dm (L13-L15)

These defines tell the rcd UI the name and the icon it should display.
Rather than specifying these manually in the design we can infer them
like this

```
var/obj/design = /obj/structure/window  //let's say the rcd is trying to build an window
var/name = initial(design.name)         //we have inferred the name of the design without requiring TITLE define
var/icon = initial(design.icon_state)   //we have inferred the icon of the design without requiring ICON define
```

And so by using similar logic to the remaining defines we can eliminate
a lot of these local defines and reduce the overall size of this list.

The same logic applies to the different modes of construction, the
following defines

0fb8b8b218/code/__DEFINES/construction.dm (L186-L192)
Have all been removed and replaced with a single value `RCD_STRUCTURE`

All these modes follow the same principle when building them
1. First check the turf if the structure exists. If it does early return
2. If not create a new structure there and that's it

So rather than creating a new construction mode every time you want to
add a new design we can use this mode to apply this general approach
every time

The design list has also now been made into a global list rather than a
private static list. The big advantage to this is that the rcd asset
cache can now access this list and load the correct icons from the list
directly. This means you no longer have to manually specify what icons
you want to load which is the case currently.

0fb8b8b218/code/modules/asset_cache/assets/rcd.dm (L8-L9)
This has lead to the UI icons breaking twice now in the past
- #74194
- #77217

Hopefully this should never repeat itself again

**4. Other RCD like device changes**
- Fixed the broken silo link icon when the radial menu of the RLD was
opened
- replaced a lot of vars inside RLD with defines to save memory
- Small changes to `ui_act` across RCD, Plumbing RCD and RTD
- Removed unused vars in RCD and snowflaked code
- Moved a large majority of `ui_data()` to `ui_static_data()` making the
experience much faster

Just some general clean up going on here

**5. The Large majority of other code changes**
These are actually small code changes spread across multiple files.
These effect the `rcd_act()` & the `rcd_vals()` procs across all items.
Basically it
- Removes a large majority of `to_chat()` & `visible_message()` calls.
This was done because we already have enough visual feedback of what's
going on. When we construct a wall we don't need a `to_chat()` to tell
us you have a built a wall, we can clearly see that
- replaces the static string `"mode"` with a predefined constant
`RCD_DESIGN_MODE` to bring some standard to use across all cases

Should reduce chat spam and improve readability of code. 

**6. Airlock & Window names**
The rcd asset cache relies on the design name to be unique. So i filled
in the missing names for some airlocks & windows which are subjective
and open to change but must have some value

**7 Removes Microwave PDA upgrade**
The RCD should not be allowed to build this microwave considering how
quickly it can spawn multiple structures and more importantly as it's a
special multipurpose machine so you should spend some effort in printing
it's parts and acquiring tools to complete it. This upgrade makes
obsolete the need to carry an
- A RPED to install the parts
- A screwdriver to complete the frame
- The circuit board for the microwave 

The most important point to note here is that whenever an RPED/circuit
board is printed at an lathe it charges you "Lathe Tax". The RCD with
this upgrade would essentially bypass the need to "Pay Taxes" at these
lathes as you are just creating a circuit board from thin air. This
causes economy imbalance(10 cr per print) which scales up the more of
these machines you make so to avoid this let's end the problem here

Not to mention people would not find the need to print the circuit board
for a regular microwave now if they have an RCD because they can just
make this microwave type making the need for a regular microwave
completely pointless.

Just build a machine frame with the RCD and complete the microwave from
there

## Changelog
🆑
code: moved global vars, lists and helper procs for construction related
stuff to their appropriate files
code: reduced overall code size & memory of rcd design list and removed
unused defines
refactor: removed a ton of chat alerts for rcd related actions to help
reduce chat spam
refactor: some airlock & window default names have changed
fix: broken icon in radial menu of rld silo link
remove: removes microwave pda upgrade from RCD. It's a special machine
so spend some time in building it rather than shitting them out for free
with the RCD. Use the RCD upgrade to spawn a machine frame instead & go
from there
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-12 19:46:41 +02:00
lessthanthree
b414387591 Remove tiered canister construction (#78909)
## About The Pull Request

In https://github.com/tgstation/tgstation/pull/66210 we removed canister
tiers, but didn't change the construction code. Currently you still have
to build an unfinished frame with 5 iron, 'upgrade' it to tier 1 with
another 5 iron, then complete it.

This combines it all into a single 10 iron recipe.

## Why It's Good For The Game

Eliminates the extra steps in canister construction, since you can't
upgrade above tier 1 any more anyways.

## Changelog

🆑 LT3
qol: Canisters can now be built in one step, no upgrading required
/🆑
2023-10-12 10:58:07 -06:00
lessthanthree
c2fb08407a Microwave upgrades: Microwave PDA charging, power cells (#78717)
## About The Pull Request

For the hard-working tradesperson who's in the middle of nowhere and
just wants to warm up their pastry-based savoury item purchased from an
overpriced vending machine, introduces the engineer themed wireless
microwave.

No more going hungry in a pinch, this variant uses changeable power
cells instead of APC power. Can be built normally or printed with a
furnishings-upgraded RCD.

The other upgrade now available: PDA charging. Upgrade the capacitors in
the microwave to add a Charge mode for your portable device!

Also cleans up microwave code a bit and adds much needed context hints
for when it's broken, dirty, etc.
Swaps a few break room microwaves to upgraded variants on mapload, adds
a microwave/donks to Birdshot, donks to Tramstation.

## Why It's Good For The Game

Slap together a semi-portable microwave with your components on hand,
have an engineering picnic in space or wherever else the day takes you.

With increased PDA drain, adding another option to charge your PDA in
common areas is useful. Microwaves are already strategically placed
around the station. Please ensure the model you're using has the
charging feature before operating.


![image](https://github.com/tgstation/tgstation/assets/83487515/22abdbea-57bf-41d8-903c-6af5b6827bed)

![image](https://github.com/tgstation/tgstation/assets/83487515/7b5d0f21-df7c-4b33-8798-7ea57c0e3561)

## Changelog

🆑 LT3
add: Introducing Nanotrasen Wave! A Nanotrasen exclusive, Waveallows
your PDA to be charged wirelessly through microwave frequencies. You can
Wave-charge your device by placing it inside a compatible microwave and
selecting the charge mode.
add: Microwaves can be upgraded to add wireless charging
add: Cell-swappable microwave for the engineer on-the-go
add: Microwave now has a wire to swap charge/cook modes
add: Furnishings RCD upgrade now includes wireless microwave
add: Tramstation and Birdshot engineering break rooms now have microwave
and donk pockets. Some microwaves come pre-equipped with wireless
charging and an upgraded cell.
fix: The microwave in the snowdin ruin is now real, not a fluff prop
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-12 00:43:10 +02:00
carlarctg
0a3e3ef322 Adds a base physical description proc to gameplay species, displays it on magic mirrors. (#78828)
## About The Pull Request

Adds a base physical description proc to gameplay species, displays it
on magic mirrors. It will give a description of not the lore of the
species but in what way they differ from base species.

Fixes a bad subtype on magical mirrors.

Magical mirrors now give the user ADVANCEDTOOLUSER and LITERACY if they
lack either of them, so monkey wizards aren't softlocked.

## Why It's Good For The Game

## Changelog

🆑
qol: Adds a base physical description proc to gameplay species, displays
it on magic mirrors. It will give a description of not the lore of the
species but in what way they differ from base species.
fix: Fixes a bad subtype on magical mirrors.
fix: Magical mirrors now give the user ADVANCEDTOOLUSER and LITERACY if
they lack either of them, so monkey wizards aren't softlocked.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-10 15:57:11 -06:00
Bloop
92a6a8e2b9 Fixes some issues with mirrors not updating mob appearance after making a selection (#78894)
## About The Pull Request

Found some bugs while doing a downstream mirror PR that's _about_
mirrors (https://github.com/tgstation/tgstation/pull/77842).

Fixed said mirror bugs so that they can come downstream in a mirror.

We've come full circle...

## Why It's Good For The Game

This PR fixes some things not updating on the mob's sprite when
selecting them in the magic mirror. Skintones and jumpsuit gender
shaping namely.

## Changelog

🆑
fix: using a magic mirror to change gender or skintone will now update
your icon properly to match your selection
/🆑
2023-10-10 15:56:49 -06:00
Tim
567063153f Add burning sound loop to bonfires and fireplaces (#78834)
## About The Pull Request
This adds a ignition sound whenever a fireplace or bonfire is initially
lit on fire. Afterwards a continuous burning loop is played. Also added
some documentation and optimized fireplaces to only `process()` when
lit.

## Why It's Good For The Game
Better consistency.

## Changelog
🆑
sound: Add burning sound loop to bonfires and fireplaces
code: Improved fireplaces to only process when lit
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-10 15:38:14 +00:00
Hatterhat
8747a621cf [NO GBP] you can hit tendrils in melee again (#78856)
## About The Pull Request
adds an `else . = ..()` to spawner's attackby check so you can just
break them with your crusher in case you need to be rid of it

## Why It's Good For The Game

sometimes you just need to melee a spawner

## Changelog

🆑
fix: Necropolis tendrils and other mining mob spawners can be hit in
melee again.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-10-08 23:20:07 -06:00
Ben10Omintrix
032419f30f ice demon basic mobs (#78539)
## About The Pull Request
ice demons are now basic mobs. they still have their behavior where they
can teleport around the player, run away from him and shoot him. they
now also have a new ability they will only use when they are on their
last legs, they will spawn weak and slow afterimage clones of
theirselves to attack the player. damaging these clones will also damage
the original ice demons. ice demons can also now be very easily
countered as they are very afraid of fires. they will run away from you
if they see u holding a lit torch/flare/welding tool and while running
away they will freeze the floors around them to try to slip u to stop u
from chasing them. ice demons now also get a new unique trophy! this
trophy will summon 2 friendly spirits that will help you kill ur target,
but these spirits will dissappear after a very short while.


https://github.com/tgstation/tgstation/assets/138636438/6a48fb15-f447-441a-91c6-48ca120dc22c



## Why It's Good For The Game
## Changelog
🆑
refactor: ice demons have been refactored into basic mbos. please report
any bugs
add: ice demons now have a unique trophy
/🆑
2023-10-08 03:04:35 +01:00
Hatterhat
0ff97e28fe Tendril Tagging - scanning necropolis tendrils with a mining analyzer updates its GPS tag (#78738)
## About The Pull Request
Makes it so that if you wave a mining analyzer over a necropolis tendril
(kinda like a geyser), its GPS tag is updated with a code for what it
spawns and a numerical designation. Unlike geyser scanning, this awards
no points, and is solely for figuring out what tendril spawns what
fauna.
<details>
<summary>Screenshots in the dropdown:</summary>


![image](https://github.com/tgstation/tgstation/assets/31829017/888f19f9-2291-4349-995a-2821e99da375)

![image](https://github.com/tgstation/tgstation/assets/31829017/d847e88e-a8ae-4a18-ae57-aed248343457)

![image](https://github.com/tgstation/tgstation/assets/31829017/d9646dad-70b6-4e92-8b5d-ce5eed873869)

Updated: now on the `structure/spawner` level, allowing it to cover
icemoon spawners.

![image](https://github.com/tgstation/tgstation/assets/31829017/73cc2972-1c34-485d-8b70-a04f44a92bcd)

Updated again: now it has an associated examine thing.

![image](https://github.com/tgstation/tgstation/assets/31829017/44027082-3672-4033-b603-de1a0c3d2af2)
</details>

Also removes the redundant `gps` variable because it got
componentalized.
## Why It's Good For The Game

I think being able to know what one of fifteen eerie signals is spawning
without having to memorize which one is spawning which thing at what
coordinate, or just vaguely going "oh so that's where the legion tendril
was today".

## Changelog

🆑
qol: Miners can now tag monster spawners (necropolis tendrils, animal
dens, demonic portals, and netherworld links) by using their mining
scanner on it, which updates their GPS tag (and/or gives them one) to
give it a numerical designation and a short identifier for what it's
spawning.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-10-07 01:22:02 +00:00
Lamb
0218d4277d adds directional helpers for empty fire axe and mech removal crowbar cabinets (#78722)
## About The Pull Request
title. it's mostly so they can be used conveniently in areas you don't
want to put fireaxes, but do want an empty cabinet for reasons.
## Why It's Good For The Game
more flexible options for mappers, more convenient than making
directional variants yourself. it's what the helper is for
## Changelog
🆑
qol: gives empty fireaxe and mech removal crowbars cabinets directional
helpers
/🆑
2023-10-06 16:10:19 -06:00
Tim
d6f79f4427 Refactor gib code to use bitflags and have documentation (#78754)
## About The Pull Request
This takes all the gib related procs:
- `gib()`
- `spawn_gibs()` 
- `spill_organs()`
- `spread_bodyparts()`

And adds heavy documentation that communicates what the procs are used
for and how the different bitflags affect them. The difference is
noticeable:

`gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)`

The code is now much more legible which is important considering it's
used in a lot of places!

Another robust change, is that we had several places in the code where
there were double negatives like so:

```
/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts)
	if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!?
		// do stuff here
```

This is a mindfuck to untangle. I inverted a lot of these parts so we
don't lose our sanity.

Last thing that was changed was a big `if()` loop in the `spill_organ()`
proc. This was refactored to just be a simple `for` loop with `continue`
statements where we needed to skip enabled bitflags. It's now shorter
and cleaner than before.

The only slight gameplay change this affects is that gibbing a mob now
guarantees to drop all items unless the `DROP_ITEMS` bitflag is
deliberately omitted. Some places like admin gib self, we don't want
this to happen.

## Why It's Good For The Game
Gib code is very old. (~15 years) People kept adding more arguments to
the procs when it should have been a bitflag initially. By doing it this
way, there is more flexibility and readability when it comes to adding
new code in the future.

## Changelog
🆑
refactor: Refactor gib code to be more robust.
qol: Gibbing a mob will result in all items being dropped instead of
getting deleted. There are a few exceptions (like admin gib self) where
this will not take place.
/🆑
2023-10-06 13:12:22 +01:00
Wallem
66a1cd6ab2 Adds The Hand of Midas, an ancient Egyptian gun. (#78699)
## About The Pull Request
Adds the Hand of Midas (HoM), a weapon for pirate captains.

This matchlock pistol is powered by gold rather than gunpowder.
If you hit someone with it, they will be afflicted with Midas Blight for
a duration of time that scales with how much gold is in your gun.
Midas Blight will slowly turn their blood into gold, and slow them down
depending on how much blood is in their system.
If you right-click on someone with the HoM, it will siphon all gold from
their bloodstream and recharge the gun, curing them of Midas Blight in
the process if they still have it.
The amount of gold you can get from people is meant to be ~1.5x as much
as you fired into them in the first place, if you get your timing right.
This way you can exponentially scale the power of your weapon if you can
hit your shots, with a limit of 30 Seconds on the Blight timer.
The siphon has a range of 2 meters, and if you miss a shot you can input
a gold coin into the gun to refill it with the same weak shot you
started with.

It's a little hard to explain in text so here's some video examples:


https://github.com/tgstation/tgstation/assets/66052067/d49238fc-beb2-4ba9-be0c-83e8a701c995


https://github.com/tgstation/tgstation/assets/66052067/34dc23e7-2b88-4ee9-bb1e-c8067a491975


https://github.com/tgstation/tgstation/assets/66052067/68a07426-ba6c-43a7-8228-132fc4b02b83

## Why It's Good For The Game
Honestly I just had the idea for the gun and thought it would be really
cool lmao.
Also because Barrel Behind the Door is one of the funniest YuGiOh cards,
the censored design is TOO GOOD.


![image](https://github.com/tgstation/tgstation/assets/66052067/7c930287-410d-43bd-8731-0f7224b9f049)
## Changelog
🆑 Wallem
add: Adds The Hand of Midas, an ancient Egyptian matchlock pistol.
/🆑
2023-10-03 22:54:48 +00:00
ArcaneMusic
2035132f3f Tweaks railings to stand and look taller (#78598)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/41715314/e905463f-6b83-4ff2-b265-7029d542301a)

This Pull request updates the sprites used by railings, including both
directional, corner, outer corner, and rail ending sprites.
Additionally, I've placed railings on the GAME_PLANE_UPPER plane, so
that visually it looks like railings in front of a player can physically
stand in front of the player.

## Why It's Good For The Game

This ports the railing sprites I did for The Wallening (tm) onto live,
providing a 3/4ths perspective sprite, in addition to the fact that
it'll help sell the height of objects by layering in a more satisfying
way.

Not to mention, I just think they're way better than current railings,
where are both ancient and super flat sprites.

## Changelog

🆑
image: Railings have had a visual update.
/🆑
2023-10-02 12:31:31 -04:00
Tim
0432e6b98c Fix water puddle runtime when washing items (#78627)
## About The Pull Request
Runtime log:

```
[2023-09-26 03:06:01.741] RUNTIME: runtime error: Cannot read null.total_volume
 - proc name: attackby (/obj/structure/water_source/attackby)
 -   source file: code/game/objects/structures/watercloset.dm,697
 -   usr: Seed-Xil (/mob/living/carbon/human)
 -   src: the puddle (/obj/structure/water_source/puddle)
 -   usr.loc: the volcanic floor (143,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface)
 -   src.loc: the volcanic floor (144,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface)
 -   call stack:
 - the puddle (/obj/structure/water_source/puddle): attackby(the hairless hide (/obj/item/stack/sheet/hairlesshide), Seed-Xil (/mob/living/carbon/human), "icon-x=18;icon-y=12;left=1;but...")
 - the puddle (/obj/structure/water_source/puddle): attackby(the hairless hide (/obj/item/stack/sheet/hairlesshide), Seed-Xil (/mob/living/carbon/human), "icon-x=18;icon-y=12;left=1;but...")
 - the hairless hide (/obj/item/stack/sheet/hairlesshide): melee attack chain(Seed-Xil (/mob/living/carbon/human), the puddle (/obj/structure/water_source/puddle), "icon-x=18;icon-y=12;left=1;but...")
 - Seed-Xil (/mob/living/carbon/human): ClickOn(the puddle (/obj/structure/water_source/puddle), "icon-x=18;icon-y=12;left=1;but...")
 - the puddle (/obj/structure/water_source/puddle): Click(the volcanic floor (144,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface), "mapwindow.map", "icon-x=18;icon-y=12;left=1;but...")
 ```

The water puddle would runtime due to not having initialized the water reagents and volume.  The error would popup whenever someone attempted to wash an item in the puddle.  

## Why It's Good For The Game
One less runtime for the codebase to worry about.

## Changelog
🆑
fix: Fix water puddle runtime when washing items
/🆑
2023-09-27 20:51:19 -04:00
Jacquerel
f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00
carlarctg
c4ac48f382 Refactored Mirrors (#77842)
## About The Pull Request

Heavily refactored mirrors to be less ass cancer 1998 code. Player
facing changes are that mirrors now use a radial menu, women can get
beards in magic mirrors, made the magic mirror 'change sex' option Woke
(it supports the 4 official genders and physique as well)

Fixed Pride Mirror teleporting you into the space on the first use. Now
it waits until you officially cancel and say 'I am Done' so you can
customize yourself to your liking.

With a change this big theres bound to be some small tidbits added here
and there (bald people get sad if they try to change their hairdo)

## Why It's Good For The Game

Bad code is bad and I need gbp and I am too hot and too tired to make a
proper description

## Changelog

🆑
refactor: Heavily refactored mirrors to be less ass cancer 1998 code.
Player facing changes are that mirrors now use a radial menu, women can
get beards in magic mirrors, made the magic mirror 'change sex' option
Woke (it supports the 4 official genders and physique as well)
fix: Fixed Pride Mirror teleporting you into the space on the first use.
Now it waits until you officially cancel and say 'I am Done' so you can
customize yourself to your liking.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-25 19:39:39 +00:00
Lamb
c570c96ebb adds crushed can, jelly doughnut, and shipping container random spawners (#78444)
## About The Pull Request
i got bored so i made some new spawners, mainly for mappers but maybe an
admin will use them too. pics here:

![image](https://github.com/tgstation/tgstation/assets/110322848/2cd121dc-6fa6-46fd-bd9f-4cab72ead9c7)

firstly, this adds crushed can spawners, for if you want a random
crushed can sprite in your map, and don't really care which it is.
if you _do_ care, however - you can set the var/random_icon field on one
of these to 0, in your copy of strongdmm. then just change the icon
state to whatever specific can design you'd like it to be (ie:
"wellcheers")
here you can see a few of them in action

![image](https://github.com/tgstation/tgstation/assets/110322848/9fa3e210-e979-42c7-8f8c-d155ca2fe9bb)

secondly, this adds doughnut, jelly doughnut, and slime jelly doughnut
spawners - pictured below
these use a weighted list based on flavor - more down to earth flavors
are more common, while more interesting and unique flavors like bungo
and blumpkin are a bit rarer.

![image](https://github.com/tgstation/tgstation/assets/110322848/31cf6677-9f4b-40d0-91f0-bcdd59803e74)

thirdly, this adds a shipping container spawner. this one uses a
weighted list so the super obvious syndi corps are rare, less obvious
ones are less rare, and regular corporate ones are common. here you can
see a few.

![image](https://github.com/tgstation/tgstation/assets/110322848/8a8731e7-f6fc-4b91-9680-5b6b93619430)
## Why It's Good For The Game
more flexibility for mappers, more dynamic spawns... what's not to love?
## Changelog
🆑
not player facing
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-09-23 20:20:49 +02:00
jimmyl
5db7992b09 basicmob clowns (#78448)
## About The Pull Request

this is a mostly 1 to 1 port of simpleanimal clowns to basicmob clowns
this means they have 1 more brain cell
and they waddle



https://github.com/tgstation/tgstation/assets/70376633/0c5f01c7-fea2-4d8c-9fc1-764c1557e1b8



## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/f92c85ea-33f2-4cf3-858f-103c0958ff97)

## Changelog
🆑
refactor: clowns are basicmobs now
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-23 14:46:11 +00:00
MrMelbert
336ff506e7 Makes some better use of passtable_on / off (#78487)
## About The Pull Request

Flicking the passtable flag has a helper to avoid accidentally
overriding passtable from another source. A few places don't use it,
which makes it plausible you're removing the flag when you shouldn't be.

So I just went through a few places I noticed setting it directly and
made it use the helper.

## Changelog

🆑 Melbert
fix: Maybe fixes some weird occurrences where you lose the ability to
pass over tables when you shouldn't, and visa versa
/🆑
2023-09-22 19:10:50 -06:00
distributivgesetz
83fb93e275 The Medal Epilogue: Engineering (And Medical) Now Gets Them Too (#78461)
## About The Pull Request

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

CE 🤝 CMO

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

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

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

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

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

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

<details>
<summary>Pictures</summary>


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


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

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

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

Sprites without funky byond scaling


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

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

</details>

## Why It's Good For The Game

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