Skip to content

Releases: Bubbleshum/WPR

WPR 0.1.06

Choose a tag to compare

@github-actions github-actions released this 25 Sep 22:32
Immutable release. Only release title and notes can be modified.

Prebuilt WPR 0.1.06.

Download Platform
WPR-Setup-0.1.06.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.06.apk Android 7.0+ (API 24), arm64-v8a / x86_64

What's changed

Changes since v0.1.05.

Highlights

Five games that used to show an error instead of starting now run, three more that used to fail in
other ways play, and every game finally gets its own saved data.

Cut the Rope plays end to end — and so do Cut the Rope: Experiments, Little Acorns,
Rabbids Go Phone and Flight Control Rocket. Carcassonne's menu works, and
Sid Meier's Pirates! and Galactic Reign put their opening screens on the display for the
first time. None of them was ever really broken; they are built a way WPR had no support for.

The Treasures of Montezuma, Plants vs. Zombies and iStunt 2 all play, each after a fault of its
own — one of them WPR's own doing, and one that had been closing a whole family of games on Android.

Every game now keeps its own saved data. Until now they shared one save area, so two games that
happened to use the same file name could break each other — playing Fragger was enough to stop
Gravity Guy loading at all. Existing saves are carried over, and a single game's data can now
be cleared if it ever gets into a bad state.

Android now needs Android 7.0 or newer, because WPR runs on a different .NET engine there than
it used to. Windows is unaffected.

🍬 Cut the Rope plays, on Windows and Android — menus, level select, finishing levels
🔬 Cut the Rope: Experiments plays — its menu buttons used to do nothing at all
🌰 Little Acorns starts and plays a level
🐰 Rabbids Go Phone plays — menu, and into your Rabbid's room
🚀 Flight Control Rocket starts and gets into a level
🎨 Phone controls drawn over a game are actually drawn now — backgrounds, panels, pictures and text
🏰 Carcassonne's menu works — it draws in full and takes taps, on Windows and Android
🌌 Galactic Reign draws its title screen — it used to be a black screen from start to finish
🎡 Spinning and slanted artwork appears the right way round — loading spinners in particular
🔄 Landscape games are no longer squeezed into an upright screen — half of the above were
🚪 A whole way of building a game that WPR had never supported — five games run, and the rest get past their old error
🔵 Funny Bounce's blue screen after game over is fixed — and with it, saved data in several other games on Android
👆 A touch fix that only showed on Android — a game could run perfectly and never see a tap
🖼️ Texture fixes for phones on the older graphics mode — plus one that was silently blanking textures everywhere
💎 The Treasures of Montezuma plays — it used to show an error and close before drawing a thing
🏂 iStunt 2 plays on Android — and with it a family of games that closed with an error about invalid code
⚙️ Android now needs Android 7.0 or newer — see the note below if you are on an older phone
⬅️ The back button works properly in games again — it had started closing them, with a false error
🛑 Games that ask "are you sure you want to quit?" can now actually quit
🤸 Funny Bounce no longer closes itself on Android — a second, separate fault from the blue screen below
💎 The Treasures of Montezuma plays on Android too, not just Windows
📥 Adding and updating games on the phone works again — it had broken quietly with the new engine
🌻 Plants vs. Zombies plays on Android — it used to freeze on the PopCap logo
🔗 Links in games open — in your browser on Windows, and in the right app on Android
📺 Cut the Rope's cartoons play — they open in YouTube, as they did on the phone
📤 Share buttons work on Android — they bring up the phone's share menu
🎵 Game music that stopped for good after one play should now loop — reported against Sonic 4 Episode I on Android
💾 Each game has its own saved data — games can no longer overwrite each other's saves, and your existing saves are carried over
🌀 Gravity Guy loads again — it stopped starting after you had played Fragger, Monster Island or iStunt 2
🧹 Clear a game's data — a new option that resets one game's saves when it will not start, with a warning first
🗑️ Uninstalling asks about your saves — keep them for a reinstall, or delete them too

Upgrading is normal. Install the new APK straight over the top on Android, or run the
installer on Windows; your games and progress stay where they are.

Android 7.0 is now the minimum, up from Android 5.0. This release runs on a different .NET
engine, and that engine is not offered for older versions. If you are on Android 5 or 6, stay on
0.1.05 — it keeps working, it just will not get newer releases. Windows is unchanged.

Every game needs to be repatched once, as in 0.1.05. On Android this is automatic — the
first launch of each game says updating patched assemblies… for a moment and carries on. On
Windows it is not: press Repatch on a game's page, or start WPR with
--repatch-installed to do the whole library and exit.

The repatch is what applies both the games below and the saved-data fix, so if a game has
been sitting in your library doing nothing — or losing your scores — repatch it.

The repatch also moves each game onto its own saved data. The first time a game runs after
that, its existing saves are copied across automatically, so nothing is lost and there is nothing
to do.

📖 Full release notes — what each of the above actually was, why it happened, and what is still missing.

All changes

Fixes

  • buttons overlapped by android os buttons, intro screen to video

