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
@@ -59,6 +59,20 @@ func _load_weapon_models():
add_child(_grenade_model)
_grenade_model.hide()
# Gun model — replace placeholder box with Kenney blaster
var gun_scene := load("res://assets/kenney/models/blaster.glb") as PackedScene
if gun_scene:
var blaster = gun_scene.instantiate()
blaster.scale = Vector3(0.003, 0.003, 0.003)
blaster.position = Vector3(0.09, -0.18, -0.3)
blaster.rotation_degrees = Vector3(-90, 180, 0)
add_child(blaster)
# Hide the old box mesh, use blaster instead
if _gun_model:
_gun_model.hide()
_gun_model = blaster
_gun_model.hide()
# Knife sound
var slash_stream := load("res://examples/multiplayer-fps/sounds/knife/knife_slash1.wav")
if slash_stream: