Integrate Kenney Starter Kit FPS assets + comprehensive test suite

Assets (CC0 license):
- 3D models: Blaster gun, walls, platforms, grass, clouds, enemy
- Sounds: blaster fire, impacts, footsteps, jumps, weapon change
- Sprites: crosshair, hit marker, muzzle flash, skybox, blob shadow
- Font: Lilita One

Code changes:
- weapon_manager.gd: load blaster.glb as gun model (replaces box mesh)
- player.tscn: use Kenney sounds (blaster.ogg, enemy_hurt/destroy) and crosshair

Test suite (100 unit tests + 4 integration scenarios):
- weapon_data.gd: 27 tests — all 6 weapons every stat verified
- economy.gd: 19 tests — constants, loss streak, buy thresholds
- bomb.gd: 15 tests — state machine, timing constants
- round_manager.gd: 10 tests — win conditions, elimination logic
- team_manager.gd: 8 tests — auto-balance, team assignment
- headless_test_bot.gd: integration bot with movement/idle/rounds scenarios
- run_multi_bot.sh: multi-client launcher
This commit is contained in:
2026-07-03 17:13:36 -04:00
parent 597d6dde2d
commit 012d038025
176 changed files with 4653 additions and 19 deletions
@@ -4,7 +4,7 @@
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/player.gd" id="1_mk8qw"]
[ext_resource type="Script" path="res://addons/netfox/tick-interpolator.gd" id="2_3rc26"]
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/weapon_manager.gd" id="3_4j0gy"]
[ext_resource type="AudioStream" uid="uid://cope814m1d7p6" path="res://examples/multiplayer-fps/sounds/fire.mp3" id="5_14ltm"]
[ext_resource type="AudioStream" uid="uid://cope814m1d7p6" path="res://assets/kenney/sounds/blaster.ogg" id="5_14ltm"]
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/bullethole.gd" id="6_f1qm8"]
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/ui/projection3d.gd" id="6_sv41w"]
[ext_resource type="Texture2D" uid="uid://b8r41bt6ft8jt" path="res://examples/multiplayer-fps/textures/bullet_hole.png" id="7_sxhbg"]
@@ -12,10 +12,10 @@
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/player-input.gd" id="10_50d5g"]
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/ui/window-size-connector.gd" id="13_mlcnx"]
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/ui/crosshair.gd" id="14_npl66"]
[ext_resource type="Texture2D" uid="uid://b66gbhylc33yy" path="res://examples/multiplayer-fps/textures/crosshair.png" id="14_qqmle"]
[ext_resource type="Texture2D" uid="uid://b66gbhylc33yy" path="res://assets/kenney/sprites/crosshair.png" id="14_qqmle"]
[ext_resource type="Script" path="res://examples/multiplayer-fps/scripts/ui/health-progress-bar.gd" id="17_ghjct"]
[ext_resource type="AudioStream" uid="uid://q7ql86p7flj" path="res://examples/multiplayer-fps/sounds/hit.wav" id="20_e2bcn"]
[ext_resource type="AudioStream" uid="uid://15pyqe2uw4s3" path="res://examples/multiplayer-fps/sounds/death.wav" id="21_ogjhm"]
[ext_resource type="AudioStream" uid="uid://q7ql86p7flj" path="res://assets/kenney/sounds/enemy_hurt.ogg" id="20_e2bcn"]
[ext_resource type="AudioStream" uid="uid://15pyqe2uw4s3" path="res://assets/kenney/sounds/enemy_destroy.ogg" id="21_ogjhm"]
[sub_resource type="BoxMesh" id="BoxMesh_qmeb2"]
size = Vector3(0.4, 0.25, 0.5)