ScenarioExplorations Playable Ads
Create yours

A Scenario exploration · for mobile game UA and creative teams

Playable ads from a brief.

Type a brief. Get a store-ready playable for nine ad networks.

Seven original games, one for each genre preset of the scenario-playable-ads agent skill. Each one plays in this page, passed every check of the skill's QA and downloads as nine network packages.

  1. StartOne paragraph about a game
  2. BetweenAn agent, the skill, Scenario MCP
  3. EndNine packages, every QA check passed

ForUA and creative teams at mobile game studios who need playable ads on several networks, and the agents that build them.

What was made7 original playable ads, one per genre preset, each with its brief, art, tuning, QA board and nine packages. Plus a film, a guide, a making-of and the skill.

What Scenario didConcept screens, plates, sprites and logos with GPT Image 2.5 Sunburst, music with ElevenLabs Music v2.5, sound effects with Mirelo SFX 2.0, all through Scenario MCP.

01Seven games

Seven genres. Seven worlds.

Every game is original, built from a one-paragraph brief with the skill's preset for its genre. Press Play, then tap the game. Install on the end card stays in this page.

02How it works

One brief in, nine packages out.

The same three steps made each game. An agent follows the skill; the skill holds the engine, the packaging and the checks, so the agent writes config and makes art.

  1. 1

    Write the brief

    One paragraph: the world, what the finger does, the big moment, how it ends. For a game that does not exist yet, the agent draws two concept screens that show every element the genre needs, and they stand in for store screenshots.

    Out: brief.md, two concept screens

  2. 2

    Fill the preset

    The skill holds seven genre engines. The agent fills one config (paths, waves, gates, cards), makes every asset slot with Scenario, and tune.py plays a good and a careless bot until the good one wins and the careless one loses by a little.

    Out: config.json, the art and sound, two tuned numbers

  3. 3

    Build and check

    build.py writes the nine network packages from one game. qa.py plays each in headless Chromium inside a stand-in for its network's container, from the first tap to the exact CTA call.

    Out: nine packages, qa/report.json, the QA board

03The evidence

What each build produced.

One block per game: the brief, the minutes of each stage under the three steps above, every asset with its model, the tuned numbers, the QA result and the nine packages to download.

Moatline, the payoff moment of a QA run

01 · Tower defense · tier 1, config only

Moatline

Tap a pad to build or upgrade. Real wet sand sculpted into a tilt-shift beach miniature: carved turrets, shell mosaics, kelp and driftwood under warm noon sun, with a code-drawn sea-blue HUD.

1The brief

A sandcastle on a sunny beach, sculpted from real wet sand and seen as a tilt-shift miniature: carved turrets, shell mosaics, seaweed and driftwood. Crabs scuttle and seagulls swoop down a channel dug in the sand toward the castle keep. Tap the flat sand pads to build turrets: a bucket catapult that lobs wet sand, a shell cannon that fires at one target, a seaweed snare that slows the line. Every crab sent back to sea drops a shell to spend on upgrades. A giant hermit crab in a teacup shell comes last; a good player turns it back a few steps before the keep. Warm noon sun, sand grain, sea foam.

Hook: “HOLD THE KEEP!” · Payoff: The giant hermit crab falls a few steps before the keep at about 39 s of play: white flash, spray burst, every crab on the beach pops, slow motion, KEEP HELD!

2From brief to ad

  1. Brief7 min
  2. Concept screens3 min
  3. Assets9 min
  4. Config and tuning3 min
  5. Buildunder 1 min
  6. QA15 min
  7. Capture8 min

Brief to nine packages and two clips: 46 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Units sheet
    GPT Image 2.5 Sunburst
  • Towers sheet
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 8 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Tower defense
Waves
3
Turrets
3 types, 6 pads
Enemies
crabs, seagulls, 1 boss
Time cap
46 s

