shawn
82216bfa64
fix: Windows client compile errors — get_world_3d on Node, array type mismatch, null plugin guard, maps format
2026-07-01 21:38:07 -04:00
shawn
f20d532add
t_p1_round: Add round/match lifecycle system (RoundManager)
...
- New server/scripts/round/round_manager.gd with:
- RoundPhase enum (WARMUP, PREP, LIVE, POST)
- Round life cycle: warmup -> prep (15s) -> live (105s) -> post (8s)
- Team elimination detection using entity->peer->team mappings
- Time-expired round ending (default: CT wins)
- Economy hooks: win money (250), loss money (900 escalating to 900), kill bonus (00)
- All requested signals: round_phase_changed, round_started, round_ended, match_point, warmup_ended, round_economy_data
- Updated GameServer:
- Creates and wires RoundManager in _ready()
- Connects DamageProcessor.player_killed -> round tracking + elimination detection
- Added peer_to_entity mapping for backwards entity lookup
- Added RCON command handler (_on_rcon_command) for start_match/end_round
- Updated RCON command handler:
- Added start_match and end_round to dispatch list and help text
2026-07-01 20:30:01 -04:00
shawn
9ea98aa7b8
Phase 7: Windows client export, preset fix, code fixes
...
- Fix: export_presets.cfg — platform='Windows Desktop' (not 'Windows'), Windows as [preset.0]
- Fix: plugin_manager.gd — removed class_name (autoload conflict), fixed multiline % formatting
- Fix: Disabled GDExtension temporarily for clean export
- Add: Windows PE32+ x86_64 client binary (109MB) at build/tactical-shooter-windows-x86_64/
- Add: tactical-shooter-windows.zip (portable zip package)
- Build: Linux server binary (78MB) rebuilt
2026-07-01 19:47:12 -04:00
shawn
e385eae0f5
feat: performance budget profiling setup
...
- docs/performance-budget.md: 60fps/2GB VRAM budget with CPU, GPU,
memory, and draw-call targets (P95<16.6ms, P99<50ms)
- scripts/profiling/: SceneTree + Node profilers, test scenes
- scripts/generate_occluders.gd: auto-generate OccluderInstance3D
from CSG wall pieces (128^3 voxel occlusion culling)
- scripts/convert_csg_to_mesh.gd: CSG->StaticMesh baker with LOD
slots (LOD1@15m, LOD2@30m)
- project.godot: occlusion culling + LOD settings enabled
- modular scene UV2 data from lightmapping pass
- rcon_command_handler.gd conflict resolved (kept upstream plugin cmd)
- Fixed profiler_node.gd warmup frame bug (60 frames, not 3)
- Fixed convert_csg_to_mesh.gd LOD API (add_lod + distance)
2026-07-01 19:01:03 -04:00
shawn
16e062c739
build: baked lighting pass on kit_demo test map
...
Restructured kit_demo.tscn from linear demo to enclosed 5.12x5.12 room:
- 2x2 floor tiles, 8 wall segments (including doorway + window)
- Pillar at room center, beam overhead, accent panels
- West/east walls rotated 90° Y for proper enclosure
Lighting infrastructure:
- WorldEnvironment with ambient light
- DirectionalLight3D (sun key light, 45° angle, shadows enabled)
- OmniLight3D (warm interior fill light)
- ReflectionProbe (box projection, room-sized extents)
- LightmapGI (Quality=High, bounces=3, denoiser=true)
- Tool script prints bake status in editor
Scripts:
- bake_lighting.gd: validates LightmapGI config from CLI
- validate_scene.gd: full scene validation (17 checks, all pass)
Note: Godot 4.7 removed LightmapGI.bake() from runtime API.
Baking must be done in the editor: select LightmapGI node > Bake Lightmap.
2026-07-01 00:28:55 -04:00
shawn
d631ff784a
build: baked lighting pass on kit_demo test map
...
- Restructured kit_demo.tscn from linear demo to enclosed 5.12x5.12 room
with walls, floor tiles, pillar, beam, doorway, window
- Added WorldEnvironment with ProceduralSky for ambient lighting
- Added DirectionalLight3D (sun key light, 45° angle, shadows enabled)
- Added OmniLight3D (warm interior fill light)
- Added ReflectionProbe for interior specular reflections
(box projection, room-sized extents)
- Added LightmapGI with balanced quality settings
(bounces=3, texel_scale=1.0, max_texture_size=2048, denoiser=true)
- Added tool script (kit_demo.gd) that prints bake status in editor
- Added bake_lighting.gd CLI bake script (requires GPU-enabled instance)
- Updated project.godot with reflection atlas and shadow map quality settings
Headless baking note: Godot's standard editor build requires a GPU/display
for LightmapGI.bake(). Open the scene in the Godot editor and click 'Bake
Lightmap' on the LightmapGI node to generate the baked lightmap data.
2026-07-01 00:10:19 -04:00