Releases: JanSharp/VRCLockstep
Release list
v1.1.1
Installing
Go to the VCC Listing page and follow the instructions there.
Changelog
1.1.1 - 2026-04-04
Fixed
- Update
com.jansharp.commondependency to1.3.1(2869f3c)
Zip sha256 checksum
b52a1d7ec544fc33039379e14dd1d2240e38ddcbd23406e2df6fb0ac62a42613
v1.1.0
Installing
Go to the VCC Listing page and follow the instructions there.
Changelog
1.1.0 - 2026-04-04
For migration regarding OnInit, OnClientBeginCatchUp, OnImportFinishingUp and (separately) export string format changes see migrations-1.1.0.md.
Changed
- Breaking: Make InitWidgetData run sooner on the first client, which is more consistent with late joiners (
6fa9a0c) - Breaking: Add a signature and internal data version to export strings (
2e9614a) - Breaking: Make export/import and their options APIs only usable once all
OnInitor allOnClientBeginCatchUplisteners have been run to prevent systems getting events or callbacks relating to these APIs before they've even been initialized (6033282) - Breaking: Allow
OnClientBeginCatchUpto be spread out across frames (6132b9e,6033282) - Breaking: Allow
OnInitto be spread out across frames (c141304,cac2eca,6033282) - Breaking: Make
InGameStateSafeEventmore useful when cross system interactions are involved (ec65c14) - Improve performance of write and read custom class functions (
5b9d9a8) - Make cancelling of ongoing late joiner sync less aggressive to reduce how long clients may have to wait before receiving late joiner data (
8609a29) - Remove potential unintentional additional delay before late joiner data gets sent (
c4eb771) - Clarify xml annotations for
WriteSmallvariants (d163cfd) - Make lifecycle docs more accurate reflecting initialization changes (
7a33972) - Improve wording for singleton input action docs (
7cf5f0c) - Remember import options consistently in GameStatesUI, like including remembering even when not confirming the import (
aac3961) - Prevent nonsensical generic value editor UI fade animations in GameStatesUI (
8fa5e2a) - Make export game states info in GameStatesUI collapsed by default and remember the fold out state (
0c0ca11) - Only fold out import info in GameStatesUI if there are any warnings (
af7ac67) - Make "not in imported data" in GameStatesUI red instead of gray for consistency (
fdd525f,f576900) - Support
StartExportbeing called withallExportOptionsbeingnull(df89663) - Make
StartExportno longer callResetWriteStream(fe58894) - Support GameStatesUI being disabled in the hierarchy by default (
d5fdc3f) - Improve GameStatesUI import info text generation performance (
4c8f8d9) - Allow multiple games states to derive from the same abstract base class (
be413e1) - Update
IsInitializeddocs due to initialization life cycle changes (4f3a27f,6033282) - Update
IsImportingdocs due to initialization life cycle changes (6033282) - Remove pointless delay between deserializing of game states for late joiners (
8d20b25) - Make
IsDeserializingForImportdocs clearer (609389b) - Properly mention
IsExportinginStartExportannotations (3ec9669) - Further elaborate in a comment in the game state example in the documentation (
b3835f6) - Mention
SingletonDependencyAttributealongsideSingletonReferenceAttributewhen describingLockstepGameStateDependencyAttribute(d7e8125)
Added
- Add
OpenGameStateUnsafeScopeandCloseGameStateUnsafeScopeto give systems limited control over the value ofInGameStateSafeContextspecifically in conjunction with running foreign code (c5c97bd) - Add editor scripting to ensure classes deriving from
LockstepGameStateOptionsUIdefine appropriatecurrentOptionsandoptionsToValidatefields (5d38363) - Add
MaxWorkMSPerFrame,MaxWorkMSPerFrameLong,MaxWorkSecondsPerFrameandOnMaxWorkMSPerFrameChanged, used both by lockstep as well as for other systems which implement logic which gets spread out across frames (0275e05) - Specifically state
IsDeserializingForImportalways beingfalseinShowOptionsEditor(f445ec9) - Add
SelfLoadsBeforeDependencytoLockstepGameStateDependencyAttribute(a2f170b) - Add migration docs, including editor scripting to convert old export strings (
72f0d8b,2e9614a) - Add list of game states to export to GameStatesUI (
6a2e120) - Add int and uint variants for tick rate constants (
510c739) - Add
LockstepIsInitializedto better handleOnInitnow being spread out across frames (6033282) - Add
IsPartOfCurrentImportandCurrentImportedDataVersiontoLockstepGameState(2f058b1) - Add
OnImportFinishingUpwhich can be spread out across frames (5eddc9b,268a851,6033282,43bfa07) - Add
OnPostClientBeginCatchUpto not lose out on old functionality (6132b9e,6033282,75bfa25) - Add
OnInitFinishedto not lose out on old functionality (c141304,6033282,75bfa25) - Fix outdated
OnClientBeginCatchUpxml annotations due to the existence ofOnPreClientJoined(2ad1b22) - Add `GetGameStateBei...
v1.0.2
Installing
Go to the VCC Listing page and follow the instructions there.
Changelog
1.0.2 - 2025-09-08
Changed
- Update
com.jansharp.commondependency tov1.3.0for the RNG WannaBeClass (0cfdea7) - Change late joiner game state serialization to only one game state per frame to prevent 10 second timeouts. This is now consistent with how exports do serialization (
0cee39e) - Add another approach to latency hiding to the docs (
8d27716) - Update docs since network events can have params (
ee9ce80) - Clean up grammar mistakes in the documentation (
e79a833)
Added
Fixed
- Fix ReadCustomClass(string) returning wrong result when called recursively (
ac30c75) - Fix ReadCustomClass(string) passing effectively random data version to SerializableWannaBeClass.Deserialize (
ff05a04)
Zip sha256 checksum
2144bf969c8e713f03d2312971695b2db8fad81c5750a1377e15f4faa0fa83b9
v1.0.1
Installing
Go to the VCC Listing page and follow the instructions there.
Changelog
1.0.1 - 2025-08-15
Changed
- Rename LockstepDebug define to LOCKSTEP_DEBUG (
9b0e8c6) - Remove "unchanged" postfix when GS is not in imported data which more accurate (
71ff040) - Change "to import" to "supports import" in GS UI which is more accurate (
4d7a7b7) - Reset Sending-PlayerId/-UniqueId/-Time once an IA ran to help catch unintentional api misuse (
373a9a5) - Use OnBuildUtil api to properly destroy objects, requires
com.jansharp.commonv1.2.0(09af531,7a09bc5)
Added
- Add byte count & base64 length to exported window (
b3a0fd1) - Add ExportByteCount to LockstepAPI (
5d58b7e)
Fixed
- Fix import error caused by unused prefabs which were remnants from using the player object pool (
609a096)
Zip sha256 checksum
1df445d8e76fdb679f4250edb9ea9ce2583982d9412a84c0c5ec85fc69e944d4
v1.0.0
Installing
Go to the VCC Listing page and follow the instructions there.
Changelog
1.0.0 - 2025-04-24
A few additions to the API got their own mentions in this list, however a lot of the API is not explicitly stated in this changelog entry. The whole list of API functions does not belong here.
Added
- Add README.md (
36f9e6b,6432ea1,c2a0968,51a8e06,43c0181,7227669) - Add documentation website (
7ab5b20,0f7db28,6edeb11,dbd8814,7e97ddf,e691731,d4fc51d) - Add LockstepAPI and a lot of xml annotations, so intellisense, also as documentation (
57986ab,9eb8cc7,8737309,298caf2,a07061a,bdbb8a3,1cca1cc,50a2554,b79040a,69f5176,18de583,d4fc51d) - Add lockstep events (
0b756a5,fbfb5ac,1ffbb6b,9af9188,7507ce9,370f2d1,fb3e21b,43aaf96,7f3da29,1f4bee3,9eb8cc7,cd72348,2512c1f,dd8ed6a,839fd42,6f9e6e3,f5e3d88,d2af8ba,f9c3d8c,03932b0,a699c1f,f19bd28,e1fd163,5269ba9,044e395,5ea1aef,f9df999) - Add game states (
ccb53a9,d5181a4,90974a1,9d5c9af,4395fec,cbc6d0f,ed5b6b0,7f7eca3,ade15ca,b45aab9,9994b96,b79040a,f5a130b) - Add input actions (
0b756a5,efa16d5,81bf3d2,b4f6ad6,cc463cc,68d5c4f,ba2371a,ec7d45d,b2b81de,e228c63,d5546a5,c9c3ccf,b6d0285,33226d5,51e1f46,2fd9a37,8d8b286,b38b70e,7189a27,ea19b3b,1f488e7,0880bd3,ede3a07,1f4bee3,f3e2726,448d8a9,9cda588, [18de583](https://github.com/JanSharp/VRCLo...