Offline Progress Done Right, and Icons That Move

Android does not close an app when you switch away – it freezes it. That broke offline earnings in a subtle way. Also: offline bonuses as percentages, small animations that bring the resort to life, and fair prices in every country.

The bug that only existed on Android

On Android the offline earnings felt wrong. If you closed the app completely, you got your offline report. If you only switched to another app and came back later, you got nothing: no report, and less money than expected.

The reason: Android keeps a backgrounded app alive in memory, but the browser engine inside it stops drawing frames. The game loop runs on animation frames, so it simply stopped. When the app came back, it continued as if no time had passed.

The fix treats "coming back from the background" like "starting after being offline": the game notes when it was hidden and credits the time in between with the same logic used at startup. Browsers do the same when a tab is hidden, so the web version uses the same path.

Five minutes

Then a second question: should switching to a chat for ten seconds trigger the offline report and its bonus? No. The rules now are:

I briefly considered not crediting short absences at all, but that would mean your resort stops working whenever you glance at a notification. Silent credit is the honest version.

Offline bonus as percentages

The VIP crystal upgrade used to add hours of offline time. That looked strange after five minutes away ("+2 hours" bonus on a five-minute absence). It now adds a percentage to offline earnings, in steps: +25 %, +50 %, +75 %, +100 %, +150 %, +200 %, +300 %. The offline dialog shows how long you were away and the bonus that applied.

Icons that move

The painted icons were beautiful but still. I tested small animations, removed them again, and then brought them back properly with a setting to turn them off:

Each animation is a separate image layer cut out of the painted icon by a script, moved with CSS. That keeps them cheap: the browser animates transforms and opacity on the graphics card, without repainting. They switch off with the system's "reduce motion" preference and with the new setting, which shows the still icons.

The same day the settings got a credits screen and the region tabs started scrolling to the active region on startup. Opening the game in Switzerland and seeing Austria first was a small, daily annoyance.

Fair prices in every country

The crystal pack prices were set in euros, and Google converted them into odd amounts everywhere else. I wanted round prices that make sense locally, so prices are now maintained by a script through the Play Developer API:

The script prints a dry run first and only writes with an explicit flag. Changing prices in two hundred regions by hand would have taken an evening and produced mistakes; now it takes a command.

androidoffline progressanimationpricing

Try the game

Ski Resort Empire is free to play in the browser and on Android.