Files
the-sunken-reach/backend/src/game/data/weaponsLibrary.js
T
joshuaandClaude Opus 5.5 0124e3bc53 V1.11.0: gear that applies itself, equipping that matters, a character panel
- Weapons and items can carry effects: bonuses and penalties to AC, speed,
  initiative, max HP, passive Perception, ability scores, saving throws
  and skills, plus a note. They apply on their own while equipped and stop
  when the thing comes off. Armor is an item with an AC effect. The DM
  sets them with "Effects" on a row in the weapon or item pool.
- The sheet's "armor bonus" is now "Extra AC", the DM's own adjustment on
  top of gear, and only the DM can set it.
- Only what is equipped counts: a weapon has to be equipped to be used in
  an encounter. A character can have two things equipped at once, one of
  them a weapon (campaign settings). Equipping at the limit is refused
  with a message, and can be changed at any time, mid-encounter included.
- A built-in item library: armor, shields, worn gear and supplies, with
  their effects set. The weapon library gains paired weapons (a pair of
  daggers is one weapon).
- A floating character button on every page opens a panel with a
  character's numbers and everything they hold, with equip ticks. Players
  get their own characters, the DM everyone's, and each character card in
  an encounter has an Inventory button. It replaces the quick stats drawer.
- A player's own characters stand out: marked and highlighted in
  encounters, with a button that jumps to their card; highlighted on the
  party screen; and listed once, not twice, on the campaign page.
- All packages at version 1.11.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:03:53 +02:00

64 lines
9.2 KiB
JavaScript

// Default weapon library — the SRD simple + martial weapon list, offered to
// any campaign so a DM isn't hand-typing common weapons from scratch. Shape
// matches the `Weapon` Prisma model minus `id`/`campaignId`, plus a stable
// `key` for "add to campaign" lookups and a `category` for the library
// picker's filter. attackAbility follows the schema's STR|DEX|FINESSE.
//
// A character has one weapon equipped at a time (a campaign setting), so a
// weapon fought with in each hand is a single entry of its own: see "Paired".
const WEAPON_LIBRARY = [
// Simple Melee
{ key: 'club', name: 'Club', category: 'Simple Melee', damageDice: '1d4', damageType: 'bludgeoning', attackAbility: 'STR', properties: ['light'], rangeNormal: null, rangeLong: null },
{ key: 'dagger', name: 'Dagger', category: 'Simple Melee', damageDice: '1d4', damageType: 'piercing', attackAbility: 'FINESSE', properties: ['finesse', 'light', 'thrown'], rangeNormal: 20, rangeLong: 60 },
{ key: 'greatclub', name: 'Greatclub', category: 'Simple Melee', damageDice: '1d8', damageType: 'bludgeoning', attackAbility: 'STR', properties: ['two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'handaxe', name: 'Handaxe', category: 'Simple Melee', damageDice: '1d6', damageType: 'slashing', attackAbility: 'STR', properties: ['light', 'thrown'], rangeNormal: 20, rangeLong: 60 },
{ key: 'javelin', name: 'Javelin', category: 'Simple Melee', damageDice: '1d6', damageType: 'piercing', attackAbility: 'STR', properties: ['thrown'], rangeNormal: 30, rangeLong: 120 },
{ key: 'light-hammer', name: 'Light Hammer', category: 'Simple Melee', damageDice: '1d4', damageType: 'bludgeoning', attackAbility: 'STR', properties: ['light', 'thrown'], rangeNormal: 20, rangeLong: 60 },
{ key: 'mace', name: 'Mace', category: 'Simple Melee', damageDice: '1d6', damageType: 'bludgeoning', attackAbility: 'STR', properties: [], rangeNormal: null, rangeLong: null },
{ key: 'quarterstaff', name: 'Quarterstaff', category: 'Simple Melee', damageDice: '1d6', damageType: 'bludgeoning', attackAbility: 'STR', properties: ['versatile (1d8)'], rangeNormal: null, rangeLong: null },
{ key: 'sickle', name: 'Sickle', category: 'Simple Melee', damageDice: '1d4', damageType: 'slashing', attackAbility: 'STR', properties: ['light'], rangeNormal: null, rangeLong: null },
{ key: 'spear', name: 'Spear', category: 'Simple Melee', damageDice: '1d6', damageType: 'piercing', attackAbility: 'STR', properties: ['thrown', 'versatile (1d8)'], rangeNormal: 20, rangeLong: 60 },
// Simple Ranged
{ key: 'light-crossbow', name: 'Light Crossbow', category: 'Simple Ranged', damageDice: '1d8', damageType: 'piercing', attackAbility: 'DEX', properties: ['ammunition', 'loading', 'two-handed'], rangeNormal: 80, rangeLong: 320 },
{ key: 'dart', name: 'Dart', category: 'Simple Ranged', damageDice: '1d4', damageType: 'piercing', attackAbility: 'FINESSE', properties: ['finesse', 'thrown'], rangeNormal: 20, rangeLong: 60 },
{ key: 'shortbow', name: 'Shortbow', category: 'Simple Ranged', damageDice: '1d6', damageType: 'piercing', attackAbility: 'DEX', properties: ['ammunition', 'two-handed'], rangeNormal: 80, rangeLong: 320 },
{ key: 'sling', name: 'Sling', category: 'Simple Ranged', damageDice: '1d4', damageType: 'bludgeoning', attackAbility: 'DEX', properties: ['ammunition'], rangeNormal: 30, rangeLong: 120 },
// Martial Melee
{ key: 'battleaxe', name: 'Battleaxe', category: 'Martial Melee', damageDice: '1d8', damageType: 'slashing', attackAbility: 'STR', properties: ['versatile (1d10)'], rangeNormal: null, rangeLong: null },
{ key: 'flail', name: 'Flail', category: 'Martial Melee', damageDice: '1d8', damageType: 'bludgeoning', attackAbility: 'STR', properties: [], rangeNormal: null, rangeLong: null },
{ key: 'glaive', name: 'Glaive', category: 'Martial Melee', damageDice: '1d10', damageType: 'slashing', attackAbility: 'STR', properties: ['heavy', 'reach', 'two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'greataxe', name: 'Greataxe', category: 'Martial Melee', damageDice: '1d12', damageType: 'slashing', attackAbility: 'STR', properties: ['heavy', 'two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'greatsword', name: 'Greatsword', category: 'Martial Melee', damageDice: '2d6', damageType: 'slashing', attackAbility: 'STR', properties: ['heavy', 'two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'halberd', name: 'Halberd', category: 'Martial Melee', damageDice: '1d10', damageType: 'slashing', attackAbility: 'STR', properties: ['heavy', 'reach', 'two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'lance', name: 'Lance', category: 'Martial Melee', damageDice: '1d12', damageType: 'piercing', attackAbility: 'STR', properties: ['reach', 'special'], rangeNormal: null, rangeLong: null },
{ key: 'longsword', name: 'Longsword', category: 'Martial Melee', damageDice: '1d8', damageType: 'slashing', attackAbility: 'STR', properties: ['versatile (1d10)'], rangeNormal: null, rangeLong: null },
{ key: 'maul', name: 'Maul', category: 'Martial Melee', damageDice: '2d6', damageType: 'bludgeoning', attackAbility: 'STR', properties: ['heavy', 'two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'morningstar', name: 'Morningstar', category: 'Martial Melee', damageDice: '1d8', damageType: 'piercing', attackAbility: 'STR', properties: [], rangeNormal: null, rangeLong: null },
{ key: 'pike', name: 'Pike', category: 'Martial Melee', damageDice: '1d10', damageType: 'piercing', attackAbility: 'STR', properties: ['heavy', 'reach', 'two-handed'], rangeNormal: null, rangeLong: null },
{ key: 'rapier', name: 'Rapier', category: 'Martial Melee', damageDice: '1d8', damageType: 'piercing', attackAbility: 'FINESSE', properties: ['finesse'], rangeNormal: null, rangeLong: null },
{ key: 'scimitar', name: 'Scimitar', category: 'Martial Melee', damageDice: '1d6', damageType: 'slashing', attackAbility: 'FINESSE', properties: ['finesse', 'light'], rangeNormal: null, rangeLong: null },
{ key: 'shortsword', name: 'Shortsword', category: 'Martial Melee', damageDice: '1d6', damageType: 'piercing', attackAbility: 'FINESSE', properties: ['finesse', 'light'], rangeNormal: null, rangeLong: null },
{ key: 'trident', name: 'Trident', category: 'Martial Melee', damageDice: '1d6', damageType: 'piercing', attackAbility: 'STR', properties: ['thrown', 'versatile (1d8)'], rangeNormal: 20, rangeLong: 60 },
{ key: 'war-pick', name: 'War Pick', category: 'Martial Melee', damageDice: '1d8', damageType: 'piercing', attackAbility: 'STR', properties: [], rangeNormal: null, rangeLong: null },
{ key: 'warhammer', name: 'Warhammer', category: 'Martial Melee', damageDice: '1d8', damageType: 'bludgeoning', attackAbility: 'STR', properties: ['versatile (1d10)'], rangeNormal: null, rangeLong: null },
{ key: 'whip', name: 'Whip', category: 'Martial Melee', damageDice: '1d4', damageType: 'slashing', attackAbility: 'FINESSE', properties: ['finesse', 'reach'], rangeNormal: null, rangeLong: null },
// Martial Ranged
{ key: 'blowgun', name: 'Blowgun', category: 'Martial Ranged', damageDice: '1', damageType: 'piercing', attackAbility: 'DEX', properties: ['ammunition', 'loading'], rangeNormal: 25, rangeLong: 100 },
{ key: 'hand-crossbow', name: 'Hand Crossbow', category: 'Martial Ranged', damageDice: '1d6', damageType: 'piercing', attackAbility: 'DEX', properties: ['ammunition', 'light', 'loading'], rangeNormal: 30, rangeLong: 120 },
{ key: 'heavy-crossbow', name: 'Heavy Crossbow', category: 'Martial Ranged', damageDice: '1d10', damageType: 'piercing', attackAbility: 'DEX', properties: ['ammunition', 'heavy', 'loading', 'two-handed'], rangeNormal: 100, rangeLong: 400 },
{ key: 'longbow', name: 'Longbow', category: 'Martial Ranged', damageDice: '1d8', damageType: 'piercing', attackAbility: 'DEX', properties: ['ammunition', 'heavy', 'two-handed'], rangeNormal: 150, rangeLong: 600 },
{ key: 'net', name: 'Net', category: 'Martial Ranged', damageDice: '-', damageType: 'special', attackAbility: 'DEX', properties: ['special', 'thrown'], rangeNormal: 5, rangeLong: 15 },
// Paired: one in each hand, as a single weapon. The damage is both blades.
{ key: 'paired-daggers', name: 'Paired Daggers', category: 'Paired', damageDice: '2d4', damageType: 'piercing', attackAbility: 'FINESSE', properties: ['finesse', 'light', 'paired'], rangeNormal: null, rangeLong: null, effectNote: 'A dagger in each hand: takes both hands.' },
{ key: 'paired-shortswords', name: 'Paired Shortswords', category: 'Paired', damageDice: '2d6', damageType: 'piercing', attackAbility: 'FINESSE', properties: ['finesse', 'light', 'paired'], rangeNormal: null, rangeLong: null, effectNote: 'A shortsword in each hand: takes both hands.' },
{ key: 'paired-scimitars', name: 'Paired Scimitars', category: 'Paired', damageDice: '2d6', damageType: 'slashing', attackAbility: 'FINESSE', properties: ['finesse', 'light', 'paired'], rangeNormal: null, rangeLong: null, effectNote: 'A scimitar in each hand: takes both hands.' },
{ key: 'paired-handaxes', name: 'Paired Handaxes', category: 'Paired', damageDice: '2d6', damageType: 'slashing', attackAbility: 'STR', properties: ['light', 'paired'], rangeNormal: null, rangeLong: null, effectNote: 'A handaxe in each hand: takes both hands.' },
];
module.exports = { WEAPON_LIBRARY };