Commit Graph

9356 Commits

Author SHA1 Message Date
MrMelbert
ff6b41aa07 Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request

- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)


![image](https://github.com/tgstation/tgstation/assets/51863163/1e70f7be-0990-4827-a60a-0c9dd0e0ee49)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`

I have manually tested many of the refactored procs but there was 200+
so it's kinda hard

## Why It's Good For The Game

Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item

This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.

If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`

This does result in some instances of boilerplate as shown here:


![image](https://github.com/tgstation/tgstation/assets/51863163/a7e469dd-115e-4e5b-88e0-0c664619c878)

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution

~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~

## Changelog

🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
2024-06-11 21:58:09 -07:00
MrMelbert
d244c86ce6 Adds Character Loadout Tab to preferences (with just a small handful of items to start) (#83521)
## About The Pull Request

Adds a Character Loadout Tab to the preference menu

This tab lets you pick items to start the round with


![image](https://private-user-images.githubusercontent.com/51863163/336254447-c5f7eefa-c44c-418d-b48e-0409bb5bb982.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTgwNDAxMjMsIm5iZiI6MTcxODAzOTgyMywicGF0aCI6Ii81MTg2MzE2My8zMzYyNTQ0NDctYzVmN2VlZmEtYzQ0Yy00MThkLWI0OGUtMDQwOWJiNWJiOTgyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjEwVDE3MTcwM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYxYWFmYjI2NDU0YjUyODg3NjBmM2VjZDg4YWQ1YjlhMThmODU3MDYyMzYwOGVmYTcxYmY2MDhjZWVmYjQ5ZTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Y0_19Gisfp4yyUmLgW2atfKyneL7POWFRKNVgNWTbEs)

This also has some additional mechanics, such as being able to recolor
colorable items, rename certain items (such as plushies), set item skins
(such as the pride pin)


![image](https://github.com/tgstation/tgstation/assets/51863163/8a085d6c-a294-4538-95d2-ada902ab69b4)

## Why It's Good For The Game

This has been headcoder sanctioned for some time, just no one did it. So
here we are.

Allows players to add some additional customization to their characters.
Keeps us from cluttering the quirks list with quirks that do nothing but
grants items.

## Changelog

🆑 Melbert
add: Character Loadouts
del: Pride Pin quirk (it's in the Loadout menu now)
/🆑
2024-06-11 17:50:12 -07:00
r3dj4ck0424
6dba3ac9e3 Adds some shuttle wreckage (Lavaland Ruin) (#83582)
## About The Pull Request
To try and figure out the map-making process, I've made a little ruin to
add to Lavaland and hopefully pique the interest of any passing shaft
miners.
![Map-Making Shuttle
Wreckage](https://github.com/tgstation/tgstation/assets/51569477/8f5d060e-ca75-487d-b1a9-5352d9310ac6)
Currently, in-game it looks something like this
![Space Station 13 2024-05-31
211713](https://github.com/tgstation/tgstation/assets/51569477/48c50b17-c871-4e6f-a987-d38de7a73030)

## Why It's Good For The Game
It's a nice bit of story for the shaft miners to come across while
blasting their way across the wasteland, with a few potential prizes
mixed with danger. At the very least, this should help increase the
variety of ruins available.

## Changelog
🆑
add: Added another ruin to Lavaland
/🆑
2024-06-11 17:08:51 -07:00
NewyearnewmeUwu
6065705ec8 Allows pacifists to use the psychotic brawling martial art, but at a cost. (#83605)
## About The Pull Request
There's a bug wherein you can use psychotic brawling as a pacifist if
you disarm, but rather than fix it I think leaning into it would be
really interesting. You get a big -20 mood debuff for 10 minutes, but
you can still harm people.
2024-06-11 13:03:21 -05:00
PowerfulAtom111
95ca5c0dcc RDS-havers now get Gibbering (#83850)
## About The Pull Request

Player characters afflicted with the RDS brain trauma now get the
gibbering language in addition to the ones they already know. the PR
looks like a webedit (it is) because i cannot clone repos because my
connection SUCKS but rest assured i tested it by just downloading it all
normally

## Why It's Good For The Game

someone who is insane may not always be able to articulate their ideas
in a way we might consider "language," either by accident or on purpose
just to show those stupid sheep. the greatest minds of the station need
to be able to speak to one another without persecution for their ideas

## Changelog
🆑 PowerfulAtom111
add: after a quick galactic meeting, insane people around the universe
can now speak gibbering to express their ideas free from the prying ears
of the walls
add: as an insane person, taking your meds deafens your ears to the holy
tongue all the other insane people are speaking
spellcheck: added a bit of text to the RDS quirk and the RDS medical
record text to highlight the insane's new abilities
/🆑
2024-06-11 07:58:03 -07:00
NewyearnewmeUwu
5edc4b054b Fixes certain quirks being erased by slimeperson cloning. (#83793)
## About The Pull Request
Certain quirks like Signer get erased by slimeperson body splitting due
to improper usage of add_unique. This should fix that.
## Why It's Good For The Game
bugs bad
## Changelog
🆑
fix: Fixes certain quirks being erased by slimeperson cloning.
/🆑
2024-06-09 14:41:27 +01:00
KingkumaArt
ed4ba0d227 Adds Atmos-themed Rebar Crossbow Ammo Types (and minor balance changes) (#83310)
## About The Pull Request

So this PR comes in two basic parts: the new ammo types and the minor
balance changes. I'll go over each separately.

**--- NEW AMMO TYPES ---** 


![image](https://github.com/tgstation/tgstation/assets/69398298/c031cf87-7bde-4a67-b5fc-109bedcece88)

-- Metallic Hydrogen Ammo: Made from Metallic Hydrogen, obviously. Has
middling damage and no dismemberment chance, but pierces through armor
and enemies like they weren't even there.

-- Zaukerite Slivers: Made from a zaukerite crystal. Does high toxic
damage, and has excellent wounding and embed chances, but lacking in
armor penetration. Also gives 1 second of blurry vision if it hits you!

-- Paper balls: Crafted from a sheet of paper. Mostly just a throwing
joke item, and 99% nonlethal like donksoft. Can be fired from a
crossbow, but also could be used if you wanted to have a snowball fight
on metastation.

-- Healium Crystal Bolts! Crafted (using menu) from the healium grenade
item. Heals 30 of brute/tox/burn, but puts who is hit by it to sleep for
three seconds, limiting its use in actual combat.

-- Supermatter Bolts: Dusts whoever you shoot it at! Absurdly
overpowered! Admin only!

-- A makeshift quiver, made from cutting a o2 tank in half, to store all
the ammo in.

**MINOR BALANCE CHANGES**

-- For some reason I thought the 357, which the traitor crossbow is a
direct competitor to, did 40 damage when making the first version of the
PR, instead of the reality of it doing 60. It's been buffed to 55
damage. (The basic engi one still does 35.)

-- I've been informed that generally, the stressed rebar crossbow isn't
ever used, as the misfire chance isnt worth the extra shot. As such, I
felt it was thematic to say that the stressing procedure involves
messing with the draw system in the fluff, and the stressed one now
takes half as long to rack.

**OTHER CRAP**

-- The rods now drop themselves if you shoot them at a wall. Hopefully.
-- Fixed the the non-bare wound chance on the traitor crossbow not being
increased from the base version.
-- Has a nice electronic discharge noise on firing.

## Why It's Good For The Game

I'm very happy with the reception of the rebar crossbow, and felt that
given it was an engi weapon at heart, giving it some engi-related
ammunition would fit it very well (and also have a good reason for
making zaukerite besides selling it.) The paper balls were more just so
the crew could able to shoot their buddies with it and not maim them.

As for the balance, I feel the tot crossbow being department restricted
is already a strong factor in it being infrequently seen, and if someone
is lucky enough to roll traitor in a job slot, it's a shame if their
job's items aren't worth it. The stressed variant is a similar case, and
I hope it's enough of a buff to encourage its use.

## Changelog
🆑 WebcomicArtist
add: Added zaukerite (high damage/embed, low AP) and metallic hydrogen
(High AP and piercing, but low embed) crossbow ammo for the rebar
crossbows
add: Added healium crystal ammo for the crossbow as well, which heals
whomever you shoot it at.
add: Added admin-only supermatter crossbow bolts that dust you, because
why the hell not.
add: Added non-harmful paper balls. Can be shot from a crossbow, or
thrown at co-workers.
add: Added a quiver made from cutting an o2 tank in half, to hold it
all.
image: added sprites for all the above.
balance: Traitor Engineer Crossbow ammo now does 55 damage instead of
45, to make it compete with revolver.
balance: Stressed Rebar Crossbow now has a shorter delay required to
rack it, but can shoot you in the face on misfire.
fix: fixed rebar crossbow shots not dropping items on hitting walls
fix: fixed traitor crossbow having worse wound chance than the base one
sound: added new crossbow firing sound effect

/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2024-06-09 02:06:26 +00:00
Afevis
129283d01c Spooky element fixes (#83795)
fixes the mood event not being applied, found in #83741

🆑 ShizCalev
fix: The spooky element will now apply the spooked mood event when
someone is spooked.
fix: Fixed spookers getting a popup message when spooking mobs not
actively controlled by a player.
/🆑

also a minor grammar fix for the name of spooky skeletons.
2024-06-08 19:26:03 -04:00
carlarctg
16dd887143 Adds a chat message for fishing in a chasm with a normal and rescue hook (#83781)
## About The Pull Request

Title, warns you if you have anormal hook and gives you a heads up it
might work otherwise.

## Why It's Good For The Game

Everyone knows 'fish in chasm to get body', but not many people know
'you can ONLY use the rescue hook to get body'. This clarifies that! It
reduces misinformation and confusion.

## Changelog

🆑
qol: Adds a chat message for fishing in a chasm with a normal and rescue
hook, to clarify that only rescue hooks can drag up corpses.
/🆑
2024-06-08 19:23:16 -04:00
Afevis
d5990c31d2 Implements some unused mood events into their relevant phobias. (#83796)
Implements some unused mood events found in #83741

🆑 ShizCalev
fix: Seeing heretical stuff while having the heresy phobia will now
apply the heresy mood event.
fix: Seeing skeletons while having the skeleton phobia will now apply
the spooked (by skeletons) mood event.
/🆑
2024-06-08 19:19:03 -04:00
Afevis
9e11a5c71d Getting surgically cut open while conscious will now give you the "THEY'RE CUTTING ME OPEN!!" surgical mood event. (#83797)
Implements an unused mood event found in #83741

🆑 ShizCalev
fix: Getting surgically cut open while conscious will now give you the
"THEY'RE CUTTING ME OPEN!!" surgical mood event.
/🆑
2024-06-08 19:18:55 -04:00
Rhials
862a029cfa Adds a few more pulsar star station trait reports (#83591)
## About The Pull Request

This adds some more station-trait dependent Pulsar Star reports, much
like the "Clown Planet" report triggered by the bananium shipments
trait.

For those of you not up to speed - When pulsar star (no meaningful
threat report is provided) rolls, and a relevant station trait is
active, the generic report is replaced with one pertaining to that
trait.

It's better to just check the code changes to get a full picture, but
I'll give some summaries on what the individual reports are here:

**Assistant Gimmick Outfits** - "Grey Sky", and a warning to monitor the
recently emboldened assistants on-station.

**Intern** - The intern has forgotten to actually include the report in
his message. What a goof!

**Ion Stormfront** - Oh dear, the electromagnetic interference is
messing with the report broadcast.

![image](https://github.com/tgstation/tgstation/assets/28870487/ea7060b5-177e-4760-a079-9f61650aca27)

**Endless Snowstorm** - Ice Giant, Too much snow, we can't give an
actual report. Stay safe!

**Wise Cow Invasion** - Cow Planet. [We're gonna go fast and we're gonna
go far with a steady driving bass and a rhythm
guitar.](https://www.youtube.com/watch?v=BPqPYszbSFI)
## Why It's Good For The Game

Seeing the goofy clown planet message always made me think "dang, this
feels like underutilized material" and can give command some prompting
on what to tell the crew beyond "yeah we don't know what threat level it
is". Maybe it'll prompt someone to do a gimmick based on the report? Who
knows! It's just an added dash of flavor at the end of the day.

Admittedly, some are a bit silly, but also rare (requiring both a
specific station trait and the 8% pulsar star chance) so I think its
fine.
## Changelog
🆑 Rhials
add: Adds some more station-trait dependent pulsar star reports. Keep an
eye on that roundstart command report!
/🆑
2024-06-08 09:17:17 +02:00
Goat
6934b13ee2 Adds a TRAIT_NO_TRANSFORM check to AI movement. (#83621)
## About The Pull Request
Checks for `TRAIT_NO_TRANSFORM` in `allowed_to_move`. Will stop mobs
from moving when they should not.

## Why It's Good For The Game
Fixes #79870
Fixes AI movement not respecting TRAIT_NO_TRANSFORM.

## Changelog
🆑 Goat
fix: mobs no longer move during cutscenes
/🆑
2024-06-07 22:45:53 -04:00
Ben10Omintrix
3164c354c5 [no gbp] fixes lobstrosities fishing infinite resources (#83661)
## About The Pull Request
fixes lobstrosities being able to fish tons of resources, closes #83565

## Why It's Good For The Game
fixes the fishing economy

## Changelog
🆑
fix: lobstrosities will no longer be able to fish out multiple
necropolis chests
/🆑
2024-06-07 22:38:18 -04:00
DATAxPUNGED
57744f6622 Icemoon Comms agent (#83404)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Adds a comms agent to icemoon, similar to the one that can spawn in
space
<details>
  <summary>Image (spoilers, kind of)</summary>


![image](https://github.com/tgstation/tgstation/assets/44149906/32427530-269e-416a-94ca-6688c7fc7228)

</details>

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

Icemoon is sorely lacking on ghost roles, this should help with that
somewhat.

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

## Changelog

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

🆑
add: NT reports indicate that the Syndicate have increased listening
activities on Icemoon, crew is advised to watch out for possible
communication interference.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2024-06-07 20:53:05 -04:00
Watermelon914
69e46a61e4 Fixes a weird formatting problem with the intern announcer (#83630)
## About The Pull Request
Fixes this:

![image](https://github.com/tgstation/tgstation/assets/37270891/90c0e496-5eda-47f2-945e-3293ce9ead7d)

## Why It's Good For The Game
Bugfix

## Changelog
🆑
spellcheck: Intern announcer no longer has a weird space before the
introduction message.
/🆑

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2024-06-08 00:48:23 +00:00
Time-Green
108880a1e6 Sneeze Rework: Projectile Combat Edition (#83361)
## About The Pull Request
Reworks sneezing. Instead of a range check that checks if you're facing
someone, it is now a skill check


https://github.com/tgstation/tgstation/assets/7501474/c11ffa16-9bd2-4ed1-8022-2094360657bc

All sneezes shoot projectiles, but depends on the virus if they're
infectious. Using the sneeze emote is the only method that doesn't shoot
a sneeze

## Why It's Good For The Game
I think the invisible infection mechanics are unfun. A lot of station
dangers challenge your knowledge and mechanical skill, while viruses are
gotten by being around people in a roleplay game. You can get a round
seriously ruined if you walk past someone with a sneezing virus and
don't immediately rush spaceillin or chemistry, which I don't think is
mechanically interesting.

Now if you get infected, it's a skill issue. Get good and dodge the
sneeze

Note that this is just one method of infection. I didn't touch coughing
and airborne viruses, which do constant area checks and infect everyone
around. I plan to, but not now. I'll probably make coughing do a cone or
something, and ignore the airborne viruses since they can't be modified
and are generally less broken

## Changelog
🆑
balance: You can now dodge sneezes
balance: Infectious simple diseases that use sneezes now infect with
sneezes and have lowered airborn transmission
balance: Damageless attacks, projectiles, hugs etc no longer drain
shields
/🆑

- [x] Make sneezes shoot to your cursor so you can either intentionally
sneeze on people or sneeze away from people if you react fast

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-07 13:40:05 -04:00
EnterTheJake
20c3b0eb3b [NO GBP] Post-Rust Heretic's Rework adjustments. (#83765)
## About The Pull Request
Fixes antimagic, not preventing the disgust builtup from standing on
rusted tiles, makes rust walkers more expensive to summon.
## Why It's Good For The Game

I'm very happy with the end result of my Rust heretic rework; but they
came up a tad stronger than i wanted them to be.

Carlac already changed the Vomit stun to knockdown, but i wanted to add
a couple of things myself.

Having anti magic now makes you fully immune to the effects of rusted
tiles, not just the spells.

Rust walkers summoning ritual now requires titanium instead of iron
sheets.

As of right now, they are way too easy to spam, Titanium is a bit harder
to come by than iron so that'll do for now.

I was planning to set a limit to how many you can summon at the time,
but i'd rather wait a few months to see how rust behaves before i add
more nerfs.
## Changelog
🆑
balance: Rust walkers' summoning ritual now requires 5 sheets of
Titanium instead of Iron.
fix: Magic resistance grants complete immunity from the passive disgust
buildup from standing on Rusted turfs.
/🆑
2024-06-07 13:35:39 -04:00
necromanceranne
fb6d892204 [NO GBP] Only add the armor plate prefix once. (#83650)
## About The Pull Request

Currently, this will add the prefix for every upgrade. We only want to
add it once.

## Why It's Good For The Game

Oops. This isn't working as intended.

## Changelog
🆑
fix: The armor plate component only adds the prefix once.
/🆑
2024-06-06 12:34:05 -07:00
IsaacExists
e9c45c44a5 Blindfold Color Preference (#83670)
## About The Pull Request
When selecting the Blindness quirk, you now have the option to choose a
specific color for the blindfold much like how the tagger quirk handles
spray can color preference. The blindfolds used to always take a blend
RGB of both eye colors and apply it to the blindfold, now it _should_
only do that if you have the blind-personnel blindfold directly spawned
on your eyes. If not, then it just handles it like how it did before
this PR was submitted, and mobs generally shouldn't have the
blind-personnel blindfold if they aren't blind anyways.


![IFcWtAQ](https://github.com/tgstation/tgstation/assets/125638858/0320edb0-2963-4e94-8da1-2136dadd6d14)
## Why It's Good For The Game
While it isn't a big deal if your eye color matches the blindfold, some
players (like a certain someone I know) would rather have their eye
color be distinct, as such if you have a blue eye color on both eyes but
want a purple or red blindfold, you don't have to go out of your way to
paint it, which generally wouldn't work the way you'd want it to.

In other words, it allows you to customize your character with more
freedom, but only applies to those who willingly choose to suffer in the
game. Being blind is fun! =)
## Changelog
🆑
add: You may choose a color preference for your blindfold with the
blindness quirk.
/🆑
2024-06-06 12:25:27 -07:00
lessthanthree
413dc66af1 Tram crossing signal logic fixes (#83610)
## About The Pull Request

Minor fixes to the tram crossing signal logic.

Reverts an earlier change I made to the subsystem, which resulted in the
signals being wildly off in their timings on a regular basis. Adjusted
the red length corresponding to the properly timed signals. Removed
define for degraded yellow, as that's now simplified into a check at
signal activation time.

## Why It's Good For The Game

Tram crossing lights better reflect tram status, staying green when the
tram is broken therefore safe to walk. Consistently turn red when tram
approaching.

## Changelog

🆑 LT3
fix: Fixed timing issue where tram crossing signals would be out of sync
with the moving tram
fix: Tram crossing signals consistently show green when safe, blue when
broken
fix: Tram crossing signals show red instead of yellow when degraded
/🆑
2024-06-06 10:17:04 +01:00
Whoneedspacee
21c39860ab Fixes Bubblegums Melee Cooldown (#83694)
## About The Pull Request

Fixes #63886 

(The previous pr to fix added melee cooldown time but that only applies
after the ability ends)

Adds a cooldown to melee before the bubblegum starts charging so it
won't melee while charging.

## Why It's Good For The Game

This is how Bubblegum's charge worked before mob abilities but at the
time of this abilities creation melee cooldowns were not apart of mob
abilities and did not work properly together.

## Changelog

🆑
fix: Bubblegum can no longer melee you while using his charge abilities.
/🆑
2024-06-06 00:55:15 -04:00
Afevis
b663fbff22 Syndicate AI fixes (#83317) 2024-06-05 22:54:32 -06:00
necromanceranne
73dfd61634 [NO GBP] Fixes drake empowerment for berserker armor by adding drake remains, which are used to make drake armor and empower the suit (#83700)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

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

Adds an intermediary item called drake remains, which are used to
construct drake armor and empower berserker armor.

There is no functional balance change here, as the components to make a
drake armor are relatively the same.

## Why It's Good For The Game

I borked it. This is the most reasonable and flexible method to fix the
bug and what I should have done in the first place.

## Changelog

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

🆑
fix: Drake empowerment for berserker armor now uses valuable drake
remains, made from ashdrake hides and bones.
add: Drake armor is made use drake remains to construct. (This is a net
neutral to the previous recipe)
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2024-06-06 00:54:18 -04:00
zxaber
f26e2bb58c Fixes tool-based flashes being stuck at intensity 1 (#83703)
## About The Pull Request
A long-old bug due to the use of `min(flash_strength, 1)`. The intention
was clearly to have the flash be *at least* level 1, because
flash_strength defaults to nothing but can be set to 2. However,
`min(x,y)` uses the lowest value, making it always return 1. So we
change it to `max()`.
## Why It's Good For The Game
Bugfix. Sunglasses users cope.
## Changelog
🆑
fix: Tool-based flashes (read: from welders) are no longer incorrectly
locked at flash level 1. Wear proper PPE!
/🆑
2024-06-06 00:41:40 -04:00
Jacquerel
4339c0ba49 Mutadone restores your original monkey status (#83720)
## About The Pull Request

Before PR:
Giving mutadone to a monkey turns it into a human
Giving mutadone to a human does nothing about its human status

After PR:
Giving mutadone to a monkey created from a monkey cube does nothing
about its monkey status
Giving mutadone to a monkey which was originally a human restores it to
being a human
Giving mutadone to a human who has never been a monkey does nothing
about its human status
Giving mutadone to a human who was originally a monkey returns it to
being a monkey

I couldn't think of any better way to achieve this than putting a trait
on the monkey typepath but if anyone has one, I'd love to hear it
(actually, maybe I could just typecheck the mob... but that seems
equally gross)

## Why It's Good For The Game

Treating "being a monkey" as a mutation makes sense from the perspective
of the DNA console but not from the perspective of certain other game
mechanics.
A chemical which "removes all mutations" should _intuitively_ restore
people to the state they were in at the start of the round (so monkeys
turned into humans should return to monkey, and vice versa) rather than
unilaterally enact rapid evolution upon monkeys.
At least, I don't _think_ it's meant to be a lore implication that all
test apes on the station are transformed humans...

This has a couple of side effects, both of which I think are desirable.

Firstly- some mechanics work on humans but not monkeys (see #83698), and
can be circumvented by spraying mutadone gas into a monkey pen. This
will now only be achievable by individually mutating each monkey, which
requires more effort for whatever your desired result is.
Secondly- this adds a downside to the common "cure-all" surgical method
of turning a monkey into a human and transplanting a brain into it. This
new body will still genetically remember being a monkey, adding some
element of risk to this otherwise undramatic means of curing basically
any ailment in the game.
Thirdly- Some people have admitted to using mutadoned monkeys to create
a large number of humans to kill for Heretic and Changeling progression,
which I also don't want them to do, so making this take longer is a
positive.

## Changelog

🆑
balance: Mutadone restores your originally monkey status, rather than
always turning monkeys into humans
/🆑
2024-06-06 11:13:38 +12:00
Ben10Omintrix
55c41fb9ad basic honkbots (#81920)
## About The Pull Request
this refactors honkbots into basic mobs. its mostly a faithful 1:1
refactor but i couldnt keep my hands to myselves so i gave them some new
behaviors.

honkbots now love playing with clowns, they will go seek out for clowns
and celebrate around them. also, if the honkbot finds a banana peel or a
slippery item near it, it will actively drag people onto them

honkbots will now go out of theirway to mess with secbots and annoy them

## Why It's Good For The Game
refactors hinkbots into basic bots and also undoes some of the silliness
i did in the previous basic bot prs. i also added lazylist support to
remove_thing_from_list.

## Changelog
🆑
refactor: honkbots are now basic mobs, please report any bugs
add: honkbots will try to slip people on banana peels
/🆑
2024-06-05 10:17:34 -04:00
Jacquerel
167c55bed2 Sentient mobs can slowly subtract slime stacks by shaking (#83471)
## About The Pull Request

Closes #82746
PR #77569 replaced the clone damage inflicted by slimes with a lingering
damage over time effect which can be removed with water.
This is all well and good for humans who can spray themselves with fire
extinguishers, showers, or sinks... but most other mobs are not actually
capable of opearating any form of equipment which can make them wet.

This PR allows you to click on the debuff icon to shake the slime off
slowly over time (15 seconds to fully remove the debuff).
This is slower than the recovery time when wet.

Dogs, Cats, and by extension, Felinids are better at removing slime
because of their self-cleaning prowess (they're always licking weird
stuff off themselves). This is rarely helpful if you're not a Felinid,
because almost all cats and dogs have so little health that they will
hit the minimum health threshold and lose the debuff anyway by the time
they would be done.
In the very niche circumstance that a sentient wolf is attacked by a
slime they will appreciate this bonus.

## Why It's Good For The Game

This was a replacement for slimes inflicting clone damage (I am not sure
this even did anything for most simple mobs?) but essentially turned
slimes into an automatic death sentence for most forms of mob without
hands.
Technically the slime debuff cannot kill you and stops if you are under
10 HP, but this is small consolation for most of these mobs which cannot
heal themselves either.

You are still probably going to take between 30-60 damage during the 15
seconds of removing slime from your body.

## Changelog

🆑
balance: Corrosive slime left behind after a slime fails to eat you can
be scraped off with your hands, or shaken off in some other way, by
clicking on the debuff. This is slower and less effective than washing
it off using water.
/🆑
2024-06-05 14:47:02 +02:00
GoldenAlpharex
234eb80c94 Adds Biomes to the Cave Generator, for all of your procedurally-placed cave biome needs! (#83138)
## About The Pull Request
Implements biomes into the Cave Generator, using some adapted code from
the biomes feature of the Jungle Generator. It's there as a tool for
whomever would want to implement it on /tg/, I simply don't have the
sprites, mobs and motivation to add biomes to anything at this current
point in time, even though I'm fully open to helping anyone that would
be interested in doing so.

Here's how it works:
You supply a 2D list of biomes based on the two arbitrary criteria
'heat' and 'humidity', you can treat these as simply two independent
variables that would affect your biome distribution. There's three
levels of each, `LOW`, `MEDIUM` and `HIGH`, take a look at
`possible_biomes` for a good example of it. Here's what it looks like by
default (yes, that's the default on the jungle generator as well, except
here we use 3x3 instead of 4x4):

![image](https://github.com/tgstation/tgstation/assets/58045821/2c53b46b-f4f9-497f-9647-efc2cc118805)


On the `/datum/biome`, you have three important stats, split into two
each: flora, features and fauna. They are evaluated in this order, so if
a flora spawns, no feature nor fauna will spawn. If a feature spawns, no
fauna will spawn, and if fauna spawns, then that's cool. Each of these
stats have a corresponding `density` (i.e. `flora_density`), which is
simply the probability for that thing to be spawned if it's eligible,
and a `types` list (i.e. `flora_types`), which is a weighted list that
then gets expanded at runtime in order to make the `pick()` operation
faster.

The areas you want to have the biomes in also need to have their
`area_flags` set up to include `FLORA_ALLOWED` for both flora and
features, and `MOB_SPAWN_ALLOWED` for fauna to spawn.

The fauna currently does just about every check that is done in
`cave_generator`'s `populate_terrain()`, except for handling megafauna
differently, or taking megafauna into account. If that's desired, it can
be added easily, I simply chose not to add it because it felt like
wasted processor time over something that would probably not be
pertinent in the majority of cases.

I've run a few tests, and keeping in mind that I've got a high-specs
computer, generating the caves with biomes takes about 1 second for an
entire z-level covered in biomes. For comparison, I compile the repo in
about 36 seconds. ~~It may increase the amount of time spent
initializing the atoms subsystem, however, I'll need to compare that,
I'd really appreciate some help optimizing that if anyone knows how
to.~~ It didn't seem to have an effect, I just had seen things a bit
weird. I optimized things by moving rust-g calls outside of the for
loop, and we gained about 0.3-0.4 seconds, which is pretty nice.

## Why It's Good For The Game
Biomes are cool, and since we use mainly cave generators for z-level
generation, I decided to add biomes to that, so that the biome code
added by floyd lives on.

Here's an example of ice box with jungle caves, just as a proof of
concept, to prove that it works:

![image](https://github.com/tgstation/tgstation/assets/58045821/33b348db-513b-4a2e-b11f-907e80b65177)

## Changelog

🆑 GoldenAlpharex
add: Added Biomes capabilities to the Cave Generator, to allow for
procedurally-placed biomes to be introduced in cave generation. This
feature is not currently used on any map, but the tools are all there
for anyone with the motivation to add biomes to any cave-generating
area, like Lavaland and Ice Box.
code: Biomes can now affect features (which are usually structures), on
top of flora and fauna.
/🆑
2024-06-04 12:33:40 -07:00
Lucy
136029351d The memories for Smoker and Alcoholic now actually mention the preferred brand (#83674)
## About The Pull Request

This revises the descriptions for the smoker/alcoholic quirk memories to
actually mention the preferred brand:



## Why It's Good For The Game

Because memories should help you, well, remember stuff, and "Joe's
smoking problem" is kinda useless when you've forgotten _which_ brand
your character prefers.

`[name]'s smoking problem.` -> `[name]'s addiction to [preferred_brand]
cigarettes.`
`[name]'s drinking problem.` -> `[name]'s addiction to
[preferred_brandy] alcohol.`

## Changelog
🆑
qol: The memories for Smoker and Alcoholic now actually mention the
preferred brand.
/🆑
2024-06-04 07:46:17 +02:00
MrMelbert
4d891c759c Adds Soup boiling SFX (#83649)
## About The Pull Request

In honor of the new sound effects general


https://github.com/tgstation/tgstation/assets/51863163/b2db8ee1-51ef-45a8-9cc8-31594d034ea5

Adds a sound effect that plays when soup is boiling (IE, it only plays
when smoke appears over the soup pot)

It has a sharp falloff and a distance penalty so it will really only be
heard in the kitchen (or though the kitchen's walls), maps with ranges
close to the counter like Metastation notwithstanding.

## Why It's Good For The Game

A touch of atmosphere

## Changelog

🆑 Melbert
sound: Boiling soup now makes a sound.
/🆑
2024-06-02 22:39:26 -06:00
Andrew
bfcd46da03 Floor diseases are easier to cure (#83613)
## About The Pull Request

The floor diseases were supposed to be more of a joke, but it seems to
be a bother for many due to the scarcity of cures.

This PR changes the floor diseases cures to some common chemicals.

## Why It's Good For The Game

They weren't supposed to suffer this much.

## Changelog

🆑
balance: Floor diseases cures are now common chemicals: Milk, Chlorine,
Space Cleaner
/🆑
2024-06-02 16:11:59 +01:00
Rhials
ab9cc35c48 Graveyard update take two (#83567)
## About The Pull Request

**PR body copied from last PR (#83149). I fucked something up (I think
by leaving dream maker open while trying to fix the merge conflicts?)
and rather than try and walk backwards I'm just making a new branch.**

This implements the digging of graves on most soil/dirt/planetary type
turfs, and gives the coroner their own private burial ground.

**Change 1 - Gravedigging:**

You can right-click planetary/dirt/grass tiles using a shovel or shovel
subtype (or entrenching tool). Speed varies on the type of shovel you
are using. This creates a Makeshift Grave, an unmarked burial mound
(different from the ones at the elephant graveyard).

This is handled through the new gravedigger component, which is mostly
unremarkable but worth mentioning in case anyone wants to add this
behavior elsewhere.

**Change 2 - Icebox Morgue Graveyard:**


![image](https://github.com/tgstation/tgstation/assets/28870487/e154dd79-9431-49b4-b3fd-9c932448c8cd)

The icebox morgue now has private burial ground, sealed off by a fence.
Mourners are expected to keep out and perform their grieving at the
appropriate distance. This does not affect the chaplain's burial ground,
which is publicly accessible from the outside. This gives a more secure
place to bury bodies (I'm sure someone will have a reason for this some
day) and may lead to fighting over corpses, which I think is funny.

Also, there might be some goodies left in those graves, but you wouldn't
go graverobbing just for some useless loot, would you??

This also adds a new area type, graveyard, which is mostly just the
icemoon outdoors with the spooky ambiance of the morgue.


![image](https://github.com/tgstation/tgstation/assets/28870487/57a3d790-4941-4130-b4de-ef524383e560)
## Why It's Good For The Game

Now you can bury your friends in an unmarked grave! Bury people alive!
Bury your treasure, or reminders of the sins you've committed! Bury
anything, anywhere you want!

The morgue graveyard is a nice bit of flavor. I know the Chaplain
already gets one (I forgot this when I started this PR though) but the
Coroner is an equal-if-not-more-important corpsekeeper than them.
## Changelog
🆑 Rhials
add: Shovels and entrenching tools can be used to dig graves on
asteroid/dirt/etc. surfaces. Neat!
add: The Icebox Morgue has been given a fenced-off graveyard in the
back.
code: burn_tile() is no longer double-defined on asteroid turfs.
/🆑
2024-06-02 02:52:52 +01:00
Joshua Kidder
5e9f1f6582 Cuffed people can sign (to a limited degree), signing tone emotes improvement (#83501)
## About The Pull Request

Currently, if you handcuff someone and they only have sign language
available to speak in (mute, no tongue, nearby people are deaf, you have
bronchitis(?)), they are rendered totally unable to communicate with
anything but emotes. This is stifling to trying to roleplay with nearby
people who want to keep you cuffed for whatever reason (security,
antagonists, weirdos who keep hugging you, etc).

So instead, I've made it so that if you use sign language while
handcuffed, you are still able to sign, but to a much more limited
degree (3 - 5 words per message).

If you're put in a straightjacket, you're still totally unable to use
sign language.

Additionally, I spruced up the messages that sign language uses to
signify tone (?, !) and added one for EXCLAIMED QUESTIONS?! I also made
the emotes work as emotes, rather than the small (easily missable)
messages in the chat box. These emotes will not fire if you sign with
tone while cuffed, to avoid you becoming a spam machine.
## Why It's Good For The Game

It lets cuffed sign language users communicate, which is usually a
pretty good thing when it comes to improving a scene for both them and
the people they're playing with.

It improves the descriptiveness of the inquisitive and exclamatory tone
messaging for sign language users, and also adds one for a combination
of the two tones.
## Changelog
🆑
qol: Sign language users can now sign in cuffs, but to a very limited
degree. They also have more descriptive emotes for questions,
exclamations, and a combination of the two.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-06-01 16:01:03 -06:00
necromanceranne
c1c43711f3 Mining armor and suit storage cleanup/generalization/modernization (#83437)
## About The Pull Request

### Suit Storage

Makes the suit storage of the various suits consistent across one
another. Now, all the mining suits use a single list which is easier to
maintain.

**The affected suit list is as follows;**

Explorer Suits (and therefore Syndicate Explorer Suits), Goliath Cloaks,
Bone Armor, Drake Armor, Godslayer Armor, Berserker Armor, Mining
MODsuits, H.E.C.K. Suit.

**The list of holdable items is as follows;**

Flashlights, Proto-Kinetic Accelerators, Advanced Mining Scanners /
Mining Scanners, Pickaxes, Upgraded Resonators / Resonators, Ore Bags,
Air Tanks, Spears, special monster organs like Regenerative Cores,
Knives, Proto-Kinetic Crushers, Cleaving Saws (the one that Blood-Drunk
Miners drop), Grappling Guns and Climbing Hooks.

~~It probably doesn't matter too terribly much because you know only air
tanks are going in that slot 95% of the time~~

### Bone Armor and Goliath Cloaks

Bone armor and goliath cloaks both have the same armor values,
environmental protections and coverage as the explorer suit (bone armor
includes the feet due to the sprite physically covering the feet, which
is not a terribly significant balancing point but worth mentioning).

They use the armor plate component to improve the parts of bone armor.
However, they use bone talismans instead of goliath hide to be upgraded.

Goliath cloaks come fully upgraded. You'll see why in a second.

Their recipes are slightly different. Goliath cloaks take nine hides
(I'm so sorry this is for consistency I promise you can't use the
upgrade system with something that deletes its own armor values like
this) and three sinew. Bone armor takes three goliath hides and 6 bone.

### Berserker Armor

Berserker armor can now be improved to the same armor value as drake
armor by using a full suit on both the body and the helmet of the
berserker armor. (Each drake makes two suits, so you need to use up both
suits).

Instead of an armor boost, rage now halves incoming brute damage. Fuck
you, Bubblegum!

### Minor Mining MODsuit Tweak and other armor value changes

The base value for the armor is now 20, rather than 15, so that when it
reaches max ash accretion it has equivalent armor to a fully upgraded
explorer suit. This is only a value difference of 5, but it always
annoyed me seeing it.

All the above mentioned suits also now have a value of about 10 wound
armor. This is because miners do actually experience wounding on
lavaland. Some of the armors had this wound armor. Some didn't. Now they
all do. I don't believe this to have been a deliberate design choice,
but rather, an oversight. Iunno, someone who keeps track of this please
tell me otherwise.

Upgraded suits get a prefix to show they are upgraded. Now, never doubt
whether the miner you are fighting is in a baseline explorer suit or a
riot suit level improved explorer suit ever again!

### Berserker Armor actually covers up clothing/hair underneath properly
and other minor stuff

This is why I started this PR by the way. This one fix. I expand the
scope of my horizons so broadly when I really sit down and PR, don't I?

H.E.C.K. and Berserker helmets can be used for internals. 

## Why It's Good For The Game

There is a great deal of inconsistency with regards to the various
lavaland armor you can find and use. Some armors were wildly inferior to
others and only really having value for aesthetic. Some just seemed to
have oversights that didn't seem quite right. And most importantly, the
actual storage list for mining suits in general were not only
inconsistent in of themselves, but were also not being updated as time
goes on.

Bringing them all into line allows for miners to have a bit of freedom
of choice when it comes to appearance, without it becoming a balancing
sticking point nor a detriment to their effectiveness. It is also much
easier to maintain one list than six or seven lists.

Assuming that the baseline of the explorer suit is a-okay for someone to
possess, goliath cloaks and bone armor should now feel more like
fashionable choices rather than, in some cases, being either a worse or
better choice to take (its bone armor, bone armor is the best of these,
its really good generalist armor). I don't care what effect it has on
the ashlander economy. Neither should you.

The minor tweaks and fixes are just stuff that annoyed me for autism
reasons or were oversights due to changes to the items in question or
the game around it. I doubt anyone but me cares very much about these
minor differences, but I like consistency.

## Changelog
🆑
balance: The various mining related suits now have consistent suit
storage. Try putting a knife into your explorer suit's suit storage
today!
balance: Bone armor work similarly to explorer suits, with similar armor
values and options to upgrade their parts. However, they use bone
talismans instead of goliath hides to upgrade. Magic? Just believing
really strongly that the drake is hitting you slightly less hard because
of the talismans? You be the judge.
balance: Goliath cloaks come fully upgraded. However...
balance: The recipes for bone armor and goliath cloaks are slightly
different. Particularly goliath cloaks, which need a lot more dead
goliaths to make. Sorry.
balance: Mining MODsuits achieve at maximum ash accretion the same
amount of melee armor as an upgraded explorer suit.
balance: These various suits also consistently have wound armor.
fix: Berserker armor properly hides underclothing and hair.
balance: Berserker armor pieces can absorb drake armor to gain their
enhanced protection. Become the warrior of Khorne you've always wanted
to be.
balance: Berserker rage now halves brute damage rather than just adding
Melee Armor to you and your squishy body.
qol: Berserker and H.E.C.K. helmets can be used for internals.
/🆑
2024-06-01 23:48:52 +02:00
carlarctg
445ed08ce1 Adds Crutches to Medbay & Crafting (#83242)
## About The Pull Request

Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.

Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from fractured bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off. Canes now
also remove broken bone limping as well

Changed the 'white cane' name to 'probing cane' to better reflect its
function.

Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.

Crutches make you waddle.

SPRITES BY XHORIAN!!!!!!!!!!!!!


![image](https://github.com/tgstation/tgstation/assets/53100513/fe7e5ac8-0e6e-4291-ae64-c96632997607)

![image](https://github.com/tgstation/tgstation/assets/53100513/bde7fd7a-38d4-4036-82f2-01bdb8a6f00b)

![image](https://github.com/tgstation/tgstation/assets/53100513/9d94bc8d-5a80-4199-a044-7c5cf1944f99)

![image](https://github.com/tgstation/tgstation/assets/53100513/b26ecf53-177a-400d-aa5a-f2c0d5560942)



## Why It's Good For The Game

> Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.

> Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from broken bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off.

Currently there's no way to abate slowdown from a missing leg except
getting on a vehicle, which I think is pretty lame. What if all the
doctors are busy, missing, or dead? What if medbay is a hole? A crutch
helps make up for the loss at the cost of a hand slot.

> Changed the 'white cane' name to 'probing cane' to better reflect its
function.

'White cane' was undescriptive.

> Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.

I dont know where to put the friggin signals

## Changelog

🆑
Carlarc, Xhorian
add: Added crutches! Wooden ones can be made with wood. Medical ones can
be bought from the medvendor.
add: Crutches will reduce slowdown from missing a leg by 60%, and they
will remove the limping from fractured bones. (canes do that now too)
They're also a fairly decent bludgeon. However, they do nothing if both
legs are cut off.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-01 20:02:00 +00:00
SyncIt21
4a260d2827 Refactored ghetto chem separator (#83275)
## About The Pull Request

This completely reworks how ghetto chem separator works & brings more
depth & immersion to it. To understand the new system let's compare it
with the current one

**Old System** 
1. You insert a beaker containing the reagents you want to separate.
2. You use a lighter/whatever to light a flame, Flame has _magic &
unrealistic_ properties such as
    - It will never heat the beaker above 100k
    - It doesn't burn oxygen or use fuel source to sustain it
- Distillation rate is a constant 5u/s. It doesn't increase as the
solution boils hotter
 
3. The apparatus sorts the reagents alphabetically? & transfers the 1st
reagent from sorted list to the target beaker. It does not care if each
individual reagent has their boiling points & how to separate them based
on that etc. It's just bland overall

**New System**
1. You insert a beaker containing the reagents you want to separate,
just lke the old system
2. You use a lighter/whatever to light a flame just like the old system,
however flame behaves in a more realistic fashion as follows
- It will heat the beaker all the way to 1000k if you let it run long
enough
- It now burns oxygen & uses a fuel source(a secondary beaker which you
must insert containing flamable reagents like oil, welding fuel etc).
When oxygen is the fuel source no O2 gas is required
    - Distillation rate starts at 2u/s & increases with rising temps
- Intensity of the flame depends on the quality of reagents used as
fuel, Oil has best flammable quality & will heat the beaker faster,
other reagents mixed in various proportions can produce better quality
flames which you can understand by examining the aparatus
    - The flame intensity can be adjusted via the burner knob setting
3. Each reagent now has their _boiling computed_ computed from their
mass allowing for realistic interactions, like having to control the
temp's just right to separate your required reagent
4. Temps automatically cooldown and you can install a condenser to
Facilitate faster cooling

Here's the demo video explaining everything


https://github.com/tgstation/tgstation/assets/110812394/ba591859-3fff-4d06-90f8-024c7266f830

## Changelog
🆑
refactor: ghetto chem separator has been reworked from scratch. See PR
83275 for details
qol: adds examines & screentips for ghetto chem separator
/🆑
2024-06-01 12:54:44 -07:00
MrMelbert
b1a4e0ba7e Makes disease airborne spread more realistic (#83423)
## About The Pull Request

1. Rather than checking every life tick to try to spread via air, it
checks every breath tick. IE, every 8 seconds.
2. Wearing a mask now protects you from catching airborne diseases,
rather than only protecting you from spreading it.
3. Wearing a mask is no longer guaranteed effective (unless on
internals), it now scales based on BIO armor. This is doubly effectively
for people wearing a mask to stop spreading to others vs wearing a mask
to block spreading to them.

## Why It's Good For The Game

Wearing any kind of mask means airborne viruses will never spread, but
also wearing any kind of mask on the opposite end is pointless unless on
internals. Kinda silly.

This PR unifies those behaviors. Wearing a mask to stop spread is still
rewarded, as BIO armor is doubly effective at stopping a spread attempt
as blocking a spread attempt.

Ultimately the goal of this is to give players a realistic way to
protect themselves against airborne transmission vectors besides staying
on internals 100% of the time.

## Changelog

🆑 Melbert
balance: Wearing a mask can now prevent you from being spread airborne
diseases. Prior, it only stopped you from spreading it yourself.
balance: Wearing a mask no longer 100% guarantees you don't spread
viruses to others people - it now scales on the masks BIO armor. Get a
sterile mask from Medical for max safety.
balance: Wearing a mask to stop you from spreading to other people is
doubly effective than wearing a mask to prevent spread to yourself -
Mask up for the greater good!
balance: Passive airborne virus spread attempts are now done every time
you breathe (every eight seconds), rather than every two seconds. The
chance of spread is the same, though - it has been scaled up to
accommodate.
code: Cleaned up a fair bid of airborne-transmission-code. Report any
oddities.
/🆑
2024-06-01 17:51:04 +01:00
Lufferly
7f82baf07f Fixing the timeline (Paradox clone fixes) (#83452)
## About The Pull Request

Fixes #83388 (Hair gradients are now part of dna, if just making a
snowflake check on paradox clones is a better way to do this I can do
that too)
Fixes #82238 (Hardcore random was not supposed to set your hair to
white)
Fixes paradox clones (and changelings) not having correct heterochromia
colors
Fixes #80557

## Why It's Good For The Game

Bugfixes; Paradox clones are supposed to at least be a copy of the
target player as they are roundstart, but right now for funkier
characters they are being outed for having the wrong hair gradient or
something, which feels bad. Hopefully this can bring us to a point where
medical and security records cant out the clone.

## Changelog

🆑 Seven
fix: Paradox clones (and changelings) now properly copy hair gradients
and heterochromia eye colors.
fix: Hardcore random no longer mistakenly makes your hair white, this
was not a feature.
/🆑
2024-06-01 18:22:23 +02:00
_0Steven
20aab4c7f9 Fix imaginary friend trauma and message range (#83590)
## About The Pull Request

So during a previous pr, attaching the imaginary friend to a host and
setting up its preferences were moved from initialization to two
separate procs. The _smite_ was then updated to account for this, but in
the process the brain trauma version was left behind- it even still
tried to add a nonexistent parameter when making a new imaginary friend.

We first fix this by having those two procs be called during
`add_friend(...)`, after finding and assigning a ghost.
```dm
/datum/brain_trauma/special/imaginary_friend/proc/add_friend(mob/dead/observer/ghost)
	if(isnull(ghost))
		qdel(src)
		return

	friend.key = ghost.key
	friend.attach_to_owner(owner) //new
	friend.setup_appearance() //new
	friend_initialized = TRUE
	friend.log_message("became [key_name(owner)]'s split personality.", LOG_GAME)
	message_admins("[ADMIN_LOOKUPFLW(friend)] became [ADMIN_LOOKUPFLW(owner)]'s split personality.")
```
This solves our first issue, where this not being called made every
brain trauma imaginary friend get banished to gay baby jail where they
do not have an appearance, cannot move from their spot, cannot be heard,
and emit runtimes constantly.

Testing this brings us to our second issue, where the host couldn't
actually hear their imaginary friend unless they were at most one tile
away, and would get their message starred if not on the exact same tile.
Looking into it, this seemed to be because `Hear(...)` now had a
`message_range = 0` parameter which we don't actually set here.

Upshot! This seems to let us gut the whisper starring code on our side
and just proxy the right message range to `Hear(...)`.
So we gut our code a bit and do just that, and this fixes it.
## Why It's Good For The Game

Fixes #81138.
Fixes imaginary friend brain trauma being non-functional and emitting
runtimes like hell.
Fixes imaginary friends not being audible to their host beyond a one
tile distance.
## Changelog
🆑
fix: Imaginary friend brain trauma works again.
fix: Imaginary friends can be heard by their hosts from more than a tile
away again.
/🆑
2024-06-01 18:05:20 +02:00
_0Steven
b39a6c280a Fixes runtime with serializing photo metadata (#83562)
## About The Pull Request

So while working on an entirely unrelated thing, I noticed runtimes
appearing in my logs after taking a picture.
Specifically a bad index runtime for the 77th line here:

2f6920105e/code/modules/photography/_pictures.dm (L66-L78)
And the 199th line here:

2f6920105e/code/datums/datum.dm (L193-L200)
This seemed to be caused by the fact `serialize_list(...)` is called
with a null `semvers` parameter, which then causes it to try to add to a
null list.

I asked about this in code general on the main discord, and got told
just putting an empty list in when `serialize_list(...)` is called
should be fine.
This resolves the runtime.
## Why It's Good For The Game

Better to not have two runtimes added to the logs whenever someone takes
a picture.
Fixes #80514.
2024-06-01 17:52:59 +02:00
Higgin
d6ad5e60bb [NO GBP] fixes positive viruses being hidden (#83576)
## About The Pull Request

#83459 made stealth a function of being equal to or higher than severity
which made a lot of previously visible positive viruses hidden.
Unintended behavior, fixes it.

## Why It's Good For The Game

fix good, most people without HUDs can't see these anyway. It's almost a
QOL thing to just be able to ask a doctor "hey do I have a positive
virus" since if it's perfectly positive, there's nothing really gained
by people not knowing (you, enemies, and friends alike.)

## Changelog

🆑
fix: positive viruses are no longer hidden.
/🆑
2024-06-01 17:51:11 +02:00
Time-Green
b3fbfb6d53 Fixes railings being invisible (#83584)
Fixes #83575 

Kinda my fault, I looked at
https://github.com/tgstation/tgstation/pull/83450, thought the railing
code was weird and then forgot or something.

I've reverted the changes and instead changed the map to not spawn walls
on railings, which I probably should've done when I made the area

🆑
fix: Fixes railings being invisible
fix: Snow walls dont spawn on railings anymore in icebox
/🆑
2024-05-31 16:49:28 -06:00
John Willard
8442124bcd Gondolas are now basic mobs (#83451)
## About The Pull Request

This PR turns gondolas into basic mobs and does some fiddling with
gondola pods
Their verbs are now action buttons which they lose upon delivering. If
set to stay, they won't have their abilities afterwards (or wont get
them in the first place if the delivery is already done).
Lets them survive without a pod requirement in case admins want to spawn
one for their own stuff, so I also removed it from the snowflake checks
to exclude them from stuff.

Also replaced the hardcoded "cant speak" with simply giving the mute
trait, so admins can make gondolas speak if they want to for any reason.

## Why It's Good For The Game

The pet level of simple animals can finally be killed off, also gives
admins more control over gondola-related stuff if they so wish.

## Changelog

🆑
refactor: Gondolas (including gondola pods) are now basic mobs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-31 16:48:31 -06:00
Time-Green
328d001047 STATION TRAIT GAMEMODE: Station-Wide Background Checks (#83307)
## About The Pull Request
Adds a new station trait: Station-Wide Background Checks!

It does two things: 
1. Blocks most crew-side antagonists. No traitors, changelings, spies,
heretics, etc. You won't be able to fully trust your crew though, as
Space changelings, Paradox Clones, Obsesseds and Blob Infected are
excempted crew-antags since a background check doesn't really help here.
Other antagonists still spawn: pirates, revenants, blobs, aliens,
nukies, wizards etc. Expect a LOT more of these, as Dynamic is gonna put
threat somewhere...

2. Reduces dynamics threat slightly, configurable per server, but
defaults to 15.

It is essentially the first "dynamic gamemode".

## Why It's Good For The Game

Blocking crew antagonists changes the shifts dynamic, similair to old
warops. Security can "trust" crew to not be antagonists, and instead can
focus more on petty crimes and hunting down external threats.

Due to the increased chance of external threats and reduced chance of
internal threats, the crew can focus its defenses outwards. Don't worry
about your coworker killing you (intentionally/probably), but do worry a
lot more about the pirates trying to break through your hull, or alien
nests growing in virology.

I've also reduced total threat count slightly because the idea of 90
threat being dumped into ghost spawns kinda terrifies me and I do want
people to be able to let their guard down a slight bit. It can be
reduced/disabled for servers that already tend to lower threats.

I think it's a lot of fun to change the paranoia dynamic, and a fun
deviation from a normal round of spaceman13.

## Changelog
🆑
add: Station-Wide Background Checks (station trait, rare): Disables crew
antagonists, but get a lot more non-crew antagonists
/🆑
I want to do more like these (this was just an example I threw into
discord to annoy @Mothblocks but I realized I kinda liked), and this is
a good opportunity to gather community feedback and see how it plays!

---------

Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
2024-05-31 10:08:15 -07:00
tralezab
af33a5fb06 Fish update just dropped. New fish, aquarium type, two traits and a research node. (#83508)
## About The Pull Request

### New fish

#### anxious zipzap
An incredibly anxiety-ridden and electroreceptive fish. Worried about
the walls of its tank closing in constantly. Both literally and as a
general metaphorical unease about life's direction.

It produces electricity, and HATES being with any other fish. One other
zipzap is allowed at most.


![image](https://github.com/tgstation/tgstation/assets/40974010/6a1a31f3-1c84-4b5e-b8ca-652c5007813a)

#### monocloning jumpercable
A surprisingly useful if nasty looking creation from the syndicate fish
labs. Drop one in a tank, and watch it self-feed and multiply. Generates
more and more power as a growing swarm!

A far better option for power generation than the zipzap, but it's a
syndicate fish. Get an emag or get very lucky!


![image](https://github.com/tgstation/tgstation/assets/40974010/7f4aaf32-919c-40d9-890f-72ea9f91ac3c)

Working spacebase example


![image](https://github.com/tgstation/tgstation/assets/40974010/8eeaaf18-c0ab-48a5-8ada-e0eb7f118dd9)


### Aquarium type

Bioelectricity Generator! It boosts the power of electroreceptive fish
to very dangerous levels! But, uh, you put a tesla coil, and voila! Free
power! ...Free power if you keep the fish fed! More fish, more power!


![image](https://github.com/tgstation/tgstation/assets/40974010/e6abcd5b-93df-4ffc-ac6a-78585fd4a6c6)

You can convert an aquarium into a bioelectricity generator by
researching the new node, "Marine Utility", from bio processing. Then
you build the biogen upgrade kit and apply it to an already existing
aquarium.

### Fish Traits

#### Electrogenesis

Trait turns the fish into a shock weapon while it's alive, and every
time it feeds, it releases a weak tesla bolt to anyone close to the
tank.

#### Anxiety

anxious fish die when any other fish are in the tank. Please keep them
alone :[

## Why It's Good For The Game

Fish are great, but fish don't have anything to give back to the
station, right? Well, there's some small stuff, but I wanted to add a
bit of functionality towards being able to benefit from having fish.

The anxiety trait with the zipzap gives spessmen a bit of a challenge.
You can settle for one fish generating power per tank and do a
multi-tank generation setup, or you can do some crossbreeding to make a
fish WITH electroreceptive but WITHOUT anxiety. Neat!

## Changelog
🆑
add: New fish, the anxious zipzap
add: New syndicate fish, the monocloning jumpercable
add: New aquarium, the bioelectricity generator
fix: Mixotrophic fish now properly lack food requirements
/🆑
2024-05-31 15:26:03 +12:00
san7890
e81f9c6ef0 Replaces move_on_shuttle with a trait (#83550)
## About The Pull Request

`move_on_shuttle` was a variable that existed on `/mob` despite only
ever being used by cameras. This PR downgrades the variable to only
exist on `/mob/camera` types, but have the only thing that variable do
is add a trait that blocks movement on shuttles if not allowed. This
allows us to check the variable without casting to camera, which is what
some code was un-necessarily doing. This also retainst the ability to
add the trait later on to different mobs who we may not want to be on
shuttles that aren't `/mob/camera`.
## Why It's Good For The Game

There's no point for this variable to live on `/mob` if all it can do is
clog up the VV screen, especially if the current utilization for it is
only cameras. Let's move it off `/mob` and turn it into a trait so it
still has the similar utilization on a global level without typecasting
- as well as make it actually work since needless typecasting was
introducing a minor bug
## Changelog
Irrelevant.

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2024-05-30 08:54:31 +02:00
Capsandi
7c333409b7 Halves volume of Gravity Generator (#83553)
## About The Pull Request

Halves the volume of sound produced by the gravity generator. This is
done code-side and no change is made to the sound files.

Apparently my tasteful composition of retro futuristic jetsons optimism
juxtaposed with an underlying commentary on the costs associated with
said optimistic attitude(see #83517) was lost on the end users of the
/tg/station project. It has never been as clear to me that my HUGE
FUCKING BRAIN with IQ of more than yours is wasted on the /tg/station
project. Yet, my immense intellect is rivaled only by my nigh saintly
mercy, and thus i have deigned to give you this one line pr.
This is untested code.

## Why It's Good For The Game
People who claim to play the game report that the gravity generator is
still too loud.

## Changelog

🆑
sound: The volume of the gravity generator has been halved
/🆑
2024-05-29 17:35:11 -07:00
Afevis
54f9ea034c Iceblock flora generation fixes (#83450)
Fixes #83438

🆑 ShizCalev
fix: Trees will no longer be growing through railings on forest planets
fix: Trees/plants will no longer grow through wood pathways on Icebox
fix: Railings will no longer appear ontop of rock walls on icebox
/🆑

Old:

![image](https://github.com/tgstation/tgstation/assets/6209658/094c1708-ac4a-4e1a-acff-9d308a376476)

Fixed:

![image](https://github.com/tgstation/tgstation/assets/6209658/16c0af8b-4293-4b53-98b7-14093244447a)
2024-05-29 22:05:49 +02:00
AnturK
53b73559bb Fixes decals compounding on shuttles (#83548)
Fixes #83535
Fixes #76382

Just a missing UnregisterSignal.
2024-05-29 21:23:36 +02:00