Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream sync #1712

Merged
merged 275 commits into from
Jan 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
275 commits
Select commit Hold shift + click to select a range
b1c3158
Disposal Unit Tweak (#23067)
Alekshhh Dec 30, 2023
04bf210
Automatic changelog update
PJBot Dec 30, 2023
3d95567
Fix chat size cvar serialization (#23005)
koteq Dec 30, 2023
4fe93cf
Artifact analyzer now pauses on power-loss (#22974)
quatre Dec 30, 2023
37a32b7
Automatic changelog update
PJBot Dec 30, 2023
f8c83b7
Fix next map not being displayed on the lobby UI after map vote (#23231)
koteq Dec 30, 2023
2e5479b
Fixes pinpoints so they use the correct sprite. (#23236)
Blazeror Dec 30, 2023
9ef3df4
Automatic changelog update
PJBot Dec 30, 2023
e8e914d
meta update (#23241)
Emisse Dec 30, 2023
de5973d
bagel update (#23242)
Emisse Dec 30, 2023
15dfaac
the grand lottery!!! update (#23243)
Emisse Dec 30, 2023
0c698fb
Automatic changelog update
PJBot Dec 30, 2023
a64fef9
More appropriate welder attack noise (#23233)
Darkenson Dec 30, 2023
b5f984b
Easy Ramen Noodles (#23189)
Blackern5000 Dec 30, 2023
3f740a9
Automatic changelog update
PJBot Dec 30, 2023
f7a9236
Fold cosmetic sunglasses into regular sunglasses (#23232)
EmoGarbage404 Dec 30, 2023
da055fc
make healing sounds audible (#23211)
QuietlyWhisper Dec 30, 2023
c6bbd6e
Moves head's fluff items out of lockers into dressers (#23183)
IamVelcroboy Dec 30, 2023
579e949
Automatic changelog update
PJBot Dec 30, 2023
1836bdf
Add icon to Change Voice Mask Action (#23239)
LordCarve Dec 30, 2023
d0ebe39
Automatic changelog update
PJBot Dec 30, 2023
83bd937
Make mime stamp silent (#23221)
lzk228 Dec 30, 2023
83d51db
Automatic changelog update
PJBot Dec 30, 2023
cfb129c
Buff heat and flame damage (#23238)
EmoGarbage404 Dec 30, 2023
188b2ff
Automatic changelog update
PJBot Dec 30, 2023
937df9f
Seed Bag Resprite (#23210)
Alekshhh Dec 30, 2023
3c03064
Automatic changelog update
PJBot Dec 30, 2023
9dffe80
Update cvars (#23249)
Chief-Engineer Dec 31, 2023
ec82a05
Update Patrons.yml (#23250)
DrSmugleaf Dec 31, 2023
f850047
Migrate Lathe Material Ejection Code to MaterialStorage (#23199)
FairlySadPanda Dec 31, 2023
8018293
Fix error when trying to delete a ExplosionVisualsTextureComponent.Li…
DrSmugleaf Dec 31, 2023
c63b16d
saltern fix (#23258)
deltanedas Dec 31, 2023
e3d4b69
Allow flashlights on belts (#23256)
themias Dec 31, 2023
786de55
Ammo Box Tweaks (#23180)
Alekshhh Dec 31, 2023
872ff61
Update Credits (#23255)
github-actions[bot] Dec 31, 2023
9169fec
Automatic changelog update
PJBot Dec 31, 2023
340d97b
pettable tesla (#23169)
Ilya246 Dec 31, 2023
cf95dd3
roundstart mop and stuff (#23203)
deltanedas Dec 31, 2023
a22e480
Remove the stray pixels on the equipped HOP glove sprite (#23268)
MACMAN2003 Dec 31, 2023
3737266
message notes no longer show seen notes in chat (#23271)
LankLTE Dec 31, 2023
d4e20aa
Make the heart soap not smell like condoms (#23272)
leonardo-dabepis Dec 31, 2023
83afcbe
Automatic changelog update
PJBot Dec 31, 2023
f538a2e
Add reagent sources to the guidebook (#22627)
EmoGarbage404 Dec 31, 2023
8bce047
Automatic changelog update
PJBot Dec 31, 2023
9e9af0a
RD suit recolor (#23131)
Skarletto Dec 31, 2023
3d80e39
Automatic changelog update
PJBot Dec 31, 2023
a425bc7
Fix chem guide data build fail (#23289)
EmoGarbage404 Dec 31, 2023
77b477f
Rename SpawnPointAssistant to SpawnPointPassenger (#23222)
lzk228 Dec 31, 2023
207ebad
fixes fax machine error from emag rewrite (#23291)
DangerRevolution Dec 31, 2023
d73e13b
Automatic changelog update
PJBot Dec 31, 2023
20edbc1
Core update (#23276)
UbaserB Dec 31, 2023
1283c35
Stunprod (#23133)
IlyaElDunaev Dec 31, 2023
617d25a
Automatic changelog update
PJBot Dec 31, 2023
4f94974
Fix fulton size inconsistency (#22956)
koteq Jan 1, 2024
aa02d6e
Fix tesla coil showing at power monitoring puter (#23306)
lzk228 Jan 1, 2024
bf7aa47
More artifact content (#22574)
TheShuEd Jan 1, 2024
24f07b2
Fix formatting to match .editorconfig (IDE0055 warnings) (#23301)
LordCarve Jan 1, 2024
09f6797
Automatic changelog update
PJBot Jan 1, 2024
a2a3bf4
grand lottery tree hotfix (#23309)
Emisse Jan 1, 2024
b9b8812
minor science tree changes (#23269)
Ilya246 Jan 1, 2024
8e473d2
Automatic changelog update
PJBot Jan 1, 2024
3ea7c5e
Ensure correct number of thieves are selected (#23270)
Rainfey Jan 1, 2024
ab982b1
Automatic changelog update
PJBot Jan 1, 2024
e76d839
add cvar for custom panic bunker reason (#23267)
LankLTE Jan 1, 2024
ad5f7a5
Give throwing a cooldown (#23311)
EmoGarbage404 Jan 1, 2024
77c1018
artifact effect fauna and flora spawn (#23295)
icekot8 Jan 1, 2024
10c09c7
Automatic changelog update
PJBot Jan 1, 2024
2b01899
Make the material ejection control completely generic (#23308)
EmoGarbage404 Jan 1, 2024
5e1fcfc
Major Tesla tweaks (#23235)
TheShuEd Jan 1, 2024
89a081d
Automatic changelog update
PJBot Jan 1, 2024
60b0267
Fixed airlock appearance bugs (#23300)
778b Jan 1, 2024
1479f74
Automatic changelog update
PJBot Jan 1, 2024
f9355c6
Remove ambient sound from lv/mv/pipes + up default ambience volume (#…
mirrorcult Jan 1, 2024
2ac4056
Automatic changelog update
PJBot Jan 1, 2024
9115994
fix cauterization (#23264)
themias Jan 1, 2024
e443a20
Automatic changelog update
PJBot Jan 1, 2024
984cd64
light ciggies with fire structures (#23196)
deltanedas Jan 1, 2024
05ee6eb
Electric anomaly rework (#23173)
TheShuEd Jan 1, 2024
d5574f6
Automatic changelog update
PJBot Jan 1, 2024
a6cde8b
Localize hand labeler ui header (#23320)
lzk228 Jan 1, 2024
96b4eb0
Restore cvars after event (#23321)
Chief-Engineer Jan 1, 2024
07a5eaf
Fix windoor secure graph (#23274)
lzk228 Jan 1, 2024
c8f1387
Lizards get more marking availability (#23219)
UbaserB Jan 1, 2024
7ac7258
Automatic changelog update
PJBot Jan 1, 2024
3a7fda1
Fix reptilians pulling after being zombiefied (#23066)
Lukasz825700516 Jan 1, 2024
fae2859
L gun reshape (#23104)
SonicHDC Jan 1, 2024
aebd29a
Automatic changelog update
PJBot Jan 1, 2024
3799ccb
Hair Redo (#23304)
Alekshhh Jan 2, 2024
1a92747
Automatic changelog update
PJBot Jan 2, 2024
0ffd4e9
Adds current panic bunker status to the server's /status API (#23330)
deathride58 Jan 2, 2024
77cc81d
Anti Anomaly zones (#23187)
TheShuEd Jan 2, 2024
d8e4cd1
Two more station beacons (#23334)
Errant-4 Jan 2, 2024
8d9a76c
Fix defibs resetting rot timer + slimes not having perishable (#23340)
EmoGarbage404 Jan 2, 2024
4841976
Automatic changelog update
PJBot Jan 2, 2024
835d13f
Happy new year! (#23343)
VasilisThePikachu Jan 2, 2024
cd32333
bagel update (#23346)
Emisse Jan 2, 2024
76bae5a
box update (#23347)
Emisse Jan 2, 2024
2988d60
Fix anti-anomaly zones (#23357)
EmoGarbage404 Jan 2, 2024
719b44f
Fix all objectives on end screen being bolded (#23345)
EmoGarbage404 Jan 2, 2024
383271c
Fix GravityGridTest (#23348)
ElectroJr Jan 2, 2024
9b36232
Update submodule to 199.0.0 (#23358)
metalgearsloth Jan 2, 2024
49dbbc5
fix emagged lathes (#23318)
Ilya246 Jan 2, 2024
826431c
fland update (#23360)
Emisse Jan 2, 2024
73b39ba
marathon update (#23361)
Emisse Jan 2, 2024
44ae6c5
omega update (#23362)
Emisse Jan 2, 2024
41465b0
packed update (#23363)
Emisse Jan 2, 2024
b490a46
Remove salvage mobs being able to be ghost roles. (#23355)
UbaserB Jan 2, 2024
773146a
Automatic changelog update
PJBot Jan 2, 2024
7c7f755
meta update (#23367)
Emisse Jan 2, 2024
58d563c
atlas dresser update (#23351)
deltanedas Jan 2, 2024
b6502b6
saltern dressers update (#23349)
deltanedas Jan 2, 2024
522e332
fix tests (#23369)
Emisse Jan 2, 2024
fbe72c8
ChemMaster buffer preserves list ordering (#23352)
Rainbeon Jan 2, 2024
c467f1b
Automatic changelog update
PJBot Jan 2, 2024
09c7a64
Add Research Director's Dresser (#23375)
IamVelcroboy Jan 2, 2024
799c22b
Tesla Ball no longer gets kicked around by explosions. Fixes 23331. (…
DrMelon Jan 2, 2024
a371e92
Automatic changelog update
PJBot Jan 2, 2024
207ca6f
Add admin logs for drawing with syringe. (#23333)
tday93 Jan 2, 2024
5e6633e
Automatic changelog update
PJBot Jan 2, 2024
439d6ff
Fixed mice behavior of eating everything (#23322)
778b Jan 2, 2024
8c47ea7
Automatic changelog update
PJBot Jan 2, 2024
fc4ad82
biofabricator (#23319)
Ilya246 Jan 2, 2024
897e1d3
Automatic changelog update
PJBot Jan 2, 2024
f062cbc
Merge remote-tracking branch 'upstream/master' into upstream-sync
Morb0 Jan 2, 2024
1bdc91e
refill welders from wall dispensers (#23376)
themias Jan 2, 2024
aa92dd0
Limits marking for certain species. (#23385)
Adrian16199 Jan 2, 2024
66ee414
Automatic changelog update
PJBot Jan 2, 2024
80d9483
Fix grind recipe entry
Morb0 Jan 2, 2024
cafdfce
Update locale
Morb0 Jan 2, 2024
5eb94bb
atlas rd drip (#23381)
deltanedas Jan 2, 2024
747cc44
saltern rd drip (#23379)
deltanedas Jan 2, 2024
299f9d2
bagel update (#23398)
Emisse Jan 2, 2024
d04bb2a
box update (#23399)
Emisse Jan 2, 2024
10ccdf9
fland update (#23400)
Emisse Jan 2, 2024
35dbb9f
marathon update (#23401)
Emisse Jan 2, 2024
199a7ea
meta update (#23402)
Emisse Jan 2, 2024
548058b
Added info to body bag description. (#23407)
Admiral-Obvious-001 Jan 3, 2024
089768a
Automatic changelog update
PJBot Jan 3, 2024
0469b0d
bagel update (#23410)
Emisse Jan 3, 2024
ac02209
Fix ConfigPresetTests.TestLoadAll not handling automatic panic bunker…
DrSmugleaf Jan 3, 2024
7f3d2b8
Wire up the slime people TypingIndicator to use the existing slime sp…
CaasGit Jan 3, 2024
d8eef7a
Automatic changelog update
PJBot Jan 3, 2024
d008488
Disposals resprite [take 2] (#23418)
EmoGarbage404 Jan 3, 2024
0f85e10
Allow plungers to be fired by bows and embedded into entities (#23406)
zzylex Jan 3, 2024
04fc06e
Automatic changelog update
PJBot Jan 3, 2024
1c11332
Flatpacks and the Flatpacker 1001 (#23338)
EmoGarbage404 Jan 3, 2024
58d518a
Fix small logic issue in item slot swapping (#23378)
EmoGarbage404 Jan 3, 2024
2548156
Syndicate agents are now red (#23420)
Dutch-VanDerLinde Jan 3, 2024
2166958
AutoCompState + ItemToggle fixes (#23422)
metalgearsloth Jan 3, 2024
e7d1302
Fix a few cyborg interactions (#23391)
themias Jan 3, 2024
a96a2e5
Update submodule to 200.0.0 (#23426)
metalgearsloth Jan 3, 2024
abf6b92
Lil profile editor rearrange (#23305)
lzk228 Jan 3, 2024
bc304a3
Fix another error on round restart when terminating spreaders (#23201)
DrSmugleaf Jan 3, 2024
9f47079
Fix remote solution injection (#23429)
metalgearsloth Jan 3, 2024
0e18d54
head revolutionaries are now blue (#23432)
Dutch-VanDerLinde Jan 3, 2024
ef1cba7
Shader cleanup - applies DRY to various shaders in the game (#23294)
deathride58 Jan 3, 2024
970fa54
make plushie rouney rotateable (#22902)
lzk228 Jan 3, 2024
1a53134
Glowy lights - light fixtures now actually glow (#23428)
deathride58 Jan 3, 2024
aa6645c
Blindness rework - damaged eyes are now a stylized simulation of lega…
deathride58 Jan 3, 2024
7ecd766
Enable panic bunker by default (#23252)
Chief-Engineer Jan 3, 2024
93f03ac
skull warning border (#23433)
Errant-4 Jan 3, 2024
fd12440
Merge remote-tracking branch 'upstream/master' into upstream-sync
Morb0 Jan 3, 2024
d7b3ab3
Update health4.png skull
Morb0 Jan 3, 2024
cce9e30
Fix locale
Morb0 Jan 3, 2024
803952f
Update locale
Morb0 Jan 3, 2024
06958cd
Fix locale
Morb0 Jan 3, 2024
62864aa
striker update (#23440)
Emisse Jan 3, 2024
0568c8f
Fix slime typing indicator
Morb0 Jan 3, 2024
10e9f6c
fix(artifact_analyzer.yml): decrease required power (#23447)
dakamakat Jan 3, 2024
868622a
Add hand labeler to autolathe (#23457)
asperger-sind Jan 3, 2024
0235b19
refueling lit welder explosion fix (#23469)
themias Jan 3, 2024
cad4657
Monkey Visual Change (#23464)
Alekshhh Jan 3, 2024
b0a5e0f
Circuit floor tile print (#23467)
lapatison Jan 3, 2024
7dc1de7
Gauze Recolor (#23409)
Blackern5000 Jan 3, 2024
0505b33
buff RPED capacity (#23455)
21Melkuu Jan 3, 2024
9ae1015
Dims the light source of service lights (#23437)
deathride58 Jan 3, 2024
635af66
let terminator endoskeleton pry doors (#23468)
Ilya246 Jan 3, 2024
59e758a
Vendors now will say "Thanks for using!" (#23023)
lzk228 Jan 3, 2024
e790e59
Ports the /tg/ airlock deny sounds (#22954)
Flareguy Jan 3, 2024
0e306e7
Client commands: clean up and localize (#22897)
PrPleGoo Jan 3, 2024
292026c
Gauze recipe in medfab (#23417)
Blackern5000 Jan 3, 2024
9bff44d
Replace EntityUid parsing with NetEntity (#23474)
ElectroJr Jan 4, 2024
6901e93
Blindness hotfix (content side) (#23465)
deathride58 Jan 4, 2024
9a95483
Update engine to v201.0.0 (#23485)
ElectroJr Jan 4, 2024
d9eeca3
bagel update (#23480)
Emisse Jan 4, 2024
6e65db0
box update (#23481)
Emisse Jan 4, 2024
5f113ee
fland update (#23482)
Emisse Jan 4, 2024
aeb16bd
marathon update (#23483)
Emisse Jan 4, 2024
93f4ac7
meta update (#23484)
Emisse Jan 4, 2024
73592cb
gemini update (#23486)
Emisse Jan 4, 2024
9d8ac78
Beacon Update Aspid (#23448)
Errant-4 Jan 4, 2024
4662d46
Chill bounties + fixes (#23411)
EmoGarbage404 Jan 4, 2024
b2093b8
barratry update (#23487)
Emisse Jan 4, 2024
f2da997
Fixes license violation with Smoke-grenade.ogg by replacing it with a…
deathride58 Jan 4, 2024
53f18e8
microwave ejection tweak (#23460)
themias Jan 4, 2024
2130e39
Tarantula voice (#23459)
Dutch-VanDerLinde Jan 4, 2024
4d0d2e4
Kobold variety - allows kobolds to have random colors and horns (+ al…
deathride58 Jan 4, 2024
33b5024
Tarantula improvement (#23449)
IlyaElDunaev Jan 4, 2024
ee410fa
Green-Red Jester Outfit Change (#23454)
Alekshhh Jan 4, 2024
7c22a1c
Increase zombie prying time for bolted doors (#23383)
themias Jan 4, 2024
354eed4
Add PVS benchmark (#23166)
ElectroJr Jan 4, 2024
42ec9b2
Changes required for engine PR (#23488)
ElectroJr Jan 4, 2024
9c522c8
UseDelay + ItemCooldown merge (#22502)
AJCM-git Jan 4, 2024
002d749
Minor biomes change (#23494)
metalgearsloth Jan 4, 2024
128b5da
Makes vials work in dispensers (#23473)
Blazeror Jan 4, 2024
1defdeb
Fix MIDI Loading Failing Whilst a MIDI is playing (#23339)
FairlySadPanda Jan 4, 2024
d15ff37
Cleans up/condenses a bunch of RandomSpriteComponent yaml entries (#2…
deathride58 Jan 4, 2024
377be6f
Changes required for frozen event bus PR (#23493)
ElectroJr Jan 4, 2024
8659a21
Use IComponentState for compstates (#21905)
metalgearsloth Jan 4, 2024
98f5f47
Update submodule to 202.0.0 (#23498)
metalgearsloth Jan 4, 2024
bf79acd
Salvage magnet revamp (#23119)
metalgearsloth Jan 4, 2024
0fd68b2
Add clown emergency oxygen tank (#23495)
themias Jan 4, 2024
9f2535a
Makes`GameTicker` use `FlushEntities()` (#23299)
ElectroJr Jan 4, 2024
3ee6b8d
Fix biome marker dupes (#23500)
metalgearsloth Jan 4, 2024
a3516e6
Small adjustment for elookup api (#22447)
metalgearsloth Jan 4, 2024
f533a1a
Add RoomFill markers (#22293)
metalgearsloth Jan 4, 2024
082bde4
The Flatpacker 1001 can now make flatpacks for computers. (#23471)
SpeltIncorrectyl Jan 4, 2024
8a8d42e
Update submodule to 202.1.0 (#23501)
metalgearsloth Jan 4, 2024
01082c6
Add cvar to show new players in ahelp (#23265)
LankLTE Jan 4, 2024
94a4e4c
Aghost Now Can Drop Things Wherever They Want (#23502)
Geekyhobo Jan 4, 2024
c94ef17
Give slime mob speech sounds (#23456)
Dutch-VanDerLinde Jan 4, 2024
e77b4bd
kobold monkey have KB name identifier (#23505)
Dutch-VanDerLinde Jan 4, 2024
29973ba
Toy Tesla (#23370)
TheShuEd Jan 4, 2024
a4c4462
makes the shotgun cartridge dispensers like the ammo boxes (#23388)
Boaz1111 Jan 4, 2024
df07e19
Spinal spike marking for Reptilians (#23220)
KittenColony Jan 4, 2024
f939b57
Tweak Spell of All-Consuming Cleanliness (#23512)
Pangogie Jan 4, 2024
2f236ac
much cheaper plasma (#23283)
Ilya246 Jan 4, 2024
8ecc32b
Buff holo and mild structural adjustment (#23515)
Emisse Jan 4, 2024
ce8252c
make some implants cheaper (#23513)
Emisse Jan 4, 2024
dfec6a4
make flashes use audio range (#23521)
Emisse Jan 4, 2024
1c5639b
Human plushie (#23518)
TheShuEd Jan 4, 2024
29ce381
Command beacon QOL recolor (#23517)
Errant-4 Jan 4, 2024
0603115
Thief role description fix (#23509)
lapatison Jan 4, 2024
f84cd9c
Pathfinding stuff (#23516)
metalgearsloth Jan 4, 2024
d1f2b40
Adds more Ichor Per dragon meat. (#23503)
PoorMansDreams Jan 4, 2024
abbb724
Observation Kit (#23384)
ERORR404V1 Jan 4, 2024
ca52917
scram implant (#23122)
Ilya246 Jan 4, 2024
b06d9cb
Adds Hellspawn (Nar'Sie demon mob) (#20291)
brainfood1183 Jan 4, 2024
84a2356
Adding PAI Slot to PDA (#21086)
VMSolidus Jan 4, 2024
143640b
buff emergency eva speed (#23522)
Emisse Jan 4, 2024
dfc8ca4
Plague Doctor Set Change (#23382)
Alekshhh Jan 4, 2024
a9b797a
Fix robusted dionas not being recoverable (#21636)
luringens Jan 4, 2024
eed663e
Add health bar overlays for eye equipment (#21980)
PrPleGoo Jan 4, 2024
3502f5d
Fixes UseDelay accumulating time sometimes (#23529)
AJCM-git Jan 4, 2024
edd85a5
fix use delay cooldown visual bug (#23532)
themias Jan 4, 2024
8a0a435
Merge remote-tracking branch 'upstream/master' into upstream-sync
Morb0 Jan 4, 2024
2927002
Update locale
Morb0 Jan 4, 2024
5493841
Fix locale
Morb0 Jan 4, 2024
c60bdd3
Replace ItemCooldown with UseDelay
Morb0 Jan 4, 2024
e5049ec
Fix corvax_emergency.yml
Morb0 Jan 4, 2024
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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion Content.Benchmarks/MapLoadBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public async Task Cleanup()
PoolManager.Shutdown();
}

public static IEnumerable<string> MapsSource { get; set; }
public static readonly string[] MapsSource = { "Empty", "Box", "Aspid", "Bagel", "Dev", "CentComm", "Atlas", "Core", "TestTeg", "Saltern", "Packed", "Omega", "Cluster", "Gemini", "Reach", "Origin", "Meta", "Marathon", "Europa", "MeteorArena", "Fland", "Barratry" };

[ParamsSource(nameof(MapsSource))]
public string Map;
Expand Down
7 changes: 0 additions & 7 deletions Content.Benchmarks/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,6 @@ public static void Main(string[] args)

public static async Task MainAsync(string[] args)
{
PoolManager.Startup(typeof(Program).Assembly);
var pair = await PoolManager.GetServerClient();
var gameMaps = pair.Server.ResolveDependency<IPrototypeManager>().EnumeratePrototypes<GameMapPrototype>().ToList();
MapLoadBenchmark.MapsSource = gameMaps.Select(x => x.ID);
await pair.CleanReturnAsync();
PoolManager.Shutdown();

#if DEBUG
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\nWARNING: YOU ARE RUNNING A DEBUG BUILD, USE A RELEASE BUILD FOR AN ACCURATE BENCHMARK");
Expand Down
187 changes: 187 additions & 0 deletions Content.Benchmarks/PvsBenchmark.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
using Content.Server.Warps;
using Robust.Server.GameObjects;
using Robust.Shared;
using Robust.Shared.Analyzers;
using Robust.Shared.Enums;
using Robust.Shared.GameObjects;
using Robust.Shared.GameStates;
using Robust.Shared.Map;
using Robust.Shared.Network;
using Robust.Shared.Player;
using Robust.Shared.Random;

namespace Content.Benchmarks;

// This benchmark probably benefits from some accidental cache locality. I,e. the order in which entities in a pvs
// chunk are sent to players matches the order in which the entities were spawned.
//
// in a real mid-late game round, this is probably no longer the case.
// One way to somewhat offset this is to update the NetEntity assignment to assign random (but still unique) NetEntity uids to entities.
// This makes the benchmark run noticeably slower.

[Virtual]
public class PvsBenchmark
{
public const string Map = "Maps/box.yml";

[Params(1, 8, 80)]
public int PlayerCount { get; set; }

private TestPair _pair = default!;
private IEntityManager _entMan = default!;
private MapId _mapId = new(10);
private ICommonSession[] _players = default!;
private EntityCoordinates[] _spawns = default!;
public int _cycleOffset = 0;
private SharedTransformSystem _sys = default!;
private EntityCoordinates[] _locations = default!;

[GlobalSetup]
public void Setup()
{
#if !DEBUG
ProgramShared.PathOffset = "../../../../";
#endif
PoolManager.Startup(null);

_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_entMan = _pair.Server.ResolveDependency<IEntityManager>();
_pair.Server.CfgMan.SetCVar(CVars.NetPVS, true);
_pair.Server.CfgMan.SetCVar(CVars.ThreadParallelCount, 0);
_pair.Server.CfgMan.SetCVar(CVars.NetPvsAsync, false);
_sys = _entMan.System<SharedTransformSystem>();

// Spawn the map
_pair.Server.ResolveDependency<IRobustRandom>().SetSeed(42);
_pair.Server.WaitPost(() =>
{
var success = _entMan.System<MapLoaderSystem>().TryLoad(_mapId, Map, out _);
if (!success)
throw new Exception("Map load failed");
_pair.Server.MapMan.DoMapInitialize(_mapId);
}).Wait();

// Get list of ghost warp positions
_spawns = _entMan.AllComponentsList<WarpPointComponent>()
.OrderBy(x => x.Component.Location)
.Select(x => _entMan.GetComponent<TransformComponent>(x.Uid).Coordinates)
.ToArray();

Array.Resize(ref _players, PlayerCount);

// Spawn "Players".
_pair.Server.WaitPost(() =>
{
for (var i = 0; i < PlayerCount; i++)
{
var pos = _spawns[i % _spawns.Length];
var uid =_entMan.SpawnEntity("MobHuman", pos);
_pair.Server.ConsoleHost.ExecuteCommand($"setoutfit {_entMan.GetNetEntity(uid)} CaptainGear");
_players[i] = new DummySession{AttachedEntity = uid};
}
}).Wait();

// Repeatedly move players around so that they "explore" the map and see lots of entities.
// This will populate their PVS data with out-of-view entities.
var rng = new Random(42);
ShufflePlayers(rng, 100);

_pair.Server.PvsTick(_players);
_pair.Server.PvsTick(_players);

var ents = _players.Select(x => x.AttachedEntity!.Value).ToArray();
_locations = ents.Select(x => _entMan.GetComponent<TransformComponent>(x).Coordinates).ToArray();
}

private void ShufflePlayers(Random rng, int count)
{
while (count > 0)
{
ShufflePlayers(rng);
count--;
}
}

private void ShufflePlayers(Random rng)
{
_pair.Server.PvsTick(_players);

var ents = _players.Select(x => x.AttachedEntity!.Value).ToArray();
var locations = ents.Select(x => _entMan.GetComponent<TransformComponent>(x).Coordinates).ToArray();

// Shuffle locations
var n = locations.Length;
while (n > 1)
{
n -= 1;
var k = rng.Next(n + 1);
(locations[k], locations[n]) = (locations[n], locations[k]);
}

_pair.Server.WaitPost(() =>
{
for (var i = 0; i < PlayerCount; i++)
{
_sys.SetCoordinates(ents[i], locations[i]);
}
}).Wait();

_pair.Server.PvsTick(_players);
}

/// <summary>
/// Basic benchmark for PVS in a static situation where nothing moves or gets dirtied..
/// This effectively provides a lower bound on "real" pvs tick time, as it is missing:
/// - PVS chunks getting dirtied and needing to be rebuilt
/// - Fetching component states for dirty components
/// - Compressing & sending network messages
/// - Sending PVS leave messages
/// </summary>
[Benchmark]
public void StaticTick()
{
_pair.Server.PvsTick(_players);
}

/// <summary>
/// Basic benchmark for PVS in a situation where players are teleporting all over the place. This isn't very
/// realistic, but unlike <see cref="StaticTick"/> this will actually also measure the speed of processing dirty
/// chunks and sending PVS leave messages.
/// </summary>
[Benchmark]
public void CycleTick()
{
_cycleOffset = (_cycleOffset + 1) % _players.Length;
_pair.Server.WaitPost(() =>
{
for (var i = 0; i < PlayerCount; i++)
{
_sys.SetCoordinates(_players[i].AttachedEntity!.Value, _locations[(i + _cycleOffset) % _players.Length]);
}
}).Wait();
_pair.Server.PvsTick(_players);
}

private sealed class DummySession : ICommonSession
{
public SessionStatus Status => SessionStatus.InGame;
public EntityUid? AttachedEntity {get; set; }
public NetUserId UserId => default;
public string Name => string.Empty;
public short Ping => default;
public INetChannel Channel { get; set; } = default!;
public LoginType AuthType => default;
public HashSet<EntityUid> ViewSubscriptions { get; } = new();
public DateTime ConnectedTime { get; set; }
public SessionState State => default!;
public SessionData Data => default!;
public bool ClientSide { get; set; }
}
}
10 changes: 10 additions & 0 deletions Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
using Content.Client.Administration.UI.CustomControls;
using Content.Client.UserInterface.Systems.Bwoink;
using Content.Shared.Administration;
using Content.Shared.CCVar;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Network;
using Robust.Shared.Utility;
using Robust.Shared.Timing;
using Robust.Shared.Configuration;

namespace Content.Client.Administration.UI.Bwoink
{
Expand All @@ -23,6 +26,7 @@ public sealed partial class BwoinkControl : Control
[Dependency] private readonly IClientAdminManager _adminManager = default!;
[Dependency] private readonly IClientConsoleHost _console = default!;
[Dependency] private readonly IUserInterfaceManager _ui = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
public AdminAHelpUIHandler AHelpHelper = default!;

private PlayerInfo? _currentPlayer;
Expand Down Expand Up @@ -71,6 +75,9 @@ public BwoinkControl()
if (info.Antag && info.ActiveThisRound)
sb.Append(new Rune(0x1F5E1)); // 🗡

if (info.OverallPlaytime <= TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.NewPlayerThreshold)))
sb.Append(new Rune(0x23F2)); // ⏲

sb.AppendFormat("\"{0}\"", text);

return sb.ToString();
Expand Down Expand Up @@ -219,6 +226,9 @@ private string FormatTabTitle(ItemList.Item li, PlayerInfo? pl = default)
if (pl.Antag)
sb.Append(new Rune(0x1F5E1)); // 🗡

if (pl.OverallPlaytime <= TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.NewPlayerThreshold)))
sb.Append(new Rune(0x23F2)); // ⏲

sb.AppendFormat("\"{0}\"", pl.CharacterName);

if (pl.IdentityName != pl.CharacterName && pl.IdentityName != string.Empty)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Content.Client.Cargo.UI;
using Content.Shared.Cargo.Components;
using JetBrains.Annotations;
using Robust.Client.GameObjects;

namespace Content.Client.Cargo.BUI;

Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Cargo/UI/BountyEntry.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,13 @@
HorizontalExpand="True">
<BoxContainer Orientation="Horizontal">
<BoxContainer Orientation="Vertical" HorizontalExpand="True">
<RichTextLabel Name="TimeLabel"/>
<RichTextLabel Name="RewardLabel"/>
<RichTextLabel Name="ManifestLabel"/>
</BoxContainer>
<Control MinWidth="10"/>
<BoxContainer Orientation="Vertical" MinWidth="120">
<Button Name="PrintButton" Text="{Loc 'bounty-console-label-button-text'}" HorizontalExpand="False" HorizontalAlignment="Right"/>
<Label Name="IdLabel" HorizontalAlignment="Right" Margin="0 0 5 0"/>
<RichTextLabel Name="IdLabel" HorizontalAlignment="Right" Margin="0 0 5 0"/>
</BoxContainer>
</BoxContainer>
<customControls:HSeparator Margin="5 10 5 10"/>
Expand Down
12 changes: 1 addition & 11 deletions Content.Client/Cargo/UI/BountyEntry.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ public BountyEntry(CargoBountyData bounty)
if (!_prototype.TryIndex<CargoBountyPrototype>(bounty.Bounty, out var bountyPrototype))
return;

EndTime = bounty.EndTime;

var items = new List<string>();
foreach (var entry in bountyPrototype.Entries)
{
Expand All @@ -39,16 +37,8 @@ public BountyEntry(CargoBountyData bounty)
ManifestLabel.SetMarkup(Loc.GetString("bounty-console-manifest-label", ("item", string.Join(", ", items))));
RewardLabel.SetMarkup(Loc.GetString("bounty-console-reward-label", ("reward", bountyPrototype.Reward)));
DescriptionLabel.SetMarkup(Loc.GetString("bounty-console-description-label", ("description", Loc.GetString(bountyPrototype.Description))));
IdLabel.Text = Loc.GetString("bounty-console-id-label", ("id", bounty.Id));
IdLabel.SetMarkup(Loc.GetString("bounty-console-id-label", ("id", bounty.Id)));

PrintButton.OnPressed += _ => OnButtonPressed?.Invoke();
}

protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);

var remaining = TimeSpan.FromSeconds(Math.Max((EndTime - _timing.CurTime).TotalSeconds, 0));
TimeLabel.SetMarkup(Loc.GetString("bounty-console-time-label", ("time", remaining.ToString("mm':'ss"))));
}
}
2 changes: 1 addition & 1 deletion Content.Client/Cargo/UI/CargoBountyMenu.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Content.Client.Cargo.UI;
[GenerateTypedNameReferences]
public sealed partial class CargoBountyMenu : FancyWindow
{
public Action<int>? OnLabelButtonPressed;
public Action<string>? OnLabelButtonPressed;

public CargoBountyMenu()
{
Expand Down
Loading
Loading