Progress journal: a clear goal

My focus right now is on getting the script system implemented.  I just looked over the code, and I’ve got about 80% of script commands implemented.  That sounds pretty good, until you try to actually run something.  Then it becomes painfully clear that an 80% success rate is a 20% failure rate!  And with the number of scripts running in your typical RPG Maker project, each of them dozens or even hundreds of lines long, that can screw things up pretty quickly.

Of course, some script commands are more important than others.  Message Box is used all the time in pretty much every RPG Maker project ever, for example, but I think I’ve only ever seen Play Movie used once.  So if I’m going to work on getting things to work, I should probably prioritize by what’s most important to actual games.  And to do that… I’m playing an actual game.

I decided on The Frozen World, because it’s a fun, technically involved game that will give the engine a good workout, but it doesn’t use two features that will be very tricky to get right: the built-in menu system, and the built-in battle system.So I ran it through the importer, then tried to run the game… and it promptly crashed.  Turns out I missed a minor but important detail in the code that handles transitions from one map to another, and The Frozen World managed to trip over it at the very beginning of the game.  Fortunately, that was easy to fix.

It took me a couple days just to be able to finish the intro.  Animations wouldn’t play right.  Cutscenes would run all wrong, because of two separate issues in the Wait For Movement command.  The “then the Dark Wizard stopped Time itself” bit crashed, because the author used the Change TIleset command here–which was one of the things I had thought I’d never end up needing to implement–to replace the map’s tileset with one whose water tiles didn’t animate.  And so on.

I’ve been slogging through these issues one at a time, and each time, I had to go back and start over.  By the time I got it to where it would actually make it through the intro, I decided enough is enough, and wrote up some quick save/load code so I wouldn’t have to play my way back through everything every time I fixed a new bug.

So I had control of the hero Lutine. She’s supposed to save the world. She walks up the stairs, sees some birds frozen in flight… and is unable to continue any further, because she has to walk through the square that one of them is flying over, and despite its map object clearly having the “above hero” height set, the game engine is treating it as if it were on the same level as the hero, and thus impassable.

I fixed that, and next Lutine goes over, talks to a guy, then jumps down from the cliff she’s on to the ground below… and gets stuck partway down.  Turns out there were two different problems with the jumping code!

I fixed *that,* and made my way over to the cave, to walk inside.  Here’s the real fun part: inside is where we find the first monsters and get to fight them.  So I walk up to one… and the game crashes.  Turns out there’s a script on that map that runs very quickly, and will keep trying to run over and over and over forever.  And when the monster encounter had executed a teleport to the custom battle map, that script tried to run again, even though its map had been deleted out from under it.  Kaboom.

Then I had to fix two separate problems with the core of the script interpreter, which were causing the battle scripts to crash when they tried to run.  After that, I managed to get the custom battle system map to load, finally.  But I can’t use it yet, because I needed to equip “combat plates” using the custom menu system, which runs off a Common Event.  And I don’t quite have the code to run Common Events set up yet!

So that’s where things are so far.  80% sounds like a lot, but a lot of it still needs to be tested, and I’m sure to run into the missing 20% sometime soon…

Leave a Reply

You must be logged in to post a comment.