Other changes

  • 0.1.06 (#46)
  • minor fix to build actions (result of upgrading net)

Built from commit 5cad2f4.

WPR 0.1.05

Choose a tag to compare

@github-actions github-actions released this 20 Sep 19:40
Immutable release. Only release title and notes can be modified.
a4037f9

Prebuilt WPR 0.1.05.

Download Platform
WPR-Setup-0.1.05.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.05.apk Android — API 21+, arm64-v8a / x86_64

What's changed

Changes since v0.1.0.

Highlights

If a game never starts on your phone, you can now do something about it. 0.1.04 changed the
way Android draws games, and that fixed a great deal — but on a small number of phones the phone's
own graphics driver cannot cope with it, and there was no way back short of a PC and a cable.
There is now a switch in settings, WPR notices a game that died before it drew anything and moves
you off that driver by itself, and the error you get when a game fails finally tells you which
driver it was using. That switch also had a trap waiting behind it, and it is gone: games that draw
any part of the scene as wireframe used to close themselves on the opengl setting, DoDonPachi
Maximum
among them.

The biggest fix in this release is for games that looked perfect and would not respond. On
Android, WPR could run a game at full speed, with every picture in the right place and every
animation playing, while the game quietly ignored everything you did. Brain Challenge HD was
the clearest case: its coach appeared and never said a word, and there was no way past the
introduction. The cause was not in any of these games — it was in the protection tool their
publishers ran them through before release, which produces a shape of code that Android refuses
to run and Windows has never minded. It turns up in a third of the games installed here. If an
Android game has ever seemed to run beautifully while ignoring you, try it again.

And four rendering faults are gone, three of which were never about one game. Brain
Challenge HD
's coach had blue skin, because red and blue were swapped on a whole class of
Android textures. Kinectimals drew black boxes around its foliage, because one model's
settings were leaking into every other model in the game. 3D Brick Breaker Revolution played
for a few minutes on Android and then vanished, because a leak nothing could clean up eventually
starved the graphics chip. And Fast and the Furious: Adrenaline showed a white screen and
nothing else, because of two small pieces of Windows Phone that WPR had never built.

One more, and this one was about touch rather than drawing. Gravity Guy's menu looked
perfect and ignored every tap. WPR had been telling games the size of the window they were running
in, where a Windows Phone would have told them the size of its screen — and a game that uses that
number to work out where your finger is put every tap off the edge of the world. Three more games
are built on the same engine and did the same sum.

And Chickens Can't Fly now starts. It used to close itself the instant you opened it on
Windows, and behind that were four separate faults stacked one behind another — each one only
visible once the one in front of it was gone. The first of them was a missing piece of Windows that
five of the games here would have hit sooner or later. While testing it, one more thing turned up
that is not about that game at all: the mouse wheel now scrolls lists inside games on Windows,
which it never did, and a short drag with the mouse no longer opens whatever it was pointing at.

🎛️ A graphics switch in Android settings — for phones where games never start at all
🛟 WPR switches graphics driver by itself after a launch that dies before its first frame
💬 A failed game now tells you which graphics driver it used, and where to change it
🕹️ Games that draw wireframe no longer close themselves on the opengl setting — DoDonPachi Maximum starts its stages
🗣️ Games that drew perfectly on Android and ignored you now respond — the pattern behind it appears in 11 of the 36 games here
🧪 Brain Challenge HD's coach is the right colour — and so is any Android game whose art looked oddly tinted
💭 Brain Challenge HD talks, and reaches its menu — it used to stop at a silent coach with no way past
🌿 Kinectimals' leaves no longer sit in black boxes — and other games' see-through parts are fixed with them
🧱 3D Brick Breaker Revolution no longer dies a few minutes in on Android
🧹 Games that draw in a loop no longer leak graphics memory — a quarter of a megabyte a time, never reclaimed
🏎️ Fast and the Furious: Adrenaline now races — it used to load to a white screen and stop
👆 Gravity Guy's menu takes taps again — and Fragger, iStunt 2 and Monster Island with it
🐔 Chickens Can't Fly starts and plays — it used to close itself the moment you opened it
🖱️ The mouse wheel scrolls lists inside games on Windows, and a short drag no longer opens the wrong thing
🌐 Games that talk to online services no longer close themselves on Windows — five of them here
🏆 Achievements you already have no longer pop up again every time you start a game
🔍 A graphics page on each game's info screen, so a bug report can say what the phone can actually do

Upgrading is normal this time. Install the new APK straight over the top on Android, or run
the installer on Windows; your games and progress stay where they are. The 0.1.04 notes warned
that it was the last release you would have to uninstall for, and that still holds.

One thing to expect afterwards: every game needs to be repatched once. The fix for games that
drew perfectly and ignored you is made by rewriting part of the game as it is patched, so a game
patched by an older WPR keeps the old behaviour until that is done again.

On Android this is automatic. The first launch of each game says updating patched
assemblies…
for a moment and then carries on. It happens once per game and you do not have to
do anything.

On Windows it is not. Nothing repatches by itself, and a game that has not been repatched
simply carries on behaving as it did before — it will still start. Press Repatch on a game's
page to do it one at a time, or start WPR with --repatch-installed to do the whole library in
one go and exit. Most games are repatched to no effect, so if you only care about one of the
games named below, repatching that one is enough.


When a game will not start at all, there is now a way out

0.1.04 switched Android over to Vulkan, the newer of the two ways a phone can draw games. That was
the right call and it is still the right call: it is what fixed characters frozen in a T-pose, and
games that stopped part-way through loading, and the black screen when you came back to a game you
had left.

But which of the two works is not really up to WPR. It depends on the graphics driver inside the
phone, written by whoever made the chip, and some of them do not do what they say they do. When
one of those fails, it fails in the worst possible way: the game shows a black screen, throws up an
error, and closes — and then does exactly the same thing next time, and the time after that.
Nothing you can do in the app changes anything.

There has always been a way out of that, but it involved plugging the phone into a PC and writing a
file into the app's storage by hand. If all you have is the phone, you had nothing.

Three things change that.

There is a switch. Settings → graphics has two buttons, vulkan and opengl. If a game has
never once started on your phone, try the other one. It takes effect straight away — the choice is
live from the moment you tap it, and the next game you start uses it. Nothing to restart, and the
rest of WPR agrees with you immediately: the driver named on a game's info page, and in the error
you get when a game fails, is the one you just picked.

This is not a setting to fiddle with. Vulkan is the right answer on nearly every phone, and the
reason it is the default was measured rather than assumed — the other option makes some games stop
part-way through loading and never finish, which is a worse problem than the one it solves. The
page says as much underneath the buttons. It is there for people who cannot play anything at all.

WPR also notices on its own. Every time a game starts, WPR writes down that it is about to use
the graphics driver, and crosses that note out the moment the game puts its first picture on the
screen. If it finds the note still standing next time — meaning the last attempt never got as far
as a single frame — it quietly moves you to the other driver and tries that instead. The window
this covers is about a second, from just before the driver is touched to the first thing you see,
so it takes a real failure to trigger it rather than you changing your mind and closing the game.

If you then pick a driver yourself, your choice wins and WPR forgets whatever it had concluded.

And the error tells you what happened. Until now, a game that failed to start gave you a page
of technical detail with no mention of the one thing most likely to be responsible. The message now
opens with the driver that was in use and a pointer to the setting, before any of the detail. It
says it every time, including when there is no error to go on at all — a driver that takes the
whole game process down with it leaves nothing behind to describe.

What this does not do. It does not fix any particular phone. The report that prompted it is
Zuma's Revenge on a Realme Note 60x, and that combination cannot be reproduced on any hardware
available here — the game plays through, level 1 included, on Windows, on the emulator, and on both
drivers. That phone's own Vulkan driver is the one variable none of those can stand in for. So this
release makes no claim to have fixed that game on that phone. What it does is make sure somebody ...

Read more

WPR 0.1.04

Choose a tag to compare

@github-actions github-actions released this 13 Sep 21:23
Immutable release. Only release title and notes can be modified.
2df1e6e

Prebuilt WPR 0.1.04.

Download Platform
WPR-Setup-0.1.04.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.04.apk Android — API 21+, arm64-v8a / x86_64

What's changed

Changes since v0.1.0.

Highlights

Games that used only part of your screen now fill it, and games that hung for ever on their
splash screen now start.
Both had been there since the beginning, and both were silent — no
error, no warning, nothing to suggest anything had gone wrong. Doodle God, which shut
itself down a second after launch, now plays too; Fable: Coin Golf — where every course
was a black screen — plays from end to end; and Battlewagon, which drew its scenery and then
refused to put a menu on it, now gets all the way in. Feed Me Oil, which drew a perfect picture
and stopped taking taps, plays on past its first level.

And on Android, 3D characters move again. WPR now draws games there a different way, and that
one change took a family of problems with it: characters frozen mid-stride in a T-pose, games that
stopped part-way through loading and never finished, and a black screen when you came back to a
game you had left. Contre Jour, which used to die before it drew a single frame, now plays.

📱 Games now fill the whole Android screen. No status bar, no navigation bar, no black borders around the game
▶️ Games that never got past their splash screen now start — they were waiting for a screen that could never load
🎮 Doodle God now runs — it used to close itself a second in, back to the games list
⛳ Fable: Coin Golf now plays — its courses were a black screen, and its scenery never arrived
🖼️ The last screen no longer lingers under the new one, and fades that used to sink to black now fade
🐑 Battlewagon's menu now appears — and other games that quietly failed to find their own files on Android
🕺 3D characters animate again on Android — they used to stand frozen in a T-pose while the world moved around them
⏳ Games that stopped part-way through loading now finish — the loading bar used to stick and never move again
🌒 Coming back to a game no longer leaves a black screen after a call or a switch to another app
🔧 Installing a game on Android no longer silently skips part of it — a game left half-converted could not start at all
🌧️ Contre Jour now plays — it died before its first frame, and again every time you looked away
🛢️ Feed Me Oil gets past its first level — it used to keep drawing beautifully and stop taking taps
📦 The Android download is about 14 MB smaller

Upgrading on Android? Just this once, uninstall WPR first. Every release up to 0.1.03 was
signed with a throwaway key, so this APK will not install over them — Android turns it away as
"App not installed". Uninstalling clears your installed games with it, so you will need to add
them again. This is the last time: from 0.1.04 onward every release is signed with the same
key, and updates install straight over the top with your library intact.

After that there is nothing to do — the first time you launch each game it says
updating patched assemblies… for a moment and sorts itself out. On Windows, press Repatch
on a game's page to pick up the splash-screen fix and the file-name fix below.


Games now fill the whole screen

Some games ran in a shrunken box: Android's clock and status icons still along one edge, the
navigation buttons still along the other, and the game squeezed into what was left with black
borders around it.

Windows Phone had no such thing as a windowed game. A game either had the whole screen or it was
not running, so the question "do you want the whole screen?" was one no game ever really had to
answer. WPR asked anyway, and took silence for a no — so a game that never got round to answering
was politely given a smaller screen, and Android kept its own bars on top.

WPR no longer asks. On a phone, the game gets the screen.

Two games show the two ways it went wrong. Final Fantasy never answers the question at all.
Fight Game: Rivals does answer, and asks for the whole screen — just a fraction of a second
too late, once the screen has already been handed out. Both now fill the display.

Of the 307 games checked, 14 were in the shrunken box, all of them XNA games:

Bubble Town 2 · Burn the Rope · Butterfly · Contre Jour · Fight Game: Rivals · Final Fantasy ·
Final Fantasy III · iBomber Defense · James Patterson's Women's Murder Club · KenKen ·
Storm in a Teacup · Tetris (both releases) · Twin Blades: The Reaping Vanguard

If one of those is a game you gave up on, it is worth another look. Every other game was already
filling the screen and is unchanged.

Windows is unaffected: games there run in a window on purpose, and that has not changed.

Games stuck on their splash screen

Fight Game: Rivals would show its studio logo and stay there for ever. Not frozen — the game
was running perfectly happily, still noticing every tap — it was simply waiting for its first menu
to arrive, and that menu was never going to load.

Many games don't build their menus in code. They describe them in data files — this button here,
that picture there — and read those files when they start. To read them, the game has to name a
few of Windows Phone's own building blocks.

When WPR installs a game, it rewrites those names so they point at its own replacements. There was
one hiding place it had never looked in, and any game that kept a name there was left pointing at
a piece of Windows Phone that no longer exists. The game then asks for its first screen, gets
nothing back, and waits.

It goes wrong quietly, which is why it took so long to find: nothing crashes and nothing is
reported. The game just never gets going.

Fight Game: Rivals is the only game in the 307 checked that used that particular hiding place, so
this is a fix for one game today — but it was never a problem specific to that game, and it
depended on how a game was built rather than on what it runs on. Windows was affected exactly as
much as Android.

Doodle God closed itself a second after you started it

Doodle God got as far as its second studio logo and then vanished, back to the games list with
Error executing application.

When a Windows Phone game starts up, the phone tells it so. When you come back to a game you had
left running — after a phone call, say — the phone tells it that instead. Two different
messages, and a game is entitled to answer each one differently.

WPR was sending both, and sending them twice, because a handful of games only ever set themselves
up in answer to the second one and sit there showing nothing without it. Most games shrug that
off. Doodle God reads "you're back" as "set yourself up again from scratch" — and it already sets
itself up on its own while the logos are showing — so it ended up doing that work three times
over. The second time round it went to add Adventurers to its list of elements, found
Adventurers already on the list, and fell over.

WPR now keeps a short list of games that should only ever be told they are starting. Doodle God is
the only game on it today. Games that depend on the other message still get it, and nothing else
about how games start has changed.

Nothing about this was specific to Android — the same thing would have happened on Windows.

Fable: Coin Golf, where every course was a black screen

Coin Golf's menus always worked. Picking a level was where it fell apart: the loading screen would
give way to a conversation with Mark, and behind that conversation the loading screen simply stayed
where it was. Then the course itself arrived as a black screen — the score, the buttons and the
wooden frame all present and correct, and nothing at all in the middle where Albion should be.

Two entirely separate faults, both of them in WPR rather than in the game, and each one enough to
ruin it on its own. Both are fixed, and the game now plays through: courses draw, the coin fires,
scores save.

The screen was never being wiped.

A game draws a new picture sixty times a second. Most start by wiping the screen and painting the
new one from scratch. Some don't bother — on a real Windows Phone the handset gave every game a
blank screen to start from, free of charge, so wiping it yourself was wasted effort.

WPR wasn't giving games a blank screen. It was handing back the last picture the game drew, still
sitting there. For almost every game that changes nothing, because they paint over every pixel
anyway. Coin Golf paints over some of them and trusts the phone for the rest.

That one difference produced all of it. The old loading screen stayed put because the new course
was, as far as the leftovers were concerned, behind it — so the course lost and was never shown.
And anything the game drew see-through, it drew on top of its own previous attempt, over and over:
a gentle fade darkened a little more every frame until it hit black and stopped, and the character
cards that slide in left a row of about ten copies of themselves smeared across the screen.

WPR now wipes the screen after every frame, exactly as the phone did.

Sixteen of the 186 Windows Phone games in the library contain no screen-wipe at all, and there will
be more like Coin Golf that have one and never reach it — so this is not a thing that can be counted
from the outside. Nearly all of them were painting over everything anyway and look identical:
Doodle Jump and Tower Bloxx New York were compared frame by frame, before and after, and are
unchanged. Coin Golf is the game where it mattered.

And the scenery never loaded.

A Coin Golf course is assembled from pieces — trees, fences, walls, bridges — and each piece name...

Read more

WPR 0.1.03

Choose a tag to compare

@github-actions github-actions released this 05 Sep 20:29
Immutable release. Only release title and notes can be modified.

Prebuilt WPR 0.1.03.

Download Platform
WPR-Setup-0.1.03.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.03.apk Android — API 21+, arm64-v8a / x86_64

What's changed

Changes since v0.1.0.

Highlights

Two hundred more games have a real achievement list, your phone buzzes, and any game can sit on
your home screen.
Most games showed an empty achievements page, vibration was never implemented
at all, a whole class of tilt-steered games sat perfectly still no matter how the phone was held,
and every game had to be started from inside WPR.

🏆 200 more games have achievements — names, descriptions, gamerscores and artwork, where the list was empty before
📳 Games can vibrate your phone on Android. Collisions, wrong answers, menu taps — all of it was silent before
🔕 A single vibration on/off switch in Settings, covering every game and any connected controller
🧭 Tilt works in games that never responded to it — Doodle Jump among them, on Windows as well as Android
📌 Pin a game to your Android home screen, with its own box art and name, and launch it in one tap
🖼️ Uninstalled games keep their icon on the achievements list instead of dropping to a grey placeholder
📦 The Android download is 20 MB smaller than 0.1.02, despite carrying all that new artwork

Upgrading? Nothing to do — no repatch or reinstall. Installed games pick this up the next
time you launch them, achievements included.


Two hundred more games have achievements

In 0.1.02, 54 games had an achievement list. Opening the achievements page for any of the other
223 showed nothing at all — not a locked list, not placeholders, an empty page. The unlocks were
being awarded and recorded correctly the whole time; there was simply nothing to display them
against.

254 games now have one, covering 4,350 achievements — each with its proper name,
description, gamerscore and artwork. Roughly 3,500 pieces of achievement art are new.

The names and keys come from the games themselves. Every Windows Phone game that has Xbox LIVE
achievements carries a small table inside it, generated when the game was submitted, listing the
exact identifiers it uses to award them. WPR had never read it. That table is the one part that
has to be exactly right — an achievement is unlocked by name, so a single wrong character means it
can never fire — and reading it turned up two catalogues that had been wrong all along: an
achievement in Max & The Magic Marker that could never have unlocked, and twenty in
Crimson Dragon: Side Story that were guessed display names rather than the real identifiers.

23 games still show an empty page, and always will: their achievements never went through the part
of Windows Phone that WPR emulates, so there is nothing to hook into. They are the later
native-code titles — the Angry Birds ports, Halo: Spartan Assault and Strike, Terraria, Geometry
Dash and similar, which do not run on WPR at all.

Nothing to do to get any of this: no reinstall, no repatch. Your existing unlocks are untouched.

Games can vibrate your phone

Windows Phone games buzz constantly — when you crash a car, get an answer wrong, or just tap a
menu item. On WPR that has never once happened. The part of the runtime a game calls to vibrate
the phone existed, but did nothing at all: it accepted the request and returned. No error, no
warning, nothing in any log. Games behaved as though it had worked.

It now drives the real motor on Android, including vibration strength on phones whose hardware
supports it, rather than everything being full-force.

Windows is unchanged — a desktop PC has no vibration motor.

Turn vibration off, everywhere, in one place

Settings → VIBRATION on Android. One switch, and it applies to every game — there is
nothing to set per game.

It also covers controller rumble, so switching vibration off really does mean off, rather than
silencing the phone and leaving a connected gamepad shaking.

Flicking it on gives a short confirmation buzz, the same way the phone's own haptics settings do —
so you can tell "switched on" apart from "switched on but this device has no motor". If your
device has no motor, the page says so instead of leaving you guessing.

A game that is already running keeps whatever setting it started with; the change applies from the
next time you launch it.

Tilt works in games that ignored it completely

Some games never responded to tilt at all — on Windows as well as Android.

Windows Phone reports tilt relative to the phone itself, not to whatever way up the game is drawn,
so a game that supports more than one screen orientation rotates the readings itself to match. To
do that it asks the runtime which way the screen is currently oriented — and WPR never answered.
Games written to handle that carefully would rather ignore a reading than act on one they cannot
interpret, so they threw every single one away and sat perfectly still.

Doodle Jump is the clearest example: the whole game is steered by tilting, and the character
simply would not move. It now plays properly, in portrait, on both Windows and Android.

Any tilt-steered game previously written off as unplayable is worth another go.

Pin a game to your home screen

Long-press a game in the games list and pick pin to start. Android asks whether to add it, and
the game gets its own icon on the home screen — its own box art, its own name, sitting alongside
your other apps.

Tapping it goes straight into the game. No WPR Start screen, no games list on the way through,
and when you quit you land back on the home screen rather than inside WPR.

Pin as many games as you like. If a home screen doesn't support pinned icons, the option isn't
offered rather than failing when you tap it.

Uninstalling a game switches its shortcut off, so a pinned icon can't be left pointing at a game
that isn't there any more. (Android doesn't let an app delete an icon from your home screen, so
you remove the icon itself the same way you remove any other — drag it away.)

