Commit Graph

2017 Commits

Author SHA1 Message Date
Ryll Ryll
40fa6e43a0 Fixes tackles rarely applying permanent slowdowns, improves min_distance tackle targeting (#73550)
## About The Pull Request

Fixes: #61449
Monster tackles (the top tackle result that automatically applies an
aggro-grab) now checks if the user is getting stamcrit from the stamina
damage that comes from launching the tackle. If not, it proceeds as
normal and applies the aggro-grab, but if it does stamcrit, the tackler
instead extra stamina damage/paralyze/knockdown in lieu of the autograb.
This resolves the issue with the aggro-grab slowdown applying
permanently, since that grab shouldn't have been possible to land in the
first place.

Fixes: #50888
I was lazy when I first implemented tackles, so if you tackled a target
with a range less than the gloves' min_distance (dolphin and rocket
gloves), it would simply launch you the min_distance range in the
nearest cardinal/diagonal direction. It now uses the angle you're
launching towards, which means you'll leap closer to where you actually
clicked on, and hopefully make rocket gloves slightly less suicidal.

Also I raised the amount of objects you can knock off a table with a
tackle from 12 to 18 because it's funny.
## Why It's Good For The Game
Tackles are more consistent and less buggy. Also you can shotgun more
shards of glass stacked on a table at people at once with rocket gloves.
## Changelog
🆑 Ryll/Shaps
fix: Landing a monster tackle that applies an auto aggro-grab while
stamcrit will no longer try applying an aggro-grab that leads to a
permanent slowdown to the user, and will instead just knock the target
down a bit harder.
fix: Launching dolphin and rocket glove tackles on targets at ranges
shorter than their minimum distance will be more accurate at targeting
where you clicked at, rather than locking you into the nearest
cardinal/diagonal direction.
balance: You can now knock more things off a table full of stuff by
tackling it than you could before.
/🆑
2023-02-21 16:43:03 +13:00
Jacquerel
6dc123735d You can't eat a turf unless you are standing next to it (#73481)
## About The Pull Request

Fixes #73115, don't you love telepathy?
Just adds a range check to the general "can I eat this now?" proc. I
couldn't think of any situation where you should be able to eat
something which isn't next to you.
I tested it and you can still feed people and eat food from your
inventory.

## Why It's Good For The Game

It's funny to be able to eat pizza floor with your brain but not
intended.

## Changelog

🆑
fix: You can no longer eat pizza floor tiles with your brain.
/🆑
2023-02-18 13:45:53 -07:00
tralezab
77031e2a93 Refactors the Nuclear Authentication Disk's Lone Op Behavior Into a Component, + Examine Message (#73453)
## About The Pull Request

### Refactor

Turns all the behavior for the nuke disk raising lone op probability
when unsecured into a new component, the "Keep Me Secure" component. As
an example (and really, I made it to test that the component was
actually working), there is a new admin plush called the "whiny plushie"
that will change icon depending on whether it is secure or not. Useful!

### Examine

I also added an examine message. Will explain below

## Why It's Good For The Game

The examine message was really what this entire pr's purpose was really
for.

