V1.1.0: gear levels, encounter overhaul, guided builder, trading, docs

Characters
- Builder: pick-then-Next on every step with live preview, Back button,
  plain-language help throughout, and "Suggest for me" for ability scores
- Motivation is picked from a list; new steps for special abilities,
  background and appearance, all composed from fixed lists and DM-only
  to edit afterwards
- Copy a character to another campaign
- Characters can give gold, weapons, items and spells to each other
- Money tracker: gold only changes through a logged ledger
- Fixes: level/XP/location are DM-only, HP stays within 0..max, physical
  dice ability rolls, every die is rolled once

Gear
- DM-managed item pool; weapons, items and spells are handed out by the DM
- Starting-option flag per pool entry
- Gear levels 1-9 per held copy with a damage ladder, growth rate and
  starting level; spells gated by spell level with a fixed damage value
- Spell library carries default damage; damage is picked from a list

Encounters
- Battle and NPC quest modes, turn tracking, scene description, DM notes
- NPCs, richer combatant cards, conditions from a list
- Rewards (gold, weapons, items) lined up and awarded, with gold splitting
- Character HP is shared between the sheet and the encounter
- Monster stat blocks and NPC secrets are never sent to players

Other
- Dice roller on every page
- Docs for characters, weapons, spells, items, encounters, monsters and
  NPCs, with full lists generated from the data (npm run docs:lists)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-05 16:47:28 +02:00