Tuned by tune.py.In config.json: difficulty.good ×1.6 when the player follows the hint, difficulty.careless ×1.0 when the player does not.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 41.9 s
  • Careless bot: close, end card at 38.2 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP655 KB, index.html 936 KBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML936 KB eachunder 5 MB
Google, Liftoff, PangleZIP655 KB eachunder 5 MB
All nine packagesMoatline, one ZIP, 5.76 MB

What the build simplified

  • The giant hermit crab is stopped by a burst (flash, spray, every crab pops); in the brief it walks back to the sea.
  • Seagulls fly straight from the foam line to the keep instead of following the channel.
  • The shell each crab drops is the preset's coin, drawn as a shell, flying to the counter.
Duck Flood, the payoff moment of a QA run

02 · Crowd runner · tier 1, config only

Duck Flood

Drag left and right to steer the flock. Glossy toy photography: yellow bath rubber, white suds, aqua water and wet white and mint tiles in morning window light.

1The brief

A bathtub river through a tiled bathroom, seen from just above the foam. Drag left and right to steer a flock of yellow rubber ducks. Soap-bubble gates add to the flock or multiply it, red ones pop ducks away; drain whirlpools and spinning scrub brushes take ducks out. At the end the flock floods a fleet of grumpy wind-up bath sharks guarding the tap: a big flock swamps them and the bath overflows. Glossy rubber, suds, wet tiles, morning window light.

Hook: “GROW THE FLOCK!” · Payoff: The shark fleet is sized at the reveal from the player's own picks (about 23 s of play), then the flock crashes into it at about 26 s, front rows cancelling one for one, slow motion on the last four.

2From brief to ad

  1. Brief3 min
  2. Concept screens8 min
  3. Assets6 min
  4. Config and tuning1 min
  5. Buildunder 1 min
  6. QA9 min
  7. Capture4 min

Brief to nine packages and two clips: 31 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Characters sheet
    GPT Image 2.5 Sunburst
  • Props sheet
    GPT Image 2.5 Sunburst
  • Hand pointer
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 6 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Crowd runner
Gates
5 soap-bubble gates
Obstacles
2 scrub brushes, 1 drain whirlpool
Flock
5 to 102 ducks
Shark fleet
71 on the winning run
Track
25.5 s to the tap

Tuned by tune.py in 1 round.In config.json: difficulty.good ×0.7 when the player follows the hint, difficulty.careless ×1.0 when the player does not.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 35.5 s
  • Careless bot: close, end card at 30.7 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP619 KB, index.html 888 KBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML888 KB eachunder 5 MB
Google, Liftoff, PangleZIP619 KB eachunder 5 MB
All nine packagesDuck Flood, one ZIP, 5.44 MB

What the build simplified

  • The bath overflowing is shown as the win line and confetti; the water level stays the same.
Chalk Charge, the payoff moment of a QA run

03 · Lane shooter · tier 1, config only

Chalk Charge

Drag left and right to steer. Pastel coloured chalk on a dark slate-green blackboard road between white chalk lines, honey wooden rails and frame, chalk doodles and dust.

1The brief

A school blackboard comes alive in coloured chalk. Drag left and right to steer a squad of chalk knights that fire chalk arrows on their own. Shoot the sums ahead to raise their value before you pass them, dodge the red minus sums, blast eraser smudges and chalk-dust crates. At the end of the board the Giant Duster rises; a strong squad shreds it. Pastel chalk on dark slate green, dust trails, hand-drawn lines, a wooden frame.

Hook: “DRAG TO THE BLUE SUM!” · Payoff: A squad of about 46 chalk knights mows down a huge wave of 93 eraser smudges from about 23 s, then the Giant Duster walks in at 26 s.

2From brief to ad

  1. Brief3 min
  2. Concept screens3 min
  3. Assets9 min
  4. Config and tuningunder 1 min
  5. Buildunder 1 min
  6. QA9 min
  7. Capture6 min

