The Curious Case of Xbox Live Arcade Demos on Xenia

By the time the Xbox 360 came out, my interest in modern gaming had already started to wane. While I did own an Xbox 360, I didn't have many games on it and mostly used it for playing with friends online. I don't have an incredibly strong attachment to the Xbox 360 nor its library, but I do appreciate emulation and have wanted to give it a shot.

Xenia is the dominant Xbox 360 emulator, and has been making gigantic strides. At this point, many popular games can boot and some are even in-game. How playable they are varies from game to game and how fast they run heavily depends on the strength of the host machine. It's unreasonable to expect perfection in games, but some are running quite well.

When I look to test an emulator and report bugs, I like to start with games I have a lot of experience with as early candidates. It helps me stay grounded and have a direct reference point as to what correct output is without having to know much about the emulator. I also wanted to choose a game that was likely to run well.

That led me to try out Castle Crashers and discover a rather fascinating rabbit-hole surrounding Xbox Live Arcade games.

A Short Demo of Xenia

Upon loading up Castle Crashers in Xenia, the game played pretty much how I remembered it. Xenia itself showed some nifty details in its presentation. I particularly liked how the Windows task bar would show an icon for the game that's currently running instead of the Xenia logo.

Xenia only supports XInput controllers, but they work well and don't require any configuration whatsoever. On my PS4 controller, everything worked without any trouble. It was actually a bit surprising for rumble to be working without me having to go through any kind of configuration menu. For those without a controller, there are keyboard controls as well, though it is not quite as natural as using a real controller.

Even though it's a simple game, it's great to see Xenia rendering Castle Crashers so well.

The one major problem I ran into is a rather common one in emulators: the text was garbled. According to footage of older builds, this wasn't always the case.

A lot more was broken in older builds but the text did render!

As someone experienced with other emulators, I know how tricky it can be to get text rendering properly. This wasn't any real cause for concern and I wouldn't be surprised if it wasn't weeded out with other rendering issues across other games in the future.

Considering that this was the only major issue I had run into, I was incredibly impressed... until my session came to an abrupt end during the first boss fight.

Without text, you may think I died, but this is actually asking me to buy the game.

To make things a bit clearer, here's a screenshot grabbed from someone playing the demo on console.

The game plays pretty well on Xenia, but it thinks its a demo.

Considering that the game was playing perfectly fine outside of minor graphical issues, this was rather frustrating. After looking at various documentation and asking around, I found out that an Xbox Live Arcade game and its demo are the same file. The only difference is that you need a bit set to make the game run outside of demo mode.

I figured that Xenia not setting this mask was some kind of anti-piracy measure in order to prevent users from downloading the demos off of their Xbox 360 and then running the full version on Xenia. That wasn't actually the case; while most titles are still available on the Xbox Live Arcade, Xenia devs claim that this is not a piracy issue.

This was the main response I found when looking for why Xbox Live Arcade games were running as demos.

I couldn't believe that was the real public response, but it truly appeared to be the case. People within Xenia's discord echoed that and that's how I received that screenshot. I was rather upset that the emulator was being limited for what seemed like such as nonsensical reason.

However, Rick showed up and answered my questions directly, giving some incredible insight into the reasoning behind the decision and how things developed the way they did.

The license mask policy. For context, this dates back to before Xenia provided any sort of "official builds" (which we do now, via AppVeyor).  There's two parts to this:

Core contributors (then, this would be benvanik and myself, maybe DrChat - don't remember if they had write access to the repo yet) agreed that we wanted a way to get people making their own builds. At the time there were third party builds being distributed by, let's say, less savory, sources which was adding an increasing amount of nonsensical noise to the project.  Also at this time, Xenia was only really booting XBLA titles in any functional state. (side note: many XBLA games at this time were also breaking in non-demo mode.)

The license mask defaulting to cause non-disc games to end up in trial mode was chosen as an easy 'out': "Game is in trial mode!".  My response: "Make your own build". Later this changed to: "Make your own fork". If they don't - user isn't here to help contribute. Still appropriate I'd say.

Its entire purpose was (and still is) to weed out people only here to just play games in Xenia. And it's done that spectacularly.  Xenia wasn't, and still isn't ready for users, IMO. Which is why I've been stubborn about it being changed.

Configuration:

A global setting for the license mask doesn't help anyone. Every game is different.  Suggesting that you run every game with a license mask with every bit set is flat out nonsensical (which is what people have been doing).  If the only way for license bits to get set is via controlled mechanisms (ie, via the developer/publisher and Microsoft), then having unexpected bits set could easily lead to undefined behavior at the fault of Xenia.

I've wanted for awhile to tie license stuff together in a way that makes sense, ie: user profiles and content that is "installed". It's been on the backburner for awhile. I've spoken with specific people in the past who were interested in working on this problem but they haven't gotten around to it, nor have I (very low priority for me).

Finally, everything made sense. While I don't entirely agree with all of the reasoning and methodology, I can at least understand the purpose and ideas behind what they were trying to accomplish. As Rick explained, simply hacking it the other way isn't a real solution, so Xenia itself did need to catch up a bit before it could really be fixed.

I disagree primarily with the fact that creating hurdles for general users is a good thing. As annoying as some users can be, they're an important part of testing and maintenance. More users means there are more headaches, but it also leads to regressions being caught quicker, more obscure games being tested, and people like me with little coding expertise being able to more easily contribute. In this case, it just depends on the developer if the extra noise is worth it, and they determined at that time that it wasn't.

With games like Halo 3 and Red Dead Redemption running in modern builds, having this limitation didn't make sense from the standpoint of limiting the community. And in the above quote, Rick agreed, saying that he was open to changing it if it was implemented in a reasonable manner. And things quickly seem to be heading that way as developers seem poised to allow the license mask to be customized on a per game basis thanks to Xenia's improved configuration infrastructure that didn't exist back when these decisions were made.

A Relic of the Past

I came into this article because I was frustrated, in the end I learned a lot more about Xenia than I expected. I got to play a game I hadn't tried in years, learned about how demos worked on Xbox 360 and got a much fuller picture on what happened. Honestly, the whole situation has made me more invested in Xenia than I would have been otherwise.

When I initially started writing this article, my only knowledge of why Xenia was running the game as a demo came from screenshots and out of context quotes of Rick. It seemed like the actual purpose and meaning behind why Xenia was doing what it was doing was lost in translation. I'm happy to have learned the history behind it and the true reasoning.

Soon enough, it may not matter as the latest builds of Xenia will have the ability to run Xbox Live Arcade Games accurately depending on how the license mask is configured.