- Introduced contentHelpers for table and room template lookups. - Created level1Rooms.ts with various room templates for level 1. - Added level1Tables.ts containing encounter tables for animals, martial, dogs, people, fungal, guards, workers, and room types. - Implemented room generation functions in rooms.ts to create rooms based on templates and tables. - Added tests for room generation logic in rooms.test.ts to ensure correct functionality.
225 lines
7.7 KiB
TypeScript
225 lines
7.7 KiB
TypeScript
import type { TableDefinition } from "@/types/content";
|
|
|
|
export const level1EncounterTables: TableDefinition[] = [
|
|
{
|
|
id: "table.level1.animals",
|
|
code: "L1A",
|
|
name: "Level 1 Animals",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Giant Rat" },
|
|
{ key: "2", exact: 2, label: "Huge Rat" },
|
|
{ key: "3", exact: 3, label: "Work Dog" },
|
|
{ key: "4", exact: 4, label: "Guard Dog" },
|
|
{ key: "5", exact: 5, label: "Shard Rock Python" },
|
|
{ key: "6", exact: 6, label: "Giant Horned Anaconda" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.martial",
|
|
code: "L1M",
|
|
name: "Level 1 Martial",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Guard" },
|
|
{ key: "2", exact: 2, label: "Guard" },
|
|
{ key: "3", exact: 3, label: "Warrior" },
|
|
{ key: "4", exact: 4, label: "Veteran" },
|
|
{ key: "5", exact: 5, label: "Veteran" },
|
|
{ key: "6", exact: 6, label: "Guard and Guard" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.dogs",
|
|
code: "L1D",
|
|
name: "Level 1 Dogs",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Work Dog" },
|
|
{ key: "2", exact: 2, label: "Guard Dog" },
|
|
{ key: "3", exact: 3, label: "Guard Dog" },
|
|
{ key: "4", exact: 4, label: "Guard Hound" },
|
|
{ key: "5", exact: 5, label: "War Hound" },
|
|
{ key: "6", exact: 6, label: "Guard and Work Dog" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.people",
|
|
code: "L1P",
|
|
name: "Level 1 People",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Labourer" },
|
|
{ key: "2", exact: 2, label: "Crazed Preacher" },
|
|
{ key: "3", exact: 3, label: "Thug" },
|
|
{ key: "4", exact: 4, label: "Guard" },
|
|
{ key: "5", exact: 5, label: "Guard and Guard Dog" },
|
|
{ key: "6", exact: 6, label: "Labourer and Guard Dog" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.fungal",
|
|
code: "L1F",
|
|
name: "Level 1 Fungal",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Fungal Geist" },
|
|
{ key: "2", exact: 2, label: "Fungal Geist" },
|
|
{ key: "3", exact: 3, label: "Musty Bloater" },
|
|
{ key: "4", exact: 4, label: "Musty Bloater" },
|
|
{ key: "5", exact: 5, label: "Musty Bloater" },
|
|
{ key: "6", exact: 6, label: "Slimy Gorger" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.guards",
|
|
code: "L1G",
|
|
name: "Level 1 Guards",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Thug" },
|
|
{ key: "2", exact: 2, label: "Thug" },
|
|
{ key: "3", exact: 3, label: "Guard" },
|
|
{ key: "4", exact: 4, label: "Guard" },
|
|
{ key: "5", exact: 5, label: "Guard" },
|
|
{ key: "6", exact: 6, label: "Guard and Warrior" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.workers",
|
|
code: "L1W",
|
|
name: "Level 1 Workers",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{ key: "1", exact: 1, label: "Thug" },
|
|
{ key: "2", exact: 2, label: "Thug" },
|
|
{ key: "3", exact: 3, label: "Labourer" },
|
|
{ key: "4", exact: 4, label: "Artisan" },
|
|
{ key: "5", exact: 5, label: "Blacksmith" },
|
|
{ key: "6", exact: 6, label: "Artisan and Medic" },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.crate",
|
|
code: "L1CE",
|
|
name: "Level 1 Crate",
|
|
category: "level",
|
|
level: 1,
|
|
page: 38,
|
|
diceKind: "d6",
|
|
entries: [
|
|
{
|
|
key: "1",
|
|
exact: 1,
|
|
label: "Slimy Gorger Ambush",
|
|
text: "A slimy gorger drops from above and attacks immediately.",
|
|
},
|
|
{
|
|
key: "2",
|
|
exact: 2,
|
|
label: "Giant Rat Pair",
|
|
text: "A pair of giant rats attacks while the room is being searched.",
|
|
},
|
|
{
|
|
key: "3",
|
|
exact: 3,
|
|
label: "Huge Rat Ambush",
|
|
text: "A huge rat leaps from under the crate and attacks.",
|
|
},
|
|
{
|
|
key: "4",
|
|
exact: 4,
|
|
label: "Insect Swarm",
|
|
text: "Scuttling insects spill out from beneath a corpse during the search.",
|
|
},
|
|
{
|
|
key: "5",
|
|
exact: 5,
|
|
label: "Corpse Trap",
|
|
text: "Searching the fallen body triggers a level 1 corpse-interaction event.",
|
|
},
|
|
{
|
|
key: "6",
|
|
exact: 6,
|
|
label: "Hooked Bag",
|
|
text: "A bag fixed near the ceiling calls for a follow-up item table roll.",
|
|
},
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.large-rooms",
|
|
code: "L1LR",
|
|
name: "Level 1 Large Rooms",
|
|
category: "room",
|
|
level: 1,
|
|
page: 40,
|
|
diceKind: "2d6",
|
|
entries: [
|
|
{ key: "2", exact: 2, label: "Stone Workshop", references: [{ type: "room", id: "room.level1.large.stone-workshop" }] },
|
|
{ key: "3", exact: 3, label: "Marble Hall", references: [{ type: "room", id: "room.level1.large.marble-hall" }] },
|
|
{ key: "4", exact: 4, label: "Old Mess Hall", references: [{ type: "room", id: "room.level1.large.old-mess-hall" }] },
|
|
{ key: "5", exact: 5, label: "Penitentiary", references: [{ type: "room", id: "room.level1.large.penitentiary" }] },
|
|
{ key: "6", exact: 6, label: "Fountain Room", references: [{ type: "room", id: "room.level1.large.fountain-room" }] },
|
|
{ key: "7", exact: 7, label: "Temple", references: [{ type: "room", id: "room.level1.large.temple" }] },
|
|
{ key: "8", exact: 8, label: "Sparring Chamber", references: [{ type: "room", id: "room.level1.large.sparring-chamber" }] },
|
|
{ key: "9", exact: 9, label: "Crate Store", references: [{ type: "room", id: "room.level1.large.crate-store" }] },
|
|
{ key: "10", exact: 10, label: "Slate Shrine", references: [{ type: "room", id: "room.level1.large.slate-shrine" }] },
|
|
{ key: "11", exact: 11, label: "Dormitory", references: [{ type: "room", id: "room.level1.large.dormitory" }] },
|
|
{ key: "12", exact: 12, label: "Library", references: [{ type: "room", id: "room.level1.large.library" }] },
|
|
],
|
|
mvp: true,
|
|
},
|
|
{
|
|
id: "table.level1.small-rooms",
|
|
code: "L1SR",
|
|
name: "Level 1 Small Rooms",
|
|
category: "room",
|
|
level: 1,
|
|
page: 46,
|
|
diceKind: "2d6",
|
|
entries: [
|
|
{ key: "2", exact: 2, label: "Empty Space", references: [{ type: "room", id: "room.level1.small.empty-space" }] },
|
|
{ key: "3", exact: 3, label: "Strange Text", references: [{ type: "room", id: "room.level1.small.strange-text" }] },
|
|
{ key: "4", exact: 4, label: "Grazada Mural", references: [{ type: "room", id: "room.level1.small.grazada-mural" }] },
|
|
{ key: "5", exact: 5, label: "Intuneric Mosaic", references: [{ type: "room", id: "room.level1.small.intuneric-mosaic" }] },
|
|
{ key: "6", exact: 6, label: "Maduva Statue", references: [{ type: "room", id: "room.level1.small.maduva-statue" }] },
|
|
{ key: "7", exact: 7, label: "Murtayne Effigy", references: [{ type: "room", id: "room.level1.small.murtayne-effigy" }] },
|
|
{ key: "8", exact: 8, label: "Nevzator Doll", references: [{ type: "room", id: "room.level1.small.nevzator-doll" }] },
|
|
{ key: "9", exact: 9, label: "Radacina Tapestry", references: [{ type: "room", id: "room.level1.small.radacina-tapestry" }] },
|
|
{ key: "10", exact: 10, label: "Heated Space", references: [{ type: "room", id: "room.level1.small.heated-space" }] },
|
|
{ key: "11", exact: 11, label: "Wall Shrine", references: [{ type: "room", id: "room.level1.small.wall-shrine" }] },
|
|
{ key: "12", exact: 12, label: "Banner Arms", references: [{ type: "room", id: "room.level1.small.banner-arms" }] },
|
|
],
|
|
mvp: true,
|
|
},
|
|
];
|