Phaser AE

Level saga progression

Pro packv3.0.0-0LogicNew

The meta-game a level-based puzzle wraps around its levels, with the mechanics found in games like Royal Match and Candy Crush Saga. Your puzzle plays the level; this pack decides what it costs, what it pays and what comes next.

This is a Pro pack. Upgrade to Phaser Pro to use it in your games.See Phaser Pro →

Released October 24, 2026

Level saga progression: a screenshot of its demo
A note about these graphics

Expansion packs don't come with graphics. This screenshot is one way of drawing what the pack does, made for its demo: none of the sprites, tiles or backgrounds in it are in the pack.

That's by design. A pack is a game's logic, mechanics and effects, and it works with whatever art you give it. Some packs draw effects, backdrops or 3D scenes of their own, but none carries a game's sprites.

So the look is yours. Make the art on phaser.io, bring your own, or let your agent draw it in code: the same pack can look like anything.

What it does

The game starts a level through the saga, plays it with whatever puzzle pack it uses, and reports the result. The saga checks the level is unlocked and a life is available, takes the chosen boosters from the inventory and adds the streak's free ones, then on the result pays coins by the level's tier, records the best stars, unlocks the next level, takes a life on a loss and moves every running event on.

Time is the saga's own. The game moves it on as it runs and reports how long it was closed, capped so a changed device clock cannot hand out a day of lives. Lives refill one at a time, unlimited lives run out and events end on that clock, so a whole season of play can be replayed or tested in a moment.

Everything it keeps is plain data keyed on ids. A save restores into a newer config, keeping progress on the levels and boosters that still exist and dropping the rest, so you can add levels and retune rewards under live saves.

Features

  • A level map — a count or a list of levels, chapters as map areas, and hard and super-hard tiers that pay more.
  • Lives on a timer — taken on a loss or on starting (and returned on a win), refilled per interval, bought back with coins, or switched off.
  • Unlimited lives — a reward that stacks seconds of free play.
  • Boosters — kinds used before a level or during it, with prices, starting counts and an inventory.
  • Win streaks — tiers of free pre-level boosters for wins in a row, lost on a loss.
  • Continues — a rising price list per attempt; what a continue gives is your game's to decide.
  • Coins, stars and collectibles — first-win and replay rewards, stars to spend on decoration, items your levels report.
  • Timed events — milestone tracks that pay out as points pass each step, and races against rivals with seeded paces, with an option to send the player back to zero on a loss.
  • Receipts — rewards granted once only, however often the code that grants them runs.

Good for

  • A Royal Match or Candy Crush style saga — wrap match3 levels in a map, lives and boosters.
  • A sorting saga — container-sort, tray-match, screw-sort or conveyor-sort levels with the same meta.
  • Hybrid-casual campaigns — hundreds of seeded levels with tiers and a streak to keep players going.
  • Live events without a server — milestone tracks and races that run on the saga clock with seeded rivals.
  • Balancing and testing — the whole economy runs headless, so you can simulate a month of play in a test.

Make it yours

The number of levels, their tiers and chapters, the lives (count, refill time, when they are taken), every coin price and reward, the boosters, the streak tiers, the continue prices and whether won levels can be replayed are all configuration. A long saga of a thousand generated levels with lives lost on failure and a three-tier streak is one setup; a short authored map with three lives taken on starting, replays for stars and no continues is another.

A quick look

Start the next level with a booster, then report how it went.

const saga = levelSaga.createLevelSaga({ id: 'my-game', levels: 120, hardEvery: 10, chapters: 20,
    boosters: [{ id: 'rocket', when: 'before', price: 300 }] });
game.step('saga', dt => saga.elapse(dt));
saga.startLevel(undefined, { rocket: 1 });
saga.finishLevel({ won: true, stars: 2 });

Works with

Good to know

  • It plays no level and draws nothing: the map screen and the level are your game's.
  • There is no network: race rivals are seeded bots, not real players.
  • It trusts the time you give it; the cap on time away limits, but cannot detect, a changed clock.
  • Rewards are given at once; a claim-later inbox is up to your game.

More Logic packs

Show all →