Phaser AE

Customers and service

Free packv3.0.0-32DLogic

The guests of any service game, from the door to the bill. Parties arrive, queue, sit, order, eat, pay and leave a place to clear, losing patience while they wait on you and tipping by how happy they are, and the game chooses which of those steps it needs.

This is a Free pack. Every phaser.io account can use it in their games.

Released October 14, 2026 · updated October 19, 2026

Customers and service: 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

createService opens a shift. Parties arrive by a rate that speeds up through the shift, or by an exact schedule, and wait in a queue with a limit; when it is full, the next party walks away. They are seated at a place with enough seats, by the player or by themselves as places free up, look at the menu, wait for their order to be taken, wait for the food, eat, wait to pay, and leave the place dirty until it is cleared.

Patience is in hearts. A party waiting on the player, in the queue, to order, for food or to pay, loses a heart every few seconds at its kind's pace, and at none it leaves angry; seating it, taking its order and serving each item each win one back, while thinking and eating cost nothing. The bill is the menu price of what the party ordered, and the tip is a share of it that grows with the hearts left. The shift ends when its time is up and the last party has gone, and it is won if the money reached its goal.

Your game calls seat, takeOrder, serve, collect and clear; each returns null when done, or a reason when not, so a refused click can say why. step advances in fixed steps, drain returns what happened, arrivals, walkouts, orders, payments with their tips, lost hearts, angry exits and the end of the shift, and snapshot and restore save it as plain JSON. A host autopilot plays it for an attract mode or a test.

Features

  • Arrivals — a rate that ramps across the shift, or an exact schedule of who comes when.
  • A queue with a limit — a full queue turns the next party away.
  • Seating — places with seat counts, filled by the player or automatically.
  • The whole visit — thinking, ordering, waiting, eating, paying and a place left to clear.
  • Patience in hearts — lost while waiting on the player, won back by each thing done, with an angry exit at none.
  • Bills and tips — menu prices, and a tip that grows with the hearts left.
  • A chosen flow — leave out ordering, eating, paying or clearing, and let the queue seat itself.
  • Guest kinds and a menu as data — couples, business diners, families and regulars, and a diner menu, built in.
  • Events and saves — every arrival, heart and payment as an event, and the shift as JSON.
  • A host autopilot — takes money, brings orders, takes orders, clears and seats, most urgent first.

Good for

  • Restaurant time-management games — seating parties, taking orders and clearing tables, in the style of Diner Dash.
  • Counter and takeaway games — customers who order on arrival and pay on delivery.
  • Shops and market stalls — a queue of buyers with patience and a till.
  • Hotel desks and reception games — guests who arrive, wait, are served and leave.
  • Tycoon and management games — a shift with a money goal and arrivals that grow busier.
  • Any game with a queue of impatient people — where hearts and tips make speed matter.

Make it yours

The options are the seed, the guest kinds and menu, the places (a count of two-seaters, or each with its own seats), the flow, the arrivals, the queue limit, the shift's length and money goal, the tip at full hearts, and how many hearts each good deed wins back. A guest kind sets its party size, hearts, patience, tipping, thinking and eating time and items per person; a menu item sets its price and how often it is ordered.

The flow is what makes very different games. A full diner keeps every step, so the player seats each party, takes its order, brings the food, collects the bill and clears the table. A coffee counter turns ordering, eating, paying and clearing off and lets the queue seat itself: customers step up, order at once, and pay the moment their drink arrives.

A quick look

A shift with two tables, a party seated, and an order bubble shown when they are ready:

const shift = game.customers.create({ seed: 2, places: [{ seats: 2 }, { seats: 4 }] });
shift.seat(partyId, 'p2');
shift.step(dt);
for (const e of shift.drain()) if (e.kind === 'ready') showOrderBubble(e.party);

Works with

  • cooking-counter — a kitchen of stations and plates and a counter, built on these customers.
  • walk-serve — a server walking a floor plan of tables, built on these customers.

Good to know

  • Parties are whole: they arrive, sit and leave together.
  • Reservations, moods beyond hearts, and guests who dislike each other are not modelled.
  • Cooking, carrying and walking are not here; they belong to cooking-counter and walk-serve.
  • The pack draws nothing; your game presents the queue, the tables and the hearts from its state and events.

More Logic packs

Show all →