Sometimes you have to show how the trick is done

One of the first years we were lucky enough to go to GDC (a yearly game developer conference), we had breakfast with a guy who worked at Bullfrog during their heyday. He told us a story about one of their games that’s been echoing in my head for years since.

This image constitutes a spoiler for the contents of this blog post.

Warning: this image constitutes a spoiler for the contents of this blog post.

During development of the title (which we will call “Cheese Wrangler” to protect the innocent) they created a sophisticated simulation of the environment to determine which challenges to present to the player. Months of painstaking work went into cheese wrangling challenge* simulation in an attempt to create a model that would feel intuitive to players, but the system was taking way too long to finish. Eventually they decided to test players against a purely random event driver, and they found that after all that work players couldn’t tell the difference between simulation and chance. So they threw out the simulation.

(*Not actually cheese wrangling challenges, but we’re sticking with that theme.)

Simulation just doesn’t matter if the player doesn’t care about it.

{ read this article }

Posted in Clockwork Empires | Tagged , , , , , , , , ,

What lies in the heart of a Fishperson?

In the planning meeting last month I was tasked with “adding some creepy stuff”. Lovely, easy! Right?

As is ever the case in a game such as Clockwork Empires, with as many complex systems interacting with as many other complex systems as we have here, it turns out that much of simply “adding some creepy stuff” consists of tracking down the creepy things we’ve previously made then testing and updating them so they play nicely with all the other new things (creepy or otherwise) we’ve made. Plus there are the back-end refactoring passes that have made certain things obsolete, left other threads hanging, and the usual additions of better systems to replace old bits that were a little rougher and/or hacky. So there’s cleaning up to do which not only makes things work better, but makes things work better with other things. This explains how a subtask of my primary directive, “make sure all the eldritch transformations work”, turned into “review all cult-related actions and events” which turned into “overhaul every instance of madness in the game to work with both aforementioned items and with new madness visualization”. Then I found myself fulfilling the contingent requirement of “check every single job in the game and make sure it’s doing what it ought to be doing with what it should be doing it with, and split the 8000 line jobs definition file into smaller files”.

Adding some creepy stuff is not necessarily straightforward. Happily, that last paragraph describes what I did for the last major patch.


“Blood, mostly.”

{ read this article }

Posted in Clockwork Empires | Tagged , , , , , , , ,

Strange Moods At Gaslamp Games

“Periodically, individual dwarves are struck with an idea for a legendary artifact and enter a strange mood. Dwarves which enter a strange mood will stop whatever they are doing and pursue the construction of this artifact to the exclusion of all else. They will not stop to eat, drink, sleep, or even run away from dangerous creatures. If they do not manage to begin construction of the artifact within a handful of months, they will go insane and die soon afterward.” – Dwarf Fortress Wiki

Strange moods abound in the office. It must be Autumn.

David screams "I must have steps!"

The programmer screams “I must have steps!”

I was seized with the strange mood recently after I got annoyed when implementing a new feature – more office code, I believe. Writing and testing my code required me to make a change to the Lua scripts, open the game, build an office, test the feature, see my stupid mistake, shut down the game, change the Lua script, open the game again, and continue ad infinitum. Uggh. Inspired by Casey Muratori’s Handmade Hero approach to hotloading – even though our approaches are totally, conceptually dissimilar – I decided to add the ability to reload Lua scripts on the fly to the game. The UI code is crude and nasty, but it looks something like this:

{ read this article }

Posted in Clockwork Empires | Tagged , , , , , , , ,

Clockwork Empires September update: THE TERRIBLE TRUTH

A Clockwork Empires update has been discovered, but at what terrible cost? We present for you:


This update will go live to every Clockwork Empires player via Steam!

We have also updated our Clockwork Empires: Development Progress Report! Let’s try something new this month and include the overview section from the development report in this blog post, like so:

September 2015 update notes:

If I were to sum up this month’s work, it would be that we worked on addressing the question of how a player queries the state of a character then how the player makes decisions which affect that state. (You like that sentence? Chris said it needs another comma, but I told him No!) … Naturally the full story is ridiculously complex.

This month is a story of rabbit holes, of the noble intention of working on a seemingly superficial feature, prying back the cover, and ending up elbow-deep in wires and pipes. Possibly we found Lemarchand’s box holding up a leaking conduit and now We have such pointers to show you. I’ll give a shot at working this into a comprehensible narrative provided we all acknowledge that broad strokes are being painted with here.

