{
  "id": "generic_merchant",
  "root": "intro",
  "nodes": [
    {
      "id": "intro",
      "speaker": "npc",
      "text": "{disposition_label} face today. What brings you to my counter, friend?",
      "options": [
        {
          "text": "Show me what you have for sale.",
          "next": "shop_open",
          "effects": [{ "kind": "open_shop" }]
        },
        {
          "text": "What's the news?",
          "next": "lore"
        },
        {
          "text": "[Persuasion DC 12] Surely a regular customer earns better prices?",
          "skill_check": { "skill": "persuasion", "dc": 12 },
          "next_on_success": "shopkeeper_warmed",
          "next_on_failure": "shopkeeper_unmoved",
          "effects_on_success": [
            { "kind": "rep_event", "event": { "kind": "Dialogue", "magnitude": 2, "note": "polite haggle" } }
          ],
          "effects_on_failure": [
            { "kind": "rep_event", "event": { "kind": "Dialogue", "magnitude": -1, "note": "weak pitch" } }
          ]
        },
        {
          "text": "[Intimidate DC 14] Discount, or I tell people about the rats in your stockroom.",
          "skill_check": { "skill": "intimidation", "dc": 14 },
          "next_on_success": "shopkeeper_caves",
          "next_on_failure": "shopkeeper_dismisses",
          "conditions": [
            { "kind": "not_has_flag", "flag": "intimidation_used_at_npc" }
          ],
          "effects_on_success": [
            { "kind": "set_flag", "flag": "shopkeeper_intimidated" },
            { "kind": "set_flag", "flag": "intimidation_used_at_npc" }
          ],
          "effects_on_failure": [
            { "kind": "rep_event", "event": { "kind": "Dialogue", "magnitude": -3, "note": "tried to bully" } },
            { "kind": "set_flag", "flag": "intimidation_used_at_npc" }
          ]
        },
        {
          "text": "Goodbye.",
          "next": "<end>"
        }
      ]
    },
    {
      "id": "shop_open",
      "speaker": "npc",
      "text": "Take a look. Quality goods, fair prices.",
      "options": [
        { "text": "[Browse]", "next": "intro", "effects": [{ "kind": "open_shop" }] },
        { "text": "Actually, never mind.", "next": "intro" }
      ]
    },
    {
      "id": "lore",
      "speaker": "npc",
      "text": "Times are uneasy. Rumours of strange scents on the wind. Travellers come through asking after old names. Don't ask me which. I trade in goods, not gossip. (Well — mostly.)",
      "options": [
        { "text": "Back to business.", "next": "intro" },
        { "text": "Goodbye.", "next": "<end>" }
      ]
    },
    {
      "id": "shopkeeper_warmed",
      "speaker": "npc",
      "text": "Hah. You've a tongue, that's certain. Tell you what — pick something out, I'll knock a bit off.",
      "options": [
        { "text": "Show me what you have.", "next": "shop_open", "effects": [{ "kind": "open_shop" }] },
        { "text": "Goodbye.", "next": "<end>" }
      ]
    },
    {
      "id": "shopkeeper_unmoved",
      "speaker": "npc",
      "text": "Heard better lines from the rats in my stockroom. Prices are prices.",
      "options": [
        { "text": "Show me what you have anyway.", "next": "shop_open", "effects": [{ "kind": "open_shop" }] },
        { "text": "Goodbye.", "next": "<end>" }
      ]
    },
    {
      "id": "shopkeeper_caves",
      "speaker": "npc",
      "text": "Easy. Easy. There's no need for that. Tell you what — take a look, I'll be reasonable.",
      "options": [
        { "text": "Show me what you have.", "next": "shop_open", "effects": [{ "kind": "open_shop" }] },
        { "text": "Goodbye.", "next": "<end>" }
      ]
    },
    {
      "id": "shopkeeper_dismisses",
      "speaker": "npc",
      "text": "I've heard better threats from a wet matchstick. Buy something or get out.",
      "options": [
        { "text": "Show me what you have.", "next": "shop_open", "effects": [{ "kind": "open_shop" }] },
        { "text": "Goodbye.", "next": "<end>" }
      ]
    }
  ]
}
