Building Nova Drop · A Flutter dev series

Building Nova Drop — a Flutter dev series

Luca Panteghini · Nurale

TL;DR — Six posts on how I built Nova Drop, a cosmic physics merge puzzle (think Suika Game, in space), in pure Flutter — no game engine, no Box2D. A bespoke ~600-line 2D solver runs the merges at a fixed 120 Hz, the whole scene is drawn by a single CustomPainter, and the "oddly satisfying" feel is a particle system, screen shake and reactive audio folded into one game loop. Then: cosmic storms and obstacles, a 200-level star-map campaign with an in-engine creation myth, monetization that doesn't wreck a relaxing game, and shipping in 18 languages.

Nova Drop is a casual puzzle: you drop cosmic bodies into a well, two of a kind merge into the next tier, and you chain your way up to a screen-clearing Supernova. Under that calm surface is a physics engine I wrote by hand, because the genre lives and dies on how the collisions feel. This series is the full engineering teardown — every snippet below is from the shipping codebase.

Animated clip of Nova Drop: glowing cosmic bodies pushed around a dark violet well by environmental forces — wind, low gravity and a gravity well — all simulated by the in-house physics engine.
Real gameplay: environmental forces shoving the bodies around. Every body, bounce and gust here is simulated by a hand-written Dart solver — no engine.

The six parts

  1. Part 1 Building a physics merge puzzle in pure Dart — no engine, no Box2D A specialized circles-in-a-box solver: semi-implicit integration, an iterated impulse solver with positional correction, a fixed 120 Hz timestep, a sweep-and-prune broadphase, and merge detection folded into the same pass.
  2. Part 2 Making merges feel oddly satisfying: juice on one CustomPainter Particles, rings, floating text, screen shake and a white flash — plus chains, Fever and reactive audio — all driven by one ChangeNotifier game loop and painted by a single CustomPainter.
  3. Part 3 Beyond Suika: cosmic storms and a hand-rolled obstacle system One capsule collider that models rocks, bumpers, pistons, blades and conveyor belts, a pure testable "storm director" that escalates Endless mode, and unlockable physics verbs on a shared energy pool.
  4. Part 4 An infinite Odyssey: a star map, 200 levels and a hand-painted creation myth 200+ levels from one clamped parametric curve (proven beatable by a headless sim), a pure star map of real stars and constellations with 18-language astronomy, and a creation myth painted entirely in-engine.
  5. Part 5 Monetizing a relaxing game without wrecking the vibe: AdMob & IAP Rewarded as the primary format, interstitials paced behind a grace period, a remove-ads IAP, UMP consent — and the rewarded-format bug that shipped a dead "watch a video" button.
  6. Part 6 Shipping Nova Drop in 18 languages with Flutter The ARB + gen-l10n pipeline, an in-app language switch with zero restart, endonym language names, RTL for free, and what stays untranslated on purpose.

Nova Drop is a relaxing cosmic merge puzzle — drop cosmic bodies, chain reactions and chase the Supernova. Out now, free on iOS and Android.