Compare commits

...

861 Commits

Author SHA1 Message Date
Dorragon cff425e853
Merge e7e274d114 into c7e1c980b6 2026-08-14 09:06:10 -03:00
Delta-V bot c7e1c980b6 Automatic changelog update 2026-08-14 06:31:17 +02:00
Stop-Signs 0516e97461
Disallow evil fucked up brainwashing (#6414) 2026-08-13 23:30:57 -05:00
Delta-V bot fd5b16abb3 Automatic changelog update 2026-08-13 17:02:06 +02:00
Vanessa 1a9281ab63
Fixed Species Organs (#6409)
Fixed some inconsistent organs with species.
2026-08-13 10:01:47 -05:00
Delta-V bot c9038be25f Automatic changelog update 2026-08-13 03:17:23 +02:00
Vanessa b3cf460bda
Fix and Tweak Random Shuttle Spawns (#6401)
* Fix and slightly alter random shuttle spawns

* Few more tweaks. Twice as many shuttles.

* Tweaked to be max every 90 min
2026-08-13 03:17:03 +02:00
Delta-V bot 7fddf52368 Automatic changelog update 2026-08-12 19:34:32 +02:00
pathetic meowmeow 4a96535892
Finetune ion law set (#6390) 2026-08-12 14:34:11 -03:00
Stop-Signs 93f614fdfc
Add animation to the radiant sword (#6380)
* progress

* kermit

* donezo

* light
2026-08-12 14:15:26 -03:00
Delta-V bot 40997fb4a4 Automatic changelog update 2026-08-12 19:05:52 +02:00
freezer dog c3adbb32f1
a cowboy crate edit (#6363)
yeehaw
2026-08-12 14:05:32 -03:00
Delta-V bot 3974a0331b Automatic changelog update 2026-08-12 18:49:52 +02:00
SumofThreeParts 92c6c8cfa3
Making Universals Cheaper (#6366)
* Making Universals Cheaper

Signed-off-by: SumofThreeParts <its.a.joke1000@gmail.com>

* Update cargo_armory.yml

Signed-off-by: SumofThreeParts <its.a.joke1000@gmail.com>

* Update cargo_armory.yml

Signed-off-by: SumofThreeParts <its.a.joke1000@gmail.com>

---------

Signed-off-by: SumofThreeParts <its.a.joke1000@gmail.com>
2026-08-12 13:49:31 -03:00
Vanessa ea313aae4a
Update Configs (#6407)
* add configs that were not managed in git

* Add fallback preset

* removed map_enabled
2026-08-10 17:03:25 -05:00
Delta-V bot 272c38a6d0 Automatic changelog update 2026-08-10 18:15:15 +02:00
Coryn 7f11e1eebb
Harpy Layers Fix (#6406)
* Harpy Layers Fix

* Remove unused Dependency

* Commented out Visual Subscribes, Add RArmExtension has a hideable layer for hardsuits

* Untouch Harpy Visuals
2026-08-10 11:14:55 -05:00
Delta-V bot 06429d050a Automatic changelog update 2026-08-09 20:24:45 +02:00
Theo ed07a12d24
Gnomes (#6027)
* add gnomes, gnome hat, gnome gamerule, gnome voice

* inventory and hand fixed, speech half fix, hat embed, gamerule doesn't work

* fix audio, gamerule doesn't spawn correctly, need to fix dead sprite 90 degrees off

* add audio, add custom jaunt + polymorph, "fix" dead sprite

* add storage to hat, gnome fit into duffelbags

* make jaunt 2 seconds, hat store small items

* fix spawn

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* jaunt 20 seconds

* fix stupid web merge, 20 second jaunt cooldown

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* add pitch variation

* audio fixes and guidebook, make pulling need hands

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix hands and polymorph inventory, make storage implant unremovable

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* polymorph inventory make linter mad

* Update Resources/Prototypes/_DV/Polymorphs/polymorph.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Theo <tad3@illinois.edu>

* Update Resources/Locale/en-US/_DV/abilities/psionic.ftl

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Theo <tad3@illinois.edu>

* passive HTN and glimmer event

* fix comment

* random names

* PR Review Suggestions but it works this time

---------

Signed-off-by: Theo <rebe83a@gmail.com>
Signed-off-by: Theo <tad3@illinois.edu>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-08-09 18:24:25 +00:00
Delta-V bot 493db6d129 Automatic changelog update 2026-08-09 20:14:34 +02:00
Vanessa d07f16f43f
Allow curators to help out with people learning the game (#6374) 2026-08-09 13:14:15 -05:00
Delta-V bot f580f3b060 Automatic changelog update 2026-08-09 18:57:52 +02:00
Vanessa e7869d8221
Fix Jaunting/Polymorph while Nodecrawling (#6400)
* Disable polymorph while ventcrawling

* Actually, allow but remove from vent

* update comments
2026-08-09 11:57:32 -05:00
Vanessa 398e3eb75f
Server Location Updates (#6405)
Server name updates (because we're in canada now)
2026-08-09 11:54:55 -05:00
Vanessa 0637a82e40
Update CODEOWNERS (#6404) 2026-08-09 11:41:59 -05:00
github-actions[bot] 206ded17c8
Update Credits (#6402)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-08-09 03:11:44 +02:00
Delta-V bot 847f534ff6 Automatic changelog update 2026-08-08 01:25:14 +02:00
Vanessa b38f0b1a59
Fix parcel wrap transform parenting via SpawnAtPosition (#44679) (#6399)
ParcelWrap: spawn at position, use PopupEntity

Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
2026-08-07 23:24:53 +00:00
Delta-V bot efbeb5bf68 Automatic changelog update 2026-08-07 18:51:45 +02:00
Vanessa 1f09c717f3
Fix Antags Being Crazy Smol (#6398)
* Fixed antags being crazy smol

* Update Content.Shared/Sprite/SharedScaleVisualsSystem.cs

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2026-08-07 16:51:24 +00:00
Radezolid 52ed881e2c
Extra mapping stuff for justice rework (#6397)
* Banner

* Beacons

* Warp

* Gun safe stuff
2026-08-07 09:04:06 -05:00
Radezolid 393e1951a2
More suffixes fixes for Justice (#6396)
Suffixes, suffixes!
2026-08-05 00:07:51 +00:00
Delta-V bot ca7c7daf6c Automatic changelog update 2026-08-05 00:19:07 +02:00
Stxcking 697da0679a
Fix: Moproach Ghostrole + Critter Emoting Fixes (#6356)
yeah sure it works
2026-08-04 17:18:46 -05:00
Delta-V bot 1b75cad94f Automatic changelog update 2026-08-04 23:49:39 +02:00
Vanessa 82e5d9b924
Fix Shadekin Changelog (#6395)
* Fix changelog

* i can't spell
2026-08-04 21:49:18 +00:00
Radezolid e44717f262
Fix Justice Warden's suffixes for mapping (#6393)
* SUFFIXES

* I missed the PDA one.

* Justice warden's shit

* Holopad
2026-08-04 12:45:19 -05:00
Delta-V bot 9c83b91850 Automatic changelog update 2026-08-04 18:41:34 +02:00
Vanessa f027ae4566
Fix Shadekin Inheritence (#6381)
* Make shadekin organic

* Removed shadekin lungs

* Update Content.Server/_Starlight/ShadekinSystem.cs

Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2026-08-04 16:41:14 +00:00
Delta-V bot 724cd1c9b8 Automatic changelog update 2026-08-04 18:28:16 +02:00
Vanessa f44178bec3
Character Height Slider + Character Height Changes (#6320)
* Do the thing for everyone. Height is now +/- 20% for everyone.

* Make the height slider show height. Solve for special cases. Solve world hunger.

* Fixed some minor things.

* Adjust some densities

* Smaller character balance

* Comment

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Oops, that was from a failed thing.

* Size calc correction

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* people are tall in the future

* I need to refactor a bit still.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Refactor into a system

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* smol

* Fixed remaining scale visual components and species

* Remove MockScale. Just add scale visuals for Allalulo to compensate.

* PR feedback

* Slight refactor. Moved profile/species scale out of the scale system and put it into the HumanoidProfileSystem. Removed some CD logic that is no longer needed.

* how'd this get in there

* Move the other motorkind.yml to AprilFools dir

* NO NO_PENTALTY lol

* Other PR stuff

* Other PR stuff

* Add a dirty

* Add some networking to the comp

* Add small character to cloning

* One more fixX

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-04 16:27:55 +00:00
Delta-V bot 877267cd31 Automatic changelog update 2026-08-03 04:45:31 +02:00
William Lemon 3572bf4739
Skia Shadow-Walk and DarkVision instead of VentCrawl (#6346)
* What if Skia were awesome instead of sucking

* Shhh Yaml Linter... Shhh

* Small change to make it feel more consistant

* Reworked shadowwalking to be lazy

Much faster, preserves most of the feel

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update Content.Shared/_DV/Overlays/Components/DarkVisionComponent.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

---------

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
2026-08-02 22:45:11 -04:00
Delta-V bot 7867fb7f1f Automatic changelog update 2026-08-02 15:31:52 +02:00
Stxcking a3b1059c21
PORT: Added Construction Bag and Bag of Holding from Frontier (#5846)
* Construction Bag (#1487)

* initial commit

* Un Tag

* fixes

* no tickets

* research thingy

* inflatable walls, shared.comp

---------

Co-authored-by: Dvir <dvirf01@gmail.com>

* DeltaV related

Don't kill me for fixing my own grammar mistake with the borg module please

* BorgModuleAdvancedConstruction

- I will fix the spelling in another PR I guess. GUH
- Some fixes to the bag according to linter.
Anything and everything you need for a borg module:
- Lathe recipe.
- Module.
- Icon/action sprite.

* Sprite fixes

* lathe fix I forgor

* nuke BorgModuleAdvancedConstruction

CR request

* why was this not merged uh whoops

* suggestions

* Update Resources/Prototypes/_NF/Recipes/Lathes/misc.yml

Signed-off-by: Radezolid <snappednexus@gmail.com>

---------

Signed-off-by: Radezolid <snappednexus@gmail.com>
Co-authored-by: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com>
Co-authored-by: Dvir <dvirf01@gmail.com>
Co-authored-by: Radezolid <snappednexus@gmail.com>
2026-08-02 13:31:30 +00:00
Stxcking 076d960072
Justice Rework - Mapping (#6276)
* windoors, airlocks, faxes, dresser, beacon, warppoints

* Lockers and placeholder bedsheets

Most of this done by Rebe

* attorney as a separate role

idk why we decide to just modify upstream lawyer instead of making a separate role from the start sobs

* justice warden, armorer, marshal job roles

* linter fixes

* holy shit theres more

a mixture of everything as I had a list to go down
-JusticeDetective stuff because Det is now under justice
-More Armorer stuff
-Cameras
-Telecoms
-Prosec/Attorney lockers
-Secure windoors

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* brig access as requested + admin config

also dupe beacon fix wop

* Reb

* Bypass ChameleonJobLoadoutTest

dear maint i pinky promise they will get added before rework launches

* suggestions and fixes

They don't need to be on the access config right now but should be fine.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-02 10:20:12 -03:00
github-actions[bot] acb6677aff
Update Credits (#6392)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-08-02 04:08:22 +02:00
Delta-V bot c916f9a90b Automatic changelog update 2026-07-30 19:31:07 +02:00
Vanessa 71b6dfc0b1
Add Remote Medical Tracking to T3 Biochemical Tree (#6272)
* Added handheld monitors to the research tree.

* changed logi crate parent

* Added new board to dynamic pack

* Namespaced new entity

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Apply suggestions from code review

Co-authored-by: Radezolid <snappednexus@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Radezolid <snappednexus@gmail.com>
2026-07-30 17:30:47 +00:00
Delta-V bot 5fe8a394ba Automatic changelog update 2026-07-29 17:42:20 +02:00
Vanessa 69d3d96d79
Reduce Sink Claws Delay + Sink Claws Alert (#6376)
* Reduced felinid rootable delay to tolerable levels

* Added the unused toggle icon to the alerts on the side when claws are protracted, instead of using the diona one.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-29 17:42:01 +02:00
Delta-V bot 1e6f69361d Automatic changelog update 2026-07-29 14:19:14 +02:00
NollaDarkstar cb71e8159c
Change resistances of the Durathread Vest and Plate Carrier (#6311)
* Change to durathread vest and plate carrier

* Increase heat resistance of the durathread to 20%, plate carrier remains at 20% slash

* Plate Carrier is back at 20% heat

---------

Co-authored-by: john <sadadawd3@gmail.com>
2026-07-29 12:18:53 +00:00
Delta-V bot 809525b1bd Automatic changelog update 2026-07-27 21:26:57 +02:00
CalliganSierre b81ccd4f15
Ported Shadekin Audio Revamp (#6370)
* Port TheDen Shadowkin voice noises for Shadekin

Bring over TheDen's Shadowkin scream, laugh, and talk audio, wire them into Shadekin emote sound collections and speech sounds so Shadekin no longer use generic human laughs/speech.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Move TheDen Shadowkin voice prototypes to _DEN

Restore Starlight shadekin sound collections and emote sounds to their original state. Keep TheDen scream, laugh, and talk wiring under _DEN and point MobShadekin at those prototypes.

* Clean up comments on Shadekin voice port

Remove unnecessary inline notes from MobShadekin wiring and drop the extra header on sound collections. Keep a single provenance comment on the TheDen emote sound block.

* Cleaned up unneccessary comments

* Added gulps, i guess lol

* Removed custom laugh emotes for shadekin, reverted to normal human laugh.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-27 21:26:37 +02:00
Delta-V bot c50871e76b Automatic changelog update 2026-07-27 18:43:40 +02:00
Stxcking 1206fca623
Feat: Departmental Bomber Jackets (#6220)
* Sprites

* bombers.yml

* drobes changes

* loadouts

* armor values (dread) + fixes

* updated sprites

* Suggestions
2026-07-27 11:43:19 -05:00
CMuncey 140be08fbb
Health analyzer plus (#6230)
* Add medtek+ cart, healthanalyzer+ gui, research target

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Make new health analyzer default, remove research

* Remove bloodlevel unit count, center damage/reagents

* Accidentally pushed wording change, reverting

* Added unknown reagent category. Fixed some issues with FixedPoint2 showing 100x the damage.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-07-27 14:02:14 +00:00
Delta-V bot b218279e7f Automatic changelog update 2026-07-27 15:48:35 +02:00
Vanessa 5664d6746d
Revert "PORT: Selectable Cyborg Chassis from CosmicDrift (#5712)" (#6385)
This reverts commit 4e2dce4414.
2026-07-27 08:48:14 -05:00
github-actions[bot] ac747032ce
Update Credits (#6383)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-07-26 04:09:10 +02:00
Delta-V bot 42db88fa74 Automatic changelog update 2026-07-24 19:39:38 +02:00
Sir Warock a52809279e
Nerf & Fix NT-3 (#5653)
* One Commit ops

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Implement requested changes

Co-Authored-By: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* Well Well Well

* Fix Pierce Mechanic

* Include it in comment

* Implement requested changes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-24 12:39:18 -05:00
Delta-V bot 07f73179cd Automatic changelog update 2026-07-24 19:35:07 +02:00
freezer dog d1c4e94499
giving the wt a little love not like a whole lot like a pat on the shoulder or somethin (#6364)
* i cant think of anything funny to say yknow just like yep its like yknow and like yeah

* deletin this, also saw literally nothing attached to this to begin with i guess? gonna double check but yeah
2026-07-24 12:34:47 -05:00
Delta-V bot 481335487e Automatic changelog update 2026-07-24 19:29:07 +02:00
pootslap ef0e8497ce
Monkey emote sounds (#5928)
* pitch change ops

adding the params to emoteSounds overrides every individual emote which sucks

* lower gulps and blinking

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update speech_emote_sounds.yml

Signed-off-by: pootslap <211648338+pootslap@users.noreply.github.com>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Signed-off-by: pootslap <211648338+pootslap@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-24 12:28:47 -05:00
Delta-V bot 06c5917dbf Automatic changelog update 2026-07-24 19:28:20 +02:00
Manoob f0d1f668fe
FIX: Emergency access doesn't change the BOLT/Emergency permissions on a door using remote control (#6141)
AA doesnt change the BOLT/AA permissions on a door using remote control!
2026-07-24 12:28:00 -05:00
Vanessa 583eb39799
ADMIN: Move common QUERY commands to DEBUG (#6351)
ADMIN: Move entities command to DEBUG
2026-07-24 12:27:47 -05:00
Delta-V bot a0ebf263e3 Automatic changelog update 2026-07-23 22:07:23 +02:00
Vanessa 898101b18e
Buckle Bugfix + Dynamic CPR Prio (#6375)
* Fix long-time carrying bug with buckling. Also change CPR priority

* remove TODO comment

* small nitpick

Refactor OnRemoved method and improve code formatting.

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2026-07-23 20:07:03 +00:00
Delta-V bot 25f4ffda47 Automatic changelog update 2026-07-23 18:29:49 +02:00
turtlemutt 796e6e4405
Lighthouse Tweaks (#6088)
* Update lighthouse.yml

* Update lighthouse.yml
2026-07-23 18:29:29 +02:00
Delta-V bot 5a4e73574d Automatic changelog update 2026-07-23 05:17:21 +02:00
Astra e4e3f30b84
Shrink entropic blades (#6371)
Resize entropic blade
2026-07-23 00:17:01 -03:00
William Lemon b15639af05
Fixed Motorkind (#6347)
* Fixed Motorkind

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Gave the hand sprites human hand sprites

I'm not making motorkind hand sprites. Please god don't make me

* Tiny fixes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-21 23:51:35 +00:00
Delta-V bot 009371129a Automatic changelog update 2026-07-21 20:45:08 +02:00
Coryn 09553d6b8e
Add back Felinid Rootable (#6358) 2026-07-21 18:44:48 +00:00
Delta-V bot d736537261 Automatic changelog update 2026-07-21 09:59:15 +02:00
Coryn c0fbc4f262
Shadekin fixes (#6357)
* Fix Shadekin Emote availablity for everyone else

* Add Shadekin Bloodstream, so meds work
2026-07-21 03:58:55 -04:00
Delta-V bot cc33dc08e8 Automatic changelog update 2026-07-21 04:20:49 +02:00
Stxcking f6558cef8e
Fix: Yip missing string (#6354)
yips
2026-07-21 02:20:29 +00:00
Delta-V bot 196419daf0 Automatic changelog update 2026-07-21 02:05:28 +02:00
nlaky ee01a470cf
Fix vulp helmet sprites (#6201) 2026-07-21 00:05:08 +00:00
Delta-V bot c0b78a5065 Automatic changelog update 2026-07-21 01:46:30 +02:00
ArionGekkota 3b27cb1630
Pka upstream merge (#6258)
* PKA changes to upstream PKA balance

* Nerfed goliath and basilisk health

* Nerfed carp HP (3 shots to kill with unupgraded PKA)
2026-07-20 18:46:11 -05:00
Delta-V bot fc77ebae4d Automatic changelog update 2026-07-21 01:37:26 +02:00
Proxy also works :3 00d1991154
traitors get 30 tc (#6275)
* traitors get 30 tc

* Update roundstart.yml

* higher is fewer woops

* again

* like this?
2026-07-20 23:37:06 +00:00
William Lemon f20d8d9f7f
Toolshed Additions: Field & DoExt commands (#6329)
* Toolshed Additions

* Removed MarkingCommand, added description to FieldCommand

* Added DoExt command
2026-07-20 19:28:39 -04:00
Delta-V bot ae4a864ad0 Automatic changelog update 2026-07-21 01:23:48 +02:00
jessiscah23 dbe955ca17
Cargo bounty console improvements (with changes) (#6306)
* simple fix for "Approved by: Self" on all cargo invoices

* port of ruddygreat's bounty console improvements to DeltaV

* modified tooltips and fixed a few importing errors

* StatusLabel in BountyEntry.xaml.cs

* final stupid tweak

* removed unrelated bugfix PR that snuck into this branch somehow

* Cargo bounty fix requests

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: cargomouse <dboozlebeep@gmail.com>
Co-authored-by: Jessica Harvey <itsjessagain23@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-20 18:23:28 -05:00
Delta-V bot 19ebd10ad1 Automatic changelog update 2026-07-21 01:18:12 +02:00
pathetic meowmeow dcd0fb693c
Evidence bags (#6280)
* Evidence bags

* tests

* fix the gridinv thing
2026-07-20 18:17:52 -05:00
Delta-V bot 9a6cfb2bfb Automatic changelog update 2026-07-21 00:44:20 +02:00
KOTOB 35fa80f737
Kill security poncho (#6332)
* ughhh

* explode

* explode harder
2026-07-20 17:44:01 -05:00
Delta-V bot 3b7304d092 Automatic changelog update 2026-07-21 00:23:18 +02:00
pootslap da7468e79e
Fixed improvised shotgun recipe (#6327)
fixed recipes
2026-07-20 17:22:59 -05:00
Delta-V bot 609bf88d9d Automatic changelog update 2026-07-21 00:21:43 +02:00
freezer dog b71e0a2edf
vulpkanin yip (#6301)
* ok i think this works? idunno

* now its working

* fixin some namespace stuff thank ya stxcking
2026-07-20 17:21:23 -05:00
Delta-V bot aacfbd17f8 Automatic changelog update 2026-07-21 00:20:31 +02:00
pathetic meowmeow 6fda61e9cb
Report global coordinates on the crew monitor (#6326) 2026-07-20 17:20:11 -05:00
Delta-V bot e47ee2601b Automatic changelog update 2026-07-21 00:11:09 +02:00
Coryn 064fd77a11
Shadekins arrived (#5481)
* Merge pull request #838 from FoxxoTrystan/Shadekin

Shadekin

# Conflicts:
#	Resources/Prototypes/Body/species_base.yml
#	Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml
#	Resources/Prototypes/Guidebook/species.yml
#	Resources/Prototypes/Species/species_weights.yml

* Merge pull request #868 from FoxxoTrystan/Shadekin-Perf

Shadekin Performence

* Merge pull request #883 from FoxxoTrystan/Shadekin-Patch

Shadekin Patch + Markings

* Merge pull request #947 from RHSvenson/Shadekin_SurvivalBox

Added and implemented emergency boxes for nonbreathers

* Merge pull request #1861 from ilovehans10/shadekin-guidebook-typo-fixes

Shadekin guidebook typo fixes

* Mars -> Marrs (#2381)

<!-- IT'S NOT WIZDENS REPO, IF YOU WANT TO ADD YOUR CHANGES ON ALL
SERVERS, CREATE PR TO WIZDENS REPO -->

<!-- What do you propose to change with your PR? -->
Changes `@ mars` to `@ marr`s for Shadekin.

<!-- What is the reason for adding these changes? Please post links to
Discussions as well as Bug Reports here. Please describe how this will
change the game balance. -->
Parity with emote wheel. Also, `<PLAYERNAME> mars` feels weird.
(...probably because Mars as in the planet.)

<!--
If your PR contains in-game changes you must provide screenshots/videos
of the changes.
-->

<!-- check boxes for faster reviewing of your PR -->

- [X] I do not require assistance to complete the PR.
- [X] Before posting/requesting review of a PR, I have verified that the
changes work.
- [X] I have added screenshots/videos of the changes, or this PR does
not change in-game mechanics.
- [X] I affirm that my changes are licensed under the [Starlight Fork
License](https://github.com/ss14Starlight/space-station-14/blob/Starlight/LICENSE-Starlight.TXT)
and grant permission for use in this repository under its conditions.

**Changelog**
🆑 Fractalflower
- tweak: Changed Mar emote text to `@ marrs`.

* Fix shadekin guidebook resistance info (#2881)

The shadekin guidebook currently overstates the cellular resistance by
10% and vastly underestimates the bloodloss damage.

The guidebook being accurate helps guide player understanding.

<img width="563" height="669" alt="image"
src="https://github.com/user-attachments/assets/bece997a-5aa4-46f5-9b9f-2fe41dc98e97"
/>

- [X] I do not require assistance to complete the PR.
- [X] Before posting/requesting review of a PR, I have verified that the
changes work.
- [X] I have added screenshots/videos of the changes, or this PR does
not change in-game mechanics.
- [X] I affirm that my changes are licensed under the [Starlight Fork
License](https://github.com/ss14Starlight/space-station-14/blob/Starlight/LICENSE-Starlight.TXT)
and grant permission for use in this repository under its conditions.

**Changelog**

🆑 Penguinwizzard
- fix: Turns out that we were issuing wildly incorrect guidebooks on
Shadekin; an updated edition should now be available for crews.

* New Shadekin Disabilities

* Light hurts Shadekin

Shadekin should get more than a mild sunburn in extreme light

* Changes to make it work

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Foam Immunity Readded

* Flash Modifer works now

* Remove DarkLightComponent

* Add missing Locale for Markings from Den

* Fix Issues, Seperate from _DV namespace

* Yaml Linter Fixes

* ARGH

* ARGHv.2

* ARGHv.3

* Nutribatard instead of Baguette

* Exchange Nutribricks with PSB

* Cotton Baguette

* Changing away from BaseOrganic and Respirator Removal in Code

* Fulfill Content Review Requests

* Remove Eye Coloration - Unused

* Remove ShadekinPhase entirely

* Attribution correctly linked

* Review Changes

* done yml links correctly now

* yml format in shadekin effects

* Remove yml file mention and read Internal

* Readd Internals

* _StarLight -> _Starlight

* Port to Nubody and maybe fixing some fuckups

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Shadekin Yaml Errors

* Add missing markings name, add missing base_scale

* Remove Internal Removal in base_species. Make it Component based

* Add missing readonly

* Remove Non Breahter emergency boxes, Shadekin normal box

* DV Comment Fixes

* Untouched File?

* Use FlashMultiplierDurationEvent

* Add missing attribution

* Fixed scream attributions

* Shadekins can now properly succumb. Starlight#4746

---------

Co-authored-by: Matthew Herber <32679887+Happyrobot33@users.noreply.github.com>
Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com>
Co-authored-by: Rinary <rinary.super@gmail.com>
Co-authored-by: FoxxoTrystan <trystan.garnierhein@gmail.com>
Co-authored-by: Tess_the_Evil <tessawfresh@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-07-20 22:10:48 +00:00
Delta-V bot 2f5f2fd491 Automatic changelog update 2026-07-21 00:09:16 +02:00
freezer dog 018d65d99b
Imp ports - Novice mark and wearable examine (#6118)
* Obvious Examine (#2462)

* Obvious Examine

* Feature creep is real

* Less words and better colors

* even fewer words, please

* Oops sorry yaml

* Refactor entire Obvious Examine system

* whitespace

---------

Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>
# Conflicts:
#	Content.Shared/_Impstation/Examine/DetailedInspectComponent.cs
#	Content.Shared/_Impstation/Examine/DetailedInspectSystem.cs
#	Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
#	Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml
#	Resources/Prototypes/Entities/Clothing/Neck/medals.yml
#	Resources/Prototypes/Entities/Clothing/Neck/pins.yml
#	Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/cloaks.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/misc.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/pins.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/scarfs.yml

* Novice's mark (#2626)

* Adding the item

* Update descriptions

* Add to trinket list, add to all trainee roles

* Add to PTech

* License fix

* And credit fix.

 Be nice it's my first sprite implementation lol
# Conflicts:
#	Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml
#	Resources/Prototypes/Loadouts/loadout_groups.yml
#	Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml
#	Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml
#	Resources/Prototypes/_DV/Roles/Jobs/Cargo/cargo_assistant.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/pins.yml
#	Resources/Prototypes/_Impstation/Loadouts/Miscellaneous/trinkets.yml

* killing things i forgot to oops

* fix + select in loadouts for everyone

---------

Co-authored-by: January Nelson <inelsona@gmail.com>
Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>
2026-07-20 17:08:56 -05:00
Delta-V bot ca91333906 Automatic changelog update 2026-07-20 22:29:21 +02:00
Vanessa 2b1d0bb364
Locking Probers @ 750 Glimmer + Bigger Prober Explosions over 900 Glimmer (#6292)
* Lock the probers :)

* Added normality to oracle. Up'd max intensity to syndicate bomb levels per CR review.

* Apply suggestions from code review

Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2026-07-20 22:29:02 +02:00
Delta-V bot a34e8bff90 Automatic changelog update 2026-07-20 22:14:18 +02:00
KOTOB b67c029061
Port Item Offering from Euphoria (#5597)
* Item offering port (#96)

* Offer item system port

* More fixes

* Make the formatting a bit more readable

* Add a missing keybind

* Add missing alert click handler and make some of the code more readable

* Duplicate offer-item-system.ftl

Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>

* Namespace fix and prediction fixes

* Port various carrying and pseudo-item fixes from floofstation

* Refactor the offer system to hopefully bring more clarity

* Final fixes

* Final final final fixes maybe

* Sike, just do it the proper way

---------

Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>

* fixes

* empty commit (weird test fail?)

* Moved some stuff to shared. Reorganized a bit. I could be here all day...

---------

Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
Co-authored-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-07-20 15:13:57 -05:00
Delta-V bot 72f6bff008 Automatic changelog update 2026-07-20 22:07:19 +02:00
KOTOB baf36b659d
Freighter Crew's Jumpsuit (#6331)
* my larp...

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-20 20:06:59 +00:00
Delta-V bot 0488fcbf8c Automatic changelog update 2026-07-20 19:39:15 +02:00
KOTOB edc2b87fa1
Cosmic Censer no longer requires fuel (#5016)
* fun allowed

* guidebook update

* Update Resources/Prototypes/_DV/CosmicCult/Objects/censer.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: KOTOB <59124164+kotobdev@users.noreply.github.com>

* Update Resources/Prototypes/_DV/CosmicCult/Objects/censer.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: KOTOB <59124164+kotobdev@users.noreply.github.com>

---------

Signed-off-by: KOTOB <59124164+kotobdev@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-20 12:38:50 -05:00
Delta-V bot 3885aee7cf Automatic changelog update 2026-07-20 02:25:02 +02:00
ConstantlyConfused 859f0418ac
Bring back the IPC "Boop" and "Whirr" emotes for cyborgs (#6310)
* return, buzz, whirr, and maybe boop emotes (for borgs)

* cleanup

* remove buzz, since it seems unused???
2026-07-19 19:24:43 -05:00
Delta-V bot d1385ab95b Automatic changelog update 2026-07-20 02:13:11 +02:00
BriBrooo 1e45f2da21
Chef's Kimono (#6341)
* Adds the chef kimono

The drobe thing doesn't work yet

* Adds loadout groups

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Apply suggestion from @ShepardToTheStars

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: BriBrooo <45323530+Bribrooo@users.noreply.github.com>

* Rename ChefJobShoes to ChefShoes in loadouts

Signed-off-by: BriBrooo <45323530+Bribrooo@users.noreply.github.com>

---------

Signed-off-by: BriBrooo <45323530+Bribrooo@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-19 19:12:51 -05:00
Delta-V bot 64c50527c3 Automatic changelog update 2026-07-19 18:38:45 +02:00
Myra d7ef3b4a06
Fix pills not having a taste (#5063) (#6299)
The edible-swallow locale message used by pills was missing the
{$flavors} placeholder that edible-nom, edible-slurp and edible-gulp
all have. IngestionSystem always passes the computed flavor text, so
pills silently dropped it. Eating a pill now shows its taste again,
e.g. "You swallow the pill. Tastes sweet."
2026-07-19 11:38:26 -05:00
Delta-V bot 23ec100ed8 Automatic changelog update 2026-07-19 18:19:49 +02:00
SumofThreeParts d62ca61fb4
I halved the chance for the Escape objective, again. (#6323)
* Doing the thing again

Signed-off-by: SumofThreeParts <its.a.joke1000@gmail.com>

* Apply suggestions from code review

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: SumofThreeParts <its.a.joke1000@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-19 11:19:30 -05:00
Delta-V bot 229a857b7e Automatic changelog update 2026-07-19 18:19:07 +02:00
einknusprigestoast dd9c88ca4b
Eventing Toolkit - The Great White (#6317)
* Added the Space Dragon Matriarch

* moved the fireball to its own projectile thingy

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update Resources/Prototypes/_DV/Entities/Mobs/Player/dragon.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Fixed Parenting (god i wish this was this easy IRL)

* Huh?

* Accidentally deleted something i didnt want to delete

* Upped Blunt regeneration

* Apply suggestion from @ShepardToTheStars

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @ShepardToTheStars

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* Apply suggestion from @ShepardToTheStars

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-19 11:18:47 -05:00
Dorragon e7e274d114 lower xeno blood so it doesn't crash when you rejuv them 2026-07-19 06:35:06 +03:00
github-actions[bot] aaad3b5c00
Update Credits (#6336)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-07-19 04:05:18 +02:00
Delta-V bot addfc247bf Automatic changelog update 2026-07-17 06:40:25 +02:00
ArionGekkota 6affab00ea
Reworked hitman kits (#6270)
* Reworked hitman kits, first draft

* Fixed spacing for the kits

* Update hitman-case.ftl

Rename samurai to ninja kit

* Update hitman_case_catalog.yml

* Update hitman-case.yml

* fixed .ftl error

* Added blue oni mask to ninja kit

* fix hitman_case_catalog.yml, wrong mask ID

* Replaced the high frequency blade with a medium frequency blade - this weapon has a lower reflect chance, and deals heat damage instead of shock.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Small tweak

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
2026-07-17 04:40:05 +00:00
Delta-V bot 7f85b2a196 Automatic changelog update 2026-07-17 06:31:43 +02:00
Velitation a7d25c697f
Mime fashion (#6307)
* Added 3 new neck items, 1 new coat, 1 new shoe, and 2 new hats to mime loadout

Also added shoe selection to the mime loadout, new coat to the uniform printer, and new coat + boots to the autodrobe.

* Added missing newlines
2026-07-17 00:31:23 -04:00
Delta-V bot 61884f5fe1 Automatic changelog update 2026-07-17 05:51:10 +02:00
ollyo ebcd3b23f9
Slime Nubody tweaks and new markings (incl. ports from Impstation) (#6288)
* Slime people tweaks and new markings (incl. ports from Impstation)
-Removed eyes, mouth, nose, and torso bitties from base Slime person sprite
   -Added them back in as optional markings (excl. mouth as Delta-V has lips already)
-Added the new "OrganSlimeEyes" to Slime people to handle eye markings
-Ported Cyclops and Droopy eyes from Impstation
   -Assigned Droopy eyes as "Droopy Eyes (Left)"
   -Made corresponding Droopy eyes on the right side
   -Added "Four eyes" marking
-Removed eyeshadow tattoo markings from Slime people
   -Added a copy into _DV's makeup directory assigned purely to Slime people
   -Made new matching eyeshadows for the various new eye types
-Adjusted the marking limits to make sense with the tweaks
-Moved and reorganized the Slime Elf Ears within the _DV directories to make more sense

* Fixed Slime people full.png sprite dimensions

* -Removed "followSkinColor" from Prototypes\_Impstation\Entities\Mobs\Customization\Markings\slime.yml causing an error

* Update Resources/Prototypes/Body/Species/slime.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: ollyo <296974732+ollyoaner@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: ollyo <296974732+ollyoaner@users.noreply.github.com>

* Update Resources/Prototypes/Body/Species/slime.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: ollyo <296974732+ollyoaner@users.noreply.github.com>

* - Fixed formatting and improved in line comment readability.
- Moved eyeshadow additions from makeup to Slime categories
- Added "matchskin" to relevant body markings that are meant to follow skin color

* -Returned Eyeshadow to eye markings category
-Returned Slime to whitelisted group in tattoos.yml
-Removed Eye markings limit and the requirement to have eyes
-Added two new eyes to complement the r/l eyes for more eye mixing
-Tweaked inline readability and organization

* Removed outdated prototype MatchSkin from slime.yml

---------

Signed-off-by: ollyo <296974732+ollyoaner@users.noreply.github.com>
Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
2026-07-16 23:50:51 -04:00
Delta-V bot 1a23a02b5e Automatic changelog update 2026-07-16 22:24:47 +02:00
Riley f6572840b1
Nuclear scientist (#6283)
* Added Nuclear Scientist alt job.

The Nuclear Reactor can be difficult for those to learn and easy for those to blow up.
Put the "experts" on the job.

* Fixed the meta

Meta fixses.

* Apply suggestions from code review

Thanks ShepardToTheStars.
I'm bad at doing these, but getting better.

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Riley <applesmithworks@gmail.com>

---------

Signed-off-by: Riley <applesmithworks@gmail.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-16 15:24:27 -05:00
Delta-V bot 8680f5c4fd Automatic changelog update 2026-07-15 20:43:48 +02:00
MD360 670b6d0858
Fugi paper fix (#6308)
* +\n

* missed one /n

* missed \n #2
2026-07-15 18:42:51 +00:00
Delta-V bot 94004e3ce0 Automatic changelog update 2026-07-15 03:58:24 +02:00
Vanessa fd09b8f68e
Airlock Access Override Removes Access, Give Engineers Access Config (#6263)
* doors access is now broken.

* Access configs for Engi

* AI can see modified accesses now

* Added ability to see access on Engi borgs

* Fixed comment and namespace

* comment

* Also add to Revenant.

* Update Resources/Prototypes/_Mono/Recipes/Lathes/tools.yml

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-15 03:58:05 +02:00
Delta-V bot d8edffcbb2 Automatic changelog update 2026-07-15 02:43:39 +02:00
Velitation 8316434da2
Revert the upstream changes to the mime PDA (#6252)
* Reverted the upstream changes to the mime PDA

* Comment Change

---------

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
2026-07-15 00:43:19 +00:00
Delta-V bot 6b03d1cc80 Automatic changelog update 2026-07-14 03:38:47 +02:00
Cepelinas1 2f68c7329f
Give animals and pests nightvision (#5902)
* first

* fix a lot of things

* i forgot some mobs

* snails

* cooobras
2026-07-14 01:38:27 +00:00
Delta-V bot e8138473d1 Automatic changelog update 2026-07-14 02:30:25 +02:00
Field Command a114cf88d0
Midpoint pool addition! (#6242)
* Midpoint Pool Update

* Whoops, better remember disposals
2026-07-13 17:30:06 -07:00
Delta-V bot ff14cb6846 Automatic changelog update 2026-07-13 23:26:20 +02:00
Vanessa e639f423f4
Minor Xenoborg Fixes and Tweaks (#6278)
* Disallowed crew IDs and talking over binary for xenoborg borgs.

* Added tag

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Add a EMP resistant battery

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* added EMP duration resistance

* Fixed attribution

* Fixed xenoborg magnet bags. Made the core suck up materials.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Removed Xenoborg ID chips since they should never have more than Xenoborg access

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Apply suggestions from code review

Co-authored-by: Radezolid <snappednexus@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* meta.json ordering

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Radezolid <snappednexus@gmail.com>
2026-07-13 18:26:00 -03:00
Dorragon 47ba7ff6f3
Update Resources/Locale/en-US/_DV/reagents/meta/toxins.ftl
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Dorragon <101672978+Dorragon@users.noreply.github.com>
2026-07-14 00:11:42 +03:00
Delta-V bot 57e5564ff8 Automatic changelog update 2026-07-13 22:37:11 +02:00
Vanessa 48921f9af9
no more animated zombie objects (#6291) 2026-07-13 22:36:52 +02:00
Delta-V bot 8bd44c5e7b Automatic changelog update 2026-07-13 21:58:45 +02:00
Coryn 303e1f4563
Cloning and Paradox Cone height workaround (#6205) 2026-07-13 14:58:25 -05:00
Delta-V bot 8003517bbc Automatic changelog update 2026-07-13 19:38:27 +02:00
Vanessa 6486b49bf3
Fixed derelict borg AA (#6284) 2026-07-13 14:38:08 -03:00
Vanessa aabf5ac1bb
Fix syndie meal test failure (#6290) 2026-07-13 13:12:08 -04:00
Delta-V bot b4daabc55f Automatic changelog update 2026-07-13 18:16:39 +02:00
Velitation 338ac84008
Add 2 new outfits and a mantle for mime (#6264)
* Added 2 new outfits and a mantle for mime

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Comment Addressed

- Removed changes from \Loadouts\loadout_groups.yml
- Made changes to \_DV\Loudouts\loutout_groups.yml

* Addressed Comment (again)

I missed a spot... oops
- Removed changes from \Loadouts\loadout_groups.yml
- Made changes to \_DV\Loadouts\loadout_groups.yml

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Probably shouldn't have made that second commit

My fault

- Undid the previous commit

* Removed duplicate

- Removed the duplicate loadoutGroup for MimeJumpsuit that I added to \_DV\Loadouts\loadout_groups.yml
- Readded the changes to \Loadouts\loadout_groups.yml

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-13 11:16:19 -05:00
Delta-V bot 61e8547327 Automatic changelog update 2026-07-13 16:24:44 +02:00
jessiscah23 730cba2ee1
Remove telepads (#6266)
* Kill cargo telepad

* Remove telepad from random spawners & recipes

* Fixed comment conventions

* Update Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Jessica Harvey <itsjessagain23@gmail.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-13 14:24:24 +00:00
Delta-V bot 6089c30923 Automatic changelog update 2026-07-13 15:51:31 +02:00
ArionGekkota 4e6eee4854
Added the small arms mining kit (#6260)
* Added the small arms mining kit

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-13 08:51:12 -05:00
Delta-V bot 71302e037c Automatic changelog update 2026-07-13 15:46:44 +02:00
pootslap fd0a91733f
Make improvised/forged weapons and armour uncraftable (#6250)
* remove recipes

thanks radezolid

* forge too
2026-07-13 08:46:24 -05:00
William Lemon e7c0c98258
Adds Invisible Walls (#6287)
* Wow! Invisible!

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update Resources/Prototypes/_DV/Entities/Structures/Walls/invisible.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: William Lemon <William.Lemon2@gmail.com>

* Apply suggestion from @ShepardToTheStars

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: William Lemon <William.Lemon2@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-13 13:45:10 +00:00
Delta-V bot df99ef84f5 Automatic changelog update 2026-07-13 15:44:26 +02:00
einknusprigestoast 7932eddb48
SRT Part 4 - The fake balancing strikes back (#6233)
* Added Caustic, Asphyxiation and Radiation regeneration.

* *coughs*

* Added the Eviscerator

* Removed explonades, added Truncheon

* whoops, stole the mateba from the rest of the teams

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* WHY DID IT DO THAT IT WAS NOT SUPPOSED TO DO THAT

* added Tags

* Update Resources/Prototypes/_DV/tags.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/tags.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/backpackfed.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/backpackfed.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Clothing/Back/specific.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Clothing/Back/specific.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

---------

Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-13 08:44:06 -05:00
Delta-V bot 72efa8c9d3 Automatic changelog update 2026-07-13 15:32:24 +02:00
Coryn cdc8aeb3a6
Avali feather colors are correct again (#6285) 2026-07-13 08:32:04 -05:00
Delta-V bot 9e047522e9 Automatic changelog update 2026-07-13 15:16:46 +02:00
Field Command 2e7134f028
Xenoborgs have turrets now! (#6244)
Xenoborgs have turrets now
2026-07-13 08:16:25 -05:00
github-actions[bot] 8d772a67fa
Update Credits (#6281)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-07-12 04:07:22 +02:00
TNE 310a2c6575
Add Meridian server config preset (#6277) 2026-07-11 23:47:08 +02:00
Velcroboy 7b6a41b28f
Map Edits: The Hive (#6107)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2026-07-11 13:04:53 -07:00
Delta-V bot 5ddec75e0b Automatic changelog update 2026-07-11 19:25:26 +02:00
Theo 3f29960640
PORT: Imp Learner pai (#5924)
* learner pais!  (#2269)

* almost published to master holy fuck

* vomits

* grhg

* mqole guiding light

* yupdate!

* escaped the torment nexus of losing my head

---------

Co-authored-by: mousesweater <moondogg228@gmail.com>

* fix where the sprites are

* learner pais!  (#2269)

* almost published to master holy fuck

* vomits

* grhg

* mqole guiding light

* yupdate!

* escaped the torment nexus of losing my head

---------

Co-authored-by: mousesweater <moondogg228@gmail.com>

* fix where the sprites are

* Adds a golden personal AI variant as a trinket, requiring 10hrs Silicon playtime

* Revert "Adds a golden personal AI variant as a trinket, requiring 10hrs Silicon playtime"

This reverts commit 4f545547ed.

* remove golden pai fix names

* move the imp item to the deltaV table (?)

* merge conflict ops

---------

Signed-off-by: Theo <rebe83a@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: mousesweater <55769023+Mousetrinity@users.noreply.github.com>
Co-authored-by: mousesweater <moondogg228@gmail.com>
Co-authored-by: AftrLite <61218133+AftrLite@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-11 17:25:07 +00:00
Delta-V bot fe940f0289 Automatic changelog update 2026-07-11 18:35:16 +02:00
Theo 70c0494061
Remove ion damage (#5960)
* comment out borg ion damage

* remove ion damage from disabler

* actually nuke it

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Additional removals.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-07-11 16:34:56 +00:00
Delta-V bot 4b0b6ff16e Automatic changelog update 2026-07-11 18:30:27 +02:00
ollyo e4826f3b8a
Elf ears for Slime People (#6265)
* Added long ears markings to Slime people.
    -Ported and edited human long ear marking sprites to match Slime palette.
    -Placed Slime long ears in (HeadSide) marking slot
    -Placed a limit marking of 1 on HeadSide for Slime

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-11 16:30:07 +00:00
Delta-V bot a8796530e6 Automatic changelog update 2026-07-11 18:09:42 +02:00
Radezolid 1afb572366
Add a nanite applicator to the engie toolbelt (#6261)
* Added tools

* Kill the gas analyzer
2026-07-11 11:09:22 -05:00
Delta-V bot 08e4ee47c3 Automatic changelog update 2026-07-11 10:29:39 +02:00
Radezolid 097f165961
Re-add the knuckleduster to the LO's locker. (#6243)
Reverted
2026-07-11 10:29:19 +02:00
Delta-V bot a8cd6be09c Automatic changelog update 2026-07-10 22:22:01 +02:00
ArionGekkota 3698acd6d2
Allow allulalo to fit in bags (#6248)
* Allow allulalo to fit in bags

* Added delta-v comment
2026-07-10 22:21:41 +02:00
Delta-V bot b35b68b8aa Automatic changelog update 2026-07-10 22:20:28 +02:00
storm! f585bcd233
toolbelt add multitool and welding mask because really it should have those (#6217)
* toolbelt add multitool and mask

* Update Resources/Prototypes/Catalog/Fills/Items/belt.yml

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: stormyatt <stormyatt@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-10 20:20:08 +00:00
Delta-V bot e2f79f2236 Automatic changelog update 2026-07-10 22:08:52 +02:00
CheddaCheez f4c6352dea
Rodentia Ears + Whiskers (#6273)
Move marking and up limit

Whiskers moved from HeadTop to HeadSide.
HeadSide marking limit upped from 1 to 2.
2026-07-10 22:08:32 +02:00
Delta-V bot 54514adf64 Automatic changelog update 2026-07-10 21:58:37 +02:00
Vanessa 75d30a857a
Sometimes, dead is better. (DAGD On Death Implanters) (#6221)
* Added unrevivable implanter for DAGD

* Verbage

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Choose your own adventure

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* local and admin menu fixes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-10 21:58:17 +02:00
Vanessa 519ca118c4
Merge pull request #6228 from DeltaV-Station/zombie-survival-fix
Fix Convert to Survival Behavior during Zombies
2026-07-10 14:17:30 -05:00
Delta-V bot ca1f82d430 Automatic changelog update 2026-07-10 19:22:57 +02:00
Vanessa d62a4911e7
MedHUDs no longer show your own health bar :) (#6241)
Im evil
2026-07-10 19:22:38 +02:00
Vanessa 2984ecbb8c Undo a change 2026-07-10 11:54:02 -05:00
Vanessa 304c99dc2e Removed a comment 2026-07-10 11:48:31 -05:00
Vanessa 8030fe1b2a Silly linq queries 2026-07-10 11:47:48 -05:00
Vanessa 795772ecc2 Switched up checks 2026-07-10 10:06:00 -05:00
Delta-V bot 37327a2c70 Automatic changelog update 2026-07-10 17:03:32 +02:00
Vanessa f3361860d2
Fix Tech Disk Test Failures (#6271) 2026-07-10 11:03:12 -04:00
Delta-V bot 86a9eff122 Automatic changelog update 2026-07-10 16:05:37 +02:00
Radezolid 2ff9e1d56a
Raise the point price of seismic charges (#6245)
up goes the price
2026-07-10 09:05:17 -05:00
Delta-V bot 48f1cff536 Automatic changelog update 2026-07-10 15:59:49 +02:00
Carol a86501907f
Add locked storage component to secure cabinets (#6269)
added LockedStorage component to secure cabinets
2026-07-10 08:59:29 -05:00
Delta-V bot 4bdcb0d556 Automatic changelog update 2026-07-09 20:03:39 +02:00
Halo3moth 1351e0fb67
Rewrite of C3 introduction of C3.1-C3.3 (#5929)
* boop

* Update Resources/ServerInfo/Guidebook/_DV/Rules/RoleRules/C3_Antags.xml

Co-authored-by: This_Is_Gray <167829864+IAmNotGray@users.noreply.github.com>
Signed-off-by: Halo3moth <mdavid.wininger@gmail.com>

* Update Resources/ServerInfo/Guidebook/_DV/Rules/RoleRules/C3_Antags.xml

Co-authored-by: This_Is_Gray <167829864+IAmNotGray@users.noreply.github.com>
Signed-off-by: Halo3moth <mdavid.wininger@gmail.com>

* Update Resources/ServerInfo/Guidebook/_DV/Rules/RoleRules/C3_Antags.xml

Co-authored-by: BarryNorfolk <barrynorfolkman@protonmail.com>
Signed-off-by: Halo3moth <mdavid.wininger@gmail.com>

* Update Resources/ServerInfo/Guidebook/_DV/Rules/RoleRules/C3_Antags.xml

Co-authored-by: This_Is_Gray <167829864+IAmNotGray@users.noreply.github.com>
Signed-off-by: Halo3moth <mdavid.wininger@gmail.com>

---------

Signed-off-by: Halo3moth <mdavid.wininger@gmail.com>
Co-authored-by: This_Is_Gray <167829864+IAmNotGray@users.noreply.github.com>
Co-authored-by: BarryNorfolk <barrynorfolkman@protonmail.com>
2026-07-09 13:03:19 -05:00
Delta-V bot f8e59733dd Automatic changelog update 2026-07-09 15:29:26 +02:00
ConstantlyConfused 4750e885b2
Add missing Space Law Sections to the guidebook (#6223)
* move spacelaw into space law folder

* move procedural defense to its own file

* add sentences and modifers to SpaceLaw guidebook
2026-07-09 08:29:06 -05:00
Delta-V bot a7d34aacda Automatic changelog update 2026-07-09 13:39:08 +02:00
Theo 91494215ca
ghost buffers tweaks (#5981)
* tweaks

* Update Resources/Prototypes/Entities/Objects/Materials/ore.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Theo <tad3@illinois.edu>

---------

Signed-off-by: Theo <tad3@illinois.edu>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-09 11:38:48 +00:00
ConstantlyConfused 5e50b6969c
Fix the Umbroxol Description (#6247)
fix  the umbrox description
2026-07-09 06:25:03 -05:00
einknusprigestoast 4538b4ded1
Added Caustic, Asphyxiation and Radiation regeneration to the combat nanites. (#6231)
* Added Caustic, Asphyxiation and Radiation regeneration.

* *coughs*
2026-07-09 06:24:21 -05:00
Delta-V bot cdbf170b37 Automatic changelog update 2026-07-09 06:43:03 +02:00
freezer dog daf03f45ed
bigger magnum boxes (and they fit in bandoliers now) (#6226)
* doubled magnum box capacity, whitelist for bandoliers holdin magnum cartridges, and fixed 2 misspellings (cause i mighta caused one of em oops)

* dumbass dog is stupid who woulda thunk it....
2026-07-08 23:42:43 -05:00
Delta-V bot 987678965f Automatic changelog update 2026-07-09 05:54:14 +02:00
Theo 663952f2fb
Sabotage borg nerf (#6080)
* modules changed

* 1 tc change lol
2026-07-08 22:53:55 -05:00
Delta-V bot 46a37b1caf Automatic changelog update 2026-07-09 03:25:05 +02:00
jessiscah23 bcc50db33b
Fix salvage magnet asteroids not spawning in ore. (#5973)
Co-authored-by: Jessica Harvey <itsjessagain23@gmail.com>
2026-07-09 01:24:45 +00:00
Apersos-coll 30cfa646e4
Grav Gauntlet weapon changes and resprite (#5951)
* medium overhaul to weapon and sprite
removed taser
added Reflection (base 30% chance)
added speed up while in hand (25% speed up)
changed icon to fit more with artstyle plus bluesec
inhand sprites match new sprite

* OBSENLY SMALL CHANGED (small fixes to icon color and suitStorage being 1 to far up

* added clothing slowdown resist
added passive block modifier (makes it act like a shield)

* added/removed to fit with changes asked.
removed blocking
added prying
added higher damage

* fixing new sprite

* Update Hos-Briefcase.ftl

forgot to update discription

Signed-off-by: Apersos-coll <collsherlo@gmail.com>

* fixing new sprite

* fixing

* more fixing

* attempting to see if that was a false positive (fixing stuff)

i changed a word slightly to see if it was false positive cause i checked the log and there was no such mention of my weapon at all 
anyways i just changed a single word so if it works this time i dont have to make a second commit

Signed-off-by: Apersos-coll <collsherlo@gmail.com>

---------

Signed-off-by: Apersos-coll <collsherlo@gmail.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-08 19:54:32 -05:00
ConstantlyConfused 91ff29416b
Merge pull request #6251 from Eternally-Confused/blows-up-IPC
Remove another mention of IPCs
2026-07-08 17:07:28 -05:00
Delta-V bot 75fe7ce9db Automatic changelog update 2026-07-07 20:40:38 +02:00
Stxcking 0a41b9208f
Feat: Xenoborg Shuttle Gun + Sentry Turret + Switches (#5957)
* xil

* sentry

* turret control

* Tweaks

* im silli
2026-07-07 14:40:17 -04:00
Stxcking 1b80619c65
Feat/Tweak: Enable Xenoborg as a Gamemode in Secret + Tweak Role Requirement (#6055)
* xenoborgs fake but real

* requested changes
2026-07-07 14:40:15 -04:00
Delta-V bot 87385f9aef Automatic changelog update 2026-07-07 19:08:13 +02:00
Vanessa a49360414b
Cleanup: Disable Surgeon until Next Week (#6209)
* Disabled surgeon. Removed more references to shitmed things. Added medical access to surgery doors.

* Access fix

* Removed invalid jobs (surgeon) from the maps.

* Apply suggestions from code review

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* Update Resources/Prototypes/Maps/academy.yml

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-07 12:06:20 -05:00
Delta-V bot bd7a0d686e Automatic changelog update 2026-07-07 17:45:57 +02:00
Vanessa fb7de4c114
Merge pull request #6202 from sowelipililimute/work/densetsu/progress-bar-begone
with deference to the progress bar kill it as gaudily as possible
2026-07-07 10:45:37 -05:00
Janet Blackquill 248b4b498a photography 2026-07-07 10:59:33 -04:00
Janet Blackquill 90eba428d0 with deference to the progress bar kill it as gaudily as possible 2026-07-07 10:59:33 -04:00
Delta-V bot 7eaecafdc6 Automatic changelog update 2026-07-07 16:57:00 +02:00
Vanessa b09f03ce69
Merge pull request #6237 from EmberAstra/allu-tweaks
Small Allulalo tweaks
2026-07-07 09:56:40 -05:00
Vanessa 68582ff296
Merge pull request #6238 from Proxysseia/fix-linking-in-wiki-
fix linking in wiki
2026-07-07 09:25:02 -05:00
Delta-V bot a4bbd1a0ba Automatic changelog update 2026-07-07 16:24:52 +02:00
Vanessa c5d3201388
Merge pull request #6232 from DeltaV-Station/holosigh
Fix Holosign Angle
2026-07-07 09:24:32 -05:00
Delta-V bot ca2ac8dbd6 Automatic changelog update 2026-07-07 16:23:48 +02:00
Vanessa 25d3da76a9
Merge pull request #6236 from sowelipililimute/work/densetsu/event-pain
Limit events by round time
2026-07-07 09:23:27 -05:00
Proxy also works :3 133b371cef fix linking in wiki 2026-07-07 13:08:11 +02:00
EmberAstra 516d51e104 Adjust Allu shortness 2026-07-07 10:54:51 +02:00
Janet Blackquill f3d0954df1 Limit events by round time 2026-07-07 01:36:55 -04:00
Vanessa 1b02a5153a Fixed Holosigns 2026-07-06 15:16:39 -05:00
Delta-V bot 688ef3f872 Automatic changelog update 2026-07-06 22:13:21 +02:00
Vanessa 0f98f0aada
Merge pull request #6197 from sowelipililimute/work/densetsu/glyphed
get glyphed idiot
2026-07-06 15:13:01 -05:00
Delta-V bot 62bac2d0a2 Automatic changelog update 2026-07-06 22:08:23 +02:00
Vanessa a14f75c281
Merge pull request #6132 from DeltaV-Station/nanite-applicator
Examine Damage on Structure/Machine, Nanite Applicators
2026-07-06 15:08:03 -05:00
Delta-V bot 96261d284b Automatic changelog update 2026-07-06 19:43:41 +02:00
Vanessa 353f730141
Merge pull request #6194 from DeltaV-Station/medtek-reports
MedTek Reports
2026-07-06 12:43:21 -05:00
pre-commit-ci[bot] 0206951c2c [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-06 16:45:15 +00:00
Vanessa 47ecdb3c6a texture metadata files 2026-07-06 11:44:09 -05:00
pre-commit-ci[bot] 00959557ca [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-06 16:07:41 +00:00
Vanessa 3c7fdfda10 PR feedback. Also fixed the spriteview so its like upstream. 2026-07-06 11:06:26 -05:00
Vanessa a9574aa940 Tests 2026-07-06 09:59:16 -05:00
Vanessa 74d687ee4e Check if there are any pending zombies 2026-07-05 23:02:36 -05:00
Vanessa eef2b2215d whitespace 2026-07-05 22:41:46 -05:00
Vanessa b74569d20b Check II un-turned count. 2026-07-05 22:38:20 -05:00
Delta-V bot 6f2949e56f Automatic changelog update 2026-07-06 03:56:00 +02:00
freezer dog b848e41567
Vulps are messy drinkers (and tail wagging) (#6177)
* messy drinkin back on the menu

* wagging, i gotta mess with how to make it not show up in markings when i wake up

* ok got the wagging ones outta marking selection, and sorted em, and killed the unneeded localization
2026-07-05 21:55:41 -04:00
Delta-V bot c774d358b8 Automatic changelog update 2026-07-06 03:53:23 +02:00
Proxy also works :3 554d044365
make pigs drop spesos (#6173)
* make pigs drop spesos

* no testing thats maints problem

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update animals.yml

* null + coins

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
2026-07-06 01:53:03 +00:00
Delta-V bot 1405fdc222 Automatic changelog update 2026-07-06 03:35:29 +02:00
freezer dog 42116a1b93
some more AAC phrases (again) (#6193)
* ok cleaned up a little

* ok new phrases + med change stuff

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* ok time to hope git doesnt shoot me now... whoe even is his pre commit ci fella... anywho forgot a space in an ftl comment and added ovinia and allulalo to species... probably wait till the race is in

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-05 21:35:10 -04:00
Vanessa ebcf4472b6
Merge pull request #6212 from Eternally-Confused/allulalo-guidebook
Some Guidebook Fixes
2026-07-05 17:02:17 -05:00
Delta-V bot 7e701ef8c6 Automatic changelog update 2026-07-05 23:35:50 +02:00
Vanessa 645ab832f5
Add Doctor Stamp (#6189)
* Doctor Stamp (#1782)

* Stamp cleanup, bureaucracy loadouts

* Squiggly pen signatures, more loadouts

* Remove doctor folder from contractor fun loadouts

---------

Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com>

* Add doctor stamp to locker.

* Added to CMO locker too

* oops

* Added chemist stamp to CMO locker. Added perscriptions to medical lockers.

* Updated space law and SoP for medical to allow for basic prescriptions.

* Psychs matter I guess.

* Medicine capitalization consistency

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* wiki stuff

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Removed mentions of addictine.

* lax it a bit

* Fixed doctor locker fills.

---------

Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-06 00:35:31 +03:00
Delta-V bot 37f4f17a0d Automatic changelog update 2026-07-05 22:35:44 +02:00
Theo 640359bec2
IMP PORT: Sec tickets (#6089)
* tickets

* fix ticket pad size

* flavoured tickets

* add tag add to secvend

* add to sec locker

* the much anticipated blue

* tickets

* fix ticket pad size

* flavoured tickets

* add tag add to secvend

* the much anticipated blue

* merge conflict thank you rade

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Signed-off-by: Theo <rebe83a@gmail.com>
Co-authored-by: Kip <tfraser520@gmail.com>
Co-authored-by: Shaman <56280352+Sha-Seng@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-05 15:35:24 -05:00
Vanessa 7cd51ae798 icon update 2026-07-05 14:58:27 -05:00
Vanessa 1dfbc49142
Update Content.Client/HealthAnalyzer/UI/HealthAnalyzerControl.xaml
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-05 14:38:06 -05:00
Delta-V bot 7d11598b97 Automatic changelog update 2026-07-05 21:35:16 +02:00
Princess Cheeseballs 287daf5141 SSD Players now properly stay asleep when being revived. (#39409)
* Fixes and API changes

* aaaaaaaaaa

* super shitcode

* cleanup

* fix admin logs

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-07-05 14:34:57 -05:00
zHonys b3597fb664 Fixed talking when sleeping while on crit (#37572)
* Fixed talking when sleeping while on crit

* Changed fix location to DamageForceSaySystem from SleepingSystem
2026-07-05 14:34:57 -05:00
Vanessa fceafff79f Removed mutliple qualities repairing. Applicator now replaces welding for most objects. 2026-07-05 14:27:10 -05:00
Delta-V bot f88d8f0137 Automatic changelog update 2026-07-05 21:25:26 +02:00
pathetic meowmeow 077f09f62f
The mothroaches yearn to ventcrawl (#6222) 2026-07-05 15:25:07 -04:00
Vanessa 33b12db031
Update Resources/Prototypes/_NF/Entities/Objects/Specific/chemical-containers.yml
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-05 13:56:25 -05:00
Vanessa e586c25e53 PR feedback 2026-07-05 13:55:38 -05:00
Delta-V bot 3db32113d7 Automatic changelog update 2026-07-05 20:29:57 +02:00
pathetic meowmeow acc9361a34
Add the ability to spawn in as a vent critter at will (#6187)
* Add the ability to spawn in as a vent critter at will

* cooldown
2026-07-05 14:29:38 -04:00
Delta-V bot 6bd4603734 Automatic changelog update 2026-07-05 19:53:22 +02:00
Vanessa 8f8f1dd001
Convert Round to Survival when Major Antag Fails (#6127)
* Changed up shuttle calls to make the round convert to survival.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Added CosCult state checking.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* typo

* Fix nuke ops test

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-05 13:53:02 -04:00
Delta-V bot bc1593f79c Automatic changelog update 2026-07-05 18:14:37 +02:00
Vanessa 460eb5ed31
Clean Up Jobs (#6210)
* Cleaned up old borg spawns since they can choose a chassis now. Moved and/or renamed some nyano assets in the DV namespace

* Neat new MARK feature

* Mapper input

* Applied objectively-bad YAML property ordering
2026-07-05 16:14:17 +00:00
Vanessa 229444d0dc lol 2026-07-05 11:06:43 -05:00
Vanessa e7f1fe4a02 Stuff 2026-07-05 10:56:19 -05:00
Vanessa d210720f20 SRT has too much shit 2026-07-05 10:42:32 -05:00
Vanessa 818fe4aa01 Fix error after rebase 2026-07-05 10:13:45 -05:00
Vanessa 6e97947aa8 Actually fix damage access. 2026-07-05 10:10:45 -05:00
Vanessa 0f09e24ccd Fixed damage comp access. 2026-07-05 10:10:45 -05:00
Vanessa ca0b124f2b Type change and increased exp welder's capacity a bit 2026-07-05 10:10:45 -05:00
Vanessa 25dad0fb63 Regen nerf 2026-07-05 10:10:45 -05:00
Vanessa dffb1917d0 Long overdue experimental nerf 2026-07-05 10:10:45 -05:00
Vanessa 2783c9273e Fixed some yaml that wasn't inheriting right. 2026-07-05 10:10:45 -05:00
Vanessa aa22ff3a5a Slight sprite color edit to the base one so it doesn't look like the experimental 2026-07-05 10:10:45 -05:00
pre-commit-ci[bot] e45565fb81 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 10:10:44 -05:00
Vanessa 8d2668c12a Added regular version to engi lathe. 2026-07-05 10:10:44 -05:00
Vanessa c5026279d2 Added to SRN lathe. Increased material cost to be on part with experimental welder. 2026-07-05 10:10:44 -05:00
Vanessa 49d6ced9d3 Fixed arbitrage 2026-07-05 10:10:44 -05:00
Vanessa 03ca4ec3e1 Fixed material arbitrage 2026-07-05 10:10:44 -05:00
Vanessa e309d3ea3a Add repairable scaling based on the damage the repair target has. 2026-07-05 10:10:44 -05:00
pre-commit-ci[bot] e0f4a497d0 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 10:10:44 -05:00
Vanessa 41d0fd7b53 Sandbox and yaml fixes. 2026-07-05 10:10:44 -05:00
Vanessa c8d9eac105 Directional Window Fix 2026-07-05 10:10:44 -05:00
Vanessa 058e83c2ab Unchain Nanite Applicator#3104 2026-07-05 10:10:44 -05:00
Whatstone c07219f92c Jerry Cans (#1759)
* Welding fuel jerry cans

* Move jerry can inhand-left sprites up a pixel

* increase jerry can drink delays

* Yes

* cove.yml: sub console out until doubloon contrabnd

---------

Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com>
Co-authored-by: Dvir <dvirf01@gmail.com>
2026-07-05 10:10:44 -05:00
ScyronX cc39ded995 Nanite Applicator (#2314)
* tool added

* comments and fixes

* final fix

* chore: automatically update REUSE headers

* final fix

* chore: automatically update REUSE headers

* fix localization

* fix

* chore: automatically update REUSE headers

* fixed the comment location

* test fix

* fix

* chore: automatically update REUSE headers

* not syndicate anymore

* Update Content.Server/Repairable/RepairableSystem.cs

sure

Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com>

* nesting fixed

---------

Co-authored-by: Vanessa Louwagie <vanessalouwagie@outlook.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com>
2026-07-05 10:10:44 -05:00
Vanessa 5da72df6ad Add damage examinable to base structure. 2026-07-05 10:10:44 -05:00
Delta-V bot aae05e3c21 Automatic changelog update 2026-07-05 05:08:39 +02:00
Vanessa de8269f1ed
Nerfed ventcrawling zombies (#6215) 2026-07-04 22:08:20 -05:00
github-actions[bot] c1df3aa4e3
Update Credits (#6216)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-07-05 04:31:27 +02:00
Field Command 2e1baa4aac
Tortuga fix (#6213)
fix
2026-07-05 01:11:05 +00:00
ConstantlyConfused 88bd4833b9 fix kitsune claw phrasing 2026-07-04 14:23:14 -06:00
ConstantlyConfused 55c963f0a8 fix the color added to harpy guidebook 2026-07-04 14:10:50 -06:00
ConstantlyConfused 6800471357 minor fixes 2026-07-04 14:04:08 -06:00
ConstantlyConfused 7bab4eb5fc fix crash because i'm dumb 2026-07-04 14:03:43 -06:00
ConstantlyConfused ace3a68d71 Tweak kitsune and allulalo guidebooks for consistency 2026-07-04 13:40:41 -06:00
ConstantlyConfused 9511294e3f delete unused allulalo guidebook 2026-07-04 13:15:13 -06:00
ConstantlyConfused 3b96d6b250 move DV antagonist guidebooks to the correct folder 2026-07-04 13:14:33 -06:00
Delta-V bot 622d8f77c5 Automatic changelog update 2026-07-04 18:30:46 +02:00
Malfaltto be1a942051
Update harpy.yml (#6174)
* Update harpy.yml

* Set baseScale to 1.0, shifted min and max to match prechange limits (was 0.85 to 1.35, now 0.75 to 1.25)

* Apply suggestion from @ShepardToTheStars

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Malfaltto <malfaltto@gmail.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-04 16:30:27 +00:00
Delta-V bot 7ca548e7ab Automatic changelog update 2026-07-04 18:16:21 +02:00
Proxy also works :3 790af5f9f4
grand sabo for borg murder isnt real (#6204) 2026-07-04 19:16:02 +03:00
Delta-V bot 21e6c04e70 Automatic changelog update 2026-07-04 15:09:43 +02:00
pathetic meowmeow 2dc14840d0
Make doors solid when they begin closing (#6184) 2026-07-04 08:09:24 -05:00
Delta-V bot 47a6d10306 Automatic changelog update 2026-07-04 14:47:21 +02:00
Coryn 969ecc342a
Machine Incompatible works again (#6206)
* Machine Incompatible works again

* Add missing DV comment
2026-07-04 07:47:02 -05:00
Delta-V bot 9d6e6e1a22 Automatic changelog update 2026-07-04 09:28:51 +02:00
Astra f22266d51f
Port Allulalo from Impstation (#6172)
* Allulalo: finally finishing the ancient raptor species project (#3504)

* well, it loads

* sprite's

* names + starting on displacements

* more displacements

* displacements

* left hand only

* displacements

* yup

* ooa

* inhand displacements

* blood

* accent

* iv bags

* placeholder clarification

* Revert "iv bags"

This reverts commit c2aa504eab8d0673604b33e0ccaf79b406979da6.

* whitespace

* adds tooshortforUI and removes the damage modifier set

* speechsounds

* typing indicator

* basic customisation

* guidebook 1

* fixed full

* markings, displacements, speech verb

* displacement fixes

* trailing newlines

* spelling moment

* brute damage sprites and blood fix

* guidebook iteration

* injection melee + ethanotoxin + guidebook rewrite

* guidebook

* guidebook

* nitpicks + roundstart

---------

Co-authored-by: starlighthowls <starlighthowls7@gmail.com>
Co-authored-by: mqole <anactualpanacea@gmail.com>

* Allulalo tooshotforui bugfix (#3598)

* yay

* p[leebnmar

* oops

* Allulalo Markings (#3602)

* eye markings and two tails

* more

* almost got ya

* yup

* wings yay

* thank you landshark for my life btw

* still needs loc files

* Update allulalo.ftl

* I lost so much progress to git bullshit

* and who can forget dear rat boy

* touch up speech indicator at yesters request

---------

Co-authored-by: starlighthowls <starlighthowls7@gmail.com>

* Allulalo Roundstart (#3621)

* yup

* shock blanket + pleebnar fixes

* yuuup (#3655)

* Allulalo fix pass 1 (#3661)

* what if I did it all in one commit like a total moron

* yup

* untuch

* i love you spriting tool

* my birdsty

* Update allulalo.yml

* Update Species.xml

* let allulalo use holopads. (#3669)

* adds a white list for the too small component to add specific allowed entities. e.g holopads

* imp comment

* i love forgetting white space!!!!

---------

Co-authored-by: sev7ves <soapedzone@gmail.com>
Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>

* fix (#3693)

* I need to learn to not do everything in one commit (#3750)

* mime on again (#4243)

* Small fix

* Add them to our accentless trait

* Add unable to wield system

* Fix too short for UI using old blacklist methods

* Fix duplicated localization line

* Add heavyweight drunk comp (might merge this with lightweight later)

* Why was this even added

* Revert "Add unable to wield system"

This reverts commit cbe3a10fc7.

* Revert "Fix too short for UI using old blacklist methods"

This reverts commit 833743f029.

* add TooShortForUIComponent (#3495)

* add TooShortForUIComponent

* correct documentation

* incomplete documentation

* add UnableToWieldComponent (#3496)

* Fixing this again I am dumb I cherrypicked things in the wrong order

* WHY WAS THIS EVEN ADDED THERE'S NO SPRITE EVEN ON IMPSTATION???

* Port Allulalos to Nubody

* Fix for Allulalo chems doing nothing

* Add allulalo to the guidebook species list

* Restore some accidentally deleted effects and comments

* Fix typo that made allu blood 10x more alcoholic than normal

* Delete random misplaced sprites from cherrypicking

* More of the random sprites removal (this time from the meta)

* Add missing allulalo flavor

* Removed some nonexistant fields from the species

* Add unisex cough/sneeze, comment out Wuhey and Ungh emotes

* Fix guidebook not using loc string

* I THINK this fixes that test error and it doesn't seem to break anything either so let's try

* Remove unsupported unshaded shader from eyes

* Ok last one didn't work (sorry for trial and error)

* Removed mention of HARMPACKs and Tether Guns from the guidebook.

* Blacklist allulalos from random humanoid spawns

* Add missing allulalo gulp sound

* Carriable in 1 hand allulalos, fix carrying system blocking both hands always

* Remove DV comments

---------

Co-authored-by: Kip <32859367+kipdotnet@users.noreply.github.com>
Co-authored-by: starlighthowls <starlighthowls7@gmail.com>
Co-authored-by: mqole <anactualpanacea@gmail.com>
Co-authored-by: sev7ves <58966116+sev7ves@users.noreply.github.com>
Co-authored-by: sev7ves <soapedzone@gmail.com>
Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>
Co-authored-by: Yesteryear <208338078+yesteryuri@users.noreply.github.com>
2026-07-04 17:28:31 +10:00
Delta-V bot 7b77d25068 Automatic changelog update 2026-07-04 06:54:41 +02:00
einknusprigestoast d4f380dd6e
Special Response Team - fake balancing number 3 (#6102)
* Pulse rifle changes

* SRT Loadout Items + Spawners

* Added SRT Suffix + Removed upstream spawners

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Typo

* *cough*

* *COUGHS*

* *sniffs*

* *coughs*

* Yeah i hate this

* Do not map suffix

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Changes to Injectors + Added Combat Nanites

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Whoops, too fast

* Coughs

* Yeah

* changes to guns and typo fix

* Removed useless lines

* Update Resources/Locale/en-US/_DV/ghost/roles/SRT-Agent.ftl

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Locale/en-US/_DV/reagents/meta/medicine.ftl

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Locale/en-US/_DV/reagents/meta/narcotic.ftl

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Locale/en-US/_DV/reagents/meta/narcotic.ftl

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Objects/Tools/SRTinjectors.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Mobs/Player/humanoid.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Reagents/medicine.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Reagents/narcotics.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Objects/Tools/SRTinjectors.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Entities/Objects/Tools/SRTinjectors.yml

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Removed spawn menu hides

* prickly flavor profile

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* changes to names of pngs n shit

* should change the name of the ftl?

* Rename SRT-Agent.ftl to srt-agent.ftl

Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @Stxcking

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @Stxcking

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @Stxcking

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @Stxcking

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @Stxcking

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* Apply suggestion from @Stxcking

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>

* DeltaV instead of Delta V

* i dont know why, but i cant change the names of these files, so ill just delete them and add them again

* boom

* Changes suit and equipment names to be more in line with existing ERT kit

* backpacks for some reason still show "Deathsquad backpack" so this fixes this

* letters are hard

* hypospray.yml and liner fail

---------

Signed-off-by: einknusprigestoast <90181825+einknusprigestoast@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
2026-07-04 00:54:21 -04:00
Delta-V bot 2a584cfde3 Automatic changelog update 2026-07-03 17:55:02 +02:00
Coryn 2c6766dce2
Rename Reverse Engineered Techdisks to their recipe name (#6203)
Rename Reverse Engineered Techfabs to their recipe name
2026-07-03 10:54:43 -05:00
Delta-V bot bfea51537b Automatic changelog update 2026-07-03 16:42:28 +02:00
Stxcking 3b6d918240
Fix: Correct Medicine Effect due to DamageGroupPrototype Being Obsolete From Upstream Merge (#6196)
* explodes

* Skia Fix

* light hurts skia

---------

Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-07-03 14:42:09 +00:00
Delta-V bot 6396d3dc95 Automatic changelog update 2026-07-03 16:25:17 +02:00
BriBrooo d994da7120
Pharmacist clothes and prescriptions (#6178)
* Assets from the pharmacology branch to pharmacology2 branch

Clothing, stamps and prescription paper.

* Fixed bugs from porting clothes

* Fixes bugs

* Update medical.yml

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Added prescription folder

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update coats.yml

* Update Resources/Prototypes/_DV/Entities/Clothing/OuterClothing/coats.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: BriBrooo <45323530+Bribrooo@users.noreply.github.com>

---------

Signed-off-by: BriBrooo <45323530+Bribrooo@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-03 09:24:57 -05:00
Janet Blackquill 4fd45b7f1d eep 2026-07-03 02:28:53 -04:00
Janet Blackquill 10a3756edb get glyphed idiot 2026-07-03 02:22:16 -04:00
Delta-V bot 77a93cfa98 Automatic changelog update 2026-07-03 03:33:36 +02:00
wesker 90be1b88e2
add missing event for admin characterspawn (#6124)
* add missing event for admin characterspawn

* cahnges

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-02 20:33:17 -05:00
Delta-V bot 4ded4c4cb6 Automatic changelog update 2026-07-03 03:19:17 +02:00
Pixel 6ac27a9a9f
Add L93 and SKL93 Lever Action rifles (#6146)
* Added L93 and SKL93

* Made SKL93 Available via Syndicate Uplink for 8 TC. Comes with 10 Shots of AP and a .45 Magnum ammo box

* Made L93 available through salvage.

* Made L93 available via Logistics crate.
Cowboy crate can be bought for 7600. It contains two L93's and two Inspectors. Along side 4 boxes of .45 Magnum and two hats.

* Update licenses

* Remove AP from Syndie SKL93 Bundle, Buff Firerate

* Update sprites to make lever darker on icon

* Brought back AP SKL93.
Made L93 Shoot at 2.5 ROF
Increased price of SKL93 Bundle
Added cowboy hat for SKL93 bundle

* Clean up changes to fit coding style and convention.

Fixed armory.yml's prototype properties ordering. Other Fills may be affected
2026-07-02 21:18:57 -04:00
Delta-V bot 0dc7998b41 Automatic changelog update 2026-07-03 01:59:39 +02:00
pathetic meowmeow 884f4f00f9
Node crawl pass one (#6179)
* Node crawl pass one

* Kommentare hinzufügen
2026-07-03 01:59:20 +02:00
Vanessa f56e1dc368
Fix Publish (#6195)
Fix publish
2026-07-02 18:47:09 +00:00
Delta-V bot 4018599cc0 Automatic changelog update 2026-07-02 19:10:53 +02:00
Vanessa d6023d58f5
Synth emote fix (#6136)
* testing

* Actually fix synth emotes.

* Fixed harpies playing the emote sound twice.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-02 19:10:34 +02:00
Delta-V bot 4898707628 Automatic changelog update 2026-07-02 18:32:19 +02:00
Carol 0ecb05388f
Reduce blood amount of colossus and dragon to 400 (#6047)
* switched FixedPoint2 * FixedPoint2 to use long

* Revert "switched FixedPoint2 * FixedPoint2 to use long"

This reverts commit b8744f6ac3.

* Reduced blood amount to 400

---------

Signed-off-by: Carol <292806487+CarolCuchara@users.noreply.github.com>
2026-07-02 18:31:59 +02:00
pre-commit-ci[bot] c93a47809c [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-02 14:54:51 +00:00
Vanessa 81fb4b1625 MedTek Reports 2026-07-02 09:42:56 -05:00
Delta-V bot 8392aaa23a Automatic changelog update 2026-07-02 14:38:20 +02:00
Stxcking 03c85b708c
Fix: Syndicate Implanters Showing up Empty (#6191)
i guess bro?
2026-07-02 07:38:01 -05:00
Delta-V bot 5e1f237fce Automatic changelog update 2026-07-02 14:34:32 +02:00
pathetic meowmeow a5ec91bd72
Fix ion laws reverting to old impl after upmerge (#6188)
* Fix ion laws reverting to old impl after upmerge

* delectable publish
2026-07-02 07:34:12 -05:00
Carol 5619c22dd0
Scaled down knives so they fit into lockers and crates (#6171)
scaled down fixture of knives
2026-07-02 12:22:29 +00:00
Delta-V bot fb45e005b5 Automatic changelog update 2026-07-02 12:28:48 +02:00
Cepelinas1 376ed6a5b4
port: IAA Endround Report (#5997)
* it breathes

* probably okay

* Create station-report.ftl

thing miwssing

* IAA store update

* guidebook

* update on things

* revert robusttoolbox

* make it fit into folders and clipboards

* update on the styling of paper
2026-07-02 12:28:28 +02:00
Delta-V bot 206bde288e Automatic changelog update 2026-07-02 02:36:24 +02:00
ArionGekkota 5355fc6514
Hitman disguise kit is now a full chameleon backpack (#6175)
Change the chameleon clothing in the hitman's kit with a full chameleon backpack
2026-07-01 20:36:04 -04:00
Delta-V bot 5377d28bce Automatic changelog update 2026-07-02 02:32:08 +02:00
Vanessa 137a8bbc87
Reverted Xeno Blood type. Reduced giant blood numbers. (#6185) 2026-07-01 20:31:49 -04:00
Delta-V bot 99f3daf547 Automatic changelog update 2026-07-02 00:49:39 +02:00
Stxcking 4e2dce4414
PORT: Selectable Cyborg Chassis from CosmicDrift (#5712)
* pickable borg subtypes but better (#706)

* borg subtype fixes I Forgot To Push (#790)

* update borg subtypes to an entity prototype based approach from SL (#884)

https: //github.com/cosmatic-drift-14/cosmatic-drift/pull/884
Co-Authored-By: lunarcomets <140772713+lunarcomets@users.noreply.github.com>

* Minor Build Error Tweak

Should be ready to add more chassis now!

* Yippee Yahoo

Handpicked some chassis sprites from AL/SL PR which are from Paradise :D

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Clean up + Comments

* CR made me sprite at gunpoint

Also switched standard and generic files for consistency and such

* the spaces were bothering me + comments

---------

Co-authored-by: lunarcomets <140772713+lunarcomets@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-01 18:49:19 -04:00
Delta-V bot 5191732d52 Automatic changelog update 2026-07-01 23:53:04 +02:00
ArionGekkota dbc88393fc
Fix chitinid blood amount (#6183) 2026-07-01 21:52:44 +00:00
Delta-V bot eda0cdbe9a Automatic changelog update 2026-07-01 23:32:14 +02:00
Astra c40bae08d9
Fix avali blood amount (#6182)
Fix avali blood
2026-07-01 21:31:54 +00:00
Delta-V bot 20e8e6c295 Automatic changelog update 2026-07-01 22:10:55 +02:00
Cepelinas1 8ac1c479dd
Make SuperSynths craftable + musician trinket item only (#6087)
first
2026-07-01 15:10:35 -05:00
Delta-V bot 73d3f55f22 Automatic changelog update 2026-07-01 19:41:25 +02:00
pathetic meowmeow e9a1e53279
Fix nodecrawl connecting to invalid nodes (#6149)
* Fix nodecrawl connecting to invalid nodes

* pain

* recycled
2026-07-01 12:41:06 -05:00
Delta-V bot 0c87be15a3 Automatic changelog update 2026-07-01 06:16:32 +02:00
Theo 2a7e8484d7
Uplink scam briefcases removed (#6158)
* scams removed

* evil comments

* wtf

---------

Co-authored-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
2026-07-01 04:16:12 +00:00
Delta-V bot 407ee96712 Automatic changelog update 2026-07-01 05:34:42 +02:00
Manoob 83db0f2bfe
Fix carton dispenser restocking (#6123)
* Allow the smaller variants from drink cartons to be put in the soda and booze dispensers

* Bug: Remove double fail message when trying to put something in a dispenser that doesn't belong there

* Remove uneccesary line
2026-06-30 23:34:22 -04:00
Delta-V bot 3fcbcf8853 Automatic changelog update 2026-06-30 21:25:35 +02:00
Vanessa 567e636a0a
Crew Monitor Fix (#6170)
* Fixed crew monitor and gave it buttons instead of trying to figure out which map to display.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-06-30 21:25:15 +02:00
Delta-V bot 042057610f Automatic changelog update 2026-06-30 21:15:47 +02:00
TNE 3024d366a3
Disable upstream silicon "crew icons" (crew indicators) (#6159)
These do not make much sense on DeltaV rules/most silicon laws
2026-06-30 19:15:27 +00:00
Delta-V bot 1c0bfa70be Automatic changelog update 2026-06-30 17:20:53 +02:00
Coryn b2873b92f5
Fix Species Guidebook (#6165)
* Fix Species Guidebook

* oops

* Head to HeadTop
2026-06-30 10:20:34 -05:00
Delta-V bot 98aae97089 Automatic changelog update 2026-06-30 17:19:38 +02:00
pathetic meowmeow edf6525b61
Fix hands on things that are missing hands (#6150) 2026-06-30 10:19:18 -05:00
Delta-V bot a0291a8bd4 Automatic changelog update 2026-06-30 17:02:49 +02:00
Stxcking c7afe1696b
Fix: Snails and Nukie Mouse Vent Crawling (#6145)
should do it
2026-06-30 10:02:28 -05:00
Delta-V bot 8e71819fe9 Automatic changelog update 2026-06-30 17:02:09 +02:00
Proxy also works :3 ca4d157c50
you messed with my values!!!! those arent the numbers!! (#6140)
Update uplink_catalog.yml
2026-06-30 10:01:49 -05:00
Delta-V bot 21c532db7c Automatic changelog update 2026-06-30 09:49:20 +02:00
Coryn 90cb041b6e
Merge pull request #6148 from Coryler/hidden-species-fix
Fix some upstream issues
2026-06-30 07:49:01 +00:00
Delta-V bot c6bd223999 Automatic changelog update 2026-06-29 21:59:55 +02:00
Vanessa ac9894f07a
Fix Client Crash because Tile is using an .rsi path (#6147)
pool fix
2026-06-29 19:59:35 +00:00
Tobias Berger 04fd017326
Upstream Merge - Jan 2026 through March 2026 (#5894)
* Fix(Humanoid): Prevent skin color verification failures due to precision loss (#42836)

port over uberrations fixes.

* Fix RCD not being able to place hull tiles in space (#42740)

Fall back on player's grid if RCD is clicked on empty space

* Thermal vision overlay for admins (#42812)

* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* admin button

* cleanup

* sandoboxenabled

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* fix: APC sprites stuck in fully drained states on round start (#42852)

* Fix APC incorrect charge state caused by race condition on map startup

* fix: Defer the update from ChargeChangedEvent to next tick

* Minor tweaks to Urist names (#42791)

Tweaks to Urist names

* Vulpkanin Yawns (#42768)

* im eepy too

* softer sound

* Revert "softer sound"

This reverts commit 51b3b7b2d4c741f8abc6d361319a5b44d9593d8d.

* Move vulp yawn mentions to _DV folder

* Split HumanoidProfileEditor.xaml.cs into separate files (#42715)

* separate humanoid profile editor into different files

* move this to the rest of the fields

* Moved DV Traits into the right file

* Ensure profile loading only returns valid species (#42842)

* Ensure profile loading only returns valid species

* punt conversion logic outside of the database

* Add missing Cd mention in Profile

* Slat tiles and decals (#37832)

* Add two varieties of steel vertical slat tiles

* Add dark and white variants of vertical slat tiles

* Add dirt decals

* Add vertical overlay decals

* Add single and double vertical slat decals

* Add steel, dark and white horizontal slat tiles

* Improve single vert slat decals

* Add horizontal slat dirt decals

* Add horizontal slat tile objects

* Add horizontal tile cutter recipe

* Add horizontal slat overlay decals

* Fix inconsistent tile naming

* Add horizontal single and double slat decals

* Fix incorrect slat decal

* Fix two off-color pixels on dark slat tiles

* Change slat tile naming

* Add single-slat overlays

* Smooth tile borders and normalize palette

* Update decals to match tile changes

* Update attributions

* Add missing stack locale lines

* Fix and clean up merged file

* Change slat footstep sounds to be consistent with other steel tiles

As far as I can tell, regular steel tiles use FootstepFloor, (except when
they don't,) and Dark and White variants use FootstepTile.

* Fix confusing merge conflict mismerge

* Remove merge conflict cruft

I have no idea how I missed that.

* Add tile stack prototypes

* Fix slat tile stack localization string refs

* Fix slat tile prototype indentation

* Remove tiles that are identical under rotation

* fix yaml header convention

* Parent slat tiles to common steel tile parent

* Whitespace fix

* Un-de-normalize prototype field ordering

* Fix whitespace

* Re-fix indentation

For some reason, I un-fixed this a little while back. No idea why.

---------

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>

* Fix gas filter always outputting 20C filtered gas (#42876)

ingenious!

* Cleanup warnings: CS0114, CS0414, CS9107 (#42859)

* Cleanup warnings: CS0114, CS0414, CS9107

* I shouldn't trust IDE autocorrection

* Regular bots are now repaired gradually, just like borgs (#42878)

Instead of one long doafter, it's a bunch of smaller doafters. See https://discord.com/channels/310555209753690112/1470704102173315143

* Add Missing IntercomAssembly Components (#42821)

* add missing components to assembly

* use inheritance

* (Re)Add sneezing emote. (#41479)

achoo

* fix: cleaning evidence off a person no longer reveals their true identity (#42868)

fix cleaning evidence revealing your true identity

* Fix chameleon controller not updating fake mindshield action icon (#42900)

fix chameleon controller not updating fake mindshield action icon

* Fix Flares dying after 10 seconds. (#42765)

asdas

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

* Identity Mask now updates equipped Agent ID name (#42772)

* add identity mask updating agent id functionality

* fix indentation

* add check for voice mask item

* use ChangeIDName field instead

* Minor cleanup

* remove trycomp

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>

* Fix paradox clones having default voice and pronouns (#42923)

fix

* AI can now read papers and envelopes (#42926)

* AI can now read papers and envelopes

* Move whitelist component from BasePaper to Paper

* Change basic viper magazine to high capacity in operative bundle  (#42927)

* changed atmos fire suit to engineering contraband

* changed normal pistol mag to extended in basic op bundle

* yes

* yes

* Fix uncooked animal proteins metabolism (#42942)

* Update toxins.yml

* poison!!!!

* I hate solutions sytem I hate solutions sytem I hate solutions system

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

* Fix Thieving Beacon not detecting HUDs for said objective (#42945)

* Fix jetpacks not turning off when switching to another jetpack (#42689)

Initial commit

* fixed barber scissors misgendering when blocked by a hat (#42948)

* Fix reagent duplication from vomiting (#42954)

no more reagent duplication

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

* New moth emote. Flaps wings! (#42912)

* frfrfrfr

* mh-

* brbrbrbrbr

* small cleanup

* third category time

* removing ReptilianBodyEmotes

* Revert "removing ReptilianBodyEmotes"

This reverts commit 10200c4292a79932109ce2df6b642bcd88e863e0.

* Revert "third category time"

This reverts commit cf62c425b5db93ba4108b8283361623f2f4ad345.

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Added Emp interaction with Bar Sign (#42950)

* Added Emp interaction with Bar Sign

There was already content for emp bar sign but no support for it.
This adds the interaction with emps to make bar signs EmpDisabled.

* Emp BarSigns stylistic change

* Fixed redundant bar signs

Fixes the extra bar sign popups bug introduced in #42364

* Block bar sign UI when emped

* Revert "Fixed redundant bar signs"

This reverts commit 23168bb503bcf267ac553eff9ac9674bf28adb4b.

* Vox, Diona and Vulp Unique Sneezes (#42929)

* *sneezes!

* fix, quieter vulp sneeze, vox sneeze

* even quieter vulp sneeze

* vulp sneeze attribution

* adjust vox sneeze source

* Move Vulp Sneeze into emotes_speech of _DV

* update basic operative bundle contents (#42930)

modify bundle contents

Co-authored-by: robin <robilythefoxxo@gmail.com>

* Show fuckrules usage to admins (#42988)

* fuck rules

* extreme

* update comment

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Add hand label blacklist (#42986)

* Add blacklist to hand labeler

* Add comments

* Nullable

* More xenoborg names (#42984)

* more names

* update count

* ops

* whitespace

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>

* Make prescription glasses actually work (#42990)

* Made prescription glasses actually correct your vision

* Makes prescription glasses actually correct your vision

* Bug fix

* Bug fix

---------

Co-authored-by: lyxcaster <mser956@gmail.com>

* Improved camera static shader randomness (#42968)

Improved static shader

* Predicted Networked Metabolism (#42798)

* PredictedRandom Helpers

* predicted networked metabolism

* ssadasfsa

* AAAAAAAAAAAAAAAAAAAAAAAA

* remove debug

* oopsies

* its inclusive of 0 fool

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

* Add unlockable reporter cosmetics (#41079)

* Initial commit

* Lower the requirements slightly

* Revert vox displacement fix for another PR

* Remake the "Vegan Meatball" salvage wreck (#42994)

* remake vegan meatball, fix lingering plant enemies

* attempt to remove non-salv ruleset enemy spawns

* EMP implant uplink texture (Addresses #42008) (#42998)

set emp implant texture in uplink catalogue to emp_disable particle

Co-authored-by: nomdéraisonnablementlong <you@example.com>

* Non-obsoletion warnings as errors in Release. (#42983)

* Non-obsoletion warnings as errors in Release.

* Add two other obsoletions related to collection expressions.
These are not present in the codebase, but may become so in the future.

* Exempt NU1903 so the project can't mysteriously stop building.

* Fix some FULL_RELEASE mistakes.

* diff fix

* Resharper caught this one. Note to self: Wire up resharper to CI in another PR.

* Lizard rehappy alternative (#42915)

* new lizard laugh

* typo

* replaced sound with alternative lizard_happy.ogg
adjusted attributions.yml

* Update attributions.yml

Since my friend uses Logic Pro X commercially and paid for
the license, he can freely use the provided samples in his own audio
projects. The resulting lizard_happy.ogg is a combination of multiple
samples transformed to achieve the correct sound, using an original
lizard laugh as reference.

* Add source link for lizard_happy.ogg attribution

Added source information for lizard_happy.ogg.

* update sound

* wtf is a laser raptor

---------

Co-authored-by: Velken <8467292+Velken@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Add TriggerOnRot Component (#42667)

* Add TriggerOnRot Component, and related systems and events

* Move around components and events to proper namespaces

* Improve TriggerOnRotComponent Comment

* fix a bunch of imports

* Change BeginRottingEvent to a ByRefEvent record

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Fix repeated Localization warnings when viewing the Power Monitoring Console (#43037)

no double work

* Give borgs default prying (#41812)

* init

* 1.5

* remove powered

* CompBorgModules, prying alert

* give to NT borgs and derelict borgs

* review

* review 2

* comment

* Make HasMind not always false for client. (#43033)

* it hasmind but i don't

* potatoe potato

* reading is hard

* still can't read

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Add transfer entity to mind events. (#43020)

* init

* stuff

* to

* BeforeEvents

* comment

* docs

* Update Content.Shared/Mind/Components/MindContainerComponent.cs

Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>

---------

Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>

* Fix hypodart uplink description (#43035)

fix

* Stop AI knocking on shutters, blast doors (#42972)

Stop AI interacting with shutters

* StrippableComponent timespan calculation fix (#43022)

* timespan calculation fix

* Update Content.Shared/Strip/Components/StrippableComponent.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Fix Holosign Placement (#42909)

* Holosigns now spawn facing player direction

* Holosigns face south

* Snap holosign to grid and attach to clicked entity

* Back to setting local rotation to zero

* No need to snap to grid

* rifts

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Make DamageSpecifier serializable (#43049)

* pt1 damageable refactor

* fixes

* thusd unused

* sparse damagespecifiers

* fix thongs

* aaaaaa

* fix tests

* de-crash

* Fixed redundant bar sign windows (#42960)

Fixed redundant bar signs

* Fixes the extra bar sign popups bug introduced in #42364
by making BarSignBUI use CreateWindow

* Fixes bar signs placed from Entity Spawn Window

* Make DamageableComponent manually networked again (#43054)

* Make sure vox passively regenerate at the same pace as everyone else (#43055)

* Dynamic feedback popup (#43021)

* add rule filter to feedback popup

* fix the dependency

* simplify

* remove this

* deny popups with rules

* missed here

* new parameter

* the server handles the specific feedback prototypes

* fix logic

* active > added

* minor fixes

* not needed anymore

* now it should be back

* not needed

* cleaning

* create system

* forgot to remove this

* also remove this

* add a I

* remove old feedback popups

* doesn't actually fix it

* maybe this time?

* oh well

* use whitelists

* use gamerule added

* update fix comment

* simplify

* old commentary

* default false

* add blacklist option

* fix helper functions

* remove commentary

* who needs those

* orks hates linq

* not needed

* Change linq into foreach

* remove unwanted popups for next rounds

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>

* Raise SolutionChangedEvent and SolutionContainerChangedEvent when handling SolutionComponent states (#42814)

raise event on client + comp access

* Xenoborg extractor (#42796)

* verb category

* voltage toggle comp

* move stuff

* add simple prototype

* implement verb action

* switch expression

* fixed the node not updating

* charge the battery

* fixed battery not charging

* spawn on battery level system

* finally works

* swap commentary position

* can only anchor the extractor on the station

* popup message for trying to anchor outside of station

* default placement for unanchored version

* ops

* fix body type

* commentary

* update visuals of power consumer

* add custom sprite

* fix light layer not changing

* xenoborg circuit

* fix xenoborg circuit

* add tag

* add hand to hold xenoborg circuits

* move to material

* add xenoborg circuit material

* add recipe to mothership core

* add a hand to hold circuits to the mothership core

* to not confuse

* update

* ops

* another ops

* update mothership

* update guidebook

* update values

* more info

* fix stack

* can store xenoborg circuits

* description

* also update description

* circuit -> crytal

* not modified from anything

* update description

* Revert "update mothership"

This reverts commit 84974c56afadac2a99ed2a166244a668d83fff48.

* update empty label

* small update to sprite

* not necessary code

* remove empty line

* color

* make it explode when destroyed

* change values

* update sprite

* update sprite

* make it eletrified

* flavor text

* simplify to only use charge

* subscribe to event

* new line

* remove popup

* no need for the setter

* no longer networked

* feedback popups

* Minor tweaks

* better to understand

* better now?

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>

* Change Bad Chembottle Suffixes (#43064)

Change Suffixes

* Reparent White Gilgamesh (#43065)

* Throwing Croissant Incorrect Inhand Removed (#43066)

* Remove inhand sprite

* Add comment

* Fix Makeshift Juicer Crafting (#43075)

i hate it her

* Add xenoborg gun sprites (#43013)

xenoborg gun sprites

* Remove unused noise texture (#42970)

Remove unused asset

* [Fix] Door remote fixes (#43063)

* fix door remotes

* admeme

* typo

* review

* revert door changes

* tag

* Revenants cannot be stuck with plastic explosives (#42889)

* no touchy!

* Apply suggestion from @slarticodefast

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Removed rollerskates & clown-outfit cargo bounties; reduce pancakes needed for pancake cargo bounty (#42899)

* Removed rolerskate & clown-outfit cargo bounties; reduce pancakes needed for pancake cargo bounty

* adjusted tag comments

* forgot to temove rollerscates bounty item locale

* Fix damagable mispredicts (#43080)

fix

* use proxy methods in EntitySystems (#43083)

use proxy methods

* fix topicals (#43087)

* APC building doAfter fix (#43089)

Add doAfter to APC construction

* [STAGING] Innate prying tooltip (#43081)

Update alerts.ftl

* Fixed Mining Hardsuit Helmet Name + Added Internals to Crates (#43072)

* One commit ops

* Removed extra line

* Fix "Unknown messageId" warnings from ID cards (#42886)

* Empty string bad

* Preserve existing behavior

* yaml format nitpick (#43074)

* minor nitpick

* fix mistake

* clean up

* Fix AtmosDebugOverlay being always active (#43073)

* Fix AtmosDebugOverlay being always active

* review

* Only one puddle sparkle please (#43086)

* only one sparkle please :3

* address review

* Add borg construction interaction test (#42359)

* Add test of borg construction.

* Return Validated when in validation mode.

* Update Content.IntegrationTests/Tests/Construction/Interaction/BorgConstruction.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Fix door remotes 2 (#43094)

* fix door remotes

* admeme

* typo

* review

* revert door changes

* tag

* fix highsec and windoors

* Support for melee weapon user overrides (#39633)

* redefining-using-melee-weapons

* animation bug fix

* review

* fix merge

* add nested entity effects+conditions (#42341)

* add nested effect

* add nested condition

* move api to the main systems and improve effect guidebook text gen

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>

* Inventory + Storage toolshed query commands (#40813)

* Add inventory and storage query toolshed commands

* Forgot FTL

* Fix stuff!

* Make requested changes and stop STACK MAX SIZE ERROR

* cleaning

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Hyper autolathe now requires the same ammount of manipulators as autolathe (#43109)

hyper lathe now requires the same ammount of manipulators as base lathe

* Remove salv stuff from mothership (#43007)

* verb category

* voltage toggle comp

* move stuff

* add simple prototype

* implement verb action

* switch expression

* fixed the node not updating

* charge the battery

* fixed battery not charging

* spawn on battery level system

* finally works

* swap commentary position

* can only anchor the extractor on the station

* popup message for trying to anchor outside of station

* default placement for unanchored version

* ops

* fix body type

* commentary

* update visuals of power consumer

* add custom sprite

* fix light layer not changing

* xenoborg circuit

* fix xenoborg circuit

* add tag

* add hand to hold xenoborg circuits

* move to material

* add xenoborg circuit material

* add recipe to mothership core

* add a hand to hold circuits to the mothership core

* to not confuse

* update

* ops

* another ops

* update mothership

* update guidebook

* update values

* more info

* fix stack

* can store xenoborg circuits

* description

* also update description

* circuit -> crytal

* not modified from anything

* update description

* Revert "update mothership"

This reverts commit 84974c56afadac2a99ed2a166244a668d83fff48.

* update empty label

* small update to sprite

* not necessary code

* remove empty line

* color

* make it explode when destroyed

* change values

* update sprite

* update sprite

* make it eletrified

* flavor text

* simplify to only use charge

* subscribe to event

* new line

* remove popup

* no need for the setter

* no longer networked

* update mothership

* HTNComponent from SharedNPCSystem (#42750)

* init

* move system

* doc

* Small tippy fix + msg toolshed additions (#43082)

* why is this not how it worked already fml

* better tippy checking

* Brings Estoc DMR accuracy to standard rifle accuracy, removes movement speed debuff (#43038)

* Removed accuracy and move speed debuffs for estoc

* introduced slight speed reduction

* typo

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>

* Initial decoupling pass on Damageable (#43103)

* Initial decoupling pass on Damageable

* ope

* e

* mroaw

* ok sure on the medibot thing

* no medibot bounds

* okidooks

* arcryox era

* cryox moment

* PinpointerSystem&Component cleanup (#42463)

* cleanup

* make some stuff nullable again

* Apply suggestions from code review

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* fix and remove a dependency

---------

Co-authored-by: seanpimble <149889301+seanpimble@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Mix xenoborg_scream.ogg to mono (#43132)

* Fixing issue 42759, air grenades cannot be re-triggered. (#42866)

Fixed #42759 - air grenades cannot be re-triggered

* Nukie guidebook improvements (#43131)

* improve nukie guidebook (getting to the station, arming procedure)

* removed show vessel from IFF Computer guidebook text

* Make map tests more fine-grained. (#42977)

* Make map tests more fine-grained.

* ..typo.

* fix example

* exclude Empty.

* Adjust a scrounger test & fix it.

* It does respect ignored prototypes, after I realized making it do so was really easy.

* Fix it for real this time.

* General scrounger enhancements for a GameRules test set.

* Fix linter for real.

* Address reviews.

* Weather entities (#41427)

* weather status effect entities

* proto port + fixes

* Update weather.yml

* fix visuals

* Update SharedWeatherSystem.cs

* Update SharedWeatherSystem.cs

* Update WeatherSystem.cs

* Thanks Slarti, thats a much better

* Update WeatherSystem.cs

* Update StencilOverlay.Weather.cs

* Update Content.Client/Overlays/StencilOverlay.Weather.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Shared/StatusEffectNew/Components/StatusEffectComponent.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Client/Overlays/StencilOverlay.Weather.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Revise weather command help descriptions

Updated weather command help texts for clarity.

* Merge branch 'master' into ed-14-11-2025-weather-entities

* Tayrtahn review apply

* fixes and cleanup

---------

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Patch for engine ComponentFilter (#43168)

* Patch for engine ComponentFilter

* Poke

* Refactor guide entry tests. (#43159)

* Add 204 more tests.

* better plan.

* Refactor explosion prototype tests. (#43158)

Add 9 more tests.

* Refactor Device Linking tests. (#43157)

* Add 416 more tests.

* fixes.

* Refactor construction tests (#43155)

Introduce 2681 more tests.

* Add exception tolerance to SharedDoAfterSystem. (#43088)

* Reactions test cleanup. (#42979)

* Make TryAllReactionsTest use a scrounged reagent list.

* naming

* Poke

* Refactor MobThresholds and Stamina tests. (#43156)

Add 561 more tests.

* Update `NodeHelpers` and `Node.GetReachableNodes` to use `Entity<TransformComponent>` and `Entity<MapGridComponent>` (#37734)

* Add overloads for NodeHelpers methods, obsolete old ones

* Pass in SharedMapSystem instead of IEntityManager

* Change GetReachableNodes signature, deal with aftermath

* Allow non-grid nodes

* Change GetReachableNodes to also take Entity<TransformComponent>

* Remove vestigial ReSharper hint

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Formatting

---------

Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>

* Add a basic API to `JukeboxSystem` (#42896)

* Add a basic API to JukeboxSystem

* Update Content.Shared/Audio/Jukebox/SharedJukeboxSystem.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Remove pointless Dirty

* Move SetSelectedTrack Dirty inside if block

* logMissing: false

* Remove pointless Audio.Stop call

* Poke tests

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Atmos YAML-defined gas flammability, flammability API (#43165)

* atmos masked flammability/API

* on that oomba pac

* yuuup

* resolve todo and review

* rename

* Vent Hordes (#43047)

* init

* port hostiles to hordes, fakeout horde

* cleaning, docs

* i may be blind sometimes

* i may be even blinder

* remove friendly announcements

* fuck it

* i love microbalancing

* review

* review

* review p2

* Update Resources/Prototypes/GameRules/pests.yml

Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>

* review + powercreep

* lower the times to account for the gamerule delay

* review

* review

* fuck this return actually

* fial

---------

Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>

# Conflicts:
#	Resources/Prototypes/GameRules/pests.yml

* Add DB Config to development.toml (#43036)

add db config development.toml

* Add banning to server api (#43205)

add banning to server api

* Revert "Support for melee weapon user overrides" (#43106)

Revert "Support for melee weapon user overrides (#39633)"

This reverts commit 18149dbb3b.

* Update RT to 273.0.0 (#43130)

* Wrapped parcels can go into mail carts (#43226)

wrapped parcels can go into mail carts

yeah, it technically allows wrapped humanoids to get in there too, but how're you gonna get something you can't pick up into inventory storage?

Also YEAH technically this allows arbitrage of carrying a ton of stuff in the mail cart, but that's no so different from just carrying a ton of stuff around in a trash cart and this at least has the cost of a bit of parcel wrap. I will tolerate no dissent

* Make test runnable on windows in debug config again (#43227)

tfw ur fs isn't posix compliant

* Removes a test that handles engine behavior in content. (#43228)

* [Fix] Silicon Ion Law Scramble Text (#43229)

scramble noises

* Move a metric fuckton of AtmosphereSystem to Shared. (#42989)

* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* fix the tests I broke

* Remove methods that the client shouldn't be calling. Hamburger.

* light cleanup for now

* review

* whoop

* docs updates and misc changes

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* fix bottle reagent localization (#43208)

* Fix missing word from emitter alerts (#43225)

* fix emitter yapping

* use actual locid objects

* Make EntityTableSpawner spawn relative to grid instead of map (#43234)

* Add a holy light effect to bible healing (#43189)

* save

* remove unneeded event

* Revert "remove unneeded event"

This reverts commit 779ec783094144ca978a5e9d111235e29539e8a3.

Revert "save"

This reverts commit f88e0ab18b253915f5efde5886a4701a73ffa35a.

* Use simple light effect entities with TimedDespawn

* Content-side IRobustRandom cleanup. (#43231)

* Content-side fixes for engine IRobustRandom rejig.

* Define for ensuring SetSeed works.

* Poke.

* Poke

* Poke.

* Cleanup warnings: CS0168, CS0414 (#43198)

* Cleanup warnings: CS0168, CS0414

* That was the right thing to do

* Please tell me that this is a random fail

* ...

* last try

* revert

* CachedResources for GasTileDangerousTemperatureOverlay (#43032)

* init

* minifix

* that is nullable

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Refactor: Gas tile overlay split (#42881)

* yeah

* split2

* well

* cleanup

* docs fix

* Dependency cleanup

* Update Content.Client/Atmos/EntitySystems/GasTileFireOverlaySystem.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileVisibleGasOverlay.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileVisibleGasOverlay.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* yup

* modifying a lot anyways

* other cleanup

---------

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Move ID card name/title length limit to server (#43237)

* Validate string lengths serverside

* Organize usings

* Remove clientside check

* Also remove the cvar caching in the UI

It's one dictionary call, Michael. What could it cost?

* Update ruined_prison_ship.yml (#43242)

Fixed the ruined prison ship yml 2779 line Destryoed thruster to Destroyed thruster

* Single item cargo orders are delivered in Parcel Wrap instead of crates (#40834)

* - rework a bunch of cargo orders to not send a crate with just one thing
  - instead sends the item, wrapped
- add ability for cargo orders to wrap the item ordered in parcel wrap
- cargo order name and descriptions are now localization strings, but still 99.99% of the time just get that info from the entity they're spawning
- small refactor to how cargo orders move around in cargo code so that the actual order proto is kept around longer
- small rework to certain restock cargo orders to halve the cost and number of items received in one order

* oop

* Suffering

* Arbitrary containers for cargo products

* I ran the tests locally and they passed, github please rerun :)

* massage Slarti's work into this.
Mainly by taking the API wrapping ability out back with the rifle q-q

* testfail fake

* wow `_applyingState` is useful, I wonder where I should've been using that in other PRs before :^)

* pr comments

* tfw the hook doesn't update the submodule

* Update Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs

Co-authored-by: āda <ss.adasts@gmail.com>

* PR comments

* fixies

* Update Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs

* Update Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.WrappedParcel.cs

* fix wrapped parcel entity name + audio

* Actually read PR comments

* Apply suggestions from code review

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

---------

Co-authored-by: āda <ss.adasts@gmail.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Refactor Ion Law string generation (#42629)

* YAMLs your ion laws

* forgot some weights

* this should be it

* comments and DAGD

* improved testing

* addressing review (part 1 out of 2)

* still part 1 :gosomnia:

* part 2

* refactor the refactor

* loc error fluffs

* address review

* weh

* cleanup

* oops

* fix

* more cleaning

* forgot to remove old thing

* prediction

* fix

# Conflicts:
#	Content.Server/Silicons/Laws/IonStormSystem.cs

* Fix bug blocking character saves for species without hair. (#43170)

* Update ServerDbBase.cs

* Update ServerDbBase.cs

* Update ServerDbSqliteTests.cs

* :grumble grumble grumble:

* tests

* Update ServerDbSqliteTests.cs

* commit

* forgot this.

* relocation.

* nope, not doing that lmao

* Update ServerDbSqliteTests.cs

* test rerun

* GAAAAAA

* Update ServerDbSqliteTests.cs

* Update ServerDbSqliteTests.cs

* Update ServerDbSqliteTests.cs

* GAAAAAA

* go fish

* Port Species

* Fix files for upmerge changes. Notably Nubnody and Damagaeable

* Remove DV FeedbackPopup, due to the upstream one

* Move TotalDamageCondition into _DV along with some other fixes

* Scaling works, some errors killed.

* More progress against the linter

* Make more Yaml Changes to appease the Linter

* Fix Locale issues. Some yml issues I have no idea how to fix

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fix WeatheR Scheduler

Weather still needs work

* Fix Build Errors

* Fix mroe Build Errors and move Weather Damage into _DV

* Additional migration mention and briefcase item removal

* Fix some Build Warnings

* Fix weather scheduler attempt

* Restore rebased removed actions

* More Migration

* This oughta fix it

* Change some of hte old values back

* Revert this back to Component Registry

* Removing last yml errors

* Change PostMapInit Path to our actual maps

* Revert "Remove loadout time towels (#42536)"

This reverts commit b3ddf57affd43fa952dbae6b7439a881026191bb.

* Change Metabolism of newly reagents

* Rename some Shadow to Soul

Meh

Ok... :/

Test attempt fix

Another Attempt to fix, the null ref

Another Attempt to fix :/

argh

I would really hatre if this is the solution

Try to find null ref

Searching for the fix

* Readd old StatusEffect

* Revert "Remove salv stuff from mothership (#43007)"

This reverts commit eea773ffee.

* Predict reagent grinder (#42815)

* prediction!!!

* fixes

* fixes and add debug logs

* fix prediction and cleanup

* raise event on client + comp access

* reapply power state changes

* Update Content.Client/Kitchen/EntitySystems/ReagentGrinderSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Kitchen/Components/ReagentGrinderComponent.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* comments and prefilled grinder protos

* t

---------

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Fix reagent grinders on dev map (#43253)

fix grinders on dev map

* Removed MovementBodyPartComponent (#43257)

* Revert "Xenoborg extractor (#42796)"

This reverts commit 7f15e77954.

* Fix floating point tilefire nonsense (#43263)

* Change method call and epsilon

* holy guacamole

* Add test result archiving to our test actions + Test fixes (#43175)

* Add test result archiving to our test actions.

* heck.

* Don't waste tremendous amounts of storage.

* Fix ReagentDataTest.

* Reduce retention and increase compression on integration output.

* Back to 7 days, depend on RT instead.

* Poke.

* Fix linter.

* til.

* Actually send YAMLLinter's pair messages into the void.

* Update RT to 274.0.0 (#43261)

* Make the chem guidebook show when chemicals adjust body temperature (again) (#42394)

Make chem guidebook show adjusttemperature effects

* Tech disk resprite and pricing changes (#37719)

* init

new disks are in. can be spawned or printed. no weights or correctly bound techs yet.

* tweak textures and naming

* make tech disks respect their tier and discipline

* make tech console respect tier weight

* yml fixes (forgo a million things)

* meow :3 reworked to use GenericVisualizer

* moved staticPrice comp to shared to support different pricing per tier

* unhardcoded prices; tweaked log messages

* cleanup

* a few fixes

* updated pricing to match weights

* lowering prices I forgor how many of them science can print

* what

* t3 texture, logger, factory

* move PriceCalculationEvent & EstimatedPriceCalculationEvent to shared

* remove static price comp; use EntProtoId for disk proto

* moved staticPrice comp back to server

* cleanup: price event, visualizer enums & yml

* ummove PriceCalculationEvent

* ummove PriceCalculationEvent attempt #2

* more unmoving

* fixes

* predict onExamine

* review changes

* small cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Fix Airtight Explosion Cache (#43276)

fix explosions

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

* Fix thermomachine guidebook typo (#43285)

Fix typo

* DeleteComponentCommand minor cleanup/rename. (#43289)

commit

* Cleaning Blood Footstep Sounds (#43266)

The noises have stopped

* Move salvage RandomSpawners to EntityTableSpawners (#43233)

* Move salvage RandomSpawners to EntityTableSpawners

* Spellcheck

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Apply requested changes for spawner

* Move another prob to parent selector

* Why wasn't it that before

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Borg charger hitbox changes (#43300)

* Borg chargers no longer rotate

* Orbing your charger NOW

* Move some simple random spawners to entity table spawners (#43305)

Simple random spawners to entity tables

* Fix melee attack sprite rotations (#43307)

fix melee rotation

* removed PhysicalConstants.ZERO_CELCIUS (#43316)

* Fix welders running an additional time when no damage remains. (#43321)

Update RepairableSystem.cs

* Correct attribution for /Textures/Objects/mre.rsi (#43328)

Update meta.json

* Flatpack opening uses collision of flatpacked entity (#41849)

* flatpacks openable on tables, ignore ghosts

* suggested changes

* if i stash this im going to forget that a stash exists.

* FINAL final (1)

* FINAL final (2)

* i now understand networking

* Move remaining random spawners to entity table spawners (#43324)

Move remaining random spawners to tables

* Update RT to 274.0.1 (#43337)

update RT to 274.0.1

* remove all use cases of TimerComponent (#43320)

cleanup TimerComponent

* trico no longer heals when mob is crit, and no longer heals rad (#43293)

* trico no longer heals when mob is crit, and no longer heals rad

Tricordrazine no longer heals when mob is crit and no longer heals radiation damage.

* Inverted crit mobstate -> alive mobstate

* Fixes ambuzol pills. (#43331)

Fixes ambuzol pills. pp doo kaka

* Fix `SharedCrayonSystem` being both `[Virtual]` and `abstract` (#43339)

Remove [Virtual] from SharedCrayonSystem

* Painting and poster random spawners to  entity table spawners (#43270)

Painting and poster random spawners to tables

* Update RT to 275.0.0 (#43357)

* Change chat straight quotes to curly quotes (#43350)

* GameTest part 1 (#43182)

* Ports much of GameTest, minus all the WIP stuff.

* remark.

* EnsureCVar now adds test properties.

* Some cleanup and functionality.

* Ignore broken test. Needs fixed eventually. Also explicit context config.

* TrackingIssue attribute.

* oops

* Pair config attribute.

* Remove SystemAttribute in favor of using the EntitySystemManager dependency collection.

* Ensure idleness.

* More tests for tests.

* More specific failure catching tests.

* Reverse attribute resolution order so suite-wide attributes happen first.

* Get rid of AffectedProperties again because I need to refactor PoolSettings for that.

* Poke

* Final cleanup pass.

* Update Content.IntegrationTests/Fixtures/Attributes/RunOnSideAttribute.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Update Content.IntegrationTests/Fixtures/Attributes/Side.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Update Content.IntegrationTests/NUnit/Utilities/ITestExtensions.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Fixes.

* shut up nunit.

* Make TrackingIssue a bit strict on purpose, so people don't put junk here.

* Update Content.IntegrationTests/Tests/GameTestTests/DisconnectedDependencyTest.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Address.

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Minor fixes to server api ban endpoint (#43355)

minor fixes to server api ban endpoint

* [FIX] Moved random manifest back server (#43361)

* moved random manifest back server

* fix ordering

* Remove `[Virtual]` from some classes that shouldn't have it (#43347)

* Remove [Virtual] from some classes that shouldn't have it

* Back to virtual with you

* Update RT to 275.1.0 (#43368)

* cleanup GasPrototype and some other atmos code (#43318)

* cleanup

* fix some localizations

* fix typo

* review and test fix

* rename

* minus one

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Fix `TrackingIssueAttribute` blocking orgs/repos containing numbers (#43369)

Fix TrackingIssueAttribute blocking orgs/repos containing numbers

* Fix: Make clockwork glass grindable (#43371)

make cGlass grindable

* "Reduce motion of visual effects" now works for blood loss effect (#41878)

* "Reduce motion of visual effects" now works for blood loss effect

* Improve strenght

* Make motion less strong

* Stop motion effect

* cleanup and rebalancing

* fix warning

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Heat distortion shader (#42973)

* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* tile color  vaccum and more comments

* saving yeeted

* integration test

* rename and cleanup

* fix

* cleanup

* switch

* UT fix (hopefully)

* small bug+ rename

* vaccum limit  + space is now invalid

* typo

* typo

* fix

* init, works

* move method around

* renames and split

* renames

* heatblur

* cleanup

* more docs

* resource cache

* No dynamic perlin noise generation [no fun allowed] and new blur softening method

* magic numbers and rename

* misc cleanup

* removed init values because display compat mode broken

* misc cleanup

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update RT to 275.2.0 (#43378)

* Fix changeling transform ability (#42107)

* fix changeling transform

* Add store UI on MapInit instead

* Apply suggestion from @slarticodefast

* Apply suggestion from @slarticodefast

---------

Co-authored-by: Jessica M <jessica@maybe.sh>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Remove PDA equip sprites (#40498)

* we have never had pda equip sprites.

* I didn't know the rsi validator would complain about that one tbh

---------

Co-authored-by: ruddygreat <ruddygreat1@gmail.com>

* Lathe Menu Title Enhancement (#43392)

* DefaultWindow -> FancyWindow, use SetInfoFromEntity

* code smell fix

* Reduce speso value of tech disks (#43395)

commit

Co-authored-by: iaada <iaada@users.noreply.github.com>

* Bugfix of Heat distortion shader (#43397)

* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* tile color  vaccum and more comments

* saving yeeted

* integration test

* rename and cleanup

* fix

* cleanup

* switch

* UT fix (hopefully)

* small bug+ rename

* vaccum limit  + space is now invalid

* typo

* typo

* fix

* init, works

* move method around

* renames and split

* renames

* heatblur

* cleanup

* more docs

* resource cache

* No dynamic perlin noise generation [no fun allowed] and new blur softening method

* magic numbers and rename

* misc cleanup

* removed init values because display compat mode broken

* misc cleanup

* bugfix

* fix

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Greatly reduce spawn rate of salt ore (#43012)

* Disintegrate salt

* Salt is forever

* Forgot to exclude this file

* Fix ghost time of death (#43411)

* Use RealTime when setting ghost TimeOfDeath

* Don't pause with RealTime

* Oops. Also get rid of AutoGenerateComponentPause

* Gametest Part 2: Preliminary refactor every test to use GameTest as the framework. (#43207)

* Pass 1.

* i'm FREE

* Prevent hangups.

* okay fine here's an attribute for settings, will polish later and prolly remove the overridable thing.

* sigh.

* fix singular trigger bug so LatheTest doesn't flake.

* Remove SystemAttribute usage.

* Poke

* I used the shotgun. You know why? Cause the shot gun doesn’t miss, and unlike the shitty hybrid taser it stops a criminal in their tracks in two hits. Bang, bang, and they’re fucking done. I use four shots just to make damn sure. Because, once again, I’m not there to coddle a buncha criminal scum sucking f------, I’m there to 1) Survive the fucking round. 2) Guard the armory. So you can absolutely get fucked. If I get unbanned, which I won’t, you can guarantee I will continue to use the shotgun to apprehend criminals. Because it’s quick, clean and effective as fuck. Why in the seven hells would I fuck around with the disabler shots, which take half a clip just to bring someone down, or with the tazer bolts which are slow as balls, impossible to aim and do about next to jack shit, fuck all. The shotgun is the superior law enforcement weapon. Because it stops crime. And it stops crime by reducing the number of criminals roaming the fucking halls.

* Change the faulty store test into two tests, one of which is ignored for failing.

* Reagentgrinder Fix

* Test missing new

* Revert "Removed MovementBodyPartComponent (#43257)"

This reverts commit 07a757eea3d71ea5133440aae9928e49f189a2e8.

* Forgot one Sharp

* Remove Far Horizon XML Comments... parser hates it

* Comment out Holo Test, needs one written by us

* Guide Entry Test skip

* Christmas Kobols comment out for now

* Moved MovementBodyPartComponent into _DV space

* Change HumanoidLayer Test to our Markings

* Weather: Make Damage Work

* Fix Test Errors realted to wrongly set PowerState variables

* Stopping ArenaMobs from trying to open People

* Attempt to workaround the Dummysession

* Dumb Attempt to workaround the Dummysession

* remove unused MovementBodyPart

* tidy

* Fix Planet Weather crashing, by shoving new grids 150 tiles away.

* PR Review Changes

* Fix Devil being immune to Holy

* Some other Review Things

* Change _DV Tests to new ones

* Yaml Lint Errors

* Fix Build Errors and Test Build Errors mentioned in Review

* Remove unused Dependency

* Attempt to make the Test work

* PR Review fulfillments

* Spider Leg to Arachnid Leg

* Add Nullptr check

* Readding the no send condition

* Kitsune colors, Glimmer Style Popups, and some Comments

* Changed comment for ScaleVisual

* Changed Mindbreak Resolve to not log missing

* Add one more log Misisng

* Update RobustToolbox to v275.2.3, remove manual CI Lidgren patch

Includes a fix for 2 DOS attacks. No other changes.

* Removing this again...

* Glimmer Restyle works

* Glimmer Restyle baldness check

* Glimmer Restyle fix as intended

* Humanoid Appearance mention removal and Restyle early cancel removal

* Quickfix

* gated

---------

Co-authored-by: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com>
Co-authored-by: TriviaSolari <154280615+TriviaSolari@users.noreply.github.com>
Co-authored-by: InsoPL <lukasz.lindert@protonmail.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: MidoriKurage <104000416+mdrkrg@users.noreply.github.com>
Co-authored-by: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: portfiend <109661617+portfiend@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: Aearo-Deepwater <77557990+Aearo-Deepwater@users.noreply.github.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
Co-authored-by: B_Kirill <153602297+B-Kirill@users.noreply.github.com>
Co-authored-by: Rachel Lowe <60523642+11BelowStudio@users.noreply.github.com>
Co-authored-by: alen <43865831+magnnusson@users.noreply.github.com>
Co-authored-by: Minemoder5000 <minemoder50000@gmail.com>
Co-authored-by: Leah <leahcatdev@gmail.com>
Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: Le-Arctic-Fox <leightonmicheal28@gmail.com>
Co-authored-by: Synthestra <blearsjace@gmail.com>
Co-authored-by: Steel <prorxan@gmail.com>
Co-authored-by: nekokiwa <hihihihihihihi833@gmail.com>
Co-authored-by: Pgriha <133212269+Pgriha@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: Patrik Caes-Sayrs <heartofgoldfish@gmail.com>
Co-authored-by: robinthegirlthing <robinAWrobeson@gmail.com>
Co-authored-by: robin <robilythefoxxo@gmail.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Co-authored-by: Samuka <47865393+Samuka-C@users.noreply.github.com>
Co-authored-by: lyxcaster <187148567+lyxcaster@users.noreply.github.com>
Co-authored-by: lyxcaster <mser956@gmail.com>
Co-authored-by: eoineoineoin <helloworld@eoinrul.es>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Co-authored-by: Alzore <140123969+Blackern5000@users.noreply.github.com>
Co-authored-by: KeTuFaisPiKiNut <85769816+ketufaispikinut@users.noreply.github.com>
Co-authored-by: nomdéraisonnablementlong <you@example.com>
Co-authored-by: Moony <moony@hellomouse.net>
Co-authored-by: DaturoDewitt <49022685+DaturoDewitt@users.noreply.github.com>
Co-authored-by: Velken <8467292+Velken@users.noreply.github.com>
Co-authored-by: blueDev2 <89804215+blueDev2@users.noreply.github.com>
Co-authored-by: korczoczek <danielkorczok@gmail.com>
Co-authored-by: OrbitSystem07 <emilymurray717@gmail.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: Connor Huffine <chuffine@gmail.com>
Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
Co-authored-by: AffleWaffle <135037883+AffleWaffle@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Pharaz4 <143268074+Pharaz4@users.noreply.github.com>
Co-authored-by: Jessica M <jessica@jessicamaybe.com>
Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: UpAndLeaves <92269094+Alpha-Two@users.noreply.github.com>
Co-authored-by: ProPeperos <61984624+ProPeperos@users.noreply.github.com>
Co-authored-by: Shegare <147345753+Shegare@users.noreply.github.com>
Co-authored-by: neomoth <admin@neomoth.dev>
Co-authored-by: August Sun <45527070+august-sun@users.noreply.github.com>
Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
Co-authored-by: alexalexmax <149889301+alexalexmax@users.noreply.github.com>
Co-authored-by: seanpimble <149889301+seanpimble@users.noreply.github.com>
Co-authored-by: Coco <CoconutThunder@users.noreply.github.com>
Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
Co-authored-by: Geekyhobo <66805063+Geekyhobo@users.noreply.github.com>
Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>
Co-authored-by: Centronias <me@centronias.com>
Co-authored-by: Taser <81585596+TaserTheFox@users.noreply.github.com>
Co-authored-by: Crude Oil <124208219+CroilBird@users.noreply.github.com>
Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>
Co-authored-by: themias <89101928+themias@users.noreply.github.com>
Co-authored-by: Diego Lobo <widsgamecube@gmail.com>
Co-authored-by: āda <ss.adasts@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: WS01 <151183296+Tuchila-Adi-Bogdan@users.noreply.github.com>
Co-authored-by: ConstantlyConfused <67894661+Eternally-Confused@users.noreply.github.com>
Co-authored-by: Vladislav Suchkov <20380250+murolem@users.noreply.github.com>
Co-authored-by: Ben Dake <124413509+Buunie099@users.noreply.github.com>
Co-authored-by: Kyle Tyo <akikai297@gmail.com>
Co-authored-by: Prole <172158352+Prole0@users.noreply.github.com>
Co-authored-by: MendaxxDev <153332064+MendaxxDev@users.noreply.github.com>
Co-authored-by: mq <113324899+mqole@users.noreply.github.com>
Co-authored-by: Not-A-Chair <106408238+Not-A-Chair@users.noreply.github.com>
Co-authored-by: Arcane <234029700+ArcaneValiance@users.noreply.github.com>
Co-authored-by: salarua <salarua@protonmail.com>
Co-authored-by: Gentleman-Bird <dcgreen406@gmail.com>
Co-authored-by: Marchy <89603088+M4rchy-S@users.noreply.github.com>
Co-authored-by: Jessica M <jessica@maybe.sh>
Co-authored-by: ruddygreat <53099277+ruddygreat@users.noreply.github.com>
Co-authored-by: ruddygreat <ruddygreat1@gmail.com>
Co-authored-by: Chris V. <HoofedEar@users.noreply.github.com>
Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: MissKay1994 <15877268+MissKay1994@users.noreply.github.com>
Co-authored-by: TNE <tne@garudalinux.org>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2026-06-29 21:40:08 +02:00
Janet Blackquill 0d8644179b gated 2026-06-29 15:14:28 -04:00
Janet Blackquill 63b8364864 Quickfix 2026-06-29 13:50:13 -04:00
Tobias Berger 0919d0f064
Merge branch 'main' into pr/5894 2026-06-29 18:59:38 +02:00
BriBrooo 448b755b75
Fixes messageId console errors (#6143)
* Fixes messageId console errors

Replaced paper.yml HydroCo's notices in the paper-misc.ftl file and moved the [bold] to the last line to prevent error messages in the console

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-06-29 09:59:09 -05:00
Delta-V bot 977e47b434 Automatic changelog update 2026-06-29 16:06:38 +02:00
Vanessa ee18b71805
Various Crew Monitor Fixes/Tweaks (#6139)
* Various Crew Monitor Fixes/Tweaks

* comment

* comment

* Increased wireless ranges
2026-06-29 14:06:18 +00:00
Velcroboy 29b64c1f7e
Suffix and other entity naming megafix (#6091)
* Suffix and other entity naming megafix

* migration

* others

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-06-29 14:00:08 +00:00
Delta-V bot a99d488b04 Automatic changelog update 2026-06-29 15:39:43 +02:00
Stxcking f18d6803b9
PORT: DV's Pool Episode - Longue Chairs + Swim Rings + Pool Tiles & Water (#6113)
* Pool-Themed Decorations: Lounge Chairs, Umbrellas, Tiles, Swim Rings, and Pool Water (#2071)

<!-- Guidelines:
https://docs.spacestation14.io/en/getting-started/pr-guideline -->
<!-- NOTE: All code submitted to this repository is ALWAYS licensed
under the AGPL-3.0-or-later license.
The REUSE Specification headers or separate .license files indicate a
secondary license (e.g., MPL or MIT) solely to facilitate
integration for projects that do not use the AGPL license. This
secondary license does not replace the fact that AGPL-3.0-or-later
remains the primary and binding license.
Uncomment and modify the following line if you wish to change the
license from the default of AGPL.-->
<!--- LICENSE: AGPL -->
<!-- What did you change? -->

This PR adds a bunch of, well, mapper toys basically, but normal players
can obtain them too. They are:
- Pool tile and dark pool tile; obtainable via the cutter machine.
- Pool water; unobtainable without mapping/admin tools, but it's 1%
chlorine.
- Lounge chairs, constructed with steel and cloth. Deconstructible with
a screwdriver.
- Beach umbrellas, constructed with rods and cloth. Deconstructible with
a screwdriver.
- Swim rings, which can be ordered from Logistics. They're sort of like
the emergency comfort units (pillows), but they're inflatable rings and
you can pick them up.

<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
These assets are needed for an upcoming map I'm making and I'm giving
them to the community early out of the kindness of my heart

<!-- Summary of code changes for easier review. -->
All YML and sprites babyyy

- Entity prototypes for chairs, umbrellas, pool water, swim rings, and
the pool tile stack items
- Some construction graphs
- A cargo product
- A floor definition
- Recipes for the tile cutter

Pool water IS drinkable because it's extremely funny. Keep in mind that
50u of pool water will only give you like 2 poison damage

<!-- Attach media if the PR makes ingame changes (clothing, items,
features, etc).
Small fixes/refactors are exempt. Media may be used in SS14 progress
reports with credit. -->

Preview of the stuff:

<img width="713" height="541" alt="image"
src="https://github.com/user-attachments/assets/42f1acc8-cc83-4356-a8e0-3c715245d120"
/>

<img width="697" height="666" alt="image"
src="https://github.com/user-attachments/assets/8597017a-9d03-4419-80c5-cf475f3206d1"
/>

sorry i forgot the pink ring

<img width="253" height="179" alt="image"
src="https://github.com/user-attachments/assets/7f738f8e-42b4-4ee4-aa75-9f08b67ded0c"
/>

sorry i forgot the white chair

<img width="206" height="140" alt="image"
src="https://github.com/user-attachments/assets/6fabe541-4821-4e88-8d64-a99f463c5253"
/>

Cargo:

<img width="633" height="461" alt="image"
src="https://github.com/user-attachments/assets/b8ae9b89-4d2f-4326-9814-d000d5e88809"
/>

Crafting menu:

<img width="266" height="454" alt="image"
src="https://github.com/user-attachments/assets/cc480ee6-0e0d-4055-93c3-e5a1c4e0687c"
/>

<img width="409" height="211" alt="image"
src="https://github.com/user-attachments/assets/41970a43-1ba8-4898-a96c-deb87a05a409"
/>

<img width="409" height="211" alt="image"
src="https://github.com/user-attachments/assets/ffc00874-e330-49eb-8aba-972c6d223a3a"
/>

Pool water:

<img width="680" height="463" alt="image"
src="https://github.com/user-attachments/assets/9abc48b0-8358-46de-89ef-41fc64989787"
/>

<!-- Confirm the following by placing an X in the brackets [X]: -->
- [x] I have read and am following the [Pull Request and Changelog
Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).
- [x] I have added media to this PR or it does not require an ingame
showcase.
- [x] I have tested any changes or additions.
- [x] I can confirm this PR contains no AI-generated content, and did
not use any AI-generated content.
<!-- You should understand that not following the above may get your PR
closed at maintainer’s discretion -->

<!-- List any breaking changes, including namespaces, public
class/method/field changes, prototype renames; and provide instructions
for fixing them.
This will be posted in #codebase-changes. -->

Nope

**Changelog**
<!-- Add a Changelog entry to make players aware of new features or
changes that could affect gameplay.
Make sure to read the guidelines and take this Changelog template out of
the comment block in order for it to show up.
Changelog must have a 🆑 symbol, so the bot recognizes the changes and
adds them to the game's changelog. -->
🆑
- add: 13 colors of lounge chairs can be constructed out of steel and
cloth.
- add: 8 colors of beach umbrellas can be constructed out of rods and
cloth.
- add: Pool tile (and dark pool tile) can be produced at the cutter
machine.
- add: Logistics can now order a crate of bulk swim rings, in 11
possible colors!
- add: For mappers (and admins): there is a new "pool water" entity that
is a nice green-cyan color and contains about 1% chlorine.

---------

Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com>

* Remove Umbrella + Fixes from Port

* Pool Ring Additions

* Buff Fishing Vendor

* grr

* its no longer 2am

---------

Co-authored-by: portfiend <109661617+portfiend@users.noreply.github.com>
Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com>
2026-06-29 08:39:22 -05:00
Delta-V bot db38e48754 Automatic changelog update 2026-06-29 15:27:30 +02:00
MD360 3acbf512be
Borgs must amogus. (#6126)
* We must scream

* +1 License

* Moved to _DV audio

* + Comment

* forgot space
2026-06-29 13:27:10 +00:00
pathetic meowmeow cb956f605f
Use the actual backported engine fix (#6138)
* Revert "I hate submodules. Why did it have to be submodules? (#6117)"

This reverts commit d3b13a6c83.

* from one workaround to another

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-06-29 13:43:52 +02:00
Coryler 2e5db0ee5b Humanoid Appearance mention removal and Restyle early cancel removal 2026-06-29 12:44:23 +02:00
Coryler 14d6a2449a Glimmer Restyle fix as intended 2026-06-29 12:44:22 +02:00
Coryler d207efd604 Glimmer Restyle baldness check 2026-06-29 12:44:22 +02:00
Coryler df48892c77 Glimmer Restyle works 2026-06-29 12:44:22 +02:00
Coryler 7ec3301313 Removing this again... 2026-06-29 12:44:22 +02:00
TNE 52192d4cfb Update RobustToolbox to v275.2.3, remove manual CI Lidgren patch
Includes a fix for 2 DOS attacks. No other changes.
2026-06-29 12:44:22 +02:00
Coryler 78ee68e600 Add one more log Misisng 2026-06-29 12:44:22 +02:00
Coryler 0bfdc24673 Changed Mindbreak Resolve to not log missing 2026-06-29 12:44:22 +02:00
Coryler 475cbeab18 Changed comment for ScaleVisual 2026-06-29 12:44:22 +02:00
Coryler d68cd142a1 Kitsune colors, Glimmer Style Popups, and some Comments 2026-06-29 12:44:22 +02:00
Coryler 79711bc285 Readding the no send condition 2026-06-29 12:44:22 +02:00
Coryler 7a9f718c92 Add Nullptr check 2026-06-29 12:44:21 +02:00
Coryler 5192d4ab03 Spider Leg to Arachnid Leg 2026-06-29 12:44:21 +02:00
Coryler 63d7c592a1 PR Review fulfillments 2026-06-29 12:44:21 +02:00
Coryler 61b980c6e5 Attempt to make the Test work 2026-06-29 12:44:21 +02:00
Coryler 586b71c82a Remove unused Dependency 2026-06-29 12:44:21 +02:00
Coryler e3d0afccf7 Fix Build Errors and Test Build Errors mentioned in Review 2026-06-29 12:44:21 +02:00
Coryler c07c932b6a Yaml Lint Errors 2026-06-29 12:44:21 +02:00
Coryler f8979bbeda Change _DV Tests to new ones 2026-06-29 12:44:21 +02:00
Coryler 91757358b9 Some other Review Things 2026-06-29 12:44:21 +02:00
Coryler 04cd42187a Fix Devil being immune to Holy 2026-06-29 12:44:20 +02:00
Coryler 4099d94344 PR Review Changes 2026-06-29 12:44:20 +02:00
Coryler e90bc7332f Fix Planet Weather crashing, by shoving new grids 150 tiles away. 2026-06-29 12:44:20 +02:00
Janet Blackquill 03fe729471 tidy 2026-06-29 12:44:20 +02:00
Janet Blackquill c62e6a694d remove unused MovementBodyPart 2026-06-29 12:44:20 +02:00
Coryler cb2c2cd719 Dumb Attempt to workaround the Dummysession 2026-06-29 12:44:20 +02:00
Coryler 8ad8ba9199 Attempt to workaround the Dummysession 2026-06-29 12:44:20 +02:00
Coryler ed9d604f9d Stopping ArenaMobs from trying to open People 2026-06-29 12:44:20 +02:00
Coryler 89dd41763b Fix Test Errors realted to wrongly set PowerState variables 2026-06-29 12:44:19 +02:00
Coryler a0ef5b737e Weather: Make Damage Work 2026-06-29 12:44:19 +02:00
Coryler 025991f019 Change HumanoidLayer Test to our Markings 2026-06-29 12:44:19 +02:00
Coryler df073eb57d Moved MovementBodyPartComponent into _DV space 2026-06-29 12:44:19 +02:00
Coryler 74ca68cfe4 Christmas Kobols comment out for now 2026-06-29 12:44:19 +02:00
Coryler f18f591c11 Guide Entry Test skip 2026-06-29 12:44:19 +02:00
Coryler 2628cd07dd Comment out Holo Test, needs one written by us 2026-06-29 12:44:19 +02:00
Coryler 29addda0fe Remove Far Horizon XML Comments... parser hates it 2026-06-29 12:44:19 +02:00
Coryler c6bc55bb41 Forgot one Sharp 2026-06-29 12:44:18 +02:00
Coryler b1288f3f0a Revert "Removed MovementBodyPartComponent (#43257)"
This reverts commit 07a757eea3d71ea5133440aae9928e49f189a2e8.
2026-06-29 12:44:18 +02:00
Coryler 0187242d9d Test missing new 2026-06-29 12:44:18 +02:00
Coryler f0b9b97da8 Reagentgrinder Fix 2026-06-29 12:44:18 +02:00
Moony 6656adc083 Gametest Part 2: Preliminary refactor every test to use GameTest as the framework. (#43207)
* Pass 1.

* i'm FREE

* Prevent hangups.

* okay fine here's an attribute for settings, will polish later and prolly remove the overridable thing.

* sigh.

* fix singular trigger bug so LatheTest doesn't flake.

* Remove SystemAttribute usage.

* Poke

* I used the shotgun. You know why? Cause the shot gun doesn’t miss, and unlike the shitty hybrid taser it stops a criminal in their tracks in two hits. Bang, bang, and they’re fucking done. I use four shots just to make damn sure. Because, once again, I’m not there to coddle a buncha criminal scum sucking f------, I’m there to 1) Survive the fucking round. 2) Guard the armory. So you can absolutely get fucked. If I get unbanned, which I won’t, you can guarantee I will continue to use the shotgun to apprehend criminals. Because it’s quick, clean and effective as fuck. Why in the seven hells would I fuck around with the disabler shots, which take half a clip just to bring someone down, or with the tazer bolts which are slow as balls, impossible to aim and do about next to jack shit, fuck all. The shotgun is the superior law enforcement weapon. Because it stops crime. And it stops crime by reducing the number of criminals roaming the fucking halls.

* Change the faulty store test into two tests, one of which is ignored for failing.
2026-06-29 12:44:18 +02:00
Tayrtahn c7e2660322 Fix ghost time of death (#43411)
* Use RealTime when setting ghost TimeOfDeath

* Don't pause with RealTime

* Oops. Also get rid of AutoGenerateComponentPause
2026-06-29 12:44:18 +02:00
MissKay1994 6314c94994 Greatly reduce spawn rate of salt ore (#43012)
* Disintegrate salt

* Salt is forever

* Forgot to exclude this file
2026-06-29 12:44:17 +02:00
InsoPL 973e404751 Bugfix of Heat distortion shader (#43397)
* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* tile color  vaccum and more comments

* saving yeeted

* integration test

* rename and cleanup

* fix

* cleanup

* switch

* UT fix (hopefully)

* small bug+ rename

* vaccum limit  + space is now invalid

* typo

* typo

* fix

* init, works

* move method around

* renames and split

* renames

* heatblur

* cleanup

* more docs

* resource cache

* No dynamic perlin noise generation [no fun allowed] and new blur softening method

* magic numbers and rename

* misc cleanup

* removed init values because display compat mode broken

* misc cleanup

* bugfix

* fix

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:44:17 +02:00
āda 0958929f64 Reduce speso value of tech disks (#43395)
commit

Co-authored-by: iaada <iaada@users.noreply.github.com>
2026-06-29 12:44:17 +02:00
Chris V. 6795e26843 Lathe Menu Title Enhancement (#43392)
* DefaultWindow -> FancyWindow, use SetInfoFromEntity

* code smell fix
2026-06-29 12:44:17 +02:00
ruddygreat b204c67e90 Remove PDA equip sprites (#40498)
* we have never had pda equip sprites.

* I didn't know the rsi validator would complain about that one tbh

---------

Co-authored-by: ruddygreat <ruddygreat1@gmail.com>
2026-06-29 12:44:17 +02:00
Jessica M dca7952208 Fix changeling transform ability (#42107)
* fix changeling transform

* Add store UI on MapInit instead

* Apply suggestion from @slarticodefast

* Apply suggestion from @slarticodefast

---------

Co-authored-by: Jessica M <jessica@maybe.sh>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:17 +02:00
Tayrtahn 5eee3a5de4 Update RT to 275.2.0 (#43378) 2026-06-29 12:44:17 +02:00
InsoPL 58a5a0469f Heat distortion shader (#42973)
* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* tile color  vaccum and more comments

* saving yeeted

* integration test

* rename and cleanup

* fix

* cleanup

* switch

* UT fix (hopefully)

* small bug+ rename

* vaccum limit  + space is now invalid

* typo

* typo

* fix

* init, works

* move method around

* renames and split

* renames

* heatblur

* cleanup

* more docs

* resource cache

* No dynamic perlin noise generation [no fun allowed] and new blur softening method

* magic numbers and rename

* misc cleanup

* removed init values because display compat mode broken

* misc cleanup

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:44:16 +02:00
Marchy 02e9751013 "Reduce motion of visual effects" now works for blood loss effect (#41878)
* "Reduce motion of visual effects" now works for blood loss effect

* Improve strenght

* Make motion less strong

* Stop motion effect

* cleanup and rebalancing

* fix warning

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:16 +02:00
Gentleman-Bird 81fa41913b Fix: Make clockwork glass grindable (#43371)
make cGlass grindable
2026-06-29 12:44:16 +02:00
Tayrtahn 799dc60fd2 Fix `TrackingIssueAttribute` blocking orgs/repos containing numbers (#43369)
Fix TrackingIssueAttribute blocking orgs/repos containing numbers
2026-06-29 12:44:16 +02:00
slarticodefast 79e519696b cleanup GasPrototype and some other atmos code (#43318)
* cleanup

* fix some localizations

* fix typo

* review and test fix

* rename

* minus one

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:44:16 +02:00
Tayrtahn d9b585051f Update RT to 275.1.0 (#43368) 2026-06-29 12:44:15 +02:00
Tayrtahn c32b082254 Remove `[Virtual]` from some classes that shouldn't have it (#43347)
* Remove [Virtual] from some classes that shouldn't have it

* Back to virtual with you
2026-06-29 12:44:15 +02:00
Velken 4faae65643 [FIX] Moved random manifest back server (#43361)
* moved random manifest back server

* fix ordering
2026-06-29 12:44:15 +02:00
Simon 9b099cc12c Minor fixes to server api ban endpoint (#43355)
minor fixes to server api ban endpoint
2026-06-29 12:44:15 +02:00
Moony 3c48c0129f GameTest part 1 (#43182)
* Ports much of GameTest, minus all the WIP stuff.

* remark.

* EnsureCVar now adds test properties.

* Some cleanup and functionality.

* Ignore broken test. Needs fixed eventually. Also explicit context config.

* TrackingIssue attribute.

* oops

* Pair config attribute.

* Remove SystemAttribute in favor of using the EntitySystemManager dependency collection.

* Ensure idleness.

* More tests for tests.

* More specific failure catching tests.

* Reverse attribute resolution order so suite-wide attributes happen first.

* Get rid of AffectedProperties again because I need to refactor PoolSettings for that.

* Poke

* Final cleanup pass.

* Update Content.IntegrationTests/Fixtures/Attributes/RunOnSideAttribute.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Update Content.IntegrationTests/Fixtures/Attributes/Side.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Update Content.IntegrationTests/NUnit/Utilities/ITestExtensions.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Fixes.

* shut up nunit.

* Make TrackingIssue a bit strict on purpose, so people don't put junk here.

* Update Content.IntegrationTests/Tests/GameTestTests/DisconnectedDependencyTest.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Address.

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2026-06-29 12:44:15 +02:00
salarua f7cde159c5 Change chat straight quotes to curly quotes (#43350) 2026-06-29 12:44:15 +02:00
Tayrtahn 8f69627d43 Update RT to 275.0.0 (#43357) 2026-06-29 12:44:14 +02:00
SnappingOpossum 2b86bdd407 Painting and poster random spawners to entity table spawners (#43270)
Painting and poster random spawners to tables
2026-06-29 12:44:14 +02:00
Tayrtahn b7ac8d2fc3 Fix `SharedCrayonSystem` being both `[Virtual]` and `abstract` (#43339)
Remove [Virtual] from SharedCrayonSystem
2026-06-29 12:44:14 +02:00
Arcane 949a277f79 Fixes ambuzol pills. (#43331)
Fixes ambuzol pills. pp doo kaka
2026-06-29 12:44:14 +02:00
Not-A-Chair 03b20830f5 trico no longer heals when mob is crit, and no longer heals rad (#43293)
* trico no longer heals when mob is crit, and no longer heals rad

Tricordrazine no longer heals when mob is crit and no longer heals radiation damage.

* Inverted crit mobstate -> alive mobstate
2026-06-29 12:44:14 +02:00
slarticodefast cb3554b579 remove all use cases of TimerComponent (#43320)
cleanup TimerComponent
2026-06-29 12:44:13 +02:00
slarticodefast 1ec3aa7248 Update RT to 274.0.1 (#43337)
update RT to 274.0.1
2026-06-29 12:44:13 +02:00
SnappingOpossum a0788d49f8 Move remaining random spawners to entity table spawners (#43324)
Move remaining random spawners to tables
2026-06-29 12:44:13 +02:00
mq 55662b5a5c Flatpack opening uses collision of flatpacked entity (#41849)
* flatpacks openable on tables, ignore ghosts

* suggested changes

* if i stash this im going to forget that a stash exists.

* FINAL final (1)

* FINAL final (2)

* i now understand networking
2026-06-29 12:44:13 +02:00
Kyle Tyo c8d1356446 Correct attribution for /Textures/Objects/mre.rsi (#43328)
Update meta.json
2026-06-29 12:44:13 +02:00
Kyle Tyo 4ff7db897e Fix welders running an additional time when no damage remains. (#43321)
Update RepairableSystem.cs
2026-06-29 12:44:13 +02:00
MendaxxDev 8416a31210 removed PhysicalConstants.ZERO_CELCIUS (#43316) 2026-06-29 12:44:12 +02:00
slarticodefast aad63f460b Fix melee attack sprite rotations (#43307)
fix melee rotation
2026-06-29 12:44:12 +02:00
SnappingOpossum d494434458 Move some simple random spawners to entity table spawners (#43305)
Simple random spawners to entity tables
2026-06-29 12:44:12 +02:00
ProPeperos b6f45dc2b5 Borg charger hitbox changes (#43300)
* Borg chargers no longer rotate

* Orbing your charger NOW
2026-06-29 12:44:12 +02:00
SnappingOpossum bb809cd5a0 Move salvage RandomSpawners to EntityTableSpawners (#43233)
* Move salvage RandomSpawners to EntityTableSpawners

* Spellcheck

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Apply requested changes for spawner

* Move another prob to parent selector

* Why wasn't it that before

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:11 +02:00
Prole 019d934075 Cleaning Blood Footstep Sounds (#43266)
The noises have stopped
2026-06-29 12:44:11 +02:00
Kyle Tyo fdd1d1fb08 DeleteComponentCommand minor cleanup/rename. (#43289)
commit
2026-06-29 12:44:11 +02:00
Ben Dake 5b7c1b2c8e Fix thermomachine guidebook typo (#43285)
Fix typo
2026-06-29 12:44:10 +02:00
Princess Cheeseballs 196a26a5ca Fix Airtight Explosion Cache (#43276)
fix explosions

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:44:10 +02:00
Vladislav Suchkov 7addfbec77 Tech disk resprite and pricing changes (#37719)
* init

new disks are in. can be spawned or printed. no weights or correctly bound techs yet.

* tweak textures and naming

* make tech disks respect their tier and discipline

* make tech console respect tier weight

* yml fixes (forgo a million things)

* meow :3 reworked to use GenericVisualizer

* moved staticPrice comp to shared to support different pricing per tier

* unhardcoded prices; tweaked log messages

* cleanup

* a few fixes

* updated pricing to match weights

* lowering prices I forgor how many of them science can print

* what

* t3 texture, logger, factory

* move PriceCalculationEvent & EstimatedPriceCalculationEvent to shared

* remove static price comp; use EntProtoId for disk proto

* moved staticPrice comp back to server

* cleanup: price event, visualizer enums & yml

* ummove PriceCalculationEvent

* ummove PriceCalculationEvent attempt #2

* more unmoving

* fixes

* predict onExamine

* review changes

* small cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:10 +02:00
ConstantlyConfused 909f0e49ab Make the chem guidebook show when chemicals adjust body temperature (again) (#42394)
Make chem guidebook show adjusttemperature effects
2026-06-29 12:44:10 +02:00
Tayrtahn 2a9b640fc6 Update RT to 274.0.0 (#43261) 2026-06-29 12:44:10 +02:00
Moony b6d8de1258 Add test result archiving to our test actions + Test fixes (#43175)
* Add test result archiving to our test actions.

* heck.

* Don't waste tremendous amounts of storage.

* Fix ReagentDataTest.

* Reduce retention and increase compression on integration output.

* Back to 7 days, depend on RT instead.

* Poke.

* Fix linter.

* til.

* Actually send YAMLLinter's pair messages into the void.
2026-06-29 12:44:10 +02:00
ArtisticRoomba d1c86ee235 Fix floating point tilefire nonsense (#43263)
* Change method call and epsilon

* holy guacamole
2026-06-29 12:44:10 +02:00
ScarKy0 a1b69294b2 Revert "Xenoborg extractor (#42796)"
This reverts commit 7f15e77954.
2026-06-29 12:44:10 +02:00
WS01 c2c3ff8c1a Removed MovementBodyPartComponent (#43257) 2026-06-29 12:44:09 +02:00
slarticodefast 42113bb30b Fix reagent grinders on dev map (#43253)
fix grinders on dev map
2026-06-29 12:44:09 +02:00
slarticodefast c7077a388c Predict reagent grinder (#42815)
* prediction!!!

* fixes

* fixes and add debug logs

* fix prediction and cleanup

* raise event on client + comp access

* reapply power state changes

* Update Content.Client/Kitchen/EntitySystems/ReagentGrinderSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Kitchen/Components/ReagentGrinderComponent.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* comments and prefilled grinder protos

* t

---------

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:44:09 +02:00
ScarKy0 1a7cb0c510 Revert "Remove salv stuff from mothership (#43007)"
This reverts commit eea773ffee.
2026-06-29 12:44:09 +02:00
Coryler 7e3606ae6b Readd old StatusEffect 2026-06-29 12:44:09 +02:00
Coryler 398712ee12 Rename some Shadow to Soul
Meh

Ok... :/

Test attempt fix

Another Attempt to fix, the null ref

Another Attempt to fix :/

argh

I would really hatre if this is the solution

Try to find null ref

Searching for the fix
2026-06-29 12:44:09 +02:00
Coryler b84df1993c Change Metabolism of newly reagents 2026-06-29 12:44:09 +02:00
Coryler 6f16d07fa0 Revert "Remove loadout time towels (#42536)"
This reverts commit b3ddf57affd43fa952dbae6b7439a881026191bb.
2026-06-29 12:44:09 +02:00
Coryler 75c59ba997 Change PostMapInit Path to our actual maps 2026-06-29 12:44:09 +02:00
Coryler dedfa69f7f Removing last yml errors 2026-06-29 12:44:09 +02:00
Coryler 4caaeba72c Revert this back to Component Registry 2026-06-29 12:44:08 +02:00
Coryler 35f4533a7f Change some of hte old values back 2026-06-29 12:44:08 +02:00
Coryler ac3793dafc This oughta fix it 2026-06-29 12:44:08 +02:00
Coryler 0de4c1646a More Migration 2026-06-29 12:44:08 +02:00
Coryler 772c004c48 Restore rebased removed actions 2026-06-29 12:44:08 +02:00
Coryler b026ded3db Fix weather scheduler attempt 2026-06-29 12:44:08 +02:00
Coryler a9eeb98744 Fix some Build Warnings 2026-06-29 12:44:08 +02:00
Coryler d7b086865b Additional migration mention and briefcase item removal 2026-06-29 12:44:08 +02:00
Coryler 5388e869e4 Fix mroe Build Errors and move Weather Damage into _DV 2026-06-29 12:44:08 +02:00
Coryler 17e5bb87ab Fix Build Errors 2026-06-29 12:44:07 +02:00
Coryler da45e22ffe Fix WeatheR Scheduler
Weather still needs work
2026-06-29 12:44:07 +02:00
pre-commit-ci[bot] fcee456397 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-06-29 12:44:07 +02:00
Coryler 0e7c4ecee3 Fix Locale issues. Some yml issues I have no idea how to fix 2026-06-29 12:44:07 +02:00
Coryler c398193cfe Make more Yaml Changes to appease the Linter 2026-06-29 12:44:07 +02:00
Coryler cc5300d1ef More progress against the linter 2026-06-29 12:44:07 +02:00
Coryler 254823df76 Scaling works, some errors killed. 2026-06-29 12:44:07 +02:00
Coryler e1231ab140 Move TotalDamageCondition into _DV along with some other fixes 2026-06-29 12:44:07 +02:00
Coryler 5e7c4ec6e0 Remove DV FeedbackPopup, due to the upstream one 2026-06-29 12:44:07 +02:00
Coryler 7b939bfd28 Fix files for upmerge changes. Notably Nubnody and Damagaeable 2026-06-29 12:44:06 +02:00
Coryler 7d0cbda4e8 Port Species 2026-06-29 12:44:06 +02:00
Kyle Tyo 6f6483f543 Fix bug blocking character saves for species without hair. (#43170)
* Update ServerDbBase.cs

* Update ServerDbBase.cs

* Update ServerDbSqliteTests.cs

* :grumble grumble grumble:

* tests

* Update ServerDbSqliteTests.cs

* commit

* forgot this.

* relocation.

* nope, not doing that lmao

* Update ServerDbSqliteTests.cs

* test rerun

* GAAAAAA

* Update ServerDbSqliteTests.cs

* Update ServerDbSqliteTests.cs

* Update ServerDbSqliteTests.cs

* GAAAAAA

* go fish
2026-06-29 12:44:06 +02:00
Velken 24b56cfe96 Refactor Ion Law string generation (#42629)
* YAMLs your ion laws

* forgot some weights

* this should be it

* comments and DAGD

* improved testing

* addressing review (part 1 out of 2)

* still part 1 :gosomnia:

* part 2

* refactor the refactor

* loc error fluffs

* address review

* weh

* cleanup

* oops

* fix

* more cleaning

* forgot to remove old thing

* prediction

* fix

# Conflicts:
#	Content.Server/Silicons/Laws/IonStormSystem.cs
2026-06-29 12:44:06 +02:00
Centronias a667530e18 Single item cargo orders are delivered in Parcel Wrap instead of crates (#40834)
* - rework a bunch of cargo orders to not send a crate with just one thing
  - instead sends the item, wrapped
- add ability for cargo orders to wrap the item ordered in parcel wrap
- cargo order name and descriptions are now localization strings, but still 99.99% of the time just get that info from the entity they're spawning
- small refactor to how cargo orders move around in cargo code so that the actual order proto is kept around longer
- small rework to certain restock cargo orders to halve the cost and number of items received in one order

* oop

* Suffering

* Arbitrary containers for cargo products

* I ran the tests locally and they passed, github please rerun :)

* massage Slarti's work into this.
Mainly by taking the API wrapping ability out back with the rifle q-q

* testfail fake

* wow `_applyingState` is useful, I wonder where I should've been using that in other PRs before :^)

* pr comments

* tfw the hook doesn't update the submodule

* Update Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs

Co-authored-by: āda <ss.adasts@gmail.com>

* PR comments

* fixies

* Update Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs

* Update Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.WrappedParcel.cs

* fix wrapped parcel entity name + audio

* Actually read PR comments

* Apply suggestions from code review

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

---------

Co-authored-by: āda <ss.adasts@gmail.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
2026-06-29 12:44:06 +02:00
Diego Lobo dfb76ff520 Update ruined_prison_ship.yml (#43242)
Fixed the ruined prison ship yml 2779 line Destryoed thruster to Destroyed thruster
2026-06-29 12:44:06 +02:00
Tayrtahn cad016ccef Move ID card name/title length limit to server (#43237)
* Validate string lengths serverside

* Organize usings

* Remove clientside check

* Also remove the cvar caching in the UI

It's one dictionary call, Michael. What could it cost?
2026-06-29 12:44:06 +02:00
InsoPL ee62de4c20 Refactor: Gas tile overlay split (#42881)
* yeah

* split2

* well

* cleanup

* docs fix

* Dependency cleanup

* Update Content.Client/Atmos/EntitySystems/GasTileFireOverlaySystem.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileVisibleGasOverlay.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileVisibleGasOverlay.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* yup

* modifying a lot anyways

* other cleanup

---------

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:44:06 +02:00
InsoPL 8e6ab360e2 CachedResources for GasTileDangerousTemperatureOverlay (#43032)
* init

* minifix

* that is nullable

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:44:05 +02:00
B_Kirill 607abc0b41 Cleanup warnings: CS0168, CS0414 (#43198)
* Cleanup warnings: CS0168, CS0414

* That was the right thing to do

* Please tell me that this is a random fail

* ...

* last try

* revert
2026-06-29 12:44:05 +02:00
Moony 4e4e6e13a2 Content-side IRobustRandom cleanup. (#43231)
* Content-side fixes for engine IRobustRandom rejig.

* Define for ensuring SetSeed works.

* Poke.

* Poke

* Poke.
2026-06-29 12:44:05 +02:00
themias f06a3a695d Add a holy light effect to bible healing (#43189)
* save

* remove unneeded event

* Revert "remove unneeded event"

This reverts commit 779ec783094144ca978a5e9d111235e29539e8a3.

Revert "save"

This reverts commit f88e0ab18b253915f5efde5886a4701a73ffa35a.

* Use simple light effect entities with TimedDespawn
2026-06-29 12:44:05 +02:00
SnappingOpossum e8ffd71067 Make EntityTableSpawner spawn relative to grid instead of map (#43234) 2026-06-29 12:44:05 +02:00
Crude Oil 0d5d7f6745 Fix missing word from emitter alerts (#43225)
* fix emitter yapping

* use actual locid objects
2026-06-29 12:44:05 +02:00
Taser 6398bb8080 fix bottle reagent localization (#43208) 2026-06-29 12:44:05 +02:00
Princess Cheeseballs 733d479425 Move a metric fuckton of AtmosphereSystem to Shared. (#42989)
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* fix the tests I broke

* Remove methods that the client shouldn't be calling. Hamburger.

* light cleanup for now

* review

* whoop

* docs updates and misc changes

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:44:04 +02:00
Velken 6195c9982a [Fix] Silicon Ion Law Scramble Text (#43229)
scramble noises
2026-06-29 12:44:04 +02:00
Moony 56210a7d94 Removes a test that handles engine behavior in content. (#43228) 2026-06-29 12:44:04 +02:00
Centronias 0e884decd5 Make test runnable on windows in debug config again (#43227)
tfw ur fs isn't posix compliant
2026-06-29 12:44:04 +02:00
Centronias 36c7e7b194 Wrapped parcels can go into mail carts (#43226)
wrapped parcels can go into mail carts

yeah, it technically allows wrapped humanoids to get in there too, but how're you gonna get something you can't pick up into inventory storage?

Also YEAH technically this allows arbitrage of carrying a ton of stuff in the mail cart, but that's no so different from just carrying a ton of stuff around in a trash cart and this at least has the cost of a bit of parcel wrap. I will tolerate no dissent
2026-06-29 12:44:04 +02:00
Tayrtahn dbd84ad839 Update RT to 273.0.0 (#43130) 2026-06-29 12:44:04 +02:00
slarticodefast de82d72c34 Revert "Support for melee weapon user overrides" (#43106)
Revert "Support for melee weapon user overrides (#39633)"

This reverts commit 18149dbb3b.
2026-06-29 12:44:04 +02:00
Simon 61cd13a470 Add banning to server api (#43205)
add banning to server api
2026-06-29 12:44:03 +02:00
Geekyhobo 6ff6978636 Add DB Config to development.toml (#43036)
add db config development.toml
2026-06-29 12:44:03 +02:00
ScarKy0 9b5a09e8a8 Vent Hordes (#43047)
* init

* port hostiles to hordes, fakeout horde

* cleaning, docs

* i may be blind sometimes

* i may be even blinder

* remove friendly announcements

* fuck it

* i love microbalancing

* review

* review

* review p2

* Update Resources/Prototypes/GameRules/pests.yml

Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>

* review + powercreep

* lower the times to account for the gamerule delay

* review

* review

* fuck this return actually

* fial

---------

Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>

# Conflicts:
#	Resources/Prototypes/GameRules/pests.yml
2026-06-29 12:44:03 +02:00
ArtisticRoomba 86c4c900eb Atmos YAML-defined gas flammability, flammability API (#43165)
* atmos masked flammability/API

* on that oomba pac

* yuuup

* resolve todo and review

* rename
2026-06-29 12:44:03 +02:00
Tayrtahn f27bf8b218 Add a basic API to `JukeboxSystem` (#42896)
* Add a basic API to JukeboxSystem

* Update Content.Shared/Audio/Jukebox/SharedJukeboxSystem.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Remove pointless Dirty

* Move SetSelectedTrack Dirty inside if block

* logMissing: false

* Remove pointless Audio.Stop call

* Poke tests

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:03 +02:00
Tayrtahn efa47d601c Update `NodeHelpers` and `Node.GetReachableNodes` to use `Entity<TransformComponent>` and `Entity<MapGridComponent>` (#37734)
* Add overloads for NodeHelpers methods, obsolete old ones

* Pass in SharedMapSystem instead of IEntityManager

* Change GetReachableNodes signature, deal with aftermath

* Allow non-grid nodes

* Change GetReachableNodes to also take Entity<TransformComponent>

* Remove vestigial ReSharper hint

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

* Formatting

---------

Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
2026-06-29 12:44:03 +02:00
Moony 6db5d7860a Refactor MobThresholds and Stamina tests. (#43156)
Add 561 more tests.
2026-06-29 12:44:03 +02:00
Moony b26a9735aa Reactions test cleanup. (#42979)
* Make TryAllReactionsTest use a scrounged reagent list.

* naming

* Poke
2026-06-29 12:44:02 +02:00
Moony 35177173e2 Add exception tolerance to SharedDoAfterSystem. (#43088) 2026-06-29 12:44:02 +02:00
Moony 79590e2a69 Refactor construction tests (#43155)
Introduce 2681 more tests.
2026-06-29 12:44:02 +02:00
Moony 43f8a9d395 Refactor Device Linking tests. (#43157)
* Add 416 more tests.

* fixes.
2026-06-29 12:44:02 +02:00
Moony bc5b6299a6 Refactor explosion prototype tests. (#43158)
Add 9 more tests.
2026-06-29 12:44:02 +02:00
Moony 13900c9ffb Refactor guide entry tests. (#43159)
* Add 204 more tests.

* better plan.
2026-06-29 12:44:02 +02:00
Moony 5aec92445a Patch for engine ComponentFilter (#43168)
* Patch for engine ComponentFilter

* Poke
2026-06-29 12:44:02 +02:00
Red 4186c8caa2 Weather entities (#41427)
* weather status effect entities

* proto port + fixes

* Update weather.yml

* fix visuals

* Update SharedWeatherSystem.cs

* Update SharedWeatherSystem.cs

* Update WeatherSystem.cs

* Thanks Slarti, thats a much better

* Update WeatherSystem.cs

* Update StencilOverlay.Weather.cs

* Update Content.Client/Overlays/StencilOverlay.Weather.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Shared/StatusEffectNew/Components/StatusEffectComponent.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Update Content.Client/Overlays/StencilOverlay.Weather.cs

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>

* Revise weather command help descriptions

Updated weather command help texts for clarity.

* Merge branch 'master' into ed-14-11-2025-weather-entities

* Tayrtahn review apply

* fixes and cleanup

---------

Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:02 +02:00
Moony e2a2f0c969 Make map tests more fine-grained. (#42977)
* Make map tests more fine-grained.

* ..typo.

* fix example

* exclude Empty.

* Adjust a scrounger test & fix it.

* It does respect ignored prototypes, after I realized making it do so was really easy.

* Fix it for real this time.

* General scrounger enhancements for a GameRules test set.

* Fix linter for real.

* Address reviews.
2026-06-29 12:44:02 +02:00
Coco 886b33ce40 Nukie guidebook improvements (#43131)
* improve nukie guidebook (getting to the station, arming procedure)

* removed show vessel from IFF Computer guidebook text
2026-06-29 12:44:01 +02:00
Rachel Lowe 1d3617ad6a Fixing issue 42759, air grenades cannot be re-triggered. (#42866)
Fixed #42759 - air grenades cannot be re-triggered
2026-06-29 12:44:01 +02:00
Tayrtahn e844139061 Mix xenoborg_scream.ogg to mono (#43132) 2026-06-29 12:44:01 +02:00
alexalexmax da240861a4 PinpointerSystem&Component cleanup (#42463)
* cleanup

* make some stuff nullable again

* Apply suggestions from code review

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* fix and remove a dependency

---------

Co-authored-by: seanpimble <149889301+seanpimble@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:01 +02:00
pathetic meowmeow f889c9f817 Initial decoupling pass on Damageable (#43103)
* Initial decoupling pass on Damageable

* ope

* e

* mroaw

* ok sure on the medibot thing

* no medibot bounds

* okidooks

* arcryox era

* cryox moment
2026-06-29 12:44:01 +02:00
August Sun 1416f45199 Brings Estoc DMR accuracy to standard rifle accuracy, removes movement speed debuff (#43038)
* Removed accuracy and move speed debuffs for estoc

* introduced slight speed reduction

* typo

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2026-06-29 12:44:01 +02:00
neomoth d4ef9dc0c6 Small tippy fix + msg toolshed additions (#43082)
* why is this not how it worked already fml

* better tippy checking
2026-06-29 12:44:01 +02:00
Shegare b28568d2da HTNComponent from SharedNPCSystem (#42750)
* init

* move system

* doc
2026-06-29 12:44:01 +02:00
Samuka 2438155aa7 Remove salv stuff from mothership (#43007)
* verb category

* voltage toggle comp

* move stuff

* add simple prototype

* implement verb action

* switch expression

* fixed the node not updating

* charge the battery

* fixed battery not charging

* spawn on battery level system

* finally works

* swap commentary position

* can only anchor the extractor on the station

* popup message for trying to anchor outside of station

* default placement for unanchored version

* ops

* fix body type

* commentary

* update visuals of power consumer

* add custom sprite

* fix light layer not changing

* xenoborg circuit

* fix xenoborg circuit

* add tag

* add hand to hold xenoborg circuits

* move to material

* add xenoborg circuit material

* add recipe to mothership core

* add a hand to hold circuits to the mothership core

* to not confuse

* update

* ops

* another ops

* update mothership

* update guidebook

* update values

* more info

* fix stack

* can store xenoborg circuits

* description

* also update description

* circuit -> crytal

* not modified from anything

* update description

* Revert "update mothership"

This reverts commit 84974c56afadac2a99ed2a166244a668d83fff48.

* update empty label

* small update to sprite

* not necessary code

* remove empty line

* color

* make it explode when destroyed

* change values

* update sprite

* update sprite

* make it eletrified

* flavor text

* simplify to only use charge

* subscribe to event

* new line

* remove popup

* no need for the setter

* no longer networked

* update mothership
2026-06-29 12:44:01 +02:00
ProPeperos 0bc411fffd Hyper autolathe now requires the same ammount of manipulators as autolathe (#43109)
hyper lathe now requires the same ammount of manipulators as base lathe
2026-06-29 12:44:01 +02:00
UpAndLeaves ad81feb40c Inventory + Storage toolshed query commands (#40813)
* Add inventory and storage query toolshed commands

* Forgot FTL

* Fix stuff!

* Make requested changes and stop STACK MAX SIZE ERROR

* cleaning

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:44:00 +02:00
deltanedas f0b4c6ef2a add nested entity effects+conditions (#42341)
* add nested effect

* add nested condition

* move api to the main systems and improve effect guidebook text gen

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2026-06-29 12:44:00 +02:00
Pok 74c336597d Support for melee weapon user overrides (#39633)
* redefining-using-melee-weapons

* animation bug fix

* review

* fix merge
2026-06-29 12:44:00 +02:00
Velken 0010296f5d Fix door remotes 2 (#43094)
* fix door remotes

* admeme

* typo

* review

* revert door changes

* tag

* fix highsec and windoors
2026-06-29 12:44:00 +02:00
Tayrtahn a1d74b7573 Add borg construction interaction test (#42359)
* Add test of borg construction.

* Return Validated when in validation mode.

* Update Content.IntegrationTests/Tests/Construction/Interaction/BorgConstruction.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:44:00 +02:00
Jessica M 8c1c79ebd2 Only one puddle sparkle please (#43086)
* only one sparkle please :3

* address review
2026-06-29 12:44:00 +02:00
B_Kirill c845c99680 Fix AtmosDebugOverlay being always active (#43073)
* Fix AtmosDebugOverlay being always active

* review
2026-06-29 12:44:00 +02:00
Pharaz4 430da243b7 yaml format nitpick (#43074)
* minor nitpick

* fix mistake

* clean up
2026-06-29 12:43:59 +02:00
Tayrtahn 59ad40f5c9 Fix "Unknown messageId" warnings from ID cards (#42886)
* Empty string bad

* Preserve existing behavior
2026-06-29 12:43:59 +02:00
Sir Warock 4776c8b45f Fixed Mining Hardsuit Helmet Name + Added Internals to Crates (#43072)
* One commit ops

* Removed extra line
2026-06-29 12:43:59 +02:00
ScarKy0 c949508aa7 [STAGING] Innate prying tooltip (#43081)
Update alerts.ftl
2026-06-29 12:43:59 +02:00
AffleWaffle 48f525c0da APC building doAfter fix (#43089)
Add doAfter to APC construction
2026-06-29 12:43:59 +02:00
slarticodefast f5083ad524 fix topicals (#43087) 2026-06-29 12:43:59 +02:00
slarticodefast 2a01f421fa use proxy methods in EntitySystems (#43083)
use proxy methods
2026-06-29 12:43:59 +02:00
slarticodefast cc0a3befdd Fix damagable mispredicts (#43080)
fix
2026-06-29 12:43:58 +02:00
Hitlinemoss b34cef50c6 Removed rollerskates & clown-outfit cargo bounties; reduce pancakes needed for pancake cargo bounty (#42899)
* Removed rolerskate & clown-outfit cargo bounties; reduce pancakes needed for pancake cargo bounty

* adjusted tag comments

* forgot to temove rollerscates bounty item locale
2026-06-29 12:43:58 +02:00
IProduceWidgets b21ce37b5f Revenants cannot be stuck with plastic explosives (#42889)
* no touchy!

* Apply suggestion from @slarticodefast

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:43:58 +02:00
Velken 6bdcda5456 [Fix] Door remote fixes (#43063)
* fix door remotes

* admeme

* typo

* review

* revert door changes

* tag
2026-06-29 12:43:58 +02:00
eoineoineoin 46cc3f7e7c Remove unused noise texture (#42970)
Remove unused asset
2026-06-29 12:43:58 +02:00
beck-thompson 02bb8c25cb Add xenoborg gun sprites (#43013)
xenoborg gun sprites
2026-06-29 12:43:58 +02:00
ScarKy0 c486156c3d Fix Makeshift Juicer Crafting (#43075)
i hate it her
2026-06-29 12:43:58 +02:00
Connor Huffine cd659fef02 Throwing Croissant Incorrect Inhand Removed (#43066)
* Remove inhand sprite

* Add comment
2026-06-29 12:43:58 +02:00
Connor Huffine 5e75623091 Reparent White Gilgamesh (#43065) 2026-06-29 12:43:57 +02:00
Connor Huffine b614ffb90d Change Bad Chembottle Suffixes (#43064)
Change Suffixes
2026-06-29 12:43:57 +02:00
Samuka a3e9625a48 Xenoborg extractor (#42796)
* verb category

* voltage toggle comp

* move stuff

* add simple prototype

* implement verb action

* switch expression

* fixed the node not updating

* charge the battery

* fixed battery not charging

* spawn on battery level system

* finally works

* swap commentary position

* can only anchor the extractor on the station

* popup message for trying to anchor outside of station

* default placement for unanchored version

* ops

* fix body type

* commentary

* update visuals of power consumer

* add custom sprite

* fix light layer not changing

* xenoborg circuit

* fix xenoborg circuit

* add tag

* add hand to hold xenoborg circuits

* move to material

* add xenoborg circuit material

* add recipe to mothership core

* add a hand to hold circuits to the mothership core

* to not confuse

* update

* ops

* another ops

* update mothership

* update guidebook

* update values

* more info

* fix stack

* can store xenoborg circuits

* description

* also update description

* circuit -> crytal

* not modified from anything

* update description

* Revert "update mothership"

This reverts commit 84974c56afadac2a99ed2a166244a668d83fff48.

* update empty label

* small update to sprite

* not necessary code

* remove empty line

* color

* make it explode when destroyed

* change values

* update sprite

* update sprite

* make it eletrified

* flavor text

* simplify to only use charge

* subscribe to event

* new line

* remove popup

* no need for the setter

* no longer networked

* feedback popups

* Minor tweaks

* better to understand

* better now?

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2026-06-29 12:43:57 +02:00
slarticodefast 38ae6416cd Raise SolutionChangedEvent and SolutionContainerChangedEvent when handling SolutionComponent states (#42814)
raise event on client + comp access
2026-06-29 12:43:57 +02:00
Samuka a885d981b4 Dynamic feedback popup (#43021)
* add rule filter to feedback popup

* fix the dependency

* simplify

* remove this

* deny popups with rules

* missed here

* new parameter

* the server handles the specific feedback prototypes

* fix logic

* active > added

* minor fixes

* not needed anymore

* now it should be back

* not needed

* cleaning

* create system

* forgot to remove this

* also remove this

* add a I

* remove old feedback popups

* doesn't actually fix it

* maybe this time?

* oh well

* use whitelists

* use gamerule added

* update fix comment

* simplify

* old commentary

* default false

* add blacklist option

* fix helper functions

* remove commentary

* who needs those

* orks hates linq

* not needed

* Change linq into foreach

* remove unwanted popups for next rounds

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2026-06-29 12:43:57 +02:00
pathetic meowmeow 8d24c66331 Make sure vox passively regenerate at the same pace as everyone else (#43055) 2026-06-29 12:43:57 +02:00
pathetic meowmeow 190421b7a0 Make DamageableComponent manually networked again (#43054) 2026-06-29 12:43:56 +02:00
Patrik Caes-Sayrs 3b9db7359b Fixed redundant bar sign windows (#42960)
Fixed redundant bar signs

* Fixes the extra bar sign popups bug introduced in #42364
by making BarSignBUI use CreateWindow

* Fixes bar signs placed from Entity Spawn Window
2026-06-29 12:43:56 +02:00
pathetic meowmeow 662e9883a4 Make DamageSpecifier serializable (#43049)
* pt1 damageable refactor

* fixes

* thusd unused

* sparse damagespecifiers

* fix thongs

* aaaaaa

* fix tests

* de-crash
2026-06-29 12:43:56 +02:00
TriviaSolari 118d15f943 Fix Holosign Placement (#42909)
* Holosigns now spawn facing player direction

* Holosigns face south

* Snap holosign to grid and attach to clicked entity

* Back to setting local rotation to zero

* No need to snap to grid

* rifts

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:43:56 +02:00
Redrover1760 e77c72721f StrippableComponent timespan calculation fix (#43022)
* timespan calculation fix

* Update Content.Shared/Strip/Components/StrippableComponent.cs

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2026-06-29 12:43:56 +02:00
eoineoineoin f1e989a7e8 Stop AI knocking on shutters, blast doors (#42972)
Stop AI interacting with shutters
2026-06-29 12:43:56 +02:00
OrbitSystem07 874b116376 Fix hypodart uplink description (#43035)
fix
2026-06-29 12:43:55 +02:00
ScarKy0 b8753aebf0 Add transfer entity to mind events. (#43020)
* init

* stuff

* to

* BeforeEvents

* comment

* docs

* Update Content.Shared/Mind/Components/MindContainerComponent.cs

Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>

---------

Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
2026-06-29 12:43:55 +02:00
Velken cc5ac54c31 Make HasMind not always false for client. (#43033)
* it hasmind but i don't

* potatoe potato

* reading is hard

* still can't read

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:43:55 +02:00
ScarKy0 33cbea1883 Give borgs default prying (#41812)
* init

* 1.5

* remove powered

* CompBorgModules, prying alert

* give to NT borgs and derelict borgs

* review

* review 2

* comment
2026-06-29 12:43:55 +02:00
korczoczek 6e91ec0e36 Fix repeated Localization warnings when viewing the Power Monitoring Console (#43037)
no double work
2026-06-29 12:43:55 +02:00
blueDev2 911a137303 Add TriggerOnRot Component (#42667)
* Add TriggerOnRot Component, and related systems and events

* Move around components and events to proper namespaces

* Improve TriggerOnRotComponent Comment

* fix a bunch of imports

* Change BeginRottingEvent to a ByRefEvent record

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:55 +02:00
DaturoDewitt 4febe39deb Lizard rehappy alternative (#42915)
* new lizard laugh

* typo

* replaced sound with alternative lizard_happy.ogg
adjusted attributions.yml

* Update attributions.yml

Since my friend uses Logic Pro X commercially and paid for
the license, he can freely use the provided samples in his own audio
projects. The resulting lizard_happy.ogg is a combination of multiple
samples transformed to achieve the correct sound, using an original
lizard laugh as reference.

* Add source link for lizard_happy.ogg attribution

Added source information for lizard_happy.ogg.

* update sound

* wtf is a laser raptor

---------

Co-authored-by: Velken <8467292+Velken@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:43:54 +02:00
Moony f421221a00 Non-obsoletion warnings as errors in Release. (#42983)
* Non-obsoletion warnings as errors in Release.

* Add two other obsoletions related to collection expressions.
These are not present in the codebase, but may become so in the future.

* Exempt NU1903 so the project can't mysteriously stop building.

* Fix some FULL_RELEASE mistakes.

* diff fix

* Resharper caught this one. Note to self: Wire up resharper to CI in another PR.
2026-06-29 12:43:54 +02:00
KeTuFaisPiKiNut 94a329fb5c EMP implant uplink texture (Addresses #42008) (#42998)
set emp implant texture in uplink catalogue to emp_disable particle

Co-authored-by: nomdéraisonnablementlong <you@example.com>
2026-06-29 12:43:54 +02:00
Alzore 52d3e637b8 Remake the "Vegan Meatball" salvage wreck (#42994)
* remake vegan meatball, fix lingering plant enemies

* attempt to remove non-salv ruleset enemy spawns
2026-06-29 12:43:54 +02:00
SlamBamActionman d9fbc88a20 Add unlockable reporter cosmetics (#41079)
* Initial commit

* Lower the requirements slightly

* Revert vox displacement fix for another PR
2026-06-29 12:43:54 +02:00
Princess Cheeseballs 78ec8d4664 Predicted Networked Metabolism (#42798)
* PredictedRandom Helpers

* predicted networked metabolism

* ssadasfsa

* AAAAAAAAAAAAAAAAAAAAAAAA

* remove debug

* oopsies

* its inclusive of 0 fool

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:54 +02:00
eoineoineoin 50756353b1 Improved camera static shader randomness (#42968)
Improved static shader
2026-06-29 12:43:54 +02:00
lyxcaster 13cedc593b Make prescription glasses actually work (#42990)
* Made prescription glasses actually correct your vision

* Makes prescription glasses actually correct your vision

* Bug fix

* Bug fix

---------

Co-authored-by: lyxcaster <mser956@gmail.com>
2026-06-29 12:43:54 +02:00
Samuka 420f851644 More xenoborg names (#42984)
* more names

* update count

* ops

* whitespace

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2026-06-29 12:43:54 +02:00
beck-thompson 7b66f04a65 Add hand label blacklist (#42986)
* Add blacklist to hand labeler

* Add comments

* Nullable
2026-06-29 12:43:53 +02:00
slarticodefast 31d6da207a Show fuckrules usage to admins (#42988)
* fuck rules

* extreme

* update comment

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:43:53 +02:00
robinthegirlthing 86b53d7270 update basic operative bundle contents (#42930)
modify bundle contents

Co-authored-by: robin <robilythefoxxo@gmail.com>
2026-06-29 12:43:53 +02:00
Coryler b3b0962493 Move Vulp Sneeze into emotes_speech of _DV 2026-06-29 12:43:53 +02:00
ScarKy0 822efc1010 Vox, Diona and Vulp Unique Sneezes (#42929)
* *sneezes!

* fix, quieter vulp sneeze, vox sneeze

* even quieter vulp sneeze

* vulp sneeze attribution

* adjust vox sneeze source
2026-06-29 12:43:53 +02:00
Patrik Caes-Sayrs 516c3f4840 Added Emp interaction with Bar Sign (#42950)
* Added Emp interaction with Bar Sign

There was already content for emp bar sign but no support for it.
This adds the interaction with emps to make bar signs EmpDisabled.

* Emp BarSigns stylistic change

* Fixed redundant bar signs

Fixes the extra bar sign popups bug introduced in #42364

* Block bar sign UI when emped

* Revert "Fixed redundant bar signs"

This reverts commit 23168bb503bcf267ac553eff9ac9674bf28adb4b.
2026-06-29 12:43:53 +02:00
Pgriha 812dd3cdfc New moth emote. Flaps wings! (#42912)
* frfrfrfr

* mh-

* brbrbrbrbr

* small cleanup

* third category time

* removing ReptilianBodyEmotes

* Revert "removing ReptilianBodyEmotes"

This reverts commit 10200c4292a79932109ce2df6b642bcd88e863e0.

* Revert "third category time"

This reverts commit cf62c425b5db93ba4108b8283361623f2f4ad345.

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-06-29 12:43:53 +02:00
Princess Cheeseballs 4eb3544a4f Fix reagent duplication from vomiting (#42954)
no more reagent duplication

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:52 +02:00
nekokiwa bd4d2afb9c fixed barber scissors misgendering when blocked by a hat (#42948) 2026-06-29 12:43:52 +02:00
Steel e3858e5619 Fix jetpacks not turning off when switching to another jetpack (#42689)
Initial commit
2026-06-29 12:43:52 +02:00
Synthestra 23f1e31773 Fix Thieving Beacon not detecting HUDs for said objective (#42945) 2026-06-29 12:43:52 +02:00
ScarKy0 0130273a54 Fix uncooked animal proteins metabolism (#42942)
* Update toxins.yml

* poison!!!!

* I hate solutions sytem I hate solutions sytem I hate solutions system

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:52 +02:00
Le-Arctic-Fox 0cc560e036 Change basic viper magazine to high capacity in operative bundle (#42927)
* changed atmos fire suit to engineering contraband

* changed normal pistol mag to extended in basic op bundle

* yes

* yes
2026-06-29 12:43:52 +02:00
TriviaSolari 26d1b95412 AI can now read papers and envelopes (#42926)
* AI can now read papers and envelopes

* Move whitelist component from BasePaper to Paper
2026-06-29 12:43:52 +02:00
ScarKy0 ea0f87b6c8 Fix paradox clones having default voice and pronouns (#42923)
fix
2026-06-29 12:43:52 +02:00
Leah 05953b8c40 Identity Mask now updates equipped Agent ID name (#42772)
* add identity mask updating agent id functionality

* fix indentation

* add check for voice mask item

* use ChangeIDName field instead

* Minor cleanup

* remove trycomp

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2026-06-29 12:43:52 +02:00
Princess Cheeseballs 89f1f96f6d Fix Flares dying after 10 seconds. (#42765)
asdas

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:52 +02:00
Leah 68b6d5aec4 Fix chameleon controller not updating fake mindshield action icon (#42900)
fix chameleon controller not updating fake mindshield action icon
2026-06-29 12:43:51 +02:00
Leah 1f6237f75f fix: cleaning evidence off a person no longer reveals their true identity (#42868)
fix cleaning evidence revealing your true identity
2026-06-29 12:43:51 +02:00
Minemoder5000 65df262bff (Re)Add sneezing emote. (#41479)
achoo
2026-06-29 12:43:51 +02:00
alen 2ac27401ca Add Missing IntercomAssembly Components (#42821)
* add missing components to assembly

* use inheritance
2026-06-29 12:43:51 +02:00
Rachel Lowe 0c759150da Regular bots are now repaired gradually, just like borgs (#42878)
Instead of one long doafter, it's a bunch of smaller doafters. See https://discord.com/channels/310555209753690112/1470704102173315143
2026-06-29 12:43:51 +02:00
B_Kirill 4db7a5eb52 Cleanup warnings: CS0114, CS0414, CS9107 (#42859)
* Cleanup warnings: CS0114, CS0414, CS9107

* I shouldn't trust IDE autocorrection
2026-06-29 12:43:51 +02:00
ArtisticRoomba d974b15abb Fix gas filter always outputting 20C filtered gas (#42876)
ingenious!
2026-06-29 12:43:51 +02:00
Aearo-Deepwater 474d431924 Slat tiles and decals (#37832)
* Add two varieties of steel vertical slat tiles

* Add dark and white variants of vertical slat tiles

* Add dirt decals

* Add vertical overlay decals

* Add single and double vertical slat decals

* Add steel, dark and white horizontal slat tiles

* Improve single vert slat decals

* Add horizontal slat dirt decals

* Add horizontal slat tile objects

* Add horizontal tile cutter recipe

* Add horizontal slat overlay decals

* Fix inconsistent tile naming

* Add horizontal single and double slat decals

* Fix incorrect slat decal

* Fix two off-color pixels on dark slat tiles

* Change slat tile naming

* Add single-slat overlays

* Smooth tile borders and normalize palette

* Update decals to match tile changes

* Update attributions

* Add missing stack locale lines

* Fix and clean up merged file

* Change slat footstep sounds to be consistent with other steel tiles

As far as I can tell, regular steel tiles use FootstepFloor, (except when
they don't,) and Dark and White variants use FootstepTile.

* Fix confusing merge conflict mismerge

* Remove merge conflict cruft

I have no idea how I missed that.

* Add tile stack prototypes

* Fix slat tile stack localization string refs

* Fix slat tile prototype indentation

* Remove tiles that are identical under rotation

* fix yaml header convention

* Parent slat tiles to common steel tile parent

* Whitespace fix

* Un-de-normalize prototype field ordering

* Fix whitespace

* Re-fix indentation

For some reason, I un-fixed this a little while back. No idea why.

---------

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
2026-06-29 12:43:51 +02:00
Coryler ec2c7dd76b Add missing Cd mention in Profile 2026-06-29 12:43:51 +02:00
pathetic meowmeow 63fea071c5 Ensure profile loading only returns valid species (#42842)
* Ensure profile loading only returns valid species

* punt conversion logic outside of the database
2026-06-29 12:43:50 +02:00
Coryler 84bf9e4e87 Moved DV Traits into the right file 2026-06-29 12:43:50 +02:00
portfiend f279c9abeb Split HumanoidProfileEditor.xaml.cs into separate files (#42715)
* separate humanoid profile editor into different files

* move this to the rest of the fields
2026-06-29 12:43:50 +02:00
Coryler a44be92c0c Move vulp yawn mentions to _DV folder 2026-06-29 12:43:50 +02:00
ScarKy0 6146554bc5 Vulpkanin Yawns (#42768)
* im eepy too

* softer sound

* Revert "softer sound"

This reverts commit 51b3b7b2d4c741f8abc6d361319a5b44d9593d8d.
2026-06-29 12:43:50 +02:00
Hitlinemoss ade454d76d Minor tweaks to Urist names (#42791)
Tweaks to Urist names
2026-06-29 12:43:50 +02:00
MidoriKurage 6ae985a4b5 fix: APC sprites stuck in fully drained states on round start (#42852)
* Fix APC incorrect charge state caused by race condition on map startup

* fix: Defer the update from ChargeChangedEvent to next tick
2026-06-29 12:43:50 +02:00
InsoPL 43e8ac5dde Thermal vision overlay for admins (#42812)
* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* admin button

* cleanup

* sandoboxenabled

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:50 +02:00
TriviaSolari a074566940 Fix RCD not being able to place hull tiles in space (#42740)
Fall back on player's grid if RCD is clicked on empty space
2026-06-29 12:43:50 +02:00
Kyle Tyo f6a0ccc4a6 Fix(Humanoid): Prevent skin color verification failures due to precision loss (#42836)
port over uberrations fixes.
2026-06-29 12:43:49 +02:00
pathetic meowmeow ee17a544d2 Documents all the public APIs for Nubody & markings code (#42857) 2026-06-29 12:43:49 +02:00
Kittygyat 0d92860b32 Fixed vox cigarette smoking sprites (#42584)
Fixed vox cigarette sprites
2026-06-29 12:43:49 +02:00
Mora 30dd145305 Animated Vox Tails (#40925)
* Added Animated Vox Tails

* Extra cleanup

* Missing Pixels

* Missing Pixels

* fix

* Update vox.yml

* Update vox_parts.yml

* Update vox_parts.yml

---------

Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>
2026-06-29 12:43:49 +02:00
kosticia 5268fcec7f Fix some locale that sometimes get ignored by gitignore (#42834)
fix
2026-06-29 12:43:49 +02:00
Aearo-Deepwater 1f6cda5959 Empty Crayon Box (#42837)
Add prototype for empty crayon box
2026-06-29 12:43:49 +02:00
Rachel Lowe 8361dd7e64 Solved #42803 - Syndie contra explicitly has no allowed departments or jobs. (#42820)
Solved #42803
Syndie contra explicitly has no allowed departments or jobs.
2026-06-29 12:43:49 +02:00
SlamBamActionman 43383cbe49 Make conveyors stack items that stop (#42829)
* Initial commit

* formatting

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:49 +02:00
PAFFhassoocks e818cf35d7 Make nukie infiltrator shuttle pinpointer universal (#42101)
replaces pinpointer with universal pinpointer
2026-06-29 12:43:49 +02:00
Matt Idzik 60ce323e5e Fixed containment fields dying even when one side still had power (#41006)
* Containment fields only die if both sides lose power

Currently, if either side of a containment field loses power,
the field dies, even if the other side is still powered. This commit
changes the behavior to only destroy the field if neither side
of the field has enough power.

* discard

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:48 +02:00
Super 73c9c02539 Emitters now give alerts if interfered with. (#39513)
* tesloose alert

* forgot to remove this when I removed naming the unlocker

* and these too...

* migrate to Entity<T> and clarify emitter lines

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:48 +02:00
qwerltaz e3f481510b scale ammonia and nitrous oxide damage with gas quantity (#39591)
buff ammonia and nitrous oxide damage
2026-06-29 12:43:48 +02:00
Dmitry 3ba8f1e28e fixing firelocks (#37523)
* fixing fire locks

* ouch

* Revert "fixing fire locks"

This reverts commit d7c8f9a6e58daf4ba0ec58c38b951613574294bb.

* lol

* opts

---------

Co-authored-by: Dmitry <57028746+dimm00n@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:48 +02:00
slarticodefast 4e628968fe Predict holoprojectors and add an integration test for them (#41569)
* cleanup

* fix fixtures

* prediction

* fix test

* review

* fix svalinn visuals

* fix chargers

* fix portable recharger and its unlit visuals

* fix borgs

* oomba review

* fix examination prediction

* predict holosign
2026-06-29 12:43:48 +02:00
Rachel Lowe 496e2eb410 Chaplains can now choose a custom name (#42819) 2026-06-29 12:43:48 +02:00
John c3c88952e0 fixed vox tail marking and suitslot layer order (#42808)
* fixed vox tail marking and suitslot layer order

* explained marking

* now it's hideable

* Revert "now it's hideable"

This reverts commit ab799b088739b3d986a5158f51b44f9c770e6e3e.

* re-order one more time for correct parity with the previous system
2026-06-29 12:43:48 +02:00
InsoPL 739a396d02 Add opticial thermal scanners to engivend (#42813)
yeah
2026-06-29 12:43:48 +02:00
InsoPL 0ccccc8227 Optical thermal scanner implementation (#42613)
* revert of the revert

* tests

* changes

* more fun

* test

* ccvvvar

* works but bad

* now its better

* more fixes

* more cleanup

* cleaning

* last fixes before move to glasses activ

* x

* glasses only

* working

* fix toolbox

* cleanup

* ThermalByte added

* small fix

* small optimalisations

* float bux fix

* comments add

* more comments

* more comments

* last fix

* revert cvar delete

* wrong blue shades

* cvar refactor

* Update Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* Update Content.Client/Atmos/Overlays/GasTileDangerousTemperatureOverlay.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>

* tweak to TryGetTemperature comment

* Factors are now const

* renames

* Interface for ThermalByte

* tile color  vaccum and more comments

* saving yeeted

* integration test

* rename and cleanup

* fix

* cleanup

* switch

* UT fix (hopefully)

* small bug+ rename

* vaccum limit  + space is now invalid

* typo

* typo

* fix

* cleanup

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:48 +02:00
ArtisticRoomba 231fb6ab3f Fix gas filter math (#42801)
* fix gas filter math
i'm just a stunning genius aren't i

* yeah i can do it better
2026-06-29 12:43:48 +02:00
ScarKy0 57155b811d [Stable] Fix metabolism shuffle (#42795)
* yeah

* move up

* fssaf

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:47 +02:00
Princess Cheeseballs df401ff47c PredictedRandom Helpers (#42797)
* PredictedRandom Helpers

* fixxxx

* documentation!!!

* pram

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:47 +02:00
ScholarNZL e00aa94522 Added Insulated Components to RK and Servants. (#42569)
* Added Insulated Components to RK and Servants.

* Better comment for Rat Servants.
2026-06-29 12:43:47 +02:00
0-Anon 7ec67b38da Remove Uranium from Mute Toxin recipe (#42787)
remove uranium from mute toxin
2026-06-29 12:43:47 +02:00
Kowlin b11e3cb967 Hopefully fix subgamemodes from pushing rounds into extended. (#42744)
* Hopefully fix subgamemodes from hard locking rounds

* You'd revert this change, you potato...
2026-06-29 12:43:47 +02:00
Kowlin f02b636d36 Minor spelling correction in admin logging (#42784) 2026-06-29 12:43:47 +02:00
veprolet e3e388a04f Make volumetric devices respect their pressure limits (#35211)
* Make volumetric pump limits inclusive

* Make volumetric devices respect pressure limits

* Improve pressure limit calculation comments

* Fix negative gas transfer in filters

* Extract to API

---------

Co-authored-by: veprolet <>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:47 +02:00
Marchy 2b0c647302 Adding logs for ImmovableRodSystem Interactions for admin panel (#42769)
Adding logs for ImmovableRodSystem for admin panel
2026-06-29 12:43:47 +02:00
pathetic meowmeow 1edf6bdf27 Only rebuild organ markings when sex or group has changed (#42782) 2026-06-29 12:43:47 +02:00
Minemoder5000 5ed492aaaf Syndimov Kit (#42764)
* syndimov kit

* attribution fix

* adjust prototype
2026-06-29 12:43:47 +02:00
pathetic meowmeow 429b710875 Fix markings colour setting (#42771) 2026-06-29 12:43:46 +02:00
Centronias 43ca70a962 Make `StatusEffectsSystem`'s cache an instance field (#42762)
make statuseffectsystem's cache not static
2026-06-29 12:43:46 +02:00
pathetic meowmeow 05f04b9189 Clean up Marking data structure, add tests for Zombie transformation (#42756)
* Clean up Marking data structure, add tests for Zombie transformation

* empty

* AAAAAAAAAAAAAAAA

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:46 +02:00
pathetic meowmeow 8ef211cfed Make Ichor work in the bloodstream (#42758)
* Make Ichor work in the bloodstream

* retun test

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:46 +02:00
pathetic meowmeow aa5623a4db Ensure DNA scrambling makes valid profiles (#42757) 2026-06-29 12:43:46 +02:00
Shegare 9531570f77 Fix bio suits (#42748)
fix

---------


(cherry picked from commit fd618775a2be5e66d32c6b4f66f3be882312228f)

Co-authored-by: Samur7 <asman102n@gmail.com>
2026-06-29 12:43:46 +02:00
Quantum-cross 19c64d21e0 Prevent anomalies from spawning multiple entities on the same tile when instructed not to. (#37833)
* Fix the ability to hit overlapping walls.

* Revert "Fix the ability to hit overlapping walls."

This reverts commit f6866b6af43ef3a0939147673f2303c7e90d9bca.

* Ensure that anomalies do not spawn multiple entities in the same tile when `CanSpawnOnEntities` is false.
2026-06-29 12:43:46 +02:00
ArtisticRoomba f9019f37a2 Clarify documentation on Atmospherics heat capacity APIs (#42747)
* clarify heat capacity APIs

* more docs
2026-06-29 12:43:46 +02:00
ArtisticRoomba a19342dfc3 Atmospherics DeltaPressure Bulk Processing (#41553) 2026-06-29 12:43:45 +02:00
Crude Oil 8bfa3c27f9 Admin log new state on emitter toggle (#42736)
log new state on emitter toggle
2026-06-29 12:43:45 +02:00
Absotively 3d9c2bc891 Gas device power switches use switch buttons (#42619)
* Switch button for gas filter power

* Switch button for gas mixer power

* Switch button for gas pump power

* Switch button for thermomachine power

* Switch button for space heater power

* Remove redundant switch labels
2026-06-29 12:43:45 +02:00
ArtisticRoomba 8b243e533f Atmos GetAirflowDirections API (#42668) 2026-06-29 12:43:45 +02:00
Samuka 2ca299985c Sent fax now tells where it was sent from (#41108)
* Make fax tell where the fax is from

* make the line shorter

* localization

* fix fax machine not knowing where the fax is from

* fix popup saying PeerSelector

* name is now get from the known fax list

* shorter to fit in more papers

* send the sender not the destination

* add time to info displayed

* nuke [ViewVariables(VVAccess.ReadWrite)]

* update submodule

* use RoundDuration() instead

* ops, this was needed
2026-06-29 12:43:45 +02:00
Princess Cheeseballs ce7f99fbfb Entity Table Probabilities API (#41920)
* push

* fix

* push

* abstract and more accurate

* new abstract method I guess

* that table does not explode

* webedit major

* Update Content.Shared/EntityTable/ValueSelector/BinomialNumberSelector.cs

Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>

* big ass merge conflicts

* sadas

* review

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>
2026-06-29 12:43:45 +02:00
SlamBamActionman ccff0117bb Remove writing apps from the Mime PDA (#42706) 2026-06-29 12:43:45 +02:00
Princess Cheeseballs 5d93f9eb7f [STAGING] Fix having to /ghost as spacemobs when you die. (#42709)
fixe

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:45 +02:00
Princess Cheeseballs 77f927cca3 [STAGING] Fix Hardsuit Helmets dropping on being gibbed. (#42703)
* bullshit

* sdasdsas

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:45 +02:00
Princess Cheeseballs 19e21ea954 [STAGING] Fix Diona not transferring their minds to their nymphs when gibbing. (#42699)
2 line fix

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:44 +02:00
Errant cd522c8670 Fix debug assert when using Control Entity verb on inanimate objects (#42525)
fix Control Entity assert
2026-06-29 12:43:44 +02:00
Jessica M 7f640dd56d Remove InternalsComponent from BaseSimpleMob (#42705)
remove internals from simplemob

Co-authored-by: Jessica M <jessica@maybe.sh>
2026-06-29 12:43:44 +02:00
Velken 7db4a25ce4 [Admin] Made admin log be high if the buyer is not from expected faction for a store. (#42687)
* more admin qol prs

* mistakes were made at 3am

* mindshield check and cleanup

* address reviews

* typo
2026-06-29 12:43:44 +02:00
MidoriKurage a49e01251e Add fontconfig and pipewire to shell.nix (#42700)
fix(nix): Add fontconfig and pipewire to shell.nix

This fixes dev client crashing when running in a nix dev shell.
2026-06-29 12:43:44 +02:00
Princess Cheeseballs e15436cdda Estoc DMR made Nukie Only (#42698)
* literally 1984

* Don't need that anymore

* remove looc as well

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:44 +02:00
SlamBamActionman 53fcd12147 Add Cyborg crew indicator (#37038)
* Initial commit

* Include uncertain crew and make it work for AI

* Add new definition to Silicon Rules 8

* Update based on review

* Remove Cluwne from job list

* ProtoIdify

* Update and also make monkey/corgi show IDs

* Remove unnecessary property

* Remove redundant code

* Carrrrd

* cleanup

* Nicer code

* Update to fix the spawn bug + agent ID

* Fix new icons

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-06-29 12:43:44 +02:00
Marchy 4ddd649595 Log Criminal Status changes for admin panel (#42691)
Adding adming logger to log criminal status changes
2026-06-29 12:43:44 +02:00
Pieter-Jan Briers 894e290331 Update RT to 272.0.0 (#42694) 2026-06-29 12:43:43 +02:00
Huaqas f0a2de94d9 Lizard Unhappy (#42594)
* Remove lizard_happy.ogg

* Lizard still unhappy.
2026-06-29 12:43:43 +02:00
Velken ccea80ac0b [FIX] Fix spacing explosions ignoring indestructible flag in stacked tiles (#42682)
* bald man broke my tiles

* move it around

* shrink it

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:43 +02:00
Princess Cheeseballs b6b2a563ab Remove Visitor Shuttles (Real) and also cleanup the event rule system to not break when I try to do this. (#41915)
* shelve

* halfway there

* borgar

* just pass TimeSpan.Zero????

* better API

* no more TODO

* comment

* some fixes

* Gonna make a new PR for this I guess shrug

* add quark back, cleanup some stuff

* add syndie pod back

* one final change

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:43 +02:00
Kyle Tyo 588c07b7e1 Add Attribution for Web Walls. (#42677)
Update meta.json
2026-06-29 12:43:43 +02:00
B_Kirill 67e5a319d8 Some bonfire fixes (#42675) 2026-06-29 12:43:43 +02:00
ScholarNZL de7b03cbbc Fix 42643 meat spike doafter race condition (#42644)
* Resolve doafter race condition on meat spike deconstruction.

* set a letter to lowercase.
2026-06-29 12:43:43 +02:00
Pieter-Jan Briers 987df8c06d Content.Packaging can now emit binlogs for the build (#42659)
* Content.Packaging can now emit binlogs for the build

I was checking why packaging is so much slower and it *seems* to be entirely the actual build being twice as slow as before .NET 10. Strange.

Content.Packaging can now emit MSBuild binlogs that we can analyze to see why that's the case.

* Enable --log-build on Test Packaging workflow, produce artifact with binlogs

* Disable setup-dotnet in packaging workflow

I have a suspicion...
2026-06-29 12:43:43 +02:00
Dmitry 484b4ec42c fixing the handling of the RespiratorComponent without checking (#42665)
* the correction itself

* it will be more adequate

* doc

* not log - not debug

* ohhh
2026-06-29 12:43:42 +02:00
pathetic meowmeow b81a0c7a85 Drop ICharacterProfile/ICharacterAppearance interfaces (#42661) 2026-06-29 12:43:42 +02:00
Absotively abb13de3dd Move character preview handling into a specialized control (#41252)
* Move character preview handling into a specialized control

Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com>

* Restore job name that I accidentally removed from character picker buttons

* Just resolve dependencies the standard way

---------

Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com>
Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
2026-06-29 12:43:42 +02:00
B_Kirill e3eb8083e8 Fix InstrumentSystem.Update exception when deleting band lead (#42331) 2026-06-29 12:43:42 +02:00
Winkarst-cpu 8028412480 Fix: Make vote call button toggable (#42450)
Fix
2026-06-29 12:43:42 +02:00
Marlyn d5c449db03 Fixes Opporozidone Instarot issues (#42472)
Removes a vestigial shutdown handler

When opporozidone removes the RottingComponent, the PerishableComponent's
RotNextUpdate is set to 0 - and then it undergoes a period of catch-up to
the current time. If the entity is susceptible to rot in that interval, it'll
accumulate 2 minutes 30 seconds worth of rot, per second.

This gets worse the longer the server has been running, as there's a greater value
in _timing.CurTime to catch up to. This handler seems to be vestigial from the
MiasmaSystem and does not seem to be necessary for anything anymore.
2026-06-29 12:43:42 +02:00
War__Prophet 8251eb1013 Doors can now close on clown spider webs (#42589)
buh
2026-06-29 12:43:42 +02:00
Ohelig 895afab003 Refresh gas canister UI on canister startup (#42616)
* Refresh UI on canister startup

* Rework DirtyUI to not fail during tests on fake canisters

* Feedback from Discord
2026-06-29 12:43:42 +02:00
B_Kirill b1af38a6ff Prevent picking up chameleon projector disguises via context menu (#42656) 2026-06-29 12:43:41 +02:00
Princess Cheeseballs e2f1025965 Fix sound issues with arti crusher. (#42406)
AAAAAAAAAAAAAAAAAAAAA

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:41 +02:00
EchoOfNothing 6b51323d9b Fix dev map med APC overload (#42157) 2026-06-29 12:43:41 +02:00
ScholarNZL 7c566c91e4 Add Part Assembly and Temprature Construction Validations for Dev builds (#41396)
Resolves 43194; part ass. and temp con. validation
2026-06-29 12:43:41 +02:00
SlamBamActionman 09cdb87c90 Make crowbars consistent with 1x2 item storage (#42585)
Like scratching an itch
2026-06-29 12:43:41 +02:00
roryflowers 0f766aab0c restore tritium fire energy to reenable maxcaps (#42641)
Co-authored-by: Rory Flowers <roryflowers@github>
2026-06-29 12:43:41 +02:00
Pieter-Jan Briers ed28d77fb2 Remove duplicate loc getstring calls (#42648)
guh
2026-06-29 12:43:41 +02:00
B_Kirill a9e654b9cb Improve sandbox window toggle buttons state handling (#42281) 2026-06-29 12:43:41 +02:00
Winkarst-cpu 187875d732 Fix: Make votes force select maps (#42426)
* Fix

* Add safe guard
2026-06-29 12:43:41 +02:00
Connor Huffine ba5a22b7a1 Add EditorHidden member to ContentTileDefinition (#42564)
Add EditorHidden member
2026-06-29 12:43:40 +02:00
SlamBamActionman ddeea645ef Add an option for hold-to-attack in settings (#42596)
* Initial commit

* Separate ranged and melee

* Move to controls tab
2026-06-29 12:43:40 +02:00
InsoPL 876f2dfd08 Translation fix: insulated verbs (#42617)
* feat

* only clothing

* fix

* Revert "fix"

This reverts commit 858c3f882718cd003391e0fde6b2711b31e6ab54.

* fix

* reversal

* removed double namespace

* ehhh

* wrong robust toolbox

* typo
2026-06-29 12:43:40 +02:00
B_Kirill ad821fdb43 GasLeak and PowerGridCheck rules components cleanup (#42624) 2026-06-29 12:43:40 +02:00
B_Kirill 81d0b1d7ef Fix emergency shuttle authorization bypass via ID rename (#42640) 2026-06-29 12:43:40 +02:00
Pieter-Jan Briers 2c2be56ff6 Update RT to 271.2.0 (#42646) 2026-06-29 12:43:40 +02:00
Myra 5eefbeb167 Fix roundstart with thief gamerule (#42633) 2026-06-29 12:43:40 +02:00
Hitlinemoss 89c94ffa80 Improvements to automatic job highlights (#42630)
* Improvements to automatic chat highlights

* Automatic highlights option is more clearly labelled
2026-06-29 12:43:40 +02:00
B_Kirill e9f5ae611b Cleanup warnings: CS0168, CS0414, CS8321 (#42623) 2026-06-29 12:43:39 +02:00
Samuka df16c8b0a2 Admin log now shows who called or recalled evac (#41557)
* admin log now shows who called or recalled evac

* ops

* named parameters

* show in player search

* ops, forgot 2

* when did this happen?
2026-06-29 12:43:39 +02:00
alexalexmax 14dcc43215 Fix holoparasite stun (#42315)
add immunity tags
2026-06-29 12:43:39 +02:00
Princess Cheeseballs c770d631f7 Tweak Traitor Uplink - The Rest of the Uplink (#42582)
* jaws of death

* I hate YAML

* open the gate

* I forgot about this one

* I forgor

* Fix croissant

* this didn't work actually rip

* made lights look better and undo on the boxing gloves

* small change

* Update Resources/Prototypes/Entities/Clothing/Hands/gloves.yml

Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>

* baguette contraband, eat your evidence.

* suffix

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>

# Conflicts:
#	Resources/Prototypes/Catalog/uplink_catalog.yml
2026-06-29 12:43:39 +02:00
Pieter-Jan Briers de269d0176 Fix PostgreSQL migration for ban DB refactor (#42609)
This didn't come up in testing. The ban hit foreign key was added before the data was migrated, so it didn't work.

Fix that.
2026-06-29 12:43:39 +02:00
Pieter-Jan Briers 7419408ec5 Ban database refactor (#42495)
* Ban DB refactor seems to work at a basic level for PostgreSQL

* New ban creation API

Supports all the new functionality (multiple players/addresses/hwids/roles/rounds per ban).

* Make the migration irreversible

* Re-implement ban notifications

The server ID check is no longer done as admins may want to place bans spanning multiple rounds irrelevant of the source server.

* Fix some split query warnings

* Implement migration on SQLite

* More comments

* Remove required from ban reason

SS14.Admin changes would like this

* More missing AsSplitQuery() calls

* Fix missing ban type filter

* Fix old CreateServerBan API with permanent time

* Fix department and role ban commands with permanent time

* Re-add banhits navigation property

Dropped this on accident, SS14.Admin needs it.

* More ban API fixes.

* Don't fetch ban exemption info for role bans

Not relevant, reduces query performance

* Regenerate migrations

* Fix adminnotes command for players that never connected

Would blow up handling null player records. Not a new bug introduced by the refactor, but I ran into it.

* Great shame... I accidentally committed submodule update...

* Update GDPR scripts

* Fix sandbox violation

* Fix bans with duplicate info causing DB exceptions

Most notably happened with role bans, as multiple departments may include the same role.
2026-06-29 12:43:39 +02:00
pathetic meowmeow 17d3e83d5a Replace metabolism groups with metabolism stages (#42172)
* Replace metabolism groups with metabolism stages

* return to return

* killed

* yaml linted

* yaml linted again

* margarine

* bugfixes and balancing tweaks

# Conflicts:
#	Content.Shared/Metabolism/MetabolizerSystem.cs
2026-06-29 12:43:39 +02:00
deathride58 50578834fe Fixes grappling hook audio infinitely looping (#42588)
Fixes a regression with grappling hook sounds by reverting a last-minute commit
2026-06-29 12:43:38 +02:00
Julian Giebel 56b2e0ff88 Fix typo in feedback popup (#42587)
* Commit

* add the form post

* dv

* fixes

* Change wording

* Address review

* wording change

* Added some stuff

* New format

* bruh

* thanks perry!

* yes

* More fixes!

* typo

* Add a command to show the list, improve the UI slightly, split up command names

* Fix UI controller

* Add better comment

* Get rid of weird recursive thing

* Cleanup

* Work on moving feedback popups out of simulation

* Move round end screen subscription to feedback ui controller

* Finish moving feedback popups out of simulation

* Fix _ as parameter

* Clean up FeedbackPopupUIController

* Clean up commands

* Fix prototype yaml

* Fix openfeedbackpopup command description

* Update Resources/Locale/en-US/feedbackpopup/feedbackpopup.ftl

Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>

* Address reviews

* Address reviews

* Fix FeedbackPopupPrototype.cs using empty string instead of string.empty

* Address some more of the reviews, style nano is still trolling sadly

* Fix feedback popup styling

* Fix PopupPrototype ID field not having a setter

* Address reviews

* Add label when no feedback entries are present

Change link button to not show when no link is set

* Fix typo in feedback prototype

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>
2026-06-29 12:43:38 +02:00
Archee eb4d76b33f Replaces thief beer goggles objective with stealing HUD items (#38043)
* initial commit

* forgot to set it back to 1

* forgot to revert difficulty from testing
2026-06-29 12:43:38 +02:00
B_Kirill edde782dae Fix construction ghost sprite offset (#42193) 2026-06-29 12:43:38 +02:00
Julian Giebel 0ce9663ddd Add feedback popups (#41352)
* Commit

* add the form post

* dv

* fixes

* Change wording

* Address review

* wording change

* Added some stuff

* New format

* bruh

* thanks perry!

* yes

* More fixes!

* typo

* Add a command to show the list, improve the UI slightly, split up command names

* Fix UI controller

* Add better comment

* Get rid of weird recursive thing

* Cleanup

* Work on moving feedback popups out of simulation

* Move round end screen subscription to feedback ui controller

* Finish moving feedback popups out of simulation

* Fix _ as parameter

* Clean up FeedbackPopupUIController

* Clean up commands

* Fix prototype yaml

* Fix openfeedbackpopup command description

* Update Resources/Locale/en-US/feedbackpopup/feedbackpopup.ftl

Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>

* Address reviews

* Address reviews

* Fix FeedbackPopupPrototype.cs using empty string instead of string.empty

* Address some more of the reviews, style nano is still trolling sadly

* Fix feedback popup styling

* Fix PopupPrototype ID field not having a setter

* Address reviews

* Add label when no feedback entries are present

Change link button to not show when no link is set

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>

# Conflicts:
#	Content.Client/Stylesheets/StyleNano.cs
2026-06-29 12:43:38 +02:00
deathride58 e5f734769f Grappling rework - Grappling hooks are now physics-driven (#42409)
* Grappling rework - Grappling hooks are now physics-based

* still have no idea wtf is going on with portals but fixed a few bugs + cleanup

* bonus fixes + prep for optional-but-recommended engine PR

* dropkicking a stray comment outta here

* makes the impulses actually take into account the fucking relays, makes reeling cancel if the rope's already too short, and tweaks values

* reviews + cleanup + makes ungrapple behavior a bit more consistent
joint removal was removed from ungrapple because it mispredicts either way, and breaks grappling hooks attached to the grappling gun (always good to leave possibilities like that open)

* adds a hack to work around grids not caring about waking cross-grid joints

* makes use of dirtyfield(), defenestrates magic number

* y'know it'd probably be better if we were like actually awake before we made commits

* null-coalesce instead of if statement

* two changes

* dont datafield and fix up for sound overrides

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:38 +02:00
pathetic meowmeow a5149c759e Simplify hands UI code (#42534)
* Simplify hands UI code

* i remembered about SortedHands in the component

* minor cleanup

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:38 +02:00
pathetic meowmeow c4cd6b60ce Make some of the arachnid metabolisers animal ones (#42529) 2026-06-29 12:43:38 +02:00
Minerva bcaf0e46d2 Makes defib cabinets constructable and deconstructable (#42571)
* Makes defib cabinets constructable and deconstructable

* fix crash on master

---------

Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
2026-06-29 12:43:38 +02:00
eoineoineoin 8ae4611855 Character editor style fixes (#41278)
* Restore pre-StyleNano element height

* Add style for HelpButton to sheetlet

---------

Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
2026-06-29 12:43:38 +02:00
SabreML 64d3b0638f Colour picker, palettes, & other spraypainter stuff (#41943)
* The stuff

* Valid check

* Spraypaintable decals don't actually seem to use `ZIndex`

* Don't need this

* datafield fix and button swap

---------

Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
2026-06-29 12:43:37 +02:00
Absotively 27083f246e SwitchButton (#39161)
* Initial toggle switch styling

* tweak toggle switch textures

* Simplify toggle SVG images a bit

* Better name for switch button

* Update CheckButtons that were already just regular buttons

* Match checkbox/text field outline colour instead of slider outline colour

* Use switch button for APC power

* Update switch button styling; add separate style for power buttons

* Use new switch button in midi channels menu

* Add spacer

* adjust switch button icon proportions, position

* Add disabled toggle switch styles, use improved pressed style setup, make APC breaker state visible to all

* Use Janet Blackquill's icon design; remove StyleClassPowerSwitchButton. Co-authored-by: Janet Blackquill <uhhadd@gmail.com>

* Style switch children directly instead of with propagated styles

* Add attributions file

* Turns out source is a required field

* Move SwitchButton out of engine

* Move styles to sheetlet

* Make workaround for child controls not updating work in content

* Icon layers

* Set up ISwitchButtonConfig

* Fix disabled switch label font color

* Don't redefine base pseudostyles

* Use pseudoclass helpers for better readability

* Use margin instead of padding element

* Remove unused using statements

* Remove extra image file

* Update attributions for changed files
2026-06-29 12:43:37 +02:00
c4llv07e e955bb449f Cargo console rework (retry) (#34052)
* Cargo console upgraded

* add comment of hardcode

* Update Resources/Locale/en-US/cargo/cargo-console-component.ftl

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Update Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Update Content.Client/Cargo/UI/CargoConsoleOrderMenu.xaml

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Some small technical improvements

* More indent

* Fix unknown requester name

* whitespace cleanup

* Small improvement

* Add order price to the title

* Fix build errors

* Port new slip system

* Remove unused loc

* Some required changes

* Add stride

* minor code style + update to sheetlets

---------

Co-authored-by: VideoKompany <135313844+VlaDOS1408@users.noreply.github.com>
Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
2026-06-29 12:43:37 +02:00
ScarKy0 ee5c22f723 Force-prying crit borgs opens borg panel (#42460)
yeah
2026-06-29 12:43:37 +02:00
pathetic meowmeow 9612ca3ab9 Ensure cat ears & tails cannot be selected by players (#42579)
Ensure cat ears & tails cannot be selected.
2026-06-29 12:43:37 +02:00
Steel cd4e660f4e Add aloe cream storage sprite (#42453)
* Initial commit

* Rotate sprite

* Update Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml

Use existing sprite

Co-authored-by: āda <ss.adasts@gmail.com>

* Remove cream-storage sprite

---------

Co-authored-by: āda <ss.adasts@gmail.com>
2026-06-29 12:43:37 +02:00
ArtisticRoomba 11dc186941 Power Consumers Rebalance: Simple Dynamic Power Loading (#41961)
* initial commit

* misc additions and fixes

* final tests and additions

* cleanup 1

* fix tests and add a test

* fix tests AGAIN

* abject horror and misery

* cleanup

* cleanup 2

* address some issues
2026-06-29 12:43:37 +02:00
Velken 18bb4fe1fa FIX: Give RCD plating unique name (#42560)
* sorry mappers, i had forgor

* rename instead of abstract
2026-06-29 12:43:37 +02:00
pathetic meowmeow b4e20b6d6d Fix hideable humanoid layers (#42553)
* Fix hideable humanoid layers

* test maintenance coin

* clean return

* voxes can no longer have human beards

* voxes fixes

* voxing out

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:37 +02:00
Kip 03b90fa2e4 Remove "Fuck Lizards" and "Lizard Power" decals from crayondecals.rsi (#42541)
* remove antilizard.png, replace prolizard.png

* forgot the meta.json
2026-06-29 12:43:37 +02:00
Velken 88f3601f56 "Fix RCD light spam, bypass of indestructible tiles and some plating fixes" - Tile Stacking got merged, time to bring back the RCD fix (#42556)
* No more light spam, and some plating fixes

* fixed test
2026-06-29 12:43:36 +02:00
Pok 607d16e810 Towel migration (#42555)
Update migration.yml
2026-06-29 12:43:36 +02:00
ScarKy0 858ee62e6e Fix handheld grinder and reaction mixer audio stacking (#42498)
* yeah

* AAAAAAAAAAAAAAAAAAAAAAA

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:36 +02:00
pathetic meowmeow 319b060f7d Fix sexed organs (#42554) 2026-06-29 12:43:36 +02:00
osjarw 70874e4cae Medibot doAfter and some other improvements (#32932)
* Medibot doAfter and some other improvements

* Clean-up

* Review fixes

* the army of medibots chasing someone is really funny

* misc cleanup

---------

Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-06-29 12:43:36 +02:00
Velken 12a7a2de67 Tile Stacking - attempt 2 (#42543)
* WORK IN PROGRESS 1

* ITS ALIVE, ALIVE!!!!

* clean up

* WIP 1

* fix small oversight

* big diff of doom

* added CVAR to tile history stack size

* component time

* filescoped namespaces + remove redundant nametag

* fix silly little mistakes

* typo

* TileStacksTest

* bweeeeeeh :P

* nuke cvar

* :3

* WIP2025

* Fix submodule

* It's beginning to look a lot like Christmas

* It's the Most Wonderful Time of the Year

* tiny fix

* fixed extra spacing on yaml

* slightly improve tilestacking test

* Part 1 out of 2 (part 2 tomorrow)

* Part 2

* add a simple tile construction test for tilestacking

* guh

* address reviews (no documentation yet)

* documentation be upon ye

* remove extra spaces

* prediction fix

* dirt

* oops :p

* attempt to make this suck less

* am never doing a PR that touches explosion system ever again

* small fix

* maybe a bit better now?

* more cleanup

* one last cleanup for me

---------

Co-authored-by: Killerqu00 <killerqueen1777@gmail.com>
Co-authored-by: Killerqu00 <47712032+Killerqu00@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:36 +02:00
pathetic meowmeow dd43910f79 Fix humanoid profile voice being broken (#42550)
Fix humanoid appearance voice being broken
2026-06-29 12:43:36 +02:00
Pieter-Jan Briers e19f4643f2 Update RT to 271.1.0 (#42551) 2026-06-29 12:43:36 +02:00
InsoPL 93f733dbbe Examination verb for insuls (#42444)
* feat

* only clothing

* fix

* Revert "fix"

This reverts commit 858c3f882718cd003391e0fde6b2711b31e6ab54.

* fix

* reversal

* removed double namespace
2026-06-29 12:43:36 +02:00
B_Kirill 594d3b780f Fix MagicMirror UI (#42544) 2026-06-29 12:43:36 +02:00
Pieter-Jan Briers f1b20f2e2d Update RT to 271.0.0 (#42533) 2026-06-29 12:43:35 +02:00
pathetic meowmeow 0735328f8d Inflatable inflation (#42539) 2026-06-29 12:43:35 +02:00
pathetic meowmeow c57721eca5 Visual nubody (humanoid appearance refactor) (#42476)
* initial visual nubody

* oops overlay

* im so pheeming rn

* conversion...

* tests

* comeback of the underwear

* oops eyes

* blabbl

* zeds

* yaml linted

* search and visible count constraints

* reordering

* preserve previously selected markings colors

* fix test

* some ui niceties

* ordering

* make DB changes backwards-compatible/downgrade-friendly

* fix things again

* fix migration

* vulpkanin markings limit increase

* wrapping

* code cleanup and more code cleanup and more code cleanup and more code cleanup and

* fix slop ports

* better sampling API

* make filter work + use the method i made for its intended purpose

* fix test fails real quick

* magic mirror cleanup, remove TODO

* don't 0-init the organ profile data

* remove deltastates

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

# Conflicts:
#	Content.Server/Humanoid/Components/RandomHumanoidAppearanceComponent.cs
#	Content.Server/Humanoid/Systems/RandomHumanoidAppearanceSystem.cs

# Conflicts:
#	Resources/Prototypes/Species/diona.yml

# Conflicts:
#	Content.Server/Zombies/ZombieSystem.Transform.cs
2026-06-29 12:43:35 +02:00
pathetic meowmeow 4f85f1b483 Remove loadout time towels (#42536)
# Conflicts:
#	Resources/Prototypes/Loadouts/loadout_groups.yml
2026-06-29 12:43:35 +02:00
ahandleman edc11b4968 Make Seed Non-Unique on Sample (#42527)
Make Seed Unique on Sample
2026-06-29 12:43:35 +02:00
eoineoineoin 350046f1b3 Rename "Inset" style, implement in sheetlets (#41975)
* Rename "Inset" style, implement in sheetlets

* Remove from StyleNano
2026-06-29 12:43:35 +02:00
Princess Cheeseballs 612f82ca87 Syndicate Weapons/Ammo rebalances + Weapons Case (#42468)
* working commit

* final batch of changes

* reviw

Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>

* lower china lake projectile speed

* hnnnnnnnnnnnnnng

* omelette joke back at popular request.

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: SnappingOpossum <snappingopossum@outlook.com>
2026-06-29 12:43:35 +02:00
Princess Cheeseballs e2aac67bdb Traitor Chemicals Rebalance (#42484)
very small list of changes overall

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:35 +02:00
ArtisticRoomba 2f6a03c19b Adjust various traitor explosives (#42477)
* adj explosions

* yuuup

* next release

* cleanup and EMP changes

* minibomb revert, wait until gib experiment

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-06-29 12:43:35 +02:00
DDDragoni 6decbb943b Thieving beacons automatically set coordinates when unfolded. (#42520)
Thieving beacons set coordinates when unfolded
2026-06-29 12:43:34 +02:00
Thinbug 118aab2bb3 Magic 9 Ball (#42189)
* hoping i didnt forget anythin

* thingiess i forgor

* fixies

* first half of fixies

* other half

* sprite changes

* more proper outline on the sprites

* making the outline a tad more visible again

* making it tiny

* readding the yaml for the magic 9 ball

* sprite update so its less flat and more shapey
2026-06-29 12:43:34 +02:00
pathetic meowmeow 5e52e82ca4 Make sure simplemobs ghost on movement when dead (#42506) 2026-06-29 12:43:34 +02:00
pathetic meowmeow e53f356512 Fix inventory contents not being dropped on gibbing (#42504) 2026-06-29 12:43:34 +02:00
Vasilis The Pikachu 9661e4138e Revert "Allow station tiles to be placed on solid ground and other platings. (#38898)"
This reverts commit 418b2b70b0.

Maintainer vote decided to vote this out due to code quality issues. The original contributor is aware and will get help from a maintainer to reintroduce it
2026-06-29 12:43:34 +02:00
Vasilis The Pikachu a69640f61b Revert "Fix RCD light spam, bypass of indestructible tiles and some plating fixes (#42432)"
This reverts commit 7d58e42ade.

Required to revert 418b2b70b0 via maintainer vote due to code quality issues.
2026-06-29 12:43:34 +02:00
pathetic meowmeow 7da255e902 Let vox eat trash again (#42503) 2026-06-29 12:43:34 +02:00
ScarKy0 e114fc9c21 [Hotfix] Delivery console unanchorable (#42499) 2026-06-29 12:43:34 +02:00
pathetic meowmeow 490994ea01 Nubody (#42419)
* Nubody

* fix test fails

* gibbing

* lung test returns

* doc comment

* hand organ test

* giblet test

* yaml formatting

* returning

* relocate

* trimming

* re-smite

* oops thusd tweak

* arachnids have slower metabolism i guess

* never mind the old behaviour is bad actually

* rider whyyy

* style changes and allat

* fix collision

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

# Conflicts:
#	Resources/Prototypes/Entities/Mobs/Species/diona.yml

# Conflicts:
#	Resources/Prototypes/Body/species_base.yml

# Conflicts:
#	Resources/Prototypes/Entities/Mobs/Species/moth.yml

# Conflicts:
#	Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
#	Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
#	Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml
2026-06-29 12:43:27 +02:00
Delta-V bot e6e094a7a1 Automatic changelog update 2026-06-29 11:46:17 +02:00
Manoob b7d8476473
Make pigs drop bacon and adjust a few recipes to do with bacon/pork (#6122)
* Make pigs drop bacon and adjust a few recipes to do with bacon/pork

* Only one piece of bacon for rice and pork!

Signed-off-by: Manoob <manu.demoen@gmail.com>

* Make pigs drop bacon AND meat

* Add 3 bacon to the chef-vend inventories

---------

Signed-off-by: Manoob <manu.demoen@gmail.com>
2026-06-29 11:45:57 +02:00
Delta-V bot 3df4bfaeb7 Automatic changelog update 2026-06-29 08:05:44 +02:00
Apachito 29b46efa16
Rebalanced Tide Crafting (#5818) 2026-06-29 02:05:24 -04:00
Vanessa e7607e1227
I love submodules. Always use submodules. (#6119)
Revert "I hate submodules. Why did it have to be submodules? (#6117)"

This reverts commit d3b13a6c83.
2026-06-29 00:16:42 -05:00
Delta-V bot 460dbe1fc1 Automatic changelog update 2026-06-29 02:54:28 +02:00
pathetic meowmeow c7c6f1a67a
Add nodecrawling, implement ventcrawl with it (#5830)
* node crawling movement

* more node crawling

* quality assurance

* do-after it

* i'm ratted king

* we don't need to serialize node stuff

* rename and ser/de fix

* review fixes
2026-06-29 00:54:08 +00:00
Delta-V bot 495107e5e0 Automatic changelog update 2026-06-28 21:15:54 +02:00
pathetic meowmeow 8366dde288
Rewrite ion laws (#6121)
* Rewrite ion laws

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* edits

* get gooned

* jumpsuit clarity

* review and tests

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-06-28 21:15:35 +02:00
Delta-V bot 5f9315f43b Automatic changelog update 2026-06-28 18:42:54 +02:00
Stxcking c21ddfeb41
Tweaks: New Fishing Vendor Stock and Price Changes (#6114)
* man

* Update fishing_points.yml
2026-06-28 11:42:34 -05:00
Delta-V bot 9b0eef0805 Automatic changelog update 2026-06-28 18:42:21 +02:00
Stxcking 36bc3d0b04
The Disappearance of Hatsune Miku (#5790)
* I HATE FUN

* uh

* make it actually parent

* Update Resources/Prototypes/_DV/Catalog/Fills/Boxes/general.yml

Co-authored-by: Radezolid <snappednexus@gmail.com>
Signed-off-by: Stxcking <217132821+Stxcking@users.noreply.github.com>

---------

Signed-off-by: Stxcking <217132821+Stxcking@users.noreply.github.com>
Co-authored-by: Radezolid <snappednexus@gmail.com>
2026-06-28 11:42:01 -05:00
Delta-V bot e9b6634747 Automatic changelog update 2026-06-28 15:26:15 +02:00
Vape d1390f5e98
Update tips.ftl (#6133) 2026-06-28 15:25:56 +02:00
Delta-V bot 196e2a52e3 Automatic changelog update 2026-06-28 14:19:16 +02:00
Proxy also works :3 401ae01321
Reduce Holoparasite Cost (#6115)
Update uplink_catalog.yml
2026-06-28 14:18:56 +02:00
github-actions[bot] 793236f12b
Update Credits (#6135)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-06-28 04:52:00 +02:00
Delta-V bot 229491aa46 Automatic changelog update 2026-06-28 02:39:01 +02:00
Vape a09e09ac0f
Remove mention of "morphotypes" (#6134) 2026-06-27 19:38:41 -05:00
Delta-V bot e59b37b081 Automatic changelog update 2026-06-27 22:18:26 +02:00
Vape b359f44c15
Fix: Fixes to both Harpy and Moth (#6131)
Bug Fix
2026-06-27 15:18:06 -05:00
Delta-V bot 932dd5e429 Automatic changelog update 2026-06-26 19:23:56 +02:00
wesker 3001253e43
Synthetic Emotes Fix (#6125)
* separate synthetic emote

* fix duplicate IDs (server error)

* Update speech_emotes.yml

* maybe this

* maybe keep the removed things from upstream lol

* imagine yamlops-ing when the problem was your trash code all along
2026-06-26 19:23:37 +02:00
Vanessa d3b13a6c83
I hate submodules. Why did it have to be submodules? (#6117)
Living on a prayer.
2026-06-25 15:07:33 -05:00
Delta-V bot 2ab0163598 Automatic changelog update 2026-06-25 20:04:07 +02:00
pathetic meowmeow 6cdeb3d9cf
Suit sensors, but in space? Perish the thought. (#6054) 2026-06-25 12:59:49 -05:00
Delta-V bot d7543bd24a Automatic changelog update 2026-06-25 18:17:46 +02:00
wesker f7f800c439
Tweaked Synthetic (#6090)
* actually not overhauled but tweaked i think

* forgot to stage this one

* make shocking 60% chance instead of 80%, and make shock dmg 5-20 random.

* update comment

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* okay this should work + remember to mention new changesa asdas asd

* I ALREADY STAGED ALL

* important summary comments to give more important info when someone's
too lazy to check the rule

* fix some stuff

* signs of shock

* Update Resources/Prototypes/_DV/Traits/meta.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: wesker <53323309+weskified@users.noreply.github.com>

* Update Resources/Prototypes/_DV/Traits/meta.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: wesker <53323309+weskified@users.noreply.github.com>

* Update Resources/Locale/en-US/_DV/traits/traits.ftl

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: wesker <53323309+weskified@users.noreply.github.com>

* changessss

---------

Signed-off-by: wesker <53323309+weskified@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-06-25 11:17:26 -05:00
Delta-V bot b6ed84325f Automatic changelog update 2026-06-25 17:37:53 +02:00
Manoob 61aee79dc2
Replace nachos recipes (#6099)
* make nachos from tacos and change how cheesy and chili variants get made

* Change WizDen Contentfreeze recipelimit

* Update Resources/Prototypes/_DV/Recipes/Cooking/deep_fryer_recipes.yml

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Signed-off-by: Manoob <manu.demoen@gmail.com>

* Moved nacho metamorph to DV folder

* newlline, keep file as it was :^)

---------

Signed-off-by: Manoob <manu.demoen@gmail.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-06-25 10:37:33 -05:00
Delta-V bot 55fe6026ea Automatic changelog update 2026-06-25 17:28:10 +02:00
pathetic meowmeow 6dfa12a509
AI? Being able to send faxes? Perish the thought. (#6064)
* AI? Being able to send faxes? Perish the thought.

* Update Resources/Prototypes/Entities/Mobs/Player/silicon.yml

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-06-25 15:27:49 +00:00
Delta-V bot 485fd14f05 Automatic changelog update 2026-06-25 16:07:32 +02:00
Theo 031b37ffcb
Washing machines can hold huge items (#6086)
washer size huge
2026-06-25 09:07:12 -05:00
Delta-V bot 06365bdbf0 Automatic changelog update 2026-06-25 15:10:58 +02:00
Tmanzxd 7f18c5f346
Commented out Surgeon Job Requirement for CMO (#6112) 2026-06-25 13:10:38 +00:00
Delta-V bot d407652eb0 Automatic changelog update 2026-06-25 04:28:46 +02:00
Manoob 9108e2c9b5
Fix Low metabolism rate modifiers from truncating to zero (#6104) 2026-06-24 21:28:26 -05:00
Velcroboy c7ef614f3d
Edit towel spawner (#6106)
* Edit towel spawner

* numbers

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2026-06-24 21:26:51 -05:00
Velcroboy fa735f7669
Fix Chapel Access (#6105)
Fix chapel access

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2026-06-24 20:12:36 -05:00
Delta-V bot 6de6421636 Automatic changelog update 2026-06-25 00:03:18 +02:00
Vanessa 3cb24c8b68
Custom Client-Side Radio Colors (#6101) 2026-06-24 22:02:58 +00:00
Delta-V bot 9fad412075 Automatic changelog update 2026-06-24 15:15:21 +02:00
Vanessa fbc3104836
Fix Infinite Cloaking (#6085)
Fix infinite cloaking because I guess power draw doesn't count as using the battery charge.
2026-06-24 15:15:01 +02:00
Delta-V bot e231d9d67c Automatic changelog update 2026-06-24 15:08:40 +02:00
Stxcking 468d929c4b
Tweak: AAC Subject Button Colors Return + Words Capitalized (#5567)
* Nuked StyleNano + Added colors to sheetlet

SubjectButtonColors table to define colors (same hex as the ones in StyleNano)
SubjectColorRules to loop rules for applying colors

* Capitalize every single phrase

CONSISTENCY RAHH
2026-06-24 15:08:20 +02:00
Delta-V bot 2f1aaff32c Automatic changelog update 2026-06-24 00:35:07 +02:00
Vanessa 4f49ccde68
Sleepers no longer have an annoucement (#6066)
* Sleepers no longer have an annoucement.

* NT sleepers too.
2026-06-23 18:34:47 -04:00
Vanessa cb3b74e49e
Station-Specific Department Cleanup (#6078)
* Removed some jobs from station specific jobs because they are on all stations.

* Department Prototype Cleanup

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Actually fix brigmedic on the crew monitor

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-06-23 18:34:44 -04:00
Vanessa 7d15a39a77
Fixed emergency access locale string (#6044)
* Fixed emergency access locale string

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-06-23 18:23:22 -04:00
Delta-V bot 3ac816fee1 Automatic changelog update 2026-06-24 00:19:37 +02:00
Delta-V bot b909d9a2e5 Automatic changelog update 2026-06-23 17:27:27 +02:00
Theo 7547752159
Broken bottle slicing (#6092)
add comps
2026-06-23 10:27:07 -05:00
Manoob 9b7819288e
Added a fix that resets the cook timers on fryer power changed (#6075) 2026-06-23 09:17:06 -05:00
Delta-V bot 424a4569d8 Automatic changelog update 2026-06-23 14:50:11 +02:00
wesker 12827c0e98
TraitSystem require fix (#6097)
how did i even forget this
2026-06-23 12:49:51 +00:00
Delta-V bot d1e61ba0a2 Automatic changelog update 2026-06-23 12:40:37 +02:00
Vanessa 652e52dbca
Nuke/CosCult Global Music and SFX (#5918)
* Extended ServerGlobalSoundSystem and exposed its lies. Now its actually global.

* Fixed Epsilon event rule namespacing and formatting.

* Cosmic Cult Music Updates

* Few more CosCult changes.

* Nuke and Alert Changes

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update Content.Server/_DV/CosmicCult/EntitySystems/CosmicChantrySystem.cs

Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* Update Content.Server/_DV/Audio/ServerGlobalSoundSystem.cs

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2026-06-23 12:40:17 +02:00
Delta-V bot e7fe4865de Automatic changelog update 2026-06-22 20:06:07 +02:00
A111Vojta 84b600a39f
Harmony lanyards (#6035)
* Lanyards Part1

* Lanyards Part 2

* Lanyards Part 3

* Fix

* Lanyards - Adding Comments

* replace plaintext with LocIds

* expanded the lanyard slot blacklist
2026-06-22 20:05:47 +02:00
Delta-V bot 31201c44ba Automatic changelog update 2026-06-22 18:48:51 +02:00
Theo 4f9f93eb87
Slugs structural increase TWO! (#6068)
* number up

* comment formatting
2026-06-22 11:48:31 -05:00
Delta-V bot f8a4d823b9 Automatic changelog update 2026-06-22 13:37:10 +02:00
Proxy also works :3 c61d2c6a58
guidebook shields (#6070) 2026-06-22 06:36:50 -05:00
Delta-V bot e25181e1bc Automatic changelog update 2026-06-22 13:11:55 +02:00
wesker 7c052442a8
Traits UI Modifications, Visuals, and a new Condition (#6082)
* traits ui things

* fluent

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update Resources/Locale/en-US/_DV/traits/traits-ui.ftl

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: wesker <53323309+weskified@users.noreply.github.com>

* i hate toby

* newline

* pattern matching

* made simpler

* 2sleepy4myowngood

* kl;jasglkknf.,/.sa/.mmmmmmmmm

---------

Signed-off-by: wesker <53323309+weskified@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2026-06-22 11:11:35 +00:00
Delta-V bot 19b0de35dd Automatic changelog update 2026-06-22 10:46:57 +02:00
wesker 1c66c1fe2e
Fix 8 0'Clock Ghosts to be Mono (#6084)
* fix jukebox to be mono

* ACTUALLY fix this, holy shit audacity
2026-06-22 10:46:37 +02:00
Delta-V bot ef46675a2f Automatic changelog update 2026-06-22 06:23:31 +02:00
Halo3moth c0b6929c9a
lower pitbull vent spawn rate (#6081) 2026-06-22 04:23:12 +00:00
3803 changed files with 97618 additions and 90283 deletions

29
.github/CODEOWNERS vendored
View File

@ -1,34 +1,25 @@
# Last match in file takes precedence.
# See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#example-of-a-codeowners-file
# C# code
/Content.*/ @DeltaV-Station/maintainers
# Any assets
/Resources/ @DeltaV-Station/maintainers
* @DeltaV-Station/maintainers
# Server config files
/Resources/ConfigPresets/ @Toby222
/Resources/ConfigPresets/ @DeltaV-Station/lead-maintainers
# Github workflows
/.github/ @DeltaV-Station/lead-maintainers
# Lobby art and music - automatically direction issues since its immediately visible to players
/Resources/Audio/Lobby/ @DeltaV-Station/direction
/Resources/Textures/LobbyScreens/ @DeltaV-Station/direction
/Resources/Audio/Lobby/ @DeltaV-Station/direction @DeltaV-Station/maintainers
/Resources/Textures/LobbyScreens/ @DeltaV-Station/direction @DeltaV-Station/maintainers
# Maps
/Resources/Maps/ @DeltaV-Station/maptainers
/Resources/Prototypes/Maps/ @DeltaV-Station/maptainers
/Content.IntegrationTests/Tests/PostMapInitTest.cs @DeltaV-Station/maptainers
/Content.IntegrationTests/Tests/PostMapInitTest.cs @DeltaV-Station/maptainers @DeltaV-Station/maintainers
# Server rules
/Resources/ServerInfo/Guidebook/_DV/Rules/ @DeltaV-Station/head-administrators
# Wiki
/.wiki/ @DeltaV-Station/direction
# Tools and scripts
/Tools/ @Toby222
# Workflows, codeowners, templates, etc.
/.github/ @Toby222
# Standalone files in the root repo
/* @Toby222
/.wiki/ @DeltaV-Station/direction

View File

@ -32,6 +32,7 @@ jobs:
run: |
cd RobustToolbox/
git submodule update --init --recursive
rm Robust.Shared.Tests/Networking/NetEncryptionDoSTest.cs # DeltaV - work around bug in the backport
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
@ -45,13 +46,23 @@ jobs:
run: dotnet build --configuration DebugOpt --no-restore /m
- name: Run Content.Tests
run: dotnet test --no-build --configuration DebugOpt Content.Tests/Content.Tests.csproj -- NUnit.ConsoleOut=0
shell: pwsh
run: dotnet test --no-build --configuration DebugOpt Content.Tests/Content.Tests.csproj -- NUnit.ConsoleOut=0 NUnit.TestOutputXml="logs" NUnit.WorkDirectory="$(pwd)/test_results"
- name: Run Content.IntegrationTests
shell: pwsh
run: |
$env:DOTNET_gcServer=1
dotnet test --no-build --configuration DebugOpt Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 NUnit.MapWarningTo=Failed
dotnet test --no-build --configuration DebugOpt Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 NUnit.MapWarningTo=Failed NUnit.TestOutputXml="logs" NUnit.WorkDirectory="$(pwd)/test_results"
- name: Archive NUnit3 test results.
if: always()
uses: actions/upload-artifact@v4
with:
name: nunit3-results-${{ matrix.os }}
path: test_results/*
retention-days: 7
compression-level: 9
ci-success:
name: Build & Test Debug
needs:

View File

@ -29,6 +29,7 @@ jobs:
run: |
cd RobustToolbox
git fetch --depth=1
rm Robust.Shared.Tests/Networking/NetEncryptionDoSTest.cs # DeltaV - work around bug in the backport
- name: Install dependencies
run: dotnet restore

View File

@ -48,10 +48,11 @@ jobs:
cd RobustToolbox/
git submodule update --init --recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 10.0.x
# ubuntu-latest has .NET 10
# - name: Setup .NET Core
# uses: actions/setup-dotnet@v4.1.0
# with:
# dotnet-version: 10.0.x
- name: Install dependencies
run: dotnet restore
@ -60,7 +61,13 @@ jobs:
run: dotnet build Content.Packaging --configuration Release --no-restore /m
- name: Package server
run: dotnet run --project Content.Packaging server --platform win-x64 --platform win-arm64 --platform linux-x64 --platform linux-arm64 --platform osx-x64 --platform osx-arm64
run: dotnet run --project Content.Packaging server --log-build --platform win-x64 --platform win-arm64 --platform linux-x64 --platform linux-arm64 --platform osx-x64 --platform osx-arm64
- name: Package client
run: dotnet run --project Content.Packaging client --no-wipe-release
run: dotnet run --project Content.Packaging client --log-build --no-wipe-release
- uses: actions/upload-artifact@v4
with:
name: binlogs
path: release/*.binlog
retention-days: 7

View File

@ -23,6 +23,7 @@ jobs:
run: |
cd RobustToolbox/
git submodule update --init --recursive
rm Robust.Shared.Tests/Networking/NetEncryptionDoSTest.cs # DeltaV - work around bug in the backport
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:

View File

@ -31,7 +31,7 @@ Examples of Pets include, but are not limited to:
:* hand-held "personal AI" devices
== Synthetic ==
Any Entity consisting primarily of non-organic matter, designed and/or constructed by NanoTrasen or its Employees for the purpose of performing tasks aboard a Space Station. Synthetics are bound by software limitations, typically referred to as Synthetic or Silicon Laws, and physically incorporated into their chassis. Any damage to a Synthetic- including un-authorized modification of their Laws- may leave the offender liable to charges of Sabotage. Irrevocable destruction of a Synthetic may leave the offender liable to the crime of Grand Sabotage.
Any Entity consisting primarily of non-organic matter, designed and/or constructed by NanoTrasen or its Employees for the purpose of performing tasks aboard a Space Station. Synthetics are bound by software limitations, typically referred to as Synthetic or Silicon Laws, and physically incorporated into their chassis. Any damage to a Synthetic- including un-authorized modification of their Laws- may leave the offender liable to charges of Sabotage.
Examples of Synthetics include, but are not limited to:
:* Crew-constructed Cyborgs
:* The Station AI
@ -86,7 +86,7 @@ Any individual requiring any above item in the course of their job, or for regul
Should the holder commit crimes through the use of such authorized items, the authorizing party may be found guilty of Accessory to said crimes, in addition to Endangerment and Abuse of Power where applicable. The Commanding Officer is also authorized to supervise the approval and revocation of documentation as they see fit.
== Controlled Substances ==
Any individual requiring a Controlled Substance in the course of their job, or for regular function, must request access to a perscription or special dispensation from the Chief Medical Officer. The Psychologist is also permitted to grant prescriptions for psychoactive drugs. Any such document must state the substance(s) being prescribed, the amount(s) where applicable, and the stamp and signature of the authorizing party.
Any individual requiring a Controlled Substance in the course of their job, or for regular function, must request access to a prescription or special dispensation from the Chief Medical Officer. Medical personnel are also permitted to [[Standard Operating Procedure#Prescribing Medication|prescribe medication]] for chronic illnesses or mental health. Any such document must state the substance(s) being prescribed, the amount(s) where applicable, and the stamp and signature of the authorizing party.
A list of such Substances follow:
@ -370,6 +370,38 @@ Given good medical reason and with documentation, the Chief Medical Officer of a
In order for a medical evaluation to be considered lawfully applicable, the CMO and relevant head of department must both agree that the specified crewmate is unfit for duty in order to proceed with the demotion. In the case of the Commanding Officer, Central Command should be contacted as soon as possible.
==Prescribing Medication==
In the event that a patient requires stronger medication outside of medbay, Medical personnel have the ability to prescribe medicine to a patient. Prescriptions must be written on valid prescription paper, as well as signed and stamped with a valid medical personnel's stamp and signature. Any such document must state the substance(s) being prescribed as well as the amount(s) where applicable. The chief medical officer also has the right to revoke any prescription with valid medical reasoning. Prescriptions are not valid if they are both intended for and signed and stamped by the same person (e.g. You cannot prescribe something to yourself as a doctor).
=== Prescription Medicine ===
Prescriptions that are valid with any medical personnel's stamp and signature are as follows:
* diphenylmethylamine
* equilibrazine
* tranquinase
* neurozenium
* serenitol
* soretizone
Highly-addictive mental health prescriptions that are only valid with the chief medical officer's or psychologist's stamp and signature are as follows:
* blissifylovene
* happiness
Highly-addictive or potentially-harmful prescriptions that are only valid with the chief medical officer's stamp and signature are as follows:
* agonolexyne
* desoxyephedrine
* nocturine
=== Dangerous Chemical Authorizations ===
Other dangerous chemicals that may be authorized and given out ONLY with valid written permission with the chief medical officer's stamp are as follows:
* mindbreaker, heartbreaker, and mute toxins
* amatoxin and other dangerous poisons
* phlogiston, napalm, and chlorine trifluoride
* vestine and romerol
* Any other [[Standard Operating Procedure#Controlled Substances|controlled substances]] not listed here
The chief medical officer is also required to inform and/or forward authorization of any dangerous chemical to Security.
==Quarantine==
Medical staff are afforded the right to quarantine individuals that currently suffer from infectious or contagious diseases, and may confine them within pre-designated quarantine areas in the course of treatment, until the point that they are no longer infectious or harmful to the rest of the crew.

View File

@ -1,5 +1,6 @@
#nullable enable
using System;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@ -44,7 +45,7 @@ public class ComponentQueryBenchmark
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup(typeof(QueryBenchSystem).Assembly);
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
_entMan = _pair.Server.ResolveDependency<IEntityManager>();
_itemQuery = _entMan.GetEntityQuery<ItemComponent>();

View File

@ -7,6 +7,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<IsTestingPlatformApplication>false</IsTestingPlatformApplication>
<Nullable>disable</Nullable>
<DefineConstants>$(DefineConstants);ALLOW_BAD_PRACTICES</DefineConstants>
</PropertyGroup>
<Import Project="../MSBuild/Content.props" />
<ItemGroup>

View File

@ -1,11 +1,11 @@
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Diagnosers;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
using Content.Server.Atmos.Components;
using Content.Server.Atmos.EntitySystems;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.CCVar;
using Robust.Shared;
using Robust.Shared.Analyzers;
@ -69,7 +69,7 @@ public class DeltaPressureBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
var mapdata = await _pair.CreateTestMap();

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@ -69,7 +70,7 @@ public class DestructibleBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
_entMan = server.ResolveDependency<IEntityManager>();

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@ -60,7 +61,7 @@ public class DeviceNetworkingBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup(typeof(DeviceNetworkingBenchmark).Assembly);
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
await server.WaitPost(() =>

View File

@ -1,3 +1,4 @@
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@ -51,7 +52,7 @@ public class GasReactionBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
// Create test map and grid

View File

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
@ -27,7 +28,7 @@ public class HeatCapacityBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
await _pair.Connect();
_cEntMan = _pair.Client.ResolveDependency<IEntityManager>();
_sEntMan = _pair.Server.ResolveDependency<IEntityManager>();

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@ -29,7 +30,7 @@ public class MapLoadBenchmark
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
var server = _pair.Server;
Paths = server.ResolveDependency<IPrototypeManager>()

View File

@ -1,5 +1,6 @@
#nullable enable
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@ -50,7 +51,7 @@ public class PvsBenchmark
#endif
PoolManager.Startup();
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
_entMan = _pair.Server.ResolveDependency<IEntityManager>();
_pair.Server.CfgMan.SetCVar(CVars.NetPVS, true);
_pair.Server.CfgMan.SetCVar(CVars.ThreadParallelCount, 0);

View File

@ -1,4 +1,5 @@
#nullable enable
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@ -21,7 +22,7 @@ public class RaiseEventBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup(typeof(BenchSystem).Assembly);
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
var entMan = _pair.Server.EntMan;
var fact = _pair.Server.ResolveDependency<IComponentFactory>();
var bus = (EntityEventBus)entMan.EventBus;

View File

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
@ -36,7 +37,7 @@ public class SpawnEquipDeleteBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
var mapData = await _pair.CreateTestMap();

View File

@ -0,0 +1,39 @@
using Content.Client.Overlays;
using Content.Shared.Access.Systems;
using Content.Shared.StatusIcon;
using Content.Shared.StatusIcon.Components;
using Robust.Shared.Prototypes;
namespace Content.Client.Access.Systems;
public sealed class JobStatusSystem : SharedJobStatusSystem
{
[Dependency] private readonly ShowJobIconsSystem _showJobIcons = default!;
[Dependency] private readonly ShowCrewIconsSystem _showCrewIcons = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
private static readonly ProtoId<SecurityIconPrototype> CrewBorderIcon = "CrewBorderIcon";
private static readonly ProtoId<SecurityIconPrototype> CrewUncertainBorderIcon = "CrewUncertainBorderIcon";
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<JobStatusComponent, GetStatusIconsEvent>(OnGetStatusIconsEvent);
}
// show the status icons if the player has the correponding HUDs
private void OnGetStatusIconsEvent(Entity<JobStatusComponent> ent, ref GetStatusIconsEvent ev)
{
if (_showJobIcons.IsActive && ent.Comp.JobStatusIcon != null)
ev.StatusIcons.Add(_prototype.Index(ent.Comp.JobStatusIcon));
if (_showCrewIcons.IsActive)
{
if (_showCrewIcons.UncertainCrewBorder)
ev.StatusIcons.Add(_prototype.Index(CrewUncertainBorderIcon));
else if (ent.Comp.IsCrew)
ev.StatusIcons.Add(_prototype.Index(CrewBorderIcon));
}
}
}

View File

@ -2,11 +2,9 @@ using System.Linq; // DeltaV
using Content.Shared.Access;
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems;
using Content.Shared.CCVar;
using Content.Shared.Containers.ItemSlots;
using Content.Shared.CrewManifest;
using Content.Shared.Roles;
using Robust.Shared.Configuration;
using Robust.Shared.Prototypes;
using static Content.Shared.Access.Components.IdCardConsoleComponent;
@ -15,21 +13,13 @@ namespace Content.Client.Access.UI
public sealed class IdCardConsoleBoundUserInterface : BoundUserInterface
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
private readonly SharedIdCardConsoleSystem _idCardConsoleSystem = default!;
private IdCardConsoleWindow? _window;
// CCVar.
private int _maxNameLength;
private int _maxIdJobLength;
public IdCardConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
_idCardConsoleSystem = EntMan.System<SharedIdCardConsoleSystem>();
_maxNameLength =_cfgManager.GetCVar(CCVars.MaxNameLength);
_maxIdJobLength = _cfgManager.GetCVar(CCVars.MaxIdJobLength);
}
protected override void Open()
@ -79,12 +69,6 @@ namespace Content.Client.Access.UI
public void SubmitData(string newFullName, string newJobTitle, List<ProtoId<AccessLevelPrototype>> newAccessList, ProtoId<JobPrototype> newJobPrototype)
{
if (newFullName.Length > _maxNameLength)
newFullName = newFullName[.._maxNameLength];
if (newJobTitle.Length > _maxIdJobLength)
newJobTitle = newJobTitle[.._maxIdJobLength];
SendMessage(new WriteToTargetIdMessage(
newFullName,
newJobTitle,

View File

@ -23,10 +23,6 @@ namespace Content.Client.Access.UI
private readonly IdCardConsoleBoundUserInterface _owner;
// CCVar.
private int _maxNameLength;
private int _maxIdJobLength;
private AccessLevelControl _accessButtons = new();
private readonly List<string> _jobPrototypeIds = new();
@ -46,11 +42,8 @@ namespace Content.Client.Access.UI
_owner = owner;
_maxNameLength = _cfgManager.GetCVar(CCVars.MaxNameLength);
_maxIdJobLength = _cfgManager.GetCVar(CCVars.MaxIdJobLength);
FullNameLineEdit.OnTextEntered += _ => SubmitData();
FullNameLineEdit.IsValid = s => s.Length <= _maxNameLength;
FullNameLineEdit.IsValid = s => s.Length <= _cfgManager.GetCVar(CCVars.MaxNameLength);
FullNameLineEdit.OnTextChanged += _ =>
{
FullNameSaveButton.Disabled = FullNameSaveButton.Text == _lastFullName;
@ -58,7 +51,7 @@ namespace Content.Client.Access.UI
FullNameSaveButton.OnPressed += _ => SubmitData();
JobTitleLineEdit.OnTextEntered += _ => SubmitData();
JobTitleLineEdit.IsValid = s => s.Length <= _maxIdJobLength;
JobTitleLineEdit.IsValid = s => s.Length <= _cfgManager.GetCVar(CCVars.MaxIdJobLength);
JobTitleLineEdit.OnTextChanged += _ =>
{
JobTitleSaveButton.Disabled = JobTitleLineEdit.Text == _lastJobTitle;

View File

@ -1,4 +1,5 @@
using System.Numerics;
using System.Linq;
using System.Numerics;
using Content.Client.Administration.UI.BanList.Bans;
using Content.Client.Administration.UI.BanList.RoleBans;
using Content.Client.Eui;
@ -73,7 +74,7 @@ public sealed class BanListEui : BaseEui
return date.ToString("MM/dd/yyyy h:mm tt");
}
public static void SetData<T>(IBanListLine<T> line, SharedServerBan ban) where T : SharedServerBan
public static void SetData<T>(IBanListLine<T> line, SharedBan ban) where T : SharedBan
{
line.Reason.Text = ban.Reason;
line.BanTime.Text = FormatDate(ban.BanTime);
@ -94,20 +95,20 @@ public sealed class BanListEui : BaseEui
line.BanningAdmin.Text = ban.BanningAdminName;
}
private void OnLineIdsClicked<T>(IBanListLine<T> line) where T : SharedServerBan
private void OnLineIdsClicked<T>(IBanListLine<T> line) where T : SharedBan
{
_popup?.Close();
_popup = null;
var ban = line.Ban;
var id = ban.Id == null ? string.Empty : Loc.GetString("ban-list-id", ("id", ban.Id.Value));
var ip = ban.Address == null
var ip = ban.Addresses.Length == 0
? string.Empty
: Loc.GetString("ban-list-ip", ("ip", ban.Address.Value.address));
var hwid = ban.HWId == null ? string.Empty : Loc.GetString("ban-list-hwid", ("hwid", ban.HWId));
var guid = ban.UserId == null
: Loc.GetString("ban-list-ip", ("ip", string.Join(',', ban.Addresses.Select(a => a.address))));
var hwid = ban.HWIds.Length == 0 ? string.Empty : Loc.GetString("ban-list-hwid", ("hwid", string.Join(',', ban.HWIds)));
var guid = ban.UserIds.Length == 0
? string.Empty
: Loc.GetString("ban-list-guid", ("guid", ban.UserId.Value.ToString()));
: Loc.GetString("ban-list-guid", ("guid", string.Join(',', ban.UserIds)));
_popup = new BanListIdsPopup(id, ip, hwid, guid);

View File

@ -16,7 +16,7 @@ public sealed partial class BanListControl : Control
RobustXamlLoader.Load(this);
}
public void SetBans(List<SharedServerBan> bans)
public void SetBans(List<SharedBan> bans)
{
for (var i = Bans.ChildCount - 1; i >= 1; i--)
{

View File

@ -7,13 +7,13 @@ using static Robust.Client.UserInterface.Controls.BaseButton;
namespace Content.Client.Administration.UI.BanList.Bans;
[GenerateTypedNameReferences]
public sealed partial class BanListLine : BoxContainer, IBanListLine<SharedServerBan>
public sealed partial class BanListLine : BoxContainer, IBanListLine<SharedBan>
{
public SharedServerBan Ban { get; }
public SharedBan Ban { get; }
public event Action<BanListLine>? IdsClicked;
public BanListLine(SharedServerBan ban)
public BanListLine(SharedBan ban)
{
RobustXamlLoader.Load(this);

View File

@ -3,7 +3,7 @@ using Robust.Client.UserInterface.Controls;
namespace Content.Client.Administration.UI.BanList;
public interface IBanListLine<T> where T : SharedServerBan
public interface IBanListLine<T> where T : SharedBan
{
T Ban { get; }
Label Reason { get; }

View File

@ -16,7 +16,7 @@ public sealed partial class RoleBanListControl : Control
RobustXamlLoader.Load(this);
}
public void SetRoleBans(List<SharedServerRoleBan> bans)
public void SetRoleBans(List<SharedBan> bans)
{
for (var i = RoleBans.ChildCount - 1; i >= 1; i--)
{

View File

@ -7,13 +7,13 @@ using static Robust.Client.UserInterface.Controls.BaseButton;
namespace Content.Client.Administration.UI.BanList.RoleBans;
[GenerateTypedNameReferences]
public sealed partial class RoleBanListLine : BoxContainer, IBanListLine<SharedServerRoleBan>
public sealed partial class RoleBanListLine : BoxContainer, IBanListLine<SharedBan>
{
public SharedServerRoleBan Ban { get; }
public SharedBan Ban { get; }
public event Action<RoleBanListLine>? IdsClicked;
public RoleBanListLine(SharedServerRoleBan ban)
public RoleBanListLine(SharedBan ban)
{
RobustXamlLoader.Load(this);
@ -21,7 +21,7 @@ public sealed partial class RoleBanListLine : BoxContainer, IBanListLine<SharedS
IdsHidden.OnPressed += IdsPressed;
BanListEui.SetData(this, ban);
Role.Text = ban.Role;
Role.Text = string.Join(", ", ban.Roles ?? []);
}
private void IdsPressed(ButtonEventArgs buttonEventArgs)

View File

@ -70,7 +70,7 @@ public sealed partial class AdminNotesLine : BoxContainer
TimeLabel.Text = Note.CreatedAt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
ServerLabel.Text = Note.ServerName ?? "Unknown";
RoundLabel.Text = Note.Round == null ? "Unknown round" : "Round " + Note.Round;
RoundLabel.Text = Note.Rounds.Length == 0 ? "Unknown round" : "Round " + string.Join(',', Note.Rounds);
AdminLabel.Text = Note.CreatedByName;
PlaytimeLabel.Text = $"{Note.PlaytimeAtNote.TotalHours: 0.0}h";
@ -143,7 +143,12 @@ public sealed partial class AdminNotesLine : BoxContainer
private string FormatRoleBanMessage()
{
var banMessage = new StringBuilder($"{Loc.GetString("admin-notes-banned-from")} {string.Join(", ", Note.BannedRoles ?? new[] { "unknown" })} ");
var rolesText = string.Join(
", ",
// Explicit cast here to avoid sandbox violation.
(IEnumerable<BanRoleDef>?)Note.BannedRoles ?? [new BanRoleDef("what", "You should not be seeing this")]);
var banMessage = new StringBuilder($"{Loc.GetString("admin-notes-banned-from")} {rolesText} ");
return FormatBanMessageCommon(banMessage);
}

View File

@ -32,9 +32,9 @@ public sealed partial class AdminNotesLinePopup : Popup
IdLabel.Text = Loc.GetString("admin-notes-id", ("id", note.Id));
TypeLabel.Text = Loc.GetString("admin-notes-type", ("type", note.NoteType));
SeverityLabel.Text = Loc.GetString("admin-notes-severity", ("severity", note.NoteSeverity ?? NoteSeverity.None));
RoundIdLabel.Text = note.Round == null
RoundIdLabel.Text = note.Rounds.Length == 0
? Loc.GetString("admin-notes-round-id-unknown")
: Loc.GetString("admin-notes-round-id", ("id", note.Round));
: Loc.GetString("admin-notes-round-id", ("id", string.Join(',', note.Rounds)));
CreatedByLabel.Text = Loc.GetString("admin-notes-created-by", ("author", note.CreatedByName));
CreatedAtLabel.Text = Loc.GetString("admin-notes-created-at", ("date", note.CreatedAt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss")));
EditedByLabel.Text = Loc.GetString("admin-notes-last-edited-by", ("author", note.EditedByName));

View File

@ -25,8 +25,8 @@ public sealed class ClientInnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
var index = _sprite.LayerMapReserve((ent.Owner, sprite), ent.Comp.LayerMap);
if (TryComp<HumanoidAppearanceComponent>(ent, out var humanoidAppearance) &&
ent.Comp.SpeciesSprites.TryGetValue(humanoidAppearance.Species, out var speciesSprite))
if (TryComp<HumanoidProfileComponent>(ent, out var humanoid) &&
ent.Comp.SpeciesSprites.TryGetValue(humanoid.Species, out var speciesSprite))
{
_sprite.LayerSetSprite((ent.Owner, sprite), index, speciesSprite);
}

View File

@ -1,4 +1,4 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Title="{Loc 'anomaly-generator-ui-title'}"
@ -32,7 +32,7 @@
</BoxContainer>
<!--Sprite View-->
<PanelContainer Margin="12 0 0 0"
StyleClasses="Inset"
StyleClasses="BackgroundPanelDark"
VerticalAlignment="Center">
<SpriteView Name="EntityView"
SetSize="96 96"

View File

@ -1,9 +0,0 @@
using Content.Shared.Atmos.Components;
namespace Content.Client.Atmos.Components;
[RegisterComponent]
public sealed partial class MapAtmosphereComponent : SharedMapAtmosphereComponent
{
}

View File

@ -1,6 +1,7 @@
using Content.Client.Stylesheets;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Monitor;
using Content.Shared.FixedPoint;
using Content.Shared.Temperature;
@ -22,6 +23,7 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
private readonly IEntityManager _entManager;
private readonly IResourceCache _cache;
private readonly SharedAtmosphereSystem _atmosphere;
private Dictionary<AtmosAlarmType, string> _alarmStrings = new Dictionary<AtmosAlarmType, string>()
{
@ -37,6 +39,7 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
_entManager = IoCManager.Resolve<IEntityManager>();
_cache = IoCManager.Resolve<IResourceCache>();
_atmosphere = _entManager.System<SharedAtmosphereSystem>();
NetEntity = uid;
Coordinates = coordinates;
@ -149,7 +152,7 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
foreach ((var gas, (var mol, var percent, var alert)) in keyValuePairs)
{
FixedPoint2 gasPercent = percent * 100f;
var gasAbbreviation = Atmospherics.GasAbbreviations.GetValueOrDefault(gas, Loc.GetString("gas-unknown-abbreviation"));
var gasAbbreviation = Loc.GetString(_atmosphere.GetGas(gas).Abbreviation);
var gasLabel = new Label()
{

View File

@ -1,6 +1,7 @@
using Content.Client.Stylesheets;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.FixedPoint;
using Content.Shared.Temperature;
using Robust.Client.AutoGenerated;
@ -19,12 +20,14 @@ public sealed partial class AtmosMonitoringEntryContainer : BoxContainer
private readonly IEntityManager _entManager;
private readonly IResourceCache _cache;
private readonly SharedAtmosphereSystem _atmosphere;
public AtmosMonitoringEntryContainer(AtmosMonitoringConsoleEntry data)
{
RobustXamlLoader.Load(this);
_entManager = IoCManager.Resolve<IEntityManager>();
_cache = IoCManager.Resolve<IResourceCache>();
_atmosphere = _entManager.System<SharedAtmosphereSystem>();
Data = data;
@ -132,7 +135,7 @@ public sealed partial class AtmosMonitoringEntryContainer : BoxContainer
var gasPercent = (FixedPoint2)0f;
gasPercent = percent * 100f;
var gasAbbreviation = Atmospherics.GasAbbreviations.GetValueOrDefault(gas, Loc.GetString("gas-unknown-abbreviation"));
var gasAbbreviation = Loc.GetString(_atmosphere.GetGas(gas).Abbreviation);
var gasLabel = new Label()
{

View File

@ -10,7 +10,9 @@ namespace Content.Client.Atmos.EntitySystems
[UsedImplicitly]
internal sealed class AtmosDebugOverlaySystem : SharedAtmosDebugOverlaySystem
{
public readonly Dictionary<EntityUid, AtmosDebugOverlayMessage> TileData = new();
[Dependency] private readonly IOverlayManager _overlayManager = default!;
public readonly Dictionary<EntityUid, AtmosDebugOverlayMessage> TileData = [];
// Configuration set by debug commands and used by AtmosDebugOverlay {
/// <summary>Value source for display</summary>
@ -25,6 +27,8 @@ namespace Content.Client.Atmos.EntitySystems
public bool CfgCBM = false;
// }
private AtmosDebugOverlay? _overlay;
public override void Initialize()
{
base.Initialize();
@ -34,10 +38,6 @@ namespace Content.Client.Atmos.EntitySystems
SubscribeNetworkEvent<AtmosDebugOverlayDisableMessage>(HandleAtmosDebugOverlayDisableMessage);
SubscribeLocalEvent<GridRemovalEvent>(OnGridRemoved);
var overlayManager = IoCManager.Resolve<IOverlayManager>();
if(!overlayManager.HasOverlay<AtmosDebugOverlay>())
overlayManager.AddOverlay(new AtmosDebugOverlay(this));
}
private void OnGridRemoved(GridRemovalEvent ev)
@ -51,19 +51,25 @@ namespace Content.Client.Atmos.EntitySystems
private void HandleAtmosDebugOverlayMessage(AtmosDebugOverlayMessage message)
{
TileData[GetEntity(message.GridId)] = message;
if (_overlay is not null)
return;
_overlay = new AtmosDebugOverlay(this);
_overlayManager.AddOverlay(_overlay);
}
private void HandleAtmosDebugOverlayDisableMessage(AtmosDebugOverlayDisableMessage ev)
{
TileData.Clear();
RemoveOverlay();
}
public override void Shutdown()
{
base.Shutdown();
var overlayManager = IoCManager.Resolve<IOverlayManager>();
if (overlayManager.HasOverlay<AtmosDebugOverlay>())
overlayManager.RemoveOverlay<AtmosDebugOverlay>();
RemoveOverlay();
}
public void Reset(RoundRestartCleanupEvent ev)
@ -75,6 +81,15 @@ namespace Content.Client.Atmos.EntitySystems
{
return TileData.ContainsKey(gridId);
}
private void RemoveOverlay()
{
if (_overlay is null)
return;
_overlayManager.RemoveOverlay(_overlay);
_overlay = null;
}
}
internal enum AtmosDebugOverlayMode : byte

View File

@ -1,5 +1,6 @@
using System.Runtime.CompilerServices;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Reactions;
namespace Content.Client.Atmos.EntitySystems;
@ -13,6 +14,29 @@ public sealed partial class AtmosphereSystem
implementation.
*/
/// <inheritdoc/>
/// <remarks>No-op on client as reactions aren't entirely in shared.
/// Don't call it. Smile.</remarks>
public override ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder)
{
// Reactions don't work on client so don't even try.
throw new NotImplementedException();
}
public override bool IsMixtureFuel(GasMixture mixture, float epsilon = Atmospherics.Epsilon)
{
var tmp = new float[Atmospherics.AdjustedNumberOfGases];
NumericsHelpers.Multiply(mixture.Moles, GasFuelMask, tmp);
return NumericsHelpers.HorizontalAdd(tmp) > epsilon;
}
public override bool IsMixtureOxidizer(GasMixture mixture, float epsilon = Atmospherics.Epsilon)
{
var tmp = new float[Atmospherics.AdjustedNumberOfGases];
NumericsHelpers.Multiply(mixture.Moles, GasOxidizerMask, tmp);
return NumericsHelpers.HorizontalAdd(tmp) > epsilon;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected override float GetHeatCapacityCalculation(float[] moles, bool space)
{
@ -27,7 +51,7 @@ public sealed partial class AtmosphereSystem
// though this isnt the hottest code path so it should be fine
// the gc can eat a little as a treat
var tmp = new float[moles.Length];
NumericsHelpers.Multiply(moles, GasSpecificHeats, tmp);
NumericsHelpers.Multiply(moles, GasMolarHeatCapacities, tmp);
// Adjust heat capacity by speedup, because this is primarily what
// determines how quickly gases heat up/cool.
return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity);

View File

@ -0,0 +1,30 @@
using Content.Client.Atmos.Overlays;
using JetBrains.Annotations;
using Robust.Client.Graphics;
namespace Content.Client.Atmos.EntitySystems;
/// <summary>
/// System responsible for rendering atmos fire animations using <see cref="GasTileFireOverlay"/>.
/// </summary>
[UsedImplicitly]
public sealed class GasTileFireOverlaySystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
private GasTileFireOverlay _fireOverlay = default!;
public override void Initialize()
{
base.Initialize();
_fireOverlay = new GasTileFireOverlay();
_overlayMan.AddOverlay(_fireOverlay);
}
public override void Shutdown()
{
base.Shutdown();
_overlayMan.RemoveOverlay<GasTileFireOverlay>();
}
}

View File

@ -0,0 +1,30 @@
using Content.Client.Atmos.Overlays;
using JetBrains.Annotations;
using Robust.Client.Graphics;
namespace Content.Client.Atmos.EntitySystems;
/// <summary>
/// System responsible for rendering heat distortion using <see cref="GasTileHeatBlurOverlay"/>.
/// </summary>
[UsedImplicitly]
public sealed class GasTileHeatBlurOverlaySystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
private GasTileHeatBlurOverlay _gasTileHeatBlurOverlay = default!;
public override void Initialize()
{
base.Initialize();
_gasTileHeatBlurOverlay = new GasTileHeatBlurOverlay();
_overlayMan.AddOverlay(_gasTileHeatBlurOverlay);
}
public override void Shutdown()
{
base.Shutdown();
_overlayMan.RemoveOverlay<GasTileHeatBlurOverlay>();
}
}

View File

@ -1,106 +1,85 @@
using Content.Client.Atmos.Overlays;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.GameStates;
namespace Content.Client.Atmos.EntitySystems
namespace Content.Client.Atmos.EntitySystems;
[UsedImplicitly]
public sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem
{
[UsedImplicitly]
public sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem
public override void Initialize()
{
[Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly IOverlayManager _overlayMan = default!;
[Dependency] private readonly SpriteSystem _spriteSys = default!;
[Dependency] private readonly SharedTransformSystem _xformSys = default!;
base.Initialize();
SubscribeNetworkEvent<GasOverlayUpdateEvent>(HandleGasOverlayUpdate);
SubscribeLocalEvent<GasTileOverlayComponent, ComponentHandleState>(OnHandleState);
}
private GasTileOverlay _overlay = default!;
private void OnHandleState(EntityUid gridUid, GasTileOverlayComponent comp, ref ComponentHandleState args)
{
Dictionary<Vector2i, GasOverlayChunk> modifiedChunks;
public override void Initialize()
switch (args.Current)
{
base.Initialize();
SubscribeNetworkEvent<GasOverlayUpdateEvent>(HandleGasOverlayUpdate);
SubscribeLocalEvent<GasTileOverlayComponent, ComponentHandleState>(OnHandleState);
_overlay = new GasTileOverlay(this, EntityManager, _resourceCache, ProtoMan, _spriteSys, _xformSys);
_overlayMan.AddOverlay(_overlay);
}
public override void Shutdown()
{
base.Shutdown();
_overlayMan.RemoveOverlay<GasTileOverlay>();
}
private void OnHandleState(EntityUid gridUid, GasTileOverlayComponent comp, ref ComponentHandleState args)
{
Dictionary<Vector2i, GasOverlayChunk> modifiedChunks;
switch (args.Current)
// is this a delta or full state?
case GasTileOverlayDeltaState delta:
{
// is this a delta or full state?
case GasTileOverlayDeltaState delta:
modifiedChunks = delta.ModifiedChunks;
foreach (var index in comp.Chunks.Keys)
{
modifiedChunks = delta.ModifiedChunks;
foreach (var index in comp.Chunks.Keys)
{
if (!delta.AllChunks.Contains(index))
comp.Chunks.Remove(index);
}
break;
if (!delta.AllChunks.Contains(index))
comp.Chunks.Remove(index);
}
case GasTileOverlayState state:
{
modifiedChunks = state.Chunks;
foreach (var index in comp.Chunks.Keys)
{
if (!state.Chunks.ContainsKey(index))
comp.Chunks.Remove(index);
}
break;
}
default:
return;
break;
}
foreach (var (index, data) in modifiedChunks)
case GasTileOverlayState state:
{
comp.Chunks[index] = data;
modifiedChunks = state.Chunks;
foreach (var index in comp.Chunks.Keys)
{
if (!state.Chunks.ContainsKey(index))
comp.Chunks.Remove(index);
}
break;
}
default:
return;
}
foreach (var (index, data) in modifiedChunks)
{
comp.Chunks[index] = data;
}
}
private void HandleGasOverlayUpdate(GasOverlayUpdateEvent ev)
{
foreach (var (nent, removedIndicies) in ev.RemovedChunks)
{
var grid = GetEntity(nent);
if (!TryComp(grid, out GasTileOverlayComponent? comp))
continue;
foreach (var index in removedIndicies)
{
comp.Chunks.Remove(index);
}
}
private void HandleGasOverlayUpdate(GasOverlayUpdateEvent ev)
foreach (var (nent, gridData) in ev.UpdatedChunks)
{
foreach (var (nent, removedIndicies) in ev.RemovedChunks)
var grid = GetEntity(nent);
if (!TryComp(grid, out GasTileOverlayComponent? comp))
continue;
foreach (var chunkData in gridData)
{
var grid = GetEntity(nent);
if (!TryComp(grid, out GasTileOverlayComponent? comp))
continue;
foreach (var index in removedIndicies)
{
comp.Chunks.Remove(index);
}
}
foreach (var (nent, gridData) in ev.UpdatedChunks)
{
var grid = GetEntity(nent);
if (!TryComp(grid, out GasTileOverlayComponent? comp))
continue;
foreach (var chunkData in gridData)
{
comp.Chunks[chunkData.Index] = chunkData;
}
comp.Chunks[chunkData.Index] = chunkData;
}
}
}

View File

@ -0,0 +1,31 @@
using Content.Client.Atmos.Overlays;
using JetBrains.Annotations;
using Robust.Client.Graphics;
namespace Content.Client.Atmos.EntitySystems;
/// <summary>
/// System responsible for rendering visible atmos gasses (like plasma for example) using <see cref="GasTileVisibleGasOverlay"/>.
/// </summary>
[UsedImplicitly]
public sealed class GasTileVisibleGasOverlaySystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
private GasTileVisibleGasOverlay _visibleGasOverlay = default!;
public override void Initialize()
{
base.Initialize();
_visibleGasOverlay = new GasTileVisibleGasOverlay();
_overlayMan.AddOverlay(_visibleGasOverlay);
}
public override void Shutdown()
{
base.Shutdown();
_overlayMan.RemoveOverlay<GasTileVisibleGasOverlay>();
}
}

View File

@ -7,7 +7,7 @@
<!-- Status (pressure, temperature, alarm state, device total, address, etc) -->
<BoxContainer Orientation="Horizontal" Margin="0 0 0 2">
<!-- Left column (view of entity) -->
<PanelContainer Margin="2 0 6 0" StyleClasses="Inset" VerticalAlignment="Center" VerticalExpand="True">
<PanelContainer Margin="2 0 6 0" StyleClasses="BackgroundPanelDark" VerticalAlignment="Center" VerticalExpand="True">
<SpriteView Name="EntityView" OverrideDirection="South" Scale="2 2" SetSize="64 64"/>
</PanelContainer>
<!-- Center column (pressure, temperature, alarm state) -->

View File

@ -0,0 +1,253 @@
using Content.Client.Atmos.EntitySystems;
using Content.Client.Graphics;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using System.Numerics;
namespace Content.Client.Atmos.Overlays;
/// <summary>
/// Renders a thermal heatmap overlay for gas tiles, used for equipment like thermal glasses.
/// /// </summary>
public sealed class GasTileDangerousTemperatureOverlay : Overlay
{
public override bool RequestScreenTexture { get; set; } = false;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IClyde _clyde = default!;
private GasTileOverlaySystem? _gasTileOverlay;
private readonly SharedTransformSystem _xformSys;
private EntityQuery<GasTileOverlayComponent> _overlayQuery;
private readonly OverlayResourceCache<CachedResources> _resources = new();
private List<Entity<MapGridComponent>> _grids = new();
// Cache used to transform ThermalByte into Color for overlay
private readonly Color[] _colorCache = new Color[256];
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
public GasTileDangerousTemperatureOverlay()
{
IoCManager.InjectDependencies(this);
_xformSys = _entManager.System<SharedTransformSystem>();
_overlayQuery = _entManager.GetEntityQuery<GasTileOverlayComponent>();
for (byte i = 0; i <= ThermalByte.TempResolution; i++)
{
_colorCache[i] = PreCalculateColor(i);
}
_colorCache[ThermalByte.StateVacuum] = Color.Teal;
_colorCache[ThermalByte.StateVacuum].A = 0.6f;
_colorCache[ThermalByte.AtmosImpossible] = Color.Transparent;
#if DEBUG // This shouldn't happend so tell me if you see this LimeGreen on the screen
_colorCache[ThermalByte.ReservedFuture0] = Color.LimeGreen;
_colorCache[ThermalByte.ReservedFuture1] = Color.LimeGreen;
_colorCache[ThermalByte.ReservedFuture2] = Color.LimeGreen;
#else
_colorCache[ThermalByte.ReservedFuture0] = Color.Transparent;
_colorCache[ThermalByte.ReservedFuture1] = Color.Transparent;
_colorCache[ThermalByte.ReservedFuture2] = Color.Transparent;
#endif
}
/// <summary>
/// Used for Calculating onscreen color from ThermalByte core value
/// /// </summary>
private static Color PreCalculateColor(byte byteTemp)
{
// Color Thresholds in Kelvin
// -150 C
const float deepFreezeK = 123.15f;
// -50 C
const float freezeStartK = 223.15f;
// 0 C
const float waterFreezeK = 273.15f;
// 50 C
const float heatStartK = 323.15f;
// 100 C
const float waterBoilK = 373.15f;
// 300 C
const float superHeatK = 573.15f;
var tempK = byteTemp * ThermalByte.TempDegreeResolution;
// Neutral Zone Check (0C to 50C)
// If between 273.15K and 323.15K, it's transparent.
if (tempK >= waterFreezeK && tempK < heatStartK)
{
return Color.Transparent;
}
Color resultingColor;
switch (tempK)
{
case < deepFreezeK:
resultingColor = Color.FromHex("#330066");
resultingColor.A = 0.7f;
break;
case < freezeStartK:
// Interpolate Deep Purple -> Blue
// Range: 123.15 to 223.15 (Span: 100)
resultingColor = Color.InterpolateBetween(
Color.FromHex("#330066"),
Color.Blue,
(tempK - deepFreezeK) * 0.01f);
resultingColor.A = 0.6f;
break;
case < waterFreezeK:
// Interpolate Blue -> Transparent
// Range: 223.15 to 273.15 (Span: 50)
resultingColor = Color.InterpolateBetween(
new Color(Color.Blue.R, Color.Blue.G, Color.Blue.B, 0.6f),
new Color(Color.Blue.R, Color.Blue.G, Color.Blue.B, 0.2f),
(tempK - freezeStartK) * 0.02f);
break;
case < waterBoilK:
// Interpolate Transparent -> Yellow
// Range: 323.15 to 373.15 (Span: 50)
resultingColor = Color.InterpolateBetween(
new Color(Color.Yellow.R, Color.Yellow.G, Color.Yellow.B, 0.2f),
new Color(Color.Yellow.R, Color.Yellow.G, Color.Yellow.B, 0.6f),
(tempK - heatStartK) * 0.02f);
break;
case < superHeatK:
// Interpolate Yellow -> Red
// Range: 373.15 to 573.15 (Span: 200)
resultingColor = Color.InterpolateBetween(
Color.Yellow,
Color.Red,
(tempK - waterBoilK) * 0.005f);
resultingColor.A = 0.6f;
break;
default:
resultingColor = Color.DarkRed;
resultingColor.A = 0.7f;
break;
}
return resultingColor;
}
protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return false;
_gasTileOverlay ??= _entManager.System<GasTileOverlaySystem>();
if (_gasTileOverlay == null)
return false;
var target = args.Viewport.RenderTarget;
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
if (res.TemperatureTarget is null || res.TemperatureTarget.Texture.Size != target.Size)
{
res.TemperatureTarget?.Dispose();
res.TemperatureTarget = _clyde.CreateRenderTarget(
target.Size,
new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb),
name: nameof(GasTileDangerousTemperatureOverlay));
}
var drawHandle = args.WorldHandle;
var worldBounds = args.WorldBounds;
var worldAABB = args.WorldAABB;
var mapId = args.MapId;
var worldToViewportLocal = args.Viewport.GetWorldToLocalMatrix();
drawHandle.RenderInRenderTarget(res.TemperatureTarget,
() =>
{
_grids.Clear();
_mapManager.FindGridsIntersecting(mapId, worldAABB, ref _grids);
foreach (var grid in _grids)
{
if (!_overlayQuery.TryGetComponent(grid.Owner, out var comp))
continue;
var gridTileSizeVec = grid.Comp.TileSizeVector;
var gridTileCenterVec = grid.Comp.TileSizeHalfVector;
var gridEntToWorld = _xformSys.GetWorldMatrix(grid.Owner);
var gridEntToViewportLocal = gridEntToWorld * worldToViewportLocal;
drawHandle.SetTransform(gridEntToViewportLocal);
var worldToGridLocal = _xformSys.GetInvWorldMatrix(grid.Owner);
var floatBounds = worldToGridLocal.TransformBox(worldBounds).Enlarged(grid.Comp.TileSize);
var localBounds = new Box2i(
(int)MathF.Floor(floatBounds.Left),
(int)MathF.Floor(floatBounds.Bottom),
(int)MathF.Ceiling(floatBounds.Right),
(int)MathF.Ceiling(floatBounds.Top));
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var tileGas))
{
var tilePosition = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(tilePosition))
continue;
var gasColor = _colorCache[tileGas.ByteGasTemperature.Value];
if (gasColor.A <= 0f)
continue;
drawHandle.DrawRect(
Box2.CenteredAround(tilePosition + gridTileCenterVec, gridTileSizeVec),
gasColor
);
}
}
}
},
new Color(0, 0, 0, 0));
drawHandle.SetTransform(Matrix3x2.Identity);
return true;
}
protected override void Draw(in OverlayDrawArgs args)
{
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
if (res.TemperatureTarget != null)
args.WorldHandle.DrawTextureRect(res.TemperatureTarget.Texture, args.WorldBounds);
args.WorldHandle.SetTransform(Matrix3x2.Identity);
}
protected override void DisposeBehavior()
{
_resources.Dispose();
base.DisposeBehavior();
}
private sealed class CachedResources : IDisposable
{
public IRenderTexture? TemperatureTarget;
public void Dispose()
{
TemperatureTarget?.Dispose();
}
}
}

View File

@ -0,0 +1,172 @@
using Content.Client.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Species;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.Enums;
using Robust.Shared.Graphics.RSI;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using System.Numerics;
namespace Content.Client.Atmos.Overlays;
/// <summary>
/// Overlay responsible for rendering atmos fire animation.
/// </summary>
public sealed class GasTileFireOverlay : Overlay
{
[Dependency] private readonly IPrototypeManager _protoMan = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities | OverlaySpace.WorldSpaceBelowWorld;
private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
private readonly SharedTransformSystem _xformSys;
private readonly SharedMapSystem _mapSystem = default!;
private readonly ShaderInstance _shader;
private readonly float[] _timer;
private readonly float[][] _frameDelays;
private readonly int[] _frameCounter;
// TODO combine textures into a single texture atlas.
private readonly Texture[][] _frames;
private const int FireStates = 3;
private const string FireRsiPath = "/Textures/Effects/fire.rsi";
public const int GasOverlayZIndex = (int)Shared.DrawDepth.DrawDepth.Effects; // Under ghosts, above mostly everything else
public GasTileFireOverlay()
{
IoCManager.InjectDependencies(this);
_xformSys = _entManager.System<SharedTransformSystem>();
_mapSystem = _entManager.System<SharedMapSystem>();
_shader = _protoMan.Index(UnshadedShader).Instance();
ZIndex = GasOverlayZIndex;
_timer = new float[FireStates];
_frameDelays = new float[FireStates][];
_frameCounter = new int[FireStates];
_frames = new Texture[FireStates][];
var fire = _resourceCache.GetResource<RSIResource>(FireRsiPath).RSI;
for (var i = 0; i < FireStates; i++)
{
if (!fire.TryGetState((i + 1).ToString(), out var state))
throw new ArgumentOutOfRangeException($"Fire RSI doesn't have state \"{i}\"!");
_frames[i] = state.GetFrames(RsiDirection.South);
_frameDelays[i] = state.GetDelays();
_frameCounter[i] = 0;
}
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
for (var i = 0; i < FireStates; i++)
{
var delays = _frameDelays[i];
if (delays.Length == 0)
continue;
var frameCount = _frameCounter[i];
_timer[i] += args.DeltaSeconds;
var time = delays[frameCount];
if (_timer[i] < time) continue;
_timer[i] -= time;
_frameCounter[i] = (frameCount + 1) % _frames[i].Length;
}
}
protected override void Draw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return;
var drawHandle = args.WorldHandle;
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
var overlayQuery = _entManager.GetEntityQuery<GasTileOverlayComponent>();
var gridState = (args.WorldBounds,
args.WorldHandle,
_frames,
_frameCounter,
_shader,
overlayQuery,
xformQuery,
_xformSys);
var mapUid = _mapSystem.GetMapOrInvalid(args.MapId);
if (args.Space != OverlaySpace.WorldSpaceEntities)
return;
// TODO: WorldBounds callback.
_mapManager.FindGridsIntersecting(args.MapId, args.WorldAABB, ref gridState,
static (EntityUid uid, MapGridComponent grid,
ref (Box2Rotated WorldBounds,
DrawingHandleWorld drawHandle,
Texture[][] frames,
int[] frameCounter,
ShaderInstance shader,
EntityQuery<GasTileOverlayComponent> overlayQuery,
EntityQuery<TransformComponent> xformQuery,
SharedTransformSystem xformSys) state) =>
{
if (!state.overlayQuery.TryGetComponent(uid, out var comp) ||
!state.xformQuery.TryGetComponent(uid, out var gridXform))
{
return true;
}
var (_, _, worldMatrix, invMatrix) = state.xformSys.GetWorldPositionRotationMatrixWithInv(gridXform);
state.drawHandle.SetTransform(worldMatrix);
var floatBounds = invMatrix.TransformBox(state.WorldBounds).Enlarged(grid.TileSize);
var localBounds = new Box2i(
(int)MathF.Floor(floatBounds.Left),
(int)MathF.Floor(floatBounds.Bottom),
(int)MathF.Ceiling(floatBounds.Right),
(int)MathF.Ceiling(floatBounds.Top));
// Currently it would be faster to group drawing by gas rather than by chunk, but if the textures are
// ever moved to a single atlas, that should no longer be the case. So this is just grouping draw calls
// by chunk, even though its currently slower.
state.drawHandle.UseShader(state.shader);
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var gas))
{
if (gas.FireState == 0)
continue;
var index = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(index))
continue;
var fireState = gas.FireState - 1;
var texture = state.frames[fireState][state.frameCounter[fireState]];
state.drawHandle.DrawTexture(texture, index);
}
}
return true;
});
drawHandle.UseShader(null);
drawHandle.SetTransform(Matrix3x2.Identity);
}
}

View File

@ -0,0 +1,263 @@
using Content.Client.Atmos.EntitySystems;
using Content.Client.Graphics;
using Content.Client.Resources;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.CCVar;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.Configuration;
using Robust.Shared.Enums;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using System.Numerics;
using Color = Robust.Shared.Maths.Color;
using Texture = Robust.Client.Graphics.Texture;
namespace Content.Client.Atmos.Overlays;
/// <summary>
/// Overlay responsible for rendering heat distortion shader.
/// </summary>
public sealed class GasTileHeatBlurOverlay : Overlay
{
public override bool RequestScreenTexture { get; set; } = true;
private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
private static readonly ProtoId<ShaderPrototype> HeatOverlayShader = "HeatBlur";
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IClyde _clyde = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
private readonly SharedTransformSystem _xformSys;
private readonly ShaderInstance _shader;
private readonly Texture _noiseTexture;
private readonly Texture _heatGradientTexture;
private List<Entity<MapGridComponent>> _intersectingGrids = new();
private readonly OverlayResourceCache<CachedResources> _resources = new();
// Overlay settings
private const float
ShaderSpilling = 2.5f; // for example 4f - spills shader one tile from hotspot, 2.5f - spills it half tile
private const float ShaderStrength = 0.04f; // Makes waves stronger
private const float ShaderScale = 1f; // Makes more waves
private const float ShaderSpeed = 0.4f; // Makes waves run faster
// Overlay settings for reduced motion setting
private const float ShaderStrengthForReducedMotion = 0.01f;
private const float ShaderScaleReducedMotion = 0.5f;
private const float ShaderSpeedReducedMotion = 0.25f;
private const int MinDistortionTemp = 300; // Distortion starts to show up at this temperature in Kelvins
private const int MaxDistortionTemp = 2000; // Maximum distortion strength at this temperature in Kelvins
public override OverlaySpace Space => OverlaySpace.WorldSpace;
public GasTileHeatBlurOverlay()
{
IoCManager.InjectDependencies(this);
_xformSys = _entManager.System<SharedTransformSystem>();
_noiseTexture = _resourceCache.GetTexture("/Textures/Effects/HeatBlur/perlin_noise.png");
_heatGradientTexture = _resourceCache.GetTexture("/Textures/Effects/HeatBlur/soft_circle.png");
_shader = _proto.Index(HeatOverlayShader).InstanceUnique();
_configManager.OnValueChanged(CCVars.ReducedMotion, SetReducedMotion, invokeImmediately: true);
}
private void SetReducedMotion(bool reducedMotion)
{
_shader.SetParameter("strength_scale", reducedMotion ? ShaderStrengthForReducedMotion : ShaderStrength);
_shader.SetParameter("spatial_scale", reducedMotion ? ShaderScaleReducedMotion : ShaderScale);
_shader.SetParameter("speed_scale", reducedMotion ? ShaderSpeedReducedMotion : ShaderSpeed);
}
protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return false;
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
var target = args.Viewport.RenderTarget;
// Probably the resolution of the game window changed, remake the textures.
if (res.HeatTarget?.Texture.Size != target.Size)
{
res.HeatTarget?.Dispose();
res.HeatTarget = _clyde.CreateRenderTarget(
target.Size,
new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb),
name: nameof(GasTileHeatBlurOverlaySystem));
}
if (res.HeatBlurTarget?.Texture.Size != target.Size)
{
res.HeatBlurTarget?.Dispose();
res.HeatBlurTarget = _clyde.CreateRenderTarget(
target.Size,
new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb),
name: $"{nameof(GasTileHeatBlurOverlaySystem)}-blur");
}
var overlayQuery = _entManager.GetEntityQuery<GasTileOverlayComponent>();
args.WorldHandle.UseShader(_proto.Index(UnshadedShader).Instance());
var mapId = args.MapId;
var worldAABB = args.WorldAABB;
var worldBounds = args.WorldBounds;
var worldHandle = args.WorldHandle;
var worldToViewportLocal = args.Viewport.GetWorldToLocalMatrix();
// If there is no distortion after checking all visible tiles, we can bail early
var anyDistortion = false;
// We're rendering in the context of the heat target texture, which will encode data as to where and how strong
// the heat distortion will be
args.WorldHandle.RenderInRenderTarget(res.HeatTarget,
() =>
{
_intersectingGrids.Clear();
_mapManager.FindGridsIntersecting(mapId, worldAABB, ref _intersectingGrids);
foreach (var grid in _intersectingGrids)
{
if (!overlayQuery.TryGetComponent(grid.Owner, out var comp))
continue;
var gridEntToWorld = _xformSys.GetWorldMatrix(grid.Owner);
var gridEntToViewportLocal = gridEntToWorld * worldToViewportLocal;
if (!Matrix3x2.Invert(gridEntToViewportLocal, out var viewportLocalToGridEnt))
continue;
var uvToUi = Matrix3Helpers.CreateScale(res.HeatTarget.Size.X, -res.HeatTarget.Size.Y);
var uvToGridEnt = uvToUi * viewportLocalToGridEnt;
// Because we want the actual distortion to be calculated based on the grid coordinates*, we need
// to pass a matrix transformation to go from the viewport coordinates to grid coordinates.
// * (why? because otherwise the effect would shimmer like crazy as you moved around, think
// moving a piece of warped glass above a picture instead of placing the warped glass on the
// paper and moving them together)
_shader.SetParameter("grid_ent_from_viewport_local", uvToGridEnt);
// Draw commands (like DrawRect) will be using grid coordinates from here
worldHandle.SetTransform(gridEntToViewportLocal);
// We only care about tiles that fit in these bounds
var worldToGridLocal = _xformSys.GetInvWorldMatrix(grid.Owner);
var floatBounds = worldToGridLocal.TransformBox(worldBounds).Enlarged(grid.Comp.TileSize);
var localBounds = new Box2i(
(int)MathF.Floor(floatBounds.Left),
(int)MathF.Floor(floatBounds.Bottom),
(int)MathF.Ceiling(floatBounds.Right),
(int)MathF.Ceiling(floatBounds.Top));
// for each tile and its gas --->
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var tileGas))
{
// Check and make sure the tile is within the viewport/screen
var tilePosition = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(tilePosition))
continue;
// Get the distortion strength from the temperature and bail if it's not hot enough
var strength = GetHeatDistortionStrength(tileGas.ByteGasTemperature);
if (strength <= 0f)
continue;
anyDistortion = true;
// Encode the strength in the red channel
// alpha set to 1 as tile is active
worldHandle.DrawTextureRect(
_heatGradientTexture,
Box2.CenteredAround(tilePosition + grid.Comp.TileSizeHalfVector,
grid.Comp.TileSizeVector * ShaderSpilling),
new Color(strength, 0f, 0f));
}
}
}
},
// This clears the buffer to all zero first...
new Color(0, 0, 0, 0));
// no distortion, no need to render
if (!anyDistortion)
{
args.WorldHandle.UseShader(null);
args.WorldHandle.SetTransform(Matrix3x2.Identity);
return false;
}
return true;
}
protected override void Draw(in OverlayDrawArgs args)
{
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
if (ScreenTexture is null || res.HeatTarget is null || res.HeatBlurTarget is null)
return;
_shader.SetParameter("SCREEN_TEXTURE", ScreenTexture);
_shader.SetParameter("NOISE_TEXTURE", _noiseTexture);
args.WorldHandle.UseShader(_shader);
args.WorldHandle.DrawTextureRect(res.HeatTarget.Texture, args.WorldBounds);
args.WorldHandle.UseShader(null);
args.WorldHandle.SetTransform(Matrix3x2.Identity);
}
protected override void DisposeBehavior()
{
_resources.Dispose();
_configManager.UnsubValueChanged(CCVars.ReducedMotion, SetReducedMotion);
base.DisposeBehavior();
}
/// <summary>
/// Gets the strength of the heat distortion effect based on the temperature of the tile.
/// The strength is a value between 0 and 1, where 0 means no distortion and 1 means maximum distortion.
/// </summary>
/// <param name="temp">The temperature of the tile.</param>
/// <returns>The strength of the heat distortion effect.</returns>
/// <seealso cref="ThermalByte"/>
private static float GetHeatDistortionStrength(ThermalByte temp)
{
if (!temp.TryGetTemperature(out var kelvinTemp))
{
return 0f;
}
var strength = (kelvinTemp - MinDistortionTemp) / (MaxDistortionTemp - MinDistortionTemp);
return MathHelper.Clamp01(strength);
}
internal sealed class CachedResources : IDisposable
{
public IRenderTexture? HeatTarget;
public IRenderTexture? HeatBlurTarget;
public void Dispose()
{
HeatTarget?.Dispose();
HeatBlurTarget?.Dispose();
}
}
}

View File

@ -1,302 +0,0 @@
using System.Numerics;
using Content.Client.Atmos.Components;
using Content.Client.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Prototypes;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.Enums;
using Robust.Shared.Graphics.RSI;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
namespace Content.Client.Atmos.Overlays
{
public sealed class GasTileOverlay : Overlay
{
private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
private readonly IEntityManager _entManager;
private readonly IMapManager _mapManager;
private readonly SharedAtmosphereSystem _atmosphereSystem;
private readonly SharedMapSystem _mapSystem;
private readonly SharedTransformSystem _xformSys;
public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities | OverlaySpace.WorldSpaceBelowWorld;
private readonly ShaderInstance _shader;
// Gas overlays
private readonly float[] _timer;
private readonly float[][] _frameDelays;
private readonly int[] _frameCounter;
// TODO combine textures into a single texture atlas.
private readonly Texture[][] _frames;
// Fire overlays
private const int FireStates = 3;
private const string FireRsiPath = "/Textures/Effects/fire.rsi";
private readonly float[] _fireTimer = new float[FireStates];
private readonly float[][] _fireFrameDelays = new float[FireStates][];
private readonly int[] _fireFrameCounter = new int[FireStates];
private readonly Texture[][] _fireFrames = new Texture[FireStates][];
private int _gasCount;
public const int GasOverlayZIndex = (int) Shared.DrawDepth.DrawDepth.Effects; // Under ghosts, above mostly everything else
public GasTileOverlay(GasTileOverlaySystem system, IEntityManager entManager, IResourceCache resourceCache, IPrototypeManager protoMan, SpriteSystem spriteSys, SharedTransformSystem xformSys)
{
_entManager = entManager;
_mapManager = IoCManager.Resolve<IMapManager>();
_atmosphereSystem = entManager.System<SharedAtmosphereSystem>();
_mapSystem = entManager.System<SharedMapSystem>();
_xformSys = xformSys;
_shader = protoMan.Index(UnshadedShader).Instance();
ZIndex = GasOverlayZIndex;
_gasCount = system.VisibleGasId.Length;
_timer = new float[_gasCount];
_frameDelays = new float[_gasCount][];
_frameCounter = new int[_gasCount];
_frames = new Texture[_gasCount][];
for (var i = 0; i < _gasCount; i++)
{
var gasPrototype = _atmosphereSystem.GetGas(system.VisibleGasId[i]);
SpriteSpecifier overlay;
if (!string.IsNullOrEmpty(gasPrototype.GasOverlaySprite) && !string.IsNullOrEmpty(gasPrototype.GasOverlayState))
overlay = new SpriteSpecifier.Rsi(new (gasPrototype.GasOverlaySprite), gasPrototype.GasOverlayState);
else if (!string.IsNullOrEmpty(gasPrototype.GasOverlayTexture))
overlay = new SpriteSpecifier.Texture(new (gasPrototype.GasOverlayTexture));
else
continue;
switch (overlay)
{
case SpriteSpecifier.Rsi animated:
var rsi = resourceCache.GetResource<RSIResource>(animated.RsiPath).RSI;
var stateId = animated.RsiState;
if (!rsi.TryGetState(stateId, out var state))
continue;
_frames[i] = state.GetFrames(RsiDirection.South);
_frameDelays[i] = state.GetDelays();
_frameCounter[i] = 0;
break;
case SpriteSpecifier.Texture texture:
_frames[i] = new[] { spriteSys.Frame0(texture) };
_frameDelays[i] = Array.Empty<float>();
break;
}
}
var fire = resourceCache.GetResource<RSIResource>(FireRsiPath).RSI;
for (var i = 0; i < FireStates; i++)
{
if (!fire.TryGetState((i + 1).ToString(), out var state))
throw new ArgumentOutOfRangeException($"Fire RSI doesn't have state \"{i}\"!");
_fireFrames[i] = state.GetFrames(RsiDirection.South);
_fireFrameDelays[i] = state.GetDelays();
_fireFrameCounter[i] = 0;
}
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
for (var i = 0; i < _gasCount; i++)
{
var delays = _frameDelays[i];
if (delays.Length == 0)
continue;
var frameCount = _frameCounter[i];
_timer[i] += args.DeltaSeconds;
var time = delays[frameCount];
if (_timer[i] < time)
continue;
_timer[i] -= time;
_frameCounter[i] = (frameCount + 1) % _frames[i].Length;
}
for (var i = 0; i < FireStates; i++)
{
var delays = _fireFrameDelays[i];
if (delays.Length == 0)
continue;
var frameCount = _fireFrameCounter[i];
_fireTimer[i] += args.DeltaSeconds;
var time = delays[frameCount];
if (_fireTimer[i] < time) continue;
_fireTimer[i] -= time;
_fireFrameCounter[i] = (frameCount + 1) % _fireFrames[i].Length;
}
}
protected override void Draw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return;
var drawHandle = args.WorldHandle;
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
var overlayQuery = _entManager.GetEntityQuery<GasTileOverlayComponent>();
var gridState = (args.WorldBounds,
args.WorldHandle,
_gasCount,
_frames,
_frameCounter,
_fireFrames,
_fireFrameCounter,
_shader,
overlayQuery,
xformQuery,
_xformSys);
var mapUid = _mapSystem.GetMapOrInvalid(args.MapId);
if (_entManager.TryGetComponent<MapAtmosphereComponent>(mapUid, out var atmos))
DrawMapOverlay(drawHandle, args, mapUid, atmos);
if (args.Space != OverlaySpace.WorldSpaceEntities)
return;
// TODO: WorldBounds callback.
_mapManager.FindGridsIntersecting(args.MapId, args.WorldAABB, ref gridState,
static (EntityUid uid, MapGridComponent grid,
ref (Box2Rotated WorldBounds,
DrawingHandleWorld drawHandle,
int gasCount,
Texture[][] frames,
int[] frameCounter,
Texture[][] fireFrames,
int[] fireFrameCounter,
ShaderInstance shader,
EntityQuery<GasTileOverlayComponent> overlayQuery,
EntityQuery<TransformComponent> xformQuery,
SharedTransformSystem xformSys) state) =>
{
if (!state.overlayQuery.TryGetComponent(uid, out var comp) ||
!state.xformQuery.TryGetComponent(uid, out var gridXform))
{
return true;
}
var (_, _, worldMatrix, invMatrix) = state.xformSys.GetWorldPositionRotationMatrixWithInv(gridXform);
state.drawHandle.SetTransform(worldMatrix);
var floatBounds = invMatrix.TransformBox(state.WorldBounds).Enlarged(grid.TileSize);
var localBounds = new Box2i(
(int) MathF.Floor(floatBounds.Left),
(int) MathF.Floor(floatBounds.Bottom),
(int) MathF.Ceiling(floatBounds.Right),
(int) MathF.Ceiling(floatBounds.Top));
// Currently it would be faster to group drawing by gas rather than by chunk, but if the textures are
// ever moved to a single atlas, that should no longer be the case. So this is just grouping draw calls
// by chunk, even though its currently slower.
state.drawHandle.UseShader(null);
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var gas))
{
if (gas.Opacity == null!)
continue;
var tilePosition = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(tilePosition))
continue;
for (var i = 0; i < state.gasCount; i++)
{
var opacity = gas.Opacity[i];
if (opacity > 0)
state.drawHandle.DrawTexture(state.frames[i][state.frameCounter[i]], tilePosition, Color.White.WithAlpha(opacity));
}
}
}
// And again for fire, with the unshaded shader
state.drawHandle.UseShader(state.shader);
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var gas))
{
if (gas.FireState == 0)
continue;
var index = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(index))
continue;
var fireState = gas.FireState - 1;
var texture = state.fireFrames[fireState][state.fireFrameCounter[fireState]];
state.drawHandle.DrawTexture(texture, index);
}
}
return true;
});
drawHandle.UseShader(null);
drawHandle.SetTransform(Matrix3x2.Identity);
}
private void DrawMapOverlay(
DrawingHandleWorld handle,
OverlayDrawArgs args,
EntityUid map,
MapAtmosphereComponent atmos)
{
var mapGrid = _entManager.HasComponent<MapGridComponent>(map);
// map-grid atmospheres get drawn above grids
if (mapGrid && args.Space != OverlaySpace.WorldSpaceEntities)
return;
// Normal map atmospheres get drawn below grids
if (!mapGrid && args.Space != OverlaySpace.WorldSpaceBelowWorld)
return;
var bottomLeft = args.WorldAABB.BottomLeft.Floored();
var topRight = args.WorldAABB.TopRight.Ceiled();
for (var x = bottomLeft.X; x <= topRight.X; x++)
{
for (var y = bottomLeft.Y; y <= topRight.Y; y++)
{
var tilePosition = new Vector2(x, y);
for (var i = 0; i < atmos.OverlayData.Opacity.Length; i++)
{
var opacity = atmos.OverlayData.Opacity[i];
if (opacity > 0)
handle.DrawTexture(_frames[i][_frameCounter[i]], tilePosition, Color.White.WithAlpha(opacity));
}
}
}
}
}
}

View File

@ -0,0 +1,248 @@
using Content.Client.Atmos.Components;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.Enums;
using Robust.Shared.Graphics.RSI;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Numerics;
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
namespace Content.Client.Atmos.Overlays;
/// <summary>
/// Overlay responsible for rendering visible atmos gasses (like plasma for example) usin.
/// </summary>
public sealed class GasTileVisibleGasOverlay : Overlay
{
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly IPrototypeManager _protoManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
private readonly SharedAtmosphereSystem _atmosphereSystem;
private readonly SharedMapSystem _mapSystem;
private readonly SharedTransformSystem _xformSys;
private readonly SharedGasTileOverlaySystem _gasTileOverlaySystem;
private readonly SpriteSystem _spriteSystem;
public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities | OverlaySpace.WorldSpaceBelowWorld;
private readonly ShaderInstance _shader;
// Gas overlays
private readonly float[] _timer;
private readonly float[][] _frameDelays;
private readonly int[] _frameCounter;
// TODO combine textures into a single texture atlas.
private readonly Texture[][] _frames;
private readonly int _gasCount;
public const int GasOverlayZIndex = (int)DrawDepth.Gasses; // Under ghosts and fire, above mostly everything else
public GasTileVisibleGasOverlay()
{
IoCManager.InjectDependencies(this);
_atmosphereSystem = _entManager.System<SharedAtmosphereSystem>();
_mapSystem = _entManager.System<SharedMapSystem>();
_xformSys = _entManager.System<SharedTransformSystem>();
_gasTileOverlaySystem = _entManager.System<SharedGasTileOverlaySystem>();
_spriteSystem = _entManager.System<SpriteSystem>();
_shader = _protoManager.Index(UnshadedShader).Instance();
ZIndex = GasOverlayZIndex;
_gasCount = _gasTileOverlaySystem.VisibleGasId.Length;
_timer = new float[_gasCount];
_frameDelays = new float[_gasCount][];
_frameCounter = new int[_gasCount];
_frames = new Texture[_gasCount][];
for (var i = 0; i < _gasCount; i++)
{
var gasPrototype = _atmosphereSystem.GetGas(_gasTileOverlaySystem.VisibleGasId[i]);
switch (gasPrototype.GasOverlaySprite)
{
case SpriteSpecifier.Rsi animated:
var rsi = _resourceCache.GetResource<RSIResource>(animated.RsiPath).RSI;
var stateId = animated.RsiState;
if (!rsi.TryGetState(stateId, out var state))
continue;
_frames[i] = state.GetFrames(RsiDirection.South);
_frameDelays[i] = state.GetDelays();
_frameCounter[i] = 0;
break;
case SpriteSpecifier.Texture texture:
_frames[i] = new[] { _spriteSystem.Frame0(texture) };
_frameDelays[i] = Array.Empty<float>();
break;
}
}
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
for (var i = 0; i < _gasCount; i++)
{
var delays = _frameDelays[i];
if (delays.Length == 0)
continue;
var frameCount = _frameCounter[i];
_timer[i] += args.DeltaSeconds;
var time = delays[frameCount];
if (_timer[i] < time)
continue;
_timer[i] -= time;
_frameCounter[i] = (frameCount + 1) % _frames[i].Length;
}
}
protected override void Draw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return;
var drawHandle = args.WorldHandle;
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
var overlayQuery = _entManager.GetEntityQuery<GasTileOverlayComponent>();
var gridState = (args.WorldBounds,
args.WorldHandle,
_gasCount,
_frames,
_frameCounter,
_shader,
overlayQuery,
xformQuery,
_xformSys);
var mapUid = _mapSystem.GetMapOrInvalid(args.MapId);
if (_entManager.TryGetComponent<MapAtmosphereComponent>(mapUid, out var atmos))
DrawMapOverlay(drawHandle, args, mapUid, atmos);
if (args.Space != OverlaySpace.WorldSpaceEntities)
return;
// TODO: WorldBounds callback.
_mapManager.FindGridsIntersecting(args.MapId,
args.WorldAABB,
ref gridState,
static (EntityUid uid,
MapGridComponent grid,
ref (Box2Rotated WorldBounds,
DrawingHandleWorld drawHandle,
int gasCount,
Texture[][] frames,
int[] frameCounter,
ShaderInstance shader,
EntityQuery<GasTileOverlayComponent> overlayQuery,
EntityQuery<TransformComponent> xformQuery,
SharedTransformSystem xformSys) state) =>
{
if (!state.overlayQuery.TryGetComponent(uid, out var comp) ||
!state.xformQuery.TryGetComponent(uid, out var gridXform))
{
return true;
}
var (_, _, worldMatrix, invMatrix) = state.xformSys.GetWorldPositionRotationMatrixWithInv(gridXform);
state.drawHandle.SetTransform(worldMatrix);
var floatBounds = invMatrix.TransformBox(state.WorldBounds).Enlarged(grid.TileSize);
var localBounds = new Box2i(
(int)MathF.Floor(floatBounds.Left),
(int)MathF.Floor(floatBounds.Bottom),
(int)MathF.Ceiling(floatBounds.Right),
(int)MathF.Ceiling(floatBounds.Top));
// Currently it would be faster to group drawing by gas rather than by chunk, but if the textures are
// ever moved to a single atlas, that should no longer be the case. So this is just grouping draw calls
// by chunk, even though its currently slower.
state.drawHandle.UseShader(null);
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var gas))
{
if (gas.Opacity == null!)
continue;
var tilePosition = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(tilePosition))
continue;
for (var i = 0; i < state.gasCount; i++)
{
var opacity = gas.Opacity[i];
if (opacity > 0)
{
state.drawHandle.DrawTexture(state.frames[i][state.frameCounter[i]],
tilePosition,
Color.White.WithAlpha(opacity));
}
}
}
}
return true;
});
drawHandle.UseShader(null);
drawHandle.SetTransform(Matrix3x2.Identity);
}
private void DrawMapOverlay(
DrawingHandleWorld handle,
OverlayDrawArgs args,
EntityUid map,
MapAtmosphereComponent atmos)
{
var mapGrid = _entManager.HasComponent<MapGridComponent>(map);
// map-grid atmospheres get drawn above grids
if (mapGrid && args.Space != OverlaySpace.WorldSpaceEntities)
return;
// Normal map atmospheres get drawn below grids
if (!mapGrid && args.Space != OverlaySpace.WorldSpaceBelowWorld)
return;
var bottomLeft = args.WorldAABB.BottomLeft.Floored();
var topRight = args.WorldAABB.TopRight.Ceiled();
for (var x = bottomLeft.X; x <= topRight.X; x++)
{
for (var y = bottomLeft.Y; y <= topRight.Y; y++)
{
var tilePosition = new Vector2(x, y);
for (var i = 0; i < atmos.OverlayData.Opacity.Length; i++)
{
var opacity = atmos.OverlayData.Opacity[i];
if (opacity > 0)
handle.DrawTexture(_frames[i][_frameCounter[i]], tilePosition, Color.White.WithAlpha(opacity));
}
}
}
}
}

View File

@ -1,41 +1,33 @@
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
using static Content.Shared.Atmos.Components.GasAnalyzerComponent;
using Content.Shared.Atmos.Components;
namespace Content.Client.Atmos.UI
namespace Content.Client.Atmos.UI;
public sealed class GasAnalyzerBoundUserInterface : BoundUserInterface
{
public sealed class GasAnalyzerBoundUserInterface : BoundUserInterface
[ViewVariables]
private GasAnalyzerWindow? _window;
public GasAnalyzerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
[ViewVariables]
private GasAnalyzerWindow? _window;
}
public GasAnalyzerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
protected override void Open()
{
base.Open();
protected override void Open()
{
base.Open();
_window = this.CreateWindowCenteredLeft<GasAnalyzerWindow>();
_window.OnClose += Close;
}
_window = this.CreateWindowCenteredLeft<GasAnalyzerWindow>();
_window.OnClose += Close;
}
protected override void ReceiveMessage(BoundUserInterfaceMessage message)
{
if (_window == null)
return;
protected override void ReceiveMessage(BoundUserInterfaceMessage message)
{
if (_window == null)
return;
if (message is not GasAnalyzerUserMessage cast)
return;
_window.Populate(cast);
}
if (message is not GasAnalyzerUserMessage cast)
return;
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
_window?.Dispose();
}
_window.Populate(cast);
}
}

View File

@ -1,6 +1,8 @@
using System.Numerics;
using Content.Client.UserInterface.Controls;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Temperature;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
@ -8,7 +10,6 @@ using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.XAML;
using static Content.Shared.Atmos.Components.GasAnalyzerComponent;
using Direction = Robust.Shared.Maths.Direction;
namespace Content.Client.Atmos.UI
@ -16,25 +17,17 @@ namespace Content.Client.Atmos.UI
[GenerateTypedNameReferences]
public sealed partial class GasAnalyzerWindow : DefaultWindow
{
private readonly SharedAtmosphereSystem _atmosphere;
private NetEntity _currentEntity = NetEntity.Invalid;
public GasAnalyzerWindow()
{
RobustXamlLoader.Load(this);
_atmosphere = IoCManager.Resolve<IEntityManager>().System<SharedAtmosphereSystem>();
}
public void Populate(GasAnalyzerUserMessage msg)
{
if (msg.Error != null)
{
CTopBox.AddChild(new Label
{
Text = Loc.GetString("gas-analyzer-window-error-text", ("errorText", msg.Error)),
FontColorOverride = Color.Red
});
return;
}
if (msg.NodeGasMixes.Length == 0)
{
CTopBox.AddChild(new Label
@ -329,31 +322,31 @@ namespace Content.Client.Atmos.UI
for (var j = 0; j < gasMix.Gases.Length; j++)
{
var gas = gasMix.Gases[j];
var color = Color.FromHex($"#{gas.Color}", Color.White);
var gasEntry = gasMix.Gases[j];
var gasProto = _atmosphere.GetGas(gasEntry.Gas);
// Add to the table
tableKey.AddChild(new Label
{
Text = Loc.GetString(gas.Name)
Text = Loc.GetString(gasProto.Name)
});
tableVal.AddChild(new Label
{
Text = Loc.GetString("gas-analyzer-window-molarity-text",
("mol", $"{gas.Amount:0.00}")),
("mol", $"{gasEntry.Amount:0.00}")),
Align = Label.AlignMode.Right,
});
tablePercent.AddChild(new Label
{
Text = Loc.GetString("gas-analyzer-window-percentage-text",
("percentage", $"{(gas.Amount / totalGasAmount * 100):0.0}")),
("percentage", $"{(gasEntry.Amount / totalGasAmount * 100):0.0}")),
Align = Label.AlignMode.Right
});
// Add to the gas bar //TODO: highlight the currently hover one
gasBar.AddEntry(gas.Amount, color, tooltip: Loc.GetString("gas-analyzer-window-molarity-percentage-text",
("gasName", gas.Name),
("amount", $"{gas.Amount:0.##}"),
("percentage", $"{(gas.Amount / totalGasAmount * 100):0.#}")));
gasBar.AddEntry(gasEntry.Amount, gasProto.Color, tooltip: Loc.GetString("gas-analyzer-window-molarity-percentage-text",
("gasName", Loc.GetString(gasProto.Name)),
("amount", $"{gasEntry.Amount:0.##}"),
("percentage", $"{(gasEntry.Amount / totalGasAmount * 100):0.#}")));
}
dataContainer.AddChild(gasBar);

View File

@ -37,10 +37,9 @@ namespace Content.Client.Atmos.UI
_window.SelectGasPressed += OnSelectGasPressed;
}
private void OnToggleStatusButtonPressed()
private void OnToggleStatusButtonPressed(bool status)
{
if (_window is null) return;
SendMessage(new GasFilterToggleStatusMessage(_window.FilterStatus));
SendMessage(new GasFilterToggleStatusMessage(status));
}
private void OnFilterTransferRatePressed(string value)

View File

@ -1,11 +1,12 @@
<DefaultWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinSize="480 400" Title="Filter">
<BoxContainer Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-filter-ui-filter-status}"/>
<Button Name="ToggleStatusButton"/>
</BoxContainer>
<controls:SwitchButton
Name="ToggleStatusButton"
HorizontalAlignment="Left"
Pressed="True" />
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-filter-ui-filter-transfer-rate}"/>

View File

@ -18,11 +18,10 @@ namespace Content.Client.Atmos.UI
{
private readonly ButtonGroup _buttonGroup = new();
public bool FilterStatus = true;
public string? SelectedGas;
public string? CurrentGasId;
public event Action? ToggleStatusButtonPressed;
public event Action<bool>? ToggleStatusButtonPressed;
public event Action<string>? FilterTransferRateChanged;
public event Action? SelectGasPressed;
@ -30,8 +29,7 @@ namespace Content.Client.Atmos.UI
{
RobustXamlLoader.Load(this);
ToggleStatusButton.OnPressed += _ => SetFilterStatus(!FilterStatus);
ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke();
ToggleStatusButton.OnToggled += _ => ToggleStatusButtonPressed?.Invoke(ToggleStatusButton.Pressed);
FilterTransferRateInput.OnTextChanged += _ => SetFilterRate.Disabled = false;
SetFilterRate.OnPressed += _ =>
@ -53,15 +51,7 @@ namespace Content.Client.Atmos.UI
public void SetFilterStatus(bool enabled)
{
FilterStatus = enabled;
if (enabled)
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-filter-ui-status-enabled");
}
else
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-filter-ui-status-disabled");
}
ToggleStatusButton.Pressed = enabled;
}
public void SetGasFiltered(string? id, string name)

View File

@ -33,10 +33,9 @@ namespace Content.Client.Atmos.UI
_window.MixerNodePercentageChanged += OnMixerSetPercentagePressed;
}
private void OnToggleStatusButtonPressed()
private void OnToggleStatusButtonPressed(bool status)
{
if (_window is null) return;
SendMessage(new GasMixerToggleStatusMessage(_window.MixerStatus));
SendMessage(new GasMixerToggleStatusMessage(status));
}
private void OnMixerOutputPressurePressed(string value)

View File

@ -1,12 +1,12 @@
<DefaultWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinSize="200 200" Title="Gas Mixer">
<BoxContainer Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-mixer-ui-mixer-status}"/>
<Control MinSize="5 0" />
<Button Name="ToggleStatusButton"/>
</BoxContainer>
<controls:SwitchButton
Name="ToggleStatusButton"
HorizontalAlignment="Left"
Pressed="True" />
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-mixer-ui-mixer-output-pressure}"/>
<Control MinSize="5 0" />

View File

@ -21,9 +21,7 @@ namespace Content.Client.Atmos.UI
[GenerateTypedNameReferences]
public sealed partial class GasMixerWindow : DefaultWindow
{
public bool MixerStatus = true;
public event Action? ToggleStatusButtonPressed;
public event Action<bool>? ToggleStatusButtonPressed;
public event Action<string>? MixerOutputPressureChanged;
public event Action<string>? MixerNodePercentageChanged;
@ -33,8 +31,7 @@ namespace Content.Client.Atmos.UI
{
RobustXamlLoader.Load(this);
ToggleStatusButton.OnPressed += _ => SetMixerStatus(!MixerStatus);
ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke();
ToggleStatusButton.OnToggled += _ => ToggleStatusButtonPressed?.Invoke(ToggleStatusButton.Pressed);
MixerPressureOutputInput.OnTextChanged += _ => SetOutputPressureButton.Disabled = false;
SetOutputPressureButton.OnPressed += _ =>
@ -83,15 +80,7 @@ namespace Content.Client.Atmos.UI
public void SetMixerStatus(bool enabled)
{
MixerStatus = enabled;
if (enabled)
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-mixer-ui-status-enabled");
}
else
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-mixer-ui-status-disabled");
}
ToggleStatusButton.Pressed = enabled;
}
}
}

View File

@ -42,12 +42,9 @@ public sealed class GasPressurePumpBoundUserInterface(EntityUid owner, Enum uiKe
_window.SetOutputPressure(pump.TargetPressure);
}
private void OnToggleStatusButtonPressed()
private void OnToggleStatusButtonPressed(bool status)
{
if (_window is null)
return;
SendPredictedMessage(new GasPressurePumpToggleStatusMessage(_window.PumpStatus));
SendPredictedMessage(new GasPressurePumpToggleStatusMessage(status));
}
private void OnPumpOutputPressurePressed(float value)

View File

@ -4,8 +4,10 @@
SetSize="340 110" MinSize="340 110" Title="Pressure Pump">
<BoxContainer Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-pump-ui-pump-status}" Margin="0 0 5 0"/>
<Button Name="ToggleStatusButton"/>
<controls:SwitchButton
Name="ToggleStatusButton"
HorizontalAlignment="Left"
Pressed="True" />
<Control HorizontalExpand="True"/>
<Button HorizontalAlignment="Right" Name="SetOutputPressureButton" Text="{Loc comp-gas-pump-ui-pump-set-rate}" Disabled="True" Margin="0 0 5 0"/>
<Button Name="SetMaxPressureButton" Text="{Loc comp-gas-pump-ui-pump-set-max}" />

View File

@ -11,9 +11,7 @@ namespace Content.Client.Atmos.UI
[GenerateTypedNameReferences]
public sealed partial class GasPressurePumpWindow : FancyWindow
{
public bool PumpStatus = true;
public event Action? ToggleStatusButtonPressed;
public event Action<bool>? ToggleStatusButtonPressed;
public event Action<float>? PumpOutputPressureChanged;
public float MaxPressure
@ -33,8 +31,7 @@ namespace Content.Client.Atmos.UI
{
RobustXamlLoader.Load(this);
ToggleStatusButton.OnPressed += _ => SetPumpStatus(!PumpStatus);
ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke();
ToggleStatusButton.OnToggled += _ => ToggleStatusButtonPressed?.Invoke(ToggleStatusButton.Pressed);
PumpPressureOutputInput.OnValueChanged += _ => SetOutputPressureButton.Disabled = false;
@ -59,15 +56,7 @@ namespace Content.Client.Atmos.UI
public void SetPumpStatus(bool enabled)
{
PumpStatus = enabled;
if (enabled)
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-pump-ui-status-enabled");
}
else
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-pump-ui-status-disabled");
}
ToggleStatusButton.Pressed = enabled;
}
}
}

View File

@ -37,7 +37,7 @@ namespace Content.Client.Atmos.UI
_window = this.CreateWindow<GasThermomachineWindow>();
_window.ToggleStatusButton.OnPressed += _ => OnToggleStatusButtonPressed();
_window.ToggleStatusButton.OnToggled += _ => OnToggleStatusButtonPressed();
_window.TemperatureSpinbox.OnValueChanged += _ => OnTemperatureChanged(_window.TemperatureSpinbox.Value);
_window.Entity = Owner;
Update();
@ -45,9 +45,6 @@ namespace Content.Client.Atmos.UI
private void OnToggleStatusButtonPressed()
{
if (_window is null) return;
_window.SetActive(!_window.Active);
SendPredictedMessage(new GasThermomachineToggleMessage());
}

View File

@ -3,11 +3,11 @@
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinSize="300 120" Title="{Loc comp-gas-thermomachine-ui-title-freezer}">
<BoxContainer Name="VboxContainer" Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-thermomachine-ui-toggle}"/>
<Control MinSize="5 0" />
<Button Access="Public" Name="ToggleStatusButton"/>
</BoxContainer>
<controls:SwitchButton
Name="ToggleStatusButton"
HorizontalAlignment="Left"
Pressed="True"
Access="Public" />
<BoxContainer Name="SpinboxHBox" Orientation="Horizontal">
<Label Text="{Loc comp-gas-thermomachine-ui-temperature}"/>
</BoxContainer>

View File

@ -12,8 +12,6 @@ public sealed partial class GasThermomachineWindow : FancyWindow
{
[Dependency] private readonly IEntityManager _entManager = default!;
public bool Active = true;
public FloatSpinBox TemperatureSpinbox;
public EntityUid Entity;
@ -30,15 +28,7 @@ public sealed partial class GasThermomachineWindow : FancyWindow
public void SetActive(bool active)
{
Active = active;
if (active)
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-thermomachine-ui-status-enabled");
}
else
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-thermomachine-ui-status-disabled");
}
ToggleStatusButton.Pressed = active;
}
public void SetTemperature(float temperature)

View File

@ -38,11 +38,9 @@ namespace Content.Client.Atmos.UI
Update();
}
private void OnToggleStatusButtonPressed()
private void OnToggleStatusButtonPressed(bool status)
{
if (_window is null) return;
SendPredictedMessage(new GasVolumePumpToggleStatusMessage(_window.PumpStatus));
SendPredictedMessage(new GasVolumePumpToggleStatusMessage(status));
}
private void OnPumpTransferRatePressed(string value)

View File

@ -3,11 +3,10 @@
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinSize="200 120" Title="Volume Pump">
<BoxContainer Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-pump-ui-pump-status}"/>
<Control MinSize="5 0" />
<Button Name="ToggleStatusButton"/>
</BoxContainer>
<controls:SwitchButton
Name="ToggleStatusButton"
HorizontalAlignment="Left"
Pressed="True" />
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-pump-ui-pump-transfer-rate}"/>

View File

@ -19,17 +19,14 @@ namespace Content.Client.Atmos.UI
[GenerateTypedNameReferences]
public sealed partial class GasVolumePumpWindow : FancyWindow
{
public bool PumpStatus = true;
public event Action? ToggleStatusButtonPressed;
public event Action<bool>? ToggleStatusButtonPressed;
public event Action<string>? PumpTransferRateChanged;
public GasVolumePumpWindow()
{
RobustXamlLoader.Load(this);
ToggleStatusButton.OnPressed += _ => SetPumpStatus(!PumpStatus);
ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke();
ToggleStatusButton.OnToggled += _ => ToggleStatusButtonPressed?.Invoke(ToggleStatusButton.Pressed);
PumpTransferRateInput.OnTextChanged += _ => SetTransferRateButton.Disabled = false;
SetTransferRateButton.OnPressed += _ =>
@ -52,15 +49,7 @@ namespace Content.Client.Atmos.UI
public void SetPumpStatus(bool enabled)
{
PumpStatus = enabled;
if (enabled)
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-pump-ui-status-enabled");
}
else
{
ToggleStatusButton.Text = Loc.GetString("comp-gas-pump-ui-status-disabled");
}
ToggleStatusButton.Pressed = enabled;
}
}
}

View File

@ -24,7 +24,7 @@ public sealed class SpaceHeaterBoundUserInterface : BoundUserInterface
_window = this.CreateWindow<SpaceHeaterWindow>();
_window.ToggleStatusButton.OnPressed += _ => OnToggleStatusButtonPressed();
_window.ToggleStatusButton.OnToggled += _ => OnToggleStatusButtonPressed();
_window.IncreaseTempRange.OnPressed += _ => OnTemperatureRangeChanged(_window.TemperatureChangeDelta);
_window.DecreaseTempRange.OnPressed += _ => OnTemperatureRangeChanged(-_window.TemperatureChangeDelta);
_window.ModeSelector.OnItemSelected += OnModeChanged;
@ -34,7 +34,6 @@ public sealed class SpaceHeaterBoundUserInterface : BoundUserInterface
private void OnToggleStatusButtonPressed()
{
_window?.SetActive(!_window.Active);
SendMessage(new SpaceHeaterToggleMessage());
}

View File

@ -1,13 +1,15 @@
<DefaultWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinSize="280 160" Title="{Loc comp-space-heater-ui-title}">
<BoxContainer Name="VboxContainer" Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Button Text="{Loc comp-space-heater-ui-status-disabled}" Access="Public" Name="ToggleStatusButton"/>
</BoxContainer>
<controls:SwitchButton
Name="ToggleStatusButton"
HorizontalExpand="True"
Access="Public" />
<BoxContainer Orientation="Horizontal" SeparationOverride="5">
<Label Text="{Loc comp-space-heater-ui-mode}"/>
<OptionButton Access="Public" Name="ModeSelector"/>

View File

@ -15,7 +15,6 @@ public sealed partial class SpaceHeaterWindow : DefaultWindow
{
// To account for a minimum delta temperature for atmos equalization to trigger we use a fixed step for target temperature increment/decrement
public int TemperatureChangeDelta = 5;
public bool Active;
// Temperatures range bounds in Kelvin (K)
public float MinTemp;
@ -49,17 +48,7 @@ public sealed partial class SpaceHeaterWindow : DefaultWindow
public void SetActive(bool active)
{
Active = active;
ToggleStatusButton.Pressed = active;
if (active)
{
ToggleStatusButton.Text = Loc.GetString("comp-space-heater-ui-status-enabled");
}
else
{
ToggleStatusButton.Text = Loc.GetString("comp-space-heater-ui-status-disabled");
}
}
public void SetTemperature(float targetTemperature)

View File

@ -1,6 +1,7 @@
using System.Linq;
using Content.Shared.BarSign;
using JetBrains.Annotations;
using Robust.Client.UserInterface;
using Robust.Shared.Prototypes;
namespace Content.Client.BarSign.Ui;
@ -16,13 +17,12 @@ public sealed class BarSignBoundUserInterface(EntityUid owner, Enum uiKey) : Bou
{
base.Open();
var sign = EntMan.GetComponentOrNull<BarSignComponent>(Owner)?.Current is { } current
? _prototype.Index(current)
: null;
var allSigns = BarSignSystem.GetAllBarSigns(_prototype)
.OrderBy(p => Loc.GetString(p.Name))
.ToList();
_menu = new(sign, allSigns);
_menu = this.CreateWindow<BarSignMenu>();
_menu.LoadSigns(allSigns);
_menu.OnSignSelected += id =>
{
@ -30,16 +30,17 @@ public sealed class BarSignBoundUserInterface(EntityUid owner, Enum uiKey) : Bou
};
_menu.OnClose += Close;
_menu.OpenCentered();
_menu.OpenToLeft();
}
public override void Update()
{
if (!EntMan.TryGetComponent<BarSignComponent>(Owner, out var signComp))
if (!EntMan.TryGetComponent<BarSignComponent>(Owner, out var signComp)
|| !_prototype.Resolve(signComp.Current, out var signPrototype))
return;
if (_prototype.Resolve(signComp.Current, out var signPrototype))
_menu?.UpdateState(signPrototype);
_menu?.UpdateState(signPrototype);
}
}

View File

@ -8,23 +8,13 @@ namespace Content.Client.BarSign.Ui;
[GenerateTypedNameReferences]
public sealed partial class BarSignMenu : FancyWindow
{
private string? _currentId;
private readonly List<BarSignPrototype> _cachedPrototypes = new();
private List<BarSignPrototype> _cachedPrototypes = new();
public event Action<string>? OnSignSelected;
public BarSignMenu(BarSignPrototype? currentSign, List<BarSignPrototype> signs)
public BarSignMenu()
{
RobustXamlLoader.Load(this);
_currentId = currentSign?.ID;
_cachedPrototypes.Clear();
_cachedPrototypes = signs;
foreach (var proto in _cachedPrototypes)
{
SignOptions.AddItem(Loc.GetString(proto.Name));
}
SignOptions.OnItemSelected += idx =>
{
@ -32,18 +22,21 @@ public sealed partial class BarSignMenu : FancyWindow
SignOptions.SelectId(idx.Id);
};
if (currentSign != null)
}
public void LoadSigns(List<BarSignPrototype> signs)
{
_cachedPrototypes.Clear();
_cachedPrototypes = signs;
foreach (var proto in _cachedPrototypes)
{
var idx = _cachedPrototypes.IndexOf(currentSign);
SignOptions.TrySelectId(idx);
SignOptions.AddItem(Loc.GetString(proto.Name));
}
}
public void UpdateState(BarSignPrototype newSign)
{
if (_currentId != null && newSign.ID == _currentId)
return;
_currentId = newSign.ID;
var idx = _cachedPrototypes.IndexOf(newSign);
SignOptions.TrySelectId(idx);
}

View File

@ -1,7 +0,0 @@
using Content.Shared.Body.Systems;
namespace Content.Client.Body.Systems;
public sealed class BodySystem : SharedBodySystem
{
}

View File

@ -1,6 +0,0 @@
using Content.Shared.Body.Systems;
namespace Content.Client.Body.Systems;
/// <inheritdoc/>
public sealed class MetabolizerSystem : SharedMetabolizerSystem;

View File

@ -0,0 +1,264 @@
using System.Linq;
using Content.Shared.Body;
using Content.Shared.CCVar;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Humanoid;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Shared.Configuration;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Client.Body;
public sealed class VisualBodySystem : SharedVisualBodySystem
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly MarkingManager _marking = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<VisualOrganComponent, OrganGotInsertedEvent>(OnOrganGotInserted);
SubscribeLocalEvent<VisualOrganComponent, OrganGotRemovedEvent>(OnOrganGotRemoved);
SubscribeLocalEvent<VisualOrganComponent, AfterAutoHandleStateEvent>(OnOrganState);
SubscribeLocalEvent<VisualOrganMarkingsComponent, OrganGotInsertedEvent>(OnMarkingsGotInserted);
SubscribeLocalEvent<VisualOrganMarkingsComponent, OrganGotRemovedEvent>(OnMarkingsGotRemoved);
SubscribeLocalEvent<VisualOrganMarkingsComponent, AfterAutoHandleStateEvent>(OnMarkingsState);
SubscribeLocalEvent<VisualOrganMarkingsComponent, BodyRelayedEvent<HumanoidLayerVisibilityChangedEvent>>(OnMarkingsChangedVisibility);
Subs.CVar(_cfg, CCVars.AccessibilityClientCensorNudity, OnCensorshipChanged, true);
Subs.CVar(_cfg, CCVars.AccessibilityServerCensorNudity, OnCensorshipChanged, true);
}
private void OnCensorshipChanged(bool value)
{
var query = AllEntityQuery<OrganComponent, VisualOrganMarkingsComponent>();
while (query.MoveNext(out var ent, out var organComp, out var markingsComp))
{
if (organComp.Body is not { } body)
continue;
RemoveMarkings((ent, markingsComp), body);
ApplyMarkings((ent, markingsComp), body);
}
}
private void OnOrganGotInserted(Entity<VisualOrganComponent> ent, ref OrganGotInsertedEvent args)
{
ApplyVisual(ent, args.Target);
}
private void OnOrganGotRemoved(Entity<VisualOrganComponent> ent, ref OrganGotRemovedEvent args)
{
RemoveVisual(ent, args.Target);
}
private void OnOrganState(Entity<VisualOrganComponent> ent, ref AfterAutoHandleStateEvent args)
{
if (Comp<OrganComponent>(ent).Body is not { } body)
return;
ApplyVisual(ent, body);
}
private void ApplyVisual(Entity<VisualOrganComponent> ent, EntityUid target)
{
if (!_sprite.LayerMapTryGet(target, ent.Comp.Layer, out var index, true))
return;
_sprite.LayerSetData(target, index, ent.Comp.Data);
}
private void RemoveVisual(Entity<VisualOrganComponent> ent, EntityUid target)
{
if (!_sprite.LayerMapTryGet(target, ent.Comp.Layer, out var index, true))
return;
_sprite.LayerSetRsiState(target, index, RSI.StateId.Invalid);
}
private void OnMarkingsGotInserted(Entity<VisualOrganMarkingsComponent> ent, ref OrganGotInsertedEvent args)
{
ApplyMarkings(ent, args.Target);
}
private void OnMarkingsGotRemoved(Entity<VisualOrganMarkingsComponent> ent, ref OrganGotRemovedEvent args)
{
RemoveMarkings(ent, args.Target);
}
private void OnMarkingsState(Entity<VisualOrganMarkingsComponent> ent, ref AfterAutoHandleStateEvent args)
{
if (Comp<OrganComponent>(ent).Body is not { } body)
return;
RemoveMarkings(ent, body);
ApplyMarkings(ent, body);
}
protected override void SetOrganColor(Entity<VisualOrganComponent> ent, Color color)
{
base.SetOrganColor(ent, color);
if (Comp<OrganComponent>(ent).Body is not { } body)
return;
ApplyVisual(ent, body);
}
protected override void SetOrganMarkings(Entity<VisualOrganMarkingsComponent> ent, Dictionary<HumanoidVisualLayers, List<Marking>> markings)
{
base.SetOrganMarkings(ent, markings);
if (Comp<OrganComponent>(ent).Body is not { } body)
return;
RemoveMarkings(ent, body);
ApplyMarkings(ent, body);
}
protected override void SetOrganAppearance(Entity<VisualOrganComponent> ent, PrototypeLayerData data)
{
base.SetOrganAppearance(ent, data);
if (Comp<OrganComponent>(ent).Body is not { } body)
return;
ApplyVisual(ent, body);
}
private IEnumerable<Marking> AllMarkings(Entity<VisualOrganMarkingsComponent> ent)
{
foreach (var markings in ent.Comp.Markings.Values)
{
foreach (var marking in markings)
{
yield return marking;
}
}
var censorNudity = _cfg.GetCVar(CCVars.AccessibilityClientCensorNudity) || _cfg.GetCVar(CCVars.AccessibilityServerCensorNudity);
if (!censorNudity)
yield break;
var group = _prototype.Index(ent.Comp.MarkingData.Group);
foreach (var layer in ent.Comp.MarkingData.Layers)
{
if (!group.Limits.TryGetValue(layer, out var layerLimits))
continue;
if (layerLimits.NudityDefault.Count < 1)
continue;
var markings = ent.Comp.Markings.GetValueOrDefault(layer) ?? [];
if (markings.Any(marking => _marking.TryGetMarking(marking, out var proto) && proto.BodyPart == layer))
continue;
foreach (var marking in layerLimits.NudityDefault)
{
yield return new(marking, 1);
}
}
}
private void ApplyMarkings(Entity<VisualOrganMarkingsComponent> ent, EntityUid target)
{
var applied = new List<Marking>();
foreach (var marking in AllMarkings(ent))
{
if (!_marking.TryGetMarking(marking, out var proto))
continue;
if (!_sprite.LayerMapTryGet(target, proto.BodyPart, out var index, true))
continue;
for (var i = 0; i < proto.Sprites.Count; i++)
{
var sprite = proto.Sprites[i];
DebugTools.Assert(sprite is SpriteSpecifier.Rsi);
if (sprite is not SpriteSpecifier.Rsi rsi)
continue;
var layerId = $"{proto.ID}-{rsi.RsiState}";
if (!_sprite.LayerMapTryGet(target, layerId, out _, false))
{
var layer = _sprite.AddLayer(target, sprite, index + i + 1);
_sprite.LayerMapSet(target, layerId, layer);
_sprite.LayerSetSprite(target, layerId, rsi);
}
if (marking.MarkingColors is not null && i < marking.MarkingColors.Count)
_sprite.LayerSetColor(target, layerId, marking.MarkingColors[i]);
else
_sprite.LayerSetColor(target, layerId, Color.White);
}
applied.Add(marking);
}
ent.Comp.AppliedMarkings = applied;
}
private void RemoveMarkings(Entity<VisualOrganMarkingsComponent> ent, EntityUid target)
{
foreach (var marking in ent.Comp.AppliedMarkings)
{
if (!_marking.TryGetMarking(marking, out var proto))
continue;
foreach (var sprite in proto.Sprites)
{
DebugTools.Assert(sprite is SpriteSpecifier.Rsi);
if (sprite is not SpriteSpecifier.Rsi rsi)
continue;
var layerId = $"{proto.ID}-{rsi.RsiState}";
if (!_sprite.LayerMapTryGet(target, layerId, out var index, false))
continue;
_sprite.LayerMapRemove(target, layerId);
_sprite.RemoveLayer(target, index);
}
}
}
private void OnMarkingsChangedVisibility(Entity<VisualOrganMarkingsComponent> ent, ref BodyRelayedEvent<HumanoidLayerVisibilityChangedEvent> args)
{
if (!ent.Comp.HideableLayers.Contains(args.Args.Layer))
return;
foreach (var markings in ent.Comp.Markings.Values)
{
foreach (var marking in markings)
{
if (!_marking.TryGetMarking(marking, out var proto))
continue;
if (proto.BodyPart != args.Args.Layer && !(ent.Comp.DependentHidingLayers.TryGetValue(args.Args.Layer, out var dependent) && dependent.Contains(proto.BodyPart)))
continue;
foreach (var sprite in proto.Sprites)
{
DebugTools.Assert(sprite is SpriteSpecifier.Rsi);
if (sprite is not SpriteSpecifier.Rsi rsi)
continue;
var layerId = $"{proto.ID}-{rsi.RsiState}";
if (!_sprite.LayerMapTryGet(args.Body.Owner, layerId, out var index, true))
continue;
_sprite.LayerSetVisible(args.Body.Owner, index, args.Args.Visible);
}
}
}
}
}

View File

@ -2,6 +2,7 @@ using Content.Client.Cargo.UI;
using Content.Shared.Cargo.Components;
using JetBrains.Annotations;
using Robust.Client.UserInterface;
using Content.Shared._DV.Cargo.Components; // DeltaV: Bounty claim messages
namespace Content.Client.Cargo.BUI;
@ -30,6 +31,18 @@ public sealed class CargoBountyConsoleBoundUserInterface : BoundUserInterface
{
SendMessage(new BountySkipMessage(id));
};
// DeltaV: bounty claim stuff begins
_menu.OnClaimButtonPressed += id =>
{
SendMessage(new BountyClaimedMessage(id));
};
_menu.OnStatusOptionSelected += (id, status) =>
{
SendMessage(new BountySetStatusMessage(id, status));
};
// DeltaV: bounty claim stuff ends
}
protected override void UpdateState(BoundUserInterfaceState message)

View File

@ -70,9 +70,9 @@ namespace Content.Client.Cargo.BUI
_menu.OnClose += Close;
_menu.OnItemSelected += (args) =>
_menu.OnItemSelected += (row) =>
{
if (args.Button.Parent is not CargoProductRow row)
if (row == null)
return;
description.Clear();
@ -175,23 +175,23 @@ namespace Content.Client.Cargo.BUI
return true;
}
private void RemoveOrder(ButtonEventArgs args)
private void RemoveOrder(CargoOrderData? order)
{
if (args.Button.Parent?.Parent is not CargoOrderRow row || row.Order == null)
if (order == null)
return;
SendMessage(new CargoConsoleRemoveOrderMessage(row.Order.OrderId));
SendMessage(new CargoConsoleRemoveOrderMessage(order.OrderId));
}
private void ApproveOrder(ButtonEventArgs args)
private void ApproveOrder(CargoOrderData? order)
{
if (args.Button.Parent?.Parent is not CargoOrderRow row || row.Order == null)
if (order == null)
return;
if (OrderCount >= OrderCapacity)
return;
SendMessage(new CargoConsoleApproveOrderMessage(row.Order.OrderId));
SendMessage(new CargoConsoleApproveOrderMessage(order.OrderId));
}
}
}

View File

@ -10,6 +10,8 @@
<BoxContainer Orientation="Vertical" HorizontalExpand="True">
<RichTextLabel Name="RewardLabel"/>
<RichTextLabel Name="ManifestLabel"/>
<RichTextLabel Name="ClaimedBylabel"/> <!-- DeltaV bounty claim -->
<RichTextLabel Name="StatusLabel"/> <!-- DeltaV bounty claim -->
</BoxContainer>
<Control MinWidth="10"/>
<BoxContainer Orientation="Vertical" MinWidth="120">
@ -17,14 +19,22 @@
<Button Name="PrintButton"
Text="{Loc 'bounty-console-label-button-text'}"
HorizontalExpand="False"
HorizontalAlignment="Right"
StyleClasses="OpenRight"/>
StyleClasses="OpenBoth"/>
<Button Name="SkipButton"
Text="{Loc 'bounty-console-skip-button-text'}"
HorizontalExpand="False"
HorizontalAlignment="Right"
HorizontalExpand="True"
StyleClasses="OpenLeft"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal" MinWidth="120"> <!-- Begin DeltaV bounty claim content -->
<Button Name="ClaimButton"
Text= "{Loc 'bounty-console-claim-button-text'}"
HorizontalExpand="False"
StyleClasses="OpenRight"/>
<OptionButton Name="BountyStatusSelector"
Access="Public"
StyleClasses="OpenBoth"
HorizontalExpand="True"/>
</BoxContainer> <!-- End DeltaV content-->
<RichTextLabel Name="IdLabel" HorizontalAlignment="Right" Margin="0 0 5 0"/>
</BoxContainer>
</BoxContainer>

View File

@ -17,6 +17,8 @@ public sealed partial class BountyEntry : BoxContainer
public Action? OnLabelButtonPressed;
public Action? OnSkipButtonPressed;
public Action? OnClaimButtonPressed; // DeltaV
public Action? OnStatusOptionSelected; // DeltaV
public TimeSpan EndTime;
public TimeSpan UntilNextSkip;
@ -45,6 +47,20 @@ public sealed partial class BountyEntry : BoxContainer
PrintButton.OnPressed += _ => OnLabelButtonPressed?.Invoke();
SkipButton.OnPressed += _ => OnSkipButtonPressed?.Invoke();
// Begin DeltaV bounty claiming
ClaimButton.OnPressed += _ => OnClaimButtonPressed?.Invoke();
BountyStatusSelector.AddItem(Loc.GetString($"bounty-console-status-{nameof(CargoBountyStatus.Undelivered)}"), 0);
BountyStatusSelector.AddItem(Loc.GetString($"bounty-console-status-{nameof(CargoBountyStatus.Waiting)}"), 1);
BountyStatusSelector.AddItem(Loc.GetString($"bounty-console-status-{nameof(CargoBountyStatus.OnShuttle)}"), 2);
BountyStatusSelector.Select((int) bounty.Status);
BountyStatusSelector.ToolTip = Loc.GetString($"bounty-console-status-tooltip-{bounty.Status.ToString()}");
var claimedByText = string.IsNullOrEmpty(bounty.ClaimedBy) ? Loc.GetString("bounty-console-claimed-by-none") : bounty.ClaimedBy;
ClaimedBylabel.SetMarkup(Loc.GetString("bounty-console-claimed-by", ("claimant", claimedByText)));
StatusLabel.SetMarkup(Loc.GetString($"bounty-console-formatted-status-{bounty.Status.ToString()}"));
// End DeltaV bounty claiming
}
private void UpdateSkipButton(float deltaSeconds)

View File

@ -1,8 +1,9 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
<!--DeltaV - SetSize was 550, now 750 to accomodate bounty claim UI -->
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Title="{Loc 'bounty-console-menu-title'}"
SetSize="550 420"
SetSize="750 420"
MinSize="400 350">
<BoxContainer Orientation="Vertical"
VerticalExpand="True"

View File

@ -11,6 +11,8 @@ public sealed partial class CargoBountyMenu : FancyWindow
{
public Action<string>? OnLabelButtonPressed;
public Action<string>? OnSkipButtonPressed;
public Action<string>? OnClaimButtonPressed; // DeltaV
public Action<string, int>? OnStatusOptionSelected; // DeltaV
public CargoBountyMenu()
{
@ -31,6 +33,8 @@ public sealed partial class CargoBountyMenu : FancyWindow
var entry = new BountyEntry(b, untilNextSkip);
entry.OnLabelButtonPressed += () => OnLabelButtonPressed?.Invoke(b.Id);
entry.OnSkipButtonPressed += () => OnSkipButtonPressed?.Invoke(b.Id);
entry.OnClaimButtonPressed += () => OnClaimButtonPressed?.Invoke(b.Id); // DeltaV
entry.BountyStatusSelector.OnItemSelected += args => OnStatusOptionSelected?.Invoke(b.Id, args.Id); // DeltaV
BountyEntriesContainer.AddChild(entry);
}

View File

@ -1,86 +1,226 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
SetSize="600 600"
MinSize="600 600">
<BoxContainer Orientation="Vertical" Margin="15 5 15 10">
<BoxContainer Orientation="Horizontal">
<Label Text="{Loc 'cargo-console-menu-account-name-label'}"
StyleClasses="LabelKeyText" />
<RichTextLabel Name="AccountNameLabel"
Text="{Loc 'cargo-console-menu-account-name-none-text'}" />
</BoxContainer>
<BoxContainer Orientation="Horizontal">
<Label Text="{Loc 'cargo-console-menu-points-label'}"
StyleClasses="LabelKeyText" />
<RichTextLabel Name="PointsLabel"
Text="$0" />
</BoxContainer>
<Control MinHeight="10"/>
<controls:FancyWindow
xmlns="https://spacestation14.io"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinSize="540 390"
SetSize="995 600">
<!-- Main Container -->
<BoxContainer Orientation="Vertical"
VerticalExpand="True">
<TabContainer Name="TabContainer" VerticalExpand="True">
<BoxContainer Orientation="Vertical" VerticalExpand="True">
<BoxContainer Orientation="Horizontal">
<OptionButton Name="Categories"
Prefix="{Loc 'cargo-console-menu-categories-label'}"
HorizontalExpand="True" />
<LineEdit Name="SearchBar"
PlaceHolder="{Loc 'cargo-console-menu-search-bar-placeholder'}"
HorizontalExpand="True" />
</BoxContainer>
<Control MinHeight="5"/>
<ScrollContainer HorizontalExpand="True"
VerticalExpand="True"
SizeFlagsStretchRatio="2">
<BoxContainer Name="Products"
Orientation="Vertical"
HorizontalExpand="True"
VerticalExpand="True">
<!-- Products get added here by code -->
</BoxContainer>
</ScrollContainer>
<Control MinHeight="5" Name="OrdersSpacer"/>
<PanelContainer VerticalExpand="True"
SizeFlagsStretchRatio="1"
Name="Orders">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#000000" />
</PanelContainer.PanelOverride>
<ScrollContainer VerticalExpand="True">
<BoxContainer Orientation="Vertical" Margin="5">
<Label Text="{Loc 'cargo-console-menu-requests-label'}" />
<BoxContainer Name="Requests"
Orientation="Vertical"
VerticalExpand="True">
<!-- Requests are added here by code -->
</BoxContainer>
</BoxContainer>
</ScrollContainer>
</PanelContainer>
</BoxContainer>
<!-- Funds tab -->
<BoxContainer Orientation="Vertical" Margin="15">
<BoxContainer Orientation="Horizontal">
<RichTextLabel Name="TransferLimitLabel" Margin="0 0 15 0"/>
<RichTextLabel Name="UnlimitedNotifier" Text="{Loc 'cargo-console-menu-account-action-transfer-limit-unlimited-notifier'}"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal">
<RichTextLabel Text="{Loc 'cargo-console-menu-account-action-select'}" Margin="0 0 10 0"/>
<OptionButton Name="ActionOptions"/>
</BoxContainer>
<Control MinHeight="5"/>
<BoxContainer Orientation="Horizontal">
<RichTextLabel Name="AmountText" Text="{ Loc 'cargo-console-menu-account-action-amount'}"/>
<SpinBox Name="TransferSpinBox" MinWidth="100" Value="10"/>
</BoxContainer>
<Control MinHeight="15"/>
<BoxContainer HorizontalAlignment="Center">
<Button Name="AccountActionButton" Text="{ Loc 'cargo-console-menu-account-action-button'}" MinHeight="45" MinWidth="120"/>
</BoxContainer>
<Control VerticalExpand="True"/>
<BoxContainer VerticalAlignment="Bottom" HorizontalAlignment="Center">
<Button Name="AccountLimitToggleButton" Text="{ Loc 'cargo-console-menu-toggle-account-lock-button'}" MinHeight="45" MinWidth="120"/>
</BoxContainer>
</BoxContainer>
<!-- Sub-Main Container -->
<BoxContainer Orientation="Horizontal"
VerticalExpand="True"
Margin="8 4 8 6">
<!-- Left Part -->
<BoxContainer Orientation="Vertical"
SeparationOverride="4"
Margin="0 0 8 0"
HorizontalExpand="True">
<!-- Info -->
<BoxContainer Orientation="Vertical">
<GridContainer Columns="3">
<!-- Account -->
<Label Text="{Loc 'cargo-console-menu-account-name-label'}"
StyleClasses="LabelKeyText" />
<PanelContainer StyleClasses="LowDivider" Margin="0 -2"/>
<RichTextLabel Name="AccountNameLabel"
Text="{Loc 'cargo-console-menu-account-name-none-text'}"
Margin="4 0"/>
<!-- Balance -->
<Label Text="{Loc 'cargo-console-menu-points-label'}"
StyleClasses="LabelKeyText"/>
<PanelContainer StyleClasses="LowDivider" Margin="0 -2"/>
<RichTextLabel Name="PointsLabel"
Text="$0"
Margin="4 0" />
<!-- Orders Count/Capacity -->
<Label Text="{Loc 'cargo-console-menu-order-capacity-label'}"
StyleClasses="LabelKeyText" />
<PanelContainer StyleClasses="LowDivider" Margin="0 -2 0 -1"/>
<Label Name="ShuttleCapacityLabel"
Text="0/20"
Margin="4 0"/>
</GridContainer>
<PanelContainer StyleClasses="LowDivider" Margin="0 4.5 -8 0"/>
</BoxContainer>
<!-- Search -->
<BoxContainer Orientation="Horizontal"
Margin="0 2 0 0">
<LineEdit Name="SearchBar"
PlaceHolder="{Loc 'cargo-console-menu-search-bar-placeholder'}"
HorizontalExpand="True" />
<OptionButton Name="Categories"
Prefix="{Loc 'cargo-console-menu-categories-label'}"
StyleClasses="OpenLeft"/>
</BoxContainer>
<!-- Product list -->
<ScrollContainer
HorizontalExpand="False"
VerticalExpand="True"
HScrollEnabled="False">
<BoxContainer Name="Products"
Orientation="Vertical"
HorizontalExpand="True"
VerticalExpand="True">
<!-- Products get added here by code -->
</BoxContainer>
</ScrollContainer>
</BoxContainer>
<PanelContainer StyleClasses="LowDivider" Margin="0 -8"/>
<!-- Right Part -->
<BoxContainer Orientation="Vertical"
SizeFlagsStretchRatio="0.8"
HorizontalExpand="True"
Name="RightPart">
<!-- Requests Part -->
<BoxContainer Orientation="Vertical"
VerticalExpand="True"
SizeFlagsStretchRatio="2">
<!-- Title -->
<controls:StripeBack>
<Label Text="{Loc 'cargo-console-menu-requests-label'}"
HorizontalAlignment="Center"
Margin="4"/>
</controls:StripeBack>
<PanelContainer VerticalExpand="True"
Margin="0 -4 0 0">
<!-- Background -->
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#040404" />
</PanelContainer.PanelOverride>
<BoxContainer Orientation="Vertical">
<ScrollContainer VerticalExpand="True">
<BoxContainer Name="Requests"
Orientation="Vertical"
StyleClasses="transparentItemList"
VerticalExpand="True"
SeparationOverride="8"
Margin="8">
<!-- Requests are added here by code -->
</BoxContainer>
</ScrollContainer>
</BoxContainer>
</PanelContainer>
</BoxContainer>
<!-- Orders Part -->
<BoxContainer Orientation="Vertical"
VerticalExpand="True">
<!-- Title -->
<controls:StripeBack>
<Label Text="{Loc 'cargo-console-menu-orders-label'}"
HorizontalAlignment="Center"
Margin="4"/>
</controls:StripeBack>
<PanelContainer VerticalExpand="True"
Margin="0 -4 0 0">
<!-- Background -->
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#040404" />
</PanelContainer.PanelOverride>
<BoxContainer Orientation="Vertical"
Margin="6">
<ScrollContainer VerticalExpand="True">
<BoxContainer Orientation="Vertical"
StyleClasses="transparentItemList"
VerticalExpand="True"
SeparationOverride="6">
<!-- Orders are added here by code -->
</BoxContainer>
</ScrollContainer>
</BoxContainer>
</PanelContainer>
</BoxContainer>
</BoxContainer>
</BoxContainer>
<!-- Funds tab -->
<BoxContainer Orientation="Vertical" Margin="15">
<BoxContainer Orientation="Horizontal">
<RichTextLabel Name="TransferLimitLabel" Margin="0 0 15 0"/>
<RichTextLabel Name="UnlimitedNotifier" Text="{Loc 'cargo-console-menu-account-action-transfer-limit-unlimited-notifier'}"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal">
<RichTextLabel Text="{Loc 'cargo-console-menu-account-action-select'}" Margin="0 0 10 0"/>
<OptionButton Name="ActionOptions"/>
</BoxContainer>
<Control MinHeight="5"/>
<BoxContainer Orientation="Horizontal">
<RichTextLabel Name="AmountText" Text="{ Loc 'cargo-console-menu-account-action-amount'}"/>
<SpinBox Name="TransferSpinBox" MinWidth="100" Value="10"/>
</BoxContainer>
<Control MinHeight="15"/>
<BoxContainer HorizontalAlignment="Center">
<Button Name="AccountActionButton" Text="{ Loc 'cargo-console-menu-account-action-button'}" MinHeight="45" MinWidth="120"/>
</BoxContainer>
<Control VerticalExpand="True"/>
<BoxContainer VerticalAlignment="Bottom" HorizontalAlignment="Center">
<Button Name="AccountLimitToggleButton" Text="{ Loc 'cargo-console-menu-toggle-account-lock-button'}" MinHeight="45" MinWidth="120"/>
</BoxContainer>
</BoxContainer>
</TabContainer>
<!-- Footer -->
<!-- TODO: Create customControls element -->
<BoxContainer Orientation="Vertical"
VerticalAlignment="Bottom">
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Orientation="Horizontal"
Margin="12 0 6 2"
VerticalAlignment="Bottom">
<!-- Footer title -->
<Label Text="{Loc 'cargo-console-menu-flavor-left'}"
StyleClasses="WindowFooterText" />
<!-- Version -->
<Label Text="{Loc 'cargo-console-menu-flavor-right'}"
StyleClasses="WindowFooterText"
HorizontalAlignment="Right"
HorizontalExpand="True"
Margin="0 0 4 0" />
<TextureRect StyleClasses="NTLogoDark"
Stretch="KeepAspectCentered"
VerticalAlignment="Center"
HorizontalAlignment="Right"
SetSize="19 19"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@ -6,6 +6,7 @@ using Content.Shared.Cargo.Components;
using Content.Shared.Cargo.Prototypes;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
@ -29,9 +30,9 @@ namespace Content.Client.Cargo.UI
private readonly EntityQuery<CargoOrderConsoleComponent> _orderConsoleQuery;
private readonly EntityQuery<StationBankAccountComponent> _bankQuery;
public event Action<ButtonEventArgs>? OnItemSelected;
public event Action<ButtonEventArgs>? OnOrderApproved;
public event Action<ButtonEventArgs>? OnOrderCanceled;
public event Action<CargoProductRow?>? OnItemSelected;
public event Action<CargoOrderData?>? OnOrderApproved;
public event Action<CargoOrderData?>? OnOrderCanceled;
public event Action<ProtoId<CargoAccountPrototype>?, int>? OnAccountAction;
@ -164,7 +165,7 @@ namespace Content.Client.Cargo.UI
};
button.MainButton.OnPressed += args =>
{
OnItemSelected?.Invoke(args);
OnItemSelected?.Invoke(button);
};
Products.AddChild(button);
}
@ -210,38 +211,66 @@ namespace Content.Client.Cargo.UI
foreach (var order in orders)
{
if (order.Approved)
if (order.Approved || !_protoManager.Resolve(order.Product, out var productProto))
continue;
var product = _protoManager.Index<EntityPrototype>(order.ProductId);
var productName = product.Name;
var product = _protoManager.Index<EntityPrototype>(productProto.Product);
var productName = productProto.Name;
var requester = !string.IsNullOrEmpty(order.Requester) ?
order.Requester : Loc.GetString("cargo-console-menu-order-row-alerts-requester-unknown");
var account = _protoManager.Index(order.Account);
var row = new CargoOrderRow
{
Order = order,
Title =
{
Text = Loc.GetString(
"cargo-console-menu-order-row-title",
("productName", productName),
("orderAmount", order.OrderQuantity),
("orderPrice", productProto.Cost)),
},
Stride =
{
PanelOverride = new StyleBoxFlat
{
BackgroundColor = account.Color,
ContentMarginBottomOverride = 2,
},
},
Icon = { Texture = _spriteSystem.Frame0(product) },
ProductName =
{
Text = Loc.GetString(
"cargo-console-menu-populate-orders-cargo-order-row-product-name-text",
("productName", productName),
("orderAmount", order.OrderQuantity),
("orderRequester", order.Requester),
("orderRequester", requester),
("accountColor", account.Color),
("account", Loc.GetString(account.Code)))
},
Description =
{
Text = Loc.GetString("cargo-console-menu-order-reason-description",
("reason", order.Reason))
Text = !string.IsNullOrEmpty(order.Reason) ?
Loc.GetString(
"cargo-console-menu-order-row-product-description",
("orderReason", order.Reason))
:
Loc.GetString(
"cargo-console-menu-order-row-product-description",
("orderReason", Loc.GetString("cargo-console-menu-order-row-alerts-reason-absent")))
}
};
row.Cancel.OnPressed += (args) => { OnOrderCanceled?.Invoke(args); };
row.Cancel.OnPressed += (args) => { OnOrderCanceled?.Invoke(order); };
// TODO: Disable based on access.
row.SetApproveVisible(orderConsole.Mode != CargoOrderConsoleMode.SendToPrimary);
row.Approve.OnPressed += (args) => { OnOrderApproved?.Invoke(args); };
row.Approve.OnPressed += (args) => { OnOrderApproved?.Invoke(order); };
Requests.AddChild(row);
}
}
@ -294,8 +323,7 @@ namespace Content.Client.Cargo.UI
TransferSpinBox.Value > bankAccount.Accounts[orderConsole.Account] * orderConsole.TransferLimit ||
_timing.CurTime < orderConsole.NextAccountActionTime;
OrdersSpacer.Visible = orderConsole.Mode != CargoOrderConsoleMode.PrintSlip;
Orders.Visible = orderConsole.Mode != CargoOrderConsoleMode.PrintSlip;
RightPart.Visible = orderConsole.Mode != CargoOrderConsoleMode.PrintSlip;
}
}
}

View File

@ -1,33 +1,53 @@
<DefaultWindow xmlns="https://spacestation14.io"
Title="{Loc 'cargo-console-order-menu-title'}">
<DefaultWindow xmlns="https://spacestation14.io"
Title="{Loc 'cargo-console-order-menu-title'}"
MinSize="460 261">
<BoxContainer Orientation="Vertical">
<GridContainer Columns="2">
<Label Text="{Loc 'cargo-console-order-menu-product-label'}" />
<Label Text="{Loc 'cargo-console-order-menu-product-label'}"
StyleClasses="LabelKeyText" />
<Label Name="ProductName"
Access="Public" />
<Label Text="{Loc 'cargo-console-order-menu-description-label'}" />
Access="Public" />
<Label Text="{Loc 'cargo-console-order-menu-description-label'}"
StyleClasses="LabelKeyText" />
<RichTextLabel Name="Description"
Access="Public"
VerticalExpand="True"
SetWidth="350"/>
<Label Text="{Loc 'cargo-console-order-menu-cost-label'}" />
Access="Public"
HorizontalExpand="True"
MaxWidth="460" />
<Label Text="{Loc 'cargo-console-order-menu-cost-label'}"
StyleClasses="LabelKeyText" />
<Label Name="PointCost"
Access="Public" />
<Label Text="{Loc 'cargo-console-order-menu-requester-label'}" />
Access="Public" />
<Label Text="{Loc 'cargo-console-order-menu-requester-label'}"
StyleClasses="LabelKeyText" />
<LineEdit Name="Requester"
Access="Public" />
<Label Text="{Loc 'cargo-console-order-menu-reason-label'}" />
<Label Text="{Loc 'cargo-console-order-menu-reason-label'}"
StyleClasses="LabelKeyText" />
<LineEdit Name="Reason"
Access="Public" />
<Label Text="{Loc 'cargo-console-order-menu-amount-label'}" />
<Label Text="{Loc 'cargo-console-order-menu-amount-label'}"
StyleClasses="LabelKeyText" />
<SpinBox Name="Amount"
Access="Public"
HorizontalExpand="True"
Value="1" />
</GridContainer>
<Control VerticalExpand="True"/>
<PanelContainer StyleClasses="LowDivider" Margin="0 6 0 2"/>
<Button Name="SubmitButton"
Access="Public"
Text="{Loc 'cargo-console-order-menu-submit-button'}"
TextAlign="Center" />
VerticalAlignment="Bottom" />
</BoxContainer>
</DefaultWindow>

View File

@ -1,33 +1,81 @@
<PanelContainer xmlns="https://spacestation14.io"
HorizontalExpand="True"
Margin="0 1">
<BoxContainer Orientation="Horizontal"
HorizontalExpand="True">
<TextureRect Name="Icon"
Access="Public"
MinSize="32 32"
RectClipContent="True" />
<Control MinWidth="5"/>
<BoxContainer Orientation="Vertical"
HorizontalExpand="True"
VerticalExpand="True">
<RichTextLabel Name="ProductName"
Access="Public"
HorizontalExpand="True"
StyleClasses="LabelSubText" />
<Label Name="Description"
Access="Public"
HorizontalExpand="True"
StyleClasses="LabelSubText"
ClipText="True" />
<PanelContainer
xmlns="https://spacestation14.io"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
HorizontalExpand="True"
StyleClasses="BackgroundPanel">
<!-- Main Container -->
<BoxContainer Orientation="Vertical"
HorizontalExpand="True"
SeparationOverride="6"
Margin="-14 -2">
<BoxContainer Orientation="Vertical">
<Control>
<PanelContainer StyleClasses="WindowHeadingBackground" />
<BoxContainer Margin="6">
<Label Name="Title"
Access="Public"
MaxHeight="28"
StyleClasses="LabelKeyText"/>
</BoxContainer>
</Control>
<PanelContainer Name="Stride"
Access="Public"
StyleClasses="LowDivider" />
</BoxContainer>
<!-- Info -->
<BoxContainer>
<TextureRect Name="Icon"
Access="Public"
MinSize="32 32"
Margin="4"
Stretch="KeepAspectCentered"
RectClipContent="True"
VerticalAlignment="Center"/>
<PanelContainer StyleClasses="LowDivider" Margin="4 0"/>
<BoxContainer Orientation="Vertical"
HorizontalExpand="True"
VerticalExpand="True">
<RichTextLabel Name="ProductName"
Access="Public"
HorizontalExpand="True"
VerticalExpand="True"
StyleClasses="LabelSubText" />
<Label Name="Description"
Access="Public"
HorizontalExpand="True"
VerticalExpand="True"
StyleClasses="LabelSubText"
ClipText="True" />
</BoxContainer>
</BoxContainer>
<BoxContainer Orientation="Vertical">
<PanelContainer StyleClasses="LowDivider" />
<!-- Buttons -->
<!-- Btn's position hardcoded (args.Button.Parent?.Parent?.Parent type) in CargoConsoleBUI 158 & 166 line -->
<BoxContainer Margin="6">
<Button Name="Approve"
Access="Public"
Text="{Loc 'cargo-console-menu-order-row-button-approve'}"
StyleClasses="OpenRight"
HorizontalExpand="True"/>
<Button Name="Cancel"
Access="Public"
Text="{Loc 'cargo-console-menu-order-row-button-cancel'}"
StyleClasses="OpenLeft"
HorizontalExpand="True" />
</BoxContainer>
</BoxContainer>
<Button Name="Approve"
Access="Public"
Text="{Loc 'cargo-console-menu-cargo-order-row-approve-button'}"
StyleClasses="OpenRight" />
<Button Name="Cancel"
Access="Public"
Text="{Loc 'cargo-console-menu-cargo-order-row-cancel-button'}"
StyleClasses="OpenLeft" />
</BoxContainer>
</PanelContainer>

View File

@ -1,26 +1,34 @@
<PanelContainer xmlns="https://spacestation14.io"
HorizontalExpand="True">
<Button Name="MainButton"
ToolTip=""
Access="Public"
HorizontalExpand="True"
VerticalExpand="True"
StyleClasses="OpenBoth"/>
<BoxContainer Orientation="Horizontal"
HorizontalExpand="True">
<TextureRect Name="Icon"
Access="Public"
MinSize="32 32"
RectClipContent="True" />
<Label Name="ProductName"
Access="Public"
HorizontalExpand="True" />
<PanelContainer StyleClasses="BackgroundDark">
<Label Name="PointCost"
<BoxContainer xmlns="https://spacestation14.io"
HorizontalExpand="True">
<PanelContainer HorizontalExpand="True">
<!-- Btn position hardcoded (args.Button.Parent?.Parent type) in CargoConsoleBUI 71 line -->
<Button Name="MainButton"
ToolTip=""
Access="Public"
VerticalExpand="False"
StyleClasses="OpenBoth" />
<!-- Icon & Name -->
<BoxContainer Orientation="Horizontal"
HorizontalExpand="True"
Margin="4 0">
<TextureRect Name="Icon"
Access="Public"
MinSize="32 32"
RectClipContent="True" />
<Label Name="ProductName"
Access="Public"
MinSize="52 32"
Align="Right"
Margin="0 0 5 0"/>
</PanelContainer>
</BoxContainer>
</PanelContainer>
HorizontalExpand="True"
ClipText="True" />
</BoxContainer>
</PanelContainer>
<Label Name="PointCost"
Access="Public"
MinSize="56 32"
Align="Right"
Margin="0 0 5 0"
HorizontalAlignment="Right"/>
</BoxContainer>

View File

@ -7,7 +7,7 @@ using Robust.Client.UserInterface.XAML;
namespace Content.Client.Cargo.UI
{
[GenerateTypedNameReferences]
public sealed partial class CargoProductRow : PanelContainer
public sealed partial class CargoProductRow : BoxContainer
{
public CargoProductPrototype? Product { get; set; }

View File

@ -34,7 +34,10 @@ namespace Content.Client.Cargo.UI
foreach (var order in orders)
{
var product = protoManager.Index<EntityPrototype>(order.ProductId);
if (!protoManager.Resolve(order.Product, out var productProto))
continue;
var product = protoManager.Index<EntityPrototype>(productProto.Product);
var productName = product.Name;
var account = protoManager.Index(order.Account);

View File

@ -9,7 +9,6 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystem<TypingInd
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, TypingIndicatorComponent component, ref AppearanceChangeEvent args)
{

View File

@ -1,7 +1,7 @@
using System.Linq;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Atmos.Prototypes;
using Content.Shared.Body.Part;
using Content.Shared.Body;
using Content.Shared.Chemistry;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Components.SolutionManager;
@ -94,7 +94,7 @@ public sealed class ChemistryGuideDataSystem : SharedChemistryGuideDataSystem
continue;
//these bloat the hell out of blood/fat
if (entProto.HasComponent<BodyPartComponent>())
if (entProto.HasComponent<OrganComponent>())
continue;
//these feel obvious...
@ -116,7 +116,7 @@ public sealed class ChemistryGuideDataSystem : SharedChemistryGuideDataSystem
}
if (extractableComponent.GrindableSolution is { } grindableSolutionId &&
if (extractableComponent.GrindableSolutionName is { } grindableSolutionId &&
entProto.TryGetComponent<SolutionContainerManagerComponent>(out var manager, EntityManager.ComponentFactory) &&
_solutionContainer.TryGetSolution(manager, grindableSolutionId, out var grindableSolution))
{

View File

@ -8,7 +8,7 @@
VerticalExpand="True"
HorizontalExpand="True"
MinSize="100 150">
<PanelContainer VerticalExpand="True" StyleClasses="Inset">
<PanelContainer VerticalExpand="True" StyleClasses="BackgroundPanelDark">
<BoxContainer Name="GeneticScannerContents" Margin="5 5 5 5" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True">
<Label HorizontalAlignment="Center" Text="{Loc 'cloning-console-window-scanner-details-label'}" />
<BoxContainer Orientation="Horizontal" VerticalExpand="True" HorizontalExpand="True">
@ -35,7 +35,7 @@
</BoxContainer>
</PanelContainer>
<Control MinSize="50 5" />
<PanelContainer VerticalExpand="True" StyleClasses="Inset">
<PanelContainer VerticalExpand="True" StyleClasses="BackgroundPanelDark">
<BoxContainer Name="CloningPodContents" Margin="5 5 5 5" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True">
<Label HorizontalAlignment="Center" Text="{Loc 'cloning-console-window-pod-details-label'}" />
<BoxContainer Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True">

View File

@ -273,7 +273,7 @@ public sealed class ClientClothingSystem : ClothingSystem
// Select displacement maps
var displacementData = inventory.Displacements.GetValueOrDefault(slot); //Default unsexed map
var equipeeSex = CompOrNull<HumanoidAppearanceComponent>(equipee)?.Sex;
var equipeeSex = CompOrNull<HumanoidProfileComponent>(equipee)?.Sex;
if (equipeeSex != null)
{
switch (equipeeSex)

View File

@ -1,5 +1,4 @@
using Content.Client.Hands.Systems;
using Content.Client.NPC.HTN;
using Content.Shared.CCVar;
using Content.Shared.CombatMode;
using Robust.Client.Graphics;
@ -59,11 +58,6 @@ public sealed class CombatModeSystem : SharedCombatModeSystem
UpdateHud(entity);
}
protected override bool IsNpc(EntityUid uid)
{
return HasComp<HTNComponent>(uid);
}
private void UpdateHud(EntityUid entity)
{
if (entity != _playerManager.LocalEntity || !Timing.IsFirstTimePredicted)

View File

@ -1,36 +0,0 @@
using Content.Shared.Body.Organ;
using Robust.Client.GameObjects;
using Robust.Shared.Console;
using Robust.Shared.Containers;
namespace Content.Client.Commands;
public sealed class HideMechanismsCommand : LocalizedEntityCommands
{
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly SpriteSystem _spriteSystem = default!;
public override string Command => "hidemechanisms";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var query = EntityManager.AllEntityQueryEnumerator<OrganComponent, SpriteComponent>();
while (query.MoveNext(out var uid, out _, out var sprite))
{
_spriteSystem.SetContainerOccluded((uid, sprite), false);
var tempParent = uid;
while (_containerSystem.TryGetContainingContainer((tempParent, null, null), out var container))
{
if (!container.ShowContents)
{
_spriteSystem.SetContainerOccluded((uid, sprite), true);
break;
}
tempParent = container.Owner;
}
}
}
}

View File

@ -1,22 +0,0 @@
using Content.Shared.Body.Organ;
using Robust.Client.GameObjects;
using Robust.Shared.Console;
namespace Content.Client.Commands;
public sealed class ShowMechanismsCommand : LocalizedEntityCommands
{
[Dependency] private readonly SpriteSystem _spriteSystem = default!;
public override string Command => "showmechanisms";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var query = EntityManager.AllEntityQueryEnumerator<OrganComponent, SpriteComponent>();
while (query.MoveNext(out var uid, out _, out var sprite))
{
_spriteSystem.SetContainerOccluded((uid, sprite), false);
}
}
}

View File

@ -291,7 +291,6 @@ namespace Content.Client.Construction
_ghosts.Add(comp.GhostId, ghost.Value);
var sprite = Comp<SpriteComponent>(ghost.Value);
_sprite.SetColor((ghost.Value, sprite), new Color(48, 255, 48, 128));
if (targetProto.TryGetComponent(out IconComponent? icon, EntityManager.ComponentFactory))
{
@ -306,20 +305,11 @@ namespace Content.Client.Construction
var targetSprite = EnsureComp<SpriteComponent>(dummy);
EntityManager.System<AppearanceSystem>().OnChangeData(dummy, targetSprite);
for (var i = 0; i < targetSprite.AllLayers.Count(); i++)
_sprite.CopySprite((dummy, targetSprite), (ghost.Value, sprite));
for (var i = 0; i < sprite.AllLayers.Count(); i++)
{
if (!targetSprite[i].Visible || !targetSprite[i].RsiState.IsValid)
continue;
var rsi = targetSprite[i].Rsi ?? targetSprite.BaseRSI;
if (rsi is null || !rsi.TryGetState(targetSprite[i].RsiState, out var state) ||
state.StateId.Name is null)
continue;
_sprite.AddBlankLayer((ghost.Value, sprite), i);
_sprite.LayerSetSprite((ghost.Value, sprite), i, new SpriteSpecifier.Rsi(rsi.Path, state.StateId.Name));
sprite.LayerSetShader(i, "unshaded");
_sprite.LayerSetVisible((ghost.Value, sprite), i, true);
}
Del(dummy);
@ -327,6 +317,8 @@ namespace Content.Client.Construction
else
return false;
_sprite.SetColor((ghost.Value, sprite), new Color(48, 255, 48, 128));
if (prototype.CanBuildInImpassable)
EnsureComp<WallMountComponent>(ghost.Value).Arc = new(Math.Tau);

View File

@ -1,4 +1,6 @@
using Content.Shared.Damage.Prototypes;
using Content.Shared.FixedPoint;
using Robust.Shared.Prototypes;
namespace Content.Client.Damage;
@ -55,7 +57,7 @@ public sealed partial class DamageVisualsComponent : Component
/// (for example, Brute), and has a value
/// of a DamageVisualizerSprite (see below)
/// </summary>
[DataField("damageOverlayGroups")] public Dictionary<string, DamageVisualizerSprite>? DamageOverlayGroups;
[DataField("damageOverlayGroups")] public Dictionary<ProtoId<DamageGroupPrototype>, DamageVisualizerSprite>? DamageOverlayGroups;
/// <summary>
/// Sets if you want sprites to overlay the
@ -84,7 +86,7 @@ public sealed partial class DamageVisualsComponent : Component
/// what kind of damage combination
/// you would want, on which threshold.
/// </remarks>
[DataField("damageGroup")] public string? DamageGroup;
[DataField("damageGroup")] public ProtoId<DamageGroupPrototype>? DamageGroup;
/// <summary>
/// Set this if you want incoming damage to be

View File

@ -2,6 +2,7 @@ using System.Linq;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
using Content.Shared.Damage.Systems;
using Content.Shared.FixedPoint;
using Robust.Client.GameObjects;
using Robust.Shared.Prototypes;
@ -28,6 +29,7 @@ namespace Content.Client.Damage;
public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponent>
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly DamageableSystem _damageable = default!;
public override void Initialize()
{
@ -174,7 +176,7 @@ public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponen
// See if that group is in our entity's damage container.
else if (!damageVisComp.Overlay && damageVisComp.DamageGroup != null)
{
if (!damageContainer.SupportedGroups.Contains(damageVisComp.DamageGroup))
if (!damageContainer.SupportedGroups.Contains(damageVisComp.DamageGroup.Value))
{
Log.Error($"Damage keys were invalid for entity {entity}.");
damageVisComp.Valid = false;
@ -384,7 +386,7 @@ public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponen
if (!AppearanceSystem.TryGetData<DamageVisualizerGroupData>(uid, DamageVisualizerKeys.DamageUpdateGroups,
out var data, component))
{
data = new DamageVisualizerGroupData(Comp<DamageableComponent>(uid).DamagePerGroup.Keys.ToList());
data = new DamageVisualizerGroupData(_damageable.GetDamagePerGroup(uid).Keys.ToList());
}
UpdateDamageVisuals(data.GroupList, (uid, damageComponent, spriteComponent, damageVisComp));
@ -486,11 +488,10 @@ public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponen
/// </summary>
private void UpdateDamageVisuals(Entity<DamageableComponent, SpriteComponent, DamageVisualsComponent> entity)
{
var damageComponent = entity.Comp1;
var spriteComponent = entity.Comp2;
var damageVisComp = entity.Comp3;
if (!CheckThresholdBoundary(damageComponent.TotalDamage, damageVisComp.LastDamageThreshold, damageVisComp, out var threshold))
if (!CheckThresholdBoundary(_damageable.GetTotalDamage(entity.AsNullable()), damageVisComp.LastDamageThreshold, damageVisComp, out var threshold))
return;
damageVisComp.LastDamageThreshold = threshold;
@ -513,11 +514,11 @@ public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponen
/// according to the list of damage groups
/// passed into it.
/// </summary>
private void UpdateDamageVisuals(List<string> delta, Entity<DamageableComponent, SpriteComponent, DamageVisualsComponent> entity)
private void UpdateDamageVisuals(List<ProtoId<DamageGroupPrototype>> delta, Entity<DamageableComponent, SpriteComponent, DamageVisualsComponent> entity)
{
var damageComponent = entity.Comp1;
var spriteComponent = entity.Comp2;
var damageVisComp = entity.Comp3;
var damage = _damageable.GetAllDamage((entity.Owner, entity.Comp1));
foreach (var damageGroup in delta)
{
@ -525,7 +526,7 @@ public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponen
continue;
if (!_prototypeManager.TryIndex<DamageGroupPrototype>(damageGroup, out var damageGroupPrototype)
|| !damageComponent.Damage.TryGetDamageInGroup(damageGroupPrototype, out var damageTotal))
|| !damage.TryGetDamageInGroup(damageGroupPrototype, out var damageTotal))
continue;
if (!damageVisComp.LastThresholdPerGroup.TryGetValue(damageGroup, out var lastThreshold)
@ -590,7 +591,7 @@ public sealed class DamageVisualsSystem : VisualizerSystem<DamageVisualsComponen
}
else if (damageVisComp.DamageGroup != null)
{
UpdateDamageVisuals(new List<string>() { damageVisComp.DamageGroup }, entity);
UpdateDamageVisuals(new() { damageVisComp.DamageGroup.Value }, entity);
}
else if (damageVisComp.DamageOverlay != null)
{

View File

@ -1,8 +1,8 @@
using Content.Shared.CCVar;
using Content.Shared.Drunk;
using Content.Shared.StatusEffect;
using Content.Shared.StatusEffectNew;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Configuration;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
@ -11,19 +11,23 @@ namespace Content.Client.Drunk;
public sealed class DrunkOverlay : Overlay
{
private static readonly ProtoId<ShaderPrototype> Shader = "Drunk";
private static readonly ProtoId<ShaderPrototype> DrunkShader = "Drunk";
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IEntitySystemManager _sysMan = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;
private readonly Shared.StatusEffectNew.StatusEffectsSystem _statusEffectsSystem;
public override OverlaySpace Space => OverlaySpace.WorldSpace;
public override bool RequestScreenTexture => true;
private readonly ShaderInstance _drunkShader;
public float CurrentBoozePower = 0.0f;
// Starting phase for the rotation effect.
// Needed so it doesn't always look the same for 0 motion.
public float Phase = 0f;
private const float VisualThreshold = 10.0f;
private const float PowerDivisor = 250.0f;
@ -37,12 +41,22 @@ public sealed class DrunkOverlay : Overlay
private const float BoozePowerScale = 8f;
private float _visualScale = 0;
private float _visualScale = 0f;
private float _timeScale = 1f;
private float _distortionScale = 1f;
public DrunkOverlay()
{
IoCManager.InjectDependencies(this);
_drunkShader = _prototypeManager.Index(Shader).InstanceUnique();
_statusEffectsSystem = _entityManager.System<Shared.StatusEffectNew.StatusEffectsSystem>();
_drunkShader = _prototypeManager.Index(DrunkShader).InstanceUnique();
_configManager.OnValueChanged(CCVars.ReducedMotion, OnReducedMotionChanged, invokeImmediately: true);
}
private void OnReducedMotionChanged(bool reducedMotion)
{
_timeScale = reducedMotion ? 0.0f : 1.0f;
_distortionScale = reducedMotion ? 4.0f : 1.0f; // Make the offset stronger to compensate the lack of motion.
}
protected override void FrameUpdate(FrameEventArgs args)
@ -53,15 +67,14 @@ public sealed class DrunkOverlay : Overlay
if (playerEntity == null)
return;
var statusSys = _sysMan.GetEntitySystem<Shared.StatusEffectNew.StatusEffectsSystem>();
if (!statusSys.TryGetMaxTime<DrunkStatusEffectComponent>(playerEntity.Value, out var status))
if (!_statusEffectsSystem.TryGetMaxTime<DrunkStatusEffectComponent>(playerEntity.Value, out var status))
return;
var time = status.Item2;
var power = time == null ? MaxBoozePower : (float) Math.Min((time - _timing.CurTime).Value.TotalSeconds, MaxBoozePower);
var power = time == null ? MaxBoozePower : (float)Math.Min((time - _timing.CurTime).Value.TotalSeconds, MaxBoozePower);
CurrentBoozePower += BoozePowerScale * (power - CurrentBoozePower) * args.DeltaSeconds / (power+1);
CurrentBoozePower += BoozePowerScale * (power - CurrentBoozePower) * args.DeltaSeconds / (power + 1);
}
protected override bool BeforeDraw(in OverlayDrawArgs args)
@ -82,8 +95,12 @@ public sealed class DrunkOverlay : Overlay
return;
var handle = args.WorldHandle;
_drunkShader.SetParameter("SCREEN_TEXTURE", ScreenTexture);
_drunkShader.SetParameter("boozePower", _visualScale);
_drunkShader.SetParameter("timeScale", _timeScale);
_drunkShader.SetParameter("distortionScale", _distortionScale);
_drunkShader.SetParameter("phase", Phase);
handle.UseShader(_drunkShader);
handle.DrawRect(args.WorldBounds, Color.White);
handle.UseShader(null);

View File

@ -3,6 +3,7 @@ using Content.Shared.StatusEffectNew;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Player;
using Robust.Shared.Random;
namespace Content.Client.Drunk;
@ -10,6 +11,7 @@ public sealed class DrunkSystem : SharedDrunkSystem
{
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IOverlayManager _overlayMan = default!;
[Dependency] private readonly IRobustRandom _random = default!;
private DrunkOverlay _overlay = default!;
@ -29,7 +31,10 @@ public sealed class DrunkSystem : SharedDrunkSystem
private void OnStatusApplied(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectAppliedEvent args)
{
if (!_overlayMan.HasOverlay<DrunkOverlay>())
{
_overlay.Phase = _random.NextFloat(MathF.Tau); // random starting phase for movement effect
_overlayMan.AddOverlay(_overlay);
}
}
private void OnStatusRemoved(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectRemovedEvent args)
@ -47,6 +52,7 @@ public sealed class DrunkSystem : SharedDrunkSystem
private void OnPlayerAttached(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectRelayedEvent<LocalPlayerAttachedEvent> args)
{
_overlayMan.AddOverlay(_overlay);
}
private void OnPlayerDetached(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectRelayedEvent<LocalPlayerDetachedEvent> args)

View File

@ -3,6 +3,7 @@ using Content.Client.Changelog;
using Content.Client.Chat.Managers;
using Content.Client.DebugMon;
using Content.Client.Eui;
using Content.Client.FeedbackPopup;
using Content.Client.Fullscreen;
using Content.Client.GameTicking.Managers;
using Content.Client.GhostKick;
@ -24,6 +25,7 @@ using Content.Client.UserInterface;
using Content.Client.Viewport;
using Content.Client.Voting;
using Content.Shared.Ame.Components;
using Content.Shared.FeedbackSystem;
using Content.Shared.Gravity;
using Content.Shared.Localizations;
using Robust.Client;
@ -78,6 +80,7 @@ namespace Content.Client.Entry
[Dependency] private readonly TitleWindowManager _titleWindowManager = default!;
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
[Dependency] private readonly ClientsidePlaytimeTrackingManager _clientsidePlaytimeManager = default!;
[Dependency] private readonly ClientFeedbackManager _feedbackManager = null!;
public override void PreInit()
{
@ -180,6 +183,7 @@ namespace Content.Client.Entry
_userInterfaceManager.SetActiveTheme(_configManager.GetCVar(CVars.InterfaceTheme));
_documentParsingManager.Initialize();
_titleWindowManager.Initialize();
_feedbackManager.Initialize();
_baseClient.RunLevelChanged += (_, args) =>
{

View File

@ -7,6 +7,7 @@ using Content.Shared.IdentityManagement;
using Content.Shared.Input;
using Content.Shared.Interaction.Events;
using Content.Shared.Item;
using Content.Shared.Radio.Components; // DeltaV - Client-side Radio Colors
using Content.Shared.Verbs;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
@ -158,6 +159,15 @@ namespace Content.Client.Examine
// since there's probably one open already if it's coming in from the server.
var entity = GetEntity(ev.EntityUid);
// BEGIN DeltaV - Client-Side Radio Colors
// This *seems* a bit hacky, but we basically don't want to overwrite what's been pushed on the client-side,
// because the server will send us the server-side colors (default). I've yet to find a scenario where the
// server and client don't match, so until then, this is probably fine, if a little hacky.
if (HasComp<EncryptionKeyHolderComponent>(entity) || HasComp<EncryptionKeyComponent>(entity))
return;
// END DeltaV
OpenTooltip(player.Value, entity, ev.CenterAtCursor, ev.OpenAtOldTooltip, ev.KnowTarget);
UpdateTooltipInfo(player.Value, entity, ev.Message, ev.Verbs, getVerbs: false);
}

View File

@ -25,13 +25,13 @@ public sealed partial class FaxWindow : DefaultWindow
PaperButtonPressed += OnPaperButtonPressed;
FileButton.OnPressed += _ => FileButtonPressed?.Invoke();
PaperButton.OnPressed += _ => PaperButtonPressed?.Invoke();
FileButton.OnPressed += _ => FileButtonPressed?.Invoke();
PaperButton.OnPressed += _ => PaperButtonPressed?.Invoke();
CopyButton.OnPressed += _ => CopyButtonPressed?.Invoke();
SendButton.OnPressed += _ => SendButtonPressed?.Invoke();
RefreshButton.OnPressed += _ => RefreshButtonPressed?.Invoke();
PeerSelector.OnItemSelected += args =>
PeerSelected?.Invoke((string) args.Button.GetItemMetadata(args.Id)!);
PeerSelected?.Invoke((string)args.Button.GetItemMetadata(args.Id)!);
}
public void UpdateState(FaxUiState state)

View File

@ -0,0 +1,70 @@
using Content.Shared.FeedbackSystem;
using Robust.Shared.Prototypes;
namespace Content.Client.FeedbackPopup;
/// <inheritdoc />
public sealed class ClientFeedbackManager : SharedFeedbackManager
{
/// <summary>
/// A read-only set representing the currently displayed feedback popups.
/// </summary>
public override IReadOnlySet<ProtoId<FeedbackPopupPrototype>> DisplayedPopups => _displayedPopups;
private readonly HashSet<ProtoId<FeedbackPopupPrototype>> _displayedPopups = [];
public override void Initialize()
{
base.Initialize();
NetManager.RegisterNetMessage<FeedbackPopupMessage>(ReceivedPopupMessage);
NetManager.RegisterNetMessage<OpenFeedbackPopupMessage>(_ => Open());
}
/// <summary>
/// Opens the feedback popup window.
/// </summary>
public void Open()
{
InvokeDisplayedPopupsChanged(true);
}
/// <inheritdoc />
public override void Display(List<ProtoId<FeedbackPopupPrototype>>? prototypes)
{
if (prototypes == null || !NetManager.IsClient)
return;
var count = _displayedPopups.Count;
_displayedPopups.UnionWith(prototypes);
InvokeDisplayedPopupsChanged(_displayedPopups.Count > count);
}
/// <inheritdoc />
public override void Remove(List<ProtoId<FeedbackPopupPrototype>>? prototypes)
{
if (!NetManager.IsClient)
return;
if (prototypes == null)
{
_displayedPopups.Clear();
}
else
{
_displayedPopups.ExceptWith(prototypes);
}
InvokeDisplayedPopupsChanged(false);
}
private void ReceivedPopupMessage(FeedbackPopupMessage message)
{
if (message.Remove)
{
Remove(message.FeedbackPrototypes);
return;
}
Display(message.FeedbackPrototypes);
}
}

View File

@ -0,0 +1,24 @@
<Control xmlns="https://spacestation14.io"
MinHeight="100">
<PanelContainer StyleClasses="BackgroundPanel" ModulateSelfOverride="#2b2b31"/>
<BoxContainer Orientation="Vertical">
<!-- Title -->
<PanelContainer StyleIdentifier="FeedbackBorderThinBottom">
<RichTextLabel Name="TitleLabel" Margin="12 6 6 6" />
</PanelContainer>
<!-- Description -->
<RichTextLabel Name="DescriptionLabel" StyleClasses="LabelLight" Margin="12 4 12 8" VerticalExpand="True"/>
<!-- Footer -->
<PanelContainer StyleIdentifier="FeedbackBorderThinTop">
<BoxContainer>
<Label FontColorOverride="#b1b1b2" StyleClasses="LabelSmall" Name="TypeLabel" Margin="14 6 6 6" />
<Button Name="LinkButton" Text="{Loc feedbackpopup-control-button-text}" MinWidth="80"
Margin="8 6 14 6" HorizontalExpand="True" HorizontalAlignment="Right" />
</BoxContainer>
</PanelContainer>
</BoxContainer>
</Control>

Some files were not shown because too many files have changed in this diff Show More