Compare commits

...

1483 Commits

Author SHA1 Message Date
Deserty0
aa621ece26 Merge remote-tracking branch 'upstream/master' into funnyfunnystuff 2025-08-23 19:44:16 +10:00
CrystallEdge Server
2bd8af47eb Automatic changelog update 2025-08-23 12:01:32 +03:00
Viator-MV
d83f532373 nerf (#1695) 2025-08-23 12:00:26 +03:00
CrystallEdge Server
3d8faae8f5 Automatic changelog update 2025-08-23 01:57:06 +03:00
Red
57a7cb30a7 Vampire hotfix (#1696)
* Adjust vampire features and add construction category

Increased vampire skill points from 1 to 3 and removed SendOnlyToOwner override. Updated power punch spell: removed cast slowdown, increased paralyze durations, and raised cooldown. Added new construction category for vampires with English and Russian localization, and updated vampire construction recipes to use this category. Reduced furnace recipe craft times from 4 to 1. Cleaned up unused usings in vampire components.

* Improve vampire skill popups and clan heart features

Added missing popup when no essence is left to gather and improved popup handling for skill point changes. Updated localization for clan progress and essence messages, added WarpPoint to vampire clan heart, and adjusted vampire skill tree structure and UI positions.

* Add vampire hypnosis skill and rebalance vampire content

Introduces the Hypnosys vampire skill and associated spell, including new status effects and alerts for forced sleep. Adjusts vampire skill tree progression, rebalances bite spell effects, modifies construction recipes to use stone instead of iron, and updates entity drop behaviors. Also tweaks skill point defaults and hunger/thirst effect order for plant growth spells.

* Adjust hunger settings and map spawner modifiers

Removed baseDecayRate and starvationDamage from Hunger components for NightChildrens, Devourers, and Unnameable in subgamemodes.yml. Updated comoss.yml and venicialis.yml to replace or add spawner modifiers, introducing Boar and Rabbits while removing EnemyFlem, MonsterMosquito, and MobSlimeIce.

* Add SSD block to magic system and vampire bite spell

Introduced CP14MagicEffectSSDBlockComponent to prevent magic use on SSD (disconnected) players. Updated the magic system to check for SSD status and added localization strings for SSD block messages in English and Russian. Applied the SSD block effect to the vampire bite spell. Also fixed a typo in the PacifiedBlockComponent filename.

* Make blood reagents unrecognizable and adjust effects

Set all blood reagent variants to 'recognizable: false' to prevent easy identification. Simplified and unified damage effects for blood reagents, removing some specific reactions and adjusting damage groups, particularly for vampire-related blood types. Also fixed a duplicate 'allowedStates' key in the vampire bite spell action.

* Enable map initialization and clean up power punch spell

Changed map creation in Demiplane and CrashToWildlands systems to run map initialization by setting runMapInit to true. Removed redundant map initialization check in CP14SpawnProceduralLocationJob. Also removed the CP14ActionSpellVampirePower2 entity from the vampire power punch spell prototype.
2025-08-23 01:56:01 +03:00
CrystallEdge Server
d00270d2ed Automatic changelog update 2025-08-22 18:47:33 +03:00
Red
906033633e Vampire clan battle gamemode (#1672)
* vampire returns + transformstions redo

* carcat fangs fix + greetings music update

* vampire skill trees

* Blood essence gathering

Introduces the vampire blood essence mechanic, including the CP14SpellVampireGatherEssence spell, new skill point consumable component, and related UI/localization updates. Adds clientside effects for spell casting, new vampire skill and action, and refines skill point gain/loss popups. Also restructures vampire components, updates spell logic for client/server prediction, and removes unused parallax files.

* perma damage

* Add skill point cost to magic system and vampire essence spell

Introduced CP14MagicEffectSkillPointCostComponent to allow magic effects to consume skill points. Updated the shared magic system to handle skill point checks and consumption. Added a new vampire spell for creating blood essence, including new icons and localization. Adjusted vampire component to grant and remove skill points, and updated related skill tree and spell prototypes. Minor fixes and refactoring in spell logic and descriptions.

* blood step + blood vision skills

* vampire clans icons

* 50 players limit + vampire objectives

* fixes

* devourers altar transmutation

* Remove StealTarget component from animal, dino, and mole NPCs

The StealTarget component and associated stealGroup were removed from boar, dinosaur, and mole NPC definitions. This likely disables these entities from being targeted for stealing, possibly to adjust gameplay balance or fix unintended behavior.

* fix

* essence creation improve

* altars

* voice masks

* transmutation fix

* teleportation glyph

* crimson candles

* candle crafting

* fix pointer predictions

* Add Vampire Clan Battle gamemode and update vampire roles

Introduces the 'Vampire Clan Battle' gamemode with new localization in English and Russian, updated game preset definitions, and secret weights. Refactors vampire antagonist briefings and objectives for multiple clans, adjusts vampire role preferences and team settings, and reduces the damage of the Vampire Gather Essence spell. Also includes minor improvements to spell and game mode descriptions, and corrects file naming for game preset locales.

* powerful kicks in

* time gates + vampire tree

* vampire proto faction

* fix

* fixes

* tree progression

* search enemy

* Update CP14SharedVampireSystem.cs

* blood essence gathering redo

* essence gathering refactor 2

* blood healing

* Update secret_weights.yml

* tree planting

* boodgrass

* tree upgrade announcement

* construction graph integration

* delete transmutation system

* workbench crafting returns

* cloaks crafting + cloak invisibility

* make vampire tree is generic red tree (sad)

* clan heart sprite

* Refactor vampire tree to clan heart system

Replaces the CP14VampireTreeComponent with CP14VampireClanHeartComponent, updating all related logic, appearance, and localization. Adjusts skill requirements, examination, and level progression to use the new clan heart system. Updates entity prototypes, visuals, and adds new orb sprites for clan heart levels. Localization strings and logic are updated to reflect the new terminology and mechanics.

* Update SpeciesBlacklist.cs

* Refactor vampire clan heart and remove tree spell

Refactored the vampire clan heart to support essence regeneration over time and adjusted level thresholds. Removed the vampire tree planting spell and related prototype fields, as well as unused tree system code. Updated localization, entity prototypes, and faction definitions to reflect these changes.

* Add clan heart construction for vampire clans

Introduces construction graphs, entities, and conditions for building unique clan hearts for each vampire clan (Unnameable, Devourers, NightChildrens). Adds new construction conditions (all clan vampires required, singleton enforcement), updates skill tree to unlock constructions, and removes the now-obsolete CP14MagicEffectAllVampireClanRequiredComponent. Also adds new frame sprites and updates localization and prototype files accordingly.

* level up vfx

* VFX + lobby track

* orb resprite

* sprites

* Add vampire altar mechanics and improve clan heart behavior

Introduces the CP14VampireAltarComponent and altar entity, which doubles blood essence extraction when victims are strapped to the altar. Adds a custom explosion behavior for vampire clan hearts upon destruction, updates construction graphs and recipes for altars, and improves localization. Also refines skill description handling and adjusts vampire bite action text.

* essence get when heart destruction

* Add clan heart damage and destruction announcements

Introduces announcements for when a vampire clan heart is damaged or destroyed, with cooldown to prevent spam. Refactors examination logic and updates localization files for both English and Russian to support new messages and sender formatting.

* glyph adaptation

* resurrection

* Add round end summary for Vampire Clan Battles

Implemented detailed round end text for the Vampire Clan Battles game mode, displaying victory, defeat, or draw outcomes based on surviving factions and population percentage. Refactored alive player percentage logic into a shared method and updated localization files with new outcome messages in English and Russian. Also removed an unused field from the defence condition component.

* Update vampire_cloak.yml

* fix

* fix

* Update portal_glyph.yml
2025-08-22 18:46:28 +03:00
Nim
ac52adb87a fix count (#1685) 2025-08-22 18:06:38 +03:00
CrystallEdge Server
35ea523e20 Automatic changelog update 2025-08-22 18:03:20 +03:00
Morb
2798be4c5d Make elfs & silvas always use female displacement (#1691) 2025-08-22 18:02:14 +03:00
Morb
42afa7b754 Make IsDayNow method and return silva photosynthesis (#1648)
* Make is day method and return silva photosynthesis

* Disable CP14MagicEnergyDraw
2025-08-22 01:28:10 +03:00
Viator-MV
4a5bc15bd8 Good fire skele (#1680)
* Revert "fire magic bad skele (#1679)"

This reverts commit b130d8aeec.

* skelehehehe

* kit conversation
2025-08-21 16:03:57 +03:00
Copilot
5182c59fc5 Fix inconsistent cotton clothing names in Russian localization (#1689)
* Initial plan

* Fix inconsistent cotton clothing names in Russian localization

Co-authored-by: TheShuEd <96445749+TheShuEd@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: TheShuEd <96445749+TheShuEd@users.noreply.github.com>
2025-08-21 00:55:28 +03:00
Nim
0d976a80b3 damageModifierSet (#1688) 2025-08-20 20:51:07 +03:00
Deserty0
046847b6e5 Fix translation (#1682)
* Update RobustToolbox

* Revert "Update RobustToolbox"

This reverts commit dc7e25e8f7.

* Update modifiers.ftl

* FUCK.
2025-08-19 01:07:46 +03:00
Kit
c598d25bdb i forgor translation of cackle (#1681) 2025-08-18 23:31:28 +10:00
CrystallEdge Server
24d21fad8d Automatic changelog update 2025-08-18 11:42:39 +03:00
Kit
7d29519922 Cackle: EVIL PLANT THAT WANTS TO STEAL YOUR BLOOD (#1602)
* bleeding toxin

* cackle itself

* sprites

* spike

* Cackle now spawn

* lower danger points

* color change

* new demis

* more cackle changes to new system

* hope fix conflict

* try 2

* try 3

* try 4

* try 5

* try 6

* try 6

* undo try 6

* clumsy cackle

* changes

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-08-18 11:41:34 +03:00
Kit
b130d8aeec fire magic bad skele (#1679)
* fire magic bad

* same with you demiplane skele wiz
2025-08-18 03:00:08 +03:00
CrystallEdge Server
7a71163f7c Automatic changelog update 2025-08-18 01:20:07 +03:00
Viator-MV
26202ed324 Skeleton inteligence (#1447)
* help me ed

* skills

* god defence

* lantern gaze

* mask nerf

* tomer

* move lamp

* oops

* i hate new night vision

* like this?

* meh

* wizard

* atheism

* memory of health
2025-08-18 01:19:02 +03:00
CrystallEdge Server
db07ae15fe Automatic changelog update 2025-08-18 01:11:23 +03:00
Nim
9e4f3fbfb2 The lor book of religion (#1673)
* book religion

* Imitators of the Gods

* fix bold
2025-08-18 01:10:17 +03:00
Nim
838092b497 price of artefacts (#1674) 2025-08-18 01:09:29 +03:00
github-actions[bot]
4ba66a5427 @gogenych has signed the CLA in crystallpunk-14/crystall-punk-14#1676 2025-08-17 19:49:19 +00:00
CrystallEdge Server
583c26a55b Automatic changelog update 2025-08-16 19:45:41 +03:00
Kit
22ac60a5d3 More spell balance (#1671)
* NERFS!!!!!

* BUFFS!!!!

* hell ballade rebalance

* Pacifist block

* fix
2025-08-17 02:44:33 +10:00
Deserty0
52880de47e должно теперь работать 2025-08-13 21:07:21 +10:00
Deserty0
eb289104ab Update DiscordAuthManager.cs 2025-08-13 05:40:08 +10:00
Deserty0
db49a55481 Update CCvars.CP14DiscordAuth.cs 2025-08-13 05:40:08 +10:00
Deserty0
f01725fdc7 Update CCvars.CP14DiscordAuth.cs 2025-08-13 05:15:57 +10:00
Deserty0
0a6a560066 Update DiscordAuthManager.cs 2025-08-13 05:04:38 +10:00
Deserty0
6f170bb45f lol 2025-08-13 04:55:57 +10:00
Deserty0
cec07307bf 123 2025-08-13 04:49:12 +10:00
Deserty0
bd80a1eb60 Update PanicBunkerTab.xaml 2025-08-13 04:49:12 +10:00
Deserty0
b0c2b92464 Update DiscordAuthManager.cs 2025-08-13 04:15:38 +10:00
Deserty0
35e5025d3e Update CCvars.CP14DiscordAuth.cs 2025-08-13 04:15:37 +10:00
Deserty0
146967b786 looool 2025-08-13 04:15:37 +10:00
Deserty0
4b68d79729 uaua 2025-08-13 04:15:37 +10:00
Deserty0
8899695ed5 Update DiscordAuthManager.cs 2025-08-13 04:15:37 +10:00
Deserty0
1d410590b6 Update DiscordAuthManager.cs 2025-08-13 04:15:37 +10:00
Deserty0
24eb9d7493 Update DiscordAuthManager.cs 2025-08-13 04:15:37 +10:00
Deserty0
565283ae26 Update DiscordAuthManager.cs 2025-08-13 04:15:36 +10:00
Deserty0
d55800c575 funny 2025-08-13 04:15:36 +10:00
CrystallEdge Server
e87e021f1b Automatic changelog update 2025-08-11 23:47:33 +03:00
Red
e6f5ed2450 Spell pre-examine (#1661)
* examine spells

* fux

* fix
2025-08-11 23:46:28 +03:00
CrystallEdge Server
aa5fe8d4d7 Automatic changelog update 2025-08-11 22:20:37 +03:00
nukkuminen
cef72a3512 Cookbook (#1644)
* starting to add recipe book

* Guidebook for cooking

* added cookbook to the game, and the closet

* fix dishes

* typo fix

* another one

* even more typo fix

* fixing my shit from past

* final fixes to the guidebook

* fixing my mess
2025-08-11 22:19:32 +03:00
Viator-MV
25df43cea4 fixes (#1658) 2025-08-11 22:18:59 +03:00
CrystallEdge Server
1b2dc757e0 Automatic changelog update 2025-08-10 17:28:17 +03:00
creamybag
77c5d96ea3 New wild plant sprites. (#1654)
* 1

* 2
2025-08-10 17:27:12 +03:00
Alexsey Bezyuk
25df067d3f Backpacks description and categories (#1647)
* backpacks translation

* leather categories

* linter fix

* Linter please

* Описания

* priority in craft

* priorotize

* eng comment

* Update Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml.cs
2025-08-10 17:25:34 +03:00
Morb
44beba9ca6 Convert flem sounds from stereo to mono (#1649) 2025-08-10 17:23:41 +03:00
nukkuminen
4c9f31ef13 Carcat guidebook tweak (#1652)
* English carkat guidebook tweak

* Russian carkat guidebook tweak
2025-08-10 17:23:25 +03:00
Kit
662e509369 no more magic type mana armor (#1650) 2025-08-09 20:53:25 +03:00
Red
c089e844dc Minor cleanup (#1645)
* bue

* some code
2025-08-09 13:47:21 +03:00
CrystallEdge Server
bfd1db72d8 Automatic changelog update 2025-08-09 13:22:31 +03:00
Alexsey Bezyuk
bdd7e5ea65 Leather rework (#1638)
* remove salt

* crafting rework

* Stacks

* corrected count

* linter fix

* Bellt crafts

* delete leather

* resize

* Hide in belt

* Sprites fix

* linter fix

* remove static price from backpacks base

* explosive resistance

* belt cost

* Lets fix cost warnings

* satchels static price for balance with backpacks

* ScrapHideRecipe cost

* lets try increase leather units in hide

* return scrap recipe back

* Lets FINISH that costs!

* hide suffix

* trying to fix stack warning

* placeholder suffix

* Hide => Leather

* Lets try again!!!!

* name and description

* another

* Update Resources/Prototypes/_CP14/Entities/Objects/Ingredients/ingredients.yml

* Update Resources/Prototypes/_CP14/Materials/simple.yml

* Update Resources/Prototypes/_CP14/Entities/Objects/Ingredients/ingredients.yml
2025-08-09 13:21:26 +03:00
Nim
96f28489c6 Перевод на RU (#1596)
* 1

* 2

* 3

* 4

* health-examinable

* .

* carpet fix

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-08-09 13:12:47 +03:00
github-actions[bot]
31167f97e4 @oldschoolotaku has signed the CLA in crystallpunk-14/crystall-punk-14#1644 2025-08-08 23:57:57 +00:00
CrystallEdge Server
e826bbe4ed Automatic changelog update 2025-08-09 00:28:28 +03:00
Red
02286f492a material aspect support (#1643) 2025-08-09 00:27:23 +03:00
CrystallEdge Server
8015892add Automatic changelog update 2025-08-08 22:43:13 +03:00
Red
a808bf521c Resurrection spell returns (#1642)
* resurrection

* resurrection

* loadout

* city portal spell scroll

* Update thaumaturgy.yml
2025-08-08 22:42:08 +03:00
Ed
9ad759b56d Update CP14DemiplaneSystem.cs 2025-08-08 20:32:25 +03:00
CrystallEdge Server
f4dad593a9 Automatic changelog update 2025-08-08 17:38:21 +03:00
Red
fa22152b42 Demiplane redesign again (again) (#1640)
* rooms generation fix??

* demiplane map returns

* wawa

* fix
2025-08-08 17:37:16 +03:00
CrystallEdge Server
76752414c6 Automatic changelog update 2025-08-08 12:36:26 +03:00
Morb
a4eaf8018f Fix mosquitos stamina animation threshold (#1635)
* Fix mosquitos stamina animation threshold

* Remove mosquito stamina
2025-08-08 12:35:21 +03:00
github-actions[bot]
95ae290c7b @Morb0 has signed the CLA in crystallpunk-14/crystall-punk-14#1635 2025-08-07 23:54:21 +00:00
CrystallEdge Server
841d75946d Automatic changelog update 2025-08-08 00:13:41 +03:00
Nim
ec7c84cc90 Lurker cape (#1455)
* lurker cape

* UseDelay

* del useDelay

* onUse

* fix
2025-08-08 00:12:36 +03:00
CrystallEdge Server
616de88ff8 Automatic changelog update 2025-08-07 23:59:03 +03:00
Morb
227c44561b Alert sprite size fix (#1637)
* Directly use vanilla alerts & make stamina as custom

* Fix mix size for alert of 96px

* Revert "Directly use vanilla alerts & make stamina as custom"

This reverts commit 3298202f8a.

* Update AlertsUI.xaml

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-08-07 23:57:58 +03:00
CrystallEdge Server
0d269372d7 Automatic changelog update 2025-08-07 23:37:47 +03:00
Red
ad75c2b22a City Generation bugfixes (#1639)
* fix biome

* mapping upadte

* and this

* Update comoss.yml
2025-08-07 23:36:42 +03:00
CrystallEdge Server
5eb53af75d Automatic changelog update 2025-08-07 14:51:44 +03:00
Red
a6c8779093 Bugfix portion (#1636)
* fix #1634

* fix #1575

* fix #1612
2025-08-07 14:50:39 +03:00
Morb
58c40c39ad Add universal key (#1624)
* Add universal key

* Address issues
2025-08-07 11:11:37 +03:00
CrystallEdge Server
98ae6b22e6 Automatic changelog update 2025-08-07 09:57:19 +03:00
nukkuminen
7e39f78df5 Soup bugfix and price change (#1630)
* adjust prices for food contracts

* fix unsellable soups

* move thing outside the cycle
2025-08-07 09:56:14 +03:00
CrystallEdge Server
e0526177e6 Automatic changelog update 2025-08-07 01:25:03 +03:00
nukkuminen
84b599cd41 Carcats are finally not humans (#1625) 2025-08-07 01:23:58 +03:00
CrystallEdge Server
2366328d38 Automatic changelog update 2025-08-07 01:23:50 +03:00
Kit
f7ea87fb8e Spell rebalance (#1632)
* ICE SHARD!!!!

* ICE DAGGER!!!!

* ICE ARROW!!!!

* FIRE WAVE!!!!
2025-08-07 01:22:46 +03:00
CrystallEdge Server
ab828583e5 Automatic changelog update 2025-08-07 01:19:59 +03:00
nukkuminen
d439f56ebf backpack tweak (#1622) 2025-08-07 01:18:54 +03:00
Morb
08691f8435 typo fixes for key ids (#1629) 2025-08-06 23:11:46 +03:00
CrystallEdge Server
daf5e14c4e Automatic changelog update 2025-08-06 22:34:58 +03:00
Red
bca971223c fix generation dublication (#1627) 2025-08-06 22:33:53 +03:00
CrystallEdge Server
96bcfb3716 Automatic changelog update 2025-08-06 13:19:14 +03:00
Red
5690c94ee2 light returns (#1621) 2025-08-06 13:18:09 +03:00
CrystallEdge Server
a4cdcf0a1f Automatic changelog update 2025-08-06 12:53:57 +03:00
Red
3b04b1f002 Merge pull request #1613 from crystallpunk-14/ed-04-08-2025-upstream-sync
Crawling upstream sync
2025-08-06 12:52:51 +03:00
Ed
22b020011d Update EntityTest.cs 2025-08-06 12:38:45 +03:00
Ed
be1d0f7359 Update EntityTest.cs 2025-08-06 12:20:27 +03:00
Ed
7136479b3e Revert "Update build-test-debug.yml"
This reverts commit 92f6e9e2bc.
2025-08-06 00:40:25 +03:00
Ed
92f6e9e2bc Update build-test-debug.yml 2025-08-06 00:11:11 +03:00
Ed
3694baca58 revert fail fast 2025-08-05 17:15:19 +03:00
Ed
0018728990 Update build-test-debug.yml 2025-08-05 16:57:59 +03:00
Ed
05138740e8 Update build-test-debug.yml 2025-08-05 16:57:46 +03:00
CrystallEdge Server
312e2b5ac1 Automatic changelog update 2025-08-05 14:32:24 +03:00
Alexsey Bezyuk
878aea4e29 Backpacks tweaks (#1618)
* speed reinform

* bear hide

* quiver and pouch craft

* speed rebalance

* fix ooops
2025-08-05 14:31:18 +03:00
CrystallEdge Server
fa99ac78e3 Automatic changelog update 2025-08-05 13:02:38 +03:00
Red
174abacead Safe chasms (#1458)
* Update chasm.yml

* Update chasm.yml
2025-08-05 13:01:32 +03:00
Red
b60ceb38ca Demiplanes redesign again (#1616)
* global demi refactor

* rebalance, smaller demiplanes

* remove outdated connections

* audio design + room coords fix

* Update CP14Rooms.cs

* Update wastelands.yml

* hotfixes

* Update CP14SpellThrowFromUser.cs

* Update sky_lightning.yml
2025-08-05 12:15:24 +03:00
Red
9c3fe601e2 Merge branch 'master' into ed-04-08-2025-upstream-sync 2025-08-05 11:52:43 +03:00
Red
4f431f9b70 Comment out integration tests in multiple files (#1617)
All test methods in several integration test files have been commented out, effectively disabling these tests. This may be for temporary troubleshooting, refactoring, or to address failing or unstable tests.
2025-08-05 11:52:29 +03:00
CrystallEdge Server
4a02a34637 Automatic changelog update 2025-08-05 01:52:42 +03:00
Alexsey Bezyuk
60ca45a846 Leather working and backpacks (#1378)
* backpacks

* suffix

* grid fix

* fix grid explorer

* recipes

* small rebalance at backpack

* leathers and butcher drop

* thin hide and prob scrap

* Leather Working

* T3 backpack grid update

* salt

* workbench

* tanner table sprite

* leather workbench construction

* Trading Position and Salt Stack

* sizes and shapes

* Revert "sizes and shapes"

This reverts commit f317a047f3.

* tiny buckle

* Ingredients and buckle icon

* ingridients json

* price and fur

* Resprite tanner table

* Rough => Rugged

* coarse, rigged leather

* icons files

* chance for fur drop

* Price down

* leather, fur, hide icons

* shape and size

* loadout tiers back

* Rename

* T3 explorer rename

* upstream

* rsi fix

* rename, descriptions, guards backpacks

* backpacks icons

* Sprites

* slots and modifiers

* missed

* belt and flipped pouches

* goblin sprites

* prices, loadouts, icons marked

* craft fix

* метка

* sprite mark

* satchels sprint normalize

* reinf too

* Crafts with low tier backpacks

* butchers hide positions

* Back Clothing

* linter fixes

* small prices rebalance

* Back loadout fix

* craft fixes

* Iron Buckle fix

* fixes

* fixes

* fix sound error

* clear

* another linter fixes

* move Salt to ores

* fixes

* localization

* moved

* salt stone god help me

* linter fix

* Ooops, linter fix

* Speed modifiers

* materials rework

* PhysicalComposition and commented cost

* fix path

* localization material unit

* leather crafting from hide increase

* salt in craft increase

* explorer commented back

* backpacks upgrade required less leather

* clear

* missed string in cost

* commented

* static price to backpacks

* no map touch...

* strap cost back

* leather - no stack entity anymore

* cost...

* return venicialis satchel back

* migration fix

* migration?

* migration again

* backpack satchel upgrade lowered

* CP14ThinToNormalLeatherRecipe

* Leather Strap Recipe

* Failed CheckRecipePricingReduction

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-08-05 01:51:37 +03:00
Red
70bf2e1cf3 Merge branch 'master' into ed-04-08-2025-upstream-sync 2025-08-04 13:38:49 +03:00
CrystallEdge Server
133c927f0f Automatic changelog update 2025-08-04 13:37:04 +03:00
Red
6b5c27125b Gathering resourses redesign (#1594)
* Add Crash to Windlands survival gamemode and map

Introduces the CP14CrashToWindlandsRule and its component for a new survival gamemode where a ship crashes into wildlands. Adds the 'nautilus_ship' map, updates English and Russian locale files with new gamemode titles and descriptions, and modifies relevant prototype and map pool files to support the new mode.

* fix FTL map

* firebombing is real

* fix biome dungen all grid overriding

* Update PostMapInitTest.cs

* Update DungeonJob.CP14Biome.cs

* Refactor demiplane generation and crash rules

Replaces the old demiplane job system with a new procedural location generation system (CP14LocationGenerationSystem and CP14SpawnProceduralLocationJob). Splits the crash-to-windlands rule into CP14CrashingShipRule (handles explosions) and CP14ExpeditionToWindlandsRule (handles map generation and FTL), with corresponding new components. Updates roundstart game rule prototype and moves/renames several files for clarity and modularity.

* Refactor location generation to support optional seed and position

Updated the GenerateLocation method to accept an optional seed and position, defaulting to a random seed if none is provided. Adjusted all call sites and the procedural job to support these changes, improving flexibility and consistency in procedural location generation.

* procedural integration into game map

* Demiplanes deletion

* clear demiplane content

* remapping procedural + frigid coast deletion

* clear demiplane guidebook

* dungeons generations

* Refactor procedural location configs and add ComossIsland

Consolidated and renamed procedural location and dungeonConfig prototypes for demiplane locations, replacing T1-prefixed and legacy IDs with new, consistent names. Updated map YAMLs to reference new location IDs and configs. Added a new ComossIsland location and dungeonConfig. Refactored code to support passing custom dungeon layers and removed unused ExamineProb field from CP14ProceduralLocationPrototype.

* Enhance procedural world gen and location configs

Improved procedural world generation by adding location generation probability, adjusting level ranges, and refining modifier uniqueness. Updated CP14ProceduralLocationPrototype and CP14ProceduralModifierPrototype, refactored node data generation logic, and made related test and map changes. Added new venicialis_fort station map and updated several procedural location and modifier YAMLs for consistency.

* fix

* connections room spawners

* track finishing global world generation

* real connection

* Update PostMapInitTest.cs

* Update venicialis.yml

* Update venicialis.yml

* fix raids, decrease city island sizes

* Update migration.yml

* Update migration.yml

* fix shutdowning

* Update CP14SpawnProceduralLocationJob.cs
2025-08-04 13:35:55 +03:00
Ed
e9199b4e77 fixes 2025-08-04 12:56:12 +03:00
Ed
e059ba05ad Update mana_vision.yml 2025-08-04 12:44:58 +03:00
Ed
f2d9608a62 Merge remote-tracking branch 'upstream/stable' into ed-04-08-2025-upstream-sync
# Conflicts:
#	Content.Server/Chat/Managers/ChatSanitizationManager.cs
#	Content.Shared/Damage/Systems/SharedStaminaSystem.cs
#	Content.Shared/Eye/VisibilityFlags.cs
#	Content.Shared/Lock/LockSystem.cs
#	Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs
#	Resources/Prototypes/Recipes/Reactions/chemicals.yml
#	Tools/actions_changelogs_since_last_run.py
2025-08-04 12:44:29 +03:00
Vasilis The Pikachu
ecf96d85f4 Changelog removal of reverted PR's 2025-08-03 22:03:43 +02:00
Vasilis The Pikachu
978c51e73d Revert "Added utility belt function to scrap armor (#39233)"
This reverts commit 7852b52f85.

Revert suggested due to the utility toolbelt may be considered too overpowered and passed

<https://youtu.be/8RmeZKz-i_w?t=2548>

@ToastEnjoyer
2025-08-03 22:03:43 +02:00
Vasilis The Pikachu
2a72e30e0e Revert "Added Kill Tome (Death Note). (#39011)"
This reverts commit d0c104e4b0.

Revert suggested due to code issues and passed the voting.

@ScarKy0 has interest in fixing it

@xsainteer

<https://youtu.be/8RmeZKz-i_w?t=2151>
2025-08-03 22:03:43 +02:00
Princess Cheeseballs
6ffec751ee Flesh Stun Fix (#39324) 2025-08-02 00:44:55 +03:00
CrystallEdge Server
35206a003b Automatic changelog update 2025-08-01 14:10:11 +03:00
Red
9384623604 Non-gibbing demiplanes (#1607)
* safe demiplanes

* damage
2025-08-01 14:09:05 +03:00
CrystallEdge Server
e31f3a7d77 Automatic changelog update 2025-08-01 12:00:11 +03:00
AnyTap
de9019c408 Removed the recipe for the copper armour (#1571)
* Removed the recipe for the copper armour

* remove armor

* Removed the recipe for the copper armour

* Update Frigid_Coast.yml

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-08-01 11:59:05 +03:00
CrystallEdge Server
487aeba8ee Automatic changelog update 2025-08-01 11:58:22 +03:00
Red
1488f5dfc7 Add Air Saturation spell and skill to Life magic (#1603)
Introduces the Air Saturation spell, which heals suffocation damage, including its entity definition, visual effects, and icon. Adds the spell to the Healing skill tree and updates the healing.rsi texture set with a new icon and metadata. Also cleans up the plant_growth spell by removing unused telegraphy effects and sprite references.
2025-08-01 11:57:16 +03:00
Deserty0
e637747b06 Chatsan Пустыня эдишн (#1592)
* оп

* Update speech-chatsan.ftl
2025-08-01 00:36:13 +03:00
CrystallEdge Server
5cc3d24901 Automatic changelog update 2025-08-01 00:35:41 +03:00
Red
7d0392478b Fix barrels (#1600)
* Update bucket and barrel solution components

Replaces SolutionTransfer with Injector for buckets, adjusting transfer parameters and solution handling. Enables RefillableSolution for barrels, allowing them to be refilled. These changes improve consistency and functionality for liquid transfer between containers.

* 1306

* fix lobby audio
2025-08-01 00:34:36 +03:00
CrystallEdge Server
bb9c8e865e Automatic changelog update 2025-07-31 23:45:51 +03:00
Red
f17779812f Bugfixes (#1599)
* fix #1593

* fix #1236

* fix #1561
2025-07-31 23:44:45 +03:00
CrystallEdge Server
25823cbe06 Automatic changelog update 2025-07-31 22:29:58 +03:00
Red
821f74766a Mob reparent + Atmos disabled (#1597)
* mob mob

* temperature

* delete resurrection spell

* Update base.yml

* Update base.yml

* Update migration.yml

* Update demiplane.yml

* fix

* delete air mixtures from alchemy

* Update herbals.yml

* Update herbals.yml

* Update brad_potions.yml

* Update GhostSystem.cs

* healing spell refactor

* return airloss

* Revert "Update herbals.yml"

This reverts commit 86870e0390.

* Revert "Update herbals.yml"

This reverts commit 8fdb01881d.

* Revert "delete air mixtures from alchemy"

This reverts commit 0fddb2febd.

* fix

* fix mobs suffocation

* Update base.yml
2025-07-31 22:28:52 +03:00
Mr. 27
66f64bc952 Allow EmoteSoundsPrototype to have parents (#38890)
* inital

* Update Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>

* ProtoId

* Unneeded

* Update Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs

* Update Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs

---------

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
2025-07-31 15:22:33 +02:00
PJBot
c3374d86e4 Automatic changelog update 2025-07-31 04:09:13 +00:00
Spanky
31773e64f4 Adds Wizard's Den (Replaces Wizard Shuttle) (#37701) 2025-07-30 21:08:05 -07:00
Whisper
f3aa14200b Change the description of barefoot drink. (#39285) 2025-07-30 22:47:49 -04:00
PJBot
c2aede7963 Automatic changelog update 2025-07-30 22:52:29 +00:00
Disp-Dev
9b0a171743 New recipe: Cotton Cakes (#39222)
* add moth edible cotton cakes

* oh fuck i accidentally changed the sln file

* inhand sprite fix

---------

Co-authored-by: DispenserDev <mariousjoaquin@gmail.com>
2025-07-30 18:51:21 -04:00
EnrichedCaramel
e2b08dba1f Cleanup of scurret/role.ftl (#39281)
Move contents from and delete scurret/role.ftl
2025-07-31 00:40:53 +02:00
slarticodefast
271e271cc9 Predict passive welding fuel consumption (#38876)
* predict welding fuel consumption

* autopaused

* review

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

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-07-31 00:38:38 +02:00
Kyle Tyo
68ba22548d Predict GlueSystem (#39079)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-07-30 12:57:50 -07:00
Red
7298e14de7 Upstream stable sync (#1558)
* 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>

* Automatic changelog update

* More guidebook fixes (#38699)

* First commit
- Resolving a few different pages, fixing typos and updating spellings and phrasing to be more coherent.

* More slight changes

* Reverting slightly the salvage page change

* Fixing Science wording inconsistency

* Few other small guidebook fixes
- Updating NukeOps page to properly refer to "Corpsman" rather than "Agent".
- Typo and slight wording change in Traitors.xml.
- Updating small typos in Antagonists.xml and Zombies.xml pages.

* Automatic changelog update

* Fixes missing underwear FTLs (#38720)

* 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

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

* Automatic changelog update

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

* Automatic changelog update

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

Update EyeClosingSystem.cs

* Typofixes for figurine dialogue (#38737)

* Typofixes for figurine dialogue

* Forgot two

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

* Fix human skin tone distribution (#38701)

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

* 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

* Validate remaining `ProtoId` strings (#38747)

Validate remaining ProtoId strings

* feat: allow mopping evaporating puddles (#38743)

* Automatic changelog update

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

* Automatic changelog update

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

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

* Automatic changelog update

* Minor escape menu UX improvements (#38650)

* Automatic changelog update

* Meta.json cleanup - pins.rsi (#38781)

cleanup

* Log an error when adding an admin log containing a null char (#38782)

* Log an error when adding an admin log containing a null char

* Also log LogType and LogImpact

* Remove them

* Fix incorrect conditions on black pepper's forced cough (#38783)

no one to blame but myself

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

* Update Credits (#38786)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* Fixing incorrect headset being given to QM visitor (#38785)

* Stasis bed cleanup and bugfixes. (#38762)

* Stasis bed sent to shed

* Code Review

* Code Review 2

* Automatic changelog update

* Cleanup warnings: CS0414 (#38793)

Cleanup

* Move moth movement modifiers to the Base (#38795)

* fix centcom pda (#38796)

* Catchable items, playable basketball (#37702)

* catching

* fix

* improve

* fix linter

* cleanup

* fix prediction

* do the same here

* fix comment

* Automatic changelog update

* Fix storage voice control bug after handssystem refactor (#38810)

* Automatic changelog update

* Reducing the amount of space in the gogo hat  (#38808)

Reducing the amount of space in the hat from 7*4 to 4*3 to make a bit more sense with the fact it is only a hat.

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

* Automatic changelog update

* Golden pai (#38549)

* Golden pai

* Make golden PAI public and rare

* Golden PAI = legendary salvage

* Automatic changelog update

* Cleanup: Remove ``TelephoneComponent.RequiresPower`` (#38823)

* Cleanup

* Forgot about yml

* Branded lighters addition (#35514)

* newlighters

* port complete

* donk pocket box addition

* should fix test fail, proper credit

* captalisation issue

* fixed

* typo corrected

* removed accidental change to combat bakery

* fixed lock message, made NT flippo start fueled.

* Requested changes

* fixed discount dan

* moved matchbox

* requested changes, discount dan more broken than ever (somehow)

* unbungle

* uhhhhh

* maybe fixes?

* changed inheritance

* fixed enum?

* nevermind

* finally fixed

* breaking changes

* inheritance unbungled

* Automatic changelog update

* Cleanup: Remove ``TryInsert`` method from the ``DisposableSystem`` and use event subscriptions instead (#38819)

Cleanup

* JumpBoots Attempt №2 (#36862)

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: unknown <wainzor1337@gmail.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>

* Automatic changelog update

* Replace `ValidatePrototypeId` uses with `ProtoId` or `EntProtoId` (#38814)

* The easy ones

* For certain values of easy

* Easy test

* Hair

* Fix sandbox violations

* Sort usings

* Fix SSD sleep misprediction (#38831)

init

* New science unlock: the H.A.R.M.P.A.C.K (#38824)

* Automatic changelog update

* Fix: Add cluwne translation in ftl (#38835)

Fix

* Artifact glue reagent (#38670)

* a

* Revert "a"

This reverts commit 2b9ba4ea67a9395d30b7ab37c8065f627f1a961a.

* f

* dev it

* a?

* ad

* forgor

* Revert "f"

This reverts commit 39228c7cbe4d28ba43b73580b55e01c3979eb869.

* derandomisation!

* reviv

* flavor

* fixe

* dwwasdwasdwa

* dwasdwasdwas

* fuck you

* Automatic changelog update

* Contraband category fixes (#38698)

* Adding contraband to some items missing it
- This includes updating contraband to follow more consistently where items are expected to be used
- Fixing the spacing in arrays to be more consistent with other files

* Updating PPD to be Eng contra

* Automatic changelog update

* Added Vox Heterochromia (#38595)

* Added Vox Heterochromia

* Forgot to change moth to vox

* minor formatting fix

---------

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

* Automatic changelog update

* Make mopping predicted (and some other stuff) (#38749)

* refactor: move puddle evaporation + absorbents to shared

* refactor: move SolutionRegeneration to shared

* refactor: make AbsorbentSystem visuals clientside

* style: general formatting/cleanup on touched files

- Few logical simplifications
- Add field for hard-coded sparkle effect ent
- Switch stuff to Entity<T>

No actual prediction fixes in this commit (though in
retrospect I should've done this commit last).

* fix: use predicted variants for predicted code

* fix: average out evaporation rates in mixtures

* refactor: move SolutionPurge to shared

* style: Basic SolutionPurgeComponent field cleanup

* fix: general prediction + timing + networking fixes

- Moves client side visuals back to shared because other
  players exist
- Don't accumulate CurTime in Purge/RegenerationSystem
- Network the next update field in Purge/RegenerationSystem to
  deal with UI mispredictions???

* fix: add udder bug workaround

Not needed for SolutionPurgeSystem which doesn't resolve
solutions (probably fine that SolutionPurgeSystem doesn't
cache since it's much rarer, though it probably should), and
likely not needed for AbsorbentSystem since it only resolves
against puddles which, I don't think can be in containers.

* fix: don't divide by zero for evaporation speed = 0.

* refactor: revert evaporation changes

Will cherry-pick these out in another PR.

Also reverting the evaporation speed bugfix since it's easier
to revert all at once. :)

* fix: component cleanup; autopause fields, use ProtoID

* fix: remove unused AbsorbentComponentState

* fix: ProtoId is not string

* refactor: move PuddleSystem.UpdateAppearance to shared

* style: general PuddleSystem.UpdateAppearance tweaks

- Switch to Entity<T>
- Use ProtoIds
- Minor simplifications

* fix: add udderly silly PVS workaround

* cleanup

* fix

---------

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

* fix: Register OnRequestMovePulledObject under the right system (#38484)

* fix: Register OnRequestMovePulledObject under the right system

* nukeops test flake

* fix: correct ToggleableVisuals for toy sword and pirate helm (#38867)

* Fix lingering ghost roles (and expand tests to catch it) (#38788)

* Improve and expand `TakeRoleAndReturn` to fail on bug #38292

* fix #38292 and expanded test cases

* use validated EntProtoIds for tests

remove unusued using declarations

* use const strings that match the TestPrototypes

* Automatic changelog update

* Fix non-humanoid mobs being destroyed on devour (#38087)

* Allow non-preference living things to be added to a devourer's stomach

* Fix ordering of devour logic

* Minor refactor for whitelist on storage and food preference

* Fix linter issue

* Coerce workflow to run again; also fix bad indenting error

* Code review changes

* Automatic changelog update

* Prefer file-scoped namespaces in `.editorconfig` (#38879)

Prefer file-scoped namespaces in .editorconfig

* Parroting Parrots part 1: Help maints! SQUAWK! Maints! (#38243)

* parrots have ears. add poly

* high tech parrot functionality

* adjust times

* add accent to radio message

* don't spam everything all at once probably

* learn about the existence of prob(float)

* actually use Prob(float) correctly

* newline

* add pet spawner for poly

* move chance to talk on radio to component

* missing comment

* minor edits and doc additions

* the reviewerrrrrrr

* parrot can't learn when crit or dead

* increase default memory

* rename poly to polly

* crude way to ignore whispers. chatcode please

* This is Polly. It is set to broadcast over the engineering frequency

* add missing initialize

* add displacement map for parrot ears

* review comments - Errant

* minor things

* large rework

* fix attempting to talk when entity has no channels

* use list of active radios again to track channels

* fix bad return, some comments

* fix long learn cooldown

* minor adjustments

* use FromMinutes

* the voices told me to make these changes

* remove default reassignment

* Review changes

* remove polly's accent

* decouple radio stuff from parrotsystem

* minor stuff

* split vocalization and parroting

* minor review work

* re-add missing check

* add admin verb for clearing parrot messages

* minor action icon update

* oops

* increase icon number text size

* Admin erase parrot messages associated with players

* part 1 beck review

* add whitelist and blacklist for parrots

* Downgrade missing component error to warning

* Add comment

* add some missing comments

* Remove active radio entity tracking, use all inventory slots

* Minor changes

* small review stuff

* review radio stuff

* swap ears displacement to invisible death displacement

* remove syncsprite

* vscode why do yo have to hurt my feelings

* review changes

* use checkboth

* Automatic changelog update

* Predict RepairableSystem (#38886)

* commit

* Update SharedRepairableSystem.cs

* compo

* final touches.

* Update RepairableComponent.cs

* Update RepairableSystem.cs

* Update Content.Shared/Repairable/RepairableSystem.cs

---------

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

* Replace usages of customTypeSerializer PrototypeIdListSerializer with something that doesn't take 20 separate words to type out (#37959)

* Replace usages of customTypeSerializer PrototypeIdListSerializer with something that doesn't take 20 separate words to type out

* Missed one

* Missed another

* Fix data field ids

* Fix yaml linter and misc errors (#37444)

* Fix yaml linter

* Revert "fix cluwne pda pen slot (#35611)"

This reverts commit 66e926843f.

* More fixes

* Try again with the engine requirement removed

* Decrease number of brass sheets dropped by clockwork windoors

---------

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

* Add VV button to the solution editor (#38889)

add vv button to solution editor

* Automatic changelog update

* fix: wide swings with resistanceBypass now bypass resists (#38496)

* Allow pAIs to emote like a borg (#38425)

* Automatic changelog update

* reduced motion flash effect version 3 (#37824)

* V3

* Apply suggestions from code review

* Automatic changelog update

* feat: allow admins to interact under subfloors (#38813)

* feat: allow admins to interact under subfloors

* feat: use BypassInteractionChecks instead

* Automatic changelog update

* Operation Remove Gun Bloat (#38104)

* Remove long-unused magazines

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

* Not sure why that failed, going to rerun tests real quick

* Testing if this resolves the tests. Anyone know how to run tests locally, without waiting for github?

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

* Fully removed boxes of vector ammo and the vector ammo tag

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

* This might fix the tests

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

* Nulled more =

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

* Nulled more migrations

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

---------

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

* Minigun inhands + HMG multihand and slow move speed (#35344)

* hmg move speed

* minigun inhands

* even better inhands

* touch-up

* Automatic changelog update

* Add Bolas to SecTech vendor (#38902)

* Automatic changelog update

* Kobold/monkey AI holograms (#38888)

* Added kobold/monkey AI holograms

* Updated meta.json

* Automatic changelog update

* Fix localization error when trying to change hair on someone with a hat (#38907)

* change Identity.Name to Identity.Entity for delivery popups (#38909)

* Replace `AdvertiseComponent` with `DatasetVocalizerComponent` (#38887)

* Replace AdvertiseComponent with DatasetVocalizerComponent

* No vocalizing while broken or without power

* Kill AdvertiseComponent/System

* This really shouldn't be here

* xmldoc for VocalizerRequiresPowerComponent

* TryIndex -> Index

* Bagel genpop (#38829)

* skelaton (skeleton)

* basic genpop

* genpop mostly done

* general layout

* all details

* maints firelocks, tweaks

* invalids bye, remove residual air and fire alarm

* uhh tweaked something dont remember

* remove actions

* armory: truncheon and riot crate

* remove more invalid devices

* armory holopad, graffiti tweak

* no windoor into sec substation, add flasher

* Revert "no windoor into sec substation, add flasher"

This reverts commit a7b919fb74433b82f48f92f98d5521ecb1f3eae4.

* no sub windoor, flasher

* fix camera blocking turret

* move warden and armory, restyle decals

* maints flashlights :D

* fix locker room dark tile placement

* Automatic changelog update

* fix clones not getting the thieving skill (#38914)

* Automatic changelog update

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

* Automatic changelog update

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

Serializable, Net" on DecalPaintMode

* Rotated turret wall panel sprites (#38464)

rotated sprites

* Stun and Stamina Visuals (#37196)

* Stun animation

* Commit 2

* Almost working commit

* Best commit

* Minor cleanup and value adjustments

* Fix animation data getting wasted and cleaned up some stuff

* Don't animate if dead

* AppearanceSystem is for chumps

* Cleanup

* More cleanup

* More cleanup

* Half working commit

* Documentation

* Works

* ComponentHandleState my beloved

* AppearanceComp compatibility

* Address review

* Borgar

* AND NOW THE END IS NEAR

* AppearanceSystem compliance (Real)

* Don't need to log missing there

* I actually hate mob prototypes so much you don't even know

---------

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

* Automatic changelog update

* Fix AddHandCommand not working on aghosts (#38866)

* Component for clothes to suppress emotes and scream action in general, and the muzzle to suppress vocal emotes in particular (#32588)

* Component for clothes to suppress scream noise

GaggedComponent + AddGaggedClothingComponent and relevant systems to make them work.

Currently only stifles the scream _action_, not all emotes

because if a mime can silently emote, so can gagged you!

* fix comments

* swap to inventory relay

and make it more general such that specific emotes or emotes of a given category can be blocked

* power gloves shouldn't block snapping

* easy fixes

* blockable emote event

* pr comments, switch to using emote event mostly

* pr comments

add beforeEmoteEvent

add emote blocker name to popup

maybe some other stuff, I forget

* get rid of emoteevent's source because I don't need it anymore

* smol clean

* formatting, style, and one minor thing where having a muzzle in your pocket would gag you

* Automatic changelog update

* Tweaks to ShowRulesCommand structure, localization, and autocomplete. (#38855)

commit

* Automatic changelog update

* Convert Locker/Closet fills to Entity Tables: Part 2 (#38254)

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>

* Fixing a singular pixel on the frame of the AI (#38936)

* Singular pixel ops

* Third commit - upholding CC-BY-SA by indicating changes made

* Bottle Drink Inhands (#38937)

* there is now bottles of booze in your hands

* Messed up the vermouth inhand fills slightly.

* oh whoops that's redundant

* Automatic changelog update

* refactor: rework the new status effect system to use containers (#38915)

* refactor: rework the new status effect system to use containers (#38915) (#38943)

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

* fix: don't divide by zero in FragmentIntoProjectiles (#38946)

* Accents Event to Shared (#38948)

* 27 file diff

* 27 file diff 2

* Apply suggestions from code review

---------

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

* Update Credits (#38955)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* SharedGunSystem spread bugfix (#38960)

two bytes

* Fixed error thrown when examining indestructible plastitanium windows (#38950)

* Fixed error thrown when examining indestructible plastitanium windows

* Fixed indentation to match yaml standards

* Fix extra dollar sign in admin log for machine toggle (#38961)

* Don't compile EF Core designer files on release builds (#38927)

* Hats (and glasses) for pets - Part 1 - Ian and McGriff (#38634)

* new branch new me

* cursed displacement

* 2 pixels of death

* forgot a line

* fixed some edge cases on corgis with the displacement

* fix conflict

* fix indentations

* a bit more displacement fixes

* Automatic changelog update

* [BUGFIX] Stops scurrets from suffocating in crates (#38951)

Prevent scurrets from dying!

* Automatic changelog update

* Cleanup warnings: CS0649 (#38797)

* make ocarina small (#38971)

Update instruments_wind.yml

* Automatic changelog update

* Add contraband parent to war declarator (#38972)

* Automatic changelog update

* Remove prototype caching from `ZombieComponent` (#38979)

Remove prototype caching from ZombieComponent

* Vox customization additions (+eyeshadows) (#38906)

vox customization stuff

* Automatic changelog update

* Refactor ExaminableDamage (#38978)

* Remove prototype caching in ExaminableDamageComponent

* Replace ExaminableDamagePrototype with LocalizedDatasetPrototype

* Allow null

* Voltage enum to shared (#38964)

* fix: ghosts shouldn't see whisper obfuscation (#38202)

* Fix devices in terminal mispredicting power state (#38647)

* The simple solution

* The better solution

* Revert "The better solution"

This reverts commit 611e56e031636734abab1ad3e77bf88b69a4de13.

* make biogenerator not accept low-nutrient plants (#38427)

* anti-noob

* dsaswa

* Minor grammar change

---------

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

* Make RunVerbAs take and return EntityUids (#38155)

fix: make RunVerbAs take and return EntityUids

* Automatic changelog update

* Buff parrot learn rates and radio chatter (#38984)

* buff parrots

* ok but not that smart

* oop

* Remove prototype caching from `TransformableContainerComponent` (#38988)

Remove prototype caching from TransformableContainer

* New holy books (#38986)

* Adds a few new holy books, implements one existing, and makes them pickable from loadout

* Almost forgot the yaml

* Forgot to change fork-specific paths

* Modified copyright to be less specific as requested by maintainer

* Newlines

* Replaced scroll torah with a book-bound tanakh, as recommended by dvir001

* Changed all mentions to use tanakh instead of torah

* Made the Mosin bayonet usable. (#38295)

* Made mosin an alt-melee weapon, added reagent fill for the weapon.

* fixes

---------

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

* Automatic changelog update

* Adjust throwables hitboxes to match sprites (#38985)

Initial commit

* Automatic changelog update

* Moproaches (#38700)

* MOPROACHES

* rerun test - random test fail of doom

* added to random pest event, with same prob as cancer mouse

* rerun test - random test fail of doom 2 electric boogaloo

* changed moproach obtain methods

* no crafting of moproaches allowed :(

* Reverted content of file.

* requested changes

* requested changes

* requested changes

* Increase moproach health by 5 - requested by Emo on discord

* spaaaaaaaaaaaaaaaaaaaaaaaaace

* microwave recipe added

* no surgery this week

* spaaaaaaaaaaaaaaaaaaace 2 more space for your space

* space

* new mopshoes sprite

* in-hands

* inhands v2

---------

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

* Automatic changelog update

* Remove the Qur'an (#39000)

* Mostly fix reaction sound effect stacking :( (#38999)

* fix: band-aid the reaction sound effect stacking

It's so funny I'm so sad I'm writing this commit :(

* fix: remove unused hashset

Drive by fix. 'Tis never read from.

* fix: switch to just making it server only

* fix: uncomment the if lol

Commented it out for recording video oopsie

* Convert some voice samples to mono (#39002)

* Convert Xenoborg voice sounds to mono

* Convert female human cough sounds to mono

* PressureEvent removed (dead code) (#39004)

yep

* Predict DevourSystem. (#38970)

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

* Whitelist extension for tool belt (#35212)

* sd

* xd

* im so dumb

* revert to just remote signaller

* forgot

* add code comment

---------

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

* Automatic changelog update

* Fix firelocks failing to drop fast enough (#38918)

* Automatic changelog update

* Fix Mjollnir throw while on delay (#39018)

* init

* fuck dirty

* yippee

* Automatic changelog update

* Give admin bags explosion resistance (#38384)

Co-authored-by: youtissoum <51883137+youtissoum@users.noreply.github.com>

* Automatic changelog update

* Inconsistent Produce Inhands Fix (#38860)

* V1 Sprites

* Adding heldPrefix

* Updated Sprites

* 4 New Inhands & Sprite Tweak

* WaterMelon/HolyMelon Front Change

* Meta Guh

* Sugarcane Updated Inhands

* Re-id 'Medical Doctor' guide entry to 'MedicalDoctor' (#39029)

chore: re-id 'Medical Doctor' guide entry

* Make diagonal windows prevent electrocution (#39032)

Add the window tag

* Automatic changelog update

* Carps Can No Longer Suicide (#39033)

Update carp.yml

* Wearable banana peels (#38868)

* 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

* NPC spiders sometimes spin webs 🕷️🕸️ (#38319)

* NPC spiders now spin webs

* oops

* move logic to always update next spawn, to prevent rare web spam

* WebSpawnCooldown is timespan

* remove vv

* add web spawn method, no sus action event method call

* dont spin web immediately at spawn

* move NextWebSpawn value init to update

* oop

* remove unused game timing

* web spawn cooldown to 45

* Automatic changelog update

* Fix Respirator Asserts (#38911)

* Fix errors

* Cleanup CanMetabolizeInhaledAir

* Wait no don't do that

* Revert changes for real

* Fix

* Code cleanup and some safety rails

* Better tests and also comments

* Better comments

---------

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

* Add supercritical sounds for ALL anomalies (#36425)

* add supercritical sounds for flesh anomaly and shadow anomaly

* fix attribution yml

* use sound collections, add TWO -- count em TWO tech anomaly supercrit sounds.

* add sound for present anomaly

* wrong soundcollection for flesh

* actually add the present anomaly sound...

* add fire anom sound

* add gravity anomaly supercritical sound

* add electric anomaly supercritical sound

* add bluespace anomaly supercritical and explosion sound

* add ice anomaly supercritical sound

* add fluid anomaly supercritical sound

* fix busted link

* typo

* add floral supercritical sound, fix typos

* Add supercritical sounds to injected anomalies

* add rock anomaly supercritical sound

* supercritical sound follows the entity, important for injected anomalies

* make the rock crit rumble a little less subtle at the start

* use CC0 freesound alternatives where available

* New pyro anomaly sound by GonTar

* New sounds by GonTar. Change AnomalyComponent so that you can change the length of supercritical properly in the prototype.

* oopsie, forgot the traps

* use TimeSpan for duration

* Automatic changelog update

* Metashield Rules Update (Removal) (#38953)

* Revert "Don't compile EF Core designer files on release builds" (#39057)

* Revert "Kobold/monkey AI holograms (#38888)"

This reverts commit 97fcebb92b.

Please check the maintainer meeting and the recording at time 41:58 for further information

https://docs.spacestation14.com/en/maintainer-meetings/maintainer-meeting-2025-07-19.html

* Replace SharedStatusEffectsSystem with StatusEffectsSystem

Updated references from SharedStatusEffectsSystem to StatusEffectsSystem in spell and magic weakness systems to use the correct status effects system implementation.

* Update examine_messages.yml

* fix

* Update round_end.yml

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
Co-authored-by: Mora <46364955+TrixxedHeart@users.noreply.github.com>
Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
Co-authored-by: Andrew Malcolm O'Neill <105134723+maland1@users.noreply.github.com>
Co-authored-by: Minerva <218184747+mnva0@users.noreply.github.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: Tiniest Shark <head.rebel@yahoo.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: Velken <8467292+Velken@users.noreply.github.com>
Co-authored-by: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com>
Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Co-authored-by: Arthur Fiorese de Andrade <170277843+ADM2PLAY@users.noreply.github.com>
Co-authored-by: Arthur Fiorese de Andrade <aandrade@cmcxs.gov.br>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Co-authored-by: Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
Co-authored-by: āda <ss.adasts@gmail.com>
Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: B_Kirill <153602297+B-Kirill@users.noreply.github.com>
Co-authored-by: poklj <compgeek223@gmail.com>
Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: AsnDen <75905158+AsnDen@users.noreply.github.com>
Co-authored-by: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com>
Co-authored-by: Smugman <85798843+Smugman@users.noreply.github.com>
Co-authored-by: Голубь <124601871+Golubgik@users.noreply.github.com>
Co-authored-by: unknown <wainzor1337@gmail.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: kosticia <kosticia46@gmail.com>
Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com>
Co-authored-by: Sparlight <twiksparlight@gmail.com>
Co-authored-by: Crude Oil <124208219+CroilBird@users.noreply.github.com>
Co-authored-by: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
Co-authored-by: Nox <nebulousnox38@gmail.com>
Co-authored-by: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com>
Co-authored-by: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com>
Co-authored-by: qwerltaz <69696513+qwerltaz@users.noreply.github.com>
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: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: Centronias <me@centronias.com>
Co-authored-by: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com>
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
Co-authored-by: Mono <182929384+Monotheonist@users.noreply.github.com>
Co-authored-by: Fildrance <fildrance@gmail.com>
Co-authored-by: Myra <vasilis@pikachu.systems>
Co-authored-by: KOTOB <59124164+kotobdev@users.noreply.github.com>
Co-authored-by: devinschubert14 <59582670+devinschubert14@users.noreply.github.com>
Co-authored-by: SpaceManiac <tad@platymuus.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: ToastEnjoyer <masondoesgamingyes@gmail.com>
Co-authored-by: Flareguy <78941145+Flareguy@users.noreply.github.com>
Co-authored-by: UpAndLeaves <92269094+Alpha-Two@users.noreply.github.com>
Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: Trosling <111116669+RHSvenson@users.noreply.github.com>
Co-authored-by: RedBookcase <crazykid1590@gmail.com>
Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Co-authored-by: Hannah Giovanna Dawson <karakkaraz@gmail.com>
Co-authored-by: Łukasz Lindert <lukasz.lindert@protonmail.com>
Co-authored-by: nabegator <stunprod228@outlook.com>
Co-authored-by: shampunj <140359015+shampunj@users.noreply.github.com>
Co-authored-by: youtissoum <51883137+youtissoum@users.noreply.github.com>
Co-authored-by: Prole <172158352+Prole0@users.noreply.github.com>
Co-authored-by: FungiFellow <151778459+FungiFellow@users.noreply.github.com>
Co-authored-by: FlipBrooke <87075384+FlipBrooke@users.noreply.github.com>
Co-authored-by: Admiral-Obvious-001 <89495925+Admiral-Obvious-001@users.noreply.github.com>
2025-07-30 16:02:21 +03:00
Ed
b83db04006 Update round_end.yml 2025-07-30 15:47:36 +03:00
Ed
94c9e49bb1 fix 2025-07-30 15:42:22 +03:00
CrystallEdge Server
3aa75783c3 Automatic changelog update 2025-07-30 14:20:48 +03:00
Nim
96e15dfb71 recolored birch (#1591) 2025-07-30 14:19:42 +03:00
CrystallEdge Server
76e7cb9464 Automatic changelog update 2025-07-30 14:17:20 +03:00
Red
c8f25eefcf Mushroom update (#1590)
* mycelium tiles

* cave mushroom procedular generation

* mushroom demiplane

* Update herbals.yml

* Update mushroom.yml

* Delete 2.4.png
2025-07-30 14:16:14 +03:00
Ed
aaeaa7ab66 Update examine_messages.yml 2025-07-30 11:55:00 +03:00
PJBot
a8b65f2da7 Automatic changelog update 2025-07-30 06:45:53 +00:00
āda
f6475bd264 EntityEffectConditions changed to be inclusive of min/max (#36289)
* soo hungry going back for more lipolicide

* too much lipolicide.....

* fixes

* it moved

* typo

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-07-29 23:44:46 -07:00
PJBot
2f64e105d4 Automatic changelog update 2025-07-29 18:53:49 +00:00
Admiral-Obvious-001
0606ed5851 Retry of Advanced Chem Tweaks (#38811)
* Changed Head Branch Due To Broken Merge

* Changed Head Branch Due To Broken Merge

* Readds the removal of bic/advanced mix.

* TFW Breaking changes break changes

* TFW Breaking changes break changes
2025-07-29 14:52:42 -04:00
slarticodefast
d4e77423ca Make RemoveReagent return a FixedPoint2 (#39266)
change return
2025-07-29 10:39:48 -04:00
PJBot
3f41b47d2e Automatic changelog update 2025-07-29 12:02:48 +00:00
Alkheemist
9be68a6846 Fix a logic error in Protectedgridsystem (#39271)
fix a logic error in Protectedgridsystem
2025-07-29 14:01:40 +02:00
PJBot
990940071b Automatic changelog update 2025-07-29 07:35:56 +00:00
K-Dynamic
60cf54840f Quartermaster job and ID icon change (#39259) 2025-07-29 10:34:47 +03:00
PJBot
13ac52d21b Automatic changelog update 2025-07-28 21:29:22 +00:00
Mora
4a7576a7a6 Several Vox Sprite Displacement and Layering Fixes (#39219)
* Vox displacement map fixes

* Adds neck displacement map and changes sprite layering to prevent the tank from rendering on top of a Vox's facial hair strangely
2025-07-28 17:28:15 -04:00
Ed
53cd6fde50 Update shirt.png 2025-07-29 00:25:46 +03:00
kosticia
4c24db9d9c Predict mimepowers (#38859)
* predict

* fix

* fix

* aa

* oops

* TOTALFIX

* some more cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-28 20:53:07 +02:00
Kyle Tyo
a52bf2a7c8 Convert a few debugging commands and the mapping setup command to LEC. (#38589)
* commit

* Update MappingClientSideSetupCommand.cs

* missed a spot

* Update MappingClientSideSetupCommand.cs

* whoopos

* Update mappingclientsidesetup-command.ftl
2025-07-28 18:29:15 +02:00
PJBot
cb9b8c001d Automatic changelog update 2025-07-28 16:10:25 +00:00
Super
b0825c102c Added a network configurator to the Warden's locker. (#39254)
the days of wardloosing are OVER
2025-07-28 12:09:17 -04:00
Ed
e42b3aa55c secret ghost resprite 2025-07-28 16:33:55 +03:00
eoineoineoin
e2d96f1f49 Make BoozeDispenserEmpty actually empty (#39067)
* Make BoozeDispenserEmpty actually empty

* Make SodaDispenserEmpty actually empty

* Remove whitespace
2025-07-28 15:27:21 +02:00
PJBot
b77b533e1f Automatic changelog update 2025-07-28 13:00:48 +00:00
lzk
8b104d30d5 allow janibelt to hold golden plunger (#39213) 2025-07-28 14:59:40 +02:00
xsainteer
901cef43c9 last words error fix (#39245)
4 line bugfix
2025-07-28 14:56:48 +02:00
xsainteer
3c76b5a8aa rolebriefingcomponent bugfix (#39261)
2 line bugfix
2025-07-28 14:50:49 +02:00
PJBot
c3cab577f6 Automatic changelog update 2025-07-28 10:20:24 +00:00
Nemanja
fedc355f20 fix foldable clothes not working while worn (#39257) 2025-07-28 12:19:17 +02:00
PJBot
005203227b Automatic changelog update 2025-07-28 07:12:32 +00:00
Pieter-Jan Briers
5f52a3ae17 [Mald PR] Plushie sound 1984 (#39250)
* Make melee sounds respect their audio params

* Make food sounds respect audio params

* Plushie sound 1984

Most plushies have been made quieter (by varying degrees depending on how obnoxious the original sound was)

Made plushies 3x slower to use (squeak every 3 seconds / hit somebody every 3 seconds)
2025-07-28 03:11:21 -04:00
lzk
45cef10bad update bagel (fix button connected to doors) (#39216)
update bagel
2025-07-27 15:48:14 -06:00
slarticodefast
2ac9948ba0 Handle inventory template updating V2 (#39246) 2025-07-27 23:05:58 +02:00
Prole
a789341b2f Hot Potato Sprite Fix (#39193)
* Current Potato Sprite In

* Bit of Cleanup

* Update Resources/Textures/Objects/Weapons/Bombs/hot_potato.rsi/meta.json

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-27 15:48:01 -04:00
Pok
688c91b597 Add scaling filter option (Nearest/Bilinear) (#39111) 2025-07-27 20:26:17 +03:00
Ed
83519930e8 add artisans job gates 2025-07-27 19:31:21 +03:00
CrystallEdge Server
5a69cc9855 Automatic changelog update 2025-07-27 18:55:45 +03:00
SketchiiArtist
a55baf6c9b Added Stools (#1577)
* Added Stools

* Updated Textures, now craftable.

* Update chairs.yml

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-07-27 18:54:40 +03:00
Red
fc30c36576 Candles & Candelabras (#1585)
* Refactor food holder visual update logic

Simplified UpdateVisuals method in CP14ClientCookingSystem by consolidating parameters and using component fields directly. Also ensured FoodData field is dirtied after updating visuals in CP14SharedCookingSystem to trigger proper synchronization.

* add sprites

* candles redo

* candles and candelabras

* mapping
2025-07-27 18:54:22 +03:00
Red
5c0eb97571 Refactor food holder visual update logic (#1584)
Simplified UpdateVisuals method in CP14ClientCookingSystem by consolidating parameters and using component fields directly. Also ensured FoodData field is dirtied after updating visuals in CP14SharedCookingSystem to trigger proper synchronization.
2025-07-27 17:18:25 +03:00
CrystallEdge Server
e020394f56 Automatic changelog update 2025-07-27 16:46:21 +03:00
Red
fcbe2cce6b Rooms demiplane generation improvement (#1583)
* Add CP14RoomsDunGen for procedural room placement

Introduces the CP14RoomsDunGen layer for generating rooms across the grid based on tags and tile masks. Updates DungeonJob and DungeonSystem to support the new layer, and modifies relevant YAML prototypes to use CP14RoomsDunGen instead of OreDunGen for room spawning in demiplane modifiers.

* some fixes

* its done done done

* exit room

* additional entry points

* fix

* Update migration.yml
2025-07-27 16:45:16 +03:00
Kowlin
8fdfb9deae Add admin logging to Wireless entertainment cameras (#39239) 2025-07-27 13:07:34 +02:00
Red
5020be8ec6 Add supports for different skillpoints types (#1581)
* Refactor skill points to support multiple types

Reworked the skill point system to support multiple types (e.g., Memory, Blood) instead of a single experience cap. Added CP14SkillPointPrototype, updated skill storage and UI to handle per-type points, and adjusted related logic and prototypes. Updated localization and assets to reflect these changes.

* oopsie

* Update human.yml

* Update CP14SkillUIController.cs

* Refactor skill storage to use skillPoints config

Replaced 'experienceMaxCap: 0' with 'skillPoints: Memory: max: 0' in Skeletons T1, T2, and undead mob prototypes. This change standardizes skill storage configuration and improves clarity.
2025-07-27 13:47:05 +03:00
PJBot
faf15e7933 Automatic changelog update 2025-07-27 06:18:10 +00:00
ToastEnjoyer
7852b52f85 Added utility belt function to scrap armor (#39233) 2025-07-26 23:17:00 -07:00
Jessica M
540703588c Make the cherry pit tiny (#39230)
make cherry pit tiny

Co-authored-by: Jessica M <jessica@maybe.sh>
2025-07-26 23:14:01 -07:00
github-actions[bot]
6aa278a709 Update Credits (#39232)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-07-26 18:10:00 -07:00
Pieter-Jan Briers
43b3250e26 Replace bad changelog entry (#39229) 2025-07-26 18:58:06 -04:00
kosticia
21d47364c0 Some wallmount .yml cleanup (#34329)
* Getting started

* Move some

* And some moves

* And some changes

* Some changes

* YAML LINTER FIX

* Nanomed and monitor fixes

* Vending machines change

* Add space...

* fix

* FIX

* yeeee

* sighs

* forgor

* Revert "forgor"

This reverts commit 61d7fc926e7141bb510c70a9deb2a2afed925166.
2025-07-26 15:20:55 -04:00
CrystallEdge Server
d9b3ceac7c Automatic changelog update 2025-07-26 15:26:04 +03:00
gogenych
5da0d4b025 New trees: spruce! (#1539)
* yolochki

* frame

* fix

* fix 2

* fix3

* fix04

* fix-5

* 6 fix

* fi7x

* f8ix

* Update grasslands.yml

* fix

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-07-26 15:24:59 +03:00
CrystallEdge Server
6c085a2f03 Automatic changelog update 2025-07-26 15:11:14 +03:00
CrystallEdge Server
6a99015130 Automatic changelog update 2025-07-26 15:10:09 +03:00
Red
59459bfda5 Remove Lumera (#1578)
* remove vampire

* remove lumera

* move aura imprint folder

* remove armor

* delete textures

* Revert "delete textures"

This reverts commit 2fd90e0898.

* Revert "remove armor"

This reverts commit c44bd1bc32.
2025-07-26 15:10:06 +03:00
Kryyto
23ce52c69e Refactor guard bell (#1553)
* Remove maps edits

* fix from review

* Remove unused CP14 alert levels (fixing YAML)

* fix missing prototype CP14GuardBell

* fix from review 2

* fix TriggerSystem partial

---------

Co-authored-by: Jordan FUMA <@jfa>
2025-07-26 15:09:04 +03:00
Red
6ff39a79e2 Update PULL_REQUEST_TEMPLATE.md 2025-07-26 14:55:03 +03:00
CrystallEdge Server
0de66df971 Automatic changelog update 2025-07-26 14:50:09 +03:00
Kit
4a812d0d0b Elf rework (#1568)
* Mana trance slight buff

* ELF TAXI!!!

* Elf only mana trance

* No more mana regen for you

* guide book changes

* i should really not write something while eepy

* Update mana_trance.yml

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-07-26 14:49:03 +03:00
Pieter-Jan Briers
444180c20d Optimizations from server profile (#38290)
* Properly cache regexes in chat sanitization/accents

Wow I wonder if `new Regex()` has a cost to it *looks at server profile*.

* Avoid lag caused by Tippy command completions

CompletionHelper.PrototypeIDs explicitly says *not* to use it with EntityPrototype. Unsurprisingly, reporting a completion result for every entity prototype in the game is a *bad idea*.

* Add active count metrics to some high-load systems

Mover & NPCs

I suspect the thing that caused the Leviathan round to shit itself on performance is NPC spam in space or something. So let's verify that.

* Enable parallel processing on pow3r again

Originally disabled due to a theory of it causing bugs, it was re-enabled on Vulture, and I'm not aware of it having caused any issues there.

* Replace hashset with bitflags for AtmosMonitor alert types.

Allocating these hashsets was like 20% of the CPU of atmos, somehow.

* Cache HashSet used for space movement collider checks

Turns out this was a ton of server allocations. Huh.
2025-07-26 11:44:34 +02:00
xsainteer
d0c104e4b0 Added Kill Tome (Death Note). (#39011)
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-07-26 00:00:58 +02:00
PJBot
2be968ccb1 Automatic changelog update 2025-07-25 19:47:49 +00:00
Quantum-cross
fc5d3dd431 Fix pinpointer screen rotation solution 2 (#38657)
* secondary method of fixing the pinpointer arrow rotation axis -- ensuring that the center of the pinpointer screen and arrow is at the center of the sprite.

Thanks to @whatston3 for stretching out the pinpointer sprites.

* update meta.json for pinpointer sprite changes
2025-07-25 12:46:42 -07:00
PJBot
236a3b2818 Automatic changelog update 2025-07-25 16:54:08 +00:00
slarticodefast
b4e81cb8f2 Admin Tool: Observe entities in an extra viewport (#36969)
* camera

* add console command

* change verb name to camera

* placeholder text

* add button to player panel

* orks are indeed the best

* visibility flag fix

* not a datafield

* more follower fixes

* more cleanup

* add zooming

* resizing real

* remove commented out code

* remove AddForceSend

* comment

* Use OS window and add some comments

* fix comments and variable name

* Needs RT update

* Minor grammarchange

* Fix warning

* Cleanup

* almost working...

* fix bug

* oswindow update

* Remove need for RequestClosed.

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
2025-07-25 18:53:01 +02:00
PJBot
f501b1b57f Automatic changelog update 2025-07-25 16:34:51 +00:00
SlamBamActionman
d3cdae5a92 Change smoke/foam/explosion chemistry reaction order & energy transfer (#37915) 2025-07-25 18:33:44 +02:00
PJBot
ae276eb237 Automatic changelog update 2025-07-25 16:05:36 +00:00
SlamBamActionman
a8db9df281 Change potassium-water explosion scaling (#37924) 2025-07-25 18:04:26 +02:00
B_Kirill
ff7713ecea Admin logs for batteries UI (#39208) 2025-07-25 14:01:37 +02:00
Perry Fraser
1afb37669d fix: don't apply Sleeping during prediction reset (#39061)
* fix: don't apply Sleeping during prediction reset

* I'm calling test flake
2025-07-24 23:10:47 +02:00
lzk
3ce7d37b14 bagel update (best med update) (#39187) 2025-07-24 12:11:54 -06:00
PJBot
a36c984ba6 Automatic changelog update 2025-07-24 15:14:36 +00:00
Perry Fraser
b0e1ce7c0c feat: add a component for rejuvenateable status effects (#39025)
* feat: add a component for rejuvenateable effects

* feat: let god mode'd entities get buffs

* fix: handle old status effect system

Didn't realize BeforeStatusEffectAddedEvent was called by both systems,
oops.

* refactor: rename to RejuvenateRemovedStatusEffect

* fix: make forced sleeping a debuff again

Missed in rebase.

* refactor: make BeforeStatusEffectAdded two events
2025-07-24 17:13:29 +02:00
PJBot
82c0f63d50 Automatic changelog update 2025-07-24 11:25:25 +00:00
B_Kirill
01a57c9a17 Add name to AI eye (#39177)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-24 13:24:18 +02:00
PJBot
3b5faac050 Automatic changelog update 2025-07-24 09:46:02 +00:00
K-Dynamic
4739ce71c5 Makes cold slowdown less punishing (#36316) 2025-07-24 11:44:55 +02:00
PJBot
f6386b3a57 Automatic changelog update 2025-07-24 03:05:36 +00:00
Ivan
70ad8efac3 Emissive engineering & chief engineer's hardsuit helmets (#39153)
* test one, the light is not showing for some reason

* ToggleableVisuals, not ToggleableLightVisuals

* FIX THIS AGAIN I AM STUPID

* WHY DID THESE PERSIST =(
2025-07-23 23:04:29 -04:00
Princess Cheeseballs
291f919e8e Crawling Bugfix: Don't drop items when falling. (#39168)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-23 22:24:21 +02:00
PJBot
de22bd82bb Automatic changelog update 2025-07-23 18:07:40 +00:00
slarticodefast
de576a429d Fix some debugging permissions (#39167)
fix permissions
2025-07-23 14:06:32 -04:00
Deserty0
43b19a7ce3 1234567 (#1569) 2025-07-23 19:36:00 +03:00
PJBot
1b43f6efd4 Automatic changelog update 2025-07-23 15:53:08 +00:00
Hannah Giovanna Dawson
66bd5be651 Standardize and ngooden MIDI music via a good default soundfont (#39142) 2025-07-23 17:51:53 +02:00
Perry Fraser
002afe8056 Properly dispose of stale pipedata chunks for the atmos monitor (#38974) 2025-07-23 17:18:19 +02:00
PJBot
c95bbfaf93 Automatic changelog update 2025-07-23 14:16:37 +00:00
lzk
24b75d89a5 Show customvote title in chat on finish (#39137)
* Show customvote title in chat on finish

* update the text
2025-07-23 10:15:29 -04:00
Kyle Tyo
83b3e9e15a Localize makesentient command. Move makesentient method to mind system. (#38565)
* praying pjb doesn't smite me for this 🙏

* requested changes

* Update makesentient-command.ftl

* verin commith and verin taketh away
2025-07-23 14:29:46 +02:00
Pieter-Jan Briers
eb21b5826a RT v265.0.0 update (#39132) 2025-07-23 12:29:27 +02:00
PJBot
b5dbedcc48 Automatic changelog update 2025-07-23 02:59:14 +00:00
Trey Tipton
0ab0dadb1d Tweaks nukeop elimination announcement to be less wordy. (#39158) 2025-07-22 19:58:07 -07:00
slarticodefast
c3ff6c9184 Increase SpawnAndDeleteAllEntitiesOnDifferentMaps test simulation time (#38901)
wait longer
2025-07-23 03:21:10 +02:00
PJBot
ca697fe200 Automatic changelog update 2025-07-23 00:56:26 +00:00
Crude Oil
b1c8f02b6b Add Polly to Elkridge station (#39150) 2025-07-22 17:55:18 -07:00
PJBot
728a9a552a Automatic changelog update 2025-07-23 00:55:00 +00:00
PJBot
94abb90ba4 Automatic changelog update 2025-07-23 00:53:54 +00:00
Crude Oil
d6a1486f48 Minor plasma fixes, add Polly to Plasma station (#39138) 2025-07-22 17:53:50 -07:00
Crude Oil
035811ae27 Add Polly to Amber station (#39139) 2025-07-22 17:52:41 -07:00
PJBot
61b0559f9c Automatic changelog update 2025-07-23 00:45:20 +00:00
Crude Oil
8e749462cb Add polly to Box station (#39140) 2025-07-22 17:44:12 -07:00
PJBot
8591532f9c Automatic changelog update 2025-07-23 00:42:54 +00:00
Crude Oil
0faa966279 Add polly to Marathon station (#39141) 2025-07-22 17:41:46 -07:00
PJBot
6e26511c1e Automatic changelog update 2025-07-23 00:39:14 +00:00
PJBot
ba1f1bf4ac Automatic changelog update 2025-07-23 00:38:07 +00:00
Crude Oil
3ef14be8bd Add Polly to Packed station (#39143) 2025-07-22 17:38:00 -07:00
Crude Oil
6fc9ad6cec Add Polly to Fland station (#39144) 2025-07-22 17:36:53 -07:00
PJBot
646c631440 Automatic changelog update 2025-07-23 00:36:45 +00:00
Crude Oil
4932b574b7 Add Polly to Exo station (#39145) 2025-07-22 17:35:36 -07:00
PJBot
dabe993f44 Automatic changelog update 2025-07-23 00:12:52 +00:00
Crude Oil
ce2ce7d345 Add Polly to Oasis station (#39146) 2025-07-22 17:11:44 -07:00
PJBot
295bb9ebdf Automatic changelog update 2025-07-23 00:10:49 +00:00
Crude Oil
d8c92a7902 Add Polly to Bagel station (#39147) 2025-07-22 17:09:40 -07:00
PJB3005
229d0a9747 Update submodule to v265.0.0 2025-07-23 01:48:03 +02:00
PJB3005
5895544ae1 Merge remote-tracking branch 'upstream/master' into rt-265-update 2025-07-23 01:17:46 +02:00
PJBot
54b09c7116 Automatic changelog update 2025-07-22 19:35:47 +00:00
Perry Fraser
1ee7dffe6d fix: fix non-access checking EntityTargetActions (#38731) 2025-07-22 21:34:39 +02:00
Perry Fraser
f16175a6e3 fix: dirty SSD indicator comp on mapinit (#38891) 2025-07-22 17:40:15 +02:00
PJBot
4033089c46 Automatic changelog update 2025-07-22 15:06:56 +00:00
ArtisticRoomba
7109c33054 China lake rebalance (#39106) 2025-07-22 17:05:46 +02:00
Pieter-Jan Briers
65b4b41928 Fix RoundEndTest obsolete warnings (#39133)
We love using low-leaving threading APIs incorrectly.
2025-07-22 10:22:50 -04:00
lzk
378fbb0ba9 move parrot name to MobParrotBase (#39131) 2025-07-22 12:57:33 +02:00
CrystallEdge Server
bc0c964de9 Automatic changelog update 2025-07-22 13:30:54 +03:00
Kit
aeccdc2600 Monster toxins (#1541)
* GuideBook stuff

* Guidebook stuff 2 cause i forgor

* translations

* New Reagent file yippie

* spider now poison you

* Spider deal less slash
2025-07-22 13:29:49 +03:00
Pieter-Jan Briers
af4ff4e9de Update content to remove redundant Robust math types (#38930)
Vector3, Vector4, Matrix4, and Quaternion are now gone. This switches us over to System.Numerics where applicable.
2025-07-22 12:29:17 +02:00
slarticodefast
9a7cb00d4e Content fixes for engine PR (#39086)
* content changes for engine PR

* rerun tests
2025-07-22 12:25:28 +02:00
CrystallEdge Server
f5fc0203b6 Automatic changelog update 2025-07-22 11:07:48 +03:00
Dezdanna
4fb816e48a Updated Coal Wall textures to match rock walls (#1562)
Fixed graphcal cut-off error
2025-07-22 11:06:41 +03:00
Princess Cheeseballs
ed6ed6c5f3 P0 BUGFIX: Master doesn't build because of uncaught git merge conflict. (#39116)
Quick before someone notices

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-21 14:20:39 -04:00
Princess Cheeseballs
e85bc1bb8c 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-07-21 19:22:11 +02:00
Mariana Miguel
2b2b9b11b8 Fix #38935: Remove empty EnsnaringComponent.cs file (#39112)
The file Content.Server/Ensnaring/Components/EnsnaringComponent.cs was empty
and served no purpose. Removing it helps keep the codebase clean and free of
unnecessary files.
2025-07-21 17:20:37 +02:00
Princess Cheeseballs
8f7e6096f2 Crawling Fixes Part 5: Holy Fuck (#39109)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-21 11:08:04 +02:00
Ed
36d3ba35d1 Replace SharedStatusEffectsSystem with StatusEffectsSystem
Updated references from SharedStatusEffectsSystem to StatusEffectsSystem in spell and magic weakness systems to use the correct status effects system implementation.
2025-07-21 11:36:17 +03:00
Ed
f59de85047 Merge remote-tracking branch 'upstream/stable' into ed-21-07-2025-upstream-sync
# Conflicts:
#	Content.Client/Overlays/StencilOverlay.Weather.cs
#	Content.IntegrationTests/Tests/Atmos/AlarmThresholdTest.cs
#	Content.IntegrationTests/Tests/VendingMachineRestockTest.cs
#	Content.Server/Chat/Systems/ChatSystem.cs
#	Content.Server/Fluids/EntitySystems/PuddleSystem.cs
#	Content.Shared/Damage/Systems/SharedStaminaSystem.cs
#	Content.Shared/Fluids/Components/EvaporationComponent.cs
#	Content.Shared/GameTicking/SharedGameTicker.cs
2025-07-21 11:27:53 +03:00
Trosling
0be18fafd4 Issue#974 Fix (#1556)
* Renamed all instances of mentioned entities

* Corrected loc

* Added migration entry
2025-07-21 11:06:18 +03:00
PJBot
a69fe53bee Automatic changelog update 2025-07-21 03:22:35 +00:00
pathetic meowmeow
d2ddbcbcda Implement SmartFridge functionality (#38648)
* Add SmartFridge

* my nit so pick

* my access so expanded and my whitelist so both

* list -> hashset
2025-07-20 23:21:28 -04:00
Princess Cheeseballs
99b431cafd Crawling Fix 3: OOPS!!! (#39089)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-20 23:35:49 +02:00
PJBot
267d92a1ea Automatic changelog update 2025-07-20 21:24:35 +00:00
Princess Cheeseballs
391dfe4f4a Crawling Fixes 2: Salvage Nerf (NPCs can shoot downed targets) (#39085)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-20 23:23:25 +02:00
Myra
8e5d70716d Stable to master (#39095) 2025-07-20 17:30:46 +02:00
Vasilis The Pikachu
752f44945b Revert "Kobold/monkey AI holograms (#38888)"
This reverts commit 97fcebb92b.

Please check the maintainer meeting and the recording at time 41:58 for further information

https://docs.spacestation14.com/en/maintainer-meetings/maintainer-meeting-2025-07-19.html
2025-07-20 17:13:59 +02:00
CrystallEdge Server
238ca1b4a8 Automatic changelog update 2025-07-20 15:47:06 +03:00
Red
8721f736e1 Cooking simulator 3: Pies (#1540)
* enum -> prototype

* move sprites

* more dirt sprites

* some food data stucking fixing

* pumpkin fix

* pie move sprites

* refactor components

* pie refactor

* remove outdated proto

* new pie types

* Update SliceableFoodSystem.cs

* Refactor food cooking system and add fat flavor

Added 'Fat' to the flavor profile. Refactored food cooking logic to use CreateFoodData and UpdateFoodDataVisuals instead of CookFood and ApplyFoodVisuals. Introduced RenameCooker property to CP14FoodCookerComponent to control entity renaming during cooking. Improved separation of food data creation and visual updates.

* Update migration.yml

* Refactor food visual and sliceable logic in cooking system

Moved sliceable food logic from OnCookFinished to UpdateFoodDataVisuals for better encapsulation. Made UpdateFoodDataVisuals overridable and updated its usage in random food initialization. Added Rename field to CP14RandomFoodDataComponent and cleaned up unused BecomeSliceable field in CP14FoodCookerComponent. Updated pie_pan.yml to add SliceableFood and a new random food entity.

* Update pie_pan.yml

* fill levels
2025-07-20 15:45:59 +03:00
Mora
6eadc8aeee Stray Pixels on Vox Tails (#39082)
Stray pixel fixes
2025-07-19 23:56:50 -04:00
github-actions[bot]
1a66398029 Update Credits (#39081)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-07-19 20:44:39 -04:00
PJBot
98ec45d914 Automatic changelog update 2025-07-19 23:55:49 +00:00
Princess Cheeseballs
dec2d42a1d 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-07-20 01:54:42 +02:00
Tayrtahn
cfb0a95035 Fix mouse rotator error spam (#39071)
Ignore mouse rotation requests when the player is switching controlled entity
2025-07-20 01:16:40 +02:00
PJBot
50302a531b Automatic changelog update 2025-07-19 22:11:45 +00:00
IgorAnt028
41a175636b Fix bug with pipe color (#30645)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-07-19 15:10:38 -07:00
PJBot
f21803bfd8 Automatic changelog update 2025-07-19 22:05:23 +00:00
Boaz1111
fb69a0ae2c More atmos devices can be placed on layers easier. (#38672) 2025-07-19 15:04:15 -07:00
PJBot
1fd202fcea Automatic changelog update 2025-07-19 19:41:44 +00:00
War Pigeon
2db1ab58e6 Fix Bagel Salvage's airlock not being an airlock (#38956) 2025-07-19 12:40:33 -07:00
rlebell33
23c190e9bc Dehardcoded Air Alarm's UI window title (#39072)
Extract the air alarm title to no longer be hardcoded
2025-07-19 15:21:50 -04:00
PJBot
89cc8419b1 Automatic changelog update 2025-07-19 15:34:08 +00:00
Tiniest Shark
cd0960fbd7 Golden plunger Trolley and Bucket Carp (#38494)
* Golden plunger and Bucket Carp

* attributions added
2025-07-19 11:33:01 -04:00
CrystallEdge Server
6b98c91f73 Automatic changelog update 2025-07-19 13:25:35 +03:00
Nyranu
fcd29f9696 Coal (#1521)
* передача температуры + заготовка для плавления

* Небольшая сортировка + комментарии...

* pp

* Уголь!

* Казан!!

* Лицензия, уборка мусора.

* Лицензия, теперь точно

* Очистка мусора

* пу-пу-пу

* уголь*

* 1

* Up KAZAN

* cleaning up the trash. Sprites for the cauldron. Updating the cauldron

* meta

* wtf is not tag...

* Затычки.... господи..

* Tag

* Fuck, he's been here all this time: FlammableEntityHeating...

* Dead KAZAN

* Coal

* bi

* clo

* up

* cl

* cl6

* cl7

* cl_up

* cl_dm

* wd
2025-07-19 13:24:29 +03:00
PJBot
ee69f4e5b4 Automatic changelog update 2025-07-19 01:42:24 +00:00
Pyrovi
5ac78ec314 Guidebook changes (#38987)
* I was working on an outdated version of the upstream resulting in some lines of code having merge conflicts, hopefully I fixed it

* Eversince the "keep X alive and make sure X completes atleast half of their objectives" were removed the parts about them stayed in the guidebook those were changed, aswell as with the removal of thieving gloves parts talking about the thieving gloves were changed to instead talk about the new pickpocketing ability thieves got.

* Apply suggestions from code review

Co-authored-by: Andrew Malcolm O'Neill <105134723+maland1@users.noreply.github.com>

* Apply suggestions from code review

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

* requested changes

* Apply suggestions from code review

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

* request

* Apply suggestions from code review

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

* request2

---------

Co-authored-by: Andrew Malcolm O'Neill <105134723+maland1@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-19 03:41:16 +02:00
CrystallEdge Server
b8cdbe71b3 Automatic changelog update 2025-07-19 03:04:35 +03:00
Deserty0
f7c05accdf Twitch chatsan (#1548)
* 1234

* Update speech-chatsan.ftl
2025-07-19 03:03:30 +03:00
CrystallEdge Server
7efb78ef7d Automatic changelog update 2025-07-19 03:00:50 +03:00
Kit
13b44285f9 Tiefling's gambit (#1549) 2025-07-19 02:59:44 +03:00
cool dolphin
5d99c08871 mercenary (#1550) 2025-07-19 02:59:12 +03:00
Myra
efa52aecf2 Revert "Don't compile EF Core designer files on release builds" (#39057) 2025-07-19 00:25:16 +02:00
Myra
2c4251dcdc Revert "Don't compile EF Core designer files on release builds" (#39057) 2025-07-19 00:23:48 +02:00
lzk
ffbc813179 make name identifier prefix LocId (#39035) 2025-07-18 21:59:49 +03:00
CrystallEdge Server
ec156ce59a Automatic changelog update 2025-07-18 21:39:39 +03:00
Deserty0
e9ae3a63c8 Sharpening Stone fix (#1546)
* fix

* 1234567
2025-07-18 21:38:32 +03:00
Deserty0
edb6560cae fix client spam from magic (#1547)
* fix

* 123
2025-07-18 21:35:19 +03:00
PJBot
e7b68d9722 Automatic changelog update 2025-07-18 15:34:33 +00:00
Jackson Langley
2ce03ad651 Fix the max scanner distances (#39041)
* Good god

* Satan's in my PC
2025-07-18 11:33:24 -04:00
Red
ad7b53572b Create issue_report_en.yml 2025-07-18 18:29:15 +03:00
Red
e9e239852e Update and rename issue_report.md to issue_report_ru.yml 2025-07-18 18:27:28 +03:00
Red
a2b4c84811 Create feature-request_en.yml 2025-07-18 18:19:39 +03:00
Red
373cd7496d Update feature-request_ru.yml 2025-07-18 18:17:23 +03:00
Red
9e7f3bcebe Update and rename feature-request.yml to feature-request_ru.yml 2025-07-18 18:13:31 +03:00
Red
9b002b1486 Rename feature-request.md to feature-request.yml 2025-07-18 18:04:41 +03:00
Red
19adff8bda Update and rename toolshed-feature-request.md to feature-request.md 2025-07-18 18:04:03 +03:00
Red
b4f55edc93 Update issue_report.md 2025-07-18 17:50:10 +03:00
Red
bdda0f4f23 Update labeler.yml 2025-07-18 16:46:25 +03:00
Red
c39bf205ab Update labeler.yml 2025-07-18 16:39:15 +03:00
PJBot
006f3abfd7 Automatic changelog update 2025-07-18 11:42:51 +00:00
TeenSarlacc
157e4efb35 Tighten DB shotgun spread, widened sawn off spread (#37731)
buffed DB choke, nerfed sawn ooff choke

Co-authored-by: TeenSarlacc <baddiepro123@gmail.com>
2025-07-18 13:41:44 +02:00
kosticia
8673498aef nerf cheese prices, part 3: misc, last one (#38247) 2025-07-18 14:23:33 +03:00
qwerltaz
d0b798b63f Fix communications console thinking it can announce in the first 5 seconds after spawning it (#38305)
* init

* Revert "init"

This reverts commit 7bdeb355a75333c4cba29351eb1d93d428c84366.

* fair
2025-07-18 13:21:51 +02:00
Red
08a1d57331 Add empty line between changelogs discord entries (#38170)
Update actions_changelogs_since_last_run.py
2025-07-18 13:20:20 +02:00
PJBot
4e99f05522 Automatic changelog update 2025-07-18 11:04:22 +00:00
Quantum-cross
4dd9f06fef Remove omnizine from unwarmed honk pockets, honk pockets make you honk (#38152) 2025-07-18 14:03:15 +03:00
PJBot
04e44aaa70 Automatic changelog update 2025-07-18 10:55:43 +00:00
Quantum-cross
d8881ad4c6 Fix bar mailing unit tag on plasma (#38098) 2025-07-18 03:54:34 -07:00
Kowlin
1bc1d71d42 Allow GenPop access perms on the AccessConfigurator (#39043)
Allow the access configurtator to set Genpop Enter and leave permissions on doors.
2025-07-18 12:53:44 +02:00
PJBot
68831c18a3 Automatic changelog update 2025-07-18 10:36:14 +00:00
August Sun
63e22feb72 Adds Estoc DMR magazines to the syndicate ammo bundle (#38413)
* Added magazines and description changes to ammo bundle

* Added naming consistency for Estoc DMR bundle

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2025-07-18 12:35:07 +02:00
KamTheSythe
c5bd8defb3 Reword thief-role-greeting-equipment to mention innate ability rather than gloves (#39045) 2025-07-18 02:38:27 -07:00
CrystallEdge Server
e3003447aa Automatic changelog update 2025-07-18 12:00:42 +03:00
cool dolphin
5641792f04 Bottomless goblet (#1534)
* added bottom goblet

* artifact suffix and donotmap category
2025-07-18 11:59:37 +03:00
PJBot
1fc0040d4e Automatic changelog update 2025-07-17 23:45:35 +00:00
Perry Fraser
a093a2dd28 Fix overlapping popups for entity storages you can't access (#39039)
* fix: don't overlap popups for locked storages

* fix: tweak some lock i18n
2025-07-17 16:44:45 -07:00
Aearo-Deepwater
ada0e4cb6f Marble tiles (#38007)
* Create marble tile textures

* Flatten tiles to better match art style

* Add prototypes and translations for tiles

* Change marble footstep sound to one that makes sense

* Add marble tile object and in-hand sprites

* Add prototypes and translations for marble tile objects

* Add marble tile cutter recipes

* Double number of marble tile variants

* Increase plasma and uranium costs of plasmarble and uranium marble

* Add attributions for marble tile sprites

* Fix whitespace problem hopefully

* Fix trailing whitespace take 2

* Rename just "marble" marble to "white marble"

* Remove cutter recipes for uranium marble and plasmarble
2025-07-17 19:44:28 -04:00
CrystallEdge Server
7b84988747 Automatic changelog update 2025-07-18 01:04:44 +03:00
gogenych
9ce239494d remove radio from chat selection (#1537) 2025-07-18 01:03:39 +03:00
Viator-MV
aa7daf7a89 lele (#1538) 2025-07-18 01:02:59 +03:00
PJBot
0ba14af970 Automatic changelog update 2025-07-17 22:01:12 +00:00
ScarKy0
c884ecd074 Add acolyte armor to chaplain uplink (#36843) 2025-07-18 01:00:04 +03:00
PJBot
38eb07a2ce Automatic changelog update 2025-07-17 21:37:36 +00:00
ScarKy0
e87fc850dc Trim vending machines emag inventories (#36839) 2025-07-18 00:36:28 +03:00
Admiral-Obvious-001
a002c83074 Metashield Rules Update (Removal) (#38953) 2025-07-17 22:56:21 +02:00
PJBot
00ce19dfb1 Automatic changelog update 2025-07-17 17:02:45 +00:00
Quantum-cross
17559db1c7 Add supercritical sounds for ALL anomalies (#36425)
* add supercritical sounds for flesh anomaly and shadow anomaly

* fix attribution yml

* use sound collections, add TWO -- count em TWO tech anomaly supercrit sounds.

* add sound for present anomaly

* wrong soundcollection for flesh

* actually add the present anomaly sound...

* add fire anom sound

* add gravity anomaly supercritical sound

* add electric anomaly supercritical sound

* add bluespace anomaly supercritical and explosion sound

* add ice anomaly supercritical sound

* add fluid anomaly supercritical sound

* fix busted link

* typo

* add floral supercritical sound, fix typos

* Add supercritical sounds to injected anomalies

* add rock anomaly supercritical sound

* supercritical sound follows the entity, important for injected anomalies

* make the rock crit rumble a little less subtle at the start

* use CC0 freesound alternatives where available

* New pyro anomaly sound by GonTar

* New sounds by GonTar. Change AnomalyComponent so that you can change the length of supercritical properly in the prototype.

* oopsie, forgot the traps

* use TimeSpan for duration
2025-07-17 10:01:37 -07:00
Princess Cheeseballs
535646aefb Fix Respirator Asserts (#38911)
* Fix errors

* Cleanup CanMetabolizeInhaledAir

* Wait no don't do that

* Revert changes for real

* Fix

* Code cleanup and some safety rails

* Better tests and also comments

* Better comments

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-17 12:46:38 -04:00
PJBot
2715933a46 Automatic changelog update 2025-07-17 16:35:07 +00:00
qwerltaz
affcc22784 NPC spiders sometimes spin webs 🕷️🕸️ (#38319)
* NPC spiders now spin webs

* oops

* move logic to always update next spawn, to prevent rare web spam

* WebSpawnCooldown is timespan

* remove vv

* add web spawn method, no sus action event method call

* dont spin web immediately at spawn

* move NextWebSpawn value init to update

* oop

* remove unused game timing

* web spawn cooldown to 45
2025-07-17 12:34:00 -04:00
FlipBrooke
89fa7c2914 Wearable banana peels (#38868)
* 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
2025-07-17 12:29:36 -04:00
FungiFellow
93e04de36b Carps Can No Longer Suicide (#39033)
Update carp.yml
2025-07-17 11:30:01 -04:00
CrystallEdge Server
848778a8d3 Automatic changelog update 2025-07-17 17:36:19 +03:00
Red
759778782c Cooking simulator 2: Soups (#1535)
* Update shield.yml

* Add soup bowls

Introduced new bowl entities (wooden, iron, gold, copper) for soups, including their sprites and prototype definitions. Added 'Soup' to the CP14FoodType enum and updated the food holder logic. Removed the unused CP14Plate tag from plate.yml and misc.yml.

* Add misc soup ingredient sprites and metadata

Introduced new 32x32 sprites for various soup ingredients, including flyagaric, flylumish, lumish, meat, meat2, meat_salad, mole, mud, pumpkin, sawdust, trash, and veg_stew. Added corresponding meta.json with state definitions and licensing information.

* veg soup recipe for testing

* soup displacement maps

* meal displacement eating

* fix double cookin plates

* soup cooking

* Update cooking_pot.yml

* Refactor solution handling for cooking and containers

Updated solution component names and types for cooking pots, bowls, buckets, barrels, and wells to improve consistency and functionality. Added and removed solution-related components, adjusted transfer logic, and cleaned up unused solution states and visual metadata. Also added food type checks in cooking system to prevent incorrect transfers.

* new soup recipes

* Unit test

* fix

* trading requests

* Update CP14Cooking.cs

* Update CP14Cooking.cs

* audio improve, egg and bread fix

* fix bugs

* integration
2025-07-17 17:35:13 +03:00
PJBot
8c6a43fe72 Automatic changelog update 2025-07-17 13:34:56 +00:00
SlamBamActionman
f7c64ab86c Make diagonal windows prevent electrocution (#39032)
Add the window tag
2025-07-17 09:33:46 -04:00
Perry Fraser
43d04a44fe Re-id 'Medical Doctor' guide entry to 'MedicalDoctor' (#39029)
chore: re-id 'Medical Doctor' guide entry
2025-07-17 00:26:12 -07:00
Prole
a921594f1e Inconsistent Produce Inhands Fix (#38860)
* V1 Sprites

* Adding heldPrefix

* Updated Sprites

* 4 New Inhands & Sprite Tweak

* WaterMelon/HolyMelon Front Change

* Meta Guh

* Sugarcane Updated Inhands
2025-07-16 15:51:09 -07:00
PJBot
86093a548c Automatic changelog update 2025-07-16 22:36:21 +00:00
slarticodefast
2a496bf93f Give admin bags explosion resistance (#38384)
Co-authored-by: youtissoum <51883137+youtissoum@users.noreply.github.com>
2025-07-16 15:35:14 -07:00
PJBot
faa8152bf6 Automatic changelog update 2025-07-16 20:28:29 +00:00
ScarKy0
975ebac202 Fix Mjollnir throw while on delay (#39018)
* init

* fuck dirty

* yippee
2025-07-16 22:27:21 +02:00
CrystallEdge Server
e14ae1a930 Automatic changelog update 2025-07-16 08:16:14 +03:00
Red
7bb7ea2183 Cooking Simulator (#1529)
* frying pan start

* fix data saving

* Refactor cooking system and add localization support

Refactored food data handling in the cooking system to use Visuals instead of FoodData on holders, improved food transfer logic, and added popups and examine messages for user feedback. Added English and Russian localization files for cooking examine and meal descriptions, and updated prototype files to increase plate solution volume and add a whitelist for the cooking furnace.

* Refactor cooking system solution handling

Removed Solution field from CP14FoodData and updated CP14SharedCookingSystem to use solution containers directly. Improved solution transfer, mixing, and overflow handling during cooking. Increased pan max volume from 30 to 100 in cooking_furnace.yml.

* Improve cooking system trash handling and update food sprites

Enhanced trash distribution in CP14SharedCookingSystem to randomly assign trash to plates, only adding all trash to the last plate. Updated meat_dish and salad prototypes to use new wooden plate sprites. Added wideAnimationRotation and DrainableSolution to cooking_furnace for improved functionality.

* Remove unused usings and redundant comments in cooking components

Cleaned up CP14 cooking-related components by removing unused using directives and empty XML comments. This improves code readability and maintainability.

* Add tag-based cooking requirements and new meal recipes

Introduces tag-based cooking requirement classes (TagRequired, TagBlocked, SolutionRequired) and updates the cooking system to support tag checks. Adds new tags for food items, updates food and meal prototypes to include relevant tags, and implements new meal recipes (Zellasian Breakfast, Monster Egg) with corresponding sprites and localization. Also refactors and renames some tag and structure prototype files for better organization.

* Refactor and expand CP14 cooking recipes and tags

Reworked meal recipes to use tag-based requirements, added new tags for food categorization (meat, cheese, vegetables, etc.), and removed hardcoded entity recipes for ham in cheese and stuffed potato. Updated and added new meal recipes (bread plate, ham in cheese, stuffed potato), localized their names and descriptions, and migrated/added corresponding sprites. Deprecated SolutionRequired requirement, cleaned up unused tags, and improved TagRequired/TagBlocked logic. Updated prototype files to use new tags and added missing tags to food entities.

* Refactor and expand green salad recipes and assets

Replaces the old green salad entity and workbench recipe with new cooking recipes for green salad and green salad with meat. Updates English and Russian localization, moves and adds new salad textures, and removes obsolete salad assets and trading request.

* mashed potatoes

* Add mashed potatoes with herbs meal

Introduced a new 'mashed potatoes with herbs' meal, including English and Russian localization, recipe definition, and associated sprite. Updated the texture metadata and added the new image asset.

* Update dye.yml

* Fix frying pan item size and update plate recipe

Moved the 'size: Ginormous' property to the correct component in frying_pen.yml. Renamed the plate recipe and result from 'CP14Plate' to 'CP14PlateWooden' in misc.yml for clarity.

* Update meals.yml

* Update migration.yml

* fixes

* fix heating food sounds

* Nyranu temperature transmission

* Update plate.yml

* Cooking DoAfter works

* burning logic

* cooking more work

* auto transform transformable

* Update CP14SharedCookingSystem.DoAfter.cs

* cool burning visuals!

* Add MIT license headers to cooking system files

Added sublicensing notice and MIT license header to all files in the CP14 cooking system. Also made minor code cleanups, such as removing unnecessary default initializations and improving XML documentation for clarity.

* constant heating required

* cooking visuals improve!

* sandwiches with processed cheese + reagent burnt fuckuping

* inhand pan sprites + FIRE fuckup

* crafting & buying pan

* fix predicting

* random food spawner + chef closet

* mapping update

* Update frying_pen.yml

* move WIP to blacksmith lol
2025-07-16 08:15:08 +03:00
PJBot
f6c8bb9b16 Automatic changelog update 2025-07-16 03:20:05 +00:00
ArtisticRoomba
76a7b31c1e Fix firelocks failing to drop fast enough (#38918) 2025-07-15 20:18:55 -07:00
CrystallEdge Server
60d9f4ee3b Automatic changelog update 2025-07-16 05:53:03 +03:00
gogenych
60d4366ed4 new glow portal frame (#1533) 2025-07-16 05:51:57 +03:00
PJBot
988a35bc5a Automatic changelog update 2025-07-16 00:44:27 +00:00
nabegator
4e59b61749 Whitelist extension for tool belt (#35212)
* sd

* xd

* im so dumb

* revert to just remote signaller

* forgot

* add code comment

---------

Co-authored-by: shampunj <140359015+shampunj@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-16 02:43:19 +02:00
Kyle Tyo
b9ffd060d6 Predict DevourSystem. (#38970)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-16 02:21:18 +02:00
Łukasz Lindert
377c9bfcea PressureEvent removed (dead code) (#39004)
yep
2025-07-16 00:06:48 +02:00
Tayrtahn
604435d807 Convert some voice samples to mono (#39002)
* Convert Xenoborg voice sounds to mono

* Convert female human cough sounds to mono
2025-07-15 16:36:44 -04:00
Perry Fraser
bdf3c891e7 Mostly fix reaction sound effect stacking :( (#38999)
* fix: band-aid the reaction sound effect stacking

It's so funny I'm so sad I'm writing this commit :(

* fix: remove unused hashset

Drive by fix. 'Tis never read from.

* fix: switch to just making it server only

* fix: uncomment the if lol

Commented it out for recording video oopsie
2025-07-15 19:02:36 +02:00
Hannah Giovanna Dawson
1d4c945561 Remove the Qur'an (#39000) 2025-07-15 03:52:05 -07:00
PJBot
b5ad346fd8 Automatic changelog update 2025-07-15 02:48:54 +00:00
Velken
b18a7ccdd3 Moproaches (#38700)
* MOPROACHES

* rerun test - random test fail of doom

* added to random pest event, with same prob as cancer mouse

* rerun test - random test fail of doom 2 electric boogaloo

* changed moproach obtain methods

* no crafting of moproaches allowed :(

* Reverted content of file.

* requested changes

* requested changes

* requested changes

* Increase moproach health by 5 - requested by Emo on discord

* spaaaaaaaaaaaaaaaaaaaaaaaaace

* microwave recipe added

* no surgery this week

* spaaaaaaaaaaaaaaaaaaace 2 more space for your space

* space

* new mopshoes sprite

* in-hands

* inhands v2

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-07-14 22:47:47 -04:00
PJBot
5dbef8a924 Automatic changelog update 2025-07-15 00:52:21 +00:00
SlamBamActionman
f8322d548e Adjust throwables hitboxes to match sprites (#38985)
Initial commit
2025-07-14 17:51:14 -07:00
PJBot
3122adbd34 Automatic changelog update 2025-07-15 00:50:37 +00:00
RedBookcase
34cc49ccf0 Made the Mosin bayonet usable. (#38295)
* Made mosin an alt-melee weapon, added reagent fill for the weapon.

* fixes

---------

Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: beck-thompson <beck314159@hotmail.com>
2025-07-14 17:49:27 -07:00
Trosling
6053509ceb New holy books (#38986)
* Adds a few new holy books, implements one existing, and makes them pickable from loadout

* Almost forgot the yaml

* Forgot to change fork-specific paths

* Modified copyright to be less specific as requested by maintainer

* Newlines

* Replaced scroll torah with a book-bound tanakh, as recommended by dvir001

* Changed all mentions to use tanakh instead of torah
2025-07-14 17:49:08 -07:00
Tayrtahn
2e6549a308 Remove prototype caching from TransformableContainerComponent (#38988)
Remove prototype caching from TransformableContainer
2025-07-14 23:03:41 +02:00
Crude Oil
dac2537f9c Buff parrot learn rates and radio chatter (#38984)
* buff parrots

* ok but not that smart

* oop
2025-07-14 09:55:27 -07:00
PJBot
f535a31297 Automatic changelog update 2025-07-14 15:46:21 +00:00
Perry Fraser
7c7aeffde2 Make RunVerbAs take and return EntityUids (#38155)
fix: make RunVerbAs take and return EntityUids
2025-07-14 08:45:13 -07:00
CrystallEdge Server
49fbf31a28 Automatic changelog update 2025-07-14 11:33:21 +03:00
YomieI
2677c5c819 Changed ice dagger's hitsound (#1527) 2025-07-14 11:32:02 +03:00
kosticia
d9545dd380 make biogenerator not accept low-nutrient plants (#38427)
* anti-noob

* dsaswa

* Minor grammar change

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2025-07-14 01:17:46 -07:00
Tayrtahn
c60910dfa6 Fix devices in terminal mispredicting power state (#38647)
* The simple solution

* The better solution

* Revert "The better solution"

This reverts commit 611e56e031636734abab1ad3e77bf88b69a4de13.
2025-07-14 00:49:27 -07:00
Perry Fraser
bd853b60de fix: ghosts shouldn't see whisper obfuscation (#38202) 2025-07-14 00:30:53 -07:00
UpAndLeaves
229f33f22a Voltage enum to shared (#38964) 2025-07-13 23:13:01 -07:00
Tayrtahn
4f766f199c Refactor ExaminableDamage (#38978)
* Remove prototype caching in ExaminableDamageComponent

* Replace ExaminableDamagePrototype with LocalizedDatasetPrototype

* Allow null
2025-07-13 21:35:47 -07:00
PJBot
bd2212beff Automatic changelog update 2025-07-14 02:50:32 +00:00
Flareguy
d55a2b830a Vox customization additions (+eyeshadows) (#38906)
vox customization stuff
2025-07-13 22:49:25 -04:00
Tayrtahn
45fe7d5093 Remove prototype caching from ZombieComponent (#38979)
Remove prototype caching from ZombieComponent
2025-07-14 04:05:18 +02:00
PJBot
106cbe0e19 Automatic changelog update 2025-07-13 20:52:00 +00:00
ToastEnjoyer
7fd74b08df Add contraband parent to war declarator (#38972) 2025-07-13 22:50:53 +02:00
PJBot
259575ca76 Automatic changelog update 2025-07-13 19:32:51 +00:00
lzk
bf1b55e22f make ocarina small (#38971)
Update instruments_wind.yml
2025-07-13 15:31:44 -04:00
B_Kirill
0c92478e0a Cleanup warnings: CS0649 (#38797) 2025-07-13 20:35:20 +02:00
PJBot
acfb331cbe Automatic changelog update 2025-07-13 16:49:46 +00:00
ToastEnjoyer
31c84eaf20 [BUGFIX] Stops scurrets from suffocating in crates (#38951)
Prevent scurrets from dying!
2025-07-13 09:48:39 -07:00
PJBot
545ca71367 Automatic changelog update 2025-07-13 16:12:10 +00:00
Velken
3d9dab1d52 Hats (and glasses) for pets - Part 1 - Ian and McGriff (#38634)
* new branch new me

* cursed displacement

* 2 pixels of death

* forgot a line

* fixed some edge cases on corgis with the displacement

* fix conflict

* fix indentations

* a bit more displacement fixes
2025-07-13 12:11:00 -04:00
Pieter-Jan Briers
27dc59a40b Don't compile EF Core designer files on release builds (#38927) 2025-07-13 10:29:18 +02:00
SpaceManiac
8b3232f305 Fix extra dollar sign in admin log for machine toggle (#38961) 2025-07-13 06:57:54 +02:00
devinschubert14
dd87e7ef64 Fixed error thrown when examining indestructible plastitanium windows (#38950)
* Fixed error thrown when examining indestructible plastitanium windows

* Fixed indentation to match yaml standards
2025-07-13 00:02:04 -04:00
KOTOB
f3ce428165 SharedGunSystem spread bugfix (#38960)
two bytes
2025-07-12 23:59:05 -04:00
github-actions[bot]
cdf049038f Update Credits (#38955)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-07-12 19:21:57 -07:00
Princess Cheeseballs
367ff79006 Accents Event to Shared (#38948)
* 27 file diff

* 27 file diff 2

* Apply suggestions from code review

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-12 22:52:51 +02:00
Perry Fraser
cfe825b0e3 fix: don't divide by zero in FragmentIntoProjectiles (#38946) 2025-07-12 21:49:46 +02:00
Myra
5ba95f8c5b Stable to master (#38944) 2025-07-12 20:04:09 +02:00
Fildrance
f4d223b2e1 refactor: rework the new status effect system to use containers (#38915) (#38943)
Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>
2025-07-12 19:53:08 +02:00
Ed
9d6d6a1feb Update rapier.yml 2025-07-12 20:30:00 +03:00
Ed
c8579f9db0 Update chests.yml 2025-07-12 20:27:44 +03:00
Perry Fraser
dbfe05d5cc refactor: rework the new status effect system to use containers (#38915) 2025-07-12 19:49:58 +03:00
PJBot
ad34d88a49 Automatic changelog update 2025-07-12 14:29:29 +00:00
Tiniest Shark
88ebad06ea Bottle Drink Inhands (#38937)
* there is now bottles of booze in your hands

* Messed up the vermouth inhand fills slightly.

* oh whoops that's redundant
2025-07-12 10:28:22 -04:00
CrystallEdge Server
d53a19d812 Automatic changelog update 2025-07-12 15:11:18 +03:00
Red
ff12e333c8 Workshop content (#1526)
* Update marble tile textures and attribution

Replaced 'marble.png' and 'double_edge_S.png' with new versions and updated attribution.yml to credit KREKS for the resprite work.

* gold & old chest + fix crate fixtures

* Update r_hand.png

* Update base_chest.yml
2025-07-12 15:10:13 +03:00
CrystallEdge Server
ab2c2a1652 Automatic changelog update 2025-07-12 14:53:17 +03:00
Red
29a7234ae6 Add guard weapon loadouts and new electric staff (#1525)
Introduces new guard weapon loadouts including guard's sword, halberd, rapier, and a magic electric staff. Adds the 'lightning strike small' spell and related assets, updates spell damage values, and provides new modular grip and staff sprites. Updates localization, trading positions, and integrates new equipment into guard roles.
2025-07-12 14:52:12 +03:00
CrystallEdge Server
cadee25367 Automatic changelog update 2025-07-12 13:11:37 +03:00
Red
b7017ce2ed Fashion Guardians 2025 (#1524)
* Dinazzewr recoloring guards clothing

* new guards hats
2025-07-12 13:10:31 +03:00
Mono
adcdcb39dc Fixing a singular pixel on the frame of the AI (#38936)
* Singular pixel ops

* Third commit - upholding CC-BY-SA by indicating changes made
2025-07-11 23:33:12 -04:00
Velcroboy
44b1019774 Convert Locker/Closet fills to Entity Tables: Part 2 (#38254)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-07-11 13:55:35 -07:00
PJBot
597e484f1c Automatic changelog update 2025-07-11 17:50:07 +00:00
Kyle Tyo
7845417d10 Tweaks to ShowRulesCommand structure, localization, and autocomplete. (#38855)
commit
2025-07-11 13:48:58 -04:00
PJBot
c10c8eff4f Automatic changelog update 2025-07-11 17:19:28 +00:00
Centronias
05436d3dcc Component for clothes to suppress emotes and scream action in general, and the muzzle to suppress vocal emotes in particular (#32588)
* Component for clothes to suppress scream noise

GaggedComponent + AddGaggedClothingComponent and relevant systems to make them work.

Currently only stifles the scream _action_, not all emotes

because if a mime can silently emote, so can gagged you!

* fix comments

* swap to inventory relay

and make it more general such that specific emotes or emotes of a given category can be blocked

* power gloves shouldn't block snapping

* easy fixes

* blockable emote event

* pr comments, switch to using emote event mostly

* pr comments

add beforeEmoteEvent

add emote blocker name to popup

maybe some other stuff, I forget

* get rid of emoteevent's source because I don't need it anymore

* smol clean

* formatting, style, and one minor thing where having a muzzle in your pocket would gag you
2025-07-11 13:18:15 -04:00
Nemanja
a22826cd90 Fix AddHandCommand not working on aghosts (#38866) 2025-07-11 13:10:43 -04:00
CrystallEdge Server
f9b89cda11 Automatic changelog update 2025-07-11 18:55:44 +03:00
Red
b51e80c335 economy testing (#1507)
* pricing check 1

* Update CP14Economy.cs

* seed and dye

* mini tweak

* seed and test mithril

* hammer and pickaxe

* blade

* expensive check

* fix test

* Update CP14Workbench.cs

* misc

* misc 2

* Update CP14Workbench.cs

* Update CP14Workbench.cs

* misc 3

* misc 4

* misc 5

* meat

* food

* dough

* Clothing

* misc

* food 2

* food 3

* Wallpaper

* Wallpape 2

* Floor

* Floor 2

* carpet

* plushie

* Plushie 2

* meat 66

* food 4

* misc 9

* misc 10

* Bucket

* meat 8

* meat 10

* rope

* TagResource deleted

* meat 11

* meat 12

* meat 13

* meat 14

* meat 15

* fix

* meat 16

---------

Co-authored-by: Nimfar11 <nimfiar@gmail.com>
Co-authored-by: Nim <128169402+Nimfar11@users.noreply.github.com>
2025-07-11 18:54:36 +03:00
Red
37ece7228f Refactor workbench resource handling with provider component (#1522)
* Refactor workbench resource handling with provider component

Introduces CP14WorkbenchPlaceableProviderComponent and related event to abstract resource provision for workbenches. Updates system logic to use the new provider event instead of directly accessing ItemPlacerComponent, improving modularity and extensibility. Adjusts entity prototype to include the new provider component.

* map resave

* resave Frigid
2025-07-11 15:55:41 +03:00
PJBot
1117cac96d Automatic changelog update 2025-07-11 12:14:19 +00:00
Princess Cheeseballs
ac895a0db4 Stun and Stamina Visuals (#37196)
* Stun animation

* Commit 2

* Almost working commit

* Best commit

* Minor cleanup and value adjustments

* Fix animation data getting wasted and cleaned up some stuff

* Don't animate if dead

* AppearanceSystem is for chumps

* Cleanup

* More cleanup

* More cleanup

* Half working commit

* Documentation

* Works

* ComponentHandleState my beloved

* AppearanceComp compatibility

* Address review

* Borgar

* AND NOW THE END IS NEAR

* AppearanceSystem compliance (Real)

* Don't need to log missing there

* I actually hate mob prototypes so much you don't even know

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-07-11 14:13:11 +02:00
K-Dynamic
a268a4aacc Rotated turret wall panel sprites (#38464)
rotated sprites
2025-07-11 00:55:16 -04:00
Whatstone
a64fe298d0 Add Serializable, NetSerializable attributes to DecalPaintMode (#38921)
Serializable, Net" on DecalPaintMode
2025-07-10 23:43:56 -04:00
PJBot
6633a18d62 Automatic changelog update 2025-07-11 00:38:05 +00:00
Whatstone
9ad99cfa64 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>
2025-07-10 20:36:57 -04:00
PJBot
685156c08f Automatic changelog update 2025-07-10 21:38:58 +00:00
slarticodefast
773299bd07 fix clones not getting the thieving skill (#38914) 2025-07-10 14:37:50 -07:00
Ed
932fd47861 Update CP14WorkbenchWindow.xaml.cs 2025-07-10 21:56:31 +03:00
PJBot
8026f7fd50 Automatic changelog update 2025-07-10 18:17:16 +00:00
qwerltaz
615c4afbcc Bagel genpop (#38829)
* skelaton (skeleton)

* basic genpop

* genpop mostly done

* general layout

* all details

* maints firelocks, tweaks

* invalids bye, remove residual air and fire alarm

* uhh tweaked something dont remember

* remove actions

* armory: truncheon and riot crate

* remove more invalid devices

* armory holopad, graffiti tweak

* no windoor into sec substation, add flasher

* Revert "no windoor into sec substation, add flasher"

This reverts commit a7b919fb74433b82f48f92f98d5521ecb1f3eae4.

* no sub windoor, flasher

* fix camera blocking turret

* move warden and armory, restyle decals

* maints flashlights :D

* fix locker room dark tile placement
2025-07-10 12:16:06 -06:00
Tayrtahn
ecbff409b6 Replace AdvertiseComponent with DatasetVocalizerComponent (#38887)
* Replace AdvertiseComponent with DatasetVocalizerComponent

* No vocalizing while broken or without power

* Kill AdvertiseComponent/System

* This really shouldn't be here

* xmldoc for VocalizerRequiresPowerComponent

* TryIndex -> Index
2025-07-10 11:12:24 -07:00
lzk
a97223bc70 change Identity.Name to Identity.Entity for delivery popups (#38909) 2025-07-10 19:44:37 +02:00
Tayrtahn
cce239dd93 Fix localization error when trying to change hair on someone with a hat (#38907) 2025-07-10 19:37:25 +02:00
PJBot
0d9659e810 Automatic changelog update 2025-07-10 17:12:31 +00:00
Hitlinemoss
97fcebb92b Kobold/monkey AI holograms (#38888)
* Added kobold/monkey AI holograms

* Updated meta.json
2025-07-10 13:11:23 -04:00
PJBot
d071b4dab6 Automatic changelog update 2025-07-10 14:48:51 +00:00
ScarKy0
91841a7853 Add Bolas to SecTech vendor (#38902) 2025-07-10 16:47:41 +02:00
PJBot
b7f31ac482 Automatic changelog update 2025-07-10 12:43:10 +00:00
K-Dynamic
5427d386ce Minigun inhands + HMG multihand and slow move speed (#35344)
* hmg move speed

* minigun inhands

* even better inhands

* touch-up
2025-07-10 14:42:02 +02:00
Nox
5a3368b0fa Operation Remove Gun Bloat (#38104)
* Remove long-unused magazines

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

* Not sure why that failed, going to rerun tests real quick

* Testing if this resolves the tests. Anyone know how to run tests locally, without waiting for github?

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

* Fully removed boxes of vector ammo and the vector ammo tag

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

* This might fix the tests

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

* Nulled more =

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

* Nulled more migrations

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

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
2025-07-10 14:36:18 +02:00
PJBot
3896dbb375 Automatic changelog update 2025-07-10 11:15:44 +00:00
Perry Fraser
decaa58dfe feat: allow admins to interact under subfloors (#38813)
* feat: allow admins to interact under subfloors

* feat: use BypassInteractionChecks instead
2025-07-10 13:14:37 +02:00
PJBot
9b85def0a7 Automatic changelog update 2025-07-10 09:32:05 +00:00
slarticodefast
415ba2e274 reduced motion flash effect version 3 (#37824)
* V3

* Apply suggestions from code review
2025-07-10 11:30:58 +02:00
PJBot
f574990b11 Automatic changelog update 2025-07-10 07:57:25 +00:00
Tobias Berger
5fbbb6fd0b Allow pAIs to emote like a borg (#38425) 2025-07-10 00:56:17 -07:00
Perry Fraser
80c6650730 fix: wide swings with resistanceBypass now bypass resists (#38496) 2025-07-10 00:48:45 -07:00
PJBot
5e9b9a55eb Automatic changelog update 2025-07-10 06:32:47 +00:00
slarticodefast
0484b7f07e Add VV button to the solution editor (#38889)
add vv button to solution editor
2025-07-09 23:31:39 -07:00
Leon Friedrich
f915157b96 Fix yaml linter and misc errors (#37444)
* Fix yaml linter

* Revert "fix cluwne pda pen slot (#35611)"

This reverts commit 66e926843f.

* More fixes

* Try again with the engine requirement removed

* Decrease number of brass sheets dropped by clockwork windoors

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2025-07-10 00:25:36 -04:00
DrSmugleaf
00826aaad6 Replace usages of customTypeSerializer PrototypeIdListSerializer with something that doesn't take 20 separate words to type out (#37959)
* Replace usages of customTypeSerializer PrototypeIdListSerializer with something that doesn't take 20 separate words to type out

* Missed one

* Missed another

* Fix data field ids
2025-07-10 05:06:51 +02:00
Kyle Tyo
326712faca Predict RepairableSystem (#38886)
* commit

* Update SharedRepairableSystem.cs

* compo

* final touches.

* Update RepairableComponent.cs

* Update RepairableSystem.cs

* Update Content.Shared/Repairable/RepairableSystem.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-10 04:39:34 +02:00
PJBot
59633f6dc5 Automatic changelog update 2025-07-09 19:06:05 +00:00
Crude Oil
9ebf6a24c4 Parroting Parrots part 1: Help maints! SQUAWK! Maints! (#38243)
* parrots have ears. add poly

* high tech parrot functionality

* adjust times

* add accent to radio message

* don't spam everything all at once probably

* learn about the existence of prob(float)

* actually use Prob(float) correctly

* newline

* add pet spawner for poly

* move chance to talk on radio to component

* missing comment

* minor edits and doc additions

* the reviewerrrrrrr

* parrot can't learn when crit or dead

* increase default memory

* rename poly to polly

* crude way to ignore whispers. chatcode please

* This is Polly. It is set to broadcast over the engineering frequency

* add missing initialize

* add displacement map for parrot ears

* review comments - Errant

* minor things

* large rework

* fix attempting to talk when entity has no channels

* use list of active radios again to track channels

* fix bad return, some comments

* fix long learn cooldown

* minor adjustments

* use FromMinutes

* the voices told me to make these changes

* remove default reassignment

* Review changes

* remove polly's accent

* decouple radio stuff from parrotsystem

* minor stuff

* split vocalization and parroting

* minor review work

* re-add missing check

* add admin verb for clearing parrot messages

* minor action icon update

* oops

* increase icon number text size

* Admin erase parrot messages associated with players

* part 1 beck review

* add whitelist and blacklist for parrots

* Downgrade missing component error to warning

* Add comment

* add some missing comments

* Remove active radio entity tracking, use all inventory slots

* Minor changes

* small review stuff

* review radio stuff

* swap ears displacement to invisible death displacement

* remove syncsprite

* vscode why do yo have to hurt my feelings

* review changes

* use checkboth
2025-07-09 12:04:57 -07:00
Tayrtahn
e08e920c62 Prefer file-scoped namespaces in .editorconfig (#38879)
Prefer file-scoped namespaces in .editorconfig
2025-07-09 11:33:18 -07:00
Nim
eb61eda87a fix (#1519) 2025-07-09 20:06:06 +03:00
CrystallEdge Server
be63d73fc3 Automatic changelog update 2025-07-09 16:33:30 +03:00
Red
a486c94e3b rope (#1518) 2025-07-09 16:32:23 +03:00
PJBot
635bef70db Automatic changelog update 2025-07-09 12:44:46 +00:00
Sparlight
2c3c510fe9 Fix non-humanoid mobs being destroyed on devour (#38087)
* Allow non-preference living things to be added to a devourer's stomach

* Fix ordering of devour logic

* Minor refactor for whitelist on storage and food preference

* Fix linter issue

* Coerce workflow to run again; also fix bad indenting error

* Code review changes
2025-07-09 14:43:35 +02:00
Ed
5c13de5331 Update floorWater.yml 2025-07-09 14:15:51 +03:00
PJBot
5a46e09830 Automatic changelog update 2025-07-09 11:08:49 +00:00
Quantum-cross
989338cb08 Fix lingering ghost roles (and expand tests to catch it) (#38788)
* Improve and expand `TakeRoleAndReturn` to fail on bug #38292

* fix #38292 and expanded test cases

* use validated EntProtoIds for tests

remove unusued using declarations

* use const strings that match the TestPrototypes
2025-07-09 13:07:41 +02:00
Perry Fraser
f29c35ff37 fix: correct ToggleableVisuals for toy sword and pirate helm (#38867) 2025-07-09 00:04:32 -07:00
Viator-MV
5889a4ac98 Lightning strike nerf (#1514)
* core

* core 2

* fix
2025-07-09 09:18:18 +03:00
gogenych
b5707e622a fast price fix (#1515) 2025-07-09 09:17:44 +03:00
Red
5b4440d18d Merge pull request #1516 from crystallpunk-14/ed-08-07-2025-shader-sea
Status effect spells
2025-07-09 09:16:49 +03:00
Perry Fraser
871860208c fix: Register OnRequestMovePulledObject under the right system (#38484)
* fix: Register OnRequestMovePulledObject under the right system

* nukeops test flake
2025-07-09 05:44:21 +02:00
Perry Fraser
c802b8bbb2 Make mopping predicted (and some other stuff) (#38749)
* refactor: move puddle evaporation + absorbents to shared

* refactor: move SolutionRegeneration to shared

* refactor: make AbsorbentSystem visuals clientside

* style: general formatting/cleanup on touched files

- Few logical simplifications
- Add field for hard-coded sparkle effect ent
- Switch stuff to Entity<T>

No actual prediction fixes in this commit (though in
retrospect I should've done this commit last).

* fix: use predicted variants for predicted code

* fix: average out evaporation rates in mixtures

* refactor: move SolutionPurge to shared

* style: Basic SolutionPurgeComponent field cleanup

* fix: general prediction + timing + networking fixes

- Moves client side visuals back to shared because other
  players exist
- Don't accumulate CurTime in Purge/RegenerationSystem
- Network the next update field in Purge/RegenerationSystem to
  deal with UI mispredictions???

* fix: add udder bug workaround

Not needed for SolutionPurgeSystem which doesn't resolve
solutions (probably fine that SolutionPurgeSystem doesn't
cache since it's much rarer, though it probably should), and
likely not needed for AbsorbentSystem since it only resolves
against puddles which, I don't think can be in containers.

* fix: don't divide by zero for evaporation speed = 0.

* refactor: revert evaporation changes

Will cherry-pick these out in another PR.

Also reverting the evaporation speed bugfix since it's easier
to revert all at once. :)

* fix: component cleanup; autopause fields, use ProtoID

* fix: remove unused AbsorbentComponentState

* fix: ProtoId is not string

* refactor: move PuddleSystem.UpdateAppearance to shared

* style: general PuddleSystem.UpdateAppearance tweaks

- Switch to Entity<T>
- Use ProtoIds
- Minor simplifications

* fix: add udderly silly PVS workaround

* cleanup

* fix

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-09 05:17:55 +02:00
PJBot
7cf6ca877c Automatic changelog update 2025-07-08 23:23:20 +00:00
Mora
d15b74d56b Added Vox Heterochromia (#38595)
* Added Vox Heterochromia

* Forgot to change moth to vox

* minor formatting fix

---------

Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>
2025-07-08 19:22:13 -04:00
PJBot
4d7731fe80 Automatic changelog update 2025-07-08 11:57:05 +00:00
Andrew Malcolm O'Neill
8ea7dea6b3 Contraband category fixes (#38698)
* Adding contraband to some items missing it
- This includes updating contraband to follow more consistently where items are expected to be used
- Fixing the spacing in arrays to be more consistent with other files

* Updating PPD to be Eng contra
2025-07-08 13:55:55 +02:00
Red
668e79111c Merge pull request #1511 from crystallpunk-14/ed-08-07-2025-upstream
Upstream sync try 2 (not squash)
2025-07-08 12:01:01 +03:00
CrystallEdge Server
b0cea03821 Automatic changelog update 2025-07-08 12:00:27 +03:00
Red
ae077c3971 Revert "Upstream sync (#1509)" (#1510)
This reverts commit a35c718734.
2025-07-08 11:59:51 +03:00
Red
a35c718734 Upstream sync (#1509)
* Fix the tail wagging action being blocked by cuffs. (#38454)

Update types.yml

* Automatic changelog update

* Remove redundant IoC Resolve in `EmptyOrWindowValidInTile` (#38446)

Remove redundant IoC Resolve in EmptyOrWindowValidInTile

* fix: trim five minutes of silence from bottle_clunk_2 (#38463)

* Update patrons (#38470)

* Forbid string literals for `SharedActionsSystem` methods (#38472)

Forbid string literals for SharedActionsSystem methods

* Chameleon Controller Implants can be deimplanted (#38439)

* Automatic changelog update

* Cleanup duplicate dependency in `AdminVerbSystem.Smites` (#38473)

Cleanup duplicate dependency in AdminVerbSystem.Smites

* fix: set correct layer visibility for power cell sprites (#38458)

* fix: set correct layer visibility for power cell sprites

* fix: use a default charge level for power cell sprites' appearance data

* Remove Icon Smoothing for Airlocks, Doors, and Plastic Flaps, and Shutters from Walls (#38456)

* Nuke Icon Smoothing

* Update highsec.yml

* Update plastic_flaps.yml

* Scurrets (#38218)

* Scurrets.

* Add missing equipment YAML

* Fix count of NamesFirstScurret

* Resolve PR comments, wa.

Also add like a bunch more wa replacements

* ed

* Update Resources/Textures/Mobs/Animals/scurret/displacement.rsi/meta.json

* :rivflabbergasted:

* Fixed spacings in scurret_last.ftl

* Fix mangled endings of some last names

* wawa

* the scug has a spear for self defence

* Automatic changelog update

* Fail if we attempt to run publish on master (#38431)

* Fail if we attempt to run publish on master

BREAKING: FORKS REMOVE THIS

* Update publish.yml

* Fix styling for Admin Menu lists (#38261)

* remove styleclass from playertab 'button' lines

* cvar, fix button-style header alignment

* Fix requested changes

And also the extra cvar things I was meant to remove in the upstream merge

* Tiny tweaks

---------

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

* Automatic changelog update

* Add interaction test for retractable arm blade (#38452)

* Add interaction test for retractable arm blade

* Update for HandsSystem refactor

* Revert "Update for HandsSystem refactor"

This reverts commit e01bb9a7e318dd916240d57b30f48af9594bff1f.

* Combine WaitAssertion blocks

* Make... sloths... speak... slowly... (#38142)

* Add SlowAccent

* Apply SlowAccent to sloths

* xmldocs

* Automatic changelog update

* Make gas tank UI a bit more network-happy (#38184)

* fix: network gas tank output pressure

* fix: don't overwrite gas tank output pressure during editing

* allow to publish news without ui (#35262)

* allow to publish news without ui

* the hell was that

* apply

* apply review

* sure

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

* okay

---------

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

* add some documentation for visiting entity (#38475)

* add some documentation for visiting entity

to prevent someone from spending 5 minutes diving into the codebase

* reviews

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

---------

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

* SignalSwitchSystem: Check button is locked before toggling (#38474)

Check button is locked before toggling

* Automatic changelog update

* Fix compile (#38477)

* Fix wallmount interaction (#38111)

* Automatic changelog update

* Fix debug asserts when unequipping items (#38274)

* Flask Visual Overhaul & YML Organizing (#38032)

* Adding Back Baseline V1 Changes

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Readability Change

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* icon_open implementation, tidy up & attributions (fix lith/shiny flask ugly af open sprites)

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* good enough

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* No mo closed spills

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Inhands & Attributions Part 1

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Inhands & Attributions Part 2

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Flask Sounds & Attributions

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Cap flask inhands change

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Lith flask Inhand Changes

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Spacing

* Fix?

* Man...

* Attributions Back in...

* Im loosing it..

* REAL!

* :/

* Again...

* again :/

* Plz???

---------

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Automatic changelog update

* Kills TurfHelpers (#37939)

* Create TurfSystem equivalent for and obsolete TurfHelpers.GetTileRef

* Fix EntitySystem uses of TurfHelpers.GetTileRef

* Fix EntitySystem uses of TurfHelpers.TryGetTileRef

* Fix construction condition uses of TurfHelpers.GetTileRef

* Fix last use of TurfHelpers.IsBlockedTurf

* Create TurfSystem equivalent to and obsolete TurfHelpers.GetContentTileDefinition

* Fix uses of TurfHelpers.GetContentTileDefinition(TileRef)

* Fix uses of TurfHelpers.GetContentTileDefinition(Tile)

* Create TurfSystem equivalent to and obsolete TurfHelpers.IsSpace

* Fix EntitySystem uses of TurfHelpers.IsSpace(Tile)

* Fix EntitySystem uses of TurfHelpers.IsSpace(TileRef)

* Fix remaining uses of TurfHelpers.IsSpace

* Fix uses of TurfHelpers.GetEntitiesInTile

* Delete TurfHelpers.cs

* Add GetEntitiesInTile lookup methods

* Convert some GetEntitiesInTile methods to LookupSystem extension methods

* Use new GetEntitiesInTile methods

* Recycle spiderweb hashset

* Recycle floor tile hashset

* Allow Maintainers to use customvote command (#38385)

Changed from Moderator perm to Round perm

* Automatic changelog update

* Make role ban pannel pretty (#37952)

* Make role ban pannel pretty

* Removed unused depencency

* refactor: wider panel (no jumping due to scroll in english lang) minor readability improvements

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>

* Automatic changelog update

* Generic Numeric Alerts (#38370)

* Fix styles for group button in loadout menu (#38488)

* Fix styles color for group button in loadout menu

* Show selected item count in loadout group UI

Updated the loadout group container to display the number of selected items in a group. Added a new localization string to support this feature in the UI.

* Resolve required changes

* Automatic changelog update

* fix: mops with liquid can hit people again (#38486)

* Automatic changelog update

* Treat duplicate dependency warnings as errors (#38480)

* Treat duplicate dependency warnings as errors

* GitHub workflows

* commas

* Maybe we just don't use these?

* I think we can get rid of these?

* Retractable items get removed by handcuffs (#38441)

* init

* oops

* happens

* review

* fix

* Update Credits (#38493)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* Fixed dirt tiles having identical names (#38500)

* added prefix to planet dirt/grass

* prefixes don't work, just doing renaming instead.

* Readds the Hypereutactic Blade for traitors, adds Hypereutatic blade for Nukies (#37182)

* adds hypereutactic back into the uplinks

* Disables hum

* Adds the Hypereutatic Blade for Nukies

* Actually makes the sound so quiet no one can hear it

* Apply suggestions from code review

* Update Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml

---------

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

* Automatic changelog update

* Allow admins to export round logs to CSV files (#38206)

* Automatic changelog update

* MINOR SPELLING ERROR!!1!!1! (#38510)

Spelling fix in the code of conduct

Comunity ->Community

* Staff of Healing for Pacifists (#38509)

* Automatic changelog update

* Command resolves. (#38519)

* banlist-command

* open-admin-notes-command

* stealthmin-command

* set-alert-level-command

* remove unused usings

* whitelist commands

* Emotional Support Scurret locstrings (#38518)

Missed during the atomization of the Wa Wa PR.

* Content fix for `LocalizedCommands` `Loc` change (#38133)

* Content fix for LocalizedCommands Loc change

* Switch to LocalizationManager

* Predict Flashes (#37640)

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

* Automatic changelog update

* Remove excess `SingularityLevelChangedEvent` subscriptions (#38536)

* Remove excess SingularityLevelChangedEvent subscriptions

* RadiationSourceComponent too

* Cleanup commented out code

* Revisions and cleanup to dock and shuttle commands. (#38533)

commit

* Add wall-based ambient occlusion (#38276)

* Add wall ambient occlusion

* wawawewa

* Work

* cvars

* Comment to make slart happy

* Automatic changelog update

* Update submodule to 263.0.0 (#38524)

* update oasis (#37770)

* Add uplink command minor revision and cleanup (#38532)

* commit

* Update AddUplinkCommand.cs

* Fix IsSpace call (#38548)

* Crew manifest command cleanup and LEC (#38544)

commit

* Re-Add Stamina Damage Resistances to Nukie & ERT Suits after the Test Merge. (#38526)

* Add stamina damage resists to the bloodred suits.

* Apply suggestions from code review

---------

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

* Automatic changelog update

* Update cmd-adminwho-desc (#38539)

Update admin-who-command.ftl

* Added a handheld station map to the cyborg thruster module (#38541)

* Added a station map to the borg thruster module

* Removed HandheldStationMapBorg & replaced it with HandheldStationMapUnpowered

* Automatic changelog update

* fix: correct wall AO having weird sharp edges (macOS only?) (#38552)

* Fix displacement map rendering in UI (#38042)

Fix displacement map rendering

918709cb47 changed the way humans work to completely remove the stencil mask thing for clothing cutouts, in favor of displacement maps. Except it didn't actually remove the stencil parameters from the shader prototype, so this caused the shader to render incorrectly in SpriteView instances.

I introduced a new DisplacedDraw shader that doesn't have the stencil in use, as removing the old one would probably be a more annoying breaking change.

Fixes #37629

* Automatic changelog update

* remove suffix from ChameleonControllerImplanter (#38554)

* Update implanters.yml

* Update Resources/Prototypes/Entities/Objects/Misc/implanters.yml

---------

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

* Bulldog desc fix (#38558)

Co-authored-by: Vasilis The Pikachu <vasilis@pikachu.systems>

* Automatic changelog update

* cleanup air_alarm.yml and fire_alarm.yml (#38559)

* Update air_alarm.yml

* that too

* Update air_alarm.yml

* Fix cutter machine having free techmaint floor tiles (#38557)

Fix BaseMaintTileRecipe
Changed BaseTileRecipe to BaseMaintTileRecipe

* Automatic changelog update

* Lobby Audio from static to CVar (#38375)

* Changed LobbyMusiccollection over to a Cvar and edited ContentAudioSystem.cs to use Cvar Values

* Addedd Ability to modify the lobbyMusiccollection from the command line

* Fixed changing lobby music while in the round

* Deleted uneeded duplicate line

* Removed additional duplicate lobbyplaylist line

* Alphabatized imports and refactored to use Subs.CVar

* Added error checking and default behaviour to CVar sub.

* Refactored to use TryIndex and Allowed for a empty soundcollection when a sound collection is not found. Edited Cvar comment to reflect changes.

* Made _lobbyMusicCollection nullable and addedd handling for null case where used. Also Changed LobbyMusicCollection Cvar over to audio rather than ambience.

* Update Content.Server/Audio/ContentAudioSystem.cs

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>

* Electrocute command cleanup and localization (#38563)

* hey look I knocked out a todo :shockedface:

* Update Resources/Locale/en-US/electrocution/electrocute-command.ftl

---------

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

* allow combat mode toggling when unable to interact (#38573)

allow combat mode toggling when cuffed or crit

* update xeno techmaint floor name (#38555)

Update tiles.yml

* New status effect system (#37238)

* spectra

* documentation

* added into liquid anomaly

* Update TemporaryStealthComponent.cs

* Update TemporaryStealthComponent.cs

* integrated

* new system

* mark old status effect system as obsolete

* ForcedSleeping new status effect

* work with reagents

* networking???

* Revert "integrated"

This reverts commit bca02b82bae18ae131af593d7eb86e6de2745157.

* Revert "Update TemporaryStealthComponent.cs"

This reverts commit 4a5be8c4b704a0d1ff9544b2e245d8b2701ec580.

* Revert "Update TemporaryStealthComponent.cs"

This reverts commit a4875bcb41347638854bd723d96a51c3e6d38034.

* Revert "added into liquid anomaly"

This reverts commit df5086b14bb35f1467158a36807c0f2163a16d99.

* Revert "documentation"

This reverts commit 3629b9466758cbdfa4dd5e67ece122fa2f181138.

* Revert "spectra"

This reverts commit 2d03d88c16d16ad6831c19a7921b84600daeb284.

* drowsiness status effect remove

* reagents work

* polish, remove test changes

* first Fildrance review part

* Update misc.yml

* more fildrance review

* final part

* fix trailing spaces

* sleeping status effect

* drowsiness status effect

* Create ModifyStatusEffect.cs

* some tweak

* Yay!!! Manual networking

* minor nitpick

* oopsie

* refactor: xml-docs, notnullwhen attributes, whitespaces

* fildrance and emo review

* refactor: simplify check in SharedStatusEffectsSystem by using pattern matching, TryEffectsWithComp now returns set of Entity<T, StatusEffectComponent>

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>

* Properly evaluate publish condition for master branch (#38556)

* HandsSystem Refactor (#38438)

* checkpoint

* pt 2

* pt... i forgot

* pt 4

* patch

* More test fixes

* optimization!!!

* the REAL hand system

* fix RetractableItemActionSystem.cs oversight

* the review

* test

* remove test usage of body prototype

* Update Content.IntegrationTests/Tests/Interaction/InteractionTest.cs

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

* hellcode

* hellcode 2

* Minor cleanup

* test

* Chasing the last of the bugs

* changes

---------

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

* Fix PowerCellDrawComponent draw rate (#38562)

* fix power cell draw rate

* comment

* Hand refactor bugfix (#38576)

* Fix hand refactor 2 (#38578)

* fix unwielding

* hand refactor bugfix 2

* Added a ConfirmableAction component to ActionRevertPolymorph (#38570)

* Added a ConfirmableAction component to ActionRevertPolymorph

* Update Resources/Locale/en-US/actions/actions/polymorph.ftl

---------

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

* Automatic changelog update

* Fixup Sericulture to be clonable (#38516)

* Add CloningEvent and an action entity prototype

* Remove redundant action prototype from Yaml

* Add a field that might be changed

* CR

* CR - guard statement and Dirty

* Convert DumpReagentGuideText command to LEC. (#38569)

* commit

* revert linq conversion

* fix: EyeOffset when eyes are closed (#38534)

* fix: EyeOffset when eyes are closed

* fix: Relay only blocked on eyes closed action

* cleanup: whitespace

* fix: missing cancel on PVS, dependencies

* remove: namespace import

* change: apply from review

* Apply suggestions from code review

---------

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

* Automatic changelog update

* Updated hat descriptions (#38156)

* Updated hat descriptions

* final touches

* typo fix

* final touchups

* Quote fixes

* Automatic changelog update

* Add /showaccessreaders to +MAPPING and +DEBUG (#37759)

feat: add /showaccessreaders to +MAPPING and +DEBUG

* ShowHealthBarsCommand to LEC. (#38588)

* mfw

* Update Content.Client/Commands/ShowHealthBarsCommand.cs

---------

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

* Forgor changelog for permission change (#38593)

* Automatic changelog update

* MapRenderer code fixes (#38357)

* Fix MapRenderer integration test usage to properly show output.

Added an ITestContextLike interface that can be used to properly run the integration test infrastructure OUTSIDE A TEST.

* Use System.Test.Json instead of Newtonsoft.Json for MapRenderer

* Fix map renderer JSON output being broken

I love not testing or even reading the surrounding code.

* Fix un-reusable integration instances getting leaked.

The pair state was always getting set to Ready even if the instance was killed, meaning it was getting put back into the pool even if killed.

* Mark map renderer integration instances as destructive to avoid memory leak.

* Fix file specification handling.

Map file specification is now backwards compatible again (loose filename match to search prototypes). It also supports proper direct OS filename arguments. The former is the fallback scenario is extremely important for the map server still.

Cleaned up the way that target map files are passed through the application, so mixed file/prototype specifications are now handled properly (which can be caused by the fallback behavior).

Fixes JSON data export to use the proper user-facing map name. This only works if a prototype ID is specified *or* the legacy file behavior is used.

Restructured MapPainter into an instance that has multiple functions called on it, so not all data has to be passed through a single Paint() call.

Clean up the godawful map/grid detection code. Now we just load both in a single call, because yes you can do that. This relies on LogOrphanedGrids = false in the map loader options, which I think is fine for our purposes.

Improved error handling in much of the program.

* Fix duplicate map names in map renderer output

I'm not sure *what* this output is used for, but I'm sure having it duplicated per grid isn't intentional.

* Make maprenderer command line parsing bail on unknown - options

* Fix incorrect docs for --viewer maprenderer argument

It doesn't change directory layout

* Fix parallax layer specification to not use imgur as a fucking CDN

Files are now copied to a separate folder _parallax, and these files are referenced by the parallax configuration.

Parallax data is only output when instructed to via --parallax.

This will break parallax on current map server builds, but it should be graceful. Also, that's fucking good considering we shouldn't be using imgur links. Purge it.

* Fix incorrect assert in test pair clean return

* Restore other map viewer parallax layers, fix attribution.

* This isn't a valid copyright statement but the validator forces me to enter something here.

* Hide mechanism and show mechanism commands to LEC (#38587)

commit

* Fix multi handed items (#38603)

* Automatic changelog update

* fix smart equip (#38605)

* Automatic changelog update

* New Status Effects system: Relay events (#38579)

* Fixed Snacks Mispredicting on Clients (#38522)

* Well this works

* Removed merge conflict bait

* PredictedDel

* Apply suggestions from code review

---------

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

* Improve lathe queue performance (#38583)

* Use an actual Queue

* Store ProtoIds instead of prototypes

* Network as NetListAsArray

* Remove Serializable & NetSerializable from LatheRecipePrototype

* Convert CurrentlyProducing too

* No point using NetListAsArray<T> if you're going to .ToArray() it anyways.

---------

Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>

* Quartermaster's PDA has AstroNav preinstalled (#38445)

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

* Automatic changelog update

* Bladed flatcaps are minor contraband (#38597)

* Automatic changelog update

* Stop network serializing prototypes (#38602)

* Stop network serializing prototypes

Send the damn proto ID instead.

* Fix sandbox violation

* Clean up all missing `EntitySystem` proxy method uses (#38353)

* Cleanup SharedRoleCodewordSystem (#38310)

* cleanup

* Update Content.Shared/Roles/RoleCodeword/SharedRoleCodewordSystem.cs

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

* Apply suggestions from code review

---------

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

* Toy/Plushie Inhands and Wearables (#38514)

* Automatic changelog update

* Thief Guidebook Refresh (#38586)

* Automatic changelog update

* RespiratorSystem Cleanup (#38572)

* Respirator Debodied

* Forgot about alerts (also respirator testa and events)

* Fix Urist eating air and not giving it back

* Stop nuke ops from taking in a breath then taking in a second breath causing them to get a headache from carbon dioxide poisoning and failing TryStopNukeOpsFromConstantlyFailing();

* Consts are smelly,

* Actually we don't need to raise the entity, just the component

* Don't forget to remove the unused code today, said me yesterday

* Remove all fallbacks

* Debody that too

---------

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

* 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

* New Status Effects API Overload (#38617)

* I love API changes

* Update Content.Shared/StatusEffectNew/StatusEffectSystem.API.cs

* fix

---------

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

* Fix silicons looking at their laws crashing the server (#38623)

* fix RCD ghosts not disappearing when changing hand to empty (#38622)

* Automatic changelog update

* Refactor SeeingRainbows to new status effect system (#38620)

* Make Review Requested label get applied to all opened PRs (#38625)

It previously only applied automatically to PRs that have reviews requested, which happens if the PR touches files owned by code owners. Now it applies to *all* opened PRs.

* Fix vocalization emotes (#38627)

* Update submodule to 264.0.0 (#38629)

* HoP's beret (#38601)

* added HoP beret

* added beret to loadout

* added craft to machine

* added beret to hop ddresser

* Updated the authorship

* Change on request

* added 4-spaced

* Hot fix of dresser

* 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

* Automatic changelog update

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

* Fix typo in `MinorAntagonists.xml`

Buisness → Business

* Fix typo in `YourFirstCharacter.xml`

Buisness → Business

* AddBodyPartCommand localization. (#38612)

commit

* Automatic changelog update

* Various Headphones Fixes and Tweaks (#38479)

* sprites, wearables

* neck

* icon-on sprite

* Automatic changelog update

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

Cleanup prototype instantiation in DamageTest

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

Cleanup prototype instantiation in ExplosionSystem

* Update Credits (#38646)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* fix ItemSlotsSystem debug assert (#38655)

* Automatic changelog update

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

* Automatic changelog update

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

* Tweaks to admin CSV exporting (#38531)

* Automatic changelog update

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

* Automatic changelog update

* 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

* CC Genpop and other misc fixes (#37494)

* First commit: genpop and AI satellite

* Revert AI satellite, add representative locker.

* Automatic changelog update

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

* ci: include pull request id in changelog link (#38504)

Signed-off-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>

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

* Automatic changelog update

* 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

* make telesci wreck easier (#37569)

rel

* Reduce most salvage mob health, reduce most salvage weapon damage. (#38131)

* Automatic changelog update

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

* Automatic changelog update

* Centcomm update (#38697)

* Biome rework (#37735)

* DungeonData rework

Back to fields, serializes better, just make new layers dumby.

* wawawewa

* Fix this

* Fixes

* Port the work over

* wawawewa

* zoom

* Kinda workin

* Adjust wawa

* Unloading work

* Ore + entitytable fixes

Iterate every dungeon not just last.

* Big shot

* wawawewa

* Fixes

* true

* Fixes

# Conflicts:
#	Content.Server/Procedural/DungeonJob/DungeonJob.cs

* wawawewa

* Fixes

* Fix

* Lot of work

* wawawewa

* Fixing

* eh?

* a

* Fix a heap of stuff

* Better ignored check

* Reserve tile changes

* biome

* changes

* wawawewa

* Fixes & snow

* Shadow fixes

* wawawewa

* smol

* Add layer API

* More work

* wawawewa

* Preloads and running again

* wawawewa

* Modified

* Replacements and command

* Runtime support

* werk

* Fix expeds + dungeon alltiles

* reh

---------

Co-authored-by: Nemanja <98561806+EmoGarbage404@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>

* Fix world generation (#38713)

* Fix world generation

* Remove unused impoty

* Scurrets - Audio Improvements (#38482)

* Scurret audio tuning

* Add new sfx

* Update sneezing sfx

* YAML support

* Rename a folder

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

* Automatic changelog update

* Revert biome rework (#38724)

* Revert "Fix world generation (#38713)"

This reverts commit 10fa6ff4af.

* Revert "Biome rework (#37735)"

This reverts commit fe7b96147c.

* Exo - Minor balance changes and fixes  (#38689)

* Automatic changelog update

* Fix TextLinkTag (#32203)

* Scurret PDA slot fix (#38777)

* Scurrets get emergency EVA suit access (#38778)

* Scurrets - spacing protection via adorable outfits

* ALPHABETIZATION!!

* Revert "HoP's beret (#38601)"

This reverts commit e9c90fe66d.

Please check the maintainer meeting for details

* Revert "Readds the Hypereutactic Blade for traitors, adds Hypereutatic blade for Nukies (#37182)"

This reverts commit c03afeb29c.

Please check the maintainer meeting for details

* Changelog removal

* Scurret naming fixes (#38776)

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

* Scurret displacement map fixes (#38775)

* sanitize MIDI parser (#38806)

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>

* Add Breach of Permanent Confinement to Space Law (#38663)

* Initial commit

* Fix category in text

* ADAPTATION

---------

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>
Signed-off-by: Nox38 <nebulousnox38@gmail.com>
Signed-off-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>
Co-authored-by: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com>
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: Qerd <73325910+BigfootBravo@users.noreply.github.com>
Co-authored-by: Ps3Moira <113228053+ps3moira@users.noreply.github.com>
Co-authored-by: Hannah Giovanna Dawson <karakkaraz@gmail.com>
Co-authored-by: Myra <vasilis@pikachu.systems>
Co-authored-by: crazybrain23 <44417085+crazybrain23@users.noreply.github.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: Just-a-Unity-Dev <67359748+Just-a-Unity-Dev@users.noreply.github.com>
Co-authored-by: LaCumbiaDelCoronavirus <90893484+LaCumbiaDelCoronavirus@users.noreply.github.com>
Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
Co-authored-by: Prole <172158352+Prole0@users.noreply.github.com>
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: qrwas <aleksandr.vernigora93@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com>
Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
Co-authored-by: Skybailey-dev <skybailey.01@gmail.com>
Co-authored-by: Cojoke <83733158+Cojoke-dot@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
Co-authored-by: BramvanZijp <56019239+BramvanZijp@users.noreply.github.com>
Co-authored-by: Kittygyat <202250949+Kittygyat@users.noreply.github.com>
Co-authored-by: John <50085876+AreYouConfused@users.noreply.github.com>
Co-authored-by: Dragonjspider <140023808+Dragonjspider@users.noreply.github.com>
Co-authored-by: beesterman <72782957+beesterman@users.noreply.github.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
Co-authored-by: qwerltaz <69696513+qwerltaz@users.noreply.github.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Co-authored-by: rumaks <me@rumaks.xyz>
Co-authored-by: poklj <compgeek223@gmail.com>
Co-authored-by: Łukasz Mędrek <lukasz@lukaszm.xyz>
Co-authored-by: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com>
Co-authored-by: Southbridge <7013162+southbridge-fur@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: Tiniest Shark <head.rebel@yahoo.com>
Co-authored-by: Andrew Malcolm O'Neill <105134723+maland1@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: 96flo <163569033+96flo@users.noreply.github.com>
Co-authored-by: Łukasz Lindert <lukasz.lindert@protonmail.com>
Co-authored-by: Stefano Pigozzi <me@steffo.eu>
Co-authored-by: Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
Co-authored-by: Nox <nebulousnox38@gmail.com>
Co-authored-by: Kowlin <10947836+Kowlin@users.noreply.github.com>
Co-authored-by: imatsoup <93290208+imatsoup@users.noreply.github.com>
Co-authored-by: UpAndLeaves <92269094+Alpha-Two@users.noreply.github.com>
Co-authored-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>
Co-authored-by: Alzore <140123969+Blackern5000@users.noreply.github.com>
Co-authored-by: Mora <46364955+TrixxedHeart@users.noreply.github.com>
Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com>
Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com>
Co-authored-by: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com>
Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
2025-07-08 11:59:20 +03:00
Ed
3f7bb1f5c6 ADAPTATION 2025-07-08 11:46:35 +03:00
PJBot
a8eb34d3fd Automatic changelog update 2025-07-08 01:46:54 +00:00
kosticia
f8afaa0dc9 Artifact glue reagent (#38670)
* a

* Revert "a"

This reverts commit 2b9ba4ea67a9395d30b7ab37c8065f627f1a961a.

* f

* dev it

* a?

* ad

* forgor

* Revert "f"

This reverts commit 39228c7cbe4d28ba43b73580b55e01c3979eb869.

* derandomisation!

* reviv

* flavor

* fixe

* dwwasdwasdwa

* dwasdwasdwas

* fuck you
2025-07-07 18:45:46 -07:00
Winkarst-cpu
be29077f94 Fix: Add cluwne translation in ftl (#38835)
Fix
2025-07-08 00:54:29 +02:00
PJBot
6eec2c5c51 Automatic changelog update 2025-07-07 21:44:41 +00:00
CrystallEdge Server
6fc57804cd Automatic changelog update 2025-07-08 00:43:45 +03:00
slarticodefast
46ec3b402a New science unlock: the H.A.R.M.P.A.C.K (#38824) 2025-07-07 23:43:33 +02:00
Red
2fc34bface Workbench UI improve (#1508)
* grid workbench

* categorization

* Update CP14WorkbenchWindow.xaml.cs

* conditions

* categories
2025-07-08 00:42:34 +03:00
Ed
7a8326d41e Merge remote-tracking branch 'upstream/stable' into ed-08-07-2025-upstream
# Conflicts:
#	Content.Server/Audio/ContentAudioSystem.cs
#	Content.Server/Medical/HealthAnalyzerSystem.cs
#	Content.Server/Shuttles/Systems/ShuttleSystem.cs
#	Resources/Locale/en-US/navmap-beacons/station-beacons.ftl
2025-07-08 00:40:30 +03:00
ScarKy0
366b623cd0 Fix SSD sleep misprediction (#38831)
init
2025-07-07 23:09:50 +02:00
Tayrtahn
c565b44965 Replace ValidatePrototypeId uses with ProtoId or EntProtoId (#38814)
* The easy ones

* For certain values of easy

* Easy test

* Hair

* Fix sandbox violations

* Sort usings
2025-07-07 21:57:05 +02:00
PJBot
41f737e8f3 Automatic changelog update 2025-07-07 19:20:35 +00:00
Голубь
114ec579f5 JumpBoots Attempt №2 (#36862)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: unknown <wainzor1337@gmail.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-07-07 21:19:28 +02:00
Winkarst-cpu
bb02be1dc7 Cleanup: Remove `TryInsert method from the DisposableSystem` and use event subscriptions instead (#38819)
Cleanup
2025-07-07 12:13:35 -07:00
PJBot
1c59e087d5 Automatic changelog update 2025-07-07 18:54:25 +00:00
Smugman
f1902ad0e2 Branded lighters addition (#35514)
* newlighters

* port complete

* donk pocket box addition

* should fix test fail, proper credit

* captalisation issue

* fixed

* typo corrected

* removed accidental change to combat bakery

* fixed lock message, made NT flippo start fueled.

* Requested changes

* fixed discount dan

* moved matchbox

* requested changes, discount dan more broken than ever (somehow)

* unbungle

* uhhhhh

* maybe fixes?

* changed inheritance

* fixed enum?

* nevermind

* finally fixed

* breaking changes

* inheritance unbungled
2025-07-07 14:53:17 -04:00
slarticodefast
7b2346563f Merge stable into master (#38825) 2025-07-07 19:19:47 +02:00
SlamBamActionman
2181585030 Add Breach of Permanent Confinement to Space Law (#38663)
* Initial commit

* Fix category in text
2025-07-07 19:01:52 +02:00
Winkarst-cpu
ae3b3b6173 Cleanup: Remove `TelephoneComponent.RequiresPower` (#38823)
* Cleanup

* Forgot about yml
2025-07-07 17:55:09 +02:00
slarticodefast
b1fb01fed5 Stable merge (#38822) 2025-07-07 14:39:12 +02:00
slarticodefast
a03c35a9bc sanitize MIDI parser (#38806)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2025-07-07 14:23:45 +02:00
CrystallEdge Server
e7b73354ab Automatic changelog update 2025-07-07 11:51:43 +03:00
paige404
99812387ac Birch Furniture by Sable (#1438)
* Add birch furniture construction to the wooden furniture graphs. Birch versions of the bed, table, counter, chair, bench, window, and roof are included.

* Fix malformed licenses

* Add birch table frame to fix failing integration tests. Sprite still required

* Add sable's birch table frame.
2025-07-07 11:50:38 +03:00
PJBot
b2866de07a Automatic changelog update 2025-07-07 05:09:01 +00:00
AsnDen
021551ede3 Golden pai (#38549)
* Golden pai

* Make golden PAI public and rare

* Golden PAI = legendary salvage
2025-07-07 01:07:52 -04:00
PJBot
52a8414f71 Automatic changelog update 2025-07-06 23:51:17 +00:00
Andrew Malcolm O'Neill
c183458056 Reducing the amount of space in the gogo hat (#38808)
Reducing the amount of space in the hat from 7*4 to 4*3 to make a bit more sense with the fact it is only a hat.

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-07-07 01:50:11 +02:00
PJBot
2aca49bb55 Automatic changelog update 2025-07-06 23:43:20 +00:00
ArtisticRoomba
faa4508b65 Fix storage voice control bug after handssystem refactor (#38810) 2025-07-07 01:42:13 +02:00
Hannah Giovanna Dawson
5f7db3b151 Scurret displacement map fixes (#38775) 2025-07-07 00:42:13 +02:00
Hannah Giovanna Dawson
f5fd2dcb76 Scurret naming fixes (#38776)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-07-07 00:30:44 +02:00
Vasilis The Pikachu
575694e5b5 Changelog removal 2025-07-07 00:10:04 +02:00
Vasilis The Pikachu
87b8f1c7df Revert "Readds the Hypereutactic Blade for traitors, adds Hypereutatic blade for Nukies (#37182)"
This reverts commit c03afeb29c.

Please check the maintainer meeting for details
2025-07-07 00:02:16 +02:00
Vasilis The Pikachu
b650d3298e Revert "HoP's beret (#38601)"
This reverts commit e9c90fe66d.

Please check the maintainer meeting for details
2025-07-07 00:01:55 +02:00
PJBot
51ccaa7ab4 Automatic changelog update 2025-07-06 16:55:27 +00:00
slarticodefast
22e3d533d3 Catchable items, playable basketball (#37702)
* catching

* fix

* improve

* fix linter

* cleanup

* fix prediction

* do the same here

* fix comment
2025-07-06 09:54:20 -07:00
CrystallEdge Server
54bf6028c3 Automatic changelog update 2025-07-06 17:38:48 +03:00
Red
b0594f563d New MRP ruleset for server (#1334)
* rules

* Update Dev.toml

* github feedback applied

* ru feedback applied

* gogenych part feedback

* мукиф
2025-07-06 17:37:43 +03:00
CrystallEdge Server
595eb5418d Automatic changelog update 2025-07-06 17:36:56 +03:00
Red
30d7da4b2b Ed 06 07 2025 guards trading (#1505)
* guard trading

* Refactor trading reputation special and update guard assets

Renamed CP14AddGlobalReputationSpecial to CP14AddTradingReputationSpecial and updated its logic to use a configurable set of factions. Updated job prototypes for guard, guard commander, investigator, and merchant to use the new special and specify relevant factions. Also updated guard helmet textures and metadata.
2025-07-06 17:35:49 +03:00
slarticodefast
cb21b72600 merge staging into master (#38799) 2025-07-06 15:21:26 +02:00
lzk
81a4429189 fix centcom pda (#38796) 2025-07-06 15:20:57 +02:00
Hannah Giovanna Dawson
654a459351 Scurrets get emergency EVA suit access (#38778)
* Scurrets - spacing protection via adorable outfits

* ALPHABETIZATION!!
2025-07-06 15:08:56 +02:00
poklj
8f381157b3 Move moth movement modifiers to the Base (#38795) 2025-07-06 14:07:55 +02:00
CrystallEdge Server
2a187659ba Automatic changelog update 2025-07-06 14:30:03 +03:00
Red
6b6d6ae3f9 return guards to Comoss (#1504)
* return guards to Comoss

* salary system

* Update Frigid_Coast.yml

* Update migration.yml
2025-07-06 14:28:57 +03:00
B_Kirill
7ea3120a07 Cleanup warnings: CS0414 (#38793)
Cleanup
2025-07-06 12:28:29 +02:00
PJBot
2ba10ce02c Automatic changelog update 2025-07-06 01:00:41 +00:00
Nemanja
ab201b6e82 Stasis bed cleanup and bugfixes. (#38762)
* Stasis bed sent to shed

* Code Review

* Code Review 2
2025-07-06 02:59:31 +02:00
Andrew Malcolm O'Neill
7aaccb5b98 Fixing incorrect headset being given to QM visitor (#38785) 2025-07-06 02:57:31 +02:00
github-actions[bot]
08e76606a9 Update Credits (#38786)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-07-06 02:56:41 +02:00
āda
40f6fac8e0 Fix incorrect conditions on black pepper's forced cough (#38783)
no one to blame but myself

Co-authored-by: iaada <iaada@users.noreply.github.com>
2025-07-05 17:27:08 -07:00
Tayrtahn
e042b3acab Log an error when adding an admin log containing a null char (#38782)
* Log an error when adding an admin log containing a null char

* Also log LogType and LogImpact

* Remove them
2025-07-05 17:07:53 -07:00
Boaz1111
bd0b4857da Meta.json cleanup - pins.rsi (#38781)
cleanup
2025-07-05 23:40:02 +02:00
CrystallEdge Server
a45ba883af Automatic changelog update 2025-07-06 00:10:08 +03:00
Red
6570b1b4b6 Public market + Solutions requests (#1503)
* Add platform markup to trading platform prices

Introduces a PlatformMarkupProcent field to CP14TradingPlatformComponent and applies it to price calculations in both client and server logic. Adds a new public trading platform entity with a higher markup and updates related sprites and metadata.

* Add platform markup percent to selling platforms

Introduces a PlatformMarkupProcent field to CP14SellingPlatformComponent, allowing selling platforms to apply a markup or markdown to item prices. Updates server logic to use this value when calculating payouts and UI state. Adds a new public selling platform entity with a lower markup in the trade_platform.yml prototype.

* Add Brad Potions trading requests prototype

Introduces a new YAML prototype defining multiple cp14TradingRequest entries for the BradPotions faction, each specifying requirements for various potion effects with minimum purity and amount.

* Apply platform markup to selling prices and payouts

Updated the selling request control and platform window to factor in the platform's markup percentage when displaying prices. Adjusted the server-side payout logic to multiply the payout by the platform markup percentage, ensuring consistency between client display and server rewards.

* replace mapping to public platforms

* bug + remove eepy potions request

* Clarify purity requirement in workbench reagent text

Updated the reagent requirement string in both English and Russian locale files to indicate that the required purity is '{$purity}%+' instead of just '{$purity}%'. This clarifies that the purity must be at least the specified percentage.
2025-07-06 00:09:03 +03:00
slarticodefast
5ec8f86541 merge staging into master (#38779) 2025-07-05 22:34:16 +02:00
Hannah Giovanna Dawson
3540e2e44a Scurret PDA slot fix (#38777) 2025-07-05 22:15:54 +02:00
CrystallEdge Server
ae89cb8821 Automatic changelog update 2025-07-05 20:45:43 +03:00
Red
14b0fc5b4a Workbench and crystals (#1502)
* solutionResource

* fuck research system + QoL workbench update

* colorful quartz returns

* Refactor workbench skill requirements handling

Replaces the SkillRequired requirement with a direct RequiredSkills field on CP14WorkbenchRecipePrototype. Updates client and server logic to check skills directly, simplifying recipe skill checks and related UI logic.

* Initial commit

Add initial project files and setup.
2025-07-05 20:44:38 +03:00
CrystallEdge Server
c01351c1ef Automatic changelog update 2025-07-05 17:39:11 +03:00
gogenych
ab26a9b127 first (#1501) 2025-07-05 17:38:05 +03:00
CrystallEdge Server
70c0a2255e Automatic changelog update 2025-07-05 14:55:15 +03:00
Red
a68da0eacd Magotech (#1498)
* Add brass material, bars

Introduces the new brass material, including its prototype, stack, and bar entities, along with associated sprites. Updates English and Russian localization files to include brass and adds a new construction condition for mana power. Also moves glass sheet entities to the correct file.

* Add CP14ManaFilled construction condition

Introduces a new construction condition that checks if an entity's mana container is fully filled. Includes examination feedback and construction guide entry for user clarity.

* electromancy respawn

* Update T2.yml

* Update meta.json

* ffif

* Update speed_ballade.yml

* Update thaumaturgy.yml

* Update undead.yml
2025-07-05 14:54:09 +03:00
PJBot
750ce78965 Automatic changelog update 2025-07-05 09:30:06 +00:00
beck-thompson
14668f2414 Minor escape menu UX improvements (#38650) 2025-07-05 12:28:59 +03:00
CrystallEdge Server
82876b2c6f Automatic changelog update 2025-07-05 10:08:20 +03:00
Kit
84ec067d57 grer terra (#1500) 2025-07-05 10:07:15 +03:00
PJBot
94fa94d4d4 Automatic changelog update 2025-07-05 06:30:03 +00:00
Perry Fraser
6cefc412a3 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-07-04 23:28:56 -07:00
Kyle Tyo
78e8d98137 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>
2025-07-05 01:14:12 +02:00
PJBot
24d0453609 Automatic changelog update 2025-07-04 23:08:03 +00:00
Mora
edbde7b7b9 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>
2025-07-04 19:06:55 -04:00
slarticodefast
b36aedde6b Cleanup warning in StomachSystem (#38748)
you did not see this
2025-07-04 18:19:31 -04:00
PJBot
a4ac8eec82 Automatic changelog update 2025-07-04 21:51:51 +00:00
Perry Fraser
4905e097c8 feat: allow mopping evaporating puddles (#38743) 2025-07-04 23:50:44 +02:00
Tayrtahn
f09bade8e7 Validate remaining ProtoId strings (#38747)
Validate remaining ProtoId strings
2025-07-04 22:55:45 +02:00
Tayrtahn
3a278bca8b Validate ProtoIds 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
2025-07-04 22:48:55 +02:00
Arthur Fiorese de Andrade
c3267c6db0 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>
2025-07-04 22:41:49 +02:00
Ed
a5dd7f3a68 Update CP14RoundEndSystem.CBT.cs 2025-07-04 21:49:52 +03:00
Perry Fraser
bfb73a1aad fix: don't default to uncharged sprite state for cells (#38730) 2025-07-04 12:15:24 -04:00
CrystallEdge Server
63d02d8325 Automatic changelog update 2025-07-04 18:33:49 +03:00
Kit
17873f415b Solutions tweaks (#1497)
* soothing cooling

* warming well warming

* incind buff

* Ice cooling unsafe

* blood potions nerfs

* Stamina Chromium slime
2025-07-04 18:32:44 +03:00
CrystallEdge Server
b681c41f79 Automatic changelog update 2025-07-04 17:37:04 +03:00
Nim
cb01a6b66c Reprise of doors, vials, and labeler (#1495)
* birch door

* hand labeler

* vial

* fix door

* vials

* frame
2025-07-04 17:35:59 +03:00
CrystallEdge Server
50862d7045 Automatic changelog update 2025-07-04 17:30:25 +03:00
Kit
94455f55f2 Saturating and moisture recipes (#1496)
* Bestia Essence

* Target Recipies

* Essence bestia stuff

* Magic type fix
2025-07-04 17:29:20 +03:00
Nemanja
d0c067f006 Fix human skin tone distribution (#38701) 2025-07-04 15:22:26 +02:00
Perry Fraser
1a2e827674 fix: Use PredictedQueueDel for gib spell (#38729) 2025-07-04 14:48:16 +02:00
Minerva
d5d3864784 Typofixes for figurine dialogue (#38737)
* Typofixes for figurine dialogue

* Forgot two
2025-07-04 14:46:23 +02:00
Kyle Tyo
4e73c67d1b Tiny Tiny Cleanup of the EyeClosingSystem. (#38734)
Update EyeClosingSystem.cs
2025-07-03 23:58:56 -07:00
PJBot
7b6cc535dd Automatic changelog update 2025-07-04 05:09:52 +00:00
Velken
e82064916a [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
2025-07-03 22:08:45 -07:00
PJBot
a2ac401db3 Automatic changelog update 2025-07-04 02:03:42 +00:00
Tiniest Shark
71d839fec4 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>
2025-07-03 19:02:35 -07:00
Tayrtahn
9186b65b14 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
2025-07-03 18:11:31 -07:00
Minerva
fba22e831d Fixes missing underwear FTLs (#38720) 2025-07-03 17:50:00 -07:00
PJBot
22b2b0561a Automatic changelog update 2025-07-04 00:05:33 +00:00
Andrew Malcolm O'Neill
35dfaa0ff7 More guidebook fixes (#38699)
* First commit
- Resolving a few different pages, fixing typos and updating spellings and phrasing to be more coherent.

* More slight changes

* Reverting slightly the salvage page change

* Fixing Science wording inconsistency

* Few other small guidebook fixes
- Updating NukeOps page to properly refer to "Corpsman" rather than "Agent".
- Typo and slight wording change in Traitors.xml.
- Updating small typos in Antagonists.xml and Zombies.xml pages.
2025-07-03 17:04:27 -07:00
PJBot
8648841714 Automatic changelog update 2025-07-03 23:50:33 +00:00
Mora
c6739b2c89 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>
2025-07-03 16:49:27 -07:00
Leon Friedrich
32f0ba340a Fix TextLinkTag (#32203) 2025-07-03 21:11:21 +02:00
PJBot
f6946f1db7 Automatic changelog update 2025-07-03 18:52:49 +00:00
SlamBamActionman
44617ae841 Exo - Minor balance changes and fixes (#38689) 2025-07-03 11:51:40 -07:00
Pieter-Jan Briers
e99fc501a6 Revert biome rework (#38724)
* Revert "Fix world generation (#38713)"

This reverts commit 10fa6ff4af.

* Revert "Biome rework (#37735)"

This reverts commit fe7b96147c.
2025-07-03 20:48:04 +02:00
PJBot
047a49a505 Automatic changelog update 2025-07-03 16:01:46 +00:00
ArtisticRoomba
f874459092 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>
2025-07-03 18:00:34 +02:00
Hannah Giovanna Dawson
1bc3d37d40 Scurrets - Audio Improvements (#38482)
* Scurret audio tuning

* Add new sfx

* Update sneezing sfx

* YAML support

* Rename a folder
2025-07-03 17:28:44 +02:00
Ed
18f58c9fe5 move speed ballade to electro 2025-07-03 18:16:03 +03:00
Kowlin
10fa6ff4af Fix world generation (#38713)
* Fix world generation

* Remove unused impoty
2025-07-03 16:44:37 +02:00
Winkarst-cpu
433ef5dd27 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>
2025-07-03 14:10:20 +02:00
metalgearsloth
fe7b96147c Biome rework (#37735)
* DungeonData rework

Back to fields, serializes better, just make new layers dumby.

* wawawewa

* Fix this

* Fixes

* Port the work over

* wawawewa

* zoom

* Kinda workin

* Adjust wawa

* Unloading work

* Ore + entitytable fixes

Iterate every dungeon not just last.

* Big shot

* wawawewa

* Fixes

* true

* Fixes

# Conflicts:
#	Content.Server/Procedural/DungeonJob/DungeonJob.cs

* wawawewa

* Fixes

* Fix

* Lot of work

* wawawewa

* Fixing

* eh?

* a

* Fix a heap of stuff

* Better ignored check

* Reserve tile changes

* biome

* changes

* wawawewa

* Fixes & snow

* Shadow fixes

* wawawewa

* smol

* Add layer API

* More work

* wawawewa

* Preloads and running again

* wawawewa

* Modified

* Replacements and command

* Runtime support

* werk

* Fix expeds + dungeon alltiles

* reh

---------

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
2025-07-03 00:36:06 -04:00
Emisse
fdf3d6715e Centcomm update (#38697) 2025-07-02 19:31:19 -07:00
PJBot
f432943625 Automatic changelog update 2025-07-03 01:09:14 +00:00
Mora
752957a819 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>
2025-07-02 21:08:06 -04:00
PJBot
4116006390 Automatic changelog update 2025-07-03 00:55:10 +00:00
Alzore
aded799ae5 Reduce most salvage mob health, reduce most salvage weapon damage. (#38131) 2025-07-02 17:54:02 -07:00
LaCumbiaDelCoronavirus
70ed8835c6 make telesci wreck easier (#37569)
rel
2025-07-02 18:27:56 -06:00
slarticodefast
38232d2255 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
2025-07-02 19:20:31 -04:00
PJBot
8597acd030 Automatic changelog update 2025-07-02 20:51:29 +00:00
Andrew Malcolm O'Neill
80d733a152 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.
2025-07-02 22:50:22 +02:00
little-meow-meow
a6c58aba12 ci: include pull request id in changelog link (#38504)
Signed-off-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>
2025-07-02 13:26:03 -07:00
Princess Cheeseballs
579b38b92b Improvements and fixups for New Status Effect API (#38660) 2025-07-02 20:46:30 +03:00
CrystallEdge Server
0df4baa772 Automatic changelog update 2025-07-02 17:18:45 +03:00
Nim
dc1922c6f2 Food and cutlery (#1483)
* food and cutlery

* goblet

* jelly

* ham in cheese

* Klanir stuffed pumpkin

* fix

* jelly fix
2025-07-02 17:17:39 +03:00
Viator-MV
b808990720 fort (#1494) 2025-07-02 17:16:50 +03:00
PJBot
159c187971 Automatic changelog update 2025-07-02 03:15:49 +00:00
UpAndLeaves
32a019c6b6 CC Genpop and other misc fixes (#37494)
* First commit: genpop and AI satellite

* Revert AI satellite, add representative locker.
2025-07-01 21:14:37 -06:00
Tayrtahn
e63905ce5f 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
2025-07-02 02:57:57 +02:00
Tayrtahn
49370410ad Validate CloningSettingsPrototypes (#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>
2025-07-01 20:31:39 -04:00
imatsoup
9a87d3fce2 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>
2025-07-01 20:49:15 +02:00
CrystallEdge Server
693d104425 Automatic changelog update 2025-07-01 16:25:09 +03:00
gogenych
890af47853 The carpets update! (#1461)
* carpets!

* fix

* second fix

* 3 fix

* crafts 2

* locale

* some changes

* price

* names

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-07-01 16:24:03 +03:00
PJBot
bbf6f6b69c Automatic changelog update 2025-07-01 10:27:00 +00:00
slarticodefast
7bf6dd9f15 fix water coolers (#38681) 2025-07-01 03:25:52 -07:00
CrystallEdge Server
40facd187a Automatic changelog update 2025-07-01 13:11:13 +03:00
Kit
d8fa6f0a0b STAMINA SOLUTIONS!!!! (#1492) 2025-07-01 13:10:08 +03:00
CrystallEdge Server
a5f1b5eb1f Automatic changelog update 2025-07-01 13:08:15 +03:00
Nim
4dc06e42f1 Wooden weapon (#1471)
* wooden weapon

* Stamina
2025-07-01 13:07:09 +03:00
Nox
89f982fe1c 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>
2025-06-30 19:49:44 -04:00
Kyle Tyo
0009ad32ab Dsay Dirty and Follow commands converted to LEC and localized. (#38666)
* commit

* whoopwhoopwhoop
2025-07-01 01:33:59 +02:00
PJBot
bfefb91574 Automatic changelog update 2025-06-30 21:10:26 +00:00
Kowlin
32f5551e2a Tweaks to admin CSV exporting (#38531) 2025-06-30 23:09:16 +02:00
Red
4586ca50b7 Revert "Update CP14RoundEndSystem.CBT.cs (#1490)" (#1491)
This reverts commit 42841d93d7.
2025-06-30 10:52:13 +03:00
Kyle Tyo
34825464dc Power stat and nuke codes commands get some LEC love. (#38585)
* commit

* requested changes.
2025-06-30 03:41:55 +02:00
Nox
cd2ce56aef 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>
2025-06-30 00:14:12 +02:00
CrystallEdge Server
bf5a1c074f Automatic changelog update 2025-06-29 20:59:44 +03:00
Ermucat
293053d4e7 Adds kick whitelist (#1493)
* kick whitelist

* well shit
2025-06-29 20:58:38 +03:00
PJBot
ec2d4ddd5e Automatic changelog update 2025-06-29 16:22:22 +00:00
BramvanZijp
7951db15ca Allow the Command & Super door remotes to use the access of their user. (Re-creation of PR due to changes to game balance) (#35536) 2025-06-29 18:21:14 +02:00
Ed
a06144b083 fix second wind alert 2025-06-29 19:15:12 +03:00
Ed
874cb2e310 comoss update 2025-06-29 18:21:49 +03:00
PJBot
5d191d7b87 Automatic changelog update 2025-06-29 14:35:08 +00:00
slarticodefast
4bd437272f fix ItemSlotsSystem debug assert (#38655) 2025-06-29 10:33:58 -04:00
CrystallEdge Server
9a87f943d0 Automatic changelog update 2025-06-29 17:08:01 +03:00
Tudibidab
71f16a4976 MobFairy (#1465)
* MobFairy

New mob Fairy. Magic parasite.
Mana Splitting now deals damage when the target has no mana.

* Update attributions.yml

Добавил чёрточки

* Update fairy.yml

* Update modifier_sets.yml

* Update fairy.yml

* Update meta.json

* Update meta.json

* Update meta.json

* Update fairy.yml

* Update fairy.yml

* Update mobs.yml

* Update fairy.yml

* Update fairy.yml

* Update fairy.yml

* Update fairy.yml

* minor fixes

* add to demiplane generation

---------

Co-authored-by: Viator-MV <egor44148@gmail.com>
Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-06-29 17:06:55 +03:00
Ed
e949969d5c Update misc.yml 2025-06-29 17:06:10 +03:00
Ed
93e5d45323 Update CP14RoundEndSystem.CBT.cs 2025-06-29 16:58:36 +03:00
CrystallEdge Server
f36e81780b Automatic changelog update 2025-06-29 15:35:32 +03:00
JustSome1Nearby
a1c995fdd7 Birch Grips (Craft, Sprite) (#1488)
* BirchHandle

* BirchHandle2

* GRAAAH JUST CALL IT BIRCH ITS ALLREADY WOOD

* Delete gitlog

* Delete BirchWood for just wood

* Delete BirchWood2

* Update Resources/Prototypes/_CP14/Recipes/Workbench/Workbench/misc.yml

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-29 15:34:27 +03:00
CrystallEdge Server
08d5d7514b Automatic changelog update 2025-06-29 13:39:10 +03:00
Red
af0a502dab Alchemy furnace integration (#1489)
* furnace integration + fix gates

* fix

* d
2025-06-29 13:38:05 +03:00
Red
42841d93d7 Update CP14RoundEndSystem.CBT.cs (#1490) 2025-06-29 13:24:55 +03:00
Red
39a0d6567e Update round end rules and scheduling logic (#1480)
* Update round end rules and scheduling logic

Refactored weekend whitelist logic to include both Saturday and Sunday, adjusted language switching to specific days, and changed playtime limits to allow play only between 18:00 and 21:00 except on Mondays. Updated announcement and shutdown times to match new schedule. These changes align server behavior with new event and playtime policies.

* Update CP14RoundEndSystem.CBT.cs
2025-06-29 12:57:41 +03:00
CrystallEdge Server
fdce21dff8 Automatic changelog update 2025-06-29 12:52:15 +03:00
Nim
104eb4310f Monster blood (#1481)
* monster blood

* taikamyrky
2025-06-29 12:51:10 +03:00
Red
777c5f9a29 Electromancy magic branch (#1485)
* basic electromancy tree

* electric strike

* Update CP14SpellProjectile.cs

* fix throwing
2025-06-29 12:20:47 +03:00
github-actions[bot]
90915075fb Update Credits (#38646)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-06-29 03:00:28 +02:00
CrystallEdge Server
bb74192a26 Automatic changelog update 2025-06-29 00:03:09 +03:00
Red
ecadfb3ea5 Big content update (#1484)
* Add investigator's cloak entity and sprites

Introduced a new investigator's cloak for senior investigators, including its entity definition and associated sprites. Also updated helmet sprites for the guard role.

* Add Investigator job to CP14 roles and assets

Introduces the Investigator job, including English and Russian localization, job prototype, loadout, play time tracker, and status icon. Updates department and role loadout configurations to include the new job. Enables setPreference for Guard and Guard Commander jobs. Adds Investigator job icon and updates related metadata.

* Rebalance mana splitting spell parameters

Reduced mana cost from 15 to 10, adjusted mana change effect, and updated spell event to use a toggleable action with new cast time and distance threshold. Also changed visual effect colors for the spell impact.

* job spawner

* remove mana splitting from mana glove

* Update tools.yml

* reduce memory points to 0.5 for tier magics

* Add CP14 spell to create beams and extend beam system

Introduces CP14SpellCreateBeam, a new spell effect for creating beams using the shared beam system. Adds a virtual TryCreateBeam method to SharedBeamSystem and overrides it in BeamSystem to support shared spell functionality.

* athletic branch refactor

* second wind skill

* minor fixes

* remove skeletons specific spells

* small magic splitting

* Update migration.yml

* clear references

* guidebook species update, -0.5 people memory, innate athletic to carcat, nerf night vision

* disable guards again
2025-06-29 00:02:04 +03:00
Tayrtahn
2f37923db6 Cleanup prototype instantiation in ExplosionSystem (#38642)
Cleanup prototype instantiation in ExplosionSystem
2025-06-28 21:34:15 +02:00
Tayrtahn
97f0bab5b8 Cleanup prototype instantiation in DamageTest (#38639)
Cleanup prototype instantiation in DamageTest
2025-06-28 20:12:36 +02:00
Ed
c04f08c2ac Update peace_ballade.yml 2025-06-28 17:43:29 +03:00
PJBot
6c8749bc61 Automatic changelog update 2025-06-28 14:02:36 +00:00
Boaz1111
0f74bac415 Various Headphones Fixes and Tweaks (#38479)
* sprites, wearables

* neck

* icon-on sprite
2025-06-28 16:01:28 +02:00
Ed
811a91aa8f Update audio_music.yml 2025-06-28 16:32:10 +03:00
Ed
41b7f74262 Update CP14DemiplaneMapBoundUserInterface.cs 2025-06-28 16:24:42 +03:00
PJBot
6db9f65046 Automatic changelog update 2025-06-28 11:12:16 +00:00
Kyle Tyo
2c4cae2af9 AddBodyPartCommand localization. (#38612)
commit
2025-06-28 13:11:08 +02:00
CrystallEdge Server
005032d0af Automatic changelog update 2025-06-28 14:05:23 +03:00
Red
36d0692bf8 fix dash (#1482) 2025-06-28 14:04:17 +03:00
Stefano Pigozzi
3ffeeef836 Fix typos in guidebook: Buisness → Business (#38636)
* Fix typo in `MinorAntagonists.xml`

Buisness → Business

* Fix typo in `YourFirstCharacter.xml`

Buisness → Business
2025-06-28 12:49:32 +02:00
PJBot
80ce9b94c3 Automatic changelog update 2025-06-28 00:14:34 +00:00
Tayrtahn
948ecc8279 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
2025-06-28 02:13:24 +02:00
Łukasz Lindert
7f530bb7ad patchfor broken NetworkConfiguratorLinkMenu (#38632)
fix
2025-06-28 02:10:52 +02:00
96flo
e9c90fe66d HoP's beret (#38601)
* added HoP beret

* added beret to loadout

* added craft to machine

* added beret to hop ddresser

* Updated the authorship

* Change on request

* added 4-spaced

* Hot fix of dresser
2025-06-27 18:28:38 -04:00
Pieter-Jan Briers
a120730291 Update submodule to 264.0.0 (#38629) 2025-06-27 13:32:29 -07:00
Tayrtahn
a09e47e857 Fix vocalization emotes (#38627) 2025-06-27 15:18:27 -04:00
Pieter-Jan Briers
69674a1710 Make Review Requested label get applied to all opened PRs (#38625)
It previously only applied automatically to PRs that have reviews requested, which happens if the PR touches files owned by code owners. Now it applies to *all* opened PRs.
2025-06-27 20:23:12 +02:00
Red
bb116e3219 Refactor SeeingRainbows to new status effect system (#38620) 2025-06-27 21:19:04 +03:00
PJBot
ad2616a53f Automatic changelog update 2025-06-27 16:40:56 +00:00
slarticodefast
6be925ab91 fix RCD ghosts not disappearing when changing hand to empty (#38622) 2025-06-27 19:39:49 +03:00
Ed
ad2aaeb4c4 Update precurser.yml 2025-06-27 18:30:16 +03:00
Ed
7667db6d0c Update precurser.yml 2025-06-27 18:29:16 +03:00
Pieter-Jan Briers
5bc778d42e Fix silicons looking at their laws crashing the server (#38623) 2025-06-27 15:03:16 +02:00
Princess Cheeseballs
cf4a883f11 New Status Effects API Overload (#38617)
* I love API changes

* Update Content.Shared/StatusEffectNew/StatusEffectSystem.API.cs

* fix

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-27 14:00:20 +02:00
ArtisticRoomba
1d2907fb4e 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
2025-06-27 13:37:00 +02:00
CrystallEdge Server
e0c8851579 Automatic changelog update 2025-06-27 12:56:41 +03:00
Red
0b7b8be299 Alchemist trading tweaks (#1479)
* Remove poison and vomit effects from precursor reagents

Eliminated poison-related health changes and vomiting effects from several reagent definitions in precurser.yml. Also adjusted the cold damage value for one reagent. These changes likely aim to rebalance reagent effects or simplify their behavior.

* Rename and update vial prototypes to use small parent

Renamed vials_filled_reagents.yml to vials_filled_precursor.yml and updated all vial entities to use 'CP14VialSmall' as their parent instead of 'CP14VialTiny'. This standardizes the vial size for these precursor reagents.

* Update vials_filled_precursor.yml

* Update vials_filled_precursor.yml

* agaric added

* Update vials_filled_precursor.yml
2025-06-27 12:55:36 +03:00
Princess Cheeseballs
d7d83bd87c RespiratorSystem Cleanup (#38572)
* Respirator Debodied

* Forgot about alerts (also respirator testa and events)

* Fix Urist eating air and not giving it back

* Stop nuke ops from taking in a breath then taking in a second breath causing them to get a headache from carbon dioxide poisoning and failing TryStopNukeOpsFromConstantlyFailing();

* Consts are smelly,

* Actually we don't need to raise the entity, just the component

* Don't forget to remove the unused code today, said me yesterday

* Remove all fallbacks

* Debody that too

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-06-26 22:33:43 -04:00
PJBot
e916135a9c Automatic changelog update 2025-06-27 02:04:30 +00:00
Andrew Malcolm O'Neill
d70589b36f Thief Guidebook Refresh (#38586) 2025-06-26 19:03:23 -07:00
PJBot
e4026e9f22 Automatic changelog update 2025-06-27 01:08:36 +00:00
Tiniest Shark
a1cf490360 Toy/Plushie Inhands and Wearables (#38514) 2025-06-26 18:07:29 -07:00
slarticodefast
a3b82e9afd Cleanup SharedRoleCodewordSystem (#38310)
* cleanup

* Update Content.Shared/Roles/RoleCodeword/SharedRoleCodewordSystem.cs

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

* Apply suggestions from code review

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-27 02:27:25 +02:00
Tayrtahn
75db49f9c0 Clean up all missing EntitySystem proxy method uses (#38353) 2025-06-26 16:50:49 -07:00
Pieter-Jan Briers
73df3b1593 Stop network serializing prototypes (#38602)
* Stop network serializing prototypes

Send the damn proto ID instead.

* Fix sandbox violation
2025-06-26 19:27:23 -04:00
PJBot
bb7e7c3e5f Automatic changelog update 2025-06-26 22:58:54 +00:00
Qerd
18d9a03ef6 Bladed flatcaps are minor contraband (#38597) 2025-06-26 15:57:46 -07:00
Ed
64410a53b5 fix #1470 2025-06-27 01:20:08 +03:00
PJBot
c8f7279895 Automatic changelog update 2025-06-26 22:10:45 +00:00
Hitlinemoss
787b3b3ffd Quartermaster's PDA has AstroNav preinstalled (#38445)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-26 15:09:36 -07:00
Tayrtahn
3a8974f574 Improve lathe queue performance (#38583)
* Use an actual Queue

* Store ProtoIds instead of prototypes

* Network as NetListAsArray

* Remove Serializable & NetSerializable from LatheRecipePrototype

* Convert CurrentlyProducing too

* No point using NetListAsArray<T> if you're going to .ToArray() it anyways.

---------

Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
2025-06-27 00:08:01 +02:00
CrystallEdge Server
13b8801220 Automatic changelog update 2025-06-27 00:26:52 +03:00
Red
11ad05058e Remove mithril lock & keys from Cozy House (#1478)
* Add LumeraMagicVision skill and update trading requests

Introduces the LumeraMagicVision skill to the Lumera demigod skill tree, granting access to the Magic Vision action. Also removes several 30-minute jewelry trading requests (Ruby, Emerald, Sapphire, Topaz) from thaumaturgy.yml. Additionally, improves price scanner logic to skip items with non-positive price.

* Remove Rep 3 trading positions from cozy_house.yml

Deleted the CP14KeyMithrilBlank and CP14LockMithril trading positions for reputation level 3 from the cozy_house.yml file, leaving only the gold lock product for HomeDecor.
2025-06-27 00:25:47 +03:00
Southbridge
cc2a89ed86 Fixed Snacks Mispredicting on Clients (#38522)
* Well this works

* Removed merge conflict bait

* PredictedDel

* Apply suggestions from code review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-26 22:32:36 +02:00
Red
283d0863a0 New Status Effects system: Relay events (#38579) 2025-06-26 23:05:58 +03:00
CrystallEdge Server
3d2e39b86d Automatic changelog update 2025-06-26 22:21:24 +03:00
Red
ddbca29b73 Add LumeraMagicVision skill and update trading requests (#1477)
Introduces the LumeraMagicVision skill to the Lumera demigod skill tree, granting access to the Magic Vision action. Also removes several 30-minute jewelry trading requests (Ruby, Emerald, Sapphire, Topaz) from thaumaturgy.yml. Additionally, improves price scanner logic to skip items with non-positive price.
2025-06-26 22:20:18 +03:00
CrystallEdge Server
101a9a0928 Automatic changelog update 2025-06-26 20:18:28 +03:00
Nim
16ed544eb2 fix cucumber (#1476) 2025-06-26 20:17:22 +03:00
PJBot
27914467fd Automatic changelog update 2025-06-26 16:18:33 +00:00
slarticodefast
f0f7d68727 fix smart equip (#38605) 2025-06-26 12:17:25 -04:00
PJBot
268b8d1947 Automatic changelog update 2025-06-26 15:30:31 +00:00
slarticodefast
faec9bd83b Fix multi handed items (#38603) 2025-06-26 17:29:22 +02:00
CrystallEdge Server
980ac2e6ef Automatic changelog update 2025-06-26 18:19:25 +03:00
Alexsey Bezyuk
9c393ff8b5 [TRADE] Reagent and Food price rework and 4 new contracts: Butchers, Diary, Gardeners and Tailors (#1453)
* contracts

* meat prices

* cheese and egg

* blue and aged cheese

* aged and blue parts and slices

* cheese json

* contracts

* cheese and egg

* blue and aged cheese

* aged and blue parts and slices

* cheese json

* revert meat prices

* Cheese prices

* egg price remove

* revert meat prices

* factions

* contracts

* meta.json

* remove monster part price

* sickle, hoe

* up price per unit

* Trade ref, cheese fix, plate PhysCompos

* Update coins.yml

* prices reagents rework, raw nutrient decrease, food container rework

* prices

* materials, remove bars

* tailors faction

* factions

* sprite fixes

* enyity fix

* Physical compositions

* tailord dye and loot in crate

* comment

* Ore buy to bar

* move to buy positions

* factions and contracts in main page

* move flint position

* Квартц вместо стекла

* quartz price up

* glass sheet sell position

* price precurser. Again

* essences prices

* english comment

* ooops missed

* price up

* sell requests and small flowers variations

* yaml fix

* test fix?

* flowers => to vials

* 2 => 1 count

* flowers icons

* remove small variations

* clear

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-26 18:18:19 +03:00
CrystallEdge Server
52a6c9ed64 Automatic changelog update 2025-06-26 16:32:56 +03:00
Fr0goo
9fa706720d changed Flem pallete blah blah blah blah (#1475)
flem uhhhhhh femfifimmifeiefmifiemfemfimefieemefieimfemfei. he looks better now
2025-06-26 16:31:49 +03:00
Kyle Tyo
4af6c8461f Hide mechanism and show mechanism commands to LEC (#38587)
commit
2025-06-26 15:00:44 +02:00
Pieter-Jan Briers
bebc077fcc MapRenderer code fixes (#38357)
* Fix MapRenderer integration test usage to properly show output.

Added an ITestContextLike interface that can be used to properly run the integration test infrastructure OUTSIDE A TEST.

* Use System.Test.Json instead of Newtonsoft.Json for MapRenderer

* Fix map renderer JSON output being broken

I love not testing or even reading the surrounding code.

* Fix un-reusable integration instances getting leaked.

The pair state was always getting set to Ready even if the instance was killed, meaning it was getting put back into the pool even if killed.

* Mark map renderer integration instances as destructive to avoid memory leak.

* Fix file specification handling.

Map file specification is now backwards compatible again (loose filename match to search prototypes). It also supports proper direct OS filename arguments. The former is the fallback scenario is extremely important for the map server still.

Cleaned up the way that target map files are passed through the application, so mixed file/prototype specifications are now handled properly (which can be caused by the fallback behavior).

Fixes JSON data export to use the proper user-facing map name. This only works if a prototype ID is specified *or* the legacy file behavior is used.

Restructured MapPainter into an instance that has multiple functions called on it, so not all data has to be passed through a single Paint() call.

Clean up the godawful map/grid detection code. Now we just load both in a single call, because yes you can do that. This relies on LogOrphanedGrids = false in the map loader options, which I think is fine for our purposes.

Improved error handling in much of the program.

* Fix duplicate map names in map renderer output

I'm not sure *what* this output is used for, but I'm sure having it duplicated per grid isn't intentional.

* Make maprenderer command line parsing bail on unknown - options

* Fix incorrect docs for --viewer maprenderer argument

It doesn't change directory layout

* Fix parallax layer specification to not use imgur as a fucking CDN

Files are now copied to a separate folder _parallax, and these files are referenced by the parallax configuration.

Parallax data is only output when instructed to via --parallax.

This will break parallax on current map server builds, but it should be graceful. Also, that's fucking good considering we shouldn't be using imgur links. Purge it.

* Fix incorrect assert in test pair clean return

* Restore other map viewer parallax layers, fix attribution.

* This isn't a valid copyright statement but the validator forces me to enter something here.
2025-06-26 14:47:39 +02:00
CrystallEdge Server
9a76a9712e Automatic changelog update 2025-06-26 13:50:58 +03:00
Red
81e044758f Magical vision skill (#1467)
* fix firewave error spamming

* basic magic traces entities

* Add magical vision system and mana trace entities

Introduces the magical vision mechanic, including the CP14MagicVisionComponent, marker entities, and related systems for tracking and displaying magical traces. Adds new actions, skill integration, localization strings, and icons for magical vision and trace markers. Magic traces are now spawned on spell use and mob state changes, with directional pointers and localized descriptions.

* Show time passed for magic vision markers

Adds a display of the time elapsed since a magic vision marker was spawned, using a localized string. Updates English and Russian locale files with the new 'cp14-magic-vision-timed-past' entry.

* aura imprints

* Update critical and death messages for inclusivity

Revised the 'critical' and 'dead' messages in both English and Russian locale files to use more inclusive language, replacing references to 'magical creature' with 'someone'.

* Move magic vision spawn on mob state change to server

Transferred the logic for spawning magic vision markers on mob state changes (Critical/Dead) from CP14SharedMagicVisionSystem to CP14AuraImprintSystem. This centralizes the event handling on the server side. Also increased the duration of magic vision markers for spell usage from 20 to 50 seconds.

* Integrate magic vision with visibility mask system

Added a CP14MagicVision flag to VisibilityFlags and updated the magic vision and religion systems to use the visibility mask system. Magic vision markers now use the Visibility component, and visibility is refreshed when relevant components are added or removed. Removed client-side toggling logic in favor of server-driven visibility.

* drowsiness overlay

* noir shader

* sfx design
2025-06-26 13:49:53 +03:00
CrystallEdge Server
ee036e8372 Automatic changelog update 2025-06-26 13:47:44 +03:00
SenorJaba
0cc7b6bf36 Asian clothing! (#1459)
* Asian clothing

* Fix
2025-06-26 13:46:38 +03:00
Nim
ee1222dcf4 slice (#1472) 2025-06-26 13:45:52 +03:00
PJBot
966122f7a5 Automatic changelog update 2025-06-26 10:44:47 +00:00
Perry Fraser
b75aaf5e56 Forgor changelog for permission change (#38593) 2025-06-26 12:43:40 +02:00
Kyle Tyo
2073eb33d0 ShowHealthBarsCommand to LEC. (#38588)
* mfw

* Update Content.Client/Commands/ShowHealthBarsCommand.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-26 11:54:07 +02:00
Perry Fraser
a594c7b667 Add /showaccessreaders to +MAPPING and +DEBUG (#37759)
feat: add /showaccessreaders to +MAPPING and +DEBUG
2025-06-25 23:23:05 +02:00
PJBot
3851e942cc Automatic changelog update 2025-06-25 20:28:34 +00:00
Hitlinemoss
69a426c630 Updated hat descriptions (#38156)
* Updated hat descriptions

* final touches

* typo fix

* final touchups

* Quote fixes
2025-06-25 22:27:27 +02:00
PJBot
a708e09b17 Automatic changelog update 2025-06-25 20:23:13 +00:00
Łukasz Mędrek
1ba0191808 fix: EyeOffset when eyes are closed (#38534)
* fix: EyeOffset when eyes are closed

* fix: Relay only blocked on eyes closed action

* cleanup: whitespace

* fix: missing cancel on PVS, dependencies

* remove: namespace import

* change: apply from review

* Apply suggestions from code review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-25 22:22:05 +02:00
Kyle Tyo
433893679e Convert DumpReagentGuideText command to LEC. (#38569)
* commit

* revert linq conversion
2025-06-25 22:02:01 +02:00
poklj
1c58b6efc7 Fixup Sericulture to be clonable (#38516)
* Add CloningEvent and an action entity prototype

* Remove redundant action prototype from Yaml

* Add a field that might be changed

* CR

* CR - guard statement and Dirty
2025-06-25 21:50:47 +02:00
PJBot
76d11cc0e1 Automatic changelog update 2025-06-25 17:53:42 +00:00
rumaks
e3580f076a Added a ConfirmableAction component to ActionRevertPolymorph (#38570)
* Added a ConfirmableAction component to ActionRevertPolymorph

* Update Resources/Locale/en-US/actions/actions/polymorph.ftl

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-25 20:52:32 +03:00
slarticodefast
747dfe901e Fix hand refactor 2 (#38578)
* fix unwielding

* hand refactor bugfix 2
2025-06-25 12:26:20 -04:00
slarticodefast
296283c0b1 Hand refactor bugfix (#38576) 2025-06-25 17:41:19 +02:00
slarticodefast
d998d71ce2 Fix PowerCellDrawComponent draw rate (#38562)
* fix power cell draw rate

* comment
2025-06-25 09:38:57 -04:00
Nemanja
524725d378 HandsSystem Refactor (#38438)
* checkpoint

* pt 2

* pt... i forgot

* pt 4

* patch

* More test fixes

* optimization!!!

* the REAL hand system

* fix RetractableItemActionSystem.cs oversight

* the review

* test

* remove test usage of body prototype

* Update Content.IntegrationTests/Tests/Interaction/InteractionTest.cs

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

* hellcode

* hellcode 2

* Minor cleanup

* test

* Chasing the last of the bugs

* changes

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2025-06-25 15:13:03 +02:00
Myra
6cffa8aabe Properly evaluate publish condition for master branch (#38556) 2025-06-25 13:56:47 +02:00
Red
78a94730be New status effect system (#37238)
* spectra

* documentation

* added into liquid anomaly

* Update TemporaryStealthComponent.cs

* Update TemporaryStealthComponent.cs

* integrated

* new system

* mark old status effect system as obsolete

* ForcedSleeping new status effect

* work with reagents

* networking???

* Revert "integrated"

This reverts commit bca02b82bae18ae131af593d7eb86e6de2745157.

* Revert "Update TemporaryStealthComponent.cs"

This reverts commit 4a5be8c4b704a0d1ff9544b2e245d8b2701ec580.

* Revert "Update TemporaryStealthComponent.cs"

This reverts commit a4875bcb41347638854bd723d96a51c3e6d38034.

* Revert "added into liquid anomaly"

This reverts commit df5086b14bb35f1467158a36807c0f2163a16d99.

* Revert "documentation"

This reverts commit 3629b9466758cbdfa4dd5e67ece122fa2f181138.

* Revert "spectra"

This reverts commit 2d03d88c16d16ad6831c19a7921b84600daeb284.

* drowsiness status effect remove

* reagents work

* polish, remove test changes

* first Fildrance review part

* Update misc.yml

* more fildrance review

* final part

* fix trailing spaces

* sleeping status effect

* drowsiness status effect

* Create ModifyStatusEffect.cs

* some tweak

* Yay!!! Manual networking

* minor nitpick

* oopsie

* refactor: xml-docs, notnullwhen attributes, whitespaces

* fildrance and emo review

* refactor: simplify check in SharedStatusEffectsSystem by using pattern matching, TryEffectsWithComp now returns set of Entity<T, StatusEffectComponent>

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-06-25 07:41:35 -04:00
lzk
8be0b7a614 update xeno techmaint floor name (#38555)
Update tiles.yml
2025-06-25 12:37:09 +02:00
qwerltaz
f96705f5fc allow combat mode toggling when unable to interact (#38573)
allow combat mode toggling when cuffed or crit
2025-06-25 11:54:57 +02:00
Kyle Tyo
09d7f7adf6 Electrocute command cleanup and localization (#38563)
* hey look I knocked out a todo :shockedface:

* Update Resources/Locale/en-US/electrocution/electrocute-command.ftl

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-25 04:28:13 +02:00
beesterman
34e12f2c82 Lobby Audio from static to CVar (#38375)
* Changed LobbyMusiccollection over to a Cvar and edited ContentAudioSystem.cs to use Cvar Values

* Addedd Ability to modify the lobbyMusiccollection from the command line

* Fixed changing lobby music while in the round

* Deleted uneeded duplicate line

* Removed additional duplicate lobbyplaylist line

* Alphabatized imports and refactored to use Subs.CVar

* Added error checking and default behaviour to CVar sub.

* Refactored to use TryIndex and Allowed for a empty soundcollection when a sound collection is not found. Edited Cvar comment to reflect changes.

* Made _lobbyMusicCollection nullable and addedd handling for null case where used. Also Changed LobbyMusicCollection Cvar over to audio rather than ambience.

* Update Content.Server/Audio/ContentAudioSystem.cs

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2025-06-25 04:22:28 +02:00
PJBot
dea275489e Automatic changelog update 2025-06-25 01:47:24 +00:00
Dragonjspider
f9b98fde37 Fix cutter machine having free techmaint floor tiles (#38557)
Fix BaseMaintTileRecipe
Changed BaseTileRecipe to BaseMaintTileRecipe
2025-06-25 03:46:17 +02:00
lzk
a56e1324e8 cleanup air_alarm.yml and fire_alarm.yml (#38559)
* Update air_alarm.yml

* that too

* Update air_alarm.yml
2025-06-25 00:10:29 +02:00
PJBot
df1f45e002 Automatic changelog update 2025-06-24 22:00:05 +00:00
John
d28594c73d Bulldog desc fix (#38558)
Co-authored-by: Vasilis The Pikachu <vasilis@pikachu.systems>
2025-06-24 14:58:58 -07:00
lzk
1ba31a4fbe remove suffix from ChameleonControllerImplanter (#38554)
* Update implanters.yml

* Update Resources/Prototypes/Entities/Objects/Misc/implanters.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-24 23:55:10 +02:00
CrystallEdge Server
37bb72d293 Automatic changelog update 2025-06-25 00:09:26 +03:00
Sefaia
a8c741a6b5 Merge pull request #1468 from Sefaia/Leftover-Executions
Added Executions for Non-Modular Weapon Base and Ice Dagger.
2025-06-25 00:08:20 +03:00
PJBot
6c36242847 Automatic changelog update 2025-06-24 20:48:36 +00:00
Pieter-Jan Briers
f5071238ce Fix displacement map rendering in UI (#38042)
Fix displacement map rendering

918709cb47 changed the way humans work to completely remove the stencil mask thing for clothing cutouts, in favor of displacement maps. Except it didn't actually remove the stencil parameters from the shader prototype, so this caused the shader to render incorrectly in SpriteView instances.

I introduced a new DisplacedDraw shader that doesn't have the stencil in use, as removing the old one would probably be a more annoying breaking change.

Fixes #37629
2025-06-24 22:47:29 +02:00
Perry Fraser
9529cdfa2e fix: correct wall AO having weird sharp edges (macOS only?) (#38552) 2025-06-24 22:39:18 +02:00
PJBot
886f5cb32c Automatic changelog update 2025-06-24 15:36:46 +00:00
Kittygyat
7e7fbba403 Added a handheld station map to the cyborg thruster module (#38541)
* Added a station map to the borg thruster module

* Removed HandheldStationMapBorg & replaced it with HandheldStationMapUnpowered
2025-06-24 18:35:39 +03:00
lzk
30310d4bd2 Update cmd-adminwho-desc (#38539)
Update admin-who-command.ftl
2025-06-24 17:13:48 +02:00
PJBot
7e61e11a69 Automatic changelog update 2025-06-24 13:05:24 +00:00
BramvanZijp
53f367d689 Re-Add Stamina Damage Resistances to Nukie & ERT Suits after the Test Merge. (#38526)
* Add stamina damage resists to the bloodred suits.

* Apply suggestions from code review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-24 15:04:15 +02:00
Kyle Tyo
eb359fb760 Crew manifest command cleanup and LEC (#38544)
commit
2025-06-24 13:06:20 +02:00
metalgearsloth
4f42564265 Fix IsSpace call (#38548) 2025-06-24 12:48:29 +02:00
Kyle Tyo
71eed923ae Add uplink command minor revision and cleanup (#38532)
* commit

* Update AddUplinkCommand.cs
2025-06-24 12:46:35 +02:00
IProduceWidgets
33a1e59211 update oasis (#37770) 2025-06-24 03:29:05 -07:00
Red
aae579b710 Update labeler.yml 2025-06-24 12:26:24 +03:00
Pieter-Jan Briers
d1badfe699 Update submodule to 263.0.0 (#38524) 2025-06-24 18:25:49 +10:00
PJBot
41bfd954cc Automatic changelog update 2025-06-24 07:57:24 +00:00
metalgearsloth
60341cb245 Add wall-based ambient occlusion (#38276)
* Add wall ambient occlusion

* wawawewa

* Work

* cvars

* Comment to make slart happy
2025-06-24 17:56:14 +10:00
Red
0542ed4446 Upstream sync (#1464)
* Fix soap recipe so it actually works (#37923)

Change soap recipe

* Automatic changelog update

* Automatic changelog update

* Added security mime mask (#37890)

* Added security mime mask

* Improved security mime mask equipped sprites

* Improved security mime mask icon sprite

* meta.json spacing fix

* Reorganized Turret Prototypes (#37863)

* Reorganized turret prototypes

* Added circuit board to migrations

* Fixed frequencies

* Fixed typos and set the base control panel to abstract since it's technically not constructable yet

* Fixed the typo in the migrations

* Addressed changes

* Whitespace fixes

* Whitespace check fix

---------

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>

* Automatic changelog update

* Sellable syndicate contraband (#37835)

* Sellable syndicate contraband

* 1984 tests, laughible

* Balancing

* Standardized running and walking speed debuffs for equipped gear. (#37828)

Co-authored-by: RedBookcase <Usualmoves@gmail.com>

* Add hair back to hardhats (#38086)

adds hair back to hardhats

* Automatic changelog update

* Access Reader Refactor (#37772)

* Initial commit

* Integration test fix

* Removed redundant dirtying of accessreader

* Adds individual Bulldog magazines to the syndicate uplink (#37917)

* Brief commit to update branch

* added more magazines to uplink, corrected spelling in ftl file for uplink, corrected sprite state for incendiary bulldog mag

* removed incendiary drum, increased cost of slug drum

* Emogarbage swoop

---------

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

* Automatic changelog update

* Improve Potted Plant Movability and Availability (#37591)

* Added Purchasable Potted Plant Crate

* Removing some whitespace that made it in elsewhere

* Making Potted Plants Items and pickupable

* Revert Making potted plants not fade

This reverts part of commit a50a7def80c06e5be68a37263306007739952a28.

* Adding self to credits

* Fixing sus spacing

* Automatic changelog update

* Rifle crate order (#35535)

* lecter crate and gift

* revert cargo gift security armor change

* rifle cost down to 8000 spesos

* Automatic changelog update

* Muzzles reduce emote sound (#34444)

* Muzzles reduce emote sound

* update based on review comments

* review comments

* Automatic changelog update

* Added Scrap Armor [Reupload]. (#37601)

* Added Scrap Armor v2.

* Added a note to scrap helmet about vision reduction.

* Removed protection from step triggers.

* The patient needs broken kneecaps to live.

* Add in missing tag

* Missing tags pt 2

---------

Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>

* Automatic changelog update

* Make improvised explosive devices minor contra (#38088)

pipe bomb and fire bombs are minor contra

* Automatic changelog update

* emergency shuttle emergency lockers (#38095)

* Cleanup unused/redundant dependencies (#38099)

* Shark toys use the bite animation. (#38113)

* Automatic changelog update

* Fix throwing items into disposal units (#38106)

* Increase throwing into disposal chance (#38116)

* Automatic changelog update

* Don't show climb verb for objects that cannot be climbed (#38115)

fix climb verb

* Reduce Liquid Frezon Duration (#38100)

testing

* Add player autofill to rename command. (#38074)

* simple enough

* switch to CompletionResult.FromOptions and CompletionHelper.SessionNames

* cleanup

* Light Up Landmines (#38092)

* Adjust landmines to have unshaded lights.

* Someday I will give myself credit for the work I do.

* Adjust animation speed.

* Automatic changelog update

* fix wallmount vending machine dispense direction (#38112)

fix wallmount vending machine direction

* Automatic changelog update

* Fix serialization of `SunShadowCycleComponent` (#38002)

* Use a struct to hold the items for `Directions` in `SunShadowComponent`, fix serialization.

* actually make them datafields...

* Add NetSerializable to datadef

* this is why we can't have nice things

* ShowEmergencyShuttleCommand and MeleeSpreadCommand LEC conversion. (#37993)

progress

* Add name to chameleon controller implanter (#38117)

Update implanters.yml

* Automatic changelog update

* chem.yml cleanup (#38129)

Update chem.yml

* Reduce disabler capacity to 16 shots (#36019)

* 14 shots

* 14 to 16

* Automatic changelog update

* Genpop wall lockers (#38102)

* sprites

* genpop wall lockers

* number 5 alive

* slight boilerplate code, thank you slarti

* fix: allow ejecting diamonds from lathes/silos (#38132)

* Automatic changelog update

* make PacifiedComponent session specific (#38137)

* Fix stripping window for more than 2 hands (#37577)

* Automatic changelog update

* Forbid string literals for `NpcFactionSystem` methods (#38140)

* Add ForbidLiteral attribute to NpcFactionSystem methods

* Cleanup resulting warnings

* Update Credits (#38143)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* No raffle for space carp (#38101)

No raffle for carp

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

* Automatic changelog update

* adjreagent now accepts float (#38134)

* adjreagent now accepts float

* var

* Automatic changelog update

* MapManager warnings cleanup Server Edition 2003 (#36781)

* now you see me

* unused depen

* test fail fix attempt 1

* test fail fix attempt 2

* fix test fail attempt 3

* shot in the dark.

* Does this work?

* import cleanup

* taking a shot at this.

* Convert PersistenceSaveCommand to LocalizedEntityCommands.

* requested changes

* requested changes. also dealt with improperly named private const

* Update Content.Server/GameTicking/GameTicker.Spawning.cs

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

* Update Content.Server/GameTicking/GameTicker.Spawning.cs

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

* Convert PlanetCommand to LocalizedEntityCommand

* Update BiomeSystem.cs

* Update Content.Server/Salvage/SalvageSystem.Runner.cs

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

* Update Content.Server/Procedural/DungeonSystem.Rooms.cs

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

* Update Content.Server/Salvage/SpawnSalvageMissionJob.cs

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

* Update Content.Server/Station/Systems/StationBiomeSystem.cs

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

* revert to latest master.

* slartis suggestion.

* Update SetMapAtmosCommand.cs

* cleanup

* Update PersistenceSaveCommand.cs

* finish localizing persistencesavecommand

* this is icky, I change.

* :sigh:

* revert whatever I did here?

* oh I see, some inconsistencies.

* revert this

* Update PlanetCommand.cs

* move this ftl to the commands folder

---------

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

* Missing contraband tags on explosives (#37521)

* Firebombs as minor contraband

* Pipebombs as minor contraband

* Seismic charge as cargo/sec contra (like crushers)

* Modular payloads

* Automatic changelog update

* Improved Health examination text (#38126)

* more health examinations

* better blood

* fix

* tweaks

* sizeable

* silicon fix

* tweaks

* bleeding color tweaks

* fix

* Automatic changelog update

* Assorted device and core inhands (#38162)

* Assorted device and core inhands

* whoops forgot the thief objective

* i missed literally on pixel on the fulton argh

* inhand pinpointer update

* Automatic changelog update

* Add FixedPoint2TypeParser (#38169)

* Update submodule to 262.0.0 (#38174)

* Fix eating and drinking verbs showing up after a short delay and making your verb UI bounce (#38164)

* Fix eating and drinking verbs showing up after a short delay and making your verb UI bounce

* Usings fix

* Usings fix

* Usings fix

* Usings fix

* CVar fix

* Predicted ppups

* Openable predicted popup

* Fix audio prediction

* Automatic changelog update

* Allow cargo request computers to send orders to the primary account (#37943)

* Automatic changelog update

* Revert "Add trailing whitespace check workflow" (#38179)

Revert "Add trailing whitespace check workflow (#37367)"

This reverts commit be35f6e9ce.

* Give unique names to all curtain construction recipes (#38182)

* Give unique names to all curtain construction recipes

* Duplicate entry

* Cleanup unused fields in `DrinkSystem` (#38181)

Cleanup unused fields in DrinkSystem

* New Recipes: Breakfasts (#37279)

* Adds full english and american breakfasts and respective recipes

* sprite tweak and added random spawner

* reagent rebalance

* reagent re-rebalance

* spawner ID fix

* ACTUALLY actually fixed the spawner, also description changes

* reagent re-re-rebalance

* spawner fix so the linter stops screaming at me

* different check failed kekw

* trailing whitespace fix attempt #1

* identation fix? i think?

* indetation fix part 2, also vox cant eat this anymore

* more yaml fixes

---------

Co-authored-by: DispenserDev <mariousjoaquin@gmail.com>

* Typo fix in coffin description (#38193)

* Automatic changelog update

* Derotate and remove several maps, remove unused maps (#38190)

* Automatic changelog update

* Emergency Shuttles Update (#38186)

* Automatic changelog update

* hi-viz vest laser reflect (#38180)

* Update vests.yml

* Update vests.yml

* Update Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml

---------

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

* Automatic changelog update

* Bring back low pressure damage to its unnerfed value (#38196)

* Automatic changelog update

* Remade the AI Camera Static Shader (#38093)

Redid the camera static shader

* Automatic changelog update

* stop amber AI core from inducing seizures (#38209)

* Automatic changelog update

* HOTFIX: Stop AI turrets from causing flickering lights (#38212)

no power draw

* Add missing locale in Criminal Records Computer (#38217)

add missing filter locale

* WHYYYYYYY (cleanup) (#38220)

* WHYYYYYYYY

* Delete Resources/Locale/en-US/actions/actions/rootable.ftl

* cleanup mirror.yml (#38222)

* Add stamina damage resists to the bloodred raid/hard-suits (and ERT hardsuits). [TEST MERGE] (#37040)

Add stamina damage resists to the bloodred suits.

* Automatic changelog update

* Fix missing bike horn implant cooldown (#38237)

* Automatic changelog update

* Cleanup `ChameleonJobLoadoutTest` (#38229)

Cleanup ChameleonJobLoadoutTest

* Fix construction menu grid view quirky button selection (#38214)

* make hover and info use construction proto name, not entity name

* recipeButtons uses IDs as keys, not names

* return making item green when selected

* Replace Speech bubble time accumulator with TimeSpan (#38241)

* Replace SpeechBubble time accumulator with TimeSpan

* CurTime -> RealTime

* Add test that entity prototypes don't use LocIds for name/description (#38234)

* Add test that entity prototypes don't use LocIds for name/description

* Fix violation

* Guitar Sprite Fix (#38207)

* Modified Guitar Sprites

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Attributions

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

---------

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Add technology to tech disk names (#38157)

* Automatic changelog update

* Forbid string literals for `SharedToolSystem` methods (#38250)

* Forbid string literals for ToolSystem methods

* Cleanup violations

* Sort usings

* Fix mops, rags, and towels interacting with drains (#38252)

added the stuff

* Automatic changelog update

* Cherrypick 38241

* Makes the grenadine bottle start closed. (#38219)

* whywhywhy

* removes unneeded line

* Automatic changelog update

* Fix reinforced plasma window blocking laser shots (#38041)

* init

* stuff

* Automatic changelog update

* Improve some `BinSystem` functionality (#38262)

* BinSystem improvements

* Prevent double-add

* Cleanup 2 `SpriteComponent.GetPrototypeTextures` uses (#38263)

Cleanup 2 SpriteComponent.GetPrototypeTextures uses

* Add the instrument names to the MIDI channel selector (#38083)

* Add the instrument to the MIDI channel selector

* Reviews

Adds support for chained masters
Makes the channel UI update on its own when the midi changes (Works with bands too!)

* add to admin logs and limit track count

* Limit track names by length too

* remove left over comment

* Requested changes

* Reviews

* Automatic changelog update

* Add disambiguation to most construction menu recipe names (#38197)

* Magazine rsi Cleanup + Magazine Type Recolor (#37709)

* Automatic changelog update

* Basilisk Nerfs for Gameplay (#38089)

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

* Automatic changelog update

* Launchers require wielding (#38110)

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

* Automatic changelog update

* Cleanup exosuit fab recipes, add modules category (#38069)

* Fix `StomachSystem` PVS error (#38268)

Fix StomachSystem PVS error

* scar availability for more species (#35645)

* :D

* updated for new scars

* small eye scar

* Automatic changelog update

* Minor Relic improvements (#38269)

* Automatic changelog update

* Removed Toys.rsi, reorganize toy RSIs, broad /Fun/ cleanup. (#37189)

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

* Add propeller hat & swirl lollipop (#38260)

* Automatic changelog update

* 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

* Fix some popup issues with pipe layer changes (#38244)

* fix: only show pipe layer popups to the user changing them

* fix: don't show pipe layer subfloor popup when not using a screwdriver

* fix: properly pass down user and used for serverside pipe layer changes

Technically this doesn't matter as the Shared codepath for this method
doesn't actually use these on the server: only the user is used for a
clientside popup. Still, will be good to have these for future changes
that might need them.

* Make BODAs start with Russian accent. (#38275)

long hand of Kremlin

* fix: Correct respath for lizard smite icon (#38288)

* Fix gas analyzer and anom scanner wrong state (#38285)

* Fix gas analyzer and anomaly scanner UI activation issue

* save

* fix comment

* milkalyzer

* Automatic changelog update

* Use correct on-head rainbow lizard plushie sprite (#38286)

* Prediction for use of utensil on incompatible food (#38297)

Prediction our beloved

* Automatic changelog update

* Fix crafting steps with modular machine parts (#38299)

fixed lines that were messing with construction menu entries for machine parts

* Automatic changelog update

* Transparent tear gas (#36440)

* tweaked tear gas

* changed color of tear gas

* sped up metabolism rate of tear gas

* sped up tear gas passing more

* reduced tear gas content in grenades

* added threshold for better effect end timing

* removed clickable component from foams

* Suggestion changes

* Hide in spawn menu

---------

Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>

* Automatic changelog update

* Fix visitor mindshields (#36537)

* Make visitor mindshields removable, and give disaster victims mindshields.

* Fix whitespace

* Fix ALL the whitespace

* Automatic changelog update

* Rat King changed to Antag (#38124)

* Changed rat king to be antag
Rat King guide updated to show antag rules

Initial infected given zombie faction
Zombies given zombie faction too (not sure if redundant or not)

* Given zombie faction to Initial Infected and Zombies in mind_roles

* Changed MindRoleGhostRoleAntag to MindRoleGhostRoleSoloAntagonist

removed components from antag listings

* Removed changes for zombies

* Update Resources/Prototypes/Roles/Antags/zombie.yml

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

* Update Resources/Prototypes/ai_factions.yml

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

* Changed mob prototype to match

* Forgot solo again

---------

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

* Automatic changelog update

* fix missing locale for Undergarment (#38304)

* Automatic changelog update

* Fix puncturase cauterizing bleeding (#38289)

fix puncturase cauterizing bleeding

* Automatic changelog update

* Added monkey/kobold emergency EVA sprites & the ability for them to wear them. (#37660)

* Added monkey/kobold emergency eva suit sprites, and the ability for them to wear it

* Added tag, fixed indentation

* Ok actually fixed the indentation this time

* Automatic changelog update

* Elkridge - Major Update (#38259)

* swap HOP and vault, fix cams, new genpop, shit ton of stuff

* fixed some initialised open doors, added posters to HOP/EVA

* implemented suggestions and feedback, lots of things

* Automatic changelog update

* Zombies won't attack Initial Infected (#38128)

* Added Zombie faction roles everywhere that makes sense for initial infected to be associated with Zombies.

* Adding faction component to round start zombie. (not hopeful)

* Removed stupid attempts and added zombie faction component to the zombie system when the player is given the ability to force themself to zombify.

* Changed use of "zombie" for ProtoId<NpcFactionPrototype>

* Update Content.Server/Zombies/ZombieSystem.cs

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

* Update Content.Server/Zombies/ZombieSystem.cs

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

* Removed faction component from ZombieOutbreak event. Shouldn't cause problems with the event as II gets component with their ability to self zombify.

---------

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

* Added warden's uniforms to their dresser. (#38283)

* Added warden's uniforms to their dresser.

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

* Added warden's guitar

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

* Removed armored coats and guitar from warden dresser.

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

---------

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

* Automatic changelog update

* Add corgium (#37951)

* Add corgi essence

* Adjust spacing concerns

* Renamed 'corgi essence' to 'corgium' based on maintainer discussion

* Automatic changelog update

* Add pet bag - wearable backpack for pets (#37440)

* Add pet bag

* Trailing whitespace moment

* make the linter happy

* Fix trailing whitespace concern.

* Fix Construction component oopsy-daisy

* yml guideline moment

* remove weird extra whitespace

* make the maintainer happy

* Adjusted bag visuals based on feedback

* Allow the fox aghost admin to use pet bags

* Automatic changelog update

* Fix for holoparasite's ability to attack the host through mech (#36659)

* Automatic changelog update

* Retractable items system + Arm Blade action (#38150)

* Automatic changelog update

* Give Syndie-Cats Syndie Access (#38318)

* Update animals.yml

* Update animals.yml

* Automatic changelog update

* Update Credits (#38321)

Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>

* Ensure large entities don't get stuck on conveyor belt corners (#37466)

* Initial commit

* Also avoid the friction change doesn't make turned-off conveyor belts continue going

* Ensurecomp on conveyor starting

* i give up

* Minor brackets edit

* Documentation

* Automatic changelog update

* Armblade Tweaks (#38337)

init

* Exo Station - Upstream Playtest Version (#33144)

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

* Automatic changelog update

* Randomized Markings (#34765)

randomized markings

* Automatic changelog update

* Add hints towards flash protection to all items which provide it (#37267)

* Update welding.yml

* Update FlashSystem.cs

Add subscriber event for flash immunity examine text

* Create flash-immunity-component.ftl

* Removed changed description text

* change to use entity version

* fixed mistake

* Revert "Randomized Markings" (#38345)

* Add group for loadouts (#36951)

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

* Automatic changelog update

* Commands for adding and removing actions (#38317)

* Automatic changelog update

* Fix Smart Corgis not being targeted by hostile faction entities (#38349)

* Automatic changelog update

* Exo - Day 1 Patch (#38348)

* Automatic changelog update

* Cleanup duplicate dependency in `AddActionCommand` (#38360)

Cleanup duplicate dependency in AddActionCommand

* Gun Inhand Sprite Fixes (#38294)

* cobra, viper, pulse pistol

* c20 and wt550

* l6 + attributions

* Thieves can innately pickpocket - thieving gloves rework (#38123)

* Thieves can innately pickpocket (#107)

Pickpocketing a skyrim guard's armor off

(cherry picked from commit 21b9f1ddb251ea3c7c6803e78871abefcaecbfb4)

* this isnt moff

* Make predicted, cleanup

* !skating-basketball

* orks are NOT the best trollface

* Implement much more sensible component replication prevention

---------

Co-authored-by: DuckManZach <144298822+duckmanzach@users.noreply.github.com>

* Automatic changelog update

* Objectives that do not fit requirements are now deleted (#38365)

* Fix

* Update Content.Server/Objectives/ObjectivesSystem.cs

Thanks Tayrathn!

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

---------

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

* predicted hyposprays (#38046)

* G O I D A

* how

* now proper

* a

* Update HypospraySystem.cs

* good catch

* Apply suggestions from code review

---------

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

* Automatic changelog update

* Adds the Estoc DMR to the syndicate uplink (#38122)

* Initial commit, adds the prototype, sprites and attributions, entries into syndicate uplink for weapon bundle and magazines

* Reduced weapon spread when wielded

* minor visual updates to sprites

* slightly adjusted burst rate down

* Update duffelbag.yml

---------

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

* Automatic changelog update

* Spider web visuals update (#38175)

* web update

* Update Resources/Prototypes/Entities/Structures/spider_web.yml

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

* Update Resources/Prototypes/Entities/Structures/spider_web.yml

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

* review

---------

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

* fix: no longer accidentally rotate held items (#38331)

Signed-off-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>

* Fix SharedActionSystem spamming errors (#38358)

* Fixed mis-labeled component filter (#38383)

* Automatic changelog update

* Fix adjacent north/south cable terminals breaking east/west HV cable (#38377)

* Fix some crafting menu oddities (#38372)

* Automatic changelog update

* Command resolve and LEC conversion batch 3 (#38378)

* I'm just a silly goober

* requested changes

* Update Content.Server/Interaction/TilePryCommand.cs

---------

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

* remove explosions from destroying a explosive payload (#38049)

* Automatic changelog update

* Increased Borg Density (Drag Speeds) (#38232)

Raised borg drag speeds

* Automatic changelog update

* Thief objectives now verify animal stealing objectives if they actually exist (#38332)

* Holy shit it's real. Theres actually animals in this joint

* WHITESPACE SPOTTD KILL KILL KILL

* Accidentally did a bad yaml oopsie

* Apply suggestions from code review

* when the stars kiss the sky

* Apply suggestions from code review

---------

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

* Automatic changelog update

* fix: erase expedition disks when their map is deleted (#38322)

* fix: erase expedition disks when their map is deleted

* fix: include paused entities in disk query, add dirty

* Scale down 4k parallax textures (#38390)

* Scale down 4k textures, add false preload to new parallaxes

* Add filter effect, also make sure the preload yml actually has the correct name...

* Switch Discord integration to use NetCord instead of Discord.Net (#38400)

* Add directionality to cable terminal port nodes (#38394)

* Command resolve mega pr 6 (#38398)

commit progress

* Command resolve killing and LEC conversions batch 2 (#38367)

commit progress

* Command resolve killing, LEC conversions, and general cleanup. (#38338)

* i'm just gonna put this here.

* I'm just gonna do it.

* Update ShowHTNCommand.cs

* I feel dumb.

* may as well with this too.

* this does in fact not work

* :/

* fix polymorph errors (#38409)

fix polymorph error

* Command resolve mega pr batch 5 (#38389)

* commit progress

* requested changes

* Convert `AtmosphereSystem` sound path strings to `SoundSpecifier`s (#38403)

* Convert AtmosphereSystem sound path strings to SoundSpecifiers

* Convert to SoundCollections

* fix: deglitchify drowsiness effect on macOS (#37817)

* Command resolves (#38415)

touchups

* show reflection prob on examine (#38199)

* goaaaaaaaal

* hmmmmmmmmmm... sorry aeshus, but thats sucks

* adwaswa

* reviev

* awdasdws

* redo

* should work

* mistake

* change
Co-authored-by: Tayrtahn Tayrtahn@users.noreply.github.com

* Update Resources/Locale/en-US/reflect/reflect-component.ftl

---------

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

* Automatic changelog update

* Fixed vapes unintentionally dealing all burn damage types (#38423)

Fixed vapes dealing all burn damage types

* Automatic changelog update

* Remove `SalvageShuttleCircuitboardStealObjective` from the objective group (#38428)

So this was causing vulture to fail to round start because it could not find the prototype... this is being migrated into null anyway so no point in it being here

* Cleanup static `Logger` use in `ChatBox` (#38405)

Convert static logger to resolved, resolve entman

* Random empty commit to be able to publish again

* Fix stacks only recycling one instead of the stack amount (#38433)

* fix

* Fixes

* Automatic changelog update

* Relocate SetOutfit method to ServerClothingSystem and LEC setoutfit command. (#38391)

* that'll do

* requested changes.

* missed this.

* Command resolves and LEC conversions batch 4 (#38382)

* reeeecolllaaaaaaaa

* gonna convert these to public while I'm here for consistency sake

* requested changes.

* Playtime Reminders - Raising awareness of addiction by highlighting excessive playtime (#36483)

* grass touch protocol - Rebases to latest master to fix conflicts

* aight local tests are passing lets see if our golf works

* It is 5 am and our ass COMPLETELY overcomplicated this lmaooo

* Addresses feedback - Clarifies comments, swaps internal var names for grasstouchless and selfdestructive, makes the third tier a little less demanding, and fixes 1 hours

* Addresses review - conflict fix

* This too

* Axes playtime exclusion for ghosts

* Use switch expression

code style nit

* Refactor/cleanup

Use IGameTiming.RealTime to track time instead of DateTime. Use nullable instead of magic values.

Expose the current day value through a property that is always up to date, instead of making the API to read the CVar that updates at inconsistent times. This also makes it trivial to debug with VV.

Other minor cleanup like using string interp, code style fixes, comments, etc.

---------

Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>

* Automatic changelog update

* Exo - Minor balance changes and fixes (#38435)

* Automatic changelog update

* Add advertised reagents to puddles (#38432)

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>

* Give APCs wirepanels (#38443)

init

* Automatic changelog update

* Revert "Add stamina damage resists to the bloodred raid/hard-suits (and ERT hardsuits). [TEST MERGE]" (#38447)

Revert "Add stamina damage resists to the bloodred raid/hard-suits (and ERT h…"

This reverts commit 8c6b288853.

* Adds dog-shaped sprite variants for the most common hardsuits (#36875)

Co-authored-by: dandy <203235481+casiliuscestus@users.noreply.github.com>
Co-authored-by: Raccoononi <70777222+raccoononi@users.noreply.github.com>
Co-authored-by: Scrubdelub <196583332+scrubdelub@users.noreply.github.com>
Co-authored-by: Tiniest Shark <176858593+TiniestShark@users.noreply.github.com>

* Automatic changelog update

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>
Signed-off-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>
Co-authored-by: Gentleman-Bird <dcgreen406@gmail.com>
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
Co-authored-by: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com>
Co-authored-by: Southbridge <7013162+southbridge-fur@users.noreply.github.com>
Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: RedBookcase <crazykid1590@gmail.com>
Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: vmzd <33641966+vmzd@users.noreply.github.com>
Co-authored-by: August Sun <45527070+august-sun@users.noreply.github.com>
Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Co-authored-by: Xeri Marai <8867601+Xeri7@users.noreply.github.com>
Co-authored-by: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com>
Co-authored-by: themias <89101928+themias@users.noreply.github.com>
Co-authored-by: Samuka-C <47865393+Samuka-C@users.noreply.github.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: Minemoder5000 <minemoder50000@gmail.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: jkwookee <157201244+jkwookee@users.noreply.github.com>
Co-authored-by: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com>
Co-authored-by: Spanky <180730777+spanky-spanky@users.noreply.github.com>
Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com>
Co-authored-by: hoshizora <willhornbeck12@gmail.com>
Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: Perry Fraser <perryprog@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Nox <nebulousnox38@gmail.com>
Co-authored-by: Archee <archee3@hotmail.co.uk>
Co-authored-by: Orsoniks <orsoniksstuff@gmail.com>
Co-authored-by: Tiniest Shark <head.rebel@yahoo.com>
Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: Disp-Dev <91643998+Disp-Dev@users.noreply.github.com>
Co-authored-by: DispenserDev <mariousjoaquin@gmail.com>
Co-authored-by: cnv41 <cnv41g@gmail.com>
Co-authored-by: nabegator <stunprod228@outlook.com>
Co-authored-by: qrwas <aleksandr.vernigora93@gmail.com>
Co-authored-by: BramvanZijp <56019239+BramvanZijp@users.noreply.github.com>
Co-authored-by: qwerltaz <69696513+qwerltaz@users.noreply.github.com>
Co-authored-by: Prole <172158352+Prole0@users.noreply.github.com>
Co-authored-by: eoineoineoin <helloworld@eoinrul.es>
Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
Co-authored-by: Myra <vasilis@pikachu.systems>
Co-authored-by: Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com>
Co-authored-by: Seam_Less <kai.julian.watson@gmail.com>
Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Co-authored-by: āda <ss.adasts@gmail.com>
Co-authored-by: Vortebo <64214314+Vortebo@users.noreply.github.com>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Co-authored-by: kosticia <kosticia46@gmail.com>
Co-authored-by: Qerd <73325910+BigfootBravo@users.noreply.github.com>
Co-authored-by: Nikovnik <116634167+nkokic@users.noreply.github.com>
Co-authored-by: M1tht1c <mytht1c@proton.me>
Co-authored-by: SyaoranFox <99053675+SyaoranFox@users.noreply.github.com>
Co-authored-by: Kittygyat <202250949+Kittygyat@users.noreply.github.com>
Co-authored-by: Deerstop <edainturner@gmail.com>
Co-authored-by: Sparlight <twiksparlight@gmail.com>
Co-authored-by: nikitosych <boriszyn@gmail.com>
Co-authored-by: FungiFellow <151778459+FungiFellow@users.noreply.github.com>
Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>
Co-authored-by: Helix-ctrl <kylemccann08@gmail.com>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Co-authored-by: DuckManZach <144298822+duckmanzach@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>
Co-authored-by: Citrea <citrea.lingua@gmx.net>
Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
Co-authored-by: KamTheSythe <kamil.dolowiec01@gmail.com>
Co-authored-by: TheFlyingSentry <AFlyingSentry@gmail.com>
Co-authored-by: deathride58 <deathride58@users.noreply.github.com>
Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
Co-authored-by: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com>
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
Co-authored-by: dandy <203235481+casiliuscestus@users.noreply.github.com>
Co-authored-by: Raccoononi <70777222+raccoononi@users.noreply.github.com>
Co-authored-by: Scrubdelub <196583332+scrubdelub@users.noreply.github.com>
Co-authored-by: Tiniest Shark <176858593+TiniestShark@users.noreply.github.com>
2025-06-24 01:05:19 +03:00
Kyle Tyo
6a2afa5625 Revisions and cleanup to dock and shuttle commands. (#38533)
commit
2025-06-23 23:25:35 +02:00
Tayrtahn
b68c6b37ac Remove excess SingularityLevelChangedEvent subscriptions (#38536)
* Remove excess SingularityLevelChangedEvent subscriptions

* RadiationSourceComponent too

* Cleanup commented out code
2025-06-23 22:41:41 +02:00
CrystallEdge Server
89bc6e24ec Automatic changelog update 2025-06-23 22:56:31 +03:00
Red
969b85740f fix (#1466) 2025-06-23 22:55:26 +03:00
CrystallEdge Server
56be3f7e78 Automatic changelog update 2025-06-23 16:43:10 +03:00
Nim
61511edc19 Hot potato (#1463)
* hot potato

* Temperature
2025-06-23 16:42:02 +03:00
Ed
b581f5d132 Merge remote-tracking branch 'upstream/stable' into ed-23-06-2025-upstream-sync
# Conflicts:
#	.github/workflows/check-trailing-whitespace.yml
#	Content.IntegrationTests/Tests/Access/AccessReaderTest.cs
#	Content.IntegrationTests/Tests/Chameleon/ChameleonJobLoadoutTest.cs
#	Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs
#	Content.IntegrationTests/Tests/PostMapInitTest.cs
#	Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs
#	Content.Shared/Light/Components/SunShadowCycleComponent.cs
#	Resources/Prototypes/Damage/modifier_sets.yml
#	Resources/Prototypes/Maps/Pools/default.yml
2025-06-23 16:37:22 +03:00
PJBot
a77c24cc86 Automatic changelog update 2025-06-23 11:34:04 +00:00
slarticodefast
b83d00b792 Predict Flashes (#37640)
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-06-23 13:32:56 +02:00
Nim
e1e32ee8fc Перевод на RU (#1443)
* translate

* fries

* fix

* ква

* desc

* execution

* pieni c

* monster kill

* del
2025-06-23 13:12:02 +03:00
CrystallEdge Server
20e03120af Automatic changelog update 2025-06-23 12:54:10 +03:00
SenorJaba
6ae8d2639d Plushies! (#1456)
* I NEED THEM PLUSHIESgit add -A!

* Typo in attributions oops

* My greggit add -A!

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-23 12:53:05 +03:00
Ed
3f2b5d45d7 Merge branch 'master' of https://github.com/crystallpunk-14/crystall-punk-14 2025-06-23 12:30:57 +03:00
Ed
2048e42641 Update dwarf_mining.yml 2025-06-23 12:30:04 +03:00
CrystallEdge Server
f598884649 Automatic changelog update 2025-06-23 12:26:25 +03:00
Nim
94ce2b0c2f Big bear (#1442)
* bear

* spawner

* voice

* target action

* animation
2025-06-23 12:25:20 +03:00
CrystallEdge Server
f6e5bb42ec Automatic changelog update 2025-06-23 12:20:08 +03:00
Red
9c1c1c4456 modular fix (#1462) 2025-06-23 12:19:02 +03:00
Tayrtahn
7e77ee0cd2 Content fix for LocalizedCommands Loc change (#38133)
* Content fix for LocalizedCommands Loc change

* Switch to LocalizationManager
2025-06-23 07:22:21 +02:00
Hannah Giovanna Dawson
e7aa5d392c Emotional Support Scurret locstrings (#38518)
Missed during the atomization of the Wa Wa PR.
2025-06-23 03:14:57 +02:00
Kyle Tyo
69b3e355e4 Command resolves. (#38519)
* banlist-command

* open-admin-notes-command

* stealthmin-command

* set-alert-level-command

* remove unused usings

* whitelist commands
2025-06-23 02:40:55 +02:00
CrystallEdge Server
4e4ce51e87 Automatic changelog update 2025-06-23 01:22:31 +03:00
Red
b1a9fca5ee Trading request system (#1460)
* mapping public stores update

* base selling platform update

* basic UI setup

* Update coin icon textures

Refreshed the c, g, p, and s coin images in the interface textures. This likely improves their appearance or corrects previous visual issues.

* parse requests data into UI

* selling platform UI state now include price

Updated the selling platform UI to display the calculated price of placed items. Moved the UpdateSellingUIState logic from the shared system to the server system, and modified the CP14SellingPlatformUiState to include a price field. The client window now uses the state-provided price instead of a hardcoded value.

* Update selling UI state on item placed or removed

Added event subscriptions for ItemPlacedEvent and ItemRemovedEvent to update the selling UI state when items are placed or removed from the selling platform. Refactored UpdateSellingUIState to remove the user parameter, as it is no longer needed.

* sell button works now

Replaces the previous sell request mechanism with a new CP14TradingSellAttempt message for selling items on the platform. Updates client and server logic to use this new message, adds a CanSell helper for item validation, and refactors related UI and event handling code for improved clarity and maintainability.

* auto pricing requirements

* Refactor reputation reward to use cashback rate

Reputation rewards for selling requests are now calculated as a percentage (cashback) of the sale price, rather than a fixed value. Updated the relevant UI, server logic, and prototype fields to reflect this change. Also cleaned up the brad_potions.yml prototype file by removing a duplicate entry and correcting an ID.

* request rerolling
2025-06-23 01:21:25 +03:00
PJBot
e925ff6127 Automatic changelog update 2025-06-22 19:39:29 +00:00
Cojoke
2a49e8e692 Staff of Healing for Pacifists (#38509) 2025-06-22 15:38:22 -04:00
Skybailey-dev
1c0788edb9 MINOR SPELLING ERROR!!1!!1! (#38510)
Spelling fix in the code of conduct

Comunity ->Community
2025-06-22 21:37:25 +02:00
PJBot
be679eeab9 Automatic changelog update 2025-06-22 19:29:28 +00:00
beck-thompson
820f0dc1dc Allow admins to export round logs to CSV files (#38206) 2025-06-22 21:28:21 +02:00
PJBot
e47f040f17 Automatic changelog update 2025-06-22 16:52:09 +00:00
keronshb
c03afeb29c Readds the Hypereutactic Blade for traitors, adds Hypereutatic blade for Nukies (#37182)
* adds hypereutactic back into the uplinks

* Disables hum

* Adds the Hypereutatic Blade for Nukies

* Actually makes the sound so quiet no one can hear it

* Apply suggestions from code review

* Update Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-22 18:50:59 +02:00
Tornado Tech
fb76a9d80d build: issue templates 2025-06-23 00:13:14 +10:00
Moomoobeef
17f033e4f4 Fixed dirt tiles having identical names (#38500)
* added prefix to planet dirt/grass

* prefixes don't work, just doing renaming instead.
2025-06-22 12:47:56 +02:00
github-actions[bot]
019173c338 Update Credits (#38493)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-06-21 20:37:44 -04:00
ScarKy0
2e90bc7b6d Retractable items get removed by handcuffs (#38441)
* init

* oops

* happens

* review

* fix
2025-06-22 02:24:12 +02:00
Tayrtahn
6a582db4b8 Treat duplicate dependency warnings as errors (#38480)
* Treat duplicate dependency warnings as errors

* GitHub workflows

* commas

* Maybe we just don't use these?

* I think we can get rid of these?
2025-06-22 00:25:20 +02:00
PJBot
1702e75a0b Automatic changelog update 2025-06-21 22:24:46 +00:00
Perry Fraser
793f525c6b fix: mops with liquid can hit people again (#38486) 2025-06-22 00:23:39 +02:00
PJBot
ef55c3db06 Automatic changelog update 2025-06-21 22:21:41 +00:00
qrwas
0e58ed4f42 Fix styles for group button in loadout menu (#38488)
* Fix styles color for group button in loadout menu

* Show selected item count in loadout group UI

Updated the loadout group container to display the number of selected items in a group. Added a new localization string to support this feature in the UI.

* Resolve required changes
2025-06-22 00:20:34 +02:00
ScarKy0
6b8842c44d Generic Numeric Alerts (#38370) 2025-06-21 20:59:37 +03:00
PJBot
b8e8918af7 Automatic changelog update 2025-06-21 17:55:18 +00:00
beck-thompson
a15387bcfd Make role ban pannel pretty (#37952)
* Make role ban pannel pretty

* Removed unused depencency

* refactor: wider panel (no jumping due to scroll in english lang) minor readability improvements

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-06-21 10:54:11 -07:00
CrystallEdge Server
0295e7aa03 Automatic changelog update 2025-06-21 20:52:14 +03:00
Red
44ba300a91 serverization??? (#1457) 2025-06-21 20:51:07 +03:00
PJBot
8d2f46ae34 Automatic changelog update 2025-06-21 16:35:18 +00:00
SlamBamActionman
9b5779bd33 Allow Maintainers to use customvote command (#38385)
Changed from Moderator perm to Round perm
2025-06-21 18:34:11 +02:00
TemporalOroboros
d4876be6f0 Kills TurfHelpers (#37939)
* Create TurfSystem equivalent for and obsolete TurfHelpers.GetTileRef

* Fix EntitySystem uses of TurfHelpers.GetTileRef

* Fix EntitySystem uses of TurfHelpers.TryGetTileRef

* Fix construction condition uses of TurfHelpers.GetTileRef

* Fix last use of TurfHelpers.IsBlockedTurf

* Create TurfSystem equivalent to and obsolete TurfHelpers.GetContentTileDefinition

* Fix uses of TurfHelpers.GetContentTileDefinition(TileRef)

* Fix uses of TurfHelpers.GetContentTileDefinition(Tile)

* Create TurfSystem equivalent to and obsolete TurfHelpers.IsSpace

* Fix EntitySystem uses of TurfHelpers.IsSpace(Tile)

* Fix EntitySystem uses of TurfHelpers.IsSpace(TileRef)

* Fix remaining uses of TurfHelpers.IsSpace

* Fix uses of TurfHelpers.GetEntitiesInTile

* Delete TurfHelpers.cs

* Add GetEntitiesInTile lookup methods

* Convert some GetEntitiesInTile methods to LookupSystem extension methods

* Use new GetEntitiesInTile methods

* Recycle spiderweb hashset

* Recycle floor tile hashset
2025-06-21 11:23:19 -04:00
PJBot
334dc61d4d Automatic changelog update 2025-06-21 14:53:43 +00:00
Prole
f1d60b44e1 Flask Visual Overhaul & YML Organizing (#38032)
* Adding Back Baseline V1 Changes

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Readability Change

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* icon_open implementation, tidy up & attributions (fix lith/shiny flask ugly af open sprites)

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* good enough

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* No mo closed spills

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Inhands & Attributions Part 1

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Inhands & Attributions Part 2

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Flask Sounds & Attributions

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Cap flask inhands change

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Lith flask Inhand Changes

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Spacing

* Fix?

* Man...

* Attributions Back in...

* Im loosing it..

* REAL!

* :/

* Again...

* again :/

* Plz???

---------

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>
2025-06-21 10:52:36 -04:00
slarticodefast
092f88c16f Fix debug asserts when unequipping items (#38274) 2025-06-21 16:40:56 +03:00
PJBot
a481f0bbbc Automatic changelog update 2025-06-21 13:12:24 +00:00
slarticodefast
686016098a Fix wallmount interaction (#38111) 2025-06-21 16:11:17 +03:00
Ed
78e3b78854 Update OptionsMenu.xaml.cs 2025-06-21 14:25:51 +03:00
Pieter-Jan Briers
0d346840da Fix compile (#38477) 2025-06-21 12:37:08 +02:00
PJBot
b4515e7b58 Automatic changelog update 2025-06-21 09:42:11 +00:00
Whatstone
54cb731147 SignalSwitchSystem: Check button is locked before toggling (#38474)
Check button is locked before toggling
2025-06-21 11:41:04 +02:00
Just-a-Unity-Dev
27a4c1955c add some documentation for visiting entity (#38475)
* add some documentation for visiting entity

to prevent someone from spending 5 minutes diving into the codebase

* reviews

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

---------

Co-authored-by: LaCumbiaDelCoronavirus <90893484+LaCumbiaDelCoronavirus@users.noreply.github.com>
2025-06-21 11:19:57 +02:00
lzk
3b6f4c5b3e allow to publish news without ui (#35262)
* allow to publish news without ui

* the hell was that

* apply

* apply review

* sure

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

* okay

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-21 11:19:27 +02:00
Perry Fraser
a0544fdbf2 Make gas tank UI a bit more network-happy (#38184)
* fix: network gas tank output pressure

* fix: don't overwrite gas tank output pressure during editing
2025-06-21 11:06:49 +02:00
PJBot
5d119543ec Automatic changelog update 2025-06-21 06:33:37 +00:00
Tayrtahn
640c984ab2 Make... sloths... speak... slowly... (#38142)
* Add SlowAccent

* Apply SlowAccent to sloths

* xmldocs
2025-06-20 23:32:30 -07:00
Tayrtahn
357763c55e Add interaction test for retractable arm blade (#38452)
* Add interaction test for retractable arm blade

* Update for HandsSystem refactor

* Revert "Update for HandsSystem refactor"

This reverts commit e01bb9a7e318dd916240d57b30f48af9594bff1f.

* Combine WaitAssertion blocks
2025-06-20 21:31:32 -04:00
PJBot
7a63d1729f Automatic changelog update 2025-06-21 01:14:32 +00:00
crazybrain23
2e5ddb4bb5 Fix styling for Admin Menu lists (#38261)
* remove styleclass from playertab 'button' lines

* cvar, fix button-style header alignment

* Fix requested changes

And also the extra cvar things I was meant to remove in the upstream merge

* Tiny tweaks

---------

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
2025-06-21 03:13:25 +02:00
Myra
6e59f748e0 Fail if we attempt to run publish on master (#38431)
* Fail if we attempt to run publish on master

BREAKING: FORKS REMOVE THIS

* Update publish.yml
2025-06-21 02:32:31 +02:00
CrystallEdge Server
99cf1e7c4f Automatic changelog update 2025-06-21 02:47:06 +03:00
Red
f4abe1cf35 Fix lumera actions (#1446)
* ZLevelMover

* fix

* Update CP14ReligionSystem.cs
2025-06-21 02:46:01 +03:00
PJBot
83ff673e68 Automatic changelog update 2025-06-20 23:40:16 +00:00
Hannah Giovanna Dawson
48d897d31e Scurrets (#38218)
* Scurrets.

* Add missing equipment YAML

* Fix count of NamesFirstScurret

* Resolve PR comments, wa.

Also add like a bunch more wa replacements

* ed

* Update Resources/Textures/Mobs/Animals/scurret/displacement.rsi/meta.json

* :rivflabbergasted:

* Fixed spacings in scurret_last.ftl

* Fix mangled endings of some last names

* wawa

* the scug has a spear for self defence
2025-06-20 16:39:08 -07:00
Ps3Moira
61eddfebc4 Remove Icon Smoothing for Airlocks, Doors, and Plastic Flaps, and Shutters from Walls (#38456)
* Nuke Icon Smoothing

* Update highsec.yml

* Update plastic_flaps.yml
2025-06-21 00:50:35 +02:00
Perry Fraser
416b276ac3 fix: set correct layer visibility for power cell sprites (#38458)
* fix: set correct layer visibility for power cell sprites

* fix: use a default charge level for power cell sprites' appearance data
2025-06-21 00:48:54 +02:00
Tayrtahn
8e8f47497b Cleanup duplicate dependency in AdminVerbSystem.Smites (#38473)
Cleanup duplicate dependency in AdminVerbSystem.Smites
2025-06-20 18:43:53 -04:00
PJBot
49e810fd5b Automatic changelog update 2025-06-20 22:42:20 +00:00
Qerd
a1969fe392 Chameleon Controller Implants can be deimplanted (#38439) 2025-06-21 00:41:11 +02:00
Tayrtahn
c1de936c4b Forbid string literals for SharedActionsSystem methods (#38472)
Forbid string literals for SharedActionsSystem methods
2025-06-21 00:11:12 +02:00
Pieter-Jan Briers
5006214be5 Update patrons (#38470) 2025-06-20 21:23:04 +02:00
Red
a1656c0c88 Update labeler.yml 2025-06-20 18:28:38 +03:00
CrystallEdge Server
e542c96e6b Automatic changelog update 2025-06-20 16:20:38 +03:00
Nim
552f12d39b minor changes crossbow (#1431)
Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-20 16:19:32 +03:00
CrystallEdge Server
d28f5558e7 Automatic changelog update 2025-06-20 13:00:46 +03:00
Red
e847feff58 tiefling gambit (#1452) 2025-06-20 12:59:41 +03:00
CrystallEdge Server
32b96fde25 Automatic changelog update 2025-06-20 12:52:16 +03:00
paige404
7238698aa3 Lanterns Can Break (#1450)
* Lanterns now break in two swings. I don't wanna see anyone saying that lanterns are a great one handed weapon again.

* Lanterns can survive one fireball, as a treat.
2025-06-20 12:51:11 +03:00
CrystallEdge Server
5714011471 Automatic changelog update 2025-06-20 12:32:42 +03:00
Red
aeda7c6f38 Silver needle berries (#1451)
* move flowers rsi

* silver needle

* Update silver_needle.yml
2025-06-20 12:31:37 +03:00
Perry Fraser
1cda984fdf fix: trim five minutes of silence from bottle_clunk_2 (#38463) 2025-06-20 00:18:19 -07:00
Tayrtahn
bd9d1a53f7 Remove redundant IoC Resolve in EmptyOrWindowValidInTile (#38446)
Remove redundant IoC Resolve in EmptyOrWindowValidInTile
2025-06-20 02:02:46 +02:00
PJBot
efc4fd05dd Automatic changelog update 2025-06-19 22:43:29 +00:00
Kyle Tyo
7b84f98f92 Fix the tail wagging action being blocked by cuffs. (#38454)
Update types.yml
2025-06-20 00:42:21 +02:00
PJBot
b6bc1ab8c9 Automatic changelog update 2025-06-19 19:50:18 +00:00
Sparlight
af23939dbe Adds dog-shaped sprite variants for the most common hardsuits (#36875)
Co-authored-by: dandy <203235481+casiliuscestus@users.noreply.github.com>
Co-authored-by: Raccoononi <70777222+raccoononi@users.noreply.github.com>
Co-authored-by: Scrubdelub <196583332+scrubdelub@users.noreply.github.com>
Co-authored-by: Tiniest Shark <176858593+TiniestShark@users.noreply.github.com>
2025-06-19 12:49:09 -07:00
beck-thompson
8ee24a0bb8 Revert "Add stamina damage resists to the bloodred raid/hard-suits (and ERT hardsuits). [TEST MERGE]" (#38447)
Revert "Add stamina damage resists to the bloodred raid/hard-suits (and ERT h…"

This reverts commit 8c6b288853.
2025-06-19 11:49:56 -07:00
CrystallEdge Server
2758bc0dea Automatic changelog update 2025-06-19 21:27:25 +03:00
Kit
f69b993b2c TELEGRAPH!!!!!! (#1449) 2025-06-19 21:26:20 +03:00
CrystallEdge Server
2055ed6be4 Automatic changelog update 2025-06-19 18:42:48 +03:00
Red
7436916780 Update misc.yml (#1448) 2025-06-19 18:41:42 +03:00
Ed
869af43f31 Refactor Demiplane map node state and update core entity 2025-06-19 18:33:54 +03:00
PJBot
1fb7a26ef6 Automatic changelog update 2025-06-19 15:07:20 +00:00
ScarKy0
8d97e563a0 Give APCs wirepanels (#38443)
init
2025-06-19 17:06:11 +02:00
Ed
63a1d60c6a Add dash range limit to dash spell and system
Introduces a maximum dash range to the dash system and spell effect, clamping the dash target if it exceeds the allowed distance. Updates configuration fields and prototype YAML to support the new range parameter.
2025-06-19 12:47:46 +03:00
Velcroboy
527446b56e Add advertised reagents to puddles (#38432)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-06-18 23:55:57 -07:00
PJBot
ebb310ce9a Automatic changelog update 2025-06-19 04:07:26 +00:00
SlamBamActionman
da93ac8ea3 Exo - Minor balance changes and fixes (#38435) 2025-06-18 21:06:17 -07:00
PJBot
5033f5c682 Automatic changelog update 2025-06-19 01:07:33 +00:00
deathride58
08d9c0aedd Playtime Reminders - Raising awareness of addiction by highlighting excessive playtime (#36483)
* grass touch protocol - Rebases to latest master to fix conflicts

* aight local tests are passing lets see if our golf works

* It is 5 am and our ass COMPLETELY overcomplicated this lmaooo

* Addresses feedback - Clarifies comments, swaps internal var names for grasstouchless and selfdestructive, makes the third tier a little less demanding, and fixes 1 hours

* Addresses review - conflict fix

* This too

* Axes playtime exclusion for ghosts

* Use switch expression

code style nit

* Refactor/cleanup

Use IGameTiming.RealTime to track time instead of DateTime. Use nullable instead of magic values.

Expose the current day value through a property that is always up to date, instead of making the API to read the CVar that updates at inconsistent times. This also makes it trivial to debug with VV.

Other minor cleanup like using string interp, code style fixes, comments, etc.

---------

Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
2025-06-19 03:06:26 +02:00
Kyle Tyo
ca72ca1464 Command resolves and LEC conversions batch 4 (#38382)
* reeeecolllaaaaaaaa

* gonna convert these to public while I'm here for consistency sake

* requested changes.
2025-06-19 02:03:28 +02:00
Kyle Tyo
d36a45a57f Relocate SetOutfit method to ServerClothingSystem and LEC setoutfit command. (#38391)
* that'll do

* requested changes.

* missed this.
2025-06-19 01:50:10 +02:00
CrystallEdge Server
f4dd46cded Automatic changelog update 2025-06-19 00:16:03 +03:00
PJBot
15dc69641b Automatic changelog update 2025-06-18 21:15:09 +00:00
Red
8d984b7670 Dash (#1445)
* dash basic logic + predict spell casts

* dash

* Update kick.yml

* Update CP14SharedMagicSystem.Checks.cs
2025-06-19 00:14:58 +03:00
beck-thompson
72ea94a233 Fix stacks only recycling one instead of the stack amount (#38433)
* fix

* Fixes
2025-06-18 23:14:01 +02:00
CrystallEdge Server
0996ab9ec6 Automatic changelog update 2025-06-18 21:48:04 +03:00
Red
3a4bbcb289 Area of influence depends on followers MobState (#1439)
* simple anti-religion zone shader

* observers refactor
2025-06-18 21:46:58 +03:00
Myra
3a611859f9 Stable master (#38430) 2025-06-18 18:37:13 +02:00
Vasilis The Pikachu
a10fc8a7df Random empty commit to be able to publish again 2025-06-18 18:35:26 +02:00
Tayrtahn
81d09559c2 Cleanup static Logger use in ChatBox (#38405)
Convert static logger to resolved, resolve entman
2025-06-18 18:21:48 +02:00
Myra
f086066822 Remove SalvageShuttleCircuitboardStealObjective from the objective group (#38428)
So this was causing vulture to fail to round start because it could not find the prototype... this is being migrated into null anyway so no point in it being here
2025-06-18 17:39:30 +02:00
PJBot
0a0d1ce320 Automatic changelog update 2025-06-18 12:07:23 +00:00
Kittygyat
d144253754 Fixed vapes unintentionally dealing all burn damage types (#38423)
Fixed vapes dealing all burn damage types
2025-06-18 08:06:13 -04:00
Ed
54307574c3 Create execution.ftl 2025-06-18 13:27:39 +03:00
CrystallEdge Server
c3495984bb Automatic changelog update 2025-06-18 13:11:14 +03:00
Sefaia
c87907f80d EXECUTION! (#1419)
* Execution option unlocked for Sharp weapons.

* Created CP14Execution component to avoid issues with SS14 standard core coding.

Removed Execution Component in preparation to add in CP14Execution component instead.

* Added CP14Execution as a modularPart modifier under the id: BaseWeaponExecution

Added BaseWeaponExecution to the following weapons:
-Axe
-Dagger
-Mace
-Rapier
-Scimitar
-Spear
-Sword

* Added Executions to all Tools in the ModularWeapon category.

* Removed redundant code and replace CP14Execution Component with original Execution Component. Removed Mace, Hammer, Hoe, Shovel and Pickaxe execution for now. Added Execution Component to BaseWeaponSharp modifier

* Added Execution to non-sharp weapons via modifier called BaseWeaponExecution.

* Exchanged prefix of blunt to cp14 and added the override values.

* networking problems

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-18 13:10:08 +03:00
CrystallEdge Server
4ec77514ea Automatic changelog update 2025-06-18 12:38:23 +03:00
Red
322a3f11c1 Mini fix pack (#1440)
* Update CP14PriceScannerSystem.cs

* Update CP14PriceScannerSystem.cs

* fix #1435

* fix #1393
2025-06-18 12:37:18 +03:00
PJBot
75b740440a Automatic changelog update 2025-06-18 00:51:09 +00:00
kosticia
9c0ea2528e show reflection prob on examine (#38199)
* goaaaaaaaal

* hmmmmmmmmmm... sorry aeshus, but thats sucks

* adwaswa

* reviev

* awdasdws

* redo

* should work

* mistake

* change
Co-authored-by: Tayrtahn Tayrtahn@users.noreply.github.com

* Update Resources/Locale/en-US/reflect/reflect-component.ftl

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2025-06-18 02:50:01 +02:00
Kyle Tyo
284cf25905 Command resolves (#38415)
touchups
2025-06-18 01:40:33 +02:00
Perry Fraser
9a605c8642 fix: deglitchify drowsiness effect on macOS (#37817) 2025-06-17 23:05:12 +02:00
Tayrtahn
d61704df33 Convert AtmosphereSystem sound path strings to SoundSpecifiers (#38403)
* Convert AtmosphereSystem sound path strings to SoundSpecifiers

* Convert to SoundCollections
2025-06-17 22:52:11 +02:00
Kyle Tyo
3485450ffa Command resolve mega pr batch 5 (#38389)
* commit progress

* requested changes
2025-06-17 22:49:58 +02:00
slarticodefast
aa15371049 fix polymorph errors (#38409)
fix polymorph error
2025-06-17 16:16:24 -04:00
Kyle Tyo
9d22f6147c Command resolve killing, LEC conversions, and general cleanup. (#38338)
* i'm just gonna put this here.

* I'm just gonna do it.

* Update ShowHTNCommand.cs

* I feel dumb.

* may as well with this too.

* this does in fact not work

* :/
2025-06-17 20:08:12 +02:00
Kyle Tyo
0e1ff2644f Command resolve killing and LEC conversions batch 2 (#38367)
commit progress
2025-06-17 20:01:28 +02:00
Kyle Tyo
57babe15ee Command resolve mega pr 6 (#38398)
commit progress
2025-06-17 19:22:03 +02:00
Whatstone
b73943b04b Add directionality to cable terminal port nodes (#38394) 2025-06-17 19:05:48 +02:00
Simon
9bab47ea32 Switch Discord integration to use NetCord instead of Discord.Net (#38400) 2025-06-17 19:03:24 +02:00
SlamBamActionman
22e6aef2c5 Scale down 4k parallax textures (#38390)
* Scale down 4k textures, add false preload to new parallaxes

* Add filter effect, also make sure the preload yml actually has the correct name...
2025-06-17 18:53:58 +02:00
Perry Fraser
3c297d0620 fix: erase expedition disks when their map is deleted (#38322)
* fix: erase expedition disks when their map is deleted

* fix: include paused entities in disk query, add dirty
2025-06-17 18:32:14 +02:00
slarticodefast
5a69b7e2fb Merge stable into master (#38395) 2025-06-17 17:25:30 +02:00
PJBot
4638833ae3 Automatic changelog update 2025-06-17 11:07:29 +00:00
TheFlyingSentry
f197f54535 Thief objectives now verify animal stealing objectives if they actually exist (#38332)
* Holy shit it's real. Theres actually animals in this joint

* WHITESPACE SPOTTD KILL KILL KILL

* Accidentally did a bad yaml oopsie

* Apply suggestions from code review

* when the stars kiss the sky

* Apply suggestions from code review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-17 13:06:21 +02:00
PJBot
9dbf675b6b Automatic changelog update 2025-06-17 10:42:17 +00:00
Kittygyat
d35baba4c4 Increased Borg Density (Drag Speeds) (#38232)
Raised borg drag speeds
2025-06-17 12:41:08 +02:00
PJBot
cf756b6c61 Automatic changelog update 2025-06-17 09:47:43 +00:00
KamTheSythe
adcaf3cc6d remove explosions from destroying a explosive payload (#38049) 2025-06-17 02:46:36 -07:00
Kyle Tyo
d316fa3483 Command resolve and LEC conversion batch 3 (#38378)
* I'm just a silly goober

* requested changes

* Update Content.Server/Interaction/TilePryCommand.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-17 11:39:42 +02:00
Ed
cb48e484f8 Update gods.yml 2025-06-17 12:23:55 +03:00
PJBot
1443cda4ff Automatic changelog update 2025-06-17 09:23:21 +00:00
hoshizora
36c0f96c9b Fix some crafting menu oddities (#38372) 2025-06-17 02:22:14 -07:00
Whatstone
53a01bfb46 Fix adjacent north/south cable terminals breaking east/west HV cable (#38377) 2025-06-17 02:13:35 -07:00
PJBot
3a965503b5 Automatic changelog update 2025-06-17 08:54:36 +00:00
Citrea
f1d6e7cd75 Fixed mis-labeled component filter (#38383) 2025-06-17 01:53:28 -07:00
slarticodefast
d25046461e Fix SharedActionSystem spamming errors (#38358) 2025-06-17 15:18:13 +10:00
little-meow-meow
c049852486 fix: no longer accidentally rotate held items (#38331)
Signed-off-by: little-meow-meow <204685920+little-meow-meow@users.noreply.github.com>
2025-06-16 19:39:04 -07:00
Red
52cc834a0e Spider web visuals update (#38175)
* web update

* Update Resources/Prototypes/Entities/Structures/spider_web.yml

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

* Update Resources/Prototypes/Entities/Structures/spider_web.yml

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

* review

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-16 17:30:43 -07:00
PJBot
82b67b58d3 Automatic changelog update 2025-06-17 00:21:15 +00:00
August Sun
bdcdb6e338 Adds the Estoc DMR to the syndicate uplink (#38122)
* Initial commit, adds the prototype, sprites and attributions, entries into syndicate uplink for weapon bundle and magazines

* Reduced weapon spread when wielded

* minor visual updates to sprites

* slightly adjusted burst rate down

* Update duffelbag.yml

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
2025-06-16 17:20:08 -07:00
PJBot
5c7063e139 Automatic changelog update 2025-06-17 00:09:15 +00:00
kosticia
f64505bea1 predicted hyposprays (#38046)
* G O I D A

* how

* now proper

* a

* Update HypospraySystem.cs

* good catch

* Apply suggestions from code review

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-17 02:08:08 +02:00
beck-thompson
a48c390854 Objectives that do not fit requirements are now deleted (#38365)
* Fix

* Update Content.Server/Objectives/ObjectivesSystem.cs

Thanks Tayrathn!

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

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2025-06-16 18:54:11 -04:00
CrystallEdge Server
d377df4a70 Automatic changelog update 2025-06-17 01:51:59 +03:00
Kit
4c8f5ae92c nerf (#1437) 2025-06-17 01:50:54 +03:00
PJBot
00858aaa5a Automatic changelog update 2025-06-16 22:48:38 +00:00
ArtisticRoomba
3eba895fc7 Thieves can innately pickpocket - thieving gloves rework (#38123)
* Thieves can innately pickpocket (#107)

Pickpocketing a skyrim guard's armor off

(cherry picked from commit 21b9f1ddb251ea3c7c6803e78871abefcaecbfb4)

* this isnt moff

* Make predicted, cleanup

* !skating-basketball

* orks are NOT the best trollface

* Implement much more sensible component replication prevention

---------

Co-authored-by: DuckManZach <144298822+duckmanzach@users.noreply.github.com>
2025-06-16 15:47:31 -07:00
CrystallEdge Server
fdd3e6b008 Automatic changelog update 2025-06-17 01:20:15 +03:00
Red
637cfe4be8 nerf gods (#1436) 2025-06-17 01:19:09 +03:00
Seam_Less
861d0fac71 Gun Inhand Sprite Fixes (#38294)
* cobra, viper, pulse pistol

* c20 and wt550

* l6 + attributions
2025-06-16 18:03:14 -04:00
Ed
a4ec26b919 Update CP14_Changelog.yml 2025-06-17 00:08:39 +03:00
Red
fa545f1b36 Merge pull request #1416 from crystallpunk-14/ed-10-06-2025-upstream-sync
Stable upstream sync
2025-06-17 00:00:58 +03:00
Ed
f0e0339c68 boilerfix 2025-06-16 22:59:56 +03:00
Tayrtahn
4cca55cecc Cleanup duplicate dependency in AddActionCommand (#38360)
Cleanup duplicate dependency in AddActionCommand
2025-06-16 21:02:35 +02:00
PJBot
3cbb7c122e Automatic changelog update 2025-06-16 16:44:55 +00:00
SlamBamActionman
bc4bc13c71 Exo - Day 1 Patch (#38348) 2025-06-16 09:43:46 -07:00
PJBot
a66e9a2920 Automatic changelog update 2025-06-16 15:40:54 +00:00
Sparlight
8aba7663cd Fix Smart Corgis not being targeted by hostile faction entities (#38349) 2025-06-16 11:39:46 -04:00
PJBot
65c898f4d4 Automatic changelog update 2025-06-16 10:26:54 +00:00
ScarKy0
4cc6cb95dc Commands for adding and removing actions (#38317) 2025-06-16 13:25:44 +03:00
Ed
eef4d070ad newer gonna give you up 2025-06-16 12:44:11 +03:00
PJBot
00b68d4c10 Automatic changelog update 2025-06-16 09:37:14 +00:00
qrwas
f8cf4dc829 Add group for loadouts (#36951)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-16 02:36:06 -07:00
Ed
0f8a52af53 lobby screens update 2025-06-16 12:02:59 +03:00
CrystallEdge Server
3ab00211bf Automatic changelog update 2025-06-16 11:31:26 +03:00
paige404
7cdfaafb6b Innkeeper tweaks: modular mops, wearable buckets, and more (#1387)
* Clarify the naming of the farming sacks. Make mops breakable. Add modular mophead craftable at a workbench. Add lucens mophead. Make all mops and other tools not meant for swinging at things break faster. Tweaked damage numbers on certain tools. Add lucens bucket. Make all buckets wearable as shitty helmets. Add recipes to (slowly) craft ropes from the inventory.

* Revert all changes to the CP14BaseMop, as it doesn't need to be touched. Use migration to replace it instead.

* Remove the old mop

* Correct sprites based on feedback from omsoyk. Dewhimsy the lucens mop and bucket--mop head looks more logical, bucket's rope color is plain rope. Correct certain mop sprites facing the wrong way.

* Bring mops up to speed with the belt changes

* Make lucens bucket just a norma bucket, in blue

* Fix the errors by removing unnecessary fields from the craft recipes, updating the crate loot to use the new preset mop

* One more attempt to fix linting errors

* Final(?) bugsquash. Remove unnecessary name field

* Add clumsy tranlated localization

* Revise bucket helmet sprite to sit higher on the head at a jaunty angle

* Update old guidebook mop references

* Minor shading mistake: 💀

* Move rope craft recipes to the workbench

* Remove construction component from rope

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-16 11:30:21 +03:00
Red
17ec6057c9 Merge branch 'master' into ed-10-06-2025-upstream-sync 2025-06-16 11:17:20 +03:00
beck-thompson
d8b70a3887 Revert "Randomized Markings" (#38345) 2025-06-16 00:50:17 -07:00
CrystallEdge Server
defa5cb11a Automatic changelog update 2025-06-16 10:40:38 +03:00
Nim
06de3a0eca Minor meat revisions (#1426)
* minor meat revisions

* name id

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-16 10:39:33 +03:00
CrystallEdge Server
f9777102de Automatic changelog update 2025-06-16 10:38:34 +03:00
Kit
128ba6e15b Lunar strike Rebalance (#1433)
* Moon Strike nerfish

* Moon_strike nerf 2
2025-06-16 10:37:26 +03:00
Helix-ctrl
1d4cf48c31 Add hints towards flash protection to all items which provide it (#37267)
* Update welding.yml

* Update FlashSystem.cs

Add subscriber event for flash immunity examine text

* Create flash-immunity-component.ftl

* Removed changed description text

* change to use entity version

* fixed mistake
2025-06-15 18:38:36 -04:00
Ed
00cb82f11b Update ChameleonJobLoadoutTest.cs 2025-06-16 01:12:14 +03:00
Ed
8c13d854ee movedgrid and physicsMap purge 2025-06-16 01:10:17 +03:00
Ed
e15f7d0444 fix packs 2025-06-16 00:41:39 +03:00
Ed
667c9e907a thats all broken 2025-06-16 00:39:36 +03:00
Ed
e85b474b64 Update base.yml 2025-06-16 00:33:26 +03:00
Ed
bc5ed46a9c major fix pack 2025-06-16 00:32:20 +03:00
PJBot
c83420fca5 Automatic changelog update 2025-06-15 21:12:59 +00:00
beck
b636e3fcba Randomized Markings (#34765)
randomized markings
2025-06-15 14:11:52 -07:00
Ed
95244a89c2 fix packs 2025-06-16 00:07:57 +03:00
Ed
3b96f55def Update touch.yml 2025-06-15 23:58:20 +03:00
Ed
677a326376 Update touch.yml 2025-06-15 23:53:01 +03:00
Ed
57ab882fb9 Update MOB_subterranean_leap.yml 2025-06-15 23:42:08 +03:00
Ed
73de5ebcbb Update jump.yml 2025-06-15 23:37:00 +03:00
Ed
fe8967bd67 fix 2025-06-15 23:32:16 +03:00
Ed
d01b8fe32c Update ice_ghost.yml 2025-06-15 23:21:32 +03:00
Ed
93966e37d4 actions refactor apply 2025-06-15 23:20:52 +03:00
PJBot
ef832141c6 Automatic changelog update 2025-06-15 19:11:31 +00:00
SlamBamActionman
9af0b354e3 Exo Station - Upstream Playtest Version (#33144)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-15 12:10:22 -07:00
Ed
ab8a5c3afd Sharedization of entityEffects and crystals slots system 2025-06-15 21:58:33 +03:00
Ed
ed1d9aca25 Update CP14SharedMagicSystem.InstantActions.cs 2025-06-15 21:48:20 +03:00
Ed
62cd6bfe9b Merge branch 'master' into ed-10-06-2025-upstream-sync 2025-06-15 21:44:16 +03:00
Ed
5328714752 fix c# 2025-06-15 21:43:58 +03:00
Ed
5046ad1aeb longer weather 2025-06-15 21:34:33 +03:00
CrystallEdge Server
6a8699a44c Automatic changelog update 2025-06-15 21:27:04 +03:00
Red
b24ec5bc80 Bugfixes (#1432)
* fix #1428

* CodTenAlt review

* fix map tests

* real this time

* fix #1429

* add wheat and cotton into victorian gardens trade faction

* Update PostMapInitTest.cs
2025-06-15 21:25:58 +03:00
ScarKy0
bc9059a72d Armblade Tweaks (#38337)
init
2025-06-15 20:23:02 +02:00
CrystallEdge Server
4dfaf6a16e Automatic changelog update 2025-06-15 18:04:44 +03:00
Red
d30b51c982 Firewave (#1430)
* nerf spiders

* firebolt to firewave

* Update firebolt.yml

* rename file

* Update firewave.yml

* Update firewave.yml
2025-06-15 18:03:38 +03:00
Ed
2f4d60b7af Update moon_strike.yml 2025-06-15 17:12:30 +03:00
Tornado Tech
8498e8d1e0 feat: skill ui scale (#1423) 2025-06-15 15:05:24 +03:00
Ed
d9dc086588 Update CP14_Changelog.yml 2025-06-15 15:04:21 +03:00
Red
04f6627e16 Lumera patron (#1427)
* mind upgrade works only on followers

* wrath of lumera, removing memory points

* enable lumera for players

* add lumera to maps

* job desc update

* guidebook
2025-06-15 15:00:18 +03:00
PJBot
be5df666f0 Automatic changelog update 2025-06-15 09:37:28 +00:00
SlamBamActionman
239f1c511e Ensure large entities don't get stuck on conveyor belt corners (#37466)
* Initial commit

* Also avoid the friction change doesn't make turned-off conveyor belts continue going

* Ensurecomp on conveyor starting

* i give up

* Minor brackets edit

* Documentation
2025-06-15 11:36:18 +02:00
github-actions[bot]
b2e8cff3ed Update Credits (#38321)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-06-15 11:26:03 +02:00
PJBot
b3561e0c3a Automatic changelog update 2025-06-15 08:28:40 +00:00
FungiFellow
43bad8184f Give Syndie-Cats Syndie Access (#38318)
* Update animals.yml

* Update animals.yml
2025-06-15 10:27:32 +02:00
Red
4be22326ce Gods part 6 (#1425)
* Skill scanning + bugfixes

* memory point examining

* Update base.yml

* predict skill examining

* moon beam lumera action

* balance
2025-06-15 01:50:16 +03:00
PJBot
63ee7f6272 Automatic changelog update 2025-06-14 18:30:13 +00:00
ScarKy0
208b245dcb Retractable items system + Arm Blade action (#38150) 2025-06-14 21:29:06 +03:00
PJBot
635ea4b2b4 Automatic changelog update 2025-06-14 17:23:52 +00:00
nikitosych
1bbf094c79 Fix for holoparasite's ability to attack the host through mech (#36659) 2025-06-14 20:22:45 +03:00
PJBot
7cd7e33ae3 Automatic changelog update 2025-06-14 16:10:12 +00:00
Sparlight
937326460f Add pet bag - wearable backpack for pets (#37440)
* Add pet bag

* Trailing whitespace moment

* make the linter happy

* Fix trailing whitespace concern.

* Fix Construction component oopsy-daisy

* yml guideline moment

* remove weird extra whitespace

* make the maintainer happy

* Adjusted bag visuals based on feedback

* Allow the fox aghost admin to use pet bags
2025-06-14 09:09:05 -07:00
Red
71abce8db8 Skill scanning + bugfixes (#1424) 2025-06-14 19:04:33 +03:00
Tornado Tech
374ab05f24 git: remove issue templates (#1330) 2025-06-14 17:06:19 +03:00
Red
7760e8f628 God part 4 (#1422)
* projectile spell improve

* mind improve
2025-06-14 14:21:25 +03:00
PJBot
f1ef41fad5 Automatic changelog update 2025-06-14 09:08:56 +00:00
Sparlight
67c8d1db87 Add corgium (#37951)
* Add corgi essence

* Adjust spacing concerns

* Renamed 'corgi essence' to 'corgium' based on maintainer discussion
2025-06-14 11:07:48 +02:00
PJBot
f276035f79 Automatic changelog update 2025-06-14 09:00:50 +00:00
Nox
d68990fd7a Added warden's uniforms to their dresser. (#38283)
* Added warden's uniforms to their dresser.

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

* Added warden's guitar

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

* Removed armored coats and guitar from warden dresser.

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

---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
2025-06-14 10:59:40 +02:00
SyaoranFox
0518be5d38 Zombies won't attack Initial Infected (#38128)
* Added Zombie faction roles everywhere that makes sense for initial infected to be associated with Zombies.

* Adding faction component to round start zombie. (not hopeful)

* Removed stupid attempts and added zombie faction component to the zombie system when the player is given the ability to force themself to zombify.

* Changed use of "zombie" for ProtoId<NpcFactionPrototype>

* Update Content.Server/Zombies/ZombieSystem.cs

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

* Update Content.Server/Zombies/ZombieSystem.cs

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

* Removed faction component from ZombieOutbreak event. Shouldn't cause problems with the event as II gets component with their ability to self zombify.

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-13 17:56:57 -07:00
Red
fc0beb5ccf Gods part 3 (#1421)
* apprice action, dead notice

* fix refollowing

* mist lumera action
2025-06-14 02:11:36 +03:00
PJBot
deb92514d3 Automatic changelog update 2025-06-13 19:19:05 +00:00
Deerstop
34826a2cf6 Elkridge - Major Update (#38259)
* swap HOP and vault, fix cams, new genpop, shit ton of stuff

* fixed some initialised open doors, added posters to HOP/EVA

* implemented suggestions and feedback, lots of things
2025-06-13 15:17:57 -04:00
PJBot
ac9eb1a1ff Automatic changelog update 2025-06-13 18:55:28 +00:00
Kittygyat
98031d13a1 Added monkey/kobold emergency EVA sprites & the ability for them to wear them. (#37660)
* Added monkey/kobold emergency eva suit sprites, and the ability for them to wear it

* Added tag, fixed indentation

* Ok actually fixed the indentation this time
2025-06-13 20:54:21 +02:00
Red
b932d56f15 Gods part 2 (#1420)
* spooky scary patreons

* Update CP14ReligionSystem.cs

* goodbye radio channel

* gods? no! Mana parasites! Muahahaha

* Update gods.yml

* Update primordial.yml
2025-06-13 19:21:09 +03:00
PJBot
0dbb01d623 Automatic changelog update 2025-06-13 16:12:22 +00:00
slarticodefast
ae8fdbfa51 Fix puncturase cauterizing bleeding (#38289)
fix puncturase cauterizing bleeding
2025-06-13 12:11:15 -04:00
PJBot
4f9e7fbc4d Automatic changelog update 2025-06-13 16:10:37 +00:00
qrwas
757ef3c62b fix missing locale for Undergarment (#38304) 2025-06-13 12:09:30 -04:00
PJBot
822c4118a3 Automatic changelog update 2025-06-13 15:53:26 +00:00
SyaoranFox
72b57392d1 Rat King changed to Antag (#38124)
* Changed rat king to be antag
Rat King guide updated to show antag rules

Initial infected given zombie faction
Zombies given zombie faction too (not sure if redundant or not)

* Given zombie faction to Initial Infected and Zombies in mind_roles

* Changed MindRoleGhostRoleAntag to MindRoleGhostRoleSoloAntagonist

removed components from antag listings

* Removed changes for zombies

* Update Resources/Prototypes/Roles/Antags/zombie.yml

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

* Update Resources/Prototypes/ai_factions.yml

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

* Changed mob prototype to match

* Forgot solo again

---------

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
2025-06-13 17:52:19 +02:00
PJBot
e0e33263ab Automatic changelog update 2025-06-13 14:44:48 +00:00
M1tht1c
da76cc02c7 Fix visitor mindshields (#36537)
* Make visitor mindshields removable, and give disaster victims mindshields.

* Fix whitespace

* Fix ALL the whitespace
2025-06-13 16:43:41 +02:00
PJBot
01bbe013ab Automatic changelog update 2025-06-13 13:54:52 +00:00
Nikovnik
685e7028d2 Transparent tear gas (#36440)
* tweaked tear gas

* changed color of tear gas

* sped up metabolism rate of tear gas

* sped up tear gas passing more

* reduced tear gas content in grenades

* added threshold for better effect end timing

* removed clickable component from foams

* Suggestion changes

* Hide in spawn menu

---------

Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
2025-06-13 09:53:44 -04:00
Ed
41689de5aa infinity mana restriction 2025-06-13 16:35:39 +03:00
Red
422a0c5e10 Gods and religions (#1405)
* basic religion vision

* block god interactions

* skill tree mob specify

* silvania setup??

* clustering shader optimization

* gods department & job

* random gods jobs

* Luxian god

* Update Nature.png

* Update sphere_of_light.yml

* god chat

* Update ChatSystem.cs

* OBSERVATION

* public observation and basic follower api

* shader tweaks

* improve shaders

* spawning and praying on altars

* altars ppvs override

* move pvs overridiation from altars to observers

* shader coloration

* spectral z mover

* god magic radius restricted

* guide how to believe in god

* sends messages to god when smoeone wanna become follower

* follower doAfter

* goodbye luxian, welcome lumera

* goodbye silvania, welcome merkas

* som polish and renamings

* gods fast travel

* Update altar.ftl

* some lumera sfx

* renouncing patrons!

* renounce followers

* followewr percentage calculation

* remove from player-facing

* fix

* Update sphere_of_light.yml

* Update base.yml
2025-06-13 14:15:48 +03:00
CrystallEdge Server
32be823619 Automatic changelog update 2025-06-13 13:26:38 +03:00
Fr0goo
542bd2d948 Flem Creature (#1402)
* added Flem Creature

a weird looking fish creature that will spawn in the demiplanes with open skies and herbals. that will attack you if you get too close

* fixed placement of lines

should be in the right places now

* changed location of fish outfit, ajusted the sprite, and made it not foldable

* added flem modifier and fixed some thingy

* Update attributions.yml

* Update mobs.yml

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-13 13:25:33 +03:00
CrystallEdge Server
54715c26a8 Automatic changelog update 2025-06-13 12:25:41 +03:00
SenorJaba
8ab0939698 Merchant's monocle and ability (#1413)
* New trading stuff

* Crafts skill tree

* More trading fixes, baby!

* Last trading fix I hope

* Merchants' supremacy

* Gimme money

* Readonly
2025-06-13 12:24:36 +03:00
CrystallEdge Server
7391b5a065 Automatic changelog update 2025-06-13 10:35:38 +03:00
Sefaia
1ea8291927 Added Big Crossbow Bolts to whitelist and created a new Entity spawn item for a quiver filled with iron big crossbow bolts. (#1418) 2025-06-13 10:34:32 +03:00
PJBot
834c950449 Automatic changelog update 2025-06-13 05:23:05 +00:00
hoshizora
0b161cba6b Fix crafting steps with modular machine parts (#38299)
fixed lines that were messing with construction menu entries for machine parts
2025-06-12 22:21:57 -07:00
PJBot
622e34aaa4 Automatic changelog update 2025-06-13 01:49:36 +00:00
Qerd
eab797939b Prediction for use of utensil on incompatible food (#38297)
Prediction our beloved
2025-06-12 18:48:28 -07:00
Perry Fraser
82f598a087 Use correct on-head rainbow lizard plushie sprite (#38286) 2025-06-12 14:24:19 -07:00
PJBot
6182bead20 Automatic changelog update 2025-06-12 21:17:16 +00:00
themias
19271e6bc9 Fix gas analyzer and anom scanner wrong state (#38285)
* Fix gas analyzer and anomaly scanner UI activation issue

* save

* fix comment

* milkalyzer
2025-06-12 14:16:07 -07:00
Perry Fraser
570accb102 fix: Correct respath for lizard smite icon (#38288) 2025-06-12 22:37:44 +02:00
kosticia
e55985e575 Make BODAs start with Russian accent. (#38275)
long hand of Kremlin
2025-06-12 09:19:08 -07:00
Perry Fraser
e09b7debe2 Fix some popup issues with pipe layer changes (#38244)
* fix: only show pipe layer popups to the user changing them

* fix: don't show pipe layer subfloor popup when not using a screwdriver

* fix: properly pass down user and used for serverside pipe layer changes

Technically this doesn't matter as the Shared codepath for this method
doesn't actually use these on the server: only the user is used for a
clientside popup. Still, will be good to have these for future changes
that might need them.
2025-06-11 22:31:48 -07:00
Tayrtahn
70ce570fe9 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-06-11 22:09:05 -07:00
PJBot
aee55954d3 Automatic changelog update 2025-06-12 01:23:58 +00:00
SlamBamActionman
9a5bd9de6a Add propeller hat & swirl lollipop (#38260) 2025-06-11 18:22:51 -07:00
RedBookcase
a8801e4abf Removed Toys.rsi, reorganize toy RSIs, broad /Fun/ cleanup. (#37189)
Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-11 16:29:27 -07:00
PJBot
bbf6d745f6 Automatic changelog update 2025-06-11 22:26:46 +00:00
Vortebo
d9f5480397 Minor Relic improvements (#38269) 2025-06-11 15:25:38 -07:00
PJBot
5b271bb226 Automatic changelog update 2025-06-11 21:58:03 +00:00
Boaz1111
55540c374a scar availability for more species (#35645)
* :D

* updated for new scars

* small eye scar
2025-06-11 23:56:57 +02:00
Tayrtahn
699e6de1fe Fix StomachSystem PVS error (#38268)
Fix StomachSystem PVS error
2025-06-11 23:39:25 +02:00
āda
f5a28a5ad5 Cleanup exosuit fab recipes, add modules category (#38069) 2025-06-11 14:12:09 -07:00
PJBot
59472a0bc7 Automatic changelog update 2025-06-11 20:29:07 +00:00
Nox
edd2e80a4e Launchers require wielding (#38110)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-11 13:28:00 -07:00
PJBot
cd57f50bfc Automatic changelog update 2025-06-11 20:21:55 +00:00
Princess Cheeseballs
6052b1cfba Basilisk Nerfs for Gameplay (#38089)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-06-11 13:20:48 -07:00
PJBot
a4fb272ef4 Automatic changelog update 2025-06-11 20:04:21 +00:00
Seam_Less
f046d8a1f6 Magazine rsi Cleanup + Magazine Type Recolor (#37709) 2025-06-11 13:03:14 -07:00
Perry Fraser
36c048ba65 Add disambiguation to most construction menu recipe names (#38197) 2025-06-11 12:52:22 -07:00
PJBot
372e1767fa Automatic changelog update 2025-06-11 18:33:55 +00:00
Simon
f5fbef7ccc Add the instrument names to the MIDI channel selector (#38083)
* Add the instrument to the MIDI channel selector

* Reviews

Adds support for chained masters
Makes the channel UI update on its own when the midi changes (Works with bands too!)

* add to admin logs and limit track count

* Limit track names by length too

* remove left over comment

* Requested changes

* Reviews
2025-06-11 20:32:48 +02:00
Tayrtahn
27cb97a17c Cleanup 2 SpriteComponent.GetPrototypeTextures uses (#38263)
Cleanup 2 SpriteComponent.GetPrototypeTextures uses
2025-06-11 11:15:47 -07:00
Tayrtahn
00789525f8 Improve some BinSystem functionality (#38262)
* BinSystem improvements

* Prevent double-add
2025-06-11 11:04:30 -07:00
PJBot
33421ec9b4 Automatic changelog update 2025-06-11 15:37:27 +00:00
ScarKy0
b7c1849e11 Fix reinforced plasma window blocking laser shots (#38041)
* init

* stuff
2025-06-11 08:36:20 -07:00
PJBot
b1e6a0f2a1 Automatic changelog update 2025-06-11 14:02:50 +00:00
Boaz1111
f1e161acab Makes the grenadine bottle start closed. (#38219)
* whywhywhy

* removes unneeded line
2025-06-11 16:01:42 +02:00
Myra
7421d89b53 Stable (#38256) 2025-06-11 10:38:54 +02:00
Myra
448fa9bea7 [Hotfix] #38241 into stable (#38255) 2025-06-11 10:22:37 +02:00
SlamBamActionman
1bec4d10d7 Cherrypick 38241 2025-06-11 10:08:27 +02:00
PJBot
a67c26eb53 Automatic changelog update 2025-06-11 04:55:59 +00:00
hoshizora
905c298ed7 Fix mops, rags, and towels interacting with drains (#38252)
added the stuff
2025-06-10 21:54:50 -07:00
Tayrtahn
d612c56aab Forbid string literals for SharedToolSystem methods (#38250)
* Forbid string literals for ToolSystem methods

* Cleanup violations

* Sort usings
2025-06-11 03:58:21 +02:00
PJBot
58606ca230 Automatic changelog update 2025-06-11 01:17:03 +00:00
eoineoineoin
419b4e7916 Add technology to tech disk names (#38157) 2025-06-11 03:15:56 +02:00
Prole
1c99b8405b Guitar Sprite Fix (#38207)
* Modified Guitar Sprites

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

* Attributions

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>

---------

Signed-off-by: Prole <172158352+Prole0@users.noreply.github.com>
2025-06-11 02:51:19 +02:00
Tayrtahn
3dbb8905b5 Add test that entity prototypes don't use LocIds for name/description (#38234)
* Add test that entity prototypes don't use LocIds for name/description

* Fix violation
2025-06-11 02:47:04 +02:00
Tayrtahn
4a34759514 Replace Speech bubble time accumulator with TimeSpan (#38241)
* Replace SpeechBubble time accumulator with TimeSpan

* CurTime -> RealTime
2025-06-11 02:25:43 +02:00
qwerltaz
640ec3e031 Fix construction menu grid view quirky button selection (#38214)
* make hover and info use construction proto name, not entity name

* recipeButtons uses IDs as keys, not names

* return making item green when selected
2025-06-10 17:04:39 -07:00
Tayrtahn
5a6ad30ec4 Cleanup ChameleonJobLoadoutTest (#38229)
Cleanup ChameleonJobLoadoutTest
2025-06-10 15:51:23 -07:00
PJBot
1e0d60826e Automatic changelog update 2025-06-10 21:41:55 +00:00
themias
509d650253 Fix missing bike horn implant cooldown (#38237) 2025-06-10 14:40:46 -07:00
PJBot
df8fcf5193 Automatic changelog update 2025-06-10 19:32:52 +00:00
BramvanZijp
8c6b288853 Add stamina damage resists to the bloodred raid/hard-suits (and ERT hardsuits). [TEST MERGE] (#37040)
Add stamina damage resists to the bloodred suits.
2025-06-10 12:31:44 -07:00
lzk
6f852b6a49 cleanup mirror.yml (#38222) 2025-06-10 17:29:09 +02:00
lzk
3a4b7d62c7 WHYYYYYYY (cleanup) (#38220)
* WHYYYYYYYY

* Delete Resources/Locale/en-US/actions/actions/rootable.ftl
2025-06-10 15:36:58 +02:00
qrwas
ca6ab02587 Add missing locale in Criminal Records Computer (#38217)
add missing filter locale
2025-06-10 14:19:37 +02:00
CrystallEdge Server
a9e8614d0b Automatic changelog update 2025-06-10 14:15:13 +03:00
firebat4321
d89ef56907 Firebolt (#1354)
* added firebolt spell yml, added to spellbook tree

* Added new sprites for Firebolt action/spellbook, in-game bolt sprite.

* Missing comma from fire .json file.

* Updated firebolt IDs to use own ID instead of Fireball's ID.

* Spell doesn't break on move now.

* Updated on soundHit effect

* Corrected Fireball IDs to Firebolt

* Updated copyright entries

* Update firebolt.yml

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-10 14:14:07 +03:00
slarticodefast
0bdaf9e5ff merge stable into master (#38213) 2025-06-10 12:44:53 +02:00
CrystallEdge Server
c7302e16a6 Automatic changelog update 2025-06-10 13:41:27 +03:00
gogenych
3623a25033 copper loadout fix (#1414)
* copper loadout fix

* name fix
2025-06-10 13:40:19 +03:00
slarticodefast
cad0b6b3fa HOTFIX: Stop AI turrets from causing flickering lights (#38212)
no power draw
2025-06-10 12:39:24 +02:00
PJBot
5fcff99fbc Automatic changelog update 2025-06-10 09:37:43 +00:00
ArtisticRoomba
7dd202ebbe stop amber AI core from inducing seizures (#38209) 2025-06-10 02:36:33 -07:00
Ed
299d28f056 fff 2025-06-10 11:55:14 +03:00
Ed
c0f4098ca9 spell fixes 2025-06-10 11:49:35 +03:00
Ed
42d39a7c67 Merge remote-tracking branch 'upstream/stable' into ed-10-06-2025-upstream-sync
# Conflicts:
#	.github/CODEOWNERS
#	Content.IntegrationTests/Tests/Atmos/ConstantsTest.cs
#	Content.Server/Chat/Managers/ChatManager.cs
#	Content.Server/Connection/ConnectionManager.cs
#	Content.Shared/Actions/SharedActionsSystem.cs
#	Content.Shared/Lock/LockSystem.cs
2025-06-10 11:33:34 +03:00
CrystallEdge Server
a51f579591 Automatic changelog update 2025-06-10 11:09:13 +03:00
Nim
f0a25ddef6 Two-handed crossbow (#1315)
* Crossbow

* bow

* size

* size crossbow

* PhysicalComposition
2025-06-10 11:08:07 +03:00
Nim
747f76242f Rocks with moss (#1412)
* rockmoss

* line
2025-06-10 11:07:13 +03:00
PJBot
ea9330b654 Automatic changelog update 2025-06-10 04:48:45 +00:00
Southbridge
cbf8fa2349 Remade the AI Camera Static Shader (#38093)
Redid the camera static shader
2025-06-09 21:47:35 -07:00
PJBot
370c314d88 Automatic changelog update 2025-06-10 00:06:55 +00:00
ArtisticRoomba
3726eb6e19 Bring back low pressure damage to its unnerfed value (#38196) 2025-06-09 17:05:48 -07:00
PJBot
1eeecc0e20 Automatic changelog update 2025-06-09 23:05:03 +00:00
nabegator
2d5ee82aa3 hi-viz vest laser reflect (#38180)
* Update vests.yml

* Update vests.yml

* Update Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-09 16:03:56 -07:00
PJBot
baaba203f2 Automatic changelog update 2025-06-09 22:57:41 +00:00
Spanky
bf3d09ea81 Emergency Shuttles Update (#38186) 2025-06-09 15:56:33 -07:00
PJBot
d7a4d1ed28 Automatic changelog update 2025-06-09 22:38:41 +00:00
slarticodefast
6abd44500f Stable master merge yippe among us print (#38192) 2025-06-10 00:38:10 +02:00
ArtisticRoomba
df6be08506 Derotate and remove several maps, remove unused maps (#38190) 2025-06-09 15:37:33 -07:00
PJBot
f2c4647948 Automatic changelog update 2025-06-09 22:34:31 +00:00
cnv41
8f48eae3aa Typo fix in coffin description (#38193) 2025-06-09 15:33:23 -07:00
Disp-Dev
c3956eff6d New Recipes: Breakfasts (#37279)
* Adds full english and american breakfasts and respective recipes

* sprite tweak and added random spawner

* reagent rebalance

* reagent re-rebalance

* spawner ID fix

* ACTUALLY actually fixed the spawner, also description changes

* reagent re-re-rebalance

* spawner fix so the linter stops screaming at me

* different check failed kekw

* trailing whitespace fix attempt #1

* identation fix? i think?

* indetation fix part 2, also vox cant eat this anymore

* more yaml fixes

---------

Co-authored-by: DispenserDev <mariousjoaquin@gmail.com>
2025-06-10 00:33:02 +02:00
slarticodefast
d4c4606cf4 Revert tile aligned barsigns (#38185)
fixtures for bar signs (#37756)"
2025-06-10 00:02:31 +02:00
Tayrtahn
264573b9e1 Cleanup unused fields in DrinkSystem (#38181)
Cleanup unused fields in DrinkSystem
2025-06-09 19:56:12 +02:00
Tayrtahn
f8e89749c5 Give unique names to all curtain construction recipes (#38182)
* Give unique names to all curtain construction recipes

* Duplicate entry
2025-06-09 19:55:44 +02:00
slarticodefast
f8c71db50f Revert "Add trailing whitespace check workflow" (#38179)
Revert "Add trailing whitespace check workflow (#37367)"

This reverts commit be35f6e9ce.
2025-06-09 19:21:42 +02:00
Errant
99b2955c09 HOTFIX Revert #38004 : Change C-4 back to syndicate contraband (#38177)
* Revert "Made C-4 Major contraband instead of syndicate contraband (#38004)"

This reverts commit 0a565469c7.

* remove changelog
2025-06-09 18:59:37 +02:00
PJBot
eb29ec330a Automatic changelog update 2025-06-09 15:12:26 +00:00
pathetic meowmeow
3d40bebbef Allow cargo request computers to send orders to the primary account (#37943) 2025-06-09 11:11:19 -04:00
PJBot
b1ab5bd059 Automatic changelog update 2025-06-09 14:37:12 +00:00
DrSmugleaf
7f9b2a0434 Fix eating and drinking verbs showing up after a short delay and making your verb UI bounce (#38164)
* Fix eating and drinking verbs showing up after a short delay and making your verb UI bounce

* Usings fix

* Usings fix

* Usings fix

* Usings fix

* CVar fix

* Predicted ppups

* Openable predicted popup

* Fix audio prediction
2025-06-09 10:36:04 -04:00
metalgearsloth
bd67e82093 Update submodule to 262.0.0 (#38174) 2025-06-10 00:08:53 +10:00
Red
14efec2f47 Update actions_changelogs_since_last_run.py 2025-06-09 14:49:07 +03:00
Red
508aead876 Update actions_changelogs_since_last_run.py 2025-06-09 14:43:33 +03:00
CrystallEdge Server
50af3f1d23 Automatic changelog update 2025-06-09 14:37:01 +03:00
Viator-MV
e06e1bb7fc Druid stuff (#1396)
* staff

* Revert "staff"

This reverts commit bb7532e0b2.

* not resprite
2025-06-09 14:35:56 +03:00
CrystallEdge Server
4daaedb900 Automatic changelog update 2025-06-09 14:35:43 +03:00
Alchebun
8d55affc34 Buildable Wooden Fences (#1370)
* Start of New PR

* still figuring it out

* This is confusing...

* AHA! Progress!

* Big Fences complete

* smaller fence test

* fixed smaller gates

---------

Co-authored-by: Alchebun <jimmy.12.or#gmail.com>
2025-06-09 14:34:38 +03:00
CrystallEdge Server
799189d4f5 Automatic changelog update 2025-06-09 13:26:45 +03:00
Sefaia
29a88758c0 Fixed some misplaced recipes for Aventails and Greaves. (#1409) 2025-06-09 13:25:39 +03:00
Leon Friedrich
9247621a96 Add FixedPoint2TypeParser (#38169) 2025-06-09 18:01:53 +10:00
PJBot
5604607af4 Automatic changelog update 2025-06-09 07:41:21 +00:00
Tiniest Shark
2d08f79229 Assorted device and core inhands (#38162)
* Assorted device and core inhands

* whoops forgot the thief objective

* i missed literally on pixel on the fulton argh

* inhand pinpointer update
2025-06-09 00:40:14 -07:00
PJBot
700990c2d3 Automatic changelog update 2025-06-09 07:32:56 +00:00
Orsoniks
ef42c36cdb Improved Health examination text (#38126)
* more health examinations

* better blood

* fix

* tweaks

* sizeable

* silicon fix

* tweaks

* bleeding color tweaks

* fix
2025-06-09 00:31:49 -07:00
CrystallEdge Server
e5abe8d48a Automatic changelog update 2025-06-09 08:57:24 +03:00
Jona-K
a67fa6f6d5 Made sure only the intent changes are present (#1408) 2025-06-09 08:56:18 +03:00
PJBot
2d3df9c77d Automatic changelog update 2025-06-09 01:06:31 +00:00
Archee
a46861e221 Missing contraband tags on explosives (#37521)
* Firebombs as minor contraband

* Pipebombs as minor contraband

* Seismic charge as cargo/sec contra (like crushers)

* Modular payloads
2025-06-08 18:05:22 -07:00
Kyle Tyo
546bfd0a30 MapManager warnings cleanup Server Edition 2003 (#36781)
* now you see me

* unused depen

* test fail fix attempt 1

* test fail fix attempt 2

* fix test fail attempt 3

* shot in the dark.

* Does this work?

* import cleanup

* taking a shot at this.

* Convert PersistenceSaveCommand to LocalizedEntityCommands.

* requested changes

* requested changes. also dealt with improperly named private const

* Update Content.Server/GameTicking/GameTicker.Spawning.cs

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

* Update Content.Server/GameTicking/GameTicker.Spawning.cs

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

* Convert PlanetCommand to LocalizedEntityCommand

* Update BiomeSystem.cs

* Update Content.Server/Salvage/SalvageSystem.Runner.cs

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

* Update Content.Server/Procedural/DungeonSystem.Rooms.cs

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

* Update Content.Server/Salvage/SpawnSalvageMissionJob.cs

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

* Update Content.Server/Station/Systems/StationBiomeSystem.cs

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

* revert to latest master.

* slartis suggestion.

* Update SetMapAtmosCommand.cs

* cleanup

* Update PersistenceSaveCommand.cs

* finish localizing persistencesavecommand

* this is icky, I change.

* :sigh:

* revert whatever I did here?

* oh I see, some inconsistencies.

* revert this

* Update PlanetCommand.cs

* move this ftl to the commands folder

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-06-09 02:09:42 +02:00
CrystallEdge Server
bf8f6dc0ef Automatic changelog update 2025-06-08 19:17:31 +03:00
gogenych
c7151a7f56 Copper time! (#1403)
* blyad ya na mastere sdelal

* returned readability

* new presets for copper weapons

* fix
2025-06-08 19:16:25 +03:00
CrystallEdge Server
612c61deae Automatic changelog update 2025-06-08 10:54:28 +03:00
Peck3
c4cae9ce0c Innkeeper guidebook entry (#1318)
* Innkeeping guidebook text

Contains the text for the innkeeping guidebook page

* Update jobs.yml

Adds innkeeper to jobs.yml

* Update jobs.yml

* Update jobs.yml

* Update jobs.yml

* RU jobs.yml

* Innkeeper guidebook text RU

* Grammar update

* Ru

* Adds PhantornRU's suggestions

* Small grammar updates to new text

* Another update to the suggested text

* Update RU page, translation needed

* Testing out images

* Fixed embeds, added more

* Fucked up the boxes

* maybe this time it will work

* This time for sure

* it didnt work

* It worked, updated RU page

---------

Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
2025-06-08 10:54:11 +03:00
CrystallEdge Server
8858a477fa Automatic changelog update 2025-06-08 10:53:23 +03:00
Nim
024d22dc05 Slippers and hat (#1398)
* Slippers and hat

* sound

* fix
2025-06-08 10:53:19 +03:00
Viator-MV
f7622a2123 New skeleton fixes (#1394)
* thats all

* T1too
2025-06-08 10:52:14 +03:00
Viator-MV
bcbbd6e31b cooldown (#1401)
Your personal Viator has overheated, and the cooldown will last until active PR's are approved.
2025-06-08 10:03:53 +03:00
PJBot
766bade68f Automatic changelog update 2025-06-08 03:48:44 +00:00
Samuka-C
33ae484b2d adjreagent now accepts float (#38134)
* adjreagent now accepts float

* var
2025-06-07 23:47:37 -04:00
PJBot
3871aec5fd Automatic changelog update 2025-06-08 02:50:51 +00:00
Nox
35411b5090 No raffle for space carp (#38101)
No raffle for carp

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
2025-06-07 22:49:44 -04:00
github-actions[bot]
499055b9c9 Update Credits (#38143)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-06-07 21:05:23 -04:00
Tayrtahn
e909ffa933 Forbid string literals for NpcFactionSystem methods (#38140)
* Add ForbidLiteral attribute to NpcFactionSystem methods

* Cleanup resulting warnings
2025-06-08 00:39:18 +02:00
PJBot
c5bdbdfea9 Automatic changelog update 2025-06-07 22:24:55 +00:00
slarticodefast
a1173e3c27 Fix stripping window for more than 2 hands (#37577) 2025-06-07 15:23:46 -07:00
slarticodefast
9cb1a669d6 make PacifiedComponent session specific (#38137) 2025-06-07 14:37:13 -07:00
PJBot
5f4e55e583 Automatic changelog update 2025-06-07 17:38:04 +00:00
Perry Fraser
7ce2d241dd fix: allow ejecting diamonds from lathes/silos (#38132) 2025-06-07 13:36:58 -04:00
K-Dynamic
eb208a2ae8 Genpop wall lockers (#38102)
* sprites

* genpop wall lockers

* number 5 alive

* slight boilerplate code, thank you slarti
2025-06-07 17:51:38 +02:00
Ed
3532a0f945 Update default.yml 2025-06-07 16:34:39 +03:00
PJBot
3ecb0b40a3 Automatic changelog update 2025-06-07 13:06:32 +00:00
K-Dynamic
a84d718a09 Reduce disabler capacity to 16 shots (#36019)
* 14 shots

* 14 to 16
2025-06-07 15:05:25 +02:00
lzk
32301a6dcb chem.yml cleanup (#38129)
Update chem.yml
2025-06-07 13:38:36 +02:00
CrystallEdge Server
ebd01f4980 Automatic changelog update 2025-06-07 14:05:47 +03:00
Red
3e78962d91 Venicialis new map (#1397)
* venec map

* venec udate

* venicialis fort

* Update PostMapInitTest.cs
2025-06-07 14:04:41 +03:00
PJBot
b61824d287 Automatic changelog update 2025-06-07 02:30:20 +00:00
hoshizora
373ab740bb Add name to chameleon controller implanter (#38117)
Update implanters.yml
2025-06-06 19:29:13 -07:00
Kyle Tyo
5707a31cac ShowEmergencyShuttleCommand and MeleeSpreadCommand LEC conversion. (#37993)
progress
2025-06-06 20:28:00 -04:00
Quantum-cross
8324aa9bea Fix serialization of SunShadowCycleComponent (#38002)
* Use a struct to hold the items for `Directions` in `SunShadowComponent`, fix serialization.

* actually make them datafields...

* Add NetSerializable to datadef

* this is why we can't have nice things
2025-06-06 20:14:11 -04:00
PJBot
a6fabb9e94 Automatic changelog update 2025-06-06 23:09:22 +00:00
slarticodefast
f274dc6526 fix wallmount vending machine dispense direction (#38112)
fix wallmount vending machine direction
2025-06-06 19:08:16 -04:00
PJBot
3d54da58da Automatic changelog update 2025-06-06 23:02:21 +00:00
Spanky
668a0f0863 Light Up Landmines (#38092)
* Adjust landmines to have unshaded lights.

* Someday I will give myself credit for the work I do.

* Adjust animation speed.
2025-06-06 19:01:14 -04:00
Kyle Tyo
a31376c925 Add player autofill to rename command. (#38074)
* simple enough

* switch to CompletionResult.FromOptions and CompletionHelper.SessionNames

* cleanup
2025-06-06 18:52:48 -04:00
jkwookee
57567a92c6 Reduce Liquid Frezon Duration (#38100)
testing
2025-06-06 18:41:21 -04:00
slarticodefast
7c382cc6ce Don't show climb verb for objects that cannot be climbed (#38115)
fix climb verb
2025-06-06 18:25:17 -04:00
PJBot
a60d5d4002 Automatic changelog update 2025-06-06 22:14:28 +00:00
themias
afa62b5e69 Increase throwing into disposal chance (#38116) 2025-06-07 00:13:20 +02:00
Tayrtahn
136208dbc3 Fix throwing items into disposal units (#38106) 2025-06-06 23:40:08 +02:00
PJBot
bb14492464 Automatic changelog update 2025-06-06 21:08:20 +00:00
Minemoder5000
cddc9926b0 Shark toys use the bite animation. (#38113) 2025-06-06 14:07:09 -07:00
Tayrtahn
95632859b7 Cleanup unused/redundant dependencies (#38099) 2025-06-06 18:11:52 +02:00
CrystallEdge Server
f259fe37d6 Automatic changelog update 2025-06-06 18:07:14 +03:00
gogenych
6735f16e59 some price change (#1392) 2025-06-06 18:06:07 +03:00
Errant
a332817803 emergency shuttle emergency lockers (#38095) 2025-06-06 12:12:33 +02:00
PJBot
60060526a1 Automatic changelog update 2025-06-06 02:29:11 +00:00
Samuka-C
bc4a45d6e5 Make improvised explosive devices minor contra (#38088)
pipe bomb and fire bombs are minor contra
2025-06-05 19:28:04 -07:00
PJBot
54d7f3f808 Automatic changelog update 2025-06-06 00:14:43 +00:00
RedBookcase
219015dcd8 Added Scrap Armor [Reupload]. (#37601)
* Added Scrap Armor v2.

* Added a note to scrap helmet about vision reduction.

* Removed protection from step triggers.

* The patient needs broken kneecaps to live.

* Add in missing tag

* Missing tags pt 2

---------

Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
2025-06-05 20:13:36 -04:00
PJBot
c300f5dd74 Automatic changelog update 2025-06-05 23:47:02 +00:00
themias
eb85a8a1b0 Muzzles reduce emote sound (#34444)
* Muzzles reduce emote sound

* update based on review comments

* review comments
2025-06-05 19:45:55 -04:00
PJBot
7943dad603 Automatic changelog update 2025-06-05 23:41:57 +00:00
K-Dynamic
2a4540fffa Rifle crate order (#35535)
* lecter crate and gift

* revert cargo gift security armor change

* rifle cost down to 8000 spesos
2025-06-05 19:40:51 -04:00
PJBot
3bbc03c838 Automatic changelog update 2025-06-05 23:37:38 +00:00
Xeri Marai
18fa45addd Improve Potted Plant Movability and Availability (#37591)
* Added Purchasable Potted Plant Crate

* Removing some whitespace that made it in elsewhere

* Making Potted Plants Items and pickupable

* Revert Making potted plants not fade

This reverts part of commit a50a7def80c06e5be68a37263306007739952a28.

* Adding self to credits

* Fixing sus spacing
2025-06-05 19:36:31 -04:00
PJBot
d1e1c8bb5d Automatic changelog update 2025-06-05 23:36:22 +00:00
August Sun
f9784206e0 Adds individual Bulldog magazines to the syndicate uplink (#37917)
* Brief commit to update branch

* added more magazines to uplink, corrected spelling in ftl file for uplink, corrected sprite state for incendiary bulldog mag

* removed incendiary drum, increased cost of slug drum

* Emogarbage swoop

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
2025-06-05 19:35:15 -04:00
chromiumboy
db4d419f7b Access Reader Refactor (#37772)
* Initial commit

* Integration test fix

* Removed redundant dirtying of accessreader
2025-06-05 19:28:55 -04:00
PJBot
110bcbe595 Automatic changelog update 2025-06-05 23:28:09 +00:00
vmzd
4cbfd19312 Add hair back to hardhats (#38086)
adds hair back to hardhats
2025-06-05 19:27:33 -04:00
RedBookcase
6fb613e87e Standardized running and walking speed debuffs for equipped gear. (#37828)
Co-authored-by: RedBookcase <Usualmoves@gmail.com>
2025-06-05 19:27:01 -04:00
ArtisticRoomba
daeeae3ac0 Sellable syndicate contraband (#37835)
* Sellable syndicate contraband

* 1984 tests, laughible

* Balancing
2025-06-05 19:26:31 -04:00
PJBot
c843bb8867 Automatic changelog update 2025-06-05 23:24:21 +00:00
Southbridge
0dd30c87a6 Reorganized Turret Prototypes (#37863)
* Reorganized turret prototypes

* Added circuit board to migrations

* Fixed frequencies

* Fixed typos and set the base control panel to abstract since it's technically not constructable yet

* Fixed the typo in the migrations

* Addressed changes

* Whitespace fixes

* Whitespace check fix

---------

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>
2025-06-05 19:24:02 -04:00
Hitlinemoss
3d942e1cad Added security mime mask (#37890)
* Added security mime mask

* Improved security mime mask equipped sprites

* Improved security mime mask icon sprite

* meta.json spacing fix
2025-06-05 19:23:13 -04:00
PJBot
326dfa659b Automatic changelog update 2025-06-05 23:21:54 +00:00
PJBot
6141b448eb Automatic changelog update 2025-06-05 23:20:48 +00:00
Gentleman-Bird
076310bd58 Fix soap recipe so it actually works (#37923)
Change soap recipe
2025-06-05 19:20:44 -04:00
Simon
d7d7a6c80e Split codewords into its own system (#37928)
* Split codewords into its own system

* Fix admin log

* Nuke unused code

* Fix formatting errors

* Fix tests

* Make the codeword system add itself if called when not active

* Put comment in right place.

* Review: Rename prototypes

* Review: Make codewords serializable

* Fix build

* Reviews: Change the system to not be a gamerule.

* Fix YAML Linter

* Fix test fail

* Remove unused import
2025-06-05 19:19:41 -04:00
Kyle Tyo
db38a9c945 Revise ShowAccessReadersCommand as LocalizedEntityCommands (#37991)
* revise ShowAccessReadersCommand

* don't believe this is needed anymore? hopefully servers world wide don't explode.
2025-06-05 19:17:31 -04:00
PJBot
1c27a2a383 Automatic changelog update 2025-06-05 23:17:03 +00:00
chromiumboy
ea1ecad3ff Tweak for the visual coverage granted to station AIs by holopads (#38059)
* Initial commit

* Added option to require anchoring
2025-06-05 19:15:55 -04:00
PJBot
ff4861b7b4 Automatic changelog update 2025-06-05 21:07:47 +00:00
Orsoniks
e21fb8ff39 In-hand sprites for some food items (#38024)
* so meow changes

* qwawa

* fixed sprites

* Update meta.json

* Update meta.json

* Update meta.json

* Update meta.json

* Update meta.json

* more inhand variations using coloring

not perfect but better than nothing

* more meats

* pizza inhands, ported from starlight and edited

* add link

* snack inhands

* worldpeas

* chips

* packets

* all snacks and trashes finished

* correction
2025-06-05 17:06:38 -04:00
metalgearsloth
a91154702d Update submodule to 261.2.0 (#38081) 2025-06-05 23:08:33 +10:00
PJBot
3851893953 Automatic changelog update 2025-06-05 12:53:48 +00:00
slarticodefast
7d2d05b99c Fix noir shader in compability mode (#38080)
fix noir shader in compability mode
2025-06-05 14:52:39 +02:00
PJBot
2f5964063d Automatic changelog update 2025-06-05 06:09:45 +00:00
Spanky
9bb3140550 Evac Repair Lockers (#38075)
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
2025-06-04 23:08:38 -07:00
PJBot
be6326077a Automatic changelog update 2025-06-04 21:42:47 +00:00
Spanky
694b0093c2 Fland Update (#38068)
Add turrets to Fland
2025-06-04 17:41:38 -04:00
PJBot
121dd6666b Automatic changelog update 2025-06-04 20:38:20 +00:00
Spanky
b2d54c510e Omega Update (#38066) 2025-06-04 13:37:11 -07:00
Cojoke
4b226eaad6 Remove Lube From Trash Puddle Spawns (#38048) 2025-06-04 14:16:24 +02:00
Funce
148fb5ca23 Blood-Red Magboots now correctly show if magboots are active (#38013)
* Change JetPack Item Visuals to use GenericVisualizer instead of AppearanceChangeEvents

* Fix YAML indentation for jetpacks.yml
2025-06-04 13:10:06 +02:00
PJBot
146ba7edbb Automatic changelog update 2025-06-04 10:54:07 +00:00
SlamBamActionman
d81e82cef7 Add Diona rooting (#32782)
* Initial commit

* Add sound

* Review commets

* addressing review

* I think this is what Slart meant?

* Review fixes

* More fixes

* tiny formatting

* Review fixes

* Review fixes

* Fix small timing error

* Follow new action system

* review

---------

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-06-04 12:52:59 +02:00
PJBot
1c8c85ea1d Automatic changelog update 2025-06-04 10:13:45 +00:00
vitopigno
f8d0b0cba3 Add text highlighting (#31442)
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>
2025-06-04 12:12:37 +02:00
SlamBamActionman
44000552c3 Merge stable into master (#38058) 2025-06-04 11:35:43 +02:00
SlamBamActionman
7567f17a46 Change "Terrorism" to "Station-Wide Destruction" in Space Law (#37362)
* crime is bad

* Add atmos description

* Update SpaceLaw.xml
2025-06-04 11:08:42 +02:00
PJBot
a1b5a59745 Automatic changelog update 2025-06-04 08:17:24 +00:00
Moomoobeef
2184d38460 Stylized the nanotask printouts to be *pretty* (#37805) 2025-06-04 01:16:14 -07:00
PJBot
da5122a891 Automatic changelog update 2025-06-03 23:10:02 +00:00
Spessmann
a3550d0f8f Convex AI turret update (#38053)
convex update
2025-06-03 19:08:53 -04:00
PJBot
23614edffc Automatic changelog update 2025-06-03 18:21:18 +00:00
ScarKy0
a7db20df41 Increase uranium window health (#38040)
init
2025-06-03 11:20:09 -07:00
PJBot
c8c10b88a8 Automatic changelog update 2025-06-03 18:14:07 +00:00
K-Dynamic
71d928bbd1 Cryo sleep units no longer collide with mobs (#37979)
* make cryo sleepers not trap people

* don't forgor to push change
2025-06-03 11:13:00 -07:00
PJBot
7f92383baa Automatic changelog update 2025-06-03 17:39:14 +00:00
TheFlyingSentry
384dcae81d Fixes electropacks not ignoring insulation (#38011)
Co-authored-by: TheFlyingSentry <Daniel.l.Elledge@gmail.com>
2025-06-03 10:38:07 -07:00
PJBot
a8dcb4ff43 Automatic changelog update 2025-06-03 16:02:15 +00:00
Hitlinemoss
442094da5b Cargo food crate adjustments (#38006)
* Adjusted cargo food prices; removed large pizza/softdrinks crates

* Adjusted salvage_rewards.yml and cargo_gifts.yml around the removal of large pizza/soda crates
2025-06-03 18:01:07 +02:00
āda
b6af2dbaf8 Loc fix for emote guidebook (#38020)
Loc fix
2025-06-03 17:55:15 +02:00
ScarKy0
9dd0855dd0 Predict AME Fuel Examine (#38018)
* init

* :)
2025-06-03 13:51:50 +02:00
PJBot
06476d766d Automatic changelog update 2025-06-03 11:51:05 +00:00
ScarKy0
464b2e1d3c Fix directional window inconsistencies (#38038) 2025-06-03 13:49:57 +02:00
PJBot
37c206851e Automatic changelog update 2025-06-03 05:59:35 +00:00
JpegOfAFrog
fdc8aa8e89 Adds air atmospherics markers to emergency_plasma.yml (#37768)
Co-authored-by: GuyThatFawkes <212874941+GuyThatFawkes@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-02 22:58:25 -07:00
PJBot
e2f7675545 Automatic changelog update 2025-06-03 04:31:30 +00:00
Mixelz
89bb7e9ade Plasma genpop (#38028)
* 1st Draft

1st Genpop Draft

* Draft 2

* Tile Fixes

Curse you Spanky

* Added Salv Board & Turrets

* Spanky Change Requests

See Plasma Discord Thread for details

* Variantize + Fix Rotations

:godo:
2025-06-03 00:30:22 -04:00
PJBot
4f71d32f21 Automatic changelog update 2025-06-02 21:21:46 +00:00
Manuel Gusmão
a614e719ff Fix: Wall-mounted SpawnPrototype Issue. (#36353)
Fix #34569: Wall-mounted SpawnPrototype Issue.
Every wall-mounted prototype that uses SpawnPrototype in it's
deconstruction now uses GivePrototype
which gives the entity to the user, or drops it on the ground
in case their hands are full, no longer
spawning the entity inside the wall or on the other side of it
2025-06-02 17:20:39 -04:00
PJBot
3fa3b39878 Automatic changelog update 2025-06-02 17:07:52 +00:00
Krunklehorn
c2b1b81ec8 Add checks for various complex interactions (#37246)
* Prevent toggling radiation collectors

* Prevent resisting locks

* Prevent unbuckling others, early exit before doafter

* Prevent camera and camera router setup

* Prevent rotating and flipping

* Also prevent adding the unbuckle verb.

* Revert ResistLocker changes

* Prevent emitter tampering

* Also prevent lock verb

* Prevent toggling welders

* Prevent gun open/close bolt, rack and switch mode

* Prevent toggling stun batons
2025-06-02 10:06:45 -07:00
PJBot
9167683d10 Automatic changelog update 2025-06-02 16:17:17 +00:00
slarticodefast
1441effed2 improve noir glasses shader (#37996)
* improve noir glasses shader

* tweak values
2025-06-02 09:16:10 -07:00
PJBot
79e0ed38d1 Automatic changelog update 2025-06-02 14:03:49 +00:00
BarryNorfolk
b2d0f7ed28 Add multipart machines system (#35969) 2025-06-02 17:02:41 +03:00
PJBot
9a38d66df2 Automatic changelog update 2025-06-02 11:10:52 +00:00
Ciarán Walsh
d83f393fa4 Use distinct action labels for toggling internals on and off. (#36073)
* Use distinct action labels for toggling internals on and off.

* Implement specific actions for enabling/disabling internals

Avoids potential confusing race conditions where two people might perform the "Toggle Internals On" action an the same person,
which would have jsut toggled twice.

* If no gas tank, will give popup

---------

Co-authored-by: beck-thompson <beck314159@hotmail.com>
2025-06-02 13:09:45 +02:00
PJBot
8f1c624075 Automatic changelog update 2025-06-02 10:42:41 +00:00
Cojoke
2721d8fd5d Lube Evaporates Slowly (#37998) 2025-06-02 12:41:34 +02:00
PJBot
8d59c6310d Automatic changelog update 2025-06-02 09:19:53 +00:00
ScarKy0
a02ca566ac Air Grenade Cargo Order (#38010) 2025-06-02 02:18:45 -07:00
PJBot
89a419da4f Automatic changelog update 2025-06-02 05:02:53 +00:00
chromiumboy
45012cbe1d Layering for atmospheric pipes (#36124)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: Kevin Zheng <kevinz5000@gmail.com>
2025-06-01 22:01:43 -07:00
PJBot
aa5ca90a3b Automatic changelog update 2025-06-01 21:10:23 +00:00
ToastEnjoyer
0a565469c7 Made C-4 Major contraband instead of syndicate contraband (#38004) 2025-06-01 23:09:15 +02:00
PJBot
e15de953b4 Automatic changelog update 2025-06-01 19:39:48 +00:00
Boaz1111
ddb4c8f034 Marathon Update - Genpop (#37687)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-06-01 12:38:39 -07:00
Tayrtahn
6fc2aa4a91 Add basic test of station initial power supply (#29698)
* Add basic test of station initial power supply

* Add info about stored power vs needed amount

* Update map list

* Get it compiling again

* Get it working again

* Only run if explicitly requested

* Fix merge

* We call 'em batteries

* Mark the test as dirty
2025-06-01 11:51:37 -04:00
PJBot
5a30cddf42 Automatic changelog update 2025-06-01 15:49:23 +00:00
Hitlinemoss
2fa67638a1 Added bulk cleanades crate (#38000)
* added bulk cleanades crate, cargo requests need debugging?

* fixed cargo request error
2025-06-01 08:48:16 -07:00
Łukasz Mędrek
d2281e20dd remove empty file (#38001) 2025-06-01 11:24:13 -04:00
K-Dynamic
ffa7d68010 Fixes maploadbenchmark typo (#37981)
fixes typo
2025-06-01 09:55:42 +02:00
Princess Cheeseballs
9b03e8347b [HOTFIX] Salvage Job Computer Eating your Jobs (#37997)
One line fix
2025-06-01 17:06:34 +10:00
PJBot
be2137a372 Automatic changelog update 2025-06-01 05:32:54 +00:00
TheFlyingSentry
4a378bd8dc Adding a new trait: Monochromacy! (#37989)
Totally not misspelt necromancy

Co-authored-by: TheFlyingSentry <Daniel.l.Elledge@gmail.com>
2025-06-01 07:31:46 +02:00
slarticodefast
e0ce82e1c7 Fix center of mass mispredict when placing tiles (#37969)
fix COM mispredict
2025-06-01 00:39:45 -04:00
PJBot
a241584919 Automatic changelog update 2025-06-01 04:29:24 +00:00
ScarKy0
28aed7b22f Further Mail Balancing (#37986) 2025-05-31 21:28:13 -07:00
K-Dynamic
7b9d5b400f Mirror resprite (#37899)
* mirror resprite, add snapgridcenter

* antique mirror

* swap default mirror; antique-mirror renamed back to mirror, new mirror renamed rectangle-mirror, changed RSI underscore to regular dash for consistency
2025-05-31 21:36:10 -04:00
github-actions[bot]
596b1e7e44 Update Credits (#37988)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-05-31 17:41:04 -07:00
deltanedas
7aa1986209 fix dragon devour action (#37968)
Co-authored-by: deltanedas <@deltanedas:kde.org>
2025-05-31 22:29:51 +02:00
GnarpGnarp
f21b6d139a Rename paper_background_black files (#37976)
Renamed "paper_background_black" to "paper_background_blood_red" as the colour of the file is not black.
2025-05-31 13:09:10 -07:00
nikthechampiongr
f7ffa9b89b Update CODEOWNERS (#37978) 2025-05-31 19:42:42 +02:00
Nemanja
e92b6b6a7e Add support for contextual information in EntityTables (#37737)
* Add context support for entityTables

* fix build fail

* comments

* Update Content.Shared/EntityTable/EntityTableSystem.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-05-31 15:40:25 +02:00
PJBot
ab776f2493 Automatic changelog update 2025-05-31 02:10:25 +00:00
beck-thompson
5c30cf92fd Remove keep alive objective. (#37945)
* Remove keep alive

* Added reasoning
2025-05-30 22:09:16 -04:00
K-Dynamic
e1b85cc9d1 Resprites black, brown, fancy, white cowboy boots (#37901)
* black and brown cowboy boots

* fancy cowboy boots

* west virginiaaaaaaa mountain mamaaaaaa take me hooooome country roooadddds

* inhands for every boot

* forgor about white boots
2025-05-30 19:59:57 -04:00
PJBot
efa1475d57 Automatic changelog update 2025-05-30 23:55:03 +00:00
Centronias
9053c9692f Decouple Lights from Toggleable Visuals (and headphone music notes bugfix) (#35341)
* - Combine enum keys `ToggleableLightVisuals` and `ToggleVisuals` into `ToggleableVisuals`
- Rename `ToggleableLightVisualsComponent` to `ToggleableVisualsComponent` and `ToggleableLightVisualsSystem` to `ToggleableVisualsSystem`
  - (The `SpriteLayer` field on the component is now required because the old default of `light` doesn't make sense anymore)
- Make it so that `ToggleableVisualsComponent` works even when there's not a light attached to the entity
  - (Amazingly this seems to have only applied to  Headphones, but I can only imagine there are many other things people would like to do with simple toggleable visuals)
- Explicitly make `ItemTogglePointLightComponent`'s purpose to make `ToggleVisualsComponent` apply to `PointLightComponent`s on the same entity.
  - Add field `ToggleableVisualsColorModulatesLights`, which makes the `Color` appearance value of `ToggleableVisuals` modulate the color of lights on the same entity
  - Lots of prototype updates to uptake the above

* fix bad merge

* unbork robust

* blindly letting rider reformat stuff

* I guess I never cleaned up these imports at all
2025-05-30 19:53:56 -04:00
Kyle Tyo
85636335ec Decouple the lamp from the base air alarm sprite. (#37950)
a touch of verin here and a sprinkle of verin there
2025-05-30 19:37:51 -04:00
āda
cf9aa579ad Add a missing ftl to AI turrets (#37965)
* missing ftl

* make it pop
2025-05-30 19:15:46 -04:00
Fildrance
11ca728e41 fix: anomaly shooting no longer throws when it have no possible targets in range (#37927)
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
2025-05-30 19:11:25 -04:00
3nderall
00e96fee9c give characters wearing clown masks hair again (#37909) 2025-05-30 19:02:22 -04:00
PJBot
87e819e057 Automatic changelog update 2025-05-30 21:42:37 +00:00
ArtisticRoomba
c4c528035b Show TEG theoretical supply on inspect (#37957)
* Show TEG theoretical supply on inspect

* revert autoformatting changes
2025-05-30 16:41:30 -05:00
Obani Gemini
57e5a091b2 Improved French accent (th sound) (#33630)
* Improved French accent

* Remove the double consonna part to simplify the code and behaviour

* French accent: clarify a comment

Co-authored-by: Centronias <charlie.t.santos@gmail.com>

---------

Co-authored-by: Centronias <charlie.t.santos@gmail.com>
2025-05-30 13:10:13 -07:00
PJBot
3906754853 Automatic changelog update 2025-05-30 18:12:55 +00:00
Spanky
3c53b2835a Fix Secret Door Sprites (#37914)
* Make secret doors have unique directional sprites, and new animations.

* Update attributions.
2025-05-30 20:11:48 +02:00
PJBot
707cb90b4f Automatic changelog update 2025-05-30 16:17:57 +00:00
Nox
c655f528f9 Faster Drozd burst (#34906)
* Increased burst firerate and cooldown by 25%. (firerate 12 -> 18, cooldown 0.25 -> 0.375)

* Set default firemode on Drozd to burst

* Heisentest
2025-05-30 18:16:50 +02:00
PJBot
c0f5f5c095 Automatic changelog update 2025-05-30 16:04:56 +00:00
Alpaccalypse
0df4a2e243 Absinthe makes you mildly hallucinate (#34371)
* Absinthe make you mildly hallucinate. Smaller glass volume, doesn't make you sick.

* Reordered glass fill sprites to look more equal
2025-05-30 18:03:49 +02:00
PJBot
d673fdcdda Automatic changelog update 2025-05-30 15:52:01 +00:00
Nox
e94dee8656 Select Fire Rifles (#34907)
* Added semi automatic mode to AKMS & Lecter

* Optimized changes to reduce line count.
2025-05-30 17:50:54 +02:00
PJBot
2339bf08f9 Automatic changelog update 2025-05-30 15:21:04 +00:00
āda
a89de7ce17 Add filters to cutter machine (#34321)
* tiles

* lint

* categories

* blank line

* small base recipe change

* indent

* reorginize
2025-05-30 17:19:57 +02:00
DrSmugleaf
b86c1ea01d Allow actions to specify if they want to rotate the user when targeting (#37958) 2025-05-30 08:56:16 -04:00
PJBot
1e3212ab32 Automatic changelog update 2025-05-30 12:53:14 +00:00
K-Dynamic
ada5c4f3dd Elkridge: Turrets (#37961)
* skub

* turrets
2025-05-30 08:52:06 -04:00
PJBot
fa08d12b2d Automatic changelog update 2025-05-30 10:08:32 +00:00
beck-thompson
05fac53de6 Chameleon controller implant (Clothing fast switch) (#33887)
* Add the chameleon controller implant

* address the issues (Git please dont kill me)

* Address the review and fix some merge conflicts!

* Cleanup

* Add use delay

* Silly mistakes

* Making a PR at 2 am: Gone wrong

* Predict use delay and disable the buttons until you can choose another

* First phase custom clothing

* Better system, now relays to agent id and mindshield. Chameleon loadouts are a lot better to work with as well

* Address the review! No more evil goto

* Slams way is better I should have read more closely xD

* Some of the jobs

* Add to Cargo, CentComm, Service, Passenger, Ninja, Cluwne, Wizard + Minor changes to existing; Add chameleon to bandanas, medals, jugsuits and HUDs

* Add everything else

* Fix test

* Job name

* This looks better

* Add department organization

* Minor cleanup

* Added some mindshields

* Remove redudent comment and change funcion name to be clearer

* Fix cluwne outfit

* fix merge conflicts

---------

Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
2025-05-30 12:07:25 +02:00
PJBot
fa3468270e Automatic changelog update 2025-05-30 07:26:39 +00:00
Southbridge
41d638cc36 Box Station - Added Turrets (#37860) 2025-05-30 00:25:30 -07:00
Princess Cheeseballs
f6c9ef344e [Action Refactor Fix] Action blockers now work on Actions (#37948) 2025-05-30 00:30:26 -04:00
PJBot
93f780c22d Automatic changelog update 2025-05-30 01:25:59 +00:00
SeamLesss
4d8f60cec1 Add Practice Magazines to the Secfab (#37710)
easy
2025-05-29 18:24:53 -07:00
PJBot
22cff56386 Automatic changelog update 2025-05-30 01:17:28 +00:00
brainfood1183
1118ea50e0 New sprites for Coal and Gold ore crabs, new Bananium ore crab and Bananium rock anomaly. (#37787)
* new sprites for coal and gold ore crabs, new bananioum ore crab and rock anomaly.

* add whitespace to end of line in ore.yml

* fix white space end of file.

* fix for linter fail.
2025-05-29 18:16:20 -07:00
PJBot
9fa6e8001b Automatic changelog update 2025-05-30 00:07:13 +00:00
K-Dynamic
1c4ac9c4a7 Bot spawners (supplybot, firebot, honkbot) (#37929)
* firebot, supplybot spawners

* moved honkbot spawner from misc.yml to bots.yml

* fix inconsistent ID and duplicate component field

* remove duplicate supplybot
2025-05-29 20:07:00 -04:00
mhamster
caf18f4bc6 Chameleon clothes + EMP behaviour (#30924)
* resolving conflicts??

* Controlled clothes changing

+ time stuff
+ EmpChangeIntensity

* Single clothes change

+ EmpContinious
+ moved random pick logic into GetRandomValidPrototype

* Changes from reviews

Co-Authored-By: Nemanja <98561806+emogarbage404@users.noreply.github.com>

* Update ChameleonClothingComponent.cs

* repairing irreparable damage

i failed, did i?

* damaging repaired irreparable

uh???

* 2025 FUN ALLOWED!!!!

* Minor changes from reviews

Co-Authored-By: beck-thompson <107373427+beck-thompson@users.noreply.github.com>

* Fix merge conflicts

* Fix that last bug

* cleanup

* Remove VV attr.

* AutoPausedField on emp time change

---------

Co-authored-by: Nemanja <98561806+emogarbage404@users.noreply.github.com>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: EmoGarbage404 <retron404@gmail.com>
2025-05-29 20:06:03 -04:00
Quantum-cross
394aa7e7b8 Make TryGetWires<T> actually work. (#37937) 2025-05-29 19:48:27 -04:00
deltanedas
9b2dbebcf7 fix smite use delay (#37940) 2025-05-29 19:41:25 -04:00
Nox
b2f5b27579 Fixed nukie corpsman antag name (#37933)
Fixed

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
2025-05-29 23:12:31 +02:00
PJBot
0a24b230ec Automatic changelog update 2025-05-29 05:04:53 +00:00
Spessmann
3b96d643bc Random maints update to decal spawners (#37916) 2025-05-28 22:03:46 -07:00
PJBot
98466ef73e Automatic changelog update 2025-05-28 22:52:17 +00:00
pathetic meowmeow
62bd5abfa0 Actually handle nutrition and robust harvest entity effects (#37912) 2025-05-29 00:51:09 +02:00
TemporalOroboros
f81d216630 Fix obsolete MapGridComponent warning in SpawnAfterInteractSystem (#37911) 2025-05-29 00:34:40 +02:00
TemporalOroboros
29ccce134b Fix obsolete method warning in SimpleFloorPlanPopulatorSystem (#37910)
Fix obsolete method warning
2025-05-28 23:44:24 +02:00
PJBot
b2954f14c5 Automatic changelog update 2025-05-28 19:53:22 +00:00
deltanedas
b3825dce97 action refactor proper ecs edition (#27422) 2025-05-28 15:52:11 -04:00
Tayrtahn
a9f7cfbcb6 Update UIControllers to use Log (#37792)
Update UIControllers to use Log
2025-05-28 12:50:31 -04:00
Tayrtahn
721d224fd7 Cleanup some misc warnings (#37904)
* Fix warning CS8524 for TurretControllerWindow

* Fix warning CS0660 for AtmosAlarmThreshold
2025-05-28 12:45:38 -04:00
Tayrtahn
447f866745 Cleanup warning in StealConditionSystem (#37903)
Fix 1 warning in StealConditionSystem
2025-05-28 18:17:43 +02:00
metalgearsloth
f6dcae8d3a Update submodule to 261.1.0 (#37900) 2025-05-29 00:29:16 +10:00
metalgearsloth
875abc4419 Update submodule to 261.0.0 (#37898) 2025-05-28 19:52:40 +10:00
PJBot
8671e6f47d Automatic changelog update 2025-05-28 09:40:40 +00:00
Moomoobeef
9a3cb1d2f6 high-vis vest is now dimmer (#37869)
* high-vis vest is now dimmer

accomplished by adding the unshaded sprite on top of the existing one in a third layer, this time set to shaded. And as the sprite is transparent, it lets some of the existing glow through.

* added relevant comments
2025-05-28 11:39:29 +02:00
metalgearsloth
ea7350f3f1 Content changes required for physicsmap purge (#37878)
* PhysMap changes

* Fix call

* Avoid tilefriction resolve

yummy

* a
2025-05-28 19:38:47 +10:00
TemporalOroboros
10dee14893 Fix radiation system warnings (#37892)
* Use SharedMapSystem for GetTileIndices

* Fix formatting errors in Server

* Fix formatting errors in Client
2025-05-28 11:34:58 +02:00
PJBot
1b54969a05 Automatic changelog update 2025-05-28 09:33:49 +00:00
Minemoder5000
6ddf739c56 Grape juice cup now has grape juice (#37895)
grape juice
2025-05-28 11:32:42 +02:00
TemporalOroboros
5f5f6765ce Use SharedMapSystem for GridTileToLocal (#37894) 2025-05-28 11:31:32 +02:00
TemporalOroboros
f99d00cf5f Fix for obsolete method warning in AtmosphericsSystem (#37897)
* Make PryTile use Entity<T>
Converts the old parameters into an obsolete overload

* Make HandleDecompressionFloorRip use Entity<T>
Converts the old parameters into an obsolete overload

* Convert the one use to use Entity<T>

* Delete obsolete private methods
2025-05-28 11:16:54 +02:00
ArtisticRoomba
6368baf96e Fix ATS (#37896) 2025-05-28 01:37:43 -07:00
PJBot
96ce159f61 Automatic changelog update 2025-05-28 07:53:59 +00:00
ArtisticRoomba
6331a4ba6b ATS update (#37891) 2025-05-28 00:52:52 -07:00
PJBot
378240506e Automatic changelog update 2025-05-28 07:32:41 +00:00
SlamBamActionman
08acfa23bc Change explosive triggers to be more consistent (#34465)
* yes I watch liltenhead

* oops

* Revert pen changes

* Add comment for the future
2025-05-28 09:31:34 +02:00
Tiniest Shark
40e410cc1f Large Tail Wag (#37806)
Got Ubaser's approval, merging.
2025-05-28 00:55:31 -04:00
Tiniest Shark
b2469b67a7 art update on the spine 2025-05-28 00:44:05 -04:00
Tayrtahn
c1b9b7e6d7 Fix walking in place animations when holding walk button (#37887)
Fix SpriteMovement playing when holding walk button
2025-05-27 20:14:49 -04:00
PJBot
241e5836d1 Automatic changelog update 2025-05-27 23:56:55 +00:00
Southbridge
755ce6f59b Decal Spawners (#37066)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2025-05-27 16:55:48 -07:00
Tayrtahn
d28c64f76a Fix some misc warnings (#37858)
Fix misc warnings
2025-05-27 19:54:19 -04:00
mubururu_
7c9a031f99 inhands for CAKE + sprite fixes (#37819)
caek
2025-05-27 19:47:58 -04:00
PJBot
a65c43c866 Automatic changelog update 2025-05-27 23:45:22 +00:00
Perry Fraser
d2add64897 tweak: add confirm to server restart button (#37849) 2025-05-27 19:44:15 -04:00
PJBot
d6356fd8a9 Automatic changelog update 2025-05-27 23:09:42 +00:00
K-Dynamic
14dc97da8d Resprites hatch and hatch_maint (#37870)
* hatch_maint colours

* hatch colours

* make panel_open consistent with other airlocks

* hatch_maint new sprites

* hatch new sprites
2025-05-27 19:09:29 -04:00
Southbridge
7aa393cfdb Amber Station - Added Sentry Turrets (#37859) 2025-05-27 16:08:34 -07:00
PJBot
9e3b1bd139 Automatic changelog update 2025-05-27 21:22:46 +00:00
Moomoobeef
5051e9278a reduced the number of slots in bookshelves (#37866)
* changed bookshelfs yml

I reduced the number of slots in bookshelves, now it has 40 slots, and since one book takes two slots, and there are 20 fill levels (not including empty) now each book corresponds to one sprite. I also increased the number of books that random bookshelves generate, so that bookshelves will be empty less often.

* increased minimum random book count

in testing there were still a lot of bookcases with very few books in them.

* too many

* still too many

decided it looks better with the variance of having some shelves sparse and some not, rather than all ~half-filled. Wish there was a way to do something about the distribution, rather than pure random maybe something like weighting it toward one of the ends of the scale. but alas, I don't know how to do that.

* guidebook chance is random too now

decided that guidebook chance should also be random. now we can have shelves that are truly empty. anyway, I set it as 0-2, so there is a 2/3 chance that a bookshelf has a guidebook in it anyway, this also means that some shelves will have two guidebooks, but hey; who can have *too many* guidebooks?

* this line shouldn't be here
2025-05-27 14:21:39 -07:00
PJBot
3c462ff4a0 Automatic changelog update 2025-05-27 16:40:59 +00:00
Professor Renderer Grizzleton
94fba22eee Give cluwnes job icons (#37834)
* Add Weh-pet

* Add Weh-pet (again)

* Change weh-pet size to Medium

* Change weh-pet size to Medium (again)

Probably should've looked into what "medium" meant in yaml

* I may be stupid and misread how MIDIs worked.

* Finish weh-pet sprites

Weh!

* Add weh-pet to rare maints loot table

* Give cluwne sechud icon

* Remove weh-pet related content from cluwne-id

Why was it still THERE?

* Revert "Add Weh-pet (again)"

This reverts commit 8e135e520859ef94e693e27a86af1eed9576f9ab.

* Fix whitespace issues in residual files

* Update Resources/Textures/Interface/Misc/job_icons.rsi/meta.json

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

* More whitespace fixing and credit adding

* Resolve conflict in job_icons.rsi/meta.json

* Fixing whitespace *again*

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-05-27 18:39:52 +02:00
PJBot
1a346f7e82 Automatic changelog update 2025-05-27 16:27:36 +00:00
PicklOH
3365e97895 Restore Gas Pipe Naming in Construction Menu (#37881)
restore gas pipe naming in construction menu
2025-05-27 18:26:30 +02:00
PJBot
1be39e0010 Automatic changelog update 2025-05-27 11:48:57 +00:00
Simon
2bbe66cea9 Remove capacitors and matter bins (#37725)
* Remove capacitors and matter bins

* fix migrations and yaml errors, remove parts fully

* Rename to "modular machine part"

* Sloth review
2025-05-27 21:47:49 +10:00
PJBot
a371c15748 Automatic changelog update 2025-05-27 11:35:34 +00:00
metalgearsloth
3c52dd102e Don't click-to-face when moving (#37874)
Looks bad doing it for a single tick.
2025-05-27 13:34:23 +02:00
Tayrtahn
4d35998f25 Cleanup warnings in SharedMoverController (#37613)
* Refactor IsAroundCollider to use EntityLookupSystem

* Formatting

* MapSystem methods

* Remove unused usings

* GrabRangeVV -> GrabRange
2025-05-27 20:01:04 +10:00
B_Kirill
9e834c70b9 Add overkill thresholds to more objects (#37745)
* Add overkill thresholds to more objects

* Add newline

* curtains (25 -> 50)
2025-05-27 19:09:46 +10:00
Killerqu00
26a0bfbbc5 Sanitize admin UI input for role bans (#35422)
if job does not exist, log it
2025-05-26 23:27:31 -07:00
Kyle Tyo
cc6f364e9d Kill resolves in vote commands (#37637)
* kill resolves in VoteCommand.cs

* consistency and cleanup

* final touch
2025-05-27 05:18:59 +02:00
slarticodefast
be761ea537 merge stable into master (#37856) 2025-05-26 21:37:20 +02:00
K-Dynamic
556c6b905c Updated weld overlay for blast door (#37846)
updated weld for blast door
2025-05-26 13:17:15 -04:00
Tayrtahn
24dd207b4f Cleanup remaining IMapManager.MapExists uses (#37851)
Cleanup remaining IMapManager.MapExists uses
2025-05-26 18:45:55 +02:00
Myra
df2c2adc9d Stable master merge (#37850) 2025-05-26 17:30:30 +02:00
PJBot
80dd9a553f Automatic changelog update 2025-05-26 13:01:57 +00:00
chromiumboy
f99850e1fb Sentry turrets - Part 6: Sentry turret control panels (#35235) 2025-05-26 16:00:50 +03:00
PJBot
32ffbbfb0f Automatic changelog update 2025-05-26 12:08:56 +00:00
ArtisticRoomba
9a910873c8 Significantly improve TEG power generation stability (#37658)
* Significantly improve TEG power generation stability

* Revert "Significantly improve TEG power generation stability"

This reverts commit e88278c0f8dea925a89b240e09e5dbcb84f9d174.

* Reimplement without auto formatting obliterating the entire system

* second round of balancing
2025-05-26 14:07:49 +02:00
PJBot
ba76ceec08 Automatic changelog update 2025-05-26 11:54:26 +00:00
ArtisticRoomba
bbfccfe459 Kill the TEG meta with really big hammers (#37728)
* First round of balancing

* Second round of balancing
2025-05-26 13:53:19 +02:00
YoungThug
e471ab1843 Add Fancy Speech Bubbles for Diona and Gingerbread (#37742)
* Add Fancy Speech Bubbles for Diona and Gingerbread

* Fix White-Spacing

* Fix Fails
2025-05-26 13:51:09 +02:00
B_Kirill
cb8e7446a4 Add pause to runclient (#37748) 2025-05-26 13:50:05 +02:00
PJBot
58b3e572be Automatic changelog update 2025-05-26 10:50:40 +00:00
Jessica M
65bd1f0170 Lets angry AI gorillas pry open doors, smash things, and vault tables (#37822) 2025-05-26 12:49:33 +02:00
PJBot
67a4dc2479 Automatic changelog update 2025-05-26 07:31:07 +00:00
Southbridge
318d817cff Amber Station - Added Sec Beacons (#37700) 2025-05-26 00:29:58 -07:00
slarticodefast
e8bc811f7a Add WieldingBlockerComponent (#37778)
initial commit
2025-05-25 23:50:30 -04:00
PJBot
68d5d940cf Automatic changelog update 2025-05-26 03:37:23 +00:00
Fildrance
291ccfbe23 Spray nozzle can suck puddles into tank directly! (#30600)
* feat: now vacuum cleaner can suck solutions from floor

* refactor using AbsorbentSystem instead of separate vacuum cleaner

* refactor: remove unused vacuum cleaner files

* refactor: renamed ConnectedContainerComponent to SlotBasedConnectedContainerComponent (and system)

* fix: fix invalid comp name

* fix: no more spray nozzle messaging about water inside bottles etc.

* refactor: minor refactor in SlotBasedConnectedContainerSystem and adjustments after merge

* refactor: cleanups

* refactor: renaming

* refactor: update to use _puddleSystem.GetAbsorbentReagents

* refactor: changed interactions with SlotBasedConnectedContainerSystem into events

* refactor: new sound and action delay adjusted to sound (amount tweaked a bit accordingly, almost)

* refactor: added networking for SlotBasedConnectedContainerComponent

* fix attribution for vacuum-cleaner-fast.ogg

* trying to fix multi-license for mix sound file

* remove empty line

* refactor: remove trailing whitespace

* by ref struct, brother

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
Co-authored-by: EmoGarbage404 <retron404@gmail.com>
2025-05-25 23:36:16 -04:00
PJBot
d1370de758 Automatic changelog update 2025-05-26 02:38:29 +00:00
Kyle Tyo
2ec019dc0f Add a safety net to the round controls in the Admin window. (#37836)
some changes.
2025-05-25 22:37:21 -04:00
slarticodefast
e0666cc510 merge staging into master (#37829) 2025-05-26 00:16:14 +02:00
RedBookcase
394388be5c Updated Drozd and Lecter with magazine states and small animations. (#37790)
Co-authored-by: RedBookcase <Usualmoves@gmail.com>
2025-05-25 17:55:50 -04:00
Tayrtahn
3c48e6abaa Cleanup some easy-to-fix static logger warnings (#37820) 2025-05-25 23:20:08 +02:00
Velcroboy
1f2d4e7efc Update locker storage to entity tables (#37809)
* Update locker storage to entity tables

* tidy

* Requested changes

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2025-05-25 21:48:10 +02:00
Princess Cheeseballs
11d0799e1a Mob Spin Fix Update (#37603)
Kid named negative velocity
2025-05-25 21:09:25 +02:00
PJBot
2b03c91823 Automatic changelog update 2025-05-25 18:37:07 +00:00
AsnDen
178a085328 Bar sign AlignTile version and fixtures for bar signs (#37756)
* fixtures and sprite offset

* AlignTile versions

* Update bar_sign.yml
2025-05-25 20:36:00 +02:00
Tayrtahn
6b2c50f4ba Cleanup warnings in BasicStationEventSchedulerSystem (#37818)
Cleanup 4 warnings in BasicStationEventSchedulerSystem
2025-05-25 14:27:47 -04:00
PJBot
e73f1e3a19 Automatic changelog update 2025-05-25 18:12:47 +00:00
Moomoobeef
4cab7180be Dirty Steel Tile now has Variants (#37800)
added variants for dirty tile
2025-05-25 14:11:40 -04:00
PJBot
ad4737dc2a Automatic changelog update 2025-05-25 18:04:09 +00:00
brainfood1183
51ca833662 kangaroos can now be equipped with north stars and knuckle dusters. (#37789)
* kangaroos can now be equipped with north stars and knuckle dusters (except stun knuckle duster).

* whitespace issues fix..

* damn whitespace

* fix whitespace

* fix whitespace

* final fix.
2025-05-25 20:03:01 +02:00
Stop-Signs
d81977281e Make foods reflect their ingredients better (#34138)
* Borbers

* Meals.yml Updated

* Update Cursed noodles

* Soups even more cursed

* Pies tacos and cakes

* typo

* typo ops pt 2

* Typo ops + non-existant reagent

* justice for soy

* minor mistake in soup.yml

* Update pie.yml
2025-05-25 11:02:04 -07:00
Tayrtahn
50fb48de2e Cleanup all instances of IMapManager.GetMapEntityId (#37814)
* Cleanup all instances of IMapManager.GetMapEntityId

* Dependencies

* LocalizedEntityCommands
2025-05-25 19:09:47 +02:00
Tiniest Shark
95e7d16a92 minor color fix 2025-05-25 12:06:44 -04:00
PJBot
e08a7f3c84 Automatic changelog update 2025-05-25 15:58:32 +00:00
K-Dynamic
a775858486 Add welded visuals to shutters and blast doors (#37807)
add welded to all shutters and blast doors
2025-05-25 17:57:18 +02:00
Tayrtahn
4c4c98617e De-hardcode shuttle docking messages/audio (#37813) 2025-05-25 17:46:52 +02:00
Moomoobeef
97e6ad7c9d fixed gay wackpack (#37812) 2025-05-25 10:26:04 -04:00
Tiniest Shark
9391b32e76 big tail can wag now 2025-05-25 01:55:59 -04:00
Tayrtahn
821b4b738a Cleanup warnings in TileAtmosCollectionSerializer (#37798)
Cleanup warning in TileAtmosCollectionSerializer
2025-05-25 14:18:06 +10:00
github-actions[bot]
d7acba43ec Update Credits (#37799)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2025-05-24 20:37:05 -04:00
Cojoke
a66de72a26 Removes references to GetAnchoredEntitiesEnumerator(Vector2i) (#37796)
* Removes references to GetAnchoredEntitiesEnumerator(Vector2i)

* requested changes(I think)
2025-05-25 01:00:47 +02:00
Tayrtahn
05d3d9350d Cleanup logging in guidebook embeds (#37794) 2025-05-25 00:47:47 +02:00
Simon
a9f36e6592 Fix admin chat relay sending to every player online (#37795) 2025-05-25 00:11:01 +02:00
Pieter-Jan Briers
ec3edb7264 New Discord integration fixes (#37793)
Fix admin chat relay.

Fix leaked task instance.

Fix warning about gateway intents on startup.

Fix packaging.
2025-05-24 23:27:12 +02:00
deltanedas
d56c0d0610 remove actions from maps (#37457)
Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2025-05-24 13:37:10 -07:00
Simon
7867cbec00 Add basic discord client integration with ooc and admin chat support (#33840)
* Add basic discord client integration with ooc and admin chat support

* Use username instead of global name

WHY IS GLOBAL NAME NOT JUST THE USERNAME??? WHY ARE THERE NO DOC COMMENTS???

* stuff

* Reviews, methinks.

* Reviews

* reviews
2025-05-24 20:49:52 +02:00
slarticodefast
fef4187995 Move PriceCalculationEvent and EstimatedPriceCalculationEvent to shared (#37782)
* moce PriceCalculationEvent to shared

* Update Content.Shared/Cargo/PriceCalculationEvent.cs

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

---------

Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2025-05-24 19:36:38 +02:00
Tayrtahn
f4efaaeb72 Convert TimedSpawnerComponent to use an Update loop (#37785)
Convert TimedSpawnerComponent to use an Update loop
2025-05-24 19:35:17 +02:00
SlamBamActionman
8264f6cd3b Add Code of Conduct (#37542) 2025-05-24 19:34:07 +02:00
PJBot
175d99cb95 Automatic changelog update 2025-05-24 17:33:34 +00:00
Tiniest Shark
214338caa6 Inhands for bartender tools and mugs. (#37771) 2025-05-24 13:32:27 -04:00
Rafael Simões Gaspar da Ponte
2b67b49059 Fix space-wizards#35663: Prevent clipping of hovered sprites on rotation (#37784)
This fix addresses an issue where hovered tabletop machines (such as the grinder and electrolysis machine)
had their sprites clipped when the camera was rotated. The problem was fixed by setting noRot: true.
2025-05-24 13:22:09 -04:00
Tayrtahn
f788558b49 Cleanup warnings in AI wire actions (#37780)
Fix 4 warnings in Ai wire actions
2025-05-24 18:08:03 +02:00
Tayrtahn
9df514472f Cleanup AnchorableSystem (#37753)
* The easy part

* Overload and obsolete

* Internal cleanup

* Update all references to new overload
2025-05-24 17:05:09 +02:00
Tayrtahn
b5afebdbce Cleanup remaining warnings in ExplosionSystem (#37764)
* Change ExplosionGridTileFlood.Grid to Entity<T>

* Change ExplosionData.Lookup to Entity<T>

* ExplodeSpace

* ExplosionData.MapGrid

* _currentGrid

* _tileUpdateDict

* 1 warning in Process

* IsEdge
2025-05-24 16:55:46 +02:00
PJBot
4ff221e7b9 Automatic changelog update 2025-05-24 05:12:05 +00:00
Coco
04b6da4ff2 Fix missing weight property in Chief Medical Officer job prototype (#37774)
Co-authored-by: CoconutThunder <1355178+CoconutThunder@users.noreply.github.com>
2025-05-24 01:10:57 -04:00
Sukilove
af736eb93d Added a new detective's office sign (#37765)
* Added a new detective's office sign

* Revised the design
2025-05-23 21:40:52 -04:00
PJBot
fa7c56319b Automatic changelog update 2025-05-23 21:58:17 +00:00
Hitlinemoss
6240a51932 Liquid soap is now slippery (#37747)
* Liquid soap is now slippery

* Adjusted liquid soap friction value
2025-05-23 23:57:06 +02:00
bolantej
e5144c5df8 Fixed Holoclown injector not breaking on drop (#37727) 2025-05-23 14:42:30 -07:00
Sukilove
1f5026bcef Deletes an empty file (#37763) 2025-05-23 14:31:01 -07:00
Tayrtahn
bd6645b021 Cleanup redundant SpriteSystem dependencies in VisualizerSystems (#37758)
Cleanup redundant SpriteSystem dependencies in VisualizerSystems
2025-05-23 14:12:20 -04:00
Tayrtahn
f3f655a8f9 Cleanup warnings in SalvageExpeditionConsoleBoundUserInterface (#37757)
Clean 2 warnings in SalvageExpeditionConsoleBoundUserInterface
2025-05-23 13:12:28 -04:00
pathetic meowmeow
bf41de18aa Move entity effects definitions to shared (#35614)
* Move entity effects to shared

* relocate spawning to server

* Generic version of EntityEffect for just raising event.

* genericise everything

* oops forgot to push you

* some condensation

* finish rebas

* unwhite the space

* oops forgot nuke

* bad rebase fix

* useless annotations begone

---------

Co-authored-by: EmoGarbage404 <retron404@gmail.com>
2025-05-23 12:32:22 -04:00
Tayrtahn
7ba81173bd Cleanup warnings in SmokeOnTriggerSystem (#37754)
Cleanup 2 warnings in SmokeOnTriggerSystem
2025-05-23 17:56:10 +02:00
slarticodefast
c1f1eaa0c3 Cleanup TryGetContainingContainer (#37752)
kill
2025-05-23 17:11:29 +02:00
Tayrtahn
fe4d8e2ea9 Cleanup warning in NPCCombatSystem.Ranged (#37751)
Cleanup 1 warning in NPCCombatSystem.Ranged
2025-05-23 10:56:37 -04:00
slarticodefast
95f1fae8c0 Improve gas constants test (#37749)
* improve gas constants test

* fix test fail

* review
2025-05-23 09:46:41 -04:00
Tayrtahn
8565966b53 Cleanup warnings in CableVisSystem (#37738)
Cleanup 2 warnings in CableVisSystem
2025-05-23 05:22:32 +02:00
Tayrtahn
947e20eeb7 Cleanup warning in EventHorizonSystem (#37736)
* Cleanup 1 warning in EventHorizonSystem

* Now even more future-proof!
2025-05-23 05:19:21 +02:00
Tayrtahn
3f9670f792 Cleanup remaining MapGridComponent.GetAnchoredEntities(MapCoordinates) uses (#37729)
Cleanup remaining MapGridComponent.GetAnchoredEntities uses
2025-05-22 21:42:47 -04:00
PJBot
6c1caec5c8 Automatic changelog update 2025-05-22 18:13:34 +00:00
ArtisticRoomba
66761f5497 Buff gas canister volumes moderately (#37564)
* Buff gas canister volumes moderately

* increase prices moderately
2025-05-22 14:12:24 -04:00
7120 changed files with 505023 additions and 1506874 deletions

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

View File

@@ -1,7 +0,0 @@
contact_links:
- name: Report a Security Vulnerability
url: https://github.com/space-wizards/space-station-14/blob/master/SECURITY.md
about: Please report security vulnerabilities privately so we can fix them before they are publicly disclosed.
- name: Request a Feature
url: https://discord.gg/rGvu9hKffJ
about: Submit feature requests on our Discord server (https://discord.gg/rGvu9hKffJ).

View File

@@ -0,0 +1,28 @@
name: "Request content or suggest an idea"
description: "Suggest content, mechanics, or other changes that you think would benefit the project."
labels: [suggestion]
type: Suggestion
body:
- type: textarea
id: concept
attributes:
label: Concept
placeholder: |
What is the nature of your proposal?
Example:
Add a new role ____ that performs tasks related to ____ and ____.
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Why is this necessary?
placeholder: |
Explain how it would improve the game, or what problems it would fix. Suggestions without proper reasoning and reasons for the addition may be closed.
Example:
Currently, ____ often occurs in the round, which is why ____ is missing. This role could close this need by doing _____.
validations:
required: true

View File

@@ -0,0 +1,28 @@
name: "Запросить контент или предложить идею"
description: "Предложите контент, механику или другие изменения, которые вы считаете принесут пользу проекту."
labels: [suggestion]
type: Suggestion
body:
- type: textarea
id: concept
attributes:
label: Концепция
placeholder: |
В чем заключается ваше предложение?
Пример:
Добавить новую роль ____, которая выполняет задачи связанные с ____ и ____.
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Зачем это нужно?
placeholder: |
Объясните, как это улучшит игру, или какие проблемы это исправит. Предложения без должной аргументации и причины добавления могут быть закрыты.
Пример:
На текущий момент, в раунде часто происходит ____, из за чего не хватает ____. Эта роль могла бы закрыть эту потребность, выполняя _____.
validations:
required: true

View File

@@ -1,20 +0,0 @@
---
name: Report an Issue
about: "..."
title: ''
labels: ''
assignees: ''
---
## Description
<!-- Explain your issue in detail. Issues without proper explanation are liable to be closed by maintainers. -->
**Reproduction**
<!-- Include the steps to reproduce if applicable. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**Additional context**
<!-- Add any other context about the problem here. Anything you think is related to the issue. -->

View File

@@ -0,0 +1,49 @@
name: "Report an Issue"
description: "Report a bug or problem you have found"
type: Bug
body:
- type: textarea
id: description
attributes:
label: "📄 Description"
description: |
Explain your issue in detail. Include what you expected to happen.
placeholder: |
When I click the "Save" button, nothing happens.
validations:
required: true
- type: textarea
id: steps
attributes:
label: "🔁 Reproduction Steps"
description: |
What steps lead to the problem? Try to list them clearly and precisely.
placeholder: |
1. Open the app
2. Go to Settings
3. Click "Save"
validations:
required: false
- type: textarea
id: screenshots
attributes:
label: "🖼️ Screenshots"
description: |
If applicable, add screenshots to help explain your problem.
placeholder: |
You can paste images here.
validations:
required: false
- type: textarea
id: context
attributes:
label: " Additional Context"
description: |
Any other context about the problem. Logs, version numbers, configs, etc.
placeholder: |
Occurs only on Android 11, using version 1.2.3.
validations:
required: false

View File

@@ -0,0 +1,50 @@
name: "Сообщить об ошибке"
description: "Сообщите о найденной ошибке или проблеме"
type: Bug
body:
- type: textarea
id: description
attributes:
label: "📄 Описание"
description: |
Подробно опишите вашу проблему. Укажите, что должно было произойти.
placeholder: |
Когда я нажимаю на кнопку "Сохранить", ничего не происходит, и персонаж не сохраняется.
validations:
required: true
- type: textarea
id: steps
attributes:
label: "🔁 Шаги воспроизведения"
description: |
Какие шаги приводят к этой ошибке? Укажите их по порядку.
placeholder: |
1. Открыть приложение
2. Зайти в меню создания персонажа
3. Изменить цвет волос
4. Нажать "Сохранить"
validations:
required: false
- type: textarea
id: screenshots
attributes:
label: "🖼️ Скриншоты"
description: |
При наличии, добавьте скриншоты или изображения.
placeholder: |
Вы можете вставить изображения прямо сюда.
validations:
required: false
- type: textarea
id: context
attributes:
label: "ℹ️Дополнительная информация"
description: |
Дополнительные сведения: логи, версии, настройки и всё, что может быть связано.
placeholder: |
Возникает только на MacOS
validations:
required: false

View File

@@ -1,18 +0,0 @@
---
name: Toolshed feature request
about: Suggest a feature for Toolshed (for game admins/developers)
title: "[TOOLSHED REQUEST]"
labels: Toolshed
assignees: moonheart08
---
**Is your feature request related to a problem/bug? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the command you'd like**
A clear and concise description of what you want and what it should do.
If you're a technical user (i.e. programmer) including type signatures is helpful.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -13,8 +13,8 @@ Small fixes/refactors are exempt.
**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 :cl: symbol, so the bot recognizes the changes and adds them to the game's changelog. -->
<!--
Changelog must have a :cl: symbol, so the bot recognizes the changes and adds them to the game's changelog.
:cl:
- add: Added fun!
- remove: Removed fun!

20
.github/labeler.yml vendored
View File

@@ -1,26 +1,34 @@
"Changes: Sprites":
"Sprites":
- changed-files:
- any-glob-to-any-file: '**/*.rsi/*.png'
"Changes: Map":
"Mapping":
- changed-files:
- any-glob-to-any-file:
- 'Resources/Maps/**/*.yml'
- 'Resources/Prototypes/Maps/**/*.yml'
"Changes: UI":
"UI":
- changed-files:
- any-glob-to-any-file: '**/*.xaml*'
"Changes: Shaders":
"Shaders":
- changed-files:
- any-glob-to-any-file: '**/*.swsl'
"Changes: Audio":
"Audio":
- changed-files:
- any-glob-to-any-file: '**/*.ogg'
"Changes: No C#":
"C#":
- changed-files:
- any-glob-to-any-file: '**/*.cs'
"YML":
- changed-files:
- any-glob-to-any-file: '**/*.yml'
"No C#":
- changed-files:
# Equiv to any-glob-to-all as long as this has one matcher. If ALL changed files are not C# files, then apply label.
- all-globs-to-all-files: "!**/*.cs"

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

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

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

View File

@@ -1,59 +0,0 @@
name: Trailing Whitespace Check
on:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]
jobs:
build:
name: Trailing Whitespace Check
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- name: Get changed text files
id: changed-files
uses: tj-actions/changed-files@v46.0.5
with:
files: |
**.cs
**.yml
**.swsl
**.json
**.py
- name: Check for trailing whitespace and EOF newline
env:
ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
run: |
has_trailing_whitespace=0
has_missing_eof_newline=0
for file in ${ALL_CHANGED_FILES}; do
# Ignore vanilla not CrystallEdge files
if [[ "$file" != *CP14* ]]; then
continue
fi
echo "Checking $file"
# Check for trailing whitespace
if grep -qP '[ \t]+$' "$file"; then
echo "::error file=$file::Trailing whitespace found"
has_trailing_whitespace=1
fi
# Check for missing EOF newline
if [ -f "$file" ] && [ -s "$file" ]; then
last_char=$(tail -c 1 "$file")
if [ "$last_char" != "" ] && [ "$last_char" != $'\n' ]; then
echo "::error file=$file::Missing newline at end of file"
has_missing_eof_newline=1
fi
fi
done
if [ "$has_trailing_whitespace" -eq 1 ] || [ "$has_missing_eof_newline" -eq 1 ]; then
echo "Issues found: trailing whitespace or missing EOF newline."
echo "We recommend using an IDE to prevent this from happening."
exit 1
fi

View File

@@ -2,7 +2,7 @@
on:
pull_request_target:
types: [review_requested]
types: [review_requested, opened]
jobs:
add_label:

View File

@@ -14,6 +14,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Fail if we are attempting to run on the master branch
if: ${{GITHUB.REF_NAME == 'master' && github.repository == 'space-wizards/space-station-14'}}
run: exit 1
- name: Install dependencies
run: sudo apt-get install -y python3-paramiko python3-lxml

40
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,40 @@
# Space Station 14 Code of Conduct
Space Station 14's staff and community is made up volunteers from all over the world, working on every aspect of the project - including development, teaching, and hosting integral tools.
Diversity is one of our huge strengths, but it can also lead to communication issues and unhappiness. To that end, we have a few ground rules that we ask people to adhere to. This code applies equally to all levels of the project, from commenters to contributors to staff.
This isnt an exhaustive list of things that you cant do. Rather, take it in the spirit in which its intended - a guide to make it easier to enrich all of us and the technical communities in which we participate.
This code of conduct applies specifically to the Github repositories and its spaces managed by the Space Station 14 project or Space Wizards Federation. Some spaces, such as the Space Station 14 Discord or the official Wizard's Den game servers, have their own rules but are in spirit equal to what may be found in here.
If you believe someone is violating the code of conduct, we ask that you report it by contacting a Maintainer, Project Manager or Wizard staff member through [Discord](https://discord.ss14.io/), [the forums](https://forum.spacestation14.com/), or emailing [telecommunications@spacestation14.com](mailto:telecommunications@spacestation14.com).
- **Be friendly and patient.**
- **Be welcoming.** We strive to be a community that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to members of any race, ethnicity, culture, national origin, colour, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion, and mental and physical ability.
- **Be considerate.** Your work will be used by other people, and you in turn will depend on the work of others. Any decision you take will affect users and contributors, and you should take those consequences into account when making decisions. Remember that we're a world-wide community, so you might not be communicating in someone else's primary language. We have contributors of all skill levels, some even making their first foray into a new field with this project, so keep that in mind when discussing someone's work.
- **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. Its important to remember that a community where people feel uncomfortable or threatened is not a productive one. Members of the Space Station 14 community should be respectful when dealing with other members as well as with people outside the Space Station 14 community. Assume contributions to the project, even those that do not end up being included, are made in good faith.
- **Be careful in the words that you choose.** We are a community of professionals, and we conduct ourselves professionally. Be kind to others. Do not insult or put down other participants. Harassment and other exclusionary behavior aren't acceptable. This includes, but is not limited to:
- Violent threats or language directed against another person.
- Discriminatory jokes and language.
- Posting sexually explicit or violent material.
- Posting (or threatening to post) other people's personally identifying information ("doxing").
- Personal insults, especially those using racist or sexist terms.
- Unwelcome sexual attention.
- Advocating for, or encouraging, any of the above behavior.
- Repeated harassment of others. In general, if someone asks you to stop, then stop.
- **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and Space Station 14 is no exception. It is important that we resolve disagreements and differing views constructively. Remember that were different. The strength of Space Station 14 comes from its varied community, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesnt mean that theyre wrong. Dont forget that it is human to make mistakes and blaming each other doesnt get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes.
Original text courtesy of the [Speak Up! project](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html).
## On Community Moderation
Deviating from the Code of Conduct on the Github repository may result in moderative actions taken by project Maintainers. This can involve your content being edited or deleted, and may result in a temporary or permanent block from the repository.
This is to ensure Space Station 14 is a healthy community in which contributors feel encouraged and empowered to contribute, and to give you as a member of this community a chance to reflect on how you are interacting with it. While outright offensive and bigoted content will *always* be unacceptable on the repository, Maintainers are at liberty to take moderative actions against more ambiguous content that fail to provide constructive criticism, or that provides constructive criticism in a non-constructive manner. Examples of this include using hyperbole, bringing up PRs/changes unrelated to the discussion at hand, hostile tone, off-topic comments, creating PRs/Issues for the sole purpose of causing discussions, skirting the line of acceptable behavior, etc. Disagreeing with content or each other is fine and appreciated, but only as long as it's done with respect and in a constructive manner.
Maintainers are expected to adhere to the guidelines as listed in the [Github Moderation Guidelines](https://docs.spacestation14.com/en/general-development/github-moderation-guidelines.html), though may deviate should they feel it's in the best interest of the community. If you believe you had an action incorrectly applied against you, you are encouraged to contact staff via [Discord](https://discord.ss14.io/) or [the forums](https://forum.spacestation14.com/), [appeal your Github ban](https://forum.spacestation14.com/c/ban-appeals/appeals-github/38), or make a [staff complaint](https://forum.spacestation14.com/t/staff-complaint-instructions-and-info/31).
## Attribution
This Code of Conduct is an edited version of the [Django Code of Conduct](https://www.djangoproject.com/conduct/), licensed under CC BY 3.0, for the Space Station 14 Github repository.

View File

@@ -47,7 +47,7 @@ public class MapLoadBenchmark
PoolManager.Shutdown();
}
public static readonly string[] MapsSource = { "Empty", "Satlern", "Box", "Bagel", "Dev", "CentComm", "Core", "TestTeg", "Packed", "Omega", "Reach", "Meta", "Marathon", "MeteorArena", "Fland", "Oasis", "Convex"};
public static readonly string[] MapsSource = { "Empty", "Saltern", "Box", "Bagel", "Dev", "CentComm", "Core", "TestTeg", "Packed", "Omega", "Reach", "Meta", "Marathon", "MeteorArena", "Fland", "Oasis", "Convex"};
[ParamsSource(nameof(MapsSource))]
public string Map;

View File

@@ -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]

View File

@@ -4,39 +4,20 @@ using Robust.Shared.Console;
namespace Content.Client.Access.Commands;
public sealed class ShowAccessReadersCommand : IConsoleCommand
public sealed class ShowAccessReadersCommand : LocalizedEntityCommands
{
public string Command => "showaccessreaders";
[Dependency] private readonly IOverlayManager _overlay = default!;
[Dependency] private readonly IResourceCache _cache = default!;
[Dependency] private readonly SharedTransformSystem _xform = default!;
public string Description => "Toggles showing access reader permissions on the map";
public string Help => """
Overlay Info:
-Disabled | The access reader is disabled
+Unrestricted | The access reader has no restrictions
+Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set)
+Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed
-Tag [Tag Name] | A tag that is not allowed (takes priority over other allows)
""";
public void Execute(IConsoleShell shell, string argStr, string[] args)
public override string Command => "showaccessreaders";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var collection = IoCManager.Instance;
var existing = _overlay.RemoveOverlay<AccessOverlay>();
if (!existing)
_overlay.AddOverlay(new AccessOverlay(EntityManager, _cache, _xform));
if (collection == null)
return;
var overlay = collection.Resolve<IOverlayManager>();
if (overlay.RemoveOverlay<AccessOverlay>())
{
shell.WriteLine($"Set access reader debug overlay to false");
return;
}
var entManager = collection.Resolve<IEntityManager>();
var cache = collection.Resolve<IResourceCache>();
var xform = entManager.System<SharedTransformSystem>();
overlay.AddOverlay(new AccessOverlay(entManager, cache, xform));
shell.WriteLine($"Set access reader debug overlay to true");
shell.WriteLine(Loc.GetString($"cmd-showaccessreaders-status", ("status", !existing)));
}
}

View File

@@ -0,0 +1,26 @@
<BoxContainer xmlns="https://spacestation14.io"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
Orientation="Horizontal"
Margin="10 10 10 10"
VerticalExpand="True"
HorizontalExpand="True"
MinHeight="70">
<!-- Access groups -->
<BoxContainer Name="AccessGroupList" Access="Public" Orientation="Vertical" HorizontalExpand="True" SizeFlagsStretchRatio="0.5" Margin="0 0 10 0">
<!-- Populated with C# code -->
</BoxContainer>
<PanelContainer StyleClasses="LowDivider" VerticalExpand="True" Margin="0 0 0 0" SetWidth="2">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#FFFFFF" />
</PanelContainer.PanelOverride>
</PanelContainer>
<!-- Access levels -->
<ScrollContainer HorizontalExpand="True" VerticalExpand="True" Margin="10 0 0 0">
<BoxContainer Name="AccessLevelChecklist" Access="Public" Orientation="Vertical" HorizontalAlignment="Left">
<!-- Populated with C# code -->
</BoxContainer>
</ScrollContainer>
</BoxContainer>

View File

@@ -0,0 +1,451 @@
using Content.Client.Stylesheets;
using Content.Client.UserInterface.Controls;
using Content.Shared.Access;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using System.Linq;
using System.Numerics;
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;
private string? _labelStyleClass;
// Access data
private HashSet<ProtoId<AccessGroupPrototype>> _accessGroups = new();
private HashSet<ProtoId<AccessLevelPrototype>> _accessLevels = new();
private HashSet<ProtoId<AccessLevelPrototype>> _activeAccessLevels = new();
// Button groups
private readonly ButtonGroup _accessGroupsButtons = new();
// Temp values
private int _accessGroupTabIndex = 0;
private bool _canInteract = false;
private List<AccessLevelPrototype> _accessLevelsForTab = new();
private readonly List<AccessLevelEntry> _accessLevelEntries = new();
private readonly Dictionary<AccessGroupPrototype, List<AccessLevelPrototype>> _groupedAccessLevels = new();
// Events
public event Action<HashSet<ProtoId<AccessLevelPrototype>>, bool>? OnAccessLevelsChangedEvent;
/// <summary>
/// Creates a UI control for changing access levels.
/// Access levels are organized under a list of tabs by their associated access group.
/// </summary>
public GroupedAccessLevelChecklist()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
}
private void ArrangeAccessControls()
{
// Create a list of known access groups with which to populate the UI
_groupedAccessLevels.Clear();
foreach (var accessGroup in _accessGroups)
{
if (!_protoManager.TryIndex(accessGroup, out var accessGroupProto))
continue;
_groupedAccessLevels.Add(accessGroupProto, new());
}
// Ensure that the 'general' access group is added to handle
// misc. access levels that aren't associated with any group
if (_protoManager.TryIndex(GeneralAccessGroup, out var generalAccessProto))
_groupedAccessLevels.TryAdd(generalAccessProto, new());
// Assign known access levels with their associated groups
foreach (var accessLevel in _accessLevels)
{
if (!_protoManager.TryIndex(accessLevel, out var accessLevelProto))
continue;
var assigned = false;
foreach (var (accessGroup, accessLevels) in _groupedAccessLevels)
{
if (!accessGroup.Tags.Contains(accessLevelProto.ID))
continue;
assigned = true;
_groupedAccessLevels[accessGroup].Add(accessLevelProto);
}
if (!assigned && generalAccessProto != null)
_groupedAccessLevels[generalAccessProto].Add(accessLevelProto);
}
// Remove access groups that have no assigned access levels
foreach (var (group, accessLevels) in _groupedAccessLevels)
{
if (accessLevels.Count == 0)
_groupedAccessLevels.Remove(group);
}
}
private bool TryRebuildAccessGroupControls()
{
AccessGroupList.DisposeAllChildren();
AccessLevelChecklist.DisposeAllChildren();
// No access level prototypes were assigned to any of the access level groups.
// Either the turret controller has no assigned access levels or their names were invalid.
if (_groupedAccessLevels.Count == 0)
return false;
// Reorder the access groups alphabetically
var orderedAccessGroups = _groupedAccessLevels.Keys.OrderBy(x => x.GetAccessGroupName()).ToList();
// Add group access buttons to the UI
foreach (var accessGroup in orderedAccessGroups)
{
var accessGroupButton = CreateAccessGroupButton();
// Button styling
if (_groupedAccessLevels.Count > 1)
{
if (AccessGroupList.ChildCount == 0)
accessGroupButton.AddStyleClass(StyleBase.ButtonOpenLeft);
else if (_groupedAccessLevels.Count > 1 && AccessGroupList.ChildCount == (_groupedAccessLevels.Count - 1))
accessGroupButton.AddStyleClass(StyleBase.ButtonOpenRight);
else
accessGroupButton.AddStyleClass(StyleBase.ButtonOpenBoth);
}
accessGroupButton.Pressed = _accessGroupTabIndex == orderedAccessGroups.IndexOf(accessGroup);
// Label text and styling
if (_labelStyleClass != null)
accessGroupButton.Label.SetOnlyStyleClass(_labelStyleClass);
var accessLevelPrototypes = _groupedAccessLevels[accessGroup];
var prefix = accessLevelPrototypes.All(x => _activeAccessLevels.Contains(x))
? "»"
: accessLevelPrototypes.Any(x => _activeAccessLevels.Contains(x))
? ""
: " ";
var text = Loc.GetString(
"turret-controls-window-access-group-label",
("prefix", prefix),
("label", accessGroup.GetAccessGroupName())
);
accessGroupButton.Text = text;
// Button events
accessGroupButton.OnPressed += _ => OnAccessGroupChanged(accessGroupButton.GetPositionInParent());
AccessGroupList.AddChild(accessGroupButton);
}
// Adjust the current tab index so it remains in range
if (_accessGroupTabIndex >= _groupedAccessLevels.Count)
_accessGroupTabIndex = _groupedAccessLevels.Count - 1;
return true;
}
/// <summary>
/// Rebuilds the checkbox list for the access level controls.
/// </summary>
public void RebuildAccessLevelsControls()
{
AccessLevelChecklist.DisposeAllChildren();
_accessLevelEntries.Clear();
// No access level prototypes were assigned to any of the access level groups
// Either turret controller has no assigned access levels, or their names were invalid
if (_groupedAccessLevels.Count == 0)
return;
// Reorder the access groups alphabetically
var orderedAccessGroups = _groupedAccessLevels.Keys.OrderBy(x => x.GetAccessGroupName()).ToList();
// Get the access levels associated with the current tab
var selectedAccessGroupTabProto = orderedAccessGroups[_accessGroupTabIndex];
_accessLevelsForTab = _groupedAccessLevels[selectedAccessGroupTabProto];
_accessLevelsForTab = _accessLevelsForTab.OrderBy(x => x.GetAccessLevelName()).ToList();
// Add an 'all' checkbox as the first child of the list if it has more than one access level
// Toggling this checkbox on will mark all other boxes below it on/off
var allCheckBox = CreateAccessLevelCheckbox();
allCheckBox.Text = Loc.GetString("turret-controls-window-all-checkbox");
if (_labelStyleClass != null)
allCheckBox.Label.SetOnlyStyleClass(_labelStyleClass);
// Add the 'all' checkbox events
allCheckBox.OnPressed += args =>
{
SetCheckBoxPressedState(_accessLevelEntries, allCheckBox.Pressed);
var accessLevels = new HashSet<ProtoId<AccessLevelPrototype>>();
foreach (var accessLevel in _accessLevelsForTab)
{
accessLevels.Add(accessLevel);
}
OnAccessLevelsChangedEvent?.Invoke(accessLevels, allCheckBox.Pressed);
};
AccessLevelChecklist.AddChild(allCheckBox);
// Hide the 'all' checkbox if the tab has only one access level
var allCheckBoxVisible = _accessLevelsForTab.Count > 1;
allCheckBox.Visible = allCheckBoxVisible;
allCheckBox.Disabled = !_canInteract;
// Add any remaining missing access level buttons to the UI
foreach (var accessLevel in _accessLevelsForTab)
{
// Create the entry
var accessLevelEntry = new AccessLevelEntry(_isMonotone);
accessLevelEntry.AccessLevel = accessLevel;
accessLevelEntry.CheckBox.Text = accessLevel.GetAccessLevelName();
accessLevelEntry.CheckBox.Pressed = _activeAccessLevels.Contains(accessLevel);
accessLevelEntry.CheckBox.Disabled = !_canInteract;
if (_labelStyleClass != null)
accessLevelEntry.CheckBox.Label.SetOnlyStyleClass(_labelStyleClass);
// Set the checkbox linkage lines
var isEndOfList = _accessLevelsForTab.IndexOf(accessLevel) == (_accessLevelsForTab.Count - 1);
var lines = new List<(Vector2, Vector2)>
{
(new Vector2(0.5f, 0f), new Vector2(0.5f, isEndOfList ? 0.5f : 1f)),
(new Vector2(0.5f, 0.5f), new Vector2(1f, 0.5f)),
};
accessLevelEntry.UpdateCheckBoxLink(lines);
accessLevelEntry.CheckBoxLink.Visible = allCheckBoxVisible;
accessLevelEntry.CheckBoxLink.Modulate = !_canInteract ? Color.Gray : Color.White;
// Add checkbox events
accessLevelEntry.CheckBox.OnPressed += args =>
{
// If the checkbox and its siblings are checked, check the 'all' checkbox too
allCheckBox.Pressed = AreAllCheckBoxesPressed(_accessLevelEntries.Select(x => x.CheckBox));
OnAccessLevelsChangedEvent?.Invoke([accessLevelEntry.AccessLevel], accessLevelEntry.CheckBox.Pressed);
};
AccessLevelChecklist.AddChild(accessLevelEntry);
_accessLevelEntries.Add(accessLevelEntry);
}
// Press the 'all' checkbox if all others are pressed
allCheckBox.Pressed = AreAllCheckBoxesPressed(_accessLevelEntries.Select(x => x.CheckBox));
}
private bool AreAllCheckBoxesPressed(IEnumerable<CheckBox> checkBoxes)
{
foreach (var checkBox in checkBoxes)
{
if (!checkBox.Pressed)
return false;
}
return true;
}
private void SetCheckBoxPressedState(List<AccessLevelEntry> accessLevelEntries, bool pressed)
{
foreach (var accessLevelEntry in accessLevelEntries)
{
accessLevelEntry.CheckBox.Pressed = pressed;
}
}
/// <summary>
/// Provides the UI with a list of access groups using which list of tabs should be populated.
/// </summary>
public void SetAccessGroups(HashSet<ProtoId<AccessGroupPrototype>> accessGroups)
{
_accessGroups = accessGroups;
ArrangeAccessControls();
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
/// <summary>
/// Provides the UI with a list of access levels with which it can populate the currently selected tab.
/// </summary>
public void SetAccessLevels(HashSet<ProtoId<AccessLevelPrototype>> accessLevels)
{
_accessLevels = accessLevels;
ArrangeAccessControls();
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
/// <summary>
/// Sets which access level checkboxes should be marked on the UI.
/// </summary>
public void SetActiveAccessLevels(HashSet<ProtoId<AccessLevelPrototype>> activeAccessLevels)
{
_activeAccessLevels = activeAccessLevels;
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
/// <summary>
/// Sets whether the local player can interact with the checkboxes.
/// </summary>
public void SetLocalPlayerAccessibility(bool canInteract)
{
_canInteract = canInteract;
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
/// <summary>
/// Sets whether the UI should use monotone buttons and checkboxes.
/// </summary>
public void SetMonotone(bool monotone)
{
_isMonotone = monotone;
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
/// <summary>
/// Applies the specified style to the labels on the UI buttons and checkboxes.
/// </summary>
public void SetLabelStyleClass(string? styleClass)
{
_labelStyleClass = styleClass;
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
private void OnAccessGroupChanged(int newTabIndex)
{
if (newTabIndex == _accessGroupTabIndex)
return;
_accessGroupTabIndex = newTabIndex;
if (TryRebuildAccessGroupControls())
RebuildAccessLevelsControls();
}
private Button CreateAccessGroupButton()
{
var button = _isMonotone ? new MonotoneButton() : new Button();
button.ToggleMode = true;
button.Group = _accessGroupsButtons;
button.Label.HorizontalAlignment = HAlignment.Left;
return button;
}
private CheckBox CreateAccessLevelCheckbox()
{
var checkbox = _isMonotone ? new MonotoneCheckBox() : new CheckBox();
checkbox.Margin = new Thickness(0, 0, 0, 3);
checkbox.ToggleMode = true;
checkbox.ReservesSpace = false;
return checkbox;
}
private sealed class AccessLevelEntry : BoxContainer
{
public ProtoId<AccessLevelPrototype> AccessLevel;
public readonly CheckBox CheckBox;
public readonly LineRenderer CheckBoxLink;
public AccessLevelEntry(bool monotone)
{
HorizontalExpand = true;
CheckBoxLink = new LineRenderer
{
SetWidth = 22,
VerticalExpand = true,
Margin = new Thickness(0, -1),
ReservesSpace = false,
};
AddChild(CheckBoxLink);
CheckBox = monotone ? new MonotoneCheckBox() : new CheckBox();
CheckBox.ToggleMode = true;
CheckBox.Margin = new Thickness(0f, 0f, 0f, 3f);
AddChild(CheckBox);
}
public void UpdateCheckBoxLink(List<(Vector2, Vector2)> lines)
{
CheckBoxLink.Lines = lines;
}
}
private sealed class LineRenderer : Control
{
/// <summary>
/// List of lines to render (their start and end x-y coordinates).
/// Position (0,0) is the top left corner of the control and
/// position (1,1) is the bottom right corner.
/// </summary>
/// <remarks>
/// The color of the lines is inherited from the control.
/// </remarks>
public List<(Vector2, Vector2)> Lines;
public LineRenderer()
{
Lines = new List<(Vector2, Vector2)>();
}
public LineRenderer(List<(Vector2, Vector2)> lines)
{
Lines = lines;
}
protected override void Draw(DrawingHandleScreen handle)
{
foreach (var line in Lines)
{
var start = PixelPosition +
new Vector2(PixelWidth * line.Item1.X, PixelHeight * line.Item1.Y);
var end = PixelPosition +
new Vector2(PixelWidth * line.Item2.X, PixelHeight * line.Item2.Y);
handle.DrawLine(start, end, ActualModulateSelf);
}
}
}
}

View File

@@ -1,3 +1,6 @@
using Content.Shared.Actions.Components;
using static Robust.Shared.Input.Binding.PointerInputCmdHandler;
namespace Content.Client.Actions;
/// <summary>
@@ -7,3 +10,17 @@ public sealed class FillActionSlotEvent : EntityEventArgs
{
public EntityUid? Action;
}
/// <summary>
/// Client-side event used to attempt to trigger a targeted action.
/// This only gets raised if the has <see cref="TargetActionComponent">.
/// Handlers must set <c>Handled</c> to true, then if the action has been performed,
/// i.e. a target is found, then FoundTarget must be set to true.
/// </summary>
[ByRefEvent]
public record struct ActionTargetAttemptEvent(
PointerInputCmdArgs Input,
Entity<ActionsComponent> User,
ActionComponent Action,
bool Handled = false,
bool FoundTarget = false);

View File

@@ -1,18 +1,23 @@
using System.IO;
using System.Linq;
using Content.Shared.Actions;
using Content.Shared.Actions.Components;
using Content.Shared.Charges.Systems;
using Content.Shared.Mapping;
using Content.Shared.Maps;
using JetBrains.Annotations;
using Robust.Client.Player;
using Robust.Shared.ContentPack;
using Robust.Shared.GameStates;
using Robust.Shared.Input.Binding;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Sequence;
using Robust.Shared.Serialization.Markdown.Value;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using YamlDotNet.RepresentationModel;
@@ -25,8 +30,8 @@ namespace Content.Client.Actions
[Dependency] private readonly SharedChargesSystem _sharedCharges = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IResourceManager _resources = default!;
[Dependency] private readonly ISerializationManager _serialization = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!;
public event Action<EntityUid>? OnActionAdded;
@@ -38,131 +43,67 @@ namespace Content.Client.Actions
public event Action<List<SlotAssignment>>? AssignSlot;
private readonly List<EntityUid> _removed = new();
private readonly List<(EntityUid, BaseActionComponent?)> _added = new();
private readonly List<Entity<ActionComponent>> _added = new();
public static readonly EntProtoId MappingEntityAction = "BaseMappingEntityAction";
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ActionsComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<ActionsComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
SubscribeLocalEvent<ActionsComponent, ComponentHandleState>(HandleComponentState);
SubscribeLocalEvent<ActionsComponent, ComponentHandleState>(OnHandleState);
SubscribeLocalEvent<InstantActionComponent, ComponentHandleState>(OnInstantHandleState);
SubscribeLocalEvent<EntityTargetActionComponent, ComponentHandleState>(OnEntityTargetHandleState);
SubscribeLocalEvent<WorldTargetActionComponent, ComponentHandleState>(OnWorldTargetHandleState);
SubscribeLocalEvent<EntityWorldTargetActionComponent, ComponentHandleState>(OnEntityWorldTargetHandleState);
SubscribeLocalEvent<ActionComponent, AfterAutoHandleStateEvent>(OnActionAutoHandleState);
SubscribeLocalEvent<EntityTargetActionComponent, ActionTargetAttemptEvent>(OnEntityTargetAttempt);
SubscribeLocalEvent<WorldTargetActionComponent, ActionTargetAttemptEvent>(OnWorldTargetAttempt);
}
private void OnInstantHandleState(EntityUid uid, InstantActionComponent component, ref ComponentHandleState args)
{
if (args.Current is not InstantActionComponentState state)
return;
BaseHandleState<InstantActionComponent>(uid, component, state);
private void OnActionAutoHandleState(Entity<ActionComponent> ent, ref AfterAutoHandleStateEvent args)
{
UpdateAction(ent);
}
private void OnEntityTargetHandleState(EntityUid uid, EntityTargetActionComponent component, ref ComponentHandleState args)
public override void UpdateAction(Entity<ActionComponent> ent)
{
if (args.Current is not EntityTargetActionComponentState state)
return;
component.Whitelist = state.Whitelist;
component.Blacklist = state.Blacklist;
component.CanTargetSelf = state.CanTargetSelf;
BaseHandleState<EntityTargetActionComponent>(uid, component, state);
}
private void OnWorldTargetHandleState(EntityUid uid, WorldTargetActionComponent component, ref ComponentHandleState args)
{
if (args.Current is not WorldTargetActionComponentState state)
return;
BaseHandleState<WorldTargetActionComponent>(uid, component, state);
}
private void OnEntityWorldTargetHandleState(EntityUid uid,
EntityWorldTargetActionComponent component,
ref ComponentHandleState args)
{
if (args.Current is not EntityWorldTargetActionComponentState state)
return;
component.Whitelist = state.Whitelist;
component.CanTargetSelf = state.CanTargetSelf;
BaseHandleState<EntityWorldTargetActionComponent>(uid, component, state);
}
private void BaseHandleState<T>(EntityUid uid, BaseActionComponent component, BaseActionComponentState state) where T : BaseActionComponent
{
// TODO ACTIONS use auto comp states
component.Icon = state.Icon;
component.IconOn = state.IconOn;
component.IconColor = state.IconColor;
component.OriginalIconColor = state.OriginalIconColor;
component.DisabledIconColor = state.DisabledIconColor;
component.Keywords.Clear();
component.Keywords.UnionWith(state.Keywords);
component.Enabled = state.Enabled;
component.Toggled = state.Toggled;
component.Cooldown = state.Cooldown;
component.UseDelay = state.UseDelay;
component.Container = EnsureEntity<T>(state.Container, uid);
component.EntityIcon = EnsureEntity<T>(state.EntityIcon, uid);
component.CheckCanInteract = state.CheckCanInteract;
component.CheckConsciousness = state.CheckConsciousness;
component.ClientExclusive = state.ClientExclusive;
component.Priority = state.Priority;
component.AttachedEntity = EnsureEntity<T>(state.AttachedEntity, uid);
component.RaiseOnUser = state.RaiseOnUser;
component.RaiseOnAction = state.RaiseOnAction;
component.AutoPopulate = state.AutoPopulate;
component.Temporary = state.Temporary;
component.ItemIconStyle = state.ItemIconStyle;
component.Sound = state.Sound;
UpdateAction(uid, component);
}
public override void UpdateAction(EntityUid? actionId, BaseActionComponent? action = null)
{
if (!ResolveActionData(actionId, ref action))
return;
// TODO: Decouple this.
action.IconColor = _sharedCharges.GetCurrentCharges(actionId.Value) == 0 ? action.DisabledIconColor : action.OriginalIconColor;
base.UpdateAction(actionId, action);
if (_playerManager.LocalEntity != action.AttachedEntity)
ent.Comp.IconColor = _sharedCharges.GetCurrentCharges(ent.Owner) == 0 ? ent.Comp.DisabledIconColor : ent.Comp.OriginalIconColor;
base.UpdateAction(ent);
if (_playerManager.LocalEntity != ent.Comp.AttachedEntity)
return;
ActionsUpdated?.Invoke();
}
private void HandleComponentState(EntityUid uid, ActionsComponent component, ref ComponentHandleState args)
private void OnHandleState(Entity<ActionsComponent> ent, ref ComponentHandleState args)
{
if (args.Current is not ActionsComponentState state)
return;
var (uid, comp) = ent;
_added.Clear();
_removed.Clear();
var stateEnts = EnsureEntitySet<ActionsComponent>(state.Actions, uid);
foreach (var act in component.Actions)
foreach (var act in comp.Actions)
{
if (!stateEnts.Contains(act) && !IsClientSide(act))
_removed.Add(act);
}
component.Actions.ExceptWith(_removed);
comp.Actions.ExceptWith(_removed);
foreach (var actionId in stateEnts)
{
if (!actionId.IsValid())
continue;
if (!component.Actions.Add(actionId))
if (!comp.Actions.Add(actionId))
continue;
TryGetActionData(actionId, out var action);
_added.Add((actionId, action));
if (GetAction(actionId) is {} action)
_added.Add(action);
}
if (_playerManager.LocalEntity != uid)
@@ -177,47 +118,46 @@ namespace Content.Client.Actions
foreach (var action in _added)
{
OnActionAdded?.Invoke(action.Item1);
OnActionAdded?.Invoke(action);
}
ActionsUpdated?.Invoke();
}
public static int ActionComparer((EntityUid, BaseActionComponent?) a, (EntityUid, BaseActionComponent?) b)
public static int ActionComparer(Entity<ActionComponent> a, Entity<ActionComponent> b)
{
var priorityA = a.Item2?.Priority ?? 0;
var priorityB = b.Item2?.Priority ?? 0;
var priorityA = a.Comp?.Priority ?? 0;
var priorityB = b.Comp?.Priority ?? 0;
if (priorityA != priorityB)
return priorityA - priorityB;
priorityA = a.Item2?.Container?.Id ?? 0;
priorityB = b.Item2?.Container?.Id ?? 0;
priorityA = a.Comp?.Container?.Id ?? 0;
priorityB = b.Comp?.Container?.Id ?? 0;
return priorityA - priorityB;
}
protected override void ActionAdded(EntityUid performer, EntityUid actionId, ActionsComponent comp,
BaseActionComponent action)
protected override void ActionAdded(Entity<ActionsComponent> performer, Entity<ActionComponent> action)
{
if (_playerManager.LocalEntity != performer)
if (_playerManager.LocalEntity != performer.Owner)
return;
OnActionAdded?.Invoke(actionId);
OnActionAdded?.Invoke(action);
ActionsUpdated?.Invoke();
}
protected override void ActionRemoved(EntityUid performer, EntityUid actionId, ActionsComponent comp, BaseActionComponent action)
protected override void ActionRemoved(Entity<ActionsComponent> performer, Entity<ActionComponent> action)
{
if (_playerManager.LocalEntity != performer)
if (_playerManager.LocalEntity != performer.Owner)
return;
OnActionRemoved?.Invoke(actionId);
OnActionRemoved?.Invoke(action);
ActionsUpdated?.Invoke();
}
public IEnumerable<(EntityUid Id, BaseActionComponent Comp)> GetClientActions()
public IEnumerable<Entity<ActionComponent>> GetClientActions()
{
if (_playerManager.LocalEntity is not { } user)
return Enumerable.Empty<(EntityUid, BaseActionComponent)>();
return Enumerable.Empty<Entity<ActionComponent>>();
return GetActions(user);
}
@@ -254,25 +194,24 @@ namespace Content.Client.Actions
CommandBinds.Unregister<ActionsSystem>();
}
public void TriggerAction(EntityUid actionId, BaseActionComponent action)
public void TriggerAction(Entity<ActionComponent> action)
{
if (_playerManager.LocalEntity is not { } user ||
!TryComp(user, out ActionsComponent? actions))
{
return;
}
if (action is not InstantActionComponent instantAction)
if (_playerManager.LocalEntity is not { } user)
return;
if (action.ClientExclusive)
// TODO: unhardcode this somehow
if (!HasComp<InstantActionComponent>(action))
return;
if (action.Comp.ClientExclusive)
{
PerformAction(user, actions, actionId, instantAction, instantAction.Event, GameTiming.CurTime);
PerformAction(user, action);
}
else
{
var request = new RequestPerformActionEvent(GetNetEntity(actionId));
EntityManager.RaisePredictiveEvent(request);
var request = new RequestPerformActionEvent(GetNetEntity(action));
RaisePredictiveEvent(request);
}
}
@@ -295,39 +234,140 @@ namespace Content.Client.Actions
if (yamlStream.Documents[0].RootNode.ToDataNode() is not SequenceDataNode sequence)
return;
var actions = EnsureComp<ActionsComponent>(user);
ClearAssignments?.Invoke();
var assignments = new List<SlotAssignment>();
foreach (var entry in sequence.Sequence)
{
if (entry is not MappingDataNode map)
continue;
if (!map.TryGet("action", out var actionNode))
continue;
var action = _serialization.Read<BaseActionComponent>(actionNode, notNullableOverride: true);
var actionId = Spawn();
AddComp(actionId, action);
AddActionDirect(user, actionId);
if (map.TryGet<ValueDataNode>("name", out var nameNode))
_metaData.SetEntityName(actionId, nameNode.Value);
if (!map.TryGet("assignments", out var assignmentNode))
continue;
var nodeAssignments = _serialization.Read<List<(byte Hotbar, byte Slot)>>(assignmentNode, notNullableOverride: true);
foreach (var index in nodeAssignments)
var actionId = EntityUid.Invalid;
if (map.TryGet<ValueDataNode>("action", out var actionNode))
{
var assignment = new SlotAssignment(index.Hotbar, index.Slot, actionId);
assignments.Add(assignment);
var id = new EntProtoId(actionNode.Value);
actionId = Spawn(id);
}
else if (map.TryGet<ValueDataNode>("entity", out var entityNode))
{
var id = new EntProtoId(entityNode.Value);
var proto = _proto.Index(id);
actionId = Spawn(MappingEntityAction);
SetIcon(actionId, new SpriteSpecifier.EntityPrototype(id));
SetEvent(actionId, new StartPlacementActionEvent()
{
PlacementOption = "SnapgridCenter",
EntityType = id
});
_metaData.SetEntityName(actionId, proto.Name);
}
else if (map.TryGet<ValueDataNode>("tileId", out var tileNode))
{
var id = new ProtoId<ContentTileDefinition>(tileNode.Value);
var proto = _proto.Index(id);
actionId = Spawn(MappingEntityAction);
if (proto.Sprite is {} sprite)
SetIcon(actionId, new SpriteSpecifier.Texture(sprite));
SetEvent(actionId, new StartPlacementActionEvent()
{
PlacementOption = "AlignTileAny",
TileId = id
});
_metaData.SetEntityName(actionId, Loc.GetString(proto.Name));
}
else
{
Log.Error($"Mapping actions from {path} had unknown action data!");
continue;
}
AddActionDirect((user, actions), actionId);
}
}
private void OnWorldTargetAttempt(Entity<WorldTargetActionComponent> ent, ref ActionTargetAttemptEvent args)
{
if (args.Handled)
return;
args.Handled = true;
var (uid, comp) = ent;
var action = args.Action;
var coords = args.Input.Coordinates;
var user = args.User;
if (!ValidateWorldTarget(user, coords, ent))
return;
// optionally send the clicked entity too, if it matches its whitelist etc
// this is the actual entity-world targeting magic
EntityUid? targetEnt = null;
if (TryComp<EntityTargetActionComponent>(ent, out var entity) &&
args.Input.EntityUid != null &&
ValidateEntityTarget(user, args.Input.EntityUid, (uid, entity)))
{
targetEnt = args.Input.EntityUid;
}
AssignSlot?.Invoke(assignments);
if (action.ClientExclusive)
{
// TODO: abstract away from single event or maybe just RaiseLocalEvent?
if (comp.Event is {} ev)
{
ev.Target = coords;
ev.Entity = targetEnt;
}
PerformAction((user, user.Comp), (uid, action));
}
else
RaisePredictiveEvent(new RequestPerformActionEvent(GetNetEntity(uid), GetNetEntity(targetEnt), GetNetCoordinates(coords)));
args.FoundTarget = true;
}
private void OnEntityTargetAttempt(Entity<EntityTargetActionComponent> ent, ref ActionTargetAttemptEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args.Input.EntityUid is not { Valid: true } entity)
return;
// let world target component handle it
var (uid, comp) = ent;
if (comp.Event is not {} ev)
{
DebugTools.Assert(HasComp<WorldTargetActionComponent>(ent), $"Action {ToPrettyString(ent)} requir45es WorldTargetActionComponent for entity-world targeting");
return;
}
var action = args.Action;
var user = args.User;
if (!ValidateEntityTarget(user, entity, ent))
return;
if (action.ClientExclusive)
{
ev.Target = entity;
PerformAction((user, user.Comp), (uid, action));
}
else
{
RaisePredictiveEvent(new RequestPerformActionEvent(GetNetEntity(uid), GetNetEntity(entity)));
}
args.FoundTarget = true;
}
public record struct SlotAssignment(byte Hotbar, byte Slot, EntityUid ActionId);

View File

@@ -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,

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

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

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

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

View File

@@ -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));
}
}

View File

@@ -12,7 +12,7 @@ public sealed partial class AdminMenuWindow : DefaultWindow
public AdminMenuWindow()
{
MinSize = new Vector2(650, 250);
MinSize = new Vector2(650, 280);
Title = Loc.GetString("admin-menu-title");
RobustXamlLoader.Load(this);
MasterTabContainer.SetTabTitle((int) TabIndex.Admin, Loc.GetString("admin-menu-admin-tab"));

View File

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

View File

@@ -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)
{

View File

@@ -49,6 +49,7 @@
<Control HorizontalExpand="True"/>
<Label Name="Count" Access="Public"/>
<Control HorizontalExpand="True"/>
<Button Name="ExportLogs" Access="Public" Text="{Loc admin-logs-export}"/>
<Button Name="PopOutButton" Access="Public" Text="{Loc admin-logs-pop-out}"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal">

View File

@@ -1,4 +1,6 @@
using System.Linq;
using System.IO;
using System.Linq;
using Content.Client.Administration.UI.CustomControls;
using Content.Client.Eui;
using Content.Shared.Administration.Logs;
using Content.Shared.Eui;
@@ -15,6 +17,16 @@ public sealed class AdminLogsEui : BaseEui
{
[Dependency] private readonly IClyde _clyde = default!;
[Dependency] private readonly IUserInterfaceManager _uiManager = default!;
[Dependency] private readonly IFileDialogManager _dialogManager = default!;
[Dependency] private readonly ILogManager _log = default!;
private const char CsvSeparator = ',';
private const string CsvQuote = "\"";
private const string CsvHeader = "Date,ID,PlayerID,Severity,Type,Message";
private ISawmill _sawmill;
private bool _currentlyExportingLogs = false;
public AdminLogsEui()
{
@@ -26,6 +38,9 @@ public sealed class AdminLogsEui : BaseEui
LogsControl.RefreshButton.OnPressed += _ => RequestLogs();
LogsControl.NextButton.OnPressed += _ => NextLogs();
LogsControl.PopOutButton.OnPressed += _ => PopOut();
LogsControl.ExportLogs.OnPressed += _ => ExportLogs();
_sawmill = _log.GetSawmill("admin.logs.ui");
}
private WindowRoot? Root { get; set; }
@@ -74,6 +89,71 @@ public sealed class AdminLogsEui : BaseEui
SendMessage(request);
}
private async void ExportLogs()
{
if (_currentlyExportingLogs)
return;
_currentlyExportingLogs = true;
LogsControl.ExportLogs.Disabled = true;
var file = await _dialogManager.SaveFile(new FileDialogFilters(new FileDialogFilters.Group("csv")));
if (file == null)
return;
try
{
// Buffer is set to 4KB for performance reasons. As the average export of 1000 logs is ~200KB
await using var writer = new StreamWriter(file.Value.fileStream, bufferSize: 4096);
await writer.WriteLineAsync(CsvHeader);
foreach (var child in LogsControl.LogsContainer.Children)
{
if (child is not AdminLogLabel logLabel || !child.Visible)
continue;
var log = logLabel.Log;
// Date
// I swear to god if someone adds ,s or "s to the other fields...
await writer.WriteAsync(log.Date.ToString("s", System.Globalization.CultureInfo.InvariantCulture));
await writer.WriteAsync(CsvSeparator);
// ID
await writer.WriteAsync(log.Id.ToString());
await writer.WriteAsync(CsvSeparator);
// PlayerID
var players = log.Players;
for (var i = 0; i < players.Length; i++)
{
await writer.WriteAsync(players[i] + (i == players.Length - 1 ? "" : " "));
}
await writer.WriteAsync(CsvSeparator);
// Severity
await writer.WriteAsync(log.Impact.ToString());
await writer.WriteAsync(CsvSeparator);
// Type
await writer.WriteAsync(log.Type.ToString());
await writer.WriteAsync(CsvSeparator);
// Message
await writer.WriteAsync(CsvQuote);
await writer.WriteAsync(log.Message.Replace(CsvQuote, CsvQuote + CsvQuote));
await writer.WriteAsync(CsvQuote);
await writer.WriteLineAsync();
}
}
catch (Exception exc)
{
_sawmill.Error($"Error when exporting admin log:\n{exc.StackTrace}");
}
finally
{
await file.Value.fileStream.DisposeAsync();
_currentlyExportingLogs = false;
LogsControl.ExportLogs.Disabled = false;
}
}
private void PopOut()
{
if (LogsWindow == null)

View File

@@ -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"/>

View File

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

View File

@@ -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>
</BoxContainer>
</BoxContainer>

View File

@@ -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;
@@ -33,26 +34,27 @@ 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();
}
public void SetUsername(string player)
@@ -122,6 +124,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 =

View File

@@ -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.OnFollow += () => SendMessage(new PlayerPanelFollowMessage());
PlayerPanel.OnClose += () => SendMessage(new CloseEuiMessage());

View File

@@ -132,8 +132,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)

View File

@@ -27,7 +27,12 @@
<cc:CommandButton Name="ShowReasonButton" Command="panicbunker_show_reason"
ToggleMode="True" Text="{Loc admin-ui-panic-bunker-show-reason}"
ToolTip="{Loc admin-ui-panic-bunker-show-reason-tooltip}" />
<BoxContainer Orientation="Vertical" Margin="0 10 0 0">
<BoxContainer Orientation="Horizontal">
<Label Text="{Loc cp14-admin-ui-suspicious-warning-level-setting}" MinWidth="175" />
<OptionButton Name="SuspiciousWarningLevel" HorizontalAlignment="Left" Margin="4 0"
ToolTip="{Loc cp14-admin-ui-suspicious-warning-level-setting-desc}" />
</BoxContainer>
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Horizontal" Margin="2">
<Label Text="{Loc admin-ui-panic-bunker-min-account-age}" MinWidth="175" />
<LineEdit Name="MinAccountAge" MinWidth="50" Margin="0 0 5 0" />

View File

@@ -1,7 +1,9 @@
using Content.Shared.Administration.Events;
using Content.Shared.CCVar;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
using Robust.Shared.Console;
namespace Content.Client.Administration.UI.Tabs.PanicBunkerTab;
@@ -10,9 +12,13 @@ namespace Content.Client.Administration.UI.Tabs.PanicBunkerTab;
public sealed partial class PanicBunkerTab : Control
{
[Dependency] private readonly IConsoleHost _console = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
private string _minAccountAge;
private string _minOverallMinutes;
// CrystallEdge suspicious activity warning system
private List<SuspiciousWarningLevelSelection> _suspiciousWarningLevelSelections = [];
private string _currentSuspiciousWarningLevel = string.Empty;
public PanicBunkerTab()
{
@@ -28,6 +34,21 @@ public sealed partial class PanicBunkerTab : Control
MinOverallMinutes.OnTextEntered += args => SendMinOverallMinutes(args.Text);
MinOverallMinutes.OnFocusExit += args => SendMinOverallMinutes(args.Text);
_minOverallMinutes = MinOverallMinutes.Text;
// CrystallEdge suspicious activity warning system
foreach (var type in Enum.GetValues<SuspiciousWarningLevelSelection>())
{
_suspiciousWarningLevelSelections.Add(type);
SuspiciousWarningLevel.AddItem(GetLocalizedEnumValue(type));
}
UpdateSuspiciousWarningLevel();
SuspiciousWarningLevel.OnItemSelected += ev =>
{
SuspiciousWarningLevel.SelectId(ev.Id);
SendSuspiciousWarningLevel(_suspiciousWarningLevelSelections[ev.Id]);
};
}
private void SendMinAccountAge(string text)
@@ -74,4 +95,43 @@ public sealed partial class PanicBunkerTab : Control
MinOverallMinutes.Text = status.MinOverallMinutes.ToString();
_minOverallMinutes = MinOverallMinutes.Text;
}
// CrystallEdge suspicious activity warning system
private enum SuspiciousWarningLevelSelection
{
Disabled,
Low,
Medium,
High,
}
private string GetLocalizedEnumValue(SuspiciousWarningLevelSelection selection)
{
return selection switch
{
SuspiciousWarningLevelSelection.Disabled => Loc.GetString("cp14-admin-ui-suspicious-warning-level-disabled"),
SuspiciousWarningLevelSelection.Low => Loc.GetString("cp14-admin-ui-suspicious-warning-level-low"),
SuspiciousWarningLevelSelection.Medium => Loc.GetString("cp14-admin-ui-suspicious-warning-level-medium"),
SuspiciousWarningLevelSelection.High => Loc.GetString("cp14-admin-ui-suspicious-warning-level-high"),
_ => throw new ArgumentOutOfRangeException(nameof(selection), selection, null),
};
}
private void UpdateSuspiciousWarningLevel()
{
_currentSuspiciousWarningLevel = _cfg.GetCVar(CCVars.SuspiciousAccountsWarningLevel);
if (!Enum.TryParse(_currentSuspiciousWarningLevel, true, out SuspiciousWarningLevelSelection currentSuspiciousWarningSelection))
{
throw new ArgumentOutOfRangeException(nameof(_currentSuspiciousWarningLevel),
_currentSuspiciousWarningLevel,
null);
}
SuspiciousWarningLevel.SelectId((int)currentSuspiciousWarningSelection);
}
private void SendSuspiciousWarningLevel(SuspiciousWarningLevelSelection selection)
{
_console.ExecuteCommand($"cp14.suspicious-warning-level {Enum.GetName(selection)}");
}
}

View File

@@ -172,6 +172,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>

View File

@@ -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;
}

View File

@@ -1,13 +1,13 @@
<Control
xmlns="https://spacestation14.io"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Margin="4"
MinSize="50 50">
<GridContainer
Columns="3">
<cc:CommandButton Command="startround" Text="{Loc administration-ui-round-tab-start-round}" />
<cc:CommandButton Command="endround" Text="{Loc administration-ui-round-tab-end-round}" />
<cc:CommandButton Command="restartround" Text="{Loc administration-ui-round-tab-restart-round}" />
<cc:CommandButton Command="restartroundnow" Text="{Loc administration-ui-round-tab-restart-round-now}" />
<controls:ConfirmButton Name="StartRound" Text="{Loc administration-ui-round-tab-start-round}" />
<controls:ConfirmButton Name="EndRound" Text="{Loc administration-ui-round-tab-end-round}" />
<controls:ConfirmButton Name="RestartRound" Text="{Loc administration-ui-round-tab-restart-round}" />
<controls:ConfirmButton Name="RestartRoundNow" Text="{Loc administration-ui-round-tab-restart-round-now}" />
</GridContainer>
</Control>

View File

@@ -1,10 +1,24 @@
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
namespace Content.Client.Administration.UI.Tabs
{
[GenerateTypedNameReferences]
public sealed partial class RoundTab : Control
{
[Dependency] private readonly IClientConsoleHost _console = default!;
public RoundTab()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
StartRound.OnPressed += _ => _console.ExecuteCommand("startround");
EndRound.OnPressed += _ => _console.ExecuteCommand("endround");
RestartRound.OnPressed += _ => _console.ExecuteCommand("restartround");
RestartRoundNow.OnPressed += _ => _console.ExecuteCommand("restartroundnow");
}
}
}

View File

@@ -1,11 +1,12 @@
<Control
xmlns="https://spacestation14.io"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Margin="4"
MinSize="50 50">
<GridContainer
Columns="4" >
<cc:CommandButton Command="shutdown" Text="{Loc server-shutdown}" />
<controls:ConfirmButton Name="ServerShutdownButton" Text="{Loc server-shutdown}" />
<cc:CommandButton Name="SetOocButton" Command="setooc" Text="{Loc server-ooc-toggle}" ToggleMode="True" />
<cc:CommandButton Name="SetLoocButton" Command="setlooc" Text="{Loc server-looc-toggle}" ToggleMode="True" />
</GridContainer>

View File

@@ -1,5 +1,6 @@
using Content.Shared.CCVar;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
@@ -10,6 +11,7 @@ namespace Content.Client.Administration.UI.Tabs
public sealed partial class ServerTab : Control
{
[Dependency] private readonly IConfigurationManager _config = default!;
[Dependency] private readonly IClientConsoleHost _console = default!;
public ServerTab()
{
@@ -18,6 +20,8 @@ namespace Content.Client.Administration.UI.Tabs
_config.OnValueChanged(CCVars.OocEnabled, OocEnabledChanged, true);
_config.OnValueChanged(CCVars.LoocEnabled, LoocEnabledChanged, true);
ServerShutdownButton.OnPressed += _ => _console.ExecuteCommand("shutdown");
}
private void OocEnabledChanged(bool value)

View File

@@ -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;
}
}

View File

@@ -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;
}
}

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));

View File

@@ -20,6 +20,7 @@ public sealed class AnomalyScannerBoundUserInterface : BoundUserInterface
_menu = new AnomalyScannerMenu();
_menu.OpenCentered();
_menu.OnClose += Close;
}
protected override void UpdateState(BoundUserInterfaceState state)

View File

@@ -0,0 +1,203 @@
using Content.Client.Construction;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Construction.Prototypes;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.Placement;
using Robust.Client.Placement.Modes;
using Robust.Client.Utility;
using Robust.Shared.Enums;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using System.Numerics;
using static Robust.Client.Placement.PlacementManager;
namespace Content.Client.Atmos;
/// <summary>
/// Allows users to place atmos pipes on different layers depending on how the mouse cursor is positioned within a grid tile.
/// </summary>
/// <remarks>
/// This placement mode is not on the engine because it is content specific.
/// </remarks>
public sealed class AlignAtmosPipeLayers : SnapgridCenter
{
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IPrototypeManager _protoManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IEyeManager _eyeManager = default!;
private readonly SharedMapSystem _mapSystem;
private readonly SharedTransformSystem _transformSystem;
private readonly SharedAtmosPipeLayersSystem _pipeLayersSystem;
private readonly SpriteSystem _spriteSystem;
private const float SearchBoxSize = 2f;
private EntityCoordinates _unalignedMouseCoords = default;
private const float MouseDeadzoneRadius = 0.25f;
private Color _guideColor = new Color(0, 0, 0.5785f);
private const float GuideRadius = 0.1f;
private const float GuideOffset = 0.21875f;
public AlignAtmosPipeLayers(PlacementManager pMan) : base(pMan)
{
IoCManager.InjectDependencies(this);
_mapSystem = _entityManager.System<SharedMapSystem>();
_transformSystem = _entityManager.System<SharedTransformSystem>();
_pipeLayersSystem = _entityManager.System<SharedAtmosPipeLayersSystem>();
_spriteSystem = _entityManager.System<SpriteSystem>();
}
/// <inheritdoc/>
public override void Render(in OverlayDrawArgs args)
{
var gridUid = _entityManager.System<SharedTransformSystem>().GetGrid(MouseCoords);
if (gridUid == null || Grid == null)
return;
// Draw guide circles for each pipe layer if we are not in line/grid placing mode
if (pManager.PlacementType == PlacementTypes.None)
{
var gridRotation = _transformSystem.GetWorldRotation(gridUid.Value);
var worldPosition = _mapSystem.LocalToWorld(gridUid.Value, Grid, MouseCoords.Position);
var direction = (_eyeManager.CurrentEye.Rotation + gridRotation + Math.PI / 2).GetCardinalDir();
var multi = (direction == Direction.North || direction == Direction.South) ? -1f : 1f;
args.WorldHandle.DrawCircle(worldPosition, GuideRadius, _guideColor);
args.WorldHandle.DrawCircle(worldPosition + gridRotation.RotateVec(new Vector2(multi * GuideOffset, GuideOffset)), GuideRadius, _guideColor);
args.WorldHandle.DrawCircle(worldPosition - gridRotation.RotateVec(new Vector2(multi * GuideOffset, GuideOffset)), GuideRadius, _guideColor);
}
base.Render(args);
}
/// <inheritdoc/>
public override void AlignPlacementMode(ScreenCoordinates mouseScreen)
{
_unalignedMouseCoords = ScreenToCursorGrid(mouseScreen);
base.AlignPlacementMode(mouseScreen);
// Exit early if we are in line/grid placing mode
if (pManager.PlacementType != PlacementTypes.None)
return;
MouseCoords = _unalignedMouseCoords.AlignWithClosestGridTile(SearchBoxSize, _entityManager, _mapManager);
var gridId = _transformSystem.GetGrid(MouseCoords);
if (!_entityManager.TryGetComponent<MapGridComponent>(gridId, out var mapGrid))
return;
var gridRotation = _transformSystem.GetWorldRotation(gridId.Value);
CurrentTile = _mapSystem.GetTileRef(gridId.Value, mapGrid, MouseCoords);
float tileSize = mapGrid.TileSize;
GridDistancing = tileSize;
MouseCoords = new EntityCoordinates(MouseCoords.EntityId, new Vector2(CurrentTile.X + tileSize / 2 + pManager.PlacementOffset.X,
CurrentTile.Y + tileSize / 2 + pManager.PlacementOffset.Y));
// Calculate the position of the mouse cursor with respect to the center of the tile to determine which layer to use
var mouseCoordsDiff = _unalignedMouseCoords.Position - MouseCoords.Position;
var layer = AtmosPipeLayer.Primary;
if (mouseCoordsDiff.Length() > MouseDeadzoneRadius)
{
// Determine the direction of the mouse is relative to the center of the tile, adjusting for the player eye and grid rotation
var direction = (new Angle(mouseCoordsDiff) + _eyeManager.CurrentEye.Rotation + gridRotation + Math.PI / 2).GetCardinalDir();
layer = (direction == Direction.North || direction == Direction.East) ? AtmosPipeLayer.Secondary : AtmosPipeLayer.Tertiary;
}
// Update the construction menu placer
if (pManager.Hijack != null)
UpdateHijackedPlacer(layer, mouseScreen);
// Otherwise update the debug placer
else
UpdatePlacer(layer);
}
private void UpdateHijackedPlacer(AtmosPipeLayer layer, ScreenCoordinates mouseScreen)
{
// Try to get alternative prototypes from the construction prototype
var constructionSystem = (pManager.Hijack as ConstructionPlacementHijack)?.CurrentConstructionSystem;
var altPrototypes = (pManager.Hijack as ConstructionPlacementHijack)?.CurrentPrototype?.AlternativePrototypes;
if (constructionSystem == null || altPrototypes == null || (int)layer >= altPrototypes.Length)
return;
var newProtoId = altPrototypes[(int)layer];
if (!_protoManager.TryIndex(newProtoId, out var newProto))
return;
if (newProto.Type != ConstructionType.Structure)
{
pManager.Clear();
return;
}
if (newProto.ID == (pManager.Hijack as ConstructionPlacementHijack)?.CurrentPrototype?.ID)
return;
// Start placing
pManager.BeginPlacing(new PlacementInformation()
{
IsTile = false,
PlacementOption = newProto.PlacementMode,
}, new ConstructionPlacementHijack(constructionSystem, newProto));
if (pManager.CurrentMode is AlignAtmosPipeLayers { } newMode)
newMode.RefreshGrid(mouseScreen);
// Update construction guide
constructionSystem.GetGuide(newProto);
}
private void UpdatePlacer(AtmosPipeLayer layer)
{
// Try to get alternative prototypes from the entity atmos pipe layer component
if (pManager.CurrentPermission?.EntityType == null)
return;
if (!_protoManager.TryIndex<EntityPrototype>(pManager.CurrentPermission.EntityType, out var currentProto))
return;
if (!currentProto.TryGetComponent<AtmosPipeLayersComponent>(out var atmosPipeLayers, _entityManager.ComponentFactory))
return;
if (!_pipeLayersSystem.TryGetAlternativePrototype(atmosPipeLayers, layer, out var newProtoId))
return;
if (_protoManager.TryIndex<EntityPrototype>(newProtoId, out var newProto))
{
// Update the placed prototype
pManager.CurrentPermission.EntityType = newProtoId;
// Update the appearance of the ghost sprite
if (newProto.TryGetComponent<SpriteComponent>(out var sprite, _entityManager.ComponentFactory))
{
var textures = new List<IDirectionalTextureProvider>();
foreach (var spriteLayer in sprite.AllLayers)
{
if (spriteLayer.ActualRsi?.Path != null && spriteLayer.RsiState.Name != null)
textures.Add(_spriteSystem.RsiStateLike(new SpriteSpecifier.Rsi(spriteLayer.ActualRsi.Path, spriteLayer.RsiState.Name)));
}
pManager.CurrentTextures = textures;
}
}
}
private void RefreshGrid(ScreenCoordinates mouseScreen)
{
base.AlignPlacementMode(mouseScreen);
}
}

View File

@@ -17,6 +17,10 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
public int? FocusNetId = null;
private const int ChunkSize = 4;
private const float ScaleModifier = 4f;
private readonly float[] _layerFraction = { 0.5f, 0.75f, 0.25f };
private const float LineThickness = 0.05f;
private readonly Color _basePipeNetColor = Color.LightGray;
private readonly Color _unfocusedPipeNetColor = Color.DimGray;
@@ -95,23 +99,23 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
foreach (var chunkedLine in atmosPipeNetwork)
{
var leftTop = ScalePosition(new Vector2
(Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - 0.1f,
Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - 0.1f)
(Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - LineThickness,
Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - LineThickness)
- offset);
var rightTop = ScalePosition(new Vector2
(Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + 0.1f,
Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - 0.1f)
(Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + LineThickness,
Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - LineThickness)
- offset);
var leftBottom = ScalePosition(new Vector2
(Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - 0.1f,
Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + 0.1f)
(Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - LineThickness,
Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + LineThickness)
- offset);
var rightBottom = ScalePosition(new Vector2
(Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + 0.1f,
Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + 0.1f)
(Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + LineThickness,
Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + LineThickness)
- offset);
if (!pipeVertexUVs.TryGetValue(chunkedLine.Color, out var pipeVertexUV))
@@ -142,7 +146,7 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
if (chunks == null || grid == null)
return decodedOutput;
// Clear stale look up table values
// Clear stale look up table values
_horizLines.Clear();
_horizLinesReversed.Clear();
_vertLines.Clear();
@@ -158,10 +162,10 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
{
var list = new List<AtmosMonitoringConsoleLine>();
foreach (var ((netId, 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;
@@ -191,6 +195,9 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
_vertLinesReversed[color] = vertLinesReversed;
}
var layerFraction = _layerFraction[(int)layer];
var origin = new Vector2(grid.TileSize * layerFraction, -grid.TileSize * layerFraction);
// Loop over the chunk
for (var tileIdx = 0; tileIdx < ChunkSize * ChunkSize; tileIdx++)
{
@@ -208,21 +215,22 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
// Calculate the draw point offsets
var vertLineOrigin = (atmosPipeData & northMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 1f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
new Vector2(grid.TileSize * layerFraction, -grid.TileSize * 1f) : origin;
var vertLineTerminus = (atmosPipeData & southMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
new Vector2(grid.TileSize * layerFraction, -grid.TileSize * 0f) : origin;
var horizLineOrigin = (atmosPipeData & eastMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 1f, -grid.TileSize * 0.5f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
new Vector2(grid.TileSize * 1f, -grid.TileSize * layerFraction) : origin;
var horizLineTerminus = (atmosPipeData & westMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 0f, -grid.TileSize * 0.5f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
new Vector2(grid.TileSize * 0f, -grid.TileSize * layerFraction) : origin;
// Since we can have pipe lines that have a length of a half tile,
// double the vectors and convert to vector2i so we can merge them
AddOrUpdateNavMapLine(ConvertVector2ToVector2i(tile + horizLineOrigin, 2), ConvertVector2ToVector2i(tile + horizLineTerminus, 2), horizLines, horizLinesReversed);
AddOrUpdateNavMapLine(ConvertVector2ToVector2i(tile + vertLineOrigin, 2), ConvertVector2ToVector2i(tile + vertLineTerminus, 2), vertLines, vertLinesReversed);
// Scale up the vectors and convert to vector2i so we can merge them
AddOrUpdateNavMapLine(ConvertVector2ToVector2i(tile + horizLineOrigin, ScaleModifier),
ConvertVector2ToVector2i(tile + horizLineTerminus, ScaleModifier), horizLines, horizLinesReversed);
AddOrUpdateNavMapLine(ConvertVector2ToVector2i(tile + vertLineOrigin, ScaleModifier),
ConvertVector2ToVector2i(tile + vertLineTerminus, ScaleModifier), vertLines, vertLinesReversed);
}
}
}
@@ -235,7 +243,7 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
foreach (var (origin, terminal) in horizLines)
decodedOutput.Add(new AtmosMonitoringConsoleLine
(ConvertVector2iToVector2(origin, 0.5f), ConvertVector2iToVector2(terminal, 0.5f), sRGB));
(ConvertVector2iToVector2(origin, 1f / ScaleModifier), ConvertVector2iToVector2(terminal, 1f / ScaleModifier), sRGB));
}
foreach (var (color, vertLines) in _vertLines)
@@ -245,7 +253,7 @@ public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
foreach (var (origin, terminal) in vertLines)
decodedOutput.Add(new AtmosMonitoringConsoleLine
(ConvertVector2iToVector2(origin, 0.5f), ConvertVector2iToVector2(terminal, 0.5f), sRGB));
(ConvertVector2iToVector2(origin, 1f / ScaleModifier), ConvertVector2iToVector2(terminal, 1f / ScaleModifier), sRGB));
}
return decodedOutput;

View File

@@ -15,7 +15,7 @@ public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleS
private void OnHandleState(EntityUid uid, AtmosMonitoringConsoleComponent component, ref ComponentHandleState args)
{
Dictionary<Vector2i, Dictionary<(int, string), ulong>> modifiedChunks;
Dictionary<Vector2i, Dictionary<AtmosMonitoringConsoleSubnet, ulong>> modifiedChunks;
Dictionary<NetEntity, AtmosDeviceNavMapData> atmosDevices;
switch (args.Current)
@@ -54,7 +54,7 @@ public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleS
foreach (var (origin, chunk) in modifiedChunks)
{
var newChunk = new AtmosPipeChunk(origin);
newChunk.AtmosPipeData = new Dictionary<(int, string), ulong>(chunk);
newChunk.AtmosPipeData = new Dictionary<AtmosMonitoringConsoleSubnet, ulong>(chunk);
component.AtmosPipeChunks[origin] = newChunk;
}

View File

@@ -13,6 +13,7 @@ using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Numerics;
namespace Content.Client.Atmos.Consoles;
@@ -33,6 +34,8 @@ public sealed partial class AtmosMonitoringConsoleWindow : FancyWindow
private ProtoId<NavMapBlipPrototype> _navMapConsoleProtoId = "NavMapConsole";
private ProtoId<NavMapBlipPrototype> _gasPipeSensorProtoId = "GasPipeSensor";
private readonly Vector2[] _pipeLayerOffsets = { new Vector2(0f, 0f), new Vector2(0.25f, 0.25f), new Vector2(-0.25f, -0.25f) };
public AtmosMonitoringConsoleWindow(AtmosMonitoringConsoleBoundUserInterface userInterface, EntityUid? owner)
{
RobustXamlLoader.Load(this);
@@ -53,7 +56,7 @@ public sealed partial class AtmosMonitoringConsoleWindow : FancyWindow
consoleCoords = xform.Coordinates;
NavMap.MapUid = xform.GridUid;
// Assign station name
// Assign station name
if (_entManager.TryGetComponent<MetaDataComponent>(xform.GridUid, out var stationMetaData))
stationName = stationMetaData.EntityName;
@@ -238,6 +241,10 @@ public sealed partial class AtmosMonitoringConsoleWindow : FancyWindow
var blinks = proto.Blinks || _focusEntity == metaData.NetEntity;
var coords = _entManager.GetCoordinates(metaData.NetCoordinates);
if (proto.Placement == NavMapBlipPlacement.Offset && metaData.PipeLayer > 0)
coords = coords.Offset(_pipeLayerOffsets[(int)metaData.PipeLayer]);
var blip = new NavMapBlip(coords, _spriteSystem.Frame0(new SpriteSpecifier.Texture(texture)), color, blinks, proto.Selectable, proto.Scale);
NavMap.TrackedEntities[metaData.NetEntity] = blip;
}

View File

@@ -1,6 +1,7 @@
using Content.Client.SubFloor;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
@@ -8,7 +9,7 @@ using Robust.Client.GameObjects;
namespace Content.Client.Atmos.EntitySystems;
[UsedImplicitly]
public sealed class AtmosPipeAppearanceSystem : EntitySystem
public sealed partial class AtmosPipeAppearanceSystem : SharedAtmosPipeAppearanceSystem
{
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
@@ -26,26 +27,37 @@ public sealed class AtmosPipeAppearanceSystem : EntitySystem
if (!TryComp(uid, out SpriteComponent? sprite))
return;
var numberOfPipeLayers = GetNumberOfPipeLayers(uid, out _);
foreach (var layerKey in Enum.GetValues<PipeConnectionLayer>())
{
var layer = _sprite.LayerMapReserve((uid, sprite), layerKey);
_sprite.LayerSetRsi((uid, sprite), layer, component.Sprite.RsiPath);
_sprite.LayerSetRsiState((uid, sprite), layer, component.Sprite.RsiState);
_sprite.LayerSetDirOffset((uid, sprite), layer, ToOffset(layerKey));
for (byte i = 0; i < numberOfPipeLayers; i++)
{
var layerName = layerKey.ToString() + i.ToString();
var layer = _sprite.LayerMapReserve((uid, sprite), layerName);
_sprite.LayerSetRsi((uid, sprite), layer, component.Sprite[i].RsiPath);
_sprite.LayerSetRsiState((uid, sprite), layer, component.Sprite[i].RsiState);
_sprite.LayerSetDirOffset((uid, sprite), layer, ToOffset(layerKey));
}
}
}
private void HideAllPipeConnection(Entity<SpriteComponent> entity)
private void HideAllPipeConnection(Entity<SpriteComponent> entity, AtmosPipeLayersComponent? atmosPipeLayers, int numberOfPipeLayers)
{
var sprite = entity.Comp;
foreach (var layerKey in Enum.GetValues<PipeConnectionLayer>())
{
if (!_sprite.LayerMapTryGet(entity.AsNullable(), layerKey, out var key, false))
continue;
for (byte i = 0; i < numberOfPipeLayers; i++)
{
var layerName = layerKey.ToString() + i.ToString();
var layer = sprite[key];
layer.Visible = false;
if (!_sprite.LayerMapTryGet(entity.AsNullable(), layerName, out var key, false))
continue;
var layer = sprite[key];
layer.Visible = false;
}
}
}
@@ -61,33 +73,45 @@ public sealed class AtmosPipeAppearanceSystem : EntitySystem
return;
}
if (!_appearance.TryGetData<PipeDirection>(uid, PipeVisuals.VisualState, out var worldConnectedDirections, args.Component))
var numberOfPipeLayers = GetNumberOfPipeLayers(uid, out var atmosPipeLayers);
if (!_appearance.TryGetData<int>(uid, PipeVisuals.VisualState, out var worldConnectedDirections, args.Component))
{
HideAllPipeConnection((uid, args.Sprite));
HideAllPipeConnection((uid, args.Sprite), atmosPipeLayers, numberOfPipeLayers);
return;
}
if (!_appearance.TryGetData<Color>(uid, PipeColorVisuals.Color, out var color, args.Component))
color = Color.White;
// transform connected directions to local-coordinates
var connectedDirections = worldConnectedDirections.RotatePipeDirection(-Transform(uid).LocalRotation);
foreach (var layerKey in Enum.GetValues<PipeConnectionLayer>())
for (byte i = 0; i < numberOfPipeLayers; i++)
{
if (!_sprite.LayerMapTryGet((uid, args.Sprite), layerKey, out var key, false))
continue;
// Extract the cardinal pipe orientations for the current pipe layer
// '15' is the four bit mask that is used to extract the pipe orientations of interest from 'worldConnectedDirections'
// Fun fact: a collection of four bits is called a 'nibble'! They aren't natively supported :(
var pipeLayerConnectedDirections = (PipeDirection)(15 & (worldConnectedDirections >> (PipeDirectionHelpers.PipeDirections * i)));
var layer = args.Sprite[key];
var dir = (PipeDirection)layerKey;
var visible = connectedDirections.HasDirection(dir);
// Transform the connected directions to local-coordinates
var connectedDirections = pipeLayerConnectedDirections.RotatePipeDirection(-Transform(uid).LocalRotation);
layer.Visible &= visible;
foreach (var layerKey in Enum.GetValues<PipeConnectionLayer>())
{
var layerName = layerKey.ToString() + i.ToString();
if (!visible)
continue;
if (!_sprite.LayerMapTryGet((uid, args.Sprite), layerName, out var key, false))
continue;
layer.Color = color;
var layer = args.Sprite[key];
var dir = (PipeDirection)layerKey;
var visible = connectedDirections.HasDirection(dir);
layer.Visible &= visible;
if (!visible)
continue;
layer.Color = color;
}
}
}

View File

@@ -0,0 +1,56 @@
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Robust.Client.GameObjects;
using Robust.Client.ResourceManagement;
using Robust.Shared.Reflection;
using Robust.Shared.Serialization.TypeSerializers.Implementations;
using Robust.Shared.Utility;
using System.Diagnostics.CodeAnalysis;
namespace Content.Client.Atmos.EntitySystems;
/// <summary>
/// The system responsible for updating the appearance of layered gas pipe
/// </summary>
public sealed partial class AtmosPipeLayersSystem : SharedAtmosPipeLayersSystem
{
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly IReflectionManager _reflection = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<AtmosPipeLayersComponent, AppearanceChangeEvent>(OnAppearanceChange);
}
private void OnAppearanceChange(Entity<AtmosPipeLayersComponent> ent, ref AppearanceChangeEvent ev)
{
if (!TryComp<SpriteComponent>(ent, out var sprite))
return;
if (_appearance.TryGetData<string>(ent, AtmosPipeLayerVisuals.Sprite, out var spriteRsi) &&
_resourceCache.TryGetResource(SpriteSpecifierSerializer.TextureRoot / spriteRsi, out RSIResource? resource))
{
_sprite.SetBaseRsi((ent, sprite), resource.RSI);
}
if (_appearance.TryGetData<Dictionary<string, string>>(ent, AtmosPipeLayerVisuals.SpriteLayers, out var pipeState))
{
foreach (var (layerKey, rsiPath) in pipeState)
{
if (TryParseKey(layerKey, out var @enum))
_sprite.LayerSetRsi((ent, sprite), @enum, new ResPath(rsiPath));
else
_sprite.LayerSetRsi((ent, sprite), layerKey, new ResPath(rsiPath));
}
}
}
private bool TryParseKey(string keyString, [NotNullWhen(true)] out Enum? @enum)
{
return _reflection.TryParseEnumReference(keyString, out @enum);
}
}

View File

@@ -11,7 +11,6 @@ namespace Content.Client.Atmos.EntitySystems;
/// </summary>
public sealed class FireVisualizerSystem : VisualizerSystem<FireVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
[Dependency] private readonly PointLightSystem _lights = default!;
public override void Initialize()
@@ -33,9 +32,9 @@ public sealed class FireVisualizerSystem : VisualizerSystem<FireVisualsComponent
// Need LayerMapTryGet because Init fails if there's no existing sprite / appearancecomp
// which means in some setups (most frequently no AppearanceComp) the layer never exists.
if (TryComp<SpriteComponent>(uid, out var sprite) &&
_sprite.LayerMapTryGet((uid, sprite), FireVisualLayers.Fire, out var layer, false))
SpriteSystem.LayerMapTryGet((uid, sprite), FireVisualLayers.Fire, out var layer, false))
{
_sprite.RemoveLayer((uid, sprite), layer);
SpriteSystem.RemoveLayer((uid, sprite), layer);
}
}
@@ -44,11 +43,11 @@ public sealed class FireVisualizerSystem : VisualizerSystem<FireVisualsComponent
if (!TryComp<SpriteComponent>(uid, out var sprite) || !TryComp(uid, out AppearanceComponent? appearance))
return;
_sprite.LayerMapReserve((uid, sprite), FireVisualLayers.Fire);
_sprite.LayerSetVisible((uid, sprite), FireVisualLayers.Fire, false);
SpriteSystem.LayerMapReserve((uid, sprite), FireVisualLayers.Fire);
SpriteSystem.LayerSetVisible((uid, sprite), FireVisualLayers.Fire, false);
sprite.LayerSetShader(FireVisualLayers.Fire, "unshaded");
if (component.Sprite != null)
_sprite.LayerSetRsi((uid, sprite), FireVisualLayers.Fire, new ResPath(component.Sprite));
SpriteSystem.LayerSetRsi((uid, sprite), FireVisualLayers.Fire, new ResPath(component.Sprite));
UpdateAppearance(uid, component, sprite, appearance);
}
@@ -61,12 +60,12 @@ public sealed class FireVisualizerSystem : VisualizerSystem<FireVisualsComponent
private void UpdateAppearance(EntityUid uid, FireVisualsComponent component, SpriteComponent sprite, AppearanceComponent appearance)
{
if (!_sprite.LayerMapTryGet((uid, sprite), FireVisualLayers.Fire, out var index, false))
if (!SpriteSystem.LayerMapTryGet((uid, sprite), FireVisualLayers.Fire, out var index, false))
return;
AppearanceSystem.TryGetData<bool>(uid, FireVisuals.OnFire, out var onFire, appearance);
AppearanceSystem.TryGetData<float>(uid, FireVisuals.FireStacks, out var fireStacks, appearance);
_sprite.LayerSetVisible((uid, sprite), index, onFire);
SpriteSystem.LayerSetVisible((uid, sprite), index, onFire);
if (!onFire)
{
@@ -80,9 +79,9 @@ public sealed class FireVisualizerSystem : VisualizerSystem<FireVisualsComponent
}
if (fireStacks > component.FireStackAlternateState && !string.IsNullOrEmpty(component.AlternateState))
_sprite.LayerSetRsiState((uid, sprite), index, component.AlternateState);
SpriteSystem.LayerSetRsiState((uid, sprite), index, component.AlternateState);
else
_sprite.LayerSetRsiState((uid, sprite), index, component.NormalState);
SpriteSystem.LayerSetRsiState((uid, sprite), index, component.NormalState);
component.LightEntity ??= Spawn(null, new EntityCoordinates(uid, default));
var light = EnsureComp<PointLightComponent>(component.LightEntity.Value);

View File

@@ -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);
}
}

View File

@@ -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();
}
}
}

View File

@@ -1,11 +1,46 @@
using Content.Client.Atmos.Components;
using Robust.Client.GameObjects;
using Content.Client.UserInterface.Systems.Storage.Controls;
using Content.Shared.Atmos.Piping;
using Content.Shared.Hands;
using Content.Shared.Atmos.Components;
using Content.Shared.Item;
namespace Content.Client.Atmos.EntitySystems;
public sealed class PipeColorVisualizerSystem : VisualizerSystem<PipeColorVisualsComponent>
{
[Dependency] private readonly SharedItemSystem _itemSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PipeColorVisualsComponent, GetInhandVisualsEvent>(OnGetVisuals);
SubscribeLocalEvent<PipeColorVisualsComponent, BeforeRenderInGridEvent>(OnDrawInGrid);
}
/// <summary>
/// This method is used to display the color changes of the pipe on the screen..
/// </summary>
private void OnGetVisuals(Entity<PipeColorVisualsComponent> item, ref GetInhandVisualsEvent args)
{
foreach (var (_, layerData) in args.Layers)
{
if (TryComp(item.Owner, out AtmosPipeColorComponent? pipeColor))
layerData.Color = pipeColor.Color;
}
}
/// <summary>
/// This method is used to change the pipe's color in a container grid.
/// </summary>
private void OnDrawInGrid(Entity<PipeColorVisualsComponent> item, ref BeforeRenderInGridEvent args)
{
if (TryComp(item.Owner, out AtmosPipeColorComponent? pipeColor))
args.Color = pipeColor.Color;
}
protected override void OnAppearanceChange(EntityUid uid, PipeColorVisualsComponent component, ref AppearanceChangeEvent args)
{
if (TryComp<SpriteComponent>(uid, out var sprite)
@@ -15,6 +50,8 @@ public sealed class PipeColorVisualizerSystem : VisualizerSystem<PipeColorVisual
var layer = sprite[PipeVisualLayers.Pipe];
layer.Color = color.WithAlpha(layer.Color.A);
}
_itemSystem.VisualsChanged(uid);
}
}

View File

@@ -7,11 +7,9 @@ namespace Content.Client.Atmos.Monitor;
public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmableVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, AtmosAlarmableVisualsComponent component, ref AppearanceChangeEvent args)
{
if (args.Sprite == null || !_sprite.LayerMapTryGet((uid, args.Sprite), component.LayerMap, out var layer, false))
if (args.Sprite == null || !SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.LayerMap, out var layer, false))
return;
if (!args.AppearanceData.TryGetValue(PowerDeviceVisuals.Powered, out var poweredObject) ||
@@ -24,8 +22,8 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
{
foreach (var visLayer in component.HideOnDepowered)
{
if (_sprite.LayerMapTryGet((uid, args.Sprite), visLayer, out var powerVisibilityLayer, false))
_sprite.LayerSetVisible((uid, args.Sprite), powerVisibilityLayer, powered);
if (SpriteSystem.LayerMapTryGet((uid, args.Sprite), visLayer, out var powerVisibilityLayer, false))
SpriteSystem.LayerSetVisible((uid, args.Sprite), powerVisibilityLayer, powered);
}
}
@@ -33,8 +31,8 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
{
foreach (var (setLayer, powerState) in component.SetOnDepowered)
{
if (_sprite.LayerMapTryGet((uid, args.Sprite), setLayer, out var setStateLayer, false))
_sprite.LayerSetRsiState((uid, args.Sprite), setStateLayer, new RSI.StateId(powerState));
if (SpriteSystem.LayerMapTryGet((uid, args.Sprite), setLayer, out var setStateLayer, false))
SpriteSystem.LayerSetRsiState((uid, args.Sprite), setStateLayer, new RSI.StateId(powerState));
}
}
@@ -43,7 +41,7 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
&& powered
&& component.AlarmStates.TryGetValue(alarmType, out var state))
{
_sprite.LayerSetRsiState((uid, args.Sprite), layer, new RSI.StateId(state));
SpriteSystem.LayerSetRsiState((uid, args.Sprite), layer, new RSI.StateId(state));
}
}
}

View File

@@ -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">

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
using Robust.Client.GameObjects;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
using static Content.Shared.Atmos.Components.GasAnalyzerComponent;
@@ -18,6 +18,7 @@ namespace Content.Client.Atmos.UI
base.Open();
_window = this.CreateWindowCenteredLeft<GasAnalyzerWindow>();
_window.OnClose += Close;
}
protected override void ReceiveMessage(BoundUserInterfaceMessage message)
@@ -29,15 +30,6 @@ namespace Content.Client.Atmos.UI
_window.Populate(cast);
}
/// <summary>
/// Closes UI and tells the server to disable the analyzer
/// </summary>
private void OnClose()
{
SendMessage(new GasAnalyzerDisableMessage());
Close();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);

View File

@@ -136,6 +136,7 @@ namespace Content.Client.Atmos.UI
else
{
// oh shit of fuck its more than 4 this ui isn't gonna look pretty anymore
CDeviceMixes.RemoveAllChildren();
for (var i = 1; i < msg.NodeGasMixes.Length; i++)
{
GenerateGasDisplay(msg.NodeGasMixes[i], CDeviceMixes);

View File

@@ -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));
}
}

View File

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

View File

@@ -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;
}
}
}

View File

@@ -9,8 +9,6 @@ namespace Content.Client.Atmos.Visualizers;
/// </summary>
public sealed class PortableScrubberSystem : VisualizerSystem<PortableScrubberVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, PortableScrubberVisualsComponent component, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
@@ -20,15 +18,15 @@ public sealed class PortableScrubberSystem : VisualizerSystem<PortableScrubberVi
&& AppearanceSystem.TryGetData<bool>(uid, PortableScrubberVisuals.IsRunning, out var isRunning, args.Component))
{
var runningState = isRunning ? component.RunningState : component.IdleState;
_sprite.LayerSetRsiState((uid, args.Sprite), PortableScrubberVisualLayers.IsRunning, runningState);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), PortableScrubberVisualLayers.IsRunning, runningState);
var fullState = isFull ? component.FullState : component.ReadyState;
_sprite.LayerSetRsiState((uid, args.Sprite), PowerDeviceVisualLayers.Powered, fullState);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), PowerDeviceVisualLayers.Powered, fullState);
}
if (AppearanceSystem.TryGetData<bool>(uid, PortableScrubberVisuals.IsDraining, out var isDraining, args.Component))
{
_sprite.LayerSetVisible((uid, args.Sprite), PortableScrubberVisualLayers.IsDraining, isDraining);
SpriteSystem.LayerSetVisible((uid, args.Sprite), PortableScrubberVisualLayers.IsDraining, isDraining);
}
}
}

View File

@@ -2,16 +2,16 @@ using Robust.Shared.Console;
namespace Content.Client.Audio;
public sealed class AmbientOverlayCommand : IConsoleCommand
public sealed class AmbientOverlayCommand : LocalizedEntityCommands
{
public string Command => "showambient";
public string Description => "Shows all AmbientSoundComponents in the viewport";
public string Help => $"{Command}";
public void Execute(IConsoleShell shell, string argStr, string[] args)
{
var system = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<AmbientSoundSystem>();
system.OverlayEnabled ^= true;
[Dependency] private readonly AmbientSoundSystem _ambient = default!;
shell.WriteLine($"Ambient sound overlay set to {system.OverlayEnabled}");
public override string Command => "showambient";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
_ambient.OverlayEnabled ^= true;
shell.WriteLine(Loc.GetString($"cmd-showambient-status", ("status", _ambient.OverlayEnabled)));
}
}

View File

@@ -168,7 +168,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;

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,
}

View File

@@ -0,0 +1,5 @@
using Content.Shared.Body.Systems;
namespace Content.Client.Body.Systems;
public sealed class BloodstreamSystem : SharedBloodstreamSystem;

View File

@@ -0,0 +1,6 @@
using Content.Shared.Body.Systems;
namespace Content.Client.Body.Systems;
/// <inheritdoc/>
public sealed class MetabolizerSystem : SharedMetabolizerSystem;

View File

@@ -7,8 +7,6 @@ namespace Content.Client.Botany;
public sealed class PlantHolderVisualizerSystem : VisualizerSystem<PlantHolderVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
base.Initialize();
@@ -20,8 +18,8 @@ public sealed class PlantHolderVisualizerSystem : VisualizerSystem<PlantHolderVi
if (!TryComp<SpriteComponent>(uid, out var sprite))
return;
_sprite.LayerMapReserve((uid, sprite), PlantHolderLayers.Plant);
_sprite.LayerSetVisible((uid, sprite), PlantHolderLayers.Plant, false);
SpriteSystem.LayerMapReserve((uid, sprite), PlantHolderLayers.Plant);
SpriteSystem.LayerSetVisible((uid, sprite), PlantHolderLayers.Plant, false);
}
protected override void OnAppearanceChange(EntityUid uid, PlantHolderVisualsComponent component, ref AppearanceChangeEvent args)
@@ -34,12 +32,12 @@ public sealed class PlantHolderVisualizerSystem : VisualizerSystem<PlantHolderVi
{
var valid = !string.IsNullOrWhiteSpace(state);
_sprite.LayerSetVisible((uid, args.Sprite), PlantHolderLayers.Plant, valid);
SpriteSystem.LayerSetVisible((uid, args.Sprite), PlantHolderLayers.Plant, valid);
if (valid)
{
_sprite.LayerSetRsi((uid, args.Sprite), PlantHolderLayers.Plant, new ResPath(rsi));
_sprite.LayerSetRsiState((uid, args.Sprite), PlantHolderLayers.Plant, state);
SpriteSystem.LayerSetRsi((uid, args.Sprite), PlantHolderLayers.Plant, new ResPath(rsi));
SpriteSystem.LayerSetRsiState((uid, args.Sprite), PlantHolderLayers.Plant, state);
}
}
}

View File

@@ -203,6 +203,9 @@ namespace Content.Client.Cargo.UI
/// </summary>
public void PopulateOrders(IEnumerable<CargoOrderData> orders)
{
if (!_orderConsoleQuery.TryComp(_owner, out var orderConsole))
return;
Requests.DisposeAllChildren();
foreach (var order in orders)
@@ -237,6 +240,7 @@ namespace Content.Client.Cargo.UI
row.Cancel.OnPressed += (args) => { OnOrderCanceled?.Invoke(args); };
// TODO: Disable based on access.
row.SetApproveVisible(orderConsole.Mode != CargoOrderConsoleMode.SendToPrimary);
row.Approve.OnPressed += (args) => { OnOrderApproved?.Invoke(args); };
Requests.AddChild(row);
}
@@ -290,8 +294,8 @@ namespace Content.Client.Cargo.UI
TransferSpinBox.Value > bankAccount.Accounts[orderConsole.Account] * orderConsole.TransferLimit ||
_timing.CurTime < orderConsole.NextAccountActionTime;
OrdersSpacer.Visible = !orderConsole.SlipPrinter;
Orders.Visible = !orderConsole.SlipPrinter;
OrdersSpacer.Visible = orderConsole.Mode != CargoOrderConsoleMode.PrintSlip;
Orders.Visible = orderConsole.Mode != CargoOrderConsoleMode.PrintSlip;
}
}
}

View File

@@ -14,5 +14,15 @@ namespace Content.Client.Cargo.UI
{
RobustXamlLoader.Load(this);
}
public void SetApproveVisible(bool visible)
{
Approve.Visible = visible;
if (visible)
Cancel.AddStyleClass("OpenLeft");
else
Cancel.RemoveStyleClass("OpenLeft");
}
}
}

View File

@@ -15,8 +15,8 @@ namespace Content.Client.Changelog
[GenerateTypedNameReferences]
public sealed partial class ChangelogWindow : FancyWindow
{
[Dependency] private readonly ChangelogManager _changelog = default!;
[Dependency] private readonly IClientAdminManager _adminManager = default!;
[Dependency] private readonly ChangelogManager _changelog = default!;
public ChangelogWindow()
{
@@ -112,15 +112,15 @@ namespace Content.Client.Changelog
}
[UsedImplicitly, AnyCommand]
public sealed class ChangelogCommand : IConsoleCommand
public sealed class ChangelogCommand : LocalizedCommands
{
public string Command => "changelog";
public string Description => "Opens the changelog";
public string Help => "Usage: changelog";
[Dependency] private readonly IUserInterfaceManager _uiManager = default!;
public void Execute(IConsoleShell shell, string argStr, string[] args)
public override string Command => "changelog";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
IoCManager.Resolve<IUserInterfaceManager>().GetUIController<ChangelogUIController>().OpenWindow();
_uiManager.GetUIController<ChangelogUIController>().OpenWindow();
}
}
}

View File

@@ -25,16 +25,14 @@ public sealed class ChargesSystem : SharedChargesSystem
while (query.MoveNext(out var uid, out var recharge, out var charges))
{
BaseActionComponent? actionComp = null;
if (!_actions.ResolveActionData(uid, ref actionComp, logError: false))
if (_actions.GetAction(uid, false) is not {} action)
continue;
var current = GetCurrentCharges((uid, charges, recharge));
if (!_lastCharges.TryGetValue(uid, out var last) || current != last)
{
_actions.UpdateAction(uid, actionComp);
_actions.UpdateAction(action);
}
_tempLastCharges[uid] = current;

View File

@@ -9,7 +9,6 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystem<TypingInd
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, TypingIndicatorComponent component, ref AppearanceChangeEvent args)
{
@@ -34,24 +33,24 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystem<TypingInd
return;
}
var layerExists = _sprite.LayerMapTryGet((uid, args.Sprite), TypingIndicatorLayers.Base, out var layer, false);
var layerExists = SpriteSystem.LayerMapTryGet((uid, args.Sprite), TypingIndicatorLayers.Base, out var layer, false);
if (!layerExists)
layer = _sprite.LayerMapReserve((uid, args.Sprite), TypingIndicatorLayers.Base);
layer = SpriteSystem.LayerMapReserve((uid, args.Sprite), TypingIndicatorLayers.Base);
_sprite.LayerSetRsi((uid, args.Sprite), layer, proto.SpritePath);
_sprite.LayerSetRsiState((uid, args.Sprite), layer, proto.TypingState);
SpriteSystem.LayerSetRsi((uid, args.Sprite), layer, proto.SpritePath);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), layer, proto.TypingState);
args.Sprite.LayerSetShader(layer, proto.Shader);
_sprite.LayerSetOffset((uid, args.Sprite), layer, proto.Offset);
SpriteSystem.LayerSetOffset((uid, args.Sprite), layer, proto.Offset);
AppearanceSystem.TryGetData<TypingIndicatorState>(uid, TypingIndicatorVisuals.State, out var state);
_sprite.LayerSetVisible((uid, args.Sprite), layer, state != TypingIndicatorState.None);
SpriteSystem.LayerSetVisible((uid, args.Sprite), layer, state != TypingIndicatorState.None);
switch (state)
{
case TypingIndicatorState.Idle:
_sprite.LayerSetRsiState((uid, args.Sprite), layer, proto.IdleState);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), layer, proto.IdleState);
break;
case TypingIndicatorState.Typing:
_sprite.LayerSetRsiState((uid, args.Sprite), layer, proto.TypingState);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), layer, proto.TypingState);
break;
}
}

View File

@@ -14,6 +14,7 @@ namespace Content.Client.Chat.UI
{
public abstract class SpeechBubble : Control
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IEyeManager _eyeManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] protected readonly IConfigurationManager ConfigManager = default!;
@@ -30,12 +31,12 @@ namespace Content.Client.Chat.UI
/// <summary>
/// The total time a speech bubble stays on screen.
/// </summary>
private const float TotalTime = 4;
private static readonly TimeSpan TotalTime = TimeSpan.FromSeconds(4);
/// <summary>
/// The amount of time at the end of the bubble's life at which it starts fading.
/// </summary>
private const float FadeTime = 0.25f;
private static readonly TimeSpan FadeTime = TimeSpan.FromSeconds(0.25f);
/// <summary>
/// The distance in world space to offset the speech bubble from the center of the entity.
@@ -50,7 +51,10 @@ namespace Content.Client.Chat.UI
private readonly EntityUid _senderEntity;
private float _timeLeft = TotalTime;
/// <summary>
/// The time at which this bubble will die.
/// </summary>
private TimeSpan _deathTime;
public float VerticalOffset { get; set; }
private float _verticalOffsetAchieved;
@@ -99,6 +103,7 @@ namespace Content.Client.Chat.UI
bubble.Measure(Vector2Helpers.Infinity);
ContentSize = bubble.DesiredSize;
_verticalOffsetAchieved = -ContentSize.Y;
_deathTime = _timing.RealTime + TotalTime;
}
protected abstract Control BuildBubble(ChatMessage message, string speechStyleClass, Color? fontColor = null);
@@ -107,8 +112,8 @@ namespace Content.Client.Chat.UI
{
base.FrameUpdate(args);
_timeLeft -= args.DeltaSeconds;
if (_entityManager.Deleted(_senderEntity) || _timeLeft <= 0)
var timeLeft = (float)(_deathTime - _timing.RealTime).TotalSeconds;
if (_entityManager.Deleted(_senderEntity) || timeLeft <= 0)
{
// Timer spawn to prevent concurrent modification exception.
Timer.Spawn(0, Die);
@@ -131,10 +136,10 @@ namespace Content.Client.Chat.UI
return;
}
if (_timeLeft <= FadeTime)
if (timeLeft <= FadeTime.TotalSeconds)
{
// Update alpha if we're fading.
Modulate = Color.White.WithAlpha(_timeLeft / FadeTime);
Modulate = Color.White.WithAlpha(timeLeft / (float)FadeTime.TotalSeconds);
}
else
{
@@ -144,7 +149,7 @@ namespace Content.Client.Chat.UI
var baseOffset = 0f;
if (_entityManager.TryGetComponent<SpeechComponent>(_senderEntity, out var speech))
if (_entityManager.TryGetComponent<SpeechComponent>(_senderEntity, out var speech))
baseOffset = speech.SpeechBubbleOffset;
var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -(EntityVerticalOffset + baseOffset);
@@ -175,9 +180,9 @@ namespace Content.Client.Chat.UI
/// </summary>
public void FadeNow()
{
if (_timeLeft > FadeTime)
if (_deathTime > _timing.RealTime)
{
_timeLeft = FadeTime;
_deathTime = _timing.RealTime + FadeTime;
}
}

View File

@@ -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();

View File

@@ -0,0 +1,16 @@
using Content.Client.Chemistry.UI;
using Content.Client.Items;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
namespace Content.Client.Chemistry.EntitySystems;
public sealed class HyposprayStatusControlSystem : EntitySystem
{
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainers = default!;
public override void Initialize()
{
base.Initialize();
Subs.ItemStatus<HyposprayComponent>(ent => new HyposprayStatusControl(ent, _solutionContainers));
}
}

View File

@@ -1,15 +0,0 @@
using Content.Client.Chemistry.UI;
using Content.Client.Items;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
namespace Content.Client.Chemistry.EntitySystems;
public sealed class HypospraySystem : SharedHypospraySystem
{
public override void Initialize()
{
base.Initialize();
Subs.ItemStatus<HyposprayComponent>(ent => new HyposprayStatusControl(ent, _solutionContainers));
}
}

View File

@@ -11,7 +11,6 @@ namespace Content.Client.Chemistry.Visualizers;
public sealed class FoamVisualizerSystem : VisualizerSystem<FoamVisualsComponent>
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -72,7 +71,7 @@ public sealed class FoamVisualizerSystem : VisualizerSystem<FoamVisualsComponent
return;
if (TryComp<SpriteComponent>(uid, out var sprite))
_sprite.SetVisible((uid, sprite), false);
SpriteSystem.SetVisible((uid, sprite), false);
}
}

View File

@@ -16,7 +16,6 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly ItemSystem _itemSystem = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -50,7 +49,7 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
if (args.Sprite == null)
return;
if (!_sprite.LayerMapTryGet((uid, args.Sprite), component.Layer, out var fillLayer, false))
if (!SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.Layer, out var fillLayer, false))
return;
var maxFillLevels = component.MaxFillLevels;
@@ -68,9 +67,9 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
}
if (component.Metamorphic)
{
if (_sprite.LayerMapTryGet((uid, args.Sprite), component.BaseLayer, out var baseLayer, false))
if (SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.BaseLayer, out var baseLayer, false))
{
var hasOverlay = _sprite.LayerMapTryGet((uid, args.Sprite), component.OverlayLayer, out var overlayLayer, false);
var hasOverlay = SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.OverlayLayer, out var overlayLayer, false);
if (AppearanceSystem.TryGetData<string>(uid, SolutionContainerVisuals.BaseOverride,
out var baseOverride,
@@ -80,35 +79,35 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
if (reagentProto?.MetamorphicSprite is { } sprite)
{
_sprite.LayerSetSprite((uid, args.Sprite), baseLayer, sprite);
SpriteSystem.LayerSetSprite((uid, args.Sprite), baseLayer, sprite);
if (reagentProto.MetamorphicMaxFillLevels > 0)
{
_sprite.LayerSetVisible((uid, args.Sprite), fillLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, true);
maxFillLevels = reagentProto.MetamorphicMaxFillLevels;
fillBaseName = reagentProto.MetamorphicFillBaseName;
changeColor = reagentProto.MetamorphicChangeColor;
fillSprite = sprite;
}
else
_sprite.LayerSetVisible((uid, args.Sprite), fillLayer, false);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, false);
if (hasOverlay)
_sprite.LayerSetVisible((uid, args.Sprite), overlayLayer, false);
SpriteSystem.LayerSetVisible((uid, args.Sprite), overlayLayer, false);
}
else
{
_sprite.LayerSetVisible((uid, args.Sprite), fillLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, true);
if (hasOverlay)
_sprite.LayerSetVisible((uid, args.Sprite), overlayLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), overlayLayer, true);
if (component.MetamorphicDefaultSprite != null)
_sprite.LayerSetSprite((uid, args.Sprite), baseLayer, component.MetamorphicDefaultSprite);
SpriteSystem.LayerSetSprite((uid, args.Sprite), baseLayer, component.MetamorphicDefaultSprite);
}
}
}
}
else
{
_sprite.LayerSetVisible((uid, args.Sprite), fillLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, true);
}
var closestFillSprite = ContentHelpers.RoundToLevels(fraction, 1, maxFillLevels + 1);
@@ -120,25 +119,25 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
var stateName = fillBaseName + closestFillSprite;
if (fillSprite != null)
_sprite.LayerSetSprite((uid, args.Sprite), fillLayer, fillSprite);
_sprite.LayerSetRsiState((uid, args.Sprite), fillLayer, stateName);
SpriteSystem.LayerSetSprite((uid, args.Sprite), fillLayer, fillSprite);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), fillLayer, stateName);
if (changeColor && AppearanceSystem.TryGetData<Color>(uid, SolutionContainerVisuals.Color, out var color, args.Component))
_sprite.LayerSetColor((uid, args.Sprite), fillLayer, color);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, color);
else
_sprite.LayerSetColor((uid, args.Sprite), fillLayer, Color.White);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, Color.White);
}
else
{
if (component.EmptySpriteName == null)
_sprite.LayerSetVisible((uid, args.Sprite), fillLayer, false);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, false);
else
{
_sprite.LayerSetRsiState((uid, args.Sprite), fillLayer, component.EmptySpriteName);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), fillLayer, component.EmptySpriteName);
if (changeColor)
_sprite.LayerSetColor((uid, args.Sprite), fillLayer, component.EmptySpriteColor);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, component.EmptySpriteColor);
else
_sprite.LayerSetColor((uid, args.Sprite), fillLayer, Color.White);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, Color.White);
}
}

View File

@@ -64,7 +64,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);
@@ -87,20 +87,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);
}
}

View File

@@ -11,18 +11,6 @@ namespace Content.Client.Clothing.Systems;
// All valid items for chameleon are calculated on client startup and stored in dictionary.
public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem
{
[Dependency] private readonly IPrototypeManager _proto = default!;
private static readonly SlotFlags[] IgnoredSlots =
{
SlotFlags.All,
SlotFlags.PREVENTEQUIP,
SlotFlags.NONE
};
private static readonly SlotFlags[] Slots = Enum.GetValues<SlotFlags>().Except(IgnoredSlots).ToArray();
private readonly Dictionary<SlotFlags, List<string>> _data = new();
public override void Initialize()
{
base.Initialize();
@@ -61,49 +49,4 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem
borderColor.AccentVColor = otherBorderColor.AccentVColor;
}
}
/// <summary>
/// Get a list of valid chameleon targets for these slots.
/// </summary>
public IEnumerable<string> GetValidTargets(SlotFlags slot)
{
var set = new HashSet<string>();
foreach (var availableSlot in _data.Keys)
{
if (slot.HasFlag(availableSlot))
{
set.UnionWith(_data[availableSlot]);
}
}
return set;
}
private void PrepareAllVariants()
{
_data.Clear();
var prototypes = _proto.EnumeratePrototypes<EntityPrototype>();
foreach (var proto in prototypes)
{
// check if this is valid clothing
if (!IsValidTarget(proto))
continue;
if (!proto.TryGetComponent(out ClothingComponent? item, Factory))
continue;
// sort item by their slot flags
// one item can be placed in several buckets
foreach (var slot in Slots)
{
if (!item.Slots.HasFlag(slot))
continue;
if (!_data.ContainsKey(slot))
{
_data.Add(slot, new List<string>());
}
_data[slot].Add(proto.ID);
}
}
}
}

View File

@@ -42,7 +42,7 @@ public sealed class ChameleonBoundUserInterface : BoundUserInterface
var targets = _chameleon.GetValidTargets(st.Slot);
if (st.RequiredTag != null)
{
var newTargets = new List<string>();
var newTargets = new List<EntProtoId>();
foreach (var target in targets)
{
if (string.IsNullOrEmpty(target) || !_proto.TryIndex(target, out EntityPrototype? proto))

View File

@@ -19,8 +19,8 @@ public sealed partial class ChameleonMenu : DefaultWindow
private readonly SpriteSystem _sprite;
public event Action<string>? OnIdSelected;
private IEnumerable<string> _possibleIds = Enumerable.Empty<string>();
private string? _selectedId;
private IEnumerable<EntProtoId> _possibleIds = [];
private EntProtoId? _selectedId;
private string _searchFilter = "";
public ChameleonMenu()
@@ -32,7 +32,7 @@ public sealed partial class ChameleonMenu : DefaultWindow
Search.OnTextChanged += OnSearchEntered;
}
public void UpdateState(IEnumerable<string> possibleIds, string? selectedId)
public void UpdateState(IEnumerable<EntProtoId> possibleIds, string? selectedId)
{
_possibleIds = possibleIds;
_selectedId = selectedId;
@@ -57,7 +57,7 @@ public sealed partial class ChameleonMenu : DefaultWindow
if (!_prototypeManager.TryIndex(id, out EntityPrototype? proto))
continue;
var lowId = id.ToLowerInvariant();
var lowId = id.Id.ToLowerInvariant();
var lowName = proto.Name.ToLowerInvariant();
if (!lowId.Contains(searchFilterLow) && !lowName.Contains(_searchFilter))
continue;

View File

@@ -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)

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]);
}
}

View File

@@ -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;
}

View File

@@ -1,32 +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 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);
}
}

View File

@@ -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"));
}
}

Some files were not shown because too many files have changed in this diff Show More