This week’s update is coming from a muddy field. The company I work for provides wi-fi/Internet to a music festival, so I’m tromping around in the mud keeping it running for everyone. Unfortunately, that means I’m on a small device and can’t do much in the way of screenshots. I’ll get some good ones for next week!


  • Released 0.10.2 (you can find it on the downloads page linked from the website above). It fixes a bunch of stability issues. The game generally runs into you die horribly now. 🙂
  • Realized that people were building from source (thanks to a bug report), so I added a script to help get a good build environment setup and fixed a Linux build issue that oddly didn’t appear on my primary Linux machine.
  • Building tasks will resume correctly after a pathing interruption (say, someone put a wall in the way).
  • Replaced all callbacks that returned a pointer that could be null (they are non-owning; ownership is pretty well taken care of at this point) with boost::optional, and used the resultant interface change as an excuse to sanitize all of them. This led to the stability improvement required for 0.10.2.

For 0.11, which I hope to release in 1-2 weeks time (this is in the Master branch if you build from source, as features/issues are committed; a feature is built in its own branch and merged when ready):

  • Fix a bizarre issue with walls being solid to everyone except a panicked sentient being, who could flee into a wall and become stuck.
  • Autosave! Every 5 minutes, the game saves. You can adjust the interval (and turn it off) inworld_defs/config.txt. (An interface for that will come along soonish)
  • Switched to boost::flat_map from std::unordered_map in a couple of places after profiling showed that it was a winner.
  • Added an initiative penalty system, and attached different penalties to different weapons. So an atlatl is now slower than a shortbow. This will also serve for encumberance penalties and similar in the future.
  • Added a color logging system. It’s pretty nice to use; I don’t really like C++ streaming operators, so I went with a call-chaining system. So you can do things like this:ss.settler_name(msg.attacker)->text(" attacks ")->other_name(msg.victim)->text(" with their ")->col(rltk::colors::YELLOW)->text(weapon_name + std::string(". "))->col(rltk::colors::WHITE);. Recent log entries are currenty on screen (there’s WAY too many of them right now; gradually converting a bunch of stuff that went out via cout)
  • Prevented you from placing a building on top of a staircase.
  • Fixed an irritating issue with the visibility code that was not showing the walls of the area properly (introduced when floors/ceilings became properly opaque).
  • All damage inflicted now goes through a well-defined system, no exceptions!
  • We now notify you when a settler gains a skill.
  • Fighting now uses skills, as well as just attribute modifiers. For now its just “ranged attacks” and “melee attacks” – but that will become more detailed.
  • Fixed a bizarre crash that only occurred after a corpse had been rotting for long enough to decay from the map completely, and only then if you were standing on it!
  • Started to add a bunch more NPC buildings. Wood hovels, “wood henge”, a longhall, 6 z-level tall wooden watchtowers.
  • Fixed the sunlight algorithm to add longer shadows at dawn/dusk, making the “wood henge” look a lot better (it casts shadows, so it works like a real henge)
  • Clean-up the keyboard handler, removing the condition where sometimes you have to press a key twice to get a menu to fire.
  • Started on a big project wrapping the entire UI in a more consistent handler. So far, it’s been a big win in terms of performance and consistent look/feel. It’s stateless (so each system has to worry about its own state, with call-backs from the UI), enforces a consistent color scheme (which will soon be defined in the config file), uses a different font from the map (for readability), etc. I’ll post more on this when it’s done – so far, I’ve only got 2-3 things using it.