>
[Capsandi](https://tgstation13.org/phpBB/memberlist.php?mode=viewprofile&u=7767)
wrote:
[↑](https://tgstation13.org/phpBB/viewtopic.php?p=665827#p665827)Wed Feb
15, 2023 2:42 pm
Someone needs to pr some sort of indicator as to whether the disk is
'secure' or not so players who don't know about the niche lone op
mechanic won't make the same intuitive assumption (though swat has been
trolled for putting it in the safe before).

I agree with this for the same reasons I did #73016 so I'll restate the
point with it here: A piece of banning a captain recently was that they
didn't secure the disk, but there is no indication in game that the disk
has special condiitons that trigger lone op, just that it should be kept
safe (which yeah, nuke ops want it). I'd rather remove the ambiguity of
a captain knowing this mechanic or not for the sake of the game, a
single examine for it is harmless

I'm considering this administration, not a feature. If maints want me to
take it out and have this be refactor only, that's fine with me

## Changelog
🆑
refactor: Refactors how nuclear activation disk works. Shouldn't notice
a whole lot but if you do, it might be because of this.
admin: Disk now has an examine message for whether it's secure or not,
to make it less ambiguous for players.
/🆑
2023-02-17 23:09:41 +00:00
Jacquerel
7867d14fd4 Lightgeists won't try to heal toxin damage (#73467)
## About The Pull Request

Fixes #73439
Lightgeists use `heal_overall_damage` to heal, but despite the name that
actually only heals burn, brute, and stamina damage.
It will now prompt an error message if you try to heal someone who
doesn't have any of those damage types.
Simpler mobs can't take toxin or oxyloss damage so this has no effect on
spiders (the other user of this component).

Also during my conversion I forgot to set the lightgeist healing time to
0, so I did that too.

I thought about maybe changing this so that they _can_ heal toxin damage
but they've existed without being able to do it for so long that I don't
think it would be a "bug fix" at that point, I'll maybe adjust the
component behaviour further (to use `heal_ordered_damage` instead
probably) after this month. Until then I technically can't do it without
affecting Spider balance a little bit.

## Why It's Good For The Game

Makes it a _little_ clearer why someone's health doesn't increase when
they are clicked on.
Restores lost functionality.

## Changelog

🆑
fix: Lightgeists won't try to heal any damage which isn't burn or brute,
because they can't.
fix: Lightgeists don't need to perform an action bar in order to heal
someone, which was added by mistake.
/🆑
2023-02-17 15:03:57 -07:00
Tim
a1ada2c9ef Refactor, improve, and rename canUseTopic to be can_perform_action (#73434)
This builds on what #69790 did and improved the code even further.
Notable things:
- `Topic()` is a deprecated proc in our codebase (replaced with
Javascript tgui) so it makes sense to rename `canUseTopic` to
`can_perform_action` which is more straightforward in what it does.
- Positional and named arguments have been converted into a easier to
use `action_bitflag`
- The bitflags adds some new checks you can use like: `NEED_GRAVITY |
NEED_LITERACY | NEED_LIGHT` when you want to perform an action.
- Redundant, duplicate, or dead code has been removed.
- Fixes several runtimes where `canUseTopic` was being called without a
proper target (IV drips, gibber, food processor)
- Better documentation for the proc and bitflags with examples
2023-02-16 20:22:14 -05:00
Time-Green
6097d1dd42 Fixes taking items from storage in hyperspace (#73428)
Taking items from storages actually puts it on the floor and then in
your hands, which isnt really caught by movement signals. So deletes the
hyperspace component on item pickup

closes #72727

🆑
fix: fixes taking items from inventories glitching out in hyperspace
/🆑
2023-02-15 19:43:40 -07:00
Jacquerel
481824cf8c Chasms should not render contents invisible (#73424)
## About The Pull Request

Fixes #69507
Occasionally a mob would start processing itself as falling into a chasm
while already falling into a chasm. This would reset the "stored"
appearance data to the data from the end of the fall (where you are
invisible and size 0) and so just leave it in that state.
I couldn't find a way to replicate this reliably through gameplay but
spamming "get mob" worked.

I fixed it by just... not doing any of that stuff if you're already
falling into a chasm.
Also while unreported I noticed that `notransform` could get stuck on as
well, which it shouldn't do.

## Why It's Good For The Game

It's hard enough to rescue someone from a chasm, if their corpse is also
invisible and intangible afterwards then that's probably not ideal.

## Changelog

🆑
fix: Things dropped into a chasm should no longer occasionally become
invisible and intangible.
/🆑
2023-02-15 16:39:09 +01:00
Jacquerel
6dd590a4e1 Bileworms won't evolve if they're dead (#73427)
## About The Pull Request

Fixes #70865 
I kind of agree with the comments that it would be funny to canonise
_something else_ happening to dead ones once the alive ones evolve but
that would qualify as "a feature".

## Why It's Good For The Game

Even if it's pretty funny it's not really ideal for unbutchered mobs to
come back to life without warning at the 30 minute mark, and clearly not
intended.

## Changelog

🆑
fix: Bileworms which have been struck down but not butchered no longer
return in a more powerful form.
/🆑
2023-02-15 16:37:55 +01:00
MrMelbert
27e1a3c37b Refactors species mutanthands into human component (#73286)
## About The Pull Request

Mutanthands is now a component, which handles ensuring the mob always
has their mutant hands equipped to their right slots at all times.

Alternative to #73282 
Fixes #73034 

## Why It's Good For The Game

Cleaner and more consistent code, Ensures mutant hand mobs always have
their correct hands.

## Changelog

🆑 Melbert
fix: It should be way harder to lose your special hands as a zombie or
shattered risen ghoul.
refactor: Refactored mutanthands for zombies and shattered risen.
/🆑
2023-02-14 17:24:50 -07:00
LemonInTheDark
ea29ca3198 Prevents nulls in the always_visible_inventory list (which caused runtimes blocking PM reapplication) (#73400)
## About The Pull Request

Attempting to add a null to images (even in a list) is a runtime, which
in this case blocks off the rest of show_hud, breaking planemasters and
other shit

## Why It's Good For The Game

Closes #73387, closes #73364

## Changelog
🆑
fix: Equipping an fov item, disconnecting, waiting 6 minutes and
reconnecting will no longer break your game
/🆑
2023-02-13 15:56:14 -07:00
the-orange-cow
41440a3aa2 Heretic blades can properly butcher (#73145)
Presets initial butchering component, which allows heretic blades to
properly butcher, and sounds to work on items that don't have a custom sound.
2023-02-11 18:20:15 +00:00
MrMelbert
277626988b Fixes soul-stealer component being broken (#73285)
## About The Pull Request

It extracted the first index soulstone from the list and tried to
proc-call it.

But it's a list of weakrefs, so that doesn't work. 

I just changed it to hard references. It didn't really need to be
weakrefs, since it owned it.

## Why It's Good For The Game

Useful items woo

## Changelog

🆑 Melbert
fix: The bastard sword can create constructs again. Just hit the shells
with it
/🆑
2023-02-10 13:15:40 -07:00
Jacquerel
3335b5e59f Basic Mob Spiders II: Elements (#73202)
## About The Pull Request

This PR elementises two kinds of spider behaviour in preparation for
making them into Basic Mobs, which in turn will solve a bug with
Araneus.
This will probably conflict with my other PR but I'll deal with it.

The Nurse Spider and Flesh Spider healing abilities which were similar
but not _quite_ the same now share the same component.
Also Lightgeists because they also did this.
I'll be honest I think Flesh Spider would be better off with the
"Regenerator" component instead but that would be a balance change so I
can't do that right now.

The Tarantula "slower when not on webs" passive is also now an element.
This will make my third PR (to be opened when these two are merged)
easier.

Also I noticed we were using the same colour for spawning a particle in
a few places so I moved that hash into the colours define file.

ALSO while making this the linter identified that a shitload of procs
were passing `required_bodytype` to `heal_overall_damage` as if it was
`stamina` which probably caused some bugs. Don't know which though!


https://user-images.githubusercontent.com/7483112/217679050-b728ee98-3ba1-4663-bb6b-75295d5f9a6a.mp4

## Why It's Good For The Game

Reduces amount of duplicated code, making it easier to maintain.
Elements can be reused for other things later, like the infuser?

## Changelog

🆑
refactor: Spider healing abilities have been refactored to reuse the
same code rather than reimplement it across two different mobs, it
should work the same as it used to. This is also used by Lightgeists.
fix: Mob biotype on `heal_overall_damage` should be applied more
consistently. This might mean that some things which were previously
healing prosthetic limbs have stopped doing that.
/🆑
2023-02-10 12:40:31 -07:00
Time-Green
ad7699adc7 Fixes walking against hyperspace (#73219)
https://user-images.githubusercontent.com/7501474/216772808-97fa24a4-c9ba-4469-91d1-caebc76b81cf.mp4

Fixes not being able to do the above. The quickstart meant you would
instantly push you back., which was fine originally but then I added
diagonal movement so people could occationally get softlocked

🆑
fix: fixes issues with being walking against hyperspace locking you
/🆑
2023-02-08 21:48:38 -05:00
Thunder12345
c87cc44e04 Capture The Flag: Skill Issue (#72960)
## About The Pull Request

QoL update for CTF to make the experience better and smoother.

## Why It's Good For The Game

The CTF experience is a bit unpolished in some areas such as important
information (shield charge, control point score) being obscured,
mandatory hand switching on spawning, and players messing with their
team by blocking the controller.

## Changelog
🆑
qol: CTF guns spawn in the default active hand
qol: CTF shields become transparent as they lose charge
qol: CTF King of the Hill scores are visible to players in-game
qol: CTF controllers can no longer be blocked by players standing on
them
/🆑
2023-02-07 15:41:44 -08:00
MrMelbert
b28d1bf5c0 Fixes custom drink names / description being overridden (#73239)
## About The Pull Request

If the glass was renamed by a player, don't override the name /
description in `update_name` and `update_desc`. Simple enough

Unfortunate side effect is changing the name but not the desc leaves the
desc as it is, but I don't think anyone would really care or notice. It
used to be like this anyways.

## Why It's Good For The Game

Aesthetics. Fixes #72890

## Changelog

🆑 Melbert
fix: Custom named drinks (with a pen) no longer reset after their glass
volume updates
/🆑
2023-02-07 00:01:02 -07:00
lessthanthree
73d8b8ed20 Update gloves examine text (#73265)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/73240
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage ma
🆑 LT3
spellcheck: Gloves now mention modes, not intents
/🆑
2023-02-06 20:51:19 -08:00
Comxy
7e41cd3c0b Netherworld Mobs Refractor (#73086)
## About The Pull Request

This PR refactors netherworld mobs into basic mobs as best as possible.
Also makes some of them run faster when they are getting damaged or deal
more damage. Now the mobs might be able to keep up a little with the
players.
## Why It's Good For The Game

Makes the mobs have better movement and more dynamic movement. Makes the
quality of these mobs better.
## Changelog
🆑
add: Added new damage buffs for netherworld mobs
refactor: Refactors netherworld mobs into basic mobs
/🆑
2023-02-05 12:42:07 -07:00
Mothblocks
d67555a0b5 the inevitable Revert "Refactors admin verbs from giant ass lists into datums" in case stuff breaks (#73206)
Reverts tgstation/tgstation#72407
2023-02-05 11:44:38 +13:00
lessthanthree
27828d5b53 Uplink failsafe explodes on demand (#73178)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/73144
## Why It's Good For The Game
It should explode when you say the codeword.
## Changelog
🆑 LT3
fix: Uplink failsafe explodes when its supposed to
/🆑
2023-02-04 12:38:53 +01:00
Zephyr
fca90f5c78 Redoes the admin verb define to require passing in an Admin Visible Name, and restores the usage of '-' for the verb bar when you want to call verbs from the command bar. Also cleans up and organizes the backend for drawing verbs to make it easier in the future for me to make it look better (#73214)
## About The Pull Request

Damn that's a long title.

Admin Verbs can be used in the verb bar with hyphens instead of spaces
again.
## Why It's Good For The Game

Admin muscle memory
## Changelog
2023-02-04 01:20:18 -08:00
CapybaraExtravagante
bd81d32080 Makes some improvements to how AI can use JPS with movement loops (#72685)
## About The Pull Request

This PR makes some changes to how JPS is used in movement loops, as it
was causing a variety of issues:

- Fixed some code where JPS would fail because the path is still being
made. Instead, the movement loop will now wait.
- Reduced the subsystem wait for the pathfinder subsystem from 2 seconds
to 0.1 seconds. @LemonInTheDark told me that this is better, I'll update
this with a better explanation once I squeeze it out of him :D
- Allows you to provide an initial path to the movement loop, in case
you pre-calculated one while making a plan.

## Why It's Good For The Game

Makes working with JPS a bit easier when making AI.

---------

Co-authored-by: Capybara <Capybara@CapybaraMailingServices.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-02-03 18:40:47 -08:00
Zephyr
7f25d7f17b Refactors admin verbs from giant ass lists into datums (#72407)
## About The Pull Request

See title.
## Why It's Good For The Game

Makes it easier for people to add new admin buttons, and also removes
the giant ass ugly lists that are an affront to my eyes.

Yes you are still able to call them manually via the verb bar

![image](https://user-images.githubusercontent.com/12817816/210163285-2ecb4b59-67b4-47d2-b324-77048ce852fe.png)

![image](https://user-images.githubusercontent.com/12817816/210163288-5a0ec98c-9589-4cab-8a6b-1ab5151aa040.png)
## Changelog
🆑
refactor: Admin verbs are now datums with a dedicated panel handler
admin: Admin verbs now come with a handy description when you hover over
them!
/🆑

---------

Signed-off-by: GitHub <noreply@github.com>
2023-02-03 16:32:37 -08:00
John Willard
c097f167b1 Completely removes do_mob and do_after_mob (#73117)
## About The Pull Request

This is a remake of #70242

Replaces all instances of ``do_mob`` and ``do_after_mob`` with
``do_after``.

## Why It's Good For The Game

All 3 of these are just copy pastes of eachother but some miss some
features (like do_after not checking for target loc change, which helps
towards fixing https://github.com/tgstation/tgstation/issues/66874
though it doesn't because mechs are setting ``do_after`` on the mob in
the mech) and signals only being used on ``do_after``.

## Changelog

🆑
fix: Mechs should now cancel out of drilling when they move.
/🆑
2023-02-02 21:17:20 +00:00
Fikou
88f04ed6d4 fixes fov removal f12 exploit (#73107)
## About The Pull Request
adds a variable to huds containing all screen objects that should be
permanently there
fov stuff goes there now rather than not being kept on the screen at all
therefore fov no longer disappears

## Why It's Good For The Game
i must torture lemon.

## Changelog
🆑
fix: fixes fov removal f12 exploit
/🆑
2023-02-02 15:43:54 +01:00
Pickle-Coding
e1c26680ba [WEBEDIT INCOMING]Allows any atom that is not an effect to increase supermatter matter power on consumption. (#73029)
If the consumed_object does not pass the isitem check, then it increases
the matter_increase by half of consumed_object.max_integrity, capped at
1000.
# WEBEDIT INFORMATION
This is indeed a webedit, but I tested the changes on local.

## About The Pull Request
If the atom is not an item, the matter power increase will be half of
the object's max integrity, up to a maximum of 1GeV (in case some object
has an absurd amount of integrity).
## Why It's Good For The Game
When a physical object gets consumed by the supermatter, people expect
it to do what it does for items, to give it trickled power over time.
It's confusing when it doesn't increase the power.
## Changelog
🆑
fix: Objects that are not items can increase supermatter power on
consumption.
/🆑
2023-02-02 00:42:00 -08:00
LemonInTheDark
51f02b5acc Fixes critical plane masters improperly not being readded in show_to (#72604)
## About The Pull Request

[Adds support for pulling z offset context from an atom's
plane](9f215c5316)

This is needed to fix paper bins, since the object we plane set there
isn't actually on a z level.
Useful elsewhere too!

[Fixes compiler errors that came from asserting that plane spokesmen had
a plane
var](b830002443)

[Ensures lighting backdrops ALWAYS exist for each lighting
plane.](0e931169f7)

They can't float becuase we can see more then one plane at once yaknow?

[Fixes parallax going to shit if a mob moved zs without having a
client](244b2b25ba)

Issue lies with how is_outside_bounds just blocked any plane readding
It's possible for a client to not be connected during z moves, so we
need to account for them rejoining in show_to, instead of just blocking
any of our edge cases.

Fixing this involved having parallax override blocks for show_plane and
anything with the right critical flags ensuring mobs have JUST the right
PMs and relays.
It's duped logic but I'm unsure of how else to handle it and frankly
this stuff is just kinda depressing.
Might refactor later

[show_to can be called twice successfully with no hide_from
call.](092581a5c0)

Ensures no runtimes off the registers from this

## Why It's Good For The Game

Fixes #72543
Fixes lighting looking batshit on multiz. None reported this I cry into
the night.

## Changelog
🆑
fix: Fixes parallax showing up ABOVE the game if you moved z levels
while disconnected
/🆑

---------

Co-authored-by: Time-Green <timkoster1@hotmail.com>
2023-01-31 10:25:38 +00:00
carshalash
141b2cac1b Adds nutriment factor to liquid gibs. (#73033)
## About The Pull Request

Over the years I've heard quite a few lizard players scratch their heads
in confusion due to the lack of gibs filling you up. I gave it a fairly
low value of 2 so people don't end up trying to power game it.

## Why It's Good For The Game

Adding an alternative use to gibs is always nice, at the moment it's
mostly just used for soap and cytology (Which barely anyone does.)

## Changelog

🆑
balance: Gibs now provide a small amount of nutriment.
/🆑
2023-01-30 23:40:24 -07:00
MrMelbert
d41013d13f Fixes a bad assignment of parent in spirit holding component (#72999)
## About The Pull Request

`parent` is a reference to the datum parent of the component, but this
was assigning it to a string for some reason?

I just removed it. It doesn't seem to be doing anything anyways

~~I was going to make parent a private variable but too many things
access it for some weird reason. Kinda wack~~

## Why It's Good For The Game

Bad code

## Changelog

🆑 Melbert
fix: Maybe fixes some issues with spirit holding, particularly relating
to it being in-exorcism-able.
/🆑
2023-01-29 19:42:04 +08:00
Tim
fd85f5c67f Buff scythes, goats, and plantbgone vs PLANT biotypes (#72889)
## About The Pull Request
This buffs scythes, goats, and plantbgone vs PLANT biotypes:

- Scythes now deal x1.5 damage to venus flytraps (3 hits to kill)
- Scythes now target the flower bud vines
- Goats now target flower bud vines and deal 15 damage to PLANT biotypes
- Goats have a eating sound whenever they bite PLANT biotypes
- Plantbgone now does 2 dmg per unit to PLANT biotypes (10 dmg per
spray)
- Plantbgone now has a 75% chance to remove weeds and deals large damage
to flower buds
- Weed control crates now come with a pair of leather gloves
- Golems are immune to thorn effects
- Any kind of thick glove material will prevent thorn effects when
attacking
- Flower buds will now take x4 damage from fire and sharp weapons
(unless they have fire trait)
- Regular scythes are now a sharp object

Also this fixes a few runtimes with spacevines and nulls. The bane
element now accepts `mob_biotypes` bitflags as an argument.

## Why It's Good For The Game
Before my changes:

- Plant-b-gone was doing 0.4 dmg per unit to PLANT biotypes (2 dmg per
spray)
- Scythes took 5 hits to kill venus flytraps
- Goats only affected podpeople
- Flower bud vines were being ignored by weed killing code
- Plantbgone only had a 50% chance to remove weeds (and this was very
inconsistent due to RNG)
- Botanical gloves and thick gloves didn't protect from thorns
- Golems were getting pierced by thorns despite having pierce immunity
- Flower buds were not taking the x4 damage like they should have been
- Regular scythes were not a sharp object, but other scythes
(chaplain's, megafauna loot) were sharp

This makes the weed killer crate more effective since people were
complaining about it being worthless vs vines and flower buds. These
changes give people more options to respond to threats vs plants.

## Changelog
🆑
add: Add a pair of leather gloves to weed control crate
balance: Mobs with the PLANT biotypes (venus flytraps, pod people,
killer tomatoes) are now much weaker vs scythes, goats, and plantbgone.
balance: Plantbgone is now more effective at destroying weeds.
balance: Regular scythes are now a sharp object
fix: Fixed scythes, goats, and plantbgone not affecting flower bud
vines.
fix: Thick and botanical gloves not protecting from thorns
fix: Golems not having pierce immunity from thorns
fix: Runtime where vines tried to spread into null turf
fix: Runtime where null vines that were destroyed were trying to spread
to nearby turfs
soundadd: Add eat food sound when goats eat plants
code: Improved goat targeting code
code: The bane element now accepts `mob_biotypes` bitflags as an
argument.
/🆑
2023-01-26 14:29:48 -08:00
Zephyr
18b041bf47 Add logging for manually changing your targeted zone (#72814)
## About The Pull Request

See title.
Surgery hud is exempt from this.
## Why It's Good For The Game

Requested by @Mothblocks 
## Changelog

Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
2023-01-23 22:22:24 -08:00
Bloop
c2f6a4408d Fixes toilet bongs, and fixes a serious bug in the crafting system (#72893)
## About The Pull Request

The PR everyone has been waiting for...fixed toilet bong crafting. Now
you can craft them just as before using the new crafting system.


![image](https://user-images.githubusercontent.com/13398309/213944308-74b3e50e-965d-4e69-9025-d011764b3247.png)

In attempting to fix this I encountered one of the gnarliest, nastiest,
meanest and most infuriatingly difficult to debug bugs I have come
across so far. And it's existed for as long as the crafting system has,
but due to unique circumstances it has been allowed to go unnoticed this
whole time.

Technical details below. Full list of changes here:

- crafting recipes can now contain structures as part of their
requirements
- removed deprecated var 'additional_req_tex' and changed text to use
the 'steps' list instead so they actually show in the gui
- toilet bongs are now passable terrain like normal toilets are
- fixed an atrocious bug with crafting that was by pure coincidence not
causing any problems
- this bug would prevent any recipes that did not contain a material
from deleting properly
- this bug would also cause any recipes that are supposed to use but not
consume machinery to consume them regardless

---

Basically, the bug that took me hours upon hours of debugging and
head-scratching to find is this:

from crafting.dm:
```
	main_loop:
		for(var/path_key in requirements)
			amt = R.reqs[path_key] || R.machinery[path_key]
			if(!amt)//since machinery can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it!
				continue main_loop
```
specifically this line:

`amt = R.reqs[path_key] || R.machinery[path_key] `

The culprit ended up being that if you do machinery[path_key] on an
empty list, it can lead to very unexpected behavior (see: EXITING THE
FUNCTION without actually doing anything).

I spent so much time thinking that item deletion wasn't working because
amt was being set to 0, false, or null perhaps when no, it wasn't that.
The function was just exiting out even before the (!amt) check due to
the atrocities committed by someone before me.

Setting amt = `R.reqs[path_key] || R.machinery[path_key]` on the other
hand always evaluates to a positive integer (either the successfully
retrieved reqs amt, or a 1 from the OR expression). It was only by
coincidence that the code did what it was supposed to, because:

1) Every single recipe has R_reqs, so the first part will never cause
the function-exiting failure because the list is never empty.
2) As for the second part of the expression, there are no recipes that
make use of CRAFTING_MACHINERY_USE, so the fact that machinery[path_key]
was never actually being accessed and thus set to a var (which is what
causes the function to exit) didn't matter.

So these two things together have basically allowed a really bad bug to
go unnoticed this whole time. I only noticed it because when trying to
add a third part to the expression it just did not work at all how you
would expect.

The solution is rather simply to add a check like so:
```

	main_loop:
		for(var/path_key in requirements)
			amt = R.reqs?[path_key] || R.machinery?[path_key]
			if(!amt)//since machinery can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it!
				continue main_loop
```

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

## Why It's Good For The Game

Fixes a bug with crafting that would inevitably torment someone else as
soon as they tried to add the right kind of recipe, if that hasn't
already happened by now.

<details>
<summary>Toilet bongs are back baby!!</summary>


![image](https://user-images.githubusercontent.com/13398309/213941079-ae7d007a-ca92-4de3-9de6-7a156b4a0618.png)

</details>

## Changelog
🆑
fix: toilet bongs crafting recipes
fix: fixed crafting itself
refactor: cleaned up some old code in the recipes file, added support
for structures in recipes
/🆑
2023-01-23 12:53:28 +01:00
tattle
57e88e6091 Crafting fireaxe cabinets, mech removal cabinets, and mirrors (#72856)
## About The Pull Request
Breaking down #72371 because it's... unreasonably large.
So this PR splits the crafting recipe file, and adds 3 new recipes for
fireaxe cabinets, mech removal cabinets, and mirrors.

## Why It's Good For The Game
Wallening compliance, and more of me on my shit breaking down long
files.

## Changelog
🆑 Tattle
qol: fireaxe cabinets, mech removal cabinets, and mirrors can now all be
crafted
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
2023-01-23 10:45:27 +01:00
MrMelbert
3bf0fe4932 Adds a new event, "Radiation Leak" (#72655)
Adds a new random event, "Radiation Leak". 

A random machine in a random department will begin leaking radiation. 

This includes a radiation aura around it, and semi-regular puffs of
smoke clouds containing mutagen and polonium.

The machine will stop leaking after some time, but can also be stopped
by using a random tool on it, indicated in its examine text.

I added a new "radiation emitter" component, for simple "emits
radiation" behavior. Then I made the radioactive mutation use it. This
means that the radioactive gene emits radiation while on stasis and
dead, rather than only in life.
2023-01-22 20:19:18 +00:00
Mothblocks
c26bc8d275 Add signal override back as a runtime (#72561)
We're not seeing this on CI and I'm not seeing it on my local DD logs
unless I go out of my way to check. Keeping separate file means it's
easy to go through, but this indicates a bug that needs to be fixed and
so it should still be in runtime.

Doesn't revert #70034, as it still keeps log_signal.
2023-01-21 16:02:25 -08:00
ChungusGamer666
5991542d4a Turns miming into a trait instead of an unsightly mind boolean (#72290)
## About The Pull Request

https://github.com/tgstation/tgstation/pull/72254 turned to be wildly
unpopular so i'm simplifying it and keeping only the important, code
backend stuff

## Why It's Good For The Game

makes the code gooder, makes mobs without a mind capable of miming (if
that becomes necessary for whatever reason)

## Changelog

Not player facing

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2023-01-21 16:00:43 -08:00
Timberpoes
07f03c3433 You no longer have to sacrifice your soul to give a mouse sentience. (#72782)
## About The Pull Request

Some Manuel shift I didn't take note of the round ID for.

A player ahelps because they LITERALLY VANISH. They think it's a genetic
meltdown. I check the logs and I don't think it is.

The player mentions they got attacked by a mouse just before they died.
I check the logs and what do we have, but the same game tick the player
gets yeeted into the void that a mouse gains sentience.

```
    Line 11801: [2023-01-17 23:39:00.036] ACCESS: Mob Login: Cheeseromancer/(Lemmiwinks) was assigned to a /mob/living/basic/mouse/white
    Line 11802: [2023-01-17 23:39:00.052] GAME: Cheeseromancer/(Lemmiwinks) Client Cheeseromancer/(Lemmiwinks) has taken ownership of mob Lemmiwinks(/mob/living/basic/mouse/white) (Medbay Treatment Center (155,85,2))
    Line 11804: [2023-01-17 23:39:00.068] ACCESS: Mob Login: Super17andre/(Carter Wolfe) was assigned to a /mob/dead/observer
    Line 11806: [2023-01-17 23:39:00.111] GAME: Cheeseromancer/(Lemmiwinks) has gained antag datum �Sentient Creature(/datum/antagonist/sentient_creature).
```

There's other chatter IC about sentience potions, which narrows down the
investigation.

Long story short, 20 month ago arm couldn't code and 20 month ago
maintainers couldn't review code. On this blessed day, we're all
complicit.

`on_tame` signal handler proc. Without source parameter. Signal handler.
Without source parameter.


![image](https://user-images.githubusercontent.com/24975989/213057552-feb1c0c4-9119-4ea2-85f0-04ff5db8ae74.png)

This leads to your classic offset-by-1 arg error. The signal's source is
the mouse. The tamer is the player that used the intelligence potion.
There is no food. But because the signal handler omits source, the tamer
is the mouse and the food is the tamer. Makes perfect sense in my head.

The food then, obviously, gets qdeleted in the later after_tame callback
invocation. Meaning the player using the sentience potion gets sent to
the Shadow Realm with no log entries suggesting cause of death.

Add in the missing source param, pass the source arg in the really,
really bad signal handler proc being called directly. And we feex.


![image](https://user-images.githubusercontent.com/24975989/213058176-5a4ecb74-756a-46ef-b83b-fc61df8364c6.png)
## Why It's Good For The Game

Players being randomly qdeleted leads to admins crying. In the future
I'm going to log qdeletions of cliented mobs. March. Because I have time
off work then.
## Changelog
🆑
fix: Mice given sentience through intelligence potions no longer
immediately consume the body and soul of the person whom uplifted them.
/🆑
2023-01-21 09:41:32 -08:00
NamelessFairy
65481ec9e9 Trying to grab something restricted by HAUL gauntlets now has a Balloon alert. (#72758)
## About The Pull Request

Part of #72710 that I think is useful to be PRed even if the original is
closed. When you try to grab someone or something restrained by HAUL
gauntlets theres now a balloon alert telling you that its gripped too
strongly, rather than no indication at all.
## Why It's Good For The Game

There being no player facing indication to attempting to steal an item
being pulled by HAUL gauntlets seemed odd to me as without the feedback
its easy to mistake it for just missing the grab.
## Changelog
🆑
qol: Theres now a visual indicator when you attempt to grab an object or
person restrained by the HAUL gauntlets.
/🆑
2023-01-18 23:22:18 -08:00
Comxy
b485ad1e47 New Mob [Garden Gnomes] (#72672)
## About The Pull Request
Garden gnomes can go into the ground when they stand still for a while.
If they are damaged and underground they will heal. If they are
underground they will also gain damage resistance. They can make people
trip when underground and deal some damage. They are available through
golden slime cores or you can collect them from cargo with an emag. If
one of them gets damaged they will all retaliate against the attacker.

They have a very realistic colour pallet based on online gathered data.
Depending on their colour pallets some of them have a very low chance of
spawning.
## Why It's Good For The Game
These new garden gnomes come with expanding the world building of space
station 13. These gnomes will add more variety to the game play and use
an interesting AI and behavior that interacts with the player.

![gnome_promo1](https://user-images.githubusercontent.com/25363960/212195653-0b434f17-e73c-4a87-b8b8-e96dcf057269.PNG)

![gnome_promo2](https://user-images.githubusercontent.com/25363960/212195658-4cbcd863-dcab-4643-9e3b-686e79dcb435.PNG)
## Changelog
🆑
add: Adds garden gnomes.
imageadd: Adds garden gnome sprites.
/🆑
2023-01-17 10:02:20 -08:00
Jeremiah
872e64fb05 Adds spaces around logical operators (#72603)
## About The Pull Request
Part of a prior PR that was closed (#72562). This version does not add
the check in CI.
## Why It's Good For The Game
The work is already done, so I figured why not.
## Changelog
N/A Nothing player facing

Co-authored-by: Jeremiah Snow <jlsnow301@pm.me>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-01-16 16:56:35 -08:00
John Willard
b760c0d400 Uses RegisterSignals for lists of signals, instead of RegisterSignal. (#72581)
## About The Pull Request

Uses RegisterSignals instead of RegisterSignal when registering to a
list of signals.

## Why It's Good For The Game

Less error messages, RegisterSignals is meant to be used for lists.

## Changelog

Nothing player-facing.
2023-01-16 21:08:28 +01:00
MrMelbert
c3a1f21c1a Converts blindness and nearsightedness to status effects, scratches some VERY dumb blindness handling that resulted in mobs becoming "incurably" blind (#72267)
## About The Pull Request

- Nearsighted is now a grouped status effect.
- Blindness is now a grouped status effect.
   - Eye handling of blindness has improved. 
- When eyes are removed, they now cause you to become blind, rather than
handling it in `update_tint`.
- Being ahealed no longer blinds you for one tick, meaning that black
overlay on aheal is gone.
- Temporary Blindness is now a status effect.
- Both Nearsightedness and Blindness have been exorcised from mob vars
and life chains. This means that we've finally cut 2 procs from life,
`handle_status_effect` and `handle_traits`, and moved both to event
based processing. Wooo optimizations.
- Swapped pacifism status effect to use apply and set helpers. 
- Removed an unused admin toggle that disabled welding helmet tint but
also tint from every clothing item and also blindness from losing your
eyes.
- Clothes now generally all blind their mob more consistently.
- Oculine, eye surgery, and sensory restoration are now no longer the
only way to fix blindness from eye damage. If your eyes are healed
through any other means, it will also heal your blindness.
- Some things that made you blind, such as ling blind sting, no longer
just flat made you blind from eye damage forever. They now cause eye
damage directly, which in turn makes you blind from eye damage, as
expected.
- Pacifists can't eyestab anymore. Eyestabs now have a limit on the
amount of blur applied.
- Refactored some `is_x_covered` procs to accept flags rather than have
a lot of arguments for some silly reason.
- Unit tests for blindness. 

## Why It's Good For The Game

Blindness was exceptionally poorly handled prior, primarily due to the
fact that it was tied to the mob instead of separated out

On top of that the system put a LOT of faith in proper handling of
blindness on the coder's end which was misplaced evidently. Many places
didn't update or handle blindness correctly, or just let people
perma-blind.

Deferring it to a status effect improves this a lot

## Changelog

🆑 Melbert
refactor: Refactored blindness and nearsightedness. Important to note is
that all mobs are naturally blind until their eyes are actually created.
refactor: Refactored "is covered" procs
fix: Less sources of blindness now cause permanent blindness. Includes
the "Blind" Spell and "Blind Sting" from changelings.
admin: Ahealing someone no longer flashes the blind overlay for 1 tick.
admin: I removed an unused (sort of) inaccessible admin verb that
allowed you to toggle the tint from all welding helmets (and clothing)
(and lack of eyes) in existence, let me know if you want similar back
balance: Changeling "Blind Sting" now causes eye damage (enough to
blind) rather than arbitrarily forcing blindness.
balance: Visionloss virus symptom now causes eye damage (enough to
blind) rather than arbitrarily forcing blindness.
balance: Oculine has been reworked slightly. Prior, Oculine arbitrarily
healed blindness and nearsightedness from eye damage reagrdless of how
damaged the eyes were, and applied blur on success. Now, Oculine just
heals eye damage, and blindness / nearsightedness is restored in the
process. There is now a probability every tick that eye blur is applied
based on how pure the oculine is while healing very damaged eyes.
balance: Pacifists can no longer eyestab.
balance: Any clothing item that covers your eyes contributes to getting
the bonus while sleeping, and to removing temporary blindness faster
/🆑
2023-01-15 23:01:40 -08:00
san7890
b9c603369a Allows Chaplain's Spirit Sword To Redo Name If Invalid (#72642)
## About The Pull Request

The current behavior doesn't let the sword re-choose their name if they
screw it up the first time and it turns out to be filtered or sanitized
out for whatever reason. That's silly in my opinion, so I changed it to
be more like holoparasite name-selection behavior, where you get the
text to choose your name until you get it right.

I moved the re-naming portion of the sword to be after all of the
important RegisterSignal steps as well, just to be safe as we sleep as
they plug in different names they might want.
## Why It's Good For The Game

You shouldn't be stuck as "spirit of the blade" permanently if you
accidentally balls up the word filter, let's have it be more like
holoparasite behavior to be nicer.
## Changelog
🆑
qol: Spirits of possessed blades (Chaplain's Null Rod Option) will be
able re-try selecting their name if it ends up to be filtered for any
reason.
/🆑
2023-01-14 19:51:05 +01:00
NamelessFairy
e9930877bc Deadchat controlled mobs/objects now appear in the orbit menu. (#72628) 2023-01-13 22:35:14 -08:00
MrMelbert
381cad1227 Fixes a bad argument for onwear comp (#72653)
## About The Pull Request

Everywhere used `saved_event_type` but the parameters, causing runtime

## Why It's Good For The Game

Runtimes bad

## Changelog

🆑 Melbert
fix: Fixed not getting moodlet from freshly laundered clothing
/🆑
2023-01-13 17:53:50 -08:00
tralezab
7795faec8a Memory Expansion! New memories, and prisoners are tattoo'd to the degree of their crime. (#72457)
## About The Pull Request

### New Memories

- Added a memory for catching a fish
- Added a memory of who turned you into a revolutionary, this might be
very cool later on for mindreading purposes
- Added a memory for infusing with something

### Prisoner Tats

- Prisoner backgrounds now come with a certain amount of tattoos
depending on what you did. Negligence? Zero tats.
<details>
  <summary>Mass Murderer?</summary>

  BECOME
  https://youtu.be/7xUtZzLBV5c?t=73

</details>
- Because I wanted someone covered head to toe in tats, there is now a
"Mass Murderer" background that comes with 6 tattoos, one for each limb.

## Why It's Good For The Game
## Changelog
🆑
add: Some prisoner backgrounds have more or less tattoos.
add: More Memories to collect involving fishing and getting converted
/🆑
2023-01-13 20:11:08 +00:00
Fikou
bd11c58a97 fixes twohanded items not letting you switch hands (#72618)
## About The Pull Request
unregisters the correct signal

## Why It's Good For The Game
mooth

## Changelog
🆑
fix: fixes twohanded items not letting you switch hands
/🆑
2023-01-11 11:40:38 -05:00
SyncIt21
ec5c9dfd10 Stock Part Datumization Complete (#72559)
So i accidently reverted all my commits in #72511 when resolving a merge
conflict So ummm yeah fuck my bad anyway

## About The Pull Request
Finishes what was started in #71693 and completes the
[initiative](https://github.com/tgstation/dev-cycles-initiative/issues/1)

Except for `obj/item/stock_parts/cell` and its subtypes. All machines
now use `datum/stock_part` for its requested components & component
parts

Not sure if i caught every machine & stuff in the game so merge with
caution
## Changelog
🆑
code: datum stock part for every obj stock part
refactor: all machines & dependent experiments to use datum stock parts
/🆑
2023-01-11 07:53:36 -08:00
LemonInTheDark
0c0f6bc5dd Fixes a bug with drifting improperly stopping (#72588)
## About The Pull Request

You would hold a direction when you hit a wall, step, have the newt move
blocked by your still living component, and then sit there floating In
the last fix I did here I removed an unregister off loop pausing, which
was leading to conflicting component additions and so runtimes.

I've moved it to an unreg off loop deletion only, to avoid the old
runtime and still preserve the existing desired behavior

## Why It's Good For The Game

Fixes stepping after a drift movement. It looked really dumb and now
it's gone
Fixes https://github.com/tgstation/tgstation/issues/71454

## Changelog
🆑
fix: You can now properly start drifting after moving out of a drift
/🆑
2023-01-10 09:44:23 +01:00
Comxy
40a3363525 Basic Faithless Mob (#72479)
## About The Pull Request
Turns the faithless mob into a basic mob with unique behaviors, it will
now break lights and drag around victims bodies. Can also punch open
airlocks if they can be opened.
## Why It's Good For The Game
Now the faithless mob has its own unique behavior and it is cool to see
more AI variety.
## Changelog
🆑
add: Faithless will now also break lights and drag victims around
refactor: Faithless into basic mob
/🆑
2023-01-09 18:08:29 +00:00