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
+124
View File
@@ -0,0 +1,124 @@
# Attributions
This document outlines the sources of the sound effects used. Thank you all for
the freely usable sound effects!
## Boom
[Source](https://freesound.org/people/studiomandragore/sounds/401630/)
Played whenever a bomb hits something.
Files:
* boom1.wav
* boom2.wav
* boom3.wav
All taken from *"Booms.wav"* by [studiomandragore], under the [Creative Commons
0] license.
## Whoosh
[Source](https://freesound.org/people/qubodup/sounds/60013/)
Played whenever a bomb is thrown.
Files:
* whoosh.wav
*"Whoosh"* by [qubodup], under the [Creative Commons 0] license.
## Blip Wave
[Source](https://freesound.org/people/Breviceps/sounds/452998/)
Played whenever a player picks up the Speed Powerup.
Files:
* blipwave.wav
*"Blip Wave"* by [Breviceps], under the [Creative Commons 0] license.
## Glitch SFX
[Source](https://freesound.org/people/Dymewiz/sounds/109026/)
Played whenever a player picks up the Mass Powerup.
Files:
* glitch1.wav
* glitch2.wav
All taken from *"glitch SFX_065.wav"* by [Dymewiz], under the [Attribution 3.0]
license. A fade-out effect was applied on the sound bits.
## Bomb fall
[Source](https://freesound.org/people/Johnnyfarmer/sounds/209768/)
Played whenever a player picks up the Repulse Powerup.
Files:
* repulse1.wav
* repulse2.wav
* repulse3.wav
All taken from *"Bomb Fall"* by [Johnnyfarmer], under the [Creative Commons 0]
license.
## Falling
[Source](https://freesound.org/people/oganesson/sounds/555015/)
Played whenever a player falls down into the abyss.
Files:
* fall1.wav
*"Falling"* by [oganesson], under the [Creative Commons 0] license.
## fall.ogg
[Source](https://freesound.org/people/silversatyr/sounds/113365/)
Played whenever a player falls down into the abyss.
Files:
* fall2.wav
*"fall.ogg"* by [silversatyr], under the [Attribution 3.0] license. The file was
trimmed on both ends.
## Slide Whistle, Descending, A.wav
[Source](https://freesound.org/people/InspectorJ/sounds/402581/)
Played whenever a player falls down into the abyss.
Files:
* fall3.wav
*"Slide Whistle, Descending, A.wav"* by [InspectorJ], under the [Attribution
4.0] license. No changes were made to the original sound effect.
[studiomandragore]: https://freesound.org/people/studiomandragore/
[qubodup]: https://freesound.org/people/qubodup/
[Breviceps]: https://freesound.org/people/Breviceps/sounds/452998/
[Dymewiz]: https://freesound.org/people/Dymewiz/
[Johnnyfarmer]: https://freesound.org/people/Johnnyfarmer/
[oganesson]: https://freesound.org/people/oganesson/
[silversatyr]: https://freesound.org/people/silversatyr/
[InspectorJ]: https://freesound.org/people/InspectorJ/
[Creative Commons 0]: https://creativecommons.org/publicdomain/zero/1.0/
[Attribution 3.0]: https://creativecommons.org/licenses/by/3.0/
[Attribution 4.0]: https://creativecommons.org/licenses/by/4.0/
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://baytcuptor78h"
path="res://.godot/imported/blipwave.wav-7331cd1cf02dab8cb660d37457999844.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/blipwave.wav"
dest_files=["res://.godot/imported/blipwave.wav-7331cd1cf02dab8cb660d37457999844.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cuu7355mjw0qm"
path="res://.godot/imported/boom1.wav-886e472233df263b1e62a5dac289a7ec.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/boom1.wav"
dest_files=["res://.godot/imported/boom1.wav-886e472233df263b1e62a5dac289a7ec.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dk44nxlwr3m1o"
path="res://.godot/imported/boom2.wav-f4886bb413d32ec6cab7d78b5e1799f7.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/boom2.wav"
dest_files=["res://.godot/imported/boom2.wav-f4886bb413d32ec6cab7d78b5e1799f7.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://yyc2x2137nqa"
path="res://.godot/imported/boom3.wav-c542669b336823d494104a7760de97c3.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/boom3.wav"
dest_files=["res://.godot/imported/boom3.wav-c542669b336823d494104a7760de97c3.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cih2i8xa2v2is"
path="res://.godot/imported/fall1.wav-a84df2ff99962b221cc891051e583770.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/fall1.wav"
dest_files=["res://.godot/imported/fall1.wav-a84df2ff99962b221cc891051e583770.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://4oilc8k83mmt"
path="res://.godot/imported/fall2.wav-6e44e1350c453f00bd461235a3ed3e18.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/fall2.wav"
dest_files=["res://.godot/imported/fall2.wav-6e44e1350c453f00bd461235a3ed3e18.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cegpnj82f4gio"
path="res://.godot/imported/fall3.wav-a35d8b2580f14fe0787cbec6cfdcffb0.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/fall3.wav"
dest_files=["res://.godot/imported/fall3.wav-a35d8b2580f14fe0787cbec6cfdcffb0.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cajfyvodmjy8i"
path="res://.godot/imported/glitch1.wav-71da56b8a051a21c5295fb69f825bd79.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/glitch1.wav"
dest_files=["res://.godot/imported/glitch1.wav-71da56b8a051a21c5295fb69f825bd79.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://c708geohjw7ci"
path="res://.godot/imported/glitch2.wav-e560c80e451b78e9422d8ffdfa300fdf.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/glitch2.wav"
dest_files=["res://.godot/imported/glitch2.wav-e560c80e451b78e9422d8ffdfa300fdf.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cpqwch1ruf417"
path="res://.godot/imported/repulse1.wav-1f4570394e40625c236284a70d57ee3d.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/repulse1.wav"
dest_files=["res://.godot/imported/repulse1.wav-1f4570394e40625c236284a70d57ee3d.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://djx8bf0n5hpjd"
path="res://.godot/imported/repulse2.wav-0830b46c83a2ec05429b91e2d0459525.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/repulse2.wav"
dest_files=["res://.godot/imported/repulse2.wav-0830b46c83a2ec05429b91e2d0459525.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b1l44piqung8p"
path="res://.godot/imported/repulse3.wav-8b9477174a1bc5d15fa6f9cc2ddc3942.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/repulse3.wav"
dest_files=["res://.godot/imported/repulse3.wav-8b9477174a1bc5d15fa6f9cc2ddc3942.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b03phi3tfl21k"
path="res://.godot/imported/whoosh.wav-3534f545bbb039cf26666f26e50899a0.sample"
[deps]
source_file="res://examples/forest-brawl/sounds/whoosh.wav"
dest_files=["res://.godot/imported/whoosh.wav-3534f545bbb039cf26666f26e50899a0.sample"]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0