co-authored by Claude Opus 5.5
parent 94067f1268
commit 4a6a09bae8
44 changed files with 9405 additions and 700 deletions
Binary file not shown.
+961
View File
@@ -0,0 +1,961 @@
# Characters
How characters work in this app: how they are created, what is stored, how every
number on the sheet is calculated, who can do what, and what is not modelled.
This describes the code as it stands. The formulas live in
`backend/src/game/calculations.js`; the build flow lives in
`backend/src/game/buildFlow.js` and `backend/src/routes/characters.routes.js`;
the lists the story steps pick from are in
`backend/src/game/data/characterOptions.js`.
Related: [WEAPONS.md](WEAPONS.md), [SPELLS.md](SPELLS.md),
[ITEMS.md](ITEMS.md), [ENCOUNTERS.md](ENCOUNTERS.md),
[MONSTERS.md](MONSTERS.md) and [NPCS.md](NPCS.md) cover those subjects in
full. `GAME_RULES_REFERENCE.md` and `ROLL_YOUR_CHARACTER.md` are the original
specifications the app was first built from; where they differ from this
document (the story steps, gear levels, picking a motivation), this document
is the current behaviour.
## Contents
1. [The basics](#1-the-basics)
2. [Creating a character](#2-creating-a-character)
3. [Species](#3-species)
4. [Classes](#4-classes)
5. [Ability scores and modifiers](#5-ability-scores-and-modifiers)
6. [Level and XP](#6-level-and-xp)
7. [Hit points](#7-hit-points)
8. [Other derived stats](#8-other-derived-stats)
9. [Saving throws and skills](#9-saving-throws-and-skills)
10. [Gear pools, starting options and gear levels](#10-gear-pools-starting-options-and-gear-levels)
11. [Weapons and spells](#11-weapons-and-spells)
12. [Inventory and money](#12-inventory-and-money)
13. [Story fields, location and notes](#13-story-fields-location-and-notes)
14. [Where characters appear](#14-where-characters-appear)
15. [Characters in encounters](#15-characters-in-encounters)
16. [Copying to another campaign](#16-copying-to-another-campaign)
17. [Permissions](#17-permissions)
18. [Deleting](#18-deleting)
19. [What is not modelled](#19-what-is-not-modelled)
20. [Everything the builder offers](#20-everything-the-builder-offers)
---
## 1. The basics
- A character belongs to **exactly one campaign**. Its weapons, spells, items
and location all come from that campaign's own lists.
- A character has an **owner** (a user who is a member of the campaign) and a
**creator** (whoever started it — the owner, or the DM on their behalf).
- A user can have **any number of characters** in a campaign, and characters in
many campaigns. Nothing limits it to one each.
- A character is either **being built** or **complete**. Only a complete
character has a sheet, quick stats, can join an encounter, or can be copied.
## 2. Creating a character
Any campaign member can start a character for themselves from the campaign
page ("Roll a New Character"). The DM can also create one on behalf of another
member through the API (the page itself always creates for the logged-in user).
A new character starts with the campaign's **starting gold** (recorded as the
first entry in its money log) and goes straight into the builder.
### Dice mode
Chosen once, before the first roll, and then locked:
| Mode | How rolls happen |
|---|---|
| Digital (default) | The server rolls using a cryptographic random source. |
| Physical | The player rolls real dice and types the results in; the server checks each value is in range for the die. |
### The build steps
| # | Step | What happens |
|---|---|---|
| 1 | Species | Roll a d6. Each result offers a pair to choose from; a 6 is a wildcard (any species). |
| 2 | Class | Roll a d8. Each result offers a pair; a 7 means roll again; an 8 is a wildcard (any class). |
| 3 | Motivation | Pick a story hook from a list of six, or press "Surprise me". No dice: it changes no numbers. Skipped entirely if the campaign has "skip the motivation step" on. |
| 4 | Ability scores | Roll six scores (4d6, drop the lowest die, sum the other three), then assign each score to one ability. |
| 5 | Skills | Skills are picked at random from the class's list the moment scores are locked in. The DM can override them at this step. |
| 6 | Special abilities | See what the species and class grant automatically, then pick two talents from a list. |
| 7 | Background | Answer five questions (upbringing, home, turning point, personality, flaw) by picking from lists. |
| 8 | Appearance | Pick build, height, hair, eyes, skin, up to two distinguishing features, and usual clothing. |
| 9 | Equipment | Pick starting weapons, items and spells from the ones the DM has marked as starting options, within the campaign's limits. |
| — | Finalize | Everything is written to the character, saving throw proficiencies are set from the class, and current HP is set to max. |
**Species roll (d6)**
| Roll | Choose between |
|---|---|
| 1 | Human, Half-Elf |
| 2 | Elf, Gnome |
| 3 | Dwarf, Halfling |
| 4 | Dragonborn, Tiefling |
| 5 | Half-Orc, Orc |
| 6 | Wildcard — any species |
**Class roll (d8)**
| Roll | Choose between |
|---|---|
| 1 | Fighter, Barbarian |
| 2 | Rogue, Ranger |
| 3 | Wizard, Sorcerer |
| 4 | Cleric, Paladin |
| 5 | Bard, Warlock |
| 6 | Druid, Monk |
| 7 | Roll again |
| 8 | Wildcard — any class |
**Motivations to pick from**
- Revenge for a past wrong
- Seeking fortune or wealth
- Protecting someone they love
- Redemption for a past mistake
- Driven by curiosity or knowledge
- Duty or oath to a cause or order
### The story steps
Steps 6 to 8 never involve typing. The player picks from fixed lists, and the
app writes the text that appears on the sheet. Each has a "Surprise me" button
that picks at random, which the player can then adjust.
**Special abilities** are listed one per line as "Name — what it does", in
this order:
1. What the **species** grants automatically (for example Dwarf: Darkvision,
Dwarven Resilience).
2. What the **class** grants automatically at level 1 (for example Barbarian:
Rage, Unarmored Defense).
3. The **two talents** the player picked from a list of fourteen (Alert, Keen
Eye, Silver Tongue, Field Medic, Tough as Nails, …).
These are table rules written in plain words for the DM to apply. The app
does not calculate anything from them: Rage does not add damage by itself, and
Unarmored Defense does not change AC unless the DM sets the armor bonus.
**Background** is five lines, one per question:
| Question | Picks |
|---|---|
| Upbringing — what were you before? | 1 of 14 (Soldier, Acolyte, Criminal, Noble, Scholar, Farmer, …) |
| Home — where did you grow up? | 1 of 8 |
| Turning point — what set you on the road? | 1 of 9 |
| Personality — how do others describe you? | 1 or 2 of 14 |
| Flaw — what gets you into trouble? | 1 of 9 |
**Appearance** is built the same way from build, height, hair, eyes, skin,
distinguishing features (none, one or two) and usual clothing.
Once the character is finalized, **the player cannot change any of the three**.
The DM can edit all of them on the sheet, which is how new abilities are added
as a character levels up. Every option is listed in
[section 20](#20-everything-the-builder-offers).
### Choosing versus committing
- A **dice roll is final** the moment it is made.
- A **choice is not**: on every step, clicking an option only selects it. The
live preview beside the steps shows what it would do, and the player can
switch as often as they like. Nothing is saved until they press **Next**.
- **Back** returns to the previous step so its choice can be changed. The
step comes back with the same dice roll, the same options and the earlier
pick still selected; nothing is re-rolled. Starting equipment is the one
thing that has to be confirmed again on the way forward.
- Skills are drawn once per class. Going back and forward again, or switching
class and switching back, gives the same skills each time.
- Back stops working once the character is finalized.
The builder explains itself as it goes: each step opens with a line on what it
is for, every species and class option is a card describing what it is like to
play and what it changes, and the ⓘ icons explain each number. On the ability
score step, "Suggest for me" puts the best rolls where the chosen class needs
them, and the player can still rearrange them.
### Rules the builder enforces
- Every die is rolled once: species, class (unless it landed on "roll again")
and ability scores. Going back never gives a fresh roll.
- Special abilities, background and appearance accept only entries from their
lists, in the numbers each question allows.
- A **Half-Elf** must pick two different abilities (not Charisma) for its
flexible +1/+1.
- All six rolled scores must be assigned, one per ability.
- Only pool entries the DM has marked as a **starting option** can be picked
(section 10).
- **Starting weapons and items together** cannot exceed the campaign's
starting item count.
- **Starting spells** cannot exceed the campaign's starting spell count, only
a class with a spellcasting ability can pick any, and a new (level 1)
character can only start with cantrips and level 1 spells.
- Starting weapons and items arrive at **gear level 1**, so one that starts at
a higher level (section 10) cannot be picked even if it is ticked.
## 3. Species
Species sets ability bonuses and walking speed, which feed the calculations,
and grants special abilities, which are written on the sheet for the DM to
apply (section 2, "The story steps").
| Species | Ability bonuses | Speed | Special abilities granted |
|---|---|---|---|
| Human | +1 to all six | 30 | Versatile |
| Half-Elf | +2 CHA, and +1 to two others of the player's choice | 30 | Darkvision, Fey Ancestry |
| Elf | +2 DEX | 30 | Darkvision, Fey Ancestry, Trance |
| Gnome | +2 INT | 25 | Darkvision, Gnome Cunning |
| Dwarf | +2 CON | 25 | Darkvision, Dwarven Resilience |
| Halfling | +2 DEX | 25 | Lucky, Brave |
| Dragonborn | +2 STR, +1 CHA | 30 | Breath Weapon, Draconic Resistance |
| Tiefling | +2 CHA, +1 INT | 30 | Darkvision, Hellish Resistance |
| Half-Orc | +2 STR, +1 CON | 30 | Darkvision, Relentless Endurance |
| Orc | +2 STR, +1 CON | 30 | Darkvision, Aggressive |
## 4. Classes
Class sets the hit die, the two saving throw proficiencies, the spellcasting
ability (if any), and which skills can be picked. Each class also grants two
special abilities at level 1, written on the sheet for the DM to apply:
| Class | Special abilities granted |
|---|---|
| Barbarian | Rage, Unarmored Defense |
| Bard | Bardic Inspiration, Jack of Many Tales |
| Cleric | Divine Domain, Healing Hands |
| Druid | Druidic, Nature's Voice |
| Fighter | Second Wind, Fighting Style |
| Monk | Martial Arts, Unarmored Defense |
| Paladin | Divine Sense, Lay on Hands |
| Ranger | Favored Enemy, Natural Explorer |
| Rogue | Sneak Attack, Thieves' Cant |
| Sorcerer | Innate Magic, Wild Talent |
| Warlock | Otherworldly Patron, Pact Magic |
| Wizard | Spellbook, Arcane Recovery |
The numbers each class sets:
| Class | Hit die | Saves | Spellcasting | Skills |
|---|---|---|---|---|
| Barbarian | d12 | STR, CON | — | 2 from Animal Handling, Athletics, Intimidation, Nature, Perception, Survival |
| Bard | d8 | DEX, CHA | CHA | 3 from any skill |
| Cleric | d8 | WIS, CHA | WIS | 2 from History, Insight, Medicine, Persuasion, Religion |
| Druid | d8 | INT, WIS | WIS | 2 from Arcana, Animal Handling, Insight, Medicine, Nature, Perception, Religion, Survival |
| Fighter | d10 | STR, CON | — | 2 from Acrobatics, Animal Handling, Athletics, History, Insight, Intimidation, Perception, Survival |
| Monk | d8 | STR, DEX | — | 2 from Acrobatics, Athletics, History, Insight, Religion, Stealth |
| Paladin | d10 | WIS, CHA | CHA | 2 from Athletics, Insight, Intimidation, Medicine, Persuasion, Religion |
| Ranger | d10 | STR, DEX | WIS | 3 from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, Survival |
| Rogue | d8 | DEX, INT | — | 4 from Acrobatics, Athletics, Deception, Insight, Intimidation, Investigation, Perception, Performance, Persuasion, Sleight of Hand, Stealth |
| Sorcerer | d6 | CON, CHA | CHA | 2 from Arcana, Deception, Insight, Intimidation, Persuasion, Religion |
| Warlock | d8 | WIS, CHA | CHA | 2 from Arcana, Deception, History, Intimidation, Investigation, Nature, Religion |
| Wizard | d6 | INT, WIS | INT | 2 from Arcana, History, Insight, Investigation, Medicine, Religion |
## 5. Ability scores and modifiers
The six abilities are Strength, Dexterity, Constitution, Intelligence, Wisdom
and Charisma.
- The **rolled score** is what the dice gave (3–18). This is what is stored.
- The **final score** is the rolled score plus the species bonus. This is what
the sheet shows and what every calculation uses.
- The **modifier** is `(final score − 10) ÷ 2`, rounded down.
| Final score | Modifier |
|---|---|
| 8–9 | −1 |
| 10–11 | 0 |
| 12–13 | +1 |
| 14–15 | +2 |
| 16–17 | +3 |
| 18–19 | +4 |
| 20 | +5 |
Ability scores cannot be changed after the build is finalized.
## 6. Level and XP
- Every character starts at **level 1**. The range is 1 to 20.
- Levelling is **manual**: the DM changes the Level field on the sheet. Only
the DM can change level or XP.
- **XP** is stored but no screen shows or edits it, and it does not drive level.
Level feeds two things:
**Proficiency bonus** — `2 + (level − 1) ÷ 4`, rounded down.
| Level | Proficiency bonus |
|---|---|
| 1–4 | +2 |
| 5–8 | +3 |
| 9–12 | +4 |
| 13–16 | +5 |
| 17–20 | +6 |
**Max HP** — see the next section.
## 7. Hit points
**Max HP** is calculated, never stored:
- Level 1: the full hit die + CON modifier.
- Each level after: the die's fixed average (half the die, plus 1) + CON modifier.
| Hit die | Level 1 | Each later level |
|---|---|---|
| d6 | 6 + CON | 4 + CON |
| d8 | 8 + CON | 5 + CON |
| d10 | 10 + CON | 6 + CON |
| d12 | 12 + CON | 7 + CON |
Example: a Fighter (d10) with CON 14 (+2) has 12 at level 1 and 28 at level 3.
**Current HP** is a stored number, separate from max:
- Set to max when the build is finalized, and when a character is copied.
- Changed with the Damage and Heal buttons on the sheet, or by the DM in an
encounter (section 15). Both change the same number.
- Always kept between **0 and max**: healing stops at max and damage stops at 0.
- A level-up raises max but leaves current HP where it was; the DM clicks
"Recompute Max HP" to set current HP to the new max (a full heal). If a
level change lowers max below current HP, current HP drops to the new max.
**Temp HP** is a tracked number shown beside HP. Damage is not taken from it
automatically.
## 8. Other derived stats
| Stat | Formula |
|---|---|
| Armor Class | 10 + DEX modifier + armor bonus |
| Initiative | DEX modifier |
| Speed | Species speed, unless a speed override is set |
| Passive Perception | 10 + Perception skill bonus |
| Hit dice | One per level, of the class's die size (shown only; not spent or tracked) |
| Spell save DC | 8 + proficiency bonus + spellcasting ability modifier |
| Spell attack bonus | Proficiency bonus + spellcasting ability modifier |
**Armor bonus** is a single number typed in on the sheet to stand for armor and
shield. There are no armor items, and equipping an inventory item does not
change AC.
**Speed override** exists in the data and API (DM only) but has no field on
the sheet.
## 9. Saving throws and skills
**Saving throws:** ability modifier, plus proficiency bonus if the class is
proficient in that save. Fixed by class; not editable.
**Skills:** governing ability modifier, plus proficiency bonus if proficient,
or double the proficiency bonus with expertise.
| Ability | Skills |
|---|---|
| STR | Athletics |
| DEX | Acrobatics, Sleight of Hand, Stealth |
| INT | Arcana, History, Investigation, Nature, Religion |
| WIS | Animal Handling, Insight, Medicine, Perception, Survival |
| CHA | Deception, Intimidation, Performance, Persuasion |
Skill proficiencies are drawn at random during the build (step 5) and cannot
be changed from the sheet afterwards. Expertise is supported by the
calculations but is only ever set if the DM supplies it during step 5.
## 10. Gear pools, starting options and gear levels
Each campaign has three **pools**, managed by the DM on the campaign page:
| Pool | What an entry holds | How entries are added |
|---|---|---|
| Weapons | Name, base damage dice, damage type, attack ability, starting level, growth | By hand, or from the built-in library |
| Spells | Name, level, school, optional damage | By hand, or from the built-in library (which supplies a default damage) |
| Items | Name, optional description, optional base dice, starting level, growth | By hand |
Everything a character carries or knows is an entry from its campaign's pools.
[WEAPONS.md](WEAPONS.md), [SPELLS.md](SPELLS.md) and [ITEMS.md](ITEMS.md)
describe each pool in full; this section is the part that matters to a
character.
- **Only the DM** adds to a pool, edits or removes entries, gives entries to
characters from the pool, changes how many a character has, levels them up,
and takes them away.
- **The owning player** can tick and untick Equipped (weapons, items) and
Prepared (spells) on gear their character can use, and can **give** what
their character holds to another character (section 12).
- Removing an entry from a pool removes it from every character holding it.
**Starting options.** Every pool entry has a "Starting" tick box. Only ticked
entries are offered in the equipment step of the builder (step 9); everything
else has to be given out by the DM later. New entries are **not** starting options until the DM
ticks them.
### Gear levels
This is a house rule of this app, not standard D&D.
**Each weapon or item a character holds has its own level, 1 to 9.** The
level belongs to that character's copy, not to the pool entry, so two
characters can hold spears of different levels. Only the DM changes it, with
the level picker next to it on the sheet. A character holds one stack of each
weapon or item, and the whole stack shares one level.
**Starting level.** Each weapon and item in a pool has a level it starts at —
1 for most, higher for gear that should only exist later (a greatsword that
starts at level 3, say). A copy is given at that level unless the DM picks a
higher one, and can never go below it. If the DM later raises an entry's
starting level, copies below it are lifted to it and unequipped.
**Who can use what.** A character can use gear of their own level or lower:
| Character level | Can use gear of level |
|---|---|
| 1 | 1 |
| 2 | 1–2 |
| 3 | 1–3 |
| … | … |
Gear above the character's level can still be **held**, but it shows
"Requires level N", cannot be equipped, and is left out of quick stats and
encounters. If the DM levels a piece of gear past its holder, or lowers the
character's level, anything now out of reach is unequipped automatically.
**How damage grows.** The dice in the pool are the damage at the gear's
**starting level**. Each level above that moves the dice up a fixed ladder, in
the smallest steps the dice allow:
| Rung | Dice | Average |
|---|---|---|
| 1 | 1d4 | 2.5 |
| 2 | 1d6 | 3.5 |
| 3 | 1d8 | 4.5 |
| 4 | 1d10 | 5.5 |
| 5 | 1d12 | 6.5 |
| 6 | 2d6 | 7 |
| 7 | 1d6+1d8 | 8 |
| 8 | 2d8 | 9 |
| 9 | 1d8+1d10 | 10 |
| 10 | 2d10 | 11 |
| 11 | 1d10+1d12 | 12 |
| 12 | 2d12 | 13 |
| 13 | 3d8 | 13.5 |
| 14 | 2d8+1d10 | 14.5 |
| … | and so on, adding a die each time the current dice max out | |
Every rung is +1 average damage over the last, or +0.5 where a die is added.
Each weapon and item has a **growth** setting that says how many rungs it
climbs per level:
| Growth | Rungs per level | A 1d6 weapon at levels 1, 2, 3, 4 | At level 9 |
|---|---|---|---|
| Standard | 1 | 1d6, 1d8, 1d10, 1d12 | 2d10 |
| Powerful | 2 | 1d6, 1d10, 2d6, 2d8 | 1d10+2d12 |
| Legendary | 3 | 1d6, 1d12, 2d8, 1d10+1d12 | 4d12 |
A 2d6 greatsword that starts at level 3 with Standard growth is 2d6 at level
3, 1d6+1d8 at level 4, 2d8 at level 5, and so on.
- At its starting level, gear always shows the dice exactly as the DM typed
them.
- Dice that are not on the ladder (for example `2d4+2` or `1d4+1`) start
climbing from the highest rung that is not stronger than them: `2d4+2`
(average 7) continues from 2d6, so it becomes 1d6+1d8 one level up.
- Dice the app cannot read (free text such as "special") never change.
- Level changes the **dice only**. The attack bonus and the flat damage bonus
still come from the character's ability scores and proficiency bonus.
**Spells** do not have a level of their own to raise. The classic spell level
is the requirement: a character must be at least that level to prepare or use
the spell, and cantrips are open to everyone. A spell can carry a damage
value, which is fixed.
## 11. Weapons and spells
A character holds weapons, each with a quantity, a level and an equipped flag.
| Number | Formula |
|---|---|
| Attack bonus | Ability modifier + proficiency bonus |
| Damage | The weapon's dice at the held copy's level (section 10) + ability modifier |
The ability depends on the weapon: Strength, Dexterity, or "finesse" (whichever
of the two is higher).
- Characters are treated as **proficient with every weapon**.
- Giving a weapon the character already has increases its quantity; the
stack keeps the level it has.
A character knows spells, each with a prepared flag.
- The sheet's "Spells Known" card only appears when the campaign has at least
one spell.
- After the build, the DM can grant spells to **any class**; the "must be a
spellcaster" rule applies only to starting spells.
- A spell above the character's level can be known but not prepared, and is
left out of encounters (section 10).
- A spell's damage, if it has one, is shown beside it. It is fixed.
- Spell save DC and attack bonus are shown only for classes with a
spellcasting ability.
- There are no spell slots.
## 12. Inventory and money
**Inventory** is the items a character holds from the campaign's item pool,
each with a quantity, a level and an equipped flag. Giving an item the
character already has adds to the stack. Items have no effect on any stat. An
item can carry optional dice (a potion's healing, a bomb's damage) that grow
with its level exactly like a weapon's (section 10).
**Money** is a single gold balance with a log behind it.
- The sheet's Money card shows the balance and every change to it: the amount,
what it was for, who recorded it, when, and the balance afterwards.
- The **owning player and the DM** can both record a gain or a spend. Other
members can see the log but not add to it.
- The balance **cannot go below zero**; a spend larger than the balance is
refused.
- The log is the only way the balance changes. Entries cannot be edited or
deleted; to correct a mistake, record the opposite entry.
- There is one currency (gold). Silver, copper and so on are not tracked.
### Giving to another character
The "Give to Another Character" card on the sheet lets a character's owner
(or the DM) hand over something the character holds to another finished
character in the same campaign.
| What | How much | What happens |
|---|---|---|
| Gold | Any amount up to the balance | Both money logs get an entry: "Gave to Bo" and "Received from Aria" |
| A weapon or item | Some or all of the stack | It leaves the giver's stack and joins the recipient's |
| A spell | The spell | The giver no longer knows it; the recipient does |
- **Giving always moves.** Nothing is copied: whatever is given, the giver no
longer has. This keeps the DM in control of how much gear, gold and magic
exists while letting the party share it out.
- A weapon or item arrives at the **giver's level**, unequipped. If the
recipient already holds some, theirs simply grows and keeps its own level.
- The recipient may be too low a level to use it. They hold it anyway, marked
"Requires level N" (section 10).
- A spell cannot be given to someone who already knows it.
- The recipient does not have to accept; it just arrives.
## 13. Story fields, location and notes
| Field | Who can see it | Who can edit it |
|---|---|---|
| Motivation | Everyone in the campaign | Set during the build only |
| Background | Everyone in the campaign | Built from picks; afterwards the DM only |
| Appearance | Everyone in the campaign | Built from picks; afterwards the DM only |
| Special abilities | Everyone in the campaign (sheet and quick stats) | Built from picks; afterwards the DM only |
| Private notes | **The owner only — not even the DM** | Owner only |
| Current location | Everyone in the campaign | DM picks it on the sheet, from the campaign's locations |
**Character notes** are a separate, running log on the sheet:
- Any campaign member can post a note on any character.
- Notes posted from the sheet are shared with the whole campaign.
- The API also supports DM-only notes, visible to the DM and the author.
- Only the author can delete a note.
## 14. Where characters appear
| Screen | What it shows |
|---|---|
| Campaign page | Character list: species, class, level, HP, AC, location. Players see their own first, then the rest of the party. |
| Party overview | One table of every character with an HP bar, AC, gold and location. |
| Character sheet | Everything in this document. |
| Character builder | A character that is still being built (section 2). |
| Quick stats drawer | A combat summary: HP, AC, initiative, speed, proficiency bonus, spellcasting numbers, special abilities, and each weapon's attack and damage. |
| Encounter page | Characters taking part in a battle or quest (next section). |
Changes are pushed live to everyone who has the campaign open, so sheets and
lists update without a refresh.
## 15. Characters in encounters
[ENCOUNTERS.md](ENCOUNTERS.md) covers encounters in full; this is the part
that concerns characters.
An encounter is a scene the DM runs. It has a **mode**:
| Mode | What it is for | What the screen shows |
|---|---|---|
| Battle | A fight | Everyone in initiative order, a round counter, and whose turn it is |
| NPC quest | A scene built around people and an objective | The NPCs, the party and any creatures as separate groups; no rounds or turns |
The DM can switch an encounter's mode at any time. Every encounter also has a
description shown to everyone (the scene or the quest), and DM notes that
players never receive.
**Who can be in one**
- **Characters.** A character's HP in an encounter **is its sheet HP**: damage
or healing the DM applies there changes the sheet, and a change on the sheet
shows in the encounter. Max HP always comes from the sheet.
- **Monsters**, from the campaign's monster list ([MONSTERS.md](MONSTERS.md)).
Each keeps its own HP per encounter, held between 0 and its max.
- **NPCs**, from the campaign's NPC list ([NPCS.md](NPCS.md)). An NPC has a
name, role, attitude (friendly, neutral or hostile), a description for
players, and DM-only notes. Combat stats are optional; an NPC without hit
points simply has no health bar.
**What each side sees**
| | DM | Players |
|---|---|---|
| A character | Level, species, class, HP, AC, speed, initiative bonus, passive perception, proficiency bonus, ability scores, saves, usable weapons and spells, special abilities | The same |
| A monster | The full stat block: AC, speed, attack, damage, challenge, ability scores, trait, notes | Name, HP and conditions only |
| An NPC | Everything, including DM notes and stats | Name, role, attitude and description |
| Rewards | All of them | Only the ones that have been awarded |
| DM notes | Yes | Never |
**Running a battle**
- Only the DM adds or removes combatants and changes HP, initiative or
conditions. Initiative is typed in; the app does not roll it.
- "Begin Battle" puts the highest initiative on turn. "Next Turn" passes the
turn down the order, and going past the last combatant starts the next
round. "Next Round" jumps straight to the top of the next round.
- A combatant at 0 HP is marked Down but still takes its turn in the order.
- Conditions (Prone, Poisoned, …) are picked from a list and removed with a
click.
**Rewards**
The DM can line up rewards on any encounter: an amount of gold, or a weapon
or item from the campaign pools at a chosen level and quantity.
- A reward does nothing until the DM **awards** it, and it can only be
awarded once.
- Awarding gold adds a "Reward: <encounter name>" entry to the character's
money log. Gold can also be **split** evenly between the characters in the
encounter; any remainder goes one gold each down the initiative order.
- Awarding a weapon or item adds it to what the character holds, at the
reward's level. A character below that level holds it but cannot use it yet
(section 10).
- A reward can go to any character in the campaign, not only those in the
encounter.
- Removing a reward from the list does not take back anything already awarded.
## 16. Copying to another campaign
A complete character can be copied into another campaign from the "Copy to
Another Campaign" card on its sheet.
- **Who:** the owner, or the DM of the character's campaign. You must already
be a member of the target campaign.
- **Copied:** name, species, class, level, XP, ability scores, skill and save
proficiencies, armor bonus, speed override, special abilities, gold (as a
single opening entry in the copy's money log), background, appearance,
motivation, inventory, weapons and spells, with each weapon's and item's
level.
- **Not copied:** location, character notes and encounter entries.
- The copy arrives at **full HP** with no temp HP.
- The copy is **owned by whoever made it**. If a DM copies a player's
character, the DM owns the copy and the player's private notes are not
carried over.
- **Weapons, spells and items** are matched to the target campaign's pools by
name (ignoring case). Any that are missing are added to the target's pool,
never as starting options.
- The copy is independent: the original is untouched and the two never sync.
## 17. Permissions
| Action | Owner | DM of the campaign | Other members |
|---|---|---|---|
| View the sheet and quick stats | Yes | Yes | Yes |
| View private notes | Yes | No | No |
| Run the builder | Yes | Yes | No |
| Change HP, temp HP, armor bonus | Yes | Yes | No |
| Edit special abilities, background, appearance (after the build) | No | Yes | No |
| Tick Equipped / Prepared | Yes | Yes | No |
| Give, remove or re-count weapons, spells and items | No | Yes | No |
| Level a weapon or item up or down | No | Yes | No |
| Record a gold gain or spend | Yes | Yes | No |
| Give gold, weapons, items or spells to another character | Yes | Yes | No |
| View the money log | Yes | Yes | Yes |
| Change level, XP, location or speed override | No | Yes | No |
| Post a character note | Yes | Yes | Yes |
| Copy to another campaign | Yes | Yes | No |
| Delete the character | No | Yes | No |
People outside the campaign cannot see a character at all.
## 18. Deleting
- Only the DM can delete a character (from the campaign page).
- Deleting removes its proficiencies, inventory, weapon and spell assignments,
money log and notes. Encounter entries that pointed at it stay in the
encounter, with the name and the last HP seen, but lose everything else.
- Deleting a **campaign** deletes every character in it.
## 19. What is not modelled
Use special abilities (via the DM), items or notes for these; the app does no
calculations for them.
- The effects of special abilities: species traits and class features are
written on the sheet for the DM to apply, but nothing is calculated from them
- Class features beyond level 1 (the DM adds them to the sheet by hand),
subclasses and multiclassing
- Spell slots, spell preparation limits and concentration
- Ability score increases and feats on level-up
- Armor and shields as items (only the single armor bonus number)
- Weapon proficiency (everyone is proficient with everything)
- Rolling attacks, damage, saves or checks for a character (the dice roller,
bottom left of every page, is a plain roller that knows nothing about the
sheet)
- Death saves, conditions on the sheet, and resting
- Automatic levelling from XP
- Alignment, languages, tool proficiencies and backgrounds-as-rules
- Encumbrance and item weight
- Currencies other than gold, and item prices
## 20. Everything the builder offers
Every motivation, special ability, talent, background answer and appearance
answer a player can end up with.
This list is written from the app's own data by `npm run docs:lists` (in `/backend`). Re-run it after changing the data; do not edit the list by hand.
<!-- BEGIN GENERATED: builder-lists -->
### Motivations
- Revenge for a past wrong
- Seeking fortune or wealth
- Protecting someone they love
- Redemption for a past mistake
- Driven by curiosity or knowledge
- Duty or oath to a cause or order
### Special abilities granted by species
| Species | Abilities |
|---|---|
| Human | **Versatile** — Once per day, reroll one skill check you just failed and keep the new result. |
| Half-Elf | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Fey Ancestry** — Advantage on saves against being charmed, and magic cannot put you to sleep. |
| Elf | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Fey Ancestry** — Advantage on saves against being charmed, and magic cannot put you to sleep.<br>**Trance** — You do not sleep. Four hours of meditation rests you as well as a full night. |
| Gnome | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Gnome Cunning** — Advantage on Intelligence, Wisdom and Charisma saves against magic. |
| Dwarf | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Dwarven Resilience** — Advantage on saves against poison, and poison damage against you is halved. |
| Halfling | **Lucky** — When you roll a 1 on a d20 for an attack, check or save, reroll it and use the new roll.<br>**Brave** — Advantage on saves against being frightened. |
| Dragonborn | **Breath Weapon** — Once per rest, exhale destructive energy: creatures in a 15-foot cone take 2d6 damage (Dexterity save for half).<br>**Draconic Resistance** — Damage of your breath weapon’s type against you is halved. |
| Tiefling | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Hellish Resistance** — Fire damage against you is halved. |
| Half-Orc | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Relentless Endurance** — Once per day, when you would drop to 0 hit points, drop to 1 instead. |
| Orc | **Darkvision** — See in dim light within 60 feet as if it were bright, and in darkness as if it were dim.<br>**Aggressive** — As a bonus action, move up to your speed toward an enemy you can see. |
### Special abilities granted by class
| Class | Abilities |
|---|---|
| Barbarian | **Rage** — Twice per day, for one minute: +2 melee damage, advantage on Strength checks and saves, and physical damage against you is halved.<br>**Unarmored Defense** — Without armor, add your Constitution modifier to your AC (ask your DM to set your armor bonus). |
| Bard | **Bardic Inspiration** — A few times per day, as a bonus action, give an ally a d6 to add to one attack, check or save.<br>**Jack of Many Tales** — You have heard a story about nearly everything: ask your DM for one useful rumour per session. |
| Cleric | **Divine Domain** — Choose with your DM what your god stands for (life, light, war, knowledge…). It shapes the favours you can ask.<br>**Healing Hands** — Once per rest, touch a creature to restore 1d8 + your Wisdom modifier hit points. |
| Druid | **Druidic** — You know the secret language of druids and can leave hidden messages in it.<br>**Nature’s Voice** — You can calm and make simple requests of ordinary animals. |
| Fighter | **Second Wind** — Once per rest, as a bonus action, recover 1d10 + your level hit points.<br>**Fighting Style** — Choose one with your DM: +2 to ranged attacks, +1 AC in armor, or +2 damage with a one-handed weapon. |
| Monk | **Martial Arts** — Your unarmed strikes deal 1d4 damage and can use Dexterity. After attacking, make one unarmed strike as a bonus action.<br>**Unarmored Defense** — Without armor, add your Wisdom modifier to your AC (ask your DM to set your armor bonus). |
| Paladin | **Divine Sense** — A few times per day, sense any celestial, fiend or undead within 60 feet.<br>**Lay on Hands** — A pool of healing equal to 5 × your level per day, spent by touch however you like. |
| Ranger | **Favored Enemy** — Choose a kind of creature with your DM. Advantage on checks to track them and to recall what you know about them.<br>**Natural Explorer** — In the wild you cannot get lost, you find twice as much food, and difficult terrain does not slow your group. |
| Rogue | **Sneak Attack** — Once per turn, deal an extra 1d6 damage to a target you have advantage against, or that has one of your allies next to it.<br>**Thieves’ Cant** — You know the secret slang and signs of the criminal underworld. |
| Sorcerer | **Innate Magic** — Your magic comes from within: you need no spellbook and no prayers.<br>**Wild Talent** — Once per day, reroll the damage dice of one spell and keep the better result. |
| Warlock | **Otherworldly Patron** — Choose with your DM who granted your power, and what they want in return.<br>**Pact Magic** — Your magic returns after a short rest, not only a long one. |
| Wizard | **Spellbook** — Your spells are written in a book. You can copy new spells into it when you find them.<br>**Arcane Recovery** — Once per day, after a short rest, regain some of your spent magic. |
### Talents (pick 2)
| Talent | What it does |
|---|---|
| Alert | You cannot be surprised while you are awake. |
| Keen Eye | Advantage on checks to spot hidden doors, traps and things out of place. |
| Silver Tongue | Once per day, reroll a Persuasion or Deception check and keep the better result. |
| Light Sleeper | You wake at the slightest sound, and keeping watch does not tire you. |
| Iron Stomach | Advantage on saves against spoiled food, strong drink and swallowed poisons. |
| Animal Friend | Ordinary animals are calm around you unless provoked. |
| Quick Hands | Once per turn, draw, stow or pick up an object without using your action. |
| Sure-Footed | Advantage on checks to keep your balance or avoid being knocked down. |
| Linguist | You speak two extra languages of your choice, agreed with your DM. |
| Field Medic | Steadying a dying creature is automatic for you; no roll needed. |
| Strong Back | You can carry, lift and drag twice as much as your size suggests. |
| Good Memory | You recall exactly anything you have seen or heard in the last month. |
| Streetwise | In any town you can find a place to sleep, a rumour, and someone who buys things without asking questions. |
| Tough as Nails | Once per day, shrug off a blow: reduce one instance of damage by 1d6. |
### Background questions
**Upbringing** — What were you before you became an adventurer? (pick 1)
| Option | What it adds |
|---|---|
| Soldier | Served in an army or militia, and still thinks in terms of orders and watches. |
| Acolyte | Raised in a temple, tending shrines and copying scripture. |
| Criminal | Made a living outside the law, and knows who to ask for what. |
| Noble | Born to wealth and a family name that opens doors — and makes enemies. |
| Scholar | Spent years among books, chasing answers to old questions. |
| Farmer | Worked the land from dawn to dusk, and knows the value of a good harvest. |
| Sailor | Grew up on deck, at home with rope, salt and bad weather. |
| Guild artisan | Learned a craft in a workshop and takes pride in good work. |
| Entertainer | Sang, juggled or acted for coin in taverns and market squares. |
| Outlander | Raised far from towns, among hunters, herders or nomads. |
| Urchin | Grew up alone on city streets, surviving on wits and quick feet. |
| Hermit | Lived apart from the world for years, with only thoughts for company. |
| Merchant | Travelled the trade roads buying low and selling high. |
| Village healer | Set bones, brewed remedies and sat with the sick. |
**Home** — Where did you grow up? (pick 1)
| Option | What it adds |
|---|---|
| A crowded city | Noise, alleys and a thousand strangers. |
| A small village | Everyone knew everyone, and nothing stayed secret. |
| A harbour town | Ships, gulls and news from far away. |
| A mountain hold | Thin air, stone halls and long winters. |
| Deep in the forest | Under old trees, far from any road. |
| A frontier fort | The last wall before the wild. |
| On the road | Never in one place long enough to call it home. |
| A remote monastery | Bells, silence and routine. |
**Turning point** — What set you on the road? (pick 1)
| Option | What it adds |
|---|---|
| Lost someone dear | And have not been the same since. |
| Was betrayed | By someone they trusted completely. |
| Survived a disaster | Fire, flood, plague or war — and walked away when others did not. |
| Found a secret | Something they were never meant to see. |
| Owes a debt | One that cannot be repaid by staying home. |
| Was cast out | Rightly or wrongly, there is no going back. |
| Was saved by a stranger | And means to pass the favour on. |
| Heard a calling | A dream, a sign or a voice that would not let them rest. |
| Could not stand the quiet | An ordinary life was never going to be enough. |
**Personality** — How do others describe you? Pick one or two. (pick 1 to 2)
| Option | What it adds |
|---|---|
| Brave | — |
| Cautious | — |
| Curious | — |
| Kind | — |
| Hot-headed | — |
| Sarcastic | — |
| Loyal | — |
| Honest to a fault | — |
| Cheerful | — |
| Quiet | — |
| Proud | — |
| Superstitious | — |
| Generous | — |
| Stubborn | — |
**Flaw** — What gets you into trouble? (pick 1)
| Option | What it adds |
|---|---|
| Greedy | Cannot walk past treasure. |
| Reckless | Acts first and thinks later. |
| Holds grudges | Never forgets a slight. |
| Too trusting | Believes a good story. |
| Loses their nerve | When it matters most. |
| Boastful | Promises more than they can deliver. |
| Secretive | Keeps things even from friends. |
| Soft-hearted | Cannot refuse someone in need. |
| Short temper | Easily provoked. |
### Appearance questions
**Build** — What shape are you? (pick 1)
| Option | What it adds |
|---|---|
| Slight | — |
| Lean | — |
| Average | — |
| Stocky | — |
| Muscular | — |
| Heavyset | — |
**Height** — For your species, are you… (pick 1)
| Option | What it adds |
|---|---|
| Short | — |
| Average height | — |
| Tall | — |
| Towering | — |
**Hair** — Hair (or what you have instead). (pick 1)
| Option | What it adds |
|---|---|
| Black | — |
| Brown | — |
| Blonde | — |
| Red | — |
| Grey | — |
| White | — |
| An unusual colour | — |
| Bald | — |
| None — scales, horns or crest | — |
**Eyes** — Eye colour. (pick 1)
| Option | What it adds |
|---|---|
| Brown | — |
| Blue | — |
| Green | — |
| Grey | — |
| Amber | — |
| Black | — |
| Violet | — |
| Mismatched | — |
**Skin** — Skin or scales. (pick 1)
| Option | What it adds |
|---|---|
| Pale | — |
| Fair | — |
| Tanned | — |
| Brown | — |
| Dark | — |
| Weathered | — |
| Ashen grey | — |
| Green-tinged | — |
| Deep red | — |
| Scaled | — |
**Distinguishing features** — What would a stranger remember? Pick up to two, or none. (pick 0 to 2)
| Option | What it adds |
|---|---|
| A scar across the face | — |
| A tattoo | — |
| Freckles | — |
| A broken nose | — |
| An eyepatch | — |
| A braided beard | — |
| Piercings | — |
| A birthmark | — |
| An old burn | — |
| A missing finger | — |
| A slight limp | — |
| An easy grin | — |
**Usually wears** — What are you usually seen in? (pick 1)
| Option | What it adds |
|---|---|
| Travel-worn leathers | — |
| Well-kept armor | — |
| A hooded cloak | — |
| Fine clothes | — |
| Patched and mended clothes | — |
| Long robes | — |
| Furs and hides | — |
| Bright colours | — |
| Plain, practical clothes | — |
<!-- END GENERATED: builder-lists -->
+215
View File
@@ -0,0 +1,215 @@
# Encounters
How encounters work in this app: the two kinds of scene, who can be in one,
how a battle is run, and how rewards are handed out.
This describes the code as it stands. The rules live in
`backend/src/routes/encounters.routes.js`. Related:
[CHARACTERS.md](CHARACTERS.md), [MONSTERS.md](MONSTERS.md),
[NPCS.md](NPCS.md), [WEAPONS.md](WEAPONS.md), [ITEMS.md](ITEMS.md).
## Contents
1. [The basics](#1-the-basics)
2. [Battle or quest](#2-battle-or-quest)
3. [Status](#3-status)
4. [The scene and DM notes](#4-the-scene-and-dm-notes)
5. [Who is in the scene](#5-who-is-in-the-scene)
6. [Hit points](#6-hit-points)
7. [Initiative, turns and rounds](#7-initiative-turns-and-rounds)
8. [Conditions](#8-conditions)
9. [Rewards](#9-rewards)
10. [What each side sees](#10-what-each-side-sees)
11. [Permissions](#11-permissions)
12. [What is not modelled](#12-what-is-not-modelled)
---
## 1. The basics
- An encounter is one **scene** the DM runs: a fight, or a meeting with
people who want something.
- Encounters belong to a campaign and are listed on the campaign page. The DM
creates them; every member can open them.
- The encounter page updates live for everyone who has it open.
- The DM runs everything. Players watch, and see less than the DM does.
## 2. Battle or quest
Every encounter has a mode, chosen when it is created and switchable at any
time from the top of the page.
| | Battle | NPC quest |
|---|---|---|
| For | A fight | A scene built around people and an objective |
| Layout | Everyone in one list, in initiative order | Three groups: "People you meet", "The party", "Creatures" |
| Rounds and turns | Yes | No |
| Initiative | Typed in per combatant | Not shown |
| Start button | Begin Battle | Begin Quest |
| End button | End Battle | Complete Quest |
Everything else (hit points, conditions, rewards, the scene description, DM
notes) works the same in both.
## 3. Status
| Status | Meaning | How to get there |
|---|---|---|
| Planning | Being set up | Every new encounter starts here |
| In progress | Being played | Begin Battle / Begin Quest, or Reopen |
| Complete | Finished | End Battle / Complete Quest |
Status is a label. Nothing is locked when an encounter is complete: the DM
can still change HP, add people and award rewards. Encounters cannot be
deleted or renamed from the screen.
## 4. The scene and DM notes
| Box | For | Who sees it |
|---|---|---|
| The Scene / Quest | Describing the battlefield, or what is being asked of the party | Everyone |
| DM Notes | Tactics, secrets, what happens if the party fails | **DM only** |
Both save when the DM clicks out of the box.
## 5. Who is in the scene
The DM adds people from the "Add to the scene" panel.
| Kind | Comes from | Can be added more than once |
|---|---|---|
| Character | The campaign's finished characters | No |
| Monster | The campaign's monster list ([MONSTERS.md](MONSTERS.md)) | Yes |
| NPC | The campaign's NPC list ([NPCS.md](NPCS.md)) | No |
Each has a card. The card's left edge is coloured by kind, and it shows:
- **Characters:** level, species and class; HP, AC, speed, initiative bonus,
passive perception, proficiency bonus and spell save DC. Under "details":
ability scores, saves, the weapons and spells the character can use (with
attack and damage numbers), and special abilities. The name links to the
character sheet.
- **Monsters:** for the DM, AC, speed, attack and damage, and under "details"
ability scores, trait and notes.
- **NPCs:** role, attitude and description; for the DM also AC, attack,
damage and DM notes.
Details start open for the DM and closed for players. Weapons and spells
above a character's level are left out, because the character cannot use
them.
The DM removes someone with "Remove" on their card. Removing whoever is on
turn passes the turn to the next combatant.
## 6. Hit points
The DM types an amount and clicks Damage or Heal on a card.
| Combatant | Where the HP lives |
|---|---|
| Character | On the **character sheet**. The encounter shows the sheet's HP and changes it directly, so the two always agree. Max HP comes from the sheet. |
| Monster | In the encounter, per copy. Starts at the monster's max. |
| NPC | In the encounter. An NPC with no HP set has no health bar. |
- HP always stays between 0 and max.
- At 0 HP a combatant is marked **Down** and dimmed. It keeps its place in
the order; nothing is removed automatically.
- A character's temporary HP is shown beside its HP but is not used up
automatically.
## 7. Initiative, turns and rounds
Battles only.
- The DM types each combatant's **initiative** when adding them, and can
change it on the card. The app does not roll it. The list is ordered
highest first; ties keep the order they were added in.
- **Begin Battle** puts the first combatant on turn. Their card is
highlighted and the header names them.
- **Next Turn** passes the turn to the next in the order. After the last
combatant it returns to the top and the **round** goes up by one.
- **Next Round** skips straight to the top of the next round.
## 8. Conditions
The DM adds a condition to any card from the "+ Condition" list, and removes
one by clicking its ✕. Everyone sees them.
The list: Blinded, Charmed, Deafened, Frightened, Grappled, Incapacitated,
Invisible, Paralyzed, Petrified, Poisoned, Prone, Restrained, Stunned,
Unconscious, Concentrating.
Conditions are labels to remind the table. They do not change any numbers,
and they do not expire on their own.
## 9. Rewards
The DM lines up loot in the Rewards panel, on any encounter at any time.
| Reward | What the DM sets |
|---|---|
| Gold | An amount |
| Weapon | A weapon from the pool, a level (not below its starting level), a quantity |
| Item | An item from the pool, a level, a quantity |
Each can carry a short note ("Goblin chief's purse").
**A reward does nothing until it is awarded**, and it can be awarded once.
| Button | What happens |
|---|---|
| Award (pick a character) | The whole reward goes to that character. It can be any finished character in the campaign, not only those in the encounter. |
| Split (gold only) | Shared evenly between the characters in the encounter. Any remainder goes one gold each, highest initiative first: 101 gold between two is 51 and 50. |
- **Gold** is added to the character's balance with a money-log entry reading
"Reward: <encounter name>".
- A **weapon or item** is added to what the character holds, at the reward's
level, stacking with any they already have. If the character is below that
level they hold it but cannot use it yet.
- Removing a reward from the list does **not** take back what was awarded.
- Spells cannot be rewards; the DM grants those on the character sheet.
Until a reward is awarded only the DM can see it. Afterwards players see what
it was and who received it.
## 10. What each side sees
| | DM | Players |
|---|---|---|
| Scene description | Yes | Yes |
| DM notes | Yes | Never |
| Characters | Full card | Full card |
| Monsters | Full stat block | Name, HP, conditions |
| NPCs | Everything | Name, role, attitude, description, HP bar |
| Rewards | All | Only awarded ones |
| Controls (add, damage, turns, rewards) | Yes | None |
The server only sends a player what the right-hand column lists, so hidden
information cannot be dug out of the page.
## 11. Permissions
| Action | DM | Players |
|---|---|---|
| Create an encounter | Yes | No |
| Open an encounter | Yes | Yes |
| Change mode, status, scene or DM notes | Yes | No |
| Add or remove anyone | Yes | No |
| Change HP, initiative or conditions | Yes | No |
| Advance turns and rounds | Yes | No |
| Add, remove or award rewards | Yes | No |
People outside the campaign cannot open its encounters.
## 12. What is not modelled
- Rolling initiative, attacks, damage or saves (use the dice roller, bottom
left of every page)
- Applying an attack's damage automatically
- Death saves and stabilising
- Conditions with durations or mechanical effects
- Maps, positions, distances and areas of effect
- Experience points and encounter difficulty
- Spells as rewards
- Deleting or renaming an encounter from the screen
- A log of what happened during the encounter
+151
View File
@@ -0,0 +1,151 @@
# Items and Inventory
How items work in this app: the campaign's item pool, what a character
carries, item levels, and how items are handed out.
This describes the code as it stands. Related: [WEAPONS.md](WEAPONS.md) (items
level up the same way weapons do), [SPELLS.md](SPELLS.md),
[CHARACTERS.md](CHARACTERS.md) (money is covered there, in section 12).
## Contents
1. [The basics](#1-the-basics)
2. [The item pool](#2-the-item-pool)
3. [A character's inventory](#3-a-characters-inventory)
4. [Item levels](#4-item-levels)
5. [Dice on items](#5-dice-on-items)
6. [Starting items](#6-starting-items)
7. [Items as rewards](#7-items-as-rewards)
8. [Permissions](#8-permissions)
9. [What is not modelled](#9-what-is-not-modelled)
---
## 1. The basics
- Every campaign has its own **item pool**: rope, potions, keys, quest items,
anything that is not a weapon or a spell.
- A character's **inventory** is the items it holds from that pool. Players
cannot type in items of their own.
- The DM creates items and hands them out. Players can only tick Equipped.
- Items are **descriptive**. Holding or equipping one never changes a number
on the sheet.
## 2. The item pool
The pool is the "Items Pool" card on the campaign page (DM only).
| Field | What it is |
|---|---|
| Name | Free text, up to 120 characters |
| Description | Optional. Shown under the item in a character's inventory |
| Base dice | Optional dice such as `2d4+2`, for items that deal damage or heal (section 5) |
| Starts at level | 1 to 9. The lowest level this item can be (section 4) |
| Growth | Standard, Powerful or Legendary. Only matters if the item has dice |
| Starting option | Whether a brand-new character may pick it in the builder (section 6) |
- **Adding:** the "+ Add Item" form. There is no built-in library of items.
- **Changing:** starting level, growth (when the item has dice) and the
starting-option tick box can be changed in the table. Name, description and
dice cannot be changed on screen once created (the API accepts it); remove
and re-add instead.
- **Removing:** the ✕ button. This takes the item out of **every inventory**
and off every encounter's reward list. There is no undo.
## 3. A character's inventory
On a character's sheet, the DM picks an item from the pool and clicks Give.
| Each held item has | Who changes it |
|---|---|
| Quantity | The DM, with the − and + buttons |
| Level | The DM, with the level picker |
| Equipped | The owning player or the DM |
- Giving an item the character already holds **adds to the stack**. A
character holds one stack per item, and the whole stack shares one level.
- Quantity cannot go below 1; to take the last one away the DM uses ✕.
- **Using up** an item (drinking a potion) is not automatic: the DM lowers the
quantity or removes it.
- **Equipped** is a label. It does not change Armor Class or anything else;
armor is represented by the single "armor bonus" number on the sheet.
**Passing items on.** A character's owner (or the DM) can give some or all of
a held stack to another character in the campaign from the "Give to Another
Character" card on the sheet. The items leave the giver and arrive with the
recipient at the giver's level, unequipped. If the recipient already holds
that item, their stack grows and keeps its own level. Gold is given the same
way, and both characters' money logs record it.
## 4. Item levels
Items use the same level system as weapons (a house rule of this app):
- Each held stack has a **level from 1 to 9**, never below the pool entry's
starting level.
- A character must be **at least the item's level** to use it. A higher-level
item is still held, but shows "Requires level N" and cannot be equipped.
- Only the DM changes an item's level.
- If the DM levels an item past its holder, or lowers the character's level,
it is unequipped automatically.
For an item with no dice, the level is purely a requirement: a level 3 amulet
is one a character cannot use until level 3.
## 5. Dice on items
An item can carry optional dice: a healing potion's `2d4+2`, a firebomb's
`3d6`. The app does not know whether they heal or harm; the DM applies them.
The dice grow with the item's level exactly as a weapon's do, climbing the
same ladder (1d4 → 1d6 → 1d8 → 1d10 → 1d12 → 2d6 → …) by one, two or three
rungs per level depending on Growth. The full ladder is in
[WEAPONS.md, section 6](WEAPONS.md#6-how-damage-grows).
| Healing Potion, `2d4+2`, Standard growth | Dice shown |
|---|---|
| Level 1 | 2d4+2 (as typed) |
| Level 2 | 1d6+1d8 |
| Level 3 | 2d8 |
The dice are shown beside the item in the inventory. Nothing is rolled or
applied automatically; use the dice roller.
## 6. Starting items
In the builder's equipment step a new character can pick items that are:
- ticked as a **starting option** in the pool, and
- **starting level 1**.
Starting items and starting weapons share the campaign's "starting items"
allowance. Each arrives at level 1, quantity 1, unequipped.
## 7. Items as rewards
On an encounter the DM can line up an item as a reward, at a chosen level and
quantity, and later award it to a character. Awarding adds it to the
character's inventory, stacking with any they already hold. See
[ENCOUNTERS.md](ENCOUNTERS.md).
## 8. Permissions
| Action | DM | Owning player | Other players |
|---|---|---|---|
| See the item pool | Yes | Yes | Yes |
| Add, change or remove pool items | Yes | No | No |
| Give an item from the pool, or take one away | Yes | No | No |
| Give a held item to another character | Yes | Yes | No |
| Change quantity or level | Yes | No | No |
| Equip or unequip | Yes | Yes, if the character can use it | No |
| See a character's inventory | Yes | Yes | Yes |
## 9. What is not modelled
- Any effect of an item on stats (AC, speed, abilities)
- Armor and shields as items
- Using up items automatically, charges, and attunement
- Weight, carrying capacity and containers
- Prices, buying and selling (record the gold change in the money log)
- Swaps as a single step (each side gives separately), and asking the
recipient to accept
+170
View File
@@ -0,0 +1,170 @@
# Monsters
How monsters work in this app: the campaign's monster list, the built-in
bestiary, and how monsters behave in an encounter.
This describes the code as it stands. The built-in list is
`backend/src/game/data/monstersLibrary.js`. Related:
[ENCOUNTERS.md](ENCOUNTERS.md), [NPCS.md](NPCS.md).
## Contents
1. [The basics](#1-the-basics)
2. [What a monster holds](#2-what-a-monster-holds)
3. [Managing monsters](#3-managing-monsters)
4. [The built-in bestiary](#4-the-built-in-bestiary)
5. [Monsters in encounters](#5-monsters-in-encounters)
6. [What players see](#6-what-players-see)
7. [Permissions](#7-permissions)
8. [What is not modelled](#8-what-is-not-modelled)
---
## 1. The basics
- Every campaign has its own **monster list**. Only the DM can see or change
it.
- A monster in the list is a **template**. Each time it is added to an
encounter it becomes a separate combatant with its own hit points.
- Stat blocks are the DM's. Players see a monster only as a name and a health
bar in an encounter.
## 2. What a monster holds
| Field | What it is |
|---|---|
| Name | Up to 80 characters |
| AC | Armor Class |
| Max HP | Hit points each copy starts an encounter with |
| Speed | In feet. 30 unless set otherwise |
| Ability scores | STR, DEX, CON, INT, WIS, CHA. 10 unless set otherwise |
| Attack bonus | Added to the monster's attack roll |
| Damage | Dice for its main attack, e.g. `1d6+2` |
| Challenge rating | A rough danger rating, e.g. `1/4`, `2` |
| Special trait | A short note such as "Pack Tactics" |
| Notes | Anything else: what it attacks with, how it behaves |
None of these are calculated or used in formulas. They are reference numbers
shown to the DM during a fight. A monster's ability modifiers are worked out
from its scores for display only.
## 3. Managing monsters
The list is the "Monsters" card on the campaign page (DM only).
- **Adding by hand:** "+ Add Monster" asks for name, AC, max HP, attack bonus
and damage. Speed is set to 30 and every ability score to 10; challenge
rating, trait and notes are left empty.
- **Adding from the bestiary:** "📚 From Library" copies a complete stat block.
- **Changing:** there is no edit form (the API accepts changes, but no screen
offers them). Remove and re-add, or add from the library.
- **Removing:** the ✕ button, immediately, with no confirmation. Copies
already in encounters stay there with their name and HP, but lose their
stat block.
## 4. The built-in bestiary
38 monsters, from harmless to dangerous. Each library row shows challenge
rating, AC, HP, attack and damage, plus its trait and notes, before you add
it. Adding copies the monster into your campaign; the copy is yours, and later
changes to the library do not affect it.
The full bestiary, weakest first. "Attack" is the bonus added to the
monster's attack roll.
This list is written from the app's own data by `npm run docs:lists` (in `/backend`). Re-run it after changing the data; do not edit the list by hand.
<!-- BEGIN GENERATED: monster-library -->
| Monster | CR | AC | HP | Speed | Attack | Damage | STR / DEX / CON / INT / WIS / CHA | Trait | Notes |
|---|---|---|---|---|---|---|---|---|---|
| Commoner | 0 | 10 | 4 | 30 | +2 | 1d4 | 10 / 10 / 10 / 10 / 10 / 10 | — | An ordinary villager, armed with a club. |
| Giant Rat | 1/8 | 12 | 7 | 30 | +4 | 1d4+2 | 7 / 15 / 11 / 2 / 10 / 4 | Pack Tactics | Bite, piercing damage. |
| Kobold | 1/8 | 12 | 5 | 30 | +4 | 1d4+2 | 7 / 15 / 9 / 8 / 7 / 8 | Pack Tactics, Sunlight Sensitivity | Dagger, piercing damage. |
| Bandit | 1/8 | 12 | 11 | 30 | +3 | 1d6+1 | 11 / 12 / 12 / 10 / 10 / 10 | — | Scimitar, slashing damage. |
| Cultist | 1/8 | 12 | 9 | 30 | +3 | 1d6+1 | 11 / 12 / 10 / 10 / 11 / 10 | Dark Devotion | Scimitar, slashing damage. |
| Stirge | 1/8 | 12 | 2 | 10 | +5 | 1d4 | 4 / 16 / 11 / 2 / 8 / 6 | Blood Drain | Proboscis; attaches and drains hp on a hit. |
| Goblin | 1/4 | 15 | 7 | 30 | +4 | 1d6+2 | 8 / 14 / 10 / 10 / 8 / 8 | Nimble Escape | Scimitar, slashing damage. |
| Skeleton | 1/4 | 13 | 13 | 30 | +4 | 1d6+2 | 10 / 14 / 15 / 6 / 8 / 5 | Undead — vulnerable to bludgeoning | Shortsword, piercing damage. |
| Zombie | 1/4 | 8 | 22 | 20 | +3 | 1d6+1 | 13 / 6 / 16 / 3 / 6 / 5 | Undead Fortitude | Slam, bludgeoning damage. |
| Wolf | 1/4 | 13 | 11 | 40 | +4 | 2d4+2 | 12 / 15 / 12 / 3 / 12 / 6 | Pack Tactics | Bite; can knock prone on a hit. |
| Giant Wolf Spider | 1/4 | 13 | 11 | 40 | +3 | 1d6+1 | 12 / 16 / 13 / 3 / 12 / 4 | Poison bite | Spider climb; bite deals poison damage. |
| Scout | 1/2 | 13 | 16 | 30 | +4 | 1d6+2 | 11 / 14 / 12 / 11 / 13 / 11 | Keen Hearing and Sight | Shortsword or longbow. |
| Orc | 1/2 | 13 | 15 | 30 | +5 | 1d12+3 | 16 / 12 / 16 / 7 / 11 / 10 | Aggressive | Greataxe, slashing damage. |
| Hobgoblin | 1/2 | 18 | 11 | 30 | +3 | 1d8+1 | 13 / 12 / 12 / 10 / 10 / 9 | Martial Advantage | Longsword, slashing damage. |
| Thug | 1/2 | 11 | 32 | 30 | +4 | 1d6+2 | 15 / 11 / 14 / 10 / 10 / 11 | Pack Tactics | Mace, bludgeoning damage. |
| Gnoll | 1/2 | 15 | 22 | 30 | +3 | 1d8+1 | 14 / 12 / 11 / 6 / 10 / 7 | Rampage | Spear, piercing damage. |
| Lizardfolk | 1/2 | 15 | 22 | 30 | +3 | 1d6+1 | 15 / 10 / 13 / 7 / 12 / 7 | Hold Breath | Club or spear, piercing damage. |
| Black Bear | 1/2 | 11 | 19 | 40 | +3 | 1d6+2 | 15 / 10 / 14 / 2 / 12 / 7 | Keen Smell | Bite and claw attacks. |
| Giant Spider | 1 | 14 | 26 | 30 | +5 | 1d8+3 | 14 / 16 / 12 / 2 / 11 / 4 | Web, poison bite | Bite deals piercing plus poison damage. |
| Ghoul | 1 | 12 | 22 | 30 | +2 | 2d6+2 | 13 / 15 / 10 / 7 / 10 / 6 | Claws paralyze on a hit | Undead. |
| Dire Wolf | 1 | 14 | 37 | 50 | +5 | 2d6+3 | 17 / 15 / 15 / 3 / 12 / 7 | Pack Tactics | Bite; can knock prone on a hit. |
| Brown Bear | 1 | 11 | 34 | 40 | +5 | 1d8+5 | 19 / 10 / 16 / 2 / 13 / 7 | Keen Smell | Multiattack: bite and claws. |
| Harpy | 1 | 11 | 38 | 20 | +4 | 2d4+2 | 12 / 13 / 12 / 7 / 10 / 13 | Luring Song | Flying speed 40 ft; claws deal slashing damage. |
| Ochre Jelly | 2 | 8 | 45 | 10 | +5 | 2d6+3 | 15 / 6 / 14 / 2 / 6 / 1 | Amorphous, splits when damaged by slashing | Pseudopod, bludgeoning plus acid damage. |
| Ogre | 2 | 11 | 59 | 40 | +6 | 2d8+4 | 19 / 8 / 16 / 5 / 7 / 7 | — | Greatclub, bludgeoning damage. |
| Griffon | 2 | 12 | 59 | 30 | +6 | 2d6+4 | 18 / 15 / 16 / 2 / 13 / 8 | Keen Sight | Flying speed 80 ft; multiattack beak and claws. |
| Ankheg | 2 | 14 | 39 | 30 | +6 | 2d6+4 | 17 / 11 / 13 / 1 / 13 / 6 | Burrow speed 10 ft; can spit acid | Bite, piercing plus acid damage. |
| Manticore | 3 | 14 | 68 | 30 | +5 | 1d8+3 | 17 / 16 / 17 / 7 / 12 / 8 | Tail spikes (ranged) | Flying speed 50 ft; multiattack claws or tail spikes. |
| Basilisk | 3 | 15 | 52 | 20 | +5 | 2d6+3 | 16 / 8 / 15 / 2 / 8 / 7 | Petrifying Gaze | Bite, piercing damage. |
| Owlbear | 3 | 13 | 59 | 40 | +7 | 1d10+5 | 20 / 12 / 17 / 3 / 12 / 7 | Keen Sight and Smell | Multiattack: beak and claws. |
| Wight | 3 | 14 | 45 | 30 | +4 | 1d8+2 | 15 / 14 / 16 / 10 / 13 / 15 | Life Drain, Sunlight Sensitivity | Longsword or life-draining touch. |
| Werewolf | 3 | 12 | 58 | 30 | +4 | 1d8+2 | 15 / 13 / 14 / 10 / 11 / 10 | Shapechanger, regeneration | Bite (hybrid/wolf form) or multiattack claws + bite. |
| Doppelganger | 3 | 14 | 52 | 30 | +4 | 2d4+2 | 11 / 18 / 14 / 11 / 12 / 14 | Shapechanger, Ambusher | Multiattack slam. |
| Displacer Beast | 3 | 13 | 85 | 40 | +7 | 2d6+4 | 18 / 15 / 16 / 6 / 12 / 8 | Displacement (attacks vs. it have disadvantage) | Multiattack: two tentacles. |
| Ettin | 4 | 12 | 85 | 40 | +7 | 2d8+4 | 21 / 8 / 17 / 6 / 10 / 8 | Two heads — advantage on Perception, can’t be surprised easily | Multiattack: battleaxe and morningstar. |
| Hill Giant | 5 | 13 | 105 | 40 | +8 | 3d8+5 | 21 / 8 / 19 / 5 / 9 / 6 | — | Greatclub, bludgeoning damage. |
| Troll | 5 | 15 | 84 | 30 | +7 | 2d6+4 | 18 / 13 / 20 / 7 / 9 / 7 | Regeneration (vulnerable to fire/acid) | Multiattack: bite and two claws. |
| Wraith | 5 | 13 | 67 | 0 | +6 | 4d8+4 | 6 / 16 / 16 / 12 / 14 / 15 | Incorporeal, life drain, flying 60 ft | Undead; life drain touch attack. |
<!-- END GENERATED: monster-library -->
## 5. Monsters in encounters
On an encounter page, the DM chooses "Monster" in the "Add to the scene"
panel, picks one, and types its initiative.
- The same monster can be added **any number of times**. Each copy has its
own HP and conditions. Copies share the monster's name; the screen has no
way to rename one (the API allows it).
- A copy starts at the monster's max HP. Its HP stays between 0 and its max.
- At 0 HP a copy is marked **Down** and dimmed, but keeps its place in the
initiative order until the DM removes it.
- HP belongs to the encounter: a monster starts fresh in the next one.
The DM's card for a monster shows AC, speed, attack bonus and damage at a
glance, and under "details" its six ability scores with modifiers, its trait
and its notes.
## 6. What players see
| Players see | Players never see |
|---|---|
| The monster's name | AC, speed, attack bonus, damage |
| Its health bar and current/max HP | Ability scores, challenge rating |
| Its conditions | Trait and notes |
| Its place in the initiative order | The campaign's monster list |
This is enforced by the server: stat blocks are never sent to a player's
browser.
Players do see a monster's exact HP numbers. If you would rather keep those
secret, that is not currently possible.
## 7. Permissions
| Action | DM | Players |
|---|---|---|
| See the monster list and stat blocks | Yes | No |
| Browse the built-in bestiary | Yes | Yes (it is standard reference material) |
| Add or remove monsters | Yes | No |
| Add a monster to an encounter | Yes | No |
| Change a monster's HP, initiative or conditions | Yes | No |
| See a monster in an encounter | Everything | Name, HP, conditions |
## 8. What is not modelled
- Multiple attacks, spells, legendary actions and resistances (use Notes)
- Rolling a monster's attacks or damage (use the dice roller)
- Saving throw bonuses and skills
- Experience points for defeating monsters
- Encounter difficulty calculated from challenge ratings
- Monster hit dice, and rolling HP rather than using the fixed value
+123
View File
@@ -0,0 +1,123 @@
# NPCs
How non-player characters work in this app: what the DM records about them,
how they are brought into a scene, and what players can and cannot see.
This describes the code as it stands. Related: [ENCOUNTERS.md](ENCOUNTERS.md),
[MONSTERS.md](MONSTERS.md).
## Contents
1. [The basics](#1-the-basics)
2. [What an NPC holds](#2-what-an-npc-holds)
3. [Managing NPCs](#3-managing-npcs)
4. [NPCs in encounters](#4-npcs-in-encounters)
5. [What players see](#5-what-players-see)
6. [NPC or monster?](#6-npc-or-monster)
7. [Permissions](#7-permissions)
8. [What is not modelled](#8-what-is-not-modelled)
---
## 1. The basics
- An NPC is a person the DM plays: an innkeeper, a quest-giver, a rival, a
villain.
- Every campaign has its own **NPC list**. Only the DM can see or change it.
- An NPC does nothing by sitting in the list. Players meet one when the DM
**adds it to an encounter**.
- NPCs are mainly for talking to. Combat stats are optional.
## 2. What an NPC holds
| Field | What it is | Who sees it |
|---|---|---|
| Name | Up to 80 characters | Everyone, once in an encounter |
| Role | A few words: "Innkeeper", "Captain of the Watch" | Everyone |
| Attitude | Friendly, Neutral or Hostile toward the party | Everyone |
| Description | What the party can see and knows | Everyone |
| DM notes | Secrets, motives, what they are hiding | **DM only** |
| AC | Optional | DM only |
| HP | Optional. Without it the NPC has no health bar | See section 5 |
| Attack bonus | Optional | DM only |
| Damage | Optional dice, e.g. `1d6` | DM only |
A new NPC is Neutral unless you choose otherwise.
## 3. Managing NPCs
The NPC list is the "NPCs" card on the campaign page (DM only).
- **Adding:** "+ Add NPC" opens a form with every field above. Only the name
is required.
- **Changing:** there is no edit form. To change an NPC, remove it and add it
again (the API accepts changes, but no screen offers them).
- **Removing:** the ✕ button, after a confirmation. This also **removes the
NPC from every encounter** it was in.
## 4. NPCs in encounters
On an encounter page, the DM chooses "NPC" in the "Add to the scene" panel
and picks one. Each NPC can be in an encounter once.
- In an **NPC quest** encounter, NPCs are listed first under "People you
meet", ahead of the party and any creatures.
- In a **battle**, an NPC takes its place in the initiative order like anyone
else, using the initiative the DM types in.
- An NPC with HP gets a health bar, and the DM can damage and heal it. This
HP belongs to the encounter: the same NPC starts at full HP in the next one.
- An NPC with no HP has no health bar and cannot be marked Down.
- Conditions (Prone, Charmed…) can be put on an NPC like any combatant.
An NPC's card shows its attitude as a coloured badge, its role under its
name, and its description in full. The DM's card also shows AC, attack,
damage and the DM notes.
## 5. What players see
Players only ever see an NPC through an encounter it is in:
| Players see | Players never see |
|---|---|
| Name, role, attitude, description | DM notes |
| Health bar and conditions, if the NPC has HP | AC, attack bonus, damage |
This is enforced by the server, not just hidden on screen: the hidden fields
are never sent to a player's browser.
Changing an NPC's attitude changes what players see straight away, so
flipping a "Friendly" NPC to "Hostile" is itself a reveal.
## 6. NPC or monster?
| | NPC | Monster |
|---|---|---|
| Meant for | People with names and motives | Things to fight |
| Has a description players can read | Yes | No |
| Has an attitude | Yes | No |
| Has DM-only notes | Yes | Yes |
| Combat stats | Optional, basic | Full stat block |
| Can be in an encounter more than once | No | Yes (a pack of goblins) |
| Built-in library | No | Yes |
A named villain the party will both talk to and fight works well as an NPC
with HP, AC, attack and damage filled in.
## 7. Permissions
| Action | DM | Players |
|---|---|---|
| See the NPC list | Yes | No |
| Add or remove NPCs | Yes | No |
| Add an NPC to an encounter | Yes | No |
| Change an NPC's HP or conditions in an encounter | Yes | No |
| See an NPC in an encounter | Everything | Name, role, attitude, description, health bar |
## 8. What is not modelled
- Ability scores, saves, skills and spells for NPCs
- NPC inventory, gold and shops
- Where an NPC is (they are not tied to locations)
- Relationships, reputation and attitude toward individual characters
- A record of which NPCs the party has met, outside of encounters
- Portraits
+387
View File
@@ -0,0 +1,387 @@
# Spells
How spells work in this app: the campaign's spell list, how a character comes
to know a spell, who can use which spells, and what the spellcasting numbers
mean.
This describes the code as it stands. The built-in list is
`backend/src/game/data/spellsLibrary.js`. Related: [WEAPONS.md](WEAPONS.md),
[ITEMS.md](ITEMS.md), [CHARACTERS.md](CHARACTERS.md).
## Contents
1. [The basics](#1-the-basics)
2. [The spell list](#2-the-spell-list)
3. [The built-in library](#3-the-built-in-library)
4. [Granting spells to characters](#4-granting-spells-to-characters)
5. [Spell level and who can use it](#5-spell-level-and-who-can-use-it)
6. [Damage](#6-damage)
7. [Spellcasting numbers](#7-spellcasting-numbers)
8. [Starting spells](#8-starting-spells)
9. [Permissions](#9-permissions)
10. [What is not modelled](#10-what-is-not-modelled)
11. [The complete spell library](#11-the-complete-spell-library)
---
## 1. The basics
- Every campaign has its own **spell list**. A spell exists in one campaign
only.
- A character **knows** spells from that list, each with a Prepared tick box.
- The DM runs the list and decides who learns what. Players can only prepare
and unprepare the spells they know.
- Unlike weapons and items, a spell has **no level of its own to raise**. Its
level is fixed, and so is its damage.
## 2. The spell list
The list is the "Spell List" card on the campaign page (DM only).
| Field | What it is |
|---|---|
| Name | Free text, up to 80 characters |
| Level | Cantrip, or level 1 to 9. Also the character level needed to use it (section 5) |
| School | Free text: Evocation, Illusion… |
| What it does | One sentence. Shown wherever the spell is shown |
| Damage | Picked from a list, or "No damage". Fixed; it does not grow |
| Starting option | Whether a brand-new character may pick it in the builder (section 8) |
| Casting time, range, duration | Stored for library spells but not shown on any screen |
A cantrip is a spell of level 0. The app always calls it a **cantrip**, never
"level 0" or "level 1".
- **Adding:** by hand with the "+ Add Spell" form (name, level, school,
damage and what it does), or from the library.
- **Changing:** damage (the drop-down in the table) and the starting-option
tick box. Name, level, school and description cannot be changed on screen
once created (the API accepts it); remove and re-add instead.
- **Damage choices:** the drop-down offers "No damage", then 1 to 6, 8 or 10
dice of d4, d6, d8, d10 or d12 (1d4 up to 10d12), plus the three unusual
values the library uses (`3d4+3`, `2d8+4d6`, `20`).
- **Removing:** the ✕ button. Every character who knows the spell forgets it.
There is no undo.
## 3. The built-in library
"📚 From Library" offers 131 standard spells to copy into the list:
| Level | Spells |
|---|---|
| Cantrips | 26 |
| 1 | 30 |
| 2 | 26 |
| 3 | 21 |
| 4 | 13 |
| 5 | 15 |
Before you add one, each row shows:
- whether it is a **cantrip** or its **level**, and who can use it;
- its **default damage**, or "no damage";
- its school;
- **what it does**, in a sentence.
Every library spell is listed in full in
[section 11](#11-the-complete-spell-library).
35 of the library spells deal damage and come with a default, taken from the
standard rules at the spell's own level. For example:
| Spell | Level | Default damage |
|---|---|---|
| Fire Bolt | Cantrip | 1d10 |
| Sacred Flame | Cantrip | 1d8 |
| Magic Missile | 1 | 3d4+3 (all three darts together) |
| Burning Hands | 1 | 3d6 |
| Scorching Ray | 2 | 2d6 (per ray; there are three) |
| Fireball | 3 | 8d6 |
| Ice Storm | 4 | 2d8+4d6 |
| Cone of Cold | 5 | 8d8 |
Spells that heal, protect or control (Cure Wounds, Shield, Hold Person…) have
no default. Pick a value from the Damage drop-down after adding if you want
one shown.
A spell added from the library is **not** a starting option until ticked. The
library has nothing above level 5; add higher spells by hand.
## 4. Granting spells to characters
On a character's sheet, the DM picks a spell from the list and clicks Grant.
- Any class can be granted any spell. Whether a non-spellcaster should have
one is the DM's call.
- The DM can remove a known spell with ✕.
- The owning player ticks **Prepared**. Prepared is a label: there is no limit
on how many spells are prepared.
- **Passing a spell on.** A character's owner (or the DM) can give a known
spell to another character in the campaign from the "Give to Another
Character" card on the sheet. The spell moves: the giver no longer knows
it. It cannot be given to someone who already knows it, and a recipient
below the spell's level knows it but cannot use it yet.
- The "Spells Known" card only appears on a sheet when the campaign's spell
list has at least one spell.
- Each known spell shows its level (or "Cantrip"), its damage, and what it
does.
## 5. Spell level and who can use it
This is a house rule of this app. In standard D&D a 3rd-level spell needs a
5th-level caster; here the two numbers are the same.
**A character must be at least the spell's level to use it.** Cantrips are
open to everyone.
| Spell | Who can use it |
|---|---|
| Cantrip | Any character |
| Level 1 | Any character (everyone starts at level 1) |
| Level 2 | Characters of level 2 and above |
| Level 3 | Characters of level 3 and above |
| … | … |
| Level 9 | Characters of level 9 and above |
A spell above the character's level can still be **known**, but it shows
"Requires level N", cannot be prepared, and is left out of encounters. If the
DM lowers a character's level, spells now out of reach are unprepared
automatically.
## 6. Damage
A spell's damage is whatever is picked in its Damage drop-down, shown beside
the spell on the sheet and in encounters. It does not change with the character's
level, and nothing is added to it.
## 7. Spellcasting numbers
Shown only for classes with a spellcasting ability:
| Class | Spellcasting ability |
|---|---|
| Wizard | Intelligence |
| Cleric, Druid, Ranger | Wisdom |
| Bard, Paladin, Sorcerer, Warlock | Charisma |
| Barbarian, Fighter, Monk, Rogue | None |
| Number | Formula | Used when |
|---|---|---|
| Spell save DC | 8 + proficiency bonus + spellcasting ability modifier | A target rolls to resist your spell |
| Spell attack bonus | Proficiency bonus + spellcasting ability modifier | You roll to hit with a spell |
A character without a spellcasting class can still be granted spells, but has
no save DC or attack bonus shown.
## 8. Starting spells
In the builder's equipment step a new character can pick spells that are:
- ticked as a **starting option** in the list,
- **cantrips or level 1** (a new character is level 1), and
- only if the character's **class has a spellcasting ability**.
The number allowed is the campaign's "starting spells" setting. Starting
spells arrive unprepared.
## 9. Permissions
| Action | DM | Owning player | Other players |
|---|---|---|---|
| See the spell list and the library | Yes | Yes | Yes |
| Add, change or remove spells in the list | Yes | No | No |
| Grant a spell from the list, or remove one | Yes | No | No |
| Give a known spell to another character | Yes | Yes | No |
| Prepare or unprepare | Yes | Yes, if the character can use it | No |
| See a character's spells | Yes | Yes | Yes |
## 10. What is not modelled
- Spell slots, and casting a spell at a higher level
- Cantrip damage increasing at higher character levels
- Limits on how many spells can be prepared or known
- Concentration, components, rituals
- Class spell lists (any spell can be granted to anyone)
- Healing amounts as a separate value (pick them in Damage if you want them
shown)
- Applying spell damage to a target automatically
## 11. The complete spell library
Every spell "📚 From Library" offers, with the damage it arrives with.
This list is written from the app's own data by `npm run docs:lists` (in `/backend`). Re-run it after changing the data; do not edit the list by hand.
<!-- BEGIN GENERATED: spell-library -->
### Cantrips (26)
Usable by any character.
| Spell | School | Damage | What it does |
|---|---|---|---|
| Acid Splash | Conjuration | 1d6 | Hurl a bubble of acid at one or two creatures within 5 feet of each other. |
| Blade Ward | Abjuration | — | Resist bludgeoning, piercing, and slashing damage until your next turn. |
| Chill Touch | Necromancy | 1d8 | A ghostly hand deals necrotic damage and prevents healing. |
| Dancing Lights | Illusion | — | Create up to four torch-sized lights that you can move. |
| Druidcraft | Transmutation | — | A small, harmless nature-flavored effect: predict weather, sprout a seedling, and the like. |
| Eldritch Blast | Evocation | 1d10 | A beam of crackling energy strikes one creature for force damage. |
| Fire Bolt | Evocation | 1d10 | Hurl a mote of fire that deals fire damage on a hit. |
| Friends | Enchantment | — | Advantage on Charisma checks against one creature for the duration. |
| Guidance | Divination | — | Add 1d4 to one ability check of your choice. |
| Light | Evocation | — | An object sheds bright light in a 20-foot radius. |
| Mage Hand | Conjuration | — | A spectral hand manipulates objects, opens doors, and carries small items. |
| Mending | Transmutation | — | Repairs a single break or tear in an object. |
| Message | Transmutation | — | Whisper a message to a target that only they can hear, with a whispered reply. |
| Minor Illusion | Illusion | — | Create a sound or an image of an object for the duration. |
| Poison Spray | Conjuration | 1d12 | Project a puff of noxious gas that deals poison damage. |
| Prestidigitation | Transmutation | — | A minor magical trick — light a candle, clean an object, chill or warm food, and the like. |
| Produce Flame | Conjuration | 1d8 | A flickering flame in your hand sheds light and can be hurled for fire damage. |
| Ray of Frost | Evocation | 1d8 | A ray of freezing energy deals cold damage and slows the target. |
| Resistance | Abjuration | — | The target adds 1d4 to one saving throw of its choice. |
| Sacred Flame | Evocation | 1d8 | Radiant flame descends on a creature that must succeed a Dexterity save or take damage. |
| Shillelagh | Transmutation | — | Imbue a club or quarterstaff with magic, using Wisdom for its attack and damage. |
| Shocking Grasp | Evocation | 1d8 | Lightning springs from your hand, dealing damage and preventing reactions. |
| Spare the Dying | Necromancy | — | A creature you touch that has 0 hit points becomes stable. |
| Thorn Whip | Transmutation | 1d6 | A vine-like whip deals damage and drags the target closer. |
| True Strike | Divination | — | Gain advantage on your next attack roll against the target. |
| Vicious Mockery | Enchantment | 1d4 | A string of insults deals psychic damage and imposes disadvantage on the target’s next attack. |
### Level 1 (30 spells)
Needs character level 1.
| Spell | School | Damage | What it does |
|---|---|---|---|
| Alarm | Abjuration | — | Set an audible or mental alarm against intruders. |
| Animal Friendship | Enchantment | — | Convince a beast that you mean it no harm. |
| Bane | Enchantment | — | Up to three creatures subtract 1d4 from attack rolls and saves. |
| Bless | Enchantment | — | Up to three creatures add 1d4 to attack rolls and saves. |
| Burning Hands | Evocation | 3d6 | A thin sheet of flame sweeps out from your hands. |
| Charm Person | Enchantment | — | A humanoid you can see regards you as a friendly acquaintance. |
| Color Spray | Illusion | — | A dazzling array of flashing colors can blind weak creatures. |
| Command | Enchantment | — | Speak a one-word command a creature must obey. |
| Comprehend Languages | Divination | — | Understand any spoken or written language. |
| Cure Wounds | Evocation | — | A creature you touch regains hit points. |
| Detect Magic | Divination | — | Sense the presence of magic within 30 feet. |
| Disguise Self | Illusion | — | Change your appearance, including clothing and gear. |
| Entangle | Conjuration | — | Grasping weeds and vines sprout in a 20-foot square. |
| Faerie Fire | Evocation | — | Objects in a 20-foot cube are outlined in light, granting attackers advantage. |
| Feather Fall | Transmutation | — | Falling creatures slow to a gentle descent. |
| Fog Cloud | Conjuration | — | A 20-foot-radius sphere of fog heavily obscures the area. |
| Guiding Bolt | Evocation | 4d6 | A flash of light streaks to a target, dealing radiant damage. |
| Healing Word | Evocation | — | A creature you can see regains hit points. |
| Hunter's Mark | Divination | 1d6 | Deal extra damage to a marked target and track it magically. |
| Identify | Divination | — | Learn the properties of a magic item or the nature of a spell affecting a creature. |
| Jump | Transmutation | — | A creature's jump distance triples. |
| Longstrider | Transmutation | — | A creature's speed increases by 10 feet. |
| Mage Armor | Abjuration | — | A protective magical force gives the target a base AC of 13 + Dex modifier. |
| Magic Missile | Evocation | 3d4+3 | Three darts of magical force each strike a target unerringly. |
| Protection from Evil and Good | Abjuration | — | Protect a creature from aberrations, celestials, elementals, fey, fiends, and undead. |
| Shield | Abjuration | — | An invisible barrier grants +5 AC until the start of your next turn. |
| Sleep | Enchantment | — | Creatures in a 20-foot radius fall unconscious, weakest hit points first. |
| Speak with Animals | Divination | — | Comprehend and verbally communicate with beasts. |
| Thunderwave | Evocation | 2d8 | A wave of thunderous force sweeps out, damaging and pushing creatures. |
| Witch Bolt | Evocation | 1d12 | A beam of lightning forms a sustained arc that damages the target each turn. |
### Level 2 (26 spells)
Needs character level 2.
| Spell | School | Damage | What it does |
|---|---|---|---|
| Aid | Abjuration | — | Bolster allies with additional hit points. |
| Alter Self | Transmutation | — | Assume a variety of minor physical changes. |
| Animal Messenger | Enchantment | — | Send a tiny animal to deliver a short message. |
| Blindness/Deafness | Necromancy | — | Blind or deafen a creature that fails a Constitution save. |
| Blur | Illusion | — | Your outline blurs, giving attackers disadvantage. |
| Darkvision | Transmutation | — | Grant a creature darkvision out to 60 feet. |
| Enhance Ability | Transmutation | — | Grant advantage on checks with one chosen ability. |
| Enlarge/Reduce | Transmutation | — | A creature or object doubles or halves in size. |
| Flaming Sphere | Conjuration | 2d6 | A 5-foot-diameter sphere of fire rolls where you direct it. |
| Gust of Wind | Evocation | — | A line of strong wind pushes creatures and extinguishes flames. |
| Hold Person | Enchantment | — | Paralyze a humanoid that fails a Wisdom save. |
| Invisibility | Illusion | — | A creature you touch becomes invisible. |
| Lesser Restoration | Abjuration | — | End one disease or condition afflicting the target. |
| Levitate | Transmutation | — | A creature or object rises vertically and can be moved. |
| Mirror Image | Illusion | — | Three illusory duplicates of yourself spring into being. |
| Misty Step | Conjuration | — | Teleport up to 30 feet in a burst of silvery mist. |
| Moonbeam | Evocation | 2d10 | A silvery beam of pale light shines down in a 5-foot-radius cylinder. |
| Pass without Trace | Abjuration | — | The party becomes exceptionally difficult to track. |
| Scorching Ray | Evocation | 2d6 | Three rays of fire streak toward targets within range. |
| Shatter | Evocation | 3d8 | A sudden loud ringing noise deals thunder damage in a 10-foot-radius sphere. |
| Silence | Illusion | — | No sound can be created within or pass through a 20-foot-radius sphere. |
| Spider Climb | Transmutation | — | A creature gains the ability to move on vertical surfaces and ceilings. |
| Spiritual Weapon | Evocation | 1d8 | A spectral weapon attacks a target and can be moved each turn. |
| Suggestion | Enchantment | — | Plant a reasonable-sounding suggestion in a creature’s mind. |
| Web | Conjuration | — | Thick, sticky webs fill a 20-foot cube. |
| Zone of Truth | Enchantment | — | Creatures in a 15-foot-radius sphere can’t speak a deliberate lie. |
### Level 3 (21 spells)
Needs character level 3.
| Spell | School | Damage | What it does |
|---|---|---|---|
| Animate Dead | Necromancy | — | Raise a skeleton or zombie from a corpse to fight for you. |
| Beacon of Hope | Abjuration | — | Bolster creatures against despair, granting advantage on saves and max healing. |
| Call Lightning | Conjuration | 3d10 | A storm cloud forms and you can call down bolts of lightning. |
| Counterspell | Abjuration | — | Interrupt a creature casting a spell. |
| Daylight | Evocation | — | A 60-foot-radius sphere of bright light spreads out. |
| Dispel Magic | Abjuration | — | End one active spell affecting a creature, object, or effect. |
| Fear | Illusion | — | Creatures in the cone become frightened and drop what they’re holding. |
| Fireball | Evocation | 8d6 | A bright streak explodes into flame, dealing fire damage in a 20-foot radius. |
| Fly | Transmutation | — | The target gains a flying speed of 60 feet. |
| Haste | Transmutation | — | Double the target’s speed and grant an extra action. |
| Lightning Bolt | Evocation | 8d6 | A stroke of lightning blasts out in a line, dealing lightning damage. |
| Mass Healing Word | Evocation | — | Up to six creatures you can see regain hit points. |
| Nondetection | Abjuration | — | Hide a target from divination magic. |
| Protection from Energy | Abjuration | — | Resistance to one damage type of your choice. |
| Remove Curse | Abjuration | — | Lift a curse from a creature or object. |
| Revivify | Necromancy | — | A creature that died within the last minute returns to life with 1 hit point. |
| Sleet Storm | Conjuration | — | Freezing rain falls in a 40-foot-radius cylinder, icing the ground. |
| Slow | Transmutation | — | Up to six creatures are hindered, halving their speed and worse. |
| Spirit Guardians | Conjuration | 3d8 | Protective spirits swirl around you, damaging enemies that enter. |
| Stinking Cloud | Conjuration | — | A 20-foot-radius sphere of yellow, nauseating gas spreads out. |
| Water Breathing | Transmutation | — | Up to ten creatures can breathe underwater. |
### Level 4 (13 spells)
Needs character level 4.
| Spell | School | Damage | What it does |
|---|---|---|---|
| Banishment | Abjuration | — | Send a creature to a harmless demiplane. |
| Blight | Necromancy | 8d8 | Necromantic energy withers a creature, dealing necrotic damage. |
| Confusion | Enchantment | — | Creatures in a 10-foot-radius sphere act randomly. |
| Dimension Door | Conjuration | — | Teleport yourself (and possibly a companion) to a spot you can visualize. |
| Fire Shield | Evocation | 2d8 | Wreathe yourself in flame that damages attackers and grants resistance. |
| Freedom of Movement | Abjuration | — | The target’s movement is unaffected by difficult terrain and restraints. |
| Greater Invisibility | Illusion | — | The target becomes invisible even while attacking. |
| Guardian of Faith | Conjuration | 20 | A Large spectral guardian appears and attacks enemies near it. |
| Ice Storm | Evocation | 2d8+4d6 | Hail hammers a 20-foot-radius cylinder, dealing bludgeoning and cold damage. |
| Polymorph | Transmutation | — | Transform a creature into a new form. |
| Stone Shape | Transmutation | — | Reshape a chunk of stone into a form you desire. |
| Stoneskin | Abjuration | — | The target gains resistance to nonmagical bludgeoning, piercing, and slashing damage. |
| Wall of Fire | Evocation | 5d8 | Conjure a wall of fire that damages creatures passing through it. |
### Level 5 (15 spells)
Needs character level 5.
| Spell | School | Damage | What it does |
|---|---|---|---|
| Animate Objects | Transmutation | — | Up to ten nonmagical objects animate and fight for you. |
| Cloudkill | Conjuration | 5d8 | A 20-foot-radius sphere of poisonous, yellow-green fog billows out. |
| Cone of Cold | Evocation | 8d8 | A blast of cold air deals cold damage to everything in the cone. |
| Contagion | Necromancy | — | Infect a creature with a magical disease. |
| Dispel Evil and Good | Abjuration | — | Protection and the ability to banish otherworldly creatures. |
| Dominate Person | Enchantment | — | Attempt to beguile a humanoid and control its actions. |
| Flame Strike | Evocation | 8d6 | A column of divine fire roars down, dealing fire and radiant damage. |
| Greater Restoration | Abjuration | — | Undo a debilitating effect: reduced ability score, exhaustion, or curse. |
| Hold Monster | Enchantment | — | Paralyze one creature that fails a Wisdom save. |
| Insect Plague | Conjuration | 4d10 | A swarm of biting, stinging insects fills a 20-foot-radius sphere. |
| Legend Lore | Divination | — | Learn what you know, or have heard, about a name, place, or object. |
| Mass Cure Wounds | Evocation | — | Up to six creatures in a 30-foot-radius sphere regain hit points. |
| Raise Dead | Necromancy | — | Return a dead creature to life, as long as its body is mostly intact. |
| Wall of Force | Evocation | — | An invisible wall of force springs into existence, impenetrable to physical force. |
| Wall of Stone | Evocation | — | A nonmagical wall of solid stone springs into existence. |
<!-- END GENERATED: spell-library -->
+280
View File
@@ -0,0 +1,280 @@
# Weapons
How weapons work in this app: the campaign's weapon pool, how a character
comes to hold a weapon, weapon levels, and how attack and damage numbers are
worked out.
This describes the code as it stands. The formulas live in
`backend/src/game/calculations.js`; the built-in list is
`backend/src/game/data/weaponsLibrary.js`. Related: [ITEMS.md](ITEMS.md),
[SPELLS.md](SPELLS.md), [CHARACTERS.md](CHARACTERS.md).
## Contents
1. [The basics](#1-the-basics)
2. [The weapon pool](#2-the-weapon-pool)
3. [The built-in library](#3-the-built-in-library)
4. [Giving weapons to characters](#4-giving-weapons-to-characters)
5. [Weapon levels](#5-weapon-levels)
6. [How damage grows](#6-how-damage-grows)
7. [Attack and damage numbers](#7-attack-and-damage-numbers)
8. [Starting weapons](#8-starting-weapons)
9. [Weapons as rewards](#9-weapons-as-rewards)
10. [Permissions](#10-permissions)
11. [What is not modelled](#11-what-is-not-modelled)
12. [The complete weapon library](#12-the-complete-weapon-library)
---
## 1. The basics
- Every campaign has its own **weapon pool**. A weapon exists in one campaign
only.
- A character never owns a free-standing weapon: it holds a **copy** of a pool
entry, with its own quantity, level and equipped flag.
- The DM runs the pool and decides who gets what. Players can only equip and
unequip what they hold.
## 2. The weapon pool
The pool is the "Weapons Pool" card on the campaign page (DM only).
| Field | What it is |
|---|---|
| Name | Free text, up to 80 characters |
| Base damage | Dice such as `1d8` or `2d6` — the damage at the weapon's starting level |
| Damage type | Free text: slashing, piercing, fire… |
| Attack ability | Strength, Dexterity, or Finesse (whichever of the two is higher for the wielder) |
| Starts at level | 1 to 9. The lowest level this weapon can be (section 5) |
| Growth | Standard, Powerful or Legendary: how fast the dice climb per level (section 6) |
| Starting option | Whether a brand-new character may pick it in the builder (section 8) |
| Properties, range | Stored for library weapons (light, thrown, 20/60 ft…) but not shown or used anywhere |
- **Adding:** by hand with the "+ Add Weapon" form, or from the library.
- **Changing:** starting level, growth and the starting-option tick box can be
changed in the table. Name, damage, type and ability cannot be changed on
screen once created (the API accepts it); remove and re-add instead.
- **Removing:** the ✕ button. This takes the weapon away from **every
character holding it** and off every encounter's reward list. There is no
undo.
- The same weapon can be added twice; nothing stops duplicate names.
## 3. The built-in library
"📚 From Library" offers 37 standard weapons to copy into the pool:
| Category | Count | Examples |
|---|---|---|
| Simple melee | 10 | Club 1d4, Dagger 1d4, Mace 1d6, Spear 1d6 |
| Simple ranged | 4 | Shortbow, Light Crossbow, Dart, Sling |
| Martial melee | 18 | Longsword 1d8, Rapier 1d8, Greataxe 1d12, Greatsword 2d6 |
| Martial ranged | 5 | Longbow, Heavy Crossbow, Hand Crossbow |
A weapon added from the library arrives with starting level 1, Standard
growth, and **not** ticked as a starting option. Change those in the table
afterwards. Every library weapon is listed in
[section 12](#12-the-complete-weapon-library).
## 4. Giving weapons to characters
On a character's sheet, the DM picks a weapon from the pool and clicks Give.
- It arrives at the weapon's starting level, quantity 1, unequipped.
- Giving a weapon the character already holds **adds to the stack**; the stack
keeps the level it has. A character holds one stack per weapon, so two
copies of the same weapon at different levels is not possible.
- The DM can take a weapon away with ✕ on the sheet.
- The owning player ticks **Equipped**. Equipped is a label only: unequipped
weapons still show their numbers, and nothing limits how many are equipped.
**Passing a weapon on.** A character's owner (or the DM) can give a held
weapon to another character in the campaign from the "Give to Another
Character" card on the sheet. Some or all of the stack moves: it leaves the
giver and arrives with the recipient at the giver's level, unequipped. If the
recipient already holds that weapon, their stack grows and keeps its own
level. A recipient below the weapon's level holds it but cannot use it yet.
## 5. Weapon levels
This is a house rule of this app, not standard D&D.
- Each held copy has a **level from 1 to 9**. Two characters can hold the same
weapon at different levels.
- Only the DM changes a copy's level, with the level picker beside it on the
sheet. Each option shows the damage at that level.
- A copy can never go below the pool entry's **starting level**. Raising a
pool entry's starting level lifts any copies below it and unequips them.
**Who can use it.** A character must be at least the copy's level:
| Character level | Can use weapons of level |
|---|---|
| 1 | 1 |
| 2 | 1–2 |
| 5 | 1–5 |
| 9 and above | 1–9 |
A weapon above its holder's level is still held, but it shows "Requires level
N", cannot be equipped, and is left out of quick stats and encounters. If the
DM levels a weapon past its holder, or lowers the character's level, it is
unequipped automatically.
## 6. How damage grows
The dice in the pool are the damage at the weapon's starting level. Each level
above that moves the dice up a fixed ladder, in the smallest steps dice allow:
| Rung | Dice | Average |
|---|---|---|
| 1 | 1d4 | 2.5 |
| 2 | 1d6 | 3.5 |
| 3 | 1d8 | 4.5 |
| 4 | 1d10 | 5.5 |
| 5 | 1d12 | 6.5 |
| 6 | 2d6 | 7 |
| 7 | 1d6+1d8 | 8 |
| 8 | 2d8 | 9 |
| 9 | 1d8+1d10 | 10 |
| 10 | 2d10 | 11 |
| 11 | 1d10+1d12 | 12 |
| 12 | 2d12 | 13 |
| 13 | 3d8 | 13.5 |
| … | adding a die each time the current dice max out | |
Every rung is +1 average damage over the last, or +0.5 where a die is added.
**Growth** sets how many rungs a weapon climbs per level:
| Growth | Rungs per level | A 1d6 weapon at levels 1, 2, 3, 4 | At level 9 |
|---|---|---|---|
| Standard | 1 | 1d6, 1d8, 1d10, 1d12 | 2d10 |
| Powerful | 2 | 1d6, 1d10, 2d6, 2d8 | 1d10+2d12 |
| Legendary | 3 | 1d6, 1d12, 2d8, 1d10+1d12 | 4d12 |
A weapon with a higher starting level counts from there: a 2d6 greatsword that
starts at level 3 with Standard growth is 2d6 at level 3, 1d6+1d8 at level 4
and 2d8 at level 5.
- At its starting level a weapon always shows its dice exactly as typed.
- Dice that are not on the ladder (`1d4+1`, `2d4+2`) climb from the highest
rung that is not stronger than them: `2d4+2` (average 7) continues from 2d6.
- Dice the app cannot read (free text such as "special") never change.
## 7. Attack and damage numbers
| Number | Formula |
|---|---|
| Attack bonus | Ability modifier + proficiency bonus |
| Damage | The dice at the copy's level + ability modifier |
- The ability modifier is Strength, Dexterity, or the higher of the two for a
Finesse weapon.
- The weapon's level changes the **dice only**, never the bonuses.
- Every character is treated as proficient with every weapon.
These numbers appear on the character sheet, in the quick-stats drawer, and
on the character's card in an encounter.
## 8. Starting weapons
In the builder's equipment step a new character can pick weapons that are:
- ticked as a **starting option** in the pool, and
- **starting level 1** (a new character is level 1).
Starting weapons and starting items share the campaign's "starting items"
allowance. They arrive at level 1, unequipped.
## 9. Weapons as rewards
On an encounter the DM can line up a weapon as a reward, at a chosen level
(not below its starting level) and quantity, and later award it to a
character. Awarding adds it to what the character holds, exactly as giving it
on the sheet would. See [ENCOUNTERS.md](ENCOUNTERS.md).
## 10. Permissions
| Action | DM | Owning player | Other players |
|---|---|---|---|
| See the pool and the library | Yes | Yes | Yes |
| Add, change or remove pool entries | Yes | No | No |
| Give a weapon from the pool, or take one away | Yes | No | No |
| Give a held weapon to another character | Yes | Yes | No |
| Change a held weapon's level or quantity | Yes | No | No |
| Equip or unequip | Yes | Yes, if the character can use it | No |
| See a character's weapons | Yes | Yes | Yes |
## 11. What is not modelled
- Weapon proficiency by class (everyone is proficient with everything)
- Properties: two-handed, versatile, light, reach, loading, thrown
- Range and ammunition
- Critical hits, advantage, and rolling the attack itself (use the dice roller)
- Magic bonuses such as +1 weapons (use a higher level or growth instead)
- Price and weight
## 12. The complete weapon library
Every weapon "📚 From Library" offers. Base damage is the damage at level 1.
Properties and range are carried into the campaign but not shown or used.
This list is written from the app's own data by `npm run docs:lists` (in `/backend`). Re-run it after changing the data; do not edit the list by hand.
<!-- BEGIN GENERATED: weapon-library -->
### Simple Melee (10)
| Weapon | Base damage | Type | Attacks with | Properties | Range |
|---|---|---|---|---|---|
| Club | 1d4 | bludgeoning | Strength | light | — |
| Dagger | 1d4 | piercing | Strength or Dexterity (finesse) | finesse, light, thrown | 20/60 ft |
| Greatclub | 1d8 | bludgeoning | Strength | two-handed | — |
| Handaxe | 1d6 | slashing | Strength | light, thrown | 20/60 ft |
| Javelin | 1d6 | piercing | Strength | thrown | 30/120 ft |
| Light Hammer | 1d4 | bludgeoning | Strength | light, thrown | 20/60 ft |
| Mace | 1d6 | bludgeoning | Strength | — | — |
| Quarterstaff | 1d6 | bludgeoning | Strength | versatile (1d8) | — |
| Sickle | 1d4 | slashing | Strength | light | — |
| Spear | 1d6 | piercing | Strength | thrown, versatile (1d8) | 20/60 ft |
### Simple Ranged (4)
| Weapon | Base damage | Type | Attacks with | Properties | Range |
|---|---|---|---|---|---|
| Light Crossbow | 1d8 | piercing | Dexterity | ammunition, loading, two-handed | 80/320 ft |
| Dart | 1d4 | piercing | Strength or Dexterity (finesse) | finesse, thrown | 20/60 ft |
| Shortbow | 1d6 | piercing | Dexterity | ammunition, two-handed | 80/320 ft |
| Sling | 1d4 | bludgeoning | Dexterity | ammunition | 30/120 ft |
### Martial Melee (18)
| Weapon | Base damage | Type | Attacks with | Properties | Range |
|---|---|---|---|---|---|
| Battleaxe | 1d8 | slashing | Strength | versatile (1d10) | — |
| Flail | 1d8 | bludgeoning | Strength | — | — |
| Glaive | 1d10 | slashing | Strength | heavy, reach, two-handed | — |
| Greataxe | 1d12 | slashing | Strength | heavy, two-handed | — |
| Greatsword | 2d6 | slashing | Strength | heavy, two-handed | — |
| Halberd | 1d10 | slashing | Strength | heavy, reach, two-handed | — |
| Lance | 1d12 | piercing | Strength | reach, special | — |
| Longsword | 1d8 | slashing | Strength | versatile (1d10) | — |
| Maul | 2d6 | bludgeoning | Strength | heavy, two-handed | — |
| Morningstar | 1d8 | piercing | Strength | — | — |
| Pike | 1d10 | piercing | Strength | heavy, reach, two-handed | — |
| Rapier | 1d8 | piercing | Strength or Dexterity (finesse) | finesse | — |
| Scimitar | 1d6 | slashing | Strength or Dexterity (finesse) | finesse, light | — |
| Shortsword | 1d6 | piercing | Strength or Dexterity (finesse) | finesse, light | — |
| Trident | 1d6 | piercing | Strength | thrown, versatile (1d8) | 20/60 ft |
| War Pick | 1d8 | piercing | Strength | — | — |
| Warhammer | 1d8 | bludgeoning | Strength | versatile (1d10) | — |
| Whip | 1d4 | slashing | Strength or Dexterity (finesse) | finesse, reach | — |
### Martial Ranged (5)
| Weapon | Base damage | Type | Attacks with | Properties | Range |
|---|---|---|---|---|---|
| Blowgun | 1 | piercing | Dexterity | ammunition, loading | 25/100 ft |
| Hand Crossbow | 1d6 | piercing | Dexterity | ammunition, light, loading | 30/120 ft |
| Heavy Crossbow | 1d10 | piercing | Dexterity | ammunition, heavy, loading, two-handed | 100/400 ft |
| Longbow | 1d8 | piercing | Dexterity | ammunition, heavy, two-handed | 150/600 ft |
| Net | - | special | Dexterity | special, thrown | 5/15 ft |
<!-- END GENERATED: weapon-library -->