As per usual, it's been a long time since I last posted an update and I'm sure there are at least a few people wondering what I've been up to. Well, let me break it down.
Background When I first added user accounts and save functionality to the prototype, I wasn't sure what or how much game data would need to be saved across sessions and decided to take a "quick and dirty" approach to storage. All game data - and yes I do mean *all* of it - was and is stored in the current session as an array named "GAME". The GAME array has hundreds of nested child arrays for different values, counters, and flags. Everything from current zenny, battle points, settings, rewards, unlocked robots/players/abilities, collected stars, shop history, mission progress, and so much more are stored in this one array. Whenever you "save" your game (or it happens automatically), the *entire* GAME array is compressed into a giant text blob and then saved into a single field of a single row in the database. This was very easy to implement but, naturally, my laziness has created many challenges and difficulties for me as the game continues to grow in scope and complexity.
Main Problems - Slow saving because everything is compressed at once - Slow loading because everything is decompressed at once - No data validation on save means bugs can't be detected and fixed automatically - Format of the save data means developers can't manually detect or fix bugs either - Even a simple bug could break the save structure and cause the user to lose data forever - Patches require looping through every save, loading everything, modifying what's needed, and then re-saving everything - As a result writing even simple updates to the game's mechanics can takes months or in some cases years to complete - Legacy data sticks around forever even if abilities/etc. have been renamed or removed with no way to remove without patches - It's impossible to query the database for specific user's game details without decompressing their entire save file - Even simple details like those shown on leaderboard profile (players, abilities, etc.) require decompressing entire save for each user - No way to pull simple records for how many people unlocked a specific robot, ability, etc. so can't show on website - No way to find or filter saves based on criteria like who unlocked a specific robot, ability, etc. so can't show on website - Being unable to pull stats for robots, abilities, items, etc. makes it hard to see what's good vs bad and is a huge loss for QA - More issues I'm probably forgetting
What save data looks like now
The Solution Given the above, it's super important that I modify the structure of the game's save data and optimize how it's stored/accessed/modified going forward. I need to make sure every one of those nested arrays are instead stored separately in their own database tables. There needs to be a separate table for robots unlocked by users, abilities unlocked by those robots, abilities currently equipped to those robots, abilities unlocked by a specific player, abilities purchased from the shop, etc. and instead of saving all those things to the database at once during a single "save" sequence, they should added/modified *as you're doing them* so they're properly validated and indexed. This is obviously a HUGE task and even though I've been working on it for almost a year I'm still not done. I'm close, but I've been saying that for months and the TODO list is still quite long. Even so, I'm working on it whenever I have time and I hope the community hasn't completely abandoned the project once I finally do finish.
What save data should look like
And After That? I'm going to try really hard to *not* add any other features or change any other mechanics in this patch so that I can get it out as soon as possible. It's a huge undertaking as-is and if I don't stay focused it will not only take longer but there's a higher chance of bugs. That being said, if I ever do finish the next order of business is a proper admin panel for the developers. MBM, Rhythm, and all the other admins should be able to make changes to robot or ability stats without me, for example, and they should be able to add new ones without my involvement either. The same is true for battle fields, items, and everything else. As soon as I implement a proper admin panel everything will change and updates will no longer be dependant on one person. I hope you'll all be patient with me until that time, and thank you for playing up until this point. :)