Jul 29 2009

Barnstormer– Postmortem

This is the postmortem or after-action review post for Barnstormer. (Postmortem being the game industry term, and After Action Review being the Army term for a discussion of what went right and wrong in a project you’ve just completed). The original version of this post was fairly formally constructed and went into great detail about how and what I did… but if you’re reading this you already know all the techniques I used and consider them basic, or you don’t really care and wouldn’t understand even if I went into detail. :)

I. Genesis

At the start of the Barnstormer project, I was semi-actively working on two games. A sheep herding game using Reiner’s Tileset , and an entry for Mochi’s WordPlay contest. Actually, the reason I was working on a sheep game at all is because I was getting fed up with my horrible programmer art for the word game. In the process of converting Reiner’s sprites to a useable format (his were originally designed for use with Clickteam’s Multimedia Fusion, while I wanted alpha channeled pngs), I got much better at using GiMP– or at least I started to understand better what I was doing.

This led me to want to create a ‘library’ of my own random sprites that I could draw on as placeholders. The first ones were the biplane and the geese. When I was playing around under the AlaskaGameworks label, I was producing far more art than actually made it into any game, and having some depth to draw on had been helpful. Of course, I lost all that in a hard drive crash right before I got interested in Flash again.

Right about this time, 8BitRocket ran a contest to identify various Atari 2600 games from the original manuals. I won by browsing through old manuals on AtariAge (hey, it was a resource linked in the contest itself!) and in the process read through the manual for Barnstorming, an Activision game by Steve Cartwright which I remembered.

Suddenly my placeholders were not just random pieces, but the start of a game. I did make a mistake here– I deliberately did not go back and play the 2600 game (I don’t think it would have been too hard to find a ROM), and I probably should have. In particular I wish I had incorporated some type of throttle mechanism, like Cartwright had…

II. Development
(I’m just going to go quickly over what went right and what went wrong)

RIGHT: Overall I was able to keep a simple/retro graphics style. This ended up apparently not being a turn off to most players, and kept the art for the game within my capabilities.

WRONG:I mucked up on the tree and billboard, they don’t really fit. The billboard is the only object on the screen which attempts to be drawn in perspective (several assets which I had drawn and cut from the game were like this as well) and should have just been facing the player. The tree is too textured compared to other collidable objects.

RIGHT: Textures however are not all bad, even in a game using mostly solid colors. One problem I identified early is that there’s no sense of movement if the ground is just one flat shade of green. In one of my dormant projects I animated a fire by randomly selecting form a tilesheet of fire still’s– and it worked well, there’s no obvious pattern to the animation so as a fire, it looks ok. (I do the same thing with the fire animation when the player crashes here too). Creating an infinite non-repeating texture is probably doable mathematically, but for the ground I defined my ground tiles as 64×64 and then opened a 640×64 png in GiMP. I then picked three shades of green and made one the base. Then I airbrushed the other two shades with a fairly light touch using a ‘galaxy’ brush.

The next step just involved cutting the tilesheet into 64×64 tiles and adding them randomly to an array on the ground which moves in response to the player’s x-axis speed as needed. (Although technically the player never moves in the x direction at all, the player’s x-speed affects almost every other object in the game). I think this worked pretty well. (The path works exactly the same way). (Although this description makes it sound easy, it took ME a really long time to get working)

RIGHT:I finally got looping music to work. Yay! I used a slightly modified version of the Advanced Seamless Looping method in this tutorial, not surprisingly by 8BitRocket. In the process I amazed myself– apparently I can hear a gap in loop of approximately 6 milliseconds.

WRONG:The day after I released the game I realized I forgot to add a happy/reward sound for when the player grabs a powerup. Oops!

WRONG:The plane should rotate around a point just aft of its lower wings, rather than around a point near the tip of it’s tail. If anyone should know better, I should! :) One newgrounds reviewer caught this. In defense, making an object rotate around a point other than the top left is really simple in the Flash IDE, but I don’t have Flash– I write in AS3 and compile with the FlexSDK. There is no way to change the registration point programmatically, and I spent an awful lot of time trying to get a method using transform matricies to work but hadn’t. By the time I was ready to release I had gotten used to this ‘feature’ and figured no one would notice. Oh well.

RIGHT:There are a number of small touches which seem to have worked well, ranging from the balloon floating upwards when a powerup is grabbed to the accelerationwhen diving and deceleration when climbing.

SORT OF WRONG:The controls aren’t the greatest. I personally like WASD, but couldn’t decide whether to use SW or AD… and I know that on non-US keyboards, WASD makes no logical sense. So I kind of threw a whole bunch of control choices at the player and then didn’t explain it well, figuring they could learn to fly quickly… playtesting by people other than me could have helped this.