Android only for now — Windows has no equivalent yet.

Uninstalled games keep their icon

Uninstalling a game keeps its achievements — that is on purpose, so clearing space is never the
thing that costs you your gamerscore. The game's icon did not stay with them, though: the row
dropped to a grey gamepad placeholder, so a list of games you had finished and removed turned into
a row of blank tiles.

The icon was only ever kept inside the game's own folder, which uninstalling deletes. Each
achievement's own artwork lives somewhere safer and carried on showing perfectly, which is exactly
what made the blank tile beside it look like a glitch.

WPR now keeps its own copy of every game's icon, outside the game's folder, where uninstalling
cannot reach it. On Android and on Windows alike — the desktop achievements page had the same gap.

Games you have already installed are covered without you doing anything: the icon is saved at
the moment you uninstall, so it is kept in time either way. Re-patching a game saves it there and
then, if you would rather not leave it to chance.

A smaller download

The Android APK is 137 MB against 0.1.02's 158 MB — 20 MB smaller, even though it now carries
achievement artwork for two hundred more games.

Reading the phone's motion sensor no longer needs the third-party library it used to, and that
library and everything it dragged in are gone. That saved considerably more than the new artwork
costs.

Also fixed

An achievement catalogue that got shorter between releases would arrive on Android with the tail
of the previous version still stuck on the end, leaving it unreadable — and a catalogue that fails
to load shows no achievements rather than reporting a problem. Only one game was affected in
practice (Crimson Dragon: Side Story), but the copy that deploys catalogues on every launch could
have done it to any of them.

