{"tab":"mechanics","section":"combatSettings","title":"Combat Settings (Advanced)","summary":"Numeric tuning for the combat system: XP rewards for defeating enemies, ability recharge timing, ability effectiveness bonus, NPC daily healing, and the canonical list of valid damage types for your world.","kind":"schema","uiLocation":"Mechanics → Advanced → Combat Settings","uiSubtitle":"\"Combat settings and their mechanics\"","editor":"JSON only","related":[{"section":"npcTypes","note":"npcType, npc, and trait damage profiles (vulnerabilities/resistances/immunities) draw their values from these damage types"},{"section":"abilities","note":"ability bonuses interact with combat resolution"},{"section":"npcs","note":"NPC tier controls HP multipliers and damage output"}],"wikiUrl":"/mechanics/combatSettings","schema":{"_type":"required","fields":{"minCombatXP":"number","baseCombatXP":"number","abilityCooldown":"number","abilityBonus":"number","npcDailyHealingAmount":"number","damageTypes":{"_type":"array","of":"string"}}},"sizeLimits":[{"id":"damageTypesCount","group":"Settings Caps","label":"`combatSettings.damageTypes` (entry count)","measure":"count","unit":"entries","enforced":40,"display":40,"sections":["mechanics/combatSettings"]},{"id":"damageTypeEntry","group":"Settings Caps","label":"`combatSettings.damageTypes.*` (each)","measure":"rawChars","enforced":60,"display":60,"sections":["mechanics/combatSettings"]}],"blocks":[{"type":"example","lang":"json","code":"{\n  \"minCombatXP\": 1,\n  \"baseCombatXP\": 100,\n  \"abilityCooldown\": 0,\n  \"abilityBonus\": 10,\n  \"npcDailyHealingAmount\": 999,\n  \"damageTypes\": [\n    \"piercing\", \"slashing\", \"bludgeoning\", \"poisoning\",\n    \"fire\", \"lightning\", \"wind\", \"water\",\n    \"arcane\", \"light\", \"dark\", \"psychic\"\n  ]\n}"},{"type":"fields","fields":[{"name":"abilityCooldown","tooltip":"Global setting governing ability cooldowns.","md":"Global setting governing ability cooldowns. It is **not** a multiplier on a per-ability `cooldown`. It serves two roles: it is the default `cooldown` an ability is given when it does not define its own (an authored `cooldown` applies directly), and it is the minimum number of turns that must pass before a character can learn another new ability. Balanced default: `0`."},{"name":"abilityBonus","tooltip":"Global setting for ability checks.","md":"Global setting for ability checks. It is **not** a multiplier on a per-ability `bonus`: an ability's `bonus` (shown in-game as **Power**) is added to the check directly as a flat modifier, alongside the acting skill and attribute contributions, and is not scaled by this value. `abilityBonus` is the default `bonus` an ability is given when it does not define its own; authored abilities use their own `bonus` instead. Either way the contribution shares the `skillSettings.maxSkillSuccessLevel` cap with skills, attribute bonuses, and context modifiers, consuming space within it rather than bypassing it. Balanced default: `10`."},{"name":"npcDailyHealingAmount","tooltip":"📋 Note (npcDailyHealingAmount): Health NPCs recover by this amount per in-game day -- not tied to the Long Rest mechanic specifically.","md":"> **📋 Note (`npcDailyHealingAmount`):** Health NPCs recover by this amount per in-game day -- not tied to the Long Rest mechanic specifically. Setting this to a high value (e.g. 999) effectively means any NPC recovers fully between encounters, preventing NPCs from remaining at low HP permanently across sessions.\n\n> **📋 Note (`isHealth`):** The codec-validated way to designate the health resource is `isHealth: true` on the resource entry in [`resourceSettings`](/mechanics/resourceSettings) - the engine reads that flag to identify the primary HP pool."},{"name":"damageTypes","tooltip":"📋 Note (Custom damage types): Adding a type like \"radiant\" or \"necrotic\" to damageTypes makes it a valid value in npcTypes vulnerabilities, resistances,…","md":"> **📋 Note (`Custom damage types`):** Adding a type like `\"radiant\"` or `\"necrotic\"` to `damageTypes` makes it a valid value in `npcTypes` `vulnerabilities`, `resistances`, and `immunities`. The engine math - increased or decreased damage for matching types - applies there. Beyond that, the damage type has no automatic behavior: it does not change how abilities deal damage, does not trigger elemental effects, and does not carry secondary rules (e.g. `\"poison\"` does not automatically inflict a poisoned condition). Any secondary behavior has to be defined explicitly in ability `description` text and narrator instructions in `generateActionInfo`.\n\n> **🐛 Common mistake (matching is case-sensitive and unnormalized):** Damage type matching against `npcTypes` `vulnerabilities`, `resistances`, and `immunities` is exact and case-sensitive — `\"Fire\"` and `\"fire\"` are different types, and a mismatch fails silently (full damage, no warning). Use the same lowercase ASCII strings everywhere you reference a damage type, and avoid accented or non-ASCII characters, which break matching the same silent way."}]}],"body":"## Example\n\n```json\n{\n  \"minCombatXP\": 1,\n  \"baseCombatXP\": 100,\n  \"abilityCooldown\": 0,\n  \"abilityBonus\": 10,\n  \"npcDailyHealingAmount\": 999,\n  \"damageTypes\": [\n    \"piercing\", \"slashing\", \"bludgeoning\", \"poisoning\",\n    \"fire\", \"lightning\", \"wind\", \"water\",\n    \"arcane\", \"light\", \"dark\", \"psychic\"\n  ]\n}\n```\n\n## Fields\n\n### abilityCooldown\n\nGlobal setting governing ability cooldowns. It is **not** a multiplier on a per-ability `cooldown`. It serves two roles: it is the default `cooldown` an ability is given when it does not define its own (an authored `cooldown` applies directly), and it is the minimum number of turns that must pass before a character can learn another new ability. Balanced default: `0`.\n\n### abilityBonus\n\nGlobal setting for ability checks. It is **not** a multiplier on a per-ability `bonus`: an ability's `bonus` (shown in-game as **Power**) is added to the check directly as a flat modifier, alongside the acting skill and attribute contributions, and is not scaled by this value. `abilityBonus` is the default `bonus` an ability is given when it does not define its own; authored abilities use their own `bonus` instead. Either way the contribution shares the `skillSettings.maxSkillSuccessLevel` cap with skills, attribute bonuses, and context modifiers, consuming space within it rather than bypassing it. Balanced default: `10`.\n\n### npcDailyHealingAmount\n\n> **📋 Note (`npcDailyHealingAmount`):** Health NPCs recover by this amount per in-game day -- not tied to the Long Rest mechanic specifically. Setting this to a high value (e.g. 999) effectively means any NPC recovers fully between encounters, preventing NPCs from remaining at low HP permanently across sessions.\n\n> **📋 Note (`isHealth`):** The codec-validated way to designate the health resource is `isHealth: true` on the resource entry in [`resourceSettings`](/mechanics/resourceSettings) - the engine reads that flag to identify the primary HP pool.\n\n### damageTypes\n\n> **📋 Note (`Custom damage types`):** Adding a type like `\"radiant\"` or `\"necrotic\"` to `damageTypes` makes it a valid value in `npcTypes` `vulnerabilities`, `resistances`, and `immunities`. The engine math - increased or decreased damage for matching types - applies there. Beyond that, the damage type has no automatic behavior: it does not change how abilities deal damage, does not trigger elemental effects, and does not carry secondary rules (e.g. `\"poison\"` does not automatically inflict a poisoned condition). Any secondary behavior has to be defined explicitly in ability `description` text and narrator instructions in `generateActionInfo`.\n\n> **🐛 Common mistake (matching is case-sensitive and unnormalized):** Damage type matching against `npcTypes` `vulnerabilities`, `resistances`, and `immunities` is exact and case-sensitive — `\"Fire\"` and `\"fire\"` are different types, and a mismatch fails silently (full damage, no warning). Use the same lowercase ASCII strings everywhere you reference a damage type, and avoid accented or non-ASCII characters, which break matching the same silent way."}