Skip to content

Skate 3 Android v0.1.18

Pre-release
Pre-release

Choose a tag to compare

@andrewnakas andrewnakas released this 07 Sep 23:13
· 6 commits to main since this release

This is a diagnostic build, not a general update. It is here for the three QCS8550 handhelds that never load the world — the AYN Thor, the Retroid Pocket 6 and the AYN Odin2 Portal. It arms a write watch over the game's static data, which has been tested on exactly one phone; if your game already works on v0.1.17, stay on v0.1.17.

Three handhelds on the QCS8550 chip — an AYN Thor, a Retroid Pocket 6 and an AYN Odin2 Portal — stop on a frontend screen and never load the world. This build does not claim to have fixed that. It ships the instrument that will name the cause from a single report, plus two real bugs found along the way and fixed.

If you are on one of those devices, please run this build once and send a diagnostic report. It will contain either the identity of whatever writes over the game's static data, or proof that the data was already wrong when loading finished. Either one ends the investigation.

What changed

The game's static data is now guarded and checked. Right after the executable and its title update finish loading — the one moment the data is known good — the engine keeps a copy, logs a hash of it, and makes those pages genuinely read-only. The first write into any of them is caught, recorded with the address of the writer, the game's own call chain and the bytes it was about to overwrite, and then allowed through so nothing breaks. Every thirty seconds the live data is compared against the copy and any difference is printed. When the audio table is found damaged, the whole neighbourhood is restored from the copy rather than the two entries the previous build could put back.

File reads no longer stop early. A read from the game folder used to be a single system call whose result was handed to the game as-is. Android serves an app's external files through a layer where a read may legitimately come back short or be interrupted, and the game — written for a console where that never happened — would go on to parse zeros. Reads and writes now continue until they are complete, and anything unusual is logged with the file and offset. Verified by deliberately breaking reads on a working phone: without the fix the game hangs while loading, with it the same conditions are only a few log lines and a normal boot.

Choosing a skater's name no longer crashes. A Retroid Pocket 6 that got past the frontend crashed the moment the game asked for a name. The on-screen keyboard could be dismissed before the engine had finished connecting it to the game's request, and the engine then wrote into a dialog that no longer existed. Dialogs are now created and connected in one step, on the thread that draws them.

Loading the game's web module no longer erases the engine's memory bookkeeping for the main executable, which happened a few minutes into every session.

The diagnostic report says more: which filesystem serves the game folder, the open-file limit, and what is in the user folder. Every failing device so far was on a first boot with no save; the development phone always had one.

Verified on the development phone

896 pages protected, none of them written, ten consecutive integrity checks clean across three minutes of play, audio resolving normally, and no measurable cost to frame pacing.

sha256 f119e561ebeb2bbfddb4f79a6f0ef9527351d20db33e17f0c7c76f83ea5cbc20