@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,109 @@
1
+ /**
2
+ * ASHFALL'S DENS AND THE ASHMAW (T121, 2026-10-15; ashfallCamp.ts has the camp and the vent gorge). Three dens of EXISTING kinds (Emberdeep's own:
3
+ * ash-crawlers, soot beetles, cinder toads, ember bats, ruin scavengers and basalt hounds), scaled to levels 28-36, sit in the camp's south yard and the
4
+ * north basin in the pattern of the Dwarf Road's dens (dwarfRoadDens.ts, T102): a creature of a den is told apart from the same kind in Emberdeep by its
5
+ * id (`ashd-<site>-<kind>-<n>`), the backend rolls its level, hit, drops, respawn and aggro from THIS file, and it hunts only a player standing INSIDE its
6
+ * own den's box and gives up at its leash. A den needs no new model, name, icon or guide row.
7
+ *
8
+ * The Ashmaw is the basin's mini-boss (level 34-35): a huge ash-grey brute that came up out of the vents when the Cinder Warden fell. Passive until
9
+ * struck. Every fourth blow it is its Ash Belch (bossSignatures.ts `ash-belch`): it rears, draws breath and a ring of scorching ash closes round it a full
10
+ * turn ahead; step out of reach and it misses (the E8 step-clear counter). Drawn as a Basalt Hound at a larger scale until a model of its own exists
11
+ * (upgrades row `ashmaw-model`).
12
+ *
13
+ * Nothing here is 41+. Every number is a PLACEHOLDER for the balance pass. World tiles (x east, z south).
14
+ */
15
+ import type { LanternWakeBox } from './lanternWake.js';
16
+ import type { DiscoveryZone } from './landmarks.js';
17
+ export type AshDenKind = 'ashcrawler' | 'sootbeetle' | 'cindertoad' | 'emberbat' | 'ruinscavenger' | 'basalthound';
18
+ export type AshDenSiteId = 'slag-heaps' | 'cinder-barrens' | 'basalt-kennels';
19
+ export type AshDenSpot = {
20
+ readonly x: number;
21
+ readonly z: number;
22
+ readonly leash: number;
23
+ };
24
+ export type AshDenGroup = {
25
+ readonly kind: AshDenKind;
26
+ readonly level: readonly [number, number];
27
+ readonly maxHit: number;
28
+ readonly healthScale: number;
29
+ readonly aggro: number;
30
+ readonly leashRadius: number;
31
+ readonly notice: string;
32
+ readonly respawnMs: {
33
+ readonly minMs: number;
34
+ readonly maxMs: number;
35
+ };
36
+ readonly pace: {
37
+ readonly speed: number;
38
+ readonly idleChance: number;
39
+ readonly pause: readonly [number, number];
40
+ };
41
+ readonly spots: readonly AshDenSpot[];
42
+ readonly drops: readonly {
43
+ readonly itemKind: string;
44
+ readonly chance: number;
45
+ readonly minQty: number;
46
+ readonly maxQty: number;
47
+ }[];
48
+ };
49
+ export type AshDenSite = {
50
+ readonly id: AshDenSiteId;
51
+ readonly label: string;
52
+ readonly box: LanternWakeBox;
53
+ /** Where the guide and the verify link send a player: open ground on the den's edge nearest the road. */
54
+ readonly stand: {
55
+ readonly x: number;
56
+ readonly z: number;
57
+ };
58
+ readonly blurb: string;
59
+ readonly groups: readonly AshDenGroup[];
60
+ };
61
+ export declare const ASH_DEN_SITES: readonly AshDenSite[];
62
+ export declare const ASH_DEN_SITE_IDS: readonly AshDenSiteId[];
63
+ export declare function inAshDenBox(box: LanternWakeBox, x: number, z: number): boolean;
64
+ /** The den whose box holds this tile, or null. The boxes never overlap (scripts/ashfall-camp-test.mjs). */
65
+ export declare function ashDenSiteAt(x: number, z: number): AshDenSite | null;
66
+ /** A den creature's server id: `ashd-<site>-<kind>-<n>`. */
67
+ export declare const ASH_DEN_ID_PREFIX = "ashd-";
68
+ export declare function ashDenId(site: AshDenSiteId, kind: AshDenKind, n: number): string;
69
+ /** The site and group an id names, or null for any other creature. */
70
+ export declare function parseAshDenId(id: string): {
71
+ site: AshDenSite;
72
+ group: AshDenGroup;
73
+ } | null;
74
+ export declare const ASHMAW_KIND = "ashmaw";
75
+ export declare const ASHMAW_NAME = "Ashmaw";
76
+ export declare const ASHMAW_BOX: LanternWakeBox;
77
+ export declare const ASHMAW: {
78
+ readonly id: "ashd-ashmaw-1";
79
+ readonly x: 1672;
80
+ readonly z: 484;
81
+ readonly leash: 5;
82
+ readonly level: readonly [number, number];
83
+ readonly maxHit: 27;
84
+ /** A mini-boss's hide: much thicker than the level's ordinary health. */
85
+ readonly healthScale: 2.2;
86
+ /** Drawn bigger than a Basalt Hound (the same model, scaled). */
87
+ readonly scale: 2.6;
88
+ readonly note: "A huge ash-grey brute that came up out of the vents when the Cinder Warden fell, hot along its spine. Passive until struck. Every fourth blow it rears, draws breath and a ring of scorching ash closes round it, announced a turn ahead: step clear of the ring and the blow goes wide. Back six to eight minutes after it falls.";
89
+ };
90
+ export declare const ASHMAW_RESPAWN_MS: {
91
+ readonly minMs: 360000;
92
+ readonly maxMs: 480000;
93
+ };
94
+ export declare const ASHMAW_PACE: {
95
+ readonly speed: 0.8;
96
+ readonly idleChance: 0.7;
97
+ readonly pause: readonly [number, number];
98
+ };
99
+ /** Placeholders for the balance pass: coins, steel, ore, and a chance at a silver or gold bar. */
100
+ export declare const ASHMAW_DROPS: readonly {
101
+ itemKind: string;
102
+ chance: number;
103
+ minQty: number;
104
+ maxQty: number;
105
+ }[];
106
+ /** The model the client draws it with until it has one (the Basalt Hound's, at ASHMAW.scale). */
107
+ export declare const ASHMAW_STAND_IN = "basalthound";
108
+ export declare const ASHFALL_DISCOVERY_ZONES: readonly DiscoveryZone[];
109
+ //# sourceMappingURL=ashfallDens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashfallDens.d.ts","sourceRoot":"","sources":["../src/ashfallDens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { ASHFALL_CAMP_DISCOVERY_ZONE, ASHFALL_UMBRELLA_DISCOVERY_ZONE, ASHFALL_VENT_DISCOVERY_ZONE } from './ashfallCamp.js';
2
+ const crawlerDrops = [
3
+ { itemKind: 'coins', chance: 1, minQty: 55, maxQty: 120 },
4
+ { itemKind: 'coal', chance: 0.35, minQty: 1, maxQty: 3 },
5
+ ];
6
+ const beetleDrops = [
7
+ { itemKind: 'coins', chance: 1, minQty: 60, maxQty: 130 },
8
+ { itemKind: 'iron', chance: 0.3, minQty: 1, maxQty: 2 },
9
+ { itemKind: 'ironbar', chance: 0.12, minQty: 1, maxQty: 1 },
10
+ ];
11
+ const toadDrops = [
12
+ { itemKind: 'coins', chance: 1, minQty: 65, maxQty: 140 },
13
+ { itemKind: 'coal', chance: 0.3, minQty: 1, maxQty: 2 },
14
+ ];
15
+ const batDrops = [
16
+ { itemKind: 'coins', chance: 0.8, minQty: 55, maxQty: 120 },
17
+ { itemKind: 'feather', chance: 0.6, minQty: 2, maxQty: 5 },
18
+ ];
19
+ const scavengerDrops = [
20
+ { itemKind: 'coins', chance: 1, minQty: 80, maxQty: 170 },
21
+ { itemKind: 'silver', chance: 0.08, minQty: 1, maxQty: 1 },
22
+ { itemKind: 'gold', chance: 0.05, minQty: 1, maxQty: 1 },
23
+ ];
24
+ const houndDrops = [
25
+ { itemKind: 'coins', chance: 1, minQty: 95, maxQty: 190 },
26
+ { itemKind: 'steelbar', chance: 0.08, minQty: 1, maxQty: 1 },
27
+ { itemKind: 'gold', chance: 0.06, minQty: 1, maxQty: 1 },
28
+ ];
29
+ export const ASH_DEN_SITES = [
30
+ {
31
+ id: 'slag-heaps',
32
+ label: 'The Slag Heaps',
33
+ box: { minX: 1655, maxX: 1684, minZ: 600, maxZ: 634 },
34
+ stand: { x: 1690, z: 612 },
35
+ blurb: "The camp's old slag, heaped in the south yard west of the cookhouse, where the beetles and crawlers have made a nest of the cinders.",
36
+ groups: [
37
+ {
38
+ kind: 'sootbeetle', level: [28, 30], maxHit: 16, healthScale: 1.25, aggro: 5, leashRadius: 12,
39
+ notice: 'A soot beetle clatters out of the slag at you!', respawnMs: { minMs: 80_000, maxMs: 130_000 },
40
+ pace: { speed: 0.9, idleChance: 0.6, pause: [3, 8] },
41
+ spots: [{ x: 1661, z: 606, leash: 4 }, { x: 1668, z: 614, leash: 4 }, { x: 1675, z: 622, leash: 4 }, { x: 1662, z: 626, leash: 4 }],
42
+ drops: beetleDrops,
43
+ },
44
+ {
45
+ kind: 'ashcrawler', level: [28, 30], maxHit: 16, healthScale: 1.3, aggro: 4, leashRadius: 10,
46
+ notice: 'A heap of ash shifts and a crawler lurches at you!', respawnMs: { minMs: 80_000, maxMs: 130_000 },
47
+ pace: { speed: 0.7, idleChance: 0.7, pause: [4, 10] },
48
+ spots: [{ x: 1672, z: 608, leash: 3 }, { x: 1678, z: 628, leash: 3 }, { x: 1660, z: 618, leash: 3 }],
49
+ drops: crawlerDrops,
50
+ },
51
+ ],
52
+ },
53
+ {
54
+ id: 'cinder-barrens',
55
+ label: 'The Cinder Barrens',
56
+ box: { minX: 1700, maxX: 1740, minZ: 466, maxZ: 500 },
57
+ stand: { x: 1722, z: 505 },
58
+ blurb: 'A flat of fused cinders north of the gorge, hot in the cracks, where toads squat by the dry channels and bats roost in the broken rock.',
59
+ groups: [
60
+ {
61
+ kind: 'cindertoad', level: [30, 33], maxHit: 19, healthScale: 1.2, aggro: 5, leashRadius: 12,
62
+ notice: 'A cinder toad spits sparks at you!', respawnMs: { minMs: 85_000, maxMs: 135_000 },
63
+ pace: { speed: 0.8, idleChance: 0.65, pause: [3, 9] },
64
+ spots: [{ x: 1706, z: 472, leash: 4 }, { x: 1718, z: 480, leash: 4 }, { x: 1730, z: 474, leash: 4 }, { x: 1712, z: 492, leash: 4 }],
65
+ drops: toadDrops,
66
+ },
67
+ {
68
+ kind: 'emberbat', level: [31, 34], maxHit: 20, healthScale: 1.1, aggro: 6, leashRadius: 14,
69
+ notice: 'An ember bat drops out of the dark at you!', respawnMs: { minMs: 90_000, maxMs: 140_000 },
70
+ pace: { speed: 1.5, idleChance: 0.45, pause: [2, 6] },
71
+ spots: [{ x: 1724, z: 470, leash: 5 }, { x: 1734, z: 488, leash: 5 }, { x: 1708, z: 486, leash: 5 }],
72
+ drops: batDrops,
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ id: 'basalt-kennels',
78
+ label: 'The Basalt Kennels',
79
+ box: { minX: 1746, maxX: 1778, minZ: 462, maxZ: 496 },
80
+ stand: { x: 1756, z: 502 },
81
+ blurb: 'Black stone pens at the basin\'s north-east corner where the old outpost kept its hounds. The hounds are still there, hard as the stone and orange along the flank, with scavengers picking over what the pens held.',
82
+ groups: [
83
+ {
84
+ kind: 'basalthound', level: [33, 36], maxHit: 24, healthScale: 1.15, aggro: 6, leashRadius: 14,
85
+ notice: 'A basalt hound comes over the pen wall at a run!', respawnMs: { minMs: 100_000, maxMs: 160_000 },
86
+ pace: { speed: 1.5, idleChance: 0.45, pause: [2, 6] },
87
+ spots: [{ x: 1752, z: 468, leash: 5 }, { x: 1764, z: 474, leash: 5 }, { x: 1756, z: 486, leash: 5 }, { x: 1770, z: 488, leash: 5 }],
88
+ drops: houndDrops,
89
+ },
90
+ {
91
+ kind: 'ruinscavenger', level: [31, 34], maxHit: 21, healthScale: 1.1, aggro: 5, leashRadius: 10,
92
+ notice: 'A scavenger looks up from the pens and swings her pick at you!', respawnMs: { minMs: 100_000, maxMs: 150_000 },
93
+ pace: { speed: 1, idleChance: 0.6, pause: [3, 8] },
94
+ spots: [{ x: 1750, z: 478, leash: 3 }, { x: 1772, z: 470, leash: 3 }],
95
+ drops: scavengerDrops,
96
+ },
97
+ ],
98
+ },
99
+ ];
100
+ export const ASH_DEN_SITE_IDS = ASH_DEN_SITES.map((s) => s.id);
101
+ export function inAshDenBox(box, x, z) {
102
+ return x >= box.minX && x <= box.maxX && z >= box.minZ && z <= box.maxZ;
103
+ }
104
+ /** The den whose box holds this tile, or null. The boxes never overlap (scripts/ashfall-camp-test.mjs). */
105
+ export function ashDenSiteAt(x, z) {
106
+ for (const site of ASH_DEN_SITES)
107
+ if (inAshDenBox(site.box, x, z))
108
+ return site;
109
+ return null;
110
+ }
111
+ /** A den creature's server id: `ashd-<site>-<kind>-<n>`. */
112
+ export const ASH_DEN_ID_PREFIX = 'ashd-';
113
+ export function ashDenId(site, kind, n) {
114
+ return `${ASH_DEN_ID_PREFIX}${site}-${kind}-${n}`;
115
+ }
116
+ /** The site and group an id names, or null for any other creature. */
117
+ export function parseAshDenId(id) {
118
+ if (!id.startsWith(ASH_DEN_ID_PREFIX))
119
+ return null;
120
+ for (const site of ASH_DEN_SITES) {
121
+ for (const group of site.groups) {
122
+ if (id.startsWith(`${ASH_DEN_ID_PREFIX}${site.id}-${group.kind}-`))
123
+ return { site, group };
124
+ }
125
+ }
126
+ return null;
127
+ }
128
+ // ---- The Ashmaw (the basin's mini-boss, levels 34-35) --------------------------------------------------------------------------------
129
+ export const ASHMAW_KIND = 'ashmaw';
130
+ export const ASHMAW_NAME = 'Ashmaw';
131
+ export const ASHMAW_BOX = { minX: 1655, maxX: 1692, minZ: 466, maxZ: 502 };
132
+ export const ASHMAW = {
133
+ id: 'ashd-ashmaw-1',
134
+ x: 1672,
135
+ z: 484,
136
+ leash: 5,
137
+ level: [34, 35],
138
+ maxHit: 27,
139
+ /** A mini-boss's hide: much thicker than the level's ordinary health. */
140
+ healthScale: 2.2,
141
+ /** Drawn bigger than a Basalt Hound (the same model, scaled). */
142
+ scale: 2.6,
143
+ note: 'A huge ash-grey brute that came up out of the vents when the Cinder Warden fell, hot along its spine. Passive until struck. Every fourth blow it rears, draws breath and a ring of scorching ash closes round it, announced a turn ahead: step clear of the ring and the blow goes wide. Back six to eight minutes after it falls.',
144
+ };
145
+ export const ASHMAW_RESPAWN_MS = { minMs: 360_000, maxMs: 480_000 };
146
+ export const ASHMAW_PACE = { speed: 0.8, idleChance: 0.7, pause: [4, 10] };
147
+ /** Placeholders for the balance pass: coins, steel, ore, and a chance at a silver or gold bar. */
148
+ export const ASHMAW_DROPS = [
149
+ { itemKind: 'coins', chance: 1, minQty: 420, maxQty: 840 },
150
+ { itemKind: 'steelbar', chance: 1, minQty: 1, maxQty: 2 },
151
+ { itemKind: 'coal', chance: 1, minQty: 3, maxQty: 6 },
152
+ { itemKind: 'silverbar', chance: 0.3, minQty: 1, maxQty: 1 },
153
+ { itemKind: 'goldbar', chance: 0.2, minQty: 1, maxQty: 1 },
154
+ ];
155
+ /** The model the client draws it with until it has one (the Basalt Hound's, at ASHMAW.scale). */
156
+ export const ASHMAW_STAND_IN = 'basalthound';
157
+ // ---- Places (Explorer discovery zones, specific ones ahead of the umbrella) -----------------------------------------------------------
158
+ export const ASHFALL_DISCOVERY_ZONES = [
159
+ ASHFALL_CAMP_DISCOVERY_ZONE,
160
+ ASHFALL_VENT_DISCOVERY_ZONE,
161
+ ...ASH_DEN_SITES.map((s) => ({ id: s.id, label: s.label, coordinateFrame: 'world', ...s.box })),
162
+ { id: 'ashmaw-hollow', label: "The Ashmaw's Hollow", coordinateFrame: 'world', ...ASHMAW_BOX },
163
+ ASHFALL_UMBRELLA_DISCOVERY_ZONE,
164
+ ];
165
+ //# sourceMappingURL=ashfallDens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashfallDens.js","sourceRoot":"","sources":["../src/ashfallDens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Ashfall Camp's five quests (T121, 2026-10-15; ashfallCamp.ts, ashfallDens.ts), levels 28-36, on mechanics the game already has:
3
+ *
4
+ * Charting the Vents (Ventmapper Isolde Pryce, Combat 28): touch the four gauge posts on the safe slabs between the vent gorge's fissures (cross the
5
+ * gorge on its clock: find the lanes or time the bands), put down three ember bats, report.
6
+ * Slag and Silver (Smith Garrick Tindall, Mining 30): deliver ore cut from the camp's own seams (gold and coal, then silver).
7
+ * Lost in the Ash (Marta Linn, Combat 31): touch the three satchels the survivors dropped, one in each of three dens, put down four soot beetles,
8
+ * report.
9
+ * Scouting the Basin (Scout Wren Aldous, Combat 33): raise three cairns outside three dens, thin the basalt hounds, report.
10
+ * The Ashmaw (Hold-Warden Beric Hollin, Combat 35, after The Cinder Warden's quest Cinder and Ash from Emberdeep): put down the Ashmaw, a mini-boss that
11
+ * tells its Ash Belch a full turn ahead. The Warden's fall (Cinder and Ash) is what woke it, so the quest needs that chain done.
12
+ *
13
+ * Kept in their own file and entered in storyQuests.ts STORY_QUESTS. Types only from storyQuests.ts (no runtime import, so there is no cycle).
14
+ * Rewards are placeholders for the balance pass (James, 2026-10-12: balance last).
15
+ */
16
+ import type { StoryQuestDef, StoryNpcRef } from './storyQuests.js';
17
+ export declare const AF_MAPPER: StoryNpcRef;
18
+ export declare const AF_SMITH: StoryNpcRef;
19
+ export declare const AF_SURVIVOR: StoryNpcRef;
20
+ export declare const AF_SCOUT: StoryNpcRef;
21
+ export declare const AF_WARDEN: StoryNpcRef;
22
+ export declare const VENTS_COMBAT_LEVEL = 28;
23
+ export declare const SLAG_MINING_LEVEL = 30;
24
+ export declare const SATCHELS_COMBAT_LEVEL = 31;
25
+ export declare const BASIN_COMBAT_LEVEL = 33;
26
+ export declare const ASHMAW_COMBAT_LEVEL = 35;
27
+ export declare const SLAG_GOLD = 2;
28
+ export declare const SLAG_SILVER = 3;
29
+ export declare const SLAG_COAL = 5;
30
+ export declare const CHARTING_THE_VENTS_QUEST: StoryQuestDef;
31
+ export declare const SLAG_AND_SILVER_QUEST: StoryQuestDef;
32
+ export declare const LOST_IN_THE_ASH_QUEST: StoryQuestDef;
33
+ export declare const SCOUTING_THE_BASIN_QUEST: StoryQuestDef;
34
+ export declare const THE_ASHMAW_QUEST: StoryQuestDef;
35
+ //# sourceMappingURL=ashfallQuestDef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashfallQuestDef.d.ts","sourceRoot":"","sources":["../src/ashfallQuestDef.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQnE,eAAO,MAAM,SAAS,aAAiC,CAAC;AACxD,eAAO,MAAM,QAAQ,aAAgC,CAAC;AACtD,eAAO,MAAM,WAAW,aAAmC,CAAC;AAC5D,eAAO,MAAM,QAAQ,aAAgC,CAAC;AACtD,eAAO,MAAM,SAAS,aAAiC,CAAC;AAExD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,SAAS,IAAI,CAAC;AAI3B,eAAO,MAAM,wBAAwB,EAAE,aAgDtC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAwCnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aA+CnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,aAuDtC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,aAqC9B,CAAC"}
@@ -0,0 +1,240 @@
1
+ import { AF_CAIRN_BARRENS, AF_CAIRN_HEAPS, AF_CAIRN_KENNELS, AF_GAUGE_1, AF_GAUGE_2, AF_GAUGE_3, AF_GAUGE_4, AF_PROP, AF_SATCHEL_BARRENS, AF_SATCHEL_HEAPS, AF_SATCHEL_KENNELS, ASHFALL_FOLK_NAMES, } from './ashfallCamp.js';
2
+ import { ASHMAW_KIND } from './ashfallDens.js';
3
+ const ref = (name) => ({ kind: 'resident', name });
4
+ export const AF_MAPPER = ref(ASHFALL_FOLK_NAMES.mapper);
5
+ export const AF_SMITH = ref(ASHFALL_FOLK_NAMES.smith);
6
+ export const AF_SURVIVOR = ref(ASHFALL_FOLK_NAMES.survivor);
7
+ export const AF_SCOUT = ref(ASHFALL_FOLK_NAMES.scout);
8
+ export const AF_WARDEN = ref(ASHFALL_FOLK_NAMES.warden);
9
+ export const VENTS_COMBAT_LEVEL = 28;
10
+ export const SLAG_MINING_LEVEL = 30;
11
+ export const SATCHELS_COMBAT_LEVEL = 31;
12
+ export const BASIN_COMBAT_LEVEL = 33;
13
+ export const ASHMAW_COMBAT_LEVEL = 35;
14
+ export const SLAG_GOLD = 2;
15
+ export const SLAG_SILVER = 3;
16
+ export const SLAG_COAL = 5;
17
+ const COMBAT_CHOICE = ['strength', 'archery', 'precision'];
18
+ export const CHARTING_THE_VENTS_QUEST = {
19
+ giver: AF_MAPPER,
20
+ requires: {
21
+ combat: VENTS_COMBAT_LEVEL,
22
+ refuse: `The gorge is no place for a beginner and I will not draw you a map to it. Come back at Combat ${VENTS_COMBAT_LEVEL}.`,
23
+ },
24
+ offer: 'The gorge north of the camp is cut by five fissures that erupt on a nine second clock, and my gauges on the slabs between them have been knocked about by the heat. I need each one read and reset, and I cannot do it twice in a day with these knees. Will you walk the gorge and tell me what the gauges say?',
25
+ accept: 'There is a gauge post on each of the four safe slabs between the fissures, the first just north of the first fissure, the last by the fourth. Touch each to read it. Every fissure has a lane, three tiles wide, that never erupts: the first is west, the second east, and so on. A hiss comes a turn before an eruption. It scorches hard but it never kills. The bats in the basin steal the readings, so put three of them down, then come back to me.',
26
+ decline: 'Then the gauges stay wrong and I stay on my knees. I will be here with the stopwatch.',
27
+ steps: [
28
+ {
29
+ kind: 'touch',
30
+ prop: AF_PROP.gauge,
31
+ qty: 4,
32
+ label: 'Read the four vent gauges on the slabs between the fissures',
33
+ hint: 'The Vent Gorge lies north of the camp. A gauge post stands on each safe slab between the five fissures. Walk each fissure\'s lane or time the hiss, then click each gauge.',
34
+ notices: {
35
+ [AF_GAUGE_1.style]: 'The first gauge reads hot and steady. The needle trembles every nine seconds, on the beat of the fissure behind you. You chalk the reading on the post.',
36
+ [AF_GAUGE_2.style]: 'The second gauge is half melted on its bracket, but the needle swings true: a lane to the east, nothing but heat to the west.',
37
+ [AF_GAUGE_3.style]: 'The third gauge shows the cycle lengthening toward the north, the hiss a hair longer. You reset the needle and wipe the dial.',
38
+ [AF_GAUGE_4.style]: 'The last gauge sits by the gorge\'s mouth. It reads the same as the first. Five fissures, nine seconds, one clock. The map holds.',
39
+ },
40
+ },
41
+ {
42
+ kind: 'kill',
43
+ npcKinds: ['emberbat'],
44
+ qty: 3,
45
+ npcLabel: 'Ember Bat',
46
+ label: 'Put down three ember bats',
47
+ hint: 'Ember bats roost in the Cinder Barrens in the North Basin, past the gorge (level 31 to 34). Defeat three.',
48
+ },
49
+ {
50
+ kind: 'talk',
51
+ npc: AF_MAPPER,
52
+ label: 'Tell Ventmapper Isolde Pryce the gauges are read',
53
+ hint: 'Isolde Pryce works at the north edge of Ashfall Camp, by the vent road.',
54
+ say: 'Four readings, one clock and no surprises. You walked a gorge of fire and your eyebrows are the only casualty. Take the fee and my thanks.',
55
+ },
56
+ ],
57
+ done: 'The gauges are read and the map is redrawn. Here is the ventmapper\'s fee, and a share in the redrawn lines.',
58
+ after: 'The lanes are on the new map with your name in the corner. They are still the one thing in the gorge that never changes.',
59
+ rewards: {
60
+ coins: 1300,
61
+ xp: { explorer: 2300 },
62
+ choiceXp: { qty: 2300, skills: COMBAT_CHOICE },
63
+ },
64
+ };
65
+ export const SLAG_AND_SILVER_QUEST = {
66
+ giver: AF_SMITH,
67
+ requires: {
68
+ skill: { skill: 'mining', level: SLAG_MINING_LEVEL },
69
+ refuse: `The seams in the rock behind the camp give gold only to a good arm and an iron pick. Come back at Mining ${SLAG_MINING_LEVEL}.`,
70
+ },
71
+ offer: 'The camp\'s stove-plate cracked in the last cold snap and the cookhouse is cooking on a prayer. I can cast a new one from the seams behind my forge, but I have the furnace and not the hours to dig. Bring me gold for the rim, coal for the fire and silver for the inlay, and I will teach you what a smith does with it.',
72
+ accept: `Bring me ${SLAG_GOLD} gold ore (Mining ${SLAG_MINING_LEVEL}) and ${SLAG_COAL} coal. The seams are in the rock face down the east edge of the camp. You need an iron pickaxe. Then ${SLAG_SILVER} silver ore (Mining 33).`,
73
+ decline: 'Then the stove-plate stays cracked. The cook will not thank either of us.',
74
+ steps: [
75
+ {
76
+ kind: 'deliver',
77
+ npc: AF_SMITH,
78
+ items: [
79
+ { kinds: ['gold'], qty: SLAG_GOLD, label: 'Gold ore' },
80
+ { kinds: ['coal'], qty: SLAG_COAL, label: 'Coal' },
81
+ ],
82
+ label: `Bring Smith Garrick Tindall ${SLAG_GOLD} gold ore and ${SLAG_COAL} coal`,
83
+ hint: 'Gold and coal both come from the seams in the rock face down the east edge of the camp (gold is Mining 30, coal Mining 22, with an iron pickaxe).',
84
+ say: 'Gold, and clean. It sits heavy in the hand and heavier in the furnace. You have an arm on you.',
85
+ short: `${SLAG_GOLD} gold ore (Mining ${SLAG_MINING_LEVEL}) and ${SLAG_COAL} coal from the seams behind the camp, with an iron pickaxe.`,
86
+ },
87
+ {
88
+ kind: 'deliver',
89
+ npc: AF_SMITH,
90
+ items: [{ kinds: ['silver'], qty: SLAG_SILVER, label: 'Silver ore' }],
91
+ label: `Bring Smith Garrick Tindall ${SLAG_SILVER} silver ore`,
92
+ hint: 'There are two silver seams in the rock face, between the gold ones (Mining 33, an iron pickaxe).',
93
+ say: 'Silver, pale as the moon. That makes the inlay. The stove-plate will outlast the camp, which is more than I can say for my back.',
94
+ short: `${SLAG_SILVER} silver ore (Mining 33) from the silver seams behind the camp.`,
95
+ },
96
+ ],
97
+ done: 'The plate is cast and the stove is whole. Here is the smith\'s fee, and the knowledge that your arm built a thing the camp eats off.',
98
+ after: 'The cookhouse runs hot again. The furnace is yours whenever you want it.',
99
+ rewards: {
100
+ coins: 1800,
101
+ xp: { mining: 2800, blacksmithing: 1800, explorer: 1600 },
102
+ },
103
+ };
104
+ export const LOST_IN_THE_ASH_QUEST = {
105
+ giver: AF_SURVIVOR,
106
+ requires: {
107
+ combat: SATCHELS_COMBAT_LEVEL,
108
+ refuse: `The basin eats anyone who goes in soft. Come back at Combat ${SATCHELS_COMBAT_LEVEL}.`,
109
+ },
110
+ offer: 'Nine of us walked out of the basin the night the ash came down. We left everything. My husband\'s letters are in one of those packs, and the others would like their tools back. They lie where we dropped them, one in each of three dens, and I cannot go. Will you fetch them?',
111
+ accept: 'One satchel lies in the Slag Heaps, west of the camp. One lies in the Cinder Barrens and the last in the Basalt Kennels, both north of the gorge. Touch each to take it. The dens only hunt you inside their own ground. Put down four soot beetles as well, they have been at the packs. Then come back to me.',
112
+ decline: 'Then the packs stay where they fell. I will be here by the fire.',
113
+ steps: [
114
+ {
115
+ kind: 'touch',
116
+ prop: AF_PROP.satchel,
117
+ qty: 3,
118
+ label: 'Fetch the three dropped satchels',
119
+ hint: 'One satchel is in the Slag Heaps west of the camp, one in the Cinder Barrens and one in the Basalt Kennels, north of the vent gorge. Click each.',
120
+ notices: {
121
+ [AF_SATCHEL_HEAPS.style]: 'A scorched canvas satchel half buried in cinders. A name is stitched inside: a carter\'s. You shake out the ash and sling it over your shoulder.',
122
+ [AF_SATCHEL_BARRENS.style]: 'This pack was thrown from a height. The strap is cut clean through, the letters inside stained but readable. You pick it up.',
123
+ [AF_SATCHEL_KENNELS.style]: 'The last satchel hangs on a pen gate. Something has chewed the buckle. You free it and back away from the pen.',
124
+ },
125
+ },
126
+ {
127
+ kind: 'kill',
128
+ npcKinds: ['sootbeetle'],
129
+ qty: 4,
130
+ npcLabel: 'Soot Beetle',
131
+ label: 'Put down four soot beetles',
132
+ hint: 'Soot beetles nest in the Slag Heaps west of the camp (level 28 to 30). Defeat four.',
133
+ },
134
+ {
135
+ kind: 'talk',
136
+ npc: AF_SURVIVOR,
137
+ label: 'Bring Marta Linn the satchels',
138
+ hint: 'Marta Linn sits by the fire in Ashfall Camp.',
139
+ say: 'That is his hand on the envelope. I thought it was ash by now. I have no words, so here is what I have: the camp\'s thanks, and a little coin for the walk.',
140
+ },
141
+ ],
142
+ done: 'The packs are home. Here is the camp\'s thanks, and the thanks of nine people with their tools back.',
143
+ after: 'The letters are drying by the fire. I read one a night.',
144
+ rewards: {
145
+ coins: 2100,
146
+ xp: { explorer: 2800 },
147
+ choiceXp: { qty: 2800, skills: COMBAT_CHOICE },
148
+ },
149
+ };
150
+ export const SCOUTING_THE_BASIN_QUEST = {
151
+ giver: AF_SCOUT,
152
+ requires: {
153
+ combat: BASIN_COMBAT_LEVEL,
154
+ refuse: `The basin is no place for a hand who has not been blooded. Come back at Combat ${BASIN_COMBAT_LEVEL}.`,
155
+ },
156
+ offer: 'I count what comes out of the basin, but a scout who never gets near enough has only a guess. I want three cairns raised at the edges of three dens, so the camp can see how far they reach, and the hounds thinned so the road stays open. The dens only hunt you inside their own ground and give up at their leash.',
157
+ accept: 'Raise a cairn outside the Slag Heaps, the Cinder Barrens and the Basalt Kennels, by touching the cairn stones there. Then put down four basalt hounds and three ruin scavengers. They will be in the Kennels, or on the road. Then tell me.',
158
+ decline: 'Then the dens stay a guess. I will be here with my map.',
159
+ steps: [
160
+ {
161
+ kind: 'touch',
162
+ prop: AF_PROP.cairn,
163
+ qty: 3,
164
+ label: 'Raise the scout\'s cairns outside three dens',
165
+ hint: 'One cairn stands outside the Slag Heaps west of the camp; one outside the Cinder Barrens and one outside the Basalt Kennels, both north of the vent gorge. Click each.',
166
+ notices: {
167
+ [AF_CAIRN_HEAPS.style]: 'You stack three flat stones at the edge of the slag. Anything that stirs inside will knock them over, and you will know.',
168
+ [AF_CAIRN_BARRENS.style]: 'The cairn goes up on a cooled crust in sight of the barrens. A toad spits a spark at it and does not seem satisfied.',
169
+ [AF_CAIRN_KENNELS.style]: 'You raise the cairn by the pen wall. Something growls inside, a long way from sleep.',
170
+ },
171
+ },
172
+ {
173
+ kind: 'kill',
174
+ npcKinds: ['basalthound'],
175
+ qty: 4,
176
+ npcLabel: 'Basalt Hound',
177
+ label: 'Thin the basalt hounds',
178
+ hint: 'Basalt hounds guard the Basalt Kennels in the north-east of the basin (level 33 to 36). Defeat four.',
179
+ },
180
+ {
181
+ kind: 'kill',
182
+ npcKinds: ['ruinscavenger'],
183
+ qty: 3,
184
+ npcLabel: 'Ruin Scavenger',
185
+ label: 'Clear three ruin scavengers',
186
+ hint: 'Ruin scavengers pick over the Basalt Kennels\' pens (level 31 to 34). Defeat three.',
187
+ },
188
+ {
189
+ kind: 'talk',
190
+ npc: AF_SCOUT,
191
+ label: 'Tell Scout Wren Aldous the dens are watched',
192
+ hint: 'Wren Aldous stands at the west edge of Ashfall Camp, by the smithy.',
193
+ say: 'Three cairns, four hounds, three scavengers. The map is drawn and the road is a little wider. There is one thing left on my list, and the Hold-Warden will know the name of it.',
194
+ },
195
+ ],
196
+ done: 'The dens are watched and the basin is a little safer. Here is your scout\'s share.',
197
+ after: 'The cairns are all still standing. Anything that stirs in the dens will knock them over.',
198
+ rewards: {
199
+ coins: 2600,
200
+ xp: { explorer: 3600 },
201
+ choiceXp: { qty: 3200, skills: COMBAT_CHOICE },
202
+ },
203
+ };
204
+ export const THE_ASHMAW_QUEST = {
205
+ giver: AF_WARDEN,
206
+ requires: {
207
+ quest: 'cinderAndAsh',
208
+ combat: ASHMAW_COMBAT_LEVEL,
209
+ refuse: `I was sent to find who put out the Cinder Warden's fire. If that was not you, I have nothing to say. Finish Cinder and Ash for Ilsa Cray in the Emberdeep Ruins first, and come back at Combat ${ASHMAW_COMBAT_LEVEL}.`,
210
+ },
211
+ offer: 'When the Cinder Warden fell, the fire it kept went into the ground, and something came up the vents after it. The scouts call it the Ashmaw. It lairs in the hollow in the north-west of the basin and it has driven off half the survivors. The Warden\'s seal is on your hand. The camp\'s hold is in your debt, and I am to ask you for one more favour.',
212
+ accept: 'The Ashmaw lies in its Hollow, in the north-west of the North Basin, past the Cinder Barrens. It is passive until struck. Every fourth blow it rears and draws breath and a ring of scorching ash closes round it, a full turn ahead: step clear of the ring and the blow goes wide. Eat before it comes. Then tell me.',
213
+ decline: 'Then I will keep the cut, and the Hollow will keep its tenant. I will be here.',
214
+ steps: [
215
+ {
216
+ kind: 'kill',
217
+ npcKinds: [ASHMAW_KIND],
218
+ qty: 1,
219
+ npcLabel: 'The Ashmaw',
220
+ label: 'Put down the Ashmaw',
221
+ hint: 'The Ashmaw (level 34 to 35) lies in its Hollow in the north-west of the North Basin. A ring of scorching ash warns you before its Ash Belch: step clear of it.',
222
+ },
223
+ {
224
+ kind: 'talk',
225
+ npc: AF_WARDEN,
226
+ label: 'Tell Hold-Warden Beric Hollin the Ashmaw is dead',
227
+ hint: 'Beric Hollin stands at the mouth of the North Cut, at the south edge of Ashfall Camp.',
228
+ say: 'Dead, and the ground quiet under me for the first time since the Warden fell. I will write it to the Hold tonight. Take the camp\'s thanks, and the steel it cost the dwarves to make.',
229
+ },
230
+ ],
231
+ done: 'The basin is quiet and the cut is safe. Here is the Hold\'s thanks, and the steel it cost to make.',
232
+ after: 'The Hollow is quiet. I still watch the vents, out of habit.',
233
+ rewards: {
234
+ coins: 3400,
235
+ items: [{ kind: 'steelbar', qty: 2 }],
236
+ xp: { explorer: 4200 },
237
+ choiceXp: { qty: 4200, skills: COMBAT_CHOICE },
238
+ },
239
+ };
240
+ //# sourceMappingURL=ashfallQuestDef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashfallQuestDef.js","sourceRoot":"","sources":["../src/ashfallQuestDef.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"attackableNpcs.d.ts","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,OAAO,CA6OpD,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"attackableNpcs.d.ts","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,OAAO,CA+OpD,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -207,6 +207,8 @@ export const ATTACKABLE_NPC_KINDS = new Set([
207
207
  'darkkeeper',
208
208
  // The Dwarf Road's Rail-Eater (dwarfRoadDens.ts, T102).
209
209
  'raileater',
210
+ // Ashfall Camp's Ashmaw (ashfallDens.ts, T121).
211
+ 'ashmaw',
210
212
  'bellringer',
211
213
  // The Gravewatch (gravewatch.ts, T72): the Tomb Warden, the Crypt Grounds' lair mini-boss.
212
214
  'skeletonwarden',
@@ -1 +1 @@
1
- {"version":3,"file":"attackableNpcs.js","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attackableNpcs.js","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"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"}