@dreadwood-types/types 0.1.320 → 0.1.321

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 (44) hide show
  1. package/dist/ashfallCamp.d.ts +238 -0
  2. package/dist/ashfallCamp.d.ts.map +1 -0
  3. package/dist/ashfallCamp.js +271 -0
  4. package/dist/ashfallCamp.js.map +1 -0
  5. package/dist/ashfallDens.d.ts +109 -0
  6. package/dist/ashfallDens.d.ts.map +1 -0
  7. package/dist/ashfallDens.js +165 -0
  8. package/dist/ashfallDens.js.map +1 -0
  9. package/dist/ashfallQuestDef.d.ts +35 -0
  10. package/dist/ashfallQuestDef.d.ts.map +1 -0
  11. package/dist/ashfallQuestDef.js +240 -0
  12. package/dist/ashfallQuestDef.js.map +1 -0
  13. package/dist/attackableNpcs.d.ts.map +1 -1
  14. package/dist/attackableNpcs.js +2 -0
  15. package/dist/attackableNpcs.js.map +1 -1
  16. package/dist/bossSignatures.d.ts +1 -1
  17. package/dist/bossSignatures.d.ts.map +1 -1
  18. package/dist/bossSignatures.js +6 -0
  19. package/dist/bossSignatures.js.map +1 -1
  20. package/dist/campTraders.d.ts.map +1 -1
  21. package/dist/campTraders.js +12 -0
  22. package/dist/campTraders.js.map +1 -1
  23. package/dist/constants.d.ts +2 -0
  24. package/dist/constants.d.ts.map +1 -1
  25. package/dist/constants.js.map +1 -1
  26. package/dist/expandedContracts.d.ts.map +1 -1
  27. package/dist/expandedContracts.js +2 -1
  28. package/dist/expandedContracts.js.map +1 -1
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/legacy.d.ts +3 -0
  34. package/dist/legacy.d.ts.map +1 -1
  35. package/dist/legacy.js +3 -0
  36. package/dist/legacy.js.map +1 -1
  37. package/dist/quests.d.ts.map +1 -1
  38. package/dist/quests.js +31 -0
  39. package/dist/quests.js.map +1 -1
  40. package/dist/storyQuests.d.ts +1 -1
  41. package/dist/storyQuests.d.ts.map +1 -1
  42. package/dist/storyQuests.js +17 -0
  43. package/dist/storyQuests.js.map +1 -1
  44. package/package.json +2 -2
@@ -0,0 +1,238 @@
1
+ /**
2
+ * ASHFALL CAMP (T121, 2026-10-15; plan `.cursor/task-plans/2026-10-15-t121-ashfall-camp.md`; backend COVERAGE_1_40.md section 6 slice 7, second wave).
3
+ * The Emberdeep outskirts: a survivors' camp for levels 28-36 in the ash country NORTH of the Emberdeep Ruins, a place with a smith, a cook,
4
+ * a board, gold and silver seams, a vent field you cross on a clock, three creature dens and a mini-boss.
5
+ *
6
+ * THE ENTRANCE (decided 2026-10-15): the NORTH CUT, a five-wide corridor (x 1776-1780) carved through Emberdeep's rock from the ruins' east burn
7
+ * scar north through the inner wall's east end and both rims into the camp's south edge. It starts INSIDE Emberdeep's ground, so the only way in
8
+ * is the West Track gate (areaGates.ts `west-track`: Combat 25 and A Stronger Bridge); no new gate, no back door. The Ash Gate and the Lower
9
+ * Vault (x 1690-1740, z 668-734) are untouched. The whole box is shut in rock like Emberdeep (a rim ASHFALL_RIM tiles deep).
10
+ *
11
+ * THE LAYOUT (box x 1640-1790, z 450-659; open ground x 1647-1783, z 457-652):
12
+ * - the SOUTH YARD (z 597-652): the camp in its east half (smithy, furnace, anvil, workbench, cookhouse, fire, Bounty Board, seams of coal,
13
+ * iron, gold and silver), the Slag Heaps den in its west half;
14
+ * - the VENT GORGE (x 1700-1744, z 526-596): a rock-walled canyon you must cross to go north. Five FISSURES (bands, three rows deep) run across
15
+ * it. They pulse on one shared clock like the Cinder Warden's Magma Sweep: a hiss a turn ahead (the warning), then the eruption. Each fissure has
16
+ * a three-tile LANE, a gap in its band that never erupts (the lanes alternate west and east), so the field is a step-clear puzzle: learn the lanes
17
+ * or time the bands. A vent costs a share of full health and NEVER the last point. The tiles between the bands are SAFE SLABS, four gauge posts
18
+ * stand on them (the vent mapper's quest) and the server keeps a count of the vents a player stepped clear of (the safe-spot counter);
19
+ * - the NORTH BASIN (z 457-525): the Cinder Barrens and Basalt Kennels dens and the Ashmaw's Hollow, the mini-boss.
20
+ *
21
+ * Nothing 41+ is built. Every number is a WORLD tile (x east, z south) and a PLACEHOLDER for the balance pass. The models are the kit's own
22
+ * as stand-ins (backend upgrades rows `ashfall-*`).
23
+ */
24
+ import type { LanternWakeBox, LanternWakePoint } from './lanternWake.js';
25
+ import type { DiscoveryZone } from './landmarks.js';
26
+ export declare const ASHFALL_ID = "ashfall";
27
+ export declare const ASHFALL_NAME = "Ashfall Camp";
28
+ export declare const ASHFALL_BOX: LanternWakeBox;
29
+ /** The rock that closes the box in: this many tiles deep all round. */
30
+ export declare const ASHFALL_RIM = 7;
31
+ export declare const ASHFALL_GROUND: LanternWakeBox;
32
+ /** The North Cut: carved through Emberdeep's rock from its east scar (z 758 is inside its open ground) to the camp's south edge. */
33
+ export declare const ASHFALL_CUT: LanternWakeBox;
34
+ /** The vent gorge: the only open ground between the south yard and the north basin. */
35
+ export declare const ASHFALL_GORGE: LanternWakeBox;
36
+ /** The south yard and the north basin (the open ground either side of the gorge). */
37
+ export declare const ASHFALL_SOUTH_YARD: LanternWakeBox;
38
+ export declare const ASHFALL_NORTH_BASIN: LanternWakeBox;
39
+ /** The camp's ground, in the south yard's east half beside the cut's mouth. */
40
+ export declare const ASHFALL_CAMP_BOX: LanternWakeBox;
41
+ export declare function inBoxOf(b: LanternWakeBox, x: number, z: number, pad?: number): boolean;
42
+ export declare const inAshfallBox: (x: number, z: number, pad?: number) => boolean;
43
+ export declare const inAshfallCut: (x: number, z: number) => boolean;
44
+ export declare const inAshfallGorge: (x: number, z: number) => boolean;
45
+ /** Is this tile open (walkable) ground of the camp, the cut or the box? Everything else in the box is rock. */
46
+ export declare function isAshfallOpen(x: number, z: number): boolean;
47
+ /** Roads inside the ground (world polylines, width in tiles), laid as Path. */
48
+ export declare const ASHFALL_PATHS: ReadonlyArray<{
49
+ id: string;
50
+ w: number;
51
+ pts: readonly LanternWakePoint[];
52
+ }>;
53
+ export type AshVentBand = {
54
+ readonly id: string;
55
+ /** The fissure's centre row; it erupts on this row and the row either side (three rows deep). */
56
+ readonly z: number;
57
+ readonly minX: number;
58
+ readonly maxX: number;
59
+ /** The lane: a gap of three tiles in the band that never erupts. */
60
+ readonly laneMinX: number;
61
+ readonly laneMaxX: number;
62
+ /** When in the cycle this fissure erupts (its start offset, ms). */
63
+ readonly offsetMs: number;
64
+ };
65
+ export declare const ASH_VENT_CYCLE_MS = 9000;
66
+ /** The hiss before an eruption: the warning window (it ends where the eruption begins). */
67
+ export declare const ASH_VENT_WARN_MS = 2400;
68
+ /** Where in a fissure's own cycle its eruption begins, and how long it lasts. */
69
+ export declare const ASH_VENT_ERUPT_AT_MS = 3000;
70
+ export declare const ASH_VENT_ERUPT_MS = 1200;
71
+ /** A fissure erupts on its centre row and this many rows either side. */
72
+ export declare const ASH_VENT_HALF_DEPTH = 1;
73
+ /** A fissure that erupts costs this share of a player's full health (never the last point) at most once per eruption. */
74
+ export declare const ASH_VENT_DAMAGE_SHARE = 0.18;
75
+ /** Standing this many rows (or fewer) beyond an erupting fissure's hit rows, or in its lane, a player has stepped clear of it (the safe-spot counter). */
76
+ export declare const ASH_VENT_NEAR_ROWS = 1;
77
+ export declare const ASH_VENT_BANDS: readonly AshVentBand[];
78
+ export type AshVentPhase = 'rest' | 'warn' | 'erupt';
79
+ /** The phase of fissure `band` at `nowMs` (every player reads the same clock; nothing is stored). */
80
+ export declare function ashVentPhase(band: AshVentBand, nowMs: number): AshVentPhase;
81
+ /** The start of the eruption that is next (or now) for this fissure at `nowMs` (ms, absolute): used to count each eruption once. */
82
+ export declare function ashVentEruptionIndex(band: AshVentBand, nowMs: number): number;
83
+ /** Is this tile in the fissure's hit rows and out of its lane? */
84
+ export declare function inAshVentHit(band: AshVentBand, x: number, z: number): boolean;
85
+ /** The fissure a tile is in the hit rows of (lane or not), or null. */
86
+ export declare function ashVentBandAt(x: number, z: number): AshVentBand | null;
87
+ /** The fissures erupting at `nowMs` that hit this tile. */
88
+ export declare function ashVentsHitting(x: number, z: number, nowMs: number): AshVentBand[];
89
+ export declare const ASH_VENT_WARNING = "The ground hisses and a seam of heat runs across the gorge ahead. Find the lane or wait for the vent to die.";
90
+ export declare const ASH_VENT_HIT_TEXT = "A fissure bursts under your feet and the ash-fire scorches you.";
91
+ export declare const ASH_VENT_CLEAR_TEXT = "You step clear as the fissure erupts.";
92
+ export declare const ASH_VENT_LANE_TEXT = "You walk the lane as the fissure erupts beside you.";
93
+ /** The stand-in lit braziers at both ends of each fissure (draw the clock-read vents until a proper vent prop exists). */
94
+ export declare const ASH_VENT_BRAZIER_MODEL = "evwatchbrazierlit";
95
+ /** One thing laid on the ground: the kit's own kinds and styles, placed by the backend's ground placer. */
96
+ export type AshfallProp = {
97
+ readonly id: string;
98
+ readonly kind: 'dreadmodel' | 'dreadprop' | 'campfire' | 'barrel' | 'bountyboard' | 'furnace' | 'anvil' | 'workbench' | 'stove' | 'signpost';
99
+ readonly style: string;
100
+ readonly x: number;
101
+ readonly z: number;
102
+ readonly scale?: number;
103
+ };
104
+ /** The camp's pieces and working stations. */
105
+ export declare const ASHFALL_CAMP_PIECES: readonly AshfallProp[];
106
+ /** The gorge's lit braziers (stand-ins for the vents' glow), one at each end of every fissure. */
107
+ export declare const ASHFALL_VENT_PIECES: readonly AshfallProp[];
108
+ /** The camp's rock face: six mineral seams (ORE_ROCK_KIND styles) down its east edge. Gold is Mining 30 and silver Mining 33 (mining.ts). */
109
+ export declare const ASHFALL_SEAMS: ReadonlyArray<{
110
+ readonly id: string;
111
+ readonly x: number;
112
+ readonly z: number;
113
+ readonly style: 'coal' | 'iron' | 'gold' | 'silver';
114
+ }>;
115
+ /** The signs (the placard signpost). */
116
+ export declare const ASHFALL_SIGNS: ReadonlyArray<{
117
+ readonly id: string;
118
+ readonly x: number;
119
+ readonly z: number;
120
+ readonly text: string;
121
+ }>;
122
+ export type AshfallFolk = {
123
+ readonly id: string;
124
+ readonly name: string;
125
+ readonly place: string;
126
+ readonly x: number;
127
+ readonly z: number;
128
+ readonly faceX: number;
129
+ readonly faceZ: number;
130
+ readonly leash: number;
131
+ readonly speak: string;
132
+ readonly extras?: ReadonlyArray<{
133
+ readonly id: string;
134
+ readonly label: string;
135
+ readonly say: string;
136
+ }>;
137
+ };
138
+ export declare const ASHFALL_FOLK_NAMES: {
139
+ readonly mapper: "Ventmapper Isolde Pryce";
140
+ readonly smith: "Smith Garrick Tindall";
141
+ readonly survivor: "Marta Linn";
142
+ readonly scout: "Scout Wren Aldous";
143
+ readonly warden: "Hold-Warden Beric Hollin";
144
+ };
145
+ /** The five residents (named residents on the default look, stationary): the camp's cook is in campTraders.ts. */
146
+ export declare const ASHFALL_FOLK: ReadonlyArray<AshfallFolk>;
147
+ export declare function ashfallFolkByName(name: string | null | undefined): AshfallFolk | null;
148
+ /** The camp's cook, which lives in CAMP_TRADERS (campTraders.ts) beside the other camps' cooks. */
149
+ export declare const ASHFALL_COOK: {
150
+ readonly id: "camp-ashfall";
151
+ readonly name: "Odile Marsh";
152
+ readonly x: 1769;
153
+ readonly z: 622;
154
+ readonly faceX: 1771;
155
+ readonly faceZ: 619;
156
+ };
157
+ export declare const AF_PROP: {
158
+ readonly gauge: "afgauge";
159
+ readonly satchel: "afsatchel";
160
+ readonly cairn: "afcairn";
161
+ };
162
+ export type AfQuestProp = {
163
+ readonly id: string;
164
+ readonly x: number;
165
+ readonly z: number;
166
+ readonly style: string;
167
+ };
168
+ /** The mapper's four gauge posts, one on each safe slab between the fissures (south to north). */
169
+ export declare const AF_GAUGE_1: AfQuestProp;
170
+ export declare const AF_GAUGE_2: AfQuestProp;
171
+ export declare const AF_GAUGE_3: AfQuestProp;
172
+ export declare const AF_GAUGE_4: AfQuestProp;
173
+ /** The survivors' three dropped satchels, one inside each of three dens. */
174
+ export declare const AF_SATCHEL_HEAPS: AfQuestProp;
175
+ export declare const AF_SATCHEL_BARRENS: AfQuestProp;
176
+ export declare const AF_SATCHEL_KENNELS: AfQuestProp;
177
+ /** The scout's three cairns, one outside each of three dens. */
178
+ export declare const AF_CAIRN_HEAPS: AfQuestProp;
179
+ export declare const AF_CAIRN_BARRENS: AfQuestProp;
180
+ export declare const AF_CAIRN_KENNELS: AfQuestProp;
181
+ export declare const ASHFALL_QUEST_PROPS: readonly AfQuestProp[];
182
+ export declare const ASHFALL_QUEST_PROP_NAMES: Readonly<Record<string, string>>;
183
+ /** The model an Ashfall quest prop draws with (frontend quest-prop models that already exist), or null if not one of them. */
184
+ export declare function ashfallPropModel(prop: string): string | null;
185
+ /** Standable tiles for teleports, smokes and the helper. */
186
+ export declare const ASHFALL_STANDS: {
187
+ readonly cutMouth: {
188
+ readonly x: 1778;
189
+ readonly z: 648;
190
+ };
191
+ readonly camp: {
192
+ readonly x: 1766;
193
+ readonly z: 636;
194
+ };
195
+ readonly smithy: {
196
+ readonly x: 1751;
197
+ readonly z: 626;
198
+ };
199
+ readonly board: {
200
+ readonly x: 1758;
201
+ readonly z: 636;
202
+ };
203
+ readonly seams: {
204
+ readonly x: 1779;
205
+ readonly z: 622;
206
+ };
207
+ readonly ventSouth: {
208
+ readonly x: 1722;
209
+ readonly z: 600;
210
+ };
211
+ readonly ventNorth: {
212
+ readonly x: 1722;
213
+ readonly z: 522;
214
+ };
215
+ readonly slagHeaps: {
216
+ readonly x: 1692;
217
+ readonly z: 612;
218
+ };
219
+ readonly barrens: {
220
+ readonly x: 1722;
221
+ readonly z: 507;
222
+ };
223
+ readonly kennels: {
224
+ readonly x: 1756;
225
+ readonly z: 504;
226
+ };
227
+ readonly hollow: {
228
+ readonly x: 1680;
229
+ readonly z: 508;
230
+ };
231
+ };
232
+ export declare const ASHFALL_PLACE_TEXT = "Ashfall Camp is a survivors' camp in the ash country north of the Emberdeep Ruins, reached only by the North Cut that runs up from the ruins' east scar behind the West Track gate: a smithy with a furnace, an anvil and a workbench, a cookhouse with a hot pot, a fire, a Bounty Board and six seams of coal, iron, gold and silver in the rock behind it. Five people work it.";
233
+ export declare const ASHFALL_VENT_TEXT = "North of the camp the Vent Gorge is cut by five fissures that erupt one after another every nine seconds. Each fissure has a three-tile lane that never erupts, the lanes alternating west and east, and a hiss comes a turn before each eruption. A vent costs a share of your full health but never the last point.";
234
+ /** The camp's discovery zone and the gorge's. The dens and the Hollow are in ashfallDens.ts; the umbrella zone (the whole box) comes last. */
235
+ export declare const ASHFALL_CAMP_DISCOVERY_ZONE: DiscoveryZone;
236
+ export declare const ASHFALL_VENT_DISCOVERY_ZONE: DiscoveryZone;
237
+ export declare const ASHFALL_UMBRELLA_DISCOVERY_ZONE: DiscoveryZone;
238
+ //# sourceMappingURL=ashfallCamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashfallCamp.d.ts","sourceRoot":"","sources":["../src/ashfallCamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,WAAW,EAAE,cAAiE,CAAC;AAC5F,uEAAuE;AACvE,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,EAAE,cAK5B,CAAC;AACF,oIAAoI;AACpI,eAAO,MAAM,WAAW,EAAE,cAAiE,CAAC;AAC5F,uFAAuF;AACvF,eAAO,MAAM,aAAa,EAAE,cAAiE,CAAC;AAC9F,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,EAAE,cAA+G,CAAC;AACjJ,eAAO,MAAM,mBAAmB,EAAE,cAA+G,CAAC;AAClJ,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,cAAiE,CAAC;AAEjG,wBAAgB,OAAO,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,OAAO,CAEjF;AACD,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,YAAO,KAAG,OAA0C,CAAC;AACxG,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OAAqC,CAAC;AAC1F,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OAAuC,CAAC;AAE9F,+GAA+G;AAC/G,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,CAQpG,CAAC;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AACF,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,yHAAyH;AACzH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,0JAA0J;AAC1J,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAGpC,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAQ9C,CAAC;AAEJ,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACrD,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAK3E;AACD,oIAAoI;AACpI,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7E;AACD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAI7E;AACD,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAGtE;AACD,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAElF;AACD,eAAO,MAAM,gBAAgB,iHAAiH,CAAC;AAC/I,eAAO,MAAM,iBAAiB,oEAAoE,CAAC;AACnG,eAAO,MAAM,mBAAmB,0CAA0C,CAAC;AAC3E,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AACxF,0HAA0H;AAC1H,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAI1D,2GAA2G;AAC3G,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;IAC7I,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAIF,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,EAAE,SAAS,WAAW,EAsBrD,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,mBAAmB,EAAE,SAAS,WAAW,EAGpD,CAAC;AAEH,6IAA6I;AAC7I,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;CAAE,CAO7J,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAI/H,CAAC;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxG,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAIX,kHAAkH;AAClH,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,WAAW,CAyCnD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAErF;AAED,mGAAmG;AACnG,eAAO,MAAM,YAAY;;;;;;;CAAiG,CAAC;AAI3H,eAAO,MAAM,OAAO;;;;CAAwE,CAAC;AAC7F,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElH,kGAAkG;AAClG,eAAO,MAAM,UAAU,EAAE,WAAkF,CAAC;AAC5G,eAAO,MAAM,UAAU,EAAE,WAAkF,CAAC;AAC5G,eAAO,MAAM,UAAU,EAAE,WAAoF,CAAC;AAC9G,eAAO,MAAM,UAAU,EAAE,WAAmF,CAAC;AAC7G,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,EAAE,WAA4F,CAAC;AAC5H,eAAO,MAAM,kBAAkB,EAAE,WAAgG,CAAC;AAClI,eAAO,MAAM,kBAAkB,EAAE,WAAgG,CAAC;AAClI,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,WAAwF,CAAC;AACtH,eAAO,MAAM,gBAAgB,EAAE,WAA4F,CAAC;AAC5H,eAAO,MAAM,gBAAgB,EAAE,WAA4F,CAAC;AAE5H,eAAO,MAAM,mBAAmB,EAAE,SAAS,WAAW,EAIrD,CAAC;AACF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWrE,CAAC;AACF,8HAA8H;AAC9H,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED,4DAA4D;AAC5D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYjB,CAAC;AAEX,eAAO,MAAM,kBAAkB,uXACuV,CAAC;AAEvX,eAAO,MAAM,iBAAiB,0TAC2R,CAAC;AAE1T,8IAA8I;AAC9I,eAAO,MAAM,2BAA2B,EAAE,aAA0G,CAAC;AACrJ,eAAO,MAAM,2BAA2B,EAAE,aAAwG,CAAC;AACnJ,eAAO,MAAM,+BAA+B,EAAE,aAA8F,CAAC"}
@@ -0,0 +1,271 @@
1
+ export const ASHFALL_ID = 'ashfall';
2
+ export const ASHFALL_NAME = 'Ashfall Camp';
3
+ export const ASHFALL_BOX = { minX: 1640, maxX: 1790, minZ: 450, maxZ: 659 };
4
+ /** The rock that closes the box in: this many tiles deep all round. */
5
+ export const ASHFALL_RIM = 7;
6
+ export const ASHFALL_GROUND = {
7
+ minX: ASHFALL_BOX.minX + ASHFALL_RIM,
8
+ maxX: ASHFALL_BOX.maxX - ASHFALL_RIM,
9
+ minZ: ASHFALL_BOX.minZ + ASHFALL_RIM,
10
+ maxZ: ASHFALL_BOX.maxZ - ASHFALL_RIM,
11
+ };
12
+ /** The North Cut: carved through Emberdeep's rock from its east scar (z 758 is inside its open ground) to the camp's south edge. */
13
+ export const ASHFALL_CUT = { minX: 1776, maxX: 1780, minZ: 653, maxZ: 758 };
14
+ /** The vent gorge: the only open ground between the south yard and the north basin. */
15
+ export const ASHFALL_GORGE = { minX: 1700, maxX: 1744, minZ: 526, maxZ: 596 };
16
+ /** The south yard and the north basin (the open ground either side of the gorge). */
17
+ export const ASHFALL_SOUTH_YARD = { minX: ASHFALL_GROUND.minX, maxX: ASHFALL_GROUND.maxX, minZ: 597, maxZ: ASHFALL_GROUND.maxZ };
18
+ export const ASHFALL_NORTH_BASIN = { minX: ASHFALL_GROUND.minX, maxX: ASHFALL_GROUND.maxX, minZ: ASHFALL_GROUND.minZ, maxZ: 525 };
19
+ /** The camp's ground, in the south yard's east half beside the cut's mouth. */
20
+ export const ASHFALL_CAMP_BOX = { minX: 1742, maxX: 1783, minZ: 606, maxZ: 648 };
21
+ export function inBoxOf(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
+ export const inAshfallBox = (x, z, pad = 0) => inBoxOf(ASHFALL_BOX, x, z, pad);
25
+ export const inAshfallCut = (x, z) => inBoxOf(ASHFALL_CUT, x, z);
26
+ export const inAshfallGorge = (x, z) => inBoxOf(ASHFALL_GORGE, x, z);
27
+ /** Is this tile open (walkable) ground of the camp, the cut or the box? Everything else in the box is rock. */
28
+ export function isAshfallOpen(x, z) {
29
+ if (inAshfallCut(x, z))
30
+ return true;
31
+ if (!inBoxOf(ASHFALL_GROUND, x, z))
32
+ return false;
33
+ if (z > ASHFALL_GORGE.maxZ || z < ASHFALL_GORGE.minZ)
34
+ return true;
35
+ return inAshfallGorge(x, z);
36
+ }
37
+ /** Roads inside the ground (world polylines, width in tiles), laid as Path. */
38
+ export const ASHFALL_PATHS = [
39
+ { id: 'cut-road', w: 3, pts: [[1778, 758], [1778, 652], [1778, 640], [1762, 628]] },
40
+ { id: 'camp-road', w: 3, pts: [[1762, 628], [1746, 616], [1730, 604], [1722, 598]] },
41
+ { id: 'vent-spine', w: 2, pts: [[1722, 598], [1722, 526]] },
42
+ { id: 'basin-road', w: 3, pts: [[1722, 526], [1722, 512]] },
43
+ { id: 'hollow-road', w: 2, pts: [[1722, 512], [1698, 504], [1676, 508]] },
44
+ { id: 'kennel-road', w: 2, pts: [[1722, 512], [1746, 502], [1762, 502]] },
45
+ { id: 'heaps-road', w: 2, pts: [[1746, 616], [1716, 614], [1690, 612]] },
46
+ ];
47
+ export const ASH_VENT_CYCLE_MS = 9000;
48
+ /** The hiss before an eruption: the warning window (it ends where the eruption begins). */
49
+ export const ASH_VENT_WARN_MS = 2400;
50
+ /** Where in a fissure's own cycle its eruption begins, and how long it lasts. */
51
+ export const ASH_VENT_ERUPT_AT_MS = 3000;
52
+ export const ASH_VENT_ERUPT_MS = 1200;
53
+ /** A fissure erupts on its centre row and this many rows either side. */
54
+ export const ASH_VENT_HALF_DEPTH = 1;
55
+ /** A fissure that erupts costs this share of a player's full health (never the last point) at most once per eruption. */
56
+ export const ASH_VENT_DAMAGE_SHARE = 0.18;
57
+ /** Standing this many rows (or fewer) beyond an erupting fissure's hit rows, or in its lane, a player has stepped clear of it (the safe-spot counter). */
58
+ export const ASH_VENT_NEAR_ROWS = 1;
59
+ const BAND_Z = [586, 574, 562, 550, 538];
60
+ export const ASH_VENT_BANDS = BAND_Z.map((z, k) => ({
61
+ id: `vent-${k + 1}`,
62
+ z,
63
+ minX: ASHFALL_GORGE.minX,
64
+ maxX: ASHFALL_GORGE.maxX,
65
+ laneMinX: k % 2 === 0 ? 1702 : 1740,
66
+ laneMaxX: k % 2 === 0 ? 1704 : 1742,
67
+ offsetMs: k * 1800,
68
+ }));
69
+ /** The phase of fissure `band` at `nowMs` (every player reads the same clock; nothing is stored). */
70
+ export function ashVentPhase(band, nowMs) {
71
+ const t = (((nowMs - band.offsetMs) % ASH_VENT_CYCLE_MS) + ASH_VENT_CYCLE_MS) % ASH_VENT_CYCLE_MS;
72
+ if (t >= ASH_VENT_ERUPT_AT_MS && t < ASH_VENT_ERUPT_AT_MS + ASH_VENT_ERUPT_MS)
73
+ return 'erupt';
74
+ if (t >= ASH_VENT_ERUPT_AT_MS - ASH_VENT_WARN_MS && t < ASH_VENT_ERUPT_AT_MS)
75
+ return 'warn';
76
+ return 'rest';
77
+ }
78
+ /** The start of the eruption that is next (or now) for this fissure at `nowMs` (ms, absolute): used to count each eruption once. */
79
+ export function ashVentEruptionIndex(band, nowMs) {
80
+ return Math.floor((nowMs - band.offsetMs - ASH_VENT_ERUPT_AT_MS) / ASH_VENT_CYCLE_MS);
81
+ }
82
+ /** Is this tile in the fissure's hit rows and out of its lane? */
83
+ export function inAshVentHit(band, x, z) {
84
+ if (Math.abs(z - band.z) > ASH_VENT_HALF_DEPTH)
85
+ return false;
86
+ if (x < band.minX || x > band.maxX)
87
+ return false;
88
+ return !(x >= band.laneMinX && x <= band.laneMaxX);
89
+ }
90
+ /** The fissure a tile is in the hit rows of (lane or not), or null. */
91
+ export function ashVentBandAt(x, z) {
92
+ for (const b of ASH_VENT_BANDS)
93
+ if (Math.abs(z - b.z) <= ASH_VENT_HALF_DEPTH && x >= b.minX && x <= b.maxX)
94
+ return b;
95
+ return null;
96
+ }
97
+ /** The fissures erupting at `nowMs` that hit this tile. */
98
+ export function ashVentsHitting(x, z, nowMs) {
99
+ return ASH_VENT_BANDS.filter((b) => inAshVentHit(b, x, z) && ashVentPhase(b, nowMs) === 'erupt');
100
+ }
101
+ export const ASH_VENT_WARNING = 'The ground hisses and a seam of heat runs across the gorge ahead. Find the lane or wait for the vent to die.';
102
+ export const ASH_VENT_HIT_TEXT = 'A fissure bursts under your feet and the ash-fire scorches you.';
103
+ export const ASH_VENT_CLEAR_TEXT = 'You step clear as the fissure erupts.';
104
+ export const ASH_VENT_LANE_TEXT = 'You walk the lane as the fissure erupts beside you.';
105
+ /** The stand-in lit braziers at both ends of each fissure (draw the clock-read vents until a proper vent prop exists). */
106
+ export const ASH_VENT_BRAZIER_MODEL = 'evwatchbrazierlit';
107
+ const kit = (id, model, x, z, scale) => ({ id, kind: 'dreadmodel', style: `${model}-s`, x, z, ...(scale ? { scale } : {}) });
108
+ const lamp = (id, x, z) => kit(id, 'townlantern1x1', x, z);
109
+ /** The camp's pieces and working stations. */
110
+ export const ASHFALL_CAMP_PIECES = [
111
+ kit('af-smithy', 'bcsmithy', 1752, 612),
112
+ kit('af-cookhouse', 'towncookhouse5x3', 1771, 612),
113
+ kit('af-quench', 'hbtrough', 1745, 617),
114
+ kit('af-racks', 'toolrack', 1745, 623),
115
+ kit('af-logs', 'birchlogpile', 1745, 629),
116
+ kit('af-crates', 'hbcrates', 1756, 641),
117
+ kit('af-sacks', 'hubsack', 1758, 639),
118
+ kit('af-cratestack', 'evcratestack', 1766, 642),
119
+ kit('af-wagon', 'hbtinkerwagon', 1748, 641),
120
+ kit('af-bench', 'hbbench', 1764, 623),
121
+ { id: 'af-barrel', kind: 'barrel', style: 'barrel', x: 1744, z: 638, scale: 1 },
122
+ lamp('af-lamp-nw', 1743, 608),
123
+ lamp('af-lamp-ne', 1781, 609),
124
+ lamp('af-lamp-se', 1781, 637),
125
+ lamp('af-lamp-sw', 1751, 633),
126
+ { id: 'af-furnace', kind: 'furnace', style: '', x: 1750, z: 621 },
127
+ { id: 'af-anvil', kind: 'anvil', style: '', x: 1753, z: 621 },
128
+ { id: 'af-bench-station', kind: 'workbench', style: 'face0', x: 1757, z: 623 },
129
+ { id: 'af-stove', kind: 'stove', style: '', x: 1771, z: 619 },
130
+ { id: 'af-fire', kind: 'campfire', style: 'beach-pit', x: 1763, z: 631, scale: 1 },
131
+ { id: 'af-board', kind: 'bountyboard', style: 'wall-s', x: 1760, z: 642 },
132
+ ];
133
+ /** The gorge's lit braziers (stand-ins for the vents' glow), one at each end of every fissure. */
134
+ export const ASHFALL_VENT_PIECES = ASH_VENT_BANDS.flatMap((b) => [
135
+ kit(`af-${b.id}-w`, ASH_VENT_BRAZIER_MODEL, b.minX - 1, b.z),
136
+ kit(`af-${b.id}-e`, ASH_VENT_BRAZIER_MODEL, b.maxX + 1, b.z),
137
+ ]);
138
+ /** The camp's rock face: six mineral seams (ORE_ROCK_KIND styles) down its east edge. Gold is Mining 30 and silver Mining 33 (mining.ts). */
139
+ export const ASHFALL_SEAMS = [
140
+ { id: 'af-seam-coal-1', x: 1782, z: 612, style: 'coal' },
141
+ { id: 'af-seam-gold-1', x: 1782, z: 616, style: 'gold' },
142
+ { id: 'af-seam-silver-1', x: 1782, z: 620, style: 'silver' },
143
+ { id: 'af-seam-gold-2', x: 1782, z: 624, style: 'gold' },
144
+ { id: 'af-seam-silver-2', x: 1782, z: 628, style: 'silver' },
145
+ { id: 'af-seam-iron-1', x: 1782, z: 632, style: 'iron' },
146
+ ];
147
+ /** The signs (the placard signpost). */
148
+ export const ASHFALL_SIGNS = [
149
+ { id: 'af-sign-camp', x: 1774, z: 650, text: 'Ashfall Camp. A smith, a hot pot and a Bounty Board for the ash country north of Emberdeep. The vents beyond the camp erupt on a clock: look for the lane. Combat 28+.' },
150
+ { id: 'af-sign-vents', x: 1720, z: 600, text: 'THE VENT GORGE. Five fissures run across the gorge and erupt one after another, every nine seconds. Each has a lane that never erupts. A hiss means it is coming. They scorch hard but never kill.' },
151
+ { id: 'af-sign-north', x: 1724, z: 523, text: 'The North Basin. Cinder Barrens east of the road, the Basalt Kennels beyond, and west the Ashmaw\'s Hollow. Keep out of the Hollow unless you mean to fight.' },
152
+ ];
153
+ export const ASHFALL_FOLK_NAMES = {
154
+ mapper: 'Ventmapper Isolde Pryce',
155
+ smith: 'Smith Garrick Tindall',
156
+ survivor: 'Marta Linn',
157
+ scout: 'Scout Wren Aldous',
158
+ warden: 'Hold-Warden Beric Hollin',
159
+ };
160
+ const CAMP_PLACE = 'Ashfall Camp, north of the Emberdeep Ruins';
161
+ /** The five residents (named residents on the default look, stationary): the camp's cook is in campTraders.ts. */
162
+ export const ASHFALL_FOLK = [
163
+ {
164
+ id: 'af-mapper',
165
+ name: ASHFALL_FOLK_NAMES.mapper,
166
+ place: CAMP_PLACE,
167
+ x: 1746, z: 609, faceX: 1730, faceZ: 598, leash: 1,
168
+ speak: 'Isolde Pryce, ventmapper. The gorge north of here is cut by five fissures and I have drawn them all, on my belly, with a stopwatch. Nine seconds a cycle, five bands, each with a lane. The lanes are my life\'s work and I give them away to anyone who stands still long enough.',
169
+ extras: [{ id: 'lanes', label: 'The lanes', say: 'Every band has a three-tile lane that never erupts. They swap sides: the first is west, the second east, and so on. Walk the lane and the fissure only warms your boots. Cross a band without the lane and you should time it: the hiss comes a turn before.' }],
170
+ },
171
+ {
172
+ id: 'af-smith',
173
+ name: ASHFALL_FOLK_NAMES.smith,
174
+ place: CAMP_PLACE,
175
+ x: 1752, z: 618, faceX: 1752, faceZ: 621, leash: 1,
176
+ speak: 'Garrick Tindall, smith. I lit this furnace off a dead dwarf\'s coals and it has not gone out since. The anvil is free to anyone who brings something to hammer. The rock behind the camp gives coal, iron, gold and silver, if you have the arm for it.',
177
+ extras: [{ id: 'seams', label: 'The seams', say: 'Six seams down the east wall: coal, iron, two gold (Mining 30) and two silver (Mining 33). Smelt where you stand and keep the slag out of the stove.' }],
178
+ },
179
+ {
180
+ id: 'af-survivor',
181
+ name: ASHFALL_FOLK_NAMES.survivor,
182
+ place: CAMP_PLACE,
183
+ x: 1766, z: 628, faceX: 1763, faceZ: 631, leash: 1,
184
+ speak: 'Marta Linn. I was a carter on the Emberdeep run until the ash came down and the road was gone. Nine of us walked out of the north basin. Three more are still out there, and they left satchels they would like back.',
185
+ extras: [{ id: 'basin', label: 'The basin', say: 'Beyond the gorge is the North Basin, three dens and a hollow. We dropped our packs running. I would go back for them myself if my legs were any good.' }],
186
+ },
187
+ {
188
+ id: 'af-scout',
189
+ name: ASHFALL_FOLK_NAMES.scout,
190
+ place: CAMP_PLACE,
191
+ x: 1744, z: 612, faceX: 1752, faceZ: 614, leash: 1,
192
+ speak: 'Wren Aldous, scout. I count what comes out of the basin, and what comes out has been bolder every week. Hounds with orange seams, toads that spit sparks, bats like banked coals. I need to know how far the dens reach.',
193
+ extras: [{ id: 'dens', label: 'The dens', say: 'The Slag Heaps are right here, west of the camp: beetles and crawlers. The Cinder Barrens and the Basalt Kennels are north of the gorge. They hunt only inside their own ground and give up at the leash.' }],
194
+ },
195
+ {
196
+ id: 'af-warden',
197
+ name: ASHFALL_FOLK_NAMES.warden,
198
+ place: CAMP_PLACE,
199
+ x: 1778, z: 641, faceX: 1778, faceZ: 645, leash: 1,
200
+ speak: 'Beric Hollin, Hold-Warden. I was sent from the Dwarf Hold to see who put out the Cinder Warden\'s fire. If it was you, I owe you thanks and a favour. Something else came up out of the ground when the old guardian fell.',
201
+ extras: [{ id: 'cut', label: 'The Cut', say: 'The cut behind me runs south into Emberdeep. Nobody comes up it but those who have already passed the West Track gate, and that is the way I like it.' }],
202
+ },
203
+ ];
204
+ export function ashfallFolkByName(name) {
205
+ return name ? ASHFALL_FOLK.find((p) => p.name === name) ?? null : null;
206
+ }
207
+ /** The camp's cook, which lives in CAMP_TRADERS (campTraders.ts) beside the other camps' cooks. */
208
+ export const ASHFALL_COOK = { id: 'camp-ashfall', name: 'Odile Marsh', x: 1769, z: 622, faceX: 1771, faceZ: 619 };
209
+ // ---- Quest props -----------------------------------------------------------------------------------------------------------------------
210
+ export const AF_PROP = { gauge: 'afgauge', satchel: 'afsatchel', cairn: 'afcairn' };
211
+ /** The mapper's four gauge posts, one on each safe slab between the fissures (south to north). */
212
+ export const AF_GAUGE_1 = { id: 'af-gauge-1', x: 1706, z: 580, style: `${AF_PROP.gauge}:one` };
213
+ export const AF_GAUGE_2 = { id: 'af-gauge-2', x: 1738, z: 568, style: `${AF_PROP.gauge}:two` };
214
+ export const AF_GAUGE_3 = { id: 'af-gauge-3', x: 1706, z: 556, style: `${AF_PROP.gauge}:three` };
215
+ export const AF_GAUGE_4 = { id: 'af-gauge-4', x: 1738, z: 544, style: `${AF_PROP.gauge}:four` };
216
+ /** The survivors' three dropped satchels, one inside each of three dens. */
217
+ export const AF_SATCHEL_HEAPS = { id: 'af-satchel-heaps', x: 1662, z: 606, style: `${AF_PROP.satchel}:heaps` };
218
+ export const AF_SATCHEL_BARRENS = { id: 'af-satchel-barrens', x: 1712, z: 472, style: `${AF_PROP.satchel}:barrens` };
219
+ export const AF_SATCHEL_KENNELS = { id: 'af-satchel-kennels', x: 1760, z: 468, style: `${AF_PROP.satchel}:kennels` };
220
+ /** The scout's three cairns, one outside each of three dens. */
221
+ export const AF_CAIRN_HEAPS = { id: 'af-cairn-heaps', x: 1687, z: 616, style: `${AF_PROP.cairn}:heaps` };
222
+ export const AF_CAIRN_BARRENS = { id: 'af-cairn-barrens', x: 1720, z: 504, style: `${AF_PROP.cairn}:barrens` };
223
+ export const AF_CAIRN_KENNELS = { id: 'af-cairn-kennels', x: 1764, z: 500, style: `${AF_PROP.cairn}:kennels` };
224
+ export const ASHFALL_QUEST_PROPS = [
225
+ AF_GAUGE_1, AF_GAUGE_2, AF_GAUGE_3, AF_GAUGE_4,
226
+ AF_SATCHEL_HEAPS, AF_SATCHEL_BARRENS, AF_SATCHEL_KENNELS,
227
+ AF_CAIRN_HEAPS, AF_CAIRN_BARRENS, AF_CAIRN_KENNELS,
228
+ ];
229
+ export const ASHFALL_QUEST_PROP_NAMES = {
230
+ [AF_GAUGE_1.style]: 'Vent Gauge (first slab)',
231
+ [AF_GAUGE_2.style]: 'Vent Gauge (second slab)',
232
+ [AF_GAUGE_3.style]: 'Vent Gauge (third slab)',
233
+ [AF_GAUGE_4.style]: 'Vent Gauge (fourth slab)',
234
+ [AF_SATCHEL_HEAPS.style]: 'Dropped Satchel (Slag Heaps)',
235
+ [AF_SATCHEL_BARRENS.style]: 'Dropped Satchel (Cinder Barrens)',
236
+ [AF_SATCHEL_KENNELS.style]: 'Dropped Satchel (Basalt Kennels)',
237
+ [AF_CAIRN_HEAPS.style]: "Scout's Cairn (Slag Heaps)",
238
+ [AF_CAIRN_BARRENS.style]: "Scout's Cairn (Cinder Barrens)",
239
+ [AF_CAIRN_KENNELS.style]: "Scout's Cairn (Basalt Kennels)",
240
+ };
241
+ /** The model an Ashfall quest prop draws with (frontend quest-prop models that already exist), or null if not one of them. */
242
+ export function ashfallPropModel(prop) {
243
+ if (prop === AF_PROP.gauge)
244
+ return 'questsalvage';
245
+ if (prop === AF_PROP.satchel)
246
+ return 'questbrokenfence';
247
+ if (prop === AF_PROP.cairn)
248
+ return 'questclue';
249
+ return null;
250
+ }
251
+ /** Standable tiles for teleports, smokes and the helper. */
252
+ export const ASHFALL_STANDS = {
253
+ cutMouth: { x: 1778, z: 648 },
254
+ camp: { x: 1766, z: 636 },
255
+ smithy: { x: 1751, z: 626 },
256
+ board: { x: 1758, z: 636 },
257
+ seams: { x: 1779, z: 622 },
258
+ ventSouth: { x: 1722, z: 600 },
259
+ ventNorth: { x: 1722, z: 522 },
260
+ slagHeaps: { x: 1692, z: 612 },
261
+ barrens: { x: 1722, z: 507 },
262
+ kennels: { x: 1756, z: 504 },
263
+ hollow: { x: 1680, z: 508 },
264
+ };
265
+ export const ASHFALL_PLACE_TEXT = "Ashfall Camp is a survivors' camp in the ash country north of the Emberdeep Ruins, reached only by the North Cut that runs up from the ruins' east scar behind the West Track gate: a smithy with a furnace, an anvil and a workbench, a cookhouse with a hot pot, a fire, a Bounty Board and six seams of coal, iron, gold and silver in the rock behind it. Five people work it.";
266
+ export const ASHFALL_VENT_TEXT = 'North of the camp the Vent Gorge is cut by five fissures that erupt one after another every nine seconds. Each fissure has a three-tile lane that never erupts, the lanes alternating west and east, and a hiss comes a turn before each eruption. A vent costs a share of your full health but never the last point.';
267
+ /** The camp's discovery zone and the gorge's. The dens and the Hollow are in ashfallDens.ts; the umbrella zone (the whole box) comes last. */
268
+ export const ASHFALL_CAMP_DISCOVERY_ZONE = { id: 'ashfall-camp', label: ASHFALL_NAME, coordinateFrame: 'world', ...ASHFALL_CAMP_BOX };
269
+ export const ASHFALL_VENT_DISCOVERY_ZONE = { id: 'ash-vents', label: 'The Vent Gorge', coordinateFrame: 'world', ...ASHFALL_GORGE };
270
+ export const ASHFALL_UMBRELLA_DISCOVERY_ZONE = { id: ASHFALL_ID, label: 'Ashfall', coordinateFrame: 'world', ...ASHFALL_BOX };
271
+ //# sourceMappingURL=ashfallCamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashfallCamp.js","sourceRoot":"","sources":["../src/ashfallCamp.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5F,uEAAuE;AACvE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW;IACpC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW;IACpC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW;IACpC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW;CACrC,CAAC;AACF,oIAAoI;AACpI,MAAM,CAAC,MAAM,WAAW,GAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5F,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC9F,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAmB,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;AACjJ,MAAM,CAAC,MAAM,mBAAmB,GAAmB,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAClJ,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAEjG,MAAM,UAAU,OAAO,CAAC,CAAiB,EAAE,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,CAAC;IACtE,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,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,CAAC,EAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACxG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9F,+GAA+G;AAC/G,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAA+E;IACvG,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;IACpF,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3D,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3D,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;IACzE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;IACzE,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;CACzE,CAAC;AAgBF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,yHAAyH;AACzH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,0JAA0J;AAC1J,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAA2B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAe,EAAE,CAAC,CAAC;IACvF,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;IACnB,CAAC;IACD,IAAI,EAAE,aAAa,CAAC,IAAI;IACxB,IAAI,EAAE,aAAa,CAAC,IAAI;IACxB,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;IACnC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;IACnC,QAAQ,EAAE,CAAC,GAAG,IAAI;CACnB,CAAC,CAAC,CAAC;AAGJ,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,KAAa;IAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,GAAG,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;IAClG,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,GAAG,oBAAoB,GAAG,iBAAiB;QAAE,OAAO,OAAO,CAAC;IAC9F,IAAI,CAAC,IAAI,oBAAoB,GAAG,gBAAgB,IAAI,CAAC,GAAG,oBAAoB;QAAE,OAAO,MAAM,CAAC;IAC5F,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,oIAAoI;AACpI,MAAM,UAAU,oBAAoB,CAAC,IAAiB,EAAE,KAAa;IACnE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,GAAG,iBAAiB,CAAC,CAAC;AACxF,CAAC;AACD,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,CAAS,EAAE,CAAS;IAClE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,mBAAmB;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AACD,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,KAAK,MAAM,CAAC,IAAI,cAAc;QAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC;IACrH,OAAO,IAAI,CAAC;AACd,CAAC;AACD,2DAA2D;AAC3D,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa;IACjE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;AACnG,CAAC;AACD,MAAM,CAAC,MAAM,gBAAgB,GAAG,8GAA8G,CAAC;AAC/I,MAAM,CAAC,MAAM,iBAAiB,GAAG,iEAAiE,CAAC;AACnG,MAAM,CAAC,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,qDAAqD,CAAC;AACxF,0HAA0H;AAC1H,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAa1D,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,CAAS,EAAE,CAAS,EAAE,KAAc,EAAe,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnL,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,CAAS,EAAE,CAAS,EAAe,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhG,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;IACvC,GAAG,CAAC,cAAc,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC;IAClD,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;IACvC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;IACtC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC;IACzC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;IACvC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC;IACrC,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC;IAC/C,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC;IAC3C,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC;IACrC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/E,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC;IAC7B,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC;IAC7B,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC;IAC7B,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC;IAC7B,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IACjE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC7D,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9E,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC7D,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IAClF,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;CAC1E,CAAC;AAEF,kGAAkG;AAClG,MAAM,CAAC,MAAM,mBAAmB,GAA2B,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC;IACtG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH,6IAA6I;AAC7I,MAAM,CAAC,MAAM,aAAa,GAAwI;IAChK,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IACxD,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IACxD,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC5D,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IACxD,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC5D,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;CACzD,CAAC;AAEF,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAA0G;IAClI,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,wKAAwK,EAAE;IACvN,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,oMAAoM,EAAE;IACpP,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,8JAA8J,EAAE;CAC/M,CAAC;AAiBF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,yBAAyB;IACjC,KAAK,EAAE,uBAAuB;IAC9B,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE,mBAAmB;IAC1B,MAAM,EAAE,0BAA0B;CAC1B,CAAC;AAEX,MAAM,UAAU,GAAG,4CAA4C,CAAC;AAEhE,kHAAkH;AAClH,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,kBAAkB,CAAC,MAAM;QAC/B,KAAK,EAAE,UAAU;QACjB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,EAAE,oRAAoR;QAC3R,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,8PAA8P,EAAE,CAAC;KACnT;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,kBAAkB,CAAC,KAAK;QAC9B,KAAK,EAAE,UAAU;QACjB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,EAAE,yPAAyP;QAChQ,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,sJAAsJ,EAAE,CAAC;KAC3M;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,kBAAkB,CAAC,QAAQ;QACjC,KAAK,EAAE,UAAU;QACjB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,EAAE,uNAAuN;QAC9N,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,uJAAuJ,EAAE,CAAC;KAC5M;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,kBAAkB,CAAC,KAAK;QAC9B,KAAK,EAAE,UAAU;QACjB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,EAAE,0NAA0N;QACjO,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,2MAA2M,EAAE,CAAC;KAC9P;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,kBAAkB,CAAC,MAAM;QAC/B,KAAK,EAAE,UAAU;QACjB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,EAAE,4NAA4N;QACnO,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,uJAAuJ,EAAE,CAAC;KACxM;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAW,CAAC;AAE3H,2IAA2I;AAE3I,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAW,CAAC;AAG7F,kGAAkG;AAClG,MAAM,CAAC,MAAM,UAAU,GAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;AAC5G,MAAM,CAAC,MAAM,UAAU,GAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;AAC5G,MAAM,CAAC,MAAM,UAAU,GAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;AAC9G,MAAM,CAAC,MAAM,UAAU,GAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;AAC7G,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAgB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,QAAQ,EAAE,CAAC;AAC5H,MAAM,CAAC,MAAM,kBAAkB,GAAgB,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,UAAU,EAAE,CAAC;AAClI,MAAM,CAAC,MAAM,kBAAkB,GAAgB,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,UAAU,EAAE,CAAC;AAClI,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;AACtH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;AAC5H,MAAM,CAAC,MAAM,gBAAgB,GAAgB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;AAE5H,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9C,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB;IACxD,cAAc,EAAE,gBAAgB,EAAE,gBAAgB;CACnD,CAAC;AACF,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,yBAAyB;IAC7C,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,0BAA0B;IAC9C,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,yBAAyB;IAC7C,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,0BAA0B;IAC9C,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,8BAA8B;IACxD,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,kCAAkC;IAC9D,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,kCAAkC;IAC9D,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,4BAA4B;IACpD,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,gCAAgC;IAC1D,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,gCAAgC;CAC3D,CAAC;AACF,8HAA8H;AAC9H,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC;IAClD,IAAI,IAAI,KAAK,OAAO,CAAC,OAAO;QAAE,OAAO,kBAAkB,CAAC;IACxD,IAAI,IAAI,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC7B,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IACzB,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC3B,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1B,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1B,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9B,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9B,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9B,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5B,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5B,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;CACnB,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAC7B,oXAAoX,CAAC;AAEvX,MAAM,CAAC,MAAM,iBAAiB,GAC5B,uTAAuT,CAAC;AAE1T,8IAA8I;AAC9I,MAAM,CAAC,MAAM,2BAA2B,GAAkB,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;AACrJ,MAAM,CAAC,MAAM,2BAA2B,GAAkB,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AACnJ,MAAM,CAAC,MAAM,+BAA+B,GAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC"}