First, to follow up on the revised Work Crew UI panel from last month, we set our sights on a revised Character Information panel. Sounds great, natural progression! What goes into this character panel; what is a colonist but a miserable pile of memories? Digging in to memories, ah, looks like this system needs some core operations re-jiggered to work according to our present assumptions. We’ll also roll the madness system back into being attached to memories and put a better display on the character panel. And while we’re at it, we should better visualize the emotional effect of memories. While we’re at that, being able to better visualize memory lets us rebalance the effects of memories – let’s do that. We really ought to check every instance of memory creation in the game while we’re at that; and every social job that is executed based on mood state to change mood state – heck, let’s check every job in the game while we’re there. Oh dear, this’ll need fixing; and this. We’ll also need to provide players better means to address negative moods and madness, so let’s get the “office” type building infrastructure working properly so that we can make, for example, effective chapels that give real feedback about their state (and this follows up nicely on the barracks from last month).

Got all that? Let’s review:

  1. redo character info panel
    1. overhaul memory system
      1. review all memories in database
      2. review all memory creation points in script
      3. add madness to appropriate memories
        1. review all madness-related systems
          1. review cults & fix them to use revised madness
          2. rebalance all madness jobs
      4. implement the Lament Configuration with linked lists
    2. review & balance all social jobs
      1. review & balance all jobs in the game, period.
      2. oh hey, it turns out some jobs worked based on outdated assumptions. Re-do or can them!
    3. properly implement office system
      1. redo Chapel in particular to use new system
      2. meddle with theology, generally
      3. cults again, probably
    4. where we’re going, we won’t need eyes. Or roads. I always get those ones mixed up.
  2. attempt to re-activate the black hole for some reason
  3. release album

And that’s not including the stuff I couldn’t cram into a tangled web of related systems, which would be some optimization & finishing on stockpiles, some /other/ UI, and the whole workshift and time of day system. Plus the review of all jobs fixed a number of outstanding AI errors. And we did more balancing. And … it’s in the changelog and in the sub-categories listed below.

It’s not clean and easy to explain, but we think players will be very pleased with progress from Alpha 42 to Alpha 43. We’ve particularly made an effort to address the divide between player knowledge about characters and what those characters choose to do. Next month should be interesting as well – we hope to focus more on finishing the backend for core system (like offices) and – well, we’ll talk about that next month.

(Read the entire development report at the Development Report.)

(Don’t own the game? Clockwork Empires can be purchased on via Humble or from Steam.)

Want to hear about all sorts of updates via email plus receive silly images from development? Sign up for the newsletter here.

Patch Notes for alpha 43:

{ read this article }

Posted in Clockwork Empires | Tagged , , , ,

Willy Wonka, Toto, or something to do with a sausage factory

Now that we have a much more detailed view of how we envision the specifics of Clockwork Empires, we’ve been revisiting much of the UI we initially wrote to carry us this far. Now we’re looking at it with an eye for usability and better presenting the information that should be important and visible to the player. You may recall the revamp of the Work Crews element last month – the element that we’re looking at right now is the character information panel.

"So how long exactly has the Queen reigned; does anyone really know?"

“So how long exactly has the Queen reigned? Does *anyone* really know?”

We have been getting away with a very crude character UI because most people don’t seem to expect that a deep, complex character simulation is going to give you a way to immediately decipher exactly what is going on within that character. Not only is that a tall order to ask for a user interface but it might even lower your appreciation for the simulation by peeling back the curtain a bit too far. A certain element of mystery can be a good thing.

{ read this article }

Posted in Clockwork Empires | Tagged , , , , ,

Technical Progress Updates as Viking Saga; or, “The Kalevining”

(With thanks to the Twitter user
who suggested that the history
of all of the code in Gaslamp
should, for comedy, be provided
in the form of Viking Saga.
Let it be known, this is your fault.)


Totally unrelated: the Battle of Sausage Farm.


In the frozen lands of Gaslamp,
in the midst of record wind speeds,
while a power outage goes on,
and our coders, drenched with fever,
and the drippings of their noises,
hunker over scarred computers
plotting code for Clockwork Empires.
Verily, a mighty plotting.
Verily, it is cold season.
A plague descending through the office,
and our lungs are filled with wheezing.


Nicholas Vining, attempting to transform himself into John Carmack.

In the midst of Gaslamp’s office,
strides the coder, Nicholas Vining,
holding two large pints of coffee,
in each hand, for double fisting
in the manner of a wizard,
or at the very least John Carmack –
here we use poetic license –
to do battle with the codebase.
(Also, let us now please note that
when a wizard double fists we’re
merely talking about drinking.)

