January 10, 2009

Meridian Retrospective

Today, after a four-month development span, Meridian was finally finished.

I wrote previously about its conception and evolution
, but there's still room for the typical postmortem analysis.

It was my first project using XNA and C#, and I loved them both. Partially it's just that I'm a fan of Visual Studio C# Express, but really, everything was so easy. Once you spend an hour or two learning the basic setup, all there is to do is implement game logic, i.e. the fun part. I decided to add sound very late in the project, and XNA made it very easy. A++ would program again.

The art in Meridian was a huge step up from that in Asp. That's mostly because I didn't draw anything from scratch (except for the gates-- the worst sprite in the game by a long shot). For the backgrounds, I did what I usually do: find a cool image (thanks NASA!) and then play around with the filters in the GIMP until it looks cool. Those who know the program will note the use of the Waves and Starburst filters all over the place. For the fleet images, I found a free 3D model of a spaceship, loaded it up in Milkshape 3D, and took a screenshot of it. I also took a couple of perspective shots for use in the victory and defeat screens, which I think turned out very nicely.

I still had a single huge code file (over 3500 lines), but I used Visual Studio's #region tag to make it nice and collapsable throughout, so it never really hindered me. My commenting practices were as nice as they've ever been, and I never made any huge programming snafus that I know of.

But of course, it's design that really counts. The high-level design of Meridian changed very little. That is, I stuck to the original vision. But I had to make a lot of small rule changes in order to make that vision work.

One nice thing about Meridian is that the game states are very distinct in comparison to those in Asp. This meant that there were very few situations in which the game wasn't playing as I intended it to. One consequence of that, of course, is that the flaws in the gameplay are completely my fault. I can't blame this one on technical problems or anything like that.

The biggest problem that Meridian has is that the AI is forced to stay limited. I added boosts to break the inevitable stalemate of both sides avoiding each other. For that to work, the AI can't take boosts into account when considering which hexes are safe from attack, lest we run into the exact same problem as before. So they totally ignore defence from boosts, and suffer for it. The AI is also very vulnerable to the poisoned pawn strategy; it will take whatever it can get.

That's the primary reason I decided to include difficulty levels. I knew that once the player solved the AI puzzle, they'd have to start with a disadvantage to have an engaging experience. I know that Dice Wars is fun even after the player has solved it, and Meridian also uses randomness to provide basic variety, so I have hope that the game can stay fun.

Lastly, I'm very happy with the saving system I used. Because the game employs randomness, players might be tempted to revert back to an old save in order to get good outcomes on every chance they take. To ameliorate this problem, I only allowed one save, and the save updated after each turn and each time the player exited the game. This has the disadvantage of only allowing a single game to be active at any time, but I consider that acceptable in a game of this scope.

No comments: