@dreadwood-types/types 0.1.220 → 0.1.221

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.
@@ -0,0 +1,160 @@
1
+ /**
2
+ * THE RED WASTE (slice C13 of PLAN_1_TO_40.md, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t6-red-waste.md`; design sheet
3
+ * `design-references/redwaste`, ids redwaste, redwastescavenger, chasmprowler, wasteraider): the ashen dead-tree plain in the
4
+ * Dreadwoods' centre-south, south of the blood river and west of the mine. Levels 21-30, inside the PvP zone (decision D4).
5
+ *
6
+ * The sheet is a 150 x 90 region: a red chasm along the north with a western and an eastern pass, a ruin site in the
7
+ * west, the Redcaps' bone camp in the east, and the road from the south gate running up the middle. Built here as:
8
+ *
9
+ * z 560-562 the north wall (blocked rock; the Mining seams stand in its foot)
10
+ * z 563-566 the north shelf (a ledge a step above the plain, reached only by the two passes)
11
+ * z 567-573 the Red Chasm (a band of blood-red water, a few tiles wide, wavering about z 570)
12
+ * z 574-649 the plain: the road, the ruin site (west), the bone camp (east), dead trees and rock
13
+ *
14
+ * The passes are land bridges across the chasm (x 455-461 and x 565-571). The chasm's water is drawn red through
15
+ * `isBloodWater` and `BLOOD_WATER_BOUNDS` (bloodRiver.ts reads this file). Every number is a WORLD tile. The sheet has no
16
+ * people or creature sheet beyond three portraits, so the stand-ins (kit models and existing rigs) are named in the notes.
17
+ */
18
+ import type { LanternWakeBox, LanternWakePoint } from './lanternWake.js';
19
+ export declare const RED_WASTE_NAME = "The Red Waste";
20
+ export declare const RED_WASTE_ID = "red-waste";
21
+ /** The whole region (its discovery zone and ground box). */
22
+ export declare const RED_WASTE_BOX: LanternWakeBox;
23
+ /** The blocked rock along the north edge, and the two end walls that close the shelf. */
24
+ export declare const RED_WASTE_NORTH_WALL: LanternWakeBox;
25
+ export declare const RED_WASTE_END_WALLS: readonly LanternWakeBox[];
26
+ /** The ledge between the wall and the chasm (walkable, a step above the plain). */
27
+ export declare const RED_WASTE_SHELF: LanternWakeBox;
28
+ export declare const RED_WASTE_SHELF_LIFT = 1;
29
+ /** The wall's rock stands this much above the plain. */
30
+ export declare const RED_WASTE_WALL_LIFT = 3;
31
+ /** The chasm: x range, the wavering centre row and its half width (the band is 2 * half + 1 rows deep). */
32
+ export declare const RED_WASTE_CHASM: {
33
+ readonly minX: 446;
34
+ readonly maxX: 583;
35
+ readonly centreZ: 570;
36
+ readonly amp: 1;
37
+ readonly wave: 8;
38
+ readonly half: 2;
39
+ };
40
+ /** How far the chasm's water lies below the plain. */
41
+ export declare const RED_WASTE_CHASM_DEPTH = 1.2;
42
+ export declare function redWasteChasmCentreZ(x: number): number;
43
+ /** The chasm's deepest reach north and south (the pass bridges and the water test use this). */
44
+ export declare const RED_WASTE_CHASM_Z: {
45
+ readonly minZ: 567;
46
+ readonly maxZ: 573;
47
+ };
48
+ /** The two land bridges across the chasm. */
49
+ export declare const RED_WASTE_PASSES: ReadonlyArray<{
50
+ id: 'west' | 'east';
51
+ name: string;
52
+ minX: number;
53
+ maxX: number;
54
+ }>;
55
+ export declare function inRedWastePass(x: number, z: number): boolean;
56
+ /** Is this tile water of the Red Chasm (a pass is a bridge of land, not water)? */
57
+ export declare function inRedWasteChasm(x: number, z: number): boolean;
58
+ /** The roads (world polylines, width in tiles): the road from the south gate, and its two spurs to the passes. */
59
+ export declare const RED_WASTE_PATHS: ReadonlyArray<{
60
+ id: string;
61
+ w: number;
62
+ pts: readonly LanternWakePoint[];
63
+ }>;
64
+ /** The ruin site (west) and the bone camp (east, its palisade ring). */
65
+ export declare const RED_WASTE_RUIN: LanternWakeBox;
66
+ export declare const RED_WASTE_CAMP: LanternWakeBox;
67
+ /** The camp's gate (west wall, facing the road), its two towers and the interior's clear box. */
68
+ export declare const RED_WASTE_CAMP_GATE: {
69
+ readonly x: 541;
70
+ readonly z: 610;
71
+ readonly style: "redcapgate-w";
72
+ };
73
+ export declare const RED_WASTE_CAMP_TOWERS: ReadonlyArray<{
74
+ x: number;
75
+ z: number;
76
+ style: string;
77
+ }>;
78
+ /** What a placed prop is: a kit model (dreadmodel, style `<model>-<facing>`) or an entity of one of the old kinds. */
79
+ export type RedWasteProp = {
80
+ id: string;
81
+ kind: 'dreadmodel' | 'dreadprop' | 'rock' | 'tree' | 'campfire' | 'barrel' | 'logpile';
82
+ style: string;
83
+ x: number;
84
+ z: number;
85
+ scale?: number;
86
+ };
87
+ /**
88
+ * The ruin site's pieces: two broken towers, ruined wall runs, a dry well, the scavenger's lean-to camp (the giver stands by
89
+ * its fire) and a broken cart. Stand-ins: the Broken Road's `ruin` prop and the kit's `hbruinwall`.
90
+ */
91
+ export declare const RED_WASTE_RUIN_PIECES: readonly RedWasteProp[];
92
+ /**
93
+ * The bone camp inside its palisade (the ring itself is laid by the backend from RED_WASTE_CAMP, the gate and the towers):
94
+ * the chief's longhouse at the back, a map table, the fire, bone piles and skull stakes, banner poles either side of the
95
+ * gate, tents, a cart and crates. Stand-ins: the Ridge's Redcap kit and the Dreadwoods props.
96
+ */
97
+ export declare const RED_WASTE_CAMP_PIECES: readonly RedWasteProp[];
98
+ /** The Wasteland Gates at the two passes' south mouths (kit `redcapgate`, the Ridge's gatehouse), facing the chasm. */
99
+ export declare const RED_WASTE_PASS_GATES: ReadonlyArray<RedWasteProp>;
100
+ /** Single pieces along the road: broken carts and bone piles by the verge (the sheet's road markers are quest props, later). */
101
+ export declare const RED_WASTE_ROAD_PIECES: readonly RedWasteProp[];
102
+ /** The chasm's rim: crags and boulders along both lips and the pass flanks are scattered by the backend; spires at these. */
103
+ export declare const RED_WASTE_SPIRES: ReadonlyArray<{
104
+ x: number;
105
+ z: number;
106
+ }>;
107
+ /** The road signs (the placard signpost). */
108
+ export declare const RED_WASTE_SIGNS: ReadonlyArray<{
109
+ id: string;
110
+ x: number;
111
+ z: number;
112
+ text: string;
113
+ }>;
114
+ /** Standable tiles (admin teleports, smokes): one for each place. */
115
+ export declare const RED_WASTE_STANDS: {
116
+ readonly road: {
117
+ readonly x: 463;
118
+ readonly z: 640;
119
+ };
120
+ readonly lip: {
121
+ readonly x: 512;
122
+ readonly z: 578;
123
+ };
124
+ readonly ruin: {
125
+ readonly x: 484;
126
+ readonly z: 614;
127
+ };
128
+ readonly camp: {
129
+ readonly x: 530;
130
+ readonly z: 610;
131
+ };
132
+ readonly campYard: {
133
+ readonly x: 552;
134
+ readonly z: 609;
135
+ };
136
+ readonly westPass: {
137
+ readonly x: 458;
138
+ readonly z: 570;
139
+ };
140
+ readonly eastPass: {
141
+ readonly x: 568;
142
+ readonly z: 570;
143
+ };
144
+ readonly shelf: {
145
+ readonly x: 512;
146
+ readonly z: 565;
147
+ };
148
+ };
149
+ /** The discovery zone (types expandedContracts.ts INSERTED_DISCOVERY_ZONES). */
150
+ export declare const RED_WASTE_DISCOVERY_ZONE: {
151
+ minX: number;
152
+ maxX: number;
153
+ minZ: number;
154
+ maxZ: number;
155
+ id: string;
156
+ label: string;
157
+ coordinateFrame: "world";
158
+ };
159
+ export declare function inRedWasteBox(x: number, z: number, pad?: number): boolean;
160
+ //# sourceMappingURL=redWaste.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redWaste.d.ts","sourceRoot":"","sources":["../src/redWaste.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ export const RED_WASTE_NAME = 'The Red Waste';
2
+ export const RED_WASTE_ID = 'red-waste';
3
+ /** The whole region (its discovery zone and ground box). */
4
+ export const RED_WASTE_BOX = { minX: 440, maxX: 589, minZ: 560, maxZ: 649 };
5
+ /** The blocked rock along the north edge, and the two end walls that close the shelf. */
6
+ export const RED_WASTE_NORTH_WALL = { minX: 440, maxX: 589, minZ: 560, maxZ: 562 };
7
+ export const RED_WASTE_END_WALLS = [
8
+ { minX: 440, maxX: 445, minZ: 563, maxZ: 576 },
9
+ { minX: 584, maxX: 589, minZ: 563, maxZ: 576 },
10
+ ];
11
+ /** The ledge between the wall and the chasm (walkable, a step above the plain). */
12
+ export const RED_WASTE_SHELF = { minX: 446, maxX: 583, minZ: 563, maxZ: 566 };
13
+ export const RED_WASTE_SHELF_LIFT = 1;
14
+ /** The wall's rock stands this much above the plain. */
15
+ export const RED_WASTE_WALL_LIFT = 3;
16
+ /** The chasm: x range, the wavering centre row and its half width (the band is 2 * half + 1 rows deep). */
17
+ export const RED_WASTE_CHASM = { minX: 446, maxX: 583, centreZ: 570, amp: 1, wave: 8, half: 2 };
18
+ /** How far the chasm's water lies below the plain. */
19
+ export const RED_WASTE_CHASM_DEPTH = 1.2;
20
+ export function redWasteChasmCentreZ(x) {
21
+ const c = RED_WASTE_CHASM;
22
+ return c.centreZ + Math.round(c.amp * Math.sin((x - c.minX) / c.wave));
23
+ }
24
+ /** The chasm's deepest reach north and south (the pass bridges and the water test use this). */
25
+ export const RED_WASTE_CHASM_Z = { minZ: 567, maxZ: 573 };
26
+ /** The two land bridges across the chasm. */
27
+ export const RED_WASTE_PASSES = [
28
+ { id: 'west', name: 'Western Pass', minX: 455, maxX: 461 },
29
+ { id: 'east', name: 'Eastern Pass', minX: 565, maxX: 571 },
30
+ ];
31
+ export function inRedWastePass(x, z) {
32
+ return RED_WASTE_PASSES.some((p) => x >= p.minX && x <= p.maxX) && z >= RED_WASTE_CHASM_Z.minZ - 1 && z <= RED_WASTE_CHASM_Z.maxZ + 1;
33
+ }
34
+ /** Is this tile water of the Red Chasm (a pass is a bridge of land, not water)? */
35
+ export function inRedWasteChasm(x, z) {
36
+ const c = RED_WASTE_CHASM;
37
+ if (x < c.minX || x > c.maxX)
38
+ return false;
39
+ if (Math.abs(z - redWasteChasmCentreZ(x)) > c.half)
40
+ return false;
41
+ return !inRedWastePass(x, z);
42
+ }
43
+ /** The roads (world polylines, width in tiles): the road from the south gate, and its two spurs to the passes. */
44
+ export const RED_WASTE_PATHS = [
45
+ { id: 'south-road', w: 3, pts: [[463, 649], [463, 590], [512, 584], [512, 576]] },
46
+ { id: 'west-spur', w: 3, pts: [[512, 580], [458, 580], [458, 574]] },
47
+ { id: 'east-spur', w: 3, pts: [[512, 580], [568, 580], [568, 574]] },
48
+ ];
49
+ /** The ruin site (west) and the bone camp (east, its palisade ring). */
50
+ export const RED_WASTE_RUIN = { minX: 466, maxX: 494, minZ: 600, maxZ: 628 };
51
+ export const RED_WASTE_CAMP = { minX: 541, maxX: 567, minZ: 598, maxZ: 622 };
52
+ /** The camp's gate (west wall, facing the road), its two towers and the interior's clear box. */
53
+ export const RED_WASTE_CAMP_GATE = { x: 541, z: 610, style: 'redcapgate-w' };
54
+ export const RED_WASTE_CAMP_TOWERS = [
55
+ { x: 566, z: 599, style: 'redcaptower-s' },
56
+ { x: 566, z: 621, style: 'redcaptower-w' },
57
+ ];
58
+ const wall = (id, x, z) => ({ id, kind: 'dreadmodel', style: 'hbruinwall-s', x, z });
59
+ const run = (prefix, xs, zs) => xs.flatMap((x) => zs.map((z) => wall(`${prefix}-${x}-${z}`, x, z)));
60
+ const range = (a, b) => Array.from({ length: b - a + 1 }, (_, i) => a + i);
61
+ /**
62
+ * The ruin site's pieces: two broken towers, ruined wall runs, a dry well, the scavenger's lean-to camp (the giver stands by
63
+ * its fire) and a broken cart. Stand-ins: the Broken Road's `ruin` prop and the kit's `hbruinwall`.
64
+ */
65
+ export const RED_WASTE_RUIN_PIECES = [
66
+ { id: 'rw-ruin-tower-1', kind: 'dreadprop', style: 'ruin-face200', x: 474, z: 607 },
67
+ { id: 'rw-ruin-tower-2', kind: 'dreadprop', style: 'ruin-face60', x: 489, z: 624 },
68
+ ...run('rw-ruin-wall-a', range(468, 473), [618]),
69
+ ...run('rw-ruin-wall-b', [480], range(616, 620)),
70
+ ...run('rw-ruin-wall-c', range(486, 491), [604]),
71
+ { id: 'rw-ruin-well', kind: 'dreadmodel', style: 'hwwellruin-s', x: 482, z: 611 },
72
+ { id: 'rw-ruin-pillar-1', kind: 'dreadprop', style: 'archpillar', x: 471, z: 612 },
73
+ { id: 'rw-ruin-pillar-2', kind: 'dreadprop', style: 'archpillar', x: 476, z: 626 },
74
+ { id: 'rw-scav-tent', kind: 'dreadprop', style: 'tent-face90', x: 491, z: 614 },
75
+ { id: 'rw-scav-fire', kind: 'campfire', style: 'beach-pit', x: 487, z: 615, scale: 1 },
76
+ { id: 'rw-scav-crates', kind: 'dreadprop', style: 'crates', x: 493, z: 618 },
77
+ { id: 'rw-scav-cart', kind: 'dreadprop', style: 'cart', x: 479, z: 626 },
78
+ { id: 'rw-scav-bones', kind: 'dreadprop', style: 'bones', x: 473, z: 621 },
79
+ ];
80
+ /**
81
+ * The bone camp inside its palisade (the ring itself is laid by the backend from RED_WASTE_CAMP, the gate and the towers):
82
+ * the chief's longhouse at the back, a map table, the fire, bone piles and skull stakes, banner poles either side of the
83
+ * gate, tents, a cart and crates. Stand-ins: the Ridge's Redcap kit and the Dreadwoods props.
84
+ */
85
+ export const RED_WASTE_CAMP_PIECES = [
86
+ { id: 'rw-camp-hall', kind: 'dreadmodel', style: 'redcaplonghouse-s', x: 556, z: 603 },
87
+ { id: 'rw-camp-maptable', kind: 'dreadmodel', style: 'redcapmaptable-w', x: 563, z: 612 },
88
+ { id: 'rw-camp-fire', kind: 'campfire', style: 'beach-pit', x: 552, z: 612, scale: 1.1 },
89
+ { id: 'rw-camp-bones-1', kind: 'dreadprop', style: 'bones', x: 548, z: 606, scale: 1.3 },
90
+ { id: 'rw-camp-bones-2', kind: 'dreadprop', style: 'bones', x: 560, z: 616, scale: 1.2 },
91
+ { id: 'rw-camp-bones-3', kind: 'dreadprop', style: 'bones', x: 547, z: 619, scale: 1 },
92
+ { id: 'rw-camp-skull-1', kind: 'dreadmodel', style: 'skullstake-s', x: 545, z: 600 },
93
+ { id: 'rw-camp-skull-2', kind: 'dreadmodel', style: 'skullstake-s', x: 562, z: 620 },
94
+ { id: 'rw-camp-skull-3', kind: 'dreadmodel', style: 'skullstake-s', x: 544, z: 618 },
95
+ { id: 'rw-camp-banner-1', kind: 'dreadprop', style: 'banner', x: 544, z: 607 },
96
+ { id: 'rw-camp-banner-2', kind: 'dreadprop', style: 'banner', x: 544, z: 613 },
97
+ { id: 'rw-camp-tent-1', kind: 'dreadprop', style: 'tent-face0', x: 549, z: 600 },
98
+ { id: 'rw-camp-tent-2', kind: 'dreadprop', style: 'tent-face180', x: 558, z: 619 },
99
+ { id: 'rw-camp-cart', kind: 'dreadprop', style: 'cart', x: 553, z: 620 },
100
+ { id: 'rw-camp-crates', kind: 'dreadprop', style: 'crates', x: 564, z: 607 },
101
+ { id: 'rw-camp-logs', kind: 'logpile', style: 'pile', x: 548, z: 612, scale: 0.95 },
102
+ ];
103
+ /** The Wasteland Gates at the two passes' south mouths (kit `redcapgate`, the Ridge's gatehouse), facing the chasm. */
104
+ export const RED_WASTE_PASS_GATES = [
105
+ { id: 'rw-gate-west', kind: 'dreadmodel', style: 'redcapgate-n', x: 458, z: 576 },
106
+ { id: 'rw-gate-east', kind: 'dreadmodel', style: 'redcapgate-n', x: 568, z: 576 },
107
+ ];
108
+ /** Single pieces along the road: broken carts and bone piles by the verge (the sheet's road markers are quest props, later). */
109
+ export const RED_WASTE_ROAD_PIECES = [
110
+ { id: 'rw-road-cart-1', kind: 'dreadprop', style: 'cart', x: 467, z: 636 },
111
+ { id: 'rw-road-cart-2', kind: 'dreadprop', style: 'cart', x: 458, z: 598 },
112
+ { id: 'rw-road-cart-3', kind: 'dreadmodel', style: 'fishcartwreck-e', x: 505, z: 589 },
113
+ { id: 'rw-road-bones-1', kind: 'dreadprop', style: 'bones', x: 466, z: 620, scale: 1.2 },
114
+ { id: 'rw-road-bones-2', kind: 'dreadprop', style: 'bones', x: 520, z: 586, scale: 1.1 },
115
+ { id: 'rw-road-totem', kind: 'dreadprop', style: 'totem', x: 514, z: 578 },
116
+ ];
117
+ /** The chasm's rim: crags and boulders along both lips and the pass flanks are scattered by the backend; spires at these. */
118
+ export const RED_WASTE_SPIRES = [
119
+ { x: 480, z: 575 }, { x: 492, z: 576 }, { x: 531, z: 575 }, { x: 545, z: 576 }, { x: 556, z: 575 }, { x: 502, z: 566 }, { x: 540, z: 566 },
120
+ ];
121
+ /** The road signs (the placard signpost). */
122
+ export const RED_WASTE_SIGNS = [
123
+ { id: 'rw-sign-road', x: 466, z: 646, text: 'The Red Waste. Raiders and prowlers hunt here (Combat 25+). Players fight here too.' },
124
+ { id: 'rw-sign-chasm', x: 516, z: 578, text: 'The Red Chasm. The passes cross east and west; the shelf beyond has coal seams.' },
125
+ { id: 'rw-sign-ruin', x: 470, z: 596, text: 'Old ruin and a scavenger\'s camp. The bone camp lies east, behind its palisade.' },
126
+ ];
127
+ /** Standable tiles (admin teleports, smokes): one for each place. */
128
+ export const RED_WASTE_STANDS = {
129
+ road: { x: 463, z: 640 },
130
+ lip: { x: 512, z: 578 },
131
+ ruin: { x: 484, z: 614 },
132
+ camp: { x: 530, z: 610 },
133
+ campYard: { x: 552, z: 609 },
134
+ westPass: { x: 458, z: 570 },
135
+ eastPass: { x: 568, z: 570 },
136
+ shelf: { x: 512, z: 565 },
137
+ };
138
+ /** The discovery zone (types expandedContracts.ts INSERTED_DISCOVERY_ZONES). */
139
+ export const RED_WASTE_DISCOVERY_ZONE = { id: RED_WASTE_ID, label: RED_WASTE_NAME, coordinateFrame: 'world', ...RED_WASTE_BOX };
140
+ export function inRedWasteBox(x, z, pad = 0) {
141
+ const b = RED_WASTE_BOX;
142
+ return x >= b.minX - pad && x <= b.maxX + pad && z >= b.minZ - pad && z <= b.maxZ + pad;
143
+ }
144
+ //# sourceMappingURL=redWaste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redWaste.js","sourceRoot":"","sources":["../src/redWaste.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AAExC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAE5F,yFAAyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACnG,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;IAC9C,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;CAC/C,CAAC;AACF,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC9F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,wDAAwD;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,2GAA2G;AAC3G,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AACzG,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,UAAU,oBAAoB,CAAC,CAAS;IAC5C,MAAM,CAAC,GAAG,eAAe,CAAC;IAC1B,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AACD,gGAAgG;AAChG,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AAEnE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAqF;IAChH,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;IAC1D,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;CAC3D,CAAC;AACF,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS;IACjD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC;AACxI,CAAC;AACD,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,CAAC,GAAG,eAAe,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,kHAAkH;AAClH,MAAM,CAAC,MAAM,eAAe,GAA+E;IACzG,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;IACjF,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;IACpE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;CACrE,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC7F,MAAM,CAAC,MAAM,cAAc,GAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC7F,iGAAiG;AACjG,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAW,CAAC;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAA2D;IAC3F,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE;IAC1C,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE;CAC3C,CAAC;AAYF,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,CAAS,EAAE,CAAS,EAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3H,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,EAAY,EAAE,EAAY,EAAkB,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChJ,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAErG;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACnF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAClF,GAAG,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChD,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,GAAG,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChD,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACjF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAClF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAClF,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC/E,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IACtF,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5E,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACxE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC3E,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACtF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACzF,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACxF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACxF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACxF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IACtF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9E,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAChF,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAClF,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACxE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5E,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;CACpF,CAAC;AAEF,uHAAuH;AACvH,MAAM,CAAC,MAAM,oBAAoB,GAAgC;IAC/D,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACjF,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAClF,CAAC;AAEF,gIAAgI;AAChI,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACtF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACxF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACxF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC3E,CAAC;AAEF,6HAA6H;AAC7H,MAAM,CAAC,MAAM,gBAAgB,GAA4C;IACvE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC3I,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAsE;IAChG,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,qFAAqF,EAAE;IACnI,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,iFAAiF,EAAE;IAChI,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,iFAAiF,EAAE;CAChI,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACxB,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACvB,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACxB,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5B,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5B,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5B,KAAK,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CACjB,CAAC;AAEX,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,OAAgB,EAAE,GAAG,aAAa,EAAE,CAAC;AAEzI,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,CAAC;IACzD,MAAM,CAAC,GAAG,aAAa,CAAC;IACxB,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,65 @@
1
+ /**
2
+ * THE RED WASTE'S PEOPLE AND CREATURES (slice C13-2, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t6-red-waste.md`; design
3
+ * sheet `redwaste`, whose three portraits are the Red Waste Scavenger, the Chasm Prowler (level 28, "mutated predator") and the
4
+ * Waste Raider (level 30, "bandit of the Red Waste", a Redcap). The sheet has no chief and no giver beyond the Scavenger, so:
5
+ *
6
+ * - the giver is the sheet's Scavenger, named Dessa Rake, a stand-in on the player rig (frontend redWaste look);
7
+ * - the raiders' chief is a stand-in too: a bigger Redcap on the same rig, level 32, tougher than his level (Black Tom's pattern);
8
+ * - the prowler is the game's wolf re-dressed (dark coat, red crystal spikes down the back) until its own Blender kit lands.
9
+ *
10
+ * Everything hostile here hunts anyone inside the Red Waste's box (the Dreadwoods are PvP ground) and turns back at its leash.
11
+ * Every number is a WORLD tile.
12
+ */
13
+ import type { LanternWakeBox } from './lanternWake.js';
14
+ export declare const CHASM_PROWLER_KIND = "chasmprowler";
15
+ export declare const WASTE_RAIDER_KIND = "wasteraider";
16
+ export declare const RAIDER_CHIEF_KIND = "raiderchief";
17
+ export declare const RED_WASTE_SCAVENGER_KIND = "redwastescavenger";
18
+ export type RedWasteHostileKind = typeof CHASM_PROWLER_KIND | typeof WASTE_RAIDER_KIND | typeof RAIDER_CHIEF_KIND;
19
+ export declare const RED_WASTE_HOSTILE_KINDS: readonly RedWasteHostileKind[];
20
+ export declare const RED_WASTE_NPC_KINDS: readonly string[];
21
+ export declare function isRedWasteHostileKind(kind: string): kind is RedWasteHostileKind;
22
+ export declare function isRedWasteNpcKind(kind: string): boolean;
23
+ export declare const RED_WASTE_SCAVENGER_NAME = "Dessa Rake";
24
+ export declare const RAIDER_CHIEF_NAME = "Warlord Kesh Ashmane";
25
+ export declare const RED_WASTE_CREATURES: Readonly<Record<RedWasteHostileKind, {
26
+ name: string;
27
+ level: readonly [number, number];
28
+ maxHit: number;
29
+ healthFactor: number;
30
+ respawnMs: number;
31
+ note: string;
32
+ }>>;
33
+ /** Who hunts whom: aggro and leash radii (tiles) and the line a player is told when one locks on. Only players inside the box are hunted. */
34
+ export declare const RED_WASTE_AGGRO: Readonly<Record<RedWasteHostileKind, {
35
+ aggro: number;
36
+ leash: number;
37
+ text: string;
38
+ }>>;
39
+ /** The camp's yard (inside its palisade): the raiders and the chief hold it. */
40
+ export declare const RED_WASTE_YARD: LanternWakeBox;
41
+ export type RedWasteSpot = {
42
+ readonly kind: RedWasteHostileKind;
43
+ readonly x: number;
44
+ readonly z: number;
45
+ readonly leash: number;
46
+ };
47
+ /** Where they stand: prowlers over the plain, raiders in the camp, on the road and on the shelf, the chief before his hall. */
48
+ export declare const RED_WASTE_SPOTS: readonly RedWasteSpot[];
49
+ /** Movement of the hostile ones when they are not hunting. */
50
+ export declare const RED_WASTE_PACE: Readonly<Record<RedWasteHostileKind, {
51
+ speed: number;
52
+ idleChance: number;
53
+ pause: readonly [number, number];
54
+ }>>;
55
+ /** The giver stands by the scavenger's fire at the ruin site (the fire is at 487,615), a step from the lean-to. */
56
+ export declare const RED_WASTE_SCAVENGER_SPOT: {
57
+ readonly x: 485;
58
+ readonly z: 617;
59
+ readonly faceX: 487;
60
+ readonly faceZ: 615;
61
+ readonly leash: 1;
62
+ };
63
+ /** Is this tile inside the hunting ground (players here are fair game for the Red Waste's hunters)? */
64
+ export declare function inRedWasteHunt(x: number, z: number): boolean;
65
+ //# sourceMappingURL=redWasteCreatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redWasteCreatures.d.ts","sourceRoot":"","sources":["../src/redWasteCreatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,kBAAkB,GAAG,OAAO,iBAAiB,GAAG,OAAO,iBAAiB,CAAC;AAClH,eAAO,MAAM,uBAAuB,EAAE,SAAS,mBAAmB,EAA+D,CAAC;AAClI,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAA2D,CAAC;AAE7G,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,mBAAmB,CAE/E;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,eAAO,MAAM,wBAAwB,eAAe,CAAC;AACrD,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AAExD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CACxC,MAAM,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BvJ,CAAC;AAEF,6IAA6I;AAC7I,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAIjH,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,cAAc,EAAE,cAA+I,CAAC;AAE7K,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElI,+HAA+H;AAC/H,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EA4BlD,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAIzI,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,wBAAwB;;;;;;CAAgE,CAAC;AAEtG,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAG5D"}
@@ -0,0 +1,93 @@
1
+ import { RED_WASTE_BOX, RED_WASTE_CAMP } from './redWaste.js';
2
+ export const CHASM_PROWLER_KIND = 'chasmprowler';
3
+ export const WASTE_RAIDER_KIND = 'wasteraider';
4
+ export const RAIDER_CHIEF_KIND = 'raiderchief';
5
+ export const RED_WASTE_SCAVENGER_KIND = 'redwastescavenger';
6
+ export const RED_WASTE_HOSTILE_KINDS = [CHASM_PROWLER_KIND, WASTE_RAIDER_KIND, RAIDER_CHIEF_KIND];
7
+ export const RED_WASTE_NPC_KINDS = [...RED_WASTE_HOSTILE_KINDS, RED_WASTE_SCAVENGER_KIND];
8
+ export function isRedWasteHostileKind(kind) {
9
+ return RED_WASTE_HOSTILE_KINDS.includes(kind);
10
+ }
11
+ export function isRedWasteNpcKind(kind) {
12
+ return RED_WASTE_NPC_KINDS.includes(kind);
13
+ }
14
+ export const RED_WASTE_SCAVENGER_NAME = 'Dessa Rake';
15
+ export const RAIDER_CHIEF_NAME = 'Warlord Kesh Ashmane';
16
+ export const RED_WASTE_CREATURES = {
17
+ chasmprowler: {
18
+ name: 'Chasm Prowler',
19
+ level: [27, 29],
20
+ maxHit: 15,
21
+ healthFactor: 1,
22
+ respawnMs: 60_000,
23
+ note: 'A mutated predator of the Red Waste: a wolf gone to ash-grey with red crystal spikes down its back. It smells the living from miles away and hunts anyone on the plain.',
24
+ },
25
+ wasteraider: {
26
+ name: 'Waste Raider',
27
+ level: [29, 31],
28
+ maxHit: 17,
29
+ healthFactor: 1,
30
+ respawnMs: 75_000,
31
+ note: 'A Redcap bandit of the Red Waste with a spear: the bone camp\'s raiders, who say everything out here belongs to the Redcaps now.',
32
+ },
33
+ raiderchief: {
34
+ name: RAIDER_CHIEF_NAME,
35
+ level: [32, 32],
36
+ maxHit: 21,
37
+ healthFactor: 1.8,
38
+ respawnMs: 240_000,
39
+ note: 'The raiders\' chief, in front of his hall at the back of the bone camp; tougher than his level.',
40
+ },
41
+ };
42
+ /** Who hunts whom: aggro and leash radii (tiles) and the line a player is told when one locks on. Only players inside the box are hunted. */
43
+ export const RED_WASTE_AGGRO = {
44
+ chasmprowler: { aggro: 8, leash: 16, text: 'A Chasm Prowler catches your scent and comes at you!' },
45
+ wasteraider: { aggro: 7, leash: 18, text: 'A Waste Raider shouts "Everything out here belongs to the Redcaps!" and charges!' },
46
+ raiderchief: { aggro: 6, leash: 14, text: 'Warlord Kesh Ashmane: "You walked into my camp. You will not walk out."' },
47
+ };
48
+ /** The camp's yard (inside its palisade): the raiders and the chief hold it. */
49
+ export const RED_WASTE_YARD = { minX: RED_WASTE_CAMP.minX + 1, maxX: RED_WASTE_CAMP.maxX - 1, minZ: RED_WASTE_CAMP.minZ + 1, maxZ: RED_WASTE_CAMP.maxZ - 1 };
50
+ /** Where they stand: prowlers over the plain, raiders in the camp, on the road and on the shelf, the chief before his hall. */
51
+ export const RED_WASTE_SPOTS = [
52
+ // Chasm Prowlers: the open plain, kept off the road's foot, the ruin's camp and the camp's gate.
53
+ { kind: 'chasmprowler', x: 500, z: 605, leash: 5 },
54
+ { kind: 'chasmprowler', x: 508, z: 628, leash: 5 },
55
+ { kind: 'chasmprowler', x: 520, z: 640, leash: 5 },
56
+ { kind: 'chasmprowler', x: 496, z: 636, leash: 5 },
57
+ { kind: 'chasmprowler', x: 528, z: 596, leash: 5 },
58
+ { kind: 'chasmprowler', x: 524, z: 614, leash: 5 },
59
+ { kind: 'chasmprowler', x: 534, z: 630, leash: 5 },
60
+ { kind: 'chasmprowler', x: 500, z: 592, leash: 5 },
61
+ { kind: 'chasmprowler', x: 572, z: 636, leash: 5 },
62
+ { kind: 'chasmprowler', x: 510, z: 618, leash: 5 },
63
+ // Waste Raiders: inside the bone camp.
64
+ { kind: 'wasteraider', x: 548, z: 610, leash: 3 },
65
+ { kind: 'wasteraider', x: 560, z: 609, leash: 3 },
66
+ { kind: 'wasteraider', x: 552, z: 616, leash: 3 },
67
+ { kind: 'wasteraider', x: 546, z: 614, leash: 3 },
68
+ { kind: 'wasteraider', x: 558, z: 617, leash: 3 },
69
+ { kind: 'wasteraider', x: 564, z: 604, leash: 3 },
70
+ { kind: 'wasteraider', x: 550, z: 603, leash: 3 },
71
+ { kind: 'wasteraider', x: 562, z: 614, leash: 3 },
72
+ // Waste Raiders on watch: outside the gate, on the road's bend, and one on each pass's shelf end.
73
+ { kind: 'wasteraider', x: 532, z: 606, leash: 4 },
74
+ { kind: 'wasteraider', x: 520, z: 590, leash: 4 },
75
+ { kind: 'wasteraider', x: 462, z: 565, leash: 3 },
76
+ { kind: 'wasteraider', x: 566, z: 565, leash: 3 },
77
+ // The chief, before the longhouse door.
78
+ { kind: 'raiderchief', x: 556, z: 608, leash: 2 },
79
+ ];
80
+ /** Movement of the hostile ones when they are not hunting. */
81
+ export const RED_WASTE_PACE = {
82
+ chasmprowler: { speed: 1.25, idleChance: 0.45, pause: [2, 6] },
83
+ wasteraider: { speed: 1, idleChance: 0.7, pause: [3, 9] },
84
+ raiderchief: { speed: 0.9, idleChance: 0.85, pause: [5, 12] },
85
+ };
86
+ /** The giver stands by the scavenger's fire at the ruin site (the fire is at 487,615), a step from the lean-to. */
87
+ export const RED_WASTE_SCAVENGER_SPOT = { x: 485, z: 617, faceX: 487, faceZ: 615, leash: 1 };
88
+ /** Is this tile inside the hunting ground (players here are fair game for the Red Waste's hunters)? */
89
+ export function inRedWasteHunt(x, z) {
90
+ const b = RED_WASTE_BOX;
91
+ return x >= b.minX && x <= b.maxX && z >= b.minZ && z <= b.maxZ;
92
+ }
93
+ //# sourceMappingURL=redWasteCreatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redWasteCreatures.js","sourceRoot":"","sources":["../src/redWasteCreatures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * RAIDERS OF THE RED WASTE (slice C13-3, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t6-red-waste.md`; PLAN_1_TO_40.md row
3
+ * "Raiders of the Red Waste (26-30)"). Dessa Rake, the Red Waste Scavenger who picks over the old ruin, wants the Redcaps' bone
4
+ * camp broken before it closes the mine road: read the raiders' road marks, thin the Chasm Prowlers the raiders' blasting drove
5
+ * onto the plain, break the raiders, tear down the camp's banner, put the Warlord down and bring her the proof.
6
+ *
7
+ * Every number is a WORLD tile. The sheet has no quest art, so the quest items are the sheet's inventory icons: the Chasm
8
+ * Shard, the Bandit Token and the Torn Banner.
9
+ */
10
+ import type { LanternWakeQuestProp } from './lanternWakeQuests.js';
11
+ export declare const RAIDERS_QUEST_ID = "raidersOfTheRedWaste";
12
+ export declare const RAIDERS_QUEST_NAME = "Raiders of the Red Waste";
13
+ /** Combat level the quest asks (levels 26-30 per the plan; a placeholder until the balance pass). */
14
+ export declare const RAIDERS_QUEST_COMBAT_LEVEL = 26;
15
+ export declare const CHASM_SHARD_KIND = "chasmshard";
16
+ export declare const BANDIT_TOKEN_KIND = "banditoken";
17
+ export declare const TORN_BANNER_KIND = "tornbanner";
18
+ export declare const RED_WASTE_QUEST_ITEM_KINDS: readonly string[];
19
+ export declare const RED_WASTE_QUEST_ITEM_NAMES: Readonly<Record<string, string>>;
20
+ export declare const RED_WASTE_QUEST_ITEM_NOTES: Readonly<Record<string, string>>;
21
+ /** Props (questprop entities, style `<prop>:<which>`). */
22
+ export declare const RW_PROP: {
23
+ readonly marker: "rwmarker";
24
+ readonly banner: "rwbanner";
25
+ };
26
+ export declare const RW_MARKER_A: LanternWakeQuestProp;
27
+ export declare const RW_MARKER_B: LanternWakeQuestProp;
28
+ export declare const RW_MARKER_C: LanternWakeQuestProp;
29
+ export declare const RW_BANNER: LanternWakeQuestProp;
30
+ export declare const RED_WASTE_QUEST_PROPS: readonly LanternWakeQuestProp[];
31
+ /** The Blender kit model a Red Waste quest prop draws with (CAPITAL_BUILDING_MODELS), or null if not one of them. */
32
+ export declare function redWastePropModel(prop: string): string | null;
33
+ export declare const RED_WASTE_QUEST_PROP_NAMES: Readonly<Record<string, string>>;
34
+ /** What the quest pays: coins, Explorer XP, a combat XP lump and a few steel bars. A proposal for the balance pass. */
35
+ export declare const RAIDERS_REWARD: {
36
+ readonly coins: 1800;
37
+ readonly explorerXp: 900;
38
+ readonly choiceXp: 1400;
39
+ readonly steelBars: 3;
40
+ };
41
+ /** How many of each to bring. */
42
+ export declare const RAIDERS_PROWLERS_TO_DEFEAT = 5;
43
+ export declare const RAIDERS_RAIDERS_TO_DEFEAT = 6;
44
+ export declare const RAIDERS_SHARDS = 3;
45
+ export declare const RAIDERS_TOKENS = 3;
46
+ //# sourceMappingURL=redWasteQuest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redWasteQuest.d.ts","sourceRoot":"","sources":["../src/redWasteQuest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,qGAAqG;AACrG,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAA4D,CAAC;AACrH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIvE,CAAC;AACF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIvE,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,OAAO;;;CAAsD,CAAC;AAE3E,eAAO,MAAM,WAAW,EAAE,oBAAgG,CAAC;AAC3H,eAAO,MAAM,WAAW,EAAE,oBAAgG,CAAC;AAC3H,eAAO,MAAM,WAAW,EAAE,oBAAgG,CAAC;AAC3H,eAAO,MAAM,SAAS,EAAE,oBAAiG,CAAC;AAC1H,eAAO,MAAM,qBAAqB,EAAE,SAAS,oBAAoB,EAAuD,CAAC;AAEzH,qHAAqH;AACrH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvE,CAAC;AAEF,uHAAuH;AACvH,eAAO,MAAM,cAAc;;;;;CAA0E,CAAC;AACtG,iCAAiC;AACjC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,IAAI,CAAC"}
@@ -0,0 +1,47 @@
1
+ export const RAIDERS_QUEST_ID = 'raidersOfTheRedWaste';
2
+ export const RAIDERS_QUEST_NAME = 'Raiders of the Red Waste';
3
+ /** Combat level the quest asks (levels 26-30 per the plan; a placeholder until the balance pass). */
4
+ export const RAIDERS_QUEST_COMBAT_LEVEL = 26;
5
+ export const CHASM_SHARD_KIND = 'chasmshard';
6
+ export const BANDIT_TOKEN_KIND = 'banditoken';
7
+ export const TORN_BANNER_KIND = 'tornbanner';
8
+ export const RED_WASTE_QUEST_ITEM_KINDS = [CHASM_SHARD_KIND, BANDIT_TOKEN_KIND, TORN_BANNER_KIND];
9
+ export const RED_WASTE_QUEST_ITEM_NAMES = {
10
+ [CHASM_SHARD_KIND]: 'Chasm Shard',
11
+ [BANDIT_TOKEN_KIND]: 'Bandit Token',
12
+ [TORN_BANNER_KIND]: 'Torn Banner',
13
+ };
14
+ export const RED_WASTE_QUEST_ITEM_NOTES = {
15
+ [CHASM_SHARD_KIND]: 'A shard of red crystal broken off a Chasm Prowler. The dwarves of the Hold pay well for it.',
16
+ [BANDIT_TOKEN_KIND]: 'A skull-stamped token the raiders carry to show they belong to the bone camp.',
17
+ [TORN_BANNER_KIND]: 'A torn red banner pulled down from the raiders\' camp.',
18
+ };
19
+ /** Props (questprop entities, style `<prop>:<which>`). */
20
+ export const RW_PROP = { marker: 'rwmarker', banner: 'rwbanner' };
21
+ export const RW_MARKER_A = { id: 'rw-quest-marker-a', x: 466, z: 644, style: `${RW_PROP.marker}:a` };
22
+ export const RW_MARKER_B = { id: 'rw-quest-marker-b', x: 466, z: 606, style: `${RW_PROP.marker}:b` };
23
+ export const RW_MARKER_C = { id: 'rw-quest-marker-c', x: 500, z: 589, style: `${RW_PROP.marker}:c` };
24
+ export const RW_BANNER = { id: 'rw-quest-banner', x: 550, z: 609, style: `${RW_PROP.banner}:camp` };
25
+ export const RED_WASTE_QUEST_PROPS = [RW_MARKER_A, RW_MARKER_B, RW_MARKER_C, RW_BANNER];
26
+ /** The Blender kit model a Red Waste quest prop draws with (CAPITAL_BUILDING_MODELS), or null if not one of them. */
27
+ export function redWastePropModel(prop) {
28
+ if (prop === RW_PROP.marker)
29
+ return 'questclue';
30
+ if (prop === RW_PROP.banner)
31
+ return 'westbanner';
32
+ return null;
33
+ }
34
+ export const RED_WASTE_QUEST_PROP_NAMES = {
35
+ [RW_MARKER_A.style]: 'Raider Road Mark (South)',
36
+ [RW_MARKER_B.style]: 'Raider Road Mark (Ruin Bend)',
37
+ [RW_MARKER_C.style]: 'Raider Road Mark (Chasm Road)',
38
+ [RW_BANNER.style]: 'Raiders\' Banner',
39
+ };
40
+ /** What the quest pays: coins, Explorer XP, a combat XP lump and a few steel bars. A proposal for the balance pass. */
41
+ export const RAIDERS_REWARD = { coins: 1800, explorerXp: 900, choiceXp: 1400, steelBars: 3 };
42
+ /** How many of each to bring. */
43
+ export const RAIDERS_PROWLERS_TO_DEFEAT = 5;
44
+ export const RAIDERS_RAIDERS_TO_DEFEAT = 6;
45
+ export const RAIDERS_SHARDS = 3;
46
+ export const RAIDERS_TOKENS = 3;
47
+ //# sourceMappingURL=redWasteQuest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redWasteQuest.js","sourceRoot":"","sources":["../src/redWasteQuest.ts"],"names":[],"mappings":"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"}
@@ -318,7 +318,7 @@ export type StoryQuestDef = {
318
318
  after: string;
319
319
  rewards: StoryReward;
320
320
  };
