Over the past few years I haven’t been able to do much programming, but I did cobble together a new entry in the Dungeon Monkey series, Dungeon Monkey Eternal. It’s a fun tactics RPG which is played in short coffeebreaklike adventures. This was my first major project in Python, and a big motivation behind its development was to test some of the systems I plan to use in the next GearHead. Here are some of the things I’ve learned.
Know where you’re going
I dove into the development of both GearHead-1 and GearHead-2 without any clear plan. I knew that I wanted to make a mecha RPG set in a sandbox world, but I didn’t have a clear picture of what the completed state of the game would be. Instead I just kept building and building, occasionally painting myself into a corner.
With Dungeon Monkey Eternal, on the other hand, I decided what features the final game would have before I started coding. Although these plans changed several times throughout development, simply having an end state to work towards was a big help. I could anticipate the effects of things that were not finished yet. This brings me to the next point…
Finish one thing before moving on to the next
Make sure that a newly added thing works well before charging ahead and adding more stuff. A lot of GearHead’s features were added with the expectation that I’d go back and improve them later… then I never did because I kept jumping ahead to the exciting bits. It’s best to get things working well the first time. Then you can relax and forget about them, at least until conflicts with another feature start causing problems…
A little bit of beautification can go a long way
Graphics is one of those not-so-fun things I kept putting off. I kept telling myself that making GearHead look good would take too much work, or that I wasn’t very good at graphics (despite the fact that by day I’m a cartoonist; young Joe was a contradictory guy). Well, I’m happy to announce that you don’t need a million hours (or dollars) to make a game look presentable. Just a little effort can make a big difference to a game’s appearance.
Compare the two GearHead examples above to the Dungeon Monkey Eternal examples below.
It didn’t take very long to add a border and textured background to the Dungeon Monkey Eternal panels, but it looks far nicer than simply dropping a colored rectangle on the screen. The same goes for making sure that the size of the panel matches the content that will be placed in it. Next look at the use of terrain:
There are several different versions of each ground type and the forest tile. This breaks up the shapes and stops those areas from having an obviously repeating pattern. There is a transition between the grass and the dirt, unlike the abrupt change seen in GearHead. The walls have been decorated so you can tell at a glance which building is the library and which is the armor store. None of these features are particularly hard to implement, but they make the map look much better.
Better AI beats bigger baddies
All NPCs in GearHead use the same combat AI, and consequently they are all relatively predictable. Dungeon Monkey Eternal uses several different AI types. Individually they are still rather stupid, but the presence of types means that the player has to be ready to use different tactics.
Good AI can make a monster more dangerous than simply increasing its level or abilities. An archer who attacks at range but doesn’t flee from the player characters is kind of dangerous. An archer who attempts to stay away from the party while still maintaining line of sight is more dangerous. An archer who stays away from the party, maintaining line of sight while hiding behind cover, who specifically targets the party’s mage or other vulnerable characters, is super dangerous.
Procedurally generated text is what is good in life
Currently, the way personality traits are handled in GH1 is that for any dialogue line that should be variable, there’s a list of alternate versions corresponding to different personality traits. So for instance, the same greeting should have a default version, a shy version, a sociable version, a cheerful version, yadda yadda yadda. Writing multiple versions of every line of dialogue is extremely labor intensive, and it ignores the fact that most NPCs will have more than one personality trait.
Dungeon Monkey Eternal makes good use of procedurally generated text. Several techniques are combined: a context free grammar expander is used to expand tokens into sentences, then a phrase substitution function swaps words based on the character’s dialect. This happens for both the PCs and NPCs. Dwarves talk like dwarves, orcs talk like orcs, and fuzzies talk in LOLspeak. It works pretty well.
This technique could probably be implemented in GH1. It would require reworking much of the existing dialogue to add tokens, but even that would be less work than trying to fill out all personality trait variations in the old system.
Make the information easy to get
One of the big problems with GearHead is that a lot of information is effectively hidden from the player. More information needs to be visible, and just as importantly the ways this information can be used should be more obvious.
Terrainwise I like the griddy look of GH; it feels Mecha-ish.
Direction is pretty important in GH, being able to tell which direction the unit is facing is very helpful. I don’t see that in ME. Though, in GH, Sometimes it’s hard to tell for some units like monster-drone from the graphics and the radar is not showing up because there are multiple objects in the grid.
The cog-ish background of this homepage would be a nice addition to the game, somewhere. I like your sense as a cartoonist, especially the mole.
Yeah! Distinctive shop walls would be great.
When 1 hit from a rocket pod the I have been dodging easily takes out my well engineered mecha, I’d like to know why. In GH2 you can see the rolls. Well, it only adds to the disbelief at the rolls but at least you know what happened. I really liked the verbose combat messages from the old Fallout 1. Is it possible or feasible to use the Procedural Generated texts for combat messages?