qa: walkable demo fixed — terrain collision root cause, spawn, and a scripted QA pass #7

Closed
zwitschi wants to merge 13 commits from qa-input-collision-fix-0.1.0 into main
pull from: qa-input-collision-fix-0.1.0
13 Commits
Author SHA1 Message Date
zwitschi dd391ed6ff memory: reset-to-midair bug and the -qaselftest harness 2026-11-08 11:54:32 +01:00
zwitschi cdfb24a2b1 qa: swept ground transect closes the traversal release check
84 samples across the north sidewalk, carriageway and south sidewalk
(X -14900..-9420) come back with 0 holes and ground Z 317..395, so the
block is traversable rather than merely spawnable.

TODO: sidewalks/collision item now records the collision state and what
is genuinely left (kerb radii, aprons, kerb-height assumption); the
traversal release check is ticked with the measurement.
2026-11-08 11:54:25 +01:00
zwitschi 7930be38bb qa: scripted walk/reset/pause self-test, plus the reset bug it found
The three behaviours listed as "needs a human at the keyboard" are now
verifiable headlessly with -qaselftest (core ticker, so pausing the game
does not freeze the test that proves pause works):

  walk   761 cm in 2 s, Z steady 456   PASS
  reset  0 cm from spawn               PASS
  pause  IsGamePaused() = 1            PASS
  unpause IsGamePaused() = 0           PASS

Writing the test found a real bug: ResetToStart() teleported to a
StartLocation captured in BeginPlay, which is the mid-air PlayerStart
(Z 600) rather than the ground (Z 456), so every reset dropped the
player 1.4 m back into the air. StartLocation is now captured on the
first grounded frame.
2026-11-08 11:53:02 +01:00
zwitschi 055944fd33 docs: record terrain collision root cause; point Gameplay at the QA branch 2026-11-08 11:30:47 +01:00
zwitschi 2bb1e74814 fix(collision): terrain bbox proxy buried the whole street
The player never fell through - it stood on an invisible 8 m box. The
imported Terrain_DEM carried only a bounding-box simple collision proxy,
so every downward trace in the block hit Demo_Terrain_DEM at Z 819 (the
mesh bbox max) and the road/sidewalk underneath were unreachable. The
view from up there looked plausible, which is why it read as working.

- add UGigLineAssetTools (C++): set complex-as-simple collision on a
  static mesh; UE 5.8 exposes ECollisionTraceFlag, not
  bUseComplexAsSimpleCollision, and Python cannot set it at all.
- builder forces + saves the terrain asset as complex-as-simple (the flag
  lives on the asset, so saving only the .umap loses it).
- spawn (-13336, -1150, 600): inside the carved corridor; lands on the
  road at Z 456 (feet 368 on road top 366).
- HighResShot 1280x720, not "1280 720" (that is multiplier 1280).
- keep SIM + single ground-probe diagnostics (TEMP QA).
2026-11-08 11:30:41 +01:00
zwitschi 2bab0fb0cd qa wip: SIM diagnostics + street spawn (pre-rebase snapshot) 2026-11-08 10:36:18 +01:00
zwitschi 2199a546bd qa wip: spawn in front of facade + input/sim diagnostics
- PlayerStart moved to (-10722,-2400,800) clear air, facing the facade.
- Force game input mode + hide cursor at BeginPlay.
- Diagnostics: every-second world/Z/gravity/fall log; one HighResShot at 1.5s.

Verified (packaged, engine log): controller connects to pawn input=yes, ctx
pushed, actions bound, world ticks, gravity -980, but capsule stays Z=909
fall=0 forever and no input fires. Static airborne pawn + no fall + no input
= pawn simulated without an active autonomous local player. Recorded for next
debug; do not merge to main.
2026-11-08 10:35:48 +01:00
zwitschi ea16818e2a qa: walkable meshes use SIMPLE_AND_COMPLEX collision (WIP on fall-through)
- ue_import_site.py: switch walkable surfaces (terrain, road, sidewalks) from
  CTF_USE_COMPLEX_AS_SIMPLE to CTF_USE_SIMPLE_AND_COMPLEX so the capsule
  blocks against the auto-generated simple collision as well as triangles.
