From 49b60954fedc7fd6ecbf42ff9f9543134e0ee8fc Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Tue, 16 Dec 2025 23:19:30 -0600 Subject: [PATCH] Add complete weapons compendium (43 weapons) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Generate all 43 weapon JSON files with proper data model - Parse damage dice, grip types, ranges, properties from source - Convert values to copper (1g = 10s = 100c) - Map properties: Brawl, Brutal, Cleave, Entangle, Finesse, Keen, Long, Near, Ranged, Shield, Thrown - Calculate versatile damage (increased die size for 2H grip) - Assign damage types: blunt/piercing/slashing based on weapon type - Add validation script for future verification - All weapons validated against NoteDiscovery source Weapon categories: - Melee: 28 (swords, axes, hammers, polearms) - Ranged: 10 (bows, crossbows, firearms) - Brawl: 5 (caestus, gauntlet, katar, unarmed) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- packs/_source/weapons/arbalest.json | 59 ++++++ packs/_source/weapons/battleaxe.json | 59 ++++++ packs/_source/weapons/bottle-glass.json | 59 ++++++ packs/_source/weapons/buckler.json | 59 ++++++ packs/_source/weapons/caestus.json | 59 ++++++ packs/_source/weapons/club.json | 59 ++++++ packs/_source/weapons/crossbow-light.json | 59 ++++++ packs/_source/weapons/crossbow.json | 59 ++++++ packs/_source/weapons/dagger.json | 59 ++++++ packs/_source/weapons/flail.json | 59 ++++++ packs/_source/weapons/garotte-wire.json | 59 ++++++ packs/_source/weapons/gauntlet.json | 59 ++++++ packs/_source/weapons/greataxe.json | 59 ++++++ packs/_source/weapons/greatclub.json | 59 ++++++ packs/_source/weapons/greatshield.json | 59 ++++++ packs/_source/weapons/greatsword.json | 59 ++++++ packs/_source/weapons/handaxe.json | 59 ++++++ packs/_source/weapons/handgun.json | 59 ++++++ packs/_source/weapons/javelin.json | 59 ++++++ packs/_source/weapons/katar.json | 59 ++++++ packs/_source/weapons/lance.json | 59 ++++++ packs/_source/weapons/light-hammer.json | 59 ++++++ packs/_source/weapons/longbow.json | 59 ++++++ packs/_source/weapons/longsword.json | 59 ++++++ packs/_source/weapons/lucerne.json | 59 ++++++ packs/_source/weapons/mace.json | 59 ++++++ packs/_source/weapons/morningstar.json | 59 ++++++ packs/_source/weapons/net.json | 59 ++++++ packs/_source/weapons/pike.json | 59 ++++++ packs/_source/weapons/poleblade.json | 59 ++++++ packs/_source/weapons/rifle.json | 59 ++++++ packs/_source/weapons/shortbow.json | 59 ++++++ packs/_source/weapons/shortsword.json | 59 ++++++ packs/_source/weapons/shotgun-sawed-off.json | 59 ++++++ packs/_source/weapons/shotgun.json | 59 ++++++ packs/_source/weapons/sling.json | 59 ++++++ packs/_source/weapons/spear.json | 59 ++++++ packs/_source/weapons/staff.json | 59 ++++++ packs/_source/weapons/standard-shield.json | 59 ++++++ packs/_source/weapons/unarmed.json | 59 ++++++ packs/_source/weapons/warhammer.json | 59 ++++++ packs/_source/weapons/whip-chain.json | 59 ++++++ packs/_source/weapons/whip-leather.json | 59 ++++++ scripts/validate_weapons.py | 193 +++++++++++++++++++ 44 files changed, 2730 insertions(+) create mode 100644 packs/_source/weapons/arbalest.json create mode 100644 packs/_source/weapons/battleaxe.json create mode 100644 packs/_source/weapons/bottle-glass.json create mode 100644 packs/_source/weapons/buckler.json create mode 100644 packs/_source/weapons/caestus.json create mode 100644 packs/_source/weapons/club.json create mode 100644 packs/_source/weapons/crossbow-light.json create mode 100644 packs/_source/weapons/crossbow.json create mode 100644 packs/_source/weapons/dagger.json create mode 100644 packs/_source/weapons/flail.json create mode 100644 packs/_source/weapons/garotte-wire.json create mode 100644 packs/_source/weapons/gauntlet.json create mode 100644 packs/_source/weapons/greataxe.json create mode 100644 packs/_source/weapons/greatclub.json create mode 100644 packs/_source/weapons/greatshield.json create mode 100644 packs/_source/weapons/greatsword.json create mode 100644 packs/_source/weapons/handaxe.json create mode 100644 packs/_source/weapons/handgun.json create mode 100644 packs/_source/weapons/javelin.json create mode 100644 packs/_source/weapons/katar.json create mode 100644 packs/_source/weapons/lance.json create mode 100644 packs/_source/weapons/light-hammer.json create mode 100644 packs/_source/weapons/longbow.json create mode 100644 packs/_source/weapons/longsword.json create mode 100644 packs/_source/weapons/lucerne.json create mode 100644 packs/_source/weapons/mace.json create mode 100644 packs/_source/weapons/morningstar.json create mode 100644 packs/_source/weapons/net.json create mode 100644 packs/_source/weapons/pike.json create mode 100644 packs/_source/weapons/poleblade.json create mode 100644 packs/_source/weapons/rifle.json create mode 100644 packs/_source/weapons/shortbow.json create mode 100644 packs/_source/weapons/shortsword.json create mode 100644 packs/_source/weapons/shotgun-sawed-off.json create mode 100644 packs/_source/weapons/shotgun.json create mode 100644 packs/_source/weapons/sling.json create mode 100644 packs/_source/weapons/spear.json create mode 100644 packs/_source/weapons/staff.json create mode 100644 packs/_source/weapons/standard-shield.json create mode 100644 packs/_source/weapons/unarmed.json create mode 100644 packs/_source/weapons/warhammer.json create mode 100644 packs/_source/weapons/whip-chain.json create mode 100644 packs/_source/weapons/whip-leather.json create mode 100644 scripts/validate_weapons.py diff --git a/packs/_source/weapons/arbalest.json b/packs/_source/weapons/arbalest.json new file mode 100644 index 0000000..1e7c49d --- /dev/null +++ b/packs/_source/weapons/arbalest.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponArbalest", + "name": "Arbalest", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A heavy crossbow with brutal stopping power.