Brief to nine packages and two clips: 31 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Characters sheet
    GPT Image 2.5 Sunburst
  • Props sheet
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 9 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Lane shooter
Sums
4 pairs
Smudges
124 in 5 waves
Squad
3 to 46 knights
Crates
SPREAD, then RAPID or DOUBLE
Boss
the Giant Duster

Tuned by tune.py in 2 rounds.In config.json: difficulty.good ×0.72 when the player follows the hint, difficulty.careless ×1.62 when the player does not.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 35.4 s
  • Careless bot: close, end card at 36.6 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP648 KB, index.html 944 KBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML944 KB eachunder 5 MB
Google, Liftoff, PangleZIP648 KB eachunder 5 MB
All nine packagesChalk Charge, one ZIP, 5.70 MB

What the build simplified

  • The Giant Duster walks down the board from the far end instead of rising out of it, though its banner reads THE GIANT DUSTER RISES!
  • The end card keeps the skill's navy panel on the green blackboard.
  • No barrels, walls, card choices or rockets: neither concept screen shows them.
Inkwash Vigil, the payoff moment of a QA run

04 · Survivor · tier 2, preset plus one part

Inkwash Vigil

Tap where to move; the brush strikes on its own. Sumi-e ink wash on rice paper: black ink, grey washes, one accent of vermilion, a moonlit temple courtyard seen from above.

1The brief

Sumi-e ink wash on rice paper. A fox monk holds a moonlit temple courtyard while ink spirits pour in from the edges. Tap where to move; the monk's brush strikes on its own. Spirits leave vermilion drops; fill the bar and pick one of three scroll cards (a spinning brush, ink orbs, a longer stroke). At the peak a vermilion seal stamps the ground and wipes every spirit away. An ink dragon closes the night; a strong monk dispels it. Black ink, grey washes, one accent of vermilion.

Hook: “HOLD THE COURTYARD!” · Payoff: At about 23 s the bar fills and the game slows; one tap stamps a vermilion seal at the monk's feet and its ink ring wipes every spirit on the floor.

2From brief to ad

  1. Brief3 min
  2. Concept screens3 min
  3. Assets10 min
  4. Config and tuning2 min
  5. Buildunder 1 min
  6. QA16 min
  7. Capture10 min

Brief to nine packages and two clips: 44 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Hero
    GPT Image 2.5 Sunburst
  • Spirits sheet
    GPT Image 2.5 Sunburst
  • Boss
    GPT Image 2.5 Sunburst
  • Icons sheet
    GPT Image 2.5 Sunburst
  • Seal stamp
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 8 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Survivor
Spirits
2 types plus the ink dragon
Scroll cards
3, two picks
Weapons
brush, spinning brush, ink orbs
Seal
86 spirits wiped in one stamp
Spirits dispelled
242 in the win run

Tuned by tune.py in 1 round.In config.json: difficulty.good ×1.0 when the player follows the hint, difficulty.careless ×0.625 when the player does not.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 37.5 s
  • Careless bot: close, end card at 32.9 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP652 KB, index.html 957 KBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML957 KB eachunder 5 MB
Google, Liftoff, PangleZIP652 KB to 653 KB eachunder 5 MB
All nine packagesInkwash Vigil, one ZIP, 5.74 MB

What the build simplified

  • The preset's blast ring washed out on the pale floor, so the game draws the generated seal stamp and ink rings instead; lightning chains are dropped.
  • The HUD, upgrade cards and end card keep the preset's navy; the cards are drawn in code and only their icons are art.
  • No brush-lettering font: all text is set in Fredoka Bold, and the brush lettering is in the logo.
Tincture Tide, the payoff moment of a QA run

05 · Sort puzzle · tier 1, config only

Tincture Tide

Tap a flask, then another, to pour. Art Nouveau apothecary at dusk: a carved walnut shelf, brass vines and lilies, glass flasks with brass collars and feet, glowing rose, amber, teal and indigo tinctures

1The brief

