Play rules verified against the live Policy Center / Play Console Help pages (checked 2026-10-11, cited in cli/lib/scan/play-rules.ts): restricted permissions and their declarations (background location, photo / video, All files access, AccessibilityService, REQUEST_INSTALL_PACKAGES, Health Connect, full-screen intent, VpnService), prominent disclosure and the in-app privacy policy, Data safety vs SDK disclosures, Families (certified ad SDKs, AD_ID, location), AD_ID on targetSdk 33+, 16 KB page sizes (Unity, React Native, NDK, AGP, prebuilt .so), testing for new personal accounts, Play metadata, ads at launch, payments outside Play Billing, impersonation. Detection reads manifest components, accessibility configs, strings.xml, native toolchain versions and a local build's merged manifest. New fixtures and tests; README table per store.
28 lines
2 KiB
Markdown
28 lines
2 KiB
Markdown
# Prism Puddle (demo game)
|
|
|
|
A tiny fictional game made only to show storebound's screenshot and video pipeline end to end. Drops fall into
|
|
puddles; tap a puddle to switch its color so the next drop matches. Everything is drawn on a canvas (no image files),
|
|
and the game has the switches a real game needs for store captures: `lang`, `seed`, `t` (freeze at a moment),
|
|
`scene` and `auto=1` (hands-free play for video clips). The ids in `storebound.config.ts` are placeholders; nothing
|
|
here talks to a store.
|
|
|
|
From this folder (needs Bun, ffmpeg, and Playwright's Chromium or Google Chrome):
|
|
|
|
```sh
|
|
bun serve.ts & # the game on http://127.0.0.1:8740
|
|
bun ../../cli/index.ts shots capture # raw frames: 4 languages x phone + tablet
|
|
bun ../../cli/index.ts shots fonts # title / body fonts + Noto subsets for Japanese and Arabic
|
|
bun ../../cli/index.ts shots render --variants # every store size, base + variant b (about 7 minutes)
|
|
bun ../../cli/index.ts shots record # gameplay clips (autoplay) for the previews
|
|
bun ../../cli/index.ts shots video # App Store preview + YouTube promo per language
|
|
bun ../../cli/index.ts shots check --variants # store rules, exit 1 on errors
|
|
bun ../../cli/index.ts shots gallery # store/renders/index.html, open it in a browser
|
|
bun ../../cli/index.ts icons # every icon from store/icon (artwork drawn in bg.svg + fg.svg)
|
|
```
|
|
|
|
Everything it writes (`store/shots/frames`, `store/renders`, `store/video`, `store/icons`, `.storebound`) is gitignored.
|
|
|
|
`bun ../../cli/index.ts scan` (offline rejection-risk scan) reports two findings, accepted on purpose in `scan.ignore`
|
|
of the config: the `com.example` package name is the repo placeholder and is never uploaded (a real game picks its
|
|
own), and there is no Play developer account type to set (a real game sets `play.accountType`). The game has no native project here, so the code checks (ATT, purpose strings, privacy manifest) have nothing
|
|
to read.
|