", + "damage": "1d8", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 700, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponArbalest", + "reviewed": true +} diff --git a/packs/_source/weapons/battleaxe.json b/packs/_source/weapons/battleaxe.json new file mode 100644 index 0000000..266e9e2 --- /dev/null +++ b/packs/_source/weapons/battleaxe.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponBattleaxe", + "name": "Battleaxe", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile axe that can cleave through multiple foes.

", + "damage": "1d6", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "versatile", + "versatileDamage": "1d8", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": true, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": true, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 700, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponBattleaxe", + "reviewed": true +} diff --git a/packs/_source/weapons/bottle-glass.json b/packs/_source/weapons/bottle-glass.json new file mode 100644 index 0000000..4ab14ef --- /dev/null +++ b/packs/_source/weapons/bottle-glass.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponBottleGlass", + "name": "Bottle, glass", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A broken glass bottle that can be thrown.

", + "damage": "1", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 20, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponBottleGlass", + "reviewed": true +} diff --git a/packs/_source/weapons/buckler.json b/packs/_source/weapons/buckler.json new file mode 100644 index 0000000..a53455d --- /dev/null +++ b/packs/_source/weapons/buckler.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponBuckler", + "name": "Buckler", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A small shield that can be used as a finesse weapon.

", + "damage": "1", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": true + }, + "material": "mundane", + "slots": 1, + "value": 500, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponBuckler", + "reviewed": true +} diff --git a/packs/_source/weapons/caestus.json b/packs/_source/weapons/caestus.json new file mode 100644 index 0000000..47aa666 --- /dev/null +++ b/packs/_source/weapons/caestus.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponCaestus", + "name": "Caestus", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

