Files
tactical-shooter/docs/netfox/nodes/tick-interpolator.md
T
shawn b0c83af092 Fresh start: replace with naxIO/netfox-cs-sample foundation
Complete replacement of the tactical-shooter project with the
netfox-cs-sample (MIT) — a CS 1.6 inspired multiplayer FPS built
with Godot 4 and netfox.

## What's new
- Full CS-style gameplay: teams (T/CT), rounds, economy, buy menu
- 6 weapons: Knife, Glock, USP, AK-47, M4A1, AWP
- Bomb plant/defuse with 2 bombsites
- Flashbang & smoke grenades
- Proper netfox rollback netcode at 64 tick
- Network popup UI for host/join
- HUD, crosshair, round timer, scoreboard
- All netfox singletons registered as autoloads (works in exported builds)

## Architecture
- Listen-server (host from client, no dedicated server binary)
- Multiplayer-fps game lives at examples/multiplayer-fps/
- Netfox addons registered as autoloads for exported build compat
- Godot 4.7 with Forward+ renderer

## Removed
- Old headless-server architecture (client_main, server_main, player.gd, etc.)
- Custom netfox bootstrap with ENet fallback
- Old ChaffGames FPS template (2,420 lines, 844 KB)
- SimulationServer GDExtension stub
- Godot-jolt physics (netfox sample uses default Godot physics)
- Duplicate weapon_data.gd, anti_cheat.gd, round_manager.gd, etc.
- Server browser API Python venv (87 MB)
- test_range map and modular assets

## Preserved
- Git history
- Server config at config/default_server_config.cfg
- Windows export preset
- Build directory (gitignored)

Co-authored-by: naxIO <naxIO@users.noreply.github.com>
2026-07-02 20:55:20 -04:00

63 lines
2.3 KiB
Markdown

# TickInterpolator
Interpolates between network ticks to smooth out motion.
Uses [Interpolators] under the hood to support various data types. To read more
on best practices, see [Interpolation caveats].
## Configuring interpolation
To use *TickInterpolator*, add it as a child to the target node, specify the
root node, and configure which properties to interpolate:
![TickInterpolator configuration](../assets/tick-interpolator-config.png)
*Root* specifies the root node for resolving *Properties*. Best practice
dictates to add *TickInterpolator* under its target, so *Root* will most often
be the *TickInterpolator*'s parent node.
*Properties* specify which properties to interpolate. See [Property paths] on
how to specify these values.
*Record First State* will make *TickInterpolator* take a snapshot when the Node
is instantiated. This snapshot will be used for interpolation, instead of
waiting for the next network tick. Useful for objects which start moving
instantly upon entering the scene tree, like projectiles.
*Enable Recording* toggles automatic state recording. When enabled,
*TickInterpolator* will take a new snapshot after each network tick loop and
interpolate towards that. Disabling this will require you to manually call
`push_state()` whenever the *properties* are updated.
## Sudden changes
When a node makes a sudden change, like teleporting from one place to another,
interpolation may not be desired.
Call `teleport()` in these cases to avoid interpolation and just jump to the
current state. Interpolation will resume after the current state.
Example:
```gdscript
func _tick(tick, delta):
# Respawn after a while
if _tick == respawn_tick:
# Jump to spawn point, without interpolation
position = spawn_position
$TickInterpolator.teleport()
```
## Changing configuration
*TickInterpolator* has to do some setup work whenever the interpolated
properties change, e.g. when a new property needs to be interpolated.
By default, this work is done upon instantiation. If you need to change
interpolated properties during runtime, make sure to call `process_settings()`,
otherwise *TickInterpolator* won't apply the changes.
[Interpolators]: ../guides/interpolators.md
[Interpolation caveats]: ../tutorials/interpolation-caveats.md
[Property paths]: ../guides/property-paths.md