- Re-imported site meshes, rebuilt DemoMap with the PlayerStart cap at Z300.

Unresolved: packaged plain launch still falls through at spawn in the last
verified run (capsule Z-123 -> -1960, no ground trace hit). User confirms the
site geometry RENDERS (visible in the distance) but the player is not standing
on it. Needs an in-editor/in-window collision verification — headless traces
are unreliable. Continue on this branch; do not merge to main.
2026-11-08 10:34:47 +01:00
zwitschi eb199ccce6 qa wip: collide site meshes, spawn cap above grade (still investigating fall-through)
- ue_import_site.py: auto_generate_collision=True so FBX static meshes get
  real collision geometry (they imported with none -> complex-as-simple had
  nothing to use, player fell through).
- ue_build_demo_map.py: PlayerStart cap raised to Z300 so the capsule feet
  start above the ~Z99-138 terrain surface there (an embedded spawn point is
  rejected -> 'NO PLAYERSTART with positive rating' -> origin fallback).
- Re-imported site meshes + rebuilt DemoMap with the above.

KNOWN-UNRESOLVED: packaged plain launch still spawns the capsule around
Z-123 and falls; downward trace finds no geometry. Map assets are all present
in the pak and referenced; runtime collision behavior needs a visual/interactive
check (headless commandlet traces are unreliable). Investigate on this branch;
do not merge to main.
2026-11-08 10:33:40 +01:00
zwitschi 1cc487b916 docs: note plain launch must open DemoMap (stuck-scene trap) 2026-11-08 10:32:10 +01:00
zwitschi f8c33ae697 memory: document walkable demo QA root causes (default map, input cook, collision) 2026-11-08 10:32:10 +01:00
zwitschi c09352b4af fix: default map is the runnable DemoMap, not the engine template
A plain packaged launch (./GigLine.sh with no -map) opened
/Engine/Maps/Templates/OpenWorld — an empty engine template with nothing to
do, which presented as a 'stuck' window with no working mouse/keys. The
GameDefaultMap setting lived in DefaultGame.ini and wasn't taking effect.

Move GameMapsSettings (GameDefaultMap/EditorStartupMap/ServerDefaultMap/
TransitionMap = /Game/Hollywood/DemoMap) into DefaultEngine.ini alongside the
GlobalDefaultGameMode, and drop the stale ReviewMap default from DefaultGame.ini.
Verified: plain ./GigLine.sh now loads /Game/Hollywood/DemoMap, Enhanced Input
initializes, Vulkan window opens.
2026-11-08 10:31:12 +01:00
zwitschi 3709530977 qa fix (wip): input assets hard-referenced, static site collision, spawn on sidewalk
Carries the QA fixes for the walkable demo off main onto an error-fixing
branch so a live window can be tested without blocking the clean main.

- GigLineCharacter: hard-reference the Enhanced Input assets via
  ConstructorHelpers so the cooker includes /Game/Input (they were soft-only
  and pruned from the pak -> no inputs bound). Push the mapping context on a
  deferred timer after possession.
- defaultgame.ini: +DirectoriesToAlwaysCook for /Game/Input, Hollywood, Test.
- ue_build_demo_map.py: stage site meshes STATIC with explicit collision
  (QUERY_AND_PHYSICS, WorldStatic, BlockAll); hero facade STATIC; PlayerStart
  moved onto the north sidewalk at Y -1200.
- DemoMap.umap rebuilt with the above.

STATUS: packaged build now logs all input assets ok and grounded=1/Walking,
so falling + input-nil are fixed in the package; the user still hit a stuck
window (no mouse/keys) in one test, so this remains WIP pending a clean
interactive run.
2026-11-08 10:31:12 +01:00