What have you done!? (or: Terrible Histories)

Oh man are we ever busy with a bunch of awesome stuff. There are a still a few fundamental engine issues that are being worked out (last I checked we can still accidentally spawn 10,000 Lua instances and destroy the world), but the biomes are starting to really look great, the art team is cranking out fantastic looking machines, people, and now particles (woo!), and the characters in the game are starting to get really upset whenever we start the game up to test a new feature and neglect to feed them.

It's always something.

It’s always something.

Characters will start telling anyone nearby who will listen that they’re really, really hungry.  They start thinking about hunger instead of doing work, and then they keel over.  That is, unless there’s *some* food available, but not enough.  Then they subsist for a while being generally grumpy as they go about filling steam balls and farming cabbages.  Could be worse, they could not have beds.  If they’re not sleeping on beds (which you need to make for them) they start sleeping outside. They really don’t like that.  It makes them angry and depressed.  Eventually the sleep deprivation will get to them and, uh, well currently they only have one terrible option — We’ll talk over some feature by the whiteboard for a while, look back at the screen, and there are just … bodies everywhere.

We looked for some kind of struggle.  Are there any dead monsters?  Where is the military?  Did everyone die of starvation?  Slowly the truth dawns.

The framework that we use for this is a history system that lives within our FSM model.  Jobs and scripts have the capacity to add historical events to a Lua object aka “a person”.  These can be anything from “Rupert Cogburn has felt hungry recently” to characters forming relationships with each other.  Here’s an example of a historical event:

addHistory("Feelin Hungry", 100, 
     {description = "SUBJECTIVE_PERSONAL_PRONOUN felt hungry recently."},
     {character = SELF})

Each historical event is given a name, an importance, a description, and list of owners of that event, and any number of additional data such as descriptions for the character windows, tags, and so forth.

We can then poll any character for a historical entry that matches any criterion.  We can search for whether a character is married or whether they have any other associations with another character.  We can poll them to see if they have witnessed any serious events recently by having an event add an event to all nearby characters, and we can even have knowledge of particular events spread by way of gossip.

For instance, Say Alice forms a strong positive relationship with Bob, then Bob dies in a horrible mining accident.  Alice isn’t nearby at the time, but Carol is nearby and witnesses the event.  Later on, Carol is gossiping with Alice and wants to give her the most important news of the day.  She tells Alice about Bob, and then Alice needs to decide how to cope with this news.

terrible_news

The possibilities for this system are sufficiently vast that we’re just kind of swimming around in it, putting in the stuff that we think will lead to fairly interesting and emotional stories, but we could spend $265 million on this database if we had, I dunno, like a thousand people working on it. Like certain recently released games. Not naming names. Not that we’re jealous or anything, just commenting on the news. Yeah.

Posted in Clockwork Empires | Tagged , , , , , , , , ,
15 Comments

15 Responses to “What have you done!? (or: Terrible Histories)”

  1. Bropocalypse says:

    They’re hungry, but they’ve got each other.
    Tough luck on the beds, though.

    { reply }
  2. Thomas says:

    Smells like the framework for a tantrum spiral to me.

    “Arrrghhh I’m angry because reasons!” *hits a guy*
    “AAARRGggghh i’m angry because he hit me!” *hits someone else*
    “AAAGHHHHGHH ….”
    ..and so on and so forth.

    I could see this happening in the Gaslamp Games offices

    { reply }
  3. Sam Atkins says:

    Hmmm. The combination of murderous rampages and extreme hunger makes me wonder… will “special” pies be available afterwards? >:D

    { reply }
    • Thomas says:

      I could easily see cogs and gears and pipes made out of bones, powering some sort of huge infernal machine covering the entire island.
      Immigrants would land on the beach, take a look, then NOOOPE right back to the Empire.

      { reply }
  4. Coaldust says:

    “we could spend $265 million on this database if we had, I dunno, like a thousand people working on it”

    Spend $0 extra on it, have hundreds of modders working on it for free for years, and happy to do so!

    { reply }
  5. Nathan says:

    This seems to be Dwarf Fortress with “real” graphics and Steampunk. Can I preorder?

    { reply }
  6. Bogrune says:

    What Coaldust says.

    *Gets out ink and cogged quill*

    { reply }
  7. Dan Thompson says:

    Technical question(s) for the team :

    Just how much of the logic and gameplay elements have you guys pushed out into Lua? Would you say its more of a ‘C++ extending Lua’ or a ‘Lua extending C++’ type of framework.

    Also, are you guys using LuaJIT yet?

    Quite random questions I know but this technical stuff really interests me at the moment (and perhaps a few other forum followers hopefully)

    { reply }
    • It’s sort of 50/50 Lua and C++ I’d say. Most of the interesting events for the player are handled in Lua, C++ is used for the game objects mainly for handling message passing and for expensive computations.

      We are actually using LuaJIT!

      { reply }
      • Dan Thompson says:

        Ah, good to know – thanks for the response. It’s nice to know how proper, experienced game devs approach engine/gameplay from a library and development perspective.

        LuaJIT is just pure magic when compared to the cumbersome C API.

        Keep up the good work guys!

        { reply }
  8. Robert Tseng says:

    so… what DID kill everyone?

    { reply }

Leave a Reply to Dan Thompson { cancel }

Your email address will not be published. Required fields are marked *