{
  "path": "/posts/2026-04-30-this-rpg-thing-i-thought-up/",
  "site": "https://mike.puddingtime.org",
  "tags": [
    "games",
    "rpg",
    "claude",
    "cairn"
  ],
  "$type": "site.standard.document",
  "title": "This RPG thing I thought up",
  "description": "After a little research, I picked an RPG engine ([Cairn](https://cairnrpg.com)) because it has an open license and there's plenty of creature and loot content out there.   The game is pretty simple, but I picked two things to customize/make customizable:  First, the game content (creatures, trea...",
  "publishedAt": "2026-04-30T19:50:48.335Z",
  "textContent": "\nAfter a little research, I picked an RPG engine ([Cairn](https://cairnrpg.com)) because it has an open license and there's plenty of creature and loot content out there. \n\nThe game is pretty simple, but I picked two things to customize/make customizable:\n\nFirst, the game content (creatures, treasures, settings) are all defined in YAML files:\n\n```\n- id: root_goblin\n  name: Root Goblin\n  str: 8\n  dex: 14\n  wil: 8\n  hp: 4\n  armor: 0\n  attack: { name: \"spear\", die: \"d6\" }\n  special: null\n  tier: weak\n  weaknesses: [poison]\n\n- id: hooded_thief\n  name: Hooded Thief\n  str: 10\n  dex: 12\n  wil: 6\n  hp: 4\n  armor: 0\n  attack: { name: \"dagger\", die: \"d6\" }\n  special: null\n  tier: weak\n  weaknesses: [greed]\n  ```\n\nOnce I've got it working with the initial data, I want to make the data files interchangeable and write a Claude Skill that lets the player answer some simple questions about atmosphere and setting that generates a custom YAML file. \n\nNote the `weaknesses` field: That helps drive the next feature:\n\nThe first thing I noted trying to playthroughs using stock Cairn rules is that it is a super unforgiving system. The game requires you to get through 13 rooms, and I couldn't make it past four without fleeing a lot. I considered nerfing things, or buffing the characters, but I was also just finding the game itself pretty boring. \n\nSo I've added an AI GM (a Haiku API call). When you encounter a creature, you can do the usual attack or flee, but you can also improv using anything in your inventory: \n\n![Getting creative with a mirror](https://photos.smugmug.com/photos/i-j8VbJgR/0/KcHSkBbnStLxqdW2fsjbSLxJMC5R4dHmp5z4kZnL8/L/i-j8VbJgR-L.png)\n\n... and Haiku ajudicates:\n\n![No luck. The GM is a little uinforgiving. ](https://photos.smugmug.com/photos/i-wMXGDRj/0/LwbJ9fM4pHXbddDqKhcKHBCKP32TpgkNwSXmLwwSb/L/i-wMXGDRj-L.png)\n\nFor v1, I'm just kicking the tires on the virtual GM. Eventually, the same way I want settings, creatures, and loot to be user-definable, I want to be able to define the GM's temperament: Everything from the classic by-the-book realism killjoy to what I'm calling \"failed improv class instructor.\" \n\nYou may have also noted with that Hooded Thief creature up there that there's a `  weaknesses: [greed]` field: The GM uses that to help it judge the effectiveness of your gambit: If you're holding a coin purse and come across the hooded thief, it'll get distracted if you just drop your money and run away. \n\nI still want the game system to be a little tough, and still want to make getting to that 13th room hard, but it might as well be more fun along the way. \n\n\n"
}