@dreadwood-types/types 0.1.248 → 0.1.250

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 (42) hide show
  1. package/dist/attackableNpcs.d.ts.map +1 -1
  2. package/dist/attackableNpcs.js +4 -0
  3. package/dist/attackableNpcs.js.map +1 -1
  4. package/dist/chalkshellScarp.d.ts +159 -0
  5. package/dist/chalkshellScarp.d.ts.map +1 -0
  6. package/dist/chalkshellScarp.js +168 -0
  7. package/dist/chalkshellScarp.js.map +1 -0
  8. package/dist/constants.d.ts +2 -0
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js.map +1 -1
  11. package/dist/fairFolk.d.ts +5 -1
  12. package/dist/fairFolk.d.ts.map +1 -1
  13. package/dist/fairFolk.js +19 -0
  14. package/dist/fairFolk.js.map +1 -1
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +4 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/legacy.d.ts +3 -0
  20. package/dist/legacy.d.ts.map +1 -1
  21. package/dist/legacy.js +3 -0
  22. package/dist/legacy.js.map +1 -1
  23. package/dist/quests.d.ts.map +1 -1
  24. package/dist/quests.js +158 -0
  25. package/dist/quests.js.map +1 -1
  26. package/dist/skillQuests.d.ts +27 -0
  27. package/dist/skillQuests.d.ts.map +1 -0
  28. package/dist/skillQuests.js +792 -0
  29. package/dist/skillQuests.js.map +1 -0
  30. package/dist/storyQuests.d.ts +15 -1
  31. package/dist/storyQuests.d.ts.map +1 -1
  32. package/dist/storyQuests.js +28 -0
  33. package/dist/storyQuests.js.map +1 -1
  34. package/dist/windwardChalkshellQuestDef.d.ts +34 -0
  35. package/dist/windwardChalkshellQuestDef.d.ts.map +1 -0
  36. package/dist/windwardChalkshellQuestDef.js +297 -0
  37. package/dist/windwardChalkshellQuestDef.js.map +1 -0
  38. package/dist/windwardSignalField.d.ts +153 -0
  39. package/dist/windwardSignalField.d.ts.map +1 -0
  40. package/dist/windwardSignalField.js +154 -0
  41. package/dist/windwardSignalField.js.map +1 -0
  42. package/package.json +43 -43
