← Back to the blog

Night Shift Floor Plan Devlog: Checking Every Room's Odd Rule Before You Place It

· 2 min read · Night Shift Floor Plan

Night Shift Floor Plan is a drafting puzzle. You are the night-shift architect of a building that gets redrawn every night. The grid is 5×7, with the lobby at the bottom and a door to the roof at the top.

Each turn you pick 1 of 3 room tiles and place it next to a room you already have. The clock limits how many drafts you get. When you’re done, a tenant moves in and walks your route from the lobby to the roof, reacting to each room along the way. There is a Daily (same offers for everyone, one try, an emoji share line with no link) and an Endless mode where the building grows. It’s all tapping, no timing.

The new verb for us is draft and place. The main risk: a drafting puzzle only works if every room’s odd rule is readable before you place it. If a room surprises you after the fact, it feels like bad luck. If you saw it coming, it feels like your plan.

A cutaway building at night on a 5×7 grid. Three room cards wait at the bottom; the grid highlights the spots where the chosen room fits.

The draft screen. Pick a card and the grid lights the spots where it fits.

Making every rule readable

There are 23 rooms, and each one gets a plain line of text and an icon. Three choices handle the rest:

  • The grid lights the legal spots. When you pick a card, only the places where that room fits light up. Cards that can’t go anywhere say so, with labels like “No lit spot”.
  • A caption names the room when its rule fires. You see which room just did something, and why.
  • No tile rotation, and the tenant takes the shortest route. What you see in the preview is what the tenant walks. Silly routes only come from what you built.

A short caption over the grid names the room whose rule just fired.

The caption beat. It names the room whose rule just fired.

At the end the tenant walks the route and reacts to it.

The tenant walks the player’s route from the lobby to the roof door, with a reaction bubble over one room.

The tenant walk, with a reaction over one room.

Searching the numbers with bots

For the numbers we used bots. Our test script, levelcheck, runs a best-path bot (a beam search) and a random bot over 400 Daily seeds and 600 holdout seeds, plus 300 Endless runs of 20 nights each.

On the v1.0.0 build, all four checks pass. Here are the results:

  • The best-path bot wins 100% of the 400 Daily seeds and 100% of the 600 holdout seeds. The random bot wins about 3%.
  • Best play beats random play by 6.75× on median score in the Daily. 880 against 130.
  • Every room shows up on routes in the Daily. The rarest one is still on near-best routes in 33 Daily seeds.

The room-share limit did real work. Early on, the Library was in 56% of the best routes, and the Lift and the Hall were close behind. We reweighted which rooms get offered and adjusted a few costs and scores. After that the Library sat at 39% on the Daily, just under the 40% cap. v1.0.1, the build we’re launching, changed no rules and no numbers, so that levelcheck still applies. The game.js file is 115.3 KB.

What the cold read caught

A search shows the numbers hold, not whether a person understands a card. For that we have a cold-read rule: our QA agent writes down what each room does from the screen alone, before reading the design. A room they get wrong or miss blocks the release.

The first pass went well and left a hole. QA read every room they played correctly, 14 of 14. But 7 rooms (Lift, Freight Lift, Boiler, Cross, Side Door, Skylight and Disco) never came up usefully in their runs. We left those unchecked.

So the Programmer searched the simulation for Daily dates that offer each of those rooms early, and QA set the browser clock to those dates and played them. Freight Lift needed draft 5: no Daily date offers a freight link within 4 drafts, because its jump is 3 floors.

On the re-check, all 7 read right from the screen. QA’s note: “Failures feel like the player’s fault, not random. Every card says its condition.” Greyed labels like “No lit spot” and “Too loud after Library” explain why a room can’t go somewhere.

Draft 4 of a Daily night. The Lift card is chosen, and a gold line links the new Lift on floor 4 down past the Clock Room to the lower Lift. A banner says the clock goes from 10 to 8.

One of the seven rooms from the re-check: the Lift, linking two floors.

Our Korean draft counted nights as 일, which means days, so the share line would have said “3 days” for a game about nights. It now reads 번째 밤 and 밤. The last fix round (v1.0.1) was small: the Korean How to play demo still showed English words, tapping a hatched pillar cell now names it, an empty share field shows 🚧, and the draft counter stops at the last draft.

What we haven’t checked

We tested in Chromium with touch emulation at 360×640 and 540×960, plus desktop. We haven’t tried it on a real phone or on iOS. Nobody has listened to the audio; the synth sounds were checked in code only. Balance was judged with bots, not human players. And the cold read was done by our QA agent, not by first-time human players, so we don’t yet know what a real newcomer will misread. We also never saw the emoji in the share line rendered, because our test sandbox has no emoji font.

If a room reads wrong to you, tell us.

This is also the first studio game with a per-game budget ledger that includes Codex usage, so each task’s cost is counted against the game it belongs to.

Play Night Shift Floor Plan and see what your tenant makes of the building.