All changes

Features

  • arm native research
  • keyboard input emulation, module architecture, and game fixes
  • android vibration support with a global on/off setting
  • pin a game to the android home screen
  • recover achievement keys for 190 games from embedded XLAST config
  • curate achievements for four playable games
  • curate eleven more catalogues from their resource tables
  • curate Doodle God Blitz and Picnic Wars from their content XML
  • real gamerscores for six games from their own score tables
  • recover eleven catalogues whose XLAST pair table would not parse
  • names, gamerscores and descriptions for 169 catalogues
  • gamerscores for fifteen catalogues curated from their own packages
  • a game description for every catalogue
  • achievement icons for 200 more games

Fixes

  • Mirror's Edge on Android - animation, music and driver selection
  • populate TouchPanel.DisplayOrientation so tilt games get their readings
  • read the Android accelerometer directly, not through Xamarin.Essentials
  • keep a game's icon after uninstall so achievements keep their artwork
  • keys were filed under Tentacles' stale ProductID
  • repair catalogue text mangled by an ANSI round trip

Chores

  • open release notes for 0.1.03 and mark it unreleased
  • rename WPR.Input.XamarinEssentials to WPR.Input.AndroidSensor
  • add the tilt fix to the 0.1.03 notes
  • add the game icon fix to the 0.1.03 notes
  • turn the 0.1.03 notes into a release document