Fighting gloves that leave hands free for brawling.

", + "damage": "1d4", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "fist", + "versatileDamage": "", + "attackType": "brawl", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": true, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 200, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponCaestus", + "reviewed": true +} diff --git a/packs/_source/weapons/club.json b/packs/_source/weapons/club.json new file mode 100644 index 0000000..611a3b5 --- /dev/null +++ b/packs/_source/weapons/club.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponClub", + "name": "Club", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A simple bludgeoning weapon.

", + "damage": "1d4", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 20, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponClub", + "reviewed": true +} diff --git a/packs/_source/weapons/crossbow-light.json b/packs/_source/weapons/crossbow-light.json new file mode 100644 index 0000000..ee6af74 --- /dev/null +++ b/packs/_source/weapons/crossbow-light.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponCrossbowLight", + "name": "Crossbow, light", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A lightweight one-handed crossbow.

", + "damage": "1d4", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponCrossbowLight", + "reviewed": true +} diff --git a/packs/_source/weapons/crossbow.json b/packs/_source/weapons/crossbow.json new file mode 100644 index 0000000..f0d5dcb --- /dev/null +++ b/packs/_source/weapons/crossbow.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponCrossbow", + "name": "Crossbow", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A standard crossbow for ranged combat.

", + "damage": "1d6", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 800, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponCrossbow", + "reviewed": true +} diff --git a/packs/_source/weapons/dagger.json b/packs/_source/weapons/dagger.json new file mode 100644 index 0000000..690f1d3 --- /dev/null +++ b/packs/_source/weapons/dagger.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponDagger", + "name": "Dagger", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile blade that can be thrown or used in close combat.

", + "damage": "1d4", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponDagger", + "reviewed": true +} diff --git a/packs/_source/weapons/flail.json b/packs/_source/weapons/flail.json new file mode 100644 index 0000000..be7ab71 --- /dev/null +++ b/packs/_source/weapons/flail.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponFlail", + "name": "Flail", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A brutal weapon with a spiked ball on a chain.

", + "damage": "1d8", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 200, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponFlail", + "reviewed": true +} diff --git a/packs/_source/weapons/garotte-wire.json b/packs/_source/weapons/garotte-wire.json new file mode 100644 index 0000000..f880c2d --- /dev/null +++ b/packs/_source/weapons/garotte-wire.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponGarotteWire", + "name": "Garotte wire", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A strangling wire used for stealthy takedowns.

", + "damage": "0", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": true, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponGarotteWire", + "reviewed": true +} diff --git a/packs/_source/weapons/gauntlet.json b/packs/_source/weapons/gauntlet.json new file mode 100644 index 0000000..588c2b9 --- /dev/null +++ b/packs/_source/weapons/gauntlet.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponGauntlet", + "name": "Gauntlet", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

Armored gloves for brawling combat.

", + "damage": "1d4", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "fist", + "versatileDamage": "", + "attackType": "brawl", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": true, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 200, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponGauntlet", + "reviewed": true +} diff --git a/packs/_source/weapons/greataxe.json b/packs/_source/weapons/greataxe.json new file mode 100644 index 0000000..386feeb --- /dev/null +++ b/packs/_source/weapons/greataxe.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponGreataxe", + "name": "Greataxe", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A massive two-handed axe that cleaves and devastates.

", + "damage": "1d10", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": true, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 500, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponGreataxe", + "reviewed": true +} diff --git a/packs/_source/weapons/greatclub.json b/packs/_source/weapons/greatclub.json new file mode 100644 index 0000000..c5667d7 --- /dev/null +++ b/packs/_source/weapons/greatclub.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponGreatclub", + "name": "Greatclub", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A massive bludgeoning weapon requiring two hands.