321
- export type StoryQuestId = 'fredsLetter' | 'beagleBirthday' | 'wilsonBigCatch' | 'smithsApprentice' | 'spiderHollowEggs' | 'harbourThief' | 'coldFeet' | 'livoniasDiary' | 'charcoalBurner' | 'iceCuttersKey' | 'hopeWreck' | 'firstSteps' | 'trappersLine' | 'gristForTheMill' | 'shearingDay' | 'dryBarrels' | 'freshLinen' | 'troubleOnTheRoad' | 'everyRoadPays' | 'maribelsLog' | 'marigoldsStrongbox' | 'tansysCauldron' | 'poulticesForTheLine' | 'frostbiteSalve' | 'cellsBelow' | 'samsSecretBait' | 'travellersTonic' | 'bountyHuntersBrew' | 'corvinsRecipes' | 'hogWild' | 'fiveArches' | 'theNewGate' | 'hettiesSails' | 'geeseInTheWheat' | 'nyesStrays' | 'wrensHoney' | 'harvestSupper' | 'theLostGoat' | 'theScarecrowsHat' | 'theHatchetHandle' | 'stonesThatWhisper' | 'crowTrouble' | 'tamsinsLostBasket' | 'theLeakingSluice' | 'haresInTheBeans' | 'whatWokeOldGnasher' | 'theMissingMule' | 'theFallenLimb' | 'troubleOnTheSnareLine' | 'oldTusk' | 'theMissingTollMoney' | 'lightTheBeacon' | 'birdsInTheHops' | 'grandfatherGull' | 'lostSupplies' | 'herbalRemedies' | 'fieldShrineMystery' | 'theFirstBeacon' | 'troubleAtCrossing' | 'gatewardenRounds' | 'strongerBridge';
321
+ export type StoryQuestId = 'fredsLetter' | 'beagleBirthday' | 'wilsonBigCatch' | 'smithsApprentice' | 'spiderHollowEggs' | 'harbourThief' | 'coldFeet' | 'livoniasDiary' | 'charcoalBurner' | 'iceCuttersKey' | 'hopeWreck' | 'firstSteps' | 'trappersLine' | 'gristForTheMill' | 'shearingDay' | 'dryBarrels' | 'freshLinen' | 'troubleOnTheRoad' | 'everyRoadPays' | 'maribelsLog' | 'marigoldsStrongbox' | 'tansysCauldron' | 'poulticesForTheLine' | 'frostbiteSalve' | 'cellsBelow' | 'samsSecretBait' | 'travellersTonic' | 'bountyHuntersBrew' | 'corvinsRecipes' | 'hogWild' | 'fiveArches' | 'theNewGate' | 'hettiesSails' | 'geeseInTheWheat' | 'nyesStrays' | 'wrensHoney' | 'harvestSupper' | 'theLostGoat' | 'theScarecrowsHat' | 'theHatchetHandle' | 'stonesThatWhisper' | 'crowTrouble' | 'tamsinsLostBasket' | 'theLeakingSluice' | 'haresInTheBeans' | 'whatWokeOldGnasher' | 'theMissingMule' | 'theFallenLimb' | 'troubleOnTheSnareLine' | 'oldTusk' | 'theMissingTollMoney' | 'lightTheBeacon' | 'birdsInTheHops' | 'grandfatherGull' | 'lostSupplies' | 'herbalRemedies' | 'fieldShrineMystery' | 'theFirstBeacon' | 'troubleAtCrossing' | 'gatewardenRounds' | 'strongerBridge' | 'raidersOfTheRedWaste';
322
322
  export declare const STORY_QUEST_IDS: readonly StoryQuestId[];
323
323
  /** The npc_action id for a story choice. */
324
324
  export declare const STORY_CHOICE_PREFIX = "story:";