463 Commits over 1,249 Days - 0.02cph!
Made icelake placement much fairer so Ice Lake 4 isn't disproportionately spawning compared to the other 3 variants - larger icelakes now spawn more often.
Uses a new TerrainAnchorBlendGenerator to generate terrain anchors using the icelake's blend map so anchors are used more sparsely and only in the areas they are needed to make placement easier. The big disc anchors were too mean.
Manually reviewed all icelakes across 25 seeds and observed much more diverse placement.
Modified procgen world setup to move `Caves` above `Power Line Layout` to prevent floating powerlines over caves. Cave terrain blend was lowering terrain under already placed powerlines.
This was previously fixed in cs
82195 but later stomped in cs
84963
Don't allow monument placement where the terrain blend map will overlap river topology - prevents a rare issue where a monument spawns too close to a river and the water floats
Taper river terrain with smooth slopes when monument terrain blend would otherwise dig terrain out
Increased the bounds of some monuments to match their terrain pad so they can't spawn too close to eachother and overlap terrain. S2P on all. Tested a previously problematic seed in editor
- Military tunnels
- Powerplant
- Trainyard
- Water Treatment Plant
- Launchsite
Repainted terrain at the exit computer room and at the truck blocked off garage area, S2P - prevents terrain clipping into underground rooms causing players to get stuck. Tested in-editor on a 6k map
Added a second `CaveNetworkGroupLayerOverride` to the nuclear missile silo to cover the "living quarters" and "computer room" section - fixes issues with players and NPCs disappearing/reappearing on the stairs
Added new DungeonGridBlocker to `ue_canyon_[abc]` to prevent underground train tunnels generating too close and removing terrain collision (`TerrainCollisionTrigger`) - prevents players rarely dying at the bottom of canyons.
Added 2 new side anchors to cliff_tall_slope_l_a to fix gaps
Fixed gizmos not displaying in the CliffSandbox dev scene
Prefab filters can now check topology in radius using generated distance transform fields of Chebyshev distance to the nearest texel of that topology. Effectively a per-stage cache of distance from topologies to avoid walking texels.
- Built in two-pass Burst
- Built per-stage only when a stage has asked about a bit 100k times to make the building worth it. Bits written mid-stage fall back to the existing texel scan (decor that writes topology as it is placed)
- TerrainTopologyMap.GetTopology picks fields or the existing texel scan
New tests compared with previous baseline show 8-12s saved (Cliffs Hills & Cliffs Hills Small) depending on the seed. Roughly 3% time savings across the entire generation.
Radius scans per run dropped from 8.76 billion -> 2.12 billion.
Prefab placement is slightly stricter as fields check a full square of texels whereas the scan clipped corners at radii of 1 or 2 texels. Recorded a 1.6% reduction cliff hills small placements (0.7% of all prefabs)
Replace powershell nonsense with Unity editor window, similar to ProcgenReplay.
Updated procgen benchmark to create durable version controlled results (we could probably further automate and grafana this at a later date).
Ran a baseline test over 2 repeats of 5 size 3250 seeds (10 runs total), median 205.9s generation time (per-stage breakdown in the CSV).
Added a per-stage benchmark measurement harness before moving onto experimental optimisations. To be used to measure future improvements and map changes.
- ProcgenStats: time per-stage, number of prefabs placed, placement hash, counters (filter calls, radius scans, texel reads, anchor scans, monument attempts).
- ProcgenBenchmark: editor tooling to generate maps for queued seeds and writes a CSV row per-stage. One map per play session, exiting play mode after each generation.
- Powershell scripts to drive the editor benchmarks and compare CSV outputs by hash and stage time
merge from procgen_visualiser
First pass on the Procgen Replay visualisation tool to trace all steps of generating a procedural map and then visualising each placement from candidate positions. Intended for bug finding and development testing.
Play/pause/restart/seek to each procgen step to see how the final map was created. Starts at heightmap generation and follows (today's) 91 stages until the map is complete.
Added editor-only hooks in SpawnFilter, Prefab, World, WorldSetup and LODUtil. Any editor effect requires first arming in the `Tools > Procedural > Procgen Replay` window, use the ProcgenReplay scene to (optionally generate and) replay map seeds.
New CountBy admin command that returns the same count as DeleteBy but without deleting entities
▌▄ ▍▊▉█▋▊ ▄▆▉▄▋▊▌█ ▆▍▇ █▇▊▅▊▇█▌
▄ ▄▅▌▌▉▌▋ ▅▇▆▍▅▍█▌ ▆█▆▉ █▉▅▆▇▄▇ ▅█▆▉ ▆█▆▆▉ ▋█▌ ▋▌█▌▌▄▌█ ▌▌ ▆█▉▍▇▇▉ ▍▍█▋ ▆▋▇ ▍▋▄█▌▊▌▄▌▊ ▉▋▄ ▊▆▅▉▉ ▉▆▅ ▋▍▆▅▌▋▊▌▍▅▉▅▅▍▄▄▇ ▊▅▄ ▅▊▍▇▊ ▇▌ ▊▋▍▅▊█▅▆▌▋▇▄▍▅ ▅▌ █▄▊ ▌▋▅ ▅▅▍█▆▍ ▄▍▍ ▉█▍▄ ▅▄▄▌ ▊▍▋▆ ▇▄▉ ▅▌▄▋█▇▍ █▄▉▊ ▋▅▆▆▅▅▌ ▌▌ ▉▄▅▄▌█▅▍▍ ▍ ▌▋▅ █▆▇▍ ▆▉▉▉▄ ▌▉ █▆ ▌▉█▋ ▊█▉▅▄▅▋▍▍▍ ▅▄▉ ▅▊▌▊▋▄▌ ▆▌▆▆ ▇▉▆▊▊▉ ▉▊▉▅▇▇▆▍ █▅▊▄▇▉▇█ █▋▌▉▊▅▉▉▉▋▆ ▆▌ █▌▄ ▇█▇▉██▋ ▆▊▋ ▆▌▅▆▉▊▌▌ ▅█▋▄▍▇▄▄ ▉▊▅▍▄▍▆▊▊ ▌▅ ▌▄▍ ▍▊▍▍▍ ▋▇▇ ▅▉▇▄▇▇▆▆▉ ▄█▇▌▅▅▊▊▆▉▉▉▊▉▄▋▅▉▅▅▄█▇▊▆█▊ ▉▄▊ ▌▇█▇▅▇▊▅▋ █▆▆▊▅ ▌▌ ▉▄▇ ▆▆▌▅▅█▉▄▋▊▋█▅▉▊▋▅▅ ▆▇▊▅▍▋ ▊▍▋ ▌ ▆▋█▌▊▅ ▌█▄ ▆▆▌▊▆▍ ▉▄▄▅ ▊▍█▊▊▆ ▊▋▄ ▆ ▄█▆▋▋▌▍▆ ▌▌▍▋▆▊ ▍▌▇▋ ▇▆█ ▋▊▌▄▌▌ ▅▋▊▍█▋▆▍▋▄ ▅▌█▍ ▆▅▅ ▅▍▋▋ ▊▌▍▌▇▌
▇ ▍▊█▍▌ ▍ ▌▌▉▇▇▉▄▅ ▇▅▍▄ ▍▇▌ ▍▅▅▉▋▌▅█ █▍▄▊▆▇▆▄▋▍ █▌█▊▅ ▇▆▇▍▋▊█▊▇▇█ ▄▉▆ ▇▄▅▊█ ▅█ ▆▍▋▋▅▅▅▄▉▉█▆▍▌▇█▍█▋▍▇▋ ▇▌ ▇▊▋▇▍▇▅ ▍▉▋▅▇▊▅▉ ▉▆▊▋▌▄▋▊ █▄▊ ▅▆▋▅▅ ▉▉ ▍███▋ ▅▆▇█▋▆▊▄ ▌▋▌▅ ▋ ▊▍█ ▋▉▄▆ ▇▆▅▍▆▇ ▊▉▋▊ ▊▄ ▅██▉█▊▍ ▇▋▄▋▇▇▉ ██▊▅▅▍█▅ █▌▅█▆▇▉▅ ▆▅▅ ▋▄▆▆ █▍▅▉▊█▇█ ▋▉▊ ▍▆▍▊█ ▋▊▍▄ ▊▇▄▇ ▊▋▊▋▊▆ ▉▉▆▆▆ ▅▄▇▋▋▅ ▇▇▌▉█▇ ▆▊▊▇ ▅▅▆▉▄ ▍▋▍ ▌▌▉▌█▄▅ ▋▄ ▋███ ▍▅▌▇▍▆▋▅██▄ ▍▍█▇▍ ▊▅▆▆▇▌▍▉█▌▌█▋▇▉▆▆▍▅▍ ▇ ▆▄▊▄ ▋█▇█ ▍▉▉ ▌▋▇▉▅▅▄▄ ▆▇▌ ▄█ ▇█ ▄▍▌▋▍▆ ▇▊█▄▉ ▆▊█▉▄ ▉▇▆▊▍▄▍▄ ▄▌▅▋▄▇▍▆ ▊▇▇ █▊▅▉▆█▄ ▍█▊ ▍█▉▋▆▇▋▅▊█▄▍▌▊▄▄▊▊▅▄▇▉ ▆▄▄█ ▇▋▄▅▍▄██▅█ ▊▍▌ ▄▆ ▅▄▌▇█▋▉█▅▌ █▋ █▇▇▅▉ ▊▋▍▄ ▄█▉▍▉█▉▊█▊▌ ▄▌▅▉ ▇▋▉▊ ▌▆ ▍▇█▇▄▄▋ ▆▅ ▇▄▄ ▅▄▉▇▇ ▍▇▄▌▊▅▊▋▉▅▌▋▋▄▄ ▄▌▅▄▄▊█ ▇▋▇▇ ▇▋▄▋▄▍ ▄▇ ▊▇▌▇▆ ▆▌▉█▍▍█▇▆ ▍▍▇▍█▆▋█▄▇ █▆▌▌▊▌▅▌▋ ██▋▆█▍▌▆
▌ ▇▊▆ ▉▆ ▋▆▉▊▊▋▄▊▄▉ ▄▆▌▇▊ ▆▊▄▍▍▌ ▆▆▋▉▊▋▊▆█▊▋ ▇▉ ▇▌▌▋█ ▉▊▊ ▋▄▋▄█▉▋▉ ▊▉▇▊██▍ ▋▅▄ ▍█▇▉▍▇ ▌▆▍ ▋█▌ ▊█▇▅█▆ ▄█▆▅ ▌▋▌▄▇▋ ▅▍▍ ▄▊█▉▅▆▅▅ ▇▅▅▊▄▄▌▍▌▆▇ ▍▋▊▊▌ ▌▉▊▋▌▄ ▅▅▄▌█▆▅ ▍▅▌▇▅▋ ▆▅▉▌▊ ▄▅ ▉█▋▍ ▅▇ ▍▉▋▊▊█ ▆▇ ▄▍ ▊▅▊▉▋ ▍▅█ ▊▉▍▇▋▆ ▋▄▋▊ █▊▇▄ ▊▄▆▉ ▆ ▉▆▌ ▌█▆▅▌▊ ▍██▉▆▇ ▆▉█▊ ▌█▌▉▊ ▊▌█▉▉▉ ▊▇▅▋▊▆▋▋ █▅▉█▄▅▇▆ ▌▇▄▌ ▄▊▊▋▋▊▊▆▆▊ ▋▊▇ ▅▇▅▆▌ ▊▅█▌ ▍█▇ ▄▋█▇▇▍▄█▊█▍▊█▍ ▍▉ ▉▉▌▇▌▄▌▋ ▅▍▍▋▍▇ ▆▊▅▇ ▋▌▆▌ ▌▋▋▅▊ ▋▇█▌▍▊ ▉▌▆ ▅▄▉▍▌▊▅▇▍▇▉ ▇▆ ▆█▄▅▅▆ ▋▋▅▊▋ █▅█ ▋▅▄▄▇▉
Attempting to fix pipe access point procgen spawning by generating an outter and inner terrain anchor ring to look for 'flat' terrain underneath the prefab, s2c
Changed TerrainFootprint's default MaxTiltDegrees to 35 after finding a tiny rock gap that was not resolved by the footprint terrain modifications because the rock was at 26 degrees, 1 degree over the existing MaxTiltDegrees
Bear rug: 100% comfort within 2m of the comfort trigger spheres. Gradual falloff until 3m.
Rug: 100% comfort within 1m of the comfort trigger spheres. Gradual falloff until 2m.
Previous fixes would have meant these deployables would have only given a solo player 25% comfort. Boosted values to not destroy years long gameplay behaviour
merge from more_cliff_fixes
Terrain footprint for both variants of rock_formation_medium_e
Terrain footprint for 3 variants of rock_formation_medium_d
Terrain footprint for 3 variants of rock_formation_medium_c
Terrain footprint for 3 variants of rock_formation_medium_b
Terrain footprint for both variants of rock_formation_medium_a
Add terrain footprint calls to PlaceDecorUniform, PlaceDecorValueNoise, PlaceDecorWhiteNoise so all rock types can make use of the new component
Removed lingering generator on hills_cliffs_small\rock_formation_small_d, added terrain footprint for v3_rock_formations_small\rock_formation_small_d
Terrain footprint for both variants of rock_formation_small_c
Terrain footprint for both variants of rock_formation_small_b
Terrain footprint for both variants of rock_formation_small_a
Slightly decreased size of fireplace.deployed's deploy volume to fix bug where you couldn't place the fireplace under an existing floor
Don't override bestRot before spawning
Applied terrain footprint to rock_formation_small_d to fix terrain gaps when it spawns over terrain erosion gutters - need to do a pass over all similar 'flat' rock prefabs
Added footprint functionality into the CliffSandbox dev scene
Apply TerrainFootprint's terrain changes in the PlaceCliffs procedural pipeline after all other component steps before spawn
TerrainAnchorRingGenerator can now also generate a TerrainFootprint for the cliff to outline TerrainAnchor's and mark a perimeter where terrain should raise up to - this eliminates cases where the terrain erosion step creates gutters that rock formations spawn over, leaving a gap under the rock
CliffSandbox scene can now get the `.map` file from the server's `levelurl`
█ ▌▉▍▅ ▉▍▇▆▍▍▅ ▌▍▅▊▊█▍▉ ▇▆▍ ▌▅▌▄ ▇▄▌ █▇▅▌ ▉█▆ ▅▋▇ ▍▇▅▉▉▅▌▊▉ ▇▍ █▌▊ ▉▅▌▋ ▌▇ █▉▇ █▉▉▍▄█ ▋▇ ▉▊▉▉▄▅█▆ ▍▍█ ▋▊▌▍█▉▇▇ ▉█▇█▌ ▇▄▊▍ ▄▅ ▌▅▌▍█ ▋▆▄
▊ ▉▌▉▅▌ ▄▌▌▍▋▉▆▆█▋▄ ▊▊▆ ▍▉▄▍▄▋ ▉▉▍ ▍▇█▋▉▊ ▍▅▊ ▍▅▉▆▌▆▋█ ▄█▉▍▋█▌ ▇▇▄▉▍▉ █ ▇█▌▍▉▇▌ ▋▉▉▊ ▇▋▉ ▋▊▋▋▅▉▊▅ ▄▄▆▌▉ ▇▆▉ █▅▅█▋ ▄█ ▌▊█▊▇ ▌▄▆ ▇▋▇ ▊▊▇▋▋▍▋▆ █▋▊▋ ▋██▍▄ █▆▆▋▊ ▆▌▅▋▍▇ ▆▄ ▋▌▅▆▊ ▉▆▊█▆▋▉ ▊▊▅▍▊▅ ▌▍▍▌▅ █▉▍██▊▍▍█▍ █▍▌▊▉▌▌▊█▄▍▉▆▄▉▊▅ ▅▌█▇▅ ▍▋▊▊▋▅▌▄█ ▆▆▉▆ ▊▇▇▄▇ ▍▆▉▋▅▍▇ ▍▌▋█▌▅▄▊▆ ▄▄▍▍▄ ▋▌ ▇▉▋ ▆▊ ▌▍▆▌▄▉█▄▊
Fixed not being able to transfer water into the held water bucket via the UI.
Includes automated test. Fixed LocalPlayerTestFixture not waiting for the player to spawn in and asserting too early
Fixed `projectile_protection 0` skipping checks but also not applying damage. Now skips checks and still applies damage. This only ever affected community servers that wanted to disable antihack
Fixed comfort setup on 23 prefabs. In all cases, the minComfortRange was greater than the triggerSize (radius) which is not how the TriggerComfort script is intended to be used. Swapped minComfortRange and triggerSize values.
Affected prefabs:
1. Charity_plushie_01\CharityPlushie_01_deployed
2. Charity_Plushie_02\CharityPlushie_02_deployed
3. Charity_Plushie_03\CharityPlushie_03_deployed
4. Charity_Plushie_04\CharityPlushie_04_deployed
5. Charity_Plushie_05\CharityPlushie_05_deployed
6. Discord Plush\DiscordPlushie_deployed
7. Discord Trophy\discordtrophy_deployed
8. HazmatPlushy\HazmatPlushy_deployed
9. HeavyScientistPlushie\HeavyScientistPlushie_deployed
10. ScientistPlushie\ScientistPlushie_deployed
11. Youtooz_Figurines\Hazmat_Youtooz.deployed
12. Youtooz_Figurines\HeavyScientist_Youtooz.deployed
13. Trophy\trophy.deployed
14. trophy_2023\trophy_2023.deployed
15. birthday_balloons_2025\circle_balloon.deployed
16. birthday_balloons_2025\heart_balloon.deployed
17. birthday_balloons_2025\latex_balloon.deployed
18. birthday_balloons_2025\latexclump_balloon.deployed
19. birthday_balloons_2025\mixedclump_balloon.deployed
20. birthday_balloons_2025\speechbubble_balloon.deployed
21. birthday_balloons_2025\star_balloon.deployed
22. Rug\rug.deployed
23. modding\volumes_and_triggers\comfort_volume
merge from fix_cliff_gaps
Tightened anchor setup for rock_formation_small_a