As usual, I'm posting here to show that I am, indeed, still alive. Also, I am posting because at the moment I am incredibly frustrated with ActionScript.
WARNING: Programmer rant ahead.
MR2 is in the testing and bug fixing part of production. The small group of people I have testing the game have been doing an excellent job breaking it and exposing all the bugs. 80% of the bugs are related to saving and loading data and I'm finding that these bugs are the hardest to catch.
Here's an example of an easy fix. Let's say that out of 10 testers, 5 find the same bug. I can compare their 5 game states, see what conditions they share, and from that I can deduce what the bug is. This is about a 2-3 hour process of coding and retesting. In the grand scheme of things, 3 hours is not a lot of time.
Now an example of a hard fix. Let's say that out of the same 10 testers, only 1 guy experienced a bug. With just one error log to work with, I have no point of comparison. Worst case scenario: he can't re-create the bug. I have to go over each of his save states until I find the one where the error appeared. This can take hours or days, depending on how obvious the problem is.
And it's not like I can write it off as a fluke. 1 out of 10 is still 10%. In the first game I wrote off the zombie hands bug. When people started complaining about it, I heard loud and clear. But try as I might, I could not figure out what was causing it. If I can't recreate the bug then I can't fix it. Simple as that. To this day that bug is still in there and people still email me about it. I don't know whether that's my failing as a programmer or just one of those annoying quirks of Flash. Either way, debugging sucks.
If you have read any articles on programming with SharedObjects please point me to them. I have spent hundreds of hours reading through forums and tutorials and found very few to be helpful.
It seems that the only thing people can agree upon is that SharedObjects are a clunky, ugly, unreliable way to save data. It's fine for simple games. A game with level select only needs to save the number of levels you've unlocked and maybe a rank/high score for each level. Examples of this are Super Meat Boy and most tower defense games. A game with progression (a.k.a. levelling) needs to save which skills you've unlocked/bought and how much experience/money you've earned. Examples of this are Toss the Turtle and Sonny.
Those examples I gave may over-simplify, but the point is that as long as you keep your data to a minimum, SharedObject works fine. If you all your tracking is a player's progress and unlocks, SharedObject works fine. Once you start allowing a player to customize, that's when the system starts breaking down.
To illustrate, MR1 saves the following info.
1. Equipment of each character
- Headgear
- Weapon 1
- Weapon 2
- Armor
2. Map Exploration
- 1 Boolean (true/false) for each of the 200+ rooms
- 1 Number of the room of last save location
3. Uncollected Items
- 1 Array (up to 3 items) for each room with a locker
4. Collected Items
- 1 Array for Headgear
- 1 Array for Weapons
- 1 Array for Armor
- Number of Flashbangs
- Number of Smoke Grenades
- Number of Medkits
- Saved PID Energy
5. Special events. 1 Boolean (true/false) for each:
- Savior Boss
- MAG Zombie Boss
- Tricky Boss
- Final Boss
For a flash game, that's a pretty long list of save data. The upside: I was able to make a game with exploration and character customization. According to emails and reviews, those were the two best aspects of the game. The downside: I tended to lose track of data. Even with a ton of error checks built into the program, sometimes I'd just miss things.
For example, the zombie hands bug happens when the game can't read your Weapon1 save data. It defaults to '0' which in the game engine is the number assigned to zombie hands. That's as far as I got on that bug. I don't know why it screwed up only Weapon1 and no other equipment. Suffice to say, the more complex you make a game, the more likely things will go wrong.
There are some very good, complex flash games out there with character stats, skill trees, inventory, randomly generated dungeons, etc. Of course most of them bypass the whole SharedObject issue by using a SQL database. I'd love to do the same but that requires you to use some site's API (ex:Mochi, ArmorGames) which IMO are poorly documented. I looked into the NG API but there's almost no info on that.
Bah. Grumble. Blargh. It's just frustrating all around.
So yeah, the final word is that MR2 is still alive, mostly done, but incredibly broken. Also, I want to announce that once the game is in a more stable state, I'll do some sort of closed beta test. I'll slowly filter people in from NG forums because honestly, I've been working on this game for so long I've lost perspective. I have no idea if the public will see it the same way I do.
Peace out,
- Revolverroach
P.S. Have you guys played Abobo's Big Adventure? That game took me on a trip down memory lane. Too bad the non-NES generation won't understand why that game is so awesome. Nostalgia is one of those things that you can't pass on.