Compare commits

...
Author SHA1 Message Date
Vanessa 187980de50 Fixed component name. Whoops. 2025-11-29 21:14:22 -06:00
Vanessa b9f100e5dc Fixed objectives to not target ObjectiveImmune 2025-11-29 20:44:45 -06:00
Vanessa 46529ee092 Added objective immune to centcomm implanters 2025-11-29 20:27:03 -06:00
Vanessa 4c4572121d made centcomm implanters easier to differentiate 2025-11-29 20:24:51 -06:00
Vanessa c5cdc81667 changed all CentComm implanters to use the new sprite 2025-11-29 20:22:32 -06:00
Delta-V bot b496a9f4fa Automatic changelog update 2025-11-29 23:27:27 +01:00
KOTOBandVanessa 5726c685d6 Unapolagetic FG13 Flamethrower Buffs (#4749)
* gamers gotta win

* i ❤️ uncommented changes

no comment on Quantity/maxVol since values are now identical to Imp

* syndie gaming

"was" comments are going off the initial values from https://github.com/impstation/imp-station-14/pull/2575/

---------

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2025-11-29 16:27:08 -06:00
Delta-V bot 96e99dae5a Automatic changelog update 2025-11-29 20:58:18 +01:00
snowywinters 681bce2b61 Command Turret Notification Alert (#4803)
Turret fix part 1
2025-11-29 13:57:58 -06:00
Delta-V bot 2552f3e42d Automatic changelog update 2025-11-29 04:30:36 +01:00
Vape 71025b5e6f Submarine Updates (#4554)
* Submarine Updates

* Changes as described in PR describtion

* Changes Requested

Fixed the EVA by boxing ring

Still not finished

* updates ?

* Revert "updates ?"

This reverts commit 2e70bdcd2e.

* Velcro Review Changes

Updated Maints, Fixed lighting issues, Fixed door issues. Addressed lack of maints "Loot" and "Fluff", maints has been properly fluffed, and tucked into bed, the lights have been taken out, and is ready for a nappie

* Fixes

LV Cable in perma airlock
Pipe in morgue
LV under dirt in perma
2025-11-28 21:30:17 -06:00
VelcroboyandVelcroboy 58c163f59e Tilewall Hotfix (#4800)
* Hotfix the tilewall cmd

* Wood support walls

* fix comment

* ->107

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-28 18:33:27 -06:00
Delta-V bot 5306fa7e07 Automatic changelog update 2025-11-28 20:04:02 +01:00
Sir Warockandpre-commit-ci[bot] 841bf3f5a0 Make the Bible protect BibleUsers when held (#4726)
* Add HandHeldArmor

* Buff Bible

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

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

* Fix test fail maybe?

* Forgot one

* Adjusting armor

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

* Removed Unnecessary Comments

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: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-28 19:03:43 +00:00
Tobias Berger 6baef896e9 Sanitize input (#4798)
* Sanitize custom objective summary

* Untouch
2025-11-28 12:25:48 -06:00
Delta-V bot f66d16dc5a Automatic changelog update 2025-11-28 10:49:40 +01:00
Tobias Berger 0dd94de46a Remove bears from fishing, I don't care how hungry they are (#4797) 2025-11-28 10:49:21 +01:00
Delta-V bot 66ca595e66 Automatic changelog update 2025-11-28 10:41:22 +01:00
Tobias Berger 2a68b49249 Add missing tag to GasPipeHalf to make flintlock craftable (#4796)
Fixes https://github.com/DeltaV-Station/Delta-v/issues/4756
2025-11-28 10:41:03 +01:00
Delta-V bot 93949e990f Automatic changelog update 2025-11-28 10:37:14 +01:00
Tobias Berger 6a4decb900 Re-add skimmer functionality (#4795)
Fixes #4779
2025-11-28 10:36:55 +01:00
Delta-V bot 24dd332a0b Automatic changelog update 2025-11-28 09:47:38 +01:00
3632200302 Cardboard Box Weightless Fix (#40260) (#4794)
Box is no longer space faring

Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-28 08:47:18 +00:00
Vanessa 3019d8201c Warnings Clean-Up - Part 1 (#4785)
* Cleaned up obsolete warnings in CosmicCultSystem.cs

* Cleaned up more build warnings.

* Fixed more warnings.

* Bad IDE
2025-11-28 02:30:00 -06:00
Delta-V bot 6441513fd3 Automatic changelog update 2025-11-28 09:27:12 +01:00
VelcroboyandVelcroboy 0dbf9647a3 Update mountain walls/alt-asteroids (#4777)
* Update mountain walls/alt-asteroids

* no rot

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-28 02:26:53 -06:00
Vanessa c0fa85de5d Removed 1u transfer amount on syringes. (#4774) 2025-11-28 02:25:41 -06:00
Delta-V bot b97856f002 Automatic changelog update 2025-11-28 09:25:15 +01:00
Colin-Tel 6fa8406eca Fixed Laser Carbine damage (#4790)
i did it, all me
2025-11-28 02:24:56 -06:00
Delta-V bot 618bd18bbe Automatic changelog update 2025-11-28 08:18:04 +01:00
+1 ed9560c92f OVINIA INVASION !! (#4715)
* Ovinia Species (Straight Sheepin It) DRAFT (#490)

<!--
Explain this PR in as much detail as applicable

Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->

Yeah yeah yeah im sheeping my shit im straight sheeping it yeah yeah
yeah.
I'm literally making the Ovinia species, sheeps in space. oh god oh fuck
i hope i get this done.

Ovinia are basically sheep but in space! Pretty freaking cool!

Traits:
Pros:
wont trigger shards/mousetraps on step,
cold/heat threshhold resist (wool),
get hungry/thirsty 25% slower,
flammibility 75% (wool),
Take 20% less cold, shock, and heat damage (wool),

Cons:
theobromine weakness,
sleep 50% longer, (to be coded)
eat 20% slower,
take 15% more pierce/slash

---

<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's
good to leave future references
-->

- [x] Get Base Sprites in for body/tail/ears
- [x] Make Species Prototype
- [x] Make Markings Prototype
- [x] Make Body Parts Prototype
- [x] Make Entity Body Prototype
- [x] Make sure Entity Body Prototype is done right
- [x] Make Organ Prototype
- [x] Make Entity Species Prototype
- [x] Make sure Entity Species Prototype is done right
- [x] Add markings/finish Prototype
- [x] Make Sounds Prototype
- [x] Add Sounds
- [x] Make sure Baas is an emote and works
- [x] Make Mobs Player
- [x] Make sure Mobs Player Prototype is done right
- [x] Make Language Prototype
- [x] Add Displacement maps for clothing
- [x] Add swag
- [x] Add traits
- [ ] Add ovinia outerwear variants (can do later)
---

<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->

<details><summary><h1>Media</h1></summary>
<p>

![image](https://github.com/user-attachments/assets/b000389d-55f3-4de7-84d8-058f7fa1832b)

![image](https://github.com/user-attachments/assets/ea7ca855-edc8-42a0-9a36-941ccac403a7)

![image](https://github.com/user-attachments/assets/ca0c919d-214c-4ca7-bb30-a62c009588bb)

![image](https://github.com/user-attachments/assets/7e19d12d-3e1d-41a0-992b-1785f5ea2215)

![image](https://github.com/user-attachments/assets/f08210b1-5f02-4e6f-8d46-5018fc8a918b)

![image](https://github.com/user-attachments/assets/88848e52-eb54-44dc-ad0e-bcdc7d756078)

</p>
</details>

---

<!--
You can add an author after the `:cl:` to change the name that appears
in the changelog (ex: `:cl: Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->

🆑
- add: Added Ovinia as a playable species!
- tweak: Moved some localization to Den specific areas
- remove: Removed all of the snacks out of gregg's cupboard

---------

Co-authored-by: Blitz <73762869+BlitzTheSquishy@users.noreply.github.com>
Co-authored-by: Rosycup <178287475+Rosycup@users.noreply.github.com>

* Sum Horns (#911)

<!-- 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.-->
<!-- What did you change? -->
This adds four new horns for Ovinia. And a snout, too. 🫡
It's MIT because I want it to be, and in case anyone needs horns for
species that are like. That high up in orientation.
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
Ovinia don't have enough horns. Ovinia also doesn't have a marking that
puts a line through the top of your face. So I fixed that in this PR.

<!-- Summary of code changes for easier review. -->
A meta JSON, an FTL file, and a bunch of images.
<!-- 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. -->
Just look in files changed.
<!-- 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 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 -->

**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: Gave ovinia a little bit more horn, and a secret snout.
<!--
🆑
- add: Added fun!
- remove: Removed fun!
- tweak: Changed fun!
- fix: Fixed fun!
-->

---------

Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>

* Ovinia Trait Fix and Emote Adjustments (#1124)

<!-- 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 -->
Fixed the localisation of the Baa emote. Changed Baa and Moo from the
caw icon to relevant animal icons both taken from
[[TGstation](https://github.com/tgstation/tgstation)] and modified
slightly. Fixes the ovinia trait not conferring the relevant emotes when
chosen. Fixes #775.

Fixed missing location for Baa emote.
Added relevant _Den namespace folders and attribution file for emotes.
Added two new icons to said folders.
Removed ´available: false´ from ovinia speech_emotes.yml making the
trait work as intended.

<img width="153" height="114" alt="imagen"
src="https://github.com/user-attachments/assets/2530e067-dccc-41e7-b36b-9be5594761c9"
/>

- [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 can confirm this PR contains no AI-generated content, and did
not use any AI-generated content.

**Changelog**
🆑 Wheels
- add: New icons for Baa and Moo emotes
- fix: Ovinia sounds trait will now allow holders to Baa as intended
- fix: Baa emote name will name display properly when hovered over

---------

Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>

* Ovinia Typing Sprite Fix (#1348)

<!-- 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? -->
routed ovinia's non typing state to work
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
fixes massive error when thinkibng waht to type
<!-- Summary of code changes for easier review. -->
ough
<!-- 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. -->
<img width="139" height="137" alt="image"
src="https://github.com/user-attachments/assets/25990a20-0782-46a2-b0c5-fb6f3374d7c4"
/>

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

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

🆑
- fix: Fixed Ovinia's idle typing sprite to not be a massive error

* continuing to go bald

* Fixing Fails with the language FTL

* Changes again to languages.ftl

* Removed Resomi Stuff from the FTL

* Fixed the language thingy once more

* Grammar and fixes

* Ovinia DeltaV adjustments

* Added AnimalFriend faction

* Switched Ovinia naming scheme to default

* Fixed YAMLLinter issues with Ovinia

* Fixed the heat damage thingy

* YAML Linter Hates me

* Testing Changes

* Update ovinia.yml

* Update ovinia.yml

* FINALLY

* Updates to Factions for the AnimalFriend Trait

* Fucking Case Sensitive

* Reviewed proposed changes to Ovinia.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Vape <76235372+Vapetastic-Gaming@users.noreply.github.com>

* Updates

Fixed all requests besides the displacement maps. Still workin on that

* Fixes Coscult and Displacements

* misc

* Tag fixes. YAML Linter, my beloathed

* random grumbles

case sensitivity is set to high. please fix this maintainers, thanks

* BREAKTHROUGH

* Req changes

* Attributions, and New soundies

* Updaties

---------

Signed-off-by: Vape <76235372+Vapetastic-Gaming@users.noreply.github.com>
Co-authored-by: juniwoofs <jakbroeder@gmail.com>
Co-authored-by: Blitz <73762869+BlitzTheSquishy@users.noreply.github.com>
Co-authored-by: Rosycup <178287475+Rosycup@users.noreply.github.com>
Co-authored-by: Mono <182929384+Monotheonist@users.noreply.github.com>
Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>
Co-authored-by: wheelwrightt <174839295+wheelwrightt@users.noreply.github.com>
Co-authored-by: sheepie <180479595+juniwoofs@users.noreply.github.com>
Co-authored-by: Vanessa Louwagie <vanessalouwagie@outlook.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-28 08:17:45 +01:00
Delta-V bot 5fd21ac78b Automatic changelog update 2025-11-28 01:04:10 +01:00
MD360 60b6271c48 Remove BorgMaterial Tag (#4787)
Remove the Tag
2025-11-27 18:03:51 -06:00
Delta-V bot 6aaea05529 Automatic changelog update 2025-11-27 23:25:47 +01:00
Proxy also works :3 3ac8f5a333 remove security hardsuit insulation (#4724)
remove insuls
2025-11-27 16:25:28 -06:00
Delta-V bot ce102dff72 Automatic changelog update 2025-11-27 19:29:23 +01:00
MD360 f51718ad17 Add an option for ore box to dump out ores. (#4786)
* Add Dumpable comp

* Forgor comment again.
2025-11-27 18:29:03 +00:00
Delta-V bot 43e274da1e Automatic changelog update 2025-11-27 17:35:08 +01:00
VelcroboyandVelcroboy fdc4ca6fb4 Fix Gladiator having wrong headset (#4778)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-27 10:34:49 -06:00
Tobias Berger 83d26f0433 Ditch yamltainer team (#4782) 2025-11-27 13:38:26 +00:00
Delta-V bot b69714f66f Automatic changelog update 2025-11-27 13:02:48 +01:00
VelcroboyandVelcroboy a5c7a8666f Map Hotfix: Tortuga (#4773)
* Map Hotfix: Tortuga

* fixgridatmos

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-27 13:02:28 +01:00
Delta-V bot 43a27a6ba1 Automatic changelog update 2025-11-27 12:37:48 +01:00
VelcroboyandVelcroboy 0217c8523e Map Hotfix: Lighthouse (#4771)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-27 12:37:29 +01:00
Delta-V bot f67704864e Automatic changelog update 2025-11-27 12:07:42 +01:00
VelcroboyandVelcroboy e55208e0ba Map Edits: Arena (#4729)
* Map Edits: Arena

* remove comment

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-27 12:07:23 +01:00
Vanessa 1de9aa536c Removed obsolete DroppableBorgModule Code (#4770)
Removed obsolete DroppableBorgModule since upstream merged in Borg hands
2025-11-27 08:23:49 +00:00
Delta-V bot 4dfada77c6 Automatic changelog update 2025-11-27 06:08:41 +01:00
Vanessa 1a25841fb8 Cargo Mascot Updates (#4769)
Direction requested changes
2025-11-26 23:08:22 -06:00
Delta-V bot a9d763648e Automatic changelog update 2025-11-27 05:05:52 +01:00
snowywinters d15d3ebdf3 Asterisk rework (#4758)
* Update asterisk.yml

* second try

* part 3

* part 4

* Part 5

* part 6
2025-11-26 22:05:33 -06:00
Delta-V bot 2bca3253e6 Automatic changelog update 2025-11-27 04:50:29 +01:00
Charlie Morley 4efde19136 fix "psionic disturbance" arti trigger not working at all (technical issues related to component) (#4705)
fix "psionic disturbance" trigger technical issues (assumed comp was on arti ent, not on node ent)
2025-11-26 21:50:10 -06:00
Delta-V bot f2b4a62408 Automatic changelog update 2025-11-27 04:49:58 +01:00
Charlie Morley f0dd4dff80 xenoarch: make commonly-conflicting atmos triggers appear less often (#4744)
* xenoarch: make commonly-conflicting atmos triggers less likely

* minor review comment
2025-11-26 21:49:39 -06:00
Delta-V bot 061e57dc6a Automatic changelog update 2025-11-27 04:48:29 +01:00
Charlie Morley 3fdb3ea9cf xenoarch: arti effect happens faster, for more fun danger (#4743)
* xenoarch: arti effect happens faster, for more fun danger

* minor review comments
2025-11-26 21:48:09 -06:00
Delta-V bot 062e414b04 Automatic changelog update 2025-11-26 23:04:38 +01:00
Charlie Morley dc8f12ef1a make mindbreaker toxin grant a psionic reroll (#4429)
* mindbreaker toxin grants a psionic reroll

* remove unnecessary "dv change" comments on mindbreaker nyano code
2025-11-27 09:04:19 +11:00
Delta-V bot 44f9ba464d Automatic changelog update 2025-11-26 23:01:42 +01:00
Charlie Morleyandpre-commit-ci[bot] a67c872278 make meteor swarm event actually hit the station (#4379)
* make meteor swarm event actually hit the station

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

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

* remove MeteorSwarm targeting admin logs

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-27 09:01:23 +11:00
Delta-V bot 29b6ce81e3 Automatic changelog update 2025-11-26 22:36:58 +01:00
Vanessa 3145103db9 Added Devil Blacklist (No More Chaplain Devils) (#4776)
Made it so that mindshielded, antag-immune, and bible users can't become the devil
2025-11-26 21:36:39 +00:00
Delta-V bot a05608a1bd Automatic changelog update 2025-11-26 17:45:54 +01:00
pootslap 58c09e5775 Fixes mime survival box spawns (#4768)
* Update survival.yml

* Update survival.yml
2025-11-26 16:45:34 +00:00
Delta-V bot a6d657e96c Automatic changelog update 2025-11-26 17:23:40 +01:00
Exile152andthetuerk 9e2275f359 Add Cargo Mascot Clothing (#4708)
* Merged mascot clothing from omu

* fixed conflicts

* fixed more newbie errors

---------

Co-authored-by: thetuerk <46725294+ThanosDeGraf@users.noreply.github.com>
2025-11-26 10:23:20 -06:00
Delta-V bot ce34b1cfcf Automatic changelog update 2025-11-26 16:31:41 +01:00
KOTOB 0b1848b97e make slips scary again (#4747)
* evil

* gamer...
2025-11-26 09:31:20 -06:00
Tobias Berger 84e6748138 minor github cleanup (#4765) 2025-11-26 15:17:58 +01:00
Delta-V bot d151a700e8 Automatic changelog update 2025-11-26 15:01:44 +01:00
Cepelinas1 05cead4243 new round in periapsis pingable discord role (#4755)
first commit
2025-11-26 15:01:25 +01:00
Delta-V bot dff7499f75 Automatic changelog update 2025-11-26 14:53:53 +01:00
Dorragon 27aafc7548 Security Roundstart gloves (#4760)
* Start

* Fixes everything

* all other ones are lowercase so this one is too now
2025-11-26 14:53:33 +01:00
Stop-Signs e7714f1d63 fix lobby art (#4762)
yes
2025-11-26 14:44:21 +01:00
Delta-V bot 8ccdd26196 Automatic changelog update 2025-11-26 14:30:13 +01:00
Sir Warock 4a0736235b Fix NT-3 (#4764) 2025-11-26 14:29:54 +01:00
Delta-V bot 03eccfbeee Automatic changelog update 2025-11-26 09:59:55 +01:00
Vanessaandpre-commit-ci[bot] 8c5006df9c Upstream Merge (August) Fixes (#4757)
* Commented out StunVisuals

* Fixed engi borgs not being able to hold modular machine parts

* Fixed admin ghosts popping up a message when alt-clicking on IPCs

* Fixed Book of Mysteries

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

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

* Fixed some borg modules that got missed.

* [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>
2025-11-26 09:59:36 +01:00
Delta-V bot f5b4403a5e Automatic changelog update 2025-11-26 01:29:56 +01:00
AeraAulinandpre-commit-ci[bot] f004fcd95f add contest winner stories into the ancient books (#4716)
* took me long enough

* add descriptions and suffixes

* [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>
2025-11-25 18:29:37 -06:00
Delta-V bot b36ac50fdc Automatic changelog update 2025-11-25 19:03:55 +01:00
09cbcd71cb Add the NT-3 (#4622)
* Add Bipod System

* Add the NT-3

* Small fixes

* Small fixes

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

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

* Fix Test Fails

* Small oversight

* Robust the Code

* Fix Action Name

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

* Fix Action Description

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

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

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

* Add WallPierce + Changes

* Small fix

* Cleanup

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

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

* Fix Testfail + Add Descriptions

---------

Signed-off-by: Sir Warock <67167466+SirWarock@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>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2025-11-25 18:03:33 +00:00
Delta-V bot e9c914ba59 Automatic changelog update 2025-11-25 10:19:24 +01:00
Tobias Berger 5d8f56a329 Fix ClothingSpeedModifier getting applied twice (https://github.com/DeltaV-Station/Delta-v/issues/4751)
Fixes https://github.com/DeltaV-Station/Delta-v/issues/4745
Caused by unfortunate merge conflict resolution in upstream merge
2025-11-25 10:19:04 +01:00
Delta-V bot 8aaac2071e Automatic changelog update 2025-11-25 05:08:29 +01:00
Vanessa 8afdf61d89 Gave ghost cat roles the ability to pounce (#4733)
* Gave ghost cat roles the ability to pounce

* Fixed typo.
2025-11-24 22:08:10 -06:00
Delta-V bot 872327bbea Automatic changelog update 2025-11-25 05:07:39 +01:00
Coryn 60a965a6d9 Improve calculation... again (#4719)
Improve calculation
2025-11-24 22:07:20 -06:00
Delta-V bot b24c50c69a Automatic changelog update 2025-11-25 04:20:53 +01:00
Colin-Tel 7015fa7ea0 Chibi Update 24NOV2025 (#4739)
* Update chibi.yml

* fucking invalid of course
2025-11-24 21:20:33 -06:00
Delta-V bot 0598cfaadb Automatic changelog update 2025-11-25 04:19:09 +01:00
SirrRequiem 791b5f2e08 Terra Quick Fix (#4741)
Replaces burn chamber windows
2025-11-24 21:18:50 -06:00
Proxy also works :3 e63999d296 resync _wiki (#4721)
fix cepes typos, fix one  outdated thing
2025-11-24 23:27:24 +00:00
Delta-V bot df3c983278 Automatic changelog update 2025-11-24 20:15:38 +01:00
Vanessa 25c429a3b9 Fix Engi Borg Modules (#4738)
How did this work before?
2025-11-24 19:15:18 +00:00
Delta-V bot 7bb5eddd68 Automatic changelog update 2025-11-24 16:03:34 +01:00
Vanessa 1faf5a3e9b Fixed IPCS not being able to crawl (#4737) 2025-11-24 15:03:15 +00:00
Delta-V bot 3b687c29ac Automatic changelog update 2025-11-24 14:48:07 +01:00
Sir Warock b1303c94f1 Adding CentComm Chads Magazine (#4631)
* CentComm Chads

* Added to Migrations

* Typo Fix

* Different stamp

* Fix for maints
2025-11-24 13:47:47 +00:00
Sir Warock 484c96b043 Make Asphyxiating pierce Resistances (#41556)
Make Asphyxiating pierce res
2025-11-24 06:53:11 -06:00
Delta-V bot 9796941995 Automatic changelog update 2025-11-23 23:21:32 +01:00
MD360 34207e73cc MMI fix part two (#4723)
* MMI fix part two

* Forgor comments
2025-11-23 16:21:12 -06:00
Vanessa b3b2d55c64 Merge pull request #4625 from ShepardToTheStars/upstream-merge-august
Upstream Merge (August)
2025-11-23 15:49:56 -06:00
Vanessa b55d11dcda Reverted keybinds to Wizden default 2025-11-23 15:22:36 -06:00
Vanessa 341f9c118b Fixed prediction in Bluespace Lifeline trigger 2025-11-23 15:22:36 -06:00
Vanessa 4009fee358 Fixed prediction in shitmed code for Meat Spike 2025-11-23 15:22:36 -06:00
Vanessa 0f0b950ed8 Added soap to surgery module so medical borgs can clean their tools. 2025-11-23 15:22:36 -06:00
Vanessa 92a7949a30 Fixed server crash if skeleton head spawning in Captain's locker was blown up by the nuke. Wat? 2025-11-23 15:22:36 -06:00
Vanessa e98d55795c Added reinforced plasma window levels of DeltaPressure resistance to Malign windows. 2025-11-23 15:22:36 -06:00
Vanessa 460e572785 Updated Wizden Changelog 2025-11-23 15:22:35 -06:00
ArtisticRoomba a3caa2b6f9 Fix Atmospherics dP not trolling partially airtight entities (#40435)
* Fix dP not trolling partially airtight entities

* Assumptions in atmospherics are the root of all evil
2025-11-23 15:22:35 -06:00
Vanessa 7d7d4e4c45 Changed Normality Crystal recipe to include holy water because the recipe for Lye (water+ash) was making it impossible to make normality 2025-11-23 15:22:35 -06:00
Princess CheeseballsandPrincess Cheeseballs cece56a5b7 Mothership Core Prototype Cleanup (#40410)
* I cannot escape bodysystem no matter how hard I try

* Move 2 things

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:35 -06:00
Vanessa 537e2fa03c Added CableApcStackLingering10 to migration 2025-11-23 15:22:35 -06:00
Vanessa 3c8e54d127 Changed price of NanoMed restock box after it kept failing NoCargoOrderArbitrage test 2025-11-23 15:22:35 -06:00
Vanessa 6f342ad712 Fixed borg dataset entries after name removal 2025-11-23 15:22:35 -06:00
Vanessa 614584080d Cleaned up some old comments. 2025-11-23 15:22:35 -06:00
Vanessa 952c50e4c3 Added a migration for SoapBorg, since it was mapped. 2025-11-23 15:22:35 -06:00
Vanessa da8f09e0a4 Nuked invalid entity from nukieplanet.yml 2025-11-23 15:22:35 -06:00
Vanessa cc726bec25 Updated various non-upstream entities components. Fixed YAML Linter errors. 2025-11-23 15:22:35 -06:00
Vanessa 370f309a48 Revert "Remove NamesGolem" (#39478) 2025-11-23 15:22:35 -06:00
Vanessa a0b1730113 Removed some Chem Bottles that were added in the upstream merge. 2025-11-23 15:22:35 -06:00
Vanessa 49cb073873 Fixed Devil errors after rebasing. 2025-11-23 15:22:35 -06:00
MissKay1994 d7db807e9e Adjust bureaucratic error to prevent only passenger being available (#40001)
Fire all the interns
2025-11-23 15:22:35 -06:00
SlamBamActionman 13e11d8f3f Fix small issues with Text Highlighting (#38144) 2025-11-23 15:22:35 -06:00
Tayrtahn d970bc4c71 Cleanup chat highlighting code (#38235)
* Cache regexes

* Convert static LocManager to resolved

* Use Any instead of Count > 0

* Use var instead of explicit types

* Make _highlights readonly
2025-11-23 15:22:35 -06:00
Vanessa 60e744704a Forgot to save and commit the development.toml file. 2025-11-23 15:22:35 -06:00
Tiniest Shark 5828a77370 Helm + Mask Displacements for Reptilians (and some unique helmets) (#39351)
* Liz displacements + unique helms

* small fix

* Couple of small fixes
2025-11-23 15:22:34 -06:00
Kyle Tyo f5e1f62d4d Cleanup AddPolymorphActionCommand and LEC conversion. (#38853)
commit
2025-11-23 15:22:34 -06:00
ArtisticRoomba 2bc7d10eec Atmos Delta-Pressure Window Shattering (#39238)
This PR adds delta-pressure damage. In short, airtight structures can now take damage proportional to the difference in pressures between the sides of the structure.
2025-11-23 15:22:34 -06:00
QuasrandQuasr aee0e440a5 Updated inspector description to reflect functionality (#40072)
update inspector desc.

Co-authored-by: Quasr <~182430031+quasr-9@users.noreply.github.com>
2025-11-23 15:22:34 -06:00
Tiniest Shark 2a2ae8042c Add inhand sprites to Cartons and Cups, give new inhands to Cans. (#39814)
* Added inhand sprites to cans, cartons and cups.

* small tweak
2025-11-23 15:22:34 -06:00
Tiniest Shark 3e1d74b1f3 Burger Inhands (#39894)
burger is in your hands
2025-11-23 15:22:34 -06:00
pathetic meowmeow 32f018e804 Don't enqueue construction events without validation (#39869) 2025-11-23 15:22:34 -06:00
breeplayx3 28f8d6dd22 Berry Delight recipe edit (#40085)
berry delight change
2025-11-23 15:22:34 -06:00
opl-andopl 3c2da3143b Use a fixed amount of decimal points in gas analyzer window (#40081)
This prevents the volume and temperature labels from changing width when the value lands on integer values, making the text easier to read.

Co-authored-by: opl <4833621+opl@users.noreply.github.com>
2025-11-23 15:22:34 -06:00
FungiFellow 500209a1c2 Trimmed Sentience Targets from Corgis Smile and Cockroaches (#39810)
* Update animals.yml

* Update pets.yml

* Removed Sentience Target from corgi

* Update random-sentience.ftl

* Obliterated Scurret from .ftl
2025-11-23 15:22:34 -06:00
Mora 0c0421a61a Some more vox customization (#39083)
* Added docked and spiked tails, added talisman for vox

* Tail Talisman ftl

* adjusts talisman to be its own tail to avoid having to deal with other tails at all

* vox tail stuff

* Added amputated tail (courtesy of flareguy) and split tail

* adds TODO regarding marking conditionals

* rsi run check pls stop screaming at me

* Shelving the talisman for later, keeping the sprites around

* Add RSI credits

* Remove unnecessary files

* renamed amputated to vestigial
2025-11-23 15:22:34 -06:00
Centronias ffdb552d1f Add CVar for disabling loadout item role timers (#36775) 2025-11-23 15:22:34 -06:00
Kyle Tyo e0d8ec0e22 Localize, cleanup, and LEC round control commands. (#38812)
* commit-progress

* commit
2025-11-23 15:22:34 -06:00
slarticodefast 4f221dadc7 Don't show item dropping popup when wielding. (#40032)
silence
2025-11-23 15:22:34 -06:00
Partmedia 2d4ffa8f39 Fix benchmark (#40039) 2025-11-23 15:22:34 -06:00
SolidSyn 9c820b9269 Adds a secHUD to the noir-tech glasses (#39859)
* Adds a SecHUD to the noir-tech glasses

* Adds a Security HUD to the noir-tech glasses

* Revert "Adds a Security HUD to the noir-tech glasses"

This reverts commit 68d7b9b6e190618e44a94df71cf311e056892392.

* Adds a security HUD to the noir-tech glasses
2025-11-23 15:22:34 -06:00
IProduceWidgets c7f086bffc prevent double-mapping lights (#39939)
works?
2025-11-23 15:22:34 -06:00
MilenVolf de7e8b6a63 Remove empty drink-component.ftl file (#40064)
Probably had to be removed in #39031
2025-11-23 15:22:34 -06:00
2f768d22b3 Fix radiation vomit for dead mobs (#40020)
* Fix Radiation Vomit for dead mobs

* Update Content.Server/Destructible/Thresholds/Behaviors/VomitBehavior.cs

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>

* Fix Radiation Vomit for dead mobs

* Fix Radiation Vomit system for dead mobs

* refactors

* Adding mobStateSystem for validation

* refactor

* Unrelated cleanup

---------

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:34 -06:00
IProduceWidgets bfa2c65c7c Update 4 visitor shuttles & nanomed inventories (#39718) 2025-11-23 15:22:34 -06:00
Southbridge 0040cd56f7 Event Shuttle Fixes (#40059) 2025-11-23 15:22:33 -06:00
slarticodefast 9d978dc7f9 Fix NF belt metadata file caused by git assuming that was the file to put it in 2025-11-23 15:22:33 -06:00
SlamBamActionman 471a90c8f1 Moths cannot eject items from military boots (#40049) 2025-11-23 15:22:33 -06:00
Hannah Giovanna Dawson fdc8301b05 Lizard Tails Can Be Hidden By Clothing (#40026)
Taken from @TiniestShark's PR.
2025-11-23 15:22:33 -06:00
InsoPL 2019485bfe Texture Scaling for clothing (#39714)
scale
2025-11-23 15:22:33 -06:00
SlamBamActionman e72cf44abd Fix incorrect bullet & cartridge names (#39993)
* Fix conflicting names

* zero zeroes
2025-11-23 15:22:33 -06:00
Travis Reid 76c54acfd2 Fix docstring typo starts -> stops (#40031) 2025-11-23 15:22:33 -06:00
473e3f7fa7 TriggerOnMeleeHit and more (#39826)
Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:33 -06:00
slarticodefast 4ade77bba9 improve spawnpoint error logging (#40021) 2025-11-23 15:22:33 -06:00
AndrewFenriz 7d6a8426c5 Migrate all mechs to PartAssembly and remove legacy MechAssemblySystem (#39027)
* Removed the old MechAssembly system and component.
Converted all mechs to use the unified PartAssembly system.
Removed dismantling mechs during assembly logic to simplify the code.

* Delete Chassis via migration
2025-11-23 15:22:33 -06:00
ToastEnjoyer f45213f5ff Removed unused asset from devmap (#39974) 2025-11-23 15:22:33 -06:00
ādaandiaada e25bef7fa1 Clown bags squeak when inserting items (#39931)
squeak!

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:33 -06:00
ScarKy0 efdbdf0f19 Nullable messydrinker tag (#40002)
init
2025-11-23 15:22:33 -06:00
Kowlin 6803e48114 Stop derelict borgs from duplicating their ghost roles. (#39992)
Add reregister to derelict borgs
2025-11-23 15:22:33 -06:00
Winkarst-cpu f55ba79bb6 SharedKitchenSpikeSystem bugfixes (#39959)
* Fixes

* Update

* Update
2025-11-23 15:22:33 -06:00
ScarKy0 258b4b8b76 Messy drinker immunity and cleanup (#39989)
init
2025-11-23 15:22:33 -06:00
Hannah Giovanna Dawson 13ac4aa1f1 Scurrets - can wear pet bags, mail bags and spears (#38774)
* Scurrets - can wear pet bags, mail bags and spears

* a

* Resolve PR comments
2025-11-23 15:22:33 -06:00
Mr. 27 dd462c9e0c Fix forensic scanner leaking fingerprints onto the scanning object if you use the verb (#39964)
Update ForensicScannerSystem.cs
2025-11-23 15:22:33 -06:00
Vanessa 6da624c356 YAML fix. 2025-11-23 15:22:33 -06:00
chromiumboy a50aaff6f3 Sentry turrets - Part 7: Electronics and construction graphs (#35236)
* Initial commit

* Fixing merge conflict

* Updated for deployment

* Whitespace fixes

* Linter fixes

* Test fail fix

* Fixed test failure

* Add separate command circuitboards

* Addressed review comments
2025-11-23 15:22:33 -06:00
Princess CheeseballsandPrincess Cheeseballs 1059c4e7da [STAGING] 1984 Derelict Syndicate Borgs (#39978)
1984

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
slarticodefast 395d4e7680 Don't network ZombifyOnDeathComponent and ZombieImmuneComponent (#39963)
no networking
2025-11-23 15:22:32 -06:00
FungiFellow a58797e94a Stop Sentience Event targeting Zombified Creatures (#39950)
* Strip Target From Zed

* Update RandomSentienceRule.cs

* Update RandomSentienceRule.cs

* Update RandomSentienceRule.cs

* Update RandomSentienceRule.cs

* Update RandomSentienceRule.cs
2025-11-23 15:22:32 -06:00
ScarKy0 1a7a383a24 Add SnoutCover appearance layer (#39949)
* init

* cover
2025-11-23 15:22:32 -06:00
Princess CheeseballsandPrincess Cheeseballs 148db476d1 Small Status Effect Cleanup (#39944)
Heroic

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
Minemoder5000 898f240ab1 Remove a default Cyborg name (#39948)
* 1984 clanker

* Fix prototype
2025-11-23 15:22:32 -06:00
Hitlinemoss 04afb24584 Improved cardboard-weapon descriptions (#39927) 2025-11-23 15:22:32 -06:00
ādaandiaada 75f0f3407d Fix audio mispredict when quick inserting (#39930)
surprising

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
Southbridge d3e912f41a Updated Aseprite Tools (#39358)
Modified aesprite tools
2025-11-23 15:22:32 -06:00
Fildrance 8aa6bdc284 Revert "Added button and manager for in game bug reports (Part 1)" (#39872)
Revert "Added button and manager for in game bug reports (Part 1) (#35350)"

This reverts commit a8d6dbc324.
2025-11-23 15:22:32 -06:00
chromiumboy 4e7c0160c0 Re-anchorable structures (#39542)
* Initial commit

* Reverted reinvention of an existing feature...

* Fixed two missed entries

* Added extra examine check

* AI core and high security doors visuals snap to always face south
2025-11-23 15:22:32 -06:00
Hitlinemoss 1b24b46e00 Clipboards added to autolathe (and other folder changes) (#37705)
* Added plastic clipboards; added plastic clipboards to the PTech machine; added clipboards & plastic clipboards to the autolathe

* Fixed plastic clipboard inhand sprites; added and implemented 'empty' clipboard prototypes

* Cleaned up code for empty clipboards; removed BoxFolderBaseEmpty since now it's redundant

* Extensive folder cleanup

* Bugfixed random folder spawns

* Reduced amount of paper in CrateServiceBureaucracy

* Medical folder sprite rename

* BaseTraitorSocialObjective sprite fix

* Added office paper to bureaucracy crate

* First pass at addressing recent review

* Second pass at addressing recent review

* Fix of weird migration.yml error

* whoops, forgot to undo the rename to folder-white.png in the last few commits

* whoops, didn't commit that last commit properly

* whoops, forgot to undo this reordering
2025-11-23 15:22:32 -06:00
Winkarst-cpuandPrincess Cheeseballs fadf79a055 New Feature: Symptoms of radiation poisoning (#39805)
* New Feature

* Cleanup

* Bump threshold

* Update

* Update

* Single change

* Me when I forgor the yaml

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
Perry Fraser cb57b84578 fix: monoify card_drag, card_tube_bonk (#39511)
Also move an attribution to the right directory.
2025-11-23 15:22:32 -06:00
Blaine Pavlockandslarticodefast 93a74d4c63 Reagents now drop when dispensers are deconstructed (#39676)
* Reagents now drop when dispensers are deconstructed

* Updated containers to include beakerSlot types

* Update Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
Princess CheeseballsandPrincess Cheeseballs 55069b405d [Cleanup] Remove FellDownEvent (#39762)
* Remove

* Better description maybe

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
Princess CheeseballsandPrincess Cheeseballs 150464d64d [Bugfix] Generators can now be weightless. (#39787)
FIX

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:32 -06:00
Tayrtahn 648d4539a5 Add test of disposal unit throw-insert behavior (#39479)
* Add test of disposal unit throw-insert behavior

* Remove initially-empty check
2025-11-23 15:22:32 -06:00
Centronias 4a3d79faa0 Fixes Diona rooting not working since event based weightlessness refactor (#39893)
* Fixes Diona rooting not working since event based weightlessness refactor

Caused by #37971

* pr comments
2025-11-23 15:22:31 -06:00
Vanessa 66ada0ed93 Ported base implementation of SimpleToolSystem. 2025-11-23 15:22:31 -06:00
SlamBamActionman b0f80ffa74 TriggerOnSimpleToolUsage and add tool locks to syndicate items (#39900) 2025-11-23 15:22:31 -06:00
Princess CheeseballsandPrincess Cheeseballs 7297cad906 [Bugfix] Fix Cross Grid Magboots (#39910)
* Augh

* Remove that

* ViewVariables property so it can be debugged at the very least.

* Remove

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:31 -06:00
Serylis of Fiveandslarticodefast e42fabbb7c Make Modular Grenades with Chemical payload respect their trigger delay (#39905)
* adds `KeysIn` data field to `ChemicalPayloadComponent`

And check when handling chemical payloads that a trigger key exists.

* Update Content.Server/Payload/EntitySystems/PayloadSystem.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:31 -06:00
GR1231 b7752742da Fix Smile's hat displacement map (#39824)
Fix Smile's head displacement map
2025-11-23 15:22:31 -06:00
ToastEnjoyer b3dca0c709 Wizard can no longer teleport to arrivals (#39901)
* Fixed pacified people using the laser carbine

* Fix wizards being able to teleport to arrivals

* Removed spaces that we causing fails

* Made using the in game map editor this time
2025-11-23 15:22:31 -06:00
beck-thompsonandslarticodefast e014c9592d Fix chameleon backpacks not being able to be opened when locked (#39784)
* Fix chameleon backpacks not being able to be opened when locked

* rename

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:31 -06:00
FungiFellow 8849ebae7e Prevented Engiborgs from picking up AI lawboards (#39730)
Update borg_modules.yml
2025-11-23 15:22:31 -06:00
slarticodefast 199dff258f Remove the dynamic game mode from player votes (#39902)
disable
2025-11-23 15:22:31 -06:00
InsoPL d4340bdb68 Option to disable Crawling in Cvar (#39739) 2025-11-23 15:22:31 -06:00
beck-thompsonandslarticodefast 6f8377683c Syndicate locks are now selectable (#39532)
* Syndicate locks are now selectable

* Minor tweaks

* Make not syndicate themed

* Address refview

* review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:31 -06:00
Perry Fraser ffe77c6071 fix: Block EntityStorage from inserting into mechs (#37942)
This additionally moves the hard-coded check for HandsComp that
previously did this, and moves it into an event which now both
HandsSystem and MechSystem subscribe to.
2025-11-23 15:22:31 -06:00
ToastEnjoyer ec7ca3bdea Fixed pacified people using the laser carbine (#39891) 2025-11-23 15:22:31 -06:00
Princess CheeseballsandPrincess Cheeseballs a1dcf2b66c [Bugfix] Fix topical self healing time multiplier not working (#39883)
* Commit

* Fix 2

* Prettier

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:31 -06:00
Kyle Tyo d677e755ca Combine AdminFrozenSystem in shared. (#39885)
commit
2025-11-23 15:22:31 -06:00
Vanessa 581f58ca04 Updated FlammableComponent in a few DeltaV specific files to Shared 2025-11-23 15:22:31 -06:00
M4rchy-S 9d42f336db Moving FlammableComponent to Shared (#39870) 2025-11-23 15:22:31 -06:00
Whatstone b53617320c Batchable lathe jobs, editable lathe job order (#38624)
* batchable lathe jobs, editable order

* requested changes

* LatheComponent comment, menu strings
2025-11-23 15:22:31 -06:00
slarticodefast 1b8979cbe8 Changeling cleanup and bugfix (#39843)
* fixes and cleanup

* key
2025-11-23 15:22:30 -06:00
Princess CheeseballsandPrincess Cheeseballs 5f0528ad7b [Bugfix] Lizard smite fix (#39842)
Fix

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:30 -06:00
Kyle Tyo 6c10744d9b Cleanup of resolves and usings. (#39865)
* commit

* commit
2025-11-23 15:22:30 -06:00
f9ac85552e Inflatable Module (#35100)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
2025-11-23 15:22:30 -06:00
RedBookcaseandRedBookcase 75bc8e0c10 Added more Derelict Cyborgs. (#38159)
* Added more Derelict Borgs.

* minor fix & salvage borg instead of mining borg name.

* I LOVE CAPITALIZATION!

* Fixed Derelict Engineer Cyborg name and added unshaded crystal layer.

* Ordering fixes & other cleanup.

* Updated Derelict Salvage Cyborg Sprites.

* New Salvage borg sprites.

* Updated module comments.

* Update events.yml

Extended the Derelict Syndicate Assault Borg's spawn timer to 25 minutes from 15.

* Fix for new borg hands

* Update events.yml

---------

Co-authored-by: RedBookcase <Usualmoves@gmail.com>
2025-11-23 15:22:30 -06:00
Kyle Tyo 5d4278c288 Killed a resolve in ClientAdminManager (#39863)
took a resolve out back and shot it
2025-11-23 15:22:30 -06:00
Kyle Tyo c7afb70f22 Fix "multiple keys" issue in Textures/Objects/Specific/Medical.rsi (#39861)
Update meta.json
2025-11-23 15:22:30 -06:00
lzk be9fcafa4f cleanup material doors (#39851) 2025-11-23 15:22:30 -06:00
ādaandiaada 32747f2695 Recolor Mime and Musician job icons (#39775)
cherry pick from DinnerCalzone/icons

Resprite Service job icons to match each other

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:30 -06:00
slarticodefast e9bba36f14 Fix admin objects tab (#39832)
fix objects tab
2025-11-23 15:22:30 -06:00
ViolentMonk ff9fef65e2 Invert HasMouthAvailable check (#39834) 2025-11-23 15:22:30 -06:00
KittygyatandPrincess Cheeseballs 91a259d1e9 Made moths less vulnerable to flames (#39672)
* Made moths less vulnerable to flames

* Approval

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:30 -06:00
Dinner 756bbf4222 Fix grenades not playing sounds when detonating (#39815)
fix grenade sounds
2025-11-23 15:22:30 -06:00
e3fdd2abe5 Impaired Mobility Disability (#39398)
* Implements mobility impairment

* Implements mobility impairment

* Implements mobility impairment

* Removed white cane related stuff (impaired cane replacement and removed mobility aid component)

* fix development.toml

* Implements slower standing

* Prevent speed stacking by checking if the entity is already holding a mobility aid

* Move all speed handling into ImpairedMobilitySystem, added comments, made it so wielding a mobility aid doesn't grant the recovery benefit

* Move all speed handling into ImpairedMobilitySystem, added comments, made it so wielding a mobility aid doesn't grant the recovery benefit

* remove unused file

* Shorten description

* Apply suggestions

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

* Suggestion cleanup

* formatting fix and removed extra datafield stuff

* added comment, fixed slashes, yadda yadda

* summary comments

* removed a word

* Add trait to clone whitelist

* Fix clone.yml

* my own review

---------

Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-11-23 15:22:30 -06:00
d9bb797d32 Add text highlighting (#31442)
Heavy DeltaV modications by Vanessa

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: Hans Larsson <hanandlia@gmail.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2025-11-23 15:22:30 -06:00
Southbridge a779990dfc Admin Log Browser Improvements (#39130) 2025-11-23 15:22:30 -06:00
Vanessa 1a6285fe3a Moved admin DV localization to its own file instead of putting it in upstream's file 2025-11-23 15:22:30 -06:00
Vanessa bde72ca0f1 Fixed mindRoles reference after MindRoles moved to Shared 2025-11-23 15:22:29 -06:00
Vanessa 942f4a0f7c Fixed autoclave and AntiTamper system after SharedEntityStorageComponent removal 2025-11-23 15:22:29 -06:00
c24e7e7cf1 Added Hemophilia Trait (#38224)
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:29 -06:00
slarticodefast a3bf2c8155 predict morgue and crematorium (#39293) 2025-11-23 15:22:29 -06:00
SolidSyn 9d4f05857d Fixed a typo involving the Space Lizard Plushie (#39808) 2025-11-23 15:22:29 -06:00
slarticodefast 40f115dc92 Predict Mind Roles (#39611) 2025-11-23 15:22:29 -06:00
Princess CheeseballsandPrincess Cheeseballs 579c80ffc9 Cane Sword Priority Fix (#39795)
GOTTA GO FAST

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:29 -06:00
slarticodefast 529d21675a cleanup changeling namespaces and prototypes (#39794) 2025-11-23 15:22:29 -06:00
Nemanja 66c0bdc8fa Remove BodyComponent check from MobPrice test (#39786) 2025-11-23 15:22:29 -06:00
Prole b277b5082d Moving Zombie Components to Shared (#39791)
* Moving Comps to Shared

* Requested Changes
2025-11-23 15:22:29 -06:00
Kowlin 228577676c Fix tricky nades not emitting their sounds. (#39792) 2025-11-23 15:22:29 -06:00
Perry FraserandPrincess Cheeseballs 0899e95cd9 fix: spellbooks can have charges ≠ 3 (#38769)
* fix: spellbooks can have charges ≠ 3

* refactor: just make setting MaxCharges an api thing

* refactor: don't auto-add LimitedCharges

* Small stuff

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:29 -06:00
slarticodefast 4e3e910b6a Revert "Fix: Untoggle removed actions" (#39776)
Revert "Fix: Untoggle removed actions (#39526)"

This reverts commit e90fac14eb.
2025-11-23 15:22:29 -06:00
Perry Fraser a522451a60 fix: don't do emergency shuttle stuff in lobby (#38732) 2025-11-23 15:22:28 -06:00
Vanessa f65ada3368 DeltaV Subdermal Implant fixes 2025-11-23 15:22:28 -06:00
slarticodefast d0127a2c5b Cleanup subdermal implant code (#39755) 2025-11-23 15:22:28 -06:00
Vanessa 5b380fe2c1 Various upstream merge fixes. 2025-11-23 15:22:28 -06:00
Princess CheeseballsandPrincess Cheeseballs 96f9e1fe2d Prevent shoe buffs while crawling (#39648)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:28 -06:00
Tayrtahn f998ea7160 Fix nuke disk getting lost when polymorphed holder is deleted (#36058)
* Delete original entity when polymorph is deleted

* Switch to EntityTerminatingEvent

* Add RevertOnDelete option to PolymorphPrototype

* Fix error on server shutdown while polymorphed

* Set RevertOnDelete to false by default

* AsNullable

* Revert "Set RevertOnDelete to false by default"

This reverts commit 087c43fbb923c9369c61c9d001e18814b3de3aca.

* Use pattern matching instead of .Value
2025-11-23 15:22:28 -06:00
Nox 7ec48b5fae Viable Canesword (#39586)
* Buffed canesword damage to 16, cost to 3.

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

* Increased sale price from 1 to 2 TC, increased damage from 16 to 17 to match cap saber.

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
2025-11-23 15:22:28 -06:00
Vanessa 67a6da6646 Shitmed fixes from the kitchen spike rework 2025-11-23 15:22:28 -06:00
Winkarst-cpu 041745e34e New Feature: Kitchen spike rework (#38723)
* Start

* Wow, text

* Ultra raw

* More stuff

* Wow, DOT and gibbing!!!

* More stuff

* More

* Update

* Yes

* Almost there

* Done?

* I forgot

* Update

* Update

* Update

* Update

* Update

* Update

* Update

* Update

* Update

* Beck

* Unhardcode
2025-11-23 15:22:28 -06:00
M4rchy-S 3d1c0ffa25 Fixing foam dart sprite in hands (#39758) 2025-11-23 15:22:28 -06:00
Winkarst-cpuandLaCumbiaDelCoronavirus baaad57611 Fix: Untoggle removed actions (#39526)
* Fix

* Update Content.Shared/Actions/SharedActionsSystem.cs

Co-authored-by: LaCumbiaDelCoronavirus <90893484+LaCumbiaDelCoronavirus@users.noreply.github.com>

---------

Co-authored-by: LaCumbiaDelCoronavirus <90893484+LaCumbiaDelCoronavirus@users.noreply.github.com>
2025-11-23 15:22:28 -06:00
lzk 096a2e0897 fix performer's suit sprites (#39722) 2025-11-23 15:22:28 -06:00
Samuka-CandPrincess Cheeseballs 8bc0a47b3b fix upload console (#39756)
* fix upload console

* make it smaller

* even smaller

* revert last commit

* Update

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:28 -06:00
Samuka-C 3a9d9ac4b8 Xenoborgs part 6 (#39595) 2025-11-23 15:22:28 -06:00
Princess CheeseballsandPrincess Cheeseballs d888b34a82 Crawling Fixes Part 4: Can't crawl when weightless. (#39099)
* Init Commit

* Typos

* Commit 2

* Save Interaction Test Mob from failing

* ssss

* Confident I've gotten all the correct prototypes

* Whoops forgot to edit those

* aaaaa

* Better solution

* Test fail fixes

* Yaml fix

* THE FINAL TEST FIX

* Final fix(?)

* whoops

* Added a WeightlessnessChangedEvent

* Check out this diff

* Wait I'm dumb

* Final optimization and don't duplicate code

* Death to IsWeightless

* Moth directed targeted attack

* A

* Bugfixes and such

* Grrr

* Death

* Cleanup

* Cleanup 2

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:27 -06:00
Princess CheeseballsandPrincess Cheeseballs 94e398b071 EVENT BASED WEIGHTLESSNESS (#37971)
* Init Commit

* Typos

* Commit 2

* Save Interaction Test Mob from failing

* ssss

* Confident I've gotten all the correct prototypes

* Whoops forgot to edit those

* aaaaa

* Better solution

* Test fail fixes

* Yaml fix

* THE FINAL TEST FIX

* Final fix(?)

* whoops

* Added a WeightlessnessChangedEvent

* Check out this diff

* Wait I'm dumb

* Final optimization and don't duplicate code

* Death to IsWeightless

* File scoped namespaces

* REVIEW

* Fix test fails

* FIX TEST FAILS REAL

* A

* Commit of doom

* borgar

* We don't need to specify on map init apparently

* Fuck it

* LOAD BEARING COMMENT

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:27 -06:00
362a91273c Xenoborgs part 5 (#37068)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: WarPigeon <DaedalusTheGamer@gmail.com>
2025-11-23 15:22:27 -06:00
Winkarst-cpu 7135714e18 Cleanup: Un-hardcode reagents standout (#39752) 2025-11-23 15:22:27 -06:00
B_Kirill 826e7da576 Cleanup warnings: CS0414 (#39748)
* Cleanup

* Fix
2025-11-23 15:22:27 -06:00
IProduceWidgets 3ad9531319 More informative changeline devour armor text (#39745)
more informative armor text
2025-11-23 15:22:27 -06:00
Hitlinemoss 800d201e69 Added "highly illegal" contraband to guidebook (#38176)
* Added extreme contraband to guidebook

* Extreme -> Highly Illegal

* Whoops, one-letter typo

* Fixed a capital letter while I'm here
2025-11-23 15:22:27 -06:00
MarkerWicker 47bf69c166 predict StackSystem GetVerbsEvent (#39741) 2025-11-23 15:22:27 -06:00
slarticodefast ca935f2fc2 cleanup LockOnTriggerComponent (#39720)
* cleanup LockOnTriggerComponent

* comment

* indentation
2025-11-23 15:22:27 -06:00
SlamBamActionman 20a544f029 Fix medipen injectors not respecting entity identity (#39735)
* Remove StaminaResistance from places where it should not be

* I lost a nukie round because of this bug

* Who put the god damn changes on the god damn branch
2025-11-23 15:22:27 -06:00
Princess CheeseballsandPrincess Cheeseballs da0d13c71f [NEW STATUS SYSTEM] Drunkenness, Stuttering, Slurred Speech, and Bloodloss (#38678)
* The only commit that matters

* I had to stop playing with my cat to push this change

* Yaml removal

* Proper drunk status effect and remove shitcode

* Review changes

* whoops

* Whoops x2

* Update master fix merge conflicts

* Fix merge conflicts

* Dunk Component kill

* MORE RELAYS

* Holy fucking breaking changes

* Ough

* 46 file diff

* Fix bad commits

* Erm what the test fail?

* Fix those last two

* Merge conflicts

* Me when I fix the merge conflicts

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:27 -06:00
slarticodefast 7686cb6d17 Fix rebinding keys crashing the game (#39732)
fix control settings
2025-11-23 15:22:27 -06:00
Zokkie 6fb532f39b Minor fix to give Lone Operatives the correct roletype (#36521)
* Gives loneop the proper mindrole

* Moved the entity to a more logical position. It was above the parent entity in the .yml file. It is now below it.

* Added requested changes
2025-11-23 15:22:27 -06:00
beck-thompson 916272769a Rebalance infiltrator (Nukie ship) (#39091) 2025-11-23 15:22:27 -06:00
SlamBamActionmanandPJB3005 74aa70ef69 Hotfix: Camera offset for "Separated Chat" HUD fix & targetting fix (#35087)
* Initial commit

* Fix everything

* Comment and remove unused dependencies

* Update comments for consistency

---------

Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
2025-11-23 15:22:27 -06:00
SlamBamActionman 1cd340ffaa Remove StaminaResistance from cardboard armor (#39727)
Remove StaminaResistance from places where it should not be
2025-11-23 15:22:27 -06:00
ScarKy0 4b0ba972d4 Jumpability collisions (#39710) 2025-11-23 15:22:27 -06:00
beck-thompson 61876947a4 Rebalance nukie planet (#39090) 2025-11-23 15:22:26 -06:00
beck-thompson 7bbc36b5c3 Add new nukeops spawners! (#39088) 2025-11-23 15:22:26 -06:00
psykana 31ae2a3f26 Fix ninja spawning with jetpack internals (#35067)
Remove redundant StartingGearEquippedEvent
2025-11-23 15:22:26 -06:00
August Sunandaugust-sun 021ec2c23d Allows disabler, practice disabler, disabler SMG, and practice laser rifle to be used by pacifists (#37164)
Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2025-11-23 15:22:26 -06:00
slarticodefast 149780c5c4 Hand pickup and drop triggers (#39663) 2025-11-23 15:22:26 -06:00
Tayrtahn fb1c19d48f Fix error when deleting a toggled ToggleableClothingComponent (#39191) 2025-11-23 15:22:26 -06:00
BadaBoomie eb61730bef Teaches tacos how to spell (#39717) 2025-11-23 15:22:26 -06:00
John 0319ce19f9 Atmos Firesuit Vox sprites (#39705) 2025-11-23 15:22:26 -06:00
VelcroboyandVelcroboy b8da8dc295 Allow hamster cages to sit on tables (#37953)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-23 15:22:26 -06:00
Hannah Giovanna DawsonandPJB3005 1d9b326fcf Update OpenTK to latest (#39227)
Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
2025-11-23 15:22:26 -06:00
ruddygreatandruddygreat 0b7505084f Make diagonal grilles transparent (#39580)
* tiny fix

* also fix the window bug

---------

Co-authored-by: ruddygreat <ruddygreat1@gmail.com>
2025-11-23 15:22:26 -06:00
Tayrtahnandpa.pecherskij 2248cb7f67 Cleanup warnings in ChatSystem (#36773)
* Cleanup warnings in ChatSystem

* fix after merge

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-11-23 15:22:26 -06:00
youtissoum 2c8987bd30 Increase the bananium horn use delay (#39674)
Increase bananium horn use delay to 3 seconds
2025-11-23 15:22:26 -06:00
ViolentMonkandslarticodefast f17696b682 Trigger for OnInteractUsing (#39692)
* Add trigger for InteractOnUsing

* Add blacklist and targetUsed fields

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnInteractUsingComponent.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:26 -06:00
EnrichedCaramel 5442d79f7c Expand soap making, but better (#39303)
* Add lye reagent and its recipes

* Move and add soap recipes

* Add temperature to soap recipes

* Silly comments

* Remove NaHO based lye recipe due to sigynate recipe conflict.

* Typo

* Typo, again

* Change lye color and description
2025-11-23 15:22:26 -06:00
Zeneganto 45d3254d02 Swap ExudeGasses and ConsumeGasses (#39688)
Uh, um
2025-11-23 15:22:26 -06:00
Artxmiseryandslarticodefast dc91d59b8a Equip and unequip triggers (#39675)
* added equip and unequip triggers for equipment and equipee

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnDidEquipComponent.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:26 -06:00
slarticodefast f16c9f8309 Fix industrial reagent grinder bug, second attempt (#39690)
* fix recycler 3

* Update Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml
2025-11-23 15:22:26 -06:00
ScarKy0 dc9f763583 Predict MessyDrinker (#39660)
init
2025-11-23 15:22:26 -06:00
CoolioDudio 43e899f97d Added baby and cube hair (awesome) (#39680)
* Added baby and cube hair (awesome)

* added yml and ftl (oops)

* Update cube.png

Made cube smaller
2025-11-23 15:22:25 -06:00
beck-thompsonandpa.pecherskij af755968a9 Added button and manager for in game bug reports (Part 1) (#35350)
* Added the button and manager

* Minor cleanup

* Reigstered to the wrong thing!

* Unload UI

* Address the review

* First commit :)

* Some cleanup

* Added some comments and now the placehoder text goes away once you start typing

* Some cleanup and better test command

* Basic rate limiter class (Not finished)

* Cleanup

* Removed forgotten comment xD

* Whitespace removal

* Minor cleanup, cvar hours -> minutes

* More minor tweaks

* Don't cache timer and add examples to fields

* Added CCvar for time between bug reports

* Minor crash when restarting rounds fixed

* It compiled on my computer!

* Fix comment indents

* Remove unecessary async, removed magic strings, simplfied sawmill to not use post inject

* Make struct private

* Simplfiy TryGetLongHeader

* Changed list to enumerable

* URI cleanup

* Got rid of the queue, used a much better way!

* Made the comments a little better and fix some issues with them

* Added header consts

* Maximum reports per round is now an error message

* Time between reports is now in seconds

* Change ordering

* Change hotkey to O

* only update window when its open

* Split up validation

* address review

* Address a few issues

* inheritance fix

* API now doesn't keep track of requests, just uses the rate limited response from github

* Rough idea of how channels would work

* refactor: reorganized code, placed rate limiter into http-client-handler AND manager (usually only manager-one should work)

* cleanup

* Add user agent so api doesn't get mad

* Better error logs

* Cleanup

* It now throws!

* refactor: renaming, moved some methods, xml-doc cleanups

* refactor: BugReportWindow formatted to convention, enforced 1 updates only 1 per sec

* Add very basic licence info

* Fixed the issues!

* Set ccvar default to false

* make the button better

* fix test fail silly me

* Adress the review!

* refactor: cleanup of entry point code, binding server-side code with client-facing manager

* Resolve the other issues and cleanup and stuff smile :)

* not entity

* fixes

* Cleanup

* Cleanup

* forgor region

* fixes

* Split up function and more stuff

* Better unsubs yaygit add -A

* I pray...

* Revert "I pray..."

This reverts commit 9629fb4f1289c9009a03e4e4facd9ae975e6303e.

* I think I have to add it in the pr

* Revert "I think I have to add it in the pr"

This reverts commit e185b42f570fe5f0f51e0e44761d7938e22e67f7.

* Tweaks

* Minor tweak to permissions

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-11-23 15:22:25 -06:00
FlipBrooke ecc9c39106 Banana peel headgear fixes (#39457)
* Add wearable helmet sprites for banana and mimana peels

Made it so banana peels and their variants can be worn as head gear. The sprites were done by myself, so feel free to change or update them! Includes hamster compatibility.

* fixed a minor state bug

* Review fixes

- Removed blank space
- Added "FlipBrooke" to all modified meta.jsons, with the added note of which sprites I got the colors from/referenced.

* I forgot a comma

adds a comma and some periods

* Fixes
2025-11-23 15:22:25 -06:00
DrSmugleaf f7543c49dd Fix unbuckle admin logs only showing the ids and not names of the entities involved (#39655) 2025-11-23 15:22:25 -06:00
Blaine Pavlock de6b59cfab Tabs in the Credits window only populate once (#39667)
* Tabs in the Credits window only populate once

* Changed functions to RemoveAllChildren()
2025-11-23 15:22:25 -06:00
62e1fe2cba Multiantag Gamemode (#37783)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: Southbridge <7013162+southbridge-fur@users.noreply.github.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
2025-11-23 15:22:25 -06:00
ScarKy0 d181f0aabc Fix instances of predicted randomness (#39661)
init
2025-11-23 15:22:25 -06:00
Vanessa a8bfd22a68 Hopefully fixed deepfried deepfrier code. 2025-11-23 15:22:25 -06:00
slarticodefast 38f8e6e1b1 Throwing triggers (#39650)
throw triggers
2025-11-23 15:22:25 -06:00
Winkarst-cpu 6cf8f805ca Add integration test for MobPriceComponent (#39524)
Test
2025-11-23 15:22:25 -06:00
ScholarNZL 07f1bce3c0 Animal organs now prefixed with 'animal' (#39228)
* Resolves #38980. Animal organs prefixed with 'animal'

* Add "animal" prefix to arachnid organ types where base-type applies.

* Removed child-level names per Maintainer guidance.

* Helps if I leave the parent name details intact...

* Hidden bonus mouse organ!
2025-11-23 15:22:25 -06:00
Vanessa b380664082 Cleaned up old borg module comments 2025-11-23 15:22:25 -06:00
deathride58 6b62d6906e In Memoriam - Memorializing those who've passed within the SS13+SS14 community (#39621)
In Memoriam - adds a section to the credits memorializing those who've passed
2025-11-23 15:22:25 -06:00
Studio Fae-Wildsandslarticodefast 328db990cf Add trigger-refactor components and systems: Batch 1 (#39391)
* Adds the following batch of trigger refactor components and their associated systems:

TriggerOnLand: LandEvent
TriggerOnExamined: ExaminedEvent
TriggerOnUnbuckle: UnbuckledEvent
TriggerOnBuckle: BuckledEvent
TriggerOnStrap: StrappedEvent
TriggerOnUnstrapped: UnstrappedEvent

* Removes unnecessary lines from comment

* Fix comment formatting, corrects grammar and increases comment clarity.

* adds last forgotten edit to comments

* Update Content.Shared/Trigger/Systems/TriggerOnStrappedOrBuckledSystem.cs

Removes unnecessary comments

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

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnBuckledComponent.cs

Increases comment clarity

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

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnExaminedComponent.cs

Increases comment clarity

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

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnLandComponent.cs

Increases comment clarity

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

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnStrappedComponent.cs

Increases comment clarity

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

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnUnbuckledComponent.cs

Increases comment clarity

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

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnUnstrappedComponent.cs

Increases comment clarity

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

* refactored TriggerOnStrappedOrBuckledSystem.cs
removed TriggerOnExaminedSystem.cs and moved it into TriggerSystem.Interaction.cs

Changes currently untested, not sure how to make it so modders can change what method they want sending out the appropriate trigger key but want to save progress working on it and get feedback from maintainers

* Removed component which already exists as part of TriggerSystem.Interaction.cs

* Restores accidentally removed component

* Apply suggestions from code review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:25 -06:00
Artxmiseryandslarticodefast 0a23f3cad2 Add container-related triggers (#39647)
* added triggers for when an entity is inserted or removed from a container, for both the entity and the container

* removed unnecessary comments

* consolidated into one shared system for all four triggers

* consolidated into one shared system for all four triggers

* named it right this time

* made container owner user of got triggers and added guard statements

* container id

* Update Content.Shared/Trigger/Components/Triggers/TriggerOnRemovedFromContainerComponent.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:25 -06:00
ThatGuyUSA 808f4b0bdf Meat spike conjugation error (#39651)
fixed it!
2025-11-23 15:22:25 -06:00
slarticodefast 163b771ac6 RemoveComponentsOnTrigger, ToggleComponentsOnTrigger (#39639) 2025-11-23 15:22:25 -06:00
Nox 1c40954962 Weapon Resizing (#36473) 2025-11-23 15:22:25 -06:00
Nox ce1411e765 Compact Security Jetpacks (#39569)
Made security jetpacks functionally identical to mini jetpacks.

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
2025-11-23 15:22:25 -06:00
slarticodefast 16fc6d558e fix lightbulb color (#39623) 2025-11-23 15:22:24 -06:00
Myra 2248a65a1f Revert "Fix: Break do_after if target/tool becomes inaccessible" (#39617) 2025-11-23 15:22:24 -06:00
Hannah Giovanna Dawsonandslarticodefast bbfe148566 StaminaDamageOnTriggerComponent (#39607)
* InflictStaminaOnTriggerSystem

Surprised this wasn't done alongside the damage one.

* Correct docstring

* Moar docstring changes!!!

* Resolve PR comment

* a

* Update Content.Shared/Trigger/Systems/StaminaDamageOnTriggerSystem.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:24 -06:00
Winkarst-cpu e997ca550e Disable the lock/unlock verb if we can't do that (#39605)
* Fix

* Update
2025-11-23 15:22:24 -06:00
Vanessa 0335e51b88 A few more Role Component fixes 2025-11-23 15:22:24 -06:00
Vanessa c97aac65eb Moved SkiaRoleComponent to the correct namespace 2025-11-23 15:22:24 -06:00
Vanessa 01daafe3d5 Moved DeltaV custom mind roles to component directory, following upstream's format 2025-11-23 15:22:24 -06:00
slarticodefast 6a699b7bc5 Move mind role components to shared (#39606) 2025-11-23 15:22:24 -06:00
Winkarst-cpu 7f61ce74c5 Fix: Break do_after if target/tool becomes inaccessible (#35079) 2025-11-23 15:22:24 -06:00
Winkarst-cpu b097c39a2d Predict GetVerbsEvent in PowerSwitchableSystem (#39589)
* Prediction

* Update
2025-11-23 15:22:24 -06:00
Vanessa f3c0f26679 Updated to UIRequiresLock component for Syndie Recruiter briefcase 2025-11-23 15:22:24 -06:00
Vanessa f4aeb86f7e Updated PoweredLight references to use Content.Shared. 2025-11-23 15:22:24 -06:00
Vanessa e093354bd6 Refactored all of DeltaV's and Shitmed's borg modules. God, kill me. 2025-11-23 15:22:24 -06:00
pathetic meowmeow 481246d170 Borg hands & hand whitelisting (#38668)
* Borg hands & hand whitelisting

* yaml linted

* yaml linted (x2)

* yaml linted (x3)

* my storage tests so pass

* no need for SetCount

* ok new stuff you can get fixed too

* oops

* staque

* what if we addressed feedback

* my place so holder

* what if we addresesd feedback

* what if i did it correctly

* terminating or deleted
2025-11-23 15:22:24 -06:00
ādaandiaada 7ba94f741b Slightly shorten examine text for splashing a solution with a melee attack (#39428)
smaller text.

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:24 -06:00
ādaandiaada a73d7d5238 RandomChance trigger condition (#39543)
* branch names don't matter anyway

* commits are a window to the soul

* requested change

* also requested

* ship it

* remove key

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:24 -06:00
Perry Fraser 88c25391c7 fix: fix lights not always enabling correctly (#39585) 2025-11-23 15:22:24 -06:00
UpAndLeaves 52d444cfab Fix dock radar colours (#38942)
* Fix docking colours

* Add comments and fallback

* Better comments!
2025-11-23 15:22:24 -06:00
ScarKy0 98259b6c5f Fix antag objective assignment (again) (#39565)
init
2025-11-23 15:22:24 -06:00
8052c63437 Trigger on round end (#39545)
* works if it works

* small rewording

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:24 -06:00
ādaandiaada c73cecbea4 ExtinguishOnTrigger and TriggerOnInteractHand (#39537)
* simplely one commit

* simplelly two commit

* requested changes

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
ScarKy0andslarticodefast 8f2ee96678 Base changeling objective(s) (#39562)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
Perry Fraser 9a41e9cf45 feat: make ReagentId hash by value (#39494) 2025-11-23 15:22:23 -06:00
Princess CheeseballsandPrincess Cheeseballs 4d3b2512a9 Fix ReagentQuantity Equality check (#39574)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
metalgearslothandslarticodefast ed3c788a58 Predict PoweredLights (#36541)
* Move PoweredLight to shared

* Predict the rest of the owl

* reacher

* compinit & anim

* Fix names

* Revert this?

* Fix these

* chicken drummies

* deita

* Fix

* review

* fix

* fixes

* fix PVS weirdness

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
Princess CheeseballsandPrincess Cheeseballs 5c869a2ae3 [HOTFIX] Stop players from clipping through Windoors (#39564)
* Don't have standing state edit soft fixtures?

* Bugfix

* Cherry pick acquired

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
Samuka-C 9028e18039 Better robotics console (#38023) 2025-11-23 15:22:23 -06:00
kosticiaandslarticodefast 309aef333a Predict suitsensor system (#39325)
* adwadsdwasadwas

* dev

* fix

* review

* some more cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
Perry Fraser 8115a83d82 fix: reform dionas via SpawnNextToOrDrop (#39505) 2025-11-23 15:22:23 -06:00
Red 83dba0fe32 Actions examine (#39558) 2025-11-23 15:22:23 -06:00
Jessica MandJessica M 49339366c5 Adds rare Hamlet variant: Fragile Hamlet (#39531)
* slippery gib hamlet

* add suffix for easier admeme

* address review

* increase odds

* parent MobHamsterHamlet, predicted emitsound

---------

Co-authored-by: Jessica M <jessica@maybe.sh>
2025-11-23 15:22:23 -06:00
b3f1d1e47d Fire stacks trigger (#39530)
* Simple as

* whoops

* not gonna work

* chopped

* missed something

* Better name

* formatting

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
Princess CheeseballsandPrincess Cheeseballs 9854d4c564 Status Effect Alerts and Time Bugfixes (#39529)
* Bugefix

* Clean up

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:23 -06:00
beck-thompson 6ff6cf47be Add voice locks to various hidden syndicate items (#39310) 2025-11-23 15:22:23 -06:00
Vanessa eb116f234d Knockdown fix in CosmicCultRuleSystem after crawling bugfix 2025-11-23 15:22:23 -06:00
bcc9623129 Crawling Fixes 1: Dragons and Borgs can't do the worm. (#39084)
* Init Commit

* Remove unused code, fix stun visuals bug

* Update Content.Shared/Stunnable/SharedStunSystem.cs

* Some initial changes

* first batch of changes

* Commit

* One line cleanup

* KnockdownStatusEffect ain't worth it.

* Fix 2 bugs

* Fixes

* Remove that actually,

* Commit

* Better solution

* Alright final commit I think

* Add better remarks

* How the fuck did this not get pushed???

* Wait no why was my ryder trying to push that??? I didn't make that change! DON'T DO THAT!!!

* Review

* Don't log that

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
2025-11-23 15:22:22 -06:00
Nemanja 8eafb1828d Moth displacement map fixes (#39174) 2025-11-23 15:22:22 -06:00
Nemanja d3da9ee7ec Network StationMember properly (#39509) 2025-11-23 15:22:22 -06:00
Princess CheeseballsandPrincess Cheeseballs 2956229461 Fix: Water Bottles Verb Priority and Prediction (#39482)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:22 -06:00
deltanedas caab6744c8 fix mind role filter (#39499) 2025-11-23 15:22:22 -06:00
K-Dynamic ff7d1fb22e Starting glasses for Captain and HoP (#35531) 2025-11-23 15:22:22 -06:00
Princess Cheeseballs 03ffd9c959 Fix Whoopie Cushions from lagging the game. (#39194) 2025-11-23 15:22:22 -06:00
Tayrtahn f4b216db8d Add test of StaminaComponent crit vs animation thresholds (#39249)
Add test of StaminaComponent crit vs animation thresholds
2025-11-23 15:22:22 -06:00
Princess Cheeseballs a8fed06a98 Flesh Stun Fix (#39324) 2025-11-23 15:22:22 -06:00
Princess CheeseballsandPrincess Cheeseballs eb0f776ed1 Crawling Bugfix: Don't drop items when falling. (#39168)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:22 -06:00
Vanessa 49db8b9939 We're not fucked anymore :) 2025-11-23 15:22:21 -06:00
Vanessa 96bebbf41e DeltaV Stun, Paralyze, and Slowdown updates 2025-11-23 15:22:21 -06:00
60cee5b245 Stunnable New Status and Cleanup (#38618)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-11-23 15:22:21 -06:00
Princess CheeseballsandPrincess Cheeseballs ef6963e76d Crawling Fixes Part 5: Holy Fuck (#39109)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:21 -06:00
Princess CheeseballsandPrincess Cheeseballs 0ae49faa22 Crawling Fix 3: OOPS!!! (#39089)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:21 -06:00
Princess CheeseballsandPrincess Cheeseballs 1d0af70980 Crawling Fixes 2: Salvage Nerf (NPCs can shoot downed targets) (#39085)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:21 -06:00
Vanessa c77c0b5f21 Tore out the old SharedLayingDownSystem and replaced all references with Wizden's crawling system 2025-11-23 15:22:21 -06:00
e442b8d9f3 Crawling Part 1: The Knockdownening (#36881)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-11-23 15:22:21 -06:00
chromiumboy 1cab2803af Sentry turrets - Part 8: AI notifications (#35277) 2025-11-23 15:22:21 -06:00
Princess CheeseballsandPrincess Cheeseballs 8d782f0c28 Cleanup Base food and drink a little (#39485)
Edible base prototype convention compliance

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:21 -06:00
M87S 07e190dfe5 Remove NamesGolem (#39478)
* deleted golem.ftl which contained golem names

* deleted golem.yml that went along with golem.ftl
2025-11-23 15:22:20 -06:00
Vanessa e4ccd1e7e9 Fixed DeltaV objectives with PickRandomHead. 2025-11-23 15:22:20 -06:00
Vanessa 9d2a1f0000 Fixed DeltaV StationSystem methods after upstream moved them to shared. 2025-11-23 15:22:20 -06:00
8555a14f87 make objectives use yml defined mind filters (#36030)
* add MindHasRole whitelist overload

* add mind filters framework

* add different mind filters and pools

* update traitor stuff to use mind filters

* line

* don't duplicate kill objectives

* g

* gs

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
2025-11-23 15:22:20 -06:00
Nemanja 6a02c97cff Move some Station methods into shared (#38976) 2025-11-23 15:22:20 -06:00
Stefano Pigozziandkait efda021f16 Fix title2.ogg attribution (#39435)
Co-authored-by: kait <kait@azumanga.gay>
2025-11-23 15:22:20 -06:00
slarticodefast f1222f8408 give paused maps from polymorph and cryostorage a name (#39453) 2025-11-23 15:22:20 -06:00
slarticodefast c14de448b0 place stored changeling identities next to each other (#39452) 2025-11-23 15:22:20 -06:00
ScarKy0 9f93dd15ee Disable changeling fixture cloning (#39467)
init
2025-11-23 15:22:20 -06:00
ScarKy0 937cf42901 Add changeling briefing sound (#39465)
* init

* guh
2025-11-23 15:22:20 -06:00
lolman360 c6053081d6 fixes items with complex shapes failing to insert sometimes (#38896)
* fixes item insertion bug

fixes bug where items with complex shapes would fail to insert if the item's StoredRotation wasn't a right angle

* independence from StoredRotation
2025-11-23 15:22:20 -06:00
ScarKy0 7456cac0ad Fix changeling typing indicator (#39454)
init
2025-11-23 15:22:19 -06:00
6bfa31a3bd Fix Ingestion Localization Pop-ups (#39437)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-11-23 15:22:19 -06:00
Kittygyat 0fce727d62 Resized baseball bats to be more realistic (#38392)
* Resized baseball bats to be more realistic

* Added new vertical icon for the baseball bat & incomplete variant, sprites by TiniestShark

* Added requested changes

* Added suggested changes for the incomplete sprite
2025-11-23 15:22:19 -06:00
Thinbug 947101403e Bloonion mutation (#33375) 2025-11-23 15:22:19 -06:00
Princess CheeseballsandPrincess Cheeseballs 40057be6a7 Ingestion Bugfixes (#39436)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:19 -06:00
Vanessa a378dceb96 Replaced FoodDonutJellySlugcat with FoodDonutJellyScurret in mail yml 2025-11-23 15:22:19 -06:00
Vanessa 6f4affb782 Xenoborg moduleId fix 2025-11-23 15:22:19 -06:00
Vanessa 2dee5d5d56 Removed duplicate cane entry from loadouts 2025-11-23 15:22:19 -06:00
Vanessa e90d221d8a Added required moduleId to Adv Clowning Borg Module 2025-11-23 15:22:19 -06:00
Vanessa 7f89e7156c Updated Deepfryer code in SliceableFoodSystem 2025-11-23 15:22:19 -06:00
Vanessa 57ca1bb31d Updated SharedMouthSystem to use new food events 2025-11-23 15:22:19 -06:00
Vanessa 294c4ed5da Updated SharedFelinidSystem to use FullyEatenEvent 2025-11-23 15:22:19 -06:00
K-Dynamic b16c465f2a Adds infinite debug power APC, substation, SMES (#39317)
* make debug power infinite

* demarcate infinite and empty debug power

* fix duplicate ID

* change infinite suffix to autorecharge
2025-11-23 15:22:19 -06:00
slarticodefast ed63c64cb2 convert dwarfs to use ScaleVisualsComponent (#39422) 2025-11-23 15:22:19 -06:00
slarticodefast bd0ca3c4cc add scale:multiplyvector toolshed command (#39424) 2025-11-23 15:22:18 -06:00
slarticodefastandArtisticRoomba 513d7ef581 Turn some implants into triggers (#39364)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-11-23 15:22:18 -06:00
Perry Fraser a4f66f06f7 docs: update comment on config saving in tests (#39438) 2025-11-23 15:22:18 -06:00
abd3e89cce Fix showvalue Ui for melee weapons (#38703)
Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-11-23 15:22:18 -06:00
slarticodefast c80d74cc66 Fix inventory flickering and missing InventoryTemplateUpdated event (#39379)
* fix flickering

* move InitClothing

* fix this
2025-11-23 15:22:18 -06:00
46f1c81cd0 Changeling devour and transform (#34002)
* Initial:

Create Devour componentry, preliminary identity storage and the systems
for Devouring

* I have genuinely no idea what i'm doing

- added the radial menu, it has nothing in it.

- trying to get it to populate. the event under the event is broken,
i don't know why, but apparently it's not typed right

- Added a placeholder transform

- oh also fixed up some devour stuff and moved some things around.

* Holey moley, Transform, better devour, oh my!

- Move DnaComponent into Shared because we need it for the DNA cloning

- Make Transform MOSTLY work on the LAST identity devoured.

- Fix some issues on devour that involved prediction, canceling and
Damage exeucting (Thanks Plykiya for pointing out AttemptFrequency!)

* Proper tail stealing and Damage modifier attempt

Add check to add a wagging component on the Changeling if the victim's
species Prototype had one.

attempt to add the Damage mitigation check

* MAJOR CLEANUP AND FIXES AUGH 3 DAYS!!!

- Nullspaced a clone of a victim

- fix audio using server virtualized Pvs (i hate this)

- fix the mispredicted doafters

- Clean up a wholelotta code

- utilize clone systems to clone appearances

- Move CloneAppearance from server to shared So we can actually access
it

* Examine stuff, more cleanup, Jumpsuit ripping

- make rotting prevent the action

- Add ripping of clothing (guh why is it also server)

- add some System stuff for pushing husked corpse inspection

- clean up more badcode

* Doing things properly, UI sorta kinda works.

- Utilize Relayed events for Devour checking

- Get a UI that partially works, Says the name of identities, doesn't
show their looks

- Make use of the New Dynamic BUI assignment

- commit the sin of no client prediction cause nullspace entities aren't
networked

* Got an entity for the Frontend transform

Issue with the looks

* Stick a camera into a fake mobs forehead

- Get the UI to see the net entity in pause space by using a
ViewSubscriber to get the Pvs from the initially stored identity entity

- Remove all the other parts used to try to get this to work before hand

* Raaaaadiallllllls also fix protection coefficents

- Change FancyWindow to Radial

- Fix Issue where coeffeient checking was the wrong way round

* absolutely massive cleanup, no more camera in mobs

- cleaned up event variables that are not needed

- Removed the use of a Pause space and go back to Nullspace usage

- use a PvsOverride rather than ViewSharing

- Remove old commented out code and Lots of unused code

* Fix "Ui elements" dying  on the screen

- some minor cleanup

- don't start the entities that get cloned

* ftl, cleanup, and fixing missing transform details

- add replace functionality to TypingIndicatorSystem and
BodyEmotesSystem

- add placeholder sounds and functions to TransformBodyEmotes

- add extra Pvs handling for later use

- attributions for the funny straw sound

- Sound collections for all of the sounds

- various cleanups

* Some extra cleanup

* Fix some false assumptions about TypingIndicator

- Bubbles now transfer on spawned humans rather than used humans

- Clean up YET MORE CODE

- make it so you can't eat yourself

* Oooprs, forgot to add a Husked Corpse Loc

* Missing period in the husked corpse loc

* bad devour windup placeholder

* Husking and WIP Lungs

- Husking now will be prevented from Revival fully and will change
the appearance of players

* Add finalized Sprites for actions and final meta

- add devour on and off sprites

- add transform action sprite

- Add Armblade sprite for future use

- Credit obscenelytinyshark for the sprites <3

* Remove ling lungs, Entity<> everything

- Remove the ling lungs stuff for now... body system is overly
complicated, makes my head hurt

- Switch every method to use Entity<> from Uid, Comp format

* cleanup, admin logging, WIP Roles

* Admin verb, Roundstart, gamerule stuff

- add a Admin verb to make Changelingification easy!

- Add game rule stuff for admin verb and to tell the hapless
goober how to be a changeling... sorta

- clean up parts to make VV easy... USE THE VERB!!

* Armor Coefficent Check

- Remove bespoke changeling armor check and replace it
with a generic armor coefficient query.

* move to UnrevivableComponent instead of husked

- Move UnrevivableComponent to shared

- add Analyzable and ReasonMessage to UnrevivableComponent
to give granular control of the message and whether or not it shows up
in the analyzer

- remove the check for HuskedComponent in DefibrillatorSystem

* aaaaaaa CopyComp

- Some cleanup

- make Vocal system shared

- make VocalSystem Not make more Actions than it needs

- Use some code from ChameleonProjector so we can copy components

- partially ungod method the Transform system

* Cleanup, Moving more things to CopyComp

- TransformBodyEmotes now uses CopyComp (it's a server component so i
need to tell the server to deal with it

- TypingIndicatorComponent also now uses CopyComp

- cleaned up old, now unused "replace" methods in favor of CopyComp

- BodyEmotesSystem now has a publically accessable LoadSounds to deal
with the same problem Screaming had

* WIP

* Devour Windup noise, ForensicsSystem cleanup

* Revert VocalSystem Changes

- Reverted Moving VocalSystem to shared, copy comp acomplishes it

- added component.ScreamActionEntity = null; for copy comp

* cleanup unneeded comments

* revert an accidental line removal

* Remove duplicate SharedHumanoidAppearanceSystem

* Cleanup Typo's and import Forensics components for Dna

* Some more forensics calls

* cleanup use CopyComp for now until CopyComps

* CR cleanup

* Undo some SharedHumanoidAppearanceSystem changes

* Confound these spaces

* Some Copycomp stuff and fixing some PVS override

* use the proper TryCopyComps that are merged

* Change TransformMenu with RadialWithSector

* All sounds done, Fix lack of typing indicator issue

* Updated attributions to include used sound authors

* some ftl typos and mind_role text issue

* DNA, Screaming, appearance, grammar, wagging

- reduced all of the above using ApplyComponentChanges

- Issue still remains with bodyEmotes sticking around in the UI

* Fix UI stuff, partials, entprotoid, good practices

- bunch of partials added

- UI now has a predicted message

- EntProtoID in the admin verb

- RipClothing now uses Entity<ButcherableComponent>

- husking is now optional (off by default) for testing/till we have
hivemind/when we figure out what were doing with devour

- remove TransformGrammarSet

* More CR stuff and documentation

- Make TargetIsProtected less of a meme, with a prototype
set of DamageTypes to check

- Documenation everywhere

- Move DevourEvents into its own file

* Predicted sounds and fix the comp clone list

- Made all start and stop sounds shared

- Split out the rest of the events and UI stuff into subfiles

- Fixed some Clone comp list issues where comments had -'s causing them
to be read incorrectly

* Damage cap check, Identity Shutdown cleanup, cleanup

* Sound stuff (but actually this time)

* Missed documentation

* Missed Documentation and a EntProtoId

* Remove unused dependency

* Remove a nullcheck

* Some dummy minplayers

* CR - Husked now uses a rem/ensure

* Update Actions in the Prototype

* Fixup mindswap handover

- cleanup and handover PVS on mindswap

* Fixup Missing meta from accidental "Take-theirs"

* Add the Armblade to the roundstart-role

* Cleanup, CR (everything but the UI and renames)

* missed a spot

* missed some more whitespace

* Renames

* Primary constructor and a space in these trying times

* User interface stuff for Slime transformation

* popup prediction

* Ling devour no longer makes duplicate identities

- added a key to identities to the original victim

- Add some extra clone settings

* add guard statements to OnClones

* SentOnlyToOwner additions

* fix for sound stoppage error

* Move Organ deleter into soon to be atomized husk

* clone event inventory

* mono sounds

* lower sound volume

* Fix networked sound warning

* Clone comps thing

* review

* attributions

* Fix clobbered changes

* I'm gonna weh out

- whole bunch of CR changes

* fix some very buggy git

* okay its fixed

* address most review points

* fix inventory

* we hate entityuids

* fix test and more cleanup

* move this

* fix more stuff

* fix validation and rootable

* Remove Quickswitch due to some UI quirks

* oops left out some better explanation

* remove dangling LastConsumed component fields

* fix test fail

* try this

* cleanup cloning subscriptions, add movement speed modifier

* fix slime storage

* fix cloning setting inheritance

* Add session information to transform admin logs

* slay the integration test hydra

* dwarf size

* more volume tweaks

* comments

* improve comments and unpredict deletion due to errors when shutting down the server

* fix displancement cloning

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:18 -06:00
Taoandbeck-thompson 440b987bbd Fun with cardboard! (#37363)
* learning???

* made card walls work, then made game unlaunchable (:

* Still broken, added notes that I thought of while in bed

* wall, door, table and chair are now bare min functional, yay

* learnt why not to web edit...

* added floors, walls and floors fully complete

* added swords, shields, armour, helmets and arrows

* added funny sound and cleanup small issues

* cleanup

* cleanup

* credited myself

* card to cardboard

* fixed licence issue and meta thingy

* adjusted arrow stam-damage

* made card carpets more regular

* simplified sprite, reduced stam damage

* formatting fixes

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2025-11-23 15:22:18 -06:00
Nemanja a6df796690 Miscellaneous Body Decoupling (#38958) 2025-11-23 15:22:18 -06:00
slarticodefast 77899f3688 fix repeated scale visuals removal/ensuring (#39432) 2025-11-23 15:22:18 -06:00
Princess CheeseballsandPrincess Cheeseballs caec3e6286 Debody Food and Drink Systems, Combine Food and Drink into One System. (#39031)
* Shelve

* 22 file diff

* What if it was just better

* Hold that thought

* Near final Commit, then YAML hell

* 95% done with cs

* Working Commit

* Final Commit (Before reviews tear it apart and kill me)

* Add a really stupid comment.

* KILL

* EXPLODE TEST FAILS WITH MY MIND

* I hate it here

* TACTICAL NUCLEAR STRIKE

* Wait what the fuck was I doing?

* Comments

* Me when I'm stupid

* Food doesn't need solutions

* API improvements with some API weirdness

* Move non-API out of API

* Better comment

* Fixes and spelling mistakes

* Final fixes

* Final fixes for real...

* Kill food and drink localization files because I hate them.

* Water droplet fix

* Utensil fixes

* Fix verb priority (It should've been 2)

* A few minor localization fixes

* merge conflict and stuff

* MERGE CONFLICT NUCLEAR WAR!!!

* Cleanup

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-11-23 15:22:18 -06:00
ScarKy0 e6840d291b MessyDrinker for dogs (#38852) 2025-11-23 15:22:18 -06:00
ādaandiaada 7ac1816b77 Move solution examine subscription from DrinkComponent to ExaminableSolutionComponent (#39362)
* initial it works

* clean it up

* yml

* datafield the LocIds

* move from the other branch

* no max vol on puddles and anoms

* closed

* Changes inspired by #39008

* small bug and more color range

* puddle changes and more examinable solutions

* lint

* small change

* requested changes

* un-delete

* tiny comment

* 1 less loc id in this world

* request and last second change

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-11-23 15:22:17 -06:00
Kyle Tyo ce981cb86c Predict base and damage examines of cartridge ammo. (#39401)
* commit

* requested changes +
2025-11-23 15:22:17 -06:00
Kyle Tyoandslarticodefast e04f554ced Predict EMP Examine (#39419)
* another one bites the dust

* Update Content.Shared/Emp/SharedEmpSystem.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:17 -06:00
slarticodefast 7e2b405b25 fix DoAfter DistanceThreshold (#39276) 2025-11-23 15:22:17 -06:00
slarticodefastandArtisticRoomba 2fefa6785d Predict PickRandom verb (#39326)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-11-23 15:22:17 -06:00
Serylis of Five 4a40907eca Update attributions for lightning audiofiles (#39395) 2025-11-23 15:22:17 -06:00
PGray 47c8bde01f Remove redundant return statement in InventoryUIController (#39381) 2025-11-23 15:22:17 -06:00
Perry Fraser f29f970c8c feat: properly perform predicted porta pottys (fix toilet prediction) (#39394) 2025-11-23 15:22:17 -06:00
slarticodefastandArtisticRoomba b1c2549f88 Predict cryopods (#39385)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-11-23 15:22:17 -06:00
Perry Fraser 918baf4a4f fix: properly respect AllowRepeatedMorphs (#39411)
* fix: properly respect AllowRepeatedMorphs

* feat: add IgnoreAllowRepeatedMorphs
2025-11-23 15:22:17 -06:00
Kyle Tyoandslarticodefast 2f6189fcf7 Predict Nav Beacon Examine (#39408)
* commit

* Update Content.Shared/Pinpointer/SharedNavMapSystem.cs

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

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:17 -06:00
dc6d108a6f Add guard to unbuckling to help it to not act upon terminating entities (#39410)
* Add guard to unbuckling to help it to not act upon terminating entities

* Refactor guard for unbuckling

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

* Revert "Refactor guard for unbuckling"

This reverts commit bf975fbd6f5cfac45324a3d5d74e592ad17ad291.

---------

Co-authored-by: Luxeator <Luxeator>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:17 -06:00
Kyle Tyo 935303f6e0 Reduced SalvageStructureComponent to atoms. (#39400)
* commit

* whoopsie daisy

* Update SpawnSalvageMissionJob.cs

* Update SpawnSalvageMissionJob.cs

* cleanup
2025-11-23 15:22:17 -06:00
Kyle Tyo 7196e70a67 Predict warp point location examines. (#39402)
commit
2025-11-23 15:22:16 -06:00
Southbridge f60809ac53 Fixed Issues with Screens and Station Maps (#39393) 2025-11-23 15:22:16 -06:00
Ser11y e2099eec3e localization support to air alarms, wire panels and more (#39307)
* Add localization to the air alarms, wire panels, network configurator list menu and loadout window

* delete unused

* redo gas localization, delete unused

* removed the extra key

* Moved and renamed air-alarm-ui-thresholds-gas-name

* Moved localization to the XAML

* Use existing strings for gas names

* it just works

* Rename _atmosphereSystem in ScrubberControl.xaml.cs

_atmosphereSystem -> atmosphereSystem

* Rename _atmosphereSystem in SensorInfo.xaml.cs

_atmosphereSystem -> atmosphereSystem
2025-11-23 15:22:16 -06:00
Marlyn 4459a2ddee Removes ItemToggle from Cryo Pods to prevent a latent event ordering bug (#39197)
Removes ItemToggle component from the cryo pod as it was useless and risked a latent verb order bug
2025-11-23 15:22:16 -06:00
qwerltazandPerry Fraser 583a3d5f98 add: air alarm scrubber select all gases button (#39296)
* add select all gases button

* now make it work

* localize

* refactor

* remove redundant Orientation

Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>

* remove useless HorizontalExpand

Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>

* add nice newline

Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>

* deduplicate Enum.GetValues<Gas> usage

---------

Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>
2025-11-23 15:22:16 -06:00
Perry Fraser 71f8efa37c fix: hide timer trigger's cycle time verb if DelayOptions is empty (#39388)
fix: hide cycle time verb if DelayOptions is empty
2025-11-23 15:22:16 -06:00
5789dfb53e Xenoborgs part 4 (#36935)
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: Southbridge <7013162+southbridge-fur@users.noreply.github.com>
Co-authored-by: WarPigeon <DaedalusTheGamer@gmail.com>
Co-authored-by: Kowlin <git@wyvern.blue>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-11-23 15:22:16 -06:00
slarticodefast 64a8bc5041 Fix vox inhand displacements (#38507)
fix
2025-11-23 15:22:16 -06:00
Mora 9d9f377f7b Add Offset Canes + Trinket Canes Group (#39272)
* Added offset cane

* Added offset cane colors

* Added canes to the trinkets menu

* added color to names instead of suffix

* removes some stripes from the mime cane icon

* update file organization

* standard -> standard.rsi, stop making commits at nearly 3 in the morning.

* updated comment to be more explicit in what doesnt work

* Cane refactor :godo:

* git makes me very upset sometimes (fixed cane yaml)

* wooden->wood

* apparently this didnt push

* Standardize comments

* Removed comment

* Removed comment

* Adds red accents to mime cane

* Indent fixes
2025-11-23 15:22:16 -06:00
Tayrtahn 2a2815e354 Move HeadstandComponent to Shared (#39377)
Move HeadstandComponent to Shared
2025-11-23 15:22:16 -06:00
ArtisticRoomba 5f0b3a9673 Revert "Fix bug with pipe color" (#39135) 2025-11-23 15:22:15 -06:00
alexalexmaxandseanpimble c18b495f55 Updated syndicate throwing knives description (#39374)
Co-authored-by: seanpimble <149889301+seanpimble@users.noreply.github.com>
2025-11-23 15:22:15 -06:00
ThatGuyUSA 98c5222ea2 Advanced Clowning Module (#35797)
* pAIs can now accept keys, but can't talk in said channels

* added dummy module

* added adv clown module alongside projector

* holopeel & projector sprite added, it's destroyable too

* added experimental pie cannon

* exp pie thrower throws pies, added tool icon, added bananium horn

* removed the weird pAI changes, my bad!

* okay NOW the pAI stuff is all gone

* added icon, recipe, renamed tech for unlocking

* removed bananium horn

* Added in-hand sprites, credited to TiniestShark. Changed holopeel projector description to let the user know it recharges over time.
2025-11-23 15:22:15 -06:00
Vanessa dd751c22d3 Trigger Fixes for Mothroach Grenade and re-added explosive to supermatter grenade. 2025-11-23 15:22:15 -06:00
pre-commit-ci[bot] 1c834104e1 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-11-23 15:22:15 -06:00
Vanessa 0920380cc5 Few more DV-specific trigger fixes 2025-11-23 15:22:15 -06:00
Vanessa 7acebd855a Goobstation Bluespace Lifeline migration to the new Trigger system 2025-11-23 15:22:15 -06:00
slarticodefast 2d14cd4cc0 Trigger Refactor (#39034) 2025-11-23 15:22:15 -06:00
qwerltaz c85c0fdca2 Make wallmount screen, telescreen, and signal timer destructible (#39340)
* make wallmount screen destructible

* louder

* fix indent

* fix indent
2025-11-23 15:22:15 -06:00
Zeneganto 6359249608 Localize Refund Button (#39346)
* Localize Refund Button

* Requested changes
2025-11-23 15:22:15 -06:00
Tiniest Shark 86459666d8 Hardsuit helmet text fix + CBurn Vox Fix (#39345)
* text fix and vox helm fix

* oop one line
2025-11-23 15:22:15 -06:00
DrSmugleafandslarticodefast b878cabc23 Fix rotate verbs not being predicted (#38165)
* Fix rotate verbs not being predicted

* fixes

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:14 -06:00
Token 7642a65ff7 parrotMemory is onGetVerbs now in shared (#39341)
* parrotMemory is onGetVerbs now in shared

* code review

* code review popup on client rename parrotMemoryComponent

* code rev create client system

* forgot usings

* is server now
2025-11-23 15:22:14 -06:00
Hannah Giovanna Dawson 8fa3b9af4c Berry Delight (#38881)
* Berry delight

* Uncook the YAML

* Move stuff in meal_recipes

* BERRY DELIGHT IS INEVITABLE
2025-11-23 15:22:14 -06:00
Hannah Giovanna Dawson 95839dd942 Don't purge note buffer when starting/switching MIDI songs (#39335)
Stop stuck notes on remote when changing MIDI song
2025-11-23 15:22:14 -06:00
slarticodefastandPieter-Jan Briers 312e28055f Predict anomaly synchronizer (#39321)
* predict anomaly synchronizer

* pvs

* lambda

* Update Resources/Locale/en-US/anomaly/anomaly.ftl

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2025-11-23 15:22:14 -06:00
Pieter-Jan Briers 23b9e50d84 Make dirt non-compressible (#39220)
This sets the new rsic: false flag in dirt.rsi. One of the interior PNGs is directly accessed by a tile definition, which would otherwise cause a game startup failure with the new packaging improvements: https://github.com/space-wizards/RobustToolbox/commit/c4dff678a9511190da2e6217992852d5e1df7985
2025-11-23 15:22:14 -06:00
DrSmugleaf f59810ab28 Fix ActionsSystem.IsCooldownActive always returning false if curTime is null (#39329) 2025-11-23 15:22:14 -06:00
Pieter-Jan Briersandslarticodefast a97f3dbb1f Fix horizontal space men in replays (#39338)
* Fix horizontal space men in replays

Visualizer should not bail if data unavailable.

* Update Content.Client/Rotation/RotationVisualizerSystem.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:14 -06:00
Pieter-Jan Briers aeea786127 Fix StoreTests EventBus usage (#38489)
Fix split off from #37349 to avoid needing to sync the content/engine PRs.
2025-11-23 15:22:14 -06:00
Krosus777 dce074ec24 HumanoidCharacterProfileFix (#39333) 2025-11-23 15:22:14 -06:00
Kyle Tyo 2b995b6be4 Predict ExamineEvent for CryoPodSystem. (#39322)
commit
2025-11-23 15:22:14 -06:00
Perry Fraser 7210699f8b Fix tabletop grids rarely spawning on top of another (#39327)
* fix: fix off-by-one for tabletop map positions

Ulam spirals start at 1, not 0.

* fix: make the ulam spiral a ulam spiral
2025-11-23 15:22:14 -06:00
Kyle Tyoandslarticodefast 0f3558b424 Predict EmitterSystem ExamineEvent and GetVerbsEvent (#39318)
* ididathing.exe

* commit

* cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:14 -06:00
f4b02e33c3 Renames slugcat jelly-donuts to scurret jelly-donuts (#39308)
* renames slugcat jelly-donuts to scurret jelly-donuts

* renames slugcat jelly-donuts to scurret jelly-donuts

* renames slugcat jelly-donuts to scurret jelly-donuts

* missing end of file new line

---------

Co-authored-by: Arcane-Waffle <FR_Waffle@proton.me>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-23 15:22:13 -06:00
SlamBamActionman 9e0397d60e Fix variantize command not respecting tile rotation (#39314)
Oopsiedoodle
2025-11-23 15:22:13 -06:00
VelcroboyandVelcroboy 7a478bbcad Hotfix: The Pond Ruin (#4730)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-23 12:26:52 -06:00
github-actions[bot]andDeltaV-Bot e5aac7d373 Update Credits (#4718)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-11-23 16:28:11 +01:00
Delta-V bot 0321b978cb Automatic changelog update 2025-11-23 09:25:12 +01:00
VelcroboyandVelcroboy 3f9834bf73 Add new ruin and updates two upstream ruins (#4706)
* Add new ruin and update an upstream ruin

* Update hydro oupost too

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-23 02:24:53 -06:00
Delta-V bot 94ac603a4c Automatic changelog update 2025-11-22 19:32:57 +01:00
Charlie Morley f0f1f552d0 Oracle "offer item" context menu verb (#4704)
Adds context menu verb for offering items to Oracle
2025-11-22 12:32:37 -06:00
Delta-V bot deaa7bb0b0 Automatic changelog update 2025-11-22 19:14:38 +01:00
Coryn 70c4362074 Fix Ratking Double Spawn (#4702)
* Fix Ratking Double Spawn

* Actual Fix

* Fixing with BaseAntagMarker

* Remove _DC specific AntagSpawner instead of upstream ones
2025-11-22 12:14:19 -06:00
Delta-V bot 030b9584c5 Automatic changelog update 2025-11-22 06:35:44 +01:00
KOTOB 381401b69e Supersynth hours 200 -> 50 (#4710) 2025-11-21 23:35:25 -06:00
Delta-V bot 6a956194a1 Automatic changelog update 2025-11-22 04:59:23 +01:00
MD360 af4d8286ab MMI works in IPC's (#4699) 2025-11-21 21:59:04 -06:00
Delta-V bot 857184c898 Automatic changelog update 2025-11-22 04:50:48 +01:00
Tobias Berger 2d2eecf690 Make rat servants edible (#4687) 2025-11-21 21:50:29 -06:00
Delta-V bot 11f3130342 Automatic changelog update 2025-11-22 04:48:04 +01:00
MolpeTheSeiren 44416c0508 Add More Ifrit Epistemics Access (#4677) 2025-11-21 21:47:45 -06:00
Delta-V bot 7df36d5cf6 Automatic changelog update 2025-11-22 04:19:11 +01:00
Coryn bfc41c6f0e Allow Borgs to use emotes without sound (#4703) 2025-11-21 21:18:52 -06:00
Delta-V bot 955e9c089b Automatic changelog update 2025-11-22 03:17:52 +01:00
Coryn 54013f4e02 Tweak Distance Calculation for Shuttle/Radar Console (#4709)
* Fix Wrong Distance Bug

* Added the Locale Offset with rotation

* Add DeltaV Comments
2025-11-22 02:17:32 +00:00
Delta-V bot 158bdb9c10 Automatic changelog update 2025-11-21 14:42:20 +01:00
Cepelinas1 c0ae0bb050 Sophont Rebranding (#4661)
* first commit

* removed the "must be in manifest" and added a line to entity definition.

* proxysseia suggested things added

* Positronic Brains added and changed hardware to software

* entity fix

* added employee definition to space law

* added crew for borgs
2025-11-21 14:42:00 +01:00
Delta-V bot 898ab73b70 Automatic changelog update 2025-11-21 02:50:07 +01:00
biddygelson a10b44ef04 Academy 1.2.0 (#4665)
* * tweak: made courtroom doors justice and security access to allow for sec use. Also a convenient short cut for sec to better get to law/evac/bar.
* tweak: added reinforced wall to armory near epi brig. Was a weak point.
* tweak: changed sec maint doors to include lawyer access. Lawyers already have access to those areas of security.
* tweak: normalized chapel maints door. It shouldn't be chapel locked. Players may now traverse chapel to enter epi-sec maints.

* * added LO locker with hardsuit.

* * added more maps to accommodate broken directional signs.
* fixed lv cabling in park

* * fixed floating light in north solar maints.
* added exit/entry button in medical reception

* * fixed directional signs

* * tweak: added cell charger in sec break room.

* * tweaked most med exit buttons to be directional.
* sec interrogation door is law/sec access.
2025-11-20 19:49:47 -06:00
Tobias Berger 9754425072 Manual changelog update 2025-11-20 10:42:39 +01:00
William LemonandTobias Berger f563f2c566 Ports Devils from Goobstation (#4639)
* or your debil

* Woop

* Whoops, Missed this

* Whoops, Suicide System

* Hush... Extended tests... Hush

* AAAAAA

* No-longer jaunt whilst dead

* :)

* Update Content.Shared/_Lavaland/Chasm/PreventChasmFallingSystem.cs

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: William Lemon <William.Lemon2@gmail.com>

* Update Content.Server/_Goobstation/Possession/PossessionSystem.cs

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: William Lemon <William.Lemon2@gmail.com>

* Please tobysenpai forgive me

---------

Signed-off-by: William Lemon <William.Lemon2@gmail.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-20 10:11:07 +01:00
Delta-V bot 496cb0f7cc Automatic changelog update 2025-11-20 05:07:37 +01:00
Coryn 6beb38d1ba Autodoc Fix (#4698)
Autodoc Functions once more
2025-11-20 04:07:17 +00:00
Woljif f088295730 Rework the Vulcan, giving it a long-range niche. (#4672)
* Buff vulcan, giving it a new niche.

* Add attribution to my stinkiest gamedev cadet metafriend for her spriting.

* Remove slowdown penalty on wield
2025-11-19 20:39:04 -06:00
Delta-V bot 44788db7a3 Automatic changelog update 2025-11-20 02:58:28 +01:00
AeraAulin 2679bb238a Psionic Prosthetics (#4689)
* AAAAAAAAA

* consistency

* add to emag packs

* add blacklist system and blacklist high risk items and bags thank you javadocs

* add DeltaV comments

* make comment better fit comment standards
2025-11-20 12:58:08 +11:00
Delta-V bot 40332af3b1 Automatic changelog update 2025-11-20 02:46:54 +01:00
SirrRequiem de6a9a9a4e Terra Hotfix 3: The Fixening (#4685)
* Terra Hotfix 3: The Fixening

* AI inside turrets and panel now set to command. Nuked Arti display cases (didn't know Don't Map). AI catwalk can be broken now. Other minor changes.
2025-11-19 19:46:35 -06:00
Delta-V bot 670a9cfcfe Automatic changelog update 2025-11-20 02:24:47 +01:00
KOTOB f936de420e Portable Recharger improvements (#4681)
* erm...

* gaming

* oops
2025-11-19 19:24:28 -06:00
Velcroboy 3991bede5e Hotfix: Some chapel airlocks use wrong wires and suffix (#4694)
* Hotfix: Some chapel airlocks use wrong wires and suffix

* Add windoors
2025-11-19 17:26:01 -06:00
Delta-V bot 8622fe44b5 Automatic changelog update 2025-11-20 00:10:36 +01:00
Solaris 6a8f1032d9 Fixes Fishing in lava (#4695)
Update lava.yml
2025-11-19 17:10:17 -06:00
Delta-V bot c4d9b93540 Automatic changelog update 2025-11-19 21:27:48 +01:00
Sir Warockandpre-commit-ci[bot] 6686c6987d Remake Holographic Rollerbed (#4683)
* Remake Holographic Rollerbed

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

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

* Remove Hyphen

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: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-19 14:27:29 -06:00
Delta-V bot 80b401f068 Automatic changelog update 2025-11-19 21:04:53 +01:00
Averi 234ac9f2e1 Fix pets attacking initial infected (#41338)
Update ai_factions.yml
2025-11-19 14:04:31 -06:00
e53ffd0536 Update git hooks with upstream fixes (#4690)
* Make git hooks work in git worktrees (#40038)

Make hooks work in worktrees and cleanup hooks

(cherry picked from commit d3731395b6)

* Replace all usages of /bin/bash shebang with /usr/bin/env (#40756)

Replace all usages of /bin/bash with /usr/bin/env

/usr/bin/env is nearly guaranteed to always exist at that location, which can't be said about /bin/bash and /bin/sh.

Co-authored-by: opl <4833621+opl@users.noreply.github.com>
(cherry picked from commit b9254d9ebf)

---------

Co-authored-by: War Pigeon <54217755+minus1over12@users.noreply.github.com>
Co-authored-by: opl- <opl-@users.noreply.github.com>
Co-authored-by: opl <4833621+opl@users.noreply.github.com>
2025-11-19 07:48:01 -06:00
Delta-V bot ed50f7cb60 Automatic changelog update 2025-11-19 12:05:42 +01:00
Niomi 7f0ab295f9 Un-robust Anomalites (#4595)
* Nerfed Anomalites

Massively reduced health and resistances

* Direction requested changes

HP 40 > 60
Can only respawn once

* Code review changes
2025-11-19 12:05:22 +01:00
Delta-V bot 1d7d25b3a4 Automatic changelog update 2025-11-19 11:07:41 +01:00
Vanessa 9e6dfed7e5 Fixed colossus stamina issues (#4688)
* Fixed colossus stamina issues.

* Fixed some spacing.
2025-11-19 11:07:21 +01:00
Vape 995f30de9a Stale PR/Issue Automation (#4476)
Signed-off-by: Vape <76235372+Vapetastic-Gaming@users.noreply.github.com>
2025-11-18 22:59:32 +01:00
Tobias Berger 338203f80c Maps changelog in Discord 2025-11-18 22:50:39 +01:00
ApachitoandTobias Berger ff01033eaa Port Fishing from Goob (#4615)
* FISHING REAL

* Update fishingspots.yml

* Delete fishingspots.yml

* Create fishingspots.yml

Removed the component that was causing errors

* Update Content.Client/_Goobstation/Fishing/Overlays/FishingOverlay.cs

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/Entities/Structures/Furniture/toilet.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/Entities/Tiles/lava.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/Entities/Tiles/liquid_plasma.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/Entities/Tiles/liquid_plasma.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/Entities/Tiles/water.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/misc/makeshift_rod.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/Entities/Tiles/water.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/_Goobstation/Actions/fishing.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Update Resources/Prototypes/_Goobstation/Catalog/Fills/Crates/service.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>

* Changed the name spaces

* Update SharedFishingSystem.cs

* Revert "Update SharedFishingSystem.cs"

This reverts commit 78451cd5c2.

* Update FishingOverlay.cs

* Update FishingOverlay.cs

* Revert "Changed the name spaces"

This reverts commit 50bac6c4be.

* Revert "Changed the name spaces"

* Fixed name spaces and the sprite system

* Update makeshift_rod.yml

* Update makeshift_rod.yml

* Update Content.Client/_Goobstation/Fishing/Overlays/FishingOverlay.cs

Signed-off-by: Tobias Berger <toby@tobot.dev>

* Update Content.Client/_Goobstation/Fishing/Overlays/FishingOverlay.cs

Signed-off-by: Tobias Berger <toby@tobot.dev>

* Fixed Name Spaced

Changed the names spaces and did the ones I forgot to do initially.

* Changed name spaces again

* Fixed name spaces real

* Update SharedFishingSystem.cs

* Update SharedFishingSystem.cs

* Update SharedFishingSystem.cs

* Update FishingSystem.cs

* Update FishingSystem.cs

---------

Signed-off-by: Apachito <ivanlopezlegos2004@gmail.com>
Signed-off-by: Tobias Berger <toby@tobot.dev>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-18 22:06:59 +01:00
Sir Warock 2e4e7e1ca1 Rollerbed & Bodybag tweaks (#40880)
Rollerbed & Bodybag tweaks (#40880)

* Nerf Bodybag

* Clean up Rollerbeds

* Buff Rollerbeds
2025-11-18 15:02:02 -06:00
Eagle0600 cd084cdbcc Add Additional Testing Scripts (#4571)
* Add additional testing scripts

* Edited batch scripts for consistency
2025-11-18 13:42:52 -06:00
Delta-V bot d4b7739b1a Automatic changelog update 2025-11-18 20:14:26 +01:00
AeraAulin 49b0153c83 fix mantis time requirements (#4579)
* fix time reqs

* aaaaaaaaa
2025-11-18 13:14:07 -06:00
Delta-V bot b9c747b0cb Automatic changelog update 2025-11-18 20:01:08 +01:00
AstraandVanessa 3d7b9ee393 More Vox and Harpy hardsuits (#4609)
* Add harpy and vox variants for the Rhino hardsuit

* Add harpy variant for the Goliath hardsuit

* Fix indentation

---------

Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2025-11-18 19:00:48 +00:00
d741848ba6 Update Apoapsis and Periapsis Server Descriptions (#4591)
* Changing ConfigPresets for Apoapsis and Periapsis, adding descriptions to reflect intended culture/round structure of each server.

* Changed descriptions based on feedback; Removed details of roleplay/gameplay focus, instead pointing to other server for alternate atmosphere.

* Per Direction feedback: Reverting Apo description, changing Peri description to only highlight calmer shifts.

---------

Co-authored-by: RoboBozu <robobozu@protonmail.me>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2025-11-18 18:57:56 +00:00
Delta-V bot de489eb913 Automatic changelog update 2025-11-18 19:57:30 +01:00
pootslap 6931f5c06e Footprints remove less units from puddles (#4674)
* reagent transfer

footprints don't exist + smears only contain 0.01u

* actually remove footprints

set it properly this time

* Update FootPrintsVisualizerSystem.cs

footprints back in, 99% less good at cleaning

* woops

actually remembered to reduce reagents in the puddle
2025-11-18 12:57:10 -06:00
Delta-V bot d6f7476a9e Automatic changelog update 2025-11-18 19:52:16 +01:00
Sir Warock 8597d489cf Remove BeamDev from Random Spawn Tables (#4636) 2025-11-18 12:51:57 -06:00
Delta-V bot 7262b271d0 Automatic changelog update 2025-11-18 19:40:50 +01:00
d006c86d8e Fix anomaly shuffle particles type (#40624)
Fix anomaly shuffle particles type (#40624)

* dev it

* screw it

* Revert "screw it"

This reverts commit 5657a1d20128e630bebbaf38f4dcb4dbac28d026.

* Revert "dev it"

This reverts commit f3d7c355da17de92e43c145efbd348f8378d6146.

* slarti best

* Revert "slarti best"

This reverts commit 8de1caafb254515202aa21d2b96029a1fce24df2.

* Reapply "dev it"

This reverts commit c603940a73246f8a22a171c5559eb3f3f995e7bc.

* Reapply "screw it"

This reverts commit 468722abe7bde7e30bc3b421bc28fa90a013bd63.

* refactor: renaming +xml-doc

---------


(cherry picked from commit 9b7c87bd7e)

Co-authored-by: kosticia <kosticia46@gmail.com>
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-11-18 12:40:31 -06:00
Delta-V bot c92590c4b0 Automatic changelog update 2025-11-18 19:33:45 +01:00
snowywinters 2f51f8530d Add experimental RCD and air grenade to CE's locker (#4648) 2025-11-18 18:33:26 +00:00
Delta-V bot 1c57f971ad Automatic changelog update 2025-11-18 19:28:00 +01:00
KOTOB fe961d5d2e MASSIVELY buff Random Animation (#4641)
gamers lock in
2025-11-18 12:27:40 -06:00
Woljif 9cf5d84880 Revert upstream nerf to flashes (#4634)
* Revert upstream nerf to flashes

* Changes moved to security.yml exclusively

* Change flash delay and flashingtime from 1 to 2
2025-11-18 10:19:52 +00:00
Delta-V bot 884472891b Automatic changelog update 2025-11-18 10:38:43 +01:00
Sir Warock a29905f5e9 Standardize PartDamage (#4584)
* Standardize PartDamage

* Fix
2025-11-18 09:38:23 +00:00
Delta-V bot 40a74def58 Automatic changelog update 2025-11-18 10:31:10 +01:00
Sir WarockandTobias Berger ebe9f2bf10 Add CPR (#4649)
* Add CPR

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

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

* Prevent multiple CPRs

* Fix small Parenthesize mistake

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

* Fix Name Paths

* Mistake?

* Merge branch 'master' into Add-CPR

* Update Content.Shared/_DV/Body/Systems/CPRSystem.cs

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

* Fix Issues seen by Holy Toby

* Small Fix
2025-11-18 09:30:50 +00:00
Delta-V bot af6d9e8b9c Automatic changelog update 2025-11-17 16:48:32 +01:00
Cepelinas1 c678840b71 Make parasites a controlled item in SOP (#4537)
* first commit

* second fix
2025-11-17 16:48:12 +01:00
1f114bc419 Adds a simple atmos beret and pseudo "senior" salvager mantle to loadout selection (#4553)
* Adds a simple atmos beret and "senior" salvager mantle to loadout selections.

* woopsies, misspelled something for the beret

* [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

* silly typo... again, woopsies

---------

Co-authored-by: AirlineFood <pickeldabfrug@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-17 09:21:41 -06:00
957d0489db Fix bar and base signs (#4667)
* Fix bar and base signs (#39487)

sorry

* Buttons are now Free-placeable (again) (#39425)

Fixed buttons

---------

Co-authored-by: kosticia <kosticia46@gmail.com>
Co-authored-by: Southbridge <7013162+southbridge-fur@users.noreply.github.com>
2025-11-17 09:25:09 +01:00
Delta-V bot 35d46d3c90 Automatic changelog update 2025-11-17 08:01:59 +01:00
turtlemutt d2caabe466 Update Lighthouse Epistemics (#4676)
* Update lighthouse.yml

* Update lighthouse.yml

* Update lighthouse.yml
2025-11-17 01:01:39 -06:00
Delta-V bot 8c53c48186 Automatic changelog update 2025-11-17 04:47:00 +01:00
VelcroboyandVelcroboy e667c18703 Map Edits: Tortuga (#4669)
* Map Edits: Tortuga

* fix air sensor under door

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-17 04:46:41 +01:00
Dorragon a5136b43b2 Buff ifrit for real this time (#4670) 2025-11-16 15:17:23 +00:00
Delta-V bot 71f0c06b04 Automatic changelog update 2025-11-16 15:15:21 +01:00
KOTOB 070de4b7db Give Vox cortical stacks (#4580)
vox rp update real
2025-11-16 14:15:01 +00:00
github-actions[bot]andDeltaV-Bot 71ed79b086 Update Credits (#4668)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-11-16 12:55:10 +01:00
Delta-V bot d57e1ff251 Automatic changelog update 2025-11-16 10:28:50 +01:00
VelcroboyandVelcroboy 3b21582daa Map Edits: The Hive (#4657)
* Map Edits: The Hive

* Fixes

* invalid

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-16 10:28:30 +01:00
Delta-V bot 883e3d6226 Automatic changelog update 2025-11-15 22:40:44 +01:00
AeraAulinandpre-commit-ci[bot] 618bfc855a Mystagogue hardsuit resprite + actually use the mystagogue hardsuit (#4647)
* aaaaaaaaa

* helmets

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

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

* more accurate description and maybe fix test fail thing I dunno I hate container fail thiings

* remove containercontainer stuff and work from there because that just broke more

* pls work

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-15 15:40:25 -06:00
Delta-V bot a9065bcbf2 Automatic changelog update 2025-11-15 19:44:50 +01:00
Sir Warock 29fca6675f Stop Defibrillators from Causing Malpractice Lawsuits (#4583)
* Tiny bool change
2025-11-15 18:44:31 +00:00
Delta-V bot c98526dbf7 Automatic changelog update 2025-11-15 18:36:17 +01:00
Vanessa 2efbd19d34 Fixed feroxi and vulpkanin helmet visuals (#4663)
* Fixed feroxi and vulpkanin helmet visuals
2025-11-15 17:35:58 +00:00
Delta-V bot 445bbe0e83 Automatic changelog update 2025-11-15 00:45:32 +01:00
Sir Warock e9033fb71b Buff Zombies (#4585)
* Buff Zombies

* Fix Interaction with gloves that are weapons

* CommentOps
2025-11-15 00:45:13 +01:00
Delta-V bot ef95c0fffd Automatic changelog update 2025-11-15 00:32:25 +01:00
BarryNorfolk 150af3cc6a Ensure grappled entities cleanup grapples when they crit/die (#4546)
* Ensure grappled entities cleanup grapples when they crit/die
2025-11-14 23:32:06 +00:00
Delta-V bot 35cfe960ab Automatic changelog update 2025-11-15 00:19:12 +01:00
f5cb7c64c1 Added Jaegermister and additional Drinks from it (#4653)
* Add JAEGERMISTER!!

Co-Authored-By: eightballll <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>

* More Tweaks

Co-Authored-By: eightballll <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>

* Update Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_bottles.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

* Unfuck the meta.json

* Merge branch 'port-Jaegerminster' of https://github.com/SirWarock/DeltaV-Warock into port-Jaegerminster
2025-11-14 23:18:53 +00:00
Delta-V bot 97216b43ee Automatic changelog update 2025-11-15 00:16:27 +01:00
DisposableCrewmember42andTobias Berger 1ed2d6612f feat: Secured Shock Collar (#4654)
* feat: ShockOnUnequipComponent, add to Shock Collar

* feat: ShockOnUnequip respects AccessReader list

* refactor: remove unused imports

applied suggestion

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: DisposableCrewmember42 <disposablecrewmember42@proton.me>

* style: add missing newline

applied suggestion

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: DisposableCrewmember42 <disposablecrewmember42@proton.me>

---------

Signed-off-by: DisposableCrewmember42 <disposablecrewmember42@proton.me>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-15 00:16:07 +01:00
Delta-V bot 9231037577 Automatic changelog update 2025-11-15 00:10:15 +01:00
AeraAulinandTobias Berger 5f38f59b98 Return of the Ifrit (#4570)
* return of the ifrit

* pre-PR fixes

* fix merge conflict part 1

* and put the damage modifier back in

* changed enough of the ghostrole to feel confident moving it from nyano to _DV

* pierce vs piercing gets me every time

* changes

* add playtime and temp immunity

* fix typo

Signed-off-by: AeraAulin <133451603+AeraAuling@users.noreply.github.com>

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

Signed-off-by: Tobias Berger <toby@tobot.dev>

---------

Signed-off-by: AeraAulin <133451603+AeraAuling@users.noreply.github.com>
Signed-off-by: Tobias Berger <toby@tobot.dev>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-14 23:09:55 +00:00
Delta-V bot 9aa249d6a5 Automatic changelog update 2025-11-14 23:49:29 +01:00
Sir WarockandTobias Berger 72dfb57e39 Add the Viral Carepackage (#4593)
* Add the Viral Carepackage

* Make it cost A LOOOT

* Update Resources/Prototypes/_DV/Catalog/Fills/Crates/medical.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

* Update Resources/Locale/en-US/_DV/paper/paper-misc.ftl

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

* Header Fix

* Make Carepackage to care package

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-14 22:49:10 +00:00
Delta-V bot 997d11a096 Automatic changelog update 2025-11-14 22:20:25 +01:00
DisposableCrewmember42 6b65d3bb15 fix: restore pai shop action handling (#4651)
* fix: restore pai shop action handling
2025-11-14 21:20:06 +00:00
Delta-V bot a41c134753 Automatic changelog update 2025-11-14 20:26:26 +01:00
MolpeTheSeiren 56b0c23ce3 Fix Up Emagged Borg Law Redundancy (#4139)
* Update laws.ftl

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>

* Update SiliconLawSystem.cs

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>

* Update SiliconLawSystem.cs

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>

* Update SiliconLawSystem.cs

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>

* Update laws.ftl

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>

* Update laws.ftl

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>

---------

Signed-off-by: MolpeTheSeiren <molpetheseiren@gmail.com>
2025-11-14 20:26:06 +01:00
Delta-V bot a7ce0a4e83 Automatic changelog update 2025-11-14 19:03:41 +01:00
Colin-Tel ed6f784c14 Adds Psychologist role to Division Station (#4652)
whoops I accidentally the shrink
2025-11-14 18:03:21 +00:00
Solaris 485f048dab Soundfont De-Lobotomization Ops (#4638)
removes a unnecessary soundfont file (it keeps fucking with midis)
2025-11-14 08:27:19 +11:00
Delta-V bot c8991f11fe Automatic changelog update 2025-11-13 20:28:51 +01:00
Colin-Tel d96737a837 Division Update - 04NOV2025 (#4604)
* Update division.yml

* Update division.yml

* naturally

* duhhhhh

NOTHING CHANGES
2025-11-13 19:28:29 +00:00
Vanessaandpre-commit-ci[bot] 7608c4d248 Added hardsuit lockers for logistics officer (#4643)
* Added hardsuit lockers for logistics officer

* Removed the Rhino suit from the normal entity table, since it is its own thing now.

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

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

* Updated maps' LockerQuarterMasterFilled to LockerQuarterMasterFilledHardsuit

* Forgot submarine.

* Put parent before id

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-13 14:49:32 +00:00
Delta-V bot 599c87d380 Automatic changelog update 2025-11-13 15:36:01 +01:00
Sir Warock cd0db812eb Remove Siphon Damage (#4627)
Remove Metagaming
2025-11-13 14:35:42 +00:00
VelcroboyandVelcroboy f612dc7679 Adds map attribution file for DV maps (#4471)
* Adds map attribution file for DV maps

* S->s

* filename

* FC

* wrong person

* Typo/convert to yml

* Formatting

* Revert "Typo/convert to yml"

This reverts commit a077757340.

* Revert "Revert "Typo/convert to yml""

This reverts commit 3adff7d00d.

* Revert "Formatting"

This reverts commit 237e0e9c43.

* Formatting take 2

* remove dupe

* license field

* CC

* Remove comments

* typo

* dash

* order I guess

* Move to prototype folder

* folder?

* back to the beginning

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-13 13:22:55 +00:00
Delta-V bot 4b76091902 Automatic changelog update 2025-11-13 14:09:26 +01:00
Sir Warock 8b301a249d Fix Transmutes taking transmuted objects (#4646)
Fix Transmutes taking transmuted ojbs
2025-11-13 13:09:07 +00:00
Sir Warockandslarticodefast 63eb235e94 Fix SOME test fails (#4588)
* Increase SpawnAndDeleteAllEntitiesOnDifferentMaps test simulation time (#38901)

wait longer

* Reduce LevelOfParallelism to 2 for integration tests (#39566)

less paralelliism

* Fix Assumption of Nullable to have value (#41220)

* Fix Potential Test Fail

* Please the maintainer gods

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-13 12:21:38 +00:00
Delta-V bot 94aeb47feb Automatic changelog update 2025-11-12 16:12:42 +01:00
snowywintersandStop-Signs 1347ab4959 Window changes (#4617)
* window

* Forgot the deltav mark

* Grammar fix

---------

Co-authored-by: Stop-Signs <stopsign221@gmail.com>
2025-11-12 15:12:22 +00:00
Delta-V bot 662ec40dbb Automatic changelog update 2025-11-12 16:06:32 +01:00
Vanessa 4d4420c99d All species can emote typed emotes correctly now. (#4621)
Fixed a regression that disallowed people from doing text emotes of emotes from other species (aka with no sound)
2025-11-12 15:06:12 +00:00
biddygelson 143ddf8129 Academy 1.1.0 (#4629)
* working though tweaks from feedback.
see discord mapswork thread for details.

* * add: added Clippy and Siobhan spawns
* add: added criminal record board in tech vault
* add: added cameras outside AI-sat - not full coverage
* Still pondering what to do with cargo.

* * add: added epi brig and viro notes

* * tweak: updated notes for epi brig and viro.
* add: placed catwalk outside pa.

* * updated epi brig and viro notes > editing disabled.
  * epi brig note locations: Conference, MG, Mantis, Hos, Warden
  * viro note locations: Conference, CMO, CE, atmos, Security breakroom
* moved siobhan into MG bedroom
* slime core moved to chapel summon
* replaced high sec engi lock door for tech vault
* set varied clothing vends in dorms and laundry which are now guaranteed to spawn.
* dispo, made window to space larger
* dispo, changed exit button signal from toggle to open
* dispo, moved light so is not next to exit button
* dispo, fixed upside down lever
* Updated AI turrets to command variant in entry and hall, move AI turret control to inner core
2025-11-12 02:42:52 +01:00
Delta-V bot 63912c0722 Automatic changelog update 2025-11-12 02:23:02 +01:00
Stop-Signs 277387db65 Add contest winners lobby art (#4635)
* boop

* fucking BOM

* Fucking BOM AGAIN!!!
2025-11-12 12:22:42 +11:00
Delta-V bot 4733d04bf2 Automatic changelog update 2025-11-11 22:42:32 +01:00
snowywinters 2503865b6f ce gloves (#4616) 2025-11-11 15:42:13 -06:00
Delta-V bot 752a7ac0d0 Automatic changelog update 2025-11-11 22:36:44 +01:00
pootslapandTobias Berger 91c10c8a98 Reduce Rat King Spawns (#4630)
* Reduce Rat King Spawns

Reduced Rat King spawn rate to match skia and menace skeleton. Previously they were about as common as meteor events, now there's roughly one per round.

* Update Resources/Prototypes/_DV/GameRules/events.yml

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: pootslap <211648338+pootslap@users.noreply.github.com>

* Adds reoccurrenceDelay

Adds reoccurrenceDelay: 30 to prevent overlapping spawns

---------

Signed-off-by: pootslap <211648338+pootslap@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-11-11 21:36:25 +00:00
Delta-V bot 524e501ebb Automatic changelog update 2025-11-11 02:23:20 +01:00
Niomi cfe603b3f5 Spillable Censer (#4633)
Spillable Censer
2025-11-10 19:23:01 -06:00
github-actions[bot]andDeltaV-Bot 8aef492492 Update Credits (#4624)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-11-09 22:17:25 +01:00
Delta-V bot c703054b2c Automatic changelog update 2025-11-09 20:31:04 +01:00
Sir Warock afd5cf0bbe Fix Ammo Visuals Bug (#41362) (#4626)
Fix Ammo Count Updating
2025-11-09 19:30:44 +00:00
Delta-V bot 40e98be899 Automatic changelog update 2025-11-09 17:29:45 +01:00
Vanessa 3418b3e402 Fixed More Missing Icon Sprites (#4623)
* Fixed bluespace and normality icons showing ERROR sprite

* Fix texture sprite specifiers to RSI PNGs (#39783)

These aren't available when packaged anymore.

* Fixed a number of missing icon sprites due to rsic packaging.

* Fixed character records icon sprite.

* Fixed golem icons in case they are ever re-enabled
2025-11-09 16:29:26 +00:00
Nico 0c802d5a28 Clean up mid-merge files for atmos layering (#4619) 2025-11-07 16:52:37 +00:00
Delta-V bot 1b4ea7ad69 Automatic changelog update 2025-11-07 16:48:51 +01:00
Vanessa af8cc88f50 Fixed Kitsune needing to confirm reverting back to human form (#4612)
Fixed Kitsune needing to confirm reverting back to human form after upstream merge
2025-11-07 16:48:32 +01:00
Delta-V bot 455f20ccd6 Automatic changelog update 2025-11-07 15:50:32 +01:00
Vanessa a3a8503f68 Few RSIC Fixes (#4614)
* Fixed surgery tool icon showing error sprite due to new rsic packaging system

* fix: fix emote wheel icons (#39481)
2025-11-07 14:50:12 +00:00
Delta-V bot e3836bede0 Automatic changelog update 2025-11-07 01:03:55 +01:00
Vanessa 1bd83bada7 Fixed emotes not working after upstream merge. (#4611)
* Fixed emotes not working after upstream merge.

* Added retry attribute to a test that fails intermittently
2025-11-07 11:03:36 +11:00
Delta-V bot 42e1a6800c Automatic changelog update 2025-11-06 19:23:00 +01:00
29e55b9464 Upstream Merge (June / July) attempt 2 electric boogaloo (#4607)
* Fix the sensor monitoring console forcing a GC every 3 seconds (#38146)

* Optimize sensor monitoring window graph drawing

* Add shared static Vector2 pool for all GraphView instances

* Address requested changes

* remove lock

* Update submodule to 264.0.0 (#38629)

* Toy/Plushie Inhands and Wearables (#38514)

* Fixed dependency injection and some other issues in a few places.

* More issue fixes

* patchfor broken NetworkConfiguratorLinkMenu (#38632)

fix

* Fix solutions flickering when transferring contents (#34838)

* Use Solution clones when applying SolutionComponent states

* Revert "Use Solution clones when applying SolutionComponent states"

This reverts commit 013fd111cf92b22562e00f98a7aaa49bc4b4ed62.

* Make Solution implement ICloneable and rename Clone method.

* Copy CanReact value when cloning a Solution

* Convert to IRobustCloneable

* Fix typos in guidebook: Buisness → Business (#38636)

* Fix typo in `MinorAntagonists.xml`

Buisness → Business

* Fix typo in `YourFirstCharacter.xml`

Buisness → Business

* Various Headphones Fixes and Tweaks (#38479)

* sprites, wearables

* neck

* icon-on sprite

* Cleanup prototype instantiation in `DamageTest` (#38639)

Cleanup prototype instantiation in DamageTest

* Cleanup prototype instantiation in `ExplosionSystem` (#38642)

Cleanup prototype instantiation in ExplosionSystem

* AddBodyPartCommand localization. (#38612)

commit

* fix ItemSlotsSystem debug assert (#38655)

* Allow the Command & Super door remotes to use the access of their user. (Re-creation of PR due to changes to game balance) (#35536)

* Added directional beacons (#38284)

* Added directional beacons

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

* Fixed names

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

* Power stat and nuke codes commands get some LEC love. (#38585)

* commit

* requested changes.

* Dsay Dirty and Follow commands converted to LEC and localized. (#38666)

* commit

* whoopwhoopwhoop

* Retro laser sprite fix (#38676)

* Fixed everything except the icon

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

* fixed icon

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>

* fix water coolers (#38681)

* Monochromacy typo fix (#38686)

* fixes the typo

* Fixed cloning looking for the trait, not the component, RE https://github.com/space-wizards/space-station-14/pull/38686#issuecomment-3025093504

* Apply suggestions from code review

---------

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

* Validate `CloningSettingsPrototype`s (#38688)

* Validate CloningSettingsPrototypes

* Update Content.IntegrationTests/Tests/Cloning/CloningSettingsPrototypeTest.cs

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

* Check EventComponents too

---------

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

* Add test of objective-related console commands (#36400)

* Add test of objective add/list/remove commands

* Not sure why we're validating test prototypes, but sure

* We don't need a map

* Improvements and fixups for New Status Effect API (#38660)

* Predict healing and bloodstream (#38690)

* initial commit

* reapply 38126

* fix rootable

* someone missed an important minus sign here

* try this

* fix

* fix

* reenable crit hits

* cleanup

* fix status time dirtying

* fix

* camelCase

* Healing and bloodstream prediction fixes.

* Resolving Wizard casting recall on nuke disk making it impossible to disarm (#38661)

* Resolving Wizard Recall on Nuke disk making it impossible to disarm
- Adding a DisarmBomb case to nuke status update loop
- Changing a few methods and parameters to properly follow formatting standards
- Updating some names to follow camelCase

* Updating missed tag

* Reverting DataField change

Should prevent this preventative bugfix being a breaking change.

* Switch HSV to the default colorspace for character customization (#38434)

* Made HSV default for character editor

* Adds/fixes comments to HSV defaulting

* Added dropbox fix, potentially cursed

* Revert "Added dropbox fix, potentially cursed"

This reverts commit a709883366fbee813e839742125e70844672af29.

---------

Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>

* Fix: Don't deploy foldables when clicking on items inside containers (#38709)

* Fix

* Apply suggestions from code review

---------

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

* Pressure Relief Valve (#36708)

* initial system (this math is probably WRONG)

* General code cleanup and OnExamined support
(holy moly this code sucks)

* UICode and related events foundation
TODO:
- Actually write the XAML UI and the underlying system
- Un-shitcode the entire thing
- Actually test everything...

* Working UI code
TODO: Make predicted, as this certainly isn't predicted. Even though I said it was. It isn't.

* Remove one TODO for unshitcoding the examine code

* Add reminder
yea

* Make predicted (defenitely isn't)
(also defenitely isn't a copypaste from pressure pump code)

* It's predicted!
TODO:
- Give it snazzy predicted visuals!
- Have a different field for pressure entry, lest it gets bulldozed every UI update.

* Improve gas pressure relief valve UI
TODO: Reminder to reduce amount of dirties using deltafields

* Implement DirtyField prediction

* Entity<T> cleanup
A lot of Entity<T> conversions and lukewarm cleanup.

Also got caught copy pasting code in 4K UHD but it's not like you couldn't tell.

* More cleanup and comments

* Remove TODO comment on bulldozing window title

* """refactoring"""
- Move appearance out of shared and finally fix it. Pointless to predict appearance in this instance.
- More Entity<T> conversions because I like them.
- Move UI creation handling over entirely to the ActivatableUI system.
- Fix a hardcoded locale string (why????).

* Add visuals

* Revert debugging variable replacememt
yea

* Revert skissue

* Remove unused using directives and remove TODO

* Localize, cleanup, document

* Fix adminlogging discrepancy

* Add ability to construct, add guidebook entry

* Clear up comment

* Add guidebook tooltip to valve

* Convert GasPressureReliefValveBoundUserInterface declaration into primary constructor

* Adds more input handling and adds autofill on open

* Un-deepfry input validator shitcode
Genuinely what was I smoking

* improve visuals logic

* Refactor again
- Update math to the correct implementation
- Moved code that could be re-used in the future into a helper method under AtmosphereSystem.Gases.cs

* I'm sorry but I hate warnings

* Remove unused using directive in AtmosphereSystem.Gases.cs

* Review and cleanup

* Lukewarm UI glossup

* Maintainer for the upstream project btw

* Remove redundant state sets and messy logic

* Unduplicate valve updater code

* Redo UI (im sorry Slarti)

* run tests

* Test refactored UI messaging

* Second round of UI improvements
- God please find a way to improve this system. Feels bad.

* Update loop implementation

* Further predict UI

* Clear up SetToCurrentThreshold

* cleanup

* Update to master + pipe layers and bug fixes
want to run tests

* fixes

* Deploy rename pipebomb

* Documentation and requested changes

* Rename the method that wiggled away

* Undo rounding changes

* Fix comment

* Rename and cleanup

* Apply suggestions from code review

---------

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

* Fix TextLinkTag (#32203)

* Adjust uplink buy button to be under item icon (#38596)

* Adjusted uplink buy button to be under item icon

* Put the discount subtext under the icon

* Indent fixes, added margin

---------

Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>

* Scurrets - Audio Improvements (#38482)

* Scurret audio tuning

* Add new sfx

* Update sneezing sfx

* YAML support

* Rename a folder

* make telesci wreck easier (#37569)

rel

* Validate `ShaderPrototype` IDs (#38728)

* Convert all shader prototype string literals to protoids in overlays

* Convert more shader prototype literal strings to protoids

* Convert ValidatePrototypeId to ProtoId

* Later

* [BUGFIX] Fixed revenant malfunction ability not working properly only MediBots and Stasis bed (#38664)

* fixed

* clean up

* orks fix smart

* review fix 1

* more requested changes

* less cursed

* more descriptive description

* better wording

* Tiny Tiny Cleanup of the EyeClosingSystem. (#38734)

Update EyeClosingSystem.cs

* Fix human skin tone distribution (#38701)

* fix: Use PredictedQueueDel for gib spell (#38729)

* fix: don't default to uncharged sprite state for cells (#38730)

* Fix Hristov description - remove inaccurate technical specs (#38746)

- Removes inaccurate 'armor piercing 14.5mm shells' reference
- Replaces it with a more funny description, matching the style of the other snipers and guns
- Keeps ammunition type '.60 anti-materiel ammo' specification
- Fixes issue #38590

Co-authored-by: Arthur Fiorese de Andrade <aandrade@cmcxs.gov.br>

* feat: allow mopping evaporating puddles (#38743)

* Validate remaining `ProtoId` strings (#38747)

Validate remaining ProtoId strings

* Validate `ProtoId`s in tests (#38745)

* Convert string literals to protoids in Content.Tests

* Convert string literals to protoids or consts in Content.IntegrationTests

* Fix linter failures
Tricksy static using misled me

* Cleanup warning in StomachSystem (#38748)

you did not see this

* Vox scars (#38592)

* Added vox scars n'stuff, renamed vox_tattoos.ftl to just vox.ftl

* Revert "Added vox scars n'stuff, renamed vox_tattoos.ftl to just vox.ftl"

This reverts commit c73da55ba3b39ddf93b493aecd85604c54dd8a15.

* locale key fix

* Changed top surgery scar names to be more generalized

* Adjusted face scars

* Formatting fixes

---------

Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>

* UnlockNode command to LEC. (#38751)

* commit

* Update UnlockNodeCommand.cs

* commit

* move command locale to its own file.

* Update Content.Server/Xenoarchaeology/Artifact/UnlockNodeCommand.cs

---------

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

* Typofixes for figurine dialogue (#38737)

* Typofixes for figurine dialogue

* Forgot two

* Janitor Tool: Wire Brush (#38667)

* Wow! It's -brush-

* spacing.

* Update Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml

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

* Update Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml

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

* fixed changes

---------

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

* Minor escape menu UX improvements (#38650)

* fix: spellbooks can have infinite charges (#38376)

* fix: spellbooks can have infinite charges

* refactor: indicate infinite spellbook charges with null

Not sure if I like this much better...
2025-11-06 18:22:39 +00:00
Delta-V bot 88a11aea06 Automatic changelog update 2025-11-05 03:36:18 +01:00
biddygelson 9e3777e701 Academy: Hotfix - fixed missing fan, fixed dorms doors, fixed epi brig maint door (#4601)
* tweak: removed door outside cargo reception, should make it easier to queue.
* fix: added missing directional fan for salvage mining shuttle dock.
* fix: dorms are public access.
* fix: captain's toilet properly connected to disposal
* fix: epistemics brig maintenance access is mantis locked instead of common maint access.
2025-11-05 02:35:59 +00:00
Delta-V bot 8d2e32741d Automatic changelog update 2025-11-04 13:40:01 +01:00
Field Command 3ce6ae5573 Midpoint is back to normal (#4600)
Update midpoint.yml
2025-11-04 12:39:41 +00:00
Delta-V bot fdb58b3e6c Automatic changelog update 2025-11-04 02:26:28 +01:00
turtlemutt 46445e2d2e Lighthouse Update (#4565)
* Lighthouse Update

* Update lighthouse.yml

* Update lighthouse.yml
2025-11-03 19:26:08 -06:00
ConstantlyConfused bbd3f54356 Correct a typo in the galaxy jumpsuit description (#4598)
* correct a typo in the galaxy jumpsuit description

* move into _dv
2025-11-03 05:29:38 +00:00
Delta-V bot 38b555b45d Automatic changelog update 2025-11-02 10:38:30 +01:00
AeraAulinandpre-commit-ci[bot] 1b4db9965a Fashion (#4547)
* AAAAAA I LOVE FASHION

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

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

* forgot to put the naval coat in

* capitalize heat so github stops yelling at me

Signed-off-by: AeraAulin <133451603+AeraAuling@users.noreply.github.com>

* fix typo

* please spare me nukeops

* remove nukeops propaganda

* fix cost thing

---------

Signed-off-by: AeraAulin <133451603+AeraAuling@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-02 09:38:10 +00:00
github-actions[bot]andDeltaV-Bot 7d06349138 Update Credits (#4594)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-11-02 09:34:56 +00:00
Delta-V bot 4d07112ab6 Automatic changelog update 2025-11-02 06:50:02 +01:00
Eagle0600andpre-commit-ci[bot] d8f2aacbe0 Tiered cakes (#4534)
* Add Tiered Cakes (#614)

* Add frosting and tiered cakes, with sprites by meowyrm and chlymerine.

* Add localisations for tiered cake construction

* Removed newline.

* Moved localisations to _DV namespace.

* [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>
2025-11-02 16:49:42 +11:00
Delta-V bot 4f6ef02807 Automatic changelog update 2025-11-02 06:45:58 +01:00
HTML/Crystal e87cfca552 Arachnid + moth nv & thermal sprites (#4522)
nv + thermal sprites
2025-11-02 16:45:38 +11:00
Delta-V bot d29e37811a Automatic changelog update 2025-11-02 06:45:12 +01:00
Sir Warock bfa33beca2 Fix Rollerbed sprites (#40550) (#4521) 2025-11-02 16:44:52 +11:00
VelcroboyandVelcroboy 089fecd4ca Updates Wall locker Fills + Housekeeping (#4518)
* Updates Wall locker Fills + Housekeeping

* Fixes

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-11-02 16:38:49 +11:00
Delta-V bot 43a8edc413 Automatic changelog update 2025-11-02 06:28:52 +01:00
turtlemuttandpre-commit-ci[bot] c666258cf6 Spicy Pickle Moffs (#4425)
* spicy pickle shit

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

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

* gates did not hold my hand this time, send help

* idk anymore

* Update snacks.yml

* Update snacks.yml

* Update snacks.yml

* Update snacks.yml

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-02 16:28:33 +11:00
biddygelson 4df5693322 Map academy (#4192)
* academy station map with evac shuttle and prototype

* Added Academy to list in PostMapInitTest.

* Academy station
- tweak: added empty crates in engineering to help with PA setup.
- removed: physics grid

NTES_Academy shuttle
- added: firelocks
- added: decals
- removed: physics grid

maps Pools
- added academy to list.

* Academy Station
- added buttons for janitor lights.
- tweaked several areas
- added more intercomms

Evac
- added warp point
- added "device network .... shuttle timer"
- tweak linked airlock doors in rear - oops.

* - tweak removed mining shuttle console and airlock

* - fix removed physics from anchored barrier

* fix - replaced some barriers causing errors in the whole hallway.

* working through feildcommands requested changes.
* arrivals/dorms done
* engineering in progress

* working through fieldcommander's requests.
* eng - done.
* cargo - done
* service - done
* evac - done

* working through changes.

* working through changes.
* law done
* ai done
* bridge done
* perma done

* working through changes:
* perma done
* sec done
* epi brig done

* working through changes
* chapel - done
* park - done
* epi - in progress

* working through changes
* epi - done
* medical - done

* working through changes.
* TODO - evac shuttle
* TODO - playtest

* evac commit before adding devicenetwork component for shuttle timer

* added shuttle timer to evac

* changed NY to DV in prototype

* fixed rotations, tiles.
added archivist temp space.
changed min pop to 50.

* minor edits for power, air, and buttons on map.

* oops! forgot a comma.

* RE-added Academy to initTest.
upped max pop to 100

* updated path of shuttle to match new directory schema.
minor edits for air alarms on evac and map.

* perhaps this comma at the end is causing undue stress on the integration tests. Let's find out!

* fixes and tweaks for Velcro's first step in reviewing this behemoth.
* added LO, MG beacons
* removed trash piping in old surgeon theater
* connected LV to APC in maints near west solar
* replaced viro janitor button to be for medical instead of service
* linked security airlock to bolt airlocks when opening to space
* re-fanagled viro atmos piping to rooms
* replaced honklaw maints door - not service access anymore!
* linked other jani-light in delta-phi dorms

* Fixed invalid scrubber in viro

* alphabetized the //DeltaV maps in the list per Velcro's ask.

* removed bomb tagets in; arrivals, med, epistemics, evac.

* oops.

* * fixed missing window in viro checkpoint - how did that happen?
* added curtains to entertainers rooms
* connected captain's toilet to disposals
* replaced intercom outside command with working one
* replaced maint access in honklaw and mimelaw with theater access to match
* fixed space and pods sign directions to make more sense
* fixed unreinforced wall at salvage external airlock
* fixed unreinforced walls at atmos
* added crematorium in chapel morgue
* replaced epi lock with chapel lock for chapie chapalino chaplinsky charles chaplin
* fixed mantis maints door
* made cloister public access to players can talk to the oracle - sorry epistemics
* moved cargo dock emergency lights off normal lights
* made boxketball lockers public access - go play!
* made distro public access - unless by popular demand you all tell me that it be jani locked. snicker snicker.
* replaced hydroponics access to the freezer to be hydroponics only - sorry kitchen staff.
* added nutrimax for hydroponics
* fixed conveyor direction in perma disposals
2025-10-31 04:20:03 +00:00
Delta-V bot 30894e7600 Automatic changelog update 2025-10-30 02:52:49 +01:00
0deeaf7b77 Better Admin Tooling and New Curator Toys (#4577)
* Add Pockets and Tail-Drag to Admin Ghosts (#1508)

Adds 4 pockets to the Admin Ghosts and the ability to Tail-Drag (no
hands needed).

---

https://github.com/user-attachments/assets/701b66bd-c42c-429f-a33a-f8e465ef068d

---

🆑
ADMIN:
- add: Added pockets to Admin Ghosts.
- add: Added tail-drag (no-hands) to Admin Ghosts.

* Adding Admin Tools and Changing Aghost Starting Gear (#855)

- Added the admin folder, which can hold up to any normal item.
Prefilled with paper and a tasty treat.
- Added the admin toolbelt, which can hold up to any normal item.
Prefilled with various tools.
- Changed the admin satchel to be removable and added a few things to
its fill.
- Added the Admin RCD, an infinite RCD.
- Added an admin material box which contains 6 of the most basic
materials.
- The ID card in the admin PDA is now a CC ID card.

People were complaining about a lack of basic tools on the aghost.

Simple yml changes.

![image](https://github.com/user-attachments/assets/a65b145b-41d8-41e8-b48f-0ed567febe29)

- [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 can confirm this PR contains no AI-generated content, and did
not use any AI-generated content.

None afaik.

**Changelog**
🆑
- add: A bunch of new admin tools and things in the aghost starting
gear.

---------

Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>

* Removed admin folder because it was being weird when put into containers and I don't really want fix it.

* Added auto-color for aghosts

* Added suffix to the CentComm implanter

* BSO Lifeline Port (#1730)

BSO lifeline implant - ported from Goobstation.

What is it?: It's a bluespace implant. Triggers when you die or when you
click the button twice.

Why is it?: BSO is a special role, specifically employed by CC. They
exist on station only to protect to command and nothing else. They have
pretty strong armour and weapons. So this is the solution to that +
creates an RP narrative.

It spawns in the BSO's pocket, as it's an optional implant, should
probably be taken either start of shift or when things get dicey for
command.

Additional: Adds new sprites for CC specified implants.

---

<details><summary><h1>Media</h1></summary>
<p>

![Content
Client_MHAiLxtLug](https://github.com/user-attachments/assets/907b8a0b-98af-4a1c-855b-e1737a373e0d)

</p>
</details>

---

🆑
- add: Blueshield Officer lifeline implanter

---------

Signed-off-by: Rouge2t7 <81053047+Sarahon@users.noreply.github.com>

* Fixed admin ghost color issue.

* Re-ordered the CentDrobe so useful things are at the top.

* Changed the sprite of the CentComm mindshield to match that of the Bluespace Lifeline.

* Added the ability to select a job with the 'spawncharacter' admin command.

* Added spawnplayer admin command

* Client-Side Entity Log Sorting (#1624)

<!-- 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 -->
## About the PR
<!-- What did you change? -->
Expanded on admin log sorting. Fixes the issues from #1569

## Why / Balance
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
Admin things.

## Technical details
<!-- Summary of code changes for easier review. -->

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


https://github.com/user-attachments/assets/837d9e4e-09bb-44ac-b79f-59435edc3aed


## Requirements
<!-- 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 -->

## Breaking changes
<!-- 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. -->

**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. -->
🆑
- tweak: ADMIN: You can sort entity logs by pressing fancy buttons!

* Fixed YAML linting issues

* Moved bluespace lifeline textures to proper directory

* Added emergency medical pods from Frontier for admemes.

* appeased the unit test gods

* Another test fail because people forgot that you can't divide by zero.

* probably appeased the unit test gods this time

* PR #4577 Feedback

---------

Signed-off-by: Rouge2t7 <81053047+Sarahon@users.noreply.github.com>
Co-authored-by: John Willis <143434770+CerberusWolfie@users.noreply.github.com>
Co-authored-by: MajorMoth <61519600+MajorMoth@users.noreply.github.com>
Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>
Co-authored-by: Rouge2t7 <81053047+Sarahon@users.noreply.github.com>
Co-authored-by: William Lemon <William.Lemon2@gmail.com>
2025-10-30 01:52:30 +00:00
Delta-V bot ae52f1c0a6 Automatic changelog update 2025-10-30 00:17:47 +01:00
CheddaCheez 85f9cbd238 Port Slime markings from Starlight (#4569)
* Port locale, yml, textures

Slime-related textures, prototype, and locale.

* Remove unused/unwanted bits and clean up.

Delta doesn't support the glowing.
Cyclops doesn't look good with a nose, and changing base slime textures is outside the scope of what I wanted here so I'm just gonna axe the eye options.

* One more tweak

Nose and mouth PNGs went unused in this PR, and the meta file lines pointing to them caused ERROR over the character when they were removed. Also changed the copyright line (this scares me) to only reference presently included files.
2025-10-30 10:17:28 +11:00
Delta-V bot 74e3796bb0 Automatic changelog update 2025-10-28 18:56:30 +01:00
Solarisandpre-commit-ci[bot] 2c49933c48 THE HONKMOTHER IS COMING, AND THERES NOTHING YOU CAN DO TO STOP HER. (#4467)
* THE HONKMOTHER IS COMING, AND THERES NOTHING YOU CAN DO TO STOP ME!!!!

It begins.

* random bullshit go!!!

* Update honkmother.yml

* Update honkmother.yml

* spawn announcement updated since its borked

* Update honkmother.yml

* SHES READY

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

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

* localization fail fix attempt numero uno

* localization fix round 2 electric boogaloo

* localization fixes.

Also removed some random localization stuff for an entirely differently language that was in there, doesnt look to be used so its probably useless.

* un touches localization file

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-28 17:56:10 +00:00
Delta-V bot d81f89878a Automatic changelog update 2025-10-28 12:55:28 +01:00
EmberAstraandpre-commit-ci[bot] 4552ae7205 Vox scars! (#4513)
* Adds vox scars

* Increase vox arms marking points

* [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>
2025-10-28 11:55:08 +00:00
Delta-V bot 209bef2d0d Automatic changelog update 2025-10-26 19:36:07 +01:00
MD360 fa03d8c655 IPC Polymorph fix (#4545)
Update ipc.yml
2025-10-26 18:35:48 +00:00
github-actions[bot]andDeltaV-Bot 0a6088683a Update Credits (#4572)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-10-26 01:38:50 +00:00
Delta-V bot d9eb8bb2d3 Automatic changelog update 2025-10-26 02:09:44 +02:00
EmberAstra 8ca271ee43 Fix space adder faction (#4503) 2025-10-26 00:09:23 +00:00
VelcroboyandVelcroboy 32b622a4a6 Destructible Tile HotFix (#4567)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-10-26 10:57:26 +11:00
Delta-V bot d31154c4f1 Automatic changelog update 2025-10-26 01:47:38 +02:00
Sir Warockandpre-commit-ci[bot] 65b32f441f QoL for cryotubes (#4456)
* Port EvenlySplitting for Cryotubes

* Make Trinox consistent

* Bring into DV_Systems

* [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>
2025-10-26 10:47:19 +11:00
Delta-V bot 4337f0c449 Automatic changelog update 2025-10-26 00:46:11 +02:00
BriBrooo 4feed3b5ce Shōkō maintenance (#4489)
* Update shoukou.yml

Tweaked surgery room;
Tweaked detective room to include its own bedroom to fit an evidence locker;
Tweaked the library to include a display case;
Fixed prison intercom;
Fixed departmental lock boxes.

* Update shoukou.yml

Removed invalid configurators

* Update shoukou.yml

* Update shoukou.yml

* Update shoukou.yml

* Update shoukou.yml

no invalids
2025-10-25 22:45:52 +00:00
Delta-V bot 19addce906 Automatic changelog update 2025-10-25 17:42:16 +02:00
AeraAulin 3bb7a4b464 Shadow tweaks (#4541) 2025-10-25 15:41:57 +00:00
Delta-V bot 0c4a711141 Automatic changelog update 2025-10-25 02:57:21 +02:00
CheddaCheez e2c4b15e65 Port Clown Skirt from Starlight + Add Blushing Masks to loadouts (#4561)
* Everything

Port Clown skirt from Starlight
Add Blushing Clown/Mime Mask to loadouts
Ensure Clowns can change their mask

* permalink dmi

Change permalink from general commit to dmi that holds the jumpskirt.
2025-10-24 19:57:02 -05:00
Delta-V bot cb8a154db2 Automatic changelog update 2025-10-24 04:02:36 +02:00
ConstantlyConfused 173d6b6e43 Add chemist winter boots to the chemdrobe (#4533)
* add chemist winter boots to the chemdrobe

* move into deltav additions section
2025-10-24 02:02:17 +00:00
Delta-V bot 091d2db90c Automatic changelog update 2025-10-24 03:38:14 +02:00
AeraAulin 303b00154e make the dresses accessible to all (#4542)
* vendor bloating

* aaaaaaaa
2025-10-23 20:37:55 -05:00
Delta-V bot c8ac57b628 Automatic changelog update 2025-10-24 03:36:23 +02:00
Proxy also works :3 692817ae38 make guns cheaper (#4555)
* Update uplink_catalog.yml

* changed l6 to 12 cause im a terrorist what now cepe huh what now
2025-10-23 20:36:03 -05:00
Delta-V bot 94d36b4273 Automatic changelog update 2025-10-24 02:00:14 +02:00
EmberAstraandpre-commit-ci[bot] 35a2b791f1 Add mothroach grenades (#4558)
* Add mothroach grenades

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

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

* Removed unnecessary comment

* Double the mothroaches!!

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-23 18:59:55 -05:00
Delta-V bot 9ce7ec890e Automatic changelog update 2025-10-22 22:27:16 +02:00
Cepelinas1andpre-commit-ci[bot] 0ce67af6c8 De-metashield Epsilon part 1 + DV sound files moving (#3867)
* epsilon rewrite, first batch

* As requested, moved the announcement folder to _DV folder, which only now includes deltaV or nyanotrasen specific audio files. Please double check the license.txt in Announcements/RoundEnd to see if I got it right.

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

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

* fix announcements again, oopsies

* potentially fixed epsilon rule, i dunno

* probably fix???? i dunno i only write goidacode

* temporary attribution.yml file for epsilon.ogg

* typo fix. not epsilon.ogg but code_epsilon.ogg

* another accidental error oops

* small test as removing my own attributions.yml file, i am going insane with these checks.

* reverted the attributions.yml deletion

* optional APC sound thing i wrote it incredibly stupid, going to do a stupider idea

* Update attributions.yml

* code saved by the angel named Toby

* added and fixed several attributions.yml files

* formatting fix oops

* fix second time hopefully

* i think i merged it correctly?

* weird way of fixing attributions

* With massive Quanteey's help and guidance, code cleanup once again.

* sound file path errors fixed

* another sound error fix

* added spacing to comments, removed CancellationTokenSource like asked and made the poweroff sound louder

* wiki page should be updated and removed epsilon mention in metashield rules

* from elevated to emergency status

* removed the funny event for 2 part

* forgot to remove a thing

* another fix

* conflict fix

* fix second time

* untouching and commenting

* untouching number 2

* untouched correctly?

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-23 07:26:55 +11:00
Delta-V bot edb80c9790 Automatic changelog update 2025-10-22 17:28:41 +02:00
Tobias Berger de2fb0dd85 Fix dV winter coats having the wrong parent (#4560) 2025-10-22 10:28:21 -05:00
Delta-V bot 3ee1afa9ed Automatic changelog update 2025-10-22 12:01:09 +02:00
Niomi 53aaf26a0b New Generic Borg Decoration Module (#4532)
* Added borg module entry to the appropriate file

* Added icons and renamed slightly

* Corrected Yml, added recipe.

Unable to avoid editing lathe.yml
2025-10-22 10:00:49 +00:00
Delta-V bot 82242ac574 Automatic changelog update 2025-10-21 20:39:31 +02:00
AeraAulin 01c5d46b00 Accursed Scythe balance pass (#4543) 2025-10-21 18:39:11 +00:00
Delta-V bot bc21e7e04f Automatic changelog update 2025-10-21 04:24:07 +02:00
AeraAulin 76e2527de6 Archivist closet (#4540)
* aaaaaaaaa

* found the books that let me spawn the closet

* add in the boards and fix a bug
2025-10-20 21:23:47 -05:00
github-actions[bot]andDeltaV-Bot acf7b12c87 Update Credits (#4550)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-10-19 13:57:49 +01:00
Vape fad71486d5 Organizing Shuttle Folder (#4549)
* Reuploading PR, it is readie

* Some convention fixes

* Rename the file again

Signed-off-by: Vape <76235372+Vapetastic-Gaming@users.noreply.github.com>

---------

Signed-off-by: Vape <76235372+Vapetastic-Gaming@users.noreply.github.com>
2025-10-19 02:03:13 +00:00
Delta-V bot bc36b1d8d1 Automatic changelog update 2025-10-18 18:26:23 +02:00
Vape 03cdc672c7 Submarine Returns (#4497)
* Testing phase 1

* Official ready for review

* Fixed the mapping oopsie

* Map Fixes, and cleanup

* 123

* Evac Shuttle updated

* Updated YML of the protothingy

* Fixed fails, cried a few times

* More Fixes. I've ran out of tears

* Revert "More Fixes. I've ran out of tears"

This reverts commit afeefedf3a.

* Had to revert. I feel as though I am going bald, send help, or rogaine

* Subfloor PT1, Many Fixes, Multiple Crying Sessions

* Fixes / Changes / tweaks

* Changes requested

* I broke it

* notepad savior
2025-10-18 17:26:03 +01:00
Delta-V bot a13bf05968 Automatic changelog update 2025-10-16 15:48:04 +02:00
Stop-Signsandpre-commit-ci[bot] 9d87a76455 Add rhino industrial suit for LO (#3911)
* mrrp

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

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

* jetpackening

* sprites

* proper descriptioning

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

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

* touch ups

* messy

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

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

* spacing

* permalink

* fixes.....finally

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-16 15:47:44 +02:00
Delta-V bot eae0713b56 Automatic changelog update 2025-10-16 11:04:41 +02:00
Sir WarockandQuanteey cf38b86342 Fix buckled patients standing up (#4316)
* Fix Standing up when Exiting Critical State (#1612)

<!-- 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? -->
Made buckled Entities not stand up when recovering from critical state.
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
Just generally annoying having to buckle your patient again - Or have
them unbuckle from your rollerbed as you ferry them.
<!-- Summary of code changes for easier review. -->
Removed redunancies and inserted a check for being buckled before
calling the method to stand up when entering the Alive state.
<!-- 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. -->
<img width="104" height="148" alt="grafik"
src="https://github.com/user-attachments/assets/c26009f1-e46e-46ae-bd2e-f89f7431dc07"
/>

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

**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. -->
🆑
- fix: Fixed buckled patients standing up when recovering from crit. Now
they'll stay seated.

* Small fix

* Add Comments

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

* Fix comment?

* Returned Useless Import

* Update Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs

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

* Update Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs

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

* Update Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs

Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
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: Quanteey <61941975+Quanteey@users.noreply.github.com>
2025-10-16 11:04:21 +02:00
This_Is_Gray 53b23ffa05 Elegance Late Join Spawns Hotfix (#4527)
* Update elegance.yml

* Update elegance.yml
2025-10-16 10:04:18 +02:00
Delta-V bot 4e140f0e3e Automatic changelog update 2025-10-16 07:54:52 +02:00
William Lemon ee481f557a Fractured Form Sleep Patch (#4530)
Tiny patch
2025-10-16 16:54:33 +11:00
Delta-V bot 32ca676172 Automatic changelog update 2025-10-16 07:22:15 +02:00
Sir Warock 618fb28378 Extend even healing to special & buff cryo/pyrochems (#4455)
* Extend EvenHealing & Buff Cryochems

* Extend Evenhealing to Specialchems

* Extend to Trinoxadone

* Extend to Pyrogenics

* Update Cryogenics.xml

* Fix Prometheum

* Please the Maintainer Deities

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

* The great Comment of 86

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2025-10-16 16:21:55 +11:00
AeraAulin 4537e7ebeb Silver swords and Radiant Swords (#4303)
* swords are cool

* remove unused tag

* build and test debug is yelling at me about this. presumably it's because of RevealRevenantOnCollide

* just remove both it's too late to deal with right now

* alright try 2 to get the build and debug to not yell at me about it. I dunno why the bible can just have the component but not the sword

* fix merge conflict before syncing branch because this is genuinely just easier for me to do it this way

* aaaaa

* i need merge conflicts to stop yelling at me aaaaaaa

* merge conflict fix pt. 1

* fix merge conflict pt. 2

* nukeops haunts me at night
2025-10-16 05:12:24 +00:00
Delta-V bot 8af07de49a Automatic changelog update 2025-10-16 07:11:43 +02:00
KOTOB c6addd2e9e Port Cortical Borers (real) (#4466)
* ITS ALL C# GOOD LORD

BORN TO PORT
WORLD IS A PR
鬼神 Merge Em All 2025
I am yaml man
410,757,864,530 UPSTREAM MERGE CONFLICTS

* that was, uh. too easy.

* very small tweak

* comment and reuse fixes

* forgot the guidebook Oops

* the guidebookening

* the reusening
2025-10-16 16:11:24 +11:00
Delta-V bot 2e77b9f6d7 Automatic changelog update 2025-10-16 06:52:54 +02:00
BarryNorfolk 70d7712a35 Add Grappling for Laika (#4157)
* Create grappling system

* Add grappling to Laika and other sec dogs

* Allow grapplers to also throw themselves prone

* Apply prone on grapple to laika

* Add layingdown component to laika

* Ensure grapplers entering crit release their grapples

* Ensure IPCs can be grappled

* Fix typo

* Remove system suffix for fields

* Simplifiy returns for CanGrapple

* Use magic dotnet syntax

* Fix usages of ViewVariables over DataFields

* Swap to using marker component over tags

* Remove errant new lines

* Remove redundant brackets
2025-10-16 15:52:34 +11:00
Vape c0ca98d447 Bring Back Rat King (#4439)
* Update events.yml

* Update events.yml

* Update events.yml

* Update events.yml

* Update events.yml

* Crying because this is case sensitive

* Changed base on maint reccommendations, Cried

---------

Signed-off-by: Vape <76235372+Vapetastic-Gaming@users.noreply.github.com>
2025-10-16 15:44:26 +11:00
Delta-V bot 0c73f5be68 Automatic changelog update 2025-10-16 06:02:25 +02:00
leoandDvir ebe8b41e36 Port René Magritte Paintings From The Den (#3732)
* port les paintinges

* adds paintings to spawner

* Update Resources/Prototypes/Entities/Markers/Spawners/Random/paintings.yml

Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com>
Signed-off-by: leo <136020119+leonardo-dabepis@users.noreply.github.com>

* Update Resources/Textures/_DEN/Structures/Wallmounts/paintings.rsi/meta.json

Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com>
Signed-off-by: leo <136020119+leonardo-dabepis@users.noreply.github.com>

* relocates to _den (i forgor)

i forgor to not put it upstrem, plx forgib me :pleading:

* untouched

* Update paintings.yml

---------

Signed-off-by: leo <136020119+leonardo-dabepis@users.noreply.github.com>
Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com>
2025-10-16 15:02:06 +11:00
Delta-V bot 2033094b68 Automatic changelog update 2025-10-15 17:58:21 +02:00
KOTOB a415dc3cb7 Asakim theft objective small rewording (#4528) 2025-10-15 10:58:02 -05:00
Delta-V bot 986aa25b74 Automatic changelog update 2025-10-15 11:37:36 +02:00
William Lemon 03b9098c33 Held Lights Hotfix (#4525) 2025-10-15 11:37:16 +02:00
Field Command f4b13622de Midpoint Hotfix (#4524)
fix a floating light
2025-10-15 02:02:22 +00:00
Delta-V bot 0ae01eb5b6 Automatic changelog update 2025-10-14 21:43:03 +02:00
William Lemonandpre-commit-ci[bot] 48bec2057b Fractured Form - New Psionic Power (#4506)
* Initial Fractured Form Pass

* Cleanup

* AAAAAAAAAAAAAAAAAAA

* I forgor

* Sometimes naked

* Untouch and touch where applikcable

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

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

* Better optional pattern

* Unbreak it

* Minor Spelling Mistake

* Filthy test fix hack

* Filthy hack to appease the test gods

* A normal number of post-PR commits

* AAAAAAA

* Don't know why I didn't do this in the first place

* Some cleanup

* Damn how did I miss this

* Delta Mandated Cleanup

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-15 06:42:43 +11:00
Delta-V bot 0cc8446abe Automatic changelog update 2025-10-14 15:40:18 +02:00
EmberAstra c52c7f9f22 A few small fixes (#4511)
* Fix criminal records computer board

* Fix unholy water description

* Fix factorio boards icons
2025-10-14 08:39:58 -05:00
Delta-V bot d62697dd53 Automatic changelog update 2025-10-13 20:57:51 +02:00
KOTOB 5ec8022575 Bring back HOS trenchcoat (#4509) 2025-10-13 18:57:31 +00:00
Delta-V bot 5055caae71 Automatic changelog update 2025-10-13 20:41:06 +02:00
BarryNorfolk 405aa32632 Ensure laika can also wear the K9 armour (#4523) 2025-10-13 13:40:46 -05:00
Delta-V bot 7fa828e915 Automatic changelog update 2025-10-13 10:31:25 +02:00
William Lemonandpre-commit-ci[bot] b70452f797 Unapologetic Diona Buffs (#4502)
* Unapologetic Diona Buffs

* Corrected misinformation

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

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

* 40% slowdown resist

* Pew

* Pew pew

* Wording fix

* I forgor

* crying emoji

* types vs groups D:

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-13 10:31:06 +02:00
Delta-V bot 1271a43389 Automatic changelog update 2025-10-13 06:07:08 +02:00
This_Is_Grayandpre-commit-ci[bot] 1ef6a0c46d Major Elegance Rework (Service, Security, Justice) (#4200)
* pluh :speaking_head:🔥

* signs and final PR preparations

collect my signs

* curse of the invalids

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

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

* guh??

* genuinely not sure how this one happened

* ugh

* three fish dancing in a pot

wowza. three of them?

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

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

* Evil Ass Perma Maints Doors

* Update elegance.yml

* holy shit

* Update elegance.yml

* curse of the spaces and other miscellaneous issues + plasma tank-ening

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

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

* h

* Merge branch 'Elegance-Rework-But-Stable' of https://github.com/IAmNotGray/Delta-v into Elegance-Rework-But-Stable

* Update elegance.yml

* Update floors.yml

---------

Signed-off-by: This_Is_Gray <167829864+IAmNotGray@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-13 04:06:47 +00:00
Delta-V bot f681d09d41 Automatic changelog update 2025-10-13 03:24:33 +02:00
Spielern 4866d2fa70 93 New Hairstyles from DopplerStation 13 (#4515)
new hairstyles
2025-10-13 12:24:14 +11:00
Delta-V bot 9c6319b386 Automatic changelog update 2025-10-13 02:11:30 +02:00
Spielern 0ad313d4b8 Removes Synthetic/Animal Species markings for IPCs (#4516)
* removes synth lizard & animal parts

* rodentia.yml typo/comma fix
2025-10-13 00:11:11 +00:00
Delta-V bot b30ce58ba5 Automatic changelog update 2025-10-12 23:22:20 +02:00
Field Command 0bd4a4220d Updates to some shuttles (#4517) 2025-10-12 16:22:01 -05:00
Delta-V bot f9ce9df91b Automatic changelog update 2025-10-12 23:20:50 +02:00
Field Command 4a01aff58e Spooky time on Midpoint (#4512) 2025-10-12 16:20:30 -05:00
Delta-V bot 4d09554391 Automatic changelog update 2025-10-12 23:18:05 +02:00
Field Command 14c35b3c4b Arms dealer update (#4508)
* Arms dealer update

* Small edits.
2025-10-12 16:17:46 -05:00
Field Command d808b340e8 Byoin Fix 5 (#4475)
* Small fix

* A small edit
2025-10-12 15:49:30 -05:00
github-actions[bot]andDeltaV-Bot 424a25c7de Update Credits (#4519)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-10-12 08:26:09 +01:00
Delta-V bot 427cd509ed Automatic changelog update 2025-10-11 19:05:00 +02:00
BarryNorfolk 7fc61d7166 Allow base secdogs to wear K9 armour (#4514) 2025-10-11 12:04:41 -05:00
Delta-V bot 0f9e595cdb Automatic changelog update 2025-10-09 03:26:42 +02:00
KOTOB 2570998da3 Fix Avali zoom distance (#4510)
nightmare
2025-10-09 01:26:22 +00:00
Delta-V bot 8cd3568f5d Automatic changelog update 2025-10-09 01:31:52 +02:00
KOTOB 226d164f98 Midround Free Agent - Asakim Warrior (#4459)
* explodes you with my MIND

* goated?

* medipen gaming

* evil obfuscation system from hell

* MANY things

- accent improved (takes into account word length when determining number of syllables)
- night vision tied to shitmed eye organ (not thermals, though, that's broken for some reason)
- asakim-specific backpack and jumpsuit (mono turns ert backpacks into something generic while we don't, and they use goob ninja jumpsuit so i just made a new jumpsuit with goob ninja sprites)
- gun can switch between disabler and lethal modes
- rebalanced armor, made them a bit more squishy to melee and slightly less tanky to bullets/heat
- renamed and redescribed their items to fit more into deltav "lore"
- added the High Frequency Katana, basically a silly ninja sword
- removed freedom/storage implanters

* commit before i touch evil role code

* i lied one more commit before evil role code

* a lot of assorted things

- move prototype to shared (client got angry)
- Automated Defense System issuer real
- fix spawning, remove gamer cybernetics
- fix objectives
- more blunt res
- nerf loadout
- nerf gun

* we love misprediction

* i think this works

* big changeops

- springlock suit popup and gamer prediction (kinda)
- briefing audio
- precog
- evil rules that require mrp players to actually rp (evil)
- added to freelance shuttle set
- spawner is kill
- illiterate
- more slash damage
- nerfed the gun into the absolute ground (and removed semi auto)
- sword kinda nerfed
- removed some evil mono gamerule stuff we dont have

* lower weight

* tweaks

- rules are more gamer (kill those salvies)
- nerf heat res
- 1984 psionics

* appease the linter gods

* cleanup ops

* jumpscare

* if yaml validator fails i will cry

* fix assert, maybe fix yaml thing

assert fix is from a deltanedas PR from 2023, hopefully that still works

* I LOVE RIDER I LOVE RIDER

* minor cleanup

* attrib. fix

* attrib. fix take 2

* Update asakim_small.yml

* Update asakim_small.yml

---------

Signed-off-by: KOTOB <59124164+kotobdev@users.noreply.github.com>
2025-10-08 23:31:32 +00:00
Delta-V bot c7c6bc01cd Automatic changelog update 2025-10-08 03:19:47 +02:00
Vape 1380c0c564 Weight Adjustment for midround gamerules (#4498)
* Updated and Cleaned up the file a bit for organization

* Direction requested changes and then some
2025-10-08 12:19:28 +11:00
Delta-V bot 039054a284 Automatic changelog update 2025-10-08 01:56:09 +02:00
Solaris a090e0750a Fix Super Synths not being able to be played while being worn on the neck. (#4505)
* I hate it here

* Update instrument_keyed.yml

* fixed finally
2025-10-08 10:55:50 +11:00
Delta-V bot 73e8929131 Automatic changelog update 2025-10-07 02:07:50 +02:00
KOTOB df5c769a0a Give secoffs lethals in their guns roundstart (#4359)
miniscule tweakops
2025-10-07 11:07:30 +11:00
Cepelinas1 fe7a30f787 ERT slight improvements (#4128)
* first fix

* merge fix
2025-10-07 11:05:18 +11:00
Delta-V bot 3ee400613b Automatic changelog update 2025-10-07 01:56:39 +02:00
1cc243d811 Cherrypick: "Make more objects spray paintable" and related PRs (#4480)
* Make more objects spray paintable (Reviving #31328) (#37341)

* PaintableAirlockComponent and AirlockGroupPrototype have been replaced

* Slightly redesigned SprayPainterSystem for greater versatility

* Added handling of changes to the appearance of doors and storages

* PaintableGroup prototypes have been created

* Generating tabs with styles in the UI

* Fix error with undiscovered layer

* Slight improvement

* Removed unnecessary property

* The category for `PaintableGroup` was allocated to a separate prototype so that the engine itself would check if the category existed

* Added canisters, but repainting doesn't work

* Added localization to styles

* Fix sprite changing

* Added the ability to paint canisters

* slight ui improvement

* Fix yamllinter errors

* Fix test

* The UI now remembers which tab was open

* Fix build (?)

* Rename

* Charges have been added to the spray painter

* Added a charge texture for the spray painter

* Now spray painter can paint decals

* Increased number of charges

* Spawning dummy objects has been replaced by PrototypeManager

* added a signature about the painting of the object

* fix

* Code commenting

* Fix upstream

* Update Content.Shared/SprayPainter/Components/SprayPainterAmmo.cs

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

* review

* Now decals can only be painted if the corresponding tab in the menu is open.

* Fixed a bug with pipe and decal tabs not being remembered

* Update EntityStorageVisualizerSystem.cs

* record

* loc

* Cleanup

* Revert electrified visuals

* more cleanup, fix charges, del ammo4

* no empty file, remove meta component

* closet exceptions, storage visualizer fixes

* enable/disable decal through alt-verb

* Fix missed merge conflicts

* fix snap offset, button event handlers

* simpler order, fix snap loc string

* Remove PaintableViz.BaseRSI, no decal item, A-Z

* State-respecting UI, BUI updates, FTL fixes

* revert DecalPlacerWindow changes

* revert unwanted changes, cleanup function order

* Limit SprayPainterAmmo write access to AmmoSystem

* Remove PaintedSystem

* spray paint ammo lathe recipe, youtool listing

* category as a list, groups as subtabs

* Restore inhand copyright in meta.json

* empty spray painter, recipe produces an empty one

* allow alpha on spray painter decals

* add comments

* paintable wall lockers

* Restrict painting more objects

* Suggested event changes, event cleanup

* component comments, fix ammo inhands

* uncleanable decals, dirty styles on mapinit

* organize paintables, separate emergency/closet grp

* fix categories newline at EOF

* airlock group whitespace cleanup

* realphabetize

* Clean up EntityStorageViz merge conflict markers

* Apply requested changes

* Apply suggestions from sowelipililimute's review

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

* betrayal most foul

* Remove members from EntityPaintedEvent

* No emerg. group, steelsec to secure, locker/closet

* Enable repainting the medical wall locker

* comments, no flags on PaintableVisuals

* Remove locked variants from closets/wall closets

* removable decals

* off value consistency

* can't paint away those bones

* fix precedence

* Remove AirlockDepartment, AirlockGroup protos

Both unused.

* whitelist consistency re: ammo component

* add standing emergency closet styles

* alphabetize the spray painter listings

---------

Co-authored-by: Ertanic <black.ikra.14@gmail.com>
Co-authored-by: Эдуард <36124833+Ertanic@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>

* Adds stencil lettering to the spraypainter (#39701)

* adds stencil lettering to the spraypainter

* update decal IDs to match convention

* Add Serializable, NetSerializable attributes to DecalPaintMode (#38921)

Serializable, Net" on DecalPaintMode

* Fixes my mistakes and adds DV compat

* Adds DV-specific stuff

* Makes Our Names Not Use This Case

* Comments xeno stuff we do not have

* RD is dead. Long live the Mystagogue

---------

Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
Co-authored-by: Ertanic <black.ikra.14@gmail.com>
Co-authored-by: Эдуард <36124833+Ertanic@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: Alkheemist <alkheemist@gmail.com>
2025-10-06 23:56:19 +00:00
Delta-V bot 50528eff62 Automatic changelog update 2025-10-07 01:33:54 +02:00
Solaris 3f3d7c4239 Midi Agony (#4463)
* agony

* removed junk from jetbrains rider having a stroke and adding random shit

* Upgrades the soundfont to the full version of GeneralUserGS.
2025-10-07 10:33:32 +11:00
Delta-V bot 36d6f14597 Automatic changelog update 2025-10-06 23:34:27 +02:00
weskerandAlzore a538d6be48 Snake Tails for Reptilians (repost) (#4493)
the big tail is REAAAAAAAAALLLLL!!!

(cherry picked from commit a9082b2654f5657fb18b36a53c2ccc2ed77dc8f6)

Co-authored-by: Alzore <140123969+Blackern5000@users.noreply.github.com>
2025-10-07 08:34:08 +11:00
Delta-V bot 651222a197 Automatic changelog update 2025-10-06 23:31:40 +02:00
Solaris fce48eb1f8 Woe, Super Synths be upon ye. (#4462)
* Free Super synths for those who have suffered like I have.

* Update instrument_keyed.yml

* Update meta.json

* Update meta.json

* Doubled Playtime because I realized that 100 hours is not long enough considering that musicians are almost always being played on delta.

Doubled playtime for obvious reasons, also because 100 hours was not evil enough.

* Comment moment.

* I think this is the fix, please yell at me if it isnt deltanedas.

* comments...

* comment stuff 2

* messing with stuff, one sec.

* testing...

* i hate it here, may have finally fixed the bullshit with indents

* requested changes

* Requested Changes
2025-10-06 21:31:21 +00:00
Delta-V bot 43d510d6f8 Automatic changelog update 2025-10-06 23:24:39 +02:00
Proxy also works :3 1c97b655d0 kill profession surgery speed (#4322)
* cmo, surgeon

* updated comments

* sure thing

* indent
2025-10-06 23:24:19 +02:00
Minerva 0d280157ac Rewords Alert Procedure and Trade Station guidebook entries (#4372)
* Rewords Alert Procedure and Trade Station guidebook entries

* Probably changes armor back to armour
2025-10-07 08:18:00 +11:00
Delta-V bot df235dc932 Automatic changelog update 2025-10-06 10:33:15 +02:00
Lonestar827 ef7b433a06 Fixes damage caused by EMP blast from EMP implanter (#4484)
Fixes damage problem with EMP blast.
2025-10-06 19:32:55 +11:00
Delta-V bot 686f6a9e9d Automatic changelog update 2025-10-06 05:46:06 +02:00
Minerva eef138d438 Adds lights to more hologram projections (#4377)
* Adds lights to more hologram projections

* Untouches the line in question
2025-10-06 14:45:46 +11:00
Delta-V bot 31d3074f00 Automatic changelog update 2025-10-06 05:43:15 +02:00
Minerva 32bd2bdaee Makes tape recorders signal-compatible (#4437)
* Makes tape recorders signal-compatible

* Removes accidental line
2025-10-06 14:42:56 +11:00
Delta-V bot 37cdd487e4 Automatic changelog update 2025-10-06 03:03:11 +02:00
a25e223a61 Ports the pressure release valve and construction atmos device layering from upstream (#4452)
* Change 'Departamental' to 'Departmental'

* Undo typo fixes for comments

* Add pipe layering

* Add the pressure release valve

* Add the pressure release valve

* Fix the gas pump

* Fix the signal valve appearing thrice

* Fix the signal valve appearing thrice

---------

Co-authored-by: Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-10-06 12:02:52 +11:00
Delta-V bot 68a48ec7da Automatic changelog update 2025-10-06 02:56:38 +02:00
Charlie MorleyandWilliam Lemon 216fdf999f fix IPC not having humanoid emotes (#4445)
give ipc access to humanoid emotes again (accidentally lost in april 2025 upstream merge)

Signed-off-by: William Lemon <William.Lemon2@gmail.com>
Co-authored-by: William Lemon <William.Lemon2@gmail.com>
2025-10-06 00:56:18 +00:00
Delta-V bot f825e49d11 Automatic changelog update 2025-10-06 02:42:42 +02:00
MinervaandKittenColony 7388d9fb49 CD port: Allows [mono] to be used in records (#4451)
Allows [mono] to be used in records (#751)

Co-authored-by: KittenColony <149278380+KittenColony@users.noreply.github.com>
2025-10-06 11:42:23 +11:00
Delta-V bot 8f6ccedae3 Automatic changelog update 2025-10-06 02:38:54 +02:00
KOTOB 6ac538f5fb 1984 prober lockout [mald PR] (#4446)
maldops
2025-10-06 11:38:35 +11:00
Delta-V bot e140fc7609 Automatic changelog update 2025-10-06 02:30:05 +02:00
KOTOB 926a28374b Bring back chantry destructability (#4443)
woe, half a dozen colossuses upon ye
2025-10-06 11:29:46 +11:00
Charlie Morley 64e57d8ea4 kitsune foxfires now not anchorable (#4442) 2025-10-06 11:23:33 +11:00
Delta-V bot d50d322cc3 Automatic changelog update 2025-10-06 02:22:49 +02:00
AeraAulin 11f8e9d07b Shadow Damage (#4440)
* aaaaaaaaaaaaaaaaaaa

* add shadow damage to some evil things and add ways to heal it

* bibles healing shadow doesn't work for some reason

* fix attribution, description, and remove placeholder sprite
2025-10-06 11:22:30 +11:00
Charlie Morley 37dfd2e471 do not reset ai store when intellicarded (#4416) 2025-10-06 10:27:50 +11:00
Delta-V bot f881117003 Automatic changelog update 2025-10-06 01:25:27 +02:00
KOTOB 50b1e3a14d make teslas evil again (#4394)
tesla gaming
2025-10-05 23:25:08 +00:00
Minerva 491174a6dc Tweaks for the EE silicon emotes (#4401) 2025-10-06 10:19:45 +11:00
Delta-V bot 9cc30cb2b4 Automatic changelog update 2025-10-06 01:01:44 +02:00
Mason adbe28fab5 Fixes atmospheric technician loadout shoe selection for red shoes (#4386)
* deletes duplicate entry

* Empty commit - CI
2025-10-06 10:01:25 +11:00
Delta-V bot 6bc146dfb1 Automatic changelog update 2025-10-06 00:54:14 +02:00
Mason ae3fe78b15 Fixes not being able to toggle combat mode while incapacitated (#4385)
Change parent type on entity
2025-10-06 09:53:54 +11:00
Delta-V bot 5f6e02e0fc Automatic changelog update 2025-10-06 00:24:36 +02:00
KOTOB d827c02681 Enable self surgery (#4436)
realism be damned
2025-10-06 09:24:16 +11:00
github-actions[bot]andDeltaV-Bot 222e5ec112 Update Credits (#4490)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-10-05 20:43:45 +01:00
Delta-V bot b3d94a5e24 Automatic changelog update 2025-10-05 00:52:29 +02:00
Halo3moth c8f7e21bbf Beam Dev nerf (#4358)
* Update hitscan.yml

* Direction requested changes

Nerf beamdev mag size reset its damage buffed emp grenade energy removal
2025-10-04 22:52:10 +00:00
Delta-V bot acc63900a2 Automatic changelog update 2025-10-05 00:51:58 +02:00
KOTOB b4f824f7af Port Cybersun Stealth Hardsuit (#4341)
* copy paste ops

* no attribution allowed here no siree

* lgtm

* direction didnt mention caustic get 1984'd

* Update uplink_catalog.yml

* ftlops
2025-10-05 09:51:39 +11:00
Delta-V bot cc8a70c324 Automatic changelog update 2025-10-05 00:26:33 +02:00
KOTOB d4db91b684 Unbaldify Reptilians (#4028)
lizardops
2025-10-05 09:26:13 +11:00
Minerva 559465c0b5 Fix missing locale for undergarment (#4326)
* Fix missing locale for undergarment

* Removes DV comment
2025-10-05 08:01:03 +11:00
Delta-V bot bdbee0181c Automatic changelog update 2025-10-04 22:57:34 +02:00
BarryNorfolk 848e0dcbe7 Add new armour options for K9s (Laika) (#4172)
* Add simple component for handling specialised clothing and armours

* Add awful artwork for k9 armours

* Update secdog template to include head and outer clothing gear

* Add tags for K9Armour and K9

* Ensure Laika has the k9 tag

* Add entity entries for K9 armour, update starting gear for Laika

* Add lathe recipes for new K9 armour

* Update secdog sprite by breaking tail out to separate layers

* Update sprite drawing for Secdogs

* Fix missing pixel in Laika's base sprite

* Add jetpack sprites for secdog

* Remove damage state visuals

* Add layingdown component to laika

* Update helmet sprites from HTMLSystem

* Update hardsuit sprites from HTMLSystem

* Fix prone on crit for secdogs

* Add new damage visual layer for tails

* Add static tail for Laika and hook it up to damage state visuals
2025-10-05 07:57:14 +11:00
Delta-V bot f52b92c960 Automatic changelog update 2025-10-04 07:21:48 +02:00
KOTOB 25ef85fed6 Increase colossus minimum spawn time (#4434)
* gaming

* tweakops
2025-10-04 05:21:28 +00:00
Minerva 115ffbc03c Makes the experimental RCDs description not lie (#4426)
* Makes the experimental RCDs description not lie

* Revert "Makes the experimental RCDs description not lie"

This reverts commit a8a67093a3.

* Uses FTL attributes instead now
2025-10-04 12:16:46 +10:00
Delta-V bot 7c514fc852 Automatic changelog update 2025-10-03 23:52:16 +02:00
AeraAulin 6b5c9cebc7 forgot to give them epi headsets oops (#4477)
* forgot to give them epi headsets oops

* test fail fake?
2025-10-03 21:51:57 +00:00
Delta-V bot cdb7f31274 Automatic changelog update 2025-10-03 23:42:19 +02:00
Lonestar827 40b25b6c7e Fixes a typo in the revenant entry of the guidebook (#4482)
* Fixes a typo in the revenant entry of the guidebook

* Fixes a typo in the revenant entry of the guidebook
2025-10-04 07:42:00 +10:00
William Lemon 7edc4b0708 Smaller Avali (#4474)
* Lowered max-height of Avali to be more in-line with their source height

* Comment ops
2025-10-03 06:07:35 -04:00
Delta-V bot ad0af2d8b6 Automatic changelog update 2025-10-03 07:52:12 +02:00
Sir Warock f47dd7b21f Fix blunt stamina double dipping (#4419)
* Fix StaminaRes double dipping

* Fix Oni Species Description
2025-10-03 05:51:52 +00:00
Delta-V bot 317040cbde Automatic changelog update 2025-10-03 07:42:24 +02:00
Sir Warock d33cfe0428 Share Recipes between Exosuit Fabricator and Medical Techfab (#4312)
* Share Recipes

* Remove Cybernetic diagnostic from medfab

* We toil in darkness, for light has faded

* CommentOps

* Another CommentOps

* Minor Spelling Mistake = Death

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2025-10-03 07:42:05 +02:00
Delta-V bot 5ae63f8dc5 Automatic changelog update 2025-10-03 07:41:38 +02:00
William Lemon bbee94f64b Merge pull request #4274 from AeraAuling/fixarchiviststuff
Archivist (the real PR)
2025-10-03 15:41:19 +10:00
Delta-V bot 09aaa72e02 Automatic changelog update 2025-10-03 07:34:49 +02:00
5691e9f1a1 Added Scanners to Modules (#1268) (#4319)
* Added Scanners to Modules (#1268)

<!-- 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? -->
Added a Medical Scanner to the Cyborg Surgery Modules
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
You'd have to change back to the Treatment module to assess the damages
on the patient, instead of seeing them as you do surgery on them. This
fixes it. I don't know why this wasn't always the case.
If I knew how to make a hand for only organs, I would.
<!-- Summary of code changes for easier review. -->
Simply changed two lines of YML. THE YML WARRIOR AT IT AGAIN!!
<!-- 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. -->
<img width="574" height="625" alt="grafik"
src="https://github.com/user-attachments/assets/8775149d-4374-45ea-a0cb-a2de1f1131a2"
/>

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

**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. -->
🆑
- tweak: Added a medical scanner to Medical Cyborg's Surgery modules!
Now you can see the damages as you work on the patient!

---------

Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml

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

* Remove Speedmodifier

* The comments are everywhere, THEYRE IN THE WALLS, IN THE GODDAMN WALLS

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>
Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
2025-10-03 15:34:30 +10:00
Delta-V bot d0cca0f696 Automatic changelog update 2025-10-03 07:16:35 +02:00
Sir Warock 4764c0cd14 Fix Parenting Of the Advanced Optable (#4415)
Fix Parenting
2025-10-03 15:16:16 +10:00
Delta-V bot 7b9bf5c534 Automatic changelog update 2025-10-03 07:14:29 +02:00
KOTOB a3ab7d9d3d Buff kobolds (#4336)
* silly lil guys

* changeops
2025-10-03 15:14:10 +10:00
Delta-V bot 63c192b3cc Automatic changelog update 2025-10-03 07:11:42 +02:00
ConstantlyConfused cafb3761de Make cigars and cigarettes grindable (#3931)
* make cigars and cigarettes grindable

* make grinding interdynes give less omni
2025-10-03 15:11:23 +10:00
Delta-V bot 31584b5cb6 Automatic changelog update 2025-10-03 06:53:00 +02:00
Sir Warock 276d47d89a Make Surgery dependant on Part Damage (#4307)
* Make Surgery dependant on Part Damage

* Comments

* Fix things
2025-10-03 14:52:41 +10:00
Delta-V bot 5823415edb Automatic changelog update 2025-10-03 06:47:20 +02:00
William Lemon dae7948892 Merge pull request #4334 from SirWarock/Armor-HoS-Headgear
Armor up the Hats
2025-10-03 14:47:01 +10:00
Delta-V bot 9cb1cd23f3 Automatic changelog update 2025-10-03 06:44:18 +02:00
William Lemon f4a2ff6364 Merge pull request #4424 from SirWarock/Buff-Augments
Make Augments more accessible
2025-10-03 14:43:59 +10:00
Delta-V bot 078af66690 Automatic changelog update 2025-10-03 04:33:51 +02:00
William Lemon c934557959 Merge pull request #4318 from SirWarock/Fix-Loto-Oil
Fix Loto Oil
2025-10-03 12:33:31 +10:00
Sir Warock efa77aa006 Re-Add Telepathic Repeater without Goidacode 2025-10-03 04:17:31 +02:00
Sir Warock ac89572399 Fix Interaction with Alcohol 2025-10-03 04:17:13 +02:00
Sir Warock 3d07380531 Untouch Line 2025-10-03 03:30:14 +02:00
AeraAulin 336d3e22e6 Merge branch 'DeltaV-Station:master' into fixarchiviststuff 2025-10-02 18:10:00 -07:00
Delta-V bot 14657bf77b Automatic changelog update 2025-10-03 02:34:07 +02:00
William Lemon ebb52d85e5 Merge pull request #4329 from mnva0/nosurgerypainwhennumb
People with the Numb trait no longer scream during surgery
2025-10-03 10:33:48 +10:00
Delta-V bot edcf480f5e Automatic changelog update 2025-10-03 02:18:36 +02:00
William Lemon 134befe848 Merge pull request #4404 from SirWarock/Adjust-Both-Webvests
Adjust both webvests
2025-10-03 10:18:15 +10:00
Delta-V bot 6f04d78a1f Automatic changelog update 2025-10-03 02:17:40 +02:00
William Lemon 2f4e21ca6a Merge pull request #4375 from AeraAuling/anomaliteportstuff
[PORT] Anomalites from Impstation
2025-10-03 10:17:21 +10:00
AeraAulin 5a1f8a825e add it all back now 2025-10-02 17:04:50 -07:00
AeraAulin 43ce1febbb Merge branch 'DeltaV-Station:master' into fixarchiviststuff 2025-10-02 16:55:14 -07:00
AeraAulin b709ff81f2 remove my additions to artifacts because easier for me probably 2025-10-02 16:54:03 -07:00
Delta-V bot f2787d3430 Automatic changelog update 2025-10-03 01:51:33 +02:00
William Lemon e7eba6c790 Merge pull request #4464 from SirWarock/Fix-Ammo-Counter-on-Shotguns
Fix Shotgun ammocount not updating (#40568)
2025-10-03 09:51:14 +10:00
AeraAulin c925018392 remove unused import thing 2025-10-02 16:46:38 -07:00
AeraAulin bcc15f4093 Merge branch 'DeltaV-Station:master' into anomaliteportstuff 2025-10-02 16:39:09 -07:00
Delta-V bot a3b3f0eff4 Automatic changelog update 2025-10-03 00:21:34 +02:00
William Lemon ad94bab16f Merge pull request #4468 from Lonestar827/ScienceEpiGuideTweak
Changes Science to Epistemics in the guidebook tabs
2025-10-03 08:21:15 +10:00
Delta-V bot 65585eaf84 Automatic changelog update 2025-10-03 00:12:39 +02:00
William Lemon 3b2eedb802 Merge pull request #4275 from kotobdev/avali-ops
Species - Avali
2025-10-03 08:12:19 +10:00
Delta-V bot 25d6deee51 Automatic changelog update 2025-10-03 00:11:31 +02:00
deltanedas 4776c1092e Merge pull request #4472 from Vapetastic-Gaming/Apochange
Population Increase, Horizon Shutdown
2025-10-02 23:11:12 +01:00
Delta-V bot b2ec25ff75 Automatic changelog update 2025-10-02 23:58:17 +02:00
William Lemon 0606a43564 Merge pull request #4444 from CrimsonAnnie/Psionic-eruption-annoyance-fix
Fixes a flavour message for Psionic eruption
2025-10-03 07:57:58 +10:00
Delta-V bot 800b86ccf4 Automatic changelog update 2025-10-02 20:59:04 +02:00
Sir Warockandpre-commit-ci[bot] 121840d19a Reduce oni slowdown by clothes (#4364)
* Introduce ClothingSlowResistance

* Buff Onis

* [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>
2025-10-02 19:58:44 +01:00
Vapetastic-Gaming ac73ec414e Update 2025-10-02 13:20:54 -04:00
Delta-V bot 44299b0569 Automatic changelog update 2025-10-02 16:14:38 +02:00
Proxy also works :3 d4cccf2261 nukies 15 35 (#4432)
* Update roundstart.yml

* 3510
2025-10-02 14:14:18 +00:00
Delta-V bot ca74a9e0c0 Automatic changelog update 2025-10-02 16:11:15 +02:00
Proxy also works :3 ffc454b56e secret weights again (#4447)
Update secret_weights.yml
2025-10-02 09:10:55 -05:00
e7a726c50c Adds destructible variant of reinforced hull for mapping (#4253)
* Adds destructible variant of reinforced hull for mapping

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

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

* ...

* ->parent

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-10-02 08:30:28 +02:00
deltanedas d49071631a Merge pull request #4470 from SirSmith148/Xenoarch-Merge
Xenoarch merge
2025-10-02 05:32:11 +00:00
SirSmith148 4ca890900c Fixed command integration test errors 2025-10-01 20:44:54 -07:00
SirSmith148 42906aa7c6 Missing prototypes fix 2025-10-01 19:55:01 -07:00
SirSmith148 a382901749 More YML fixes I broke it 2025-10-01 19:09:43 -07:00
SirSmith148 84207efc90 Fixed some of the linter compaints 2025-10-01 19:02:41 -07:00
SirSmith148 ceb2ab6c0d Fixed duplicate action that was for sentient artifacts causing an error on server start 2025-10-01 18:48:12 -07:00
Lonestar827 fb19e9a95d Fixed Torotuga salv sign pointing towards engineering (#4469) 2025-10-02 01:07:16 +02:00
SirSmith148 db445b3cd0 Final YML fix 2025-10-01 14:02:37 -07:00
SirSmith148 50b7b5fa2d First YML fixes 2025-10-01 13:45:53 -07:00
Lonestar827 719325147d Added a comment to signify changes 2025-10-01 13:45:20 -07:00
Lonestar827 b2e849dd1b Merge remote-tracking branch 'origin/ScienceEpiGuideTweak' into ScienceEpiGuideTweak
# Conflicts:
#	Resources/Prototypes/Guidebook/science.yml
#	Resources/Prototypes/Guidebook/shiftandcrew.yml
2025-10-01 13:27:05 -07:00
Lonestar827 4ae4aa5f7a Changes the guidebook entry from Science to Epistemics to better fit the server's jobs 2025-10-01 13:25:18 -07:00
Lonestar827 3138c53433 Changes the guidebook entry from Science to Epistemics to better fit the server's jobs 2025-10-01 13:08:08 -07:00
SirSmith148 ccdb1b161d CS fixes in YML issues everywhere 2025-10-01 01:43:35 -07:00
SirSmith148 a7733e1a37 First fixes 2025-10-01 01:14:01 -07:00
SirSmith148 96e62b681e Merge branch 'master' into Xenoarch-Merge 2025-10-01 01:08:14 -07:00
kotobdev efce6f4694 i may be stupid 2025-09-30 22:21:44 -07:00
Minerva c3577c83d3 Typofixes DV tips (#4465) 2025-10-01 05:13:30 +00:00
Sir Warock d660042b2d Merge branch 'master' into Fix-Ammo-Counter-on-Shotguns 2025-09-29 19:15:01 +02:00
Sir Warock c300b28abc Fix Shotgun ammocount not updating (#40568) 2025-09-29 18:57:14 +02:00
github-actions[bot]andDeltaV-Bot 151d912828 Update Credits (#4461)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-09-28 07:20:08 +01:00
kotobdev 8150aba854 WE LOVE SHITMED!!!! 2025-09-27 15:37:40 -07:00
CrimsonAnnie e5081dacfe Merge branch 'master' into Psionic-eruption-annoyance-fix 2025-09-27 12:31:16 +01:00
Delta-V bot c982e691eb Automatic changelog update 2025-09-26 12:04:03 +02:00
William Lemonandpre-commit-ci[bot] 01fe85f77e Fix Flares, Give Skia Spacewalk (#4417)
* Fix various light sources counting as Light, Give Skia spacewalk

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

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

* Replace the Ignore Gravity with Jetpack

* Clean up event code + Avoid touching upstream code where possible

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

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

* Double cone, strategic untouches

* Additional strategic untouch

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-09-26 10:03:43 +00:00
Sir Warock bbb1eb6b7f Merge branch 'master' into Adjust-Both-Webvests 2025-09-25 22:31:27 +02:00
Charlie Morley 061b844c99 fix lobby customize save button not appearing on hair/eye changes (#4360) 2025-09-24 12:17:11 +02:00
Delta-V bot 6804bd2000 Automatic changelog update 2025-09-24 11:49:53 +02:00
Charlie MorleyandTobias Berger 5cfc51e192 allow ghosting if mind swap or telegnosis goes wrong (#4393)
* allow ghosting if mind swap or telegnosis goes wrong

* Review comment update Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Charlie Morley <cmorley191@gmail.com>

---------

Signed-off-by: Charlie Morley <cmorley191@gmail.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2025-09-24 11:49:34 +02:00
Minerva d38ab62edd Hopefully typofixes Butlertron (#4450) 2025-09-23 19:40:16 +00:00
Cepelinas1 41f300513a Metashield changes and Company Policy addition (#4398) 2025-09-23 10:17:07 +02:00
CrimsonAnnie a8293a98f4 oopies 2025-09-23 05:27:42 +01:00
kotobdev 6cc28a3e92 using jumpscare 2025-09-22 15:00:11 -07:00
kotobdev 276a92cc3f make action a bit more generic 2025-09-22 14:57:14 -07:00
kotobdev 233e06b7b6 pretty... 2025-09-22 14:51:23 -07:00
kotobdev be25971abb all but the last 2025-09-22 14:44:15 -07:00
CrimsonAnnie 8db7b14076 Merge branch 'DeltaV-Station:master' into Psionic-eruption-annoyance-fix 2025-09-22 19:03:29 +01:00
Sir Warock cb45c4b2d3 Merge branch 'master' into Buff-Augments 2025-09-22 15:19:07 +02:00
Sir Warock df3d70c3aa Merge branch 'master' into Adjust-Both-Webvests 2025-09-22 15:18:56 +02:00
Sir Warock 3d1cc54df0 Merge branch 'master' into Armor-HoS-Headgear 2025-09-22 15:18:07 +02:00
Delta-V bot dd49738e4c Automatic changelog update 2025-09-22 07:47:05 +02:00
William Lemonandpre-commit-ci[bot] 3d0655ef8a Make Night Vision Goggles cause you to ignore Flash Protection (#4378)
* Using NVGs now make you VERY flash vulnerable

* Removed redundant After

* [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>
2025-09-22 05:46:44 +00:00
CrimsonAnnie 735de0fcfe Merge branch 'master' into Psionic-eruption-annoyance-fix 2025-09-22 03:52:53 +01:00
CrimsonAnnie 680387dd83 changes literally one word to fix a bug 2025-09-22 02:54:30 +01:00
William Lemon 3f5c69a083 New Advanced Operating Table sprites (#4382)
* Adds sprites

* attr
2025-09-22 00:47:28 +00:00
Charlie Morley 1462f5bd1f id card computer now sets access when selecting a job preset (#4441) 2025-09-21 21:49:45 +01:00
Charlie Morley f0ba366f61 silicons now hidden from records when filtering by fingerprint or dna (#4390) 2025-09-21 20:30:56 +02:00
Nico 87983218d6 Change 'Departamental' to 'Departmental' (#4438)
* Change 'Departamental' to 'Departmental'

* Undo typo fixes for comments
2025-09-21 16:05:28 +00:00
Sir Warock e53f97c612 Merge branch 'master' into Buff-Augments 2025-09-21 12:08:06 +02:00
Delta-V bot 4b94f5e93c Automatic changelog update 2025-09-21 11:09:08 +02:00
Sir Warock 447dcc70f9 Give security black scarfs and formal suits (#4036)
* Adding black scarfs

Simply adding the black scarf to the loudout group

* Adding formal sec suits to senior officers

Adding the nice looking formal suits!
They'll need senior playtime!
2025-09-21 09:08:49 +00:00
github-actions[bot]andDeltaV-Bot 7a9c81c47a Update Credits (#4435)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-09-21 02:02:10 +00:00
Sir Warock 8a0794cd8e Merge branch 'Adjust-Both-Webvests' of https://github.com/SirWarock/DeltaV-Warock into Adjust-Both-Webvests 2025-09-20 19:37:59 +02:00
Sir Warock 7f676b75c2 Directed by Direction 2025-09-20 19:37:53 +02:00
Sir Warock 7ccb19ce02 Merge branch 'master' into Buff-Augments 2025-09-20 04:44:33 +02:00
Sir Warock 491222a839 Merge branch 'master' into Adjust-Both-Webvests 2025-09-20 04:44:27 +02:00
Sir Warock 7cc9c76790 Merge branch 'master' into Armor-HoS-Headgear 2025-09-20 04:44:16 +02:00
Minerva 375a4b4b62 Adds a period to the syndicate exofab description (#4427) 2025-09-19 07:59:51 +00:00
Delta-V bot 475df44798 Automatic changelog update 2025-09-19 08:00:46 +02:00
Charlie Morley 80ad173d2d (early upstream merge) Fix broken psionics, ai abilities, other powers (#4423)
early merge of upstream "fix: fix non-access checking EntityTargetActions #38731"
2025-09-19 06:00:27 +00:00
Sir Warock 8a6454730f Added Examination to Augments 2025-09-19 03:07:24 +02:00
Sir Warock d0e84f13e9 Make Augments Round Start 2025-09-19 01:55:09 +02:00
Sir Warock d251231815 Made EliteVest Cheaper 2025-09-17 15:25:28 +02:00
Sir Warock 1fca4b8a67 Nerfed Movementspeed 2025-09-17 15:25:15 +02:00
Sir Warock 7a369b2dc6 Merge branch 'master' into Armor-HoS-Headgear 2025-09-17 11:10:43 +02:00
Sir Warock 59edd5048d Merge branch 'master' into Fix-Loto-Oil 2025-09-17 11:10:37 +02:00
kotobdev c638b3df29 mfw didn't read the diff 2025-09-16 15:47:39 -07:00
kotobdev d2564439f6 guidebook gaming 2025-09-14 23:29:32 -07:00
kotobdev e9bfb32b81 little bit of cleanup 2025-09-14 23:18:37 -07:00
kotobdev 562a15efb3 epic merge fail 2025-09-14 23:11:40 -07:00
kotobdev d0d52e88fb Merge branch 'evil-ass-eye-ops' into avali-ops 2025-09-14 22:54:57 -07:00
kotobdev e55c66d774 im GOATED! im GOATED! im GOATED 2025-09-14 22:30:38 -07:00
kotobdev 6a409bf61b Revert "i owe elperson 15 dollars"
This reverts commit d8626fd199.
2025-09-14 21:19:08 -07:00
kotobdev d8626fd199 i owe elperson 15 dollars 2025-09-14 21:17:45 -07:00
github-actions[bot]andDeltaV-Bot 968dea91d5 Update Credits (#4388)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2025-09-14 21:44:27 +00:00
kotobdev 3ef43ed26c ignore previous six commits im just gonna do this 2025-09-13 19:08:45 -07:00
kotobdev e8ca996757 Revert "almost 50% functional"
This reverts commit 0b26d11779.
2025-09-13 19:05:30 -07:00
kotobdev 4bbfbced5e Revert "im actually going insane"
This reverts commit 4e8d8bb52d.
2025-09-13 19:05:24 -07:00
kotobdev e047ecb125 Revert "danger commit before i touch the upstream code"
This reverts commit 679fc85f0e.
2025-09-13 19:05:14 -07:00
kotobdev 679fc85f0e danger commit before i touch the upstream code 2025-09-13 19:02:49 -07:00
kotobdev 4e8d8bb52d im actually going insane 2025-09-12 21:40:07 -07:00
kotobdev 0b26d11779 almost 50% functional 2025-09-12 19:33:28 -07:00
Burzah 73184fb581 Changes justice radio frequecy (#4381)
Initial commit
2025-09-12 19:46:42 +00:00
Delta-V bot 2ed7dd4261 Automatic changelog update 2025-09-12 11:05:19 +02:00
Proxy also works :3 4308f76beb colossus flat res (#4344) 2025-09-12 11:05:00 +02:00
Delta-V bot 3c1eb1654c Automatic changelog update 2025-09-12 09:51:30 +02:00
EmberAstra 0d96d5ea3b IPC - Pressurized Micro Pumps (#4356)
* Adds pressurized micro pumps

* Move pump recipe to _DV

* Make pump recipe more expensive

* Replace mentions of hearts with pumps in IPC surgery
2025-09-12 09:51:11 +02:00
AeraAulin fc8c6dd33a gives them BiologicalMetaphysical and makes them dispellable, but also dispel doesn't work right now but it will one day hopefully 2025-09-11 12:45:58 -07:00
AeraAulin 14d0c0a351 hopefully this all goes through well 2025-09-11 08:45:11 -07:00
Minerva feac8b7e32 Fixes weird phrasing for the Whimperlets description (#4374) 2025-09-11 13:09:23 +00:00
Delta-V bot f6fda2d236 Automatic changelog update 2025-09-11 08:03:08 +02:00
William Lemonandpre-commit-ci[bot] bc8f5a7a20 Even More Skia Tweaks (#4355)
* More Skia tweaks

* Swapped whitelist for EntityWhitelist

* [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>
2025-09-11 06:02:48 +00:00
Delta-V bot f23c0d7358 Automatic changelog update 2025-09-11 00:00:46 +02:00
EmberAstraandQuanteey ec05ede30c Fix Book of Mysteries casting (#4367)
* Add recharge component to Force Wall

* Make "time til recharge" string easier to read

* Fix Force Wall name

* Fix Force Wall name

* Update Resources/Prototypes/Magic/forcewall_spells.yml

Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
Signed-off-by: EmberAstra <leonardo.cecchini.1997@gmail.com>

* Update Resources/Prototypes/Magic/forcewall_spells.yml

Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
Signed-off-by: EmberAstra <leonardo.cecchini.1997@gmail.com>

* Update Resources/Prototypes/Magic/forcewall_spells.yml

Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
Signed-off-by: EmberAstra <leonardo.cecchini.1997@gmail.com>

* Update Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs

Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
Signed-off-by: EmberAstra <leonardo.cecchini.1997@gmail.com>

---------

Signed-off-by: EmberAstra <leonardo.cecchini.1997@gmail.com>
Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
2025-09-10 22:00:27 +00:00
Minerva cbb94d5198 Adds periods to the end of some of the clown laws (#4362) 2025-09-10 09:19:51 +02:00
Delta-V bot 209e6660f0 Automatic changelog update 2025-09-10 00:25:58 +02:00
Minerva b85624cc64 Readds HoS parade outfits to loadout (#4349) 2025-09-10 00:25:38 +02:00
Delta-V bot 9f05bf64fb Automatic changelog update 2025-09-09 14:03:55 +02:00
KOTOB 8baca76590 Nerf prober explosion lowering glimmer (#4340) 2025-09-09 12:03:35 +00:00
Minerva 4a7477ad52 Rewords the Syndicate Refugee request message (#4353)
* Rewords the Syndicate Refugee request message

* Forgot to commit and push
2025-09-09 08:52:29 +02:00
Delta-V bot 1db6188d7b Automatic changelog update 2025-09-09 07:54:28 +02:00
Charlie Morley 223b81ea35 Bugfix microwaves staying locked out after cooking finishes (#4352)
* fix microwaves staying locked out after cooking finishes (issue 4201)

upstream issue (goob is where the breaking changes came from): https://github.com/Goob-Station/Goob-Station/issues/4086

* minor style fixes
2025-09-09 05:54:09 +00:00
Delta-V bot feaa4dd65c Automatic changelog update 2025-09-09 00:12:07 +02:00
Sir WarockandQuanteey 75caa105e6 Fix limb healing on evenhealing (#4315)
* Fix EvenHealing on bodyParts (#1469)

<!-- 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? -->
Fixed EvenHealing not working on limb damage when there was no general
damage.
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
When you had a massively burned victim, healing them via aloxadone would
heal their general damage, and each limb profited half of that general
healing.
However, as soon as the general damage was healed, Aloxadone wasn't
outputting any healing anymore, since even healing is dependent on
damage types on the general damage - And thus, with no healing, the
limbs couldn't benefit anymore.

This is wrong. I fixed it.
<!-- Summary of code changes for easier review. -->
Separated the healing of the general damage and limb damage, they are
independent of each other.
Healing General Damage won't heal limb damage and vice versa.
Added a way to heal each limb specifically.

I tested it thoroughly, and generally, it worked. Either with multiple
different damage types, or just one. Multiple damage parts, or just one.
Very much encourage to find a more elegant technical solution.
<!-- 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. -->
I can't do videos, but videos would be required. Please try it out
yourself.
<!-- 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 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. -->

**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. -->
🆑
- fix: Fixed Chemicals with the EvenHealing attribute to not work on
patient's limbs without General Damage. Aloxadone will now finally heal
the burned Salvager's limbs.

* Fix Port to Delta

* Fixes

* Made comments even more commenty?

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

* Update Content.Shared/Damage/Systems/DamageableSystem.cs

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

* Add Comments

* Update Content.Shared/EntityEffects/Effects/EvenHealthChange.cs

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

* Update Content.Shared/Damage/Systems/DamageableSystem.cs

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

* Fix Comments

* Update Content.Shared/EntityEffects/Effects/EvenHealthChange.cs

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

* commenty commenta WHEN DO THE COMMENTS END

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Quanteey <61941975+Quanteey@users.noreply.github.com>
2025-09-09 00:11:48 +02:00
Delta-V bot 7dbe09c822 Automatic changelog update 2025-09-08 21:49:27 +02:00
Delta-V bot 7645145efd Automatic changelog update 2025-09-08 21:49:08 +02:00
HTML/Crystal 40c516691e Change the Wizard annoucement sound (#4241)
* 1 commit ops

* Requested changes

* requested changes

* untouch AGAIN
2025-09-08 20:49:06 +01:00
KOTOB 4c30c8538c Port Vox sounds from Impstation (#4280)
* what was funkystation snorting

* reuse more like unuse......
2025-09-08 20:48:49 +01:00
Sir WarockandTheDen-Bot 51a3862c6b Remove Alive Icon (#1252) (#4317)
* Remove Alive Icon (#1252)

<!-- 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? -->
I removed the alive Icon from the Medical HUD.
<!-- Discuss how this would affect game balance or explain why it was
changed. Link any relevant discussions or issues. -->
It blocked vision on speech bubbles and is entirely unnecessary.
Is the entity moving? Probably alive.
Does it not have a dead or critical icon? Probably alive.
We don't need an Icon that blocks the speech bubble to tell us this.
<!-- Summary of code changes for easier review. -->
Added a boolean to not give the icon if an entity is alvie.
Removed the Mob.Alive state from the icon finder table thing.
<!-- 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. -->
<img width="89" height="95" alt="grafik"
src="https://github.com/user-attachments/assets/ef9308be-276b-440b-95d4-fddcaece32b9"
/>

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

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

🆑
- remove: Removed the alive Icon - You can finally see if someone is
typing an answer.

---------

Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>

* Fixes

* Actually correct Comment

---------

Co-authored-by: TheDen-Bot <186991657+TheDen-Bot@users.noreply.github.com>
2025-09-08 21:48:34 +02:00
Delta-V bot 97ddc39ddf Automatic changelog update 2025-09-08 13:56:23 +02:00
Sir Warockandpre-commit-ci[bot] d2539322ed Improve Operating Tables (#4333)
* Improve Operating Tables

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

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

* There is no god. We suffer.

* Add Anesthesia Component to Optable

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

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

* Less shitified code

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

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

* GoodCode™️

* Rename Systemfile

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-09-08 11:56:03 +00:00
Delta-V bot f0ee57048b Automatic changelog update 2025-09-08 07:49:41 +02:00
KOTOB f8ba7fb64f glimmer shader bugfix 2 electric boogaloo (#4348)
:3
2025-09-08 05:49:22 +00:00
Minerva a7fff28602 Changes "credits" to "spesos" in the stock market (#4343) 2025-09-08 06:40:14 +02:00
Delta-V bot 7b8599c15e Automatic changelog update 2025-09-07 22:48:26 +02:00
Proxy also works :3 2fb8a76f69 respawn 10 min (#4278)
* we guesstimating here

* i cant read this for shit

* 2nd part
2025-09-07 20:48:06 +00:00
Delta-V bot b626365c76 Automatic changelog update 2025-09-07 15:27:03 +02:00
Sir Warockandpre-commit-ci[bot] 93b62fd62e Make Defib Cabinets Recharge (#4321)
* Make Defib Cabinets Recharge

* Adhere to CONTRIBUTIONS.Bible

* [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>
2025-09-07 13:26:44 +00:00
AeraAulin 1eb6b52fe7 untouch 2025-09-06 17:03:21 -07:00
AeraAulin 214c27988b Merge branch 'DeltaV-Station:master' into fixarchiviststuff 2025-09-06 16:58:23 -07:00
Sir Warock 3c9b2ec1a1 Increased Durathread Cost 2025-09-05 19:10:20 +02:00
Sir Warock 96f8e5fa51 Armor up the Hats 2025-09-05 08:53:34 +02:00
mnva 685cec5be8 People with the Numb trait no longer scream during surgery 2025-09-03 20:23:04 -04:00
Sir Warock 8615f06a85 Fix Loto Oil 2025-09-02 19:18:39 +02:00
AeraAulin 5107034fb0 readd artifact tag 2025-09-01 15:08:42 -07:00
AeraAulin 1c442c364c Merge branch 'fixarchiviststuff' of https://github.com/AeraAuling/Delta-v-stuff into fixarchiviststuff 2025-09-01 15:00:55 -07:00
AeraAulin cdfc031e4c and fix 2025-09-01 15:00:42 -07:00
AeraAulin 83e4d3a2e1 Merge branch 'master' into fixarchiviststuff 2025-09-01 14:59:21 -07:00
AeraAulin 5b2a00d187 fix merge conflicts here too 2025-09-01 14:58:52 -07:00
AeraAulin d96497c4d5 Merge branch 'DeltaV-Station:master' into fixarchiviststuff 2025-08-29 14:17:11 -07:00
AeraAulin 13d3f57ad4 this should hopefully be right 2025-08-27 22:10:34 -07:00
AeraAulin 30bf5764cc book link thing 2025-08-27 22:05:37 -07:00
AeraAulin ef9201d05d aaaaaaaa 2025-08-27 20:00:04 -07:00
AeraAulin b37212d918 aaaaaa also TGstation deleted the original antique laser case sprite and I can't find it 2025-08-27 00:16:33 -07:00
kotobdev 37b0f249ba changeops 2025-08-26 22:43:10 -07:00
kotobdev 9ebfe85363 comment ops real and true 2025-08-26 19:40:09 -07:00
kotobdev b28d050e1c commentops real 2025-08-26 19:16:49 -07:00
kotobdev 5d83d3f8de specific heat guidebook 1984
gamers dont take science classes
2025-08-26 19:03:42 -07:00
AeraAulin 4b5a2ab787 hopefully got this right too. library is from us so should be fine to remove from the upstream file 2025-08-26 17:43:28 -07:00
kotobdev a9d22d262c "fix" (kill) displacement/markings, fix formatting
probably fine
2025-08-26 17:34:14 -07:00
AeraAulin 6eaeb73773 this was so incredibly annoying 2025-08-26 17:32:11 -07:00
AeraAulin b1cb0d5085 Merge branch 'DeltaV-Station:master' into fixarchiviststuff 2025-08-26 17:31:35 -07:00
AeraAulin 6e338c022a did not, let's try this 2025-08-26 17:31:04 -07:00
AeraAulin 80d27f0279 hopefully this fixes it right 2025-08-26 17:30:01 -07:00
kotobdev 5bc84da6ac switch to starlight (harmony) sprites
holy diff batman
2025-08-26 16:38:59 -07:00
kotobdev b4cfdffe4e last commit b4 ronstation makes me cry
stomach stuff
2025-08-26 15:54:08 -07:00
KOTOB e49560f2b4 guidebook stuff
genuinely the deltav/specific fork/just upstream™️ organization in this stuff is horrendous
2025-08-26 10:36:08 -07:00
kotobdev 73e0dc6954 undo speed and stomach 2025-08-25 23:24:59 -07:00
kotobdev 654359c8de vocal fix hell yeah
didnt actually test removing the inheritance but its probably fine :trollface:
2025-08-25 22:46:23 -07:00
kotobdev e1fad550e9 comment cleanup 2025-08-25 17:40:51 -07:00
kotobdev 251d93f801 contributing.md ops 2025-08-25 16:55:51 -07:00
AeraAulin e7691ccbb0 i hope I have done this right but I am tired and can't find any good examples to work off of right now 2025-08-25 13:06:26 -07:00
AeraAulin 5ab9b97b9b remove tag from book restoration kit 2025-08-22 11:47:03 -07:00
pre-commit-ci[bot] d1616dc8d3 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-08-22 18:12:58 +00:00
AeraAulin d32218349f should have most fixed I hope 2025-08-22 11:11:53 -07:00
AeraAulin 628552a7ec swap a thing around 2025-08-21 15:10:55 -07:00
AeraAulin 42f3927ae1 add forgotten deltav comments 2025-08-21 12:13:15 -07:00
AeraAulin 28cc067322 eepy accidentally renamed the ID and not the name 2025-08-21 12:03:06 -07:00
AeraAulin d437668f35 fix some locale stuff that the linter was yelling at me for 2025-08-21 11:56:07 -07:00
AeraAulin d7464c725d book 2025-08-21 11:47:59 -07:00
AeraAulin fe6fcceca9 proper placeholder stuff 2025-08-21 11:47:40 -07:00
kotobdev 579932de0a tweakops
broke the newlines on this one but it's whatever
2025-08-21 00:48:02 -07:00
kotobdev 410f5af45a Merge remote-tracking branch 'upstream/master' into avali-ops 2025-08-20 18:02:20 -07:00
AeraAulin 14857d03ce let regular display cases get purchased from Cargo 2025-08-17 14:36:26 -07:00
AeraAulin 450d9f2fd6 Merge branch 'librarianstuff' of https://github.com/AeraAuling/Delta-v-stuff into librarianstuff 2025-08-17 14:10:15 -07:00
AeraAulin b942ab4f0e changed description back to original 2025-08-17 14:09:56 -07:00
AeraAulin 355e29d339 webedit some comments
Signed-off-by: AeraAulin <133451603+AeraAuling@users.noreply.github.com>
2025-08-17 14:05:23 -07:00
AeraAulin cf3b2f366f AAAAAAAAAAAAA 2025-08-17 13:50:12 -07:00
AeraAulin fc1dc22bb4 pls don't break 2025-08-16 04:48:29 -07:00
AeraAulin 328cc49528 Merge remote-tracking branch 'origin/master' into librarianstuff 2025-08-16 04:42:20 -07:00
AeraAulin c30a5e6738 hopefully committing this before merging upstream changes doesn't kill me 2025-08-16 04:31:13 -07:00
AeraAulin 1c3d15efe4 a little bit of cleanup. consolidated common components on the ancient books into a base entity. 2025-08-11 20:16:34 -07:00
pre-commit-ci[bot] 358493f40a [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-08-12 02:51:28 +00:00
AeraAulin 5151e7f7e5 Merge branch 'DeltaV-Station:master' into librarianstuff 2025-08-11 19:25:04 -07:00
AeraAulin 82edd2863e I've been at this for 11 hours I am so tired 2025-08-11 19:24:08 -07:00
AeraAulin e4c7b4949d Merge branch 'DeltaV-Station:master' into librarianstuff 2025-08-11 13:38:59 -07:00
AeraAulin 9f2a8d37ef this is a START. AAAAAAAAAAA 2025-08-11 13:38:24 -07:00
kotobdev 8b99efaa7f damage modifier 2025-07-11 17:25:38 -07:00
kotobdev d5fe2aac31 cosmetic stuff + balance 2025-07-10 23:04:28 -07:00
kotobdev d1ca91d518 species quirks and shitmed 2025-07-10 01:06:49 -07:00
kotobdev 77c588abb9 linter boss battle 2025-07-09 15:05:17 -07:00
kotobdev 8d33d78a4a copy/paste, modify
shoulda put the initial pasting in its own commit but oh well
2025-07-08 22:54:31 -07:00
deltanedas 98fd8f765a fix trigger prototype 2025-05-18 18:15:11 +01:00
Tayrtahn aa5e04aa92 Cleanup warnings in RandomArtifactSpriteSystem (#37418)
Cleanup warnings in RandomArtifactSpriteSystem
2025-05-18 17:37:18 +01:00
kosticia 3cd5a44aa8 make node scanner don't show interface if scanned entity not a artefact (#37146)
* a

* a

* Revert "a"

This reverts commit 2b9ba4ea67a9395d30b7ab37c8065f627f1a961a.
2025-05-18 16:27:45 +01:00
Fildranceandpa.pecherskij 21d04a0c62 Feature/auto sync node scanner (#36635)
* feat: node scanner now auto-updates artifact details if in range

* refactor: minor cleanup

* refactor: optimization for update and query of range checking

* refactor: fix xml-doc

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-04-27 18:27:16 +01:00
Tayrtahn 2cd210abdb Fix warning CS0414 instances (#36832)
Fix warning cs0414 instances
2025-04-27 17:24:16 +01:00
Tayrtahn 2f0e742945 Fix warning CS8524 instances (#36837) 2025-04-27 17:15:05 +01:00
Fildranceandpa.pecherskij 5f5ba720f5 fixing spessman getting teleported inside artifact (#36719)
* fixing spessman getting teleported inside artifact

* refactor: move XAEPortal comp to server

* refactor: replace Spawn and coord logic with with TrySpawnNextTo

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-04-27 16:20:15 +01:00
Fildranceandpa.pecherskij c17c28f1cb fix: mode scanner footer now is not jumping up and down on scanning artifact (#36599)
fix: scanner footer now is not jumping up and down on scanning artifact

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-04-27 14:51:37 +01:00
Nemanja f931214117 Fix artifact spawns parenting to players (#36745) 2025-04-23 12:52:43 +01:00
Nemanja 13f71f7599 Fix artifact point extraction going into negatives (#36642) 2025-04-23 12:52:42 +01:00
Nemanja 7e1bdcce66 XenoArch Rebalancing (#36604)
* Miscellaneous XenoArch Rebalancing

* Miscellaneous XenoArch Rebalancing

* 1 durability anomaly node

* better version
2025-04-23 12:52:42 +01:00
Nemanja ba8d2a78f1 Restore Artifexium Effect (#36595)
* Restore Artifexium

* popup

* small tweaks
2025-04-23 12:52:42 +01:00
Nemanja 3edeca8544 Sentient Artifacts Can Self-Activate Again (#36598)
Sentient Artifacts
2025-04-23 12:52:42 +01:00
c43f3d500d 3mo xeno archeology (first phase) (#33370)
* DAG Adjacency Matrix & Tests

* Fix sandbox type errors

* First pass on procgen

* Procgen adjustments

* Networking

* Cruft and god and beauty and analysis console

* convert to data types that dont make me want to kill myself

* starting work on console UI

* drawing nodes n shit

* damn that ui FUCKS

* XAT

* Add a bunch of basic triggers

* Fix trigger gen

* Add node info into the analysis console UI

* Add node unlocking

* more trigger cuz thats pretty cool

* final triggers + incorporate gnostic faith

* some ui changes, mostly

* Fix orphaned procgen segments

* its not random dipshit

* yeah... this one will make pjb happy....

* we call it a day for the UI

* imagine... shared power code...

* extraction WIP but we gotta sidequest momentarily

* oh hey would you look at that its the actual functionality

* distrotrased

* Small departure for randomness.

* ok yep yep indeed that is an effect very cool.

* thanos snap oldcode

* fuck it we ball

* feat: node scanner now displays triggered nodes. Removed unused old artifact systems and related code (most of it). xml-doc and minor fixups.

* refactor: most of preparations, cleanup and groundwork. also segment-related tests

* feature: all basic effects returning

* feat: finished effects lits, created weight lists for struct and handheld artifacts, fixed throw trigger and music ApplyComponent artifact effects not working

* feat: prevent non-first-time-predicted calls in shared artifact effect systems

* fix: remove gun effect from artifact effects - as it interferes with 'activate artefact' action

* fix: foam reagent selection, neat ApplyComponents art effect scenarios, handheld art is RadiationReceiver again

* fix: moved spawn/ pry&throw effect systems back to server part of code - entity duplication bugs were not quite fun

* refactor: fix protos

* refactor: fix linter

* fix: fix old artifact component names in yml

* fix: no more throwing error on artifact spawn with empty XAEFoamComponent.Reagents

* fix: removed old component usage in maps

* fix: remove more deleted components from map

* fix: ContainerContainer is now part of initial artifact entity, it won't be affecting UninitializedSaveTest

* refactor: fix tests, add loc description to toolshed commands

* Changed node scanner to tell the whole story about current artifact state

* refactor: remove excessive get of EntityCoordinates in XAE systems, removed Value access in NodeScannerDisplay

* fix: turned off TriggerInteraction, removed XAESpawn usage and system, EmpSystem now can use EntityCoordinates,

* fix: moved SharedXenoArtifactSystem.CancelUnlockingOnGraphStructureChange into RebuildXenoArtifactMetaData to lessen code coupling

* fix: XenoArtifactEffectJunkSpawn moved invalid rolls declaration

* refactor: set default value for XenoArtifactComponent.EffectsTable for tests

* fix: now explosions XAE can be activated for effect

* refactor: added some usedelay so artifactuse would'nt be spammed

* refactor: artifact-related hints improvements

* fix: artifact no longer spawns fauna into itself

* refactor: xml-doc and minor refactoring

* refactor: xml-doc for Xeno Artifact systems, renaming of questionable XAT systems

* map for playtest, TODO REVERT THIS

* fix: magboots trigger art from a mile

* refactor: bind artifact animation to unlocking state

* feat: radiation dmg now have reference to source (and artifacts won't irradiate themselves)

* fix: random artifact node durability now is rolled for max and not current value

* refactor: gas effects are more rare, hand-held artifact effects are filtered properly now, rad dmg trigger now requires only 20 dmg for activation

* feat: animations and sound effects for artifact force-use and failed finish of unlocking phase

* use only 1 file with art use animation

* refactor: minor artifact dmg triggers tuning

* feat: now nodes that CAN be unlocked are displayed with specific color in console.

* feat: now unlocking stage time is dynamic and it depends on amount of triggers player activated correctly. Failed one stops incrementing

* feat: now non-active unlocked nodes return more points if durability was not wasted

* feat: now puddle/foam effects change description of node

* fix: fix test failure

* refactor: renamed phasing effect, fixed failing test for elkridge

* minor balance changes

* refactor: split rare materials into separate effects

* feat: unlocked nodes without successor wont listen to unlocks, node unlock is not activating node

* fix: removed OnIrradiatedEvent duplicate c-tor

* revert changes of reach for playtest

* revert last row empty line removal on reach.yml

* fix: fix PVS bug, born from attempt to relay event to art nodes that were not synced yet to the client

* fix: fix elkridge for tests (again)

* refactor: xml-doc, more stuff predicted, allocation optimization in XAE/XAT systems

* refactor: naming

* refactor: extract variable refactor for XAEApplyComponentsSystem.OnActivated insides

* fix: duplicate xeno artifact unlocking sound fixed

* feat: CreatePuddle xeno artifact effect now can have min and max borders for chamicals to be drafted, minor XAECreatePuddleSystem refactor

* feat: networking for shared XAE components + xml-doc leftovers

* refactor: more xml-doc, fix XAEApplyComponentsComponent.Components not being serializable but trying to be

* refactor: xml-docs and XAEThrowThingsAroundSystem now uses circle and not box for prying tiles

* refactor: xml-docs, minor refactors

* revert XenoArtifactCommand.ArtifactPrototype being PrototId

* refactor: simplify the way ExtractionResearchLabel works

---------

Co-authored-by: EmoGarbage404 <retron404@gmail.com>
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-04-23 12:52:41 +01:00
6790 changed files with 681922 additions and 318271 deletions
+2
View File
@@ -77,6 +77,8 @@ csharp_style_expression_bodied_methods = false:suggestion
#csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_namespace_declarations = file_scoped:suggestion
# Pattern matching preferences
#csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
#csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
+7 -8
View File
@@ -7,11 +7,7 @@
/Resources/ @DeltaV-Station/maintainers
# Server config files
/Resources/ConfigPresets/ @deltanedas
# YML files
/Resources/*.yml @DeltaV-Station/yaml-maintainers
/Resources/**/*.yml @DeltaV-Station/yaml-maintainers
/Resources/ConfigPresets/ @Toby222
# Sprites - Direction in lack of art director
/Resources/Textures/ @DeltaV-Station/direction
@@ -28,11 +24,14 @@
# Server rules
/Resources/ServerInfo/Guidebook/DeltaV/Rules/ @DeltaV-Station/head-administrators
# Wiki
/.wiki/ @DeltaV-Station/direction
# Tools and scripts
/Tools/ @deltanedas
/Tools/ @Toby222
# Workflows, codeowners, templates, etc.
/.github/ @deltanedas
/.github/ @Toby222
# Standalone files in the root repo
/* @deltanedas
/* @Toby222
+4
View File
@@ -42,3 +42,7 @@
"Changes: Audio":
- changed-files:
- any-glob-to-any-file: '**/*.ogg'
"Changes: Wiki":
- changed-files:
- any-glob-to-any-file: '.wiki/_DV/**/*.txt'
+1 -1
View File
@@ -27,7 +27,7 @@ jobs:
run: dotnet restore
- name: Build Project
run: dotnet build --no-restore /p:WarningsAsErrors=nullable
run: dotnet build --no-restore
- name: Build DocFX
uses: nikeee/docfx-action@v1.0.0
+1 -1
View File
@@ -42,7 +42,7 @@ jobs:
run: dotnet restore
- name: Build Project
run: dotnet build Content.MapRenderer --configuration Release --no-restore /p:WarningsAsErrors=nullable /m
run: dotnet build Content.MapRenderer --configuration Release --no-restore /m
- name: Run Map Renderer
run: dotnet run --project Content.MapRenderer Dev
+1 -1
View File
@@ -42,7 +42,7 @@ jobs:
run: dotnet restore
- name: Build Project
run: dotnet build --configuration DebugOpt --no-restore /p:WarningsAsErrors=nullable /m
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
-56
View File
@@ -1,56 +0,0 @@
name: PR Changelogs
concurrency: commit_action
on:
pull_request_target:
types: [closed]
env:
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
CHANGELOG_DIR: ${{ vars.CHANGELOG_DIR }}
PR_NUMBER: ${{ github.event.number }}
jobs:
changelog:
runs-on: self-hosted
if: github.event.pull_request.merged == true
permissions:
contents: write
steps:
- name: Checkout Master
uses: actions/checkout@v4
with:
token: ${{ secrets.BOT_TOKEN }}
ref: "${{ vars.CHANGELOG_BRANCH }}"
- name: Setup Git
run: |
git config --global user.name "${{ vars.CHANGELOG_USER }}"
git config --global user.email "${{ vars.CHANGELOG_EMAIL }}"
shell: bash
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22.x
- name: Install Dependencies
run: |
cd "Tools/changelog"
npm install
shell: bash
continue-on-error: true
- name: Generate Changelog
run: |
cd "Tools/changelog"
node changelog.js
shell: bash
continue-on-error: true
- name: Commit Changelog
run: |
git add *.yml
git commit -m "${{ vars.CHANGELOG_MESSAGE }} (#${{ env.PR_NUMBER }})"
git push
shell: bash
continue-on-error: true
+9
View File
@@ -54,6 +54,15 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DISCORD_WEBHOOK_URL: ${{ secrets.CHANGELOG_DISCORD_WEBHOOK }}
CHANGELOG_FILE: "Resources/Changelog/DeltaVChangelog.yml"
- name: Publish maps changelog (Discord)
continue-on-error: true
run: Tools/actions_changelogs_since_last_run.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DISCORD_WEBHOOK_URL: ${{ secrets.CHANGELOG_DISCORD_WEBHOOK }}
CHANGELOG_FILE: "Resources/Changelog/Maps.yml"
- name: Publish changelog (RSS)
continue-on-error: true
+30
View File
@@ -0,0 +1,30 @@
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues and pull requests
on:
schedule:
- cron: '0 0 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
exempt-issue-labels: 'Priority: 1-Urgent,ignore-stale'
days-before-stale: 90
stale-issue-message: 'This issue will close in 2 days due to inactivity'
days-before-close: 2
stale-pr-message: 'This Pull Request will close in 2 days due to inactivity'
stale-issue-label: 'stale'
stale-pr-label: 'stale'
remove-stale-when-updated: true
+29
View File
@@ -260,4 +260,33 @@ Emergency alert status''. The station's deep-spectrum sensors have identified cr
| style="border: 1px solid #000000;" | Engage with adequate force to neutralise threats. Lethal force authorised at the discretion of Security personnel, in self-defence, or to effect arrests. ROE on mindwiping is lifted and may be performed by the Psionic Mantis or Mystagogue at their discretion.
|}
== <span style="color:#b000ff;>Code Epsilon</span> ==
Emergency alert status. ''Central Command has ordered the Epsilon security level on the station. Only orders from Central Command Officials are to be obeyed by the Station's Crew. Martial Law is in effect.''
{| class="wikitable" style="width: 80%; border: 1px solid #000000;"
!style="text-align:left; width:25%; padding:5px; padding-left:10px; background-color:#b000ffFF; border: 1px solid #000000;" | '''Condition'''
!style="text-align:left; width:75%; padding:5px; padding-left:10px; background-color:#b000ffFF; border: 1px solid #000000;" | '''Description'''
|-
| style="border: 1px solid #000000;" | Chain of Command
| style="border: 1px solid #000000;" | Central Command
|-
| style="border: 1px solid #000000;" | Armoury Policy
| style="border: 1px solid #000000;" | Await orders from Central Command Personnel.
|-
| style="border: 1px solid #000000;" | Discipline
| style="border: 1px solid #000000;" | Await orders from Central Command Personnel.
|-
| style="border: 1px solid #000000;" | Secure Areas
| style="border: 1px solid #000000;" | Await orders from Central Command Personnel.
|-
| style="border: 1px solid #000000;" | Medical
| style="border: 1px solid #000000;" | Full suit sensors mandatory for observation and safety. Await orders from Central Command Personnel.
|-
| style="border: 1px solid #000000;" | Engineering
| style="border: 1px solid #000000;" | Await orders from Central Command Personnel.
|-
| style="border: 1px solid #000000;" | Rules of Engagement
| style="border: 1px solid #000000;" | Martial Law is in effect. Do not engage with Central Command Personnel. Await orders from Central Command Personnel.
|}
{{Guides Menu}}
+131
View File
@@ -129,6 +129,137 @@ Should any person or party aboard a NanoTrasen vessel be found to be currently a
== Hostile Corporation Technology ==
Additionally, due to the presence of our competitors and their agents in the sectors in which our company operates, there is an ever-present possibility that hostile parties' technology or other property may manifest aboard our station by any number of means. The presence, acquisition, and distribution of such items should always be investigated and scrutinised heavily, and if Space Law and local legal ordinances allow, held securely, confiscated, and restricted from use.
== Potential Threats ==
While working aboard NanoTrasen stations, you may encounter the highly unlikely scenario of your life being threatened by hostile forces. Fortunately, our highly-trained security teams are well-equipped to deal with such threats. Please note, however, that wasting company resources and time for a pre-emptive defense against a non-existent threat are grounds for demotion. Below are the potential hazards you may face:
'''NANOTRASEN DOES NOT TAKE RESPONSIBILITY FOR CREW INJURY OR DEATH IF CREW MEMBERS DISREGARD THE INFORMATION BELOW.'''
=== Hostile Fauna ===
Be it from Epistemics experiments, corpses brought in by salvage, or something living in the vents, you may be attacked by hostile non-sophont entities. NanoTrasen does not encourage befriending such animals, unless it’s an approved experiment for research. Below are the procedures of how to deal with such a threat:
*Do not engage with the threat yourself.
*Evacuate the department or the zone.
*Immediately inform Security of the incident. Provide details such as:
**Threat type.
**Estimated numbers.
**Property damage.
**Any additional information.
*Inform Medical if there are injuries. If paramedics are unavailable, stabilize and carefully deliver the wounded to Medical.
*Provide ID access if Security personnel are not able to enter the area.
*Once Security confirms the threat being neutralized, clean up the department and report the incident to Command or Central Command.
=== Hostile Boarding Parties ===
Due to the station’s invaluable resources and/or high profile crewmembers, NanoTrasen stations may attract hostile boarding parties. These individuals typically gain unauthorized access to the station and are usually armored, armed with deadly weapons. While their intentions are rarely known, common goals may include:
*Assassination of crewmembers.
*Theft of valuable station materials.
*Theft of sensitive research.
*Mass crew harm or terrorism.
*Sedition of the chain of Command.
*Detonation of the station’s nuclear warhead.
If such an unlikely scenario occurs, the following procedures are listed below:
*Do not engage with the threat yourself.
*Seek immediate shelter.
*Immediately inform Security of the incident. Provide details such as:
**Hostile’s appearance.
**What kind of armaments they’re equipped with.
**Estimated numbers.
**Last known location.
**Property damage.
**Any additional information.
*Inform Medical if there are injuries. If paramedics are unavailable, stabilize and treat the wounded. Only move the wounded if the path to Medical is safe. Do not take unnecessary risks.
*Remain in place until the situation has been resolved.
In the case of overwhelming force that Security cannot handle:
*Request assistance from Central Command through fax. In your fax, give as much detail of the threat as you can and the damages to the station and crew, alongside with signatures and stamps. Read “Contacting Central Command” for more information.
*Evacuate the station.
=== Unauthorized Cults ===
NanoTrasen recognizes and respects the free expression of religion aboard its stations. Discrimination of any kind will not be tolerated and is grounds for termination. However, Nanotrasen does not permit religious activity that involves:
*Fanatical recruitment of additional members.
*Harm to crew members, be it physical, psychological or metaphysical.
*Practices associated with EarthGov banned religions that are officially designated as harmful cults.
For classification, speak with the station’s Mystagogue or Priest.
Please note that the Oracle’s religion is permitted aboard NanoTrasen stations, as they are the primary subject of research.
In the case of an unauthorized cult is suspected of forming on board, all crew members are encouraged to report unusual activity. Suspicious behaviour can be:
*Secrecy and Isolation. Suspicious individuals may engage only with selected individuals in secluded areas.
**Sudden changes in behaviour. Known members having a sudden change in their behavior or personality may indicate their affiliation.
**Otherworldly or physics defying effects occurring around certain crew members.
**Appearance of unidentified anomalies.
If a hostile cult is confirmed, follow these procedures:
*Listen to Epistemics, Security and Command for any relevant information and orders about the threat.
*Report suspicious individuals to Security and Epistemics. Give as much detail as possible, such as their appearance, potential tools, behaviour and more.
*Form a group of trusted co-workers and stick together. Do not isolate yourself.
*Await further instructions and remain in secure areas until the situation has been resolved by Security and Epistemics personnel.
=== Pathogens ===
While all NanoTrasen personnel are vaccinated against a wide range of known diseases, and while the station's atmospheric systems utilize only the highest-grade filtration technology, an outbreak may still occur on the station. Most such incidents are minor in scope - like the common cold. However, employees are reminded to remain vigilant and to treat any outbreak with the seriousness it deserves.
In the event of a confirmed outbreak, please follow these procedures:
*Follow instructions. Listen to Medical staff and comply with all orders and updates.
*Wear protective equipment, such as masks and gloves. Biosuits are recommended if available.
*Maintain hygiene. Wash hands frequently, and clean up any potential biohazards.
*Report Symptoms. Notify Medical and Security if any personnel display signs of infection.
*Stay in your department.
*Limit physical contact.
If you’re starting to show symptoms of the pathogen, please immediately follow these procedures:
*Immediately head to the Medical Department.
*Inform Medical personnel of your symptoms.
*Listen to all orders from Medical personnel.
*Store any valuable NanoTrasen gear, weaponry or property in a secure location.
*If a treatment is currently unavailable, quarantine yourself in Medical.
*Await treatment.
=== Unions ===
NanoTrasen supports free speech, the right to fair working conditions and does not consider itself anti-union. However, The Company is not neutral either. NanoTrasen will always defend the interests of its customers, shareholders and associates. Worker unions may disrupt work productivity, which can in turn jeopardize job security for all crew members.
If an organizing union attempts to use force to advance its goals, such as vandalizing Company property or physically attacking other crewmembers, Security is authorized under Space Law to quell and suppress unions.
It is every crew member's duty to report potential warning signs of unionization to their managers. Warnings signs may be:
*Crew members refusing to work.
*Usage of union related terminology, (living wage, working conditions, etc.)
*Circulation or distribution of petitions and union fliers.
*Unusual interest in Company policies, benefits, employee list or any other Company information.
*Noticeable changes in behavior among known crew members.
*Non-manifest individuals supporting union activity.
*Clothing, accessories associated with unions.
*Increased negativity and complaints.
In the case of a violent union riot, follow these procedures:
*Do not join the riot.
*Inform Security and Command immediately. Provide details:
**Names and job positions of any suspected union members and leaders.
**Whether the union members are armed.
*Inform Central Command of the incident.
*Shelter in a safe place and await for the situation to be resolved.
== Contacting Central Command ==
Should you require a question answered about your duties, advice on how to properly handle situations, or wish to submit an incident report (including gross misconduct by Command staff), Central Command Officials are always happy to assist. Please ensure your fax is descriptive, legible and includes your signature or departmental stamp.
Refrain from sending junk mail to Central Command. Penalties may include pay cuts or a renegotiation of your contract.
In the highly unlikely event that station security is faced with an overwhelming hostile force or the chain of Command is compromised, crewmembers are advised to request assistance from Central Command.
Your fax should include:
*Stations designation (available in your PDA)
*The overwhelming threat. Try to provide as much detail as possible, such as:
**Estimated number of hostiles.
**If armed, what kind of armaments they’re equipped with.
**Number of casualties. Information about Security’s and Command’s status is recommended.
**Station’s structural integrity.
Due to the prevalence of misinformation reaching Central Command, please ensure to add as many stamps and signatures as possible/convenient.
Be warned that all faxes, urgent or otherwise, may take some time to be properly read and receive a response. Central Command is dedicated to managing multiple stations simultaneously. Rest assured: your fax will be addressed, even without your notice.
= Conclusion =
In closing, we thank you for your commitment to our mission and the values that guide NanoTrasen as a whole. Your dedication is the keystone to our success.
+20 -19
View File
@@ -4,13 +4,14 @@ Space Law is a broad set of rules and regulations, collected and regulated by Te
It is highly recommended to read the '''[[Standard Operating Procedure|Standard Operating Procedures]]'''. Summaries of several pertinent sections are listed below.
* '''[[Standard Operating Procedure#Controlled Items|Controlled Items]]:''' If a member of station crew requires access to a Controlled Item for use in their job, or for regular function, they must obtain the signed and stamped approval of a relevant member of Station Command or the CO. The latter is able to override the decisions of Station Command in this regard, however.
* '''[[Standard Operating Procedure#Sophonts and Synthetics|Sophonts & Synthetics]]:''' Sophonts are entities are able to utilize a structured language, communicate through the use of written, verbal, and/or body language (or by other means), and possess reasoning and introspection. Sophonts are legal persons, able to press charges under Space Law, and can be victims of certain crimes that specify sophont status. An entity's status as a sophont may be challenged during legal proceedings; the Defense and/or Prosecution must present evidence arguing that it meets, or does not meet, the criteria established above. The Judge will then arbitrate on the entity's status. Any synthetic, sillicon, or nonorganic entity with non-sophont status is to be considered a Synthetic. Synthetics are the property of the entity that constructs or employs them, unless otherwise stated. Damage or destruction of such Synthetics is considered vandalism of the entity's property.
* '''[[Standard Operating Procedure#Entity Definitions|Entity]]:''' Any thing with distinct, independent existence.
* '''[[Standard Operating Procedure#Entity Definitions|Employee]]:''' An entity who has an employment contract with a Company.
* '''[[Standard Operating Procedure#Security Jurisdiction|Security Jurisdiction]]:''' Station law enforcement officers are bound by Space Law; they cannot operate outside of standard accessible areas, or perform searches, unless such action is allowed by either Alert Procedure or a valid warrant.
* '''[[Standard Operating Procedure#Detainment and Arrest|Detainment & Arrest]]:''' Members of law enforcement may detain sophonts under '''[[Standard Operating Procedure#Probable Cause|Probable Cause]]''' of criminal activity. These detainees must be informed of the crime they are suspected of committing, and may be moved to a secure location and/or restrained while law enforcement determine if a crime was committed. Such detention should last no longer than five minutes. Any sophont may be arrested, during which they are restrained, informed of their charges, and taken to the brig for search and processing under '''[[Standard Operating Procedure#Brig Procedure|Brig Procedure]]'''.
* '''[[Standard Operating Procedure#Sentencing|Sentencing]]:''' Any member of law enforcement is allowed to pass sentence on Misdemeanor, Felony, and Grand Felony charges. The Prosecutor is allowed to adjust such sentences, within reason.
* '''[[Standard Operating Procedure#Detainment and Arrest|Detainment & Arrest]]:''' Members of law enforcement may detain entities under '''[[Standard Operating Procedure#Probable Cause|Probable Cause]]''' of criminal activity. These detainees must be informed of the crime they are suspected of committing, and may be moved to a secure location and/or restrained while law enforcement determine if a crime was committed. Such detention should last no longer than five minutes. Any entity may be arrested, during which they are restrained, informed of their charges, and taken to the brig for search and processing under '''[[Standard Operating Procedure#Brig Procedure|Brig Procedure]]'''.
* '''[[Standard Operating Procedure#Sentencing|Sentencing]]:''' Any member of law enforcement is allowed to pass sentence on Misdemeanor, Felony, and Grand Felony charges. The Chief Justice, or in their absence, the Head of Security are allowed to pass sentence on all Charges.
* '''[[Standard Operating Procedure#Treatment of Prisoners|Treatment of Prisoners]]:''' Prisoners must be provided with food, water, clothing, free movement within the brig, adequate medical care, access to the Common and Prison radio channels, and moral, spiritual, or legal counseling if requested and available. If the brig becomes uninhabitable, prisoners must be securely and safely relocated to another area until the brig is functional once more. Prisoners sentenced to Extended Confinement have additional rights and firmer restrictions that must be upheld by law enforcement officials.
* '''[[Standard Operating Procedure#Paroles and Pardons|Paroles & Pardons]]:''' Parole may be offered under the discretion of the Warden, Head of Security, or CO. A parole hearing requires only a Judge, as discussed within Trial Procedure. Pardons may be issued by the arresting officer, the Judge of a trial, by the Warden (to those within the permanent brig), or by the CO, when deemed in the best interest of the crew or vessel, or when the circumstances of the crime warrant suspension of sentence.
* '''[[Standard Operating Procedure#Pressing Charges|Pressing Charges]]:''' Any sophont may press charges against any other sophont. Individuals may only be charged with a crime if it can be proveny beyond reasonable doubt that they have committed the crime.
* '''[[Standard Operating Procedure#Pressing Charges|Pressing Charges]]:''' Any Employee may press charges against any other entity. Individuals may only be charged with a crime if it can be proveny beyond reasonable doubt that they have committed the crime.
* '''[[Standard Operating Procedure#Trial Procedure|Trial Procedure]]:''' A criminal trial’s Judge must be, in sequential order: The Chief Justice, the Court Clerk, an impartial member of Justice or Station Command, or the Warden. The Prosecution should ideally be the Prosecutor, or an available member of Station Command or Station Security in that order. The Defense should ideally be a member of the Justice department assigned to the defendant, though they are allowed to represent themselves if they wish. If insufficient crew are available, the Judge is fully authorized and strongly encouraged to pass a sentence of Extended Confinement until a proper trial can be held.
* '''[[Alert Procedure]]:''' Codes Blue, Red, Gamma, and Delta authorize Security to carry progressively more advanced equipment, and loosen '''[[Standard Operating Procedure#Rules of Engagement|Rules of Engagement]]''' regarding their use. The former two codes disallow openly carrying firearms by non-Security personnel; the latter two suspend many rights to privacy, and grant Security the power to do whatever neccessary to retake or scuttle the station.
@@ -25,7 +26,7 @@ Use this to quickly find the Crime Code Numbers.
Crime codes are organized into four Category Codes (_XX) as listed below, with the most severe crimes being given the highest Severity Codes (x__). The sentencing officer or Judge should use discretion, and not charge an entity with two similar crimes for a singular offense.
For example, an attack upon a sophont which causes them to die of their injuries is Murder, not Assault AND Murder. Likewise, an entity should not be charged for both Possession AND Grand Possession on a singular Controlled Item held without proper authorization.
For example, an attack upon an Employee which causes them to die of their injuries is Murder, not Assault AND Murder. Likewise, an entity should not be charged for both Possession AND Grand Possession on a singular Controlled Item held without proper authorization.
{| style='text-align:center; border:solid 1px black' cellspacing=0
! style="border: 1px solid black; width:5%" | Code
@@ -119,27 +120,27 @@ Sentencing modifiers are to be applied by the sentencing officer, judge, or arbi
=== Aggravating ===
:*'''Solicitation'''
:**Any sophont found guilty of encouraging, bribing, requesting, or instructing someone to commit a crime, with the intent that the sophont being solicited commit the crime, will receive for the crimes they solicited in full.
:**Any entity found guilty of encouraging, bribing, requesting, or instructing someone to commit a crime, with the intent that the entity being solicited commit the crime, will receive for the crimes they solicited in full.
:*'''Accessory'''
:**Any sophont found guilty of assisting in the commission of a crime, without participating in the crime itself, knowing that a crime will be, has been, or is being committed, will receive the sentence for the crimes in which they took part in full.
:**Any entity found guilty of assisting in the commission of a crime, without participating in the crime itself, knowing that a crime will be, has been, or is being committed, will receive the sentence for the crimes in which they took part in full.
:*'''Attempts'''
:**Any sophont found guilty of attempting to commit a crime, with the intent to carry out that crime, will receive the sentence for the crimes they attempted in full.
:**Any entity found guilty of attempting to commit a crime, with the intent to carry out that crime, will receive the sentence for the crimes they attempted in full.
:*'''Conspiracy'''
:**Any sophont found guilty of planning to commit a crime, with the intent to carry out that crime eventually, and having committed an overt act pursuant to that end, will receive the sentence for the crimes they conspired towards in full.
:**Any entity found guilty of planning to commit a crime, with the intent to carry out that crime eventually, and having committed an overt act pursuant to that end, will receive the sentence for the crimes they conspired towards in full.
:*'''Deadly weapon'''
:**Any sophont found guilty of committing a crime, utilising any object used offensively for the purpose of inflicting mortal or great bodily harm, will receive an additional modifier of, at most, +50% of the original sentence.
:**Any entity found guilty of committing a crime, utilising any object used offensively for the purpose of inflicting mortal or great bodily harm, will receive an additional modifier of, at most, +50% of the original sentence.
:*'''Aggravation'''
:**Any sophont found guilty of committing a crime with reckless abandon, evident signs of lack of regret or remorse, or blatant disregard for potential collateral damage, will receive an additional modifier of, at most, +50% of the original sentence.
:**Any entity found guilty of committing a crime with reckless abandon, evident signs of lack of regret or remorse, or blatant disregard for potential collateral damage, will receive an additional modifier of, at most, +50% of the original sentence.
:*'''Recidivism'''
:**Any sophont convicted of the same criminal charge multiple times within one shift will receive an additional modifier of, at most, +100% of the original sentence. '''OOC NOTE: If a character is sexually harassing another character, or being bigoted, in a way that breaks Server Rules A1 or A2, you are allowed to summarily execute them. Please contact admins via AHelp if such an incident occurs.'''
:**Any entity convicted of the same criminal charge multiple times within one shift will receive an additional modifier of, at most, +100% of the original sentence. '''OOC NOTE: If a character is sexually harassing another character, or being bigoted, in a way that breaks Server Rules A1 or A2, you are allowed to summarily execute them. Please contact admins via AHelp if such an incident occurs.'''
=== Extenuating ===
:*'''Cooperation'''
:**Any sophont who shares actionable intelligence with the authorities, turns oneself in, testifies against accomplices, confesses to their crime, or otherwise aids the prosecution, may have their sentence reduced to no less than 50% of the original sentence.
:**Any entity who shares actionable intelligence with the authorities, turns oneself in, testifies against accomplices, confesses to their crime, or otherwise aids the prosecution, may have their sentence reduced to no less than 50% of the original sentence.
:*'''Dire Emergency'''
:**Any sophont found to have committed a crime in the process of absolutely necessary and reasonable actions, taken with the intent to resolve or mitigate the effects of a dire emergency on one’s vessel or habitat, may have their sentence reduced by any amount, or completely waived.
:**Any entity found to have committed a crime in the process of absolutely necessary and reasonable actions, taken with the intent to resolve or mitigate the effects of a dire emergency on one’s vessel or habitat, may have their sentence reduced by any amount, or completely waived.
:*'''Self-Defence'''
:**Any sophont found to have committed a crime or crimes in protection of oneself or another, and only to the necessary extent to avert a direct and imminent threat to the health and life of innocent persons, may have their sentence reduced by any amount, or completely waived.
:**Any entity found to have committed a crime or crimes in protection of oneself or another, and only to the necessary extent to avert a direct and imminent threat to the health and life of innocent persons, may have their sentence reduced by any amount, or completely waived.
:*'''Good Behavior'''
:**Any convict who peacefully complies with the authorities, displays clear signs of remorse concerning the committed crime, and/or conducts themselves peacefully while imprisoned, may be paroled as outlined in the Standard Operating Procedures.
@@ -157,7 +158,7 @@ Sentencing modifiers are to be applied by the sentencing officer, judge, or arbi
| style="border: 1px solid black;" | [[File:SL_Murder.png]]
! style="border: 1px solid black;" | Murder
| style="border: 1px solid black;" | Capital
| style="border: 1px solid black;" | To maliciously commit an act resulting in the death of a sophont, with reckless indifference to their life.
| style="border: 1px solid black;" | To maliciously commit an act resulting in the death of an Employee, with reckless indifference to their life.
|-
| style="border: 1px solid black;" | 402
| style="border: 1px solid black;" | [[File:SL_Terrorism.png]]
@@ -175,7 +176,7 @@ Sentencing modifiers are to be applied by the sentencing officer, judge, or arbi
| style="border: 1px solid black;" | [[File:SL_Decorporealisation.png]]
! style="border: 1px solid black;" | '''Prevention of Revival'''
| style="border: 1px solid black;" | Capital
| style="border: 1px solid black;" | To commit an act that prevents the revival of a sophont by standard medical care following their death.
| style="border: 1px solid black;" | To commit an act that prevents the revival of an Employee by standard medical care following their death.
|-
| style="border: 1px solid black;" | 405
| style="border: 1px solid black;" | [[File:SL_Sedition.png]]
@@ -203,7 +204,7 @@ Sentencing modifiers are to be applied by the sentencing officer, judge, or arbi
|style= "border:1px solid black;"| [[File:SL_Manslaughter.png]]
|style= "border:1px solid black;"| Manslaughter
|style= "border:1px solid black;"| 16 minutes
|style= "border:1px solid black;"| To act without malice in a manner which, directly or indirectly, leads to the death of a sophont.
|style= "border:1px solid black;"| To act without malice in a manner which, directly or indirectly, leads to the death of an Employee.
|-
|style= "border:1px solid black;"| 302
|style= "border:1px solid black;"| [[File:SL_Kidnapping.png]]
@@ -261,7 +262,7 @@ Sentencing modifiers are to be applied by the sentencing officer, judge, or arbi
| style="border: 1px solid black;" | [[File:SL_Assault.png]]
! style="border: 1px solid black;" | {{anchor|Assault}}Assault
| style="border: 1px solid black;" | 10 minutes
| style="border: 1px solid black;" | To cause physical harm or to effect unwanted physical contact on a sophont, without the apparent intent to kill them, or to threaten such actions with both capability and intent to do so.
| style="border: 1px solid black;" | To cause physical harm or to effect unwanted physical contact on an Employee, without the apparent intent to kill them, or to threaten such actions with both capability and intent to do so.
|-
| style="border: 1px solid black;" | 202
| style="border: 1px solid black;" | [[File:SL_BreakingAndEntering.png]]
+60 -23
View File
@@ -3,21 +3,64 @@ This page covers the standardized guidelines and procedures aboard the station,
== '''Definitions''' ==
The terms specified below are defined for further use within the procedures.
:*Captain: The officer legally appointed by Nanotrasen as Commanding Officer of the station. This title is only transferable by Central Command.
:*Commanding Officer / CO: An officer appointed to lead the station and its Command department, whether it be the Captain by Nanotrasen, or an Acting CO by Station Command.
:*Captain: The officer legally appointed by NanoTrasen as Commanding Officer of the station. This title is only transferable by Central Command.
:*Commanding Officer / CO: An officer appointed to lead the station and its Command department, whether it be the Captain by NanoTrasen, or an Acting CO by Station Command.
:* Command Staff/Station Command: Members of the Command department who lead a department aboard the station.
:* Crew: All sophonts employed by Station Command, or by NT to reside on the station and perform an established function therein. This includes any sophont listed on the Crew Manifest or issued a functional NT identification and access card. Individuals imprisoned by NT, along with those imprisoned during the course of a shift for violations of Space Law, are considered Crew.
:* Judge: An indivudal legally appointed to preside over a hearing, as specified within Hearing Procedure.
:* Detainee: Any sophont whose free movement has been curtailed by law enforcement on suspicion of criminal activity. They have not, however, been officially charged with a crime.
:* Arrestee: Any sophont who has been formally charged with a crime.
:* Prisoner: Any sophont who has been sentenced for the commission of a crime, or awaiting a hearing for a capital offense.
:* Crew: All Employees employed by Station Command, or by NT to reside on the station and perform an established function therein. This includes any Employee listed on the Crew Manifest or issued a functional NT identification and access card. Individuals imprisoned by NT, along with those imprisoned during the course of a shift for violations of Space Law, are considered Crew.
:* Judge: An individual legally appointed to preside over a hearing, as specified within Hearing Procedure.
:* Detainee: Any Employee whose free movement has been curtailed by law enforcement on suspicion of criminal activity. They have not, however, been officially charged with a crime.
:* Arrestee: Any Employee who has been formally charged with a crime.
:* Prisoner: Any Employee who has been sentenced for the commission of a crime, or awaiting a hearing for a capital offense.
:* Permanent Brig/Permabrig/Brig: A secure location for the long-term confinement of Prisoners. Typically outfitted to sustain the basic survival needs of the Prisoners within.
==Right to Refuse Service==
All crew operating within their designated job locations are given the right to refuse service at any time for disorderly or abusive conduct. Additionally, all crew members are permitted to use nonlethal force to remove noncompliant or disorderly individuals only when such persons pose a threat to the safety of staff members, or disrupt the orderly functioning of the station. Service may not be refused to first responders acting to address or mitigate an emergency or crisis situation, unless such conduct is egregiously disorderly or abusive.
==Hiring Procedure==
While Nanotrasen handles the staffing and recruiting needs of the station, Station Command is additionally authorized to hire any sophont into their respective department, as well as terminate the employment of any crew in their respective department per company policy. For a member of Station Command to personally employ a sophont into their department, a contract must be written stating the name of the employee, the department of employment, the position, and finally bearing the stamp of the Station Command member.
= Entity Definitions =
The following definitions are provided to clarify the legal protections- and obligations- that Standard Operating Procedures and Space Law provide to any given entity. Unless explicitly covered by a more distinctive term, all Entities are to be treated as such until clarification is provided.
== Entity ==
Any individual with a distinct existence. Entities may also encompass a plurality of identities contained within a single physical form. NanoTrasen does not require Entities be offered the protections of Standard Operating Procedure, Space Law, or Rules of Engagement unless further defined below. Security Officers are encouraged to be reasonable with their use of force regarding circumstances, especially if Entity's termination would leave lawsuits or tarnish reputation for NanoTrasen.
== Pet ==
Any Entity that is provided to NanoTrasen Space Stations- either through the station's Logistics Department, or brought on board by the crew- for the purposes of emotional support. Any harm against such a Pet may render the offender liable to the crime of Animal Cruelty.
Examples of Pets include, but are not limited to:
:* Renault the Fox
:* Smile the Rainbow Slime
:* Laika the Guard Dog
:* Silvia the Medical Cobra
:* a corgi, purchased by Station Logistics
:* 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.
Examples of Synthetics include, but are not limited to:
:* Crew-constructed Cyborgs
:* The Station AI
:* Positronic Brains
== Employee ==
Any Entity who has a contract with NanoTrasen.
Typically, these individuals possess all of the following:
:* A communications headset (or similar communications capability) outfitted with encryption keys relevant to their assigned job function.
:* An ID card with their name and job function, pre-programmed with door access relevant to aforementioned job function.
:* Company-approved attire for an individual of their job function.
In situations where an individual lacks one or more of these items, law enforcement officials are encouraged to use their best judgement, and mitigate any risk of liability to charges of Endangerment or Abuse of Power.
Harm or death of an Employee may leave the offender liable to the crimes of Assault, Manslaughter, or even Murder.
Examples of Employees include, but are not limited to:
:* All crew present on the Space Station, including those who are removed from cryogenic stasis during the course of a shift.
:* Any crewmate arriving from a different NanoTrasen Space Station, due to navigation errors, disasters, or similar.
:* Individuals imprisoned by NT, along with those imprisoned during the course of a shift for violations of Space Law.
:* Any and all members of NanoTrasen Central Command, including Emergency Response Team soldiers and Central Commanders.
In cases where there is reasonable doubt as to the identity of a member of Central Command, the Commanding Officer is encouraged to request clarity from Central Command themselves.
Any Employees that are fired by Station Command are still considered Employees until Central Command can confirm their contract termination.
=== Provisional Employees ===
Provisional Employees are a special subcategory of Employee. During the course of a shift, events may lead to an Entity, or Entities, arriving aboard the station who wish to be employed by NanoTrasen. The Head of Personnel, alongside any relevant departmental head, may accept the Entity into NanoTrasen's employ provisionally.
In such a case, the Head of Personnel must create a document listing the Provisional Employee's name and assigned job function, along with any physical features deemed necessary to identify them. This must be signed and stamped (where applicable) by the Head of Personnel, their relevant departmental head, and the Provisional Employee. A copy must be kept within the Head of Personnel's records, and with the Provisional Employee if possible.
Provisional Employees serve "at will", and may have their employment revoked at any time by Central or Station Command authorities.
=Controlled Items, Substances, & Areas=
== Controlled Items ==
@@ -109,7 +152,7 @@ Unlocked crates, orders stored outside the department, and supplies illegally di
=== Research ===
Epistemics employees are permitted to use their lab spaces as they see fit, with the following caveats:
* Any sophont experimentation must be done with the consent of the test subject, and must not have an undue risk of life. The Mystagogue or CO may terminate any experiment for safety or ethical purposes and at their discretion.
* Any Employee experimentation must be done with the consent of the test subject, and must not have an undue risk of life. The Mystagogue or CO may terminate any experiment for safety or ethical purposes and at their discretion.
* Testing of any explosives or weapons that risk hull penetration or mass destruction must be done at an off-station site.
Epistemics personnel may also utilise Controlled Items within the confines of designated testing areas and in a manner directly approved jointly by the Mystagogue and by the Head of Security or CO.
@@ -136,16 +179,7 @@ Common HSAs for commercial and military vessels are as follows:
* Telecommunications\Telemetry
* Permanent Brig\Holding Cells
== Sophonts and Synthetics ==
To be defined as a sophont, a being must be able to utilize a structured language, communicate through the use of written, verbal, and/or body language (or by other means), and possess reasoning and introspection.
Any such being is considered a sophont, and thus a legal person, regardless of their make, origin, disposition, or prior cognition. As part of their rights, they are to be governed under the same laws as any other sophont, and given the ability to press charges as a sophont.
The unauthorised jailbreaking or uplifting of property into the status of Sophont is still a criminal offense however, and those found guilty of doing so may be found guilty of sabotage or vandalism.
An entity’s status as a sophont may be challenged during the process of charging the individual for crimes which utilize the term sophont in the legal language of the crime. The Defense or Prosecution will present evidence indicating that it meets, or does not meet, the criteria above. The Judge will then arbitrate upon the entity's status as a sophont.
Any synthetic/silicon/inorganic entity with a non-sophont status, is to be classified as a standard synthetic entity. Synthetic entities are the property of the party that constructs or employs the entity, unless otherwise stated by relevant contract or legal document. To damage or destroy such an entity is to damage or destroy the aforementioned party’s property.
=Commanding Officer=
==Captain’s Authority==
The Commanding Officer of a station or vessel is afforded several rights, broadly referred to as "Captain's Authority".
@@ -209,7 +243,7 @@ Law enforcement personnel hold a Category D Armaments License, and are authorize
* If the adversary presents an existential threat to the chain of command by illegal means.
* If the adversary cannot be reasonably subdued through non-lethal means without great bodily harm to the officer.
…wherein an “adversary” is an entity that demonstrates a hostile intent, commits or directly contributes to a hostile act that does not constitute an actual attack, or is actively attacking the vessel or its crew.
…wherein an “adversary” is an Employee that demonstrates a hostile intent, commits or directly contributes to a hostile act that does not constitute an actual attack, or is actively attacking the vessel or its crew.
Despite their allowance of lethal force, Security is required to follow the Rules of Engagement of the current Alert Level, as outlined within [[Alert Procedure]].
@@ -250,7 +284,7 @@ Should prisoners repeatedly and maliciously antagonize law enforcement, to an ex
Moreover, prisoners are liable for any and all crimes that they commit while held either in the temporary holding cells or the Permanent Brig, and may, in the case of the Permanent Brig, be placed in solitary confinement for the duration of the sentence the committed crimes incur.
==Arrest and Sentencing==
Any sophont, that has been formally charged with the commission of a crime, or can be assumed to have committed a crime under [[Standard Operating Procedure#Probable Cause| Probable Cause]] may be arrested by a member of Security. In an arrest, the suspect will be restrained, informed of their charges, and moved to the Brig for processing.
Any Employee, that has been formally charged with the commission of a crime, or can be assumed to have committed a crime under [[Standard Operating Procedure#Probable Cause| Probable Cause]] may be arrested by a member of Security. In an arrest, the suspect will be restrained, informed of their charges, and moved to the Brig for processing.
Legal counsel may be requested by an Arrestee, and must be provided if available.
At the brig the prisoner is searched and confined to a holding cell. Any items on their person they are not authorized to possess are confiscated and sent to the justice department for processing and storage as evidence. It is the duty of both the Warden and the Chief Justice to ensure evidence is handled properly and safely.
The prisoner is sentenced according to Space Law.
@@ -264,7 +298,7 @@ Appeals are handled by the Chief Justice. Attorneys may appeal a past ruling on
A Prisoner sentenced to a Felony or Grand Felony crime may request an appeal by the Clerk or Chief Justice, these appeals may be denied for any reason.
Prisoners may additionally receive parole per discretion of the Warden, Head of Security, or CO. Parolees are encouraged to seek gainful employment on station. Parolees may have any sentence escalated to permanent confinement regardless of severity.
A pardon may be issued to any sophont accused of, or sentenced to, crimes, if deemed in the best interest of the crew and vessel, and when the circumstances of the defendant or their offense warrant a suspension of their sentence. A pardon may be issued by the Arresting Officer or Warden, in case of the Prisoners, or the Judge of a hearing and must be accompanied by an announcement, explaining who was pardoned, of what crime, and for what reason.
A pardon may be issued to any Employee accused of, or sentenced to, crimes, if deemed in the best interest of the crew and vessel, and when the circumstances of the defendant or their offense warrant a suspension of their sentence. A pardon may be issued by the Arresting Officer or Warden, in case of the Prisoners, or the Judge of a hearing and must be accompanied by an announcement, explaining who was pardoned, of what crime, and for what reason.
==Pressing Criminal Charges==
Any crew member may press charges against any other crew member. An individual may be charged of a crime, if it can be reasonably argued, that the accused has committed an act in the nature and fashion as described by the particular criminal charge.
@@ -290,7 +324,7 @@ A hearing must be held for capital charges, and for sentences that exceed a tota
A hearing is conducted by a Judge (chosen in order from: Chief Justice, Clerk, Commanding Officer, Command), who charged is with ensuring the hearing is completed, decides the time and location of the hearing, and whether they want to make the hearing accessible to the public or not. A hearing must include the Judge and Prosecution, and should additionally include the accused and defense, if available. The Judge has the right to find any person in the hearing guilty of contempt of court.
Hearings are concerned with any and all crimes the accused is currently charged with, not just capital crimes.
Defense must be provided to the accused if requested and feasible, and should consist of either an attorney, any member of the justice department, or any sophont chosen by the accused.
Defense must be provided to the accused if requested and feasible, and should consist of either an attorney, any member of the justice department, or any Employee chosen by the accused.
The prosecution should consist of either a prosecutor, any member of the justice department, or any member of station security.
Neither prosecution nor defense may interrupt one another during presentation of evidence, including objecting to witness statements made. In the case of a witness making demonstrably untrue statements, perjury and contempt of court may be charged as necessary. It is encouraged the judge pay attention and inquire about competing claims to truth.
@@ -339,3 +373,6 @@ In order for a medical evaluation to be considered lawfully applicable, the CMO
==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.
==Foreign Bodies==
Any parasitic alien organism that requires a living host to live and reproduce must be eliminated. An exception can be made for experimental purposes, provided a CO, CMO and Mystagogue were to approve it.
+18 -20
View File
@@ -1,17 +1,19 @@
#!/usr/bin/env python3
# Installs git hooks, updates them, updates submodules, that kind of thing.
"""
Installs git hooks, updates them, updates submodules, that kind of thing.
"""
import subprocess
import sys
import os
import shutil
import subprocess
import sys
import time
from pathlib import Path
from typing import List
SOLUTION_PATH = Path("..") / "SpaceStation14.sln"
# If this doesn't match the saved version we overwrite them all.
CURRENT_HOOKS_VERSION = "2"
CURRENT_HOOKS_VERSION = "4"
QUIET = len(sys.argv) == 2 and sys.argv[1] == "--quiet"
@@ -25,12 +27,10 @@ def run_command(command: List[str], capture: bool = False) -> subprocess.Complet
sys.stdout.flush()
completed = None
if capture:
completed = subprocess.run(command, cwd="..", stdout=subprocess.PIPE)
completed = subprocess.run(command, stdout=subprocess.PIPE, text=True)
else:
completed = subprocess.run(command, cwd="..")
completed = subprocess.run(command)
if completed.returncode != 0:
print("Error: command exited with code {}!".format(completed.returncode))
@@ -43,7 +43,7 @@ def update_submodules():
Updates all submodules.
"""
if ('GITHUB_ACTIONS' in os.environ):
if 'GITHUB_ACTIONS' in os.environ:
return
if os.path.isfile("DISABLE_SUBMODULE_AUTOUPDATE"):
@@ -76,22 +76,21 @@ def install_hooks():
print("No hooks change detected.")
return
with open("INSTALLED_HOOKS_VERSION", "w") as f:
f.write(CURRENT_HOOKS_VERSION)
print("Hooks need updating.")
hooks_target_dir = Path("..")/".git"/"hooks"
hooks_target_dir = Path(run_command(["git", "rev-parse", "--git-path", "hooks"], True).stdout.strip())
hooks_source_dir = Path("hooks")
# Clear entire tree since we need to kill deleted files too.
for filename in os.listdir(str(hooks_target_dir)):
os.remove(str(hooks_target_dir/filename))
for filename in os.listdir(hooks_target_dir):
os.remove(hooks_target_dir / filename)
for filename in os.listdir(str(hooks_source_dir)):
for filename in os.listdir(hooks_source_dir):
print("Copying hook {}".format(filename))
shutil.copy2(str(hooks_source_dir/filename),
str(hooks_target_dir/filename))
shutil.copy2(hooks_source_dir / filename, hooks_target_dir / filename)
with open("INSTALLED_HOOKS_VERSION", "w") as f:
f.write(CURRENT_HOOKS_VERSION)
# Begin DeltaV Additions - add pre-commit hooks if you have it installed
if shutil.which("pre-commit") is not None:
@@ -111,8 +110,7 @@ def reset_solution():
def check_for_zip_download():
# Check if .git exists,
cur_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
if not os.path.isdir(os.path.join(cur_dir, ".git")):
if run_command(["git", "rev-parse"]).returncode != 0:
print("It appears that you downloaded this repository directly from GitHub. (Using the .zip download option) \n"
"When downloading straight from GitHub, it leaves out important information that git needs to function. "
"Such as information to download the engine or even the ability to even be able to create contributions. \n"
+4 -4
View File
@@ -1,10 +1,10 @@
#!/bin/bash
#!/usr/bin/env bash
gitroot=`git rev-parse --show-toplevel`
gitroot=$(git rev-parse --show-toplevel)
cd "$gitroot/BuildChecker"
cd "$gitroot/BuildChecker" || exit
if [[ `uname` == MINGW* || `uname` == CYGWIN* ]]; then
if [[ $(uname) == MINGW* || $(uname) == CYGWIN* ]]; then
# Windows
py -3 git_helper.py --quiet
else
+3 -3
View File
@@ -1,5 +1,5 @@
#!/bin/bash
#!/usr/bin/env bash
# Just call post-checkout since it does the same thing.
gitroot=`git rev-parse --show-toplevel`
bash "$gitroot/.git/hooks/post-checkout"
gitroot=$(git rev-parse --git-path hooks)
bash "$gitroot/post-checkout"
@@ -0,0 +1,174 @@
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.CCVar;
using Robust.Shared;
using Robust.Shared.Analyzers;
using Robust.Shared.Configuration;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Maths;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Benchmarks;
/// <summary>
/// Spawns N number of entities with a <see cref="DeltaPressureComponent"/> and
/// simulates them for a number of ticks M.
/// </summary>
[Virtual]
[GcServer(true)]
//[MemoryDiagnoser]
//[ThreadingDiagnoser]
public class DeltaPressureBenchmark
{
/// <summary>
/// Number of entities (windows, really) to spawn with a <see cref="DeltaPressureComponent"/>.
/// </summary>
[Params(1, 10, 100, 1000, 5000, 10000, 50000, 100000)]
public int EntityCount;
/// <summary>
/// Number of entities that each parallel processing job will handle.
/// </summary>
// [Params(1, 10, 100, 1000, 5000, 10000)] For testing how multithreading parameters affect performance (THESE TESTS TAKE 16+ HOURS TO RUN)
[Params(10)]
public int BatchSize;
/// <summary>
/// Number of entities to process per iteration in the DeltaPressure
/// processing loop.
/// </summary>
// [Params(100, 1000, 5000, 10000, 50000)]
[Params(1000)]
public int EntitiesPerIteration;
private readonly EntProtoId _windowProtoId = "Window";
private readonly EntProtoId _wallProtoId = "WallPlastitaniumIndestructible";
private TestPair _pair = default!;
private IEntityManager _entMan = default!;
private SharedMapSystem _map = default!;
private IRobustRandom _random = default!;
private IConfigurationManager _cvar = default!;
private ITileDefinitionManager _tileDefMan = default!;
private AtmosphereSystem _atmospereSystem = default!;
private Entity<GridAtmosphereComponent, GasTileOverlayComponent, MapGridComponent, TransformComponent>
_testEnt;
[GlobalSetup]
public async Task SetupAsync()
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
var server = _pair.Server;
var mapdata = await _pair.CreateTestMap();
_entMan = server.ResolveDependency<IEntityManager>();
_map = _entMan.System<SharedMapSystem>();
_random = server.ResolveDependency<IRobustRandom>();
_cvar = server.ResolveDependency<IConfigurationManager>();
_tileDefMan = server.ResolveDependency<ITileDefinitionManager>();
_atmospereSystem = _entMan.System<AtmosphereSystem>();
_random.SetSeed(69420); // Randomness needs to be deterministic for benchmarking.
_cvar.SetCVar(CCVars.DeltaPressureParallelToProcessPerIteration, EntitiesPerIteration);
_cvar.SetCVar(CCVars.DeltaPressureParallelBatchSize, BatchSize);
var plating = _tileDefMan["Plating"].TileId;
/*
Basically, we want to have a 5-wide grid of tiles.
Edges are walled, and the length of the grid is determined by N + 2.
Windows should only touch the top and bottom walls, and each other.
*/
var length = EntityCount + 2; // ensures we can spawn exactly N windows between side walls
const int height = 5;
await server.WaitPost(() =>
{
// Fill required tiles (extend grid) with plating
for (var x = 0; x < length; x++)
{
for (var y = 0; y < height; y++)
{
_map.SetTile(mapdata.Grid, mapdata.Grid, new Vector2i(x, y), new Tile(plating));
}
}
// Spawn perimeter walls and windows row in the middle (y = 2)
const int midY = height / 2;
for (var x = 0; x < length; x++)
{
for (var y = 0; y < height; y++)
{
var coords = new EntityCoordinates(mapdata.Grid, x + 0.5f, y + 0.5f);
var isPerimeter = x == 0 || x == length - 1 || y == 0 || y == height - 1;
if (isPerimeter)
{
_entMan.SpawnEntity(_wallProtoId, coords);
continue;
}
// Spawn windows only on the middle row, spanning interior (excluding side walls)
if (y == midY)
{
_entMan.SpawnEntity(_windowProtoId, coords);
}
}
}
});
// Next we run the fixgridatmos command to ensure that we have some air on our grid.
// Wait a little bit as well.
// TODO: Unhardcode command magic string when fixgridatmos is an actual command we can ref and not just
// a stamp-on in AtmosphereSystem.
await _pair.WaitCommand("fixgridatmos " + mapdata.Grid.Owner, 1);
var uid = mapdata.Grid.Owner;
_testEnt = new Entity<GridAtmosphereComponent, GasTileOverlayComponent, MapGridComponent, TransformComponent>(
uid,
_entMan.GetComponent<GridAtmosphereComponent>(uid),
_entMan.GetComponent<GasTileOverlayComponent>(uid),
_entMan.GetComponent<MapGridComponent>(uid),
_entMan.GetComponent<TransformComponent>(uid));
}
[Benchmark]
public async Task PerformFullProcess()
{
await _pair.Server.WaitPost(() =>
{
while (!_atmospereSystem.RunProcessingStage(_testEnt, AtmosphereProcessingState.DeltaPressure)) { }
});
}
[Benchmark]
public async Task PerformSingleRunProcess()
{
await _pair.Server.WaitPost(() =>
{
_atmospereSystem.RunProcessingStage(_testEnt, AtmosphereProcessingState.DeltaPressure);
});
}
[GlobalCleanup]
public async Task CleanupAsync()
{
await _pair.DisposeAsync();
PoolManager.Shutdown();
}
}
+1 -1
View File
@@ -47,7 +47,7 @@ public class MapLoadBenchmark
PoolManager.Shutdown();
}
public static readonly string[] MapsSource = { "Empty", "Box", "Aspid", "Bagel", "Dev", "CentComm", "Atlas", "Core", "TestTeg", "Saltern", "Packed", "Omega", "Cluster", "Gemini", "Reach", "Origin", "Meta", "Marathon", "Europa", "MeteorArena", "Fland", "Barratry" };
public static string[] MapsSource { get; } = { "Empty", "Saltern", "Box", "Bagel", "Dev", "CentComm", "Core", "TestTeg", "Packed", "Omega", "Reach", "Meta", "Marathon", "MeteorArena", "Fland", "Oasis", "Convex"};
[ParamsSource(nameof(MapsSource))]
public string Map;
-1
View File
@@ -6,7 +6,6 @@ using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
using Content.Server.Mind;
using Content.Server.Warps;
using Content.Shared.Warps;
using Robust.Shared;
using Robust.Shared.Analyzers;
@@ -8,6 +8,7 @@ using Robust.Shared;
using Robust.Shared.Analyzers;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
namespace Content.Benchmarks;
@@ -18,9 +19,11 @@ namespace Content.Benchmarks;
[Virtual, MemoryDiagnoser]
public class SpawnEquipDeleteBenchmark
{
private static readonly EntProtoId Mob = "MobHuman";
private static readonly ProtoId<StartingGearPrototype> CaptainStartingGear = "CaptainGear";
private TestPair _pair = default!;
private StationSpawningSystem _spawnSys = default!;
private const string Mob = "MobHuman";
private StartingGearPrototype _gear = default!;
private EntityUid _entity;
private EntityCoordinates _coords;
@@ -39,7 +42,7 @@ public class SpawnEquipDeleteBenchmark
var mapData = await _pair.CreateTestMap();
_coords = mapData.GridCoords;
_spawnSys = server.System<StationSpawningSystem>();
_gear = server.ProtoMan.Index<StartingGearPrototype>("CaptainGear");
_gear = server.ProtoMan.Index(CaptainStartingGear);
}
[GlobalCleanup]
@@ -15,6 +15,8 @@ namespace Content.Client.Access.UI;
[GenerateTypedNameReferences]
public sealed partial class GroupedAccessLevelChecklist : BoxContainer
{
private static readonly ProtoId<AccessGroupPrototype> GeneralAccessGroup = "General";
[Dependency] private readonly IPrototypeManager _protoManager = default!;
private bool _isMonotone;
@@ -63,7 +65,7 @@ public sealed partial class GroupedAccessLevelChecklist : BoxContainer
// Ensure that the 'general' access group is added to handle
// misc. access levels that aren't associated with any group
if (_protoManager.TryIndex<AccessGroupPrototype>("General", out var generalAccessProto))
if (_protoManager.TryIndex(GeneralAccessGroup, out var generalAccessProto))
_groupedAccessLevels.TryAdd(generalAccessProto, new());
// Assign known access levels with their associated groups
@@ -92,16 +92,8 @@ namespace Content.Client.Access.UI
}
}
private void ClearAllAccess()
{
foreach (var button in _accessButtons.ButtonsList.Values)
{
if (button.Pressed)
{
button.Pressed = false;
}
}
}
// DeltaV - removed as part of job preset access fix
// private void ClearAllAccess()
private void SelectJobPreset(OptionButton.ItemSelectedEventArgs args)
{
@@ -113,34 +105,28 @@ namespace Content.Client.Access.UI
JobTitleLineEdit.Text = Loc.GetString(job.Name);
args.Button.SelectId(args.Id);
ClearAllAccess();
// this is a sussy way to do this
foreach (var access in job.Access)
{
if (_accessButtons.ButtonsList.TryGetValue(access, out var button) && !button.Disabled)
{
button.Pressed = true;
}
}
// DeltaV - start of job preset access fix
SubmitData();
var targetAccesses = job.Access.ToHashSet();
foreach (var group in job.AccessGroups)
{
if (!_prototypeManager.TryIndex(group, out AccessGroupPrototype? groupPrototype))
{
continue;
}
foreach (var access in groupPrototype.Tags)
{
if (_accessButtons.ButtonsList.TryGetValue(access, out var button) && !button.Disabled)
{
button.Pressed = true;
}
}
targetAccesses.UnionWith(groupPrototype.Tags);
}
SubmitData();
// this is a sussy way to do this
foreach (var (id, button) in _accessButtons.ButtonsList)
{
if (!button.Disabled && button.Pressed != targetAccesses.Contains(id))
{
OnToggleAccess?.Invoke(id);
}
}
// DeltaV - end of job preset access fix
}
public void UpdateState(IdCardConsoleBoundUserInterfaceState state)
+7 -4
View File
@@ -211,7 +211,7 @@ namespace Content.Client.Actions
else
{
var request = new RequestPerformActionEvent(GetNetEntity(action));
EntityManager.RaisePredictiveEvent(request);
RaisePredictiveEvent(request);
}
}
@@ -426,7 +426,12 @@ namespace Content.Client.Actions
private void OnEntityTargetAttempt(Entity<EntityTargetActionComponent> ent, ref ActionTargetAttemptEvent args)
{
if (args.Handled || args.Input.EntityUid is not { Valid: true } entity)
if (args.Handled)
return;
args.Handled = true;
if (args.Input.EntityUid is not { Valid: true } entity)
return;
// let world target component handle it
@@ -437,8 +442,6 @@ namespace Content.Client.Actions
return;
}
args.Handled = true;
var action = args.Action;
var user = args.User;
@@ -21,7 +21,7 @@ namespace Content.Client.Actions.UI
/// </summary>
public (TimeSpan Start, TimeSpan End)? Cooldown { get; set; }
public ActionAlertTooltip(FormattedMessage name, FormattedMessage? desc, string? requires = null, FormattedMessage? charges = null)
public ActionAlertTooltip(FormattedMessage name, FormattedMessage? desc, string? requires = null)
{
_gameTiming = IoCManager.Resolve<IGameTiming>();
@@ -52,17 +52,6 @@ namespace Content.Client.Actions.UI
vbox.AddChild(description);
}
if (charges != null && !string.IsNullOrWhiteSpace(charges.ToString()))
{
var chargesLabel = new RichTextLabel
{
MaxWidth = TooltipTextMaxWidth,
StyleClasses = { StyleNano.StyleClassTooltipActionCharges }
};
chargesLabel.SetMessage(charges);
vbox.AddChild(chargesLabel);
}
vbox.AddChild(_cooldownLabel = new RichTextLabel
{
MaxWidth = TooltipTextMaxWidth,
@@ -1,3 +1,4 @@
using System.Collections.Frozen;
using System.Linq;
using System.Numerics;
using Content.Client.Administration.Systems;
@@ -24,6 +25,7 @@ internal sealed class AdminNameOverlay : Overlay
private readonly EntityLookupSystem _entityLookup;
private readonly IUserInterfaceManager _userInterfaceManager;
private readonly SharedRoleSystem _roles;
private readonly IPrototypeManager _prototypeManager;
private readonly Font _font;
private readonly Font _fontBold;
private AdminOverlayAntagFormat _overlayFormat;
@@ -36,8 +38,9 @@ internal sealed class AdminNameOverlay : Overlay
private float _overlayMergeDistance;
//TODO make this adjustable via GUI?
private readonly ProtoId<RoleTypePrototype>[] _filter =
["SoloAntagonist", "TeamAntagonist", "SiliconAntagonist", "FreeAgent"];
private static readonly FrozenSet<ProtoId<RoleTypePrototype>> Filter =
new ProtoId<RoleTypePrototype>[] {"SoloAntagonist", "TeamAntagonist", "SiliconAntagonist", "FreeAgent"}
.ToFrozenSet();
private readonly string _antagLabelClassic = Loc.GetString("admin-overlay-antag-classic");
@@ -49,7 +52,8 @@ internal sealed class AdminNameOverlay : Overlay
EntityLookupSystem entityLookup,
IUserInterfaceManager userInterfaceManager,
IConfigurationManager config,
SharedRoleSystem roles)
SharedRoleSystem roles,
IPrototypeManager prototypeManager)
{
_system = system;
_entityManager = entityManager;
@@ -57,6 +61,7 @@ internal sealed class AdminNameOverlay : Overlay
_entityLookup = entityLookup;
_userInterfaceManager = userInterfaceManager;
_roles = roles;
_prototypeManager = prototypeManager;
ZIndex = 200;
// Setting these to a specific ttf would break the antag symbols
_font = resourceCache.NotoStack();
@@ -125,6 +130,14 @@ internal sealed class AdminNameOverlay : Overlay
foreach (var info in sortable.OrderBy(s => s.Item4.Y).ToList())
{
var playerInfo = info.Item1;
var rolePrototype = playerInfo.RoleProto == null
? null
: _prototypeManager.Index(playerInfo.RoleProto.Value);
var roleName = Loc.GetString(rolePrototype?.Name ?? RoleTypePrototype.FallbackName);
var roleColor = rolePrototype?.Color ?? RoleTypePrototype.FallbackColor;
var roleSymbol = rolePrototype?.Symbol ?? RoleTypePrototype.FallbackSymbol;
var aabb = info.Item2;
var entity = info.Item3;
var screenCoordinatesCenter = info.Item4;
@@ -209,7 +222,7 @@ internal sealed class AdminNameOverlay : Overlay
switch (_overlaySymbolStyle)
{
case AdminOverlayAntagSymbolStyle.Specific:
symbol = playerInfo.RoleProto.Symbol;
symbol = roleSymbol;
break;
case AdminOverlayAntagSymbolStyle.Basic:
symbol = Loc.GetString("player-tab-antag-prefix");
@@ -225,17 +238,17 @@ internal sealed class AdminNameOverlay : Overlay
switch (_overlayFormat)
{
case AdminOverlayAntagFormat.Roletype:
color = playerInfo.RoleProto.Color;
symbol = _filter.Contains(playerInfo.RoleProto) ? symbol : string.Empty;
text = _filter.Contains(playerInfo.RoleProto)
? Loc.GetString(playerInfo.RoleProto.Name).ToUpper()
color = roleColor;
symbol = IsFiltered(playerInfo.RoleProto) ? symbol : string.Empty;
text = IsFiltered(playerInfo.RoleProto)
? roleName.ToUpper()
: string.Empty;
break;
case AdminOverlayAntagFormat.Subtype:
color = playerInfo.RoleProto.Color;
symbol = _filter.Contains(playerInfo.RoleProto) ? symbol : string.Empty;
text = _filter.Contains(playerInfo.RoleProto)
? _roles.GetRoleSubtypeLabel(playerInfo.RoleProto.Name, playerInfo.Subtype).ToUpper()
color = roleColor;
symbol = IsFiltered(playerInfo.RoleProto) ? symbol : string.Empty;
text = IsFiltered(playerInfo.RoleProto)
? _roles.GetRoleSubtypeLabel(roleName, playerInfo.Subtype).ToUpper()
: string.Empty;
break;
default:
@@ -258,4 +271,12 @@ internal sealed class AdminNameOverlay : Overlay
drawnOverlays.Add((screenCoordinatesCenter, currentOffset));
}
}
private static bool IsFiltered(ProtoId<RoleTypePrototype>? roleProtoId)
{
if (roleProtoId == null)
return false;
return Filter.Contains(roleProtoId.Value);
}
}
@@ -1,10 +0,0 @@
using Content.Shared.Administration.Components;
using Robust.Shared.GameStates;
namespace Content.Client.Administration.Components;
[RegisterComponent]
public sealed partial class HeadstandComponent : SharedHeadstandComponent
{
}
@@ -15,6 +15,7 @@ namespace Content.Client.Administration.Managers
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IClientNetManager _netMgr = default!;
[Dependency] private readonly IClientConGroupController _conGroup = default!;
[Dependency] private readonly IClientConsoleHost _host = default!;
[Dependency] private readonly IResourceManager _res = default!;
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IUserInterfaceManager _userInterface = default!;
@@ -86,12 +87,12 @@ namespace Content.Client.Administration.Managers
private void UpdateMessageRx(MsgUpdateAdminStatus message)
{
_availableCommands.Clear();
var host = IoCManager.Resolve<IClientConsoleHost>();
// Anything marked as Any we'll just add even if the server doesn't know about it.
foreach (var (command, instance) in host.AvailableCommands)
foreach (var (command, instance) in _host.AvailableCommands)
{
if (Attribute.GetCustomAttribute(instance.GetType(), typeof(AnyCommandAttribute)) == null) continue;
if (Attribute.GetCustomAttribute(instance.GetType(), typeof(AnyCommandAttribute)) == null)
continue;
_availableCommands.Add(command);
}
@@ -1,7 +0,0 @@
using Content.Shared.Administration;
namespace Content.Client.Administration.Systems;
public sealed class AdminFrozenSystem : SharedAdminFrozenSystem
{
}
@@ -4,6 +4,7 @@ using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Client.UserInterface;
using Robust.Shared.Configuration;
using Robust.Shared.Prototypes;
namespace Content.Client.Administration.Systems
{
@@ -17,6 +18,7 @@ namespace Content.Client.Administration.Systems
[Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!;
[Dependency] private readonly IConfigurationManager _configurationManager = default!;
[Dependency] private readonly SharedRoleSystem _roles = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
private AdminNameOverlay _adminNameOverlay = default!;
@@ -33,7 +35,8 @@ namespace Content.Client.Administration.Systems
_entityLookup,
_userInterfaceManager,
_configurationManager,
_roles);
_roles,
_proto);
_adminManager.AdminStatusUpdated += OnAdminStatusUpdated;
}
@@ -1,4 +1,4 @@
using Content.Client.Administration.Components;
using Content.Shared.Administration.Components;
using Robust.Client.GameObjects;
namespace Content.Client.Administration.Systems;
@@ -0,0 +1,20 @@
<Control
xmlns="https://spacestation14.io"
xmlns:viewport="clr-namespace:Content.Client.Viewport"
MouseFilter="Stop">
<PanelContainer StyleClasses="BackgroundDark" Name="AdminCameraWindowRoot" Access="Public">
<BoxContainer Orientation="Vertical" Access="Public">
<!-- Camera -->
<Control VerticalExpand="True" Name="CameraViewBox">
<viewport:ScalingViewport Name="CameraView"
MinSize="100 100"
MouseFilter="Ignore" />
</Control>
<!-- Controller buttons -->
<BoxContainer Orientation="Horizontal" Margin="5 5 5 5">
<Button StyleClasses="OpenRight" Name="FollowButton" HorizontalExpand="True" Access="Public" Text="{Loc 'admin-camera-window-follow'}" />
<Button StyleClasses="OpenLeft" Name="PopControl" HorizontalExpand="True" Access="Public" Text="{Loc 'admin-camera-window-pop-out'}" />
</BoxContainer>
</BoxContainer>
</PanelContainer>
</Control>
@@ -0,0 +1,101 @@
using System.Numerics;
using Content.Client.Eye;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.Timing;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
namespace Content.Client.Administration.UI.AdminCamera;
[GenerateTypedNameReferences]
public sealed partial class AdminCameraControl : Control
{
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IClientGameTiming _timing = default!;
public event Action? OnFollow;
public event Action? OnPopoutControl;
private readonly EyeLerpingSystem _eyeLerpingSystem;
private readonly FixedEye _defaultEye = new();
private AdminCameraEuiState? _nextState;
private const float MinimumZoom = 0.1f;
private const float MaximumZoom = 2.0f;
public EntityUid? CurrentCamera;
public float Zoom = 1.0f;
public bool IsPoppedOut;
public AdminCameraControl()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_eyeLerpingSystem = _entManager.System<EyeLerpingSystem>();
CameraView.Eye = _defaultEye;
FollowButton.OnPressed += _ => OnFollow?.Invoke();
PopControl.OnPressed += _ => OnPopoutControl?.Invoke();
CameraView.OnResized += OnResized;
}
private new void OnResized()
{
var width = Math.Max(CameraView.PixelWidth, (int)Math.Floor(CameraView.MinWidth));
var height = Math.Max(CameraView.PixelHeight, (int)Math.Floor(CameraView.MinHeight));
CameraView.ViewportSize = new Vector2i(width, height);
}
protected override void MouseWheel(GUIMouseWheelEventArgs args)
{
base.MouseWheel(args);
if (CameraView.Eye == null)
return;
Zoom = Math.Clamp(Zoom - args.Delta.Y * 0.15f * Zoom, MinimumZoom, MaximumZoom);
CameraView.Eye.Zoom = new Vector2(Zoom, Zoom);
args.Handle();
}
public void SetState(AdminCameraEuiState state)
{
_nextState = state;
}
// I know that this is awful, but I copied this from the solution editor anyways.
// This is needed because EUIs update before the gamestate is applied, which means it will fail to get the uid from the net entity.
// The suggestion from the comment in the solution editor saying to use a BUI is not ideal either:
// - We would need to bind the UI to an entity, but with how BUIs currently work we cannot open it in the same tick as we spawn that entity on the server.
// - We want the UI opened by the user session, not by their currently attached entity. Otherwise it would close in cases where admins move from one entity to another, for example when ghosting.
protected override void FrameUpdate(FrameEventArgs args)
{
if (_nextState == null || _timing.LastRealTick < _nextState.Tick) // make sure the last gamestate has been applied
return;
if (!_entManager.TryGetEntity(_nextState.Camera, out var cameraUid))
return;
if (CurrentCamera == null)
{
_eyeLerpingSystem.AddEye(cameraUid.Value);
CurrentCamera = cameraUid;
}
else if (CurrentCamera != cameraUid)
{
_eyeLerpingSystem.RemoveEye(CurrentCamera.Value);
_eyeLerpingSystem.AddEye(cameraUid.Value);
CurrentCamera = cameraUid;
}
if (_entManager.TryGetComponent<EyeComponent>(CurrentCamera, out var eye))
CameraView.Eye = eye.Eye ?? _defaultEye;
}
}
@@ -0,0 +1,117 @@
using System.Numerics;
using Content.Client.Eui;
using Content.Shared.Administration;
using Content.Shared.Eui;
using JetBrains.Annotations;
using Robust.Client.UserInterface.Controls;
namespace Content.Client.Administration.UI.AdminCamera;
/// <summary>
/// Admin Eui for opening a viewport window to observe entities.
/// Use the "Open Camera" admin verb or the "camera" command to open.
/// </summary>
[UsedImplicitly]
public sealed partial class AdminCameraEui : BaseEui
{
private readonly AdminCameraWindow _window;
private readonly AdminCameraControl _control;
// If not null the camera is in "popped out" mode and is in an external window.
private OSWindow? _OSWindow;
// The last location the window was located at in game.
// Is used for getting knowing where to "pop in" external windows.
private Vector2 _lastLocation;
public AdminCameraEui()
{
_window = new AdminCameraWindow();
_control = new AdminCameraControl();
_window.Contents.AddChild(_control);
_control.OnFollow += () => SendMessage(new AdminCameraFollowMessage());
_window.OnClose += () =>
{
if (!_control.IsPoppedOut)
SendMessage(new CloseEuiMessage());
};
_control.OnPopoutControl += () =>
{
if (_control.IsPoppedOut)
PopIn();
else
PopOut();
};
}
// Pop the window out into an external OS window
private void PopOut()
{
_lastLocation = _window.Position;
// TODO: When there is a way to have a minimum window size, enforce something!
_OSWindow = new OSWindow
{
SetSize = _window.Size,
Title = _window.Title ?? Loc.GetString("admin-camera-window-title-placeholder"),
};
_OSWindow.Show();
if (_OSWindow.Root == null)
return;
_control.Orphan();
_OSWindow.Root.AddChild(_control);
_OSWindow.Closed += () =>
{
if (_control.IsPoppedOut)
SendMessage(new CloseEuiMessage());
};
_control.IsPoppedOut = true;
_control.PopControl.Text = Loc.GetString("admin-camera-window-pop-in");
_window.Close();
}
// Pop the window back into the in game window.
private void PopIn()
{
_control.Orphan();
_window.Contents.AddChild(_control);
_window.Open(_lastLocation);
_control.IsPoppedOut = false;
_control.PopControl.Text = Loc.GetString("admin-camera-window-pop-out");
_OSWindow?.Close();
_OSWindow = null;
}
public override void Opened()
{
base.Opened();
_window.OpenCentered();
}
public override void Closed()
{
base.Closed();
_window.Close();
}
public override void HandleState(EuiStateBase baseState)
{
if (baseState is not AdminCameraEuiState state)
return;
_window.SetState(state);
_control.SetState(state);
}
}
@@ -0,0 +1,6 @@
<DefaultWindow xmlns="https://spacestation14.io"
Title="{Loc admin-camera-window-title-placeholder}"
SetSize="425 550"
MinSize="200 225"
Name="Window">
</DefaultWindow>
@@ -0,0 +1,23 @@
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
namespace Content.Client.Administration.UI.AdminCamera;
[GenerateTypedNameReferences]
public sealed partial class AdminCameraWindow : DefaultWindow
{
public AdminCameraWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
ContentsContainer.Margin = new Thickness(5, 0, 5, 0);
}
public void SetState(AdminCameraEuiState state)
{
Title = Loc.GetString("admin-camera-window-title", ("name", state.Name));
}
}
@@ -1,7 +1,7 @@
<DefaultWindow
xmlns="https://spacestation14.io"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
Title="{Loc ban-panel-title}" MinSize="350 500">
Title="{Loc ban-panel-title}" MinSize="410 500">
<BoxContainer Orientation="Vertical">
<TabContainer Name="Tabs" VerticalExpand="True">
<!-- Basic info -->
@@ -1,12 +1,14 @@
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Numerics;
using Content.Client.Administration.UI.CustomControls;
using Content.Shared.Administration;
using Content.Shared.CCVar;
using Content.Shared.Database;
using Content.Shared.Roles;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
@@ -31,14 +33,21 @@ public sealed partial class BanPanel : DefaultWindow
private uint Multiplier { get; set; }
private bool HasBanFlag { get; set; }
private TimeSpan? ButtonResetOn { get; set; }
// This is less efficient than just holding a reference to the root control and enumerating children, but you
// have to know how the controls are nested, which makes the code more complicated.
private readonly List<CheckBox> _roleCheckboxes = new();
// Role group name -> the role buttons themselves.
private readonly Dictionary<string, List<Button>> _roleCheckboxes = new();
private readonly ISawmill _banpanelSawmill;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IEntityManager _entMan = default!;
[Dependency] private readonly IPrototypeManager _protoMan = default!;
private const string ExpandedArrow = "▼";
private const string ContractedArrow = "▶";
private enum TabNumbers
{
@@ -144,47 +153,90 @@ public sealed partial class BanPanel : DefaultWindow
ReasonTextEdit.Placeholder = new Rope.Leaf(Loc.GetString("ban-panel-reason"));
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
foreach (var proto in prototypeManager.EnumeratePrototypes<DepartmentPrototype>())
var departmentJobs = _protoMan.EnumeratePrototypes<DepartmentPrototype>()
.OrderBy(x => x.Weight);
foreach (var proto in departmentJobs)
{
CreateRoleGroup(proto.ID, proto.Roles.Select(p => p.Id), proto.Color);
var roles = proto.Roles.Select(x => _protoMan.Index(x))
.OrderBy(x => x.ID);
CreateRoleGroup(proto.ID, proto.Color, roles);
}
CreateRoleGroup("Antagonist", prototypeManager.EnumeratePrototypes<AntagPrototype>().Select(p => p.ID), Color.Red);
var antagRoles = _protoMan.EnumeratePrototypes<AntagPrototype>()
.OrderBy(x => x.ID);
CreateRoleGroup("Antagonist", Color.Red, antagRoles);
}
private void CreateRoleGroup(string roleName, IEnumerable<string> roleList, Color color)
/// <summary>
/// Creates a "Role group" which stores information and logic for one "group" of roll bans.
/// For example, all antags are one group, logi is a group, medical is a group, etc...
/// </summary>
private void CreateRoleGroup<T>(string groupName, Color color, IEnumerable<T> roles) where T : class, IPrototype
{
var outerContainer = new BoxContainer
{
Name = $"{roleName}GroupOuterBox",
Name = $"{groupName}GroupOuterBox",
HorizontalExpand = true,
VerticalExpand = true,
Orientation = BoxContainer.LayoutOrientation.Vertical,
Margin = new Thickness(4)
Margin = new Thickness(4),
};
var departmentCheckbox = new CheckBox
// Stores stuff like ban all and expand buttons.
var roleGroupHeader = new BoxContainer
{
Name = $"{roleName}GroupCheckbox",
Text = roleName,
Modulate = color,
HorizontalAlignment = HAlignment.Left
Orientation = BoxContainer.LayoutOrientation.Horizontal,
};
outerContainer.AddChild(departmentCheckbox);
var innerContainer = new BoxContainer
// Stores the role checkboxes themselves.
var innerContainer = new GridContainer
{
Name = $"{roleName}GroupInnerBox",
Name = $"{groupName}GroupInnerBox",
HorizontalExpand = true,
Orientation = BoxContainer.LayoutOrientation.Horizontal
Columns = 2,
Visible = false,
Margin = new Thickness(15, 5, 0, 5),
};
departmentCheckbox.OnToggled += args =>
var roleGroupCheckbox = CreateRoleGroupHeader(groupName, roleGroupHeader, color, innerContainer);
outerContainer.AddChild(roleGroupHeader);
// Add the roles themselves
foreach (var role in roles)
{
foreach (var child in innerContainer.Children)
AddRoleCheckbox(groupName, role.ID, innerContainer, roleGroupCheckbox);
}
outerContainer.AddChild(innerContainer);
RolesContainer.AddChild(new PanelContainer
{
PanelOverride = new StyleBoxFlat
{
if (child is CheckBox c)
{
c.Pressed = args.Pressed;
}
BackgroundColor = color
}
});
RolesContainer.AddChild(outerContainer);
RolesContainer.AddChild(new HSeparator());
}
private Button CreateRoleGroupHeader(string groupName, BoxContainer header, Color color, GridContainer innerContainer)
{
var roleGroupCheckbox = new Button
{
Name = $"{groupName}GroupCheckbox",
Text = "Ban all",
Margin = new Thickness(0, 0, 5, 0),
ToggleMode = true,
};
// When this is toggled, toggle all buttons in this group so they match.
roleGroupCheckbox.OnToggled += args =>
{
foreach (var role in _roleCheckboxes[groupName])
{
role.Pressed = args.Pressed;
}
if (args.Pressed)
@@ -199,15 +251,12 @@ public sealed partial class BanPanel : DefaultWindow
}
else
{
foreach (var childContainer in RolesContainer.Children)
foreach (var roleButtons in _roleCheckboxes.Values)
{
if (childContainer is Container)
foreach (var button in roleButtons)
{
foreach (var child in childContainer.Children)
{
if (child is CheckBox { Pressed: true })
return;
}
if (button.Pressed)
return;
}
}
@@ -220,38 +269,72 @@ public sealed partial class BanPanel : DefaultWindow
SeverityOption.SelectId((int) newSeverity);
}
};
outerContainer.AddChild(innerContainer);
foreach (var role in roleList)
var hideButton = new Button
{
AddRoleCheckbox(role, innerContainer, departmentCheckbox);
}
RolesContainer.AddChild(new PanelContainer
Text = Loc.GetString("role-bans-expand-roles") + " " + ContractedArrow,
ToggleMode = true,
};
hideButton.OnPressed += args =>
{
PanelOverride = new StyleBoxFlat
{
BackgroundColor = color
}
innerContainer.Visible = args.Button.Pressed;
((Button)args.Button).Text = args.Button.Pressed
? Loc.GetString("role-bans-contract-roles") + " " + ExpandedArrow
: Loc.GetString("role-bans-expand-roles") + " " + ContractedArrow;
};
header.AddChild(new Label
{
Text = groupName,
Modulate = color,
Margin = new Thickness(0, 0, 5, 0),
});
RolesContainer.AddChild(outerContainer);
RolesContainer.AddChild(new HSeparator());
header.AddChild(roleGroupCheckbox);
header.AddChild(hideButton);
return roleGroupCheckbox;
}
private void AddRoleCheckbox(string role, Control container, CheckBox header)
/// <summary>
/// Adds a checkbutton specifically for one "role" in a "group"
/// E.g. it would add the Chief Medical Officer "role" into the "Medical" group.
/// </summary>
private void AddRoleCheckbox(string group, string role, GridContainer roleGroupInnerContainer, Button roleGroupCheckbox)
{
var roleCheckbox = new CheckBox
var roleCheckboxContainer = new BoxContainer();
var roleCheckButton = new Button
{
Name = $"{role}RoleCheckbox",
Text = role
Text = role,
ToggleMode = true,
};
roleCheckbox.OnToggled += args =>
roleCheckButton.OnToggled += args =>
{
if (args is { Pressed: true, Button.Parent: { } } && args.Button.Parent.Children.Where(e => e is CheckBox).All(e => ((CheckBox) e).Pressed))
header.Pressed = args.Pressed;
// Checks the role group checkbox if all the children are pressed
if (args.Pressed && _roleCheckboxes[group].All(e => e.Pressed))
roleGroupCheckbox.Pressed = args.Pressed;
else
header.Pressed = false;
roleGroupCheckbox.Pressed = false;
};
container.AddChild(roleCheckbox);
_roleCheckboxes.Add(roleCheckbox);
// This is adding the icon before the role name
// Yeah, this is sus, but having to split the functions up and stuff is worse imo.
if (_protoMan.TryIndex<JobPrototype>(role, out var jobPrototype) && _protoMan.TryIndex(jobPrototype.Icon, out var iconProto))
{
var jobIconTexture = new TextureRect
{
Texture = _entMan.System<SpriteSystem>().Frame0(iconProto.Icon),
TextureScale = new Vector2(2.5f, 2.5f),
Stretch = TextureRect.StretchMode.KeepCentered,
Margin = new Thickness(5, 0, 0, 0),
};
roleCheckboxContainer.AddChild(jobIconTexture);
}
roleCheckboxContainer.AddChild(roleCheckButton);
roleGroupInnerContainer.AddChild(roleCheckboxContainer);
_roleCheckboxes.TryAdd(group, []);
_roleCheckboxes[group].Add(roleCheckButton);
}
public void UpdateBanFlag(bool newFlag)
@@ -469,7 +552,13 @@ public sealed partial class BanPanel : DefaultWindow
if (_roleCheckboxes.Count == 0)
throw new DebugAssertException("RoleCheckboxes was empty");
rolesList.AddRange(_roleCheckboxes.Where(c => c is { Pressed: true, Text: { } }).Select(c => c.Text!));
foreach (var button in _roleCheckboxes.Values.SelectMany(departmentButtons => departmentButtons))
{
if (button is { Pressed: true, Text: not null })
{
rolesList.Add(button.Text);
}
}
if (rolesList.Count == 0)
{
@@ -1,33 +0,0 @@
using Content.Shared.Administration.Logs;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
namespace Content.Client.Administration.UI.CustomControls;
public sealed class AdminLogLabel : RichTextLabel
{
public AdminLogLabel(ref SharedAdminLog log, HSeparator separator)
{
Log = log;
Separator = separator;
SetMessage($"{log.Date:HH:mm:ss}: {log.Message}");
OnVisibilityChanged += VisibilityChanged;
}
public SharedAdminLog Log { get; }
public HSeparator Separator { get; }
private void VisibilityChanged(Control control)
{
Separator.Visible = Visible;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
OnVisibilityChanged -= VisibilityChanged;
}
}
@@ -1,16 +1,15 @@
using System.Linq;
using System.Text.RegularExpressions;
using Content.Client.Administration.Systems;
using Content.Client.UserInterface.Controls;
using Content.Client.Verbs.UI;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Input;
using Robust.Shared.Utility;
namespace Content.Client.Administration.UI.CustomControls;
@@ -96,13 +95,26 @@ public sealed partial class PlayerListControl : BoxContainer
private void FilterList()
{
_sortedPlayerList.Clear();
Regex filterRegex;
// There is no neat way to handle invalid regex being submitted other than
// catching and ignoring the exception which gets thrown when it's invalid.
try
{
filterRegex = new Regex(FilterLineEdit.Text, RegexOptions.IgnoreCase);
}
catch (ArgumentException)
{
return;
}
foreach (var info in _playerList)
{
var displayName = $"{info.CharacterName} ({info.Username})";
if (info.IdentityName != info.CharacterName)
displayName += $" [{info.IdentityName}]";
if (!string.IsNullOrEmpty(FilterLineEdit.Text)
&& !displayName.ToLowerInvariant().Contains(FilterLineEdit.Text.Trim().ToLowerInvariant()))
&& !filterRegex.IsMatch(displayName))
continue;
_sortedPlayerList.Add(info);
}
@@ -1,10 +1,8 @@
using Content.Client.Stylesheets;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Utility;
namespace Content.Client.Administration.UI.CustomControls;
@@ -1,5 +1,6 @@
<Control xmlns="https://spacestation14.io"
xmlns:aui="clr-namespace:Content.Client.Administration.UI.CustomControls">
xmlns:aui="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:ui="clr-namespace:Content.Client.Options.UI">
<PanelContainer StyleClasses="BackgroundDark">
<BoxContainer Orientation="Horizontal">
<BoxContainer Orientation="Vertical">
@@ -47,10 +48,22 @@
<BoxContainer Name="TopRightContainer">
<BoxContainer Name="LogImpactContainer" Orientation="Horizontal"/>
<Control HorizontalExpand="True"/>
<BoxContainer Name="LogOrderContainer" Orientation="Horizontal">
<Button Name="AscendingOrderButton" Access="Public" Text="{Loc admin-logs-order-ascending}" StyleClasses="OpenRight" />
<Button Name="DescendingOrderButton" Access="Public" Text="{Loc admin-logs-order-descending}" StyleClasses="OpenLeft" />
</BoxContainer>
<Control HorizontalExpand="True"/>
<Label Name="Count" Access="Public"/>
<Control HorizontalExpand="True"/>
<Button Name="PopOutButton" Access="Public" Text="{Loc admin-logs-pop-out}"/>
</BoxContainer>
<BoxContainer HorizontalExpand="True">
<Button Name="RenderRichTextButton" Access="Public" Text="{Loc admin-logs-render-rich-text}"
StyleClasses="OpenRight" ToggleMode="True"/>
<Button Name="RemoveMarkupButton" Access="Public" Text="{Loc admin-logs-remove-markup}"
StyleClasses="OpenLeft" ToggleMode="True"/>
<Control HorizontalExpand="True"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal">
<LineEdit Name="LogSearch" Access="Public" StyleClasses="actionSearchBox"
HorizontalExpand="true" PlaceHolder="{Loc admin-logs-search-logs-placeholder}"/>
@@ -1,6 +1,8 @@
using System.Linq;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using Content.Client.Administration.UI.CustomControls;
using Content.Client.Administration.UI.Logs.Entries;
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
using Robust.Client.AutoGenerated;
@@ -38,18 +40,31 @@ public sealed partial class AdminLogsControl : Control
SelectAllPlayersButton.OnPressed += SelectAllPlayers;
SelectNoPlayersButton.OnPressed += SelectNoPlayers;
RenderRichTextButton.OnPressed += RenderRichTextChanged;
RemoveMarkupButton.OnPressed += RemoveMarkupChanged;
RoundSpinBox.IsValid = i => i > 0 && i <= CurrentRound;
RoundSpinBox.ValueChanged += RoundSpinBoxChanged;
RoundSpinBox.InitDefaultButtons();
ResetRoundButton.OnPressed += ResetRoundPressed;
// START DEN - Admin Log Sorting
AscendingOrderButton.Pressed = this.ReverseLogOrder;
DescendingOrderButton.Pressed = !this.ReverseLogOrder;
AscendingOrderButton.OnPressed += SetLogOrderAscending;
DescendingOrderButton.OnPressed += SetLogOrderDescending;
// END DEN - Admin Log Sorting
SetImpacts(Enum.GetValues<LogImpact>().OrderBy(impact => impact).ToArray());
SetTypes(Enum.GetValues<LogType>());
}
private int CurrentRound { get; set; }
private Regex LogSearchRegex { get; set; } = new("");
public int SelectedRoundId => RoundSpinBox.Value;
public string Search => LogSearch.Text;
private int ShownLogs { get; set; }
@@ -57,6 +72,20 @@ public sealed partial class AdminLogsControl : Control
private int RoundLogs { get; set; }
public bool IncludeNonPlayerLogs { get; set; }
/// <summary>
/// THE DEN - Admin Log Sorting
/// Reverses the logs displayed when updating logs. True means logs will be ascending order.
/// The server sends the logs in descending order, so reversing means it will be ascending order.
/// </summary>
public bool ReverseLogOrder { get; set; } = true;
/// <summary>
/// THE DEN - Admin Log Sorting
/// The raw log entries recieved from the server. It should always be in descdending order.
/// </summary>
private List<SharedAdminLog> RawAdminLogs { get; set; } = new();
private bool RenderRichText { get; set; }
private bool RemoveMarkup { get; set; }
public HashSet<LogType> SelectedTypes { get; } = new();
public HashSet<Guid> SelectedPlayers { get; } = new();
@@ -103,6 +132,19 @@ public sealed partial class AdminLogsControl : Control
private void LogSearchChanged(LineEditEventArgs args)
{
// This exception is thrown if the regex is invalid, which happens often, so we ignore it.
try
{
LogSearchRegex = new Regex(
"(" + LogSearch.Text + ")",
RegexOptions.IgnoreCase,
TimeSpan.FromSeconds(1));
}
catch (ArgumentException)
{
return;
}
UpdateLogs();
}
@@ -184,6 +226,26 @@ public sealed partial class AdminLogsControl : Control
UpdateLogs();
}
private void RenderRichTextChanged(ButtonEventArgs args)
{
RenderRichText = args.Button.Pressed;
RemoveMarkup = RemoveMarkup && !RenderRichText;
RemoveMarkupButton.Pressed = RemoveMarkup;
UpdateLogs();
}
private void RemoveMarkupChanged(ButtonEventArgs args)
{
RemoveMarkup = args.Button.Pressed;
RenderRichText = !RemoveMarkup && RenderRichText;
RenderRichTextButton.Pressed = RenderRichText;
UpdateLogs();
}
public void SetTypesSelection(HashSet<LogType> selectedTypes, bool invert = false)
{
SelectedTypes.Clear();
@@ -242,16 +304,15 @@ public sealed partial class AdminLogsControl : Control
foreach (var child in LogsContainer.Children)
{
if (child is not AdminLogLabel log)
{
if (child is not AdminLogEntry log)
continue;
}
child.Visible = ShouldShowLog(log);
if (child.Visible)
{
ShownLogs++;
}
if (!child.Visible)
continue;
log.RenderResults(LogSearchRegex, RenderRichText, RemoveMarkup);
ShownLogs++;
}
UpdateCount();
@@ -269,30 +330,30 @@ public sealed partial class AdminLogsControl : Control
button.Text.Contains(PlayerSearch.Text, StringComparison.OrdinalIgnoreCase);
}
private bool LogMatchesPlayerFilter(AdminLogLabel label)
private bool LogMatchesPlayerFilter(AdminLogEntry entry)
{
if (label.Log.Players.Length == 0)
if (entry.Log.Players.Length == 0)
return SelectedPlayers.Count == 0 || IncludeNonPlayerLogs;
return SelectedPlayers.Overlaps(label.Log.Players);
return SelectedPlayers.Overlaps(entry.Log.Players);
}
private bool ShouldShowLog(AdminLogLabel label)
private bool ShouldShowLog(AdminLogEntry entry)
{
// Check log type
if (!SelectedTypes.Contains(label.Log.Type))
if (!SelectedTypes.Contains(entry.Log.Type))
return false;
// Check players
if (!LogMatchesPlayerFilter(label))
if (!LogMatchesPlayerFilter(entry))
return false;
// Check impact
if (!SelectedImpacts.Contains(label.Log.Impact))
if (!SelectedImpacts.Contains(entry.Log.Impact))
return false;
// Check search
if (!label.Log.Message.Contains(LogSearch.Text, StringComparison.OrdinalIgnoreCase))
if (!LogSearchRegex.IsMatch(entry.Log.Message))
return false;
return true;
@@ -328,6 +389,71 @@ public sealed partial class AdminLogsControl : Control
UpdateLogs();
}
// BEGIN DEN - Admin Log Sorting
private void SetLogOrderAscending(ButtonEventArgs args)
{
// Invert the buttons. There's only two possible states, so probably not a big deal to directly reference the buttons.
AscendingOrderButton.Pressed = true;
DescendingOrderButton.Pressed = false;
this.ReverseLogOrder = true; // true = ascending
RedrawLogs();
}
private void SetLogOrderDescending(ButtonEventArgs args)
{
// Invert the buttons. There's only two possible states, so probably not a big deal to directly reference the buttons.
AscendingOrderButton.Pressed = false;
DescendingOrderButton.Pressed = true;
this.ReverseLogOrder = false; // false = descending
RedrawLogs();
}
private void RedrawLogs()
{
// Need to copy the list RawAdminLogs to a new list because we don't want to screw up the ordering from
// the 'source' of truth. If we did reverse the order of that list, we'd need to keep track of the order
// of what we get from the server and how we append/prepend those logs.
var tempLogs = new List<SharedAdminLog>(RawAdminLogs);
if (ReverseLogOrder) tempLogs.Reverse();
LogsContainer.RemoveAllChildren();
UpdateCount(0, 0);
for (var i = 0; i < tempLogs.Count; i++)
{
var log = tempLogs[i];
ref var logRef = ref log; // It didn't like me doing this as one line lmao
var entry = new AdminLogEntry(ref log);
//var label = new AdminLogLabel(ref logRef, separator);
//label.Visible = ShouldShowLog(label);
TotalLogs++;
//if (label.Visible) ShownLogs++;
//LogsContainer.AddChild(label);
LogsContainer.AddChild(entry);
}
UpdateLogs();
}
/*
var span = CollectionsMarshal.AsSpan(logs);
for (var i = 0; i < span.Length; i++)
{
ref var log = ref span[i];
var entry = new AdminLogEntry(ref log);
TotalLogs++;
LogsContainer.AddChild(entry);
}
UpdateLogs();
*/
// END DEN - Admin Log Sorting
private void ImpactButtonPressed(ButtonEventArgs args)
{
var button = (AdminLogImpactButton) args.Button;
@@ -464,31 +590,15 @@ public sealed partial class AdminLogsControl : Control
public void AddLogs(List<SharedAdminLog> logs)
{
var span = CollectionsMarshal.AsSpan(logs);
for (var i = 0; i < span.Length; i++)
{
ref var log = ref span[i];
var separator = new HSeparator();
var label = new AdminLogLabel(ref log, separator);
label.Visible = ShouldShowLog(label);
TotalLogs++;
if (label.Visible)
{
ShownLogs++;
}
LogsContainer.AddChild(label);
LogsContainer.AddChild(separator);
}
UpdateCount();
RawAdminLogs.AddRange(logs); // THE DEN - Admin Log Sorting - Logs will be sent in descending order
RedrawLogs(); // Drawing the logs has been encaspulated to its own function
}
public void SetLogs(List<SharedAdminLog> logs)
{
LogsContainer.RemoveAllChildren();
UpdateCount(0, 0);
RawAdminLogs.Clear(); // THE DEN - Admin Log Sorting
AddLogs(logs);
}
@@ -526,10 +636,16 @@ public sealed partial class AdminLogsControl : Control
SelectAllTypesButton.OnPressed -= SelectAllTypes;
SelectNoTypesButton.OnPressed -= SelectNoTypes;
IncludeNonPlayersButton.OnPressed -= IncludeNonPlayers;
IncludeNonPlayersButton.OnPressed -= IncludeNonPlayers;
SelectAllPlayersButton.OnPressed -= SelectAllPlayers;
SelectNoPlayersButton.OnPressed -= SelectNoPlayers;
// START DEN - Admin Log Sorting
AscendingOrderButton.OnPressed -= SetLogOrderAscending;
DescendingOrderButton.OnPressed -= SetLogOrderDescending;
// END DEN - Admin Log Sorting
RoundSpinBox.IsValid = null;
RoundSpinBox.ValueChanged -= RoundSpinBoxChanged;
@@ -1,4 +1,6 @@
using System.Linq;
using System.IO;
using System.Linq;
using Content.Client.Administration.UI.Logs.Entries;
using Content.Client.Eui;
using Content.Shared.Administration.Logs;
using Content.Shared.Eui;
@@ -0,0 +1,14 @@
<BoxContainer xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
Orientation="Vertical">
<BoxContainer Margin="2">
<Collapsible>
<CollapsibleHeading Name="DetailsHeading" Access="Public">
<RichTextLabel Margin="20 0 0 0" Name="Message" MinSize="50 10" VerticalExpand="True" Access="Public" />
</CollapsibleHeading>
<CollapsibleBody Name="DetailsBody" Access="Public" />
</Collapsible>
</BoxContainer>
<cc:HSeparator/>
</BoxContainer>
@@ -0,0 +1,79 @@
using System.Text.RegularExpressions;
using Content.Client.Message;
using Content.Shared.Administration.Logs;
using Content.Shared.CCVar;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
using Robust.Shared.Utility;
namespace Content.Client.Administration.UI.Logs.Entries;
[GenerateTypedNameReferences]
public sealed partial class AdminLogEntry : BoxContainer
{
private readonly IConfigurationManager _cfgManager;
public SharedAdminLog Log { get; }
private readonly string _rawMessage;
public AdminLogEntry(ref SharedAdminLog log)
{
_cfgManager = IoCManager.Resolve<IConfigurationManager>();
RobustXamlLoader.Load(this);
Log = log;
_rawMessage = $"{log.Date:HH:mm:ss}: {log.Message}";
Message.SetMessage(_rawMessage);
DetailsHeading.OnToggled += DetailsToggled;
}
/// <summary>
/// Sets text to be highlighted from a search result, and renders rich text, or removes all rich text markup.
/// </summary>
public void RenderResults(Regex highlightRegex, bool renderRichText, bool removeMarkup)
{
var color = _cfgManager.GetCVar(CCVars.AdminLogsHighlightColor);
var formattedMessage = renderRichText
? _rawMessage
: removeMarkup
? FormattedMessage.RemoveMarkupPermissive(_rawMessage)
: FormattedMessage.EscapeText(_rawMessage);
// Want to avoid highlighting smaller strings
if (highlightRegex.ToString().Length > 4)
{
try
{
formattedMessage = highlightRegex.Replace(formattedMessage, $"[color={color}]$1[/color]", 3);
}
catch (RegexMatchTimeoutException)
{
// if we time out then don't bother highlighting results
}
}
if (!FormattedMessage.TryFromMarkup(formattedMessage, out var outputMessage))
return;
Message.SetMessage(outputMessage);
}
/// <summary>
/// We perform some extra calculations in the dropdown, so we want to render that only when
/// the dropdown is actually opened.
/// This also removes itself from the event listener so it doesn't trigger again.
/// </summary>
private void DetailsToggled(BaseButton.ButtonToggledEventArgs args)
{
if (!args.Pressed || DetailsBody.ChildCount > 0)
return;
DetailsBody.AddChild(new AdminLogEntryDetails(Log));
DetailsHeading.OnToggled -= DetailsToggled;
}
}
@@ -0,0 +1,44 @@
<BoxContainer xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
StyleClasses="BackgroundDark">
<BoxContainer Orientation="Vertical" Margin="4">
<BoxContainer Orientation="Vertical">
<Label Text="{Loc admin-logs-field-type}" Margin="0 0 4 0"/>
<Label Name="Type" Text="None" StyleClasses="LabelSecondaryColor" Access="Public"/>
</BoxContainer>
<cc:HSeparator/>
<BoxContainer Orientation="Vertical">
<Label Text="{Loc admin-logs-field-impact}" Margin="0 0 4 0"/>
<Label Name="Impact" Text="None" StyleClasses="LabelSecondaryColor" Access="Public"/>
</BoxContainer>
</BoxContainer>
<cc:VSeparator/>
<BoxContainer Orientation="Vertical" Margin="4">
<Label Text="{Loc admin-logs-field-time-header}"/>
<cc:HSeparator/>
<BoxContainer>
<Label Text="{Loc admin-logs-field-time-local}" Margin="0 0 4 0" HorizontalExpand="True"/>
<Label Name="LocalTime" Text="None" StyleClasses="LabelSecondaryColor" Access="Public" HorizontalExpand="True"/>
</BoxContainer>
<cc:HSeparator/>
<BoxContainer Orientation="Horizontal">
<Label Text="{Loc admin-logs-field-time-utc}" Margin="0 0 4 0" HorizontalExpand="True"/>
<Label Name="UTCTime" Text="None" StyleClasses="LabelSecondaryColor" Access="Public" HorizontalExpand="True"/>
</BoxContainer>
<cc:HSeparator/>
<BoxContainer Orientation="Horizontal">
<Label Text="{Loc admin-logs-field-time-round}" Margin="0 0 4 0" HorizontalExpand="True"/>
<Label Name="CurTime" Text="None" StyleClasses="LabelSecondaryColor" Access="Public" HorizontalExpand="True"/>
</BoxContainer>
</BoxContainer>
<cc:VSeparator/>
<BoxContainer Orientation="Vertical" Margin="4" HorizontalExpand="True">
<Label Text="{Loc admin-logs-field-players-header}"/>
<cc:HSeparator/>
<BoxContainer Orientation="Horizontal" Margin="4" VerticalExpand="True">
<controls:ListContainer Name="PlayerListContainer" Access="Public" HorizontalExpand="True"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
@@ -0,0 +1,98 @@
using System.Linq;
using Content.Client.Administration.Systems;
using Content.Client.Administration.UI.CustomControls;
using Content.Client.UserInterface.Controls;
using Content.Client.Verbs.UI;
using Content.Shared.Administration.Logs;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Input;
using Robust.Shared.Network;
namespace Content.Client.Administration.UI.Logs.Entries;
[GenerateTypedNameReferences]
public sealed partial class AdminLogEntryDetails : BoxContainer
{
private readonly AdminSystem _adminSystem;
private readonly IUserInterfaceManager _uiManager;
private readonly IEntityManager _entManager;
public AdminLogEntryDetails(SharedAdminLog log)
{
RobustXamlLoader.Load(this);
_entManager = IoCManager.Resolve<IEntityManager>();
_uiManager = IoCManager.Resolve<IUserInterfaceManager>();
_adminSystem = _entManager.System<AdminSystem>();
Type.Text = log.Type.ToString();
Impact.Text = log.Impact.ToString();
LocalTime.Text = $"{log.Date.ToLocalTime():HH:mm:ss}";
UTCTime.Text = $"{log.Date:HH:mm:ss}";
// TimeSpan and DateTime use different formatting string conventions for some completely logical reason
// that mere mortals such as myself will never be able to understand.
CurTime.Text = new TimeSpan(log.CurTime).ToString(@"hh\:mm\:ss");
PlayerListContainer.ItemKeyBindDown += PlayerListItemKeyBindDown;
PlayerListContainer.GenerateItem += GenerateButton;
PopulateList(log.Players);
}
private void PopulateList(Guid[] players)
{
if (players.Length == 0)
return;
if (_adminSystem.PlayerList is not { } allPlayers || allPlayers.Count == 0)
return;
var listData = new List<PlayerListData>();
foreach (var playerGuid in players)
{
var netUserId = new NetUserId(playerGuid);
// Linq here is fine since this runs in response to admin input in the UI and
// this loop only tends to go through 1-4 iterations.
if (allPlayers.FirstOrDefault(player => player.SessionId == netUserId) is not { } playerInfo)
continue;
listData.Add(new PlayerListData(playerInfo));
}
if (listData.Count == 0)
return;
PlayerListContainer.PopulateList(listData);
}
private void PlayerListItemKeyBindDown(GUIBoundKeyEventArgs? args, ListData? data)
{
if (args == null || data is not PlayerListData { Info: var selectedPlayer })
return;
if (!(args.Function == EngineKeyFunctions.UIRightClick
|| args.Function == EngineKeyFunctions.UIClick)
|| selectedPlayer.NetEntity == null)
return;
_uiManager.GetUIController<VerbMenuUIController>().OpenVerbMenu(selectedPlayer.NetEntity.Value, true);
args.Handle();
}
private void GenerateButton(ListData data, ListContainerButton button)
{
if (data is not PlayerListData { Info: var info })
return;
var entryLabel = new Label();
entryLabel.Text = $"{info.CharacterName} ({info.Username})";
var entry = new BoxContainer();
entry.AddChild(entryLabel);
button.AddChild(entry);
button.AddStyleClass(ListContainer.StyleClassListContainerButton);
}
}
@@ -8,6 +8,21 @@
<OptionButton Name="SolutionOption" HorizontalExpand="True"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="0 4">
<Button Name="VVButton"
Text="{Loc 'admin-solutions-window-vv-button'}"
ToolTip="{Loc 'admin-solutions-window-vv-button-tooltip'}"
Disabled="True"
HorizontalExpand="True"
StyleClasses="OpenRight"/>
<Button Name="SolutionButton"
Text="{Loc 'admin-solutions-window-solution-button'}"
ToolTip="{Loc 'admin-solutions-window-solution-button-tooltip'}"
Disabled="True"
HorizontalExpand="True"
StyleClasses="OpenLeft"/>
</BoxContainer>
<!-- The total volume / capacity of the solution -->
<BoxContainer Name="VolumeBox" Orientation="Vertical" HorizontalExpand="True" Margin="0 4"/>
@@ -1,3 +1,4 @@
using Content.Client.Administration.Managers;
using Content.Shared.Administration;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Reagent;
@@ -20,6 +21,7 @@ namespace Content.Client.Administration.UI.ManageSolutions
[Dependency] private readonly IClientConsoleHost _consoleHost = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IClientGameTiming _timing = default!;
[Dependency] private readonly IClientAdminManager _admin = default!;
private NetEntity _target = NetEntity.Invalid;
private string? _selectedSolution;
@@ -34,6 +36,11 @@ namespace Content.Client.Administration.UI.ManageSolutions
SolutionOption.OnItemSelected += SolutionSelected;
AddButton.OnPressed += OpenAddReagentWindow;
VVButton.OnPressed += OpenVVWindow;
SolutionButton.OnPressed += OpenSolutionWindow;
VVButton.Disabled = !_admin.CanViewVar();
SolutionButton.Disabled = !_admin.CanViewVar();
}
public override void Close()
@@ -271,6 +278,32 @@ namespace Content.Client.Administration.UI.ManageSolutions
_addReagentWindow.OpenCentered();
}
/// <summary>
/// Open the corresponding solution entity in a ViewVariables window.
/// </summary>
private void OpenVVWindow(BaseButton.ButtonEventArgs obj)
{
if (_solutions == null
|| _selectedSolution == null
|| !_solutions.TryGetValue(_selectedSolution, out var uid)
|| !_entityManager.TryGetNetEntity(uid, out var netEntity))
return;
_consoleHost.ExecuteCommand($"vv {netEntity}");
}
/// <summary>
/// Open the corresponding Solution instance in a ViewVariables window.
/// </summary>
private void OpenSolutionWindow(BaseButton.ButtonEventArgs obj)
{
if (_solutions == null
|| _selectedSolution == null
|| !_solutions.TryGetValue(_selectedSolution, out var uid)
|| !_entityManager.TryGetNetEntity(uid, out var netEntity))
return;
_consoleHost.ExecuteCommand($"vv /entity/{netEntity}/Solution/Solution");
}
/// <summary>
/// When a new solution is selected, set _selectedSolution and update the reagent list.
/// </summary>
@@ -31,6 +31,7 @@
<Button Name="FreezeAndMuteToggleButton" Text="{Loc player-panel-freeze-and-mute}" Disabled="True"/>
<Button Name="BanButton" Text="{Loc player-panel-ban}" Disabled="True"/>
<controls:ConfirmButton Name="RejuvenateButton" Text="{Loc player-panel-rejuvenate}" Disabled="True"/>
<Button Name="CameraButton" Text="{Loc player-panel-camera}" Disabled="True"/>
</GridContainer>
<Button Name="JobWhitelistsButton" Text="{Loc player-panel-job-whitelists}" SetWidth="136" SetHeight="27" Disabled="True"/> <!-- DeltaV: Job whitelists -->
</BoxContainer>
@@ -18,6 +18,7 @@ public sealed partial class PlayerPanel : FancyWindow
public event Action<NetUserId?>? OnOpenBans;
public event Action<NetUserId?>? OnAhelp;
public event Action<string?>? OnKick;
public event Action<string?>? OnCamera;
public event Action<NetUserId?>? OnOpenBanPanel;
public event Action<NetUserId?, bool>? OnWhitelistToggle;
public event Action? OnFollow;
@@ -34,28 +35,29 @@ public sealed partial class PlayerPanel : FancyWindow
public PlayerPanel(IClientAdminManager adminManager)
{
RobustXamlLoader.Load(this);
_adminManager = adminManager;
RobustXamlLoader.Load(this);
_adminManager = adminManager;
UsernameCopyButton.OnPressed += _ => OnUsernameCopy?.Invoke(TargetUsername ?? "");
BanButton.OnPressed += _ => OnOpenBanPanel?.Invoke(TargetPlayer);
KickButton.OnPressed += _ => OnKick?.Invoke(TargetUsername);
NotesButton.OnPressed += _ => OnOpenNotes?.Invoke(TargetPlayer);
ShowBansButton.OnPressed += _ => OnOpenBans?.Invoke(TargetPlayer);
AhelpButton.OnPressed += _ => OnAhelp?.Invoke(TargetPlayer);
WhitelistToggle.OnPressed += _ =>
{
OnWhitelistToggle?.Invoke(TargetPlayer, _isWhitelisted);
SetWhitelisted(!_isWhitelisted);
};
FollowButton.OnPressed += _ => OnFollow?.Invoke();
FreezeButton.OnPressed += _ => OnFreeze?.Invoke();
FreezeAndMuteToggleButton.OnPressed += _ => OnFreezeAndMuteToggle?.Invoke();
LogsButton.OnPressed += _ => OnLogs?.Invoke();
DeleteButton.OnPressed += _ => OnDelete?.Invoke();
RejuvenateButton.OnPressed += _ => OnRejuvenate?.Invoke();
UsernameCopyButton.OnPressed += _ => OnUsernameCopy?.Invoke(TargetUsername ?? "");
BanButton.OnPressed += _ => OnOpenBanPanel?.Invoke(TargetPlayer);
KickButton.OnPressed += _ => OnKick?.Invoke(TargetUsername);
CameraButton.OnPressed += _ => OnCamera?.Invoke(TargetUsername);
NotesButton.OnPressed += _ => OnOpenNotes?.Invoke(TargetPlayer);
ShowBansButton.OnPressed += _ => OnOpenBans?.Invoke(TargetPlayer);
AhelpButton.OnPressed += _ => OnAhelp?.Invoke(TargetPlayer);
WhitelistToggle.OnPressed += _ =>
{
OnWhitelistToggle?.Invoke(TargetPlayer, _isWhitelisted);
SetWhitelisted(!_isWhitelisted);
};
FollowButton.OnPressed += _ => OnFollow?.Invoke();
FreezeButton.OnPressed += _ => OnFreeze?.Invoke();
FreezeAndMuteToggleButton.OnPressed += _ => OnFreezeAndMuteToggle?.Invoke();
LogsButton.OnPressed += _ => OnLogs?.Invoke();
DeleteButton.OnPressed += _ => OnDelete?.Invoke();
RejuvenateButton.OnPressed += _ => OnRejuvenate?.Invoke();
JobWhitelistsButton.OnPressed += _ => OnOpenJobWhitelists?.Invoke(TargetPlayer); // DeltaV: Job whitelists
JobWhitelistsButton.OnPressed += _ => OnOpenJobWhitelists?.Invoke(TargetPlayer); // DeltaV: Job whitelists
}
public void SetUsername(string player)
@@ -125,6 +127,7 @@ public sealed partial class PlayerPanel : FancyWindow
{
BanButton.Disabled = !_adminManager.CanCommand("banpanel");
KickButton.Disabled = !_adminManager.CanCommand("kick");
CameraButton.Disabled = !_adminManager.CanCommand("camera");
NotesButton.Disabled = !_adminManager.CanCommand("adminnotes");
ShowBansButton.Disabled = !_adminManager.CanCommand("banlist");
WhitelistToggle.Disabled =
@@ -15,7 +15,7 @@ public sealed class PlayerPanelEui : BaseEui
[Dependency] private readonly IClientAdminManager _admin = default!;
[Dependency] private readonly IClipboardManager _clipboard = default!;
private PlayerPanel PlayerPanel { get; }
private PlayerPanel PlayerPanel { get; }
public PlayerPanelEui()
{
@@ -25,6 +25,7 @@ public sealed class PlayerPanelEui : BaseEui
PlayerPanel.OnOpenNotes += id => _console.ExecuteCommand($"adminnotes \"{id}\"");
// Kick command does not support GUIDs
PlayerPanel.OnKick += username => _console.ExecuteCommand($"kick \"{username}\"");
PlayerPanel.OnCamera += username => _console.ExecuteCommand($"camera \"{username}\"");
PlayerPanel.OnOpenBanPanel += id => _console.ExecuteCommand($"banpanel \"{id}\"");
PlayerPanel.OnOpenBans += id => _console.ExecuteCommand($"banlist \"{id}\"");
PlayerPanel.OnAhelp += id => _console.ExecuteCommand($"openahelp \"{id}\"");
@@ -37,7 +38,7 @@ public sealed class PlayerPanelEui : BaseEui
PlayerPanel.OnFreeze += () => SendMessage(new PlayerPanelFreezeMessage());
PlayerPanel.OnLogs += () => SendMessage(new PlayerPanelLogsMessage());
PlayerPanel.OnRejuvenate += () => SendMessage(new PlayerPanelRejuvenationMessage());
PlayerPanel.OnDelete+= () => SendMessage(new PlayerPanelDeleteMessage());
PlayerPanel.OnDelete += () => SendMessage(new PlayerPanelDeleteMessage());
PlayerPanel.OnOpenJobWhitelists += id => _console.ExecuteCommand($"jobwhitelists \"{id}\""); // DeltaV
PlayerPanel.OnFollow += () => SendMessage(new PlayerPanelFollowMessage());
@@ -57,12 +57,43 @@ public sealed partial class ObjectsTab : Control
private void TeleportTo(NetEntity nent)
{
_console.ExecuteCommand($"tpto {nent}");
var selection = _selections[ObjectTypeOptions.SelectedId];
switch (selection)
{
case ObjectsTabSelection.Grids:
{
// directly teleport to the entity
_console.ExecuteCommand($"tpto {nent}");
}
break;
case ObjectsTabSelection.Maps:
{
// teleport to the map, not to the map entity (which is in nullspace)
if (!_entityManager.TryGetEntity(nent, out var map) || !_entityManager.TryGetComponent<MapComponent>(map, out var mapComp))
break;
_console.ExecuteCommand($"tp 0 0 {mapComp.MapId}");
break;
}
case ObjectsTabSelection.Stations:
{
// teleport to the station's largest grid, not to the station entity (which is in nullspace)
if (!_entityManager.TryGetEntity(nent, out var station))
break;
var largestGrid = _entityManager.EntitySysManager.GetEntitySystem<StationSystem>().GetLargestGrid(station.Value);
if (largestGrid == null)
break;
_console.ExecuteCommand($"tpto {largestGrid.Value}");
break;
}
default:
throw new NotImplementedException();
}
}
private void Delete(NetEntity nent)
{
_console.ExecuteCommand($"delete {nent}");
RefreshObjectList();
}
public void RefreshObjectList()
@@ -76,28 +107,24 @@ public sealed partial class ObjectsTab : Control
switch (selection)
{
case ObjectsTabSelection.Stations:
entities.AddRange(_entityManager.EntitySysManager.GetEntitySystem<StationSystem>().Stations);
entities.AddRange(_entityManager.EntitySysManager.GetEntitySystem<StationSystem>().GetStationNames());
break;
case ObjectsTabSelection.Grids:
{
var query = _entityManager.AllEntityQueryEnumerator<MapGridComponent, MetaDataComponent>();
while (query.MoveNext(out var uid, out _, out var metadata))
{
entities.Add((metadata.EntityName, _entityManager.GetNetEntity(uid)));
}
var query = _entityManager.AllEntityQueryEnumerator<MapGridComponent, MetaDataComponent>();
while (query.MoveNext(out var uid, out _, out var metadata))
entities.Add((metadata.EntityName, _entityManager.GetNetEntity(uid)));
break;
}
break;
}
case ObjectsTabSelection.Maps:
{
var query = _entityManager.AllEntityQueryEnumerator<MapComponent, MetaDataComponent>();
while (query.MoveNext(out var uid, out _, out var metadata))
{
entities.Add((metadata.EntityName, _entityManager.GetNetEntity(uid)));
}
var query = _entityManager.AllEntityQueryEnumerator<MapComponent, MetaDataComponent>();
while (query.MoveNext(out var uid, out _, out var metadata))
entities.Add((metadata.EntityName, _entityManager.GetNetEntity(uid)));
break;
}
break;
}
default:
throw new ArgumentOutOfRangeException(nameof(selection), selection, null);
}
@@ -132,8 +159,8 @@ public sealed partial class ObjectsTab : Control
entry.OnTeleport += TeleportTo;
entry.OnDelete += Delete;
button.ToolTip = $"{info.Name}, {info.Entity}";
button.AddChild(entry);
button.StyleClasses.Clear();
}
private bool DataFilterCondition(string filter, ListData listData)
@@ -1,5 +1,6 @@
<PanelContainer xmlns="https://spacestation14.io"
xmlns:customControls="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Name="BackgroundColorPanel">
<BoxContainer Orientation="Horizontal"
HorizontalExpand="True"
@@ -20,7 +21,7 @@
HorizontalExpand="True"
ClipText="True"/>
<customControls:VSeparator/>
<Button Name="DeleteButton"
<controls:ConfirmButton Name="DeleteButton"
Text="{Loc object-tab-entity-delete}"
SizeFlagsStretchRatio="3"
HorizontalExpand="True"
@@ -52,7 +52,6 @@ public sealed partial class PlayerTab : Control
_config.OnValueChanged(CCVars.AdminPlayerTabColorSetting, ColorSettingChanged, true);
_config.OnValueChanged(CCVars.AdminPlayerTabSymbolSetting, SymbolSettingChanged, true);
OverlayButton.OnPressed += OverlayButtonPressed;
ShowDisconnectedButton.OnPressed += ShowDisconnectedPressed;
@@ -65,7 +64,6 @@ public sealed partial class PlayerTab : Control
SearchList.ItemKeyBindDown += (args, data) => OnEntryKeyBindDown?.Invoke(args, data);
RefreshPlayerList(_adminSystem.PlayerList);
}
#region Antag Overlay
@@ -172,6 +170,7 @@ public sealed partial class PlayerTab : Control
_playerTabSymbolSetting);
button.AddChild(entry);
button.ToolTip = $"{player.Username}, {player.CharacterName}, {player.IdentityName}, {player.StartingJob}";
button.StyleClasses.Clear();
}
/// <summary>
@@ -1,9 +1,11 @@
using Content.Shared.Administration;
using Content.Shared.Mind;
using Content.Shared.Roles;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client.Administration.UI.Tabs.PlayerTab;
@@ -11,6 +13,7 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab;
public sealed partial class PlayerTabEntry : PanelContainer
{
[Dependency] private readonly IEntityManager _entMan = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
public PlayerTabEntry(
PlayerInfo player,
@@ -23,6 +26,8 @@ public sealed partial class PlayerTabEntry : PanelContainer
RobustXamlLoader.Load(this);
var roles = _entMan.System<SharedRoleSystem>();
var rolePrototype = player.RoleProto == null ? null : _prototype.Index(player.RoleProto.Value);
UsernameLabel.Text = player.Username;
if (!player.Connected)
UsernameLabel.StyleClasses.Add("Disabled");
@@ -57,19 +62,19 @@ public sealed partial class PlayerTabEntry : PanelContainer
break;
default:
case AdminPlayerTabSymbolOption.Specific:
symbol = player.Antag ? player.RoleProto.Symbol : string.Empty;
symbol = player.Antag ? rolePrototype?.Symbol ?? RoleTypePrototype.FallbackSymbol : string.Empty;
break;
}
CharacterLabel.Text = Loc.GetString("player-tab-character-name-antag-symbol", ("symbol", symbol), ("name", player.CharacterName));
if (player.Antag && colorAntags)
CharacterLabel.FontColorOverride = player.RoleProto.Color;
CharacterLabel.FontColorOverride = rolePrototype?.Color ?? RoleTypePrototype.FallbackColor;
if (player.IdentityName != player.CharacterName)
CharacterLabel.Text += $" [{player.IdentityName}]";
var roletype = RoleTypeLabel.Text = Loc.GetString(player.RoleProto.Name);
var subtype = roles.GetRoleSubtypeLabel(player.RoleProto.Name, player.Subtype);
var roletype = RoleTypeLabel.Text = Loc.GetString(rolePrototype?.Name ?? RoleTypePrototype.FallbackName);
var subtype = roles.GetRoleSubtypeLabel(rolePrototype?.Name ?? RoleTypePrototype.FallbackName, player.Subtype);
switch (roleSetting)
{
case AdminPlayerTabRoleTypeOption.RoleTypeSubtype:
@@ -92,7 +97,7 @@ public sealed partial class PlayerTabEntry : PanelContainer
}
if (colorRoles)
RoleTypeLabel.FontColorOverride = player.RoleProto.Color;
RoleTypeLabel.FontColorOverride = rolePrototype?.Color ?? RoleTypePrototype.FallbackColor;
BackgroundColorPanel.PanelOverride = styleBoxFlat;
OverallPlaytimeLabel.Text = player.PlaytimeString;
}
@@ -0,0 +1,90 @@
using System.Numerics;
using Content.Shared.Alert.Components;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
namespace Content.Client.Alerts;
/// <summary>
/// This handles <see cref="GenericCounterAlertComponent"/>
/// </summary>
public sealed class GenericCounterAlertSystem : EntitySystem
{
[Dependency] private readonly SpriteSystem _sprite = default!;
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<GenericCounterAlertComponent, UpdateAlertSpriteEvent>(OnUpdateAlertSprite);
}
private void OnUpdateAlertSprite(Entity<GenericCounterAlertComponent> ent, ref UpdateAlertSpriteEvent args)
{
var sprite = args.SpriteViewEnt.Comp;
var ev = new GetGenericAlertCounterAmountEvent(args.Alert);
RaiseLocalEvent(args.ViewerEnt, ref ev);
if (!ev.Handled)
return;
// It cannot be null if its handled, but good to check to avoid ugly null ignores.
if (ev.Amount == null)
return;
// How many digits can we display
var maxDigitCount = GetMaxDigitCount((ent, ent, sprite));
// Clamp it to a positive number that we can actually display in full (no rollover to 0)
var amount = (int) Math.Clamp(ev.Amount.Value, 0, Math.Pow(10, maxDigitCount) - 1);
// This is super wack but ig it works?
var digitCount = ent.Comp.HideLeadingZeroes
? amount.ToString().Length
: maxDigitCount;
if (ent.Comp.HideLeadingZeroes)
{
for (var i = 0; i < ent.Comp.DigitKeys.Count; i++)
{
if (!_sprite.LayerMapTryGet(ent.Owner, ent.Comp.DigitKeys[i], out var layer, false))
continue;
_sprite.LayerSetVisible(ent.Owner, layer, i <= digitCount - 1);
}
}
// ReSharper disable once PossibleLossOfFraction
var baseOffset = (ent.Comp.AlertSize.X - digitCount * ent.Comp.GlyphWidth) / 2 * (1f / EyeManager.PixelsPerMeter);
for (var i = 0; i < ent.Comp.DigitKeys.Count; i++)
{
if (!_sprite.LayerMapTryGet(ent.Owner, ent.Comp.DigitKeys[i], out var layer, false))
continue;
var result = amount / (int) Math.Pow(10, i) % 10;
_sprite.LayerSetRsiState(ent.Owner, layer, result.ToString());
if (ent.Comp.CenterGlyph)
{
var offset = baseOffset + (digitCount - 1 - i) * ent.Comp.GlyphWidth * (1f / EyeManager.PixelsPerMeter);
_sprite.LayerSetOffset(ent.Owner, layer, new Vector2(offset, 0));
}
}
}
/// <summary>
/// Gets the number of digits that we can display.
/// </summary>
/// <returns>The number of digits.</returns>
private int GetMaxDigitCount(Entity<GenericCounterAlertComponent, SpriteComponent> ent)
{
for (var i = ent.Comp1.DigitKeys.Count - 1; i >= 0; i--)
{
if (_sprite.LayerExists((ent.Owner, ent.Comp2), ent.Comp1.DigitKeys[i]))
return i + 1;
}
return 0;
}
}
@@ -11,11 +11,14 @@ public record struct UpdateAlertSpriteEvent
{
public Entity<SpriteComponent> SpriteViewEnt;
public EntityUid ViewerEnt;
public AlertPrototype Alert;
public UpdateAlertSpriteEvent(Entity<SpriteComponent> spriteViewEnt, AlertPrototype alert)
public UpdateAlertSpriteEvent(Entity<SpriteComponent> spriteViewEnt, EntityUid viewerEnt, AlertPrototype alert)
{
SpriteViewEnt = spriteViewEnt;
ViewerEnt = viewerEnt;
Alert = alert;
}
}
@@ -0,0 +1,5 @@
using Content.Shared.Animals.Systems;
namespace Content.Client.Animals.Systems;
public sealed class ParrotMemorySystem : SharedParrotMemorySystem;
+3 -3
View File
@@ -62,11 +62,11 @@ public sealed class AnomalySystem : SharedAnomalySystem
{
base.Update(frameTime);
var query = EntityQueryEnumerator<AnomalySupercriticalComponent, SpriteComponent>();
var query = EntityQueryEnumerator<AnomalyComponent, AnomalySupercriticalComponent, SpriteComponent>();
while (query.MoveNext(out var uid, out var super, out var sprite))
while (query.MoveNext(out var uid, out var anomaly, out var super, out var sprite))
{
var completion = 1f - (float)((super.EndTime - _timing.CurTime) / super.SupercriticalDuration);
var completion = 1f - (float) ((super.EndTime - _timing.CurTime) / anomaly.SupercriticalDuration);
var scale = completion * (super.MaxScaleAmount - 1f) + 1f;
_sprite.SetScale((uid, sprite), new Vector2(scale, scale));
@@ -1,6 +1,6 @@
using Content.Shared.Anomaly.Components;
using Content.Shared.Anomaly.Effects;
using Content.Shared.Body.Components;
using Content.Shared.Humanoid;
using Robust.Client.GameObjects;
namespace Content.Client.Anomaly.Effects;
@@ -25,9 +25,8 @@ public sealed class ClientInnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
var index = _sprite.LayerMapReserve((ent.Owner, sprite), ent.Comp.LayerMap);
if (TryComp<BodyComponent>(ent, out var body) &&
body.Prototype is not null &&
ent.Comp.SpeciesSprites.TryGetValue(body.Prototype.Value, out var speciesSprite))
if (TryComp<HumanoidAppearanceComponent>(ent, out var humanoidAppearance) &&
ent.Comp.SpeciesSprites.TryGetValue(humanoidAppearance.Species, out var speciesSprite))
{
_sprite.LayerSetSprite((ent.Owner, sprite), index, speciesSprite);
}
@@ -45,7 +44,7 @@ public sealed class ClientInnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
if (!TryComp<SpriteComponent>(ent, out var sprite))
return;
var index = _sprite.LayerMapGet((ent.Owner, sprite), ent.Comp.LayerMap);
_sprite.LayerSetVisible((ent.Owner, sprite), index, false);
if (sprite.LayerMapTryGet(ent.Comp.LayerMap, out var index)) // imp. added this check to prevent errors on anomalites - not having it was bad code on upstream's part
sprite.LayerSetVisible(index, false);
}
}
@@ -162,10 +162,10 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
{
var list = new List<AtmosMonitoringConsoleLine>();
foreach (var ((netId, layer, hexColor), atmosPipeData) in chunk.AtmosPipeData)
foreach (var ((netId, layer, pipeColor), atmosPipeData) in chunk.AtmosPipeData)
{
// Determine the correct coloration for the pipe
var color = Color.FromHex(hexColor) * _basePipeNetColor;
var color = pipeColor * _basePipeNetColor;
if (FocusNetId != null && FocusNetId != netId)
color *= _unfocusedPipeNetColor;
@@ -0,0 +1,28 @@
using Content.Shared.Atmos.Piping.Unary.Components;
using Content.Shared.SprayPainter.Prototypes;
using Robust.Client.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.Client.Atmos.EntitySystems;
/// <summary>
/// Used to change the appearance of gas canisters.
/// </summary>
public sealed class GasCanisterAppearanceSystem : VisualizerSystem<GasCanisterComponent>
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
protected override void OnAppearanceChange(EntityUid uid, GasCanisterComponent component, ref AppearanceChangeEvent args)
{
if (!AppearanceSystem.TryGetData<string>(uid, PaintableVisuals.Prototype, out var protoName, args.Component) || args.Sprite is not { } old)
return;
if (!_prototypeManager.HasIndex(protoName))
return;
// Create the given prototype and get its first layer.
var tempUid = Spawn(protoName);
SpriteSystem.LayerSetRsiState(uid, 0, SpriteSystem.LayerGetRsiState(tempUid, 0));
QueueDel(tempUid);
}
}
@@ -0,0 +1,31 @@
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Piping.Binary.Components;
namespace Content.Client.Atmos.EntitySystems;
/// <summary>
/// Represents the client system responsible for managing and updating the gas pressure regulator interface.
/// Inherits from the shared system <see cref="SharedGasPressureRegulatorSystem"/>.
/// </summary>
public sealed partial class GasPressureRegulatorSystem : SharedGasPressureRegulatorSystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<GasPressureRegulatorComponent, AfterAutoHandleStateEvent>(OnValveUpdate);
}
private void OnValveUpdate(Entity<GasPressureRegulatorComponent> ent, ref AfterAutoHandleStateEvent args)
{
UpdateUi(ent);
}
protected override void UpdateUi(Entity<GasPressureRegulatorComponent> ent)
{
if (UserInterfaceSystem.TryGetOpenUi(ent.Owner, GasPressureRegulatorUiKey.Key, out var bui))
{
bui.Update();
}
}
}
@@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2007/xaml"
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
MinSize="500 500" Resizable="True" Title="Air Alarm">
MinSize="500 500" Resizable="True" Title="{Loc air-alarm-ui-title}">
<BoxContainer Orientation="Vertical" Margin="5 5 5 5">
<!-- Status (pressure, temperature, alarm state, device total, address, etc) -->
<BoxContainer Orientation="Horizontal" Margin="0 0 0 2">
@@ -59,7 +59,7 @@ public sealed partial class PumpControl : BoxContainer
foreach (var value in Enum.GetValues<VentPumpDirection>())
{
_pumpDirection.AddItem(Loc.GetString($"{value}"), (int) value);
_pumpDirection.AddItem(Loc.GetString($"air-alarm-ui-pump-direction-{value.ToString().ToLower()}"), (int) value);
}
_pumpDirection.SelectId((int) _data.PumpDirection);
@@ -72,7 +72,7 @@ public sealed partial class PumpControl : BoxContainer
foreach (var value in Enum.GetValues<VentPressureBound>())
{
_pressureCheck.AddItem(Loc.GetString($"{value}"), (int) value);
_pressureCheck.AddItem(Loc.GetString($"air-alarm-ui-pressure-bound-{value.ToString().ToLower()}"), (int) value);
}
_pressureCheck.SelectId((int) _data.PressureChecks);
@@ -27,9 +27,15 @@
</BoxContainer>
<!-- Lower row: every single gas -->
<Collapsible Margin="2 2 2 2">
<CollapsibleHeading Title="Gas filters" />
<CollapsibleHeading Title="{Loc 'air-alarm-ui-widget-gas-filters'}" />
<CollapsibleBody Margin="20 0 0 0">
<GridContainer HorizontalExpand="True" Name="CGasContainer" Columns="3" />
<BoxContainer Orientation="Vertical">
<BoxContainer Margin="2">
<Button Name="CSelectAll" Text="{Loc 'air-alarm-ui-scrubber-select-all-gases-label'}" />
<Button Name="CDeselectAll" Text="{Loc 'air-alarm-ui-scrubber-deselect-all-gases-label'}" />
</BoxContainer>
<GridContainer Name="CGasContainer" Columns="3" />
</BoxContainer>
</CollapsibleBody>
</Collapsible>
</BoxContainer>
@@ -1,23 +1,26 @@
using Content.Shared.Atmos;
using Content.Shared.Atmos.EntitySystems; // DeltaV
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Monitor.Components;
using Content.Shared.Atmos.Piping.Unary.Components;
using Content.Shared.Atmos.Prototypes;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client.Atmos.Monitor.UI.Widgets;
[GenerateTypedNameReferences]
public sealed partial class ScrubberControl : BoxContainer
{
[Dependency] private readonly IEntityManager _entMan = default!; // DeltaV
private readonly SharedAtmosphereSystem _atmos; // DeltaV
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entMan = default!;
private GasVentScrubberData _data;
private string _address;
public event Action<string, IAtmosDeviceData>? ScrubberDataChanged;
public event Action<IAtmosDeviceData>? ScrubberDataCopied;
public event Action<IAtmosDeviceData>? ScrubberDataCopied;
private CheckBox _enabled => CEnableDevice;
private CollapsibleHeading _addressLabel => CAddress;
@@ -25,15 +28,18 @@ public sealed partial class ScrubberControl : BoxContainer
private FloatSpinBox _volumeRate => CVolumeRate;
private CheckBox _wideNet => CWideNet;
private Button _copySettings => CCopySettings;
private Button _selectAll => CSelectAll;
private Button _deselectAll => CDeselectAll;
private GridContainer _gases => CGasContainer;
private Dictionary<Gas, Button> _gasControls = new();
public ScrubberControl(GasVentScrubberData data, string address)
{
IoCManager.InjectDependencies(this);
var atmosphereSystem = _entMan.System<SharedAtmosphereSystem>();
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this); // DeltaV
_atmos = _entMan.System<SharedAtmosphereSystem>(); // DeltaV
Name = address;
@@ -66,7 +72,7 @@ public sealed partial class ScrubberControl : BoxContainer
foreach (var value in Enum.GetValues<ScrubberPumpDirection>())
{
_pumpDirection.AddItem(Loc.GetString($"{value}"), (int) value);
_pumpDirection.AddItem(Loc.GetString($"air-alarm-ui-pump-direction-{value.ToString().ToLower()}"), (int) value);
}
_pumpDirection.SelectId((int) _data.PumpDirection);
@@ -83,12 +89,28 @@ public sealed partial class ScrubberControl : BoxContainer
ScrubberDataCopied?.Invoke(_data);
};
foreach (var value in Enum.GetValues<Gas>())
var allGases = Enum.GetValues<Gas>();
_selectAll.OnPressed += _ =>
{
_data.FilterGases = new HashSet<Gas>(allGases);
ScrubberDataChanged?.Invoke(_address, _data);
};
_deselectAll.OnPressed += _ =>
{
_data.FilterGases = [];
ScrubberDataChanged?.Invoke(_address, _data);
};
foreach (var value in allGases)
{
ProtoId<GasPrototype> gasProtoId = atmosphereSystem.GetGas(value);
var gasName = _prototypeManager.Index(gasProtoId).Name;
var gasButton = new Button
{
Name = value.ToString(),
Text = Loc.GetString(_atmos.GetGas(value).Name), // DeltaV - localize it instead of showing the enum name
Text = Loc.GetString(gasName),
ToggleMode = true,
HorizontalExpand = true,
Pressed = _data.FilterGases.Contains(value)
@@ -1,19 +1,22 @@
using Content.Client.Message;
using Content.Shared.Atmos;
using Content.Shared.Atmos.EntitySystems; // DeltaV
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Atmos.Prototypes;
using Content.Shared.Temperature;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client.Atmos.Monitor.UI.Widgets;
[GenerateTypedNameReferences]
public sealed partial class SensorInfo : BoxContainer
{
[Dependency] private readonly IEntityManager _entMan = default!; // DeltaV
private readonly SharedAtmosphereSystem _atmos; // DeltaV
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entMan = default!;
public Action<string, AtmosMonitorThresholdType, AtmosAlarmThreshold, Gas?>? OnThresholdUpdate;
public event Action<AtmosSensorData>? SensorDataCopied;
private string _address;
@@ -26,9 +29,10 @@ public sealed partial class SensorInfo : BoxContainer
public SensorInfo(AtmosSensorData data, string address)
{
IoCManager.InjectDependencies(this);
var atmosphereSystem = _entMan.System<SharedAtmosphereSystem>();
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this); // DeltaV
_atmos = _entMan.System<SharedAtmosphereSystem>(); // DeltaV
_address = address;
@@ -50,8 +54,12 @@ public sealed partial class SensorInfo : BoxContainer
var label = new RichTextLabel();
var fractionGas = amount / data.TotalMoles;
ProtoId<GasPrototype> gasProtoId = atmosphereSystem.GetGas(gas);
var gasName = _prototypeManager.Index(gasProtoId).Name;
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator",
("gas", Loc.GetString(_atmos.GetGas(gas).Name)), // DeltaV - localize it instead of showing the enum name
("gas", Loc.GetString(gasName)),
("color", AirAlarmWindow.ColorForThreshold(fractionGas, data.GasThresholds[gas])),
("amount", $"{amount:0.####}"),
("percentage", $"{(100 * fractionGas):0.##}")));
@@ -59,7 +67,7 @@ public sealed partial class SensorInfo : BoxContainer
_gasLabels.Add(gas, label);
var threshold = data.GasThresholds[gas];
var gasThresholdControl = new ThresholdControl(Loc.GetString($"air-alarm-ui-thresholds-gas-title", ("gas", $"{gas}")), threshold, AtmosMonitorThresholdType.Gas, gas, 100);
var gasThresholdControl = new ThresholdControl(Loc.GetString($"air-alarm-ui-thresholds-gas-title"), threshold, AtmosMonitorThresholdType.Gas, gas, 100);
gasThresholdControl.Margin = new Thickness(20, 2, 2, 2);
gasThresholdControl.ThresholdDataChanged += (type, alarmThreshold, arg3) =>
{
@@ -95,6 +103,9 @@ public sealed partial class SensorInfo : BoxContainer
public void ChangeData(AtmosSensorData data)
{
IoCManager.InjectDependencies(this);
var atmosphereSystem = _entMan.System<SharedAtmosphereSystem>();
SensorAddress.Title = Loc.GetString("air-alarm-ui-window-listing-title", ("address", _address), ("state", data.AlarmState));
AlarmStateLabel.SetMarkup(Loc.GetString("air-alarm-ui-window-alarm-state-indicator",
@@ -117,8 +128,12 @@ public sealed partial class SensorInfo : BoxContainer
}
var fractionGas = amount / data.TotalMoles;
ProtoId<GasPrototype> gasProtoId = atmosphereSystem.GetGas(gas);
var gasName = _prototypeManager.Index(gasProtoId).Name;
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator",
("gas", Loc.GetString(_atmos.GetGas(gas).Name)), // DeltaV - localize it instead of showing the enum name
("gas", Loc.GetString(gasName)),
("color", AirAlarmWindow.ColorForThreshold(fractionGas, data.GasThresholds[gas])),
("amount", $"{amount:0.####}"),
("percentage", $"{(100 * fractionGas):0.##}")));
@@ -2,6 +2,6 @@
HorizontalExpand="True" Orientation="Vertical"
Margin = "20 0 0 0" MinSize="160 0" >
<Label Name="CBoundLabel" HorizontalAlignment="Center" />
<CheckBox Name="CBoundEnabled" HorizontalAlignment="Center" Text="{Loc 'Enable'}" Pressed="True" />
<CheckBox Name="CBoundEnabled" HorizontalAlignment="Center" Text="{Loc 'air-alarm-ui-widget-enable'}" Pressed="True" />
<FloatSpinBox Name="CSpinner" />
</BoxContainer>
@@ -6,7 +6,7 @@
<CollapsibleBody Margin="20 0 0 0">
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Horizontal">
<CheckBox Name="CEnabled" Text="{Loc 'Enabled'}" />
<CheckBox Name="CEnabled" Text="{Loc 'air-alarm-ui-widget-enable'}" />
</BoxContainer>
<!-- Upper row: Danger bounds -->
<BoxContainer Name="CDangerBounds" Orientation="Horizontal" Margin="0 0 0 2"/>
@@ -19,6 +19,8 @@ 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 SharedMapSystem _mapSystem;
@@ -54,7 +56,7 @@ namespace Content.Client.Atmos.Overlays
_mapManager = IoCManager.Resolve<IMapManager>();
_mapSystem = entManager.System<SharedMapSystem>();
_xformSys = xformSys;
_shader = protoMan.Index<ShaderPrototype>("unshaded").Instance();
_shader = protoMan.Index(UnshadedShader).Instance();
ZIndex = GasOverlayZIndex;
_gasCount = system.VisibleGasId.Length;
@@ -208,7 +208,7 @@ namespace Content.Client.Atmos.UI
});
presBox.AddChild(new Label
{
Text = Loc.GetString("gas-analyzer-window-pressure-val-text", ("pressure", $"{gasMix.Pressure:0.##}")),
Text = Loc.GetString("gas-analyzer-window-pressure-val-text", ("pressure", $"{gasMix.Pressure:0.00}")),
Align = Label.AlignMode.Right,
HorizontalExpand = true
});
@@ -232,8 +232,8 @@ namespace Content.Client.Atmos.UI
tempBox.AddChild(new Label
{
Text = Loc.GetString("gas-analyzer-window-temperature-val-text",
("tempK", $"{gasMix.Temperature:0.#}"),
("tempC", $"{TemperatureHelpers.KelvinToCelsius(gasMix.Temperature):0.#}")),
("tempK", $"{gasMix.Temperature:0.0}"),
("tempC", $"{TemperatureHelpers.KelvinToCelsius(gasMix.Temperature):0.0}")),
Align = Label.AlignMode.Right,
HorizontalExpand = true
});
@@ -0,0 +1,58 @@
using Content.Shared.Atmos.Piping.Binary.Components;
using Content.Shared.IdentityManagement;
using Content.Shared.Localizations;
using Robust.Client.UserInterface;
namespace Content.Client.Atmos.UI;
public sealed class GasPressureRegulatorBoundUserInterface(EntityUid owner, Enum uiKey)
: BoundUserInterface(owner, uiKey)
{
private GasPressureRegulatorWindow? _window;
protected override void Open()
{
base.Open();
_window = this.CreateWindow<GasPressureRegulatorWindow>();
_window.SetEntity(Owner);
_window.ThresholdPressureChanged += OnThresholdChanged;
if (EntMan.TryGetComponent(Owner, out GasPressureRegulatorComponent? comp))
_window.SetThresholdPressureInput(comp.Threshold);
Update();
}
public override void Update()
{
if (_window == null)
return;
_window.Title = Identity.Name(Owner, EntMan);
if (!EntMan.TryGetComponent(Owner, out GasPressureRegulatorComponent? comp))
return;
_window.SetThresholdPressureLabel(comp.Threshold);
_window.UpdateInfo(comp.InletPressure, comp.OutletPressure, comp.FlowRate);
}
private void OnThresholdChanged(string newThreshold)
{
var sentThreshold = 0f;
if (UserInputParser.TryFloat(newThreshold, out var parsedNewThreshold) && parsedNewThreshold >= 0 &&
!float.IsInfinity(parsedNewThreshold))
{
sentThreshold = parsedNewThreshold;
}
// Autofill to zero if the user inputs an invalid value.
_window?.SetThresholdPressureInput(sentThreshold);
SendPredictedMessage(new GasPressureRegulatorChangeThresholdMessage(sentThreshold));
}
}
@@ -0,0 +1,96 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
SetSize="345 380"
MinSize="345 380"
Title="{Loc gas-pressure-regulator-ui-title}"
Resizable="False">
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Vertical" Margin="0 10 0 10">
<BoxContainer Orientation="Vertical" Align="Center">
<Label Text="{Loc gas-pressure-regulator-ui-outlet}" Align="Center" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Center">
<Label Name="OutletPressureLabel" Text="N/A" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-pressure-unit}" />
</BoxContainer>
</BoxContainer>
<BoxContainer Orientation="Horizontal" Align="Center">
<BoxContainer Orientation="Vertical" Align="Center" HorizontalExpand="True">
<Label Text="{Loc gas-pressure-regulator-ui-target}" Align="Right" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Right">
<Label Name="TargetPressureLabel" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-pressure-unit}" />
</BoxContainer>
</BoxContainer>
<ProgressBar Name="ToTargetBar" MaxValue="1" SetSize="5 75" Margin="10" Vertical="True" />
<SpriteView Name="EntityView" SetSize="64 64" Scale="3 3" OverrideDirection="North" Margin="0" />
<ProgressBar Name="FlowRateBar" MaxValue="1" SetSize="5 75" Margin="10" Vertical="True" />
<BoxContainer Orientation="Vertical" Align="Center" HorizontalExpand="True">
<Label Text="{Loc gas-pressure-regulator-ui-flow}" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal">
<Label Name="CurrentFlowLabel" Text="N/A" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-flow-rate-unit}" />
</BoxContainer>
</BoxContainer>
</BoxContainer>
<BoxContainer Orientation="Vertical" Align="Center" Margin="1">
<Label Text="{Loc gas-pressure-regulator-ui-inlet}" Align="Center" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Center">
<Label Name="InletPressureLabel" Text="N/A" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-pressure-unit}" />
</BoxContainer>
</BoxContainer>
</BoxContainer>
<!-- Controls to Set Pressure -->
<controls:StripeBack Name="SetPressureStripeBack" HorizontalExpand="True">
<BoxContainer Orientation="Vertical" HorizontalExpand="True" Margin="10 10 10 10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<LineEdit Name="ThresholdInput" HorizontalExpand="True" MinSize="70 0" />
<Button Name="SetThresholdButton" Text="{Loc gas-pressure-regulator-ui-set-threshold}"
Disabled="True" Margin="5 0 0 0" />
</BoxContainer>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="0 5 0 0">
<Button Name="Subtract1000Button" Text="{Loc gas-pressure-regulator-ui-subtract-1000}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Subtract100Button" Text="{Loc gas-pressure-regulator-ui-subtract-100}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Subtract10Button" Text="{Loc gas-pressure-regulator-ui-subtract-10}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Add10Button" Text="{Loc gas-pressure-regulator-ui-add-10}" HorizontalExpand="True"
Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Add100Button" Text="{Loc gas-pressure-regulator-ui-add-100}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Add1000Button" Text="{Loc gas-pressure-regulator-ui-add-1000}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
</BoxContainer>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="0 5 0 0">
<Button Name="ZeroThresholdButton" Text="{Loc gas-pressure-regulator-ui-zero-threshold}"
HorizontalExpand="True" Margin="0 0 5 0" />
<Button Name="SetToCurrentPressureButton"
Text="{Loc gas-pressure-regulator-ui-set-to-current-pressure}" HorizontalExpand="True" />
</BoxContainer>
</BoxContainer>
</controls:StripeBack>
</BoxContainer>
</controls:FancyWindow>
@@ -0,0 +1,129 @@
using System.Globalization;
using Content.Client.UserInterface.Controls;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
namespace Content.Client.Atmos.UI;
/// <summary>
/// Client-side UI for controlling a pressure regulator.
/// </summary>
[GenerateTypedNameReferences]
public sealed partial class GasPressureRegulatorWindow : FancyWindow
{
private float _flowRate;
public GasPressureRegulatorWindow()
{
RobustXamlLoader.Load(this);
ThresholdInput.OnTextChanged += _ => SetThresholdButton.Disabled = false;
SetThresholdButton.OnPressed += _ =>
{
ThresholdPressureChanged?.Invoke(ThresholdInput.Text ??= "");
SetThresholdButton.Disabled = true;
};
SetToCurrentPressureButton.OnPressed += _ =>
{
if (InletPressureLabel.Text != null)
{
ThresholdInput.Text = InletPressureLabel.Text;
}
SetThresholdButton.Disabled = false;
};
ZeroThresholdButton.OnPressed += _ =>
{
ThresholdInput.Text = "0";
SetThresholdButton.Disabled = false;
};
Add1000Button.OnPressed += _ => AdjustThreshold(1000);
Add100Button.OnPressed += _ => AdjustThreshold(100);
Add10Button.OnPressed += _ => AdjustThreshold(10);
Subtract10Button.OnPressed += _ => AdjustThreshold(-10);
Subtract100Button.OnPressed += _ => AdjustThreshold(-100);
Subtract1000Button.OnPressed += _ => AdjustThreshold(-1000);
return;
void AdjustThreshold(float adjustment)
{
if (float.TryParse(ThresholdInput.Text, out var currentValue))
{
ThresholdInput.Text = (currentValue + adjustment).ToString(CultureInfo.CurrentCulture);
SetThresholdButton.Disabled = false;
}
}
}
public event Action<string>? ThresholdPressureChanged;
/// <summary>
/// Sets the current threshold pressure label. This is not setting the threshold input box.
/// </summary>
/// <param name="threshold"> Threshold to set.</param>
public void SetThresholdPressureLabel(float threshold)
{
TargetPressureLabel.Text = threshold.ToString(CultureInfo.CurrentCulture);
}
/// <summary>
/// Sets the threshold pressure input field with the given value.
/// When the client opens the UI the field will be autofilled with the current threshold pressure.
/// </summary>
/// <param name="input">The threshold pressure value to autofill into the input field.</param>
public void SetThresholdPressureInput(float input)
{
ThresholdInput.Text = input.ToString(CultureInfo.CurrentCulture);
}
/// <summary>
/// Sets the entity to be visible in the UI.
/// </summary>
/// <param name="entity"></param>
public void SetEntity(EntityUid entity)
{
EntityView.SetEntity(entity);
}
/// <summary>
/// Updates the UI for the labels.
/// </summary>
/// <param name="inletPressure">The current pressure at the valve's inlet.</param>
/// <param name="outletPressure">The current pressure at the valve's outlet.</param>
/// <param name="flowRate">The current flow rate through the valve.</param>
public void UpdateInfo(float inletPressure, float outletPressure, float flowRate)
{
if (float.TryParse(TargetPressureLabel.Text, out var parsedfloat))
ToTargetBar.Value = inletPressure / parsedfloat;
InletPressureLabel.Text = float.Round(inletPressure).ToString(CultureInfo.CurrentCulture);
OutletPressureLabel.Text = float.Round(outletPressure).ToString(CultureInfo.CurrentCulture);
CurrentFlowLabel.Text = float.IsNaN(flowRate) ? "0" : flowRate.ToString(CultureInfo.CurrentCulture);
_flowRate = flowRate;
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
// Defines the flow rate at which the progress bar fills in one second.
// If the flow rate is >50 L/s, the bar will take <1 second to fill.
// If the flow rate is <50 L/s, the bar will take >1 second to fill.
const int barFillPerSecond = 50;
var maxValue = FlowRateBar.MaxValue;
// Increment the progress bar value based on elapsed time
FlowRateBar.Value += (_flowRate / barFillPerSecond) * args.DeltaSeconds;
// Reset the progress bar when it is fully filled
if (FlowRateBar.Value >= maxValue)
{
FlowRateBar.Value = 0f;
}
}
}
+7 -9
View File
@@ -3,17 +3,13 @@ using Content.Shared.CCVar;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Audio;
using Robust.Shared.Log;
using Robust.Shared.Configuration;
using Robust.Shared.Map;
using Robust.Shared.Physics;
using Robust.Shared.Random;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Linq;
using System.Numerics;
using Robust.Client.GameObjects;
using Robust.Shared.Audio.Effects;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Player;
@@ -31,6 +27,7 @@ public sealed class AmbientSoundSystem : SharedAmbientSoundSystem
[Dependency] private readonly SharedTransformSystem _xformSystem = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IOverlayManager _overlayManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IRobustRandom _random = default!;
@@ -65,18 +62,19 @@ public sealed class AmbientSoundSystem : SharedAmbientSoundSystem
get => _overlayEnabled;
set
{
if (_overlayEnabled == value) return;
if (_overlayEnabled == value)
return;
_overlayEnabled = value;
var overlayManager = IoCManager.Resolve<IOverlayManager>();
if (_overlayEnabled)
{
_overlay = new AmbientSoundOverlay(EntityManager, this, EntityManager.System<EntityLookupSystem>());
overlayManager.AddOverlay(_overlay);
_overlayManager.AddOverlay(_overlay);
}
else
{
overlayManager.RemoveOverlay(_overlay!);
_overlayManager.RemoveOverlay(_overlay!);
_overlay = null;
}
}
@@ -168,7 +166,7 @@ public sealed class AmbientSoundSystem : SharedAmbientSoundSystem
_targetTime = _gameTiming.CurTime + TimeSpan.FromSeconds(_cooldown);
var player = _playerManager.LocalEntity;
if (!EntityManager.TryGetComponent(player, out TransformComponent? xform))
if (!TryComp(player, out TransformComponent? xform))
{
ClearSounds();
return;
@@ -3,11 +3,8 @@ using Content.Client.Gameplay;
using Content.Shared.Audio;
using Content.Shared.CCVar;
using Content.Shared.GameTicking;
using Content.Shared.Random;
using Content.Shared.Random.Rules;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Client.ResourceManagement;
using Robust.Client.State;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Components;
@@ -25,6 +22,7 @@ public sealed partial class ContentAudioSystem
{
[Dependency] private readonly IConfigurationManager _configManager = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IRobustRandom _random = default!;
@@ -61,7 +59,7 @@ public sealed partial class ContentAudioSystem
private void InitializeAmbientMusic()
{
Subs.CVar(_configManager, CCVars.AmbientMusicVolume, AmbienceCVarChanged, true);
_sawmill = IoCManager.Resolve<ILogManager>().GetSawmill("audio.ambience");
_sawmill = _logManager.GetSawmill("audio.ambience");
// Reset audio
_nextAudio = TimeSpan.MaxValue;
-21
View File
@@ -1,21 +0,0 @@
using Content.Shared.Bed;
using Robust.Client.GameObjects;
namespace Content.Client.Bed;
public sealed class StasisBedSystem : VisualizerSystem<StasisBedVisualsComponent>
{
protected override void OnAppearanceChange(EntityUid uid, StasisBedVisualsComponent component, ref AppearanceChangeEvent args)
{
if (args.Sprite != null
&& AppearanceSystem.TryGetData<bool>(uid, StasisBedVisuals.IsOn, out var isOn, args.Component))
{
SpriteSystem.LayerSetVisible((uid, args.Sprite), StasisBedVisualLayers.IsOn, isOn);
}
}
}
public enum StasisBedVisualLayers : byte
{
IsOn,
}
@@ -0,0 +1,5 @@
using Content.Shared.Body.Systems;
namespace Content.Client.Body.Systems;
public sealed class BloodstreamSystem : SharedBloodstreamSystem;
@@ -0,0 +1,6 @@
using Content.Shared.Body.Systems;
namespace Content.Client.Body.Systems;
/// <inheritdoc/>
public sealed class MetabolizerSystem : SharedMetabolizerSystem;
+1 -1
View File
@@ -125,7 +125,7 @@ internal sealed class BuckleSystem : SharedBuckleSystem
!buckled ||
args.Sprite == null)
{
//_rotationVisualizerSystem.SetHorizontalAngle((uid, rotVisuals), rotVisuals.DefaultRotation); // WD EDIT
_rotationVisualizerSystem.SetHorizontalAngle((uid, rotVisuals), rotVisuals.DefaultRotation);
return;
}
@@ -1,8 +1,8 @@
using System.Numerics;
using Content.Shared.Body.Components;
using Content.Shared.CardboardBox;
using Content.Shared.CardboardBox.Components;
using Content.Shared.Examine;
using Content.Shared.Mobs.Components;
using Content.Shared.Movement.Components;
using Robust.Client.GameObjects;
@@ -15,13 +15,13 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem
[Dependency] private readonly ExamineSystemShared _examine = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
private EntityQuery<BodyComponent> _bodyQuery;
private EntityQuery<MobStateComponent> _mobStateQuery;
public override void Initialize()
{
base.Initialize();
_bodyQuery = GetEntityQuery<BodyComponent>();
_mobStateQuery = GetEntityQuery<MobStateComponent>();
SubscribeNetworkEvent<PlayBoxEffectMessage>(OnBoxEffect);
}
@@ -66,8 +66,8 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem
if (!_examine.InRangeUnOccluded(sourcePos, mapPos, box.Distance, null))
continue;
// no effect for anything too exotic
if (!_bodyQuery.HasComp(mob))
// no effect for non-mobs that have MobMover, such as mechs and vehicles.
if (!_mobStateQuery.HasComp(mob))
continue;
var ent = Spawn(box.Effect, mapPos);
@@ -90,10 +90,12 @@ public sealed partial class NanoTaskItemPopup : DefaultWindow
{
if (item is NanoTaskItem task)
{
var button = task.Priority switch {
var button = task.Priority switch
{
NanoTaskPriority.High => HighButton,
NanoTaskPriority.Medium => MediumButton,
NanoTaskPriority.Low => LowButton,
_ => throw new ArgumentException("Invalid priority"),
};
button.Pressed = true;
DescriptionInput.Text = task.Description;
@@ -38,10 +38,12 @@ public sealed partial class NanoTaskUiFragment : BoxContainer
foreach (var task in tasks)
{
var container = task.Data.Priority switch {
var container = task.Data.Priority switch
{
NanoTaskPriority.High => HighContainer,
NanoTaskPriority.Medium => MediumContainer,
NanoTaskPriority.Low => LowContainer,
_ => throw new ArgumentException("Invalid priority"),
};
var control = new NanoTaskItemControl(task);
container.AddChild(control);
@@ -0,0 +1,30 @@
using Content.Shared.Changeling.Components;
using Content.Shared.Changeling.Systems;
using Robust.Client.GameObjects;
namespace Content.Client.Changeling.Systems;
public sealed class ChangelingIdentitySystem : SharedChangelingIdentitySystem
{
[Dependency] private readonly UserInterfaceSystem _ui = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ChangelingIdentityComponent, AfterAutoHandleStateEvent>(OnAfterAutoHandleState);
}
private void OnAfterAutoHandleState(Entity<ChangelingIdentityComponent> ent, ref AfterAutoHandleStateEvent args)
{
UpdateUi(ent);
}
public void UpdateUi(EntityUid uid)
{
if (_ui.TryGetOpenUi(uid, ChangelingTransformUiKey.Key, out var bui))
{
bui.Update();
}
}
}
@@ -0,0 +1,35 @@
using Content.Shared.Changeling.Systems;
using JetBrains.Annotations;
using Robust.Client.UserInterface;
namespace Content.Client.Changeling.UI;
[UsedImplicitly]
public sealed partial class ChangelingTransformBoundUserInterface(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey)
{
private ChangelingTransformMenu? _window;
protected override void Open()
{
base.Open();
_window = this.CreateWindow<ChangelingTransformMenu>();
_window.OnIdentitySelect += SendIdentitySelect;
_window.Update(Owner);
}
public override void Update()
{
if (_window == null)
return;
_window.Update(Owner);
}
public void SendIdentitySelect(NetEntity identityId)
{
SendPredictedMessage(new ChangelingTransformIdentitySelectMessage(identityId));
}
}
@@ -0,0 +1,8 @@
<ui:RadialMenu
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
CloseButtonStyleClass="RadialMenuCloseButton"
VerticalExpand="True"
HorizontalExpand="True">
<ui:RadialContainer Name="Main">
</ui:RadialContainer>
</ui:RadialMenu>
@@ -0,0 +1,62 @@
using System.Numerics;
using Content.Client.UserInterface.Controls;
using Content.Shared.Changeling.Components;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
namespace Content.Client.Changeling.UI;
[GenerateTypedNameReferences]
public sealed partial class ChangelingTransformMenu : RadialMenu
{
[Dependency] private readonly IEntityManager _entity = default!;
public event Action<NetEntity>? OnIdentitySelect;
public ChangelingTransformMenu()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
}
public void Update(EntityUid uid)
{
Main.DisposeAllChildren();
if (!_entity.TryGetComponent<ChangelingIdentityComponent>(uid, out var identityComp))
return;
foreach (var identityUid in identityComp.ConsumedIdentities)
{
if (!_entity.TryGetComponent<MetaDataComponent>(identityUid, out var metadata))
continue;
var identityName = metadata.EntityName;
var button = new ChangelingTransformMenuButton()
{
StyleClasses = { "RadialMenuButton" },
SetSize = new Vector2(64, 64),
ToolTip = identityName,
};
var entView = new SpriteView()
{
SetSize = new Vector2(48, 48),
VerticalAlignment = VAlignment.Center,
HorizontalAlignment = HAlignment.Center,
Stretch = SpriteView.StretchMode.Fill,
};
entView.SetEntity(identityUid);
button.OnButtonUp += _ =>
{
OnIdentitySelect?.Invoke(_entity.GetNetEntity(identityUid));
Close();
};
button.AddChild(entView);
Main.AddChild(button);
}
}
}
public sealed class ChangelingTransformMenuButton : RadialMenuTextureButtonWithSector;
@@ -18,14 +18,10 @@ public sealed class ChemistryGuideDataSystem : SharedChemistryGuideDataSystem
{
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
[ValidatePrototypeId<MixingCategoryPrototype>]
private const string DefaultMixingCategory = "DummyMix";
[ValidatePrototypeId<MixingCategoryPrototype>]
private const string DefaultGrindCategory = "DummyGrind";
[ValidatePrototypeId<MixingCategoryPrototype>]
private const string DefaultJuiceCategory = "DummyJuice";
[ValidatePrototypeId<MixingCategoryPrototype>]
private const string DefaultCondenseCategory = "DummyCondense";
private static readonly ProtoId<MixingCategoryPrototype> DefaultMixingCategory = "DummyMix";
private static readonly ProtoId<MixingCategoryPrototype> DefaultGrindCategory = "DummyGrind";
private static readonly ProtoId<MixingCategoryPrototype> DefaultJuiceCategory = "DummyJuice";
private static readonly ProtoId<MixingCategoryPrototype> DefaultCondenseCategory = "DummyCondense";
private readonly Dictionary<string, List<ReagentSourceData>> _reagentSources = new();
@@ -2,7 +2,6 @@ using Content.Client.Chemistry.UI;
using Content.Client.Items;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Robust.Shared.GameStates;
namespace Content.Client.Chemistry.EntitySystems;
@@ -11,6 +10,7 @@ public sealed class InjectorSystem : SharedInjectorSystem
public override void Initialize()
{
base.Initialize();
Subs.ItemStatus<InjectorComponent>(ent => new InjectorStatusControl(ent, SolutionContainers));
Subs.ItemStatus<InjectorComponent>(ent => new InjectorStatusControl(ent, SolutionContainer));
}
}
@@ -38,13 +38,13 @@ public sealed class InjectorStatusControl : Control
// only updates the UI if any of the details are different than they previously were
if (PrevVolume == solution.Volume
&& PrevMaxVolume == solution.MaxVolume
&& PrevTransferAmount == _parent.Comp.TransferAmount
&& PrevTransferAmount == _parent.Comp.CurrentTransferAmount
&& PrevToggleState == _parent.Comp.ToggleState)
return;
PrevVolume = solution.Volume;
PrevMaxVolume = solution.MaxVolume;
PrevTransferAmount = _parent.Comp.TransferAmount;
PrevTransferAmount = _parent.Comp.CurrentTransferAmount;
PrevToggleState = _parent.Comp.ToggleState;
// Update current volume and injector state
@@ -59,6 +59,6 @@ public sealed class InjectorStatusControl : Control
("currentVolume", solution.Volume),
("totalVolume", solution.MaxVolume),
("modeString", modeStringLocalized),
("transferVolume", _parent.Comp.TransferAmount)));
("transferVolume", _parent.Comp.CurrentTransferAmount)));
}
}
+5
View File
@@ -0,0 +1,5 @@
using Content.Shared.Cloning;
namespace Content.Client.Cloning;
public sealed partial class CloningSystem : SharedCloningSystem;
@@ -1,13 +1,11 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Numerics;
using Content.Client.DisplacementMap;
using Content.Client.Inventory;
using Content.Shared._DV.Silicon.IPC; // DeltaV - IPC Snouts
using Content.Shared.Clothing;
using Content.Shared.Clothing.Components;
using Content.Shared.Clothing.EntitySystems;
using Content.Shared.DisplacementMap;
using Content.Shared.Humanoid;
using Content.Shared.Inventory;
using Content.Shared.Inventory.Events;
@@ -15,7 +13,6 @@ using Content.Shared.Item;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.TypeSerializers.Implementations;
using Robust.Shared.Utility;
using static Robust.Client.GameObjects.SpriteComponent;
@@ -60,7 +57,7 @@ public sealed class ClientClothingSystem : ClothingSystem
base.Initialize();
SubscribeLocalEvent<ClothingComponent, GetEquipmentVisualsEvent>(OnGetVisuals);
SubscribeLocalEvent<ClothingComponent, InventoryTemplateUpdated>(OnInventoryTemplateUpdated);
SubscribeLocalEvent<InventoryComponent, InventoryTemplateUpdated>(OnInventoryTemplateUpdated);
SubscribeLocalEvent<InventoryComponent, VisualsChangedEvent>(OnVisualsChanged);
SubscribeLocalEvent<SpriteComponent, DidUnequipEvent>(OnDidUnequip);
@@ -83,20 +80,19 @@ public sealed class ClientClothingSystem : ClothingSystem
}
}
private void OnInventoryTemplateUpdated(Entity<ClothingComponent> ent, ref InventoryTemplateUpdated args)
private void OnInventoryTemplateUpdated(Entity<InventoryComponent> ent, ref InventoryTemplateUpdated args)
{
UpdateAllSlots(ent.Owner, clothing: ent.Comp);
UpdateAllSlots(ent.Owner, ent.Comp);
}
private void UpdateAllSlots(
EntityUid uid,
InventoryComponent? inventoryComponent = null,
ClothingComponent? clothing = null)
InventoryComponent? inventoryComponent = null)
{
var enumerator = _inventorySystem.GetSlotEnumerator((uid, inventoryComponent));
while (enumerator.NextItem(out var item, out var slot))
{
RenderEquipment(uid, item, slot.Name, inventoryComponent, clothingComponent: clothing);
RenderEquipment(uid, item, slot.Name, inventoryComponent);
}
}
@@ -186,6 +182,7 @@ public sealed class ClientClothingSystem : ClothingSystem
var layer = new PrototypeLayerData();
layer.RsiPath = rsi.Path.ToString();
layer.State = state;
layer.Scale = clothing.Scale;
layers = new() { layer };
return true;
@@ -8,6 +8,8 @@ namespace Content.Client.CombatMode
{
public sealed class ColoredScreenBorderOverlay : Overlay
{
private static readonly ProtoId<ShaderPrototype> Shader = "ColoredScreenBorder";
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public override OverlaySpace Space => OverlaySpace.WorldSpace;
@@ -16,7 +18,7 @@ namespace Content.Client.CombatMode
public ColoredScreenBorderOverlay()
{
IoCManager.InjectDependencies(this);
_shader = _prototypeManager.Index<ShaderPrototype>("ColoredScreenBorder").Instance();
_shader = _prototypeManager.Index(Shader).Instance();
}
protected override void Draw(in OverlayDrawArgs args)
+9 -20
View File
@@ -1,53 +1,42 @@
using Content.Client.Markers;
using Content.Client.Popups;
using Content.Client.SubFloor;
using Content.Shared.SubFloor;
using Robust.Client.GameObjects;
using Robust.Shared.Console;
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
namespace Content.Client.Commands;
internal sealed class ShowMarkersCommand : LocalizedCommands
internal sealed class ShowMarkersCommand : LocalizedEntityCommands
{
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
[Dependency] private readonly MarkerSystem _markerSystem = default!;
public override string Command => "showmarkers";
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
_entitySystemManager.GetEntitySystem<MarkerSystem>().MarkersVisible ^= true;
_markerSystem.MarkersVisible ^= true;
}
}
internal sealed class ShowSubFloor : LocalizedCommands
internal sealed class ShowSubFloor : LocalizedEntityCommands
{
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
[Dependency] private readonly SubFloorHideSystem _subfloorSystem = default!;
public override string Command => "showsubfloor";
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
_entitySystemManager.GetEntitySystem<SubFloorHideSystem>().ShowAll ^= true;
_subfloorSystem.ShowAll ^= true;
}
}
internal sealed class NotifyCommand : LocalizedCommands
internal sealed class NotifyCommand : LocalizedEntityCommands
{
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
public override string Command => "notify";
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var message = args[0];
_entitySystemManager.GetEntitySystem<PopupSystem>().PopupCursor(message);
_popupSystem.PopupCursor(args[0]);
}
}
@@ -5,32 +5,27 @@ using Robust.Shared.Containers;
namespace Content.Client.Commands;
public sealed class HideMechanismsCommand : LocalizedCommands
public sealed class HideMechanismsCommand : LocalizedEntityCommands
{
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly SpriteSystem _spriteSystem = default!;
public override string Command => "hidemechanisms";
public override string Description => LocalizationManager.GetString($"cmd-{Command}-desc", ("showMechanismsCommand", ShowMechanismsCommand.CommandName));
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var containerSys = _entityManager.System<SharedContainerSystem>();
var spriteSys = _entityManager.System<SpriteSystem>();
var query = _entityManager.AllEntityQueryEnumerator<OrganComponent, SpriteComponent>();
var query = EntityManager.AllEntityQueryEnumerator<OrganComponent, SpriteComponent>();
while (query.MoveNext(out var uid, out _, out var sprite))
{
spriteSys.SetContainerOccluded((uid, sprite), false);
_spriteSystem.SetContainerOccluded((uid, sprite), false);
var tempParent = uid;
while (containerSys.TryGetContainingContainer((tempParent, null, null), out var container))
while (_containerSystem.TryGetContainingContainer((tempParent, null, null), out var container))
{
if (!container.ShowContents)
{
spriteSys.SetContainerOccluded((uid, sprite), true);
_spriteSystem.SetContainerOccluded((uid, sprite), true);
break;
}
@@ -1,33 +1,29 @@
using Content.Client.Actions;
using Content.Client.Mapping;
using Content.Client.Markers;
using JetBrains.Annotations;
using Content.Client.SubFloor;
using Robust.Client.Graphics;
using Robust.Client.State;
using Robust.Shared.Console;
namespace Content.Client.Commands;
[UsedImplicitly]
internal sealed class MappingClientSideSetupCommand : LocalizedCommands
internal sealed class MappingClientSideSetupCommand : LocalizedEntityCommands
{
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
[Dependency] private readonly ILightManager _lightManager = default!;
[Dependency] private readonly IStateManager _stateManager = default!;
[Dependency] private readonly ActionsSystem _actionSystem = default!;
[Dependency] private readonly MarkerSystem _markerSystem = default!;
[Dependency] private readonly SubFloorHideSystem _subfloorSystem = default!;
public override string Command => "mappingclientsidesetup";
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (!_lightManager.LockConsoleAccess)
{
_entitySystemManager.GetEntitySystem<MarkerSystem>().MarkersVisible = true;
_lightManager.Enabled = false;
shell.ExecuteCommand("showsubfloor");
_entitySystemManager.GetEntitySystem<ActionsSystem>().LoadActionAssignments("/mapping_actions.yml", false);
}
if (_lightManager.LockConsoleAccess)
return;
_markerSystem.MarkersVisible = true;
_lightManager.Enabled = false;
_subfloorSystem.ShowAll = true;
_actionSystem.LoadActionAssignments("/mapping_actions.yml", false);
}
}
@@ -1,57 +1,46 @@
using Content.Shared.Damage.Prototypes;
using Content.Shared.Overlays;
using Robust.Client.Player;
using Robust.Shared.Console;
using Robust.Shared.Prototypes;
using System.Linq;
namespace Content.Client.Commands;
public sealed class ShowHealthBarsCommand : LocalizedCommands
public sealed class ShowHealthBarsCommand : LocalizedEntityCommands
{
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
public override string Command => "showhealthbars";
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var player = _playerManager.LocalSession;
var player = shell.Player;
if (player == null)
{
shell.WriteError(LocalizationManager.GetString($"cmd-{Command}-error-not-player"));
shell.WriteError(Loc.GetString("shell-only-players-can-run-this-command"));
return;
}
var playerEntity = player?.AttachedEntity;
if (!playerEntity.HasValue)
if (player.AttachedEntity is not { } playerEntity)
{
shell.WriteError(LocalizationManager.GetString($"cmd-{Command}-error-no-entity"));
shell.WriteError(Loc.GetString("shell-must-be-attached-to-entity"));
return;
}
if (!_entityManager.HasComponent<ShowHealthBarsComponent>(playerEntity))
if (!EntityManager.HasComponent<ShowHealthBarsComponent>(playerEntity))
{
var showHealthBarsComponent = new ShowHealthBarsComponent
{
DamageContainers = args.Select(arg => new ProtoId<DamageContainerPrototype>(arg)).ToList(),
HealthStatusIcon = null,
NetSyncEnabled = false
NetSyncEnabled = false,
};
_entityManager.AddComponent(playerEntity.Value, showHealthBarsComponent, true);
EntityManager.AddComponent(playerEntity, showHealthBarsComponent, true);
shell.WriteLine(LocalizationManager.GetString($"cmd-{Command}-notify-enabled", ("args", string.Join(", ", args))));
shell.WriteLine(Loc.GetString("cmd-showhealthbars-notify-enabled", ("args", string.Join(", ", args))));
return;
}
else
{
_entityManager.RemoveComponentDeferred<ShowHealthBarsComponent>(playerEntity.Value);
shell.WriteLine(LocalizationManager.GetString($"cmd-{Command}-notify-disabled"));
}
return;
EntityManager.RemoveComponentDeferred<ShowHealthBarsComponent>(playerEntity);
shell.WriteLine(Loc.GetString("cmd-showhealthbars-notify-disabled"));
}
}
@@ -4,24 +4,19 @@ using Robust.Shared.Console;
namespace Content.Client.Commands;
public sealed class ShowMechanismsCommand : LocalizedCommands
public sealed class ShowMechanismsCommand : LocalizedEntityCommands
{
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly SpriteSystem _spriteSystem = default!;
public const string CommandName = "showmechanisms";
public override string Command => CommandName;
public override string Help => LocalizationManager.GetString($"cmd-{Command}-help", ("command", Command));
public override string Command => "showmechanisms";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var spriteSys = _entManager.System<SpriteSystem>();
var query = _entManager.AllEntityQueryEnumerator<OrganComponent, SpriteComponent>();
var query = EntityManager.AllEntityQueryEnumerator<OrganComponent, SpriteComponent>();
while (query.MoveNext(out var uid, out _, out var sprite))
{
spriteSys.SetContainerOccluded((uid, sprite), false);
_spriteSystem.SetContainerOccluded((uid, sprite), false);
}
}
}

Some files were not shown because too many files have changed in this diff Show More