feat: Rec Royale night mode (ClientMod) + admin switch to give baked RRO rooms a data blob

ClientMod (2023-03-21): opt-in Rec Royale night mode. RRO scenes never
enable the room mood engine (no data blob → SceneMoodSettings.isEnabled
stays false, CurrentMood null, the per-frame update returns at once), so
the mod replays the room-data loader's bring-up, registers a shipped
night MoodSetting (Night_Calm_Outdoor_Mood by default) as the scene's
default mood, supplies a skybox material on the Custom/SkyBox shader
(MoodConfig.SkyBoxMaterial is not loaded outside custom rooms), assigns
the scene's directional light as RenderSettings.sun, matches the key
light to the engine-driven sun, darkens via the mood's post-exposure and
sun/ambient intensities, forces post-processing on, keeps or disables
fog, hides the daytime cloud meshes, unlocks weapon flashlights, and
restores everything on hotkey-off / scene change. All knobs live in
dorknet-clientmod.json (RecRoyaleNight*), written by install-melon.ps1.

Server/admin: baked Rec Room Originals are seeded with an empty
DataBlobName, which the 2023 client reads as "no room data" — no Maker
Pen, no CV2 room-settings chips, no saves, and for Rec Royale no game at
all (its game-rule chip RecRoyaleSolos_GameRuleWrapperCircuit ships in
the blob, not the scene). New admin actions on the Sub-rooms tab:
POST rooms/{id}/subrooms/{sub}/blob/enable stamps the synthetic default
blob name (which CdnController already answers with the RRO-editable
blob) and blob/reset clears it back to scene-only. IsRRO is derived from
IsAGRoom, so the client keeps loading the baked map.

Docs: README section, docs/admin.md procedure, docs/recroom-2023-room-save.md,
new docs/recroom-2023-scene-moods.md with the ISIL offsets behind all of it.
Tests: RroRoomBlobTests.
This commit is contained in:
Alexa
2026-09-27 22:45:40 +03:00
parent cf3aa29ba2
commit 258183fb94
12 changed files with 2300 additions and 7 deletions
+29
View File
@@ -447,6 +447,35 @@ $cfg = [ordered]@{
DesktopScreenShareRaisePhotonRate = $true
DesktopScreenShareResolution = 0
DesktopScreenShareQuality = 0
# Rec Royale night mode (client-side visual). Applies one of the game's
# shipped night MoodSetting assets (sky dome, sun, fog, colour grading)
# to the Rec Royale map and unlocks weapon flashlights. Moods:
# Night_Calm_Outdoor_Mood, Night_Spooky_Outdoor_Mood,
# Night_Wild_Outdoor_Mood, Night_StuntRunner_Outdoor_Mood, OuterSpace_Mood.
# ToggleKey is an optional UnityEngine.KeyCode name (e.g. 'N') to flip it
# in-game; it also arms the feature when NightMode is $false.
RecRoyaleNightMode = $false
RecRoyaleNightMood = 'Night_Calm_Outdoor_Mood'
RecRoyaleNightScenes = @('RecRoyale')
RecRoyaleNightFlashlights = $true
RecRoyaleNightFog = $false # $true = also apply the mood's fog
# Darkening: EV offset added to the mood's post-exposure (dims baked
# lightmaps too), and multipliers on the mood's sun / ambient intensity.
RecRoyaleNightExposure = -3.5
RecRoyaleNightSunScale = 0.15
RecRoyaleNightAmbientScale = 0.2
# Post-exposure needs the scene Volume on and camera post-processing
# enabled; force both while night mode is active.
RecRoyaleNightForcePostProcessing = $true
# The engine only drives RenderSettings.sun; match every other
# directional light's rotation/colour to it and scale its intensity.
RecRoyaleNightMatchSunLights = $true
# Fog off entirely while night is on, and renderers whose object or
# material name contains any of these are hidden (Frontier's daytime
# cloud meshes). Empty array = hide nothing.
RecRoyaleNightDisableFog = $false
RecRoyaleNightHideObjects = @('Cloud')
RecRoyaleNightToggleKey = ''
}
Write-Step "Writing mod config -> $cfgPath"
[System.IO.File]::WriteAllText($cfgPath, ($cfg | ConvertTo-Json -Depth 4))