Last time I had mentioned the white board so where are we at?
All the bugs
The bugs are shrinking and a lot of cleanup is getting done along the way. Here’s the list from last time:
Free-For-All Mode AI has been fixed, and improved a little! Player assist AI has been given a few tweaks. It’s in a good state.
For regular matches, opposing team AI can possibly be too hard in general. I might or might not adjust it further. I do like it getting difficult as Season Mode progresses.
Verdict: Done Enough!
Still finding them, not fixed many yet. I did verify joining the all-CPU team mid-match on Quick Match would cause very weird and broken AI behavior! Now it activates the proper Player Support AI script.
A lot of edge case testing/fixing can wait until later when I need to test every single scenario involving controllers, etc.
Finally I have nailed down the after match shenanigans bugs! This has been going on since the project began and was the bane of my existence. It shouldn’t have been so hard but has been a combination of overactive AI, conflicting instructions during end states, and players getting stuck in an unresolved animation, all for a variety of reasons. Not to mention the final ending messing things up more! I think it is finally working correctly.
There were a lot of fixes for Challenge Mode and small improvements to the experience. This included tweaking some of the challenges, and remaining on the existing challenge upon replaying it — with an animation flair when you get a new high score. Small stuff but it helps a lot.
Coach had a glitchy speech issue. It was related to the first line of the typing text having an inconsistent delay before the 2nd. The annoying part was I added multiline spritefont text at some point (which works correctly) and this tutorial box still had it’s own previously written 2 line text code that was glitchy. I simplified it and fixed the bug by utilizing the common code. So far it looks fine.
This deserves its own mini-heading! The biggest QOL thing was finally adding a Ball Recycler. This should have been done years ago, but it hadn’t been an issue specifically, in most matches there’s probably less than 10 balls ever created; sometimes only one or two. However, in Season Training modes and Credits mode it was needed.
Basically the balls aren’t destroyed after they disappear now as they used to be. Instead they go hide and get turned off. Then they can then be reused without instantiating a new 3D object and all associated scripts and colliders. Since there’s mesh geometry associated with the balls, they are put in a category depending on their shape:
At the start of a scene, I can “spin up” the Recycler by adding the types of balls I can expect. For a normal match, there’s only ever one type of each shape needed. For credits, there’s 100s of round ones. For training games, I might need 6 of each type and some extra round ones. Further, if the Recycler runs out of recycled balls, it does generate new ones on demand.
This will improve long term performance by drastically reducing garbage collection needed after/during certain scenes.
Verdict: A few minor bugs and things remain to do
The endings got a bit more work but a lot of this is impacted by the more Xbox pertinent file system fixes.
Verdict: Nearly done
Xbox One: File Fixery
This one is a doozy. The first step was creating 2 pieces for the UI: The file system debugging window and the alert. Now, this game is not short on bad UI as it’s not my strong suit (duh), and this window is the worst one!
It’s extra horrible because I wanted to test it on any scene, no matter what. So I’m not relying on my sprite font scripts, or my UI code, or anything SSDT specific. This prompt and the file system debugging overlay are ugly, but hope to get the job done.
The horrible error prompt will show up on the (hopefully very rare) occassion that the previous file task did not execute properly. The idea is to give the user a big alert to retry, or to give up and go to the title screen so as not to be stuck if something is terribly wrong.
The file system debugging overlay is also able to activate this prompt. I have it set up so I can test the overlay on any scene using the keyboard or a special combination of Xbox controller inputs. That way I can make sure the prompt will be visible, function correctly, freeze the game wherever it is, and unload all scenes and go back to the title! The title screen forces you to press A which is when the game makes sure there’s a logged in user. So I’m also able to reuse this restart code for when there isn’t a logged in user for some reason, and you need a logged in user to get your files anyway.
Next will be more debugging buttons: telling the file system to load or save specific data, simulate corrupted or missing data and actually retry. This depends on the underlying work of having the PC serialize the data to disk, which is nearly identical to the Xbox’s cloud serialization, except it gets saved to disk and not the cloud. Unlike the Xbox’s current code though, I need to correctly handle the error states. Once that’s all working on PC I can re-implement the Xbox code in a similar fashion and use the test overlay to try to break it.
The long and short of it is: If it breaks in certification and I don’t have a good way to reproduce filesystem issues, I’ll be in a world of hurt. Better to find and fix problems before finding out the hard way, and to have a way to track down issues and reproduce them easily if they come up.
Verdict: Oof. It’s a big one.
The social isolation of the pandemic has been very hard on me. I didn’t take a vacation this year so I have taken some time away from the usual workload during the holidays. Even when you feel like you’re always behind, you still need a break. As a result, not as much got done as I’d like.
I was able to do a lot of code cleanup and review during this time, even printing out the sprawling file system code to make notes and a plan on how to make it work properly and more cleanly. It was a refreshing look at the code on paper; it was a nice way to get away from the computer screen.
Back at it, this is the last major piece left.