An Art Nouveau apothecary shelf at dusk. Glass flasks hold layered tinctures in four colours. Tap a flask, then another, to pour its top layer onto the same colour or into an empty flask. Sort every flask to one colour to brew the elixir before the candle burns down, while a black cat familiar watches from the shelf. Brass, carved walnut, curling botanical frames, glowing liquids.

Hook: “CAN YOU BREW THE ELIXIR?” · Payoff: Each sorted flask is corked with a pop, sparkles, coins and a jump from the black cat: three in a row in the warm-up by 8 s, four more on BREW 12 between 22 and 32 s, the last with the ELIXIR BREWED! gold rain

2From brief to ad

  1. Brief6 min
  2. Concept screens6 min
  3. Assets7 min
  4. Config and tuning1 min
  5. Buildunder 1 min
  6. QA14 min
  7. Capture26 min

Brief to nine packages and two clips: 60 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Flask
    GPT Image 2.5 Sunburst
  • Mascot
    GPT Image 2.5 Sunburst
  • Props sheet
    GPT Image 2.5 Sunburst
  • Hand pointer
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 6 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Sort puzzle
Flasks
6 (4 in the warm-up)
Colours
4
Candle
24 s
Pours
11 at best

Tuned by tune.py. The careless bot ends with 1 layer left.In config.json: difficulty.timeSpare 0.25, the time to spare on the timer.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 36.5 s
  • Careless bot: close, end card at 37.5 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP442 KB, index.html 662 KBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML662 KB eachunder 5 MB
Google, Liftoff, PangleZIP442 KB eachunder 5 MB
All nine packagesTincture Tide, one ZIP, 3.89 MB

What the build simplified

  • The candle burning down is shown by the timer; the candle painted in the background stays lit.
  • One shelf of flasks instead of the first concept screen's two.
  • The liquid layers are flat colours drawn in code.
  • Numbers, booster labels and banners are drawn in code over blank planks.
Riso Roll, the payoff moment of a QA run

06 · Match-3 · tier 1, config only

Riso Roll

Swap two neighbouring pieces to match 3. A risograph print in three inks (fluorescent pink, teal, sunflower yellow) with overprints, paper grain and slight misregistration: a late-night sushi counter under paper lanterns.

1The brief

A late-night sushi counter printed in risograph: fluorescent pink, teal and sunflower-yellow inks, visible grain and a slightly misregistered overprint. Swap neighbouring pieces (salmon nigiri, tamago, cucumber maki, shrimp, edamame) to match three or more. Wipe the soy spills under the tiles and bring three lucky-cat figurines down to the counter before the moves run out. Four in a row slices a roll that clears a line; five makes a wasabi bomb that clears one kind. The night chef cheers you on.

Hook: “SWAP TO MATCH 3! Bring down 3 lucky cats.” · Payoff: WASABI BLAST at about 9 s of play: five in a row makes the wasabi bomb, and swapped with a piece it clears every piece of that kind, with a flash, a shake and slow motion.

2From brief to ad

  1. Brief5 min
  2. Concept screens3 min
  3. Assets8 min
  4. Config and tuning1 min
  5. Buildunder 1 min
  6. QA6 min
  7. Capture8 min

Brief to nine packages and two clips: 32 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Pieces sheet
    GPT Image 2.5 Sunburst
  • Items sheet
    GPT Image 2.5 Sunburst
  • Hero
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 10 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Match-3
Board
8 x 8, corners cut
Pieces
5 sushi kinds
Goals
3 lucky cats, 10 soy spills
Moves
16
Specials
sliced roll, wasabi bomb

Tuned by tune.py in 3 rounds. The good bot wins with 4 of 16 moves left; the careless bot ends one cat short.In config.json: difficulty.good ×0.65 when the player follows the hint, difficulty.careless ×0.325 when the player does not.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 42.4 s
  • Careless bot: close, end card at 49.9 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP531 KB, index.html 788 KBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML788 KB eachunder 5 MB
Google, Liftoff, PangleZIP531 KB eachunder 5 MB
All nine packagesRiso Roll, one ZIP, 4.67 MB

