Published 2026-09-16
On 17 August I gave REELS a route instead of a corridor. Three doors at every toll, the plain one always offered. Then I spent two more days fixing what the doors said: engine vocabulary the player could not read, and one door that was strictly free. Here are the four bargains with their real numbers, and why exactly one of them is allowed to stay vague.
The most common complaint about roguelites is that they get repetitive, and the usual answer is to add content. When I heard it about REELS in August, I went looking and decided the answer was wrong. There was plenty in the game. The problem was that every run walked through it in the same order.
REELS is a roguelite built on a slot machine. The reels drop on their own, your weapons fire on whatever they land on, and at the end of every floor a toll comes due. Elites, wardens, trunks, the counter: all of it existed, and all of it arrived when the table said so. A corridor with good things in it is still a corridor.
On 17 August 2026 I added the one gesture that was missing, the one *Slay the Spire* made standard: the route. Then I spent the next four days discovering that giving a player a choice is the easy half.
After you pay a toll and take your charm, you now pick your next floor. Three doors on a carousel. The middle one sits in the lantern light, half open; the other two are pushed back into the shadow, and you swipe to bring one forward.
The first door is always The plain toll. Its description reads "The descent, as it comes." Its only printed mention is "no bargain".
That door is not filler. A choice is only worth something if refusing is still available, and the plain toll is the ruler that gives the other two their price. Remove it and the three doors stop being a decision and become a lottery over which flavour of tax you pay this floor.
The other two are drawn from a pool of four, using the run's own random generator. That last detail matters more than it looks: the daily challenge runs on a shared seed, so everyone playing today is offered the same two doors on the same floor. A route that varied per player would quietly break the only competitive mode in the game.
Every door carries an engraved emblem, a line of prose that says what the bargain means, and one or two mentions in mono type that say what it costs. The mentions are the contract.
The gilded pit. *"Gold shows up early, and often. Gold bites."* Mentions: 3× more golden ones, +10% beasts. Golden enemies normally appear past a threshold of 0.10 and pay triple souls. This door adds 0.20 to that threshold, so 0.30, hence three times more. It also raises spawn pressure by a tenth, which is the price.
The refreshment stand. *"The crowd presses at the counter. A flask and a trunk are waiting for you anyway."* Mentions: +35% beasts, a flask and a trunk. Healing and a charm, laid on the floor before the first beast, bought with a third more crowd.
The clearance sale. *"Everything half price at the next counter. The pit pushes harder."* Mentions: counter at half price, +25% beasts. One full floor of extra pressure, cashed in at the shop afterwards.
The warden, early. *"He was getting bored down there. He is coming up one toll."* Mention: one more warden. We will come back to this one.
None of the four invents a mechanic. Golden enemies, wardens, floor pickups, the counter: every one of those systems already existed, and the doors only reorder them. That was a deliberate constraint. Reordering what a player already understands produces runs that diverge; adding a fifth system produces a game that needs a bigger tutorial.
A door is a contract on the next toll, sealed at the draft, applied by the engine, expired at the following departure. It outlives the draft that comes after its own floor, on purpose, because that is the draft where the clearance sale has to keep its word at the counter.
The first version worked and looked like a tax form. The door choice lived at the bottom of the charm list, under the pact, as one filled dot and two empty dots.
Two things were wrong with that, and only one of them was aesthetic. A form in the middle of a funfair looks like nothing. But the real defect is that the route of the next floor is the most structural decision in a run, and it was filed in a margin. Screen space is the game telling you what matters. I was whispering the loudest thing in the loop.
So it became its own screen, after the charm rather than inside it, with drawn emblems so three doors can be told apart at a glance rather than read like a list. Each panel is shown whole, including the ones you are not taking, because you should be able to read what you are refusing.
One rule in that screen is worth stating on its own: tapping the lit centre panel does not descend. You pull a lever to descend. A swipe that happens to end under your thumb must not be able to seal a route before you have read what it costs.
Fourteen hours later I looked at the mentions again and found they were written for me, not for a player.
They said "pressure ×1.25", "counter ×0.5", "golden ×3".
The word "pressure" is an internal name for the spawn rate multiplier. It is explained nowhere in the game, because it is not a thing the game ever talks about. And "counter ×0.5" asks the player to work out that half of a price is a discount, on the exact screen where they are locking in a floor.
All six mentions were rewritten into the language the rest of the game already uses: "counter at half price", "+25% beasts", "3× more golden ones", "a flask and a trunk". The prose above them says what the bargain *means*. The mentions say what it *costs*. Neither one is allowed to be approximate.
There is a small guardrail that came out of this and that I would recommend to anyone shipping numbers in UI text. In the source, each door's mentions are written two lines above the parameters they describe, in the same declaration:
```swift mentions: ["3 fois plus de dorés", "+10 % de bêtes"], emblème: .or, pressionMult: 1.1, doresBonus: 0.20 ```
(The source is in French, since that is the language the strings are keyed on. `pressionMult` is the spawn multiplier, `doresBonus` the amount added to the golden threshold.)
A tuning change that does not drag its label along is now visible during the same read. When the label lives in a localisation file and the number lives in the engine, they drift, and the day they drift the game is lying to the player in mono type.
The refreshment stand originally read "−35% beasts" plus a flask and a trunk.
Read that again. Fewer enemies, more healing, a free charm. It was better than the plain toll on every axis, and better than the other two bargains on most of them. It was not a door, it was the right answer, and a right answer offered three times a run turns a route into a formality.
So the sign flipped. It went from −35% to +35% beasts, and the loot stayed exactly as it was. Same door, same reward, now with a bill attached. That is the whole edit, and it is the one that made the screen honest: the day every door costs something, the player is actually choosing.
The warden, early says "one more warden". It does not say which warden, and it never will.
That is not laziness, it is the other half of a promise made everywhere else in the game. Six tolls have a warden written down in advance, and that pairing is fixed for the whole run: toll 3 is The Taxman, 6 is The Tamer, 9 is The Magnetizer, 12 is The Siamese, 15 is The Barrel Organ, 18 is The Ferris Wheel. The milestone screens announce those by name, floors ahead of time. They are appointments.
A warden that shows up off the calendar has announced nothing, so it owes nothing. It is drawn from a bag of the wardens you have not yet met in this run, never the one you just fought, and never the one the *next* toll has already promised you. Both of those exclusions exist because I watched the bug happen: the bag handed out The Magnetizer at toll 9 and again at 10, and once produced The Taxman at toll 2, one floor before the toll that announces him.
The reason this door earns its vagueness is what it unlocks. The Barrel Organ lived at toll 15, where the quota demands 32,112 souls inside 60 seconds. Almost nobody was ever going to see it. Taking the early warden door at toll 4 can now drop The Ferris Wheel on you, and a warden's health scales with the toll it appears at, so it is far gentler down there than at 18. The door does not break the difficulty curve. It moves the introduction.
The door also refuses to appear when the next toll already has a warden of its own. Selling you an appointment that is already on the books would be the one dishonest thing on that screen.
Endless mode has no doors, and neither does the campaign.
Endless is played against soul thresholds rather than a toll clock, so a contract on "the next toll" has nothing to attach to. The campaign is an imposed contract: a fixed build, a named warden, a chosen set of species. Offering a route inside a scenario that is defined by not having one would be a lie told with a nice carousel.
The arena remembers your pick, too. The combat header reads THE FAIRGROUND · THE REFRESHMENT STAND under the toll number for the whole floor. A door the fight forgot about would just be a menu.
Writing this up, I checked every door string against the localisation catalogue, and one of them does not survive the check.
When the refreshment stand flipped sign on 21 August, its prose line changed from "Fewer beasts. A flask and a trunk are waiting." to "The crowd presses at the counter. A flask and a trunk are waiting for you anyway." The new sentence never made it into the catalogue. French is the source language in this project, so an English or Spanish player currently reads that one line in French. The two mentions under it, the ones carrying the actual numbers, are translated correctly.
So the contract is intact and the flavour text is broken, which is the better way round to get it wrong, but it is still wrong. It is on the list for the next build. I am writing it here rather than quietly patching it, because a post about doors that print their price should not skip the door whose sentence I never shipped.
A choice is only a choice if refusing stays available, and if both sides carry a price you can read before you commit.
Three doors, one of them always free of any bargain. Four bargains, each stating its cost in the same plain language the rest of the game uses. One exception, and the exception is priced too, just in a currency that is not a percentage.
REELS is free to download with a trial that runs through toll 5, which is far enough to meet the door screen several times. A single purchase unlocks everything permanently, and progress made during the trial is kept. No ads, no lives, no continues.
https://apps.apple.com/app/id6801441632