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
shawn
a69c60ce85
Fix Windows build: use entry.tscn as main scene, add fallback input handling
...
- Changed run/main_scene to entry.tscn (smart bootstrap detects headless vs display)
- client_main.gd now uses player.tscn instead of old FPS template
- Added mouse look (click-to-capture, escape-to-release) to player.gd fallback path
- Added _gather() call to player.gd fallback _physics_process() so PlayerNetInput
is populated even without NetworkTime singleton (exported builds)
- Re-exported Windows build with same tag v0.1.0-windows
2026-07-02 18:17:05 -04:00
shawn
926446e5cf
P7.8: Port FPS controller to netfox BaseNetInput pattern
...
- FPSCharacterController: removed SimulationServer dependency, added
_rollback_tick() with acceleration-based CharacterBody3D movement,
gravity, jump, crouch/sprint speed. Kept mouse look, crouch lerp,
sprint/crouch toggle, _move_local() standalone fallback.
- Player: extends FPSCharacterController (CharacterBody3D). Added
authority-guarded _rollback_tick that delegates to super for server
and local client prediction. TickInterpolator created dynamically
(avoids headless class_name parse errors). PlayerNetInput child
wired via existing RollbackSynchronizer input_properties.
- player.tscn: CharacterBody3D root with FpsCamera, CollisionShape3D,
PlayerNetInput children. TickInterpolator created in code.
- client_main.gd: _spawn_local_player() creates FPS player node with
first-person camera for own peer. _spawn_remote_player() removes
FpsCamera for remote players.
- fps_camera.gd: duck-typed _controller (Node) instead of class_name
cast for headless safety. Fixed type inference warnings.
Also includes parent task P7.5-P7.7 changes:
- project.godot: main_scene -> server_main.tscn
- network_manager.gd: Chan enum -> raw channel ints
- server_main.gd: deferred ServerConfig load, GameServer load()
- game_server.gd: commented out dev deps for headless compilation
2026-07-02 17:45:03 -04:00
shawn
e7299b17e9
Phase 7: netfox + godot-jolt stack upgrade
...
Stack installed:
- netfox v1.35.3 (core + extras + noray + internals)
- godot-jolt v0.16.0-stable
Architecture:
- Server: ENet transport (works headless, no netfox deps)
- Client/Editor: netfox rollback (RollbackSynchronizer, TickInterpolator)
New/modified:
- docs/migration-netfox-plan.md — migration architecture
- scripts/network/network_manager.gd — netfox-aware ENet fallback
- scripts/network/player.gd — clean base player
- client/characters/player_netfox.gd — rollback player w/ WeaponManager
- client/characters/input/player_net_input.gd — BaseNetInput subclass
- client/characters/character/fps_character_controller.gd — netfox input feed
- client/weapons/ — weapon data, registry, TacticalWeaponHitscan, WeaponManager
- client/scripts/round_replicator.gd — client-side round state bridge
- server/scripts/round_manager.gd — improved state machine
- server/scripts/plugin_api/plugin_manager.gd — refined plugin system
- config: enemy_tag, ally_tag for meatball targeting
Removed: old C++ SimulationServer GDExtension (replaced by netfox rollback)
2026-07-02 17:39:22 -04:00
shawn
ad48f38ca5
feat: integrate ChaffGames FPS template as local player controller
...
Replaces the overhead box-mesh view with a full FPS character:
- mouse look, WASD movement, jump (Space), crouch (C), sprint (Shift), lean (Q/E)
- 6 weapons (LMB shoot, R reload, scroll switch, F melee, G drop)
- Crosshair HUD, ammo counter, sprint bar
- Client sends position to server at 20Hz for multiplayer visibility
- Server broadcasts positions to all peers
- Remote players shown as boxes (placeholder)
source: https://godotengine.org/asset-library/asset/2652 (MIT license)
2026-07-02 00:26:45 -04:00
shawn
d060ac449d
fix: suppress 3 benign startup warnings on Windows client
...
- Create missing server/plugins/ dir with .gdignore (stops PluginManager warning)
- Create config/default_server_config.cfg (stops ServerConfig error)
- Reorder light look_at after add_child (stops 'not in tree' warning)
- Switch rendering_method from opengl3 to forward_plus (RTX 2080 Vulkan works fine; gray screen was server-scene issue not OpenGL)
2026-07-02 00:05:27 -04:00
shawn
20ca43f928
fix: add smart entry scene (client vs server via headless detection)
2026-07-01 21:44:14 -04:00
shawn
d5098c61e1
fix: switch to OpenGL 3 renderer for Windows compatibility (gray screen fix)
2026-07-01 21:16:26 -04:00
shawn
159c554a86
t_p6_api: build plugin scripting system
...
- Add PluginBase (plugin_base.gd) — abstract base class with 12 virtual hooks
- Add PluginManifest (plugin_manifest.gd) — custom Resource for plugin metadata
- Add PluginManager (plugin_manager.gd) — autoload singleton: directory scan,
hook dispatch, lifecycle (load/unload/reload/rescan), cvar integration
- Add hello_world example plugin with all hooks demonstrating usage
- Register PluginManager autoload in project.godot
- Extend rcon_command_handler.gd with 'plugin' subcommand (list/load/unload/
reload/info/rescan) delegating to PluginManager
2026-07-01 18:36:23 -04:00