“Tell me now,” asks Nicholas Vining,
“Tell me, what should I be coding?
Magic runes of lethal graphics,
to dazzle bitter game reviewers,
and the men of foulest Youtubes,
craving 60 frames per second?
Shall I work such magic runings,
shall I weave intricate codings,
in the mystic ‘Shader Language’
known to only true devotees
of the sacred graphics circles?”


Daniel Jacobsen, official Forbes Thirty Under Thirty over thirty.

Suddenly, there came a voicing
of a man of mighty Business,
as was recently acknowledged
by Forbes’ “Thirty Under Thirty”,
freshly returned from Seattle.
Proudly ringing was his laughter,
proudly calling, “Ha ha! Business!”,
freshly returned from Seattle,
not entirely sure what happened.
“Nay,” admonished Dan Jacobsen,
“do not cast your graphic weavings.
This is why the other indies
spend their coin to purchase engines,
such as Unity or Unreal.
But, instead, like proud Sisyphus,
pushing up a hill a boulder,
take from me these JIRA tickets,
full of tasks you’d rather not do.
Yet again the sprint is ending,
yet again you slack in coding.
Decision trees await your typing,
and the offices need writing,
‘ere we can proceed with getting
the hell out of Early Access.”

Thus ashamed, your poor narrator,
feeling not the least heroic,
slunk back to his mighty fortress,
clutching both his mighty coffees,
and slumped into his throne of Aeron.
Mighty was the throne of Aeron,
powerful its weaving,
for it keeps one sort of upright,
in an ergonomic posture.

We called it "Fort Murder".

We call it “Fort Murder”.


So ashamed, our noble poet,
proud programmer Nicholas Vining,
sat down and split the building menu,
sundering the earth from heavens.
While the code was still compiling,
all the office heard him musing,
“We have far too many buildings,
and it is very confusing
for the poor neophyte user.
See, a GIF by Chris Triolo.
See, how well it’s animated.
See how intricate the detail.
Well, I’m sure not doing that, then.”
How noble is the Lead Programmer!
Knowing when he should be precious,
and knowing when his time is precious,
knowing when a thing can quickly
be swept under the rug for later.

In a previous frozen winter,
workshop code was quickly written
by that mighty Wizard Whitman,
for our original intentions.
The intentions of the workshop
slowly changed throughout the course of
making a game in early access.
(Once upon a time, the system
did not have building interiors!
We then threw out much of our artwork
and code to add building interiors
so that the actions of your people
could be observed in fussy detail.)
Yes, bits were often bolted to it
by many hands, in great big hurries,
adding one thing, then another.
In fact, it was a load of bollocks.

Previously, it was rewritten,
and the code was moved from Lua,
where it was a great big pile of
oozing from a, well, never mind.
Now the workshop code is cleaned up
and rewritten in C Plus Plus
and it smells like new mown daisies
and the smell of hay in summer.
(Hopefully it lasts a few weeks.)

“Now,” he said, “the workshop code calls.
In previous days, the artisan
would have to wait for an assignment
to be complete, before he could start
a new one, with a fresh mandate.
From now on, let all of our workshops
be full of happy, healthy labour,
and let every citizen amongst them
do whatever work is able
to be done in these conditions.
Let’s instead have one assignment,
which all jobs inside a workshop
shall be attached to when created.”
This was shipped in a fresh alpha,
known as “Alpha forty-two-C.”
Player feedback was quite lovely;
we are thinking about letting
the work crew affixed to a building
also perform such small repairs
to modules as may often occur
when a proud and mighty module,
over-used in its employment,
becomes broken and needs repair.
We may not; we’re not quite sure yet.

From this revision, sprung a framework
for running tasks inside a building.
Now, when we look for a new job,
if the building is an office,
we examine all the jobs that
are stored up inside this building.
(We might have covered this already.)
Thus a person’s wounds are treated
by a happy half-crazed barber,
or a demand for confession
may be soon sated by a vicar,
preaching their own choice of gospel
depending on their mental status
and alternative religions.
A new “F-S-M” is added,
where a member of your township
may wait in place to have a job done,
and will get angry when it’s not done,
and thus forcing timely obesiance
to your colonist’s ambitions
to receive prompt medical attention
before bleeding on the carpet,
or for spiritual salvation,
lest they do something they should not have.

These disgusting organs require science.

These disgusting organs require Science!


