Skip to content

Skate 3 Android v0.1.19

Latest

Choose a tag to compare

@andrewnakas andrewnakas released this 08 Sep 01:35
· 5 commits to main since this release

Three handhelds built on the same Qualcomm chip — an AYN Thor, a Retroid Pocket 6 and an AYN Odin2 Portal — had never once reached the skatepark on any build of this port. They sat on a menu forever. They work now, confirmed by testers on the Retroid Pocket 6 and the AYN Thor.

What was wrong

Nothing to do with those devices' graphics or audio. The game's executable was being assembled incorrectly the moment it loaded, before a single frame was drawn.

Applying the title update means shifting blocks of the game's code and data to new positions in memory. Ninety-two of those shifts land on a region that overlaps where the block already sits. The code used a copy that is only correct when the two regions do not touch, and Android picks its copying routine to suit the processor — so the same app assembled a different executable depending on the phone.

Picture moving a sentence three words to the right, one letter at a time, working left to right. By the fourth word you are copying letters you already moved, so you repeat the first three words over and over instead of moving the sentence. That happened to a 32 KB block that only needed to move 480 bytes.

One of the ruined blocks holds the table the game uses to find its audio decoders. Audio setup failed, and the world never loaded. The other ruined blocks are where the crashes and the strange buffer sizes in earlier reports came from. One cause, not four.

The fix

The copy now handles overlap correctly. It is verified in both directions: it repairs the broken devices, and on a phone that already worked the assembled executable is byte-for-byte what it was before.

The loader also logs a fingerprint of the executable after unpacking and again after the update is applied, so a diagnostic report now states outright whether that phone assembled the game correctly.

Also fixed

  • Reads from the game folder no longer stop early. Android storage may legitimately return part of a read; a partial read used to be handed to the game as though it were complete.
  • Choosing a skater's name no longer crashes. The on-screen keyboard could be dismissed before the engine had finished connecting it to the game's request.
  • Loading the game's web module no longer erases the engine's memory bookkeeping for the main executable.

sha256 cd9eacda621828a9e9bfe93b80749253bd33a59af14d64ab3e615ccfbcee900f