Ruleset Combat
Use this page to decide how your ruleset takes part in a fight: the battle block lends Marinara's combat the sheet, and the combat block resolves the whole fight by the ruleset's own rules, with its bestiary, board, reactions and contests. It is for ruleset authors. Before you start, read Writing Game Mode Rulesets.
Sections on this page:
- Battles: lending the sheet to Marinara's combat
- What is carried in, and what is carried out
- How an entry becomes a skill
- Combat: a fight your own rules resolve
- Every key
- Saves against conditions, damage or magic
- A fight thrown in pools: dice-pool
- A fight thrown in symbol dice: symbol-pool
- Minimum damage dice
- A hit that dazes
- The target chooses the wound kind
- Initiative that attacks move
- What a fight reads from mechanics
- Creatures: a bestiary a fight reads
- Positions: a fight on a board
- What a fight does with your block on the server
- On screen
- Contests: grabbing, shoving, breaking free
- Windows: holding the fight open
- Not yet
Battles: lending the sheet to Marinara's combat
By default a battle knows nothing about the sheet. It builds its fighters the way it always has, and a character can walk out of a fight with their hit points on the sheet untouched.
An optional battle block changes that, in one direction only: it lends the fight the sheet's numbers, and writes the fight's outcome back. It does not make combat follow your rules. The dice math is still Marinara's, and so is who hits whom and for how much. Because of that, health is carried as a share of the maximum rather than as your own number: a character at half health on the sheet starts the fight at half of the health bar Marinara built for them. Your 9-point health pool is never dropped into a fight where one blow does 12.
"battle": {
"health": { "pool": "grit" },
"energy": { "pool": "luck" },
"skills": [{ "list": "knacks" }]
}health: required. The live pool that is the character's hit points in a fight. It must be one of
the pools in sheet.live.pools, not a list whose rows are pools.
energy: optional. A live pool the fight may spend, which becomes the MP bar. It has to be a
different pool from health, because a fight cannot spend hit points as fuel.
slots: optional. Live pools that a fight spends one at a time, each with alevelfrom 1 to 9:
[{ "pool": "slots_1", "level": 1 }]. Levels and pools are each used once.
skills: optional, up to eight. The sheet lists whose rows become the character's combat skills.
Only rows that came from one of your catalogs count, and only when the entry behind the row has a mechanics block: a row somebody typed by hand says nothing in numbers. onlyWhen names a boolean column the row must have set, such as a prepared spell. alwaysWhen names a column and a value that lets a row through anyway, such as the spells that are cast without being prepared. It is the exception to onlyWhen, so it is refused without one beside it.
What is carried in, and what is carried out
In, for each party member whose sheet the game has: the health pool's share of its maximum sets where the fighter starts on Marinara's own health bar, the energy pool becomes MP, each slot pool becomes that level's slots, and the marked rows become skills. Maximum hit points, attack, defense, speed and level stay Marinara's own numbers. A character at zero in the health pool starts the fight down, because that is what the sheet says, and a character above zero never starts below one hit point, so a small share cannot knock somebody out by rounding.
Out, once the fight is over: the share of the health bar the fighter ended on is read back onto the health pool's own scale, and the difference from where the fight began is applied as damage or healing. Energy and slots are counts, not shares, so they are written back as they are. Everything goes through the same rules the sheet's own buttons follow, and a change the sheet refuses is skipped and reported rather than forced. A fight that did not move a fighter's hit points writes no health change at all, so the two conversions can never move a sheet by themselves.
Neither: attack rolls, saving throws, concentration, and what a higher cost would add. Those are in the mechanics block for a real combat system to read one day; this bridge does not apply them, and a ruleset should not claim it does.
An abandoned battle writes nothing back. If you delete the message the fight started in, or the fight never reaches its end, the sheet is exactly as it was: the fight did not happen.
How an entry becomes a skill
A catalog entry's mechanics block is read like this:
kindbecomes the skill's type.utilityentries and anything markedreactionare left out,
because Marinara's combat has nowhere to put them.
amountsets how hard it lands, as a multiplier against the fighter's own attack rather than as a
damage number. Bigger dice never land softer, and the multiplier stays inside the range a generated skill already uses.
rangeandarea.sizeare divided by the catalog'sunits.distance.perCellto get grid cells,
and never round down to nothing. A burst becomes its radius, a cone half of it, and a line one cell. Anything with an area targets every enemy it covers, and friendlyFire is honoured.
damageTypebecomes the skill's element.targetsis not carried: Marinara's combat decides who
a heal, a buff or an attack can be pointed at from the skill's type.
coston the energy pool becomes the MP cost, and several energy costs are added up. Acostof
exactly one slot spends one slot of that level. Marinara's combat charges one number of energy or one slot, never both, so an entry that costs two slots, slots of two levels, or a slot plus energy is left out of the fight. So is a cost on any other pool, such as hit points or a class resource, because the Engine would otherwise hand it out for free.
- A
buffor adebuffbecomes Marinara's own buff or debuff. Whatever else the entry's text
promises, such as clearing a condition on the sheet, is not applied in the fight. Leave mechanics off an entry whose effect only makes sense outside a battle.
coverage.combat is separate and still means what it meant: set it only when battles do follow your system's rules.