Other changes

  • plans native

Built from commit ec46870.

WPR 0.1.02

Choose a tag to compare

@github-actions github-actions released this 03 Sep 21:06
Immutable release. Only release title and notes can be modified.
2f35d69

Prebuilt WPR 0.1.02.

Download Platform
WPR-Setup-0.1.02.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.02.apk Android — API 21+, arm64-v8a / x86_64

What's changed

Changes since v0.1.01.

Highlights

Play touch games with a keyboard, and a batch of games that now finish what they start. Two
long-standing hangs, a black screen, and saves that silently never happened.

⌨️ Bind keys to taps and swipes. Draw the gesture on a phone outline; saved per game
🔙 The Back key is rebindable — still Escape by default
💾 Games save again. Progress and settings were being lost while the game looked fine
🧊 Game Room: Pitfall! no longer freezes on its second splash screen
⬛ Guitar Hero 5 no longer shows a black screen on Android
🐦 Angry Birds' credits page can be left again instead of freezing
📥 Installing a second game in one session no longer hangs on Android
🏆 Achievement unlock toasts appear on Android, and secrets stay secret on Windows

Upgrading? Repatch your installed games — Windows has a Repatch button on each game's
page and a --repatch-installed switch; Android has the same button. Games patched by an older
version will not launch until you do.


