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
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://coy8ilhhws625"
path="res://.godot/imported/blaster.ogg-d3e026ec73cb5863a8cf9d03be3d212d.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/blaster.ogg"
dest_files=["res://.godot/imported/blaster.ogg-d3e026ec73cb5863a8cf9d03be3d212d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://3eygi220lt35"
path="res://.godot/imported/blaster_repeater.ogg-2ecef535eb526b913bdb5771fb6377c0.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/blaster_repeater.ogg"
dest_files=["res://.godot/imported/blaster_repeater.ogg-2ecef535eb526b913bdb5771fb6377c0.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://ds7ewtniew0v1"
path="res://.godot/imported/enemy_attack.ogg-43c31e7dd351ce5293e0648f81efd3a7.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/enemy_attack.ogg"
dest_files=["res://.godot/imported/enemy_attack.ogg-43c31e7dd351ce5293e0648f81efd3a7.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://c78bqkavn8d03"
path="res://.godot/imported/enemy_destroy.ogg-60b675ad05263909287e021dce612f09.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/enemy_destroy.ogg"
dest_files=["res://.godot/imported/enemy_destroy.ogg-60b675ad05263909287e021dce612f09.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://doqabrtawuom1"
path="res://.godot/imported/enemy_hurt.ogg-5be2f1ae18e1b9d67be4430a38ea25f5.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/enemy_hurt.ogg"
dest_files=["res://.godot/imported/enemy_hurt.ogg-5be2f1ae18e1b9d67be4430a38ea25f5.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bec5ql7h8n0se"
path="res://.godot/imported/jump_a.ogg-1551247b3d59cf4f88ae010135c8131f.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/jump_a.ogg"
dest_files=["res://.godot/imported/jump_a.ogg-1551247b3d59cf4f88ae010135c8131f.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://drqt31l50nlrb"
path="res://.godot/imported/jump_b.ogg-838a02d07c99f91b281378cef29a7154.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/jump_b.ogg"
dest_files=["res://.godot/imported/jump_b.ogg-838a02d07c99f91b281378cef29a7154.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dk47wp6fdiu7"
path="res://.godot/imported/jump_c.ogg-3ac63dadb9b6f4ee201643b709d74c94.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/jump_c.ogg"
dest_files=["res://.godot/imported/jump_c.ogg-3ac63dadb9b6f4ee201643b709d74c94.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cspiy48yt8iwq"
path="res://.godot/imported/land.ogg-cca217f86e934945bd0611a3e201b213.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/land.ogg"
dest_files=["res://.godot/imported/land.ogg-cca217f86e934945bd0611a3e201b213.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://b6iufbjbfdfvi"
path="res://.godot/imported/walking.ogg-4022b62660deadb239ef7f53462c91a3.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/walking.ogg"
dest_files=["res://.godot/imported/walking.ogg-4022b62660deadb239ef7f53462c91a3.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cmuvb47geyclr"
path="res://.godot/imported/weapon_change.ogg-b690b85b69f065fba14d5a8e4ad10066.oggvorbisstr"
[deps]
source_file="res://assets/kenney/sounds/weapon_change.ogg"
dest_files=["res://.godot/imported/weapon_change.ogg-b690b85b69f065fba14d5a8e4ad10066.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4