SORT OF RIGHT and SORT OF WRONG:Although the player doesn’t explicitly see levels, there is a level system. (I called the variable which tracks it ‘pseudolevel’ and wish I had just called it level because pseudo isn’t as fast to type…). The level system determines when items are added, which star patterns are allowed, how many geese, what the spacing of everything is… I figured a person who had trouble flying would take longer to get the required number of stars to increase the level but wouldn’t feel bad about being stuck in a tutorial level. Unfortunately, although I did a lot of playtesting myself I didn’t do a beta with other people playtesting. As a result, the difficulty ramp suits almost no-one, with experienced game players getting bored before interesting stuff like barns get added, and inexperienced players not reaching the interesting content either because they die! (Experienced/Inexperienced here is a rough generalization which I know is inaccurate but which I don’t have a better word for). Further, the type of audience mattered… which I’ll discuss in the post-release section below.

RIGHT:Almost forgot this, but I like my clouds… They move independently of the player’s speed (and as a result, I made the powerup balloon move independantly of the player’s speed which was probably a mistake but doesn’t seem to be a huge one) and are just kind of off in the distance. You can thank the story of Howard Hughes reshooting at huge expense an airplane scene in a movie because clouds made the scene more interesting (roughly) for that one. (I had semi-recently read a biography of Hughes.)

For those wondering Barnstormer has:
68 image assets (.png files… some of which have more than one image)
11 mp3 files
21 Classes (a programming structure)
4,143 lines of code, not counting third party API code (to get this number I added up the last line number of each .as file. So some of those lines are blank or only have a single } in them) :)

III. Adding the Whirled API/Release conditions

By the time I considered the game done, I had probably put 90-100 hours into the game in one way or another. (If you’re checking the dates on some of this, then yes it basically consumed all my time which I was not actually at work or asleep). I was pretty proud of the game and uploaded it to FlashGameLicense… while waiting for sponsor viewing approval I got introduced to Whirled.

Whirled is a game platform run by ThreeRings, of PuzzlePirates fame. Although I had seen their adverts directed at developers before, they launched (if I remember correctly) just after I had basically lost interest in AlaskaGameworks so this is the first time I gave their API any real consideration. It didn’t _look_ too hard to implement…

They’re absolutely right when they say it takes about 15 minutes to port over your game to their API following their directions… IF you don’t have anything on stage outside your gameplay area, you don’t need the keyboard for control, and all you want to do is issue coins when the game is over. Getting it to work smoothly took another 10 hours or so spread over four days and already has sparked two posts on this blog.* I even had that version scraping the player’s Whirled username and using that as a username when submitting to Mochi’s scoreboards! I kind of like that touch, considering that Whirled doesn’t offer a leaderboard style API– but it required discovering an undocumented (as far as I know) disconnect() method in the MochiScores API. (Mochi’s documentation is generally great btw– the disconnect is required on unload from Whirled because unlike a normal deployment Unload doesn’t happen at the same time as the player closing. Except for Whirled this is a situation that just doesn’t happen. Whirled’s API docs are worse than MSDN!)

I had gotten a little busier at my real job, so by the time the Whirled version was complete, Barnstormer had been on FlashGameLicense for about a week and despite bumping it a few times with updates, wasn’t accruing more views. I was proud of the game, I was sick of the game.. figuring it wouldn’t get sponsored I decided it was time to release. I had by this time, bought 5 first impressions on FGL and while the feedback wasn’t particularly detailed but led me to believe that the game was at least competently executed and that there weren’t any lurking major flaws.

IV. Initial Release

I kept sort of a running log during the release. All times are Alaska Daylight Savings time. All mentioned sites use a x/5 scoring system.

12:20 PM- Game withdrawn from bidding on FlashGameLicense.
12:24 PM- published on Newgrounds, Kongregate, Whirled. Submitted to Mochi and FGD for distribution
12:45 PM- Game actually published on Whirled because game does not enter a published state until it’s logged issuing coins. Had I not played the game myself to try to figure out what’s wrong, it would still be hidden.
1:29 PM- Game comes out of probation on Newgrouns. Score is 3.21. Comments are pretty bad…
5:30 PM- Score on Newgrounds is 3.06. Game is getting only positive comments on Kongregate though.
8:02 PM- Mochiads approves distribution
9:29 PM- Game comes out of probation on Kongregate, score 2.38. WTF?

02:30AM- Barnstormer has more plays than Sequence! :) I go to bed.
10:00AM- Barnstormer is featured on Whirled.

02:27AM- FGD approves distribution
AM – Initial release spike is over

It’s far too early to tell how many plays Barnstormer is going to get on a daily basis over the long run, and there certainly still is the potential for a spike or too if it finds its way onto a niche website whose viewers like the game. But there’s enough to talk about anyways.

Specific audience reactions:

