403 lines
8.9 KiB
TypeScript
403 lines
8.9 KiB
TypeScript
import type { ContentPack } from "@/types/content";
|
|
|
|
import { contentPackSchema } from "@/schemas/content";
|
|
import { level1RoomTemplates } from "./level1Rooms";
|
|
import { level1EncounterTables } from "./level1Tables";
|
|
|
|
const samplePack = {
|
|
version: "0.1.0",
|
|
sourceBooks: [
|
|
"Source/2D6 Dungeon - Core Rules.pdf",
|
|
"Source/2D6 Dungeon - Tables Codex.pdf",
|
|
"Source/2D6 Dungeon - Play Sheet.pdf",
|
|
],
|
|
tables: [
|
|
...level1EncounterTables,
|
|
{
|
|
id: "table.level1.humanoid-loot",
|
|
code: "L1HL",
|
|
name: "Level 1 Humanoid Loot",
|
|
category: "loot",
|
|
level: 1,
|
|
page: 122,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{
|
|
key: "1-2",
|
|
min: 1,
|
|
max: 2,
|
|
label: "Scavenged coins",
|
|
effects: [{ type: "gain-gold", amount: 1, target: "self" }],
|
|
},
|
|
{
|
|
key: "3-4",
|
|
min: 3,
|
|
max: 4,
|
|
label: "Bone Charm",
|
|
references: [{ type: "item", id: "item.bone-charm" }],
|
|
},
|
|
{
|
|
key: "5",
|
|
exact: 5,
|
|
label: "Silver Clasp and coins",
|
|
references: [{ type: "item", id: "item.silver-clasp" }],
|
|
effects: [{ type: "gain-gold", amount: 2, target: "self" }],
|
|
},
|
|
{
|
|
key: "6",
|
|
exact: 6,
|
|
label: "Key Ring and coin purse",
|
|
references: [{ type: "item", id: "item.keeper-keyring" }],
|
|
effects: [{ type: "gain-gold", amount: 3, target: "self" }],
|
|
},
|
|
],
|
|
notes: ["Starter loot table for martial and humanoid encounters."],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.beast-loot",
|
|
code: "L1BL",
|
|
name: "Level 1 Beast Loot",
|
|
category: "loot",
|
|
level: 1,
|
|
page: 122,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{
|
|
key: "1-4",
|
|
min: 1,
|
|
max: 4,
|
|
label: "Nothing useful",
|
|
},
|
|
{
|
|
key: "5",
|
|
exact: 5,
|
|
label: "Trophy Fang",
|
|
references: [{ type: "item", id: "item.trophy-fang" }],
|
|
},
|
|
{
|
|
key: "6",
|
|
exact: 6,
|
|
label: "Trophy Fang and stray coin",
|
|
references: [{ type: "item", id: "item.trophy-fang" }],
|
|
effects: [{ type: "gain-gold", amount: 1, target: "self" }],
|
|
},
|
|
],
|
|
notes: ["Starter loot table for basic animal encounters."],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.weapon-manoeuvres-1",
|
|
code: "WMT1",
|
|
name: "Weapon Manoeuvres Table 1",
|
|
category: "generic",
|
|
page: 13,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{
|
|
key: "1",
|
|
exact: 1,
|
|
label: "Exact Strike",
|
|
references: [{ type: "manoeuvre", id: "manoeuvre.exact-strike" }],
|
|
},
|
|
],
|
|
notes: ["Starter sample table used to validate content wiring."],
|
|
mvp: true,
|
|
},
|
|
],
|
|
weapons: [
|
|
{
|
|
id: "weapon.short-sword",
|
|
name: "Short Sword",
|
|
category: "melee",
|
|
handedness: "one-handed",
|
|
baseDamage: 1,
|
|
allowedManoeuvreIds: ["manoeuvre.exact-strike", "manoeuvre.guard-break"],
|
|
tags: ["starter"],
|
|
startingOption: true,
|
|
},
|
|
],
|
|
manoeuvres: [
|
|
{
|
|
id: "manoeuvre.exact-strike",
|
|
name: "Exact Strike",
|
|
weaponCategories: ["melee"],
|
|
precisionModifier: 1,
|
|
exactStrikeBonus: true,
|
|
effectText: "Improves accuracy and benefits from exact strike bonuses.",
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "manoeuvre.guard-break",
|
|
name: "Guard Break",
|
|
weaponCategories: ["melee"],
|
|
shiftCost: 1,
|
|
damageModifier: 1,
|
|
effectText: "Trades shift for a stronger hit.",
|
|
mvp: true,
|
|
},
|
|
],
|
|
armour: [
|
|
{
|
|
id: "armour.leather-vest",
|
|
name: "Leather Vest",
|
|
armourValue: 1,
|
|
startingOption: true,
|
|
valueGp: 6,
|
|
mvp: true,
|
|
},
|
|
],
|
|
items: [
|
|
{
|
|
id: "item.flint-and-steel",
|
|
name: "Flint and Steel",
|
|
itemType: "gear",
|
|
stackable: false,
|
|
consumable: false,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.ration",
|
|
name: "Ration",
|
|
itemType: "ration",
|
|
stackable: true,
|
|
consumable: true,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.lantern",
|
|
name: "Lantern",
|
|
itemType: "light-source",
|
|
stackable: false,
|
|
consumable: false,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.pouch",
|
|
name: "Pouch",
|
|
itemType: "gear",
|
|
stackable: false,
|
|
consumable: false,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.wax-sealing-kit",
|
|
name: "Wax Sealing Kit",
|
|
itemType: "gear",
|
|
stackable: false,
|
|
consumable: false,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.backpack",
|
|
name: "Backpack",
|
|
itemType: "gear",
|
|
stackable: false,
|
|
consumable: false,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.bone-charm",
|
|
name: "Bone Charm",
|
|
itemType: "treasure",
|
|
stackable: false,
|
|
consumable: false,
|
|
valueGp: 2,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.silver-clasp",
|
|
name: "Silver Clasp",
|
|
itemType: "treasure",
|
|
stackable: false,
|
|
consumable: false,
|
|
valueGp: 4,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.keeper-keyring",
|
|
name: "Keeper Keyring",
|
|
itemType: "treasure",
|
|
stackable: false,
|
|
consumable: false,
|
|
valueGp: 5,
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "item.trophy-fang",
|
|
name: "Trophy Fang",
|
|
itemType: "treasure",
|
|
stackable: true,
|
|
consumable: false,
|
|
valueGp: 1,
|
|
mvp: true,
|
|
},
|
|
],
|
|
potions: [
|
|
{
|
|
id: "potion.healing",
|
|
name: "Healing Potion",
|
|
tableSource: "Magic Potions Table 1",
|
|
useTiming: "any",
|
|
effects: [{ type: "heal", amount: 3, target: "self" }],
|
|
mvp: true,
|
|
},
|
|
],
|
|
scrolls: [
|
|
{
|
|
id: "scroll.lesser-heal",
|
|
name: "Lesser Heal",
|
|
tableSource: "Starting Scroll Table 1",
|
|
castCheck: {
|
|
diceKind: "d6",
|
|
successMin: 3,
|
|
},
|
|
onSuccess: [{ type: "heal", amount: 2, target: "self" }],
|
|
onFailureTableCode: "FTCCT1",
|
|
startingOption: true,
|
|
mvp: true,
|
|
},
|
|
],
|
|
creatures: [
|
|
{
|
|
id: "creature.level1.giant-rat",
|
|
name: "Giant Rat",
|
|
level: 1,
|
|
category: "beast",
|
|
hp: 2,
|
|
attackProfile: {
|
|
discipline: 0,
|
|
precision: 0,
|
|
damage: 1,
|
|
numberAppearing: "1-2",
|
|
},
|
|
xpReward: 1,
|
|
lootTableCodes: ["L1BL"],
|
|
sourcePage: 102,
|
|
traits: ["level-1", "sample"],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "creature.level1.guard",
|
|
name: "Guard",
|
|
level: 1,
|
|
category: "humanoid",
|
|
hp: 4,
|
|
attackProfile: {
|
|
discipline: 1,
|
|
precision: 1,
|
|
damage: 1,
|
|
},
|
|
defenceProfile: {
|
|
armour: 1,
|
|
},
|
|
xpReward: 2,
|
|
lootTableCodes: ["L1HL"],
|
|
sourcePage: 102,
|
|
traits: ["level-1", "martial"],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "creature.level1.warrior",
|
|
name: "Warrior",
|
|
level: 1,
|
|
category: "humanoid",
|
|
hp: 5,
|
|
attackProfile: {
|
|
discipline: 2,
|
|
precision: 1,
|
|
damage: 2,
|
|
},
|
|
defenceProfile: {
|
|
armour: 1,
|
|
},
|
|
xpReward: 3,
|
|
lootTableCodes: ["L1HL"],
|
|
sourcePage: 102,
|
|
traits: ["level-1", "martial"],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "creature.level1.thug",
|
|
name: "Thug",
|
|
level: 1,
|
|
category: "humanoid",
|
|
hp: 3,
|
|
attackProfile: {
|
|
discipline: 0,
|
|
precision: 1,
|
|
damage: 1,
|
|
},
|
|
xpReward: 1,
|
|
lootTableCodes: ["L1HL"],
|
|
sourcePage: 102,
|
|
traits: ["level-1", "martial"],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "creature.level1.work-dog",
|
|
name: "Work Dog",
|
|
level: 1,
|
|
category: "beast",
|
|
hp: 3,
|
|
attackProfile: {
|
|
discipline: 0,
|
|
precision: 1,
|
|
damage: 1,
|
|
},
|
|
xpReward: 1,
|
|
lootTableCodes: ["L1BL"],
|
|
sourcePage: 102,
|
|
traits: ["level-1", "beast"],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "creature.level1.guard-dog",
|
|
name: "Guard Dog",
|
|
level: 1,
|
|
category: "beast",
|
|
hp: 4,
|
|
attackProfile: {
|
|
discipline: 1,
|
|
precision: 1,
|
|
damage: 1,
|
|
},
|
|
xpReward: 2,
|
|
lootTableCodes: ["L1BL"],
|
|
sourcePage: 102,
|
|
traits: ["level-1", "beast"],
|
|
mvp: true,
|
|
},
|
|
],
|
|
roomTemplates: [
|
|
{
|
|
id: "room.level1.entry",
|
|
level: 1,
|
|
sourcePage: 42,
|
|
roomClass: "start",
|
|
tableCode: "L1R",
|
|
tableEntryKey: "entry",
|
|
title: "Entry Chamber",
|
|
text: "A quiet starting space for the first dungeon prototype.",
|
|
dimensions: {
|
|
width: 4,
|
|
height: 4,
|
|
},
|
|
exits: [{ direction: "north", exitType: "door" }],
|
|
tags: ["starter", "entry"],
|
|
mvp: true,
|
|
},
|
|
...level1RoomTemplates,
|
|
],
|
|
townServices: [
|
|
{
|
|
id: "service.market",
|
|
name: "Market",
|
|
serviceType: "market",
|
|
mvp: true,
|
|
},
|
|
],
|
|
} satisfies ContentPack;
|
|
|
|
export const sampleContentPack = contentPackSchema.parse(samplePack);
|