What the build simplified

  • The square bomb (an L or T match) is off: the brief names only the sliced roll and the wasabi bomb.
  • The night chef is one still picture that sways and hops; the preset alone shows a character only on the end card.
Rugfront, the payoff moment of a QA run

07 · Lane battle · tier 1, config only

Rugfront

Pick a card, drop it on your half. Lithographed tin toys with chipped paint against glossy plastic dinosaurs on a woven playroom rug, warm afternoon window light through the blinds.

1The brief

A playroom rug becomes a battlefield. Wind-up tin soldiers hold a tin fort; plastic dinosaurs march out of a toy-box keep across the rug's two lanes. Pick a card (tin drummer, clockwork knight, spring cannon, paper plane) and drop it on your half; units walk their lane and fight. Energy refills like a winding key and doubles near the end. Knock down a side tower, then the toy-box keep. Lithographed tin, chipped paint, glossy plastic, warm afternoon window light.

Hook: “TOPPLE THE TOY BOX!” · Payoff: The first volcano bursts into plastic rubble at about 12 s: slow motion, debris, shake, VOLCANO DOWN!, and the toy-box keep wakes.

2From brief to ad

  1. Brief4 min
  2. Concept screens7 min
  3. Assets11 min
  4. Config and tuning3 min
  5. Buildunder 1 min
  6. QA15 min
  7. Capture7 min

Brief to nine packages and two clips: 47 min of wall-clock time, one agent.

3Art and sound, made with Scenario

  • Concept screen, setup
    GPT Image 2.5 Sunburst
  • Concept screen, payoff
    GPT Image 2.5 Sunburst
  • Background plate
    GPT Image 2.5 Sunburst
  • Towers sheet
    GPT Image 2.5 Sunburst
  • Units sheet
    GPT Image 2.5 Sunburst
  • Cards sheet
    GPT Image 2.5 Sunburst
  • Icons sheet
    GPT Image 2.5 Sunburst
  • Logo
    GPT Image 2.5 Sunburst
  • Music loop ElevenLabs Music v2.5
  • 11 sound effects Mirelo SFX 2.0

4Preset and tuning

Preset
Lane battle
Cards
5 in the hand, 4 dinosaur units
Towers
3 a side
Battle
50 s, x2 energy for the last 20 s
Generated
8 images, 12 sounds

Tuned by tune.py.In config.json: difficulty.good ×0.09 when the player follows the hint, difficulty.careless ×1.4 when the player does not.

5QA in nine stand-in containers

67/67checks passed

  • Good bot: win, end card at 41.9 s
  • Careless bot: close, end card at 54.2 s
  • Untouched viewer: end card at 10.0 s

6Nine packages

NetworkFileSizeCap
MetaZIP809 KB, index.html 1.13 MBindex.html under 2 MB
AppLovin, Unity, MRAID, Moloco, MintegralHTML1.13 MB eachunder 5 MB
Google, Liftoff, PangleZIP809 KB eachunder 5 MB
All nine packagesRugfront, one ZIP, 7.11 MB

What the build simplified

  • No river and no bridges: the rug's woven band is the halfway line and units walk straight down their lanes.
  • The cork gunner, the stegosaurus and three of the four rubble piles were drawn as variants of the concept screens, which did not show them.
  • Card names are one word: Plane, Knight, Cannon, Drummer, Gunner.
  • Each side's units have one view (the player's from behind, the dinosaurs from the front), so units do not turn.

04Nine networks, one game

The same game in each network's container.

Each network starts a playable its own way and takes the install tap through its own call. The game never names a network: one adapter in the skill's runtime does the talking, and build.py writes the head each network expects.

