About

I'm a software engineer who works on game development part time. I teach game development (on gamedev.stackexchange.com and lynda.com). I'm always working on something, and I'll post updates here. Let me know if there's a game development topic you want to know more about, I probably know the answer, or at least where to get one.

Sunday, July 31, 2011

Unit Goals


I’ve re-worked how units get things done. I gave them goals.
Up until this weekend units had a few things controlling them. They had the Unit worker, which did things like make sure they had jobs and checked their physics to make sure they weren’t flying. There was also the Job worker, which would move the units around, make them add/remove cubes and modify their inventory. 
Now the new system is much simpler, easier to understand and easier to debug. Basically, the Unit worker does everything. The Job worker still exists, but it’s only there to hand out jobs and make sure that jobs and their tasks are still valid.
The units now have a main goal and a secondary goal. (I’ll talk about goals and tasks from here on out, just remember that as far as the unit is concerned, they’re the same thing) When they need work, they ask the job worker for a job. Then they ask the job for a task. For example, a player selects 20 cubes they want removed. That’s a remove job. Then each one of the cubes that needs to be removed is a remove task. Each job is made up of tasks. So when a unit is assigned to a remove job, it asks the job what it’s main goal should be. The job finds the remove task closest to the unit, then that task becomes the unit’s main goal.
So what’s with the secondary goals? Those are the things that need to get done before the main goal can be completed. Continuing with the remove job example, the secondary goal would be “Move within range of the cube to be removed”. Once the secondary goals are met, the unit can start work on the main goal.
Once the main goal is complete, the unit can just ask the job for the next task.
Well I said it was simpler, so you should have seen the other system! Here it is in graph form:

Monday, July 25, 2011

Does Age of Goblins need any testers?
I'd be more than glad to help!

Age of Goblins isn’t ready for outside testing just yet. Likely testing will start with friends and family, then move to a select group of pre-alpha testers.

Once the game is playable (ready for alpha), I’ll move on to a “buying the game gets you into the alpha, beta and all future versions of the game” model, similar to the Minecraft model. With the alpha being sold at a very reduced price, the beta less so and finally the “release” version at full price.

Keep following the development blog, I’ll release details on how pre-alpha testers will be selected when I’m closer to that stage. Thanks for the interest and thanks for the question.

Tuesday, July 19, 2011

My early thoughts on Gadgets


All gadgets are controlled via the magic of “wireless” or as the head goblin gadgeteer calls it “Quantum steam entanglement”.
Gadgets are controlled by a Gadget Controller Cube, one cube can handle up to 128 gadget pairs (256 gadgets for those keeping track). Gadget links are paired with punch cards, in the form of: Activator->Reactor. Where, Activator and Reactor are both gadgets placed anywhere in the world. For example, the goblins have built a door, a pressure plate, and a lamp. If I want the door to open and the lamp to light when something steps on the pressure plate. I can create one of the following punch cards:

Pressure Plate -> Door
Pressure Plate -> Lamp

I can get the same results if I define it like this:
Pressure Plate -> Door
Door -> Lamp
This also means that the lamp will light any time the door opens, not just when the pressure plate is stepped on.
Of course I can define it like this as well:
Pressure Plate -> Lamp
Lamp -> Door
So that the door opens whenever the light is on, maybe not as useful, but you get the idea. Every gadget has an input and an output. When the gadget is “Active” its output is active. All gadgets can have multiple gadgets on its output, but many will be limited to a single input. However, for you advanced gadgeteers, there are OR (2 inputs), AND(2 inputs) and NOT(1 input) logic cards that will help you create everything you want. Logic cards are just like punch cards, and fit inside the gadget control cube, so you don’t have to clutter everything up.
Finally, I’ve updated the wiki with a very small list of gadgets.

Sunday, July 17, 2011

Units and Font


So far this weekend I’ve worked a lot on bugs in the unit jobs. So far the jobs are: Add, Mine, Channel. I know, Mining and Channeling may seem similar, but there’s a key difference. Mining leaves a layer for your units to walk on, Channeling removes the entire cube, opening the space below. This is the aspect of Dwarf Fortress that I thought would be tricky to bring into a 3D world, but this seems to work.
This is what Mining the cube on the left looks like:


And this is Channeling the same cube:

Then of course adding cubes works just like you may think. Cubes are added… You can select what type of cube to add, or just tell the Goblins to use whatever they have on hand.
Finally, I spent this morning creating a number font. I’d looked all over for a Nixie tube font, but couldn’t find one. So I created my own! Yeah, it has the same programmer art style as all my other stuff, but it’ll do for now. Here’s a little count down:

Sorry for the flashy post :)

Wednesday, July 13, 2011


Did some drawing the other day. Improved my radial menu a bit. It’s not done yet, but it is fully animated, the gear rotates and everything. I forgot to show it off in the latest video, I’ll show it off next time. This coming weekend I’m focusing on units. I want to start playing this game!

Tuesday, July 12, 2011

What Language is age of goblins written in and what libraries does it use?

Age of Goblins is written in Java, using OpenGL. For all the OpenGL functionality I’m using the Lightweight Java Game Library (LWJGL). I’m also using a modified version of the Themable Widget Library (TWL) andSlick for the UI.

Not using TWL anymore. I've created my own GUI library, ByteGUI (clever name right?). I'll release it separately at some point as a free library for other game developers.

The engine is written by me. In retrospect it would have saved a lot of time to have something pre-made, but I wrote one that’s pretty flexible, generic and easy to expand. Plus I know all the details of how it works :). Thanks for the question!