From the hills there came a shouting,
and the hoarding of quinoa,
(which only scans if read incorrectly,
for actually it’s pronounced “keen-wah.”)
Yes, t’was artist David Baumgart,
freshly full of vegan lunchmeat,
puzzling about a problem,
vexed by user interactions.

“Here again,” he muttered idly,
“things are put in the event system,
things that maybe should not be there.
For instance, bandit interactions.
Should you wish to shoot a bandit,
with your mighty flint and musket,
you cannot change your past decisions,
unless a new event is firing,
caused by, maybe, other bandits,
than the ones ripping your stuff off.
In the past, we’ve said that buildings
are the source of interactions
with your townsfolk, and their worldview.
Let us place, in-game, an office,
a foreign office, where the player
may make wise policy decisions –
or not, as the case may yet be.
Yes, a mighty foreign office,
the perfect place for dreaded Novorus
and Stahlmarkian interactions,
and other sorts of jingo-ism.”


David Baumgart, filled with vegan lunchmeats and vexed by quinoa.

“For these things,” said Nicholas Vining,
“we shall need all sorts of widgets.
Yes, our code has many widgets,
many widgets of all sizes,
humble scroll bars and small buttons,
text entry fields and tree view widgets,
all hooked up by mighty signals,
to a model view controller.
Long ago, I cast these widgets,
wrest them in a fiery furnace,
actually a small apartment,
and now they have grown fat and sassy.
Yet, who amongst us can go in and
write UI code for all offices?
Alas, we must add widget code now,
designed for use in office buildings,
where the UI is configured
depending on the type of office,
and this must be done from Lua,
for the many types of office.”

Broken down, we see each office,
has two types of interaction:
some policies, and then a job list.
Policies are sent as messages
from the widgets, to the building
and may be global or per-building
depending on the type of office.
For instance, inside a barracks,
we may choose our choice of firearm,
or the nature of our training,
or when soldiers shall be training,
requiring many types of widgets –
rows of icons, and checkboxes,
all drawn upon a WACOM tablet.
Here your narrator is still coding,
but stopped today to pen this update,
in trochaic tetrameter,
which may have been a poor idea. Hmm.

What a lovely kitchen!

What a lovely kitchen!


Go about your daily grumblings,
post today upon our forums!
Send us all your broken save games,
so we may yet fix nagging issues,
for Early Access is like toothache,
but the tooth is in a serpent.
(Apparently, that’s like a cobra.)
Bravely, we salute the warriors
fighting on through Early Access,
and are horrified to see that
Prison Architect is coming
out after thirty-six revisions.
Now we pray to mighty Odin
that he will take our souls in combat,
which is why today we ordered
many cans of silver spraypaint
to adorn each other’s mouths with.

(Next week’s blogpost is haiku, now.)

Posted in Clockwork Empires | Tagged , , , , , , ,

Art Is Pain: Marketing For Queen & Empire

I’m going to write about digital painting today (edit: actually, marketing and project management, but let’s pretend it’s still about art) because everyone else is too weak and sickly to stop me. Are you happy? This is what happens!

Isn't it fun?

Some early promotional art. Isn’t it fun?

{ read this article }

Posted in Clockwork Empires | Tagged , , , , , , , , , , , ,

Stockpiles and Gabions

It’s instructive to just sit down for a quick, relaxing game of Clockwork Empires and then make a note of all of the little things that one finds frustrating or otherwise demanding improvement. As a result of this particular exercise, gabions are now built in assignments in the upcoming experimental build, rather than as individual elements. (Once certain graphics code is made to work again, we can also leverage this code to do things like brick walls and fences, so that at long last we may be Perfectly Safe.) I think we still need to do some more UI work on the gabion line placer tool in order to make it something you would actually want to use, though; however, large walls are now a thing you can have. Following the same line of thought – “does this annoy me? YES” – I finally fixed the overseer counter so that it only displays overseers and not artisan workers (including but not limited to vicars, artisans, naturalists, barbers, and basically anybody not in Her Majesty’s 5th Regiment of Swole); artisans now get their own idle counter. (We probably need to change the term “artisan” soon as well, as it doesn’t make a whole lot of sense anymore.) This way, you can see how many people are doing the base work of resource mangling, and how many people need to get new stockpile jobs assigned to them. Management!

Get to it, layabouts!

Get to it, layabouts!

I have also spent a certain amount of time this week rewriting the stockpile code, which I’m hoping to have rolled out in the next experimental. There are two parts to this.

{ read this article }

Posted in Clockwork Empires | Tagged , , , , ,