Commit Graph
42 Commits
Author SHA1 Message Date
zwitschi 2f87002711 docs(licensing): remove ODbL attribution requirements and HUD credit references
Drop the OpenStreetMap/ODbL attribution requirement, the Google imagery rule,
and the related F-4 requirement, risk R-4, release check, and TODO items across
AGENTS, PLAN, ROADMAP, README, setup, architecture sections, and manifests.
OSM data is now documented as local private use only. Also normalize
numbered-list indentation in the architecture docs.
2026-11-08 14:11:06 +01:00
zwitschi 985dfcbac7 npc: AGigLineNPCPerson prefab + stable-named screenshots
- New C++ AGigLineNPCPerson: reusable NPC/pedestrian prefab built on the MPFB
  human. ACharacter capsule half-height 83 cm (total 1.66 m, head top ~1.66 m
  so a 1.60 m camera doesn't clip), the character skeletal mesh on the built-in
  mesh as the visible body (feet on Z 0), AutoPossessAI for 0.5.0 pedestrians.
  Staged at Z 0 in the review scene; captured as review-npc-prefab.png.
- AGigLineShotActor now names screenshots by stable camera name (no list-index
  prefix): inserting or reordering cameras no longer renumbers files or orphans
  the old ones. Re-rendered all review/demo shots with stable names.
- ue_build_review_map.py: chmod the target .umap before save_map (git marks maps
  444 on checkout, silently making save_map return False and dropping stages).
- Screenshots/README.md, ROADMAP, TODO updated for the prefab + stable names.
- DemoMap.umap rebuilt by the render pipeline (north buildings + demo cameras).
2026-11-07 15:28:42 +01:00
zwitschi 5ab8b556f3 docs: move task list to TODO.md and keep ROADMAP.md as plan
Split the former ROADMAP.md checklists into TODO.md, which now holds
all actionable work and progress marks. ROADMAP.md keeps milestone
goals, scope, and release gates as prose with no checkboxes.

Update AGENTS.md, Docs/, Geo/README.md, MEMORY.md, and README.md to
point to the new file roles.
2026-11-07 15:17:10 +01:00
zwitschi 84295a1f03 docs: consolidate screenshot README, drop stale shot refs in roadmap
- Screenshots/README.md: collapsed per-shot blurbs into one approved
  review-map table + one demo-map table; removed the duplicate
  hero-facade-front/oblique entries (leftovers from an old camera list that
  duplicated review-07/08) and the trailing duplicate 'known issues' block.
- Removed the three orphan PNGs (review-03-first-person, review-04/05
  hero-facade) that no longer match the camera list.
- ROADMAP.md: fix stale 'review pending' on character and hero-facade items
  (now approved), and point facade review refs at review-06/07/08.
2026-11-07 14:57:12 +01:00
zwitschi 4401bb2f67 asset: two north-side background buildings across Hollywood Blvd
- TCL Chinese Theatre (6925) and Madame Tussaud's (6933) exported from the
  verified OSM blockout with ue_metric_v1 (export_north_buildings.py), with a
  Y-mirror so they land north of the road, across from the hero facade.
- ue_import_north_buildings.py imports + stages them in the DemoMap as
  North_TCL_Chinese / North_Madame_Tussauds (TCL Y 1802..9431, Tussaud's
  1888..7586; hero at Y -1450, road centreline ~0).
- render_screenshots.sh now also runs the DemoMap capture pass; added a
  demo-north-buildings camera, so the new buildings get a review shot.
- README/roadmap updated; flat facade materials pending the 0.1.4 patch.
2026-11-07 14:28:53 +01:00
zwitschi f7f01fd077 docs: update roadmap with modeling tasks and suggested Blender skills for asset development 2026-11-07 14:23:48 +01:00
zwitschi 72e7eed653 plan: 0.1.0 ships first-person only; MPCB character reserved as NPC template
Coordinator decision 2026-11-07: 0.1.0 is first-person-only (capsule +
camera, no visible body). The MPFB character (idle pose + warm skin, done)
is reframed as the reusable NPC/pedestrian prefab for 0.2.0+ / 0.5.0, not
wired into the AGigLineCharacter pawn. Roadmap character + 0.2.0/0.5.0
sections updated; no engine/asset changes.
2026-11-07 14:16:17 +01:00
zwitschi c11cb4caa4 character: idle standing pose and warm skin, not the grey mannequin
- mpfb_character_export.py: new --pose idle folds the A/T-bind arms down to
  a relaxed standing rest pose (baked via pose.armature_apply before export);
  new make_diffuse synthesizes a warm skin-tone diffuse with a darker
  shorts-suggestive band, replacing the Cycles v2-skin bake that came out
  black and was slow at 1024^2.
- write_png now encodes from img.pixels via numpy (fast) because img.save()
  writes black for an in-memory image.
- Re-exported idle character, re-imported to /Game/Test/Character (138 bones,
  warm M_Character_Export/T_Character_Diffuse); removed stale T_Skin_Diffuse.
- Untracked the review PNGs again: the Screenshots/ gitignore rule had been
  dropped and the parallel session had committed the PNGs, against the
  AGENTS.md 'never commit the PNGs' rule. Restored the ignore rule; only
  Screenshots/README.md stays tracked.
- README/roadmap/memory updated; review-01-character re-pended for approval.
2026-11-07 14:11:06 +01:00
zwitschi 1a1230ab6b docs: record collision, reset and pause as implemented-not-verified 2026-11-07 13:17:54 +01:00
zwitschi cf392a02f7 gameplay: walkable demo map, reset and pause
Tools/ue_build_demo_map.py builds /Game/Hollywood/DemoMap: sun, sky, the hero
facade on the building line, six site meshes imported with collision, and a
player start on the north sidewalk. Tools/ue_import_site.py imports the site
FBXs; terrain, road and sidewalks use complex-as-simple so a simple hull cannot
ramp over the kerbs. Art/blender/site/export_site_fbx.py exports one FBX per
object so each can carry its own collision.

Reset (R) and pause (Escape) join the character and the input context: reset
restores the spawn transform and clears momentum, pause is a real game pause that
releases the cursor. DefaultInput.ini captures the mouse on launch.

Three placement defects found by measuring the imported actors rather than
trusting the plan: the spawn was on the wrong sidewalk because the FBX flip
inverts north, a mirror I added to the exporter double-corrected an already
correct sidewalk, and the street meshes only carry part of the north walk - the
rest is terrain.
2026-11-07 13:17:24 +01:00
zwitschi c9278378ee plan: approve the review shots, plan collision and facade patches
All nine review shots approved. Roadmap gains the defects the Blender pre-check
already knows about rather than rediscovering them after release: 0.1.1 now names
the 15.8 cm sidewalk edge step, the ~10% crossing ramps, the missing collision
authoring pass and the unverified kerb height. A new 0.1.4 patch plans proper
building facades explicitly - facade kit, procedural materials, Blosm setupScript
styles, hero detail, El Capitan Theatre - and states that the existing geometry is
kept, so shipped blockouts cannot be mistaken for finished architecture.
2026-11-07 12:52:04 +01:00
zwitschi ec2917ed59 docs: release the review placement claim — every shot item is closed 2026-11-07 12:46:12 +01:00
zwitschi d4af4af90f hero: make the portals real recesses and land the facade on Z 0
The portal detail shot failed for a modelling reason, not a camera reason: the
doors were 0.1 m panels on a solid plinth, so they read as shading. The plinth is
now four piers plus a lintel band, with a 1.2 m reveal, stone jambs and lintels
standing 0.10 m proud and three mullions per opening. review-06 frames them from
8 m at eye height.

Two defects fixed while doing it: the jamb boxes hung 0.15 m below the pavement,
so the facade imported with min Z -15 cm; and a rebuild run against a read-only
.blend silently skipped the save, which is why screenshots kept showing the old
geometry.
2026-11-07 12:46:00 +01:00
zwitschi f575bc82a8 docs: release the geo claim and record the tooling traps 2026-11-07 12:28:38 +01:00
zwitschi 386d4bee78 geo: one tool directory, one unit boundary, per-asset provenance
Geo/tools/ is now every geographic script, with Geo/README.md documenting each
one; the Blender-side builders moved beside their outputs in Art/blender/*/ and
import their helpers from Geo/tools/osm_common.py.

That module gains to_unreal_local() and to_blender_local(): the only place in the
repository that multiplies metres by 100, so a second silent scale cannot be
introduced. block_height_report.py adds height provenance for the block — 3 of
15 buildings have no height data and render at a placeholder 6.4 m.
asset_metadata.py writes and audits <asset>.geo.json sidecars; four now exist
(hero-facade, terrain, street, blockout) and the audit recomputes each centre from
the origin, failing anything that disagrees.
2026-11-07 12:28:26 +01:00
zwitschi 5e5e5ae9b4 refs: survey the sibling project and recalibrate the hero facade
Tools/sibling_asset_audit.py reads the sibling security-game project's prop
library straight from the GLB headers: 20 street props, 11.8k triangles, every
one with a Blender source. The 50 .blend sources are copied to
Art/props/blender_src/ with a manifest; nothing is imported into Unreal yet. Its
building meshes are deliberately not taken - they are Godot GLBs built around a
29.6 m facade that this project measured at 25.75 m.

The facade proportions were wrong against the photograph: 5.7 m of blank wall
above the capitals. Entablature is now 3.4 m, parapet 2.2 m, with architrave and
cornice bands and square pedestals, so the elevation reads as layered stone.
2026-11-07 12:20:41 +01:00
zwitschi e46a877556 review: split the rounds into named shots and stage the player pawn
Roadmap gains two sections: 'Review scene and player placement' (this pass) and
'Character development' (follow-on). The camera list is now one table of
(name, location, target) with look-at rotations computed from the pairs, so a
camera cannot drift out of aim when one number changes.

New shots: player-placement (the real pawn, staged in the build script),
ground-contact (knee height, feet on the plane), shadow-compare (floating vs
grounded cube from a low angle), and hero-portals (whole elevation).

The review floor grows to 160 m so the facade stands on ground rather than the
horizon band. Retired: the first-person shot.

Honest gap recorded in the roadmap: the hero portals sit behind the colonnade and
do not resolve from the review floor; that needs a camera on the plinth or a
portal rebuild, not another angle.
2026-11-07 12:08:19 +01:00
zwitschi 3be37c76a2 docs: record the facade review traps and release the section claim
Memory gains the camera-side, centre-origin, read-only-map and screenshot-tracking
traps this pass cost. The asset production claim is released: the hero facade
first pass exists and awaits screenshot approval, so the section is free for the
next owner.
2026-11-07 11:43:07 +01:00
zwitschi c5e30d1c36 feat: hero facade blockout for 6840 Hollywood Blvd
Tools/hero_facade_build.py builds the north elevation parametrically and writes
a JSON report naming the evidence behind every part: the 25.75 m frontage and
14.5 m height are measured, the 4.96 m column bay comes from the sibling notes
and matches that frontage, the three portal flights follow the photographs (five
risers, overturning the inherited eight-step, 12 m wide claim), and the rest is
labelled assumption.

Tools/ue_hero_facade_import.py imports it with the ue_metric_v1 preset
(2604 x 1257 x 1450 cm, 1892 tris, 4 materials) and places it on the measured
building line of /Game/Hollywood/DemoMap.

Two new review shots at review-04 and review-05, both pending approval. Camera
placement cost four renders: the first two sat inside the facade body, and the
frontage faces Unreal -Y, so a camera has to stand at Y < -1450 cm, not north of
the building line in project terms.
2026-11-07 11:42:29 +01:00
zwitschi d91e627cbf docs: record Gitea publication checks 2026-11-07 11:08:44 +01:00
zwitschi 101db3f2a4 chore: prepare repository for Gitea publication 2026-11-07 11:08:04 +01:00
zwitschi f4420de09c docs: record the Enhanced Input python traps and the gameplay status 2026-11-07 10:05:25 +01:00
zwitschi 774d810dab docs: retitle the roadmap status block to the current time 2026-11-07 09:31:03 +01:00
zwitschi 1c6b956435 bootstrap: finish project bootstrap — scale test, MPFB character, build docs
- Static-mesh scale test passes: 1 m = 100.00 cm, origin preserved, axis
  mapping east→+X / north→−Y / up→+Z (named presets ue_metric_v1 both sides).
- MPFB 2.0.18 acceptance passes: generated human + standard 137-bone rig
  with weights + v2 skin baked to 1024² diffuse; imports as SkeletalMesh
  with Skeleton, Material, and Texture2D in /Game/Test/Character.
- MPFB headless requires XDG_CONFIG_HOME at the Flatpak config tree;
  documented in Art/blender/README.md, probe in Tools/addon_compat_probe.py.
- Docs/build.md completed: fresh-checkout build, packaging, headless checks.
- Docs/setup.md reconciled with reality; ROADMAP/bootstrap closed out.
2026-11-07 09:29:11 +01:00
zwitschi 01939de9a0 docs: add the memory convention and seed MEMORY.md
AGENTS.md now states that planned work is checkbox items in ROADMAP.md marked
open, in progress, or done, and that discoveries, gotchas, notes, and bugs go to
MEMORY.md for coordination between collaborators. MEMORY.md is seeded with what
this build-up actually cost: the Unreal read-only-home crash, Blender/Blosm
headless workarounds and the spherical projection, the tiled-TIFF DEM trap, the
reference licensing and throttling rules, and the LFS silent-blob trap.

Also stages the concurrently created Unreal project files, and stops per-project
Build/ output (FileOpenOrder logs) from entering the repository.
2026-11-07 09:08:58 +01:00
zwitschi ab3adf5f7c docs: reconcile the ROADMAP status block with the engine state 2026-11-07 08:59:15 +01:00
zwitschi 7ea3accbc5 engine: 5.8.4 extracted and initialising on Bazzite
Extraction finished clean (73 GB). The editor crashed twice with signal 11, but
the log named the real cause: the agent shell's home is read-only, so the editor
could not create ~/.config/Epic and died in pre-init. With HOME redirected it
reaches 'Engine is initialized' under -NullRHI, proving the install and bundled
libraries are sound on Bazzite.

The Vulkan RHI is still unproven: the successful run used -NullRHI. A desktop
terminal run is the remaining step, recorded in Docs/environment.md, ROADMAP and
the toolchain pin.
2026-11-07 08:58:54 +01:00
zwitschi 67d8067ffd docs: write current status into ROADMAP.md
Status-at-a-glance table, plus refresh of the items that moved since the last
pass: engine 5.8.4 verified and extracting, tooling pins done except the stale
QGIS lts and the Unreal pin, blockout re-framed, reference set at 72 images with
the entrance conflict resolved, site assembly present.
2026-11-07 08:53:22 +01:00
zwitschi cc209cde01 feat: assemble the site and pre-check walkability
site-2026-11-06.blend gathers terrain, street and blockout into categorised
collections: 281 objects, ~58k triangles. A downward raycast on a 1 m grid along
both sidewalks and the designated crossing finds no holes, so nothing drops the
player on either side. Two steps are flagged: 15.8 cm at the sidewalk's outer
terrain seam and 10-13 cm ramps at the crossing flush transitions, steeper than
a real 8% ramp.

Sampling is projected through PROJ: placing points with the OSM spherical
approximation put them metres off the UTM meshes and reported 91 phantom holes.
2026-11-06 23:48:02 +01:00
zwitschi d42e39faa9 feat: road, kerbs, and sidewalks on the DEM
Tools/street_mesh.py builds the corridor in the project frame from the measured
profile: carriageway -10.5..+10.5 m, kerbs 0.15 m (0.13 m as built), sidewalks
4.0 m south and 5.3 m north, all elevations sampled from the DEM. Kerbs flush at
the three signalised crossings. Crown at mid-block reproduces the cross-sections
to the centimetre.
2026-11-06 23:45:28 +01:00
zwitschi ece48649f5 feat: terrain mesh from the DEM, and correct the blockout frame
Tools/terrain_from_dem.py builds a 191x106 grid at 2 m over the block, Z being
NAVD88 minus the origin ground. Building footprints from the OSM extract are cut
out so rooftops never become terrain (72 footprints, 6310 cells). Spot checks
reproduce the measured profile: origin 0.00, Orange Dr +3.39, south gutter
+0.93, crown +1.38, north sidewalk +1.43.

Blosm projects with a sphere, not an ellipsoid, so its frame was ~0.4% oversized
and rotated by meridian convergence: about 2 m at the theatre. The blockout now
fits a six-parameter affine into EPSG:26911 on five control points (0.0 cm
residual) and transforms root objects only, since children inherit and double
transforming them read as a 2 m placement error.
2026-11-06 23:40:50 +01:00
zwitschi bf23a27939 feat: headless Blosm blockout of the demo block
Tools/blosm_blockout.py imports the committed extract in 3Dsimple mode and
reports per-building dimensions so a units failure is visible in the log. The
result (87 meshes) is committed as the blockout baseline: hero 25.68 x 54.88 x
14.50 m against 25.75 x 54.88 m of OSM geometry, so the import is 1:1 metres.

Two headless defects needed working around: the asset-directory check that
fires before mode is honoured, and an empty default-level table sending the
add-on down a broken relative import. Member fetching stays off so the import
does not depend on Overpass.
2026-11-06 23:33:41 +01:00
zwitschi 6cded45e2a geo: sample seven cross-sections from the DEM
Gutters sit at -10 m south and +10..12 m north, a ~2% crown between them, and
the envelope runs 0.6-1.0 m per section. Gutter spacing independently confirms
the 20.9 m carriageway measured from the crossing. The sharpest breaks are
0.09-0.12 m/m, so 3DEP does not resolve a kerb upstand: kerb height stays a
recorded assumption rather than a derived value.
2026-11-06 23:02:50 +01:00
zwitschi d97fcc7ad4 geo: acquire the 3DEP 1 m DEM window in EPSG:26911
550x350 m clipped to the block, already in the project CRS, 984 KB, committed
through LFS. Verified against the service's own point query and the earlier
probe: 115.911/119.422/117.593 m, agreement within 6 cm.

Adds Geo/scripts/dem_stats.py, a stdlib tiled-TIFF reader, because GDAL cannot
run on the host and the exported raster is tiled rather than strip-organised.
2026-11-06 23:01:21 +01:00
zwitschi 103042fca7 docs: pin QGIS 4.2.3 and compute the projected origin with PROJ
QGIS stable is 4.2.3 on the current KDE runtime; the stale 3.28.9 lts install
stays flagged for removal. PROJ 9.9.0 from that flatpak turns the recorded
origin into E 376515.389 / N 3774224.083 (NAD83 UTM 11N), with six control
points whose projected spans reproduce the OSM footprint measurements. Engine
decision recorded: 5.8.4 is downloading, 5.2.0 stays only as a fallback.
2026-11-06 22:58:06 +01:00
zwitschi 65fb3759c9 geo: measure block elevation and pick the DEM source
Probe 22 points with the USGS 3DEP point service: walkable surfaces span
115.65-119.59 m, a 3.94 m relief, so elevation data is required by the AGENTS
rule. Grade falls ~3.3 m eastward over the 279 m block (1.2%) and the north
sidewalk sits 0.4-0.7 m above the south. 3DEP 1 m is public domain and becomes
the chosen source; the tile itself is still to be downloaded.

Factored the shared OSM helpers into Geo/scripts/osm_common.py so the street
profile and the elevation probe read the same geometry.
2026-11-06 22:43:13 +01:00
zwitschi 255c1a9e86 geo: measure the block street profile and fix the local CRS and origin
New Geo/scripts/street_profile.py measures the 279.4 m block centreline, the
three signalised crossings (20.9-25.9 m across), sidewalk centrelines at 12.6 m
and 13.6 m, and per-building setbacks of 13.0-15.8 m. Derived sidewalk widths
of ~4.0 m south and ~5.3 m north cross-check against the mapped centrelines.

Geo/manifests/local-origin.md fixes EPSG:26911 and the Highland intersection
node as origin, defines the axes and the x100 metre-to-centimetre rule, and
leaves the projected pair blank because PROJ is not installed here.

Records the lane-count discrepancy (4 tagged lanes over a 20.9 m carriageway).
2026-11-06 22:23:44 +01:00
zwitschi 7a1eb0be66 chore: keep reference photography local and out of the repository
Reference images are development-only material: licensing is not a gate for
local private use, so they are simply never committed. Art/reference/ is now
gitignored; the licensed status of anything shipped is still recorded in
THIRD_PARTY_NOTICES.md.

Adds Tools/commons_fetch.py, which fetches Wikimedia Commons imagery by search
or exact title and writes a provenance sidecar, plus Docs/reference-notes-hollywood.md
recording what each local set is evidence for.
2026-11-06 22:04:37 +01:00
zwitschi f7d96c999b docs: add the north-side reference task and record the sibling image tooling
ROADMAP gains an explicit item for licensed photography of the TCL Chinese
Theatre (way 424105908) and Madame Tussaud's (way 424105889). The inventory
records which sibling tools exist, that refcollect.py is unlicensed-tmp-only and
cannot feed committed references, and that the OpenRouter key stays outside this
repository.
2026-11-06 21:54:07 +01:00
zwitschi 737e16e7db geo: add block extract, boundary verification, and the carried-over reference set
Inventory the sibling security-game project and copy only the evidence: nine
licensed photos with their sidecar provenance into Art/reference/hollywood/,
now LFS-tracked. Add the block-wide OSM extract with a manifest, resolve the
demo bounds (Orange Dr -118.341434 .. Highland Ave -118.338718, 279 m) and the
south/north building sets, and add Geo/scripts/block_report.py to reproduce it.

The sibling docs place the El Capitan Theatre west of 6840; OSM geometry and
the house numbering put it east. Recorded with the two unresolved measurement
conflicts rather than averaged.
2026-11-06 21:47:29 +01:00
zwitschi ea0cb53a36 docs: confirm Vulkan device enumeration and close the Bazzite setup check
vulkaninfo names GPU0 as the discrete RTX 5070 Ti (NVIDIA 615.78.08, API
1.4.351), with the RADV iGPU as GPU1 and llvmpipe as GPU2. Note the device
selection risk for the engine and mark the ROADMAP environment item done.
2026-11-06 21:30:32 +01:00
zwitschi eceaff1397 chore: scaffold repository and record 0.1.0 setup state
Create Game/, Art/, Geo/, Tools/, Docs/ with LFS and ignore rules, record the
workstation audit, toolchain pins, setup checklist, release checks, and
licensing policy. ROADMAP 0.1.0 environment tasks marked to match verified state.
2026-11-06 21:20:57 +01:00