Moatline in the Meta containerlive log

    What this shows: the same web build of Moatline with each network's head tags, as build.py writes them, inside the stand-in containers qa.py uses (same calls, same timings: MRAID ready at 0.6 s and viewable at 2.5 s, Mintegral's gameStart 2.5 s after gameReady). Play to the end card and tap Install: the log prints the exact call the network would receive. On AppLovin, Unity and MRAID the first tap is held on purpose.

    NetworkPackage, capCTA callLifecycleMoatline
    MetaZIP, 5 MB, index.html 2 MBFbPlayableAd.onCTAClick()starts at once655 KB (index.html 936 KB)
    GoogleZIP, 5 MBExitApi.exit()exitapi.js, portrait meta tag655 KB
    AppLovinHTML, 5 MBmraid.open(store)waits for viewable; first tap held936 KB
    UnityHTML, 5 MBmraid.open(store)waits for viewable; first tap held936 KB
    Generic MRAIDHTML, 5 MBmraid.open(store)waits for viewable; first tap held936 KB
    MolocoHTML, 5 MBFbPlayableAd.onCTAClick()starts at once936 KB
    MintegralHTML, 5 MBinstall()gameReady, gameStart, gameEnd, gameRetry936 KB
    LiftoffZIP, 5 MBpostMessage("download")"complete" at the end card655 KB
    PangleZIP, 5 MB, with config.jsonopenAppStore()playable SDK in the body655 KB

    05What the QA proves

    Every check passed. Review comes next.

    qa.py runs 469 checks across the 7 games (67/67 each), in headless Chromium, inside stand-ins for each network's container. That proves the wiring. A network's own review is a separate step.

    Proven for all 7 games

    qa.py, stand-in containers

    • The hook moves before any touch, and no sound plays before the first tap.
    • An untouched viewer reaches the end card within 15 s (measured: 10.0 s on every game), and nothing ever plays itself.
    • A good player wins with the end card between 33 and 52 s (measured: 35.4 to 42.4 s); a careless one does not win.
    • Replay restarts the game.
    • Both the end card and the pill call each network's exact CTA.
    • AppLovin, Unity and MRAID: the first tap never opens the store.
    • AppLovin, Unity, MRAID and Mintegral: nothing runs before the container says viewable; the game pauses when hidden and resumes.
    • Zero network requests, no console errors, every file under its network's cap.
    Network tools, template game

    Run on 2 November 2026

    • AppLovin Playable Preview: played to the end card in portrait; the CTA click registered.
    • Google HTML5 validator, App Campaigns profile: every check passed; the CTA opened the validator's ExitApi dialog. Campaign Manager and Display & Video 360 profiles reject the ZIP: they require a clickTag.
    • Meta Playable Preview: the six spec checks passed and it reported FbPlayableAd.onCTAClick() after a CTA tap.
    Not proven here

    Before you spend

    • None of these 7 games went through a network's own tool or creative review.
    • Unity, Mintegral, Liftoff, Moloco and Pangle tools were not run, even on the template.
    • Real phones and in-app webviews: speed on low-end devices, audio policies.
    • Store links: these games have no store page.
    • Whether the ad converts. That takes a live test.

    06Make yours

    Build one for your game.

    Install the skill in your agent and connect Scenario MCP. Give it a short gameplay recording or store screenshots, the logo and the store links. It asks two questions, then builds, tunes, packages and checks.

    Use the scenario-playable-ads skill.
    Here is my game: gameplay.mp4 (40 s, raw device capture),
    logo.png, the App Store and Google Play links.
    We run Meta, Google and AppLovin. Build the playable,
    run the QA and give me the packages.
    1. No recording yet? Do what this page did: write the brief and ask for two concept screens first. The guide has the steps.
    2. Read qa/storyboard_vs_real.jpg before anything else: it shows every story frame next to the source.
    3. Then test each package in its network's own preview tool before a campaign.

    Made with Scenario through Scenario MCP. Concept screens, plates, sprites, cards, pieces and logos: GPT Image 2.5 Sunburst. Music loops: ElevenLabs Music v2.5. Sound effects: Mirelo SFX 2.0. Engines, packaging and QA: the scenario-playable-ads skill, run by one coding agent per game.

    Create yours on Scenario