Files
tactical-shooter/assets/kenney-fps/objects/platform_large_grass.tscn
T
shawn 012d038025 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
2026-07-03 17:13:36 -04:00

25 lines
6.3 KiB
Plaintext

[gd_scene load_steps=5 format=3 uid="uid://bvx5cvigosg0s"]
[ext_resource type="PackedScene" uid="uid://k065rxqtim8f" path="res://models/platform-large-grass.glb" id="1_aqto8"]
[ext_resource type="PackedScene" uid="uid://beaer7x07yif6" path="res://models/grass.glb" id="2_o8lrl"]
[ext_resource type="PackedScene" uid="uid://das5fosq6auoe" path="res://models/grass-small.glb" id="3_m33kb"]
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_k56ha"]
data = PackedVector3Array(2.5, 0.2, 2.3, 2.4, 0, 2.22, 2.355, 0, 2.355, 2.355, 0, 2.355, 2.45, 0.2, 2.45, 2.5, 0.2, 2.3, 2.45, 0.5, 2.45, 2.5, 0.5, 2.3, 2.5, 0.2, 2.3, 2.5, 0.2, 2.3, 2.45, 0.2, 2.45, 2.45, 0.5, 2.45, 2.45, 0.2, 2.45, 2.355, 0, 2.355, 2.22, 0, 2.4, 2.22, 0, 2.4, 2.3, 0.2, 2.5, 2.45, 0.2, 2.45, 2.45, 0.5, 2.45, 2.45, 0.2, 2.45, 2.3, 0.2, 2.5, 2.3, 0.2, 2.5, 2.3, 0.5, 2.5, 2.45, 0.5, 2.45, 2.3, 0.5, 2.5, 2.3, 0.2, 2.5, -2.3, 0.2, 2.5, -2.3, 0.2, 2.5, -2.3, 0.5, 2.5, 2.3, 0.5, 2.5, -2.45, 0.2, 2.45, -2.5, 0.2, 2.3, -2.5, 0.5, 2.3, -2.5, 0.5, 2.3, -2.45, 0.5, 2.45, -2.45, 0.2, 2.45, -2.3, 0.2, 2.5, -2.22, 0, 2.4, -2.355, 0, 2.355, -2.355, 0, 2.355, -2.45, 0.2, 2.45, -2.3, 0.2, 2.5, -2.3, 0.5, 2.5, -2.3, 0.2, 2.5, -2.45, 0.2, 2.45, -2.45, 0.2, 2.45, -2.45, 0.5, 2.45, -2.3, 0.5, 2.5, 2.3, 0.2, 2.5, 2.22, 0, 2.4, -2.22, 0, 2.4, -2.22, 0, 2.4, -2.3, 0.2, 2.5, 2.3, 0.2, 2.5, -2.355, 0, 2.355, -2.4, 0, 2.22, -2.5, 0.2, 2.3, -2.5, 0.2, 2.3, -2.45, 0.2, 2.45, -2.355, 0, 2.355, -2.45, 0.5, -2.45, -2.45, 0.2, -2.45, -2.3, 0.2, -2.5, -2.3, 0.2, -2.5, -2.3, 0.5, -2.5, -2.45, 0.5, -2.45, 2.355, 0, 2.355, 2.4, 0, 2.22, 2.4, 0, -2.22, 2.4, 0, -2.22, 2.355, 0, -2.355, 2.355, 0, 2.355, 2.355, 0, -2.355, 2.22, 0, 2.4, 2.355, 0, 2.355, 2.355, 0, -2.355, 2.22, 0, -2.4, 2.22, 0, 2.4, 2.22, 0, -2.4, -2.22, 0, 2.4, 2.22, 0, 2.4, 2.22, 0, -2.4, -2.22, 0, -2.4, -2.22, 0, 2.4, -2.22, 0, -2.4, -2.355, 0, -2.355, -2.22, 0, 2.4, -2.355, 0, -2.355, -2.355, 0, 2.355, -2.22, 0, 2.4, -2.355, 0, -2.355, -2.4, 0, -2.22, -2.355, 0, 2.355, -2.4, 0, -2.22, -2.4, 0, 2.22, -2.355, 0, 2.355, -2.355, 0, -2.355, -2.45, 0.2, -2.45, -2.5, 0.2, -2.3, -2.5, 0.2, -2.3, -2.4, 0, -2.22, -2.355, 0, -2.355, 2.5, 0.2, -2.3, 2.45, 0.2, -2.45, 2.355, 0, -2.355, 2.355, 0, -2.355, 2.4, 0, -2.22, 2.5, 0.2, -2.3, -2.3, 0.2, -2.5, -2.22, 0, -2.4, 2.22, 0, -2.4, 2.22, 0, -2.4, 2.3, 0.2, -2.5, -2.3, 0.2, -2.5, 2.5, 0.5, 2.3, 2.5, 0.5, -2.3, 2.5, 0.2, -2.3, 2.5, 0.2, -2.3, 2.5, 0.2, 2.3, 2.5, 0.5, 2.3, 2.5, 0.2, 2.3, 2.5, 0.2, -2.3, 2.4, 0, -2.22, 2.4, 0, -2.22, 2.4, 0, 2.22, 2.5, 0.2, 2.3, 2.3, 0.2, -2.5, 2.22, 0, -2.4, 2.355, 0, -2.355, 2.355, 0, -2.355, 2.45, 0.2, -2.45, 2.3, 0.2, -2.5, -2.5, 0.2, 2.3, -2.5, 0.2, -2.3, -2.5, 0.5, -2.3, -2.5, 0.5, -2.3, -2.5, 0.5, 2.3, -2.5, 0.2, 2.3, -2.5, 0.2, -2.3, -2.45, 0.2, -2.45, -2.45, 0.5, -2.45, -2.45, 0.5, -2.45, -2.5, 0.5, -2.3, -2.5, 0.2, -2.3, 2.3, 0.5, -2.5, 2.3, 0.2, -2.5, 2.45, 0.2, -2.45, 2.45, 0.2, -2.45, 2.45, 0.5, -2.45, 2.3, 0.5, -2.5, 2.5, 0.5, -2.3, 2.45, 0.5, -2.45, 2.45, 0.2, -2.45, 2.45, 0.2, -2.45, 2.5, 0.2, -2.3, 2.5, 0.5, -2.3, -2.45, 0.2, -2.45, -2.355, 0, -2.355, -2.22, 0, -2.4, -2.22, 0, -2.4, -2.3, 0.2, -2.5, -2.45, 0.2, -2.45, -2.4, 0, -2.22, -2.5, 0.2, -2.3, -2.5, 0.2, 2.3, -2.5, 0.2, 2.3, -2.4, 0, 2.22, -2.4, 0, -2.22, -2.3, 0.5, -2.5, -2.3, 0.2, -2.5, 2.3, 0.2, -2.5, 2.3, 0.2, -2.5, 2.3, 0.5, -2.5, -2.3, 0.5, -2.5, 2.5, 0.5, -2.3, 2.5, 0.5, 2.3, 2.45, 0.5, 2.45, 2.45, 0.5, 2.45, 2.45, 0.5, -2.45, 2.5, 0.5, -2.3, 2.45, 0.5, 2.45, 2.3, 0.5, -2.5, 2.45, 0.5, -2.45, 2.45, 0.5, 2.45, 2.3, 0.5, 2.2675, 2.3, 0.5, -2.5, 2.3, 0.5, 2.2675, 2.45, 0.5, 2.45, 2.3, 0.5, 2.5, 2.3, 0.5, 2.5, 2.2919, 0.5, 2.2919, 2.3, 0.5, 2.2675, 2.3, 0.5, 2.5, 2.2675, 0.5, 2.3, 2.2919, 0.5, 2.2919, 2.3, 0.5, 2.2675, 2.3, 0.5, -2.2675, 2.3, 0.5, -2.5, 2.3, 0.5, -2.2675, 2.2919, 0.5, -2.2919, 2.3, 0.5, -2.5, 2.2919, 0.5, -2.2919, 2.2675, 0.5, -2.3, 2.3, 0.5, -2.5, 2.3, 0.5, 2.5, -2.3, 0.5, 2.5, 2.2675, 0.5, 2.3, 2.2675, 0.5, -2.3, -2.3, 0.5, -2.5, 2.3, 0.5, -2.5, -2.3, 0.5, 2.5, -2.2675, 0.5, 2.3, 2.2675, 0.5, 2.3, 2.2675, 0.5, -2.3, -2.2675, 0.5, -2.3, -2.3, 0.5, -2.5, -2.2675, 0.5, -2.3, -2.2919, 0.5, -2.2919, -2.3, 0.5, -2.5, -2.2919, 0.5, -2.2919, -2.3, 0.5, -2.2675, -2.3, 0.5, -2.5, -2.3, 0.5, 2.5, -2.2919, 0.5, 2.2919, -2.2675, 0.5, 2.3, -2.3, 0.5, -2.2675, -2.45, 0.5, -2.45, -2.3, 0.5, -2.5, -2.3, 0.5, 2.5, -2.3, 0.5, 2.2675, -2.2919, 0.5, 2.2919, -2.3, 0.5, -2.2675, -2.3, 0.5, 2.2675, -2.45, 0.5, -2.45, -2.3, 0.5, 2.2675, -2.3, 0.5, 2.5, -2.45, 0.5, -2.45, -2.3, 0.5, 2.5, -2.45, 0.5, 2.45, -2.45, 0.5, -2.45, -2.45, 0.5, 2.45, -2.5, 0.5, -2.3, -2.45, 0.5, -2.45, -2.45, 0.5, 2.45, -2.5, 0.5, 2.3, -2.5, 0.5, -2.3, 2.3, 0.5, -2.2675, 2.3, 0.5, 2.2675, 2.2919, 0.5, 2.2919, 2.2919, 0.5, 2.2919, 2.2919, 0.5, -2.2919, 2.3, 0.5, -2.2675, 2.2919, 0.5, 2.2919, 2.2675, 0.5, 2.3, 2.2919, 0.5, -2.2919, 2.2675, 0.5, 2.3, 2.2675, 0.5, -2.3, 2.2919, 0.5, -2.2919, 2.2675, 0.5, 2.3, 2.1, 0.5, -2.1, 2.2675, 0.5, -2.3, 2.1, 0.5, -2.1, -2.2675, 0.5, -2.3, 2.2675, 0.5, -2.3, 2.1, 0.5, 2.1, 2.1, 0.5, -2.1, 2.2675, 0.5, 2.3, 2.1, 0.5, -2.1, -2.1, 0.5, -2.1, -2.2675, 0.5, -2.3, 2.2675, 0.5, 2.3, -2.2675, 0.5, 2.3, 2.1, 0.5, 2.1, -2.1, 0.5, -2.1, -2.1, 0.5, 2.1, -2.2675, 0.5, -2.3, -2.2675, 0.5, 2.3, -2.1, 0.5, 2.1, 2.1, 0.5, 2.1, -2.2675, 0.5, 2.3, -2.2675, 0.5, -2.3, -2.1, 0.5, 2.1, -2.2675, 0.5, 2.3, -2.2919, 0.5, -2.2919, -2.2675, 0.5, -2.3, -2.2675, 0.5, 2.3, -2.2919, 0.5, 2.2919, -2.2919, 0.5, -2.2919, -2.2919, 0.5, 2.2919, -2.3, 0.5, -2.2675, -2.2919, 0.5, -2.2919, -2.2919, 0.5, 2.2919, -2.3, 0.5, 2.2675, -2.3, 0.5, -2.2675, -2.1, 0.5, -2.1, 2.1, 0.5, -2.1, 2.1, 0.5, 2.1, 2.1, 0.5, 2.1, -2.1, 0.5, 2.1, -2.1, 0.5, -2.1)
[node name="platform-large-grass" instance=ExtResource("1_aqto8")]
[node name="StaticBody3D" type="StaticBody3D" parent="platform-large-grass2" index="0"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="platform-large-grass2/StaticBody3D" index="0"]
shape = SubResource("ConcavePolygonShape3D_k56ha")
[node name="grass" parent="." index="1" instance=ExtResource("2_o8lrl")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.57788, 0.5, 1.72158)
[node name="grass-small" parent="." index="2" instance=ExtResource("3_m33kb")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.88646, 0.5, -1.59607)
[node name="grass2" parent="." index="3" instance=ExtResource("2_o8lrl")]
transform = Transform3D(0.782521, 0, 0.622624, 0, 1, 0, -0.622624, 0, 0.782521, 1.46331, 0.5, -1.52249)