0.2.3: the install icon keeps the 0.2.x mint rook (the owner's choice), refined: a narrower tower, lighter base and more padding so it sits well among launcher icons; manifest sizes, maskable and favicons re-exported (the ICO keeps its transparent mask)

This commit is contained in:
sganggs committed 2026-10-10 02:36:12 +08:00
1 parent 9042125430
commit 9ec84f36a0
16 files changed
+95 -31

No files matched your search

+15 -10
View File
@@ -8,15 +8,17 @@ The original project icons below are shipped static files, not downloaded game a
## Original project application icons (#413)
`public/icons/app.svg` is the original vector master for the **卫戍协议 series**, independent of any season.
Three battlements lead into a shield-shaped wall around one square tactical cell: defending a position on a board.
The only colours are charcoal `#242424` and off-white `#f2f2f2`; the mark contains no text, gradients or fine texture.
It contains no 「盟约」 lettering, Alliance badge or season-exclusive colours / elements.
By the maintainer's revised decision of 2026-10-10, **沿用 0.2.x 的薄荷绿城堡并精修**.
`public/icons/app.svg` retains the existing mint rook's three battlements, inset tower and splayed base.
The selected refinement (B) narrows the tower, balances the battlements, reduces the base thickness and adds breathing
room. On the 512 px canvas the mark spans x=128–384 and y=88–424; the tower is 176 px wide and the base is 32 px thick.
The original colours remain mint `#4ed8af` and dark `#0c0f0e`, with no text, gradients, gloss or texture.
**Originality statement (2026-10-10):** the SVG geometry was drawn from basic rectangles and polygons for this
project. No official logo, artwork, icon or font was used, downloaded, embedded, traced or redrawn to make it.
**Provenance / originality statement (2026-10-10):** this is a proportion refinement of this project's existing
`public/icons/app.svg` from before `ba5b998a`, expressed as basic rectangles and polygons.
No official logo, artwork, icon or font was used, downloaded, embedded, traced or redrawn for this refinement.
The vector and exports are project-owned work under the repository's GPL-3.0-or-later licence, separate from the
Hypergryph / Yostar game assets below. The abstract fortification / tactical-board idea does not assert official branding.
Hypergryph / Yostar game assets below. The castle mark does not assert official branding.
Rebuild offline with Python 3 and Pillow (the same image library used by local-extract):
@@ -28,6 +30,8 @@ python3 tools/export-app-icons.py --out /tmp/stronghold-icons
The script reads only the master SVG's flat rectangle / polygon geometry, renders at 8× and downsamples; unsupported
SVG elements fail rather than silently disappearing. It needs no game art, fonts, browser or network.
ICO frames use the same native-size renders as the PNG favicons, with explicit 24-bit DIBs and opaque 1-bit masks
whose rows are padded to 4 bytes. This avoids malformed transparency masks in Pillow's RGB ICO export.
| Files in `public/icons/` | Use |
|---|---|
@@ -37,7 +41,7 @@ SVG elements fail rather than silently disappearing. It needs no game art, fonts
| `apple-touch-icon.png` | 180 px home-screen icon |
| `app.svg` | Scalable favicon and editable source |
The maskable mark is scaled to 87.5% around the canvas centre. Its outermost vertex is about 34.8% of the canvas
The maskable mark is scaled to 87.5% around the canvas centre. Its outermost vertex is about 36.1% of the canvas
width from that centre; even antialiased edge pixels stay inside the **40%-radius safe circle** specified by
[Web Application Manifest §2.3](https://www.w3.org/TR/appmanifest/#icon-masks).
The background remains opaque to every edge; launcher masks may remove the background outside the safe zone.
@@ -46,8 +50,9 @@ favicons and Apple icon; `public/manifest.json` lists all four install icons. Al
and included by the full and lite package allowlist; no changes to `data/assets.json` are needed.
`test/ui/pwa-install-023.test.js` checks decoded pixels, mask safety and references; `test/package.test.js` checks
packaging inclusion. The local handoff holds old/new light/dark, small-size and phone-layout previews with their
render script. These are offline review renders, not evidence of browser or native OS installation.
packaging inclusion. The local handoff `claude-review-023/icon-v2/` holds the original and A/B/C SVGs, light/dark
256 px and 16/32/48/96 px comparisons, and phone-layout / mask previews with their render script.
These are offline review renders, not evidence of browser or native OS installation.
## Running
+5 -2
View File
@@ -115,8 +115,11 @@ refused recovery can return to the previous identity and nickname. It does not i
Without BroadcastChannel it refuses shared recovery. Server restart / expiry clears
obsolete metadata on the next welcome. A spectator never registers a recoverable player seat.
`manifest.json` enables browser installation. The original season-independent fortress / shield mark in
`public/icons/app.svg` uses neutral greys and no official art, logos, icons, fonts or season-specific insignia.
`manifest.json` enables browser installation. The maintainer's revised decision of 2026-10-10 is to
**沿用 0.2.x 的薄荷绿城堡并精修**: `public/icons/app.svg` keeps the existing three-battlement rook, inset tower
and splayed base in mint `#4ed8af` on dark `#0c0f0e`. Refinement B narrows the tower, balances the battlements,
thins the base and increases breathing room. It has no lettering, gradients or gloss and uses no official art,
logos, icons or fonts.
`tools/export-app-icons.py` exports 192/512 px PNGs for `any` and separate opaque `maskable` icons: the latter scale
only the mark to 87.5%, keeping every foreground pixel inside the central circle of radius 40% of the canvas.
The same master supplies 16/32/48 px PNG / ICO favicons and the 180 px Apple touch icon linked from `index.html`.
+12 -4
View File
@@ -275,19 +275,27 @@ Based on @Cromemadnd's proposal, with a one-use install controller. Buttons appe
standalone/fullscreen and installed sessions hide them. Accept, dismiss, failure and duplicate clicks all consume the
same offer once. See [the prompt API](https://developer.mozilla.org/en-US/docs/Web/API/BeforeInstallPromptEvent/prompt)
and [installability requirements](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable).
The 2026-10-10 icon revision replaces the previous mint rook with an original, season-independent fortress / shield
and defended square. Its neutral grey palette and geometry use no official logos, artwork, icons or fonts and no
Alliance lettering or seasonal insignia. `public/icons/app.svg` is the master; `tools/export-app-icons.py` exports
The maintainer revised the icon direction on 2026-10-10: **沿用 0.2.x 的薄荷绿城堡并精修**.
The selected B refinement keeps the previous mint rook's three battlements, inset tower and splayed base,
with a narrower tower, balanced battlements, thinner base and more breathing room. It retains mint `#4ed8af`
on dark `#0c0f0e`, without text, gradients, gloss or official logos, artwork, icons or fonts.
The source is the project's `public/icons/app.svg` from before `ba5b998a`; the local `icon-v2` review includes
the original and A/B/C proposals at large and small sizes, on light/dark backgrounds and simulated home screens.
`public/icons/app.svg` is the selected B master; `tools/export-app-icons.py` exports
192/512 px `any` and separate opaque `maskable` PNGs (the mark stays inside the central 40%-radius safe circle),
16/32/48 px PNG / ICO favicons and a 180 px Apple touch icon. All ship outside optional game art, including lite
packages. See ASSETS.md for the source, reproduction command and originality statement.
The offline revision also corrects the ICO writer's transparency masks: each 16/32/48 px frame now uses its own
native-size render and 4-byte-aligned opaque mask rows. Decoding previously exposed transparent holes in the 48 px
frame; the regression checks mask layout / opacity and compares every ICO colour pixel with its PNG counterpart.
No service worker or offline cache is installed; the server is still required.
The lobby keeps Settings immediately before How to Play even when the optional install/recovery buttons appear;
the full browser run caught and corrected an initial insertion between that established pair.
The settings-entry check tests the absent board-style/background-music option labels, allowing the text-size help
to explain that the board keeps its scale.
Tests: offer lifecycle/disposal, decoded PNG dimensions / opacity / maskable safe zone, favicon references and packaging inclusion.
Tests: offer lifecycle/disposal, decoded PNG dimensions / opacity / mint palette / maskable safe zone,
three distinct battlements and an inset tower at 16/32/48 px, favicon references and packaging inclusion.
The initial feature also had real Chrome manifest and installability checks, and a synthetic
dismissed offer through the actual button. Initial incognito rejection was a test-environment limitation; the real
installability check runs in Chrome's ordinary temporary profile. Native OS installation itself is not performed.