Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
229 commits
Select commit Hold shift + click to select a range
1531462
no more velcros
Neenner Feb 20, 2026
d94d48c
for all the funny lil fellas
Neenner Feb 24, 2026
3ffe0ef
for all my funny lil fellas
Neenner Feb 24, 2026
fc71c24
fix prototypes
Rinary1 Feb 24, 2026
4ecc492
fix jumping
Rinary1 Feb 24, 2026
985023f
fix shoelace tieable
Rinary1 Feb 25, 2026
a684358
refactor code
Rinary1 Feb 25, 2026
54b1089
change prototypes && locale
Rinary1 Feb 25, 2026
db58a20
remove facing filter
Rinary1 Feb 25, 2026
43993c2
fix
Rinary1 Feb 25, 2026
06fcb28
verb fix
Rinary1 Feb 25, 2026
20a21e0
predicted random
Rinary1 Feb 26, 2026
76901fe
Merge branch 'starlight-dev' into shoelaces-added
Rinary1 Mar 1, 2026
318bb96
Merge branch 'starlight-dev' of github.com:ss14Starlight/space-statio…
Rinary1 Mar 5, 2026
7463ae5
first steps
Rinary1 Mar 10, 2026
22dee1d
remove all unused audio files
Rinary1 Mar 11, 2026
55f7fe1
part 3
Rinary1 Mar 11, 2026
ebb9abb
Update meta.json
Rinary1 Mar 14, 2026
fcdc526
Plumbing Patch 4
FeralCreature Mar 14, 2026
fb3bcce
Naval warfare pt4 + wall buffs
ScarletLightweaverSS14 Mar 15, 2026
4ce5152
compresses and cleans files
ScarletLightweaverSS14 Mar 15, 2026
cba7402
all my homies hate yaml linter fail
ScarletLightweaverSS14 Mar 15, 2026
9c47474
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
19842d8
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
a010b5a
Update Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
775bd32
Update Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
e17e0f9
Update Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
286421c
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
f9aa9f8
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 15, 2026
ddb0426
Fix fallback playtime tracking
redmushie Mar 15, 2026
8db1aab
better dispensing
FeralCreature Mar 15, 2026
95af758
oops
mikeysaurus Mar 15, 2026
9c52531
other request
mikeysaurus Mar 15, 2026
f21d5ea
Add non-job playtimes to the PlaytimeStatsWindow
redmushie Mar 15, 2026
54a5ad7
Unbreak existing logic
redmushie Mar 16, 2026
287b378
Hotfix for #3736 (#3744)
Rinary1 Mar 16, 2026
d1b0297
Update changelog for PR #3744 [skip ci]
github-actions[bot] Mar 16, 2026
d212956
I swear these - and _ are gonna be the death of me
R3v3l4t1on Mar 16, 2026
c85e43b
Merge branch 'starlight-dev' into SL-marine-sprites
R3v3l4t1on Mar 16, 2026
b6cc437
Unbreak existing logic properly this time
redmushie Mar 16, 2026
e72b2da
Add missing Brighteye playtime tracker
redmushie Mar 16, 2026
2e566f7
Merge branch 'starlight-dev' into fix/pai-playtime
redmushie Mar 16, 2026
5fdc0fa
Add separate antag color
redmushie Mar 16, 2026
8928226
init
CringeCursed Mar 16, 2026
9963c99
Reduce surface area
redmushie Mar 16, 2026
0bd3dc8
Clean up
redmushie Mar 16, 2026
8cde241
init
CringeCursed Mar 16, 2026
65c7daf
starlight features
CringeCursed Mar 16, 2026
2a7d7ee
I swear these - and _ are gonna be the death of me (#3751)
Rinary1 Mar 16, 2026
c2c7a89
Update changelog for PR #3751 [skip ci]
github-actions[bot] Mar 16, 2026
1a9ce06
TTS fix (#3752)
Rinary1 Mar 16, 2026
7ba651e
Update changelog for PR #3752 [skip ci]
github-actions[bot] Mar 16, 2026
146d8bd
Fix fallback playtime tracking (#3742)
Rinary1 Mar 16, 2026
469e48b
Add non-job playtimes to the PlaytimeStatsWindow (#3750)
Rinary1 Mar 16, 2026
dda1cd9
Update changelog for PR #3742 [skip ci]
github-actions[bot] Mar 16, 2026
7df0ba1
Update changelog for PR #3750 [skip ci]
github-actions[bot] Mar 16, 2026
9f2b382
navmap perfomance improve (#3753)
Rinary1 Mar 16, 2026
e5c4471
Mappable Atmos States
CrazyPhantom779 Mar 16, 2026
d89e570
Mappable Air Alarm States
CrazyPhantom779 Mar 16, 2026
09d7eea
CosCult Contraband fix
CrazyPhantom779 Mar 16, 2026
0fcc201
Revenant visibility fix
CrazyPhantom779 Mar 16, 2026
47fe7f0
First test
BigfootBravo Mar 17, 2026
8072f1a
second try
BigfootBravo Mar 17, 2026
3581757
Making it a little cleaner
BigfootBravo Mar 17, 2026
1ba4a6c
Starlightify
CrazyPhantom779 Mar 17, 2026
e5a1298
Oops
CrazyPhantom779 Mar 17, 2026
4997750
CosCult Bug Fixes (#3759)
walksanatora Mar 17, 2026
5eb2fff
Update changelog for PR #3759 [skip ci]
github-actions[bot] Mar 17, 2026
7941b60
Longer term fix
BigfootBravo Mar 17, 2026
fb3f6ff
Final Cleanup?
BigfootBravo Mar 17, 2026
c745a56
Typo fix
BigfootBravo Mar 17, 2026
b351472
Chittin language no longer triggers damaged throat (#3758)
walksanatora Mar 17, 2026
c0db741
Update changelog for PR #3758 [skip ci]
github-actions[bot] Mar 17, 2026
4cbf687
Rework light dimming to be generic, make NightShiftRule and alert lev…
redmushie Mar 17, 2026
e6d1f1f
Initial cleanup
redmushie Mar 17, 2026
27f36d8
Clean up and add comments to SharedPoweredLightSystem
redmushie Mar 17, 2026
380210a
Fix namespaces in remainder of Shared/_Starlight/GameTicking folder
redmushie Mar 17, 2026
56f2b8e
More cleanup
redmushie Mar 17, 2026
a78dbbb
Sprinkle some more comments in NightShiftRule
redmushie Mar 17, 2026
3dde3be
Fix base GetDimmedLightLevelEvent values and remove a comment
redmushie Mar 17, 2026
fe6bc2f
[ HOTFIX ] Revenant visibility fix (#3755)
Rinary1 Mar 17, 2026
3303f41
Do play the ping sound when NightShift ends
redmushie Mar 17, 2026
5366266
Update changelog for PR #3755 [skip ci]
github-actions[bot] Mar 17, 2026
afac937
One more newline.
redmushie Mar 17, 2026
5d30f6b
Fix YAML error
redmushie Mar 17, 2026
86d9d22
wawa
ScarletLightweaverSS14 Mar 17, 2026
f99b892
Merge branch 'naval-war-part-4' of https://github.com/ScarletLightwea…
ScarletLightweaverSS14 Mar 17, 2026
ed07f83
Host tools (#3764)
walksanatora Mar 17, 2026
a2b5e85
Process feedback, re-enable night shift dimming when alert level lowers
redmushie Mar 17, 2026
4fae63f
Cleanup, fix comments
redmushie Mar 17, 2026
a319898
- add: (Serpentcrest) BSO Hardsuit Locker to BSO's Room
CawsForConcern Mar 17, 2026
908d63f
removes CC hat and cloak
CawsForConcern Mar 17, 2026
bdd9262
Add station ID check on alert level change
redmushie Mar 17, 2026
41d989a
(Serpentcrest) Adds BSO Hardsuit Locker and removes Centcomm Pen (#3767)
Rinary1 Mar 17, 2026
ea40def
Update changelog for PR #3767 [skip ci]
github-actions[bot] Mar 17, 2026
0969fa0
Mappable Atmos States (#3754)
Rinary1 Mar 17, 2026
0f8a859
Update changelog for PR #3754 [skip ci]
github-actions[bot] Mar 17, 2026
cfe34cc
Epsilon means lights off
redmushie Mar 17, 2026
edf4344
Network AirAlarms
CrazyPhantom779 Mar 17, 2026
a64e205
The DAMN using
CrazyPhantom779 Mar 17, 2026
2204254
The CORRECT using
CrazyPhantom779 Mar 17, 2026
86674e8
Network AirAlarms (#3769)
walksanatora Mar 17, 2026
9f0d649
Revert AirAlarm saving states
CrazyPhantom779 Mar 18, 2026
ac657e4
Revert AirAlarm States + Networking (#3772)
walksanatora Mar 18, 2026
68d0e6f
cosmic cult in the metashield
walksanatora Mar 18, 2026
0e50ac7
Epistemics is dead. long live science.
walksanatora Mar 18, 2026
e8c86f8
prevent the ghosting from shoving you in a cryopot
walksanatora Mar 18, 2026
24a3f43
fix colossi guidebook location.
walksanatora Mar 18, 2026
c00648c
the RD (Mysta) is not a chaplain.
walksanatora Mar 18, 2026
8307b46
Add generic light dimming system, make high alerts dim to 20% brightn…
Rinary1 Mar 18, 2026
cbe4863
Update changelog for PR #3763 [skip ci]
github-actions[bot] Mar 18, 2026
260243a
Fix GridPowerTests map reference with double .yml at the end
redmushie Mar 18, 2026
a92a040
Fix GridPowerTests map reference with double .yml at the end (#3775)
Rinary1 Mar 18, 2026
4eb9484
Fix two audio files not counting as ignored for StereoTest, add missi…
redmushie Mar 18, 2026
34bc777
Fix CycloriteBloodBreakdown reaction test failure
redmushie Mar 18, 2026
bdc6cc2
Remove the blacklight box loadout option
redmushie Mar 18, 2026
05ced70
- add: (Oasis) Space koi for Zookeepers.
CawsForConcern Mar 18, 2026
319b301
Fix CycloriteBloodBreakdown reaction test failure (#3777)
Rinary1 Mar 18, 2026
5f544f3
(Oasis) Updates by Cvlancer 4 (#3779)
Rinary1 Mar 18, 2026
f596688
Update changelog for PR #3779 [skip ci]
github-actions[bot] Mar 18, 2026
bc07743
Bug Fix + Add new consoles
wayiscool Mar 18, 2026
d90640b
Fix crystal shards not spawning from their recipe
redmushie Mar 18, 2026
90603c0
Fix test failure about two audio files not being mono (#3776)
Rinary1 Mar 18, 2026
44e5533
Fix crystal shards not spawning from their recipe (#3783)
Rinary1 Mar 18, 2026
0387f65
Update changelog for PR #3783 [skip ci]
github-actions[bot] Mar 18, 2026
c0d5d2e
cosmic cult in the metashield (#3774)
walksanatora Mar 18, 2026
623f979
map updates
Conflee Mar 18, 2026
41651cc
Merge branch 'starlight-dev' into clear-build
Rinary1 Mar 18, 2026
b09c05c
Add Departmental Comms Consoles, and fix duplicated walls (Starboard)…
Rinary1 Mar 18, 2026
2fc8803
Update changelog for PR #3774 [skip ci]
github-actions[bot] Mar 18, 2026
119c1e2
Update changelog for PR #3782 [skip ci]
github-actions[bot] Mar 18, 2026
1c688c9
Lobster Too
wayiscool Mar 18, 2026
9c43f1f
Lagan
wayiscool Mar 18, 2026
d27255f
Orwell
wayiscool Mar 18, 2026
2548e25
Let's clean up your build (#3688)
Rinary1 Mar 18, 2026
43d5224
Update changelog for PR #3688 [skip ci]
github-actions[bot] Mar 18, 2026
6558a1f
sep and ming
wayiscool Mar 18, 2026
5e58d60
Remove the blacklight box loadout option (#3778)
Rinary1 Mar 18, 2026
e768a12
Adjusting round-ending antag minimum player counts on beta
Tess-the-Evil Mar 18, 2026
a4f8c92
Update changelog for PR #3778 [skip ci]
github-actions[bot] Mar 18, 2026
b3e6b3b
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 18, 2026
8afa1ef
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 18, 2026
0136a39
Update Resources/Prototypes/_Starlight/Entities/Objects/Weapons/Guns/…
ScarletLightweaverSS14 Mar 18, 2026
6cbac7c
added light signs
Conflee Mar 18, 2026
6174e5e
Added shoelaces (#3445)
Rinary1 Mar 18, 2026
0b3adf2
Update changelog for PR #3445 [skip ci]
github-actions[bot] Mar 18, 2026
282603d
Update Resources/Prototypes/GameRules/events.yml
Tess-the-Evil Mar 18, 2026
fe60d27
Port of construction bag and other small changes
RorororoIDK Mar 18, 2026
5873bfc
lowk dumb as hell
RorororoIDK Mar 18, 2026
2457c56
Merge branch 'starlight-dev' into SL-Stuff
RorororoIDK Mar 18, 2026
e90b9b9
Bagel:
Mar 18, 2026
889f3f9
Added Departmental Announcement Consoles + A couple bugfixes.
Makeshiftt Mar 18, 2026
2fd4d3f
Merge branch 'ss14Starlight:starlight-dev' into PlasmaPackedElkDepart…
Makeshiftt Mar 18, 2026
8555649
Removed pressure regulator
Mar 19, 2026
90793aa
Propagate Language data from the EntitySpokeEvent down to the Surveil…
CaptainFothel Mar 19, 2026
35b8b9c
Merge branch 'ss14Starlight:starlight-dev' into Camera-Language-Fix
CaptainFothel Mar 19, 2026
c7b0e5c
Add Starlight Comments
CaptainFothel Mar 19, 2026
2ab7f52
Missed one
CaptainFothel Mar 19, 2026
feeb5e8
hair flower v2
wonderfulnewworld Mar 19, 2026
cab6008
yaml on trieste stuff
wonderfulnewworld Mar 19, 2026
65a2bae
ai
TytosB Mar 19, 2026
239da81
(Plasma + Packed + Elkridge) Departmental Announcement Consoles (#3789)
Rinary1 Mar 19, 2026
b2b3065
Update changelog for PR #3789 [skip ci]
github-actions[bot] Mar 19, 2026
cc0e70d
Color Changing Hairflowers - Porting Moff Station #1117 and #1145 (#3…
Rinary1 Mar 19, 2026
36da13a
comms pc too fuckin sure
TytosB Mar 19, 2026
658d281
Update changelog for PR #3797 [skip ci]
github-actions[bot] Mar 19, 2026
5436386
Port of construction bag and other small changes (#3788)
Rinary1 Mar 19, 2026
38416a3
Update changelog for PR #3788 [skip ci]
github-actions[bot] Mar 19, 2026
afff52d
Add Departmental Comms Consoles (Lobster, Sepultum, Ming, Lagan & Orw…
Rinary1 Mar 19, 2026
f92ac7e
Update changelog for PR #3785 [skip ci]
github-actions[bot] Mar 19, 2026
be0b07c
Map Updates - Comms Consoles and Performers (#3784)
Rinary1 Mar 19, 2026
c136d6f
Update changelog for PR #3784 [skip ci]
github-actions[bot] Mar 19, 2026
2f3acfa
Naval warfare pt4 + wall buffs (#3738)
Rinary1 Mar 19, 2026
d8c31e4
Update changelog for PR #3738 [skip ci]
github-actions[bot] Mar 19, 2026
d0d6a27
Fix Cameras Translating Speech into Universal (#3796)
Rinary1 Mar 19, 2026
9286485
Update changelog for PR #3796 [skip ci]
github-actions[bot] Mar 19, 2026
76a9fed
NullLink automatic admin assignment.
StarlightHost Mar 19, 2026
43c38b4
NullLink automatic admin assignment. (#3804)
StarlightHost Mar 19, 2026
9bc95c3
Rule 2 Update
Conflee Mar 19, 2026
553cadc
Bagel TEG and Atmo Changes (#3790)
Rinary1 Mar 19, 2026
9db2a6d
Enable debug logging for TTS systems and update cache/channel versioning
StarlightHost Mar 19, 2026
c3f80da
Replace _sawmill with Log and set SawmillName override to "tts"
StarlightHost Mar 19, 2026
a993544
Add sawmill log level override window and persistence system
StarlightHost Mar 19, 2026
e647468
Rule 2 Update (#3805)
walksanatora Mar 19, 2026
5b744bd
Update changelog for PR #3805 [skip ci]
github-actions[bot] Mar 19, 2026
542b2db
Make tracking implants rattle on death as well
redmushie Mar 19, 2026
a3afba4
Add new TTS voice names from Walksanator to Cybe
StarlightHost Mar 19, 2026
fdaa0c4
Tts/streaming v2 (#3808)
walksanatora Mar 19, 2026
d8eb74a
Update changelog for PR #3808 [skip ci]
github-actions[bot] Mar 19, 2026
1eb303d
fixgridatmos
TytosB Mar 20, 2026
e32c083
Fixed "missing" localization text
TaserTheFox Mar 20, 2026
7a0673b
revert, then comment out instead of deleting, annotate.
TaserTheFox Mar 20, 2026
c4f3390
Fixed "missing" localization text (#3810)
Rinary1 Mar 20, 2026
315063d
Update changelog for PR #3810 [skip ci]
github-actions[bot] Mar 20, 2026
17f98eb
Make tracking implants rattle on death in addition to crit (#3807)
Rinary1 Mar 20, 2026
ed5c965
Update changelog for PR #3807 [skip ci]
github-actions[bot] Mar 20, 2026
d1ad51f
serpentcrest linking ai core + mining ticket machine (#3800)
Rinary1 Mar 20, 2026
794293a
Update changelog for PR #3800 [skip ci]
github-actions[bot] Mar 20, 2026
b408569
Adjusting round-ending antag minimum player counts on beta (#3787)
Rinary1 Mar 20, 2026
b93e2f6
Update changelog for PR #3787 [skip ci]
github-actions[bot] Mar 20, 2026
ad9072a
Revert "Naval warfare pt4 + wall buffs"
R3v3l4t1on Mar 20, 2026
6cf9509
fix BunkerBypass
StarlightHost Mar 20, 2026
5959252
fix BunkerBypass (#3814)
StarlightHost Mar 20, 2026
85b10cc
Plumbing Patch 4 (#3734)
Rinary1 Mar 20, 2026
543f468
Update changelog for PR #3814 [skip ci]
github-actions[bot] Mar 20, 2026
a4f2789
Update changelog for PR #3734 [skip ci]
github-actions[bot] Mar 20, 2026
f11344d
fix prediction issues
Rinary1 Mar 20, 2026
ba17900
fix verbs
Rinary1 Mar 20, 2026
db17fb5
fix popups
Rinary1 Mar 20, 2026
01fb425
remove shoelaces from magboots and socks
Rinary1 Mar 20, 2026
e5ee1e4
Merge branch 'starlight-dev' into revert-3738-naval-war-part-4
R3v3l4t1on Mar 20, 2026
f6d170f
additional changes
Rinary1 Mar 20, 2026
f86bc4e
remove unused things
Rinary1 Mar 20, 2026
162b39f
ReloadAdmin calls are now run on the main thread via ITaskManager
StarlightHost Mar 20, 2026
016aed8
Fix shoelaces pr (#3815)
Rinary1 Mar 20, 2026
e815154
Update changelog for PR #3815 [skip ci]
github-actions[bot] Mar 20, 2026
ba76144
ReloadAdmin calls are now run on the main thread via ITaskManager (#3…
StarlightHost Mar 20, 2026
30bbaf9
Revert "Naval warfare pt4 + wall buffs" (#3812)
Rinary1 Mar 20, 2026
fc52c78
Use localization keys for status effects
redmushie Mar 20, 2026
9e1b46d
Quote 1.5x-max-stamina locale key
redmushie Mar 20, 2026
28a7cf2
Fix typo
redmushie Mar 20, 2026
d741824
No more dots and no more name quoting
redmushie Mar 20, 2026
d1a854f
Use localization keys for status effects (#3817)
Rinary1 Mar 20, 2026
cd42e49
Fix panic bunker check by correcting bypassAllowed condition grouping
StarlightHost Mar 20, 2026
cad871a
Fix panic bunker check by correcting bypassAllowed condition grouping…
Rinary1 Mar 20, 2026
faf6ed2
Add STARLIGHT.epsilon references to recognition mappings for all groups
StarlightHost Mar 20, 2026
d7a4220
Add STARLIGHT.epsilon references to recognition mappings for all grou…
StarlightHost Mar 20, 2026
55f4bc5
Add StarlightLRP admin rank structure with roles and permission flags
StarlightHost Mar 20, 2026
2173477
Add StarlightLRP admin rank structure with roles and permission flags…
StarlightHost 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
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@
/Resources/Maps/ @ss14Starlight/maintainer @ss14Starlight/mappers
/Resources/Prototypes/ @ss14Starlight/maintainer @ss14Starlight/prototypers
/Resources/ServerInfo/ @ss14Starlight/maintainer @ss14Starlight/wiki

/Resources/Prototypes/_NullLink/ @StarlightHost
21 changes: 17 additions & 4 deletions Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public sealed partial class PlaytimeStatsWindow : FancyWindow
private ISawmill _sawmill = Logger.GetSawmill("PlaytimeStatsWindow");
private readonly Color _altColor = Color.FromHex("#292B38");
private readonly Color _defaultColor = Color.FromHex("#2F2F3B");
private readonly Color _antagColor = Color.FromHex("#fe7676");
private readonly Color _ghostColor = Color.FromHex("#c996e0");
private bool _useAltColor;

public PlaytimeStatsWindow()
Expand Down Expand Up @@ -109,11 +111,12 @@ private void PopulatePlaytimeData()

OverallPlaytimeLabel.Text = Loc.GetString("ui-playtime-overall", ("time", overallPlaytime));

var rolePlaytimes = _jobRequirementsManager.FetchPlaytimeByRoles();

//starlight
// Starlight BEGIN
var rolePlaytimes = _jobRequirementsManager.FetchPlaytimeByRoles().ToList();
var departmentPlaytimes = _jobRequirementsManager.FetchPlaytimeByDepartments();
//starlight end
var antagPlaytimes = _jobRequirementsManager.FetchPlaytimeByAntags();
var miscellaneousPlaytimes = _jobRequirementsManager.FetchPlaytimeMiscellaneous(rolePlaytimes, antagPlaytimes);
// Starlight END

RolesPlaytimeList.RemoveAllChildren();
PopulatePlaytimeHeader();
Expand All @@ -132,6 +135,16 @@ private void PopulatePlaytimeData()
var playtime = departmentPlaytime.Value;
AddRolePlaytimeEntryToTable(Loc.GetString(department.Name), playtime.ToString(), textColor: department.Color); //starlight edit
}
foreach (var antagPlaytime in antagPlaytimes)
{
AddRolePlaytimeEntryToTable(Loc.GetString(antagPlaytime.Key.Name), antagPlaytime.Value.ToString(), textColor: _antagColor);
}
foreach (var miscellaneousPlaytime in miscellaneousPlaytimes)
{
var role = miscellaneousPlaytime.Key;
var playtime = miscellaneousPlaytime.Value;
AddRolePlaytimeEntryToTable(Loc.GetString(role.Name), playtime.ToString(), textColor: _ghostColor);
}
//starlight end
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Shared.CCVar;
using Content.Shared.Players;
using Content.Shared.Players.JobWhitelist;
Expand Down Expand Up @@ -375,6 +376,50 @@ public IEnumerable<KeyValuePair<DepartmentPrototype, TimeSpan>> FetchPlaytimeByD
yield return new KeyValuePair<DepartmentPrototype, TimeSpan>(department, departmentTime);
}
}

/// <summary>
/// Fetches playtime per antag prototype.
/// </summary>b
public IEnumerable<KeyValuePair<AntagPrototype, TimeSpan>> FetchPlaytimeByAntags()
{
var antagsToMap = _prototypes.EnumeratePrototypes<AntagPrototype>();
foreach (var antag in antagsToMap)
{
if (antag.PlayTimeTracker == null)
continue;

if (_mergedRoles.TryGetValue(antag.PlayTimeTracker, out var time))
yield return new KeyValuePair<AntagPrototype, TimeSpan>(antag, time);
}
}

/// <summary>
/// Fetches playtime for all PlayTimeTracker prototypes that we don't see in any job or antag.
/// This covers ghost roles and various admin spawns.
/// </summary>
public IEnumerable<KeyValuePair<PlayTimeTrackerPrototype, TimeSpan>> FetchPlaytimeMiscellaneous(
IEnumerable<KeyValuePair<JobPrototype, TimeSpan>> jobPlaytimes,
IEnumerable<KeyValuePair<AntagPrototype, TimeSpan>> antagPlaytimes)
{
var trackers = _prototypes.EnumeratePrototypes<PlayTimeTrackerPrototype>();
var exclude = new HashSet<string> { "Overall" };
foreach (var jobPlaytime in jobPlaytimes)
exclude.Add(jobPlaytime.Key.PlayTimeTracker);
foreach (var antagPlaytime in antagPlaytimes)
if (antagPlaytime.Key.PlayTimeTracker != null)
exclude.Add(antagPlaytime.Key.PlayTimeTracker);

foreach (var tracker in trackers)
{
if (exclude.Contains(tracker.ID))
continue;

if (!_mergedRoles.TryGetValue(tracker.ID, out var rolePlaytime))
continue;

yield return new KeyValuePair<PlayTimeTrackerPrototype, TimeSpan>(tracker, rolePlaytime);
}
}
//starlight end

public IReadOnlyDictionary<string, TimeSpan> GetPlayTimes(ICommonSession session)
Expand Down
92 changes: 52 additions & 40 deletions Content.Client/Silicons/StationAi/StationAiOverlay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,17 @@ public sealed class StationAiOverlay : Overlay
private readonly NavMapControl _navMap = new(); // Carpmosia-edit - AI Navmap

private readonly OverlayResourceCache<CachedResources> _resources = new();
private Dictionary<Color, Color> _sRGBLookUp = new(); // Carpmosia-edit - AI Navmap

private float _updateRate = 1f / 30f;
// Carpmosia-start - AI Navmap
private readonly Dictionary<Color, Color> _sRgbLookUp = new();
private static readonly RenderTargetFormatParameters RenderTargetFormatParameters = new(RenderTargetColorFormat.Rgba8Srgb);

private static readonly List<Vector2> TileLinesToDraw = [];
private static readonly List<Vector2> TileRectsToDraw = [];

private const float UpdateRate = 1f / 30f;
// Carpmosia-end - AI Navmap

private float _accumulator;

public StationAiOverlay()
Expand All @@ -59,30 +67,32 @@ protected override void Draw(in OverlayDrawArgs args)
{
res.StaticTexture?.Dispose();
res.StencilTexture?.Dispose();
res.StencilTexture = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "station-ai-stencil");

// Carpmosia-start - AI Navmap
res.StencilTexture = _clyde.CreateRenderTarget(args.Viewport.Size, RenderTargetFormatParameters, name: "station-ai-stencil");
res.StaticTexture = _clyde.CreateRenderTarget(args.Viewport.Size,
new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb),
RenderTargetFormatParameters,
name: "station-ai-static");
// Carpmosia-end - AI Navmap
}

var worldHandle = args.WorldHandle;

var worldBounds = args.WorldBounds;
// var playerEnt = _player.LocalEntity;

// Starlight-start: moved to be after new playerEnt definition with edit
var playerEnt = _player.LocalEntity;
// Starlight-start: moved to be after new playerEnt definition with edit
var playerEnt = _player.LocalEntity;

// Check for cross-grid viewing (e.g., Abductor remote eye) BEFORE getting gridUid
if (_entManager.TryGetComponent(playerEnt, out StationAiOverlayComponent? stationAiOverlay)
&& stationAiOverlay.AllowCrossGrid
if (_entManager.TryGetComponent(playerEnt, out StationAiOverlayComponent? stationAiOverlay)
&& stationAiOverlay.AllowCrossGrid
&& _entManager.TryGetComponent(playerEnt, out RelayInputMoverComponent? relay))
playerEnt = relay.RelayEntity;

// Starlight - start
_entManager.TryGetComponent(playerEnt, out StationAiOverlayComponent? relayStationAiOverlay);
// Starlight - end

_entManager.TryGetComponent(playerEnt, out TransformComponent? playerXform);
var gridUid = playerXform?.GridUid ?? EntityUid.Invalid;
_entManager.TryGetComponent(gridUid, out MapGridComponent? grid);
Expand All @@ -101,10 +111,10 @@ protected override void Draw(in OverlayDrawArgs args)
if (stationAiOverlay is not null) // 🌟Starlight🌟
color = color.WithAlpha(stationAiOverlay.Alfa); // 🌟Starlight🌟

_navMap.AiFrameUpdate((float) _timing.FrameTime.TotalSeconds, gridUid); // Carpmosia-edit - AI Navmap
_navMap.AiFrameUpdate((float)_timing.FrameTime.TotalSeconds, gridUid); // Carpmosia-edit - AI Navmap
if (_accumulator <= 0f)
{
_accumulator = MathF.Max(0f, _accumulator + _updateRate);
_accumulator = MathF.Max(0f, _accumulator + UpdateRate); // Carpmosia-edit - AI Navmap
_visibleTiles.Clear();
// Starlight - start
_visibleTileTags.Clear();
Expand Down Expand Up @@ -212,65 +222,67 @@ public void Dispose()
// Carpmosia-start - AI Navmap
protected void DrawNavMap(DrawingHandleWorld handle, MapGridComponent grid)
{
if (!_sRGBLookUp.TryGetValue(_navMap.WallColor, out var wallsRGB))
if (!_sRgbLookUp.TryGetValue(_navMap.WallColor, out var wallsRgb))
{
wallsRGB = Color.ToSrgb(_navMap.WallColor);
_sRGBLookUp[_navMap.WallColor] = wallsRGB;
wallsRgb = Color.ToSrgb(_navMap.WallColor);
_sRgbLookUp[_navMap.WallColor] = wallsRgb;
}

// Draw floor tiles
if (_navMap.TilePolygons.Any())
if (_navMap.TilePolygons.Count != 0)
{
foreach (var (polygonVerts, polygonColor) in _navMap.TilePolygons)
{
handle.DrawPrimitives(DrawPrimitiveTopology.TriangleFan, polygonVerts[..polygonVerts.Length], polygonColor);
handle.DrawPrimitives(DrawPrimitiveTopology.TriangleFan, polygonVerts.AsSpan()[..], polygonColor);
}
}

// Draw map lines
if (_navMap.TileLines.Any())
if (_navMap.TileLines.Count != 0)
{
var lines = new ValueList<Vector2>(_navMap.TileLines.Count * 2);
TileLinesToDraw.Clear();
TileLinesToDraw.EnsureCapacity(_navMap.TileLines.Count * 2);

foreach (var (o, t) in _navMap.TileLines)
{
var origin = new Vector2(o.X, -o.Y);
var terminus = new Vector2(t.X, -t.Y);
var origin = o with { Y = -o.Y };
var terminus = t with { Y = -t.Y };

lines.Add(origin);
lines.Add(terminus);
TileLinesToDraw.Add(origin);
TileLinesToDraw.Add(terminus);
}

if (lines.Count > 0)
handle.DrawPrimitives(DrawPrimitiveTopology.LineList, lines.Span, wallsRGB);
if (TileLinesToDraw.Count > 0)
handle.DrawPrimitives(DrawPrimitiveTopology.LineList, TileLinesToDraw, wallsRgb);
}

// Draw map rects
if (_navMap.TileRects.Any())
if (_navMap.TileRects.Count != 0)
{
var rects = new ValueList<Vector2>(_navMap.TileRects.Count * 8);
TileRectsToDraw.Clear();
TileRectsToDraw.EnsureCapacity(_navMap.TileRects.Count * 8);

foreach (var (lt, rb) in _navMap.TileRects)
{
var leftTop = new Vector2(lt.X, -lt.Y);
var rightBottom = new Vector2(rb.X, -rb.Y);
var leftTop = lt with { Y = -lt.Y };
var rightBottom = rb with { Y = -rb.Y };

var rightTop = new Vector2(rightBottom.X, leftTop.Y);
var leftBottom = new Vector2(leftTop.X, rightBottom.Y);

rects.Add(leftTop);
rects.Add(rightTop);
rects.Add(rightTop);
rects.Add(rightBottom);
rects.Add(rightBottom);
rects.Add(leftBottom);
rects.Add(leftBottom);
rects.Add(leftTop);
TileRectsToDraw.Add(leftTop);
TileRectsToDraw.Add(rightTop);
TileRectsToDraw.Add(rightTop);
TileRectsToDraw.Add(rightBottom);
TileRectsToDraw.Add(rightBottom);
TileRectsToDraw.Add(leftBottom);
TileRectsToDraw.Add(leftBottom);
TileRectsToDraw.Add(leftTop);
}

if (rects.Count > 0)
handle.DrawPrimitives(DrawPrimitiveTopology.LineList, rects.Span, wallsRGB);
if (TileRectsToDraw.Count > 0)
handle.DrawPrimitives(DrawPrimitiveTopology.LineList, TileRectsToDraw, wallsRgb);
}
}
// Carpmosia-end - AI Navmap
}
}
2 changes: 1 addition & 1 deletion Content.Client/Store/Ui/StoreListingControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ private void UpdateBuyButtonText()
var m = _priceNumberRegex.Match(_price);
if (m.Success)
{
StoreItemBuyButton.Text = $"{m.Groups[1].Value}¢";
StoreItemBuyButton.Text = $"{m.Groups[1].Value}¢";
}
else
{
Expand Down
8 changes: 4 additions & 4 deletions Content.Client/_NullLink/UI/Hub.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@

namespace Content.Client._NullLink.UI;

// It’s not finished, still needs a lot of info displayed, scroll support once more servers show up, max hub width, a hide button, etc.
// But m rushing it for the upstream, will finish it properly someday.
// It’s not finished, still needs a lot of info displayed, scroll support once more servers show up, max hub width, a hide button, etc.
// But I’m rushing it for the upstream, will finish it properly someday.
internal sealed class Hub : PanelContainer, IDisposable
{
[Dependency] private readonly ILogManager _logs = default!;
Expand Down Expand Up @@ -59,8 +59,8 @@ public Hub()
};
AddChild(_gridContainer);

// This crap throws a NullRef exception—what the hell, the Try method doesn’t even check for null,
// and Init is private, so there’s no way to figure out what’s going on in there.
// This crap throws a NullRef exception—what the hell, the Try method doesn’t even check for null,
// and Init is private, so there’s no way to figure out what’s going on in there.
//try
//{
// if (_systemManager.TryGetEntitySystem<HubSystem>(out var hub))
Expand Down
18 changes: 18 additions & 0 deletions Content.Client/_Starlight/Commands/OpenLogLevelsCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Content.Client._Starlight.Logs;
using Robust.Client.UserInterface;
using Robust.Shared.Console;

namespace Content.Client._Starlight.Commands;

public sealed class OpenLogLevelsCommand : IConsoleCommand
{
public string Command => "logs";
public string Description => "Open the sawmill log level configuration window.";
public string Help => "logs";

public void Execute(IConsoleShell shell, string argStr, string[] args)
{
var window = new LogLevelsWindow();
window.OpenCentered();
}
}
43 changes: 43 additions & 0 deletions Content.Client/_Starlight/Logs/LogLevelSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using Content.Shared.Starlight.CCVar;
using Robust.Shared.Configuration;
using Robust.Shared.Log;

namespace Content.Client._Starlight.Logs;

/// <summary>
/// Restores persisted sawmill log levels from CVar on startup.
/// </summary>
public sealed class LogLevelSystem : EntitySystem
{
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;

public override void Initialize()
{
base.Initialize();
ApplySavedLevels();
}

private void ApplySavedLevels()
{
var raw = _cfg.GetCVar(StarlightCCVars.LogSawmillLevels);
if (string.IsNullOrEmpty(raw))
return;

foreach (var entry in raw.Split(';', StringSplitOptions.RemoveEmptyEntries))
{
var sep = entry.IndexOf('=');
if (sep <= 0)
continue;

var name = entry[..sep];
var levelStr = entry[(sep + 1)..];

if (!Enum.TryParse<LogLevel>(levelStr, out var level))
continue;

var sawmill = _logManager.GetSawmill(name);
sawmill.Level = level;
}
}
}
Loading
Loading