130,357 Commits over 4,201 Days - 1.29cph!
    
    
    
        
            
            
            
                
                Added crosshair codes. Can be generated from the current crosshair settings, and then easily loaded at a later time or shared with other people:
https://files.facepunch.com/cipeaX/2025/August/12_13-59-FrankGrasshopper.mp4
                
                
                        
                
                
             
         
        
            
            
            
                
                Tests: add ServerOcclusionTests.TestOcclusionLineOfSight_Consistency
Compares results between serial and batched versions.
Tests: ran the new test set
                
                
                
                
             
         
        
            
            
            
                
                Update: prep BasePlayer.OcclusionLineOfSight (both serial and batched) for use in tests
Tests: none, trivial change
                
                
                
                
             
         
        
            
            
            
                
                Play an on/off animation on the maps when the engine is toggled on or off
Map system refactor and storing in its own file
Folder cleanup
                
                
                
                
             
         
        
            
            
            
                
                Tests: rewrite ServerOcclusionTests to make ServerOcclusion usage clear
Is it ugly on some lines? Yes. But is it explicit and beautiful? Also yes.
Tests: ran the unit tests
                
                
                
                
             
         
        
            
            
            
                
                Fix unity_BaseCommandID not being set on Mac
                
                
                
                
             
         
        
            
            
            
                
                Fix stencil buffer incompatibility in Standard and Standard-Terrain
                
                
                
                
             
         
        
            
            
            
                
                Clean: propagate network time from FinalizeTickParallel
Tests: none, trivial change
                
                
                
                
             
         
        
            
            
            
                
                Optim: NetworkPositionTick - remove extra InvalidateNetworkCache
Cache has been previously invalidated in FinalizeTickParallel, so no need to discard it again
Tests: none, trivial change
                
                
                
                
             
         
        
            
            
            
                
                █▋▉ ██▄ ▅▍▇▄▊▄ ▊▍▍█ ▍▊▊▄▆▉▆▇ ▌▌█▆█ ▌ ▇▆▅▍█▊ ▇▍▌█▌▍▄.
                
                
                
                
             
         
        
            
            
            
                
                Optim: OcclusionSendUpdates can now reuse occlusion results
- Got rid of old OcclusionLineOfSight that used to send updates internally, as there's no need for it now
Tests: 2p session on Craggy with UsePlayerUpdateJobs 2
                
                
                
                
             
         
        
            
            
            
                
                Clarified in the tutorial that you must talk to the survivor (not just be in their proximity).
                
                
                
                
             
         
        
            
            
            
                
                bug fix: incorrect button prompt was displayed for opening the inventory on this tutorial text only.
                
                
                
                
             
         
        
            
            
            
                
                Clean: remove couple TODOs
- one was just completed
- another was overzealous
Tests: none, trivial changes
                
                
                
                
             
         
        
            
            
            
                
                Optim: SendNetworkPositions - reuse occlusion query results
Tests: 2p on Craggy with UsePlayerUpdateJobs 2
                
                
                
                
             
         
        
        
            
            
            
                
                merge from gesturewheel_cinematic_fix
                
                
                
                
             
         
        
            
            
            
                
                Fixed cinematic gestures not showing in the gesture menu when using ShowAdminCinematicGesturesInBindings
                
                
                
                
             
         
        
            
            
            
                
                When updating the phrases we now save their context for later use
Some cleanup in phrases update code
                
                
                
                
             
         
        
            
            
            
                
                Update: move ServerUpdateOcclusionParallel inside FinalizeTickParallel
- FinalizeTickParallel invalidates players network cache - with UsePlayerUpdateJobs 2 we can skip it later, but 1 is has double-invalidate
This increases the coverage of OcclusionFrameCache, allowing to simplify a bunch of code.
Tests: 2p on Craggy with UsePlayerUpdateJobs 0, 1, 2 and disconnects. 0p server with UsePlayerUpdateJobs 1, 2
                
                
                
                
             
         
        
            
            
            
                
                Merge: from connectedplayer_rewrite
Got far enough along in this direction and things seem to work
                
                
                
                
             
         
        
            
            
            
                
                Bugfix: ServerUpdatePlayerTick - restore Player.serverTickInterval functionality
