diff --git a/MEMORY.md b/MEMORY.md index d96bfcc..a426c3a 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -11,6 +11,13 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o maximum. Requests send a complete Firefox header set, not just the UA. DDG rate-limits by IP for a while after probing, so the per-venue collections should still be run in small spaced batches. Downloads are `local_only`/`unchecked-local` and never committed. +- **Comedy Store multi-model concepts (2026-11-03):** four scene pairs (facade, street, strip, + visitor) now live in `docs/screens/concepts/joke_shop/`, each anchored on a local-only + `tmp/research/comedy-store/` photo with one `google/gemini-2.5-flash-image` and one + `openai/gpt-5-image-mini` frame (`.refgen.json` records `unchecked`). Gotcha: DDG photo 07.jpg + was titled "Ramada hotel" but is actually an interior stage shot — Gemini refused it with a + text-only message; the hotel/parking ramp reference is still missing from the local set. The + map-recreation plan is tracked in `TODO.md` §Local map development → Comedy Store map recreation. - **Local-only reference override (2026-11-03, owner decision):** for development-only photo research the licence gate does **not** apply. Downloads for this track live in `tmp/research/` (gitignored) and may come from DuckDuckGo image search, street-view frames, neighbouring diff --git a/README.md b/README.md index 8076569..b81d4a7 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,45 @@ The active planning order lives in [`TODO.md`](TODO.md) and [`AGENTS.md`](AGENTS Versions are assigned only when a track's scope is accepted into a release. Every major, minor and patch version requires a changelog entry, a local release build and artifact verification before tagging. +## ⬇️ Downloads + +| Platform | Package | +| --- | --- | +| **Windows — installer** | [`gig-line-setup-.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · contains all game data, shortcuts + uninstaller | +| **Windows — portable** | [`gig-line-windows-.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, no install needed | +| **Linux — AppImage** | [`gig-line--x86_64.AppImage`](https://git.allucanget.biz/zwitschi/security-game/releases) · single file, `chmod +x` and run | +| **Linux — portable** | [`gig-line-linux-.x86_64`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, `chmod +x` and run | +| **macOS** | [`gig-line-macos-.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unsigned build, quarantine note below | +| **Web (browser)** | [`gig-line-web-.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unzip and serve the folder from any static host (no special headers) | +| **Desktop HQ** | [`gig-line-desktop-hq-.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · optional Forward+ build with volumetric fog/SDFGI/flashlight; requires a Vulkan-capable GPU/driver | + +**All releases:** + +> Downloads are public (no sign-in required) since the host's instance-wide +> `REQUIRE_SIGNIN_VIEW` was disabled on 2026-10-31. +> +> **Latest published: v0.9.6** — the integration checkpoint: the 0.9.5 texture +> and material refinement (256² NPC maps, a four-times fabric weave without baked +> AO blotches, repaired Walk of Fame/awning surfaces and per-phase skyline haze) +> is packaged with the v0.9.4 NPC visual optimization, the Hollywood/Joke Shop +> maps and the v0.9.3 UI/accessibility polish, with the full gallery, smoke matrix +> and Web/Desktop HQ build re-verified. +> +> **Current source: v0.10.0-rc.1** — the release-candidate source; the final tag is pending external playtest and legal review. +> Releases are built automatically when a `vX.Y.Z` tag is pushed +> (see [`docs/RELEASING.md`](docs/RELEASING.md)); manual builds use +> `./tools/build_releases.sh`. Installer/AppImage packaging runs in the same pipeline +> (NSIS + appimagetool) and uploads with the portable binaries. +> +> macOS builds are unsigned: right-click → Open, or clear the quarantine with +> `xattr -dr com.apple.quarantine gig-line-macos.zip`. Build instructions and +> the release pipeline live in [`docs/RELEASING.md`](docs/RELEASING.md). + +If you are here to develop or test locally instead of downloading, jump to +[Setup and Run](#setup-and-run) below. + +The project is under active development. The design and architecture are documented, and a playable prototype vertical slice exists (Godot 4 + GDScript): a stylized El Capitan Entertainment Centre block, a first-person guard, simulated NPCs with intents and reactions, the six-level escalation model, access inspection and admission decisions, radio calls with credibility checks, reputation, crowd mood, and an end-of-shift review. + ## Screenshots Every capture is rendered from the current build by [`tools/check_screenshots.sh`](tools/check_screenshots.sh) @@ -69,45 +108,6 @@ the sheets below track their visual progress. More sheets and the review criteria are in [`docs/blender_previews/`](docs/blender_previews/README.md) and [`docs/3d-model-review.md`](docs/3d-model-review.md). -## ⬇️ Downloads - -| Platform | Package | -| --- | --- | -| **Windows — installer** | [`gig-line-setup-.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · contains all game data, shortcuts + uninstaller | -| **Windows — portable** | [`gig-line-windows-.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, no install needed | -| **Linux — AppImage** | [`gig-line--x86_64.AppImage`](https://git.allucanget.biz/zwitschi/security-game/releases) · single file, `chmod +x` and run | -| **Linux — portable** | [`gig-line-linux-.x86_64`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, `chmod +x` and run | -| **macOS** | [`gig-line-macos-.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unsigned build, quarantine note below | -| **Web (browser)** | [`gig-line-web-.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unzip and serve the folder from any static host (no special headers) | -| **Desktop HQ** | [`gig-line-desktop-hq-.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · optional Forward+ build with volumetric fog/SDFGI/flashlight; requires a Vulkan-capable GPU/driver | - -**All releases:** - -> Downloads are public (no sign-in required) since the host's instance-wide -> `REQUIRE_SIGNIN_VIEW` was disabled on 2026-10-31. -> -> **Latest published: v0.9.6** — the integration checkpoint: the 0.9.5 texture -> and material refinement (256² NPC maps, a four-times fabric weave without baked -> AO blotches, repaired Walk of Fame/awning surfaces and per-phase skyline haze) -> is packaged with the v0.9.4 NPC visual optimization, the Hollywood/Joke Shop -> maps and the v0.9.3 UI/accessibility polish, with the full gallery, smoke matrix -> and Web/Desktop HQ build re-verified. -> -> **Current source: v0.10.0-rc.1** — the release-candidate source; the final tag is pending external playtest and legal review. -> Releases are built automatically when a `vX.Y.Z` tag is pushed -> (see [`docs/RELEASING.md`](docs/RELEASING.md)); manual builds use -> `./tools/build_releases.sh`. Installer/AppImage packaging runs in the same pipeline -> (NSIS + appimagetool) and uploads with the portable binaries. -> -> macOS builds are unsigned: right-click → Open, or clear the quarantine with -> `xattr -dr com.apple.quarantine gig-line-macos.zip`. Build instructions and -> the release pipeline live in [`docs/RELEASING.md`](docs/RELEASING.md). - -If you are here to develop or test locally instead of downloading, jump to -[Setup and Run](#setup-and-run) below. - -The project is under active development. The design and architecture are documented, and a playable prototype vertical slice exists (Godot 4 + GDScript): a stylized El Capitan Entertainment Centre block, a first-person guard, simulated NPCs with intents and reactions, the six-level escalation model, access inspection and admission decisions, radio calls with credibility checks, reputation, crowd mood, and an end-of-shift review. - ## Game Overview A typical shift lasts 10–15 minutes: watch the entrance and sidewalk, judge why diff --git a/TODO.md b/TODO.md index eafb31a..8a13237 100644 --- a/TODO.md +++ b/TODO.md @@ -461,6 +461,37 @@ facade evidence is still the 2009 CC BY frame. The 8 downloaded candidates are i - [ ] Integrate the result behind `WorldBuilder.VENUE_SPECS` with colliders, navigation obstacles, occlusion and the existing day/night materials. +### Comedy Store map recreation + +*Plan (2026-11-03): rebuild the Joke Shop venue geometry from the new local-only reference set +(`tmp/research/comedy-store/`, gitignored) and the four photo-anchored scene pairs now in +`docs/screens/concepts/joke_shop/`. Evidence wins for shape; the concepts win for material/mood. +Nothing is committed until the licence gate on any promoted reference and the map-budget tests +pass. The current `_build_comedy_store_building()` stays as the fallback.* + +- [ ] Extract the real proportions from the local frames (facade width/height, canopy depth and + slope, blade-sign diameter and pole height, red curtain bay count, entrance recess, kerb + setback, hillside rise) and reconcile them against the current 27 m / 8.4 m / 12.2 m spec + in `WorldBuilder.VENUE_SPECS["joke_shop"]` and `docs/joke-shop-map.md`. +- [ ] Rank the shape-language gaps between the current procedural building and the four scene + pairs: canopy fascia depth, blade-sign shape/position, curtain-bay rhythm, entrance recess, + hillside silhouette and the neighbouring hotel/parking mass. Write the top-five fix list + with measurements. +- [ ] Rebuild the canopy + blade sign as library props or procedural geometry through the assisted + pipeline (`blender_assets.py inspect` → scripted edits → `audit`/`fit`), keeping the 4,000 + prop-triangle budget; verify against the street/strip concept pairs before committing. +- [ ] Add the neighbouring hotel/parking ramp as a low-detail blocker mass (no interior) so the + block silhouette matches the hotel reference frame, inside the venue mesh budget. +- [ ] Re-work the facade field from flat boxes to the reference's actual banding: black stucco + field (`dark_stucco`), deep canopy shadow, fascia band, red curtain bays and the recessed + entrance, using the four concept pairs for value/mood targets. +- [ ] Re-run the map-budget, navigation, collider and day/night capture gates after the rebuild + (`godot --headless --path . --script res://src/test/test_runner.gd`, + `tools/check_screenshots.sh`), and refresh the Joke Shop three-up board and + `docs/joke-shop-map.md`. +- [ ] Update `docs/development-status.md`, `docs/asset-tooling.md` and `CHANGELOG.md` when the + rebuild lands; record any accepted deviations from the reference. + ### Generated location imagery *Skill route: `lookdev`, `lighting`, `environment-artist`, `texture-workflow`; tooling: diff --git a/docs/screens/concepts/joke_shop/README.md b/docs/screens/concepts/joke_shop/README.md index 2e558a8..94402ce 100644 --- a/docs/screens/concepts/joke_shop/README.md +++ b/docs/screens/concepts/joke_shop/README.md @@ -32,9 +32,27 @@ set); provenance in [`joke_shop_entrance_day-v2.refgen.json`](joke_shop_entrance ![Comedy Store facade anchored on a local research frame, GPT image](comedy_store_facade_gpt_day.png) -Both frames are anchored on the same local-only research photo -(`tmp/research/comedy-store/01.jpg`, gitignored) with `--reference-unchecked`, one with +## Street view — local-reference anchored, two models + +![Comedy Store from the sidewalk, Gemini](comedy_store_street_gemini_day.png) + +![Comedy Store from the sidewalk, GPT image](comedy_store_street_gpt_day.png) + +## Sunset Strip context — local-reference anchored, two models + +![The club in the wider Sunset Strip, Gemini](comedy_store_strip_gemini_day.png) + +![The club in the wider Sunset Strip, GPT image](comedy_store_strip_gpt_day.png) + +## Visitor view — local-reference anchored, two models + +![The club as a visitor sees it, Gemini](comedy_store_visitor_gemini_day.png) + +![The club as a visitor sees it, GPT image](comedy_store_visitor_gpt_day.png) + +All `comedy_store_*_*_day` frames are anchored on local-only research photos under +`tmp/research/comedy-store/` (gitignored, `--reference-unchecked`), one with `google/gemini-2.5-flash-image` and one with `openai/gpt-5-image-mini`. Provenance and model are -in each frame's `.refgen.json` sidecar. Local reference only; the photo never enters the repo and +in each frame's `.refgen.json` sidecar. Local reference only; the photos never enter the repo and these frames are art direction, not assets. diff --git a/docs/screens/concepts/joke_shop/comedy_store_street_gemini_day.png b/docs/screens/concepts/joke_shop/comedy_store_street_gemini_day.png new file mode 100644 index 0000000..2b47923 Binary files /dev/null and b/docs/screens/concepts/joke_shop/comedy_store_street_gemini_day.png differ diff --git a/docs/screens/concepts/joke_shop/comedy_store_street_gemini_day.refgen.json b/docs/screens/concepts/joke_shop/comedy_store_street_gemini_day.refgen.json new file mode 100644 index 0000000..1ad3de3 --- /dev/null +++ b/docs/screens/concepts/joke_shop/comedy_store_street_gemini_day.refgen.json @@ -0,0 +1,12 @@ +{ + "concept": "comedy_store_street_gemini_day", + "generated": "comedy_store_street_gemini_day.png", + "model": "google/gemini-2.5-flash-image", + "reference": { + "file": "tmp/research/comedy-store/03.jpg", + "licence": "unchecked", + "page": "", + "licence_checked": false + }, + "suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show." +} diff --git a/docs/screens/concepts/joke_shop/comedy_store_street_gpt_day.png b/docs/screens/concepts/joke_shop/comedy_store_street_gpt_day.png new file mode 100644 index 0000000..15db539 Binary files /dev/null and b/docs/screens/concepts/joke_shop/comedy_store_street_gpt_day.png differ diff --git a/docs/screens/concepts/joke_shop/comedy_store_street_gpt_day.refgen.json b/docs/screens/concepts/joke_shop/comedy_store_street_gpt_day.refgen.json new file mode 100644 index 0000000..dfe2036 --- /dev/null +++ b/docs/screens/concepts/joke_shop/comedy_store_street_gpt_day.refgen.json @@ -0,0 +1,12 @@ +{ + "concept": "comedy_store_street_gpt_day", + "generated": "comedy_store_street_gpt_day.png", + "model": "openai/gpt-5-image-mini", + "reference": { + "file": "tmp/research/comedy-store/03.jpg", + "licence": "unchecked", + "page": "", + "licence_checked": false + }, + "suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show." +} diff --git a/docs/screens/concepts/joke_shop/comedy_store_strip_gemini_day.png b/docs/screens/concepts/joke_shop/comedy_store_strip_gemini_day.png new file mode 100644 index 0000000..3195fd0 Binary files /dev/null and b/docs/screens/concepts/joke_shop/comedy_store_strip_gemini_day.png differ diff --git a/docs/screens/concepts/joke_shop/comedy_store_strip_gemini_day.refgen.json b/docs/screens/concepts/joke_shop/comedy_store_strip_gemini_day.refgen.json new file mode 100644 index 0000000..408b328 --- /dev/null +++ b/docs/screens/concepts/joke_shop/comedy_store_strip_gemini_day.refgen.json @@ -0,0 +1,12 @@ +{ + "concept": "comedy_store_strip_gemini_day", + "generated": "comedy_store_strip_gemini_day.png", + "model": "google/gemini-2.5-flash-image", + "reference": { + "file": "tmp/research/comedy-store/06.jpg", + "licence": "unchecked", + "page": "", + "licence_checked": false + }, + "suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show." +} diff --git a/docs/screens/concepts/joke_shop/comedy_store_strip_gpt_day.png b/docs/screens/concepts/joke_shop/comedy_store_strip_gpt_day.png new file mode 100644 index 0000000..87e2f1c Binary files /dev/null and b/docs/screens/concepts/joke_shop/comedy_store_strip_gpt_day.png differ diff --git a/docs/screens/concepts/joke_shop/comedy_store_strip_gpt_day.refgen.json b/docs/screens/concepts/joke_shop/comedy_store_strip_gpt_day.refgen.json new file mode 100644 index 0000000..263be88 --- /dev/null +++ b/docs/screens/concepts/joke_shop/comedy_store_strip_gpt_day.refgen.json @@ -0,0 +1,12 @@ +{ + "concept": "comedy_store_strip_gpt_day", + "generated": "comedy_store_strip_gpt_day.png", + "model": "openai/gpt-5-image-mini", + "reference": { + "file": "tmp/research/comedy-store/06.jpg", + "licence": "unchecked", + "page": "", + "licence_checked": false + }, + "suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show." +} diff --git a/docs/screens/concepts/joke_shop/comedy_store_visitor_gemini_day.png b/docs/screens/concepts/joke_shop/comedy_store_visitor_gemini_day.png new file mode 100644 index 0000000..c5cd9bb Binary files /dev/null and b/docs/screens/concepts/joke_shop/comedy_store_visitor_gemini_day.png differ diff --git a/docs/screens/concepts/joke_shop/comedy_store_visitor_gemini_day.refgen.json b/docs/screens/concepts/joke_shop/comedy_store_visitor_gemini_day.refgen.json new file mode 100644 index 0000000..4c14e7e --- /dev/null +++ b/docs/screens/concepts/joke_shop/comedy_store_visitor_gemini_day.refgen.json @@ -0,0 +1,12 @@ +{ + "concept": "comedy_store_visitor_gemini_day", + "generated": "comedy_store_visitor_gemini_day.png", + "model": "google/gemini-2.5-flash-image", + "reference": { + "file": "tmp/research/comedy-store/05.jpg", + "licence": "unchecked", + "page": "", + "licence_checked": false + }, + "suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show." +} diff --git a/docs/screens/concepts/joke_shop/comedy_store_visitor_gpt_day.png b/docs/screens/concepts/joke_shop/comedy_store_visitor_gpt_day.png new file mode 100644 index 0000000..7f95659 Binary files /dev/null and b/docs/screens/concepts/joke_shop/comedy_store_visitor_gpt_day.png differ diff --git a/docs/screens/concepts/joke_shop/comedy_store_visitor_gpt_day.refgen.json b/docs/screens/concepts/joke_shop/comedy_store_visitor_gpt_day.refgen.json new file mode 100644 index 0000000..313e9f6 --- /dev/null +++ b/docs/screens/concepts/joke_shop/comedy_store_visitor_gpt_day.refgen.json @@ -0,0 +1,12 @@ +{ + "concept": "comedy_store_visitor_gpt_day", + "generated": "comedy_store_visitor_gpt_day.png", + "model": "openai/gpt-5-image-mini", + "reference": { + "file": "tmp/research/comedy-store/05.jpg", + "licence": "unchecked", + "page": "", + "licence_checked": false + }, + "suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show." +}