Resolve OSE combat — initiative, attacks, damage, saving throws, morale, spells, and death. Use when combat begins or a combat handoff block is provided.
Resolve combat step-by-step using SRD rules. Accepts the ENCOUNTER HANDOFF: COMBAT block from the encounter skill, or sets up combat manually.
The referee's constitution governs all behavior. Read it before beginning play if it is not already in context. Additionally:
uv run plugins/bx-referee/skills/referee/scripts/roll.py "<expr>"PARTY.mdplugins/bx-referee/skills/referee/scripts/roll.pyplugins/bx-referee/skills/referee/references/srd_map.md (rules, classes, equipment, treasure)plugins/bx-referee/skills/referee/references/srd_monsters.mdplugins/bx-referee/skills/referee/references/srd_spells.mdThis skill accepts either:
$ARGUMENTS (e.g., /combat Goblin 3 dungeon 30) — if arguments are missing, use AskUserQuestion to gather: monster type, count, environment, and starting distanceParse the combat handoff block (if present in conversation), or gather details via AskUserQuestion
Read SRD rules: use the SRD map to find and Read Combat.md, Combat_Tables.md, Morale_(Optional_Rule).md
Read the monster page: use the monsters submap to find the file path, then Read it
Read party data from the active adventure's PARTY.md (determine adventure path from conversation context — the game root and adventure name are in SESSION.md)
Roll monster HP individually using their HD (if not already rolled from handoff)
Present the battlefield summary: who's fighting, distance, surprise state
srd/Combat.mdRead the spells submap (plugins/bx-referee/skills/referee/references/srd_spells.md) to find the spell file, then Read it.
srd/Morale_(Optional_Rule).md — check when first monster killed and when half incapacitatedUse the attack procedure from srd/Combat.md and the attack matrix from srd/Combat_Tables.md. For each attack:
uv run plugins/bx-referee/skills/referee/scripts/roll.py "1d20"Each active effect has:
At the start of each round (step 8), process all active effects:
Display this at the start of each round and at combat end:
## ROUND [n]
### Party
- [NAME] ([Class] [Level]): HP [current]/[max] | AC [value] | Att: [weapon] [damage] | EFFECTS: [list or none]
### Monsters
- [Type] #[n]: HP [current]/[max] | AC [value] | Att: [attacks] | EFFECTS: [list or none]
- [Type] #[n]: DEAD
Example:
## ROUND 3
### Party
- BLARG (Fighter 1): HP 5/7 | AC 1 | Att: sword 1d8+1
- SEDRA (Cleric 1): HP 3/4 | AC 4 | Att: mace 1d6 | EFFECTS: Bless (3 rds)
### Monsters
- Goblin #1: HP 1/3 | AC 6 | Att: sword 1d6 | EFFECTS: Poisoned (1d4/rd, 2 rds)
- Goblin #2: DEAD
- Goblin #3: HP 5/5 | AC 6 | Att: sword 1d6
After combat ends in victory:
(+N%) or (-N%) after the XP-to-next-level value. Multiply the base share by this modifier and round down. Report both the base share and each PC's adjusted total.HP current/max)| STATUS: DEAD to their first line/ in XP current/next), hand off to the character skill for advancement:
Skill "character" "level-up <adventure-path>" — pass the adventure directory pathsrd/Advancement.md, "Maximum XP in One Session")PARTY.md for updated stats before continuingCore combat rules:
CombatCombat_TablesMorale_(Optional_Rule)Spell lists (fetch as needed):
Cleric_SpellsMagic-User_SpellsMonster pages use the monster name as slug (e.g., Goblin, Ogre, Black_Dragon).