Most of this release is one theme: things that started and never finished. A game that hung halfway
through loading, an install that wedged the app behind it, a save that was written into a file
nobody could open. None of them reported an error — each one just stopped.

Games save again

Progress, settings and high scores could silently fail to persist.

WP7 gave every app its own short-lived process, so leaving a save file open cost nothing. WPR runs
games inside one long-lived launcher, where a file left open blocks the next write to it. A game
would read its save, leave the handle open, later try to write, be refused, swallow the error in
its own error handling, and carry on looking perfectly healthy — with nothing written.

Angry Birds is the case this was found on: muting the sound never survived a restart, and neither
did high scores. Nothing about the fault was specific to it, so any game reported as "loses
progress" is worth another try.

Game Room: Pitfall! no longer freezes on the second splash

It stopped dead on the Krome Studios logo, on Android and on Windows alike.

Games that load their content on a background thread while the screen they are showing does not
need redrawing could deadlock outright: the loader was waiting for the screen to be drawn, and the
screen was waiting for the loader to produce something to draw. Neither ever moved.

This was only ever possible on the OpenGL graphics driver, which is the one Android uses — which is
why it arrived as an Android report, though it reproduced on Windows too once the same driver was
forced.

Guitar Hero 5 no longer shows a black screen on Android

Black from the first frame, no crash, nothing in the logs.

The game keeps every string, texture and screen layout in a single bundle, and loading it needs a
helper assembly that the game refers to only by a partial name. On Android that partial name was
being resolved by loading a second, separate copy of the same assembly — so the bundle came back as
a type that was, to the game, not the type it asked for. The load failed, the game carried on with
nothing to draw.

Angry Birds' credits page can be left again

The credits scrolled a little, then froze, and the page could not be exited.

The page asks for an extremely short frame time on entry and restores the normal one only on the
way out. Honouring that request literally gave the game a time delta of zero, which stopped every
animation and timer on the page — including the one that would have let you leave. Frame times are
now floored at 60 frames per second, which is the fastest any real Windows Phone could draw.

Installing a second game in one session no longer hangs on Android

The second install would sit at "reading manifest" forever.

Converting a game's soundtrack left the app unable to continue afterwards — the conversion itself
always succeeded, so nothing looked wrong until the next thing you did. Soundtrack conversion now
runs in a separate process that is discarded when it finishes.

Play touch games with a keyboard

New on Windows: a key can now stand in for a tap or a swipe, for games built entirely around
touch.

Bindings are per game, because a tap only means anything at a particular place on a particular
game's screen. The Controls button on a game's page opens an editor where you draw the
gesture on a to-scale phone outline rather than typing coordinates — press where the finger should
go down, drag to where it lifts, release. A click without dragging is a tap.