@@ -0,0 +1,792 @@
1
+ import { GALLOWMERE_OSRIC_KIND, GALLOWMERE_OSRIC_NAME } from './gallowmereFolk.js';
2
+ import { SERGEANT_MABRY_KIND, SERGEANT_MABRY_NAME } from './highwaymansRidge.js';
3
+ import { RIVERSEND_MASTER_NAME } from './riversendFolk.js';
4
+ import { LANTERN_WAKE_HALE } from './lanternWakeQuests.js';
5
+ import { MARCHES_MARROW_NAME } from './marchesQuests.js';
6
+ import { COPSE_HESTIA_NAME, COPSE_TARN_NAME } from './copseQuests.js';
7
+ import { LANTERN_WAKE_LEDGE_TARGETS } from './lanternWakeLedge.js';
8
+ import { BRINDLECROSS_BOX } from './brindlecross.js';
9
+ import { RIVERSEND_BOX } from './riversendHalt.js';
10
+ import { GALLOWMERE_BOX } from './gallowmere.js';
11
+ import { SEA_GROTTO_BOX } from './gullsLowWater.js';
12
+ import { EMBERDEEP_BOX } from './emberdeepRuins.js';
13
+ import { DWARF_ROAD_BOX } from './dwarfRoad.js';
14
+ import { DWARF_HOLD_BOX } from './dwarfHold.js';
15
+ const RESIDENT = 'resident';
16
+ const BESS = { kind: 'innkeeper', name: 'Bess Harrow' };
17
+ const TOM = { kind: 'angler', name: 'Old Tom' };
18
+ const TANSY = { kind: 'apothecary', name: 'Tansy Blackwood' };
19
+ const TARN = { kind: RESIDENT, name: COPSE_TARN_NAME };
20
+ const HESTIA = { kind: RESIDENT, name: COPSE_HESTIA_NAME };
21
+ const HALDREN = { kind: 'haldren', name: 'Master Haldren' };
22
+ const BRANIK = { kind: 'rvmaster', id: 'rv-master', name: RIVERSEND_MASTER_NAME };
23
+ const HALE = { ...LANTERN_WAKE_HALE };
24
+ const MABRY = { kind: SERGEANT_MABRY_KIND, name: SERGEANT_MABRY_NAME };
25
+ const BOB = { kind: 'bob', name: 'Bob' };
26
+ const SCHOLAR = { kind: 'capitalscholar', name: 'Scholar Aldous' };
27
+ const FENWICK = { kind: 'quartermaster', name: 'Fenwick' };
28
+ const MARROW = { kind: RESIDENT, name: MARCHES_MARROW_NAME };
29
+ const OSRIC = { kind: GALLOWMERE_OSRIC_KIND, name: GALLOWMERE_OSRIC_NAME };
30
+ const centre = (b) => ({
31
+ x: Math.round((b.minX + b.maxX) / 2),
32
+ z: Math.round((b.minZ + b.maxZ) / 2),
33
+ });
34
+ export const SKILL_QUEST_IDS = [
35
+ 'droversSupper',
36
+ 'graylingSupper',
37
+ 'samphireBrew',
38
+ 'alderForTheDrovers',
39
+ 'coalForTheFurnace',
40
+ 'aProperLongsword',
41
+ 'goldInTheStone',
42
+ 'theFarLanterns',
43
+ 'aTruerBow',
44
+ 'provingGround',
45
+ 'bobsLongList',
46
+ 'surveyorsFirstRound',
47
+ 'heartyMeals',
48
+ 'lichenForTheForge',
49
+ 'beechForTheBeacon',
50
+ 'silverForTheHollowed',
51
+ 'theOakBow',
52
+ 'topOfTheYard',
53
+ 'bobsHardList',
54
+ 'surveyorsFarRound',
55
+ ];
56
+ /**
57
+ * Skill x band: the quests that ask for that skill in that band. Quests from before T36 are named too, so the table is the
58
+ * whole picture. A quest "asks" for a skill when it gates on it (requires.skill / skills, or a deliver step's skill) or its
59
+ * steps use it (catch, cook, gather, brew, shoot, or a ledger bout for Strength and Weapon Mastery).
60
+ */
61
+ export const SKILL_QUEST_COVERAGE = {
62
+ strength: { '21-30': ['provingGround', 'gatewardenRounds'], '31-40': ['topOfTheYard', 'clearTheLine'] },
63
+ precision: { '21-30': ['provingGround'], '31-40': ['topOfTheYard'] },
64
+ archery: { '21-30': ['theFarLanterns', 'aTruerBow'], '31-40': ['theOakBow'] },
65
+ fishing: { '21-30': ['graylingSupper', 'wilsonBigCatch'], '31-40': ['heartyMeals', 'floeWatch'] },
66
+ cooking: { '21-30': ['droversSupper'], '31-40': ['heartyMeals'] },
67
+ foraging: { '21-30': ['samphireBrew', 'frostbiteSalve', 'bountyHuntersBrew'], '31-40': ['lichenForTheForge'] },
68
+ woodwork: { '21-30': ['alderForTheDrovers', 'aTruerBow'], '31-40': ['beechForTheBeacon', 'theOakBow', 'breakingTheIronjaw'] },
69
+ mining: { '21-30': ['coalForTheFurnace', 'goldInTheStone'], '31-40': ['silverForTheHollowed'] },
70
+ blacksmithing: { '21-30': ['aProperLongsword', 'goldInTheStone'], '31-40': ['silverForTheHollowed'] },
71
+ potionmaking: { '21-30': ['samphireBrew', 'bountyHuntersBrew'], '31-40': ['lichenForTheForge'] },
72
+ explorer: { '21-30': ['surveyorsFirstRound'], '31-40': ['surveyorsFarRound'] },
73
+ bounty: { '21-30': ['bobsLongList'], '31-40': ['bobsHardList'] },
74
+ };
75
+ const hint = (text) => text;
76
+ export const SKILL_QUESTS = {
77
+ // ================================================================ Levels 21-30
78
+ droversSupper: {
79
+ giver: BESS,
80
+ requires: {
81
+ skill: { skill: 'cooking', level: 22 },
82
+ silent: true,
83
+ refuse: "Hungry drovers don't want a scorched hare. Come back when you can cook one properly (Cooking 22).",
84
+ },
85
+ offer: "Four drovers are lodging tonight and every one of them wants hare, roasted dark, the way the trappers do it. I've the fire but not the hours. Cook me four, and mind they're done through.",
86
+ accept: "Raw hare comes off the snares up the snow road, or Hask sells the odd one. Any fire will do, and you'll want Cooking 22 to get the skin crisp.",
87
+ decline: "Then it's bread and cheese again, and they'll grumble.",
88
+ steps: [
89
+ {
90
+ kind: 'cook',
91
+ dishes: ['cookedhare'],
92
+ qty: 4,
93
+ label: 'Cook four roast hares',
94
+ hint: hint('Raw hare comes off the snares on the snowfields. Cook it at a fire or a range (Cooking 22).'),
95
+ },
96
+ {
97
+ kind: 'deliver',
98
+ npc: BESS,
99
+ items: [{ kinds: ['cookedhare'], qty: 4, label: 'Roast hare' }],
100
+ label: 'Bring Bess four roast hares',
101
+ hint: "Bess Harrow keeps the Heron's Rest on the north road, just outside Calverton's north gate.",
102
+ say: "Dark and crisp. They'll eat in silence, which is the highest praise a drover knows.",
103
+ short: 'Four roast hares, cooked through, not raw.',
104
+ },
105
+ ],
106
+ done: "That's the Rest's reputation saved for a week. Here, for your trouble.",
107
+ after: 'The drovers asked who cooked the hare. I said a stranger. They tipped me double.',
108
+ rewards: { coins: 320, xp: { explorer: 2200, cooking: 1100 } },
109
+ },
110
+ graylingSupper: {
111
+ giver: TOM,
112
+ requires: {
113
+ skill: { skill: 'fishing', level: 25 },
114
+ silent: true,
115
+ refuse: "I've heard of a fish with a sail on its back that runs the Thaw, and I'm too old to chase it. Come back at Fishing 25 and we'll talk.",
116
+ },
117
+ offer: "Forty years on this pond and I've never tasted a grayling. They run the Thaw, up past the Northern Gate, sails up like little banners. Bring me four and I'll cook them on my own fire and tell you every lie I know.",
118
+ accept: "Rod and bait in the river below the snowfields. They're shy: cast, wait, and keep your shadow off the water.",
119
+ decline: "Then I'll make do with rudd, same as always.",
120
+ steps: [
121
+ {
122
+ kind: 'catch',
123
+ fish: ['rawgrayling'],
124
+ qty: 4,
125
+ label: 'Catch four grayling in the Thaw',
126
+ hint: hint('Grayling bite in the river below the snowfields, up past the Northern Gate (Fishing 25).'),
127
+ },
128
+ {
129
+ kind: 'deliver',
130
+ npc: TOM,
131
+ items: [{ kinds: ['rawgrayling'], qty: 4, label: 'Grayling' }],
132
+ label: 'Bring Old Tom four grayling',
133
+ hint: hint("Old Tom keeps his fishing camp on Henson Pond, by the fire."),
134
+ say: "Look at the size of them. Violet fins and all. That's supper and tomorrow's breakfast.",
135
+ short: 'Four grayling from the Thaw, if you please.',
136
+ },
137
+ ],
138
+ done: 'You fish like someone who has stood in cold water. Take this, and the pot is yours any night.',
139
+ after: 'Best pot of the winter. The cat thanks you too.',
140
+ rewards: { coins: 300, xp: { explorer: 2200, fishing: 1100 } },
141
+ },
142
+ samphireBrew: {
143
+ giver: TANSY,
144
+ requires: {
145
+ quest: 'tansysCauldron',
146
+ skills: [
147
+ { skill: 'foraging', level: 24 },
148
+ { skill: 'potionmaking', level: 27 },
149
+ ],
150
+ silent: true,
151
+ refuse: "Samphire wants a forager who knows the tide and a brewer who can steep it (Foraging 24, Potion Making 27, and Tansy's Cauldron done first).",
152
+ },
153
+ offer: "Rock samphire, the fleshy green grows only where the sea reaches, and it brews a mini mining potion I can sell to every quarry crew from here to the Capital. Pick me six, then brew the potion yourself so I can see your hands do it right.",
154
+ accept: "The beaches of the Sundered Coast, at the waterline, or the tide pools at Lantern Wake. Mind the tide. A cauldron anywhere will do for the brewing.",
155
+ decline: "Then the quarrymen will keep their sore backs.",
156
+ steps: [
157
+ {
158
+ kind: 'gather',
159
+ items: ['samphire'],
160
+ qty: 6,
161
+ label: 'Pick six sprigs of rock samphire',
162
+ hint: hint('Rock samphire grows at the waterline on the Sundered Coast beaches and at the Lantern Wake tide pools (Foraging 24).'),
163
+ at: { x: 736, z: 1048, label: 'the Sundered Coast beaches' },
164
+ },
165
+ {
166
+ kind: 'brew',
167
+ potions: ['miniminingpotion'],
168
+ label: 'Brew a Mini Mining Boost Potion',
169
+ hint: hint('Take samphire and a vial of water to any cauldron and brew a Mini Mining Boost Potion (Potion Making 27).'),
170
+ },
171
+ {
172
+ kind: 'talk',
173
+ npc: TANSY,
174
+ label: 'Show Tansy your potion',
175
+ hint: 'Tansy Blackwood runs the potion shop in Calverton.',
176
+ say: "Steady hands and no scorching. That's a proper brew. The quarry crews will have it by the crate.",
177
+ },
178
+ ],
179
+ done: "You've a feel for it. Not many get a mining potion right the first time.",
180
+ after: 'The samphire is already selling itself. Come back when you want a harder brew.',
181
+ rewards: { coins: 380, xp: { explorer: 2400, foraging: 900, potionmaking: 900 } },
182
+ },
183
+ alderForTheDrovers: {
184
+ giver: TARN,
185
+ requires: {
186
+ skill: { skill: 'woodwork', level: 25 },
187
+ silent: true,
188
+ refuse: 'Alder is a close-grained wood and it fights a clumsy axe. Come back at Woodwork 25.',
189
+ },
190
+ offer: "The drovers want alder for their wagon spokes: nothing wears like it. Six good logs, cut clean. I'd do it myself but my back has opinions.",
191
+ accept: "Alder grows by the water, down in the Copse and along the brooks. Cut six and bring them here.",
192
+ decline: 'Then their wheels will shed spokes on the road. Their loss.',
193
+ steps: [
194
+ {
195
+ kind: 'deliver',
196
+ npc: TARN,
197
+ items: [{ kinds: ['alderwood'], qty: 6, label: 'Alder logs' }],
198
+ skill: { skill: 'woodwork', level: 25 },
199
+ label: 'Bring Tarn six alder logs',
200
+ hint: hint('Alder trees grow by the water in the Copse and along the brooks (Woodwork 25). Tarn the Feller works the Copse path.'),
201
+ say: 'Pale and straight. The wheelwright will weep for joy.',
202
+ short: 'Six alder logs, cut by someone with Woodwork 25.',
203
+ },
204
+ ],
205
+ done: "Fair pay for fair timber. Take it.",
206
+ after: 'The spokes are on and the wagons are rolling. Not a splinter.',
207
+ rewards: { coins: 320, xp: { explorer: 2200, woodwork: 1100 } },
208
+ },
209
+ coalForTheFurnace: {
210
+ giver: HALDREN,
211
+ requires: {
212
+ skill: { skill: 'mining', level: 22 },
213
+ silent: true,
214
+ refuse: 'Coal seams are deep and the rock is stubborn. Come back at Mining 22 with an iron pick.',
215
+ },
216
+ offer: "The Main Forge eats coal like a hungry ox. Ten lumps, fresh from the seam, and I'll not have to send the apprentice to the charcoal yard again.",
217
+ accept: 'Coal seams are in the mines and the working faces. An iron pick will do it.',
218
+ decline: 'Then the apprentice goes to the yard, and he complains the whole way.',
219
+ steps: [
220
+ {
221
+ kind: 'deliver',
222
+ npc: HALDREN,
223
+ items: [{ kinds: ['coal'], qty: 10, label: 'Coal' }],
224
+ skill: { skill: 'mining', level: 22 },
225
+ label: 'Bring Master Haldren ten coal',
226
+ hint: hint('Mine coal at a seam (Mining 22, an iron pickaxe). Master Haldren works the Main Forge in the Capital.'),
227
+ say: "Good black coal. It'll hold a heat all night. Now we're cooking.",
228
+ short: 'Ten lumps of coal, mined by someone who can reach the seam (Mining 22).',
229
+ },
230
+ ],
231
+ done: "A forge is only as good as the man who feeds it. Here is something for yours.",
232
+ after: 'The Forge has not been so hot in a month.',
233
+ rewards: { coins: 300, xp: { explorer: 2200, mining: 1100 } },
234
+ },
235
+ aProperLongsword: {
236
+ giver: HALDREN,
237
+ requires: {
238
+ quest: 'coalForTheFurnace',
239
+ skill: { skill: 'blacksmithing', level: 24 },
240
+ silent: true,
241
+ refuse: 'Bring me coal first, then we will talk about steel. A longsword takes Blacksmithing 24 and a steady hand.',
242
+ },
243
+ offer: "A captain wants an iron longsword, proper hand-and-a-half, and he'll not take it from a stranger. Forge it yourself at the anvil and bring it here: I'll put my mark on it if it rings true.",
244
+ accept: 'Iron bars from the furnace, a hammer and tongs, and the anvil. Blacksmithing 24 for the longsword.',
245
+ decline: 'Then the captain waits.',
246
+ steps: [
247
+ {
248
+ kind: 'deliver',
249
+ npc: HALDREN,
250
+ items: [{ kinds: ['ironlongsword'], qty: 1, label: 'Iron Longsword' }],
251
+ skill: { skill: 'blacksmithing', level: 24 },
252
+ label: 'Forge an iron longsword and bring it to Master Haldren',
253
+ hint: hint('Smelt iron bars at a furnace, then forge an iron longsword at an anvil (Blacksmithing 24).'),
254
+ say: 'It rings true. The temper is even and the tang is clean. I would not be ashamed to sign it.',
255
+ short: 'An iron longsword of your own forging (Blacksmithing 24).',
256
+ },
257
+ ],
258
+ done: 'That is a smith who has earned the leather apron. Take your fee.',
259
+ after: 'The captain asked who made the blade. I told him: someone I would hire.',
260
+ rewards: { coins: 400, xp: { explorer: 2400, blacksmithing: 1400 } },
261
+ },
262
+ goldInTheStone: {
263
+ giver: BRANIK,
264
+ requires: {
265
+ quest: 'strongerBridge',
266
+ skills: [
267
+ { skill: 'mining', level: 30 },
268
+ { skill: 'blacksmithing', level: 30 },
269
+ ],
270
+ silent: true,
271
+ refuse: 'The rail wants gold leaf and the gold wants a good miner and a good smith (Mining 30, Blacksmithing 30, after the bridge is mended).',
272
+ },
273
+ offer: "The old bridge is mended and the Halt wants a proper plaque for it: gold on the rail's post, so people remember who built it. Gold ore from the Dwarf Hold's working face, smelted and cast. Do it and your name goes on the plaque too.",
274
+ accept: 'Gold seams lie on the working face in the Dwarf Hold, past the hold halt. An iron pick, Mining 30. Smelt it at a furnace (Blacksmithing 30).',
275
+ decline: 'Then the post stays bare.',
276
+ steps: [
277
+ {
278
+ kind: 'deliver',
279
+ npc: BRANIK,
280
+ items: [{ kinds: ['gold'], qty: 3, label: 'Gold ore' }],
281
+ skill: { skill: 'mining', level: 30 },
282
+ label: 'Bring Branik three gold ore',
283
+ hint: hint('Gold seams are on the Dwarf Hold working face (Mining 30, iron pickaxe). Branik Stonecoil is the Riversend Halt master.'),
284
+ say: 'Heavy and yellow. That is real gold. Now smelt it, if you have the hands.',
285
+ short: 'Three gold ore, from the Dwarf Hold working face (Mining 30).',
286
+ },
287
+ {
288
+ kind: 'deliver',
289
+ npc: BRANIK,
290
+ items: [{ kinds: ['goldbar'], qty: 2, label: 'Gold bar' }],
291
+ skill: { skill: 'blacksmithing', level: 30 },
292
+ label: 'Smelt two gold bars and bring them to Branik',
293
+ hint: hint('Smelt gold ore at a furnace into two gold bars (Blacksmithing 30).'),
294
+ say: 'Two bars. The plaque-maker will weep. The bridge will remember you.',
295
+ short: 'Two gold bars, smelted at a furnace (Blacksmithing 30).',
296
+ },
297
+ ],
298
+ done: 'The bridge stands and the plaque shines. Your name is in the corner, small but gold.',
299
+ after: 'Travellers stop to read the plaque. Some even read your name.',
300
+ rewards: { coins: 600, xp: { explorer: 2600, mining: 1200, blacksmithing: 1200 } },
301
+ },
302
+ theFarLanterns: {
303
+ giver: HALE,
304
+ requires: {
305
+ quest: 'theFirstBeacon',
306
+ skill: { skill: 'archery', level: 20 },
307
+ silent: true,
308
+ refuse: 'Light my first beacon and learn the gallery. The ledge wants a steady draw (Archery 20, after The First Beacon).',
309
+ },
310
+ offer: "The gallery taught you to hit what you can see. The ledge is for what you can barely see: three lanterns out over the water, further each time. Shoot them all and I'll tell the boats you can.",
311
+ accept: "Up the steps to the Beacon Ledge on the knoll's south-east corner. Three lanes, eleven, fourteen and sixteen tiles. Mind the wind.",
312
+ decline: 'The lanterns will keep swinging.',
313
+ steps: [
314
+ {
315
+ kind: 'shoot',
316
+ targets: LANTERN_WAKE_LEDGE_TARGETS.map((t) => t.id),
317
+ qty: 3,
318
+ targetLabel: 'Ledge lantern',
319
+ label: 'Shoot all three far lanterns from the Beacon Ledge',
320
+ hint: hint('Climb to the Beacon Ledge on the knoll above Lantern Wake and shoot the three far lanterns, one lane at a time (Archery 20).'),
321
+ notices: [
322
+ 'The first far lantern shivers on its line. One.',
323
+ 'Your arrow sings out over the water and the second lantern spins. Two.',
324
+ 'The last lantern, sixteen tiles out, rocks and holds. Three, and not a gull in sight.',
325
+ ],
326
+ at: { x: 2157, z: 1019, label: 'the Beacon Ledge at Lantern Wake' },
327
+ },
328
+ {
329
+ kind: 'talk',
330
+ npc: HALE,
331
+ label: 'Tell Beacon Keeper Hale the lanterns are down',
332
+ hint: 'Beacon Keeper Hale stands on the Beacon Gallery deck.',
333
+ say: "All three. I counted. Sixteen tiles of open sea with the wind in your face. You've the eye.",
334
+ },
335
+ ],
336
+ done: 'Not many put an arrow where they meant to at sixteen tiles. Take this.',
337
+ after: 'The far lanterns still swing. They remember you.',
338
+ rewards: { coins: 400, xp: { explorer: 2200, archery: 1300 } },
339
+ },
340
+ aTruerBow: {
341
+ giver: HESTIA,
342
+ requires: {
343
+ skill: { skill: 'archery', level: 25 },
344
+ silent: true,
345
+ refuse: 'A better bow in a clumsy hand is a wasted bow. Come back at Archery 25.',
346
+ },
347
+ offer: "Spruce is for beginners. An ash bow has the draw to carry across a meadow, and the wood to take it for years. Make one at the bench and bring it, and I'll string it for you.",
348
+ accept: 'Ash grows on the high ground and the ridge. Woodwork 30 to shape the bow.',
349
+ decline: "Then you'll keep the spruce, and the stags will keep laughing.",
350
+ steps: [
351
+ {
352
+ kind: 'deliver',
353
+ npc: HESTIA,
354
+ items: [{ kinds: ['ashbow'], qty: 1, label: 'Ash Bow' }],
355
+ skill: { skill: 'woodwork', level: 30 },
356
+ label: 'Make an ash bow and bring it to Hestia',
357
+ hint: hint('Cut ash logs (Woodwork 30) and make an ash bow at a workbench. Hestia Roe hunts in the Copse.'),
358
+ say: "Even grain, good tiller, no twist. That bow will outlast the stags.",
359
+ short: 'An ash bow of your own making (Woodwork 30).',
360
+ },
361
+ ],
362
+ done: "A bowyer who can shoot. Keep the bow, and take this for the string.",
363
+ after: 'I saw a stag at forty paces last night. It saw me and apologised.',
364
+ rewards: { coins: 400, xp: { explorer: 2400, archery: 900, woodwork: 900 } },
365
+ },
366
+ provingGround: {
367
+ giver: MABRY,
368
+ requires: {
369
+ combat: 24,
370
+ skills: [
371
+ { skill: 'strength', level: 22 },
372
+ { skill: 'precision', level: 22 },
373
+ ],
374
+ silent: true,
375
+ refuse: "The Capital's sergeants don't spar with raw recruits. Come back at Combat 24 with Strength 22 and Weapon Mastery 22.",
376
+ },
377
+ offer: "A soldier who has only ever fought wolves is half a soldier. The Capital's Training Yard has drill sergeants who'll test your reading of a man's stance. Beat Sergeant Mott and Sergeant Brack in a bout each, then tell me about it.",
378
+ accept: "The Training Yard is in the Capital's Drill Lane. Ask a sergeant for a bout from his menu; he shows what he'll do next, though Brack may lie. Win a bout against each of them.",
379
+ decline: 'Then you stay a wolf-fighter.',
380
+ steps: [
381
+ {
382
+ kind: 'talk',
383
+ npc: MABRY,
384
+ ledger: {
385
+ marks: ['yard:sergeant-mott', 'yard:sergeant-brack'],
386
+ short: 'Win a bout against Sergeant Mott and one against Sergeant Brack in the Capital Training Yard first, then come to me.',
387
+ },
388
+ label: 'Win a bout against Sergeant Mott and Sergeant Brack, then tell Sergeant Mabry',
389
+ hint: hint("Spar in the Capital's Training Yard, in the Drill Lane: ask Sergeant Mott and Sergeant Brack for a bout (Combat 15 and 24) and win each. Then tell Sergeant Mabry."),
390
+ say: 'Mott and Brack both. Good. Reading a man is worth more than a bigger stick.',
391
+ },
392
+ ],
393
+ done: "You'll do. That's more than most manage in a month. Pick where you want this to count.",
394
+ after: 'Word travels. Brack grumbles about you, which is as near as he comes to praise.',
395
+ rewards: { coins: 450, xp: { explorer: 2200 }, choiceXp: { qty: 1500, skills: ['strength', 'precision'] } },
396
+ },
397
+ bobsLongList: {
398
+ giver: BOB,
399
+ requires: {
400
+ combat: 22,
401
+ quest: 'bountyHuntersBrew',
402
+ silent: true,
403
+ refuse: "My list is for hunters with a real record. Finish the brew for me, and bring Combat 22.",
404
+ },
405
+ offer: "Brew's working. Now the list: cutthroats off the roads and Redcap archers up in the ridge. Twenty heads I can't be bothered to chase myself. Do the work and I'll sign your sheet.",
406
+ accept: "Cutthroats prowl the roads and the shipwrecks; the Redcap archers have the ridge. Each kill counts toward the board.",
407
+ decline: "Then the list gets longer and my patience shorter.",
408
+ steps: [
409
+ {
410
+ kind: 'kill',
411
+ npcKinds: ['cutthroat'],
412
+ qty: 8,
413
+ npcLabel: 'cutthroats',
414
+ label: 'Kill eight cutthroats',
415
+ hint: hint('Cutthroats are bounty targets from Combat 22. Look on the roads and the wrecks.'),
416
+ },
417
+ {
418
+ kind: 'kill',
419
+ npcKinds: ['redcaparcher'],
420
+ qty: 6,
421
+ npcLabel: 'Redcap archers',
422
+ label: 'Kill six Redcap archers',
423
+ hint: hint("Redcap archers hold Highwayman's Ridge."),
424
+ },
425
+ {
426
+ kind: 'talk',
427
+ npc: BOB,
428
+ label: 'Tell Bob the list is done',
429
+ hint: "Bob waits by the Ranger's board.",
430
+ say: "Eight and six. I'd have taken a week. Sign it, hunter.",
431
+ },
432
+ ],
433
+ done: "You've a hunter's stomach. Take your fee and the board's thanks.",
434
+ after: "The list's shorter. The ridge is quieter. Bob doesn't say thank you, but he nods.",
435
+ rewards: { coins: 500, xp: { explorer: 2200 }, choiceXp: { qty: 1200, skills: ['strength', 'archery', 'precision'] } },
436
+ },
437
+ surveyorsFirstRound: {
438
+ giver: SCHOLAR,
439
+ requires: {
440
+ combat: 20,
441
+ silent: true,
442
+ refuse: "A surveyor on the western roads needs to walk them. Come back at Combat 20.",
443
+ },
444
+ offer: "The Royal Archive wants a first round of the new western lands, a surveyor's walk: Brindlecross's crossing, Riversend's bridge, Gallowmere's wall and the Sea Grotto on the Sundered Coast. Walk each one and send word back.",
445
+ accept: "The train to the Western Entrance and onward for the first two. Gallowmere is through the Dreadwoods south gate. The Grotto is off the Sundered Coast. Reach each place.",
446
+ decline: 'The map will stay blank.',
447
+ steps: [
448
+ {
449
+ kind: 'reach',
450
+ area: BRINDLECROSS_BOX,
451
+ at: { ...centre(BRINDLECROSS_BOX), label: 'Brindlecross' },
452
+ label: 'Walk to Brindlecross',
453
+ hint: hint('Brindlecross lies west of Lantern Wake along the Brindle Road (Combat 10 gate).'),
454
+ },
455
+ {
456
+ kind: 'reach',
457
+ area: RIVERSEND_BOX,
458
+ at: { ...centre(RIVERSEND_BOX), label: 'Riversend Halt' },
459
+ label: 'Walk to Riversend Halt',
460
+ hint: hint('Riversend Halt is north of Brindlecross, up the North Road.'),
461
+ },
462
+ {
463
+ kind: 'reach',
464
+ area: GALLOWMERE_BOX,
465
+ at: { ...centre(GALLOWMERE_BOX), label: 'Gallowmere' },
466
+ label: 'Walk to Gallowmere',
467
+ hint: hint('Gallowmere is the palisaded village south-west of the Dreadwoods, beyond the south gate.'),
468
+ },
469
+ {
470
+ kind: 'reach',
471
+ area: SEA_GROTTO_BOX,
472
+ at: { ...centre(SEA_GROTTO_BOX), label: 'the Sea Grotto' },
473
+ label: "Walk to the Sundered Coast's Sea Grotto",
474
+ hint: hint('The Sea Grotto lies in the cliffs of the Sundered Coast; its tide and stones are Keeper Ada\'s.'),
475
+ },
476
+ {
477
+ kind: 'talk',
478
+ npc: SCHOLAR,
479
+ label: 'Report to Scholar Aldous',
480
+ hint: "Scholar Aldous keeps the archives at the Royal Administration in the Capital.",
481
+ say: 'Four fresh corners of the map. The Archive will want to know who walked them.',
482
+ },
483
+ ],
484
+ done: 'The new lands are on the map. Your name is in the margin, small, as is proper.',
485
+ after: 'The map wants the far round next, when you are ready.',
486
+ rewards: { coins: 500, xp: { explorer: 4000 } },
487
+ },
488
+ // ================================================================ Levels 31-40
489
+ heartyMeals: {
490
+ giver: FENWICK,
491
+ requires: {
492
+ skills: [
493
+ { skill: 'fishing', level: 33 },
494
+ { skill: 'cooking', level: 34 },
495
+ ],
496
+ silent: true,
497
+ refuse: "The camps want a real cook with a real catch: Fishing 33 for the Thaw char, Cooking 34 to do it justice.",
498
+ },
499
+ offer: "The garrison and the snow camps are living on porridge and spite. A hot fish dinner would do more for morale than a month of pay. Char from the Thaw, grilled right, six plates. Can you manage it?",
500
+ accept: "Arctic char run under the Thaw Fall. Catch four, cook them at a fire, and bring me six hearty plates (any of char, conger, bass or frost pike will do).",
501
+ decline: 'Then the lads have porridge again.',
502
+ steps: [
503
+ {
504
+ kind: 'catch',
505
+ fish: ['rawchar'],
506
+ qty: 4,
507
+ label: 'Catch four Arctic char under the Thaw Fall',
508
+ hint: hint('Arctic char bite in the Thaw under the fall (Fishing 33).'),
509
+ },
510
+ {
511
+ kind: 'cook',
512
+ dishes: ['cookedchar'],
513
+ qty: 4,
514
+ label: 'Cook four plates of Arctic char',
515
+ hint: hint('Cook the char at a fire or range (Cooking 34).'),
516
+ },
517
+ {
518
+ kind: 'deliver',
519
+ npc: FENWICK,
520
+ items: [{ kinds: ['cookedchar', 'cookedconger', 'cookedbass', 'cookedfrostpike'], qty: 4, label: 'Hearty fish dinner' }],
521
+ label: 'Bring Fenwick four hearty fish dinners',
522
+ hint: 'Fenwick keeps the trading post in the garrison camp north of the Northern Gate.',
523
+ say: "Pink and flaking. The lads will think it's a feast day. Thank you, truly.",
524
+ short: 'Four plates of cooked char, conger, bass or frost pike.',
525
+ },
526
+ ],
527
+ done: 'You fed an army on a Tuesday. That is worth more than coin, but take the coin.',
528
+ after: 'Half the garrison asks when the cook is coming back.',
529
+ rewards: { coins: 650, xp: { explorer: 2600, fishing: 1200, cooking: 1400 } },
530
+ },
531
+ lichenForTheForge: {
532
+ giver: TANSY,
533
+ requires: {
534
+ quest: 'samphireBrew',
535
+ skills: [
536
+ { skill: 'foraging', level: 35 },
537
+ { skill: 'potionmaking', level: 38 },
538
+ ],
539
+ silent: true,
540
+ refuse: "The smith's draught is the hardest brew in the shop: Foraging 35, Potion Making 38, and the samphire brew done first.",
541
+ },
542
+ offer: "Frost lichen grows on the open snow, and with coal it makes the Blacksmithing Potion, the one every forge in the Capital fights over. Pick the lichen, brew it, and I'll stand you a drink for it.",
543
+ accept: "Pick three frost lichen on the snow round Old Hask's cabin. You'll need a lump of coal for the brew too: here, take two.",
544
+ decline: 'The smiths will have to make do with plain sweat.',
545
+ onAccept: [{ kind: 'coal', qty: 2, ifMissing: true }],
546
+ steps: [
547
+ {
548
+ kind: 'gather',
549
+ items: ['frostlichen'],
550
+ qty: 3,
551
+ label: 'Pick three frost lichen on the snow',
552
+ hint: hint("Frost lichen grows on the open snow round Old Hask's cabin on the snowfields (Foraging 35)."),
553
+ },
554
+ {
555
+ kind: 'brew',
556
+ potions: ['blacksmithingpotion'],
557
+ label: 'Brew a Blacksmithing Potion',
558
+ hint: hint('Take frost lichen and a lump of coal to a cauldron and brew the Blacksmithing Potion (Potion Making 38).'),
559
+ },
560
+ {
561
+ kind: 'talk',
562
+ npc: TANSY,
563
+ label: 'Show Tansy the Blacksmithing Potion',
564
+ hint: 'Tansy Blackwood runs the potion shop in Calverton.',
565
+ say: "Clear as glass, hot as a forge. That's the draught. The Capital will buy every bottle.",
566
+ },
567
+ ],
568
+ done: 'There is nothing in the shop I am prouder of. Take this, with my thanks.',
569
+ after: 'The Capital smiths have already asked for a case.',
570
+ rewards: { coins: 800, xp: { explorer: 2800, foraging: 1400, potionmaking: 1600 } },
571
+ },
572
+ beechForTheBeacon: {
573
+ giver: MARROW,
574
+ requires: {
575
+ quest: 'lightTheBeacon',
576
+ skill: { skill: 'woodwork', level: 35 },
577
+ silent: true,
578
+ refuse: 'A winter fire wants hard fuel, and hard fuel wants a hard axe. Come back at Woodwork 35, once the beacon is lit.',
579
+ },
580
+ offer: "The beacon's lit and it's turning cold. Pine burns quick; a winter fire wants beech, dense and slow, the kind that holds until morning. Bring me eight good logs.",
581
+ accept: "Beech grows on the high ground. Cut eight and bring them here. Woodwork 35.",
582
+ decline: 'Then I will keep the pine and wake in the night to feed it.',
583
+ steps: [
584
+ {
585
+ kind: 'deliver',
586
+ npc: MARROW,
587
+ items: [{ kinds: ['beechwood'], qty: 8, label: 'Beech logs' }],
588
+ skill: { skill: 'woodwork', level: 35 },
589
+ label: 'Bring Old Marrow eight beech logs',
590
+ hint: hint('Cut beech trees on the high ground (Woodwork 35). Old Marrow keeps the beacon on the Marches Road.'),
591
+ say: 'Heavy, pale, and tight-grained. Every night until spring, I will thank you.',
592
+ short: 'Eight beech logs, cut by someone with Woodwork 35.',
593
+ },
594
+ ],
595
+ done: 'The beacon will not go out. You have earned a seat at my fire.',
596
+ after: 'The beech holds to dawn. My knees bless you.',
597
+ rewards: { coins: 650, xp: { explorer: 2600, woodwork: 1500 } },
598
+ },
599
+ silverForTheHollowed: {
600
+ giver: OSRIC,
601
+ requires: {
602
+ quest: 'crackedBell',
603
+ skills: [
604
+ { skill: 'mining', level: 33 },
605
+ { skill: 'blacksmithing', level: 34 },
606
+ ],
607
+ silent: true,
608
+ refuse: 'Ordinary steel only slows them. Silver is what the Hollowed fear, and silver wants Mining 33 and Blacksmithing 34, after the bell is mended.',
609
+ },
610
+ offer: "The bell is mended and still the Hollowed come, steel on bone doing nothing. Silver is what they hate. Bring me silver ore, and a silver dagger forged from it, and the wall will have something to hold them with.",
611
+ accept: 'Silver seams are in the deeper mines (Mining 33). Smelt it at a furnace and forge a silver dagger at an anvil (Blacksmithing 34).',
612
+ decline: 'Then the wall holds on prayer and prayer is thin.',
613
+ steps: [
614
+ {
615
+ kind: 'deliver',
616
+ npc: OSRIC,
617
+ items: [{ kinds: ['silver'], qty: 3, label: 'Silver ore' }],
618
+ skill: { skill: 'mining', level: 33 },
619
+ label: 'Bring Warden Osric three silver ore',
620
+ hint: hint('Mine silver ore at a deep seam (Mining 33, iron pickaxe). Warden Osric keeps the gate of Gallowmere.'),
621
+ say: 'Silver. Grey and cold. The Hollowed will know it by the smell.',
622
+ short: 'Three silver ore, mined at a deep seam (Mining 33).',
623
+ },
624
+ {
625
+ kind: 'deliver',
626
+ npc: OSRIC,
627
+ items: [{ kinds: ['silverdagger'], qty: 1, label: 'Silver Dagger' }],
628
+ skill: { skill: 'blacksmithing', level: 34 },
629
+ label: 'Forge a silver dagger and bring it to Warden Osric',
630
+ hint: hint('Smelt silver ore into a silver bar, then forge a silver dagger at an anvil (Blacksmithing 34).'),
631
+ say: "Cold and bright. I'll hang it by the gate where they can see it. They hate a mirror too, you know.",
632
+ short: 'A silver dagger of your own forging (Blacksmithing 34).',
633
+ },
634
+ ],
635
+ done: 'The wall has a sting now. Gallowmere remembers its friends.',
636
+ after: 'Fewer come to the wall these nights. The silver looks at them.',
637
+ rewards: { coins: 800, xp: { explorer: 2800, mining: 1500, blacksmithing: 1600 } },
638
+ },
639
+ theOakBow: {
640
+ giver: HESTIA,
641
+ requires: {
642
+ quest: 'aTruerBow',
643
+ skill: { skill: 'archery', level: 34 },
644
+ silent: true,
645
+ refuse: 'Oak is the king of bows and it needs a steady king to draw it. Come back at Archery 34, after the ash bow.',
646
+ },
647
+ offer: "Oak: the longest reach a bowyer can build. Seven tiles of draw and a pull that tires the best arms. I've not strung one in years. Make it yourself, and let me see if it sings.",
648
+ accept: 'Oak is the hardest of the trees (Woodwork 40). Cut, season and shape it at the bench.',
649
+ decline: "Then the ash will have to do. It's a good bow.",
650
+ steps: [
651
+ {
652
+ kind: 'deliver',
653
+ npc: HESTIA,
654
+ items: [{ kinds: ['oakbow'], qty: 1, label: 'Oak Bow' }],
655
+ skill: { skill: 'woodwork', level: 40 },
656
+ label: 'Make an oak bow and bring it to Hestia',
657
+ hint: hint('Fell oak (Woodwork 40) and make an oak bow at a workbench. Hestia Roe hunts in the Copse.'),
658
+ say: 'Heavy, true, and it hums. Seven tiles of reach. You should be proud.',
659
+ short: 'An oak bow of your own making (Woodwork 40).',
660
+ },
661
+ ],
662
+ done: 'The finest bow I have seen in this Copse, and I have seen a few. It is yours.',
663
+ after: 'The stags see the oak bow from far off, and move on.',
664
+ rewards: { coins: 800, xp: { explorer: 2800, archery: 1800, woodwork: 1200 } },
665
+ },
666
+ topOfTheYard: {
667
+ giver: MABRY,
668
+ requires: {
669
+ quest: 'provingGround',
670
+ combat: 32,
671
+ skills: [
672
+ { skill: 'strength', level: 30 },
673
+ { skill: 'precision', level: 30 },
674
+ ],
675
+ silent: true,
676
+ refuse: 'Vane has not yielded in a month. Come back at Combat 32 with Strength 30 and Weapon Mastery 30, and after the first two bouts.',
677
+ },
678
+ offer: "Mott and Brack are done. Vane is the one that matters: Sergeant Vane lies as often as he tells the truth, and nobody has made him yield in a month. Win a bout against him, and I'll know you've got a hand and a head.",
679
+ accept: "The Capital's Training Yard, the Drill Lane. Sergeant Vane asks Combat 32. His tell is a lie nearly half the time.",
680
+ decline: 'Then the title stays with Vane.',
681
+ steps: [
682
+ {
683
+ kind: 'talk',
684
+ npc: MABRY,
685
+ ledger: {
686
+ marks: ['yard:sergeant-vane'],
687
+ short: 'Win a bout against Sergeant Vane in the Capital Training Yard first, then come to me.',
688
+ },
689
+ label: 'Win a bout against Sergeant Vane, then tell Sergeant Mabry',
690
+ hint: hint("Spar Sergeant Vane in the Capital's Training Yard (Combat 32) and make him yield. Then tell Sergeant Mabry."),
691
+ say: 'Vane yielded? Ha! Somebody should sell tickets. Well fought.',
692
+ },
693
+ ],
694
+ done: "That's the top of the yard. Pick where you want it to count.",
695
+ after: 'Vane has not said a word since. The yard talks about nothing else.',
696
+ rewards: { coins: 900, xp: { explorer: 2600 }, choiceXp: { qty: 2500, skills: ['strength', 'precision'] } },
697
+ },
698
+ bobsHardList: {
699
+ giver: BOB,
700
+ requires: {
701
+ quest: 'bobsLongList',
702
+ combat: 34,
703
+ silent: true,
704
+ refuse: 'The hard list is for hunters who finished the long one, with Combat 34 behind them.',
705
+ },
706
+ offer: "The easy heads are gone. What's left is big and cold: mammoth bulls off the snow road, drowned deckhands out of the wrecks, and a polar bear or two for the pot. The board pays by the head and so do I.",
707
+ accept: 'Mammoths graze east of Hask\'s cabin; drowned deckhands haunt the wrecks; polar bears keep to the Bear Floes. Combat 34 and up, and bring food.',
708
+ decline: 'Then the board stays full.',
709
+ steps: [
710
+ {
711
+ kind: 'kill',
712
+ npcKinds: ['mammoth'],
713
+ qty: 4,
714
+ npcLabel: 'mammoths',
715
+ label: 'Kill four mammoths',
716
+ hint: hint('Mammoths graze on the Mammoth Grounds, east of Old Hask\'s cabin (Combat 34 and up).'),
717
+ },
718
+ {
719
+ kind: 'kill',
720
+ npcKinds: ['drowneddeckhand'],
721
+ qty: 6,
722
+ npcLabel: 'drowned deckhands',
723
+ label: 'Kill six drowned deckhands',
724
+ hint: hint('Drowned deckhands walk the shipwreck shores.'),
725
+ },
726
+ {
727
+ kind: 'kill',
728
+ npcKinds: ['polarbear'],
729
+ qty: 2,
730
+ npcLabel: 'polar bears',
731
+ label: 'Kill two polar bears',
732
+ hint: hint('Polar bears ride the ice floes ashore at the Bear Floes (Combat 36 and up for the hardest).'),
733
+ },
734
+ {
735
+ kind: 'talk',
736
+ npc: BOB,
737
+ label: 'Tell Bob the hard list is done',
738
+ hint: "Bob waits by the Ranger's board.",
739
+ say: "Mammoths, deckhands and bears. That's the hard list. You've earned your sheet.",
740
+ },
741
+ ],
742
+ done: "Few finish that list. Take your fee and the board's respect.",
743
+ after: 'The board has gone quiet. Bob has started whistling.',
744
+ rewards: { coins: 1000, xp: { explorer: 2800 }, choiceXp: { qty: 2400, skills: ['strength', 'archery', 'precision'] } },
745
+ },
746
+ surveyorsFarRound: {
747
+ giver: SCHOLAR,
748
+ requires: {
749
+ quest: 'surveyorsFirstRound',
750
+ combat: 30,
751
+ silent: true,
752
+ refuse: 'The far round goes beyond the first walls. Complete the first round, and come back at Combat 30.',
753
+ },
754
+ offer: "The first round is inked. The far round runs through the red-earth scar at Emberdeep, along the Dwarf Road, and into the Dwarf Hold itself. The Archive wants the walk. Mind the rock.",
755
+ accept: "Emberdeep lies behind the West Track gate; the Dwarf Road runs north of Riversend; the Hold is at the Dwarf Hold halt on the train.",
756
+ decline: 'The far corners stay unmapped.',
757
+ steps: [
758
+ {
759
+ kind: 'reach',
760
+ area: EMBERDEEP_BOX,
761
+ at: { ...centre(EMBERDEEP_BOX), label: 'Emberdeep Ruins' },
762
+ label: 'Walk into the Emberdeep Ruins',
763
+ hint: hint('Emberdeep lies behind the West Track gate and the Ash Gate (Combat 25, the Riversend bridge and the Ember Seals).'),
764
+ },
765
+ {
766
+ kind: 'reach',
767
+ area: DWARF_ROAD_BOX,
768
+ at: { ...centre(DWARF_ROAD_BOX), label: 'the Dwarf Road' },
769
+ label: 'Walk the Dwarf Road',
770
+ hint: hint('The Dwarf Road runs north from Riversend Halt toward the Dwarf Pass.'),
771
+ },
772
+ {
773
+ kind: 'reach',
774
+ area: DWARF_HOLD_BOX,
775
+ at: { ...centre(DWARF_HOLD_BOX), label: 'the Dwarf Hold' },
776
+ label: 'Reach the Dwarf Hold',
777
+ hint: hint('Ride the Western Line to the Dwarf Hold halt. The Great Stair beyond stays sealed.'),
778
+ },
779
+ {
780
+ kind: 'talk',
781
+ npc: SCHOLAR,
782
+ label: 'Report to Scholar Aldous',
783
+ hint: "Scholar Aldous keeps the archives at the Royal Administration in the Capital.",
784
+ say: 'Emberdeep, the Road and the Hold. The Archive will print this one on vellum.',
785
+ },
786
+ ],
787
+ done: 'Three more corners inked. Your margin note will outlast us both.',
788
+ after: 'The Archive asks if there are more places. There always are.',
789
+ rewards: { coins: 1000, xp: { explorer: 6000 } },
790
+ },
791
+ };
792
+ //# sourceMappingURL=skillQuests.js.map