REELS

Published 2026-09-04

The same seed for everyone: what a daily challenge actually promises

A seed only guarantees what nothing else has been allowed to touch. Here is how REELS derives its daily seed, and the two rules that keep the promise honest.

Today the plate on the daily challenge reads DC66-04-09. Everyone who opens REELS on 4 September 2026 sees those same characters, drops into the same pit, meets the same guardian, and pays the same tolls. That is the promise. It is worth explaining properly, because "same seed for everyone" is a sentence plenty of games print and very few games can fully honour.

What a seed is

A computer does not produce randomness. It produces a stream of numbers that looks random and is entirely determined by its starting value. That starting value is the seed. Feed the same seed in, get the same stream out, in the same order, every time.

REELS uses SplitMix64 for this: a tiny generator, one addition, two multiplications and three shifts per number. It is fast, well distributed, and above all seedable, which Swift's system generator is not. Every random decision in the engine goes through it: which symbols land, what furniture the pit gets, which guardian is announced, where a skull decides to strike when there is nothing to hit.

Where the day's seed comes from

The seed is the day. REELS takes the local calendar date as a string, 2026-09-04, puts a fixed prefix in front of it so the result is not simply the hash of a date, and runs FNV-1a over the bytes into a 64 bit number.

Two consequences worth knowing. The rollover happens at your local midnight, not at some server's, so a player in Auckland runs the same seed as a player in Los Angeles, many hours earlier in real time. And there is nothing to re-roll: one attempt, and the day itself is the input.

The code on the plate is not the seed

The plate shows four hex characters and the date. Those characters are the top 16 bits of the seed, which makes them an extract, not the thing. Watch them for a week and you will notice they are lazier than they look. The 1st through the 9th of September all read DC66. The 10th through the 19th read DC69. The 20th through the 29th read DC6D. The four characters only move when the tens digit of the day moves, because the day's last digit is the final byte folded into the hash and sixteen bits off the top do not see it.

The date half is what actually makes the plate unique. The seed underneath is all 64 bits and is different every single day. A seed code is a label. Read it as a label.

The two rules that make the promise true

This is where the work went, and it generalises to any game that offers a shared seed.

Nothing is allowed to look at the screen. Two players do not have the same arena. An iPhone SE and an iPad are not the same pit. So the furniture generator reads exactly two things, the toll number and the seed: how many pieces come out, which pieces, the scale of each instance, where each one stands. Everything in unit coordinates, nothing aware that a screen exists. The moment one position is derived from the viewport, the pit stops being the same pit.

The draw order has to be declared, not discovered. When the reels resolve, each symbol type is handled in turn, and a few of them pull from the generator as a last resort: the angle a star fires at with no target available, the point a skull picks when the arena is empty. Those pulls advance the stream. Swift randomises the iteration order of a dictionary on every launch, so resolving symbols in dictionary order would advance the stream differently on each device, and the same seed would quietly produce different arenas. The fix is to iterate the declared order of the symbol enum. One line, and without it the whole feature is a lie.

The general lesson is the one sentence I would keep: a seed guarantees only what nothing else has been allowed to touch. Every read of a device specific value, a screen size, a locale, a clock, a hash ordering, is a hole in the promise, and holes do not announce themselves.

What it does not equalise, said plainly

The daily run forces the honest machine, the one from the mockup that cheats neither for you nor against you, and it leaves every workshop upgrade at the wardrobe, because an equality promise with permanent boosts inside it is not one.

What it does not flatten is your collection. The charm draft draws from the charms you have unlocked, so somebody two hundred runs deep is offered from a wider pool than somebody on their first evening. Same pit, same guardian, same tolls, not always the same three cards. That is a real limit, and I would rather write it here than have a player find it and assume it was hidden.

What the shared seed buys is what remains once luck is held still. The daily board is a recurring Game Center leaderboard that empties at midnight, and on a fixed seed a better score is not a luckier draw, it is a better set of decisions. That is the only kind of leaderboard this game could honestly run.

REELS is on the App Store, and the daily challenge is open during the trial, which stops at toll 6.

All notes