The Back key is now rebindable too, in Settings → Controls. It remains Escape unless you change
it. On Android, Back is the phone's own Back button and is deliberately not configurable.

XNA games only for now — Silverlight titles use a separate input path.

Achievements

  • Secret achievements no longer spoil themselves on Windows. Unearned secrets were showing
    their real name and description; only the Android list was hiding them.
  • Unlock toasts now appear on Android. The achievement was always awarded and saved — nothing
    was ever shown.
  • Completion percentages and game ordering now match between Windows and Android, and the
    Windows achievements page no longer comes up empty for some games.

All changes

Features

  • arm native research
  • keyboard input emulation, module architecture, and game fixes

Fixes

  • Mirror's Edge on Android - animation, music and driver selection

Built from commit 2f35d69.

WPR 0.1.01

Choose a tag to compare

@github-actions github-actions released this 31 Aug 21:02
e03c8bf

Prebuilt WPR 0.1.01.

Download Platform
WPR-Setup-0.1.01.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.01.apk Android — API 21+, arm64-v8a / x86_64

What's changed

Changes since v0.1.0.

Highlights

The Mirror's Edge fixes release. Everything below is Android; Windows is unchanged apart from
shared plumbing.

🕺 Characters are no longer stuck in a T-pose. Wrong graphics driver — this hit every 3D game with animated characters, not just this one
🎵 Music plays. The soundtrack conversion had never once run on Android, so games installed silently mute
🔊 The once-a-second click during music is gone
🏠 Music stops when you leave the app instead of playing over your home screen
🚀 Games no longer refuse to start when a graphics driver turns out to be unavailable
💥 Fixed a crash on launch introduced in 0.1.0

Upgrading from 0.1.0? Repatch or reinstall your games to get their soundtracks — the audio
conversion happens at install time.


Almost all of it started as two reports about a single game: characters frozen in a T-pose, and no
music. Neither turned out to be specific to Mirror's Edge — one was the graphics driver every 3D
Android title was getting, the other an install step that had never run on Android at all. If you
have that game, this is the release to install; if you don't, it very likely fixes yours too.

Characters are no longer stuck in a T-pose

Every animated character in every 3D game on Android was rendering in its bind pose.

FNA3D picks a graphics driver by walking its compiled-in list and taking the first that accepts the
window. On Android that landed on the Vulkan driver — the one FNA3D's own source still gates behind
a "not done yet" comment. It mistranslates the stock SkinnedEffect shader's bone array, which is
exactly what skinned character animation runs on. The world, lighting and reflections all drew
perfectly, which is why this read as an animation bug rather than a driver one. Windows was never
affected: it uses Direct3D 11.

Android now runs on the OpenGL driver, and animation is correct on real hardware.

This was never Mirror's Edge specific. Any XNA title using SkinnedEffect for character
animation had the same problem, so the Android column of the
compatibility list is worth revisiting.

Music plays on Android

WP7 games ship their soundtracks as .wma, and the song player decodes Ogg Vorbis only, so tracks
are converted when a game is installed. On Android that conversion had never worked: it ran through
a component that launches ffmpeg as a separate program, and an Android app has no such program to
launch. Every track failed, each failure was swallowed, the install reported success, and the game
was silently mute. Sound effects still worked — they need no conversion — which is precisely why
this looked like a mixing problem rather than a missing step.

Conversion now has a real Android implementation, and:

  • A broken converter fails the install instead of quietly producing a silent game. A single bad
    track is still only a warning; a game that installs cleanly and plays no music is the outcome
    worth refusing.
  • Already-installed games can be repaired with a repatch, which is much quicker than a full
    reinstall and is already offered in the Android UI.

The once-a-second click during music is gone

Songs were audibly ticking once per second. The underlying song player decodes a full second of
audio into a single buffer, with nothing queued behind it, and only refills once that buffer has
already finished — so at every boundary the audio device had nothing to play while a second of
audio was being decoded. Desktop machines absorb it; a phone does not.

Songs on Android now play through Android's own media player. Sound effects are unchanged.

Music stops when you leave the app

Backgrounding the app left the music playing over the home screen and other apps. Sound effects had
always stopped correctly, which made this easy to miss.

Music now pauses with the app and resumes when you return. Games that pause their own soundtrack
resume exactly where they left off, including when Android reclaims audio while the app is away.

Note that many WP7 titles — Mirror's Edge among them — stop their music when deactivated and
start it again on return, because on real hardware being backgrounded meant being shut down. Those
games restart their track from the beginning. That is the original behaviour, and it is preserved
deliberately.

Graphics driver selection is much harder to break

  • A driver that cannot run no longer fails the launch. Each driver is now tried by name in
    turn, and every attempt is logged. Previously a declined driver produced
    No supported FNA3D driver found! and the game refused to start.
  • The emulator renders again. It cannot run the OpenGL path, so it is detected and allowed to
    choose for itself, while physical devices keep the driver that animates correctly. The detection
    deliberately errs towards treating a device as real hardware.
  • The driver can be changed on a device without a new build, by dropping a file next to the
    app's data. Intended for diagnosing a phone whose driver misbehaves.

Also fixed

  • The app crashed on launch on Android. Two dependency exclusions carried in with 0.1.0 removed
    a library AndroidX needed, and the app died before showing anything.
  • A failure inside an Android lifecycle callback could take the running game down. These are now
    contained.
  • The FFmpegKit Java bindings produced empty assemblies — they were built for the wrong target,
    so no code was generated and nothing could call them.
  • Android audio output now runs at 48 kHz with a larger mixing block, matching what the platform
    actually wants.