Okay, looking at the Newgrounds reviews, 5 of the first 6 were negative. One claimed the game had popup ads, which of course it doesn’t and one just said ‘Blam this’ which is Newgroundese for “give it a score of 0 and get it removed from the site”. That review was removed. For the record, those were the only two which I marked as ‘unhelpful’. I wish I could say that the Newground reviewers were completely wrong.. but they weren’t. One called the graphics MS Paint graphics, and the game “absolutely non creative”. I disagree about the latter part, but it’s true the graphics were fairly simple and not every player will accept this style. Two found the game too simple, one wanted there to be barns (of course there are, but apparently he didn’t get to them). After that first slug of bad reviews, people who left comments were generally positive. But it sure was scary for a while watching that score fall before coming back up to eventually settle at 3.11.

Kongregate(scroll down for the comments) confused me. Kongregate’s audience is notorious for giving useless comments, but for the most part the commentary while not critiques of the game reflected people having fun and happy to be on top of the high score list. Since coming off probation the score has risen slightly, but the initial score of 2.38 suggested the game was on par with the games it was released next to– Clickyworld 3 and the indescribable It’s a pie! Although these games are certainly average examples of what 8BitRocket has taken to calling Flash Games as opposed to Games made in Flash, I was a little disheartened by the score there after being led to believe my game was doing well.

Whirled’s reaction was like Kongregate’s positive. Unlike Kongregate they voted consistent with the comments and rated the game 4/5 as well :) Whirled however has a much smaller userbase than the other two sites. They claim about 10,000 users per day, but for the most part I (now) believe that it’s the same 10,000 users each day where as the 100k or so who go to Newgrounds or Kongregate have a much higher turnover rate. This means that despite being featured on the front games page for two days in a row most of the people there who were likely to play the game did the first day it was available, (and despite still being featured, on day 3 views dropped to about half of day 2). The other interesting thing is that Whirled users appeared to be -better- at the game than global users. Mochiads unfortunately flushed all of their leaderboards recently, but on the first day of release the bottom scores on the daily list for the normal version was around 6 thousand, while the bottom scores on Whirled were around 12k. This is particularly important because the barns don’t start appearing until the player has captured (let me look it up) … 91 stars, which requires scoring 7-9k points (Star point value is variable by speed). So while most of the players globally were not getting to the ‘interesting content’, the Whirled players were. It’s not surprising they liked the game better.

But why were these players doing better?

My hypothesis right now is that Whirled players, having many fewer games to choose from tend to give a game more of a chance. This needs to be tested more thoroughly, but on three days of mochibot data, Barnstormer was loaded (all sites) 4,801 times and the new game button was clicked 5,869 times. Of these, 2,558 of the new game clicks were on Whirled, which also had 1,880 of the loads. To put this in perspective, with the understanding that at least some of the load/new game pairs were repeats from both sources, 36% of Whirled players clicked ‘New Game’ more than once, whilst only 13% of normal players did. Whirled players did better because they had more practice. (Note that Mochi’s leaderboard system replaces people’s score on the leaderboard with the highest score that person has achieved. I don’t know what the average Whirled player got on his first playthrough.)

One thing I’d really like to know is whether my game is sitting in a featured slot that was set by a human, or if it’s in a slot reserved for the newest game, or newest game to get rated higher than x.yy, or ???

V. Critical Reception

The game was only reviewed by Flash industry professionals in two places, only one of which is public.

8BitRocket reviewed the game as part of it’s Mochi Game Review Mash-up: Monday July 27,2009. Quoting their review: “A little conflict of interest here as the author has used some of our free music samples in the game. Barnstormer is a well made retro style scrolling game. It could use a little polish in places, but it certainly is fun to play and a lot of time was put into the game elements.” They rated the game a B on an A-F grading scale which I think is fair, and I also think represents an improvement over my efforts to date.

Yesterday, FlashGameLicense made available to developers the Editor Score which they assign to all games submitted to them for sponsor viewing. (I had actually been unaware they were scoring at all) Barnstormer got a 7/10 there. For comparison, Square Shooter had been rated a 5, and DayTrader a 6.

VI. Last Thoughts

I never expected players to not last long enough to get to the barns. This makes it obvious that I need external (ie: not just me) playtesting on future releases. That’s unfortunate because short of buying first impressions on FGL I really don’t have a pool of gamers I can tap into.

Whirled is an interesting platform and I have sketched out a project using their multiplayer API that could be interesting. Interfacing your game with their API however, in a way that actually uses the community features they have requires more than a little work, and probably the games that fit best there are games that were designed from the beginning to be played on Whirled.

Simple/Retro graphics are okay, and within my abilities.

That’s about it. Most recently, as I’ve been waiting for statistics to come in I’ve been playing QBeeZ and RambleScramble on Whirled. I still have the sheep herding game and WordPlay entry to write. And five or six more game sketches in my design notebook that need some attention.. Any comments or questions welcome!


*- Yes, I have read Greg McClanahan’s Fatal Flaws in Flash Game Design and Development. This post will presumably be read at some point by several people I know personally who are not involved in games or game development and have no idea how long it takes to produce a game. I’m not suggesting that I expected compensation equivalent to two work weeks, or that the game is representative of what a gaming professional would produce in the same amount of time.

No Comments

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment