✨Feature: add level 1 content including room templates, encounter tables, and room generation logic
- 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.
This commit is contained in:
49
src/data/contentHelpers.test.ts
Normal file
49
src/data/contentHelpers.test.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { lookupTable } from "@/rules/tables";
|
||||
|
||||
import { findRoomTemplateForLookup, findTableByCode } from "./contentHelpers";
|
||||
import { sampleContentPack } from "./sampleContentPack";
|
||||
|
||||
function createSequenceRoller(values: number[]) {
|
||||
let index = 0;
|
||||
|
||||
return () => {
|
||||
const next = values[index];
|
||||
index += 1;
|
||||
return next;
|
||||
};
|
||||
}
|
||||
|
||||
describe("level 1 content helpers", () => {
|
||||
it("finds encoded level 1 encounter tables by code", () => {
|
||||
const table = findTableByCode(sampleContentPack, "L1A");
|
||||
|
||||
expect(table.name).toBe("Level 1 Animals");
|
||||
expect(table.entries).toHaveLength(6);
|
||||
});
|
||||
|
||||
it("resolves a small room template from a table lookup", () => {
|
||||
const lookup = lookupTable(findTableByCode(sampleContentPack, "L1SR"), {
|
||||
roller: createSequenceRoller([3, 4]),
|
||||
});
|
||||
|
||||
const roomTemplate = findRoomTemplateForLookup(sampleContentPack, lookup);
|
||||
|
||||
expect(lookup.roll.total).toBe(7);
|
||||
expect(roomTemplate.title).toBe("Murtayne Effigy");
|
||||
expect(roomTemplate.roomClass).toBe("small");
|
||||
});
|
||||
|
||||
it("resolves a large room template from a table lookup", () => {
|
||||
const lookup = lookupTable(findTableByCode(sampleContentPack, "L1LR"), {
|
||||
roller: createSequenceRoller([5, 5]),
|
||||
});
|
||||
|
||||
const roomTemplate = findRoomTemplateForLookup(sampleContentPack, lookup);
|
||||
|
||||
expect(lookup.roll.total).toBe(10);
|
||||
expect(roomTemplate.title).toBe("Slate Shrine");
|
||||
expect(roomTemplate.roomClass).toBe("large");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user