Got lost during the rewrite
Tests: 2p on Craggy with UsePlayerUpdateJobs 2
                
                
                
                
             
         
        
        
        
            
            
            
                
                fix mannequin prefab rendering
                
                
                
                
             
         
        
            
            
            
                
                Rename BlockFace -> BlockFaceDefinition so I can make runtime types with normal names
                
                
                
                
             
         
        
            
            
            
                
                restore_old_sorting -> main
                
                
                
                
             
         
        
            
            
            
                
                Baked defaults into play prefab
                
                
                
                
             
         
        
            
            
            
                
                Define sockets for square floor
                
                
                
                
             
         
        
            
            
            
                
                Changed default orderBy string to match new intended behaviour
                
                
                
                
             
         
        
            
            
            
                
                Restore default sorting to be ping then pop (like the old menu)
                
                
                
                
             
         
        
            
            
            
                
                Define faces and edges for a normal wall
                
                
                
                
             
         
        
            
            
            
                
                Proper MVP implementation of "full base heating" 
- add ability to define faces & edges of each building block
- draw gizmos to visually confirm what you are defining
                
                
                
                
             
         
        
            
            
            
                
                Fixed notify LOD notifing the wrong object
                
                
                
                
             
         
        
            
            
            
                
                Added toggleable working lighting, needs some work to make it prettier
                
                
                
                
             
         
        
        
            
            
            
                
                Left mouse button when holding a water jug / water bucket now pours (up to) 5% of the container's max amount from its inventory. Still needs animation setup. A gradual pour over time rather than a throw of a smaller amount may be nicer, needs more thinking.
Video: https://files.facepunch.com/jacob/1b1111b1/Unity_Q6cXeVt4NE.mp4
                
                
                        
                
                
             
         
        
            
            
            
                
                WIP crosshair customization, added the following convars to control the appearance and behaviour of the crosshair:
- mode:  0=static, always visible | 1=static, hidden during ADS | 2=dynamic, adjusts to accuracy, hidden during ADS
- style:  0=full | 1=no dot | 2=only dot | 3=T-shape no dot | 4=T-shape with dot
- color:  0=white | 1=green | 2=blue | 3=red | 4=yellow | 5=magenta | 6=cyan
- dotsize:  Size of center dot [0-5]
- spacing:  Distance of the outer lines to the center dot [0-3]
- outline:  Outline enabled [true/false]
- outlinecolor:  0=black | 1=green | 2=blue | 3=red | 4=yellow | 5=magenta | 6=cyan
Demo: https://files.facepunch.com/cipeaX/2025/August/11_19-02-AttractiveLacewing.mp4
                
                
                        
                
                
             
         
        
            
            
            
                
                Hackweek XIII | Sparrow Missile Tiki Torch - Initial prefab setup as campfire, new model with different fire effect, lights up and extinguishes correctly, set up namings and item
                
                
                
                
             
         
        
            
            
            
                
                Rearranged logic in OnPrimaryAttackHeld to make that the method that requests pouring
                
                
                
                
             
         
        
            
            
            
                
                Liquid vessels that could throw out all their contents with left mouse button now require holding ALT at the same time to throw out all contents - making way for left mouse button by itself to gradually pour water
                
                
                
                
             
         
        
            
            
            
                
                merge from skinviewer_db_fix
                
                
                
                
             
         
        
            
            
            
                
                Fixed double barrel sight UV issue in the skin viewer
                
                
                
                
             
         
        
            
            
            
                
                Update: ServerOcclusion - add a global cache of all player pair results that lives for a frame
- Cache is valid after it's been updated, controlled via OcclusionCanUseFrameCache
Optimizes SendEntityUpdates and anything in the end of frame invokes by skipping LOS checks. This doesn't affect tick confirmation due to code ordering - will have to reorganize that
Tests: 2p on Craggy with UsePlayerUpdateJobs 2
                
                
                
                
             
         
        
            
            
            
                
                Added test seating and storage box (Broken)
https://files.facepunch.com/Rin/2025/08/Unity_C8PJUT12hL.mp4
                
                
                        
                
                
             
         
        
            
            
            
                
                Better script split off (keep relevant scripts under client objects where required)
                
                
                
                
             
         
        
        
            
            
            
                
                Clean: use ReadOnlySpan in SendEntitySnapshots/-WithChildren
Tests: compiles in editor
                
                
                
                
             
         
        
            
            
            
                
                Update: SendEntityUpdates - don't try to skip occlusion explicitly
Bit of a 180 turn. Current code is problematic to optimize at high level - but it will be easier if we introduce a global occlusion pair cache. At least I hope.
Tests: compiles in editor