84a6749b5e
App icon = clean 2x2 glossy block mark (vector, no AI image). l10n EN/KO finalize + KO overflow pass. Light juice: sound/haptics toggle, themed settings, button press feedback, screen transitions. Store feature graphic + EN/KO screenshots. Procedural visuals mean no raster background assets needed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
105 lines
5.3 KiB
Markdown
105 lines
5.3 KiB
Markdown
# Phase 6 — Localization Finalize + Icon + Juice + Store Assets (Design)
|
||
|
||
**Date:** 2026-06-13
|
||
**Status:** Approved (owner approved design 2026-06-13)
|
||
|
||
## Context
|
||
|
||
Phases 0–5 are complete (gameplay, seasons, endless, commercial polish, remote
|
||
content, Firebase analytics, AdMob + IAP). Phase 6 is the pre-release polish
|
||
round. The master plan assumed AI-generated background/tilesheet **images**, but
|
||
Phase 3.5 implemented all in-game visuals **procedurally** (CustomPainter glossy
|
||
tiles, painted season backgrounds). So image assets are NOT needed for gameplay;
|
||
the only image deliverables are the **app icon** and **store graphics**, both of
|
||
which are produced as vectors in the game's existing visual language — no
|
||
external AI image generation required.
|
||
|
||
Owner is a non-developer; Claude produces all code and all vector art.
|
||
|
||
## Visual identity (established, reused here)
|
||
|
||
- Deep navy background gradient `#101736 → #192555 → #2C3168` (season-1 palette).
|
||
- Glossy rounded blocks in four brand colors: pink `#FF7EB3`, yellow `#FFD166`,
|
||
cyan `#6FCDF5`, green `#7EDB9C` (each rendered light→base→dark vertical
|
||
gradient + a soft white highlight ellipse near the top — same look as the
|
||
in-game `paintGlossyTile`).
|
||
|
||
## Workstreams
|
||
|
||
### 1. App icon (DECIDED: "Clean 2×2 block mark")
|
||
|
||
- Composition: rounded-square, deep-navy background, a centered 2×2 grid of the
|
||
four glossy brand-color blocks (pink top-left, yellow top-right, cyan
|
||
bottom-left, green bottom-right). No cherry-blossom accent (icon must be a
|
||
permanent, season-independent brand asset). Mirrors the existing in-app
|
||
`_logoMark`.
|
||
- Blocks kept within the central safe zone so Android's circular/rounded mask
|
||
never clips them.
|
||
- Deliverables:
|
||
- A master **SVG** committed to the repo (source of truth).
|
||
- A **1024×1024 PNG**, opaque (no alpha) for the iOS App Store.
|
||
- **Android adaptive icon**: foreground = the 2×2 blocks (transparent
|
||
surround), background = the navy gradient (flat or gradient drawable).
|
||
- All platform sizes generated via the `flutter_launcher_icons` package
|
||
(config in `pubspec.yaml` / `flutter_launcher_icons.yaml`), replacing the
|
||
default Flutter icon on both platforms.
|
||
- Tooling: rasterize SVG→PNG with a deterministic, scriptable converter
|
||
(`rsvg-convert`, or a tiny Dart/`image` script, or `flutter_svg` render). The
|
||
conversion command is checked in so the icon can be regenerated.
|
||
|
||
### 2. Localization finalize (EN + KO)
|
||
|
||
- Audit every user-facing screen for hardcoded (non-l10n) strings; move any to
|
||
ARB. Screens to sweep: splash, season title, home, season map, game (HUD +
|
||
result overlays), settings, tutorial, snackbars.
|
||
- Verify EN copy is store-quality and KO copy reads natively (no machine-y
|
||
phrasing).
|
||
- **KO integrity pass:** run the app under the `ko` locale on the simulator and
|
||
confirm no text overflow/truncation/clipping on any screen (Korean strings are
|
||
often longer/shorter than English — buttons, chips, result cards, settings
|
||
rows). Fix overflows (wrap, ellipsis, sizing) where found.
|
||
- Add any new keys introduced by workstream 3 (sound/haptics toggle labels).
|
||
|
||
### 3. Juice / polish pass (light, on top of Phase 3.5; BGM stays on hold)
|
||
|
||
- **Sound on/off setting** (real gap — commercial games need it): a single
|
||
toggle in Settings that enables/disables SFX, persisted in `SaveRepository`
|
||
(additive flag, saveVersion stays 1) and applied through `AudioService`. The
|
||
same flag also gates gameplay haptics (no separate haptics toggle — one
|
||
"Sound & vibration" control keeps Settings simple).
|
||
- **Settings screen theming:** the just-added Settings screen is a plain
|
||
`ListView`; give it the game's look (transparent scaffold over
|
||
`SeasonBackground`, themed text/cards) so it matches the rest of the app.
|
||
- **Button press feedback:** subtle scale-on-press for the primary buttons
|
||
(home Adventure/Classic, map nodes) for a more tactile "game" feel.
|
||
- **Screen transitions:** a gentle shared fade(-through) transition for
|
||
home → map → game navigation instead of the default platform slide.
|
||
|
||
### 4. Store assets
|
||
|
||
- **Feature graphic (Play, 1024×500):** navy + glossy blocks + "Block Seasons"
|
||
wordmark + a short tagline, in the icon's visual language. Produced as vector
|
||
→ PNG and committed under `docs/store/`.
|
||
- **Screenshots:** captured from the running app on the simulator — home,
|
||
season map, gameplay (mid-combo), stage win (stars), endless game-over — in
|
||
**both EN and KO**. Stored under `docs/store/screenshots/<locale>/`.
|
||
- Exact per-store framing/sizes (iOS 6.7"/6.5", Play phone) are finalized at
|
||
submission time in **Phase 7**; Phase 6 captures the raw, clean source shots.
|
||
|
||
## Out of scope (explicit)
|
||
|
||
- BGM / music (on hold by prior decision).
|
||
- AI-generated raster backgrounds/tilesheets (visuals are procedural).
|
||
- Real AdMob unit IDs and store IAP product creation (owner prerequisites,
|
||
tracked for the Phase 5 finalize step between Phase 6 and Phase 7).
|
||
- Final per-store screenshot framing (Phase 7).
|
||
|
||
## Success criteria
|
||
|
||
- Real app icon shows on both iOS and Android (no default Flutter icon).
|
||
- KO full play-through has zero text overflow/clipping; no hardcoded strings.
|
||
- Sound toggle works and persists across relaunch.
|
||
- Feature graphic + EN/KO screenshot set committed under `docs/store/`.
|
||
- `flutter analyze` clean; full test suite green (≥169, plus any new tests for
|
||
the sound-setting persistence).
|