XPROG: Xbox Progress
SSDT continues the slow motion tackle of Xbox One. At least, in terms of tackles, it is taking some time! It’s easy to forget how much was done to get to the finish line. Here’s the August report.
A lot of issues I’ve been running into are due to custom code “just for the Xbox”. This code is new, untested and hard to debug because it’s not running on my PC. The fancy new much-lauded-by-me control configuration screen looked great on PC, but the actual saving and loading of the custom bindings hadn’t been written yet. On PC there’s a config for every type of stick, but on Xbox One I can just save one config per profile since all the controllers are the same. This makes it simpler and easier, but it still had to get done.
I can’t state enough how a lot of developers skip on custom control configuration, but it’s very important for accessibility and for gamers who know button layouts better than me.
So a few days were spent getting that screen working, only to run into problems getting the maps to “stick” to the stick. Once it seemed to be working, I added code to apply the new button maps to any sticks that connect later. This is for those times you have some friends over (please let us get a vaccine soon!) and you have to find a controller and get it turned on after the game has loaded. The code didn’t work though, and they had the old button maps. The interesting part was they started working once I opened and closed the options menu. This makes sense.
Loading the custom controls worked but when a new controller connected, the default controls were applied even though I said “hey buddy, use this new stuff”. It took some time to track it down, but the gist of it is I was running the reconnect method as soon as the Xbox told me too. I should have been waiting until Rewired picked it up, then run Xbox specific reconnect stuff after my internal controller tracking was up to date.
For non-Xbox, I’ll have to test this edge case later, but it is working now!
Saving and Loading
One of the biggest headaches was moving from a linear save routine to an asynchronous cloud save routine. Cloud saving (on various platforms) involves sending the data off to “the cloud” aka a mystery area in space and time where you have no idea if your message got received or lost until you get a reply, or don’t and give up after waiting some indeterminable amount of time. This is why we as a human society have lost the incredibly useful “progress bars” of yore, and gained “nearly completely useless spinners”.
Spinners are just an indicator that “either something is still happening or else the program broke but the spinner lives on… perhaps forever.” On the up side, your save data lives on a server some where so you can continue playing game after game, season after season, even if you have to replace your Xbox, or get the Series X, or maybe the next one after that if current forwards-compatible trends continue. Maybe you’ll play your same save game on the Xbox 17!
*NOTE THAT ISN’T A KNOWN THING BECAUSE I HAVE NO VISION INTO THE WORLD OF TOMORROW BUT IT SOUNDS REALLY COOL RIGHT?
Point being, I have had to alter every instance of saving and loading with queuing a storage task, starting the spinner, then detecting success, failure or timeout. This was a lot of the work from back in 2017 but it was being put through the paces now. I’ll spare you what all has been goofing up and sum up with my goals:
- NO save/load tasks should occur if there’s no signed in user
- UI should be left in a state that communicates the user hit a button, and not remain open if we are waiting for the cloud
- UI should return to usable state regardless of outcome (closing a menu, failing to save should not leave you stuck with no menu)
There’s a lot of edge case testing to do, but that can wait for now because it’s time for the least boring part of this post:
Until the moment I saw data coming back I was debating whether to sell my kidneys and pay someone to finish this or to try living kidney-free on a sailboat until realizing I have no idea how to sail or fish or cook on a boat or make clean water — very important if you have no kidneys.
Sweet merciful day, I got achievements back from the server. A huge first step towards getting the Xbox Achievements in the game. The next step was getting them to fire. This was another few days of trying to get my head around it and trying different approaches before settling on the “simple” method of tracking all the achievements internally (since I was doing that anyway) and building in tracking for the (normally server-side) stats like counting deflections or time played.
With that snapshot of days gone by behind me, I stride tomorrow into a new day, or days. Another new tomorrow likely awaits, at some point. Probably?
More accurately: 64/110 achievements are pending testing or appear to be working. Bugs are beings destroyed. I’m determined to conquer covid isolation malaise/possible insanity and check a lot of boxes off a lot of TODO lists. While testing the plethora of chievos, I can also add/fix things on my large list of bugs.
In the meantime, this episode of Continue? really made my week/month. It reminded me of how much fun I’ve seen people have with this game and given me renewed hope that it could do well on Xbox One. Give it a watch!