Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Validate JSON Schemas

on:
push:
pull_request:

jobs:
validate:
name: Validate JSON against schemas
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Validate weapons
run: npx -y ajv-cli validate -s schema/weapon.json -r schema/item.json -r schema/coins.json -r schema/distance.json -r schema/dice.json -d "data/weapon/*.json"

- name: Validate armor
run: npx -y ajv-cli validate -s schema/armor.json -r schema/item.json -r schema/coins.json -d "data/armor/*.json"

- name: Validate spells
run: npx -y ajv-cli validate -s schema/spell.json -r schema/distance.json -d "data/spell/*.json"

- name: Validate classes
run: npx -y ajv-cli validate -s schema/class.json -r schema/dice.json -d "data/class/*.json"

- name: Validate ancestries
run: npx -y ajv-cli validate -s schema/ancestry.json -d "data/ancestry/*.json"
2 changes: 1 addition & 1 deletion codex.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"name": "Shadowdark",
"icon": "icon.svg",
"short_name": "shadowdark",
"version": "0.0.1",
"version": "0.1.0",
"description": "Shadowdark RPG is fast, familiar, intuitive, and deadly. It's built for sword-and-sorcery adventures where fell monsters slither in darkness and ancient gems glint upon forgotten thrones, waiting to be discovered. In Shadowdark RPG, real time comes into play."
}
7 changes: 7 additions & 0 deletions data/ancestry/dwarf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"$schema": "../../schema/ancestry.json",
"name": "Dwarf",
"ability": "Stout. Roll your HD with advantage when recovering HP.",
"languages": ["Common", "Dwarvish"],
"source": "data/source/quickstart-set.json"
}
7 changes: 7 additions & 0 deletions data/ancestry/elf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"$schema": "../../schema/ancestry.json",
"name": "Elf",
"ability": "Farsight. You get a +1 bonus to attack rolls with ranged weapons or a +1 bonus to spellcasting checks.",
"languages": ["Common", "Elvish", "Sylvan"],
"source": "data/source/quickstart-set.json"
}
7 changes: 7 additions & 0 deletions data/ancestry/halfling.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"$schema": "../../schema/ancestry.json",
"name": "Halfling",
"ability": "Stealthy. Once per day, you can become invisible for 3 rounds.",
"languages": ["Common"],
"source": "data/source/quickstart-set.json"
}
7 changes: 7 additions & 0 deletions data/ancestry/human.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"$schema": "../../schema/ancestry.json",
"name": "Human",
"ability": "Ambitious. You gain one additional talent roll at 1st level.",
"languages": ["Common"],
"source": "data/source/quickstart-set.json"
}
12 changes: 12 additions & 0 deletions data/armor/chainmail.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"$schema": "../../schema/armor.json",
"name": "Chainmail",
"cost": {
"gp": 60
},
"slots": 2,
"ac": "13+DEX",
"stealth_penalty": true,
"swim_penalty": true,
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/armor/leather-armor.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/armor.json",
"name": "Leather Armor",
"cost": {
"gp": 10
},
"slots": 1,
"ac": "11+DEX",
"source": "data/source/quickstart-set.json"
}
12 changes: 12 additions & 0 deletions data/armor/plate-mail.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"$schema": "../../schema/armor.json",
"name": "Plate Mail",
"cost": {
"gp": 130
},
"slots": 3,
"ac": "15",
"stealth_penalty": true,
"swim_penalty": true,
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/armor/shield.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/armor.json",
"name": "Shield",
"cost": {
"gp": 10
},
"slots": 1,
"ac_bonus": 2,
"source": "data/source/quickstart-set.json"
}
11 changes: 11 additions & 0 deletions data/class/fighter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "../../schema/class.json",
"name": "Fighter",
"hp_die": "1d8",
"weapons": ["All"],
"armor": ["All", "Shields"],
"languages": ["Common"],
"spells": false,
"description": "Fighters are masters of the blade, bow, and shield. They can use all weapons and armor. Once per day, a fighter may reroll one melee or ranged attack. They take the better result.",
"source": "data/source/quickstart-set.json"
}
11 changes: 11 additions & 0 deletions data/class/priest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "../../schema/class.json",
"name": "Priest",
"hp_die": "1d6",
"weapons": ["Club", "Crossbow", "Dagger", "Mace", "Longsword", "Staff", "Warhammer"],
"armor": ["All", "Shields"],
"languages": ["Common"],
"spells": true,
"description": "Priests are holy warriors who can call upon their deity for divine magic. They can cast spells and must make a spellcasting check to do so. On a failure, the spell does not take effect and is not lost. Priests use WIS as their spellcasting ability.",
"source": "data/source/quickstart-set.json"
}
11 changes: 11 additions & 0 deletions data/class/thief.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "../../schema/class.json",
"name": "Thief",
"hp_die": "1d4",
"weapons": ["Club", "Crossbow", "Dagger", "Shortbow", "Shortsword"],
"armor": ["Leather"],
"languages": ["Common", "Thieves' Cant"],
"spells": false,
"description": "Thieves are nimble rogues who rely on cunning over brawn. They can backstab enemies for extra damage and have several roguish abilities. When a thief hits an enemy who is unaware or flanked, they deal an extra 1d6 damage (increases at higher levels).",
"source": "data/source/quickstart-set.json"
}
11 changes: 11 additions & 0 deletions data/class/wizard.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "../../schema/class.json",
"name": "Wizard",
"hp_die": "1d4",
"weapons": ["Dagger", "Staff"],
"armor": [],
"languages": ["Common"],
"spells": true,
"description": "Wizards are arcane scholars who bend reality through force of intellect. They can cast spells and must make a spellcasting check to do so. On a failure, the spell does not take effect and is not lost. Wizards use INT as their spellcasting ability. They can learn spells from scrolls and spellbooks.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/alarm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Alarm",
"tier": 1,
"class": ["wizard"],
"duration": "1 day",
"range": "Close",
"description": "You touch one object, such as a door threshold, setting a magical alarm on it. If any creature you do not designate while casting the spell touches or crosses past the object, a magical bell sounds in your head.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/burning-hands.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Burning Hands",
"tier": 1,
"class": ["wizard"],
"duration": "Instant",
"range": "Close",
"description": "You spread your fingers with thumbs touching, unleashing a circle of flame that fills a close area around where you stand. Creatures within the area of effect take 1d6 damage. Unattended flammable objects ignite.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/charm-person.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Charm Person",
"tier": 1,
"class": ["wizard"],
"duration": "1d8 days",
"range": "Near",
"description": "You magically beguile one humanoid of level 2 or less within near range, who regards you as a friend for the duration. The spell ends if you or your allies do anything to hurt it that it notices. The target knows you magically enchanted it after the spell ends.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/cure-wounds.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Cure Wounds",
"tier": 1,
"class": ["priest"],
"duration": "Instant",
"range": "Close",
"description": "Your touch restores ebbing life. The target regains 1d6 HP.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/detect-magic.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Detect Magic",
"tier": 1,
"class": ["wizard"],
"duration": "Focus",
"range": "Near",
"description": "You can sense the presence of magic within near range for the spell's duration. If you focus for two rounds, you discern its general properties. Full barriers block this spell.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/feather-fall.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Feather Fall",
"tier": 1,
"class": ["wizard"],
"duration": "Instant",
"range": "Near",
"description": "You may cast this spell when you or a nearby creature starts to fall. The target's rate of descent slows so they land safely on their feet.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/floating-disk.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Floating Disk",
"tier": 1,
"class": ["wizard"],
"duration": "10 rounds",
"range": "Near",
"description": "You create a floating, circular disk of force with a concave center. It can carry up to 20 gear slots. It hovers at waist level and automatically stays within near of you. It can't cross over drop-offs or pits taller than a human.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/hold-portal.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Hold Portal",
"tier": 1,
"class": ["wizard"],
"duration": "10 rounds",
"range": "Near",
"description": "You magically hold a portal closed for the duration. A creature must make a successful STR check vs. your spellcasting check to open the portal. The knock spell ends this spell.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/holy-weapon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Holy Weapon",
"tier": 1,
"class": ["priest"],
"duration": "5 rounds",
"range": "Close",
"description": "One weapon you touch is imbued with a sacred blessing. The weapon becomes magical and has +1 to attack and damage rolls for the duration.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/light.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Light",
"tier": 1,
"class": ["priest", "wizard"],
"duration": "1 hour",
"range": "Near",
"description": "You touch one object no larger than a human. It sheds light equivalent to a torch for the duration.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/mage-armor.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Mage Armor",
"tier": 1,
"class": ["wizard"],
"duration": "10 rounds",
"range": "Near",
"description": "An invisible layer of magical force protects your vitals. Your armor class becomes 14 (18 on a critical spellcasting check) for the spell's duration.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/magic-missile.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Magic Missile",
"tier": 1,
"class": ["wizard"],
"duration": "Instant",
"range": "Far",
"description": "You have advantage on your check to cast this spell. A glowing bolt of force streaks from your open hand, dealing 1d4 damage to one target.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/protection-from-evil.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Protection from Evil",
"tier": 1,
"class": ["priest", "wizard"],
"duration": "Focus",
"range": "Close",
"description": "For the spell's duration, chaotic beings have disadvantage on attack rolls and hostile spellcasting checks against the target. These beings also can't possess, compel, or beguile it. When cast on an already-possessed target, the possessing entity makes a CHA check vs. the last spellcasting check. On a failure, the entity is expelled.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/shield-of-faith.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Shield of Faith",
"tier": 1,
"class": ["priest"],
"duration": "5 rounds",
"range": "Near",
"description": "A protective force wrought of holy conviction surrounds a creature you designate. The target gains a +2 bonus to their armor class for the duration.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/sleep.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Sleep",
"tier": 1,
"class": ["wizard"],
"duration": "Instant",
"range": "Near",
"description": "You weave a lulling spell that fills a near-sized cube extending from you. Living creatures in the area of effect fall into a deep sleep if they are level 2 or less. Vigorous shaking or being injured wakes them.",
"source": "data/source/quickstart-set.json"
}
10 changes: 10 additions & 0 deletions data/spell/turn-undead.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "../../schema/spell.json",
"name": "Turn Undead",
"tier": 1,
"class": ["priest"],
"duration": "Instant",
"range": "Near",
"description": "You rebuke undead creatures, forcing them to flee. You must present a holy symbol to cast this spell. Undead creatures within near of you must make a CHA check opposed by your spellcasting check. If a creature fails by 10+ points and is equal to or less than your level, it is destroyed. Otherwise, on a fail, it flees from you for 5 rounds.",
"source": "data/source/quickstart-set.json"
}
3 changes: 2 additions & 1 deletion data/weapon/bastard-sword.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"Close"
],
"damage": "1d8",
"damage_alt": "1d10"
"damage_alt": "1d10",
"source": "data/source/quickstart-set.json"
}
14 changes: 14 additions & 0 deletions data/weapon/club.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"$schema": "../../schema/weapon.json",
"name": "Club",
"cost": {
"cp": 5
},
"slots": 1,
"attributes": [],
"range": [
"Close"
],
"damage": "1d4",
"source": "data/source/quickstart-set.json"
}
17 changes: 17 additions & 0 deletions data/weapon/crossbow.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "../../schema/weapon.json",
"name": "Crossbow",
"cost": {
"gp": 8
},
"slots": 2,
"attributes": [
"TwoHanded",
"Loading"
],
"range": [
"Far"
],
"damage": "1d6",
"source": "data/source/quickstart-set.json"
}
3 changes: 2 additions & 1 deletion data/weapon/dagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
"Close",
"Far"
],
"damage": "1d4"
"damage": "1d4",
"source": "data/source/quickstart-set.json"
}
Loading
Loading