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>
This commit is contained in:
2026-07-02 20:55:20 -04:00
parent ce39b237c3
commit b0c83af092
4416 changed files with 57418 additions and 902676 deletions
@@ -0,0 +1,26 @@
# Using RollbackSynchronizer without inputs
In certain cases, a component needs to participate in rollback, but is not
driven by any input. One example could be more complex NPCs. These need to be
part of the rollback tick loop, but they are not controlled by any player.
In these cases, you can use RollbackSynchronizer as described earlier in
[Responsive player movement], but without the input. This means not needing an
input node, and not configuring any input properties. State properties still
need to be configured, and the gameplay logic must be implemented in
`_rollback_tick()`.
!!!tip
An example project featuring a simple NPC using an inputless
RollbackSynchronizer can be found at [examples/rollback-npc].
Under the hood, *netfox* will simulate these inputless nodes whenever it
encounters a tick that has no state for the inputless node. On the server, this
means inputless nodes will be simulated only for new ticks. On clients, this
means never being simulated, since all state is received from the server. If
prediction is enabled, clients will simulate inputless nodes for ticks they
don't have data from the server.
[Responsive player movement]: ./responsive-player-movement.md
[examples/rollback-npc]: https://github.com/foxssake/netfox/tree/main/examples/rollback-npc