Apr 20, 2009—
I have always loved strategy games of all types. Unfortunately, I find most computer strategy games to be very long and involved and difficult to sit down and play in one sitting. Board games are great, but finding enough players is always a challenge. I’ve noticed a distinct lack of good, short, turn-based strategy games for the computer — most of them seem to be cheaply made knock-offs of table top board games.
There are a few exceptions to this. One of them is a very old, very obscure game that I had as a kid and missed playing. Constellation is a game that I wrote for myself because I wanted to play that game again. That other people have enjoyed it, and that it has won second place in the uDevGames 2008 Contest is icing on the cake.
The idea for Constellation goes back a long way, all the way back to the early 1980’s. My family had an Apple IIe. Like any young boy, I liked to play games on it. My favorite were strategy games. A good friend of mine gave me a game for my birthday called Fortress. It says the game was published in 1983. (I would have been seven.) The game itself was very simple. It was probably inspired by Go although I had never played Go at the time so I didn’t know that. It was played on a green chessboard where two players would take turns placing black or white fortresses on the board. Each turn you could either place a new fortress, or make one bigger. The fortresses influenced the squares top, bottom left and right of themselves. If you had more influence than your opponent, it placed a little black or white flag in the square to show that you controlled it. Sound familiar?
I liked this game very much. It wasn’t fancy, but it was fun, quick, and made me think. I have been playing games for a long time, and I find that the games I remember the most are not the fancy ones. Graphics and sound date very quickly. The games I remember best are those that were original and had good gameplay — this game had that.
I have thought about this game off and on over the years. I missed playing it, and had thought from time to time that it was so simple, I should just write it myself. Although I have a double major in Computer Science and Theatre, after graduating College I got into creating motion graphics and effects for television and let my coding skills lapse. That, combined with a lack of motivation, just left it on the back shelf of my mind.
A few years ago I got a job as a graphics and animation designer for my present employer Monadnock Media, a company that specializes in creating multimedia for museums. I wasn’t originally hired to do any programming, but I was asked if I could update a museum program that a contractor had made in Macromedia Director. I immediately took to the software. Its interface was similar to Adobe After Effects, my motion graphics weapon of choice, and it struck a good balance between my motion graphics skills, and my rusty coding experience. Over the past couple years I have created several increasingly complex interactive museum installations with the software and really like it.
I have enjoyed playing entries in the uDevGames contest in past years. I was delighted to see that the contest was being held again. It struck me that this game that has been in my head for 25 years would be perfect for the contest. It was time to put my newfound Director skills to use.
So I had an idea for a game, and I knew it to be a good one because I remembered the game for so long. I don’t like copying things though. If I was going to write the game, I was going to change it in some way. Make it better. I am a big fan of multiplayer tile based board games like Settlers of Catan and Carcassonne. I find these games to be much more replayable than standard board games because the board is different every time.
I decided that the thing I liked about Fortress was the basic mechanic, and the thing that could stand to be improved was the board. I experimented with hex based grids, and different terrain types. The problem was, most of my ideas using those systems ended up destroying the simple mechanics that I liked so much about Fortress. The solution came to me one day during a game of Star Chamber. Oh — I haven’t mentioned Star Chamber yet.
Star Chamber is another obscure game, but a contemporary one. It is my number one example of what a good, short, turn based strategy game for the computer should be like. It was created by a brilliant indie developer, then bought and neglected by Sony. You can no longer officially download the Mac client for this game, but I host it on my website. Star Chamber is a space based game with a map made of planets connected by jump lanes. Here is a picture of a typical Star Chamber Map:
It occurred to me that this solved my problem. I had been thinking grids and terrain. I needed to ditch the grid and connect the planets to an arbitrary number of neighbors. By doing this I could create amazingly varied maps without lots of different terrain types. Suddenly it became a space based game and Constellation was born, although it wasn’t called Constellation at this point. My initial working title was “Space Conquest”. I wasn’t happy with it — too clinical and descriptive. I just couldn’t think of anything better.
The first code I wrote was the random map generator. It basically works by placing planets in random locations on the board. If a planet would be randomly placed too near to any neighbor, it regenerates the random number and tries again (being slightly less picky about distance each time its regenerated to prevent infinite loops). After all the planets are in place, it then connects them to their neighbors based on distance. There is probably a more efficient way to create a random map of lines and planets, but I couldn’t think of one at the time, and I’m not sure it would give it the same look, and I like the look. I was immediately struck by the patterns that the planets made. I found them oddly beautiful. They reminded me of Constellations. Thus the name and the antique nautical look were born.
I created the artwork for Constellation from content from a variety of web sources using a combination of “Adobe Photoshop”:"http://www.adobe.com/products/photoshop/ and After Effects. This was a mistake. I should have used After Effects for all of them. For people who don’t know what After Effects is, it is one of the leading programs for video/animation compositing and motion graphics. It is the piece of software that I use most at work, and although it was designed primarily for motion graphics, I have started to prefer it to Photoshop for editing stills.
The key reason I like using After Effects rather than Photoshop for creating still images is that nothing you do in After Effects alters your source material in any way. You can scale an image up and down to your heart’s content, apply any of a vast number of effects (similar to photoshop filters), turn them on and off, adjust them, tweek settings. About the only thing that After Effects can’t do as well or better than Photoshop is anything involving paint tools, and it’s slowly getting the ability to do that.
A practical example of this, is that I have received notes from several people who feel that the planet sizes in Constellation are too similar. They have a hard time telling them apart. Because I created all my planet and ring graphics in Photoshop, it is very hard for me to go back and adjust the scale on these and make the larger planets a little larger without muddying the image. I would have to recreate them from my source imagery. If I had created my planet graphics in After Effects, they would all be generated directly from the source file, and I would just have to tweak a scale setting a little larger and save out new images. When I get a chance, I plan to go back and redo the planet/ring graphics in After Effects to be more visible.
Here is a typical After Effects workspace showing the background for my splash screen:
The artwork for Constellation was created using images from the following sites:
http://www.cgtextures.com/ – This is the best site for free textures that I know of. Not only does it have textures, it also has a variety of photographs of various physical control panels and buttons. My buttons come from here.
http://www.sxc.hu/ – This is a great site for free stock photographs.
http://www.nasa.gov/ – Any images from NASA or any other government agency are not subject to copyright. This makes NASA a great source for free imagery for a space themed game.
http://memory.loc.gov/ammem/gmdhtml/gmdhome.html – The Library of Congress website is another great place to go for free imagery. The constellation graphic on my splash screen comes from an old map that I found in their map archives.
Constellation was authored using Director which was once a well known and well used piece of software, but was severely neglected by Macromedia in favor of its lesser cousin Flash and thus has fallen into relative obscurity in recent years. This is sad as Director is much more powerful than Flash, can publish stand alone applications, and is extendable via 3rd party plug-ins (many of which are free) written in C++. For a while, web based 3D was the domain of Director but now, with the advent of Unity, a lot of Director developers have jumped ship. Consensus among Shockwave 3D developers is that Director is easier to use and has a broader list of features, but Unity has a much more modern powerful 3D engine.
All this might be discouraging to a potential Director developer but there is still a lot to recommend about Director. After years of neglect by Macromedia, Adobe seems committed to updating and modernizing the software. I am hoping that it will make a comeback. I don’t mind sticking with things that I consider to be great even if they are currently underdogs. After all, if Apple and my beloved Boston Red Sox can make comebacks why not Director?
The biggest thing I like about Director is that I found it very easy to learn. I learn things best by diving in and doing them, rather than reading about them first. There is a large library of pre-built behavior scripts that come with Director. If you want, you can create a Director application without writing a single line of code simply by applying these behaviors to sprites that you place on stage. Unfortunately, these behaviors rarely do exactly what I would like them to. The nice thing about them though is that they are often close. I learned Lingo (Director’s primary programming language) by looking at and modifying these scripts so that they worked how I wanted them to. Because Director has been around for so long, there are also a lot of Lingo scripts online to learn from and modify.
I consider myself a professional motion graphics artist, and a casual programmer. I enjoy programming, but don’t have time to learn and deal with the complexities of C++ and memory management. Because the games that I enjoy playing and writing don’t require bleeding edge 3D graphics, I find Director works very well for me.
Other things I like about Director:
- Like Flash, Director is timeline based. I come from a motion graphics/animation background and think visually. I like being able to lay sprites out on the canvas of my screen and apply behaviors to them, and organize them on a timeline.
- It’s very easy to publish cross platform applications with Director. Just check the “Windows Projector” checkbox when you publish. Thats all there is to it.
- It’s very easy to embed high quality video formats in Director. This isn’t so useful for most computer games, but I use it in museum interactives all the time.
- If there is something you can’t do with the stock version of Director, you can usually find a plug-in that will do it. If you have C++ skills you can write a plug-in for it.
- The Director development layout. Notice its similarity to After Effects’ layout:
- Director’s Script Editor:
What Went Right
Because of the simplicity of the game, I was able to get a playable prototype done and out to testers very quickly. I got a lot of great feedback from people on the iDevGames forum as well as the Starchamber and Director forums. This gave me a lot of time to polish and improve the game based on tester comments.
One thing that was very important to testers was wanting a tutorial rather than just a rules page. I hadn’t originally thought this was necessary due to the simplicity of the game, but due to numerous requests I decided I should make one. Having played some of the other games in the contest, I realize its importance all the more. Many of the other entries suffered from a lack of good instructions. It’s easy when you are writing a game to think gameplay is obvious, but the ease with which one learns the rules of the game can make a big difference when it comes to first impressions. Whether the person sticks with the game or throws it in the trash can depend on this.
One thing I had been dreading, programming an AI, turned out to be relatively easy and enjoyable. I got some good advice as to game strategies from playtesters, and because the game is so quick, I was able to hone the AI to the point where it can be pretty difficult to beat. One thing that helped me was the ability to play AI only games and pit one version of an AI against another. These games go quickly and really helped me fine tune the AI. The first AI that I programmed was the Stupid Robot which plays randomly on any safe space. Next, I created an AI that assigned scores to various planets based on a weighted formula that took into account a number of factors. By pitting it against three stupid AIs, and tweaking the weights until it could win consistently I was able to get the medium AI. Tuning the formula was very important. My early iterations lost consistently to the stupid AIs! After playing the game longer, and receiving feedback from playtesters, I was able to identify a number of new factors to consider when choosing planets. By adding these new factors into the formula, and tweaking the weights so that it could consistently beat three Medium AIs, I arrived at the current Smart Robot.
What Went Wrong
Most of what went wrong had to do with the self taught nature of my Director knowledge. I would sometimes do things the hard way and later discover that there was a much easier way to have done them. I really wish I had understood property description lists when I started writing Constellation. It would have made passing variables between functions a whole lot easier.
I also had some bits of code that seemed simple, but continually caused me problems. One of these was the victory condition code. It doesn’t seem like that bit of logic would be that hard to code, but for whatever reason I keep having to readdress it. The big problem was that the loophole in my logic was so intermittent that it took a long time for it to happen to me. I would think I had fixed things, then another tester would report a faulty victory and I would groan inwardly. It took having the bug happen to me, taking a screenshot, and stepping through the logic of the code to figure out where it was going wrong.
One other thing I learned was not to try to add new features right before a deadline. From early on in the game I had planned a feature where in a multiplayer game, opponents would add their influence to contest a planet. I had the feature as an “under construction” option in the game so I felt obligated to try to finish it. I didn’t have time to get it working right and had to remove it. In the processs of trying to get it to work though, I messed up some code in the Medium AI. None of my testers noticed that the medium AI was messed up because they had all long since graduated to the smart AI. Unfortunately, the Medium AI is the default. It wasn’t until I got my reviews that I discovered something was wrong with it.
I really enjoyed this contest a lot. Constellation is a promising game and there are lots of places I plan to improve on it. I doubt I would have ever started it without the motivation of the uDevGames contest. I am thrilled that people have enjoyed it, and that I managed to achieve second place out of 20 very good games. Now that the ball is rolling I am pumped to continue it and turn Constellation into an indie shareware game. Planned features include special planets, custom map creation, and networked multiplayer play with a ranked leaderboard. I am also looking in to porting Constellation to the iPhone, although that will probably take longer as Director doesn’t publish iPhone apps. It would make a great iPhone game though. I look forward to getting my iPod Touch prize so I can try my hand at iPhone development.