", + "damage": "1d8", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 300, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponGreatclub", + "reviewed": true +} diff --git a/packs/_source/weapons/greatshield.json b/packs/_source/weapons/greatshield.json new file mode 100644 index 0000000..af38186 --- /dev/null +++ b/packs/_source/weapons/greatshield.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponGreatshield", + "name": "Greatshield", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A massive shield that requires both hands but provides superior protection.

", + "damage": "1d6", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": true + }, + "material": "mundane", + "slots": 2, + "value": 600, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponGreatshield", + "reviewed": true +} diff --git a/packs/_source/weapons/greatsword.json b/packs/_source/weapons/greatsword.json new file mode 100644 index 0000000..f0995b1 --- /dev/null +++ b/packs/_source/weapons/greatsword.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponGreatsword", + "name": "Greatsword", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A massive blade that cleaves through armor and foes alike.

", + "damage": "1d10", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": true, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 800, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponGreatsword", + "reviewed": true +} diff --git a/packs/_source/weapons/handaxe.json b/packs/_source/weapons/handaxe.json new file mode 100644 index 0000000..3172fe4 --- /dev/null +++ b/packs/_source/weapons/handaxe.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponHandaxe", + "name": "Handaxe", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A small axe that can be thrown.

", + "damage": "1d4", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponHandaxe", + "reviewed": true +} diff --git a/packs/_source/weapons/handgun.json b/packs/_source/weapons/handgun.json new file mode 100644 index 0000000..576a1ee --- /dev/null +++ b/packs/_source/weapons/handgun.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponHandgun", + "name": "Handgun", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A one-handed firearm for ranged combat.

", + "damage": "1d4", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponHandgun", + "reviewed": true +} diff --git a/packs/_source/weapons/javelin.json b/packs/_source/weapons/javelin.json new file mode 100644 index 0000000..5c00b6c --- /dev/null +++ b/packs/_source/weapons/javelin.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponJavelin", + "name": "Javelin", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A throwing spear designed for ranged combat.

", + "damage": "1d4", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponJavelin", + "reviewed": true +} diff --git a/packs/_source/weapons/katar.json b/packs/_source/weapons/katar.json new file mode 100644 index 0000000..2d40632 --- /dev/null +++ b/packs/_source/weapons/katar.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponKatar", + "name": "Katar", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A punching dagger that leaves hands free for brawling and precise strikes.

", + "damage": "1d4", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "fist", + "versatileDamage": "", + "attackType": "brawl", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": true, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 200, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponKatar", + "reviewed": true +} diff --git a/packs/_source/weapons/lance.json b/packs/_source/weapons/lance.json new file mode 100644 index 0000000..38fddc9 --- /dev/null +++ b/packs/_source/weapons/lance.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponLance", + "name": "Lance", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

An extra-long cavalry weapon with keen striking power.

", + "damage": "1d10", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 10, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": true, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": true, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 3, + "value": 900, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponLance", + "reviewed": true +} diff --git a/packs/_source/weapons/light-hammer.json b/packs/_source/weapons/light-hammer.json new file mode 100644 index 0000000..5f3cc15 --- /dev/null +++ b/packs/_source/weapons/light-hammer.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponLightHammer", + "name": "Light hammer", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A small hammer that can be thrown.

", + "damage": "1d6", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponLightHammer", + "reviewed": true +} diff --git a/packs/_source/weapons/longbow.json b/packs/_source/weapons/longbow.json new file mode 100644 index 0000000..4bcb32b --- /dev/null +++ b/packs/_source/weapons/longbow.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponLongbow", + "name": "Longbow", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A powerful bow with keen accuracy at long range.

", + "damage": "1d8", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 800, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponLongbow", + "reviewed": true +} diff --git a/packs/_source/weapons/longsword.json b/packs/_source/weapons/longsword.json new file mode 100644 index 0000000..511b4ed --- /dev/null +++ b/packs/_source/weapons/longsword.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponLongsword", + "name": "Longsword", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile blade with keen cutting edge.

