Commit Graph

3301 Commits

Author SHA1 Message Date
necromanceranne 57624ca1e2 Rebalances wound determination values, wounding escalation and wound armor to hopefully be less explosive (#91099)
## About The Pull Request

This is a big one so please bear with me, wounds are complicated

### Max Potential Wound Rolls

We've decreased the max contributed damage to wound rolls from 35 to 25.
This results, after the exponent, a max possible wound roll of 1 to 91
before any modifiers (assuming the attack, after armor, is 25 or above).

The minimum value to wound is still 5.

### Wound Escalation Penalties

Most wounds were contributing significant numbers per wound type to the
potential for a new wound to occur. Getting wounded once meant you were
getting wound a lot, but actually getting past that first wounding may
be the tricky part.

We have significantly reigned in the wound penalty that having a wound
contributes, and instead utilize the series wound penalty to allow same
type wounds to escalate themselves faster as a priority. Having wounds
still makes you more wound vulnerable, just not to such an extreme
degree.

The priority here for what wounds matter most for contributing to
overall wounding vulnerability is ``Infected BURNS > BURNS >
SLASH|PIERCE > BLUNT.``

### Wound Armor

Wound armor, unlike all other kinds of armor, was used as a additive
value to the wound roll modifiers rather than a multiplicative value.

We have reworked how wound armor is determined by changing how wound
modifiers are calculated.

Firstly, we're passing our entire injury roll into the
``check_woundings_mod()`` proc, as we're not treating this as a proc
that just adds values anymore.

Secondly, bare wound bonus only applies if there is no potential wound
protection from any source, as expected. But it comes last in the
calculations.

Thirdly, wound protection is applied to the injury roll last, after
wound bonuses from the attack, wound bonuses from other wounds and wound
bonuses from a disabled limb are applied. This does not include serial
wound bonuses, which are determined outside of this proc.

Wound protection comes from two sources. Clothing and limb wound
resistance. Your chest and head have an amount of wound resistance so
long as they are not mangled in any fashion. Being mangled means having
either a hairline fracture or a weeping avulsion wound.

Wound protection reduces the final injury roll by a percentage. Say our
roll is 50, and we have effectively 50% wound protection. The final roll
would be 25.

### ~~Wound Armor on Clothing~~ Reverted

~~Most clothing have had their wound armor values changed. As a loose
rule, I used the highest of melee or bomb armor, except where that value
was 100, in which case I used the lowest instead. I'm basing this
decision on how embeds are calculated, which is attack type agnostic.~~

~~Some armor have inconsistent values because they are alternative
armors to an existing armor type or are hyperspecialized armor.
Ablative, bulletproof and security vests all share a value of 35,
despite the former two not having decent melee or bomb armor.~~

~~Some clothing missing wound armor that should have had them now have
wound armor.~~

~~This may need a bit of scrutiny in case one or two seem weirdly high.
Some have maybe become too low. Its a bit hard to say.~~

### The ``bare_wound_bonus`` variable

I changed it to ``exposed_wound_bonus`` to better represent when it
applies. You can be naked and still not be affected by this bonus if the
limb has wound resistance.

## Why It's Good For The Game

I'm not promising anything with this PR, but this is an attempt to
sanity check the values on wounds so that we're not seeing what the data
that determined the removal of beheading presented. An extreme
over-representation of tier 3 wounds. ~~And, from that, maybe I can
argue for beheadings coming back. That's my goal. I think beheadings
happened so much because the numbers were in need of work.~~ Well okay I
just wanna make wounds a bit more workable actually more than I want
beheadings.

Why is it that tier 3 wounds were so over-represented? Because wounds
will often force more severe wounds of other types by merit of any
wounds existing at all on a limb. Having **_a_** wound makes you more
wound prone for any kind of wound, and not just making you more likely
to suffer a more severe type of the same wound.

The threshold mechanic was intended to simulate making a wound worse,
but oddly just made a limb broadly more prone to getting worse from any
kind of attack to such a degree that future wound rolls of different
types were often going to start at the threshold necessary to be a tier
3 wound.

Dismemberment, mind you, requires you to suffer a flesh wound while you
have a bone wound of tier 2 or higher (with tier 3 giving a bonus to
this). You can do this readily via just a sharp weapon, because having a
mangled limb causes the wound to turn into a bone wound. Technically,
this is meant to be less likely as the effective damage for this wound
is halved. But the wound bonus from having a flesh wound was almost
always significant enough to kick your new bone wound up to a tier 3.

In other words; its not surprising that you saw so many beheadings,
because the system wanted to behead you as fast as it possibly can
thanks to all these escalating values.

Wound armor was only applied as a flat reduction on the roll. The
average for wound armor was 10. After receiving a single wound, you can
expect wound rolls to reach upwards of 100, even if the actual damage
roll was not particularly high, due to wound stacking bonuses form being
wounded.

This meant that wounds, if they happened, came thick and fast after the
first, regardless of what your protection might be to wounds. It was
just a matter of getting past the initial bump.

This is why effects that forced wounds were so powerful. They basically
made a given limb more prone to taking a wound without having to deal
with the protection problem first.

Finally, this is just a broad flaw with the system that is not its
fault. It is actually a problem that isn't a problem. Most people in the
game are not wearing helmets that protect their head. So most people are
going to suffer from a higher proclivity of being wounded if people are
aiming for the head. There is this...kind of cargo cult belief that
aiming for the head means you do more damage, or can stun someone if
you're lucky or what have you. It's entirely nonsense, but it has a
grain of truth in that people rarely wear, or even have access too,
headwear that provides wound protection or any protection at all. People
have jumpsuits, which are universally wound protected, but that isn't
true of the head. Look, the point is, they're not aiming at the head
because it is usually less armored, its for other reasons but it just so
happens to become true due to wounds and how wounds roll their type.

To soften this issue, I've decided to treat wound resistance as armor
until the limb suffers a tier 3 wound. This way, hits to the head MAY
not necessarily escalate to tier 3 instantly as they would on live even
from relatively low power weapons. Some weapons have very low force, but
have extreme bare wound bonuses. This should be less likely after this
change. I doubt this will necessarily make high damage high wound
weapons like energy swords any less prone to cutting you clean open, but
it might thanks to the reduction to contributed damage to the injury
roll. The system is now _a bit more random_.

## Changelog
🆑
balance: Wounds do not make you as vulnerable to suffering wounds of all
types as before. Instead, wounds make you more vulnerable to suffering
worse versions of themselves as a priority.
balance: Wound armor is now more impactful when protecting you from
wounds when you have already been wounded.
balance: Your head and chest are more difficult to wound until they have
been mangled; either from suffering from a weeping avulsion or a
hairline fracture.
code: Changed the variable for bare_wound_bonus to exposed_wound_bonus
to better explain what that variable is doing.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2025-06-19 17:49:59 +02:00
Kingsley-95 7ebb9f5776 Bugfix for dragonblood (#3903)
<!-- 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
Right now, dragons blood will make people invisible if a 1 is rolled due
to how features is overwritten instead of just adding to the existing
list for the mob. Also.. seems those parts are tracked elsewhere?
Removed the list overwrite and have it updating mutant parts now
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

<!-- Please make sure to actually test your PRs. If you have not tested
your PR mention it. -->

## Why It's Good For The Game
Bug fixes are cool, being fully invisible is silly
<!-- 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. -->

## Proof Of Testing

![image](https://github.com/user-attachments/assets/05fbffd2-615a-4610-a0ef-d4bfcdb11e52)

<!-- Compile and run your code locally. Make sure it works. This is the
place to show off your changes! We are not responsible for testing your
features. -->
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
fix: dragons blood now has chance of turning into lizard person rather
than fully invisible
/🆑
<!-- 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 its 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. -->




<!-- 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. -->

<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->

---------

Co-authored-by: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com>
2025-06-16 19:40:28 -04:00
SyncIt21 c780349b12 Fixes lathes breaking on ore silo deletion (#91498)
## About The Pull Request
- Fixes #91494
- Fixes #91479
- Fixes #90533

The ORM disconnects the machines from its `Destroy()` proc by which time
its deleted flag has already been set to TRUE leading to an early
return, thus causing the silo to not disconnect properly

## Changelog
🆑
fix: lathes don't break on ore silo deletion
/🆑
2025-06-15 15:52:14 -04:00
Ghom 75e7ef6def Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-15 15:50:31 -04:00
SyncIt21 be926cc1a2 Fixes lathes breaking on ore silo deletion (#91498)
## About The Pull Request
- Fixes #91494
- Fixes #91479
- Fixes #90533

The ORM disconnects the machines from its `Destroy()` proc by which time
its deleted flag has already been set to TRUE leading to an early
return, thus causing the silo to not disconnect properly

## Changelog
🆑
fix: lathes don't break on ore silo deletion
/🆑
2025-06-08 14:43:04 +00:00
Ghom 14fb86e3e8 Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

## Changelog

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-08 13:57:10 +02:00
carlarctg baa9f4f592 Adds the bloodroach (#91383)
## About The Pull Request

Adds bloodroaches.


![image](https://github.com/user-attachments/assets/2f122787-0a22-4ff3-9c9b-7e14ca479369)

These are cockroaches that have gorged themselves on blood in
maintenance. They're very gross!


![image](https://github.com/user-attachments/assets/1ff744ed-a61b-4f6b-8d1c-28664f7a953f)

Splatting one causes an explosion of blood all around the death
perimeter, splashing both turfs and mobs with blood.

They have a 1% chance of spawning in place of normal roaches.

They also spawn in:
- Abandoned crates, replacing the 30 roaches with 30 bloodroaches.
- As backup anomalous crystal possession targets.
- Grimy fridges

Added a trait given to things killed by pest spray, used to check on
death explosion for bloodroaches.
Changed roach spawns in maps to use mob spawners, so I can replace them
with bloodroaches 1% of the time.
## Why It's Good For The Game

Splatting a random roach in maintenance that explodes into blood sounds
hilarious. It also adds janitorial depth by requiring pest spray to
carefully eliminate these pests
## Changelog
🆑
add: Added bloodroaches, a rare variant of cockroaches that explode into
a shower of blood when squashed.
/🆑
2025-06-05 20:05:25 -04:00
Bloop c906b85d30 Audits wash/cleaning signals + refactors wash() to ensure no needless mob updates occur (#91259)
## About The Pull Request

This has the potential to create a lot of needless mob updates which is
not great. Now should only update a mob's clothing if it was actually
washed.

This PR

1) ensures that all wash() procs return a bitflag.
2) ensures that `wash()` proccalls which result in expensive operations
like icon updates only do so when it is necessary

## Why It's Good For The Game

Updating mob sprites is expensive, and doing it when nothing has been
changed is bad.

## Changelog

Nothing really player facing
2025-06-05 20:05:19 -04:00
John Willard 3c1505ac06 Cyborgs now use storage datum (#90927)
This moves Cyborgs onto using storage datums, removing the remenants of
the shitcode that was Cyborg inventory. It's now done mostly by
equipping/unequipping/storage items, much like how other mobs do.
This allows borgs to take advantage of more hand support stuff and
things like ``dropped()``, so borgs no longer have to copy paste drop
code to ``cyborg_unequip``

It also:
- Removes ``CYBORG_ITEM_TRAIT``
- Removes all borg items being ``NODROP``

https://github.com/user-attachments/assets/11442a10-3443-41f2-8c72-b38fb0126cdb

Currently borgs are able to have their entire inventory open and a bag
below it, which I thought was a little weird. I always assumed they WERE
storage items, so I guess I'm doing it myself.
Cyborgs using storage code makes it easier for contributors to actually
do stuff with, without risking breaking everything. It also hopefully
will make borg items more resilient against breaking in the future, now
that we're not relying on nodrop.
Also just brings them more in line with other mobs, all of which make
use of storages.

🆑
refactor: Cyborg's modules now use storage (so opening a bag will close
modules instead of overlap one over the other).
qol: Observers can now see Cyborg's inventories (like they can for
humans).
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-05 19:49:49 -04:00
carlarctg 0b683d175b Adds the bloodroach (#91383)
## About The Pull Request

Adds bloodroaches.


![image](https://github.com/user-attachments/assets/2f122787-0a22-4ff3-9c9b-7e14ca479369)

These are cockroaches that have gorged themselves on blood in
maintenance. They're very gross!


![image](https://github.com/user-attachments/assets/1ff744ed-a61b-4f6b-8d1c-28664f7a953f)

Splatting one causes an explosion of blood all around the death
perimeter, splashing both turfs and mobs with blood.

They have a 1% chance of spawning in place of normal roaches.

They also spawn in:
- Abandoned crates, replacing the 30 roaches with 30 bloodroaches.
- As backup anomalous crystal possession targets.
- Grimy fridges

Added a trait given to things killed by pest spray, used to check on
death explosion for bloodroaches.
Changed roach spawns in maps to use mob spawners, so I can replace them
with bloodroaches 1% of the time.
## Why It's Good For The Game

Splatting a random roach in maintenance that explodes into blood sounds
hilarious. It also adds janitorial depth by requiring pest spray to
carefully eliminate these pests
## Changelog
🆑
add: Added bloodroaches, a rare variant of cockroaches that explode into
a shower of blood when squashed.
/🆑
2025-06-04 14:57:11 -07:00
Bloop 2bae025bfe Audits wash/cleaning signals + refactors wash() to ensure no needless mob updates occur (#91259)
## About The Pull Request

This has the potential to create a lot of needless mob updates which is
not great. Now should only update a mob's clothing if it was actually
washed.

This PR

1) ensures that all wash() procs return a bitflag.
2) ensures that `wash()` proccalls which result in expensive operations
like icon updates only do so when it is necessary

## Why It's Good For The Game

Updating mob sprites is expensive, and doing it when nothing has been
changed is bad.

## Changelog

Nothing really player facing
2025-06-02 18:54:53 +00:00
John Willard c51ee7efa5 Cyborgs now use storage datum (#90927)
## About The Pull Request

This moves Cyborgs onto using storage datums, removing the remenants of
the shitcode that was Cyborg inventory. It's now done mostly by
equipping/unequipping/storage items, much like how other mobs do.
This allows borgs to take advantage of more hand support stuff and
things like ``dropped()``, so borgs no longer have to copy paste drop
code to ``cyborg_unequip``

It also:
- Removes ``CYBORG_ITEM_TRAIT``
- Removes all borg items being ``NODROP``


https://github.com/user-attachments/assets/11442a10-3443-41f2-8c72-b38fb0126cdb

## Why It's Good For The Game

Currently borgs are able to have their entire inventory open and a bag
below it, which I thought was a little weird. I always assumed they WERE
storage items, so I guess I'm doing it myself.
Cyborgs using storage code makes it easier for contributors to actually
do stuff with, without risking breaking everything. It also hopefully
will make borg items more resilient against breaking in the future, now
that we're not relying on nodrop.
Also just brings them more in line with other mobs, all of which make
use of storages.

## Changelog

🆑
refactor: Cyborg's modules now use storage (so opening a bag will close
modules instead of overlap one over the other).
qol: Observers can now see Cyborg's inventories (like they can for
humans).
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-01 01:26:53 +00:00
Goat 788f38a21a [MDB Ignore] Makes toolset arms a subtype of arm implants (#91029) 2025-05-29 16:16:13 -04:00
Bloop 655b66bdd0 Adds automatic GAGS icon generation for mapping and the loadout menu (#90940)
Revival of https://github.com/tgstation/tgstation/pull/86482, which is
even more doable now that we have rustg iconforge generation.

What this PR does:

- Sets up every single GAGS icon in the game to have their own preview
icon autogenerated during compile. This is configurable to not run
during live. The icons are created in `icons/map_icons/..`
- This also has the side effect of providing accurate GAGS icons for
things like the loadout menu. No more having to create your own
previews.

![FOuGL6ofxC](https://github.com/user-attachments/assets/e5414971-7f13-4883-9f7f-a8a212b46fe8)

<details><summary>Mappers rejoice!</summary>

![StrongDMM_1oeMSoRHXT](https://github.com/user-attachments/assets/83dcfe4c-31be-4953-98f3-dff90268bbc4)

![StrongDMM_uyqu3CggPn](https://github.com/user-attachments/assets/7896f99e-2656-40e1-a9da-3a513882365a)

</details>

<details><summary>Uses iconforge so it does not take up much time during
init</summary>

![dreamdaemon_u4Md3Dqwge](https://github.com/user-attachments/assets/17baaff8-5d5e-4a4d-ba8f-9dd548024155)

</details>

---

this still applies:

Note for Spriters:

After you've assigned the correct values to vars, you must run the game
through init on your local machine and commit the changes to the map
icon dmi files. Unit tests should catch all cases of forgetting to
assign the correct vars, or not running through init.

Note for Server Operators:

In order to not generate these icons on live I've added a new config
entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in
the config.txt

No more error icons in SDMM and loadout.

🆑
refactor: preview icons for greyscale items are now automatically
generated, meaning you can see GAGS as they actually appear ingame while
mapping or viewing the loadout menu.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-05-29 16:14:43 -04:00
Goat 640e692c87 [MDB Ignore] Makes toolset arms a subtype of arm implants (#91029) 2025-05-28 01:11:27 -04:00
Bloop cb51a652a9 Adds automatic GAGS icon generation for mapping and the loadout menu (#90940)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/86482, which is
even more doable now that we have rustg iconforge generation.

What this PR does:

- Sets up every single GAGS icon in the game to have their own preview
icon autogenerated during compile. This is configurable to not run
during live. The icons are created in `icons/map_icons/..`
- This also has the side effect of providing accurate GAGS icons for
things like the loadout menu. No more having to create your own
previews.


![FOuGL6ofxC](https://github.com/user-attachments/assets/e5414971-7f13-4883-9f7f-a8a212b46fe8)

<details><summary>Mappers rejoice!</summary>


![StrongDMM_1oeMSoRHXT](https://github.com/user-attachments/assets/83dcfe4c-31be-4953-98f3-dff90268bbc4)


![StrongDMM_uyqu3CggPn](https://github.com/user-attachments/assets/7896f99e-2656-40e1-a9da-3a513882365a)

</details>

<details><summary>Uses iconforge so it does not take up much time during
init</summary>


![dreamdaemon_u4Md3Dqwge](https://github.com/user-attachments/assets/17baaff8-5d5e-4a4d-ba8f-9dd548024155)

</details>

---

### Copied from https://github.com/tgstation/tgstation/pull/86482 as
this still applies:

Note for Spriters:

After you've assigned the correct values to vars, you must run the game
through init on your local machine and commit the changes to the map
icon dmi files. Unit tests should catch all cases of forgetting to
assign the correct vars, or not running through init.

Note for Server Operators:

In order to not generate these icons on live I've added a new config
entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in
the config.txt


## Why It's Good For The Game

No more error icons in SDMM and loadout.

## Changelog

🆑
refactor: preview icons for greyscale items are now automatically
generated, meaning you can see GAGS as they actually appear ingame while
mapping or viewing the loadout menu.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-05-24 15:21:02 -07:00
MrMelbert bc2215667f Re-refactors batons / Refactors attack chain force modifiers (#90809)
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack

This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.

This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-22 21:30:07 -04:00
MrMelbert 5261efb67f Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request

Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack

This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.

This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).

## Changelog

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-19 13:32:12 +10:00
necromanceranne ec7ef43e16 Stops you getting into a mech if you have stuff in your hands at all. (#91046)
## About The Pull Request

Makes it so that it is impossible to enter a mech if your hands are
full.

## Why It's Good For The Game

This can result in some...very unintended behavior should somehow you
cannot be forced to drop items in your hands.

## Changelog
🆑
fix: You must have both your hands empty before entering a mech. (But
items which replace your hand, like the light later or the hand of god,
won't prevent you from getting in)
/🆑
2025-05-15 16:10:51 -04:00
SmArtKar eadcb2a887 Moves goliath cloak worn sprite to neck layer (#91069) 2025-05-15 16:05:41 -04:00
necromanceranne 2073ad23e3 Stops you getting into a mech if you have stuff in your hands at all. (#91046)
## About The Pull Request

Makes it so that it is impossible to enter a mech if your hands are
full.

## Why It's Good For The Game

This can result in some...very unintended behavior should somehow you
cannot be forced to drop items in your hands.

## Changelog
🆑
fix: You must have both your hands empty before entering a mech. (But
items which replace your hand, like the light later or the hand of god,
won't prevent you from getting in)
/🆑
2025-05-13 15:09:22 +03:00
SmArtKar b55f613050 Moves goliath cloak worn sprite to neck layer (#91069) 2025-05-11 14:14:39 +03:00
Bloop 535e60c3a7 Moves the kinetic crusher sound effects to vars (#90969)
## About The Pull Request

Tin, this has no effect on gameplay. Just makes the sound effects less
hardcoded.

## Why It's Good For The Game

Code extensibility. Makes the sound effects of kinetic crushers easier
to configure for subtypes or custom versions.

## Changelog

Nothing player-facing
2025-05-08 19:21:10 -04:00
Bloop 3ded1f5ddb Updates the default retool_icon for skins to be the mining icon file. (#91014) 2025-05-08 19:20:12 -04:00
Lucy 251d23530e Changes all uses of notify_ghosts to use the real names of mobs (#90919)
## About The Pull Request

Quite simple - this changes every direct mention of a mob in a
`notify_ghosts` message to use `[mob.real_name]` instead of just `[mob]`

## Why It's Good For The Game

makes things less confusing - ghosts can see easily their actual
identity anyways, so it's not like there's much of a reason _not_ to do
this.

## Changelog
🆑
qol: Ghost notifications will now use the real names of mobs when
something happens (i.e no more "Unknown has completed an ascension
ritual!")
/🆑
2025-05-08 19:20:12 -04:00
SmArtKar 77bbcfd764 Merges crusher retool kits into one, datumizes crusher skins, gives dagger and blaster unique animations (#90742)
## About The Pull Request

Merges sword, harpoon, glaive and dagger crusher retools into a single
item which allows you to pick the skin you want upon being applied to a
crusher by converting crusher skins into datums.
I've also improved sprites for all skins and redid the retool kit
itself, as well as gave dagger and blaster unique animations - you swing
with a dagger for normal attacks, stab to rupture the mark, and firing a
shot point-blank does a stabbing animation with the blaster.

![dreamseeker_5nPyNKqzoC](https://github.com/user-attachments/assets/c8858a71-3c0f-49a0-8577-cb8a9e64e0a0)


https://github.com/user-attachments/assets/2d243daf-f1d8-48bf-a661-8a9ac990837c

(Apologies for lack of robust gameplay, I was trying to show the
animations, not kill the goliath)

The harpoon crusher skin now does stabbing animation instead of slashing
one, and I've also fixed animations playing incorrectly when attacking
large mobs/objects

## Why It's Good For The Game

Having multiple items for reskinning crushers feels clunky, and unique
animations are just something that makes sense. Having a swinging
animation for both dagger and blaster looked odd, as you'd probably only
swing one of them at the opponent, so I decided to spice them up.

## Changelog
🆑
add: Dagger-blaster and harpoon crusher skins have received unique
attack animations.
add: Four base crusher retool kits have been merged into one item.
image: Resprited crusher skins and the crusher retool kit
fix: Fixed attack animations being offset when attacking large objects
or mobs.
/🆑
2025-05-08 19:05:23 -04:00
SyncIt21 1428f663e0 Part 4: Storage Improvements (#90783)
- Address
https://github.com/tgstation/tgstation/pull/90476#discussion_r2051701283.
Makes pill bottle code cleaner
- Datumized some more storage values(monkey guncase toolbox & crafter
toolbox) making their init slightly faster
- Moved all standard storage subtypes(bags, boxes, lockboxes etc) that
is scattered across various files & folders in the codebase into their
respective files under `code/game/objects/item/storage` folder.
This means for e.g. if you want to see all boxes in the game you can
find them in `code/game/objects/item/storage/boxes` folder & don't have
to go looking for hidden subtypes in various module files or folders
where they were hidden away.
  Makes looking for stuff & modifying these storages much saner & easier

🆑
code: organized storage subtypes under the same files & folders
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-05-08 19:02:00 -04:00
Bloop 3274884afd Moves the kinetic crusher sound effects to vars (#90969)
## About The Pull Request

Tin, this has no effect on gameplay. Just makes the sound effects less
hardcoded.

## Why It's Good For The Game

Code extensibility. Makes the sound effects of kinetic crushers easier
to configure for subtypes or custom versions.

## Changelog

Nothing player-facing
2025-05-08 11:06:03 +03:00
Vanilla1040 eb3d8705f8 Adds a reskin for the berserker armor (#3728)
## About The Pull Request

"Readds" the berserker armor from the Marked one megafauna, just as a
craftable varient from the Red berserker armor that you can obtained
from the lavaland chest, the stats of both are the exact same just a
different look, the armor rating remains unchanged.

This PR also adds the cape from Marked one as "Tettered Cloak" into the
loadout menu

## Why It's Good For The Game

More armor variety for lavaland armor and a cool looking "new" cloak

## Proof Of Testing

compiles and works on my end


![image](https://github.com/user-attachments/assets/b172fa68-6be9-41c5-af57-9f1e5fe56126)

![image](https://github.com/user-attachments/assets/a0624c40-6f6f-42b4-bf10-ec1e1108aa2d)


## Changelog

🆑
add: Added new reskin for the berserker armor
add: Added new cloak in the loadout
/🆑
2025-05-08 01:44:10 -06:00
Bloop e134baa9fd Updates the default retool_icon for skins to be the mining icon file. (#91014) 2025-05-08 07:23:28 +02:00
Lucy 37ec7f8054 Changes all uses of notify_ghosts to use the real names of mobs (#90919)
## About The Pull Request

Quite simple - this changes every direct mention of a mob in a
`notify_ghosts` message to use `[mob.real_name]` instead of just `[mob]`

## Why It's Good For The Game

makes things less confusing - ghosts can see easily their actual
identity anyways, so it's not like there's much of a reason _not_ to do
this.

## Changelog
🆑
qol: Ghost notifications will now use the real names of mobs when
something happens (i.e no more "Unknown has completed an ascension
ritual!")
/🆑
2025-05-08 00:48:52 +00:00
SmArtKar b0aaeca5ae Merges crusher retool kits into one, datumizes crusher skins, gives dagger and blaster unique animations (#90742)
## About The Pull Request

Merges sword, harpoon, glaive and dagger crusher retools into a single
item which allows you to pick the skin you want upon being applied to a
crusher by converting crusher skins into datums.
I've also improved sprites for all skins and redid the retool kit
itself, as well as gave dagger and blaster unique animations - you swing
with a dagger for normal attacks, stab to rupture the mark, and firing a
shot point-blank does a stabbing animation with the blaster.

![dreamseeker_5nPyNKqzoC](https://github.com/user-attachments/assets/c8858a71-3c0f-49a0-8577-cb8a9e64e0a0)


https://github.com/user-attachments/assets/2d243daf-f1d8-48bf-a661-8a9ac990837c

(Apologies for lack of robust gameplay, I was trying to show the
animations, not kill the goliath)

The harpoon crusher skin now does stabbing animation instead of slashing
one, and I've also fixed animations playing incorrectly when attacking
large mobs/objects

## Why It's Good For The Game

Having multiple items for reskinning crushers feels clunky, and unique
animations are just something that makes sense. Having a swinging
animation for both dagger and blaster looked odd, as you'd probably only
swing one of them at the opponent, so I decided to spice them up.

## Changelog
🆑
add: Dagger-blaster and harpoon crusher skins have received unique
attack animations.
add: Four base crusher retool kits have been merged into one item.
image: Resprited crusher skins and the crusher retool kit
fix: Fixed attack animations being offset when attacking large objects
or mobs.
/🆑
2025-05-04 15:36:27 +03:00
SyncIt21 455fe545e0 Part 4: Storage Improvements (#90783)
## About The Pull Request
- Address
https://github.com/tgstation/tgstation/pull/90476#discussion_r2051701283.
Makes pill bottle code cleaner
- Datumized some more storage values(monkey guncase toolbox & crafter
toolbox) making their init slightly faster
- Moved all standard storage subtypes(bags, boxes, lockboxes etc) that
is scattered across various files & folders in the codebase into their
respective files under `code/game/objects/item/storage` folder.
This means for e.g. if you want to see all boxes in the game you can
find them in `code/game/objects/item/storage/boxes` folder & don't have
to go looking for hidden subtypes in various module files or folders
where they were hidden away.
  Makes looking for stuff & modifying these storages much saner & easier

## Changelog
🆑
code: organized storage subtypes under the same files & folders
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-05-02 23:25:58 +02:00
SmArtKar 4e3911b960 Fixes inconsistent PKC descriptions and broken bubblegum/wendigo trophies (#90736)
Bubblegum trophy has attempted to modify its' *own* dual wielding, so if
you attached and detached it you were able to have a tiny 20 force two
handed weapon. Yeah. This PR implements a way for trophies to
consistently modify their damage, and fixes some oversights (values not
being assigned/updating) in two handed component code.

Closes #90731

🆑
fix: Fixed inconsistent proto-kinetic crusher descriptions
fix: Fixed Bubblegum and Wendigo crusher trophies sometimes not working.
/🆑
2025-04-29 18:26:24 -06:00
Goat 9b4fb094db Adds missing checks to cain & abel (#90777)
## About The Pull Request
cain and abel could be used while they were in your pocket and that was
a bit funny
## Why It's Good For The Game
i shouldn't be able to swing my daggers while they're shoved inside my
pocket
## Changelog
🆑 Goat
fix: Cain and Abel (the colossus drop) now require you to hold them to
be able to swing them around
/🆑
2025-04-29 18:23:24 -06:00
Jacquerel a117d1ce4b Emagged fishing capsules can create deep water (#90798)
## About The Pull Request

Alongside lava and plasma, emagged fishing capsules can now create 3x3
areas of deep water.
Unfortunately "deep ocean" does not have a unique fishing loot pool at
the moment, but maybe one day.

## Why It's Good For The Game

It was a discord request from a head admin and it seemed reasonably
funny. These tiles are significantly less dangerous than lava but
perhaps more flavourful and also effect terrain in a different way.
People will avoid lava because it basically kills you, but this is a
trap they might be more tempted to chase you across (to their
detriment).

## Changelog

🆑
add: Emagging a fishing spot pod from the black market can create pools
of water deep enough to drown people in.
/🆑
2025-04-29 18:23:24 -06:00
Ghom 11d82b7995 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!

I also tried to replace some of those single letter vars/args but there
are just way too many of them.

Improving old code. And I want to be able to pet mobroaches while
holding them too.

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-29 18:22:44 -06:00
SyncIt21 81c9e6ebd3 Part 3: Storage Improvements (#90476)
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-29 18:19:23 -06:00
John Willard fcad08160e Adds a blood level hud for vamp & soulscythe (#90578)
## About The Pull Request

Replaces the stat panel entries for soulscythes & vampires to show their
blood level, with a HUD instead.
The sprite was taken from Bloodsuckers which they use to also show their
own blood level, which is what gave me the idea.

Also makes soulscythe use the living level ``blood_volume`` instead of
their own snowflake var meant to do the same thing.

Vampire

![image](https://github.com/user-attachments/assets/4ec75929-ad58-44ec-a817-1fd1ec5a4f11)

Soulscythe

![image](https://github.com/user-attachments/assets/5d04a8d5-0cfc-46a8-ab2c-c0a08f4e6d00)

## Why It's Good For The Game

Helps move away reliance on the stat panel & makes this information more
obvious to the player. The stat panel in general isn't a good place to
put this stuff as it obfuscates it as a feature for players who either
are on a different tab or simply don't know to look there.

## Changelog

🆑 TheSwain, JohnFulpWillard
qol: Soulscythes and Vampires now have a blood hud on the left side of
their screen rather than a stat panel entry stating how much blood they
have.
/🆑
2025-04-29 17:52:15 -06:00
Iajret 9d4fee41a5 Adds silicon access and built-in radio to AI Uplink Brain (only when controlled by AI) (#90112)
## About The Pull Request
- adds silicon access to body controlled by an AI. This is done just by
adding a trait
- adds internal headset with same channels as AI has in its core
(including syndicate and special channels for special AIs)
- binary channel required some additional code to work properly for
carbons without binary key so I decided to also fix big bold text for
borg shells and for big brother. They all have big texts in binary. This
is done by adding new `TRAIT_LOUD_BINARY`
- turns out borg shells also lack loud mode for regular radio, so it is
added too
- ai also locks bodies for themselves the same way as they do with
shells, for consistency
## Why It's Good For The Game
While AIs losing their ability to listen radio when inside uplink brain
can provide so much needed human VS ai conflict (because AI ignored open
door request from that one assistant), it feels a bit unjustified. Same
reason for AI lacking its innate all-access while in carbon body. You
can still open doors for yourself by juggling between uplink brain and
your core so why bother people with additional clicks. It brings carbon
shell on par with silicon shells (and makes them superior cough cough)
## Changelog
🆑
balance: AI uplink brain now comes with built-in radio and free silicon
access for the AI to use
balance: AI entering uplink brain now locks it for themselves. You can
reinsert that brain to reset its controlling AI
fix: fixed AI borg shells and big brother not having loud binary. Now
they do.
/🆑
2025-04-29 17:48:16 -06:00
SmArtKar 9cabb70823 Moves manual boulder breaking to LMB, corrects tooltips (#90474)
## About The Pull Request

Per #90473, for some reason boulder breaking is right click exclusive
for items. Basicmobs also break boulders on left click, but the tooltip
claims they should use right click for it. Also cleaned up some related
code.

## Why It's Good For The Game

Doesn't really make sense to use exclusively right click for boulder
breaking, this can confuse newer players.

## Changelog
🆑
qol: Moved manual boulder breaking with tools to LMB, corrected boulder
tooltips suggesting incorrect mouse buttons for basicmobs.
/🆑
2025-04-29 17:45:28 -06:00
SyncIt21 82ef7f05c6 Part 2: Storage Improvements (#90390)
## About The Pull Request
Continuation of #90365

- Formatted some usages of `set_holdable()` to be more readable
- `exception_hold` list now stores its values inside `
GLOB.cached_storage_typecaches`. This means we don't have to manage a
static typecache list per storage but can share the value across all
storages making memory management slightly more efficient
- Monkey cube boxes now cannot hold gorilla cubes cause that would make
gorilla cube boxes obsolete also now gorilla cube boxes can now only
hold gorilla cubes & not general monkey cubes(which gorilla cubes is a
subtype of) cause that would make monkey cube boxes obsolete. We are
specializing each box for that specific use case

## Changelog
🆑
code: further improved storage code
fix: monkey cube boxes can no longer hold gorilla cubes & vice versa
/🆑
2025-04-29 17:43:39 -06:00
Singul0 268c088da7 Adds table flipping! Take 2.0 (#90156)
## About The Pull Request
Revives the long dead #80348. Right click a table to flip it over,
Useful for makeshift cover or ragequitting. Their integrity is equal to
that of the table you flipped. Some tables aren't able to be flipped
(reinforced tables, roller tables, etc).

I refactored it to be less snowflakey. so hopefully this passes with
only minor changes

![290775902-48414bb3-aaa9-467d-8edf-a170a98b1506](https://github.com/user-attachments/assets/3627c537-043e-4829-b38b-f68a7d382167)

![gambar](https://github.com/user-attachments/assets/ce04a6d1-e480-46f9-8913-041f86db8a9a)
## Why It's Good For The Game
I felt like we're lacking in the makeshift defense items. This is a
quicky way to plop up a shitty barricade for you to guard with. and also
really cool for roleplaying and such. also, this categorically goes
hard:

![gambar](https://github.com/user-attachments/assets/af593068-d9f3-49b0-9102-989ce2b4d3fb)
## Changelog
🆑
add: You can now flip tables by right clicking them!
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-04-29 17:09:22 -06:00
MrMelbert 1b035fd838 Generalizes mining voucher behavior (#90297)
## About The Pull Request

Adds `/datum/element/voucher_redeemer`, expands `/datum/voucher_set` a
bit, bumps all mining stuff down a level to `/datum/voucher_set/mining`.

## Why It's Good For The Game

Having a generic way to 
`input item -> output a choice of a set of items`
would be really handy. 

## Changelog

🆑 Melbert
refactor: Minor mining voucher refactor, report any oddities.
/🆑
2025-04-29 17:09:03 -06:00
SmArtKar fdad28e19d Fixes inconsistent PKC descriptions and broken bubblegum/wendigo trophies (#90736)
## About The Pull Request
Bubblegum trophy has attempted to modify its' *own* dual wielding, so if
you attached and detached it you were able to have a tiny 20 force two
handed weapon. Yeah. This PR implements a way for trophies to
consistently modify their damage, and fixes some oversights (values not
being assigned/updating) in two handed component code.

Closes #90731

## Changelog
🆑
fix: Fixed inconsistent proto-kinetic crusher descriptions
fix: Fixed Bubblegum and Wendigo crusher trophies sometimes not working.
/🆑
2025-04-25 15:36:00 +00:00
Goat 6b75f949a6 Adds missing checks to cain & abel (#90777)
## About The Pull Request
cain and abel could be used while they were in your pocket and that was
a bit funny
## Why It's Good For The Game
i shouldn't be able to swing my daggers while they're shoved inside my
pocket
## Changelog
🆑 Goat
fix: Cain and Abel (the colossus drop) now require you to hold them to
be able to swing them around
/🆑
2025-04-25 15:18:44 +00:00
Jacquerel a8a41f8781 Emagged fishing capsules can create deep water (#90798)
## About The Pull Request

Alongside lava and plasma, emagged fishing capsules can now create 3x3
areas of deep water.
Unfortunately "deep ocean" does not have a unique fishing loot pool at
the moment, but maybe one day.

## Why It's Good For The Game

It was a discord request from a head admin and it seemed reasonably
funny. These tiles are significantly less dangerous than lava but
perhaps more flavourful and also effect terrain in a different way.
People will avoid lava because it basically kills you, but this is a
trap they might be more tempted to chase you across (to their
detriment).

## Changelog

🆑
add: Emagging a fishing spot pod from the black market can create pools
of water deep enough to drown people in.
/🆑
2025-04-25 15:10:28 +00:00
Ghom 339616ae78 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!

I also tried to replace some of those single letter vars/args but there
are just way too many of them.

## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.

## Changelog

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-23 20:18:26 +00:00
SyncIt21 9bd45e2f3a Part 3: Storage Improvements (#90476)
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-20 12:02:29 +00:00
John Willard 7728bbc92a Adds a blood level hud for vamp & soulscythe (#90578)
## About The Pull Request

Replaces the stat panel entries for soulscythes & vampires to show their
blood level, with a HUD instead.
The sprite was taken from Bloodsuckers which they use to also show their
own blood level, which is what gave me the idea.

Also makes soulscythe use the living level ``blood_volume`` instead of
their own snowflake var meant to do the same thing.

Vampire

![image](https://github.com/user-attachments/assets/4ec75929-ad58-44ec-a817-1fd1ec5a4f11)

Soulscythe

![image](https://github.com/user-attachments/assets/5d04a8d5-0cfc-46a8-ab2c-c0a08f4e6d00)

## Why It's Good For The Game

Helps move away reliance on the stat panel & makes this information more
obvious to the player. The stat panel in general isn't a good place to
put this stuff as it obfuscates it as a feature for players who either
are on a different tab or simply don't know to look there.

## Changelog

🆑 TheSwain, JohnFulpWillard
qol: Soulscythes and Vampires now have a blood hud on the left side of
their screen rather than a stat panel entry stating how much blood they
have.
/🆑
2025-04-13 14:19:27 -06:00