Hunger is one of the core “clocks” in ADOM (a clock here meaning a thing that is ticking and invokes some effect when it runs out – like dying for the hitpoint clock). With every action the player character becomes less satiated. After a while his status is indicated as “hungry”, then “very hungry”, finally “starving” and then you really starve. Depending on your environment (dungeon or wilderness) the speed for this progression differs vastly. A pretty common theme for new players is to starve in the wilderness. Talk about fun.

Initially hunger was included in ADOM to have a reason to eat monster corpses which in turn might grant special powers (or damage the character in a variety of ways). Later on it became more and more dangerous and a huge challenge for less experienced players.

For Ultimate ADOM we have been thinking a lot of what is fun and what isn’t fun. As we already have both the hitpoint clock and the corruption clock (eventually) as threats to the player, it does not really seem appropriate to add even more such clocks with the same boring effect (death, end of game).

For a while we discussed doing completely away with hunger… but that would both making eating corpses less interesting and prevent fun new features. One such feature being the ability to swallow rings.

While implementing containers as a technical aspect of Ultimate ADOM one of my Twitter followers encouraged the idea of adding a stomach to the physiognomy of beings in Ultimate ADOM. Technically this was a matter of minutes but the question was what to do with it? Just use it for a more complex digestion system internally? Or do something different with it? Or combine both?

After a particularly fun discussion during one of our sprint reviews we came up with the idea of being able to swallow rings in order to benefit from their special abilities. The trade-off here being  that swallowed rings would give you reduced benefits – but obviously be protected from external damage. And rings would be digested over time… over an extended period of time. So this adds a new interesting decision process for the player: should I keep a ring and use it normally (enjoying its full benefits) or should I swallow it and benefit from reduced powers over an extended period of time. Additionally it opens up interesting new possibilities of dying… ring digestion incompatibilities… puncturing your bowels with certain ring designs… overstuffing your stomach. So many wonderful options 🙂

So in the end we decided that hunger was too much fun to let go. To make is less annoying it probably will work more like hunger in ADOM Deluxe‘s standard mode: It doesn’t kill you, but it weakens you. And it might degrade your attributes if you stay hungry for extended periods of time.

All in all hunger and food will add many exciting (old and new) possibilities to the game but prove to be less of a nuisance for more casual players.

For the technically inclined we conclude with our partial ECS (entity component system) implementation of stomachs:


{
  "Id": "Stomach",
  "BaseTemplates": ["BodyPart"],
  "Components":
  [
    "BodyPart",
    {
      "Container":
      {
        "slots": 10,
        "permissibleTypes": ["Ring"],
        "addMode": "Swallow",
        "removeMode": "Vomit",
        "statusWhenContained": "Swallowed",
        "longStorageMessage": "LongSwallowMessage",
        "shortStorageMessage": "ShortSwallowMessage"
      }
    },
    {"ProtectionFromAmputation": {"local": true}}
  ]
}

Which shows the power of reusing components, in this case the Container component. The implementation for item stacks is attached to an entity template called “AccessibleSpace” which is a base type for all kinds of tiles you can enter. It (again partially) looks like this:


{
  "Id": "AccessibleSpace",
  "Components":
  [
    {
      "Container": 
      {
        "name": "ItemsOnTheGround",
        "slots": 999999999,
        "isDetachedFromOwner": true,
        "permissibleTypes": 
        [
          "Item"
        ],
        "addMode": "Drop",
        "removeMode": "PickUp",
        "statusWhenContained": "Dropped",
        "longStorageMessage": "LongDropItemOnTheGroundMessage",
        "shortStorageMessage": "ShortDropItemOnTheGroundMessage"
      }
    }
  ]
}

Getting back to hunger: Another interesting thought is to make corpse effects more random. As corpses are generated from monsters which in turn have complete semantic descriptions due to our ECS approach it might be worthwhile to implement a system that scans the special powers of monsters (immunities, resistances, etc.) and randomly selects one of the powers as the one you get for eating the corpse. Or it might select one of the special attacks of a monster and execute that upon the unsuspecting gourmet when eating the corpse.

So by now it should be obvious that both hunger and satiation can be extremely fun mechanisms in a game. Always remember this once you are playing Ultimate ADOM and feel unhappy about being hungry.