", + "damage": "1d8", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "versatile", + "versatileDamage": "1d10", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": true, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponLongsword", + "reviewed": true +} diff --git a/packs/_source/weapons/lucerne.json b/packs/_source/weapons/lucerne.json new file mode 100644 index 0000000..e5bcdc7 --- /dev/null +++ b/packs/_source/weapons/lucerne.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponLucerne", + "name": "Lucerne", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A brutal polearm with hammer and spike for devastating blows.

", + "damage": "1d8", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 10, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": true, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": false, + "keen": false, + "long": true, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 900, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponLucerne", + "reviewed": true +} diff --git a/packs/_source/weapons/mace.json b/packs/_source/weapons/mace.json new file mode 100644 index 0000000..0c38bf0 --- /dev/null +++ b/packs/_source/weapons/mace.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponMace", + "name": "Mace", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A simple bludgeoning weapon with a weighted head.

", + "damage": "1d6", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponMace", + "reviewed": true +} diff --git a/packs/_source/weapons/morningstar.json b/packs/_source/weapons/morningstar.json new file mode 100644 index 0000000..f53661c --- /dev/null +++ b/packs/_source/weapons/morningstar.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponMorningstar", + "name": "Morningstar", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile spiked mace.

", + "damage": "1d6", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "versatile", + "versatileDamage": "1d8", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": true, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 800, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponMorningstar", + "reviewed": true +} diff --git a/packs/_source/weapons/net.json b/packs/_source/weapons/net.json new file mode 100644 index 0000000..57cb8d4 --- /dev/null +++ b/packs/_source/weapons/net.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponNet", + "name": "Net", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A throwing net used to entangle and restrain foes.

", + "damage": "0", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": true, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponNet", + "reviewed": true +} diff --git a/packs/_source/weapons/pike.json b/packs/_source/weapons/pike.json new file mode 100644 index 0000000..8e5666c --- /dev/null +++ b/packs/_source/weapons/pike.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponPike", + "name": "Pike", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A long spear that can brutalize and entangle opponents.

", + "damage": "1d10", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 10, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": true, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": true, + "keen": false, + "long": true, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 3, + "value": 900, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponPike", + "reviewed": true +} diff --git a/packs/_source/weapons/poleblade.json b/packs/_source/weapons/poleblade.json new file mode 100644 index 0000000..eb6e0a6 --- /dev/null +++ b/packs/_source/weapons/poleblade.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponPoleblade", + "name": "Poleblade", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A polearm with a keen blade for slashing strikes.

", + "damage": "1d8", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 10, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": true, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": true, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 900, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponPoleblade", + "reviewed": true +} diff --git a/packs/_source/weapons/rifle.json b/packs/_source/weapons/rifle.json new file mode 100644 index 0000000..c9fe779 --- /dev/null +++ b/packs/_source/weapons/rifle.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponRifle", + "name": "Rifle", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A long-range firearm with cleaving power.

", + "damage": "1d8", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": true, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": true, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponRifle", + "reviewed": true +} diff --git a/packs/_source/weapons/shortbow.json b/packs/_source/weapons/shortbow.json new file mode 100644 index 0000000..debf354 --- /dev/null +++ b/packs/_source/weapons/shortbow.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponShortbow", + "name": "Shortbow", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A finesse bow with keen accuracy.

", + "damage": "1d6", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponShortbow", + "reviewed": true +} diff --git a/packs/_source/weapons/shortsword.json b/packs/_source/weapons/shortsword.json new file mode 100644 index 0000000..5e01005 --- /dev/null +++ b/packs/_source/weapons/shortsword.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponShortsword", + "name": "Shortsword", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A light blade with finesse and keen edge.

", + "damage": "1d6", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 200, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponShortsword", + "reviewed": true +} diff --git a/packs/_source/weapons/shotgun-sawed-off.json b/packs/_source/weapons/shotgun-sawed-off.json new file mode 100644 index 0000000..b0d5e30 --- /dev/null +++ b/packs/_source/weapons/shotgun-sawed-off.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponShotgunSawedOff", + "name": "Shotgun, sawed-off", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A compact, one-handed shotgun with brutal stopping power.

