Fixing up plots


This week I’ve been updating some of the plots from the early days of GearHead development. Many of them have serious problems- they don’t scale difficulty to renown properly, lack email or memos, and deal poorly when the player character goes off-script. The easiest way to update missions, or at least the way that will probably introduce the fewest new bugs, is to simply copy over the dialogue text from the old plot into an up-to-date plot template.

Unfortunately, not all plots are simple missions. The “BusinessDeal” plot is a mess, and I’m not sure that I’ve ever encountered it while playing. Similarly, the kidnapping story is riddled with bugs and I’m not sure there’s any good way to set it right. I may end up disabling some of these plots until such a time as they can be rewritten.

The picture above is from the story Hey Greenbot! in Alien Lives. If you’d like to help me out as I prepare to finish my graduate studies, it’s available at the Polar Bear Comix webstore in cbz format.

Bear Bastard and other good things


I’ve been waiting a long time for this arse to make his appearance.

The latest GitHub commit fixes a number of bugs and adds two new lancemates. I hope to make a proper release before I head to San Francisco next week, but not tonight because this stuff has just barely been tested.

GearHead Caramel Engine Installed


I’ve made a new commit to GearHead Caramel; the low level UI stuff from Dungeon Monkey Eternal has been added as the engine module. The screen is dynamically resizable, just like in the current version of GearHead-1.

The next step will be the scenes module.

There still isn’t much to get excited about, but I figured this might be useful to anyone who wants to write their own isometric RPG with Pygame.

Divisions of Aegis Foreign Service

aegis_space_forceThough every Aegis citizen would agree that Luna is the pinnacle of human civilization, there are always a few brave or misguided souls who long for exploration and adventure.

Aegis Space Force

The ASF operates primarily in the L5 Region. Their primary stated mission is to defend the Lunar trade fleet from pirates and hostile nations. Their secondary stated mission is to build goodwill with the people of L5 through closer cultural and defense ties.

Most members of the Space Force are true believers in the Aegis cause. They signed up to protect their fellow space colonists and to spread the gospel of peace through unity. To qualify for the Space Force you must be diligent, highly skilled, and ideologically pure. Very few candidates meet these criteria.

Of course, diplomacy and defense are hardly the only missions Aegis Overlord has for the Space Force. By aligning them with the Rishiri Dominion, Aegis has leverage to affect politics in L5. In the event of a war with Earth it will be very useful to have allies and a large navy already stationed in deep orbit. Plus, there are the mineral resources of the Dusty Ring, which Luna needs to continue its expansion.

As foreign service goes, membership in the Space Force is pretty sweet. The spinner colonies are relatively safe and have most of the same amenities as Lunar domes. In many parts of L5, Lunars are regarded positively or at least not negatively. The same can’t be said for the…

Aegis Expeditionary Force

The AEF is the Aegis mission to Earth. Most of its members fall into one of two categories: travel-hungry adventurers who didn’t qualify for the Space Force, and unstable military officers too useful to dispose of but too dangerous to keep on Luna.

The Expeditionary Force has many different missions: reconnaisance, harassing the Federation Defense Force, searching for lost technology, keeping the base commander entertained… and they have to do all of this under conditions more severe than anything the Space Force ever has to deal with. To most Lunars, modern day Earth is a hellish place. The gravity is stronger than they’re used to. The living facilities are primitive and uncomfortable. There are insects and even worse sorts of wildlife. Even in those areas which maintain diplomatic ties to Aegis, Lunars are viewed with distrust.

One of the worst duties of the Expeditionary Force is collecting gene samples for Luna’s bioweapon program. To do this soldiers have to confront some of Earth’s most dangerous creatures. Even worse, they are sometimes ordered to bring in their targets alive.

Unlike the Space Force, which gets most of their equipment from back home, the Expeditionary Force relies heavily upon locally constructed mecha. Common trooper models include the Buru Buru, Ice Wind, and Vadel. These are generally obtained from allies or the black market, but certain undersupplied units aren’t above including battlefield salvage in their rank and file. Native Lunar mecha such as the Chameleon and Luna-II are reserved for commanders and elites.

Membership in the Expeditionary Force isn’t without its perks. Pay is nearly the higest of any Aegis division, even though the troops rarely get a chance to spend it while on Earth. Being so far from Luna means that commanders can operate without political interference. Unfortunately for the troops, it also means that commanders can operate without any oversight whatsoever. The greatest perk a member of the Expeditionary Force can earn is to be transferred back to the Lunar Defense Force. This is generally the reward offered for taking part in a suicide mission, and there’s never a shortage of volunteers.

Expanding the Blueprints


Hogye in GearHead Arena-R; the road south leads to Snake Lake. The full map is 600 tiles x 600 tiles, constructed from four hundred 30×30 scenes.

Engine or Game?

One of the eternal debates in amateur gamedev is the distinction between a game and an engine. After making RPGs for twenty years, I’ve come to the conclusion that I do have an engine, it’s just not very engine-y.

If you take a look through every game I’ve ever made, you’ll find that I tend to use a lot of the same code. The menu system for Dungeon Monkey Eternal, written in Python, is a port of the menu system used in GearHead, which was taken from DeadCold, which was a Pascal translation of the menu system for the unreleased game Age of Adventure, which itself was a translation of the menu system I made for Realm of Sendai, and that’s as far back as I can remember.

