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

GH2.1_WorldMap

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

GH1_WhyHaveAWar

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 archive.org capture of the old wiki has been added yet.

I should be resting, but…

CW201603_B_FiveAM

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…

CW201605_Undertale

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.

DME_ElementalStorm

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

Dishonorable tactics for fun and profit

GH1_Vadel

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.

Plain Walls and GH2 Thoughts

GH1_PlainWall

There’s a wall type in GearHead that is described simply as “Wall”, and now it has a fancy new sprite. Well, maybe not fancy, but what do you expect for the most generic wall in the game?

I’ve been thinking about the improvements to GH1 that I need to port to GH2. I think my next big programming task should be to catch up the GH2 source to the current state of GH1. The longer I leave it the more of a nightmare it’s going to be, and it’s already kinda scary. Here are the main things that need to be updated:

  • Resizeable window with GH1 style panels.
  • Move the saves and the config file to the user’s home/config folder.
  • Copy the much-improved GH1 character generator and training layouts. Add instructions to the phone interface.
  • Update the romance and gender options.
  • Allow lancemates to purchase skill training, and allow cycling of lancemates from the backpack interface.
  • Update the colormenu with the improvements made in GH1.
  • Make sure status effects don’t have any effect during quick time. Also make sure that the DirKey function updates the screen correctly.
  • Update the GH2 logo, and give it a proper name. GH1 is “GearHead: Arena”, but GH2 is just GH2. Right now I’m leaning towards “GearHead: Superstar” but I’m not sure whether that is too cheesy or exactly cheesy enough.
  • Add the animated water and thin door sprites.

That should bring GH2 into line with GH1. Later on I’ll post about my plans to finish GH2 properly.

GH1 v1.301: Shaking out the hunter-synths

GH1_WhyHaveAWar

I’ve just uploaded version 1.301 to GitHub. This is largely a bugfix release; there were several problems with the improved SDL interface, as expected. I also fixed some problems with the content, including what I hope is the cause of the mysterious villainous reputation  Thanks to everybody who submitted bug reports.

The other big thing is the inclusion of some features to hopefully make the ASCII interface work better on a braille reader. The Accessibility_On config option changes the navigation display from a compass to plain text.

GH1_Accessibility

Complete list of changes below the fold. Continue reading

GearHead1 Character Creation

There aren’t a lot of GearHead videos on YouTube, so I made this one to showcase the character creator. I’m going to try an make another video showing the start of the RPG campaign soon.