Commit Graph
150 Commits
Author SHA1 Message Date
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
7aa5fb5d06 Void cloaks do not block surgery while invisibile (#95804)
## About The Pull Request

fixes https://github.com/tgstation/tgstation/issues/95803

The void cloak and its hood do not obstruct body parts for things such
as surgery. I guess it also lets you shave a heretic while their hood is
on but that seems kind of funny.

## Why It's Good For The Game

A) This is going to result in a lot of complications due to the strip
menu obscuring that the void cloak has.

B) It also gets rid of some meta tells that you have the cloak. 

Honestly, I wonder if it would be better if this was a neck item and the
'hood' is just an abstraction, but that's kind of exiting the realm of a
fix at that point.

## Changelog
🆑
fix: Void cloaks no longer obstruct surgery while invisible.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2026-05-01 21:38:01 -04:00
TimandGitHub 4f065f6a38 Fix large bulky toys from being stored in suit storage (#95898)
## About The Pull Request
- Fixes https://github.com/tgstation/tgstation/issues/94208

This disables large toys from being inserted into the suit storage.
There really wasn't a good reason for this to bypass the item size
check, since most toys are naturally small-sized and can be inserted
anyway.

## Why It's Good For The Game
Removes a basketball minigame exploit. 

## Changelog
🆑
fix: Fix large bulky toys from being stored in suit storage
/🆑
2026-04-29 22:25:20 +01:00
MrMelbertandGitHub 57c5701307 Pepperspray / Mask dirt tweaks (#95683)
## About The Pull Request

1. Pushing a dirty mask out of the way (such as adjusting a sec hailer
down) will no longer keep the screen tint, nor will they accrue dirt

2. Applied dirt is now rounded to `0.25` rather than `1`. Before, you'd
need a minimum of 2.5u to apply dirt and 2.5u-5u would all apply "1
dirt". Now, you need a minimum of 1.5u to apply dirt and it applies it
piecemeal, ie 1.5u applies "0.25 dirt".

3. Adds a passive message if you are wearing a dirty mask/helmet to
indicate you need to clean it.

4. A tint of 1.5 now applies tier 1 screen impairment, I don't think
this will affect any existing items as tints are all defined in 1/2/3.

5. Pepper spray can no longer stack blindness infinitely, much like how
it can't stack eye blur, knockdown, or confusion infinitely.

## Why It's Good For The Game

1. While it may be illogical that a sec hailer being dirty blocks your
vision, it's even MORE illogical that it blocks your vision when it's
not even protecting you from pepperspray.

(Yes, the sec hailer topic is for another PR) 

2. I noticed in testing that depending on how you spray the pepper spray
container, sometimes it would apply no dirt - because if you do a ranged
spray it only applies 1.67u . This isn't super consistent with how the
reagent works (any volume applies 100% of the downsides).

3. Aims to make it a bit more clear how the mechanic works by reminding
the player occasionally.

4. Allows for one tier of granularity between "No obscured vision" and
"Majorly obscured vision". So you know that you're approaching problem
territory rather than being thrust into it.

5. This feels like an oversight to me - all effects of pepperspray are
capped but the blindness, so multiple rapid exposures (which is not
entirely uncommon) could quickly stack up to minutes of blindness.

## Changelog

🆑 Melbert
fix: A dirty mask that CAN be pushed out of the way no longer obscures
vision if it IS pushed out of the way.
qol: If your mask is dirty from pepper spray, you get some passive chat
messages indicating that it can be cleaned off.
balance: Pepper spray clothing dirt is applied piecemeal - smaller
dosages, rather than doing nothing, now build up with repeat
applications.
balance: Pepper spray clothing dirt now has a tier between "very
obscured vision" and "no obscured vision", giving the wearer more of a
warning before being thrust into darkness.
balance: Pepper spray can no longer stack blindness infinitely - it is
now capped to 6 seconds. This brings it in line with its other effects
(confusion capped at 5 seconds, blur capped at 10 seconds, knockdown
capped at 3 seconds).
/🆑
2026-04-09 16:15:53 +12:00
nevimer 00ccf0c6b5 Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts:
#	.github/CODEOWNERS
#	.github/workflows/compile_changelogs.yml
#	.github/workflows/stale.yml
#	SQL/database_changelog.md
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/__DEFINES/atom_hud.dm
#	code/__DEFINES/inventory.dm
#	code/__DEFINES/mobs.dm
#	code/__DEFINES/species_clothing_paths.dm
#	code/__DEFINES/subsystems.dm
#	code/__DEFINES/surgery.dm
#	code/__HELPERS/global_lists.dm
#	code/_globalvars/lists/maintenance_loot.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/minor_mapping.dm
#	code/controllers/subsystem/processing/quirks.dm
#	code/controllers/subsystem/shuttle.dm
#	code/datums/components/palette.dm
#	code/datums/components/surgery_initiator.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/hud.dm
#	code/datums/mood.dm
#	code/datums/mutations/chameleon.dm
#	code/datums/quirks/negative_quirks/nyctophobia.dm
#	code/datums/status_effects/debuffs/debuffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/slime/slime_leech.dm
#	code/datums/weather/weather.dm
#	code/game/data_huds.dm
#	code/game/objects/items.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/frog_statue.dm
#	code/game/objects/items/rcd/RLD.dm
#	code/game/objects/items/robot/items/hypo.dm
#	code/game/objects/items/stacks/medical.dm
#	code/game/objects/items/stacks/wrap.dm
#	code/game/objects/items/storage/garment.dm
#	code/game/objects/items/tools/medical/defib.dm
#	code/game/objects/items/weaponry.dm
#	code/game/objects/items/weaponry/melee/misc.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/game/objects/structures/curtains.dm
#	code/game/objects/structures/dresser.dm
#	code/game/objects/structures/girders.dm
#	code/game/objects/structures/maintenance.dm
#	code/game/objects/structures/mirror.dm
#	code/modules/admin/greyscale_modify_menu.dm
#	code/modules/admin/verbs/light_debug.dm
#	code/modules/antagonists/ashwalker/ashwalker.dm
#	code/modules/antagonists/heretic/knowledge/starting_lore.dm
#	code/modules/antagonists/ninja/ninjaDrainAct.dm
#	code/modules/art/paintings.dm
#	code/modules/client/preferences.dm
#	code/modules/client/verbs/ooc.dm
#	code/modules/clothing/head/wig.dm
#	code/modules/events/disease_outbreak.dm
#	code/modules/holodeck/holo_effect.dm
#	code/modules/jobs/job_types/head_of_security.dm
#	code/modules/jobs/job_types/security_officer.dm
#	code/modules/library/skill_learning/generic_skillchips/point.dm
#	code/modules/mining/lavaland/ash_flora.dm
#	code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/basic/guardian/guardian.dm
#	code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
#	code/modules/mob/living/carbon/carbon.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_defines.dm
#	code/modules/mob/living/carbon/life.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/mob.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mod/mod_control.dm
#	code/modules/mod/modules/modules_general.dm
#	code/modules/modular_computers/computers/item/computer_ui.dm
#	code/modules/paperwork/paper.dm
#	code/modules/paperwork/paperbin.dm
#	code/modules/power/lighting/light.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/projectiles/projectile.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/food_reagents.dm
#	code/modules/reagents/chemistry/reagents/other_reagents.dm
#	code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
#	code/modules/research/xenobiology/crossbreeding/_clothing.dm
#	code/modules/research/xenobiology/crossbreeding/prismatic.dm
#	code/modules/surgery/advanced/brainwashing.dm
#	code/modules/surgery/advanced/lobotomy.dm
#	code/modules/surgery/amputation.dm
#	code/modules/surgery/blood_filter.dm
#	code/modules/surgery/bodyparts/_bodyparts.dm
#	code/modules/surgery/brain_surgery.dm
#	code/modules/surgery/cavity_implant.dm
#	code/modules/surgery/coronary_bypass.dm
#	code/modules/surgery/gastrectomy.dm
#	code/modules/surgery/healing.dm
#	code/modules/surgery/limb_augmentation.dm
#	code/modules/surgery/organ_manipulation.dm
#	code/modules/surgery/revival.dm
#	code/modules/surgery/sleeper_protocol.dm
#	code/modules/surgery/surgery_helpers.dm
#	code/modules/surgery/surgery_step.dm
#	code/modules/unit_tests/_unit_tests.dm
#	code/modules/unit_tests/designs.dm
#	code/modules/unit_tests/icon_state_worn.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png
#	icons/map_icons/clothing/head/_head.dmi
#	icons/map_icons/clothing/shoes.dmi
#	icons/map_icons/items/_item.dmi
#	icons/mob/huds/hud.dmi
#	icons/mob/inhands/64x64_lefthand.dmi
#	icons/mob/inhands/64x64_righthand.dmi
#	icons/obj/machines/computer.dmi
#	tgui/packages/tgui/interfaces/OperatingComputer.jsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/types.ts
#	tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
#	tools/icon_cutter/check.py
2026-02-12 23:50:09 -05:00
John WillardandGitHub ff009b8c10 Snouts push masks out a bit (#94640)
## About The Pull Request

If you have a snout (and it isn't already handled elsewhere by your
species), masks will now be pushed 1 whole pixel up and away from you
when facing left or right.

Examples (TOP IS OLD, BOTTOM IS NEW)

(did you know the welding visor has the lizard's snout sticking out the
front)?

<img width="441" height="357" alt="image"
src="https://github.com/user-attachments/assets/5d703afc-2541-4789-956c-f27dc3fdcf31"
/>

I also tried moving it up one tile too, but it didn't look as nice. (To
be clear, these are not the ones being used, the above screenshot is)
(once again top row is old, bottom row is new)

<img width="1443" height="493" alt="image"
src="https://github.com/user-attachments/assets/c7193237-39fb-466b-9dcd-f5db2a646628"
/>
<img width="1138" height="490" alt="image"
src="https://github.com/user-attachments/assets/398154df-3e56-4f59-b350-24a9c9ea04a1"
/>


## Why It's Good For The Game

I think this makes masks fit snouted faces a little bit better?
Currently they sorta clip into the face which is a little bad imo.

## Changelog

🆑
add: Masks now fit snouted species a little bit better, maybe.
/🆑
2026-01-23 18:03:27 -05:00
NickandGitHub eac94083c9 sword sheathes can now be worn on all suits (#94816)
## About The Pull Request

This PR makes it so you can wear sheathes on all suit storages

## Why It's Good For The Game
It mostly allows players freedom to shuffle stuff around they already
have to haggle a sheathe around with the sword in it while still having
most of their storage thing vs a gun, which allows players freedom when
it comes to setups, but also make them be able to use counterattack
mechanic. heres some cosmetic setups i just made up that isn't reliant
on armour

in the future we can make things less reliant on backpacks when it comes
to storage

<img width="227" height="317" alt="image"
src="https://github.com/user-attachments/assets/83a684cb-a096-4a92-af8f-ebc8d982a463"
/>

## Changelog
🆑 Ezel
balance: sabre, parsnip, gladius sheathe can now be worn on suit
storages
fix: mirrors gladius belt worn sprite so it doesn't overlap with belted
revolvers
image: adds mirrored belt sprites
/🆑
2026-01-19 14:00:12 -08:00
slightlyevilpeanut22andGitHub 5a534dbd01 HIDEFRILLS clothing flag and ability to hide frills in hide mutant parts verb (#4997)
## About The Pull Request
Adds HIDEFRILLS flag for clothing if you need to only hide frills
without hiding ears and lets you hide them through
Show/Hide-Mutant-Parts verb
## Why It's Good For The Game
You couldn't hide them before with that verb and now you can. Not sure
if HIDEFRILLS will be used if HIDEEARS also hides frills but now that's
an option if you need to only hide frills without ears
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
<img width="276" height="116" alt="1"
src="https://github.com/user-attachments/assets/484474c1-2f8b-409d-b3d4-2713822fd612"
/>

(i varedited gas mask to have HIDEFRILLS flag, this doesn't actually
apply the flag to it in the code)

<img width="364" height="201" alt="2"
src="https://github.com/user-attachments/assets/264c0881-653c-4f0b-9497-f0f7880c46d5"
/>
</details>

## Changelog
🆑
add: Show/Hide-Mutant-Parts verb now can hide lizard frills
add: HIDEFRILLS clothing flag if you need to hide specifically just
frills
/🆑
2025-12-17 13:22:33 -08:00
Roxy d0ca474789 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 2025-11-05 19:43:07 -05:00
Aliceee2chandGitHub 1513f779ad Repaths oxygen jetpacks and "removes" fake empty jetpack (#93676)
## About The Pull Request

removes oxygen jetpack subtype and makes empty jetpack actual oxygen

## Why It's Good For The Game

because our empty jetpack wasnt actually empty and we infact had two
oxygen jetpacks?

## Changelog

N/A
2025-11-01 13:40:04 +01:00
Roxy d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04:00
necromanceranneandGitHub 8166d8f357 Turns the chaplain's energy swords into...energy swords. (#93394)
## About The Pull Request

The chaplain's energy swords were weird fake energy swords that couldn't
be turned on or off. This is largely because, in the past, we couldn't
easily convert other objects into null rods conveniently. Though we did
get the transforming component, it never was added to the chaplain
weapons. Maybe because there would be a lot of copypasted code.

Now, with the ``nullrod_core`` element, we can easily turn an object
into a null rod. So I did that. It's now an energy sword AND a null rod.
The future is now.

For clarity, the stats on the null rods are identical to before. The
only difference being that it has the ability to switch on and off, and
it now emits light. That's it really. If there are any extra stats I
missed, let me know.

Also adds the carp'sie plushie to the list of wearable objects for
chaplain suit storage.

## Why It's Good For The Game

This has bugged me like, for a really, really long time. And we now have
a lot of the bits and pieces to make more of the null rods actually
closer to the objects they're ripping off.

## Changelog
🆑
qol: The chaplain energy swords now work like energy swords. Turn them
on and off! Light your way with the blade. Light a cigarette with your
blade like a badass. Feel bad that it isn't a REAL energy sword.
fix: The carp'sie plushie now fits in chaplain suit storage.
/🆑
2025-10-12 05:37:29 +02:00
dieandGitHub 0204ab8fdd Canreach refactor (#93165)
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147

full credit to @Kapu1178 for the juice

instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
2025-10-07 20:28:59 +02:00
xPokee 9b282a850e Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-17 11:45:44 -04:00
necromanceranneandGitHub 62190069d0 Bow revisit; they hit harder, there are more sprites, there is a new bow made of bone. Really live that ranger fantasy. (#92809)
## About The Pull Request

### Bows deal more damage.

Increases the baseline damage of the shortbow to 25, and the divine bow
to 30.

The divine bow also launches arrows at a higher velocity than normal
bows.

### Flaming arrows have sprites now, and deal burning damage. Oh, and
actually do reasonable damage.


![demonstration_flaming](https://github.com/user-attachments/assets/918893c9-8d09-46ab-a8f9-9ef76ca5e044)

I'm not at all skilled at animation but at least it has an actual,
visible sprite now.

I completely overlooked the fact this did 20 damage when I changed bows
to use damage multipliers. Oops.

### Ashen Bow and Ashen Arrows

Made from sinew, bone and for the bow specifically, leather. The bow is
largely identical to a shortbow, but the arrow has mining bane. If you
feel like hunting megafauna with a bow, this is your means of doing so.

<img width="384" height="128" alt="demonstration_ashen"
src="https://github.com/user-attachments/assets/1c4f493c-f694-4b09-a406-c63140628d56"
/>

Assets partially taken from
https://github.com/Skyrat-SS13/Skyrat-tg/pull/5266

Which in of itself took assets from
https://github.com/BeeStation/BeeStation-Hornet/pull/1802

The functionality is entirely new. I also did some sprite edits.

### Arrow quivers are made from wood.

Iunno, this was really weird to me. Cardboard seems like a poor quiver
material.

### Other Stuff

Shortbows and ashen bows have the ability to be renamed.

## Why It's Good For The Game

Bows are fun, but kind of middling. They're a lot slower to fire than
the vast majority of ranged weapons, and don't really have enough oomph
in their own right to intimidate people being shot by them.

This is even true of the divine bow, which is the chaplain's version.
Because of how slowly it fires and how little damage it does, the
chances of actually killing someone who poses any real threat to you
with it is pretty laughable. This is not true of the nullrod that you
sacrificed to get this weapon. 30 damage is within the ballpark of
chaplain weapons and their potential damage in some contexts. A slow to
attack weapon probably should have a more impactful hit when considering
your alternative options.

The ashen bow is mostly because I really want to go fauna hunting with
entirely bone-based weaponry. Does this mean some ashwalkers might be
putting arrows into you from afar? Yes. Does this sound fun? Yes. Is
this especially strong? Not really. Miners out damage these bows by a
significant margin, and their armor is usually good enough where they're
not at risk from arrows sticking into them or hurting them very much.
This is also a degree more effort to make than other weapons because of
the leather requirement and the need to kill several fauna for the
materials. The outcomes should be more fun than the costs.

## Changelog
🆑
balance: Shortbows and divine bows do more damage. The divine bow also
launches arrows at a higher velocity than normal bows.
image: Flaming arrows now have proper sprites.
balance: Flaming arrows now deal BURN damage. And also deal an
appropriate amount of damage for an arrow.
add: Ashen bows and arrows, made from sinew and bone. And leather for
the bow.
add: Ashen arrows deal significantly more damage to mining mobs.
balance: Arrow quivers are made from wood rather than cardboard.
qol: Shortbows and ashen bows have the ability to be renamed.
/🆑
2025-09-14 14:00:23 -04:00
e67ab69e5a Lets jackets as a whole clothing category carry handguns and holsters, improvised weapons on a few more 'assistant' clothing options, and minor changes (#92833)
## About The Pull Request

Jackets as a category now can carry handguns like pistols and revolvers
and can hold holsters in their suit storage. This also includes hawaiian
shirts and comedian coats.

More 'assistant' jackets can carry improvised firearms.

Justice suits (which are actually security vests in disguise if you can
believe it) hold security gear.

Imperium monk outfits now hold the true list of chaplain suit storage
items, and not just a limited list.

## Why It's Good For The Game

These lists were kind of a mess so using some more consistent holder
lists should make things easier going forward for making sure suits
across a category are at least consistent with one another. Redefining
the allowed list usually means a lot of items get lost from parent to
child.

The additions were either potentially oversights, or are because of
either for reference or trope reasons.

I actually think I overlooked the imperium suit last time I touched
chaplain clothing suit storage.

## Changelog
🆑
balance: Jackets can carry personal firearms and holsters in their suit
storage. So can hawaiian shirts and comedian suits.
balance: More 'assistant' attire can fit improvised weapons.
balance: Justice suits can fit security items in their suit storage.
fix: Imperium monk outfits now hold the true list of chaplain suit
storage items, and not just a limited list.
/🆑

---------

Co-authored-by: 1393F <59183821+1393F@users.noreply.github.com>
2025-09-11 09:06:28 +12:00
xPokee 939f2fc9ac Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync 2025-09-10 14:12:16 -04:00
MrMelbertandGitHub 135a09182b Refactors obscured (#92779)
## About The Pull Request

Fixes #85028

Obscured flags and covered flags are tracked on carbons, updated as
items are equipped and unequipped. It's that shrimple.

Closes #92760

Just removes the species exception checks for not making sense

Also refactors handcuffs / legcuffs removal. In all of these situations
they were hardcoded when they could easily just use an inventory proc to
work.

## Why It's Good For The Game

Stops a million excessive calls to `check_obscured_slots`

Makes obscured behavior more consistent

Makes obscured behavior easier to use

Cleans up human rendering (There was some cursed stuff before with
render item -> updated obscured -> update body -> cause side effects)

## Changelog

🆑 Melbert
del: Golems which somehow manage to grow wings and somehow manage to
equip something that covers their jumpsuit can no longer fly.
(Seriously, this will not affect anyone)
refactor: Refactored clothing obscurity entirely. Items should be a
loooot more consistent and what covers what, and should update a lot
snappier. As always, report any oddities, like mysteriously disappearing
articles of clothing, hair, or species parts
refactored: Refactored handcuffs and legcuffs a bit, report any odd
situations with cuffs like getting stuck restrained
/🆑
2025-09-07 09:24:34 +02:00
nevimer c9956892db Merge remote-tracking branch 'origin/master' into pupstream-08-19-keepsha
# Conflicts:
#	_maps/map_files/BoxStation/BoxStation.dmm
#	code/_globalvars/lists/flavor_misc.dm
2025-09-03 21:03:51 -04:00
61031f6cfb Skyrat gun removal (#3697)
## About The Pull Request
HackMD: https://hackmd.io/@Ssalty/r1wjAgSxll
Ammo removals:
IHDF
Rubber (non-.38, non-shotgun, nukie ones stay since it'd require
overrides. They were never purchasable to begin with.)
Stardust
Magnum
Express
.460 Rowland
.457 Government
MCR magazines
.40 Sol
Hornet's nest


Gun removals:
MCR's
.457 revolver
M4A5
.460 Rowland revolver
CCK
GP-7
R10 revolver

Guns made inaccessible:
NRI guns (including derringer, bobr, plasmas, Miecz)
Sol35 (Tarkon, sol ERT, gateway, adminspawn)
Sol40 (Tarkon, sol ERT, gateway, adminspawn)
Trappiste caliber (wespe, some already adminspawn weapons)


Turret adjustments:
Twin Fang - 4.6x30mm, 2 Second burst delay (40 dmg every 2 seconds vs 30
dmg every 1.5 seconds (old))
Stinger - 4.6x30mm instead of .35, matching damage
Colonist - .45 added instead of sol40, matching damage
Hoplite - Same as above

Armoury:
Armoury spawned MCRs replaced with laser guns and energy guns
SMG's and rifles with WT
If there would be a case with two separate spawns of a WT, the other is
gone.
Breaching shell boxes do not spawn in the armoury (they were capable of
1 shotting a dark mauler I wish I was kidding)

Lathe:
9mm stendo's, AP, HP, INC magazines not availible for print - the 9mm
murphy magazine is. It fits in 9mm firing turrets and the murphy.


## Why It's Good For The Game

Give me like a couple days and I'll fill this out. I doubt anyone who is
already pro-skyrat-gun will change their mind but it's good to
rationalize the decision regardless.

Find this out as in lay it out on paper. 

EDIT 1:  Adding the first part

# Foreword
This PR is a *draft*. That means a lot of things are subject to change,
a lot of things can be disorganized and a lot of things will be done
unoptimally. Going forwards, do keep in mind, the decision-making
process behind "remove entirely" and "virtually remove" will not be
dependant on us going forwards, as the decision on this matter requires
maintainer input more than any other.

Next, the delay. 
I simply am not a machine, neither are other people onboard this
project. With different timezones, it was important to find what isn't
working so I can relay it to people in working hours.

Without further ado,

## The case of the ammo types and workbench

The ammunitions workbench is a machine that provides ammunition into
clips, refilling them. The ammunition workbench is also the source of a
multitude of alternate ammunition types. It has with itself brought
several issues that at least would warrant a rework or heavy
adjustments:

1. Contraband ammunitions. There is no real reason that the entire
security department, or even a single crewmember should be accessing
phasic weapons in the form of printable ammotypes. The argument of "the
pipegun having it" doesn't do it favours, as the way you get it is an 8%
chance on crafting a junk round for a bulky gun and the only way to find
out if you actually have it is checking each shell individually with a
bandolier.

2. Complimentary with the removals. Most use cases for this machine are
refilling the magazines you can order or get alongside your weapons.
This collides with the protolathe, which sources most of our
upstream-based ammunition instead. With the skyrat weapons gone, this
machine becomes redundant. You may claim that it's still useful in
saving on materials, where you would be right! However is it worth to
have and maintain an entirely separate structure, with it's own
mechanics, map placements, etc. to get a benefit equal to 1.6x more bang
for the buck? At the end of the day, splitting ways of getting ammo
across a single room for something so miniscule compared to the bloat it
adds is pointless.



# The weapons, why should they go, one by one. 

### RomTech Flechette rifles
Compared to a standard laser gun, which is in all means our baseline of
ranged damage in ss13 - being the default armoury weapon, the default
laser for turrets and default laser for mobs. Better yet, let's compare
it to that and the default ballistic option that we have from TG.

What turns out, is that not only is the romtech carbine faster at
killing than the laser, but also rivals the WT with a split second of
difference in ttk in the favour of the romtech. Let's assume it's human
error and the WT is better TTK wise, just as an experiment. Clearly,
there must be a tradeoff, somewhere, right? One that balances them all
out to be equal weapons in the grand scale of things, contemporaries!
Well, no, not really. Not even close.

The carbine can be folded to fit in bags, that's one thing. The carbine
has more ammo, that's another thing. Bursts are harder to dodge than
series shots since they cover more perpendicular ground when attempting
to dodge projectiles, as is staple for ss13 combat. Burst weapons are
advantageous in applying more damage quicker, as you can see on the
videos - and initial damage, an alpha strike, applies movement slowdown,
ensuring future projectiles connect easier and the target cannot run.

It might be a coincidence that the only /tg/ derived weapons that fire
burst are adminspawn ERT or the Nukie weapons.

But it doesn't end here, no, the RomTech's ammunition alone would
warrant a complete overhaul if not a removal.

**steel ball**
<p>
Takes 9 shots to stamcrit, deals mixed damage - further increasing the
amount of slowdown applied, and not only is it MUCH faster at
stamcritting than a disabler is, it also leaves the target with 70
damage. Over half their healthbar. Severely overtuned with little
counterplay availible, alpha strike monster that is better at disabling
than disablers and better at stopping people dead in their tracks than
rifles, and if you look at our anti-stun, we have less than ever on
antagonists with Adrenal implants gone, Adreanaline Glands reworked,
etc, etc...
</p>

**Penetrator**

NT's answer to armour! 
The penetrator has 60 AP and otherwise the same damage as the AP WT
rifle. Meaning it's a straight upgrade. Meaning this weapon invalidates
it's predecessor whilst being orderable roundstart, and not only that,
but it can fully ignore elite modsuits on nukeops. Not every mechanic
has to have a counter, there's no direct counter to someone healing
after a fight, there is no direct counter to having multiple shots, and
there shouldn't be a full nullification of armour for such a low cost.
There shouldn't be one for a crew that can mass produce these, ever.

**Magnesium**

Arguably fine, 12 firestacks per shot is still quite insane for a lower
chance of friendly fire compared to original incediary hot turfs,

**Ripper**

Steel ball, but even worse. They don't embed a single time, ***this
embeds every time***. It takes several seconds to take out. Actually,
let's compare this gun's bullets to ninja stars.

- 2 times the embed chance at 200 vs 100
- 8 times the jostle chance at 80 vs 10
- Comparable fall chance, at 1 vs 0
- More pain stam pct, at 0.9 vs 0.8, meaning more stamina damage
- More pain chance, at 70 vs 15
- Less pain modifier, at 2 vs 5
- Takes longer to take out, 5 seconds vs 3
- Jostling pain is the same

### One problem. There's three of those fired per burst, cannot be
caught either. And the armour pen is the same.

in conclusion, every aspect of this gun is unhealthy for the game, from
it's gimmick, to it's execution, to it's stats, to it's ammo, to it's
consistency, to it's firing mode, to it being able to be currently worn
on sec belts along disablers - up to 4, if I remember correct.

No reworks. It has to go.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
del: Removed breaching slugs from crew (not to be confused with
frangible. These ones 1 shot mechs)
del: Removed MCR, .457 revolver, .460 Rowland revolver, GP-7, R10
revolver, M4A5, and their associated ammo types.
del: Removed ammunition types: IHDF, rubber variants excluding
.38/shotgun/nukie, stardust, magnum, express, hornet's nest
del: Made most NRI guns (Miecz, plasma pistol, plasma thrower, bobr,
derringer) and Sol 35/40 (Tarkon, ERT, gateway, adminspawn) inaccessible
to crew, kept for ERT/Gateway/Flavour/Admin reasons
balance: Turrets which use a removed calibre have been adjusted into
either that of the WT's, Ceres (still printable) or 9mm.
balance: WT's replace missing sindanos across armouries, laser guns and
eguns replace the missing MCR's.
/🆑

---------

Co-authored-by: Artur Lang <24881678+Arturlang@users.noreply.github.com>
2025-08-23 20:38:07 +03:00
Joshua Kidderandnevimer f7b1c47a7c Make a global list of items that any suit storage can hold, also make suit storage able to hold any "tiny" item (#92406) 2025-08-19 22:41:11 -04:00
Joshua KidderandGitHub 72b20ff830 Make a global list of items that any suit storage can hold, also make suit storage able to hold any "tiny" item (#92406) 2025-08-16 20:19:13 -04:00
_0StevenandRoxy 09d3d8d460 Resolves merge skew, fixes broken quirk equipping (#91158)
<!-- 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

#90869 and #90937 ran into some nice merge skew issues, where the latter
got in despite its slot lists needing to be adjusted to go with the
former.

...But `LOCATION_MASK` never existed. So this pr adds that.

......But `equip_in_one_of_slots(...)` wouldn't actually do anything,
because of trying to treat a regular list like an associative list with
corresponding item slots. So this pr adds those corresponding item
slots.

This should fix our issues.

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

## Why It's Good For The Game

less jank
also hey resolves our merge skew

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

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and 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. -->

🆑
fix: Fixes quirks and the scarf trait just dropping items to the ground.
/🆑

<!-- 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. -->
2025-05-15 16:14:07 -04:00
SmArtKarandRoxy 0f01987115 Refactors ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK out of inventory code (#90869)
<!-- 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

So yesterday I've spotted that we had wrong SLOTS_AMT value set, and
went a bit down a rabbit hole and found how abhorrent our
ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK usage is. They're not real
inventory slots, but just "hints" at items being located in backpacks or
belts, or instructions to put an item into a belt/backpack. This PR
rewrites all usages of them as "hints", and adds an equip_to_storage
proc used to equip an item into a storage positioned in a certain slot,
so ``equip_to_slot_if_possible(item, ITEM_SLOT_BACKPACK)`` is now
``equip_to_storage(item, ITEM_SLOT_BACK)``

## Why It's Good For The Game

Its really stupid and we shouldn't have those as slot flags,
ITEM_SLOT_HANDS at least makes sense but those two are just absurd.
Should make equipping things into non-backpack storage a bit easier too,
in case we end up going through with the idea of suit/uniform pockets
being a major part of player inventory.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and 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. -->

🆑
refactor: Refactored how backpack and belt contents are handled in mob
inventory code, report any issues with lingering item effects or
inability to equip things into them!
/🆑

<!-- 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. -->
2025-05-15 16:14:06 -04:00
_0StevenandGitHub 6590760f56 Resolves merge skew, fixes broken quirk equipping (#91158)
<!-- 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

#90869 and #90937 ran into some nice merge skew issues, where the latter
got in despite its slot lists needing to be adjusted to go with the
former.

...But `LOCATION_MASK` never existed. So this pr adds that.

......But `equip_in_one_of_slots(...)` wouldn't actually do anything,
because of trying to treat a regular list like an associative list with
corresponding item slots. So this pr adds those corresponding item
slots.

This should fix our issues.

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

## Why It's Good For The Game

less jank
also hey resolves our merge skew

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

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and 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. -->

🆑
fix: Fixes quirks and the scarf trait just dropping items to the ground.
/🆑

<!-- 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. -->
2025-05-15 03:29:57 +00:00
SmArtKarandGitHub 352c7ecdd7 Refactors ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK out of inventory code (#90869)
<!-- 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

So yesterday I've spotted that we had wrong SLOTS_AMT value set, and
went a bit down a rabbit hole and found how abhorrent our
ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK usage is. They're not real
inventory slots, but just "hints" at items being located in backpacks or
belts, or instructions to put an item into a belt/backpack. This PR
rewrites all usages of them as "hints", and adds an equip_to_storage
proc used to equip an item into a storage positioned in a certain slot,
so ``equip_to_slot_if_possible(item, ITEM_SLOT_BACKPACK)`` is now
``equip_to_storage(item, ITEM_SLOT_BACK)``

## Why It's Good For The Game

Its really stupid and we shouldn't have those as slot flags,
ITEM_SLOT_HANDS at least makes sense but those two are just absurd.
Should make equipping things into non-backpack storage a bit easier too,
in case we end up going through with the idea of suit/uniform pockets
being a major part of player inventory.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and 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. -->

🆑
refactor: Refactored how backpack and belt contents are handled in mob
inventory code, report any issues with lingering item effects or
inability to equip things into them!
/🆑

<!-- 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. -->
2025-05-15 01:07:41 +01:00
SmArtKarandRoxy 95b9654ccc Fixes potential edgecases with human limb initialization (#90945)
Human initialization calls species' ``create_fresh_body``, which calls
carbon ``create_bodyparts``, which adds bodyparts directly using
``add_bodypart`` to bypass a lot of unnecessary update calls inside of
that proc. However, this also bypasses 3 comsigs, and bodypart sorting,
which means that order of bodyparts set in
``bodyparts``/``replace_body`` could determine how the mob would spawn
and render until they had a limb reattached to them, and some
bodypart-owned effects like organ set bonuses wouldn't apply on mobs
when they were added from their species.

I've just added a ``lazy`` arg to ``try_attach_limb`` which makes it
only check for limb validity, attach the limb and early return after
sending relevant comsigs without doing any of the updating.
2025-05-08 19:19:37 -04:00
SmArtKarandGitHub 0694edc174 Fixes potential edgecases with human limb initialization (#90945)
Human initialization calls species' ``create_fresh_body``, which calls
carbon ``create_bodyparts``, which adds bodyparts directly using
``add_bodypart`` to bypass a lot of unnecessary update calls inside of
that proc. However, this also bypasses 3 comsigs, and bodypart sorting,
which means that order of bodyparts set in
``bodyparts``/``replace_body`` could determine how the mob would spawn
and render until they had a limb reattached to them, and some
bodypart-owned effects like organ set bonuses wouldn't apply on mobs
when they were added from their species.

I've just added a ``lazy`` arg to ``try_attach_limb`` which makes it
only check for limb validity, attach the limb and early return after
sending relevant comsigs without doing any of the updating.
2025-05-04 23:14:19 -04:00
075d966320 Added additional layers to hairstyles (#90275)
## About The Pull Request

Added two new "layers" to hairstyles. The first draws on the normal hair
layer but resists being affected by hair masks unless a piece of
clothing really insists that it must mask it. The second draws on top of
the headwear layer and will ignore all hair masking, but will disappear
entirely if a piece of clothing covers the part of the head that
hairpiece originates from.

Each of these "Layers" (called "hair appendages" in the code) is
associated with a part of the head that it comes off of (left side,
rear, right side, etc.), which pieces of clothing can cover to prevent
those parts from being shown. For example, a Beret will allow a ponytail
to sprout off the back of a person's head and ignore the normal hair
mask, but a winter coat hood covers every part of the head except the
front, so it will hide the ponytail completely.

## Costs

Hairstyles that use this system require some extra icon blending, but
each hairstyle will cache the result of each blend whenever a new hair
mask is applied, so the extra cost only happens once. The cache will
also be used on hairstyles that don't utilize the additional layers, so
we should end up with less total icon blending over the course of a
round than we currently have.

Adds a new sprite layer, OUTER_HAIR_LAYER, to humans.

Changes hair masks from strings specifying an icon state to datums with
an icon state and a bitfield storing which parts of the head the
headware that uses them cover. The singletons for these datums are
stored in the SSaccessories subsystem.

Any hairstyle that uses this system will need 1-2 more icon states in
the human_face.dmi file. I currently have 32 hairstyles marked that
could reasonably use this system, about half of which use both
additional icon states.

## Images

Old system:

![before1](https://github.com/user-attachments/assets/c8e5827b-751f-4809-b7a4-d30a3b2aaa70)

New system:

![after1](https://github.com/user-attachments/assets/b25ca6e3-f5cd-4385-822e-29604a7d39ba)

![after2](https://github.com/user-attachments/assets/0b0c8007-42d5-42bd-a9b4-6bf7a7e1264e)

The new system is currently only implemented on the "Ponytail (High)"
hairstyle for demonstration and testing. I have a branch with the same
update for most similar hairstyles I can push if this is merged.

## Why It's Good For The Game

Hair masks are okay but they look really bad with some hairstyles. This
allows people who really care about their character's look to make their
hairstyles work with their favorite hats.

Potential for fixing #88886

## Changelog

🆑
add: Added a system to create hairstyles with multiple layers to allow
better interaction with hats and helmets
image: Added additional sprite layers to the Ponytail (High) hairstyle
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-29 17:41:06 -06:00
Waterpig 753d8e5ba4 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-04a 2025-04-08 18:58:45 +02:00
6a9ee3b1c6 Added additional layers to hairstyles (#90275)
## About The Pull Request

Added two new "layers" to hairstyles. The first draws on the normal hair
layer but resists being affected by hair masks unless a piece of
clothing really insists that it must mask it. The second draws on top of
the headwear layer and will ignore all hair masking, but will disappear
entirely if a piece of clothing covers the part of the head that
hairpiece originates from.

Each of these "Layers" (called "hair appendages" in the code) is
associated with a part of the head that it comes off of (left side,
rear, right side, etc.), which pieces of clothing can cover to prevent
those parts from being shown. For example, a Beret will allow a ponytail
to sprout off the back of a person's head and ignore the normal hair
mask, but a winter coat hood covers every part of the head except the
front, so it will hide the ponytail completely.

## Costs

Hairstyles that use this system require some extra icon blending, but
each hairstyle will cache the result of each blend whenever a new hair
mask is applied, so the extra cost only happens once. The cache will
also be used on hairstyles that don't utilize the additional layers, so
we should end up with less total icon blending over the course of a
round than we currently have.

Adds a new sprite layer, OUTER_HAIR_LAYER, to humans.

Changes hair masks from strings specifying an icon state to datums with
an icon state and a bitfield storing which parts of the head the
headware that uses them cover. The singletons for these datums are
stored in the SSaccessories subsystem.

Any hairstyle that uses this system will need 1-2 more icon states in
the human_face.dmi file. I currently have 32 hairstyles marked that
could reasonably use this system, about half of which use both
additional icon states.

## Images

Old system:

![before1](https://github.com/user-attachments/assets/c8e5827b-751f-4809-b7a4-d30a3b2aaa70)

New system:

![after1](https://github.com/user-attachments/assets/b25ca6e3-f5cd-4385-822e-29604a7d39ba)

![after2](https://github.com/user-attachments/assets/0b0c8007-42d5-42bd-a9b4-6bf7a7e1264e)

The new system is currently only implemented on the "Ponytail (High)"
hairstyle for demonstration and testing. I have a branch with the same
update for most similar hairstyles I can push if this is merged.

## Why It's Good For The Game

Hair masks are okay but they look really bad with some hairstyles. This
allows people who really care about their character's look to make their
hairstyles work with their favorite hats.

Potential for fixing #88886

## Changelog

🆑
add: Added a system to create hairstyles with multiple layers to allow
better interaction with hats and helmets
image: Added additional sprite layers to the Ponytail (High) hairstyle
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-06 19:50:50 +00:00
JacquerelandGitHub 889268c400 Improved Mulligan Kit (#89740)
## About The Pull Request

Instead of just being the injector, buying the Mulligan now comes as a
box containing the mutation toxin and a "Fake Identity Kit".

The Fake Identity Kit, if used inhand by someone whose name does not
exist in crew records, creates a new identity for you composed of:
- Medical and Crew Records under your new name and appearance
- An Assistant ID Card with your new name
- An additional item which creates an announcement that you have just
arrived on the station as an Assistant, as if you just did that

There's still a couple of ways you can be caught out. I didn't issue a
PDA alongside the ID (maybe I should? not sure) for one thing, and for
another those with expert identification skills (via skillchip) will be
able to tell on close inspection that the ID card was not actually
issued by Nanotrasen.
Also eagle-eyed players might get suspicious if it's announced that you
just got in on the arrival shuttle and they see you four seconds later
in the engineering lobby. Act natural, or wait for the right moment
before triggering the announcement.

## Why It's Good For The Game

The Mulligan Injector is totally useless and nobody buys it.  
After this change it's still an extremely niche item that I don't expect
will be purchased _often_ but it at least stands up to scrutiny somewhat
better, and like... gives you an Assistant ID card if that's something
that's valuable for you to have. You could actually use it to try to
become a new person without it being trivially detected by looking at
the computer.
The kit might also have niche usage for admins, who can varedit it to
have different jobs if they want someone to be added to the crew
manifest and get announced, idk.

This PR also by virtue of that I needed it adds functionality that you
can apply the appearance of any atom to a crew manifest entry, in case
some future feature needs us to have a crew manifest entry for a guy
whose photo is of a potted plant or something.

## Changelog

🆑
add: The Mulligan Injector now comes as a kit which can create manifest
entries for you under your new identity, as well as an Assistant ID Card
with your new name.
/🆑
2025-03-17 01:57:44 +01:00
SmArtKarandGitHub 359e0180a0 Generalizes multi-slot implants and makes autosurgeons support them (#89845)
## About The Pull Request

Generalized code from #89479 to be applicable to all organs and made
autosurgeons respect which hand you're using them in (and what zone you
have selected)

## Why It's Good For The Game

Allows us to add leg implants with similar behavior easier, gets of
placeholder types for left arm slots, and you'd ***expect*** to be able
to use autosurgeons to insert implants anywhere but your right arm.

## Changelog
🆑
qol: Autosurgeons now can insert toolkit implants into your left arm
when used in the left hand/with left arm zone selected
/🆑
2025-03-16 18:27:30 +00:00
Majkl-J b6b8306fda Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a 2025-02-20 00:00:19 -08:00
6d0809f78b Toolbox Mastery: Finally gives toolboxes a real use (#88252)
## About The Pull Request

Using a toolbox on an object will now bring up a radial menu containing
all "tools" inside of it, and picking one will put it in your offhand
and use it on the object you clicked. After use, the item will be stowed
back in the toolbox. Welding tools will be turned on (and off when
stowed), and spess knives will give you an option to pick which tool you
want to use. Only certain items qualify as tools (most items that would
fit into a toolbelt do), so you cannot use this to sneakily attack
someone with an esword.


https://github.com/user-attachments/assets/0cd5c859-490f-4643-b451-92ce15a34fba

Using a toolbox in such a fashion passes click modifiers through,
allowing you to use left/right, ctrl and alt click modes of items just
fine.

God bless our attack chain.

## Why It's Good For The Game

Toolboxes are inferior to toolbelts and boxes in almost every single
way, being only capable of storing 7 items and not fitting anywhere.
This gives them an actual use and maybe they'll see use in actual
construction projects.

## Changelog
🆑
add: Toolboxes can be used on any object to pull out and use a tool from
it as long as your offhand is free.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-12-06 23:52:57 +01:00
8b9da265ba Digitigrade code refactor and shoes + explorer suit (Using GAGS and zero sprite bloat) (#88096)
## About The Pull Request
Refactors and extends the existing [digitigrade clothing
system](https://github.com/tgstation/tgstation/pull/85406) to also
support oversuits and shoes (only enabled for sneakers, specific boots,
and shaft miner's explorer suit). All digitigrade-specific clothes are
generated by GAGS by color sampling the base sprite and applying it to a
greyscale template.


![image](https://github.com/user-attachments/assets/c4ce5996-9373-4d76-a0e5-a6b094dd10b4)

More up to date boots:

![image](https://github.com/user-attachments/assets/8ead8056-25a3-42dd-9fde-e838e2a810b9)


![image](https://github.com/user-attachments/assets/783a1201-8a77-45a0-af85-8a63b41b63a8)


Credit to MrMelbert for prototype code and Junkgle for new sprites

## Why It's Good For The Game
Looks good, doesn't introduce maintainability issues or sprite bloat

## Changelog
🆑
add: digitigrade lizards can wear certain shoes and suits
image: added digitigrade shoes & oversuit templates
refactor: improved digi clothing generator code
/🆑

---------

Co-authored-by: MrMelbert <kmelbert4@gmail.com>
Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com>
2024-11-28 16:17:18 +01:00
MrMelbertandGitHub d3bc3e8cb4 Being drunk or having a broken arm hurts accuracy with ranged weapons. Also cleans up a fair bit of hand handling to be more readable (#87904)
## About The Pull Request

1. Having a broken arm will affect your accuracy when firing a weapon
with that arm, even potentially causing damage to you if it's a weapon
with recoil. This effect is not applied under the effects of a
painkiller.

2. The sister effect of this (punching someone with a broken arm) now
also has an interact with painkillers (it can no longer block your
attack).

3. Being drunk heavily affects ranged weapon accuracy, unless you're the
bartender

4. A lot of hand handling cleanup, using new macros to make it a lot
more readable at a glance

## Why It's Good For The Game

We have this system for modifying firearm accuracy but we don't really
use it commonly, and I feel like it slots in well with a lot of places

For broken arms, it adds some more depth to the wound system, in the
same way that trying to punch someone with a broken arm causes pain. (I
actually want to expand this to melee weapon accuracy and attacking with
melee weapons in general, but that's for a later time)

For drunkenness, it just adds to the drunk shenanigans. It also slightly
reduces the effectiveness of drinks as combat healing chemicals, such as
quadsec - makes it a bit more of a trade off.

## Changelog

🆑 Melbert
balance: Having a broken arm affects your accuracy with ranged weapons
fired with that arm. Utilizing a painkiller will nullify this effect,
however.
balance: Painkillers will prevent your punches from being cancelled due
to having a broken arm. You'll still take damage, though.
balance: Being drunk now affects your accuracy with ranged weapon. The
bartender is immune to this effect via their skillchip.
code: A lot of code involving left and right hand handling has been
cleaned up, easier to read. Report any oddities, like left and rights
being flipped
/🆑
2024-11-19 19:31:06 +01:00
WaterpigandGitHub 6f474e269d Fixes many hats incorrectly hiding some bodyparts (#2340)
## About The Pull Request

closes #2148

I love broken flags I like broken flags

## Why It's Good For The Game

Fix bug

## Proof Of Testing

Worked on my machine

## Changelog

🆑
fix: Fixed some hat related sprite hiding issues
/🆑
2024-11-05 19:34:23 +01:00
GhomandGitHub 778ed9f1ab The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.

This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).

And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.

## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.

Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.

Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

![immagine](https://github.com/user-attachments/assets/2bb625c9-9233-42eb-b9b8-e0bd6909ce89)

## Changelog

🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
2024-10-30 08:03:02 +01:00
Majkl-J e59d8ba64b Merge commit '179a607a90ad7ec62bdaff4e6fe72af60ee56442' of https://github.com/tgstation/tgstation into upstream-24-10b 2024-10-23 23:27:16 -07:00
WaterpigandMajkl-J bb70889f6e TG Upstream Part 1
3591 individual conflicts

Update build.js

Update install_node.sh

Update byond.js

oh my fucking god

hat

slow

huh

holy shit

we all fall down

2 more I missed

2900 individual conflicts

2700 Individual conflicts

replaces yarn file with tg version, bumping us down to 2200-ish

Down to 2000 individual conflicts

140 down

mmm

aaaaaaaaaaaaaaaaaaa

not yt

575

soon

900 individual conflicts

600 individual conflicts, 121 file conflicts

im not okay

160 across 19 files

29 in 4 files

0 conflicts, compiletime fix time

some minor incap stuff

missed ticks

weird dupe definition stuff

missed ticks 2

incap fixes

undefs and pie fix

Radio update and some extra minor stuff

returns a single override

no more dupe definitions, 175 compiletime errors

Unticked file fix

sound and emote stuff

honk and more radio stuff
2024-10-19 08:04:33 -07:00
Xander3359andGitHub f9d0d5f5ec Infiltrator suit now hides wings, antennae and obfuscates your voice (#86546)
## About The Pull Request
Infiltrator suit now hides wings, antennae and obfuscates your voice

Hidden moth wings are no longer capable of flight
## Why It's Good For The Game
Further helps the infiltrator suit hide your identity by hiding
wings/antenna and makes it where you no longer have species-specific
"say" verbs or lisps.
## Changelog
🆑
qol: Infiltrator mod hides your voice
fix: Infiltrator suit now hides moth wings/antenna
fix: hidden moth wings are no longer capable of flight
/🆑
2024-09-12 17:50:11 +02:00
Waterpig 4c4930c71d Merge branch 'master' of https://github.com/tgstation/tgstation into pulls-tg-to-fix-shit 2024-09-08 00:59:39 +02:00
carlarctgandGitHub 2f69fe6190 Adds three new deathmatch maps - Ragnarok, Lattice Battles, Species Showdown (#85319)
## About The Pull Request

Adds three new deathmatch maps.

### Important nonDM Balance Changes

Cult daggers fit on belts.

Heretic blades fit on belts.

Veil shifters fit on belts.

I really don't know why these didn't, it makes inventory management
rather annoying at times. It also screwed my loadouts over.

Cursed Blades fit on cult robes. They're cult equipment after all.

Bronze suits fit toy watches!!

### Ragnarok


![ragnarok](https://github.com/user-attachments/assets/b20b0974-b1e3-4d1f-9c46-03c56da3eebf)

A vicious battle in the jungle, between the three major religious sects:
Prove your deity's might! And try not to upset any primates. Or fall
into the chasm.

Going clockwise:

**Cultist Invoker**: Wielding a mirror shield, shielded robes, a sword,
and some bolas, this cultist has a 'well-balanced' set of equipment to
annihilate their opponents.

**Cultist Artificer**: This set harnesses the blood magicks - with
spells of stunning, blood rites, and ranged hallucinations, with a
wicked Cursed Blade and Veil Shifter as implement, and Berserker Robes
to finish the look.

**Holy Crusader**: Nullifying most, but certainly not all, of the
fearsome arsenal of the opponents with the null rod at their belt, the
Crusader packs a dangerous claymore and armor to protect them from the
demons.

**Rat'var Apostate**: Hey, what's that guy doing there in the dark? They
don't have any magic because their god is Fucking Dead, but they're
still going to show up for a token effort. Good luck!

**Heretic Scribe**: This mad soul wields an antique rifle and an
assortment of other dangerous relics, with a set of magic geared towards
staying far apart, picking enemies off from range and evading their
attacks for the final blow.

**Heretic Warrior**: With the deadliest of Mansus Magic at their
disposal, this warrior is only limited by their ability to juggle all
their spells at once - don't get overwhelmed sorting your spells while
an Invoker runs at you with a sword and shield and makes you cry
yourself to death.

### Lattice Battles


![spleef](https://github.com/user-attachments/assets/03391656-4544-4230-8a40-ab6349a1458c)

A fresh change of pace: In this pacifist map, the only way to kill your
opponents is to snip the lattices and catwalks from under them. Watch
your step.

### Species Warfare


![species_warfare](https://github.com/user-attachments/assets/35b4acc5-10db-403b-ac0f-78fac8d41e8a)

Prove the might of your static by duking it out with every other kind of
crewmember out there. Features a messy dorms, a ticking-timebomb atmos,
a rather sterile robotics, a slippery closet, a fluffy medbay, and an
energetic bridge.
Mirror Shields now shatter on throw (which stuns and hurts)

## Code changes

Added two new traits, TRAIT_ACT_AS_CULTIST and TRAIT_ACT_AS_HERETIC.
Added these as an OR to respective IS_X checks. Added new GET_X checks
for them, which do not check the trait.

Tidied up the file those are in.

Added belt_contents() to outfits, but it dosen't work....

Added a heretic rust sister-type to rust walls and floors.

Fixed a typo in cult ascension.

## Why It's Good For The Game

These maps all aim to do something interesting and unique with DM rather
than the usual deathfest and hugging of random crates.

Ragnarok allows players to practice unusual and rare magical mechanics,
similar to Ragin' Mages.

Lattice Battles adds SPLEEF to the game, which I think is awesome.

Species Warfare is, I think, fun and funny. Each 'department' has
incredibly chaotic and thematically-appropiate content for the species
its meant to symbolize, and I look forward to the chaos that every round
in it is inevitably going to have.

> Mirror Shields now shatter on throw.

I'm surprised they didn't! Since they aren't used anywhere I can do what
I want with them.

## Code changes

> Added two new traits, TRAIT_ACT_AS_CULTIST and TRAIT_ACT_AS_HERETIC.
Added these as an OR to respective IS_X checks. Added new GET_X checks
for them, which do not check the trait.

I think this is a clever solution to the problem of 'what if I want
someone who acts as the antag, but isn't?' Some procs do need the datum
to modify it, so there's GET_X, but those aren't common and don't seem
likely to be an issue.

> Added belt_contents() to outfits, but it dosen't work....

Help would be very much appreciated, I don't know what I'm doing wrong
here. It's only used for the heretic scribe's unfathomable curio.
Some post-PR cleanup coming up.

## Changelog
🆑
add: Added three new DM maps - Ragnarok, Lattice Battles, Species
Showdown.
/🆑
2024-08-19 13:47:27 +00:00
ed2f017923 Digitigrade clothing sprites (feat. GAGS and 0 sprite bloat) (#85406)
## About The Pull Request

Use GAGS to auto-generate digitgrade leg sprites based off of 1 basic
template + color sampling.
Icons are cached relatively aggressively, like female sprite variations.
So no need to worry about that.

The result: All of these sprites with only **3** icons added (the base
template, and the masks)
Obviously it's not perfect - some of the sprites (like the engineer's
jumpsuit) lose some "luster", but it does the job if I do say so myself.


![image](https://github.com/user-attachments/assets/5c23dc97-8716-490c-898c-58b1e01a8a02)

Only applied to undersuits, for now. 

## Why It's Good For The Game

- Allows Lizards to show off their handicap, rather than hiding it or
necessitating they use skirts.

- (Ideally) leads to an uptick in Digitigrade abuse (due to being easier
to identify), which is also a net positive.

- Implemented without any common issues revolving alt bodytype clothing
sprites (those being maintainability and sprite bloat)

## Changelog

🆑 Melbert
add: Auto-generated digitigrade clothing sprites for most jumpsuits
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-08-15 23:28:02 +02:00
SmArtKarandSkyratBot 04bb468bd5 Mining MODsuit sprite changes + balance (#85353)
## About The Pull Request

Slightly slimmed down the helmet, changed belt into plates, recolored
brown parts to blue and added a few more glowy bits to the mining
MODsuit.

![image](https://github.com/user-attachments/assets/a6e3113f-205e-401d-881a-fc87925cec7f)

Here's what it looks like currently

![image](https://github.com/user-attachments/assets/887be8c1-fe0c-4d8f-b574-051cf6c78c0e)

Mining MODsuit now hides belts, has THICKMATERIAL while active and got
large capacity storage. Eating apparatus no longer has an on-person
sprite. Adjusted drill module active sprite to actually fit on your hand
instead of being slightly to the side.

## Why It's Good For The Game

Currently the MOD looks a bit goofy, I tried making it a bit more
streamlined without removing the bulk and look of a reinforced explorer
exosuit. Belts are hidden for the sake of visuals, as almost all miners
wear riggings which do not fit with the MOD spritework at all. While
inactive it has THICKMATERIAL but for some reason loses it when
activated, which doesn't make much sense. Its a thick, armored
spacesuit.

Eating apparatus isn't a module that people around you need to be
acutely aware of, nor did it look particularly good. I tried respriting
it but there's not much to be done with 12 pixels worth of space.

Large storage is a rather impactful change - currently only loader and
advanced (CE's personal) MODs have it, and more can be printed after
researching advanced engineering MODsuit designs (from my experience,
usually done by ~40 minute mark). Storage space is a very important
aspect, and mining MODs already have high competition with ash drake and
H.E.C.K. armors. Having less storage makes them a weird sidegrade,
arguably even a downgrade, to roundstart explorer gear that has been
upgraded with plates; its only real advantage is being able to pass
through lava and freeing a pocket previously occupied by your ore
satchel due to arcmining nerfing its main purpose (ore mining). While
this still is technically worse than roundstart backpacks, this should
allow them compete with with other equipment in terms of usability.

## Changelog
🆑
balance: Mining MODsuits are now considered thick clothing and gained
expanded storage.
image: Mining MODsuits got a slight glowup and hide belts now
/🆑
2024-07-31 10:59:57 -04:00
SmArtKarandGitHub 3b364b1cea Mining MODsuit sprite changes + balance (#85353)
## About The Pull Request

Slightly slimmed down the helmet, changed belt into plates, recolored
brown parts to blue and added a few more glowy bits to the mining
MODsuit.


![image](https://github.com/user-attachments/assets/a6e3113f-205e-401d-881a-fc87925cec7f)

Here's what it looks like currently


![image](https://github.com/user-attachments/assets/887be8c1-fe0c-4d8f-b574-051cf6c78c0e)

Mining MODsuit now hides belts, has THICKMATERIAL while active and got
large capacity storage. Eating apparatus no longer has an on-person
sprite. Adjusted drill module active sprite to actually fit on your hand
instead of being slightly to the side.

## Why It's Good For The Game

Currently the MOD looks a bit goofy, I tried making it a bit more
streamlined without removing the bulk and look of a reinforced explorer
exosuit. Belts are hidden for the sake of visuals, as almost all miners
wear riggings which do not fit with the MOD spritework at all. While
inactive it has THICKMATERIAL but for some reason loses it when
activated, which doesn't make much sense. Its a thick, armored
spacesuit.

Eating apparatus isn't a module that people around you need to be
acutely aware of, nor did it look particularly good. I tried respriting
it but there's not much to be done with 12 pixels worth of space.

Large storage is a rather impactful change - currently only loader and
advanced (CE's personal) MODs have it, and more can be printed after
researching advanced engineering MODsuit designs (from my experience,
usually done by ~40 minute mark). Storage space is a very important
aspect, and mining MODs already have high competition with ash drake and
H.E.C.K. armors. Having less storage makes them a weird sidegrade,
arguably even a downgrade, to roundstart explorer gear that has been
upgraded with plates; its only real advantage is being able to pass
through lava and freeing a pocket previously occupied by your ore
satchel due to arcmining nerfing its main purpose (ore mining). While
this still is technically worse than roundstart backpacks, this should
allow them compete with with other equipment in terms of usability.

## Changelog
🆑
balance: Mining MODsuits are now considered thick clothing and gained
expanded storage.
image: Mining MODsuits got a slight glowup and hide belts now
/🆑
2024-07-31 14:53:51 +01:00
9842475afd [MIRROR] Monkeys now use height offset (and monkey tail works) (#27244)
* Monkeys now use height offset (and monkey tail works)

* fix

* modular fixes

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
2024-06-29 20:45:44 +05:30
nikothedudeandGitHub b84bd1a6aa [SEMI-MODULAR] [NOVA PORT] A bunch of taur fixes and expansions (#28444)
* weeeee

* ??? why did i do this

* somehow missed this

* Update taur_body.dm
2024-06-29 10:37:55 +05:30