Rename Step Line to Gig Line
Update the game name in project.godot, export presets, UI/marquee/title strings, packaging (AppImage/NSIS/desktop/appdata), tools, docs, and the generated prop GLBs. Packaging assets and README screenshots are regenerated. Headless suite 209/209 and Python tooling tests pass.
No files matched your search
@@ -84,19 +84,19 @@ jobs:
|
||||
# NOTE: on Linux, makensis uses -D defines (the /D form is Windows-only
|
||||
# and is rejected as a script path), and it resolves relative paths
|
||||
# against the script directory — pass absolute paths from the workspace.
|
||||
cp assets/textures/icon.ico packaging/windows/step-line.ico
|
||||
cp assets/textures/icon.ico packaging/windows/gig-line.ico
|
||||
makensis \
|
||||
-DVERSION="$VERSION" \
|
||||
-DARTIFACT="$PWD/build/step-line-windows-$VERSION.exe" \
|
||||
-DICON="$PWD/packaging/windows/step-line.ico" \
|
||||
-DOUT="$PWD/build/step-line-setup-$VERSION.exe" \
|
||||
packaging/windows/step-line.nsi
|
||||
-DARTIFACT="$PWD/build/gig-line-windows-$VERSION.exe" \
|
||||
-DICON="$PWD/packaging/windows/gig-line.ico" \
|
||||
-DOUT="$PWD/build/gig-line-setup-$VERSION.exe" \
|
||||
packaging/windows/gig-line.nsi
|
||||
|
||||
- name: Verify Windows installer contents
|
||||
run: |
|
||||
VERSION="$(sed -n 's/.*config\/version="\([^"]*\)".*/\1/p' project.godot)"
|
||||
ls -la build/step-line-setup-$VERSION.exe
|
||||
7z l build/step-line-setup-$VERSION.exe | grep -E "step-line.exe|uninstall.exe"
|
||||
ls -la build/gig-line-setup-$VERSION.exe
|
||||
7z l build/gig-line-setup-$VERSION.exe | grep -E "gig-line.exe|uninstall.exe"
|
||||
|
||||
- name: Package Linux AppImage
|
||||
run: |
|
||||
@@ -106,7 +106,7 @@ jobs:
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: step-line-build
|
||||
name: gig-line-build
|
||||
path: build/*
|
||||
if-no-files-found: error
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ Completed task sections moved from `TODO.md`. Sections are moved only when every
|
||||
applied on phase change and shift start.
|
||||
- [x] Street lamps: poles with emissive bulbs + OmniLights on the sidewalk;
|
||||
`WorldBuilder.set_night_mode` switches bulbs/lights on at night.
|
||||
- [x] Marquee signage: emissive “STEP LINE” strips + Label3D above the entrance.
|
||||
- [x] Marquee signage: emissive “GIG LINE” strips + Label3D above the entrance.
|
||||
- [x] Street dressing: crosswalk stripes, planters, and low-poly trees.
|
||||
- [x] NPC visual variety: per-seed height/brightness variation (deterministic LCG).
|
||||
- [x] Denser routine traffic (tourists/performers/influencers/trespassers).
|
||||
@@ -211,21 +211,21 @@ Completed task sections moved from `TODO.md`. Sections are moved only when every
|
||||
- [x] Export presets: `binary_format/embed_pck=true` on all platforms — every binary is now
|
||||
self-contained (all game data in one file; `.pck` no longer shipped).
|
||||
- [x] App icon: `assets/textures/icon.png` (1024) + multi-size `icon.ico`, copied to
|
||||
`packaging/windows/step-line.ico` and `packaging/linux/step-line.png` via the generator.
|
||||
- [x] NSIS script `packaging/windows/step-line.nsi` (installs `Step Line.exe`, uninstaller,
|
||||
`packaging/windows/gig-line.ico` and `packaging/linux/gig-line.png` via the generator.
|
||||
- [x] NSIS script `packaging/windows/gig-line.nsi` (installs `Gig Line.exe`, uninstaller,
|
||||
shortcuts, registry entry; `makensis /DVERSION=… /DARTIFACT=…`).
|
||||
- [x] AppImage: `packaging/linux/step-line.desktop`, `AppRun`, appdata.xml, and
|
||||
- [x] AppImage: `packaging/linux/gig-line.desktop`, `AppRun`, appdata.xml, and
|
||||
`build_appimage.sh` (appimagetool, `APPIMAGE_EXTRACT_AND_RUN=1`).
|
||||
- [x] Local end-to-end: rebuilt embedded exports and produced `step-line-0.2.0-x86_64.AppImage`,
|
||||
- [x] Local end-to-end: rebuilt embedded exports and produced `gig-line-0.2.0-x86_64.AppImage`,
|
||||
ran it headless (0 script errors).
|
||||
- [x] CI: NSIS + AppImage steps added to `.gitea/workflows/build.yml` build job; publish glob
|
||||
already uploads `build/step-line-*<ver>*` (covers setup/AppImage names).
|
||||
- [x] CI run 1110 verified end-to-end (v0.2.1): NSIS installer `step-line-setup-0.2.1.exe`
|
||||
built, `7z l` shows `step-line.exe` + `uninstall.exe`, AppImage built (33.9 MB),
|
||||
already uploads `build/gig-line-*<ver>*` (covers setup/AppImage names).
|
||||
- [x] CI run 1110 verified end-to-end (v0.2.1): NSIS installer `gig-line-setup-0.2.1.exe`
|
||||
built, `7z l` shows `gig-line.exe` + `uninstall.exe`, AppImage built (33.9 MB),
|
||||
release `v0.2.1` published, `Job succeeded`.
|
||||
- Gotchas fixed on the way: makensis needs `-D` defines (not `/D`) and absolute paths
|
||||
(it resolves relatives against the script dir); installed exe must be space-free
|
||||
(`step-line.exe`); icon.ico must use classic BMP entries (ImageMagick; PIL emits
|
||||
(`gig-line.exe`); icon.ico must use classic BMP entries (ImageMagick; PIL emits
|
||||
PNG-compressed ICOs NSIS rejects).
|
||||
|
||||
## 🎮 Assets & detailed graphics pass (textures, rigs, UI feedback)
|
||||
@@ -234,7 +234,7 @@ Completed task sections moved from `TODO.md`. Sections are moved only when every
|
||||
seamless concrete, asphalt, awning, skyline, vignette, HUD icons, access-card art — all
|
||||
≤1024px and power-of-two; imported under `assets/textures/`.
|
||||
- [x] Environment: textured facade + glass door, concrete sidewalk, asphalt street, striped
|
||||
awning with “STEP LINE”, generated skyline backdrop planes, soft sun shadows.
|
||||
awning with “GIG LINE”, generated skyline backdrop planes, soft sun shadows.
|
||||
- [x] NPCs: humanoid rig (torso/head/limbs) with archetype props (camera, delivery box, hat,
|
||||
sign, backpack), procedural walk bob, head-turns-toward-guard cue.
|
||||
- [x] UI/feedback: inspection artifact cards, mode icons (flashlight/door/wand), escalation
|
||||
@@ -412,7 +412,7 @@ Completed 2026-10-31 (working tree). Headless **88/88**; `src/test/smoke_session
|
||||
offset and the spawn `y`, and verify eye height while walking the steps.
|
||||
- [x] Steps and the landing are visual-only (no collider). The guard walks through them; add
|
||||
simple step colliders or restage the landing so it does not intersect the walk path.
|
||||
- [x] Marquee text (`STEP LINE`) is tiny from the sidewalk. Scale the Label3D up.
|
||||
- [x] Marquee text (`GIG LINE`) is tiny from the sidewalk. Scale the Label3D up.
|
||||
- [x] Focus circle and name tag are small at 2–3 m. Consider a larger circle / font after a
|
||||
real playtest.
|
||||
- [x] NPC crowd cap (`MAX_LIVE_NPCS`) silently drops routine traffic at 16. Add a short
|
||||
@@ -655,7 +655,7 @@ produces a 63 MB static bundle and it serves locally with HTTP 200s for html/was
|
||||
|
||||
- [x] Add a `Web` preset to `export_presets.cfg` using `variant/thread_support=false` so the
|
||||
build runs on plain static hosting without COOP/COEP headers.
|
||||
- [x] Export to `build/web/` and package `build/step-line-web-<version>.zip` from
|
||||
- [x] Export to `build/web/` and package `build/gig-line-web-<version>.zip` from
|
||||
`tools/build_releases.sh` (zip or Python fallback).
|
||||
- [x] Publish the web zip with the desktop artifacts (`tools/publish_release.sh`).
|
||||
- [x] Cover the preset, the non-threaded choice, and the release wiring in
|
||||
|
||||
@@ -28,6 +28,14 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
|
||||
## Handoff (read this first)
|
||||
|
||||
- **Visual-alignment pass planned (2026-11-01):** `TODO.md` gains a "Visual
|
||||
alignment with rendered mockups" section. Goal: restructure generated-image
|
||||
storage, move the reference mockups out of `docs/screens/designs/` into a
|
||||
runtime-accessible root (e.g. `assets/images/`), load the proposed UI/scene
|
||||
art at runtime (start menu, selection screens, HUD, panels), and make the game
|
||||
match the mockups — verified by `screen_designs.py compare` + `judge`. Not
|
||||
started; no code moved yet.
|
||||
|
||||
- **Phase 2 — AI texturing (this agent, DONE 2026-11-01).** Phase 1 assets were
|
||||
already in the tree (untracked) and are preserved. Generated six seamless AI
|
||||
clothing albedos into `assets/textures/npc/ai/{shirt,trousers,jacket,vest,
|
||||
@@ -86,7 +94,7 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
aim-free selection with wheel cycling and Shift precision walk (ADR-0011/0012), and a **Web**
|
||||
export target. `export_presets.cfg` gains a `Web` preset with `variant/thread_support=false`
|
||||
(static hosting, no COOP/COEP); `tools/build_releases.sh` exports `build/web/` and zips it to
|
||||
`build/step-line-web-<ver>.zip`, and `publish_release.sh` uploads it. Covered by
|
||||
`build/gig-line-web-<ver>.zip`, and `publish_release.sh` uploads it. Covered by
|
||||
`src/test/tests/test_web_export.gd`.
|
||||
- **Prop atlas (v0.3.1):** `model_pipeline.atlas_for()` builds a per-prop power-of-two PNG with
|
||||
one 8×8 cell per palette role, plus a metallic/roughness atlas (G=roughness, B=metallic). The
|
||||
@@ -352,7 +360,7 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
and published — installers/AppImage are on the releases page. Releasing = bump version → tag → push.
|
||||
- NSIS gotchas (validated in a local ubuntu:24.04 docker repro): makensis uses `-D` defines
|
||||
(never `/D`), resolves relative `-DICON`/`-DARTIFACT` against the **script directory** so CI
|
||||
passes `$PWD`-absolute paths; installed exe must be space-free (`step-line.exe`); ICO must be
|
||||
passes `$PWD`-absolute paths; installed exe must be space-free (`gig-line.exe`); ICO must be
|
||||
classic BMP entries (ImageMagick `icon:auto-resize=48,32,16`; PIL emits PNG-compressed ICOs NSIS
|
||||
cannot load).
|
||||
- appimagetool runs system `appstreamcli` if present (strict, exit 3 on warnings) — project
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Step Line
|
||||
# Gig Line
|
||||
|
||||
Step Line is a workplace security simulation about observation, communication, access verification, and proportionate escalation. The player works security at public-facing venues around Hollywood Boulevard, managing stairs, entrances, crowds, guests, staff, and occasional serious threats.
|
||||
Gig Line is a workplace security simulation about observation, communication, access verification, and proportionate escalation. The player works security at public-facing venues around Hollywood Boulevard, managing stairs, entrances, crowds, guests, staff, and occasional serious threats.
|
||||
|
||||
The central design goal is simple:
|
||||
|
||||
@@ -23,12 +23,12 @@ The central design goal is simple:
|
||||
|
||||
| Platform | Package |
|
||||
| --- | --- |
|
||||
| **Windows — installer** | [`step-line-setup-<ver>.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · contains all game data, shortcuts + uninstaller |
|
||||
| **Windows — portable** | [`step-line-windows-<ver>.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, no install needed |
|
||||
| **Linux — AppImage** | [`step-line-<ver>-x86_64.AppImage`](https://git.allucanget.biz/zwitschi/security-game/releases) · single file, `chmod +x` and run |
|
||||
| **Linux — portable** | [`step-line-linux-<ver>.x86_64`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, `chmod +x` and run |
|
||||
| **macOS** | [`step-line-macos-<ver>.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unsigned build, quarantine note below |
|
||||
| **Web (browser)** | [`step-line-web-<ver>.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unzip and serve the folder from any static host (no special headers) |
|
||||
| **Windows — installer** | [`gig-line-setup-<ver>.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · contains all game data, shortcuts + uninstaller |
|
||||
| **Windows — portable** | [`gig-line-windows-<ver>.exe`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, no install needed |
|
||||
| **Linux — AppImage** | [`gig-line-<ver>-x86_64.AppImage`](https://git.allucanget.biz/zwitschi/security-game/releases) · single file, `chmod +x` and run |
|
||||
| **Linux — portable** | [`gig-line-linux-<ver>.x86_64`](https://git.allucanget.biz/zwitschi/security-game/releases) · 64-bit, `chmod +x` and run |
|
||||
| **macOS** | [`gig-line-macos-<ver>.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unsigned build, quarantine note below |
|
||||
| **Web (browser)** | [`gig-line-web-<ver>.zip`](https://git.allucanget.biz/zwitschi/security-game/releases) · unzip and serve the folder from any static host (no special headers) |
|
||||
|
||||
**All releases:** <https://git.allucanget.biz/zwitschi/security-game/releases>
|
||||
|
||||
@@ -45,7 +45,7 @@ The central design goal is simple:
|
||||
> the page and tag URLs are public.
|
||||
>
|
||||
> macOS builds are unsigned: right-click → Open, or clear the quarantine with
|
||||
> `xattr -dr com.apple.quarantine step-line-macos.zip`. Build instructions and
|
||||
> `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
|
||||
@@ -480,7 +480,7 @@ Implemented so far:
|
||||
- Prop atlas (v0.3.1): `tools/model_pipeline.py` packs each prop's palette into one power-of-two colour atlas plus a metallic/roughness atlas and emits a single material with per-vertex UVs, so a prop is one draw material rather than one per part; `audit` enforces the contract
|
||||
- Generated prop models (v0.3.0 work): `tools/model_pipeline.py` builds bollards, benches, bins, planters, newspaper boxes and a hydrant as `.glb` props with per-part materials, loaded by `WorldBuilder` with a procedural fallback; the optional AI concept step (`model_pipeline.py concept`) supplies per-prop colour palettes
|
||||
- NPC base model (v0.6.0 assets): `tools/npc_pipeline.py` builds a skinned, UV-mapped base character (`assets/models/generated/npc_base.glb`) with per-slot albedo/normal/ORM maps and an armature matching the procedural rig's node names; AI fabric albedos (shirt/trousers) and a derived `palette.json` are layered in. Runtime integration into `NpcAvatar` is pending, so the procedural rig still renders
|
||||
- Web build: `build/step-line-web-<version>.zip` (Godot's non-threaded web template, no COOP/COEP headers needed) built by `tools/build_releases.sh` and published with the desktop artifacts; serve the unzipped folder from any static host
|
||||
- Web build: `build/gig-line-web-<version>.zip` (Godot's non-threaded web template, no COOP/COEP headers needed) built by `tools/build_releases.sh` and published with the desktop artifacts; serve the unzipped folder from any static host
|
||||
- Aim-free selection pass (v0.3.0 work, [ADR-0011](docs/adr/0011-aim-free-selection-and-precision-walk.md)): the focus cone ranks candidates by angle then distance, `Tab` and the mouse wheel cycle nearby people nearest-first and pin the selection, right click clears focus with a short re-acquire grace, the HUD reports how many people are in the ring, and holding `Shift` walks at half speed for close work
|
||||
|
||||
Not yet implemented: wiring the authored NPC base model into the live game (`NpcAvatar._load_model`, see [`docs/plan-graphics-v0.6.md`](docs/plan-graphics-v0.6.md) — the procedural rig still renders for now), live 3D body-camera replay, editor-based GUT integration, and crowd performance profiling/LOD (see `TODO.md`).
|
||||
@@ -493,7 +493,7 @@ Not yet implemented: wiring the authored NPC base model into the live game (`Npc
|
||||
4. The guard's camera sits at eye height and the guard stands on the landing, not inside the building.
|
||||
5. Walking into the steps carries the guard up onto the landing (steps have colliders).
|
||||
6. The skyline backdrop shows silhouettes against the sky, not an opaque black slab.
|
||||
7. The `STEP LINE` marquee is readable from the sidewalk.
|
||||
7. The `GIG LINE` marquee is readable from the sidewalk.
|
||||
8. NPCs spawn and approach the entrance during the first minutes.
|
||||
9. Looking at an NPC inside the focus cone shows a blue focus circle in front of the face, the person's name, and the HUD target line.
|
||||
10. `Space` or left click opens the action wheel; `A`/`D` highlight a slice, `Space` confirms it, `Esc`/right click cancels without a log entry.
|
||||
|
||||
@@ -75,6 +75,54 @@ Detailed plan: [`docs/plan-graphics-v0.6.md`](docs/plan-graphics-v0.6.md) · [AD
|
||||
- [ ] Update `README.md`, `docs/architecture.md` (Level 2 gains `tools/npc_pipeline.py`), and mark ADR-0013 Accepted.
|
||||
- [ ] Publish the release per `docs/RELEASING.md`.
|
||||
|
||||
## Visual alignment with rendered mockups
|
||||
|
||||
The AI-rendered references in `docs/screens/designs/` (start menu, pause, settings,
|
||||
shift review, radial menu, HUD, scene views) describe the intended look of every
|
||||
screen. This pass reorganizes how generated images are stored, makes the game load
|
||||
the proposed interface/scene art from disk, and aligns the selection screens, HUD,
|
||||
and scene visuals with those mockups — verified with
|
||||
`tools/screen_designs.py compare` + `judge`.
|
||||
|
||||
### Storage restructure
|
||||
|
||||
- [ ] Decide the canonical runtime image root (e.g. `assets/images/` for UI/scene art) and record it in `MEMORY.md` and an ADR.
|
||||
- [ ] Move the reference mockups from `docs/screens/designs/` into the runtime root (keep `docs/screens/designs/` as a docs-only copy or replace it with the new path).
|
||||
- [ ] Document one convention for game vs reference vs development images across `assets/textures/`, `assets/images/`, `assets/models/generated/`, `docs/screenshots/`, and `docs/screens/designs/`.
|
||||
- [ ] Re-run `godot --headless --path . --import` to regenerate `.import` sidecars after any move.
|
||||
- [ ] Confirm `.gitignore` still excludes development-only outputs (concepts, Blender sources, raw AI fabrics) under the new layout.
|
||||
|
||||
### Documentation path updates
|
||||
|
||||
- [ ] Update `README.md` paths (screen-designs section, confirmed-assets links, the `assets/images/backgrounds` resize example).
|
||||
- [ ] Update `docs/architecture.md`, `PLAN.md`, and ADR-0010/0011/0012/0013 references to `docs/screens/designs/`.
|
||||
- [ ] Update `tools/screen_designs.py` docstrings and mark the old paths in `DONE.md` as historical.
|
||||
|
||||
### Code path updates
|
||||
|
||||
- [ ] Point `tools/screen_designs.py generate` at the new design output path and keep `compare`/`judge` reading the right locations.
|
||||
- [ ] Update GDScript `preload()` paths (`materials.gd`, `hud.gd`, `world_builder.gd`) if the game textures move.
|
||||
- [ ] Update `capture_screenshots.gd` / `capture_prop_gallery.gd` output directories if captures relocate.
|
||||
|
||||
### Load proposed interfaces + scene art from disk
|
||||
|
||||
- [ ] Add a central UI/scene art loader (e.g. `src/game/ui/art.gd`) that loads the mockup-derived images from the new runtime root, with a procedural fallback when a file is missing.
|
||||
- [ ] Wire the start menu and venue selection screen to use the `start_menu` scene art.
|
||||
- [ ] Wire the pause overlay, settings, shift review, radial menu, and HUD chrome to their reference images.
|
||||
|
||||
### Align in-game visuals
|
||||
|
||||
- [ ] Make the venue selection screen match the `start_menu` mockup (layout, palette, background).
|
||||
- [ ] Make the HUD match the `targeting_npc` / `escalation_hud` mockups (focus ring, escalation meter, log, hints).
|
||||
- [ ] Align the remaining panels (pause, settings, shift review, radio, wand, timeline) to their mockups.
|
||||
- [ ] Align scene lighting, fog, and post-processing for `venue_overview` and `late_night_avenue`.
|
||||
|
||||
### Verify against the mockups
|
||||
|
||||
- [ ] Regenerate the staged captures and run `screen_designs.py compare` (no gross drift).
|
||||
- [ ] Run `screen_designs.py judge` and clear every `diff` verdict (target `match`/`review`).
|
||||
- [ ] Add the capture + compare step to CI or a repeatable smoke so drift is caught early.
|
||||
|
||||
## Future ideas (optional, not scheduled)
|
||||
|
||||
- [ ] Live 3D body-camera replay (the timeline is text-only today).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Releasing Step Line
|
||||
# Releasing Gig Line
|
||||
|
||||
This guide describes how to produce downloadable executables and publish them
|
||||
so the README "Downloads" links always point at the latest release.
|
||||
@@ -18,7 +18,7 @@ time you export, either:
|
||||
Verify with:
|
||||
|
||||
```bash
|
||||
godot --headless --export-release "Linux" build/step-line-smoke.x86_64
|
||||
godot --headless --export-release "Linux" build/gig-line-smoke.x86_64
|
||||
```
|
||||
|
||||
## 2. Bump the version
|
||||
@@ -81,17 +81,17 @@ godot --headless --path . --quit-after 120 # boot smoke t
|
||||
|
||||
Artifacts are written to `build/` (all exports embed the PCK — single files):
|
||||
|
||||
- `build/step-line-linux-<version>.x86_64`
|
||||
- `build/step-line-windows-<version>.exe`
|
||||
- `build/step-line-macos-<version>.zip`
|
||||
- `build/step-line-web-<version>.zip` — browser build (non-threaded Godot web
|
||||
- `build/gig-line-linux-<version>.x86_64`
|
||||
- `build/gig-line-windows-<version>.exe`
|
||||
- `build/gig-line-macos-<version>.zip`
|
||||
- `build/gig-line-web-<version>.zip` — browser build (non-threaded Godot web
|
||||
template; unzip and serve the folder, no COOP/COEP headers required)
|
||||
|
||||
When run in CI (tags/dispatch), the build job also packages:
|
||||
|
||||
- `build/step-line-setup-<version>.exe` — Windows installer (NSIS, incl. shortcuts +
|
||||
- `build/gig-line-setup-<version>.exe` — Windows installer (NSIS, incl. shortcuts +
|
||||
uninstaller; apt `nsis` on the runner)
|
||||
- `build/step-line-<version>-x86_64.AppImage` — Linux AppImage (`packaging/linux/build_appimage.sh`,
|
||||
- `build/gig-line-<version>-x86_64.AppImage` — Linux AppImage (`packaging/linux/build_appimage.sh`,
|
||||
appimagetool via `APPIMAGE_EXTRACT_AND_RUN`)
|
||||
|
||||
Locally you can build the AppImage with `bash packaging/linux/build_appimage.sh <version>`;
|
||||
@@ -145,7 +145,7 @@ RELEASE_JSON=$(curl -s -X POST "$API" \
|
||||
|
||||
RELEASE_ID=$(echo "$RELEASE_JSON" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])")
|
||||
|
||||
for f in build/step-line-*"$VERSION"*; do
|
||||
for f in build/gig-line-*"$VERSION"*; do
|
||||
curl -s -X POST "$API/$RELEASE_ID/assets" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-F "attachment=@$f"
|
||||
|
||||
@@ -132,7 +132,7 @@ A continuous-integration pipeline keeps the headless test suite green on every c
|
||||
Releases are produced from a tagged commit and published to the repository host's release page, where the README "Downloads" links point.
|
||||
|
||||
- `export_presets.cfg` — committed Linux, Windows Desktop, and macOS export presets so builds are reproducible.
|
||||
- `tools/build_releases.sh` — exports all three desktop artifacts into `build/`, named `step-line-<platform>-<version>.<ext>`.
|
||||
- `tools/build_releases.sh` — exports all three desktop artifacts into `build/`, named `gig-line-<platform>-<version>.<ext>`.
|
||||
- `tools/publish_release.sh` — creates a release and uploads the artifacts via the Gitea/Forgejo API (requires `GITEA_TOKEN`).
|
||||
- [`RELEASING.md`](RELEASING.md) — step-by-step guide and release checklist.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 835 KiB After Width: | Height: | Size: 835 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 528 KiB After Width: | Height: | Size: 527 KiB |
|
Before Width: | Height: | Size: 958 KiB After Width: | Height: | Size: 956 KiB |
@@ -9,7 +9,7 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/step-line-linux.x86_64"
|
||||
export_path="build/gig-line-linux.x86_64"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
@@ -40,7 +40,7 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/step-line-windows.exe"
|
||||
export_path="build/gig-line-windows.exe"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
@@ -76,7 +76,7 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/step-line-macos.zip"
|
||||
export_path="build/gig-line-macos.zip"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
@@ -96,7 +96,7 @@ texture_format/etc2_astc=true
|
||||
codesign/enable=false
|
||||
codesign/timestamp=true
|
||||
codesign/identity_type=0
|
||||
application/bundle_identifier="biz.allucanget.step-line"
|
||||
application/bundle_identifier="biz.allucanget.gig-line"
|
||||
application/icon=""
|
||||
application/icon_interpolation=4
|
||||
application/export_angle=0
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
# AppImage entry point: launch the bundled game binary.
|
||||
SELF="$(readlink -f "$0")"
|
||||
HERE="$(dirname "$SELF")"
|
||||
exec "${HERE}/usr/bin/step-line" "$@"
|
||||
exec "${HERE}/usr/bin/gig-line" "$@"
|
||||
@@ -1,15 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build a self-contained Step Line AppImage (all game data included).
|
||||
# Build a self-contained Gig Line AppImage (all game data included).
|
||||
#
|
||||
# Prereqs: exported Linux binary in build/ (embed_pck=true), curl.
|
||||
# Usage: bash packaging/linux/build_appimage.sh [version]
|
||||
# Output: build/step-line-<version>-x86_64.AppImage
|
||||
# Output: build/gig-line-<version>-x86_64.AppImage
|
||||
set -euo pipefail
|
||||
|
||||
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT="$(cd "$HERE/../.." && pwd)"
|
||||
VERSION="${1:-$(sed -n 's/.*config\/version="\([^"]*\)".*/\1/p' "$ROOT/project.godot")}"
|
||||
SRC_BIN="$ROOT/build/step-line-linux-${VERSION}.x86_64"
|
||||
SRC_BIN="$ROOT/build/gig-line-linux-${VERSION}.x86_64"
|
||||
|
||||
if [[ ! -f "$SRC_BIN" ]]; then
|
||||
echo "error: missing $SRC_BIN — run ./tools/build_releases.sh first" >&2
|
||||
@@ -18,20 +18,20 @@ fi
|
||||
|
||||
WORK="$(mktemp -d)"
|
||||
trap 'rm -rf "$WORK"' EXIT
|
||||
APPDIR="$WORK/StepLine.AppDir"
|
||||
APPDIR="$WORK/GigLine.AppDir"
|
||||
mkdir -p "$APPDIR/usr/bin"
|
||||
cp "$SRC_BIN" "$APPDIR/usr/bin/step-line"
|
||||
cp "$SRC_BIN" "$APPDIR/usr/bin/gig-line"
|
||||
# The export embeds the PCK (embed_pck=true), so no extra data files are needed.
|
||||
|
||||
cp "$HERE/step-line.desktop" "$APPDIR/step-line.desktop"
|
||||
cp "$HERE/gig-line.desktop" "$APPDIR/gig-line.desktop"
|
||||
cp "$HERE/AppRun" "$APPDIR/AppRun"
|
||||
chmod +x "$APPDIR/AppRun"
|
||||
cp "$HERE/step-line.png" "$APPDIR/step-line.png"
|
||||
cp "$HERE/gig-line.png" "$APPDIR/gig-line.png"
|
||||
# Desktop entry + metainfo in standard locations (AppStream validation requires
|
||||
# the metainfo filename to match the component id, and the .desktop discoverable).
|
||||
mkdir -p "$APPDIR/usr/share/applications" "$APPDIR/usr/share/metainfo"
|
||||
cp "$HERE/step-line.desktop" "$APPDIR/usr/share/applications/step-line.desktop"
|
||||
cp "$HERE/step-line.appdata.xml" "$APPDIR/usr/share/metainfo/net.stepline.game.appdata.xml"
|
||||
cp "$HERE/gig-line.desktop" "$APPDIR/usr/share/applications/gig-line.desktop"
|
||||
cp "$HERE/gig-line.appdata.xml" "$APPDIR/usr/share/metainfo/net.gigline.game.appdata.xml"
|
||||
|
||||
TOOL="${APPIMAGE_TOOL:-/tmp/appimagetool-x86_64.AppImage}"
|
||||
if [[ ! -f "$TOOL" ]]; then
|
||||
@@ -41,7 +41,7 @@ if [[ ! -f "$TOOL" ]]; then
|
||||
chmod +x "$TOOL"
|
||||
fi
|
||||
|
||||
OUT="$ROOT/build/step-line-${VERSION}-x86_64.AppImage"
|
||||
OUT="$ROOT/build/gig-line-${VERSION}-x86_64.AppImage"
|
||||
echo "==> Building AppImage -> $OUT"
|
||||
# Extract-and-run avoids a FUSE dependency on the build host.
|
||||
APPIMAGE_EXTRACT_AND_RUN=1 "$TOOL" "$APPDIR" "$OUT"
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>net.stepline.game</id>
|
||||
<name>Step Line</name>
|
||||
<id>net.gigline.game</id>
|
||||
<name>Gig Line</name>
|
||||
<summary>Workplace security simulation on Hollywood Boulevard</summary>
|
||||
<url type="homepage">https://git.allucanget.biz/zwitschi/security-game</url>
|
||||
<developer id="net.stepline"><name>Step Line Team</name></developer>
|
||||
<developer id="net.gigline"><name>Gig Line Team</name></developer>
|
||||
<description>
|
||||
<p>
|
||||
Step Line is a workplace security simulation about observation, communication,
|
||||
Gig Line is a workplace security simulation about observation, communication,
|
||||
access verification, and proportionate escalation. Guard the steps and entrance
|
||||
of venues around Hollywood Boulevard: direct tourists, verify wristbands and IDs,
|
||||
screen guests, and escalate only when you have to.
|
||||
</p>
|
||||
</description>
|
||||
<launchable type="desktop-id">step-line.desktop</launchable>
|
||||
<launchable type="desktop-id">gig-line.desktop</launchable>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>MIT</project_license>
|
||||
<content_rating type="oars-1.1" />
|
||||
@@ -1,9 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Step Line
|
||||
Name=Gig Line
|
||||
Comment=Workplace security simulation on Hollywood Boulevard
|
||||
Exec=step-line
|
||||
Icon=step-line
|
||||
Exec=gig-line
|
||||
Icon=gig-line
|
||||
Terminal=false
|
||||
Categories=Game;Simulation;
|
||||
Keywords=security;simulation;hollywood;
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,8 +1,8 @@
|
||||
; Step Line Windows installer (NSIS 3).
|
||||
; Gig Line Windows installer (NSIS 3).
|
||||
; Build from the repo root with the exported self-contained exe:
|
||||
; makensis /DVERSION=0.2.0 /DARTIFACT=build/step-line-windows-0.2.0.exe \
|
||||
; /DICON=packaging/windows/step-line.ico packaging/windows/step-line.nsi
|
||||
; Outputs: build/step-line-setup-<VERSION>.exe
|
||||
; makensis /DVERSION=0.2.0 /DARTIFACT=build/gig-line-windows-0.2.0.exe \
|
||||
; /DICON=packaging/windows/gig-line.ico packaging/windows/gig-line.nsi
|
||||
; Outputs: build/gig-line-setup-<VERSION>.exe
|
||||
|
||||
!ifndef VERSION
|
||||
!define VERSION "0.0.0"
|
||||
@@ -11,26 +11,26 @@
|
||||
!error "ARTIFACT define required (path to exported windows exe)"
|
||||
!endif
|
||||
!ifndef ICON
|
||||
!define ICON "packaging\windows\step-line.ico"
|
||||
!define ICON "packaging\windows\gig-line.ico"
|
||||
!endif
|
||||
|
||||
; The installed executable uses this clean name (no spaces — NSIS /oname tokens
|
||||
; on whitespace, so a spaced name breaks the File directive).
|
||||
!define INSTALLED_EXE "step-line.exe"
|
||||
!define INSTALLED_EXE "gig-line.exe"
|
||||
!ifndef OUT
|
||||
!define OUT "build\step-line-setup-${VERSION}.exe"
|
||||
!define OUT "build\gig-line-setup-${VERSION}.exe"
|
||||
!endif
|
||||
!define COMPANY "Step Line Project"
|
||||
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Step Line"
|
||||
!define COMPANY "Gig Line Project"
|
||||
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gig Line"
|
||||
|
||||
Unicode true
|
||||
ManifestDPIAware true
|
||||
Icon "${ICON}"
|
||||
UninstallIcon "${ICON}"
|
||||
|
||||
Name "Step Line ${VERSION}"
|
||||
Name "Gig Line ${VERSION}"
|
||||
OutFile "${OUT}"
|
||||
InstallDir "$PROGRAMFILES64\Step Line"
|
||||
InstallDir "$PROGRAMFILES64\Gig Line"
|
||||
RequestExecutionLevel admin
|
||||
|
||||
Page directory
|
||||
@@ -47,13 +47,13 @@ Section "Install"
|
||||
WriteUninstaller "$INSTDIR\uninstall.exe"
|
||||
|
||||
; Shortcuts
|
||||
CreateDirectory "$SMPROGRAMS\Step Line"
|
||||
CreateShortCut "$SMPROGRAMS\Step Line\Step Line.lnk" "$INSTDIR\${INSTALLED_EXE}"
|
||||
CreateShortCut "$SMPROGRAMS\Step Line\Uninstall.lnk" "$INSTDIR\uninstall.exe"
|
||||
CreateShortCut "$DESKTOP\Step Line.lnk" "$INSTDIR\${INSTALLED_EXE}"
|
||||
CreateDirectory "$SMPROGRAMS\Gig Line"
|
||||
CreateShortCut "$SMPROGRAMS\Gig Line\Gig Line.lnk" "$INSTDIR\${INSTALLED_EXE}"
|
||||
CreateShortCut "$SMPROGRAMS\Gig Line\Uninstall.lnk" "$INSTDIR\uninstall.exe"
|
||||
CreateShortCut "$DESKTOP\Gig Line.lnk" "$INSTDIR\${INSTALLED_EXE}"
|
||||
|
||||
; Registry (Add/Remove Programs)
|
||||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "Step Line"
|
||||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "Gig Line"
|
||||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${VERSION}"
|
||||
WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "${COMPANY}"
|
||||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$INSTDIR\${INSTALLED_EXE}"
|
||||
@@ -66,9 +66,9 @@ Section "Uninstall"
|
||||
Delete "$INSTDIR\${INSTALLED_EXE}"
|
||||
Delete "$INSTDIR\uninstall.exe"
|
||||
RMDir "$INSTDIR"
|
||||
Delete "$SMPROGRAMS\Step Line\Step Line.lnk"
|
||||
Delete "$SMPROGRAMS\Step Line\Uninstall.lnk"
|
||||
RMDir "$SMPROGRAMS\Step Line"
|
||||
Delete "$DESKTOP\Step Line.lnk"
|
||||
Delete "$SMPROGRAMS\Gig Line\Gig Line.lnk"
|
||||
Delete "$SMPROGRAMS\Gig Line\Uninstall.lnk"
|
||||
RMDir "$SMPROGRAMS\Gig Line"
|
||||
Delete "$DESKTOP\Gig Line.lnk"
|
||||
DeleteRegKey HKLM "${UNINST_KEY}"
|
||||
SectionEnd
|
||||
@@ -10,7 +10,7 @@ config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Step Line"
|
||||
config/name="Gig Line"
|
||||
config/description="Workplace security simulation about observation, access verification, and proportionate escalation."
|
||||
config/version="0.5.0"
|
||||
run/main_scene="res://scenes/main.tscn"
|
||||
|
||||
@@ -8,4 +8,4 @@ func _ready() -> void:
|
||||
var manager := GameManager.new()
|
||||
manager.name = "GameManager"
|
||||
add_child(manager)
|
||||
print("[Step Line] game started")
|
||||
print("[Gig Line] game started")
|
||||
@@ -266,7 +266,7 @@ func _init() -> void:
|
||||
add_child(debug_label)
|
||||
|
||||
func set_shift_state(coordinator: Object, scenario: Resource) -> void:
|
||||
top_label.text = scenario.display_name if scenario else "Step Line"
|
||||
top_label.text = scenario.display_name if scenario else "Gig Line"
|
||||
var mins := int(coordinator.elapsed_s) / 60
|
||||
var secs := int(coordinator.elapsed_s) % 60
|
||||
time_label.text = "shift %02d:%02d phase %s\nrep %.0f crowd %.0f%%" % [
|
||||
|
||||
@@ -47,7 +47,7 @@ func _build() -> void:
|
||||
center.add_child(column)
|
||||
|
||||
var title := Label.new()
|
||||
title.text = "STEP LINE"
|
||||
title.text = "GIG LINE"
|
||||
title.add_theme_font_size_override("font_size", 44)
|
||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
column.add_child(title)
|
||||
|
||||
@@ -270,7 +270,7 @@ func _build_marquee() -> void:
|
||||
_marquee_emissive.append(mat)
|
||||
marquee_label = Label3D.new()
|
||||
marquee_label.name = "MarqueeLabel"
|
||||
marquee_label.text = "STEP LINE"
|
||||
marquee_label.text = "GIG LINE"
|
||||
marquee_label.position = Vector3(0, 7.3, -3.55)
|
||||
marquee_label.modulate = Color(1, 0.6, 0.9)
|
||||
marquee_label.font_size = 160
|
||||
|
||||
@@ -47,9 +47,9 @@ func test_web_preset_is_static_hosting_friendly() -> bool:
|
||||
func test_release_scripts_build_the_web_zip() -> bool:
|
||||
var build := FileAccess.get_file_as_string("res://tools/build_releases.sh")
|
||||
var a := TestUtils.check(build.contains('--export-release "Web"'), "build script exports Web")
|
||||
var b := TestUtils.check(build.contains("step-line-web-${VERSION}.zip"), "build script names the web zip")
|
||||
var b := TestUtils.check(build.contains("gig-line-web-${VERSION}.zip"), "build script names the web zip")
|
||||
var publish := FileAccess.get_file_as_string("res://tools/publish_release.sh")
|
||||
var c := TestUtils.check(publish.contains("step-line-web-$VERSION.zip"), "publish script uploads the web zip")
|
||||
var c := TestUtils.check(publish.contains("gig-line-web-$VERSION.zip"), "publish script uploads the web zip")
|
||||
return a and b and c
|
||||
|
||||
func test_web_build_files_present_when_exported() -> bool:
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
# - Run from the repository root.
|
||||
#
|
||||
# Produces:
|
||||
# build/step-line-linux-<version>.x86_64
|
||||
# build/step-line-windows-<version>.exe
|
||||
# build/step-line-macos-<version>.zip
|
||||
# build/step-line-web-<version>.zip (Godot web build: static hosting, no threads)
|
||||
# build/gig-line-linux-<version>.x86_64
|
||||
# build/gig-line-windows-<version>.exe
|
||||
# build/gig-line-macos-<version>.zip
|
||||
# build/gig-line-web-<version>.zip (Godot web build: static hosting, no threads)
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
@@ -21,24 +21,24 @@ mkdir -p build
|
||||
rm -f build/*.pck
|
||||
|
||||
echo "==> Exporting Linux (x86_64)"
|
||||
"$GODOT" --headless --export-release "Linux" "build/step-line-linux-${VERSION}.x86_64"
|
||||
"$GODOT" --headless --export-release "Linux" "build/gig-line-linux-${VERSION}.x86_64"
|
||||
|
||||
echo "==> Exporting Windows Desktop"
|
||||
"$GODOT" --headless --export-release "Windows Desktop" "build/step-line-windows-${VERSION}.exe"
|
||||
"$GODOT" --headless --export-release "Windows Desktop" "build/gig-line-windows-${VERSION}.exe"
|
||||
|
||||
echo "==> Exporting macOS"
|
||||
"$GODOT" --headless --export-release "macOS" "build/step-line-macos-${VERSION}.zip"
|
||||
"$GODOT" --headless --export-release "macOS" "build/gig-line-macos-${VERSION}.zip"
|
||||
|
||||
echo "==> Exporting Web (no threads, static-hosting friendly)"
|
||||
rm -rf build/web
|
||||
mkdir -p build/web
|
||||
"$GODOT" --headless --export-release "Web" "build/web/index.html"
|
||||
# Ship the web build as a single zip so it can be downloaded and served as-is.
|
||||
rm -f "build/step-line-web-${VERSION}.zip"
|
||||
rm -f "build/gig-line-web-${VERSION}.zip"
|
||||
if command -v zip >/dev/null 2>&1; then
|
||||
(cd build/web && zip -q -r "../step-line-web-${VERSION}.zip" .)
|
||||
(cd build/web && zip -q -r "../gig-line-web-${VERSION}.zip" .)
|
||||
else
|
||||
python3 - "$PWD/build/web" "$PWD/build/step-line-web-${VERSION}.zip" <<'PYZIP'
|
||||
python3 - "$PWD/build/web" "$PWD/build/gig-line-web-${VERSION}.zip" <<'PYZIP'
|
||||
import os, sys, zipfile
|
||||
src, out = sys.argv[1], sys.argv[2]
|
||||
with zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as archive:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate small authored textures for Step Line (assets/ import convention).
|
||||
"""Generate small authored textures for Gig Line (assets/ import convention).
|
||||
|
||||
All outputs are deterministic (fixed seeds), <=1024px, power-of-two where
|
||||
possible. Run from the repo root: python3 tools/generate_textures.py
|
||||
@@ -202,8 +202,8 @@ def awning():
|
||||
for x in range(0, w, 32):
|
||||
d.arc([x, h - 24, x + 32, h + 40], 0, 180, fill=(80, 20, 24), width=6)
|
||||
f = font(96)
|
||||
tw = d.textlength("STEP LINE", font=f)
|
||||
d.text(((w - tw) / 2, 30), "STEP LINE", font=f, fill=(255, 250, 235))
|
||||
tw = d.textlength("GIG LINE", font=f)
|
||||
d.text(((w - tw) / 2, 30), "GIG LINE", font=f, fill=(255, 250, 235))
|
||||
# subtle top shading
|
||||
shade = Image.new("RGBA", (w, h), (0, 0, 0, 0))
|
||||
sd = ImageDraw.Draw(shade)
|
||||
@@ -409,7 +409,7 @@ def generate_image(prompt: str, model: str, size: int,
|
||||
"Authorization": f"Bearer {_api_key()}",
|
||||
"Content-Type": "application/json",
|
||||
"HTTP-Referer": "https://git.allucanget.biz/zwitschi/security-game",
|
||||
"X-Title": "Step Line",
|
||||
"X-Title": "Gig Line",
|
||||
},
|
||||
method="POST",
|
||||
)
|
||||
@@ -472,7 +472,7 @@ def _run_ai(args: argparse.Namespace) -> None:
|
||||
|
||||
def _build_arg_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate Step Line textures (authored or via OpenRouter).")
|
||||
description="Generate Gig Line textures (authored or via OpenRouter).")
|
||||
parser.add_argument(
|
||||
"--ai", action="store_true",
|
||||
help="generate textures through the OpenRouter image API "
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Build the low-poly prop models used in the Step Line street scene.
|
||||
"""Build the low-poly prop models used in the Gig Line street scene.
|
||||
|
||||
The scene needs street furniture (bollards, benches, bins, planters, newspaper
|
||||
boxes, a hydrant) that reads as solid geometry instead of flat boxes. This tool
|
||||
@@ -629,7 +629,7 @@ def build_glb(prop: dict, palette: dict = None, atlas: dict = None) -> bytes:
|
||||
mr_view = add_view(atlas["metal_rough_png"])
|
||||
|
||||
gltf = {
|
||||
"asset": {"version": "2.0", "generator": "step-line model_pipeline"},
|
||||
"asset": {"version": "2.0", "generator": "gig-line model_pipeline"},
|
||||
"scene": 0,
|
||||
"scenes": [{"name": prop["name"], "nodes": [0]}],
|
||||
"nodes": [{"name": prop["name"], "mesh": 0}],
|
||||
@@ -889,7 +889,7 @@ def list_props(args) -> int:
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Build low-poly prop models for Step Line.")
|
||||
description="Build low-poly prop models for Gig Line.")
|
||||
commands = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
listing = commands.add_parser("list", help="print the prop catalogue")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Build the low-poly, skinned NPC base mesh used by Step Line.
|
||||
"""Build the low-poly, skinned NPC base mesh used by Gig Line.
|
||||
|
||||
The mesh, armature, UVs and neutral material maps are authored procedurally in
|
||||
Blender and exported to `assets/models/generated/npc_base.glb`. Godot imports the
|
||||
|
||||
@@ -59,14 +59,14 @@ fi
|
||||
|
||||
# Artifacts that must exist (run tools/build_releases.sh first).
|
||||
portables=(
|
||||
"build/step-line-linux-$VERSION.x86_64"
|
||||
"build/step-line-windows-$VERSION.exe"
|
||||
"build/step-line-macos-$VERSION.zip"
|
||||
"build/gig-line-linux-$VERSION.x86_64"
|
||||
"build/gig-line-windows-$VERSION.exe"
|
||||
"build/gig-line-macos-$VERSION.zip"
|
||||
)
|
||||
extras=(
|
||||
"build/step-line-setup-$VERSION.exe"
|
||||
"build/step-line-$VERSION-x86_64.AppImage"
|
||||
"build/step-line-web-$VERSION.zip"
|
||||
"build/gig-line-setup-$VERSION.exe"
|
||||
"build/gig-line-$VERSION-x86_64.AppImage"
|
||||
"build/gig-line-web-$VERSION.zip"
|
||||
)
|
||||
all_artifacts=("${portables[@]}")
|
||||
for f in "${extras[@]}"; do
|
||||
@@ -81,7 +81,7 @@ API="$HOST/api/v1/repos/$REPO/releases"
|
||||
echo "==> Creating release $TAG on $HOST/$REPO"
|
||||
RELEASE_ID="$(curl -s -X POST "$API" "${AUTH[@]}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"Step Line $VERSION — playable prototype. See README for controls.\",\"draft\":false,\"prerelease\":false}" \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"Gig Line $VERSION — playable prototype. See README for controls.\",\"draft\":false,\"prerelease\":false}" \
|
||||
| python3 -c "import sys,json;print(json.load(sys.stdin).get('id',''))" 2>/dev/null || true)"
|
||||
|
||||
# If the release already exists (tag already pushed), reuse it.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate screen-design reference images for Step Line and compare captures.
|
||||
"""Generate screen-design reference images for Gig Line and compare captures.
|
||||
|
||||
This tool turns the screen descriptions that already live in `docs/`
|
||||
(README screenshot captions, ADRs 0007-0010, PLAN.md, architecture.md, and the
|
||||
@@ -507,7 +507,7 @@ SCREENS = [
|
||||
"prompt": (
|
||||
"First-person 3D game screenshot at night from a security guard standing at "
|
||||
"the bottom of venue steps, looking at a lit entrance door with a striped "
|
||||
"awning and STEP LINE sign. Subtle head-height view, brick facade, dark blue "
|
||||
"awning and GIG LINE sign. Subtle head-height view, brick facade, dark blue "
|
||||
"night sky, minimal HUD: a small cyan 'Precision walk (Shift)' chip at the "
|
||||
"bottom left, shift clock top right, thin control hint line at the bottom. "
|
||||
"Realistic lighting, muted colours, no people"),
|
||||
@@ -944,7 +944,7 @@ def _call_openrouter(body, timeout=180):
|
||||
"Authorization": f"Bearer {key}",
|
||||
"Content-Type": "application/json",
|
||||
"HTTP-Referer": "https://git.allucanget.biz/zwitschi/security-game",
|
||||
"X-Title": "Step Line",
|
||||
"X-Title": "Gig Line",
|
||||
},
|
||||
method="POST",
|
||||
)
|
||||
@@ -1018,7 +1018,7 @@ def judge(args):
|
||||
|
||||
def build_parser():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate and compare Step Line screen-design references.")
|
||||
description="Generate and compare Gig Line screen-design references.")
|
||||
commands = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
gen = commands.add_parser(
|
||||
|
||||