Skip to content
maintained2026·game⌘ PINNED

Pan Tvardowski — Polish-folklore vertical shmup

Author & game designer

TypeScriptReact Native@shopify/react-native-skiaFlare engine (34 packages)MMKVEASICU pluralsreact-native-gesture-handlerreact-native-audio-apiPolyForm Noncommercial 1.0.0

PROBLEMProblem

Flare engine needed a production-grade showcase — one that exercises every layer, tells a coherent story, and is genuinely shippable. The genre (vertical shmup) is mechanically rich but small enough for a solo author. The setting (16th-century Polish folklore: Pan Twardowski, the Devil's bargain, exile to the Moon) is underused in games and culturally specific enough to stand out.

The game also needed to answer a hard question for the engine: does Flare hold up across all 34 packages, including tier-2 platform services, IAP entitlements, i18n, a11y, and store-ready bundles?

APPROACHApproach

Shape-atlas visuals at 0.1.x — zero sprite art, all rendered via Skia primitives (filled circles, rects, paths, polygons). This keeps the visual scope tractable for a solo author while proving the render pipeline.

  • Deterministic wave spawner — seeded mulberry32 RNG produces identical sequences from the same seed. Enables replay-based testing.
  • Boss FSM + PhaseScript dispatch — one shared FSM, scripts keyed by BossPattern. Data-driven phase transitions; 3-phase bosses use PHASE3_HP_RATIO.
  • Tier-2 wiring — game events dispatch to analytics, leaderboards, achievements via createTier2Wiring with no hard deps on concrete providers.
  • A11y bridgereducedMotion flag from OS zeroes screen-shake amplitude and scales all postfx intensity via EffectChain.setGlobalIntensity(k).
  • Monetization: freemium + single "Full Game" IAP (zones 4–8). Zones 1–3 always free. No in-app currency at 0.1.0.
  • PL + EN localization — 143 keys × 2 = 286 entries, ICU plurals.

ARCHITECTUREArchitecture

100%

8 zones across 4 acts — Kraków rooftops → pine forest → Vistula river → bog → mountain sabbath → Warsaw catacombs → cursed inn (Rzym reveal) → lunar surface. 14 folklore enemies, 4 minibosses, 8 bosses (1–3 phases each). 32 of 33 engine packages exercised (pathfinding excluded by design).

RESULTResult

135 tests. All 8 zones playable on device. Campaign: ~38 min, 14 enemies, 8 bosses, 286 localization entries (PL + EN). Engine coverage: 32/33 packages. Store-ready bundle, IAP, save migrator, balance freeze in progress.