Toxic Games

How idle games run while the tab is closed

Nothing is running. Your farm is not being simulated overnight on a machine somewhere. Your tenants are not paying rent into a live ledger while you sleep. When you close the tab, the game stops completely.

What happens instead is that the game writes down the time. When you come back, it reads the clock, subtracts, and figures out what the last nine hours should have produced. The progress was never happening. It gets computed the moment you look, which is a strange thing to learn about a genre built on the promise that it plays without you.

The two ways to do it

You can actually keep the simulation running. Something on a server ticks every player’s world forward whether or not anyone is watching. This is how MMOs work, and it costs what you would expect: every idle player is a live process, so a thousand accounts that nobody has opened in a month are still burning money.

Or you store a timestamp and catch up on load. One row, no process, no cost while the player is away. The bill only arrives when someone signs in.

For a browser game run by one person, that is not a close call. Catch-up is also the honest choice for the shape of these saves: one player, one world, nobody else’s actions leaking in. Nothing that happened between visits depended on anyone but the clock.

Catch-up forces a particular kind of sim

Here is the part that changes how you write the game. If the game has to reconstruct nine hours in one shot, the nine hours have to be reconstructible. That rules out a lot.

Rent accruing is fine. It’s a rate times a duration, and you can compute it in closed form without stepping through anything. Crops growing are fine, as long as growth depends on elapsed time and weather you can regenerate rather than on the player having done something at hour four. The moment a system needs a decision in the middle of the window, catch-up can’t fast-forward it, because the correct answer depended on an input that wasn’t there.

So state splits into two piles. Things that accrue on their own, which the catch-up handles. And things that stop and wait, which have to sit in a queue until you show up. A tenant filing a complaint doesn’t resolve itself at 3am. It waits, and the accrual behind it stalls, which is the correct outcome and also the thing new players read as a bug.

Getting that split right is most of the work. Get it wrong in one direction and the game resolves things on your behalf that you wanted to decide. Wrong in the other and you come back to twelve blocking prompts and no progress.

The clock lies

The browser’s clock belongs to the player, and some players will happily move it. If offline earnings are computed from Date.now() in the tab, the exploit is a system settings panel and about four seconds.

So the timestamp that counts is the server’s, written when the save is stored and read when it’s loaded. The client can display a countdown off its own clock, because display is harmless. It just can’t be the thing that decides how much money appeared.

There’s a smaller version of the same problem in the other direction. Elapsed time can be negative if a machine syncs its clock backwards, or absurd if a save is older than the game. Both need a clamp, or you get a farm that runs in reverse.

Why offline progress gets capped

Most games in this genre cap how much they will pay out for time away, and it usually reads as the developer being stingy. It’s mostly a design problem instead.

Uncapped catch-up means the strongest strategy is not playing. If a week away pays a week of rent, the game rewards absence, and every number in it has to be balanced against a player who checks in twice a month. Tuning anything under that constraint is miserable, and the moment returns run away from each other, the middle of the game stops existing.

A cap says: the world moves on without you, up to a point, and then it needs you. That is also just more interesting. The pull of coming back should be that something is waiting, not that the number got bigger on its own.

What we actually built

Landlord collects rent on a schedule that doesn’t care whether the tab is open. Repairs, tenant screening, and anything that needs a judgment call wait for you, because those are the decisions the game is made of.

Acres runs a season clock and a market. Crops move through their stages, weather rolls, and prices drift while you’re gone. Come back mid-season and the field is further along than you left it, sometimes in a way you would have preferred to intervene in.

Both save server-side against one account, so they catch up from a timestamp we wrote rather than one your laptop offered us. Both are free, both run in a browser, and both are on the same account as everything else here.

When a game says it keeps running while you’re away, what it means is that it did the math when you got back. The part worth paying attention to is what it left undone for you.

devloglandlordacres