@dreadwood-types/types 0.1.293 → 0.1.295

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/attackableNpcs.d.ts.map +1 -1
  2. package/dist/attackableNpcs.js +4 -0
  3. package/dist/attackableNpcs.js.map +1 -1
  4. package/dist/constants.d.ts +2 -0
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/expandedContracts.d.ts.map +1 -1
  8. package/dist/expandedContracts.js +5 -2
  9. package/dist/expandedContracts.js.map +1 -1
  10. package/dist/fairFolk.d.ts +5 -1
  11. package/dist/fairFolk.d.ts.map +1 -1
  12. package/dist/fairFolk.js +20 -0
  13. package/dist/fairFolk.js.map +1 -1
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +6 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/legacy.d.ts +6 -0
  19. package/dist/legacy.d.ts.map +1 -1
  20. package/dist/legacy.js +6 -0
  21. package/dist/legacy.js.map +1 -1
  22. package/dist/quests.d.ts.map +1 -1
  23. package/dist/quests.js +25 -0
  24. package/dist/quests.js.map +1 -1
  25. package/dist/shaleTeeth.d.ts +187 -0
  26. package/dist/shaleTeeth.d.ts.map +1 -0
  27. package/dist/shaleTeeth.js +181 -0
  28. package/dist/shaleTeeth.js.map +1 -0
  29. package/dist/shaleTeethQuest.d.ts +40 -0
  30. package/dist/shaleTeethQuest.d.ts.map +1 -0
  31. package/dist/shaleTeethQuest.js +258 -0
  32. package/dist/shaleTeethQuest.js.map +1 -0
  33. package/dist/shaleTeethWildlife.d.ts +10 -0
  34. package/dist/shaleTeethWildlife.d.ts.map +1 -0
  35. package/dist/shaleTeethWildlife.js +76 -0
  36. package/dist/shaleTeethWildlife.js.map +1 -0
  37. package/dist/storyQuests.d.ts +1 -1
  38. package/dist/storyQuests.d.ts.map +1 -1
  39. package/dist/storyQuests.js +15 -0
  40. package/dist/storyQuests.js.map +1 -1
  41. package/dist/weeklyHunt.d.ts +13 -8
  42. package/dist/weeklyHunt.d.ts.map +1 -1
  43. package/dist/weeklyHunt.js +28 -33
  44. package/dist/weeklyHunt.js.map +1 -1
  45. package/dist/westBranch.d.ts +190 -0
  46. package/dist/westBranch.d.ts.map +1 -0
  47. package/dist/westBranch.js +24 -0
  48. package/dist/westBranch.js.map +1 -0
  49. package/dist/westBranchQuests.d.ts +7 -0
  50. package/dist/westBranchQuests.d.ts.map +1 -0
  51. package/dist/westBranchQuests.js +15 -0
  52. package/dist/westBranchQuests.js.map +1 -0
  53. package/dist/westBranches.d.ts +11 -0
  54. package/dist/westBranches.d.ts.map +1 -0
  55. package/dist/westBranches.js +24 -0
  56. package/dist/westBranches.js.map +1 -0
  57. package/package.json +2 -2
@@ -1,10 +1,11 @@
1
1
  /**
2
- * THE WEEKLY HUNT (AREA_PROPOSALS.md 2026-10-14, B3; T91): one creature of the week for each level band, named on Bruce's
2
+ * THE WEEKLY HUNT (AREA_PROPOSALS.md 2026-10-14, B3; T91): one creature of the week for each board tier of a level band, named on Bruce's
3
3
  * board and the Bounty boards as the "Hunt of the week". It is a pure function of the UTC week (Monday 00:00 to Sunday
4
4
  * 24:00) and the band, never rolled, so every board and every client agree and a test can read it.
5
5
  *
6
- * - The pick: the creatures the board asks for in that band's tiers (the same targets Bruce already offers, so nothing new
7
- * to fight), without the Dreadwoods PvP ones (a player who avoids PvP always has a hunt) and without lone bosses.
6
+ * - The pick: one of the creatures on the player's own board (the same targets Bruce already offers, so nothing new to fight),
7
+ * without the Dreadwoods PvP ones (a player who avoids PvP always has a hunt) and without lone bosses. Everyone on the same
8
+ * board tier gets the same creature; the tiers of a band can differ.
8
9
  * - The contract: the usual bounty, taken at the board; handed in during the week it was taken it pays a second Small
9
10
  * Satchel, once per character per week, and every kill toward it pays its Bounty Hunter XP twice.
10
11
  * - The Ledger: a page of lines, one for the first hunt handed in and one per band (types explorerLedger.ts, section 'weekly').
@@ -22,13 +23,17 @@ export declare function weekEndsAt(week: number): number;
22
23
  export declare const WEEKLY_HUNT_EXTRA_SATCHELS = 1;
23
24
  /** Each kill toward the hunt of the week pays this many extra copies of its Bounty Hunter XP. */
24
25
  export declare const WEEKLY_HUNT_KILL_XP_EXTRA = 1;
25
- /** The offers that can be a band's hunt: the board's own offers of tiers that start inside the band, minus PvP targets and lone bosses. */
26
- export declare function weeklyHuntCandidates(band: FieldGuideBandId): BountyOffer[];
26
+ /**
27
+ * The offers that can be this week's hunt for a player at this Combat level: the offers on THEIR board (so the hunt is always
28
+ * a contract they can take at Bruce or any Bounty board, with the usual count), minus the Dreadwoods PvP targets and lone bosses.
29
+ */
30
+ export declare function weeklyHuntCandidates(combatLevel: number): BountyOffer[];
27
31
  /** The band a Combat level hunts in (1-10, 11-20, 21-30, 31-40; above 40 hunts with the top band, below 1 with the first). */
28
32
  export declare function weeklyHuntBand(combatLevel: number): FieldGuideBandId;
29
- /** This week's hunt for a band: null only if the band has no candidates (never, with the current tiers; a test pins it). */
30
- export declare function weeklyHuntForBand(band: FieldGuideBandId, week: number): BountyOffer | null;
31
- /** This week's hunt for a player at this Combat level. */
33
+ /**
34
+ * This week's hunt for a player at this Combat level: one creature per board tier per week, the same for everyone on that tier,
35
+ * never rolled. Null below Combat 1 (no board).
36
+ */
32
37
  export declare function weeklyHuntFor(combatLevel: number, week: number): (BountyOffer & {
33
38
  band: FieldGuideBandId;
34
39
  }) | null;
@@ -1 +1 @@
1
- {"version":3,"file":"weeklyHunt.d.ts","sourceRoot":"","sources":["../src/weeklyHunt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAgF,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7H,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,eAAO,MAAM,OAAO,QAAuB,CAAC;AAI5C,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAU3C,2IAA2I;AAC3I,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,EAAE,CAa1E;AAED,8HAA8H;AAC9H,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAEpE;AAED,4HAA4H;AAC5H,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAK1F;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAAG,IAAI,CAMlH;AAED,oEAAoE;AACpE,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE7J,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAI5G;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAGvE,CAAC;AACF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAEhE;AAOD,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ7F"}
1
+ {"version":3,"file":"weeklyHunt.d.ts","sourceRoot":"","sources":["../src/weeklyHunt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAqG,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAClJ,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,eAAO,MAAM,OAAO,QAAuB,CAAC;AAI5C,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAU3C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,CAEvE;AASD,8HAA8H;AAC9H,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAEpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAAG,IAAI,CAMlH;AAED,oEAAoE;AACpE,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE7J,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAI5G;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAGvE,CAAC;AACF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAEhE;AAOD,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ7F"}
@@ -1,17 +1,18 @@
1
1
  /**
2
- * THE WEEKLY HUNT (AREA_PROPOSALS.md 2026-10-14, B3; T91): one creature of the week for each level band, named on Bruce's
2
+ * THE WEEKLY HUNT (AREA_PROPOSALS.md 2026-10-14, B3; T91): one creature of the week for each board tier of a level band, named on Bruce's
3
3
  * board and the Bounty boards as the "Hunt of the week". It is a pure function of the UTC week (Monday 00:00 to Sunday
4
4
  * 24:00) and the band, never rolled, so every board and every client agree and a test can read it.
5
5
  *
6
- * - The pick: the creatures the board asks for in that band's tiers (the same targets Bruce already offers, so nothing new
7
- * to fight), without the Dreadwoods PvP ones (a player who avoids PvP always has a hunt) and without lone bosses.
6
+ * - The pick: one of the creatures on the player's own board (the same targets Bruce already offers, so nothing new to fight),
7
+ * without the Dreadwoods PvP ones (a player who avoids PvP always has a hunt) and without lone bosses. Everyone on the same
8
+ * board tier gets the same creature; the tiers of a band can differ.
8
9
  * - The contract: the usual bounty, taken at the board; handed in during the week it was taken it pays a second Small
9
10
  * Satchel, once per character per week, and every kill toward it pays its Bounty Hunter XP twice.
10
11
  * - The Ledger: a page of lines, one for the first hunt handed in and one per band (types explorerLedger.ts, section 'weekly').
11
12
  *
12
13
  * Amounts are PLACEHOLDERS (balance is done last, with James).
13
14
  */
14
- import { BOUNTY_TIERS, isBossBountyTarget, isPvpBountyTarget, bountyTargetDisplayName } from './bounty.js';
15
+ import { BOUNTY_TIERS, bountyTargetDisplayName, bountyTierForCombat, isBossBountyTarget, isPvpBountyTarget } from './bounty.js';
15
16
  import { FIELD_GUIDE_BANDS, fieldGuideBandOf } from './fieldGuide.js';
16
17
  export const WEEK_MS = 7 * 24 * 60 * 60_000;
17
18
  /** 1970-01-05 00:00 UTC was a Monday: weeks count from there. */
@@ -35,43 +36,37 @@ function mix(week, salt) {
35
36
  seed = (Math.imul(seed ^ (seed >>> 13), 3266489917) + 668265263) >>> 0;
36
37
  return seed >>> 0;
37
38
  }
38
- /** The offers that can be a band's hunt: the board's own offers of tiers that start inside the band, minus PvP targets and lone bosses. */
39
- export function weeklyHuntCandidates(band) {
40
- const b = FIELD_GUIDE_BANDS.find((x) => x.id === band);
41
- const seen = new Set();
42
- const out = [];
43
- for (const tier of BOUNTY_TIERS) {
44
- if (tier.minCombat < b.min || tier.minCombat > b.max)
45
- continue;
46
- for (const o of tier.offers) {
47
- if (isPvpBountyTarget(o.target) || isBossBountyTarget(o.target) || seen.has(o.target))
48
- continue;
49
- seen.add(o.target);
50
- out.push(o);
51
- }
52
- }
53
- return out;
39
+ /**
40
+ * The offers that can be this week's hunt for a player at this Combat level: the offers on THEIR board (so the hunt is always
41
+ * a contract they can take at Bruce or any Bounty board, with the usual count), minus the Dreadwoods PvP targets and lone bosses.
42
+ */
43
+ export function weeklyHuntCandidates(combatLevel) {
44
+ return bountyTierForCombat(combatLevel).filter((o) => !isPvpBountyTarget(o.target) && !isBossBountyTarget(o.target));
45
+ }
46
+ /** The Combat level a board tier starts at for this level (a salt, so two tiers of one band do not move in lock step). */
47
+ function tierStart(combatLevel) {
48
+ let start = 1;
49
+ for (const tier of BOUNTY_TIERS)
50
+ if (Math.floor(combatLevel) >= tier.minCombat)
51
+ start = tier.minCombat;
52
+ return start;
54
53
  }
55
54
  /** The band a Combat level hunts in (1-10, 11-20, 21-30, 31-40; above 40 hunts with the top band, below 1 with the first). */
56
55
  export function weeklyHuntBand(combatLevel) {
57
56
  return fieldGuideBandOf(Math.min(40, Math.max(1, Math.floor(combatLevel)))) ?? '1-10';
58
57
  }
59
- /** This week's hunt for a band: null only if the band has no candidates (never, with the current tiers; a test pins it). */
60
- export function weeklyHuntForBand(band, week) {
61
- const candidates = weeklyHuntCandidates(band);
62
- if (candidates.length === 0)
63
- return null;
64
- const bandIndex = FIELD_GUIDE_BANDS.findIndex((x) => x.id === band);
65
- return candidates[mix(week, bandIndex) % candidates.length];
66
- }
67
- /** This week's hunt for a player at this Combat level. */
58
+ /**
59
+ * This week's hunt for a player at this Combat level: one creature per board tier per week, the same for everyone on that tier,
60
+ * never rolled. Null below Combat 1 (no board).
61
+ */
68
62
  export function weeklyHuntFor(combatLevel, week) {
69
- // Below Combat 1 the board offers nothing, so there is no hunt either.
70
63
  if (!(combatLevel >= 1))
71
64
  return null;
72
- const band = weeklyHuntBand(combatLevel);
73
- const offer = weeklyHuntForBand(band, week);
74
- return offer ? { ...offer, band } : null;
65
+ const candidates = weeklyHuntCandidates(combatLevel);
66
+ if (candidates.length === 0)
67
+ return null;
68
+ const offer = candidates[mix(week, tierStart(combatLevel)) % candidates.length];
69
+ return { ...offer, band: weeklyHuntBand(combatLevel) };
75
70
  }
76
71
  export function weeklyHuntView(combatLevel, week, claimedWeek) {
77
72
  const hunt = weeklyHuntFor(combatLevel, week);
@@ -1 +1 @@
1
- {"version":3,"file":"weeklyHunt.js","sourceRoot":"","sources":["../src/weeklyHunt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"weeklyHunt.js","sourceRoot":"","sources":["../src/weeklyHunt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * THE WEST COAST'S SIDE BRANCHES, shared shape (T88, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t88-west-coast-branches.md`): the Shale Teeth (shaleTeeth.ts), the Reedwheel Fan
3
+ * (reedwheelFan.ts) and the Knucklebone Isles (knuckleboneIsles.ts) are laid in the Western strip's second growth (constants.ts WESTERN_CHUNKS_X 30 -> 38, x 2496-2751) and in the
4
+ * sea between the reaches and it. Each is one `WestBranchLayout`: a local frame (origin x0, z0), land polygons, holes, roads, bare-earth patches, shallow pools, terrace scarps,
5
+ * kit pieces, signs, seams, stations, quest props, forage hints and the places a player is sent to. One generic backend placer (backend westBranch.ts) lays any of them,
6
+ * so a branch is data. Every number inside a layout is a WORLD tile unless a function says "local".
7
+ */
8
+ import type { LanternWakeBox, LanternWakePiece, LanternWakePoint } from './lanternWake.js';
9
+ import { type WesternPolygon } from './westernKingdoms.js';
10
+ import type { ForageKind } from './foragePatches.js';
11
+ export type WestBranchId = 'shale' | 'reedwheel' | 'knucklebone';
12
+ export type BranchPath = {
13
+ id: string;
14
+ w: number;
15
+ pts: readonly LanternWakePoint[];
16
+ };
17
+ export type BranchSeam = {
18
+ id: string;
19
+ x: number;
20
+ z: number;
21
+ style: 'coal' | 'iron' | 'gold' | 'silver';
22
+ };
23
+ export type BranchStation = {
24
+ id: string;
25
+ kind: 'furnace' | 'anvil' | 'campfire';
26
+ x: number;
27
+ z: number;
28
+ };
29
+ export type BranchSign = {
30
+ id: string;
31
+ x: number;
32
+ z: number;
33
+ text: string;
34
+ };
35
+ export type BranchQuestProp = {
36
+ readonly id: string;
37
+ readonly x: number;
38
+ readonly z: number;
39
+ readonly style: string;
40
+ };
41
+ /** A forage patch hint: the placer takes the nearest sand or grass tile to it that is bare, walkable and has a tile to pick from. */
42
+ export type BranchForageHint = {
43
+ id: string;
44
+ x: number;
45
+ z: number;
46
+ forage: ForageKind;
47
+ };
48
+ /** An entity a branch lays beside the kit's pieces: a skiff (`caveentrance`, style `hbrowboat-<facing>`) or a dig mound. */
49
+ export type BranchEntity = {
50
+ id: string;
51
+ kind: string;
52
+ x: number;
53
+ z: number;
54
+ style: string;
55
+ scale?: number;
56
+ };
57
+ export type WestBranchLayout = {
58
+ id: WestBranchId;
59
+ name: string;
60
+ /** The local frame's origin: local (0, 0) is this world tile. */
61
+ x0: number;
62
+ z0: number;
63
+ /** The branch's whole box (its discovery zone, the claim on the program board), world tiles. */
64
+ box: LanternWakeBox;
65
+ /** The land's ground height and its two beach steps down to the sea. */
66
+ groundHeight: number;
67
+ beachHeights: readonly [number, number];
68
+ /** Land, local coordinates: every polygon is land; every hole is carved back to water. */
69
+ land: readonly WesternPolygon[];
70
+ holes: readonly WesternPolygon[];
71
+ /**
72
+ * World boxes of land the branch joins at its edge (the Redclay Hook's east coast, Saltmere's): counted as land for the beach rings so the join has no
73
+ * sand step across it. They are not laid by the branch (the reach's own placer laid them).
74
+ */
75
+ attach: readonly LanternWakeBox[];
76
+ /** The height of a land tile in the interior (local), e.g. the Shale Teeth's terraces. Absent: `groundHeight` everywhere. */
77
+ heightAt?: (lx: number, lz: number) => number;
78
+ paths: readonly BranchPath[];
79
+ /** Bare-earth patches (laid as Dirt), world boxes. */
80
+ dirt: readonly LanternWakeBox[];
81
+ /** Shallow pools inside the land (water, a little below the ground), world boxes. */
82
+ pools: readonly LanternWakeBox[];
83
+ /** How far a pool sits below its ground. */
84
+ poolDepth: number;
85
+ /** Terrace scarps: rows of blocked stone across the land (roads cross them through gaps), world boxes. */
86
+ scarps: readonly LanternWakeBox[];
87
+ pieces: readonly LanternWakePiece[];
88
+ signs: readonly BranchSign[];
89
+ seams: readonly BranchSeam[];
90
+ stations: readonly BranchStation[];
91
+ questProps: readonly BranchQuestProp[];
92
+ forage: readonly BranchForageHint[];
93
+ /** Extra entities (skiffs, dig mounds) the placer lays as they are. */
94
+ entities: readonly BranchEntity[];
95
+ /** Fixed tide snapper spot hints (the backend takes the nearest water tile with standable ground within two tiles). */
96
+ fishHints: readonly {
97
+ x: number;
98
+ z: number;
99
+ }[];
100
+ /** The standing places a smoke, a teleport and a person's tile can rely on. */
101
+ stands: Readonly<Record<string, {
102
+ x: number;
103
+ z: number;
104
+ }>>;
105
+ /** What to look at from each stand (the admin teleport links' notes), by stand name. */
106
+ standNotes: Readonly<Record<string, string>>;
107
+ /** Scatter chances per land tile. */
108
+ scatter: {
109
+ tree: number;
110
+ rock: number;
111
+ tuft: number;
112
+ reed: number;
113
+ treeStyle: string;
114
+ };
115
+ /** The counter one of its people keeps (the person's FairFolkId, the shop's title, what it sells and buys: existing goods at the other traders' prices). */
116
+ shop?: {
117
+ person: string;
118
+ title: string;
119
+ stock: ReadonlyArray<{
120
+ kind: string;
121
+ price: number;
122
+ }>;
123
+ buys: Readonly<Record<string, number>>;
124
+ };
125
+ /** What the game guide says of the branch (backend westBranchGuide.ts builds the page's text from it and the data). */
126
+ guide: {
127
+ levels: string;
128
+ /** How a player gets there, in a sentence or two. */
129
+ how: string;
130
+ /** What lies there, in a sentence or two. */
131
+ places: string;
132
+ /** Where each person stands, by FairFolkId. */
133
+ peopleAt: Readonly<Record<string, string>>;
134
+ /** The quest ids in chain order. */
135
+ questLine: readonly string[];
136
+ /** Where each creature kind is found. */
137
+ creatureAt: Readonly<Record<string, string>>;
138
+ };
139
+ /** Sub-zones for the discovery cards, smallest first. */
140
+ zones: readonly {
141
+ id: string;
142
+ label: string;
143
+ box: LanternWakeBox;
144
+ }[];
145
+ };
146
+ /** A branch's local frame. */
147
+ export declare function branchFrame(x0: number, z0: number): {
148
+ at: (lx: number, lz: number) => {
149
+ x: number;
150
+ z: number;
151
+ };
152
+ pt: (lx: number, lz: number) => LanternWakePoint;
153
+ pts: (list: ReadonlyArray<readonly [number, number]>) => LanternWakePoint[];
154
+ box: (a: number, b: number, c: number, d: number) => LanternWakeBox;
155
+ local: (x: number, z: number) => {
156
+ x: number;
157
+ z: number;
158
+ };
159
+ };
160
+ /** Is the world tile land of this layout (inside a land polygon, outside every hole)? */
161
+ export declare function inBranchLand(layout: WestBranchLayout, x: number, z: number): boolean;
162
+ export declare function inBranchBox(layout: WestBranchLayout, x: number, z: number, pad?: number): boolean;
163
+ export declare function inBox(b: LanternWakeBox, x: number, z: number, pad?: number): boolean;
164
+ /** What a branch's creature table row holds (the same shape as the reaches' tables). */
165
+ export type BranchCreature = {
166
+ name: string;
167
+ level: readonly [number, number];
168
+ maxHit: number;
169
+ healthScale: number;
170
+ scale: number;
171
+ note: string;
172
+ };
173
+ export type BranchWildlifeSpot = {
174
+ readonly kind: string;
175
+ readonly x: number;
176
+ readonly z: number;
177
+ readonly leash: number;
178
+ };
179
+ export type BranchPace = {
180
+ speed: number;
181
+ idleChance: number;
182
+ pause: readonly [number, number];
183
+ };
184
+ export type BranchDrop = {
185
+ itemKind: string;
186
+ chance: number;
187
+ minQty: number;
188
+ maxQty: number;
189
+ };
190
+ //# sourceMappingURL=westBranch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westBranch.d.ts","sourceRoot":"","sources":["../src/westBranch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { inWesternPolygon } from './westernKingdoms.js';
2
+ /** A branch's local frame. */
3
+ export function branchFrame(x0, z0) {
4
+ const at = (lx, lz) => ({ x: x0 + lx, z: z0 + lz });
5
+ const pt = (lx, lz) => [x0 + lx, z0 + lz];
6
+ const pts = (list) => list.map(([a, b]) => pt(a, b));
7
+ const box = (a, b, c, d) => ({ minX: x0 + a, maxX: x0 + b, minZ: z0 + c, maxZ: z0 + d });
8
+ const local = (x, z) => ({ x: x - x0, z: z - z0 });
9
+ return { at, pt, pts, box, local };
10
+ }
11
+ /** Is the world tile land of this layout (inside a land polygon, outside every hole)? */
12
+ export function inBranchLand(layout, x, z) {
13
+ const lx = x - layout.x0;
14
+ const lz = z - layout.z0;
15
+ return layout.land.some((p) => inWesternPolygon(lx, lz, p)) && !layout.holes.some((p) => inWesternPolygon(lx, lz, p));
16
+ }
17
+ export function inBranchBox(layout, x, z, pad = 0) {
18
+ const b = layout.box;
19
+ return x >= b.minX - pad && x <= b.maxX + pad && z >= b.minZ - pad && z <= b.maxZ + pad;
20
+ }
21
+ export function inBox(b, x, z, pad = 0) {
22
+ return x >= b.minX - pad && x <= b.maxX + pad && z >= b.minZ - pad && z <= b.maxZ + pad;
23
+ }
24
+ //# sourceMappingURL=westBranch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westBranch.js","sourceRoot":"","sources":["../src/westBranch.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,sBAAsB,CAAC;AAgF7E,8BAA8B;AAC9B,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,EAAU;IAChD,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAU,EAAoB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,CAAC,IAA8C,EAAsB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAkB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACzI,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,MAAwB,EAAE,CAAS,EAAE,CAAS;IACzE,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAwB,EAAE,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,CAAC;IACjF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AAC1F,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,CAAiB,EAAE,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Hover and card names by the prop's full style (`<prop>:<variant>`). */
2
+ export declare const WEST_BRANCH_QUEST_PROP_NAMES: Readonly<Record<string, string>>;
3
+ /** Discovery lines by the prop (the style's first part). */
4
+ export declare const WEST_BRANCH_PROP_DESCRIPTIONS: Readonly<Record<string, string>>;
5
+ /** The count chip's name for a prop: the name of its first style. */
6
+ export declare function westBranchPropChipName(prop: string): string | null;
7
+ //# sourceMappingURL=westBranchQuests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westBranchQuests.d.ts","sourceRoot":"","sources":["../src/westBranchQuests.ts"],"names":[],"mappings":"AAMA,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAiC,CAAC;AAC5G,4DAA4D;AAC5D,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAkC,CAAC;AAE9G,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The side branches' quests together (T88, 2026-10-14): every branch's quest-prop names and discovery lines in one place, so the client names and describes them by looping
3
+ * (frontend entityNames.ts, discovery.ts), as westBranches.ts does for layouts and creatures.
4
+ */
5
+ import { SHALE_PROP_DESCRIPTIONS, SHALE_QUEST_PROP_NAMES } from './shaleTeethQuest.js';
6
+ /** Hover and card names by the prop's full style (`<prop>:<variant>`). */
7
+ export const WEST_BRANCH_QUEST_PROP_NAMES = { ...SHALE_QUEST_PROP_NAMES };
8
+ /** Discovery lines by the prop (the style's first part). */
9
+ export const WEST_BRANCH_PROP_DESCRIPTIONS = { ...SHALE_PROP_DESCRIPTIONS };
10
+ /** The count chip's name for a prop: the name of its first style. */
11
+ export function westBranchPropChipName(prop) {
12
+ const style = Object.keys(WEST_BRANCH_QUEST_PROP_NAMES).find((s) => s.startsWith(`${prop}:`));
13
+ return style ? WEST_BRANCH_QUEST_PROP_NAMES[style] : null;
14
+ }
15
+ //# sourceMappingURL=westBranchQuests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westBranchQuests.js","sourceRoot":"","sources":["../src/westBranchQuests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,4BAA4B,GAAqC,EAAE,GAAG,sBAAsB,EAAE,CAAC;AAC5G,4DAA4D;AAC5D,MAAM,CAAC,MAAM,6BAA6B,GAAqC,EAAE,GAAG,uBAAuB,EAAE,CAAC;AAE9G,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { BranchCreature, BranchDrop, BranchPace, BranchWildlifeSpot, WestBranchId, WestBranchLayout } from './westBranch.js';
2
+ export declare const WEST_BRANCH_LAYOUTS: readonly WestBranchLayout[];
3
+ export declare const WEST_BRANCH_CREATURES: Readonly<Record<string, BranchCreature>>;
4
+ export declare const WEST_BRANCH_PACE: Readonly<Record<string, BranchPace>>;
5
+ export declare const WEST_BRANCH_DROPS: Readonly<Record<string, readonly BranchDrop[]>>;
6
+ export declare const WEST_BRANCH_WILDLIFE_SPOTS: readonly BranchWildlifeSpot[];
7
+ export declare function isWestBranchWildlifeKind(kind: string): boolean;
8
+ /** Which branch's box holds this world tile, if any. */
9
+ export declare function westBranchAt(x: number, z: number): WestBranchId | null;
10
+ export declare function westBranchLayout(id: WestBranchId): WestBranchLayout;
11
+ //# sourceMappingURL=westBranches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westBranches.d.ts","sourceRoot":"","sources":["../src/westBranches.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGlI,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAAmB,CAAC;AAE/E,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAA0B,CAAC;AACtG,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAqB,CAAC;AACxF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC,CAAsB,CAAC;AACrG,eAAO,MAAM,0BAA0B,EAAE,SAAS,kBAAkB,EAA8B,CAAC;AAEnG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGtE;AACD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,gBAAgB,CAEnE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The West Coast's side branches together (T88, 2026-10-14): every branch layout, creature table, spot list, pace table and drop table in one place, so the backend, the
3
+ * client and the guide loop over them instead of naming each branch. Add a branch here and it is laid, populated, dropped, named and guided.
4
+ */
5
+ import { SHALE_CREATURES, SHALE_DROPS, SHALE_PACE, SHALE_WILDLIFE_SPOTS } from './shaleTeethWildlife.js';
6
+ import { SHALE_LAYOUT } from './shaleTeeth.js';
7
+ import { inBranchBox } from './westBranch.js';
8
+ export const WEST_BRANCH_LAYOUTS = [SHALE_LAYOUT];
9
+ export const WEST_BRANCH_CREATURES = { ...SHALE_CREATURES };
10
+ export const WEST_BRANCH_PACE = { ...SHALE_PACE };
11
+ export const WEST_BRANCH_DROPS = { ...SHALE_DROPS };
12
+ export const WEST_BRANCH_WILDLIFE_SPOTS = [...SHALE_WILDLIFE_SPOTS];
13
+ export function isWestBranchWildlifeKind(kind) {
14
+ return Object.prototype.hasOwnProperty.call(WEST_BRANCH_CREATURES, kind);
15
+ }
16
+ /** Which branch's box holds this world tile, if any. */
17
+ export function westBranchAt(x, z) {
18
+ const hit = WEST_BRANCH_LAYOUTS.find((l) => inBranchBox(l, x, z));
19
+ return hit ? hit.id : null;
20
+ }
21
+ export function westBranchLayout(id) {
22
+ return WEST_BRANCH_LAYOUTS.find((l) => l.id === id);
23
+ }
24
+ //# sourceMappingURL=westBranches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westBranches.js","sourceRoot":"","sources":["../src/westBranches.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAgC,CAAC,YAAY,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAA6C,EAAE,GAAG,eAAe,EAAE,CAAC;AACtG,MAAM,CAAC,MAAM,gBAAgB,GAAyC,EAAE,GAAG,UAAU,EAAE,CAAC;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAoD,EAAE,GAAG,WAAW,EAAE,CAAC;AACrG,MAAM,CAAC,MAAM,0BAA0B,GAAkC,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAEnG,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,CAAS;IAC/C,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7B,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,EAAgB;IAC/C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;AACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreadwood-types/types",
3
- "version": "0.1.293",
3
+ "version": "0.1.295",
4
4
  "description": "Public wire protocol and client-safe constants for Dreadwoods",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "scripts": {
24
24
  "build": "tsc -p tsconfig.json",
25
- "test": "node --test scripts/animation-test.mjs scripts/starter-jobs-test.mjs scripts/cooking-nudge-test.mjs scripts/surface-chart-test.mjs scripts/south-expansion-test.mjs scripts/rudd-test.mjs scripts/cave-map-test.mjs scripts/birch-combat-test.mjs scripts/fort-rook-bosses-test.mjs scripts/bounty-first-test.mjs scripts/bounty-high-tiers-test.mjs scripts/running-test.mjs scripts/energy-test.mjs scripts/starter-town-test.mjs scripts/starter-expansion-test.mjs scripts/five-arches-test.mjs scripts/landing-test.mjs scripts/cove-ship-test.mjs scripts/south-fields-quests-test.mjs scripts/south-fields-errands-test.mjs scripts/arcane-lands-test.mjs scripts/fair-folk-test.mjs scripts/fair-contests-test.mjs scripts/missing-shipment-test.mjs scripts/world-boss-ring-test.mjs scripts/ringstone-fight-test.mjs scripts/highstone-test.mjs scripts/fenstone-test.mjs scripts/lair-awakening-test.mjs scripts/hopewood-wildlife-test.mjs scripts/hollin-wildlife-test.mjs scripts/hopewood-quests-test.mjs scripts/western-train-test.mjs scripts/moving-train-test.mjs scripts/train-circuit-test.mjs scripts/forge-halt-test.mjs scripts/forge-polish-test.mjs scripts/western-station-test.mjs scripts/hollin-quests-test.mjs scripts/western-lost-supplies-test.mjs scripts/western-herbal-remedies-test.mjs scripts/western-field-shrine-test.mjs scripts/western-kingdoms-test.mjs scripts/lantern-wake-test.mjs scripts/brindlecross-test.mjs scripts/brindlecross-quest-test.mjs scripts/greenwood-wilds-test.mjs scripts/greenwood-wildlife-test.mjs scripts/greenwood-quest-test.mjs scripts/dwarf-road-wildlife-test.mjs scripts/dwarf-road-test.mjs scripts/riversend-test.mjs scripts/riversend-content-test.mjs scripts/gatewarden-rounds-test.mjs scripts/boss-e8-test.mjs scripts/lantern-wake-town-test.mjs scripts/world-regions-test.mjs scripts/copse-wildlife-test.mjs scripts/copse-quests-test.mjs scripts/marches-wildlife-test.mjs scripts/marches-quests-test.mjs scripts/train-seats-test.mjs scripts/lantern-wake-gallery-test.mjs scripts/lantern-wake-wildlife-test.mjs scripts/lantern-wake-quest-test.mjs scripts/dwarf-hold-test.mjs scripts/western-line-texts-test.mjs scripts/xp-test.mjs scripts/bank-test.mjs scripts/timed-access-test.mjs scripts/ground-items-test.mjs scripts/name-filter-test.mjs scripts/woodwork-logs-test.mjs scripts/area-gates-test.mjs scripts/arcane-realms-test.mjs scripts/frozen-dungeons-test.mjs scripts/long-winter-test.mjs scripts/roster-delta-test.mjs scripts/bow-ladder-test.mjs scripts/lantern-wake-ledge-test.mjs scripts/explorer-ledger-test.mjs scripts/ore-smithing-test.mjs scripts/red-waste-test.mjs scripts/red-waste-folk-test.mjs scripts/daily-hooks-test.mjs scripts/sparring-yard-test.mjs scripts/t16-siege-floe-beach-test.mjs scripts/mammoth-road-test.mjs scripts/mammoth-road-test.mjs scripts/gulls-map-test.mjs scripts/gulls-rook-test.mjs scripts/ride-the-line-test.mjs scripts/gallowmere-test.mjs scripts/gallowmere-content-test.mjs scripts/fishing-derby-test.mjs scripts/sled-run-test.mjs scripts/eastern-marches-a-test.mjs scripts/windward-chalkshell-test.mjs scripts/gullhook-head-test.mjs scripts/webfen-test.mjs scripts/safe-pockets-test.mjs scripts/gallowmere-extras-test.mjs scripts/t53-high-ledge-skill-quests-test.mjs scripts/camp-traders-recommended-test.mjs scripts/west-coast-test.mjs scripts/heartwood-hunt-test.mjs scripts/calverton-extension-test.mjs scripts/gravewatch-test.mjs scripts/tide-of-blood-test.mjs scripts/north-wilds-test.mjs scripts/toll-road-test.mjs scripts/capital-quests-test.mjs scripts/capital-shops-test.mjs scripts/lean-wanted-test.mjs scripts/delvers-ladder-test.mjs scripts/last-signal-test.mjs scripts/sea-salt-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/field-guide-test.mjs scripts/titles-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/voyages-test.mjs scripts/weekly-hunt-test.mjs",
25
+ "test": "node --test scripts/animation-test.mjs scripts/starter-jobs-test.mjs scripts/cooking-nudge-test.mjs scripts/surface-chart-test.mjs scripts/south-expansion-test.mjs scripts/rudd-test.mjs scripts/cave-map-test.mjs scripts/birch-combat-test.mjs scripts/fort-rook-bosses-test.mjs scripts/bounty-first-test.mjs scripts/bounty-high-tiers-test.mjs scripts/running-test.mjs scripts/energy-test.mjs scripts/starter-town-test.mjs scripts/starter-expansion-test.mjs scripts/five-arches-test.mjs scripts/landing-test.mjs scripts/cove-ship-test.mjs scripts/south-fields-quests-test.mjs scripts/south-fields-errands-test.mjs scripts/arcane-lands-test.mjs scripts/fair-folk-test.mjs scripts/fair-contests-test.mjs scripts/missing-shipment-test.mjs scripts/world-boss-ring-test.mjs scripts/ringstone-fight-test.mjs scripts/highstone-test.mjs scripts/fenstone-test.mjs scripts/lair-awakening-test.mjs scripts/hopewood-wildlife-test.mjs scripts/hollin-wildlife-test.mjs scripts/hopewood-quests-test.mjs scripts/western-train-test.mjs scripts/moving-train-test.mjs scripts/train-circuit-test.mjs scripts/forge-halt-test.mjs scripts/forge-polish-test.mjs scripts/western-station-test.mjs scripts/hollin-quests-test.mjs scripts/western-lost-supplies-test.mjs scripts/western-herbal-remedies-test.mjs scripts/western-field-shrine-test.mjs scripts/western-kingdoms-test.mjs scripts/lantern-wake-test.mjs scripts/brindlecross-test.mjs scripts/brindlecross-quest-test.mjs scripts/greenwood-wilds-test.mjs scripts/greenwood-wildlife-test.mjs scripts/greenwood-quest-test.mjs scripts/dwarf-road-wildlife-test.mjs scripts/dwarf-road-test.mjs scripts/riversend-test.mjs scripts/riversend-content-test.mjs scripts/gatewarden-rounds-test.mjs scripts/boss-e8-test.mjs scripts/lantern-wake-town-test.mjs scripts/world-regions-test.mjs scripts/copse-wildlife-test.mjs scripts/copse-quests-test.mjs scripts/marches-wildlife-test.mjs scripts/marches-quests-test.mjs scripts/train-seats-test.mjs scripts/lantern-wake-gallery-test.mjs scripts/lantern-wake-wildlife-test.mjs scripts/lantern-wake-quest-test.mjs scripts/dwarf-hold-test.mjs scripts/western-line-texts-test.mjs scripts/xp-test.mjs scripts/bank-test.mjs scripts/timed-access-test.mjs scripts/ground-items-test.mjs scripts/name-filter-test.mjs scripts/woodwork-logs-test.mjs scripts/area-gates-test.mjs scripts/arcane-realms-test.mjs scripts/frozen-dungeons-test.mjs scripts/long-winter-test.mjs scripts/roster-delta-test.mjs scripts/bow-ladder-test.mjs scripts/lantern-wake-ledge-test.mjs scripts/explorer-ledger-test.mjs scripts/ore-smithing-test.mjs scripts/red-waste-test.mjs scripts/red-waste-folk-test.mjs scripts/daily-hooks-test.mjs scripts/sparring-yard-test.mjs scripts/t16-siege-floe-beach-test.mjs scripts/mammoth-road-test.mjs scripts/mammoth-road-test.mjs scripts/gulls-map-test.mjs scripts/gulls-rook-test.mjs scripts/ride-the-line-test.mjs scripts/gallowmere-test.mjs scripts/gallowmere-content-test.mjs scripts/fishing-derby-test.mjs scripts/sled-run-test.mjs scripts/eastern-marches-a-test.mjs scripts/windward-chalkshell-test.mjs scripts/gullhook-head-test.mjs scripts/webfen-test.mjs scripts/safe-pockets-test.mjs scripts/gallowmere-extras-test.mjs scripts/t53-high-ledge-skill-quests-test.mjs scripts/camp-traders-recommended-test.mjs scripts/west-coast-test.mjs scripts/heartwood-hunt-test.mjs scripts/calverton-extension-test.mjs scripts/gravewatch-test.mjs scripts/tide-of-blood-test.mjs scripts/north-wilds-test.mjs scripts/toll-road-test.mjs scripts/capital-quests-test.mjs scripts/capital-shops-test.mjs scripts/lean-wanted-test.mjs scripts/delvers-ladder-test.mjs scripts/last-signal-test.mjs scripts/sea-salt-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/field-guide-test.mjs scripts/titles-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/voyages-test.mjs scripts/weekly-hunt-test.mjs scripts/west-branches-test.mjs",
26
26
  "dev": "tsc -p tsconfig.json --watch",
27
27
  "prepare": "npm run build",
28
28
  "prepublishOnly": "npm run build"