Similarly, the main game loop of GearHead and the event processor are pretty similar to the game loops and event processors of all those other games. If it ain’t broke don’t fix it.

When taking parts from Dungeon Monkey Eternal, I’m going to organize them into proper Python modules, which basically just means throwing the related units into a folder so you don’t have ten thousand script files cluttering up the main directory.

Improved Map Handling

I want the map handler for the next GearHead to do a couple of things that Dungeon Monkey Eternal doesn’t do. First off, I want seamlessly scrolling endless maps, as in GearHead Arena-R (the abandoned attempt to recreate Arena with Lua scripting, aka the GearHead we shall never speak of again). This should be easier to do in Python than it was in Pascal; the “endless” map just needs redefined lookup methods that retrieve tiles and things from the constituent scenes.

The second improvement is that I want sub-tile placement of sprites. In every isometric game that I’ve done before, sprites can only be placed exactly in the center of a tile. This is most obvious when watching missiles skip jaggedly across the battlefield. For the new GearHead, I want to smooth out the missile trajectories and maybe even show the motion when a character/mecha moves from one tile to another.

Building a New Foundation

A bare-bones isometric map display working in Pyglet.

A bare-bones isometric map display working in Pyglet.

I’ve just submitted my final thesis packet, and have a few weeks to breathe before heading to San Francisco in July for the last part of my MFA program. So, obviously, I’ve been thinking about the new GearHead game. Most of the parts are going to be taken from Dungeon Monkey Eternal, plus some improvements since I know Python far better now than when I started three years ago.

Choosing a Graphics Package

The first big decision will be to choose a graphics package. DME uses PyGame, which I like. It’s based on SDL 1.2, the same graphics library as just about every other game I’ve ever made. It’s fast enough to draw a not-highly-optimized fullscreen isometric map at over 30 fps on my laptop, which IMO is fast enough for a game of this type. However, it does have limitations. It doesn’t play well with multi-monitor setups and certain operating systems. It doesn’t come with many bells and whistles; things like text formatting and widgets need to be built from scratch. So, I’m considering my options.

One option is Pyglet, which is based on OpenGL. Because of this it should be faster than PyGame; instead of the Python interpreter redrawing the screen manually, the instructions get sent to the graphics card which then handles the heavy lifting. It also comes with html text formatting and a text input widget built in. On the down side, it is an event-driven system, which means that I’d have to learn how that works and modify the game logic accordingly. You know, I’ve been using basically the same input-handling loop structure since the 90s and I’ve become quite fond of it.

Another option is Kivy, a full featured widget system. This one has several big advantages- first, I could use a whole toolkit of UI elements and even create my own. Second, it has utilities to compile distribution packages for Windows, Android, and other systems. On the minus side, it is also event-driven and based on OpenGL. After looking through the docs I couldn’t see an easy way to add an isometric map display; other open source projects working on this problem did not look promising.

I think, for now, that I’m going to stick with PyGame, but I will try to rework the main game loop so that if I need to change it to an event-based system later on I’ll be able to.

GearHead RPG Wikia


Somebody has started a new GearHead wiki at Wikia. It still needs a lot of work, so if you have the time and interest consider entering some mecha or whatnot. I’m not sure if everything from the capture of the old wiki has been added yet.

I should be resting, but…


I had a booth at Comic World Seoul last weekend, and a booth a Comic World Busan the weekend before. Fortunately, neither event seems to have set back my recovery. In fact, I feel much better for having gotten out and having a bit of fun.CW201603_MyTable

Notice the GearHead scene on the banner, even though I haven’t had a GearHead comic in print in ages…


Speaking of GearHead comics, next year is the fifteenth anniversary of GearHead-1, and I was thinking that maybe Polar Bear Comix could print a GearHead anthology. I don’t have any details worked out yet but will definitely offer a page rate. If you are a cartoonist or illustrator and might be interested in taking part, let me know and I’ll get back to you if/when submissions start up for real.IMG_20160519_213755

This summer I’ll be traveling to San Francisco for a month to finish up my graduate studies, so I picked up a lot of stuff from Comic World to bring as gifts.

There is nothing cute about acute sinusitis.


Sorry for the lack of updates this past week, but I’ve been unwell.

Dishonorable tactics for fun and profit


If you’re looking for a bit of an edge in GH1, here’s a nice degenerate tactic you can try. I like this one because it gives some insight into how the game works.

The first thing you need to know is that GearHead is a clock-based system. Actions take a certain amount of time. After a character performs an action, a certain amount of time has to pass before they can perform their next action. Generally this period is the character’s Reaction Time, which is calculated based on Speed and the Initiative skill. There is one big exception to this: movement. Since it wouldn’t make sense to return control to the PC in the middle of a movement action, movement ignores Reaction Time and instead returns control to the PC when the move is completed.

To exploit this, first you need a very fast mecha, preferably loaded with overchargers. The Vadel is a good choice. Next, load it up with high-speed weapons. The more and the faster the better. In combat, start moving at full speed straight towards the enemies. Because of the movement exception described above, you will be able to attack every time the mecha moves into a new tile, regardless of your character’s Speed. If you can boost your mecha’s top speed to 300dpr or so this means an attack every two seconds.

This tactic doesn’t work in GH2, where the movement exception only occurs if movement is slower than Reaction Time.