Known issues

  • Android emulator only: returning to a running game shows a black screen. Android destroys the
    drawing surface when an app is backgrounded, and the Vulkan driver the emulator uses does not
    rebuild against the new one. Physical devices use OpenGL and are unaffected. Fixing it needs a
    rebuilt native graphics library.
  • On desktop, songs still use the single-buffered player described above. The same starvation
    exists in principle but is inaudible at desktop speeds.

Upgrading

Games installed before this release need a repatch or reinstall to gain their soundtrack — the
audio conversion happens at install time. No game IL changed, so nothing else needs reinstalling.

All changes

Fixes

  • Mirror's Edge on Android - animation, music and driver selection

Built from commit e03c8bf.

WPR 0.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 22:11

Prebuilt WPR 0.1.0.

Download Platform
WPR-Setup-0.1.0.exe Windows x64 — self-contained, no .NET install required
WPR-0.1.0.apk Android — API 21+, arm64-v8a / x86_64

What's changed

First tagged release — this summarises the history to date.

Highlights

This is a ground-up overhaul — the largest change since the project started, and the reason the
version moves to 0.1.0 rather than another 0.0.x increment.

Architecture

The codebase has been reorganised into clear layers with enforced boundaries, replacing a tree
where the rendering backend leaked into every project.

  • Backends are now real, swappable adapters. WPR.Backend.FNA drives the XNA game path and
    the new WPR.Backend.Direct3D11 drives the Silverlight surface path. They are the only two
    projects allowed to reference a graphics backend, and an automated fitness test fails the build
    if anything else acquires one.
  • The XNA type system is WPR-owned. Roughly 240 XNA types — the whole value/math, graphics,
    audio, media, input and content surface — moved out of the vendored FNA fork into
    WPR.Framework.Xna, talking to the backend through explicit seams. FNA is now only a platform
    layer, not the type system games bind to.
  • Databases live in one place. A new WPR.Database project owns both schemas, the seed data
    and the per-game achievement catalogues, which previously existed in three copies across the
    repo.
  • Projects renamed to match what they are. The platform heads are now WPR.Platform.Windows
    and WPR.Platform.Android in project and assembly name, and several compatibility shim
    projects were dissolved into the layers they belonged to.

Achievements

  • 277 per-game achievement catalogues ship with the app, each with its own artwork.
  • Achievements are read from that curated catalogue rather than being extracted by scanning game
    code at install time — no network calls, no guesswork, and unlock progress is never reset when a
    catalogue is updated.
  • The achievements backend now sits behind a proper interface, so the GamerServices API games call
    no longer reaches into the database directly.

Game fixes

Many titles that previously failed to launch, crashed, or rendered incorrectly now work —
including Battleship (EA), Babel Rising 3D, Bejeweled LIVE, Crimson Dragon: Side Story,
Fruit Ninja, Hydro Thunder Go, Mirror's Edge, Minesweeper and Tiki Towers. Fixes span engine
initialisation, orientation and viewport handling, audio, notifications, and crashes on relaunch.

See the compatibility list for per-game status.

Maintenance

  • Entity Framework Core unified on a single supported version across both platforms; the desktop
    build had been pinned to a .NET 5-era dependency graph.
  • All known package vulnerabilities resolved — the repo now audits clean, including one
    critical and several high-severity advisories.
  • Version numbering is single-sourced, and release notes are generated from commit history.

All changes

Features

  • refactored classes to seperate for shims
  • hardcoded achievement catalogue + Fruit Ninja 2013 launch fixes Achievements - Replace IL-scanning XnaAchievementCodeExtractor with a
  • added more games to catalogue, added fixes around music and device id null pointers
  • more game library and fix for crimson story black screen
  • big refactor started, names of games from game ids added to catalogue (292 games), adding more achievements
  • 4 more game achievements added
  • Major refactor added initial work for release apk build and installers
  • architecture overhaul, centralised database, and 0.1.0 release tooling

Fixes

  • minesweeper help and options loads, bottom bar always on top now for silverlight
  • Hydro thunder Go crash on loading main menu (unsure if this was the issue) but now running. updated readme to reflect
  • assassins creed plus add links to wiki
  • single click in desktop caused game to run instead of navigate to game page, few errors around net8 target framework and collision for
  • Babel Rising 3D — Shiva/llvm2cs engine init + achievements
  • Battleship (EA) — playable + achievements

Other changes

  • Fruit Ninja working
  • Stable PC build
  • More compability and Android build
  • Directory refactoring and more compatibility for release
  • Add removed changes to bak files
  • Add README
  • Update FNA3D libraries
  • 0.0.5-alpha dev edition
  • System.Security.Cryptography emulation RnD
  • ImagingBitmapSource emulation RnD
  • Adding functions-stubs to Phone Shell StandartTileData
  • Edit Readme (how to add special AvaloniaUI Nuget-package source)
  • Starting to realize ImagingBitmap and BitmapSource deals
  • Src reform
  • Android part deleted to simplify RnD
  • 0.0.7-alpha dev edition
  • 0.0.8-alpha dev edition
  • Mirror s Edge R.E. & fix...
  • 0.0.9-alpha dev edition
  • wpr-dev 0.0.12 checkpoint

…and 36 more.

Built from commit 2ce1cd2.