Releases: foxssake/netfox
v1.35.3
Summary
Actually, yes! This release brings 49 commits, including ones from 8 new contributors! And, some of the most exciting additions to netfox so far!
Let's get physical!
Physics and rollback, finally! Courtesy of @albertok, it is now possible to run and synchronize physics simulations, with rollback, in multiplayer!
To see a complete, open-source example, head over to https://github.com/albertok/godot-rocket-league! And don't forget to check the docs!
Let's get realistic (network conditions)!
With a single toggle, netfox can now simulate network conditions, such as latency and packet loss! No clumsy or tc netem required! Just enable autoconnect and configure your network conditions in the Project Settings! Also don't forget to prepare your UI for automatically hosting or joining a session.
Find out all about it in the docs!
Once again, many kudos to @albertok!
Bots? NPCs? Sure!
With the introduction of Inputless RollbackSynchronizer support, you can now implement characters that are not governed by any inputs! Perfect for player companions, enemies, or even bots!
See the docs for more!
Less bytes, more game
Bandwidth usage was significantly decreased, and there's even more planned in the next releases!
Can you see me?
You can now specify who gets updates from any given RollbackSynchronizer and who doesn't! Useful for large maps where not all players can see eachother! Interest management? Player invisibility? Now all doable!
More logs, less headache
While it's been in use internally for years, the Logging API is now part of the public interface! Using NetfoxLogger, you can now print debug and log messages that include much more info, like current tick, rollback phase, and logging peer! All simply by creating a NetfoxLogger instance and replacing print() with NetfoxLogger.info()!
What's Changed
- Fix TickInterpolator error when above interpolated property in scene tree by @kumpmati in #438
- chore: Cache project settings by @gk98s in #442
- fix: Don't run callbacks in editor for RewindableStateMachine by @elementbound in #445
- doc: Update Made with netfox page by @elementbound in #447
- feat: Inputless RollbackSynchronizer by @elementbound in #448
- doc: Update rollback tick loop by @elementbound in #453
- doc: Input gathering tips and tricks by @elementbound in #452
- fix: Set is_predicted tick outside of node sim by @elementbound in #455
- feat: Add input gathering example project by @jonandrewdavis in #459
- doc: Use physics_factor in all example snippets by @russ- in #461
- fix: Avoid NaNs at very low latencies by @elementbound in #469
- doc: Interpolators provided as static class by @elementbound in #472
- Stepping Physics with Rollback by @albertok in #437
- doc: Add Chrome Carnage to games list by @elementbound in #480
- doc: Fix plantuml diagram rendering by @elementbound in #483
- feat: Implement handshake over ENetMultiplayerPeer to detect closed connections by @camperotactico in #479
- deps: Upgrade vest to 1.3.3 by @elementbound in #484
- epic: Refactor rollback synchronizer by @elementbound in #487
- feat: Rollback RNG by @elementbound in #488
- fix: SnapshotHistoryEncoder size mismatch by @elementbound in #491
- fix: One-Off Inputs tutorial duplicates one-off input during lag by @elementbound in #490
- feat: Visibility filtering by @elementbound in #492
- fix: Update peer visibility on entering tree by @elementbound in #499
- feat: Autoconnect with network conditions simulation by @albertok in #481
- fix: Transmit state for inputless RollbackSynchronizers by @elementbound in #504
- fix: Rapier physics toggle recognizes correct addon by @elementbound in #506
- fix: Clear property config on process_authority() by @elementbound in #507
- fix(example): Smooth aiming input on FPS examples by @elementbound in #509
- feat: RewindableState signals by @RickyYCheng in #494
- fix(doc): Ensure graphviz is installed by @elementbound in #510
- fix: RewindableAction to include ticks at the end of the tickset by @ericvolpone in #513
- fix: Stop autoconnect thread on quit by @quicksnap in #522
- chore: Align icons to editor scale and theme by @elementbound in #525
- fix: Eliminate partial sync on non-rollback-aware nodes by @elementbound in #524
- feat: Expose logger API by @elementbound in #526
- docs: Inputless RollbackSynchronizers by @elementbound in #528
- docs: External resources by @elementbound in #529
- fix: Always clear RewindableAction queue after loop by @elementbound in #527
- feat: Track and expose latest confirmed tick by @albertok in #518
- fix: Stop signals and loops on disconnect by @elementbound in #530
- fix: Queue RewindableAction mutations ahead of rollback loop by @RevoluPowered in #531
- fix: RewindableAction to handle later ticks by @elementbound in #534
New Contributors
- @kumpmati made their first contribution in #438
- @jonandrewdavis made their first contribution in #459
- @russ- made their first contribution in #461
- @camperotactico made their first contribution in #479
- @RickyYCheng made their first contribution in #494
- @ericvolpone made their first contribution in #513
- @quicksnap made their first contribution in #522
- @RevoluPowered made their first contribution in #531
Full Changelog: v1.25.3...v1.35.3
v1.25.3
Summary
With 40 commits and 4 new contributors, this is probably the most numerous release so far! With multiple fixes and quality of life updates, there are some major updates too:
- Input delay, courtesy of @TheYellowArchitect
- Refactor to start using HistoryBuffers, which unlocks future improvements, contributed by @DustieDog
- Mutations ( experimental )
- RewindableActions ( experimental )
Overall, netfox is getting better tools for synchronizing not just game state, but game events in the form of mutations and rewindable actions. This is happening in parallel to a refactoring initiative, to let us build better features easier in the future. With the addition of vest, test coverage is also slowly increasing, so we can be more confident in future changes.
What's Changed
- chore: Warn on invalid NetworkTime.start() calls by @elementbound in #367
- chore: Remove MultiplayerSpawner from examples by @rcorre in #370
- fix(example): More responsive firing by @krazyjakee in #366
- chore: Setup tests with vest by @elementbound in #371
- feat: Track fired tick for NetworkWeapon by @elementbound in #376
- chore: Log rollback stage and range by @elementbound in #377
- fix: Send state ack's to sender instead of authority by @elementbound in #378
- fix(ci): Fix contributor list formatting by @elementbound in #379
- chore: Implement tickrate handshake by @elementbound in #380
- fix: Recover clock from pauses and stalls by @Riordan-DC in #381
- doc: Netfox Sharp by @DustieDog in #384
- feat: Add display_tick and history_start getters by @elementbound in #388
- fix: Record state if mutated by @elementbound in #389
- feat: Expose last known input and state ticks by @elementbound in #390
- fix: Add missing editor check in RollbackSynchronizer._ready by @elementbound in #391
- chore: Iterable sets by @elementbound in #392
- fix: Add logger tags in _ready by @elementbound in #395
- Added Input delay (no custom serialization, no static typing) by @TheYellowArchitect in #276
- Refactored input batching and input submission by @TheYellowArchitect in #307
- refactor: Store state and inputs in HistoryBuffers as PropertySnapshots by @DustieDog in #399
- doc: Press kit by @elementbound in #408
- fix: Failing PropertySnapshot tests by @elementbound in #409
- doc: Made with netfox page by @elementbound in #410
- fix: Missing dependency for site build by @elementbound in #411
- doc: Contributors page by @elementbound in #412
- chore: Fix banner in README on dark mode by @elementbound in #413
- refactor: Use get_property_list() to check property presence by @elementbound in #415
- chore: PropertyEntry tests by @elementbound in #416
- fix: _HistoryBuffer snapshot return by @DustieDog in #418
- fix: Don't tile if embedded in editor by @albertok in #419
- chore: Upgrade to vest v0.22.15 by @elementbound in #426
- refactor: History encoder by @elementbound in #425
- revert: History encoder (#425) by @elementbound in #429
- refactor: Statically typed almost everything by @gk98s in #420
- feat: Rewindable Actions by @elementbound in #394
- fix: Unregister log tags on game exit by @elementbound in #434
- docs: Mark Mutations experimental by @elementbound in #435
- chore: Add UIDs by @DustieDog in #436
- chore: Check UIDs by @elementbound in #439
New Contributors
- @rcorre made their first contribution in #370
- @Riordan-DC made their first contribution in #381
- @DustieDog made their first contribution in #384
- @gk98s made their first contribution in #420
Full Changelog: v1.19.1...1.25.3
v1.19.1
Summary
As 2024's last release, v1.19.1 brings many changes and a few exciting features:
- Display callbacks for RewindableStateMachine, to improve developer experience
- Hitscan weapons with an example FPS game, courtesy of @krazyjakee
- Input prediction
- Rollback debugger, a tool to examine your code during rollback, signal by signal, tick by tick
- Procedural node configuration, to enable nodes to automatically configure their own state, input, and interpolated properties
And of similar importance, documentation has also undergone significant changes:
- Docs are now bundled with every release, ready for downloading and offline use
- Docs are now available for every version on the site, instead of just the latest
- Versions managed using mike
- From this release and onward, doc pages have comments enabled!
- Discussions managed by giscus
What's Changed
- doc: Use embedded UML by @elementbound in #342
- fix: Disconnect signals on exiting tree by @elementbound in #341
- feat: RewindableStateMachine display callbacks by @elementbound in #343
- chore: Include docs in releases by @elementbound in #350
- fix: Setup mkdocs to build docs by @elementbound in #351
- feat: Hitscan weapons by @krazyjakee in #340
- chore: Include contributors by @elementbound in #352
- feat: Input prediction by @elementbound in #344
- feat: Rollback debugger by @elementbound in #345
- fix: Add missing interpolators by @elementbound in #355
- fix: Record nodes without _rollback_tick callback by @elementbound in #356
- feat: Procedural node configuration by @elementbound in #354
- doc: Admonitions by @elementbound in #357
- doc: Version selector by @elementbound in #359
- chore: Improve scripts by @elementbound in #360
- doc: Add giscus by @elementbound in #361
- doc: Update version selector style by @elementbound in #363
- doc: Input prediction tutorial by @elementbound in #365
Full Changelog: v1.14.1...v1.19.1
v1.14.1
Summary
This release marks netfox's first anniversary - it's been a year since the release of v1 on the 23th of November, 2023! To celebrate, we bring the biggest update so far!
Highlights
- A moving platform example ( #313 )
- State machines that work with rollback ( #315 )
- Improved time sync ( #314 )
- Window tiling ( #322 )
- Diff states ( #278 )
What's Changed
- Changed RPC strings to static functions by @TheYellowArchitect in #241
- fix: Make sure generated projectile ID's are unique by @elementbound in #270
- fix: Projectiles can be spawned without ID by @elementbound in #237
- Guard input redundancy from values less than one by @albertok in #271
- Added docs for is_fresh and updated screenshot by @albertok in #263
- doc: Add supported versions by @elementbound in #292
- chore: Add tick and peer id to logging by @elementbound in #293
- chore: Add funding link by @elementbound in #294
- Added notes to caveats by @albertok in #296
- chore(github): Issue templates by @elementbound in #295
- fix: TickInterpolator glitch on state switch by @elementbound in #301
- feat(game): Moving platforms by @elementbound in #313
- Rollback aware state machine by @krazyjakee in #315
- fix(ci): Missing export template in build by @elementbound in #317
- Provide choice to spawn an avatar for the host by @TheYellowArchitect in #283
- Fixed NetworkPopup.tscn UI so the buttons host and join are always visible by @TheYellowArchitect in #285
- doc: Add Interpolation caveats by @elementbound in #318
- refactor: Expand variable names by @elementbound in #319
- fix: Use record input props instead of auth by @elementbound in #320
- feat: Nudge Time Process by @elementbound in #314
- feat: Window tiling by @albertok in #322
- fix: Limit rollback ticks by @elementbound in #324
- feat: Broadcast time sync success by @elementbound in #325
- fix: NetworkTime.start() runs twice for clients by @TheYellowArchitect in #326
- fix: host/join signals not emitting at multiplyer-simple-demo and state-machine-demo by @TheYellowArchitect in #329
- fix: Log levels by @elementbound in #333
- Fix starting order for
RollbackSynchronizerby @TheYellowArchitect in #284 - feat: Diff states by @TheYellowArchitect in #278
- refactor: Conditional log message evaluation by @elementbound in #335
- refactor: NetfoxLogger no longer depends on netfox by @elementbound in #336
- doc: Improve index pages with shields by @elementbound in #337
- feat(game): Aura decals by @elementbound in #338
- feat: Add display state change signal to RewindableStateMachine by @krazyjakee in #331
- chore: Add diff state ack defaults by @elementbound in #339
New Contributors
- @krazyjakee made their first contribution in #315
Full Changelog: v1.8.0...v1.14.1
v1.8.0
Summary
This release brings an option to reduce bandwidth by sending input data only to the server - thanks to @nicobatty for the catch! The legacy behavior is still available through a flag on RollbackSynchronizer.
Make sure to disable enable_input_broadcast on your RollbackSynchronizer nodes for this to take effect!
What's Changed
- feat: Add option to avoid broadcasting inputs by @nicobatty in #230
New Contributors
- @nicobatty made their first contribution in #230
Full Changelog: v1.7.0...v1.8.0
v1.7.0
What's Changed
- fix: hdpi svg icons by @bryanmylee in #213
- feat: Support nested properties by @elementbound in #217
- Unreliable inputs with redundancy by @albertok in #221
- Fix nested properties not being applied by @jonstvns in #224
- feat: Use OS time for tick loop by @elementbound in #225
New Contributors
- @bryanmylee made their first contribution in #213
- @albertok made their first contribution in #221
- @jonstvns made their first contribution in #224
Full Changelog: v1.4.0...v1.7.0
v1.4.0
What's Changed
- doc: Update releases section with new zip layout by @elementbound in #172
- Documentation - Reference the issue which will solve multiple physics steps preventing instant rollback by @TheYellowArchitect in #178
- Redirect dead link (error 404) to proper documentation link by @TheYellowArchitect in #183
- Deleted outdated tutorial link in comment by @TheYellowArchitect in #187
- Documentation - 1 typo by @TheYellowArchitect in #179
- chore: Add type annotations where sensible by @elementbound in #190
- chore: Flat billboard clouds by @elementbound in #191
- doc: Add process_settings note to ownership in rollback tutorial by @elementbound in #192
- feat: Performance monitors by @elementbound in #195
- fix(game): Excessive rollback when an Effect is active by @elementbound in #198
- feat: StateSynchronizer by @elementbound in #202
- doc: Upgrading by @elementbound in #203
- doc: Add showcase section to README by @elementbound in #206
- fix: Spawning RollbackSynchronizer resims from -1 by @elementbound in #204
- feat: Enable updating authority on RollbackSynchronizer by @elementbound in #208
New Contributors
- @TheYellowArchitect made their first contribution in #178
Full Changelog: v1.1.1...v1.4.0
v1.1.1
Upgrading
- Remove
Interpolatorsfrom the project autoloads, it's a static class now
What's Changed
- fix: Remove netfox.noray dependency on netfox by @elementbound in #154
- doc: Add noray instance by @elementbound in #155
- doc: Enable addons section by @elementbound in #156
- fix(examples): Noray bootstrapper refuse connection on empty role by @elementbound in #161
- refactor: Make Interpolators a static class by @elementbound in #163
- chore: Add RollbackSynchronizer class name by @elementbound in #165
- feat: Configurable logging by @elementbound in #162
- chore: Fix warnings by @elementbound in #170
- chore: Always bundle dependencies by @elementbound in #171
Full Changelog: v1.0.1...v1.1.1
v1.0.1
Intermediate release to fix #140
What's Changed
- doc: Fix asset links by @elementbound in #133
- fix: Problems with multiplayer-simple example by @zibetnu in #134
- fix: Problems with multiplayer-netfox example by @zibetnu in #135
- doc: Add contribution notes by @elementbound in #139
- fix: Addon installed to project root by @elementbound in #143
New Contributors
Full Changelog: v1.0.0...v1.0.1
v1.0.0
The first major release of netfox! Includes:
- A complete documentation site
- Time synchronization
- A custom network tick loop
- Convenience signals
- State interpolation between ticks
- Rollback implementation
- noray integration
- Network input base class
- Network weapon base class

