Floniks
Back to Blog
Showcase5 min read

Build a Puzzle Game From One Screenshot: An Agent Development Log With Zero Prompts

One screenshot and one sentence in; a polished, browser-playable logic puzzle out — AI art, a generated soundtrack, and a 15-second gameplay ad, all through Floniks. The human wrote zero prompts: the agent researched the genre, read the reference video frame by frame, and orchestrated everything over MCP.

Author: Elena Park
Build a Puzzle Game From One Screenshot: An Agent Development Log With Zero Prompts

One screenshot and one sentence went in. A polished, browser-playable logic puzzle came out — with AI-generated art, a generated soundtrack, and a 15-second gameplay ad, all produced through Floniks. The human wrote zero prompts. This is a step-by-step account of how an agent turned casual instructions into a shipped game, and why the pipeline never stalled.

This is part one of a two-part series. Part two, Ship a Visual Novel From One Sentence, pushes the same method further with voices, portraits, and branching dialogue.

Version evolution: v1 built from a single sentence on the left, the final release on the right — the right panel is a live screenshot of the WASM build running in a browser
Version evolution: v1 built from a single sentence on the left, the final release on the right — the right panel is a live screenshot of the WASM build running in a browser

What the human actually provided

The entire human contribution to this game was: one screenshot of a puzzle game, one gameplay video, and a handful of one-line remarks. No design document, no rulebook, no prompt engineering. Everything else — genre research, task decomposition, asset generation, testing, deployment — was orchestrated by the agent using two platforms: the open-source rust_bevy_lua_game engine and Floniks connected over MCP.

Here is the full input ledger:

The human saidThe agent decomposed it into
"Build this game" (one screenshot)Identified the genre from the image: a Queens / Star Battle logic puzzle — one piece per row, column, and color region; no two pieces may touch, even diagonally
"Research the rules yourself"Researched the rule set, then encoded every rule as a headless test invariant — the rules document is the test suite
(nothing)Decided boards must have a unique solution and wrote a solution counter to enforce it
(nothing)Registered the game into the collection's menu following repo conventions, zero engine changes

Version one shipped the same day.

The video became the spec

The first version played correctly but looked nothing like the reference. The human dropped in a gameplay video with one line: "replicate its UI and mechanics exactly."

The agent extracted keyframes from the video and worked from them like a spec sheet: an 8×8 board, rounded level badge, hearts, countdown, streak counter; the tap-to-place rhythm with automatic ✕ marks on conflicting cells; the actual layout proportions, measured rather than eyeballed. Then it rewrote the interface to match. A video is a requirements document — if the agent is the one reading it.

Feedback arrived as screenshots, not tickets

The next round of polish started with the human sending back one unhappy screenshot: the tiles were flat color blocks, the font wasn't bold enough, the board should be 8×8, and "add some advanced camera effects."

One message became four parallel fixes: a supersampled texture generator for tintable rounded tiles; a proper CJK bold font subset; a hill-climbing refiner for the level generator — because at 8×8, blind reshuffling couldn't find a unique-solution board (the first level measured 237 solutions before converging to exactly 1); and a new camera zoom-punch API in the engine.

The unique-solution bug is the part worth remembering: the test suite caught it, not a human review. The suite asserts every level has exactly one solution, so the agent had to replace the algorithm. That is what lets an agent iterate alone.

Floniks handled everything visual and audible

The pony piece is a Floniks text-to-image generation, background removed, resized to exact pixel dimensions, and dropped into the engine's asset folder — where the game picks it up by filename with no code change. Ten HUD icons and the rounded UI tiles came off the same line. The soundtrack is Floniks text-to-music (Lyria 2). And the 15-second gameplay ad: real game assets rendered into keyframes, sent through Floniks image-to-video, scored with a generated track.

One keyframe of the gameplay ad: a finger demonstrates placing a pony, conflict cells auto-mark, and the level completes — every element is a real in-game asset
One keyframe of the gameplay ad: a finger demonstrates placing a pony, conflict cells auto-mark, and the level completes — every element is a real in-game asset

Why nothing stalled: two platforms, one pipeline

The reason this flowed is not that the agent is fast. It is that the road has no toll gates. The engine side and the Floniks side each own half the pipeline, and every seam between them is a contract a machine can pass through:

NeedEngine providesFloniks providesThe contract at the seam
Change gameplayLogic in one Lua file, hot reload in secondsA one-page game.* API the agent holds in its head
Verify correctnessHeadless test suite, 130,000+ assertionsRules = invariants = tests
New artAssets load by filename and size, zero-code reskinText-to-image + background removal, called over MCPA style bible locks the palette; a manifest makes every image replayable
MusicThree-channel audio, one line to attachText-to-musicSame-name audio file in the asset folder
A trailerReal assets rendered as keyframesImage-to-video + scoringKeyframes in, finished ad out

The agent writes code, runs tests, calls Floniks, drops results into agreed paths, and commits — in one session, with no human ferrying files between tools.

Fully cross-platform: native and WASM from one crate

The game ships three ways from a single Rust crate: native macOS (the agent's hot-reload development loop), native iOS at 120Hz ProMotion, and WebAssembly in the browser — where the Lua VM swaps to a pure-Rust implementation exposing the identical API, so every game script runs byte-for-byte the same on all three targets.

The proof is in this article's cover image: the right panel is not a mockup — it is a screenshot of the WASM build captured live in a headless browser. One link plays in any mobile browser; the same game is native-smooth on an iPhone.

Questions and answers

Did the human write any prompts?

No. The human provided a screenshot, a video, and one-line remarks. The agent organized its own prompts for Floniks generation and its own task decomposition for the engine work.

How does the agent call Floniks?

Through MCP: Floniks registers as a set of tools (text-to-image, image-to-video, text-to-music, background removal and more) that the agent invokes directly during coding sessions, with results landing in the game's asset folders. See the Floniks MCP server.

What keeps the agent honest while iterating alone?

A headless test suite that encodes the game rules as invariants. The unique-solution requirement is asserted for every level, which is how a real generator bug was caught and forced to a better algorithm.

Can I play the result?

Yes — the whole collection runs in the browser via WebAssembly, and the source is open at the rust_bevy_lua_game repository on GitHub.

Ready to wire generation into your own build loop? Start with the Floniks MCP server, or read how the same method handles a heavier genre in part two.

Tags

#showcase#ai-game-development#vibe-coding#mcp#sprite-generation#text-to-music#image-to-video#webassembly

Related Articles

Build a Puzzle Game From One Screenshot, Zero Prompts | Floniks