Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1605 commits
Select commit Hold shift + click to select a range
1fa968e
Atmospherics DeltaPressure Bulk Processing (#41553)
ArtisticRoomba Feb 2, 2026
fae9b35
Clarify documentation on Atmospherics heat capacity APIs (#42747)
ArtisticRoomba Feb 2, 2026
4ce1aa6
Prevent anomalies from spawning multiple entities on the same tile wh…
Quantum-cross Feb 2, 2026
8591b92
Automatic changelog update
PJBot Feb 2, 2026
1d05170
Fix bio suits (#42748)
Shegare Feb 2, 2026
a765d42
Automatic changelog update
PJBot Feb 2, 2026
b5f4c28
Ensure DNA scrambling makes valid profiles (#42757)
sowelipililimute Feb 2, 2026
3e6d5f6
Automatic changelog update
PJBot Feb 2, 2026
c358dbf
Make Ichor work in the bloodstream (#42758)
sowelipililimute Feb 3, 2026
7b630cd
Automatic changelog update
PJBot Feb 3, 2026
08bbc11
Clean up Marking data structure, add tests for Zombie transformation …
sowelipililimute Feb 3, 2026
7481797
Automatic changelog update
PJBot Feb 3, 2026
d448f04
Make `StatusEffectsSystem`'s cache an instance field (#42762)
Centronias Feb 3, 2026
6e84e72
Fix markings colour setting (#42771)
sowelipililimute Feb 3, 2026
0599a24
Automatic changelog update
PJBot Feb 3, 2026
8c891ef
Syndimov Kit (#42764)
Minemoder5000 Feb 3, 2026
899c8d2
Automatic changelog update
PJBot Feb 3, 2026
d4fe565
[EXPERIMENTAL] Removes Blunt and Burn Damage Threshold Gib Behavior (…
Admiral-Obvious-001 Feb 4, 2026
9722ae0
Automatic changelog update
PJBot Feb 4, 2026
27ef42a
Only rebuild organ markings when sex or group has changed (#42782)
sowelipililimute Feb 4, 2026
a7a2ee6
Adding logs for ImmovableRodSystem Interactions for admin panel (#42769)
M4rchy-S Feb 4, 2026
716943e
Automatic changelog update
PJBot Feb 4, 2026
222021d
Make volumetric devices respect their pressure limits (#35211)
veprolet Feb 4, 2026
34c712a
Automatic changelog update
PJBot Feb 4, 2026
81dc1af
Minor spelling correction in admin logging (#42784)
Kowlin Feb 4, 2026
8c4d86c
Hopefully fix subgamemodes from pushing rounds into extended. (#42744)
Kowlin Feb 4, 2026
381fda0
Remove Uranium from Mute Toxin recipe (#42787)
0-Anon Feb 4, 2026
27f674d
Automatic changelog update
PJBot Feb 4, 2026
f2b3bf9
Add feedback popup for gibbing/ashing removal (#42789)
Princess-Cheeseballs Feb 4, 2026
25262cb
Added Insulated Components to RK and Servants. (#42569)
ScholarNZL Feb 4, 2026
c0f691a
Automatic changelog update
PJBot Feb 4, 2026
41f042b
PredictedRandom Helpers (#42797)
Princess-Cheeseballs Feb 5, 2026
c2f986e
Cleanup Antag Selection Logic a Lot (#42673)
Princess-Cheeseballs Feb 5, 2026
2320d25
[Stable] Fix metabolism shuffle (#42795)
ScarKy0 Feb 5, 2026
ddd75da
Stable to master (#42802)
Princess-Cheeseballs Feb 5, 2026
a229bc2
Fix gas filter math (#42801)
ArtisticRoomba Feb 5, 2026
991a3e9
Automatic changelog update
PJBot Feb 5, 2026
eca952e
Optical thermal scanner implementation (#42613)
insoPL Feb 6, 2026
aa7eca9
Automatic changelog update
PJBot Feb 6, 2026
91b518a
Add opticial thermal scanners to engivend (#42813)
insoPL Feb 6, 2026
cfb59ef
fixed vox tail marking and suitslot layer order (#42808)
AreYouConfused Feb 6, 2026
4c62ce2
Automatic changelog update
PJBot Feb 6, 2026
bb8ce29
Chaplains can now choose a custom name (#42819)
11BelowStudio Feb 7, 2026
e627ba3
Automatic changelog update
PJBot Feb 7, 2026
01039a8
Defrost Plasma (#42822)
Velken Feb 7, 2026
c36fffc
Automatic changelog update
PJBot Feb 7, 2026
3efa385
Add CL for 42813 (#42824)
ArtisticRoomba Feb 7, 2026
fd870f3
Automatic changelog update
PJBot Feb 7, 2026
d72a59f
Predict holoprojectors and add an integration test for them (#41569)
slarticodefast Feb 7, 2026
ff3076a
fixing firelocks (#37523)
DIMMoon1 Feb 7, 2026
c1c0e59
Automatic changelog update
PJBot Feb 7, 2026
1e7d50e
scale ammonia and nitrous oxide damage with gas quantity (#39591)
qwerltaz Feb 7, 2026
980cb75
Automatic changelog update
PJBot Feb 7, 2026
993c316
Emitters now give alerts if interfered with. (#39513)
SuperGDPWYL Feb 7, 2026
ba2b833
Automatic changelog update
PJBot Feb 7, 2026
45a5d5b
Fixed containment fields dying even when one side still had power (#4…
MidZik Feb 7, 2026
ebebc42
Automatic changelog update
PJBot Feb 7, 2026
e4edf7d
fix cl (#42831)
ArtisticRoomba Feb 7, 2026
9170e26
Make nukie infiltrator shuttle pinpointer universal (#42101)
PAFFhassoocks Feb 7, 2026
3a202be
Automatic changelog update
PJBot Feb 7, 2026
2221df1
Make conveyors stack items that stop (#42829)
SlamBamActionman Feb 7, 2026
6369aae
Automatic changelog update
PJBot Feb 7, 2026
6714a2f
Solved #42803 - Syndie contra explicitly has no allowed departments o…
11BelowStudio Feb 7, 2026
48cb7ea
Automatic changelog update
PJBot Feb 7, 2026
1db05a6
Empty Crayon Box (#42837)
Aearo-Deepwater Feb 7, 2026
bbe00d6
Fix some locale that sometimes get ignored by gitignore (#42834)
kosticia Feb 7, 2026
ff41713
Animated Vox Tails (#40925)
TrixxedHeart Feb 8, 2026
c4d439f
Automatic changelog update
PJBot Feb 8, 2026
7e88e4e
Fix-sprites-practice-disabler (#42838)
Liem161 Feb 8, 2026
1d55663
Automatic changelog update
PJBot Feb 8, 2026
15dbf80
Change warfarin to heparin (#42847)
salarua Feb 8, 2026
6f79e1d
Automatic changelog update
PJBot Feb 8, 2026
41dddf4
Fixed vox cigarette smoking sprites (#42584)
Kittygyat Feb 8, 2026
9c23b4a
Documents all the public APIs for Nubody & markings code (#42857)
sowelipililimute Feb 8, 2026
43c8dc7
Fix(Humanoid): Prevent skin color verification failures due to precis…
VerinSenpai Feb 8, 2026
63af4dd
Fix RCD not being able to place hull tiles in space (#42740)
TriviaSolari Feb 9, 2026
545223a
Automatic changelog update
PJBot Feb 9, 2026
676492e
Thermal vision overlay for admins (#42812)
insoPL Feb 9, 2026
271252c
New high pop station - Serpentcrest (#38991)
TytosB Feb 9, 2026
a882259
Automatic changelog update
PJBot Feb 9, 2026
9c89a59
Update Credits (#42848)
github-actions[bot] Feb 9, 2026
a01e7dc
fix: APC sprites stuck in fully drained states on round start (#42852)
mdrkrg Feb 9, 2026
0d9d244
Automatic changelog update
PJBot Feb 9, 2026
e76a1b5
Minor tweaks to Urist names (#42791)
Hitlinemoss Feb 9, 2026
865180d
Automatic changelog update
PJBot Feb 9, 2026
22ba8a3
Vulpkanin Yawns (#42768)
ScarKy0 Feb 9, 2026
6f924df
Automatic changelog update
PJBot Feb 9, 2026
15147df
Split HumanoidProfileEditor.xaml.cs into separate files (#42715)
portfiend Feb 9, 2026
94070d2
serpentcrest hotfix (#42863)
TytosB Feb 9, 2026
4abdcf7
Ensure profile loading only returns valid species (#42842)
sowelipililimute Feb 9, 2026
8cee089
Automatic changelog update
PJBot Feb 9, 2026
8e2c01b
Merge remote-tracking branch 'upstream/stable' into stable-hotfix-mer…
VasilisThePikachu Feb 9, 2026
752ff79
Me when rider does not commit my change
VasilisThePikachu Feb 9, 2026
3911d0d
Ensure profile loading only returns valid species (#42842) (Stable me…
VasilisThePikachu Feb 9, 2026
8c68824
Slat tiles and decals (#37832)
Aearo-Deepwater Feb 10, 2026
3813758
Automatic changelog update
PJBot Feb 10, 2026
1f82b9e
Fix gas filter always outputting 20C filtered gas (#42876)
ArtisticRoomba Feb 10, 2026
550d6a0
Automatic changelog update
PJBot Feb 10, 2026
c086acb
Cleanup warnings: CS0114, CS0414, CS9107 (#42859)
B-Kirill Feb 10, 2026
862ce38
Regular bots are now repaired gradually, just like borgs (#42878)
11BelowStudio Feb 10, 2026
457cd65
Automatic changelog update
PJBot Feb 10, 2026
7009a06
Vulp Tail Wags + Tail Fixes (#42843)
TiniestShark Feb 10, 2026
aa4422f
Automatic changelog update
PJBot Feb 10, 2026
fc4a96f
Add Missing IntercomAssembly Components (#42821)
magnnusson Feb 11, 2026
5f12673
Automatic changelog update
PJBot Feb 11, 2026
5a2da26
(Re)Add sneezing emote. (#41479)
Minemoder5000 Feb 11, 2026
57b248f
Automatic changelog update
PJBot Feb 11, 2026
b90c9e4
fix: cleaning evidence off a person no longer reveals their true iden…
leahcat Feb 11, 2026
09222dd
Automatic changelog update
PJBot Feb 11, 2026
b47db86
Remove bad accents (#42880)
PJB3005 Feb 12, 2026
5ae67c9
Automatic changelog update
PJBot Feb 12, 2026
fe4397e
Remove dwarves (#42882)
PJB3005 Feb 13, 2026
1d13dbf
Automatic changelog update
PJBot Feb 13, 2026
ffe93b0
Fix chameleon controller not updating fake mindshield action icon (#4…
leahcat Feb 13, 2026
cb065fa
Automatic changelog update
PJBot Feb 13, 2026
1cc21d9
Fix Flares dying after 10 seconds. (#42765)
Princess-Cheeseballs Feb 13, 2026
e16ae0e
Typo fix (#41652)
Toby222 Feb 13, 2026
0e86bd4
Identity Mask now updates equipped Agent ID name (#42772)
leahcat Feb 13, 2026
7593a46
Automatic changelog update
PJBot Feb 13, 2026
2f3589e
Vulpkanin Sulfur Blood + Organs (#42722)
ScarKy0 Feb 14, 2026
41cb4b8
Automatic changelog update
PJBot Feb 14, 2026
6fdc60a
Revert Gibbing Test, Remove Old Popups (#42924)
Princess-Cheeseballs Feb 15, 2026
6e38a79
Fix paradox clones having default voice and pronouns (#42923)
ScarKy0 Feb 15, 2026
9a7692a
Automatic changelog update
PJBot Feb 15, 2026
faeacd1
AI can now read papers and envelopes (#42926)
TriviaSolari Feb 15, 2026
add86af
Automatic changelog update
PJBot Feb 15, 2026
d1cbe45
Change basic viper magazine to high capacity in operative bundle (#4…
Le-Arctic-Fox Feb 15, 2026
883b58c
Automatic changelog update
PJBot Feb 15, 2026
8f78808
merge staging into master (#42928)
slarticodefast Feb 15, 2026
4f11f70
Fix uncooked animal proteins metabolism (#42942)
ScarKy0 Feb 16, 2026
1593438
Automatic changelog update
PJBot Feb 16, 2026
307aa05
Fix Thieving Beacon not detecting HUDs for said objective (#42945)
Synthestra Feb 16, 2026
d53be52
Automatic changelog update
PJBot Feb 16, 2026
f5bab19
Fix jetpacks not turning off when switching to another jetpack (#42689)
ss14steel Feb 16, 2026
cf831e2
Automatic changelog update
PJBot Feb 16, 2026
0b81cfb
fixed barber scissors misgendering when blocked by a hat (#42948)
nekokiwa Feb 16, 2026
5ec6d60
Automatic changelog update
PJBot Feb 16, 2026
2130cde
Fix reagent duplication from vomiting (#42954)
Princess-Cheeseballs Feb 17, 2026
4751c79
Add missing test pair cleanup to SharedGasSpecificHeatsTest (#42763)
Centronias Feb 17, 2026
39f302a
New moth emote. Flaps wings! (#42912)
Pgriha Feb 17, 2026
b7639b2
Automatic changelog update
PJBot Feb 18, 2026
b296dc8
Added Emp interaction with Bar Sign (#42950)
pcaessayrs Feb 18, 2026
7d05dbc
Automatic changelog update
PJBot Feb 18, 2026
6a19cd4
Vox, Diona and Vulp Unique Sneezes (#42929)
ScarKy0 Feb 18, 2026
920fed4
Automatic changelog update
PJBot Feb 18, 2026
0d3754d
Fixed Det coat armor status (#42969)
PicklOH Feb 18, 2026
f0ce055
Automatic changelog update
PJBot Feb 18, 2026
2847b41
update basic operative bundle contents (#42930)
robinthegirlthing Feb 18, 2026
3cbe210
Automatic changelog update
PJBot Feb 18, 2026
7e10c3e
Show fuckrules usage to admins (#42988)
slarticodefast Feb 21, 2026
24a28b3
Automatic changelog update
PJBot Feb 21, 2026
9222e97
Add hand label blacklist (#42986)
beck-thompson Feb 21, 2026
7cba448
More xenoborg names (#42984)
Samuka-C Feb 21, 2026
f25dcc1
Automatic changelog update
PJBot Feb 21, 2026
f661edf
Make prescription glasses actually work (#42990)
lyxcaster Feb 21, 2026
e517a04
Automatic changelog update
PJBot Feb 22, 2026
274d4b6
Update Credits (#42992)
github-actions[bot] Feb 22, 2026
67cb6de
Improved camera static shader randomness (#42968)
eoineoineoin Feb 22, 2026
0807fe3
Move fuckrules CL to Admin (#42996)
ScarKy0 Feb 22, 2026
39f8655
Predicted Networked Metabolism (#42798)
Princess-Cheeseballs Feb 22, 2026
f7ec60c
Minor Relic Fixes (#42921)
Vortebo Feb 22, 2026
75d52f1
Automatic changelog update
PJBot Feb 22, 2026
d9c4cf1
Add unlockable reporter cosmetics (#41079)
SlamBamActionman Feb 22, 2026
f1c1a97
Automatic changelog update
PJBot Feb 22, 2026
4206315
Oasis: Label every air alarm (#42911)
F1restar4 Feb 22, 2026
ae26d20
Remake the "Vegan Meatball" salvage wreck (#42994)
Blackern5000 Feb 22, 2026
bb28458
Automatic changelog update
PJBot Feb 22, 2026
cf74345
Fixed Packed by adding extra APC to comms room (#42953)
11BelowStudio Feb 22, 2026
a714898
Automatic changelog update
PJBot Feb 22, 2026
47923be
EMP implant uplink texture (Addresses #42008) (#42998)
ketufaispikinut Feb 23, 2026
284693e
Automatic changelog update
PJBot Feb 23, 2026
b584549
serpentcrest atmos/sec tweaks (#42905)
TytosB Feb 23, 2026
e9f8042
Automatic changelog update
PJBot Feb 23, 2026
04b4b7d
Non-obsoletion warnings as errors in Release. (#42983)
moonheart08 Feb 23, 2026
be4aaa0
Lizard rehappy alternative (#42915)
DaturoDewitt Feb 23, 2026
e2cc5de
Automatic changelog update
PJBot Feb 23, 2026
63457d0
Add TriggerOnRot Component (#42667)
blueDev2 Feb 24, 2026
0a55e5f
Largely Revert Unique Corgi Hardsuit and Equipment Sprites (#42696)
TiniestShark Feb 25, 2026
462f4d0
Automatic changelog update
PJBot Feb 25, 2026
01c8cd8
Revert "Remove dwarves" (#43027)
SlamBamActionman Feb 25, 2026
015f66e
Merge upstream space-wizards Oct 2025 (1f38a34217)
rhailrake Feb 25, 2026
65ff6c4
Fix repeated Localization warnings when viewing the Power Monitoring …
korczoczek Feb 25, 2026
7e5ddfd
Give borgs default prying (#41812)
ScarKy0 Feb 25, 2026
2a274a0
Automatic changelog update
PJBot Feb 25, 2026
af71eec
Make HasMind not always false for client. (#43033)
Velken Feb 25, 2026
e774e11
Add transfer entity to mind events. (#43020)
ScarKy0 Feb 26, 2026
34cae5d
fix tests
rhailrake Feb 26, 2026
28c1201
Merge upstream space-wizards Nov 2025 (04c5406e20)
rhailrake Feb 26, 2026
b9c8d4d
some text fixes
rhailrake Feb 26, 2026
f981f8a
Partially revert "Remove bad accents" (#43030)
SlamBamActionman Feb 26, 2026
9ae88c4
Automatic changelog update
PJBot Feb 26, 2026
8315eaa
Revert "Cleanup Antag Selection Logic a Lot" (#43041)
Errant-4 Feb 26, 2026
d0ccc4c
Merge upstream space-wizards Dec 2025 (e9932ec0ea)
rhailrake Feb 26, 2026
c7b9918
Fix Phase 3 runtime errors (Dec 2025 upstream merge)
rhailrake Feb 26, 2026
ef21b12
Fix hypodart uplink description (#43035)
OrbitSystem07 Feb 26, 2026
4d5dab1
Automatic changelog update
PJBot Feb 26, 2026
08db33b
Stop AI knocking on shutters, blast doors (#42972)
eoineoineoin Feb 26, 2026
497888f
Add building animations to techfabs (#42962)
DinnerCalzone Feb 26, 2026
5a923b8
Automatic changelog update
PJBot Feb 26, 2026
7bc062e
StrippableComponent timespan calculation fix (#43022)
Redrover1760 Feb 26, 2026
e16fc10
Fix Holosign Placement (#42909)
TriviaSolari Feb 26, 2026
9cdc009
Automatic changelog update
PJBot Feb 27, 2026
e361944
Make DamageSpecifier serializable (#43049)
sowelipililimute Feb 27, 2026
d21e95e
Automatic changelog update
PJBot Feb 27, 2026
dbccc58
Revert "Drop ICharacterProfile/ICharacterAppearance interfaces (#42661)"
rhailrake Feb 27, 2026
bd1899f
Revert "Cleanup warnings: CS0168, CS0414, CS8321 (#42623)"
rhailrake Feb 27, 2026
946aa6b
Revert "Replace metabolism groups with metabolism stages (#42172)"
rhailrake Feb 27, 2026
dceb7f5
Revert "Make some of the arachnid metabolisers animal ones (#42529)"
rhailrake Feb 27, 2026
fb1da47
Revert "Ensure cat ears & tails cannot be selected by players (#42579)"
rhailrake Feb 27, 2026
e96736e
Revert "Fix hideable humanoid layers (#42553)"
rhailrake Feb 27, 2026
4d53858
Revert "Fix sexed organs (#42554)"
rhailrake Feb 27, 2026
4aa69f9
Revert "Fix humanoid profile voice being broken (#42550)"
rhailrake Feb 27, 2026
804641b
Revert "Add sowelipililimute as codeowner for body and humanoid (#425…
rhailrake Feb 27, 2026
7e07c73
Revert "Fix MagicMirror UI (#42544)"
rhailrake Feb 27, 2026
399af8c
Revert "Visual nubody (humanoid appearance refactor) (#42476)"
rhailrake Feb 27, 2026
635f35b
Revert "Let vox eat trash again (#42503)"
rhailrake Feb 27, 2026
f2ce28b
Revert "Nubody (#42419)"
rhailrake Feb 27, 2026
09ef176
Revert "Move character preview handling into a specialized control (#…
rhailrake Feb 27, 2026
1946eb3
Revert "Predicted Networked Metabolism (#42798)"
rhailrake Feb 27, 2026
f5267c8
Revert "fixed barber scissors misgendering when blocked by a hat (#42…
rhailrake Feb 27, 2026
097408d
Revert "Minor tweaks to Urist names (#42791)"
rhailrake Feb 27, 2026
c78ddb3
Revert "Documents all the public APIs for Nubody & markings code (#42…
rhailrake Feb 27, 2026
fbe4fcb
Revert "fixed vox tail marking and suitslot layer order (#42808)"
rhailrake Feb 27, 2026
ace138c
Revert "Stable to master (#42802)"
rhailrake Feb 27, 2026
5e3b871
Revert "Only rebuild organ markings when sex or group has changed (#4…
rhailrake Feb 27, 2026
f35c19f
Revert "Fix markings colour setting (#42771)"
rhailrake Feb 27, 2026
e03bc07
Revert "Clean up Marking data structure, add tests for Zombie transfo…
rhailrake Feb 27, 2026
9d699b3
Revert "Move character preview handling into a specialized control (#…
rhailrake Feb 27, 2026
08cd7b5
Revert "Drop ICharacterProfile/ICharacterAppearance interfaces (#42661)"
rhailrake Feb 27, 2026
27cfee3
Revert "Cleanup warnings: CS0168, CS0414, CS8321 (#42623)"
rhailrake Feb 27, 2026
eae0759
Revert "Replace metabolism groups with metabolism stages (#42172)"
rhailrake Feb 27, 2026
2ffb9d9
Revert "Make some of the arachnid metabolisers animal ones (#42529)"
rhailrake Feb 27, 2026
0dcc832
Revert "Ensure cat ears & tails cannot be selected by players (#42579)"
rhailrake Feb 27, 2026
b73eb77
Revert "Fix hideable humanoid layers (#42553)"
rhailrake Feb 27, 2026
a3195db
Revert "Fix sexed organs (#42554)"
rhailrake Feb 27, 2026
806b5a2
Revert "Fix humanoid profile voice being broken (#42550)"
rhailrake Feb 27, 2026
14ab580
Revert "Add sowelipililimute as codeowner for body and humanoid (#425…
rhailrake Feb 27, 2026
4dff59c
Revert "Fix MagicMirror UI (#42544)"
rhailrake Feb 27, 2026
149d80f
Revert "Visual nubody (humanoid appearance refactor) (#42476)"
rhailrake Feb 27, 2026
7c2bcc7
Revert "Let vox eat trash again (#42503)"
rhailrake Feb 27, 2026
2772870
Revert "Nubody (#42419)"
rhailrake Feb 27, 2026
690b265
Fix build errors after nubody reverts (feb2026-no-nubody)
rhailrake Feb 27, 2026
96f514d
Fix missing markingCategory on animated tail markings
rhailrake Feb 27, 2026
7a82a35
Merge upstream space-wizards Jan 2026 (jan2026-no-nubody)
rhailrake Feb 27, 2026
4cd761d
Merge upstream space-wizards Feb 2026 (feb2026-no-nubody)
rhailrake Feb 27, 2026
ab9e83a
Fix game presets and map (#1088)
smiler009 Feb 28, 2026
44670c8
fix mind system
rhailrake Feb 28, 2026
9e3b6d2
fix slots
rhailrake Feb 28, 2026
e4aa421
ыыы
TheZuTi Feb 28, 2026
003188e
china
TheZuTi Mar 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ resharper_csharp_qualified_using_at_nested_scope = false
resharper_csharp_prefer_qualified_reference = false
resharper_csharp_allow_alias = false

[*.{csproj,xml,yml,yaml,dll.config,msbuildproj,targets,props}]
[*.{csproj,xml,yml,yaml,dll.config,msbuildproj,targets,props,slnx}]
indent_size = 2

[nuget.config]
Expand Down
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Ping for all PRs
* @KloopRE
* @rhailrake

# Ping for prototypes changes.
# /Resources/Prototypes/ @
2 changes: 1 addition & 1 deletion .github/workflows/build-docfx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Install dependencies
run: dotnet restore
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-map-renderer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Install dependencies
run: dotnet restore
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-test-debug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Install dependencies
run: dotnet restore
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Get Engine Tag
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Get Engine Tag
run: |
Expand Down
19 changes: 13 additions & 6 deletions .github/workflows/test-packaging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,11 @@ jobs:
cd RobustToolbox/
git submodule update --init --recursive

- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
# ubuntu-latest has .NET 10
# - name: Setup .NET Core
# uses: actions/setup-dotnet@v4.1.0
# with:
# dotnet-version: 10.0.x

- name: Install dependencies
run: dotnet restore
Expand All @@ -60,7 +61,13 @@ jobs:
run: dotnet build Content.Packaging --configuration Release --no-restore /m

- name: Package server
run: dotnet run --project Content.Packaging server --platform win-x64 --platform win-arm64 --platform linux-x64 --platform linux-arm64 --platform osx-x64 --platform osx-arm64
run: dotnet run --project Content.Packaging server --log-build --platform win-x64 --platform win-arm64 --platform linux-x64 --platform linux-arm64 --platform osx-x64 --platform osx-arm64

- name: Package client
run: dotnet run --project Content.Packaging client --no-wipe-release
run: dotnet run --project Content.Packaging client --log-build --no-wipe-release

- uses: actions/upload-artifact@v4
with:
name: binlogs
path: release/*.binlog
retention-days: 7
2 changes: 1 addition & 1 deletion .github/workflows/yaml-linter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install dependencies
run: dotnet restore
- name: Build
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# MSbuild binlog files
*.binlog

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

Expand Down
2 changes: 1 addition & 1 deletion BuildChecker/git_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from pathlib import Path
from typing import List

SOLUTION_PATH = Path("..") / "SpaceStation14.sln"
SOLUTION_PATH = Path("..") / "SpaceStation14.slnx"
# If this doesn't match the saved version we overwrite them all.
CURRENT_HOOKS_VERSION = "4"
QUIET = len(sys.argv) == 2 and sys.argv[1] == "--quiet"
Expand Down
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This isn’t an exhaustive list of things that you can’t do. Rather, take it i

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).
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 [support@spacestation14.com](mailto:support@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.
Expand Down
11 changes: 11 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Space Station 14 Contributing Guidelines

Thanks for contributing to Space Station 14.
When contributing, be sure to follow our [codebase conventions](https://docs.spacestation14.com/en/general-development/codebase-info/codebase-organization.html) and [PR guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).

Following these guidelines helps us increase review turnaround time, so be sure to review the linked documents in full.

The last major guidelines update was on **December 6th, 2025**.

### Why is this here?
We put this here so that GitHub will notify you when submitting a pull request that the PR guidelines have changed, if you haven't read the latest version.
23 changes: 14 additions & 9 deletions Content.Benchmarks/Content.Benchmarks.csproj
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\RobustToolbox\MSBuild\Robust.Properties.targets" />
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<OutputPath>..\bin\Content.Benchmarks\</OutputPath>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>12</LangVersion>
<IsTestingPlatformApplication>false</IsTestingPlatformApplication>
<Nullable>disable</Nullable>
</PropertyGroup>
<Import Project="../MSBuild/Content.props" />
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" />

<!-- pin transitive deps -->
<PackageReference Include="System.Management" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Content.Client\Content.Client.csproj" />
<ProjectReference Include="..\Content.Server\Content.Server.csproj" />
<ProjectReference Include="..\Content.Shared\Content.Shared.csproj" />
<ProjectReference Include="..\Content.Tests\Content.Tests.csproj" />
<ProjectReference Include="..\Content.IntegrationTests\Content.IntegrationTests.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Benchmarks\Robust.Benchmarks.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Client\Robust.Client.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Server\Robust.Server.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Shared.Maths\Robust.Shared.Maths.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Shared\Robust.Shared.csproj" />
</ItemGroup>

<Import Project="..\RobustToolbox\Imports\Lidgren.props" />
<Import Project="..\RobustToolbox\Imports\Client.props" />
<Import Project="..\RobustToolbox\Imports\Server.props" />
<Import Project="..\RobustToolbox\Imports\Shared.props" />
<Import Project="..\RobustToolbox\Imports\Benchmarks.props" />
<Import Project="..\RobustToolbox\Imports\Testing.props" />
</Project>
191 changes: 191 additions & 0 deletions Content.Benchmarks/DestructibleBenchmark.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
using Content.Server.Destructible;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
using Content.Shared.Damage.Systems;
using Content.Shared.FixedPoint;
using Content.Shared.Maps;
using Robust.Shared;
using Robust.Shared.Analyzers;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Maths;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;

namespace Content.Benchmarks;

[Virtual]
[GcServer(true)]
[MemoryDiagnoser]
public class DestructibleBenchmark
{
/// <summary>
/// Number of destructible entities per prototype to spawn with a <see cref="DestructibleComponent"/>.
/// </summary>
[Params(1, 10, 100, 1000, 5000)]
public int EntityCount;

/// <summary>
/// Amount of blunt damage we do to each entity.
/// </summary>
[Params(10000)]
public FixedPoint2 DamageAmount;

[Params("Blunt")]
public ProtoId<DamageTypePrototype> DamageType;

private static readonly EntProtoId WindowProtoId = "Window";
private static readonly EntProtoId WallProtoId = "WallReinforced";
private static readonly EntProtoId HumanProtoId = "MobHuman";

private static readonly ProtoId<ContentTileDefinition> TileRef = "Plating";

private readonly EntProtoId[] _prototypes = [WindowProtoId, WallProtoId, HumanProtoId];

private readonly List<Entity<DamageableComponent>> _damageables = new();
private readonly List<Entity<DamageableComponent, DestructibleComponent>> _destructbiles = new();

private TestMapData _currentMapData = default!;

private DamageSpecifier _damage;

private TestPair _pair = default!;
private IEntityManager _entMan = default!;
private IPrototypeManager _protoMan = default!;
private IRobustRandom _random = default!;
private ITileDefinitionManager _tileDefMan = default!;
private DamageableSystem _damageable = default!;
private DestructibleSystem _destructible = default!;
private SharedMapSystem _map = default!;

[GlobalSetup]
public async Task SetupAsync()
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
var server = _pair.Server;

_entMan = server.ResolveDependency<IEntityManager>();
_protoMan = server.ResolveDependency<IPrototypeManager>();
_random = server.ResolveDependency<IRobustRandom>();
_tileDefMan = server.ResolveDependency<ITileDefinitionManager>();
_damageable = _entMan.System<DamageableSystem>();
_destructible = _entMan.System<DestructibleSystem>();
_map = _entMan.System<SharedMapSystem>();

if (!_protoMan.Resolve(DamageType, out var type))
return;

_damage = new DamageSpecifier(type, DamageAmount);

_random.SetSeed(69420); // Randomness needs to be deterministic for benchmarking.
}

[IterationSetup]
public void IterationSetup()
{
var plating = _tileDefMan[TileRef].TileId;
var server = _pair.Server;
_currentMapData = _pair.CreateTestMap().GetAwaiter().GetResult();

// We make a rectangular grid of destructible entities, and then damage them all simultaneously to stress test the system.
// Needed for managing the performance of destructive effects and damage application.
server.WaitPost(() =>
{
// Set up a thin line of tiles to place our objects on. They should be anchored for a "realistic" scenario...
for (var x = 0; x < EntityCount; x++)
{
for (var y = 0; y < _prototypes.Length; y++)
{
_map.SetTile(_currentMapData.Grid, _currentMapData.Grid, new Vector2i(x, y), new Tile(plating));
}
}

for (var x = 0; x < EntityCount; x++)
{
var y = 0;
foreach (var protoId in _prototypes)
{
var coords = new EntityCoordinates(_currentMapData.Grid, x + 0.5f, y + 0.5f);
_entMan.SpawnEntity(protoId, coords);
y++;
}
}

var query = _entMan.EntityQueryEnumerator<DamageableComponent, DestructibleComponent>();

_destructbiles.EnsureCapacity(EntityCount);
_damageables.EnsureCapacity(EntityCount);

while (query.MoveNext(out var uid, out var damageable, out var destructible))
{
_damageables.Add((uid, damageable));
_destructbiles.Add((uid, damageable, destructible));
}
})
.GetAwaiter()
.GetResult();
}

[Benchmark]
public async Task PerformDealDamage()
{
await _pair.Server.WaitPost(() =>
{
_damageable.ApplyDamageToAllEntities(_damageables, _damage);
});
}

[Benchmark]
public async Task PerformTestTriggers()
{
await _pair.Server.WaitPost(() =>
{
_destructible.TestAllTriggers(_destructbiles);
});
}

[Benchmark]
public async Task PerformTestBehaviors()
{
await _pair.Server.WaitPost(() =>
{
_destructible.TestAllBehaviors(_destructbiles);
});
}

[IterationCleanup]
public void IterationCleanupAsync()
{
// We need to nuke the entire map and respawn everything as some destructible effects
// spawn entities and whatnot.
_pair.Server.WaitPost(() =>
{
_map.QueueDeleteMap(_currentMapData.MapId);
})
.Wait();

// Deletion of entities is often queued (QueueDel) which must be processed by running ticks
// or else it will grow infinitely and leak memory.
_pair.Server.WaitRunTicks(2)
.GetAwaiter()
.GetResult();

_destructbiles.Clear();
_damageables.Clear();
}

[GlobalCleanup]
public async Task CleanupAsync()
{
await _pair.DisposeAsync();
PoolManager.Shutdown();
}
}
Loading
Loading