@dreadwood-types/types 0.1.320 → 0.1.322
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.
- package/dist/areaGates.d.ts.map +1 -1
- package/dist/areaGates.js +11 -0
- package/dist/areaGates.js.map +1 -1
- package/dist/areaTransitions.d.ts +1 -1
- package/dist/areaTransitions.d.ts.map +1 -1
- package/dist/areaTransitions.js +11 -0
- package/dist/areaTransitions.js.map +1 -1
- package/dist/ashfallCamp.d.ts +238 -0
- package/dist/ashfallCamp.d.ts.map +1 -0
- package/dist/ashfallCamp.js +271 -0
- package/dist/ashfallCamp.js.map +1 -0
- package/dist/ashfallDens.d.ts +109 -0
- package/dist/ashfallDens.d.ts.map +1 -0
- package/dist/ashfallDens.js +165 -0
- package/dist/ashfallDens.js.map +1 -0
- package/dist/ashfallQuestDef.d.ts +35 -0
- package/dist/ashfallQuestDef.d.ts.map +1 -0
- package/dist/ashfallQuestDef.js +240 -0
- package/dist/ashfallQuestDef.js.map +1 -0
- package/dist/attackableNpcs.d.ts.map +1 -1
- package/dist/attackableNpcs.js +4 -0
- package/dist/attackableNpcs.js.map +1 -1
- package/dist/bossSignatures.d.ts +1 -1
- package/dist/bossSignatures.d.ts.map +1 -1
- package/dist/bossSignatures.js +12 -0
- package/dist/bossSignatures.js.map +1 -1
- package/dist/campTraders.d.ts.map +1 -1
- package/dist/campTraders.js +12 -0
- package/dist/campTraders.js.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/expandedContracts.d.ts.map +1 -1
- package/dist/expandedContracts.js +2 -1
- package/dist/expandedContracts.js.map +1 -1
- package/dist/explorerLedger.d.ts +1 -1
- package/dist/explorerLedger.d.ts.map +1 -1
- package/dist/explorerLedger.js +6 -0
- package/dist/explorerLedger.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +3 -0
- package/dist/legacy.d.ts.map +1 -1
- package/dist/legacy.js +3 -0
- package/dist/legacy.js.map +1 -1
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +50 -0
- package/dist/quests.js.map +1 -1
- package/dist/storyQuests.d.ts +1 -1
- package/dist/storyQuests.d.ts.map +1 -1
- package/dist/storyQuests.js +31 -0
- package/dist/storyQuests.js.map +1 -1
- package/dist/tideTunnel.d.ts +207 -0
- package/dist/tideTunnel.d.ts.map +1 -0
- package/dist/tideTunnel.js +198 -0
- package/dist/tideTunnel.js.map +1 -0
- package/dist/tideTunnelQuests.d.ts +46 -0
- package/dist/tideTunnelQuests.d.ts.map +1 -0
- package/dist/tideTunnelQuests.js +164 -0
- package/dist/tideTunnelQuests.js.map +1 -0
- package/package.json +2 -2
|
@@ -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":"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"}
|
|
@@ -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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"}
|