Replace the flat "future ideas" list with three scheduled sections and concrete, reviewable checkboxes (41 tasks): - Better Props: colliders for the generated models (they have none today), a placement table with variants, sign/bus-stop/shelter/street-lamp props, a close-range detail layer, pipeline audits, and a prop-gallery capture. - Better NPC Characters: articulated rig, layered outfits and accessories, face and hair variety, idle/conversation animation, door-queue staging, reaction readability, LOD tiers, and a re-measured NPC budget. - Better Player Movement: accel/decel split, step-up assist, head bob/FOV and a motion-sickness toggle, precision-walk feedback, surface footsteps, gamepad support, input remapping, and movement tests. Kept live 3D replay, extra venues, voice audio, and the image-to-mesh swap in Future ideas. Memory notes the grounding facts (props have no colliders, rigid NPC rig, single accel value). Docs-only: no version bump or release.
7.3 KiB
7.3 KiB
TODO
Godot 4.3 prototype. Latest release v0.3.3 (staged captures for the new screens). Headless suite 182/182 plus 53 Python tooling tests; the session, PLAN-verb, crowd, emergency, timeline, audio, scenario-content, and windowed focus/radial smokes pass. Anonymous downloads are enabled on the host.
The three sections below are the planned presentation pass: props, NPC characters, and player movement. Each task is meant to be a small, reviewable slice with its own verification.
Better Props
Collision and placement
- Give every generated prop a real collider. Add a simple box/cylinder collision shape to the
.glb(or emit aphysicsblock per part thatWorldBuilderturns into aStaticBody3D), so benches, bins, planters, hydrants, and newspaper boxes cannot be walked through. - Add a windowed check that the guard and NPCs path around props instead of through them, and that the fallback primitive props get the same colliders as the modelled ones.
- Replace the hard-coded prop positions in
_build_street_detail()with a placement table (zone, offset, rotation, variant) so clusters read as street furniture: entrance pair, curb line, mid-block, wall side. Assert no overlaps with the door, steps, or spawn lane. - Reuse one
PackedSceneper prop type but expose deterministic variants (rotation, scale, optional accessory such as a chain, sign, or bag) so repeated props stop looking cloned.
New props and detail
- Add street-sign props: parking sign, no-parking sign, one-way sign, and a small post (text via the atlas, not a texture per sign).
- Add a bus-stop shelter with a bench, roof, and side panel; a bike rack; a mailbox; and a phone booth or newspaper stand.
- Add a traffic signal (pole, arm, three lenses) and a street lamp variant that matches the
lamps placed by
WorldBuilder. - Add cafe/shop clutter: sandwich board, stacked crates, café table + two chairs, and a tied trash-bag pile for the Joke Shop edge.
- Detail the existing six props: chamfered edges on boxes, rim rings on bollard and bin, bolts on the hydrant, bench slats with gaps, visible soil plus foliage on the planter.
- Add a close-range detail layer: pack a subtle grunge/AO strip into the atlas (or a shared detail normal) so props do not read as flat-coloured boxes at conversation distance.
Pipeline and checks
- Extend
audit_glb()with a triangle budget, degenerate-triangle test,TEXCOORD_0inside the atlas, minimum-y ≈ 0, and a material-count check per prop. - Add a
prop_gallerycapture tocapture_screenshots.gd(each prop close-up on a plain backdrop) and wire it toscreen_designs.pyso prop regressions show up incompare. - Verify all prop instances share their imported material (no per-instance duplication) and keep a documented triangle/vertex budget in the pipeline docstring.
- Update the README prop list and the
model_pipeline.pycatalogue docs when new props land.
Better NPC Characters
Appearance and rig
- Replace the rigid capsule limbs with an articulated rig: shoulder, elbow, hip, and knee joints, so a walk cycle can bend knees and swing arms instead of rotating whole capsules.
- Add layered clothing: jacket over shirt, hi-vis vest, security uniform, dress/skirt, and coat, with deterministic per-profile colourways and material roles.
- Extend the accessory catalogue: bag, umbrella, phone, camera, clipboard, headphones, and a coffee cup; attach them to the correct hand/back socket.
- Add face and hair variety: several hair silhouettes, beards, hats, eye/brow shapes, age and height ranges, and a small set of face textures or decal planes so heads are not identical.
- Keep appearance deterministic per
(profile, seed)and add a test that the same seed produces the same outfit while different types stay recognisable.
Animation and staging
- Add an idle layer: breathing, weight shift, occasional look-around, phone check, and arms-crossed, blended with the current walk and reaction states.
- Add conversation gestures: facing the guard when addressed, talking hand movement, nodding, backing away, and pointing, driven by the existing reaction/escalation events.
- Improve the walk cycle: stride length tied to speed, foot planting without sliding, and a
distinct hurry/flee gait that matches
FLEE_SPEED. - Stage a door queue: waiting offsets, one-at-a-time approach, no overlapping capsules, and a step-aside after the admission decision.
- Make reactions readable at a distance with body language plus a short icon/label (rubberneck, panic, calm, angry) so crowd state is legible without the debug panel.
Performance and budgets
- Add three LOD tiers (full rig, simplified mesh, billboard) with distance hysteresis, and disable shadows for far tiers; keep the switch deterministic and testable.
- Re-measure the live-NPC budget with the full rig at
MAX_LIVE_NPCS, and add a perf smoke that fails when frame time crosses the documented budget. - Add tests for animation state transitions (idle → walk → react) and for queue spacing at the door.
Better Player Movement
Feel and handling
- Split acceleration and deceleration in
guard_controller.gd(faster stop than start, no ice-skating), then tunemove_speedandaccelagainst a windowed feel pass. - Add step-up assist for kerbs and the entrance steps (about 0.3 m) and keep wall sliding smooth so the guard does not stick on doorframes, railings, or prop colliders.
- Add subtle head bob tied to stride and speed, a small FOV change in precision walk, and a landing dip; expose a motion-sickness toggle in settings with persistence.
- Give precision walk (Shift) visible feedback: a HUD state chip and an audio tick when it engages, in addition to the slower speed.
- Add surface-aware footsteps (concrete, asphalt, stone steps) with stride-synced timing and a distinct landing sound, reusing the procedural audio helpers.
Input and accessibility
- Add gamepad support: move/look actions, radial and action bindings, deadzone and look sensitivity, with prompts that follow the active device.
- Move the remaining hard-coded keys into
InputMapactions and persist any remaps through the settings panel (keyboard and gamepad). - Add a mouse-sensitivity and invert-Y setting if missing, and test the values survive a settings save/load round trip.
- Add movement tests: acceleration ramp, step-up height limit, precision-walk speed, wall slide, and gamepad deadzone.
- Run one windowed movement smoke per change above (walk the full block, climb the steps, strafe along the wall) and capture a short screenshot set for the compare tool.
Future ideas (optional, not scheduled)
- Live 3D body-camera replay (the timeline is text-only today).
- Additional venues or seasonal events authored from the new
.tresfiles. - Real voice/dialogue audio (the crowd bed and radio crackle are procedural).
- Swap the primitive prop builder for an image-to-mesh model API behind the same
assets/models/generated/<prop>.glbcontract.