", + "damage": "1d8", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 30, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": false, + "keen": false, + "long": false, + "near": true, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 700, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponShotgunSawedOff", + "reviewed": true +} diff --git a/packs/_source/weapons/shotgun.json b/packs/_source/weapons/shotgun.json new file mode 100644 index 0000000..60db21a --- /dev/null +++ b/packs/_source/weapons/shotgun.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponShotgun", + "name": "Shotgun", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A devastating firearm effective at medium range.

", + "damage": "1d10", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "2h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 30, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": false, + "keen": false, + "long": false, + "near": true, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 700, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponShotgun", + "reviewed": true +} diff --git a/packs/_source/weapons/sling.json b/packs/_source/weapons/sling.json new file mode 100644 index 0000000..e6b7641 --- /dev/null +++ b/packs/_source/weapons/sling.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponSling", + "name": "Sling", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A simple ranged weapon that launches stones.

", + "damage": "1d4", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "ranged", + "range": { + "value": 120, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": true, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 50, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponSling", + "reviewed": true +} diff --git a/packs/_source/weapons/spear.json b/packs/_source/weapons/spear.json new file mode 100644 index 0000000..4f44f20 --- /dev/null +++ b/packs/_source/weapons/spear.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponSpear", + "name": "Spear", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile weapon that can be thrown or used to attack nearby foes.

", + "damage": "1d6", + "damageType": "piercing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": true, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": true, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 200, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponSpear", + "reviewed": true +} diff --git a/packs/_source/weapons/staff.json b/packs/_source/weapons/staff.json new file mode 100644 index 0000000..2997752 --- /dev/null +++ b/packs/_source/weapons/staff.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponStaff", + "name": "Staff", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile quarterstaff used with finesse.

", + "damage": "1d4", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "versatile", + "versatileDamage": "1d6", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": true, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponStaff", + "reviewed": true +} diff --git a/packs/_source/weapons/standard-shield.json b/packs/_source/weapons/standard-shield.json new file mode 100644 index 0000000..ff5d6c9 --- /dev/null +++ b/packs/_source/weapons/standard-shield.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponStandardShield", + "name": "Standard shield", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile shield that can block ranged attacks and be thrown.

", + "damage": "1d4", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": true, + "long": false, + "near": false, + "ranged": true, + "shield": true + }, + "material": "mundane", + "slots": 2, + "value": 750, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponStandardShield", + "reviewed": true +} diff --git a/packs/_source/weapons/unarmed.json b/packs/_source/weapons/unarmed.json new file mode 100644 index 0000000..04f7fb2 --- /dev/null +++ b/packs/_source/weapons/unarmed.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponUnarmed", + "name": "Unarmed", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

Your bare fists and body used for combat.

", + "damage": "1", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "fist", + "versatileDamage": "", + "attackType": "brawl", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": true, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 0, + "value": 0, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponUnarmed", + "reviewed": true +} diff --git a/packs/_source/weapons/warhammer.json b/packs/_source/weapons/warhammer.json new file mode 100644 index 0000000..618bbae --- /dev/null +++ b/packs/_source/weapons/warhammer.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponWarhammer", + "name": "Warhammer", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A versatile hammer that delivers brutal blows.

", + "damage": "1d8", + "damageType": "blunt", + "bonusDamage": 0, + "grip": "versatile", + "versatileDamage": "1d10", + "attackType": "melee", + "range": { + "value": 5, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": false, + "loading": false, + "brawl": false, + "crude": false, + "versatile": true, + "brutal": true, + "entangle": false, + "keen": false, + "long": false, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 800, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponWarhammer", + "reviewed": true +} diff --git a/packs/_source/weapons/whip-chain.json b/packs/_source/weapons/whip-chain.json new file mode 100644 index 0000000..b5e9f6e --- /dev/null +++ b/packs/_source/weapons/whip-chain.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponWhipChain", + "name": "Whip, chain", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A brutal chain whip with extended reach.

", + "damage": "1d6", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "melee", + "range": { + "value": 10, + "units": "ft" + }, + "properties": { + "finesse": false, + "thrown": false, + "cleave": false, + "reach": true, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": true, + "entangle": true, + "keen": false, + "long": true, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 2, + "value": 400, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponWhipChain", + "reviewed": true +} diff --git a/packs/_source/weapons/whip-leather.json b/packs/_source/weapons/whip-leather.json new file mode 100644 index 0000000..bf8cc88 --- /dev/null +++ b/packs/_source/weapons/whip-leather.json @@ -0,0 +1,59 @@ +{ + "_id": "vagabondWeaponWhipLeather", + "name": "Whip, leather", + "type": "weapon", + "img": "icons/svg/sword.svg", + "system": { + "description": "

A flexible whip with extended reach and finesse.

", + "damage": "1", + "damageType": "slashing", + "bonusDamage": 0, + "grip": "1h", + "versatileDamage": "", + "attackType": "finesse", + "range": { + "value": 10, + "units": "ft" + }, + "properties": { + "finesse": true, + "thrown": false, + "cleave": false, + "reach": true, + "loading": false, + "brawl": false, + "crude": false, + "versatile": false, + "brutal": false, + "entangle": true, + "keen": false, + "long": true, + "near": false, + "ranged": false, + "shield": false + }, + "material": "mundane", + "slots": 1, + "value": 100, + "equipped": false, + "equippedHand": null, + "quantity": 1, + "attackBonus": 0, + "critThreshold": null, + "relic": { + "isRelic": false, + "tier": 1, + "abilityName": "", + "abilityDescription": "", + "activationCost": "", + "usesPerDay": 0, + "usesRemaining": 0, + "requiresAttunement": false, + "attuned": false, + "lore": "" + } + }, + "effects": [], + "_key": "!items!vagabondWeaponWhipLeather", + "reviewed": true +} diff --git a/scripts/validate_weapons.py b/scripts/validate_weapons.py new file mode 100644 index 0000000..a34165e --- /dev/null +++ b/scripts/validate_weapons.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +"""Validate generated weapon JSONs against NoteDiscovery source.""" + +import json +import os +import re +import subprocess + +def get_source_content(): + """Fetch weapon source from NoteDiscovery.""" + result = subprocess.run( + ['python', 'client.py', 'read', 'gaming/vagabond-rpg/gear-weapons.md'], + cwd=os.path.expanduser('~/.claude/skills/notediscovery'), + capture_output=True, + text=True + ) + data = json.loads(result.stdout) + return data['content'] + +def parse_source_weapons(text): + """Parse source weapon data into a dictionary.""" + weapons = {} + + # Find the weapons table + lines = text.split('\n') + in_table = False + + for line in lines: + if '| Weapon | Damage | Grip |' in line: + in_table = True + continue + if in_table and line.startswith('|---'): + continue + if in_table and line.startswith('|') and line.count('|') >= 7: + parts = [p.strip() for p in line.split('|')[1:-1]] + if len(parts) >= 7 and parts[0] != 'Weapon': + name = parts[0] + damage = parts[1] + grip = parts[2] + range_val = parts[3] + properties = parts[4] + value = parts[5] + slots = parts[6] + + weapons[name.lower()] = { + 'name': name, + 'damage': damage, + 'grip': grip, + 'range': range_val, + 'properties': properties, + 'value': value, + 'slots': slots + } + elif in_table and not line.startswith('|'): + in_table = False + + return weapons + +def parse_value_to_copper(value_str): + """Convert value string to copper.""" + if not value_str or value_str == '-': + return 0 + + total = 0 + # Match gold + gold_match = re.search(r'(\d+)g', value_str) + if gold_match: + total += int(gold_match.group(1)) * 100 # 1g = 100c (1g = 10s, 1s = 10c) + + # Match silver + silver_match = re.search(r'(\d+)s', value_str) + if silver_match: + total += int(silver_match.group(1)) * 10 # 1s = 10c + + return total + +def compare_weapons(source, weapons_dir): + """Compare generated weapons against source.""" + discrepancies = [] + + for filename in sorted(os.listdir(weapons_dir)): + if not filename.endswith('.json'): + continue + + filepath = os.path.join(weapons_dir, filename) + with open(filepath, 'r') as f: + generated = json.load(f) + + weapon_name = generated['name'] + weapon_key = weapon_name.lower() + + if weapon_key not in source: + discrepancies.append({ + 'weapon': weapon_name, + 'file': filename, + 'issue': f'NOT IN SOURCE - weapon "{weapon_name}" not found in source data' + }) + continue + + src = source[weapon_key] + gen_system = generated.get('system', {}) + + issues = [] + + # Check damage + src_damage = src['damage'].strip() + gen_damage = gen_system.get('damage', '') + # Normalize: "d6" == "1d6", "1" == "1" + src_normalized = src_damage if src_damage.startswith('1') or src_damage == '1' else f"1{src_damage}" + if src_normalized != gen_damage and src_damage != gen_damage: + issues.append(f"DAMAGE: source='{src_damage}' vs generated='{gen_damage}'") + + # Check grip + grip_map = {'1H': '1h', '2H': '2h', 'V': 'versatile', 'F': 'fist'} + expected_grip = grip_map.get(src['grip'].strip(), src['grip'].strip().lower()) + if expected_grip != gen_system.get('grip', ''): + issues.append(f"GRIP: source='{src['grip']}' ({expected_grip}) vs generated='{gen_system.get('grip', '')}'") + + # Check slots + try: + src_slots = int(src['slots'].strip()) if src['slots'].strip() not in ['-', ''] else 0 + gen_slots = gen_system.get('slots', 0) + if src_slots != gen_slots: + issues.append(f"SLOTS: source={src_slots} vs generated={gen_slots}") + except ValueError: + pass + + # Check value + src_value = parse_value_to_copper(src['value']) + gen_value = gen_system.get('value', 0) + if src_value != gen_value: + issues.append(f"VALUE: source={src_value}c ({src['value']}) vs generated={gen_value}c") + + if issues: + discrepancies.append({ + 'weapon': weapon_name, + 'file': filename, + 'issues': issues + }) + + # Check for missing weapons + generated_names = set() + for filename in os.listdir(weapons_dir): + if filename.endswith('.json'): + with open(os.path.join(weapons_dir, filename), 'r') as f: + data = json.load(f) + generated_names.add(data['name'].lower()) + + for weapon_key in source: + if weapon_key not in generated_names: + discrepancies.append({ + 'weapon': source[weapon_key]['name'], + 'file': 'MISSING', + 'issue': 'MISSING - no generated file for this weapon' + }) + + return discrepancies + +def main(): + print("Fetching source content from NoteDiscovery...") + source_content = get_source_content() + + print("Parsing source weapons...") + source = parse_source_weapons(source_content) + print(f"Found {len(source)} weapons in source\n") + + weapons_dir = 'packs/_source/weapons' + weapon_files = [f for f in os.listdir(weapons_dir) if f.endswith('.json')] + print(f"Found {len(weapon_files)} generated weapon files\n") + + print("Comparing weapons...") + discrepancies = compare_weapons(source, weapons_dir) + + if not discrepancies: + print("\n" + "="*60) + print("NO DISCREPANCIES FOUND") + print(f"All {len(weapon_files)} weapons match source!") + print("="*60) + else: + print("\n" + "="*60) + print(f"FOUND {len(discrepancies)} WEAPON(S) WITH DISCREPANCIES") + print("="*60 + "\n") + for d in discrepancies: + print(f"### {d['weapon']} ({d.get('file', 'N/A')})") + if 'issue' in d: + print(f" - {d['issue']}") + if 'issues' in d: + for issue in d['issues']: + print(f" - {issue}") + print() + +if __name__ == '__main__': + main()