@dreadwood-types/types 0.1.277 → 0.1.278
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/capitalQuests.d.ts +157 -0
- package/dist/capitalQuests.d.ts.map +1 -0
- package/dist/capitalQuests.js +777 -0
- package/dist/capitalQuests.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +15 -0
- package/dist/quests.js.map +1 -1
- package/dist/storyQuests.d.ts +2 -1
- package/dist/storyQuests.d.ts.map +1 -1
- package/dist/storyQuests.js +4 -0
- package/dist/storyQuests.js.map +1 -1
- package/package.json +43 -43
|
@@ -0,0 +1,777 @@
|
|
|
1
|
+
import { CAPITAL_NPC_SPOTS, CAPITAL_STATIONS } from './capital.js';
|
|
2
|
+
import { HARBOUR_MOLE_HEAD } from './harbour.js';
|
|
3
|
+
import { OLD_MERRICK_NAME } from './gullsMap.js';
|
|
4
|
+
const RESIDENT = 'resident';
|
|
5
|
+
function spot(id) {
|
|
6
|
+
const s = CAPITAL_NPC_SPOTS.find((row) => row.id === id);
|
|
7
|
+
if (!s)
|
|
8
|
+
throw new Error(`capitalQuests: no NPC spot ${id}`);
|
|
9
|
+
return { x: s.x, z: s.z };
|
|
10
|
+
}
|
|
11
|
+
function station(id) {
|
|
12
|
+
const s = CAPITAL_STATIONS.find((row) => row.id === id);
|
|
13
|
+
if (!s)
|
|
14
|
+
throw new Error(`capitalQuests: no station ${id}`);
|
|
15
|
+
return { x: s.x, z: s.z };
|
|
16
|
+
}
|
|
17
|
+
function folk(key, name, role, at, face, speak) {
|
|
18
|
+
return { key, name, role, x: at.x, z: at.z, faceX: face.x, faceZ: face.z, speak };
|
|
19
|
+
}
|
|
20
|
+
const ROYAL_CLERK_AT = spot('royal-clerk');
|
|
21
|
+
const GATE_CAPTAIN_AT = spot('gate-captain');
|
|
22
|
+
const COOK_AT = spot('cook');
|
|
23
|
+
const GROCER_AT = spot('produce-keeper');
|
|
24
|
+
const FISHMONGER_AT = spot('fish-keeper');
|
|
25
|
+
const PEDLAR_AT = spot('pedlar');
|
|
26
|
+
/** The Guild Hall's own clerk spot (652,120) is a one-tile pocket behind the counter; the Chief Scribe stands on the open floor in front of it. */
|
|
27
|
+
const SCRIBE_AT = { x: spot('guild-clerk').x - 2, z: spot('guild-clerk').z + 3 };
|
|
28
|
+
const SHED_ANVIL = station('anvil-shed');
|
|
29
|
+
/** The Harbour Clerk's tile on the quay north of the Harbour Road (a standable quay tile, checked by the backend smoke). */
|
|
30
|
+
export const HARBOUR_CLERK_AT = { x: 815, z: 150 };
|
|
31
|
+
/** The Tourney Marshal's tile in the Training Yard, north of the four sergeants' lane (their row is z 208). */
|
|
32
|
+
export const TOURNEY_MARSHAL_AT = { x: 604, z: 203 };
|
|
33
|
+
export const CAPITAL_FOLK_NAMES = {
|
|
34
|
+
clerk: 'Royal Clerk Edmund Thorne',
|
|
35
|
+
captain: 'Gate Captain Wynn Aldern',
|
|
36
|
+
harbour: 'Harbour Clerk Tamsin Rell',
|
|
37
|
+
forge: 'Forge Master Dorran Vale',
|
|
38
|
+
cook: 'Master Cook Hob Garrick',
|
|
39
|
+
grocer: 'Greengrocer Bea Holloway',
|
|
40
|
+
fishmonger: 'Fishmonger Nan Brisk',
|
|
41
|
+
pedlar: 'Pedlar Joss Tinker',
|
|
42
|
+
scribe: 'Chief Scribe Isolde Marr',
|
|
43
|
+
marshal: 'Tourney Marshal Cade Brightwater',
|
|
44
|
+
};
|
|
45
|
+
export const CAPITAL_QUEST_FOLK = [
|
|
46
|
+
folk('clerk', CAPITAL_FOLK_NAMES.clerk, 'folk', ROYAL_CLERK_AT, { x: ROYAL_CLERK_AT.x - 4, z: ROYAL_CLERK_AT.z }, "Edmund Thorne, Royal Clerk. Every letter in the kingdom comes through this office in the end, and every one of them wants answering. If you have legs and a clear conscience, I have errands."),
|
|
47
|
+
folk('captain', CAPITAL_FOLK_NAMES.captain, 'sergeant', GATE_CAPTAIN_AT, { x: GATE_CAPTAIN_AT.x - 6, z: GATE_CAPTAIN_AT.z - 20 }, "Captain Aldern, the Great Gate. Everyone who comes in from the west comes past me. Keep your blades sheathed in the streets and we will get on."),
|
|
48
|
+
folk('harbour', CAPITAL_FOLK_NAMES.harbour, 'docker', HARBOUR_CLERK_AT, { x: 836, z: 160 }, "Tamsin Rell, harbour clerk. Every hull, every crate and every hand that comes ashore at the King's Harbour goes in my book. If it is not in the book, it did not happen."),
|
|
49
|
+
folk('forge', CAPITAL_FOLK_NAMES.forge, 'smith', { x: SHED_ANVIL.x + 1, z: SHED_ANVIL.z }, SHED_ANVIL, "Dorran Vale, Forge Master of the Forge and Artisan Quarter. Bring your own bars and the anvils are free, but if you want to learn something, bring me metal worth the fire."),
|
|
50
|
+
folk('cook', CAPITAL_FOLK_NAMES.cook, 'folk', COOK_AT, { x: COOK_AT.x, z: COOK_AT.z - 3 }, "Hob Garrick, master cook of the Westgate cookhouse. Every pot in this ward answers to me, and the Market Square's judges owe me a favour or three."),
|
|
51
|
+
folk('grocer', CAPITAL_FOLK_NAMES.grocer, 'folk', GROCER_AT, { x: GROCER_AT.x, z: GROCER_AT.z + 3 }, "Bea Holloway, greengrocer. Fresh bread, flour and roots, and a very long memory for anyone who sells me a loaf that is more crust than crumb."),
|
|
52
|
+
folk('fishmonger', CAPITAL_FOLK_NAMES.fishmonger, 'folk', FISHMONGER_AT, { x: FISHMONGER_AT.x, z: FISHMONGER_AT.z + 3 }, "Nan Brisk, fishmonger. I have been gutting fish since before the Great Gate had a roof, and I can tell a fish done right with my eyes shut."),
|
|
53
|
+
folk('pedlar', CAPITAL_FOLK_NAMES.pedlar, 'folk', PEDLAR_AT, { x: PEDLAR_AT.x - 3, z: PEDLAR_AT.z }, "Joss Tinker, pedlar. Pins, string, ribbon and rumours, in that order of price. If you want to know what the city is saying, ask me."),
|
|
54
|
+
folk('scribe', CAPITAL_FOLK_NAMES.scribe, 'folk', SCRIBE_AT, { x: SCRIBE_AT.x, z: SCRIBE_AT.z - 3 }, "Isolde Marr, Chief Scribe of the Archive. I keep the Explorer's Ledger copy of the kingdom: who went where, who won what, and what it cost. I will not write down a lie, only a deed."),
|
|
55
|
+
folk('marshal', CAPITAL_FOLK_NAMES.marshal, 'sergeant', TOURNEY_MARSHAL_AT, { x: TOURNEY_MARSHAL_AT.x, z: TOURNEY_MARSHAL_AT.z + 5 }, "Cade Brightwater, Tourney Marshal. The King's Tourney runs in the Training Yard whenever a recruit has the nerve: four sergeants, four bouts, and a purse for whoever puts them all on their backs."),
|
|
56
|
+
];
|
|
57
|
+
const refOf = (key) => {
|
|
58
|
+
const f = CAPITAL_QUEST_FOLK.find((row) => row.key === key);
|
|
59
|
+
if (!f)
|
|
60
|
+
throw new Error(`capitalQuests: no folk ${key}`);
|
|
61
|
+
return { kind: RESIDENT, name: f.name };
|
|
62
|
+
};
|
|
63
|
+
const CLERK = refOf('clerk');
|
|
64
|
+
const CAPTAIN = refOf('captain');
|
|
65
|
+
const HARBOUR = refOf('harbour');
|
|
66
|
+
const FORGE = refOf('forge');
|
|
67
|
+
const COOK = refOf('cook');
|
|
68
|
+
const GROCER = refOf('grocer');
|
|
69
|
+
const FISHMONGER = refOf('fishmonger');
|
|
70
|
+
const PEDLAR = refOf('pedlar');
|
|
71
|
+
const SCRIBE = refOf('scribe');
|
|
72
|
+
const MARSHAL = refOf('marshal');
|
|
73
|
+
const SCHOLAR = { kind: 'capitalscholar', name: 'Scholar Aldous' };
|
|
74
|
+
const BRANSON = { kind: 'branson', name: 'Branson' };
|
|
75
|
+
const MERRICK = { kind: RESIDENT, name: OLD_MERRICK_NAME };
|
|
76
|
+
export function capitalQuestFolkByName(name) {
|
|
77
|
+
return name ? CAPITAL_QUEST_FOLK.find((f) => f.name === name) ?? null : null;
|
|
78
|
+
}
|
|
79
|
+
// ---- Places and numbers ---------------------------------------------------------------------------------------------------------------------
|
|
80
|
+
export const CAPITAL_QUEST_IDS = [
|
|
81
|
+
'royalErrand',
|
|
82
|
+
'theLostSeal',
|
|
83
|
+
'ironForTheGate',
|
|
84
|
+
'goldForTheCrown',
|
|
85
|
+
'silverForTheWall',
|
|
86
|
+
'greatCookOff',
|
|
87
|
+
'tourneyRound1',
|
|
88
|
+
'tourneyRound2',
|
|
89
|
+
'tourneyFinal',
|
|
90
|
+
'papersForTheCormorant',
|
|
91
|
+
'pagesForTheBook',
|
|
92
|
+
'theFarPages',
|
|
93
|
+
'theWallWalk',
|
|
94
|
+
];
|
|
95
|
+
/** Combat levels (placeholders). */
|
|
96
|
+
export const ROYAL_ERRAND_COMBAT = 15;
|
|
97
|
+
export const LOST_SEAL_COMBAT = 22;
|
|
98
|
+
export const TOURNEY_ROUND_1_COMBAT = 15;
|
|
99
|
+
export const TOURNEY_ROUND_2_COMBAT = 24;
|
|
100
|
+
export const TOURNEY_FINAL_COMBAT = 32;
|
|
101
|
+
export const CORMORANT_PAPERS_COMBAT = 20;
|
|
102
|
+
export const PAGES_COMBAT = 24;
|
|
103
|
+
export const FAR_PAGES_COMBAT = 32;
|
|
104
|
+
export const WALL_WALK_COMBAT = 25;
|
|
105
|
+
/** Skill gates (placeholders; the bars' own smelt levels are in blacksmithing.ts). */
|
|
106
|
+
export const IRON_FOR_GATE_SMITHING = 16;
|
|
107
|
+
export const GOLD_FOR_CROWN_SMITHING = 30;
|
|
108
|
+
export const SILVER_FOR_WALL_SMITHING = 34;
|
|
109
|
+
export const COOK_OFF_COOKING = 25;
|
|
110
|
+
export const IRON_FOR_GATE_BARS = 8;
|
|
111
|
+
export const GOLD_CROWN_STEEL = 4;
|
|
112
|
+
export const GOLD_CROWN_GOLD = 2;
|
|
113
|
+
export const SILVER_WALL_BARS = 3;
|
|
114
|
+
export const LOST_SEAL_THIEVES = 6;
|
|
115
|
+
export const LOST_SEAL_KILL_KINDS = ['cutthroat'];
|
|
116
|
+
/** The Wall Walk: nine minutes for about 800 tiles of ring road at 3.9 tiles a second (a little over three and a half). */
|
|
117
|
+
export const WALL_WALK_MS = 9 * 60_000;
|
|
118
|
+
export const WALL_WALK_WARN_AT_MS = [180_000, 60_000];
|
|
119
|
+
/** The four corner posts of the ring road, clockwise from the north-west (world tiles, inclusive boxes). */
|
|
120
|
+
export const WALL_WALK_POSTS = {
|
|
121
|
+
northWest: { minX: 489, maxX: 495, minZ: 85, maxZ: 91 },
|
|
122
|
+
northEast: { minX: 745, maxX: 751, minZ: 85, maxZ: 91 },
|
|
123
|
+
southEast: { minX: 745, maxX: 751, minZ: 229, maxZ: 235 },
|
|
124
|
+
southWest: { minX: 495, maxX: 501, minZ: 225, maxZ: 231 },
|
|
125
|
+
};
|
|
126
|
+
/** The lighthouse on the mole's head: the ring of walkable stone round it (HARBOUR_MOLE_HEAD). */
|
|
127
|
+
export const LOST_SEAL_LIGHTHOUSE_AREA = {
|
|
128
|
+
minX: HARBOUR_MOLE_HEAD.minX,
|
|
129
|
+
maxX: HARBOUR_MOLE_HEAD.maxX,
|
|
130
|
+
minZ: HARBOUR_MOLE_HEAD.minZ + 1,
|
|
131
|
+
maxZ: HARBOUR_MOLE_HEAD.maxZ - 1,
|
|
132
|
+
};
|
|
133
|
+
/** Where the helper points, in words and world tiles. */
|
|
134
|
+
const YARD_AT = { x: 604, z: 206, label: 'the Capital Training Yard' };
|
|
135
|
+
const CENTRE = (a) => ({ x: Math.round((a.minX + a.maxX) / 2), z: Math.round((a.minZ + a.maxZ) / 2) });
|
|
136
|
+
const COMBAT_CHOICE = ['strength', 'archery', 'precision'];
|
|
137
|
+
const SPAR_CHOICE = ['strength', 'precision'];
|
|
138
|
+
/** Cooked dishes by kind of dish: the three judges each want one of their own (every recipe in cooking.ts). */
|
|
139
|
+
export const COOK_OFF_FISH = ['cookedperch', 'cookedtidesnapper', 'cookedtench', 'cookedgrayling', 'cookedtrout', 'cookedchar', 'cookedconger', 'cookedbass', 'cookedfrostpike'];
|
|
140
|
+
export const COOK_OFF_MEAT = ['cookedrabbit', 'cookedhare', 'cookedgame', 'cookedgnasher', 'roastpheasant', 'roastgrouse', 'roastvenison', 'roastmutton', 'roastduck', 'roastboar'];
|
|
141
|
+
export const COOK_OFF_BREAD = ['bread', 'honeybread'];
|
|
142
|
+
export const COOK_OFF_DISHES = [...COOK_OFF_FISH, ...COOK_OFF_MEAT, ...COOK_OFF_BREAD];
|
|
143
|
+
// ---- The royal errand ---------------------------------------------------------------------------------------------------------------------
|
|
144
|
+
export const ROYAL_ERRAND_QUEST = {
|
|
145
|
+
giver: CLERK,
|
|
146
|
+
requires: {
|
|
147
|
+
combat: ROYAL_ERRAND_COMBAT,
|
|
148
|
+
refuse: `The King's errands go to people who can walk the city and the roads without a wolf making a meal of them. Come back stronger (Combat ${ROYAL_ERRAND_COMBAT}).`,
|
|
149
|
+
},
|
|
150
|
+
offer: "I have three letters, one going to the Great Gate, one to the King's Harbour and the third waiting for the answers. My couriers are all down with the same cold, and the garrison wants word before the evening bells. Will you carry the King's business for a morning?",
|
|
151
|
+
accept: "The Gate Captain first, inside the Great Gate on the west wall. He will have an answer. Then out through the East Gate to the harbour clerk on the quay. Then back to me with both replies.",
|
|
152
|
+
decline: 'Then the letters wait, and so does the garrison. They are good at waiting.',
|
|
153
|
+
steps: [
|
|
154
|
+
{
|
|
155
|
+
kind: 'talk',
|
|
156
|
+
npc: CAPTAIN,
|
|
157
|
+
label: 'Take the Royal Clerk\'s letter to Gate Captain Wynn Aldern',
|
|
158
|
+
hint: 'The Gate Captain stands inside the Great Gate on the west wall, south of the Royal Way. Follow the Royal Way west.',
|
|
159
|
+
say: "From the Royal Clerk? Of course it is. Tell him the west gate is quiet, the portcullis is oiled and I have not seen a courier in two days. And to send a proper one next time.",
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
kind: 'talk',
|
|
163
|
+
npc: HARBOUR,
|
|
164
|
+
label: "Carry the Gate Captain's answer to Harbour Clerk Tamsin Rell",
|
|
165
|
+
hint: "Out through the East Gate and over the bridge to the King's Harbour; the clerk stands on the quay north of the Harbour Road.",
|
|
166
|
+
say: "The Captain says the gate is quiet? Then I may say the quay is not. Three hulls in on the morning tide and none of them in the book. Tell Thorne I will have the tally by evening.",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
kind: 'talk',
|
|
170
|
+
npc: CLERK,
|
|
171
|
+
label: "Bring both replies back to Royal Clerk Edmund Thorne",
|
|
172
|
+
hint: 'The Royal Clerk stands in the Royal Administration beside the keep, at the east end of the Royal Way.',
|
|
173
|
+
say: "A quiet gate and a busy quay, and no courier seen in two days. That is more than my own staff have told me all week. Thank you, truly.",
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
done: "The city knows more than it did this morning, and so do I. Here is something for the shoe leather.",
|
|
177
|
+
after: "If you hear anything about the missing seal, I want to be the first to know.",
|
|
178
|
+
rewards: { coins: 500, xp: { explorer: 1500 } },
|
|
179
|
+
};
|
|
180
|
+
export const LOST_SEAL_QUEST = {
|
|
181
|
+
giver: CLERK,
|
|
182
|
+
requires: {
|
|
183
|
+
quest: 'royalErrand',
|
|
184
|
+
combat: LOST_SEAL_COMBAT,
|
|
185
|
+
refuse: `I have a thing to ask you, but not until you have run my errand, and not before you can hold your own on a bad road (Combat ${LOST_SEAL_COMBAT}).`,
|
|
186
|
+
},
|
|
187
|
+
offer: "The King's seal is gone. It was on this desk at the morning bell and by noon it was not, and nobody who was in this room remembers seeing it go. Nobody must know. If it is not found by the evening audience, I shall be answering for it to the King himself. Will you hunt it?",
|
|
188
|
+
accept: "Scholar Aldous keeps the next room and sees everything. The pedlar Joss Tinker in the Market Square sees everyone. Then wherever the trail goes, follow it. And mind: whoever has the seal has friends.",
|
|
189
|
+
decline: 'Then I shall have to tell the King myself. Wish me luck.',
|
|
190
|
+
steps: [
|
|
191
|
+
{
|
|
192
|
+
kind: 'talk',
|
|
193
|
+
npc: SCHOLAR,
|
|
194
|
+
label: 'Ask Scholar Aldous who was in the Administration this morning',
|
|
195
|
+
hint: 'Scholar Aldous keeps the archives at the Royal Administration, just south of the Royal Clerk.',
|
|
196
|
+
say: "A man with a satchel, in the livery of the harbour office, came to ask for a stamped letter and left in an awful hurry. I thought nothing of it. I assumed the harbour had finally got its paperwork in order. Ask Joss Tinker, the pedlar. He sees everyone who leaves by the East Gate.",
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
kind: 'talk',
|
|
200
|
+
npc: PEDLAR,
|
|
201
|
+
label: 'Ask Pedlar Joss Tinker which way the harbour man went',
|
|
202
|
+
hint: "Joss Tinker the pedlar has his pitch in the Market Square, on the east side of the fountain.",
|
|
203
|
+
say: "Aye, the harbour man. Offered me a gilded ring for a rope and a crust, and he was shaking like a leaf. Said he was going to the coast, to the people he owed. He did not say which coast, but the cutthroats on the wreck beach owe the whole kingdom.",
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
kind: 'kill',
|
|
207
|
+
npcKinds: LOST_SEAL_KILL_KINDS,
|
|
208
|
+
qty: LOST_SEAL_THIEVES,
|
|
209
|
+
npcLabel: 'Cutthroat',
|
|
210
|
+
label: `Put down ${LOST_SEAL_THIEVES} cutthroats on the wreck coast`,
|
|
211
|
+
hint: "Cutthroats prowl the Sundered Coast beaches, south-west of Calverton (level 20). Their friend carried the seal this way.",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
kind: 'reach',
|
|
215
|
+
area: LOST_SEAL_LIGHTHOUSE_AREA,
|
|
216
|
+
at: { ...CENTRE(LOST_SEAL_LIGHTHOUSE_AREA), label: 'the lighthouse on the mole of the King\'s Harbour' },
|
|
217
|
+
label: "Search the lighthouse on the King's Harbour mole",
|
|
218
|
+
hint: "The cutthroats' leader said the seal was dropped where the lamps are lit: the lighthouse at the end of the mole, north of the Royal Pier.",
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
kind: 'talk',
|
|
222
|
+
npc: CLERK,
|
|
223
|
+
label: 'Return the King\'s seal to Royal Clerk Edmund Thorne',
|
|
224
|
+
hint: 'The Royal Clerk stands in the Royal Administration beside the keep.',
|
|
225
|
+
say: "There it is, in the lamp-oil crate, exactly where you said. I shall say it was found in the keep's own drawer. You and I have a secret, and the King does not need to know.",
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
done: "A tidy morning's work. I shall never forget it, and neither, I hope, will you.",
|
|
229
|
+
after: "The seal sits on my desk under glass, now. The King thinks it is for show.",
|
|
230
|
+
rewards: { coins: 900, xp: { explorer: 2400 }, choiceXp: { qty: 1800, skills: COMBAT_CHOICE } },
|
|
231
|
+
};
|
|
232
|
+
// ---- The Forge Master's three -------------------------------------------------------------------------------------------------------------
|
|
233
|
+
export const IRON_FOR_GATE_QUEST = {
|
|
234
|
+
giver: FORGE,
|
|
235
|
+
requires: {
|
|
236
|
+
skill: { skill: 'blacksmithing', level: IRON_FOR_GATE_SMITHING },
|
|
237
|
+
refuse: `The Forge Master takes bars from people who know a furnace from a fireplace. Come back with Blacksmithing ${IRON_FOR_GATE_SMITHING}.`,
|
|
238
|
+
},
|
|
239
|
+
offer: "The portcullis at the Great Gate is wearing out its fittings, and the Castle Guard wants new iron before the next hard winter. I have the hinges and the hammers, but I am short of bars. Eight iron bars, smelted properly, and I will see you right.",
|
|
240
|
+
accept: "Iron bars from iron ore at any furnace (Blacksmithing 15 to smelt), the Anvil Square furnaces are free. Bring eight to me by the anvil shed.",
|
|
241
|
+
decline: 'Then the gate squeaks another winter.',
|
|
242
|
+
steps: [
|
|
243
|
+
{
|
|
244
|
+
kind: 'deliver',
|
|
245
|
+
npc: FORGE,
|
|
246
|
+
items: [{ kinds: ['ironbar'], qty: IRON_FOR_GATE_BARS, label: 'Iron bar' }],
|
|
247
|
+
label: `Bring Forge Master Dorran Vale ${IRON_FOR_GATE_BARS} iron bars`,
|
|
248
|
+
hint: 'Smelt iron ore into bars at any furnace in the Forge and Artisan Quarter. Dorran Vale stands by the anvil shed south of Anvil Square.',
|
|
249
|
+
say: "Eight bars, even and clean. These will hold the gate until your grandchildren are old. The Castle Guard owes you a favour.",
|
|
250
|
+
short: `Eight iron bars, smelted (Blacksmithing 15). Anvil Square's furnaces are free to use.`,
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
done: "The gate will not squeak again. Here, from the Guard's own purse.",
|
|
254
|
+
after: "Gold and steel next, when you are ready. The Crown has plans.",
|
|
255
|
+
rewards: { coins: 350, xp: { blacksmithing: 800, explorer: 800 } },
|
|
256
|
+
};
|
|
257
|
+
export const GOLD_FOR_CROWN_QUEST = {
|
|
258
|
+
giver: FORGE,
|
|
259
|
+
requires: {
|
|
260
|
+
quest: 'ironForTheGate',
|
|
261
|
+
skill: { skill: 'blacksmithing', level: GOLD_FOR_CROWN_SMITHING },
|
|
262
|
+
refuse: `The Crown's work wants steel and gold, and a smith who has done the gate's iron first. Blacksmithing ${GOLD_FOR_CROWN_SMITHING}.`,
|
|
263
|
+
},
|
|
264
|
+
offer: "The King's crown has lost a point, and nobody in the Capital has the gold to mend it. The Dwarf Hold's working face has seams of gold, I am told, and there is a halt there under the Capital now. Four steel bars for the frame and two gold bars for the point. It is the finest piece of work I have been offered in years.",
|
|
265
|
+
accept: "Gold ore is Mining 30, from the working face in the Dwarf Hold (take the Western Line from the Forge Halt), and both steel and gold bars are Blacksmithing 30 at a furnace. Four steel, two gold, to me.",
|
|
266
|
+
decline: 'Then the crown goes lopsided to the audience, and I shall tell the King why.',
|
|
267
|
+
steps: [
|
|
268
|
+
{
|
|
269
|
+
kind: 'deliver',
|
|
270
|
+
npc: FORGE,
|
|
271
|
+
items: [{ kinds: ['steelbar'], qty: GOLD_CROWN_STEEL, label: 'Steel bar' }],
|
|
272
|
+
label: `Bring Dorran Vale ${GOLD_CROWN_STEEL} steel bars for the crown's frame`,
|
|
273
|
+
hint: 'Steel is an iron bar and two coal or two charcoal at a furnace (Blacksmithing 30). The Charcoal Yard south of Anvil Square has the mounds.',
|
|
274
|
+
say: "Four steel bars, hard and bright. The frame will hold. Now for the hard part: the gold.",
|
|
275
|
+
short: `Four steel bars (iron bar plus coal or charcoal, Blacksmithing 30).`,
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
kind: 'deliver',
|
|
279
|
+
npc: FORGE,
|
|
280
|
+
items: [{ kinds: ['goldbar'], qty: GOLD_CROWN_GOLD, label: 'Gold bar' }],
|
|
281
|
+
label: `Bring Dorran Vale ${GOLD_CROWN_GOLD} gold bars for the crown's point`,
|
|
282
|
+
hint: "Gold ore is on the Dwarf Hold's working face (Mining 30, an iron pickaxe) and the Red Waste's chasm shelf; smelt it at a furnace (Blacksmithing 30).",
|
|
283
|
+
say: "Gold, and good gold. I have not seen a bar that colour since my master's time. The King shall have his point back before the audience.",
|
|
284
|
+
short: `Two gold bars: gold ore from the Dwarf Hold's working face or the Red Waste, smelted at a furnace.`,
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
done: "The crown is whole. The King will never know it was a stranger who found the metal. Here, for the metal and for the silence.",
|
|
288
|
+
after: "There is silver work, if you want it. For the wall, and the Guard.",
|
|
289
|
+
rewards: { coins: 800, xp: { blacksmithing: 2200, explorer: 1800 } },
|
|
290
|
+
};
|
|
291
|
+
export const SILVER_FOR_WALL_QUEST = {
|
|
292
|
+
giver: FORGE,
|
|
293
|
+
requires: {
|
|
294
|
+
quest: 'goldForTheCrown',
|
|
295
|
+
skill: { skill: 'blacksmithing', level: SILVER_FOR_WALL_SMITHING },
|
|
296
|
+
refuse: `Silver is cold work, and cold work wants a steady hand. Blacksmithing ${SILVER_FOR_WALL_SMITHING}.`,
|
|
297
|
+
},
|
|
298
|
+
offer: "The Guard's captains have heard what silver does to the dead, and they would like a blade of it on every wall. A silver dagger for the Captain of the Watch, to begin with. Silver bars, then the dagger itself, and I shall pay for both.",
|
|
299
|
+
accept: "Silver ore is in the Crystal Gorge of the frozen north, at Mining 33; the bars are Blacksmithing 33 at a furnace, and the dagger is Blacksmithing 34 at an anvil with your hammer and tongs. Three bars of silver for the stock, and the dagger.",
|
|
300
|
+
decline: 'Then the Guard makes do with iron, and the dead go on walking.',
|
|
301
|
+
steps: [
|
|
302
|
+
{
|
|
303
|
+
kind: 'deliver',
|
|
304
|
+
npc: FORGE,
|
|
305
|
+
items: [{ kinds: ['silverbar'], qty: SILVER_WALL_BARS, label: 'Silver bar' }],
|
|
306
|
+
label: `Bring Dorran Vale ${SILVER_WALL_BARS} silver bars for the Guard's stock`,
|
|
307
|
+
hint: "Silver ore comes from the Crystal Gorge's seams in the frozen north (Mining 33, an iron pickaxe); smelt it at a furnace (Blacksmithing 33).",
|
|
308
|
+
say: "Silver, pale as the moon. Three bars for the stock room. Now the dagger: that is the part I cannot do for you.",
|
|
309
|
+
short: `Three silver bars (silver ore, Mining 33; smelt at a furnace, Blacksmithing 33).`,
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
kind: 'deliver',
|
|
313
|
+
npc: FORGE,
|
|
314
|
+
items: [{ kinds: ['silverdagger'], qty: 1, label: 'Silver dagger' }],
|
|
315
|
+
skill: { skill: 'blacksmithing', level: SILVER_FOR_WALL_SMITHING },
|
|
316
|
+
label: 'Forge a silver dagger and bring it to Dorran Vale',
|
|
317
|
+
hint: "Forge it at an anvil with a hammer and tongs (Blacksmithing 34): one silver bar makes the dagger. Silver cuts the dead one and six-tenths times deeper.",
|
|
318
|
+
say: "A silver dagger made by a hand that is not mine. It will go to the Captain of the Watch with your name on the sheath. I could not ask for a better answer.",
|
|
319
|
+
short: 'A silver dagger of your own forging (Blacksmithing 34), made from a silver bar at an anvil.',
|
|
320
|
+
},
|
|
321
|
+
],
|
|
322
|
+
done: "The wall has its silver, and the Guard has your name for it. Take this, and this.",
|
|
323
|
+
after: "The Captain of the Watch sleeps with the dagger under his pillow. I am told he does not mind.",
|
|
324
|
+
rewards: { coins: 1200, xp: { blacksmithing: 3500, explorer: 2600 }, choiceXp: { qty: 2000, skills: COMBAT_CHOICE } },
|
|
325
|
+
};
|
|
326
|
+
// ---- The Great Cook-Off -------------------------------------------------------------------------------------------------------------------
|
|
327
|
+
export const GREAT_COOK_OFF_QUEST = {
|
|
328
|
+
giver: COOK,
|
|
329
|
+
requires: {
|
|
330
|
+
skill: { skill: 'cooking', level: COOK_OFF_COOKING },
|
|
331
|
+
refuse: `The Cook-Off is no place for a beginner's burnt crust. Come back with Cooking ${COOK_OFF_COOKING}.`,
|
|
332
|
+
},
|
|
333
|
+
offer: "Every autumn the Market Square holds a cook-off, and every autumn the same three judges argue for an hour. This year I want somebody new at the stove. Three dishes, three judges, three tasting: a cooked fish for Nan Brisk, a meat dish for Joss Tinker, a loaf for Bea Holloway. Then tell me how it went.",
|
|
334
|
+
accept: "Cook any three of the contest dishes at a fire or a range: a cooked fish, a roast or a pot of meat, and bread or honey bread. Then take one of each to its judge in the Market Square, and tell me the verdict.",
|
|
335
|
+
decline: 'Then the judges have another year to argue about nothing.',
|
|
336
|
+
steps: [
|
|
337
|
+
{
|
|
338
|
+
kind: 'cook',
|
|
339
|
+
dishes: COOK_OFF_DISHES,
|
|
340
|
+
qty: 3,
|
|
341
|
+
label: 'Cook three dishes for the contest (a fish, a meat dish and bread)',
|
|
342
|
+
hint: 'Cook raw fish, game or flour at any fire or range: the Westgate cookhouse stove, the inn stove or a campfire. Keep one dish of each kind for the judges.',
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
kind: 'deliver',
|
|
346
|
+
npc: FISHMONGER,
|
|
347
|
+
items: [{ kinds: COOK_OFF_FISH, qty: 1, label: 'Cooked fish' }],
|
|
348
|
+
label: 'Give Fishmonger Nan Brisk a cooked fish to taste',
|
|
349
|
+
hint: "Nan Brisk keeps the fish stall in the Market Square, on the north side of the fountain.",
|
|
350
|
+
say: "Grilled to the bone and not a flake wasted. I have eaten worse in the King's own banquet. I shall put in a good word.",
|
|
351
|
+
short: 'A cooked fish: tench, grayling, trout, char, bass, perch, conger, tide snapper or frost pike.',
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
kind: 'deliver',
|
|
355
|
+
npc: PEDLAR,
|
|
356
|
+
items: [{ kinds: COOK_OFF_MEAT, qty: 1, label: 'Meat dish' }],
|
|
357
|
+
label: 'Give Pedlar Joss Tinker a meat dish to taste',
|
|
358
|
+
hint: "Joss Tinker's pitch is on the east side of the Market Square's fountain.",
|
|
359
|
+
say: "A roast like that sells itself! I would pay a silver for a second one, and I never pay a silver for anything.",
|
|
360
|
+
short: 'A meat dish: roast boar, venison, mutton, pheasant, grouse, duck, or cooked hare, rabbit, game or gnasher.',
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
kind: 'deliver',
|
|
364
|
+
npc: GROCER,
|
|
365
|
+
items: [{ kinds: COOK_OFF_BREAD, qty: 1, label: 'Loaf of bread' }],
|
|
366
|
+
label: 'Give Greengrocer Bea Holloway a loaf to taste',
|
|
367
|
+
hint: 'Bea Holloway keeps the greengrocer\'s stall on the west side of the Market Square.',
|
|
368
|
+
say: "Crust like a boot and a crumb like a cloud. Do not tell the bakers where I got it. I shall give you my vote, and I rarely give anything.",
|
|
369
|
+
short: 'A loaf of bread or honey bread, baked from flour at a fire or range.',
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
kind: 'choose',
|
|
373
|
+
npc: COOK,
|
|
374
|
+
label: 'Tell Master Cook Hob Garrick the judges\' verdict',
|
|
375
|
+
hint: 'Hob Garrick works the Westgate cookhouse, just inside the Great Gate.',
|
|
376
|
+
say: "Three judges, three nods, and a fourth I did not expect. A first place, if I may call it that. What will you take for it?",
|
|
377
|
+
options: [
|
|
378
|
+
{
|
|
379
|
+
id: 'purse',
|
|
380
|
+
label: 'Take the champion\'s purse',
|
|
381
|
+
say: "Coin it is. A cook who is paid is a cook who comes back.",
|
|
382
|
+
bonus: { coins: 600 },
|
|
383
|
+
finish: true,
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
id: 'lesson',
|
|
387
|
+
label: 'Take a week at the cook\'s own stove',
|
|
388
|
+
say: "A week of my ladle and my temper. You will be a better cook, or a more humble one.",
|
|
389
|
+
bonus: { xp: { cooking: 2200 } },
|
|
390
|
+
finish: true,
|
|
391
|
+
},
|
|
392
|
+
],
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
done: "The Market Square will be talking about it all winter. Your name goes on the cook-off board.",
|
|
396
|
+
after: "Next autumn, I shall expect you to defend the title.",
|
|
397
|
+
rewards: { coins: 400, xp: { cooking: 1500, explorer: 1500 } },
|
|
398
|
+
};
|
|
399
|
+
// ---- The King's Tourney (the sparring yard's bouts, in three rounds) --------------------------------------------------------------------
|
|
400
|
+
export const TOURNEY_ROUND_1_QUEST = {
|
|
401
|
+
giver: MARSHAL,
|
|
402
|
+
requires: {
|
|
403
|
+
combat: TOURNEY_ROUND_1_COMBAT,
|
|
404
|
+
refuse: `Nobody enters the King's Tourney until they can win a bout in the yard (Combat ${TOURNEY_ROUND_1_COMBAT}).`,
|
|
405
|
+
},
|
|
406
|
+
offer: "The King's Tourney: four sergeants, four bouts, one champion's purse. Every contender starts in the Squires' Round: Sergeant Hale, then Sergeant Mott. Win a bout against each and you are through to the Knights' Round.",
|
|
407
|
+
accept: "Ask Sergeant Hale and Sergeant Mott in the Training Yard for a bout each from their menus. Win each, and come and tell me.",
|
|
408
|
+
decline: 'Then the Squires\' Round goes ahead without you.',
|
|
409
|
+
steps: [
|
|
410
|
+
{
|
|
411
|
+
kind: 'bout',
|
|
412
|
+
marks: ['yard:sergeant-hale', 'yard:sergeant-mott'],
|
|
413
|
+
boutLabel: 'Bout',
|
|
414
|
+
label: "Win a bout against Sergeant Hale and one against Sergeant Mott",
|
|
415
|
+
hint: "Spar in the Capital's Training Yard: ask each sergeant for a bout (Combat 8 and 15) and win it. They show a stance; you pick Strike, Guard or Feint.",
|
|
416
|
+
at: YARD_AT,
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
kind: 'talk',
|
|
420
|
+
npc: MARSHAL,
|
|
421
|
+
label: 'Tell Tourney Marshal Cade Brightwater you are through',
|
|
422
|
+
hint: "The Tourney Marshal stands in the Training Yard, north of the sergeants' lane.",
|
|
423
|
+
say: "Hale and Mott both down, and not a scratch on you. The Squires' Round is yours. The Knights' Round waits for Sergeant Brack, when you are ready.",
|
|
424
|
+
},
|
|
425
|
+
],
|
|
426
|
+
done: "Through to the Knights' Round. Take this for your boots.",
|
|
427
|
+
after: "Brack is meaner than Mott, and cleverer. Do not trust his stance.",
|
|
428
|
+
rewards: { coins: 400, xp: { explorer: 1200 }, choiceXp: { qty: 900, skills: SPAR_CHOICE } },
|
|
429
|
+
};
|
|
430
|
+
export const TOURNEY_ROUND_2_QUEST = {
|
|
431
|
+
giver: MARSHAL,
|
|
432
|
+
requires: {
|
|
433
|
+
quest: 'tourneyRound1',
|
|
434
|
+
combat: TOURNEY_ROUND_2_COMBAT,
|
|
435
|
+
refuse: `The Knights' Round is for contenders who have won the Squires' Round, and who can stand up to Brack (Combat ${TOURNEY_ROUND_2_COMBAT}).`,
|
|
436
|
+
},
|
|
437
|
+
offer: "The Knights' Round. One bout against Sergeant Brack, who has broken better contenders than you on that dirt. He lies about his stance one time in three. Read him, or lose.",
|
|
438
|
+
accept: "Ask Sergeant Brack for a bout in the Training Yard, and win it.",
|
|
439
|
+
decline: 'Then the Knights\' Round stays empty.',
|
|
440
|
+
steps: [
|
|
441
|
+
{
|
|
442
|
+
kind: 'bout',
|
|
443
|
+
marks: ['yard:sergeant-brack'],
|
|
444
|
+
boutLabel: 'Bout',
|
|
445
|
+
label: 'Win a bout against Sergeant Brack',
|
|
446
|
+
hint: "Sergeant Brack stands in the Capital's Training Yard (Combat 24). His stance is a lie about one time in three.",
|
|
447
|
+
at: YARD_AT,
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
kind: 'talk',
|
|
451
|
+
npc: MARSHAL,
|
|
452
|
+
label: 'Tell Tourney Marshal Cade Brightwater Brack has yielded',
|
|
453
|
+
hint: "The Tourney Marshal stands in the Training Yard, north of the sergeants' lane.",
|
|
454
|
+
say: "Brack yielded? To you? I saw it, and I still do not believe it. The Knights' Round is yours. Only the Final is left, and that is Vane.",
|
|
455
|
+
},
|
|
456
|
+
],
|
|
457
|
+
done: "Through to the Final. The yard is talking about you.",
|
|
458
|
+
after: "Vane has not lost a bout in a month. He will not enjoy it.",
|
|
459
|
+
rewards: { coins: 700, xp: { explorer: 1800 }, choiceXp: { qty: 1500, skills: SPAR_CHOICE } },
|
|
460
|
+
};
|
|
461
|
+
export const TOURNEY_FINAL_QUEST = {
|
|
462
|
+
giver: MARSHAL,
|
|
463
|
+
requires: {
|
|
464
|
+
quest: 'tourneyRound2',
|
|
465
|
+
combat: TOURNEY_FINAL_COMBAT,
|
|
466
|
+
refuse: `The Final is against Sergeant Vane, and Vane takes only the best (Combat ${TOURNEY_FINAL_COMBAT}).`,
|
|
467
|
+
},
|
|
468
|
+
offer: "The Final. Sergeant Vane has held this yard for years, and lies about his stance nearly every other time. Beat him, and you are the King's champion for the season.",
|
|
469
|
+
accept: "Ask Sergeant Vane for a bout in the Training Yard, and win it. Then come to me for your prize.",
|
|
470
|
+
decline: 'Then the Final waits, as Vane does.',
|
|
471
|
+
steps: [
|
|
472
|
+
{
|
|
473
|
+
kind: 'bout',
|
|
474
|
+
marks: ['yard:sergeant-vane'],
|
|
475
|
+
boutLabel: 'Bout',
|
|
476
|
+
label: 'Win the Final against Sergeant Vane',
|
|
477
|
+
hint: "Sergeant Vane stands in the Capital's Training Yard (Combat 32). He lies about his stance nearly half the time.",
|
|
478
|
+
at: YARD_AT,
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
kind: 'choose',
|
|
482
|
+
npc: MARSHAL,
|
|
483
|
+
label: 'Claim the champion\'s prize from the Tourney Marshal',
|
|
484
|
+
hint: "The Tourney Marshal stands in the Training Yard, north of the sergeants' lane.",
|
|
485
|
+
say: "CHAMPION! The yard will hear it by dusk, and the King's heralds by morning. Now, your prize. The purse, or a season of the sergeants' own training?",
|
|
486
|
+
options: [
|
|
487
|
+
{
|
|
488
|
+
id: 'purse',
|
|
489
|
+
label: "Take the champion's purse",
|
|
490
|
+
say: "A full purse for a full victory. Spend it where the sergeants cannot see.",
|
|
491
|
+
bonus: { coins: 1500 },
|
|
492
|
+
finish: true,
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
id: 'training',
|
|
496
|
+
label: "Take a season's training from the sergeants",
|
|
497
|
+
say: "A season of Vane's own drills. He will hate every minute of it, and so will you.",
|
|
498
|
+
bonus: { choiceXp: { qty: 3500, skills: SPAR_CHOICE } },
|
|
499
|
+
finish: true,
|
|
500
|
+
},
|
|
501
|
+
],
|
|
502
|
+
},
|
|
503
|
+
],
|
|
504
|
+
done: "The King's champion for the season. Your name goes on the board in the Training Yard.",
|
|
505
|
+
after: "Next season there will be a new Final, and a new contender with your name in his mouth.",
|
|
506
|
+
rewards: { coins: 1000, xp: { explorer: 3000 }, choiceXp: { qty: 2500, skills: SPAR_CHOICE } },
|
|
507
|
+
};
|
|
508
|
+
// ---- The harbour ----------------------------------------------------------------------------------------------------------------------------
|
|
509
|
+
export const PAPERS_FOR_CORMORANT_QUEST = {
|
|
510
|
+
giver: HARBOUR,
|
|
511
|
+
requires: {
|
|
512
|
+
quest: 'gullsMap',
|
|
513
|
+
combat: CORMORANT_PAPERS_COMBAT,
|
|
514
|
+
refuse: `The Cormorant's papers are Old Merrick's business, and you have not met him yet. Finish The Gull's Map first (Combat ${CORMORANT_PAPERS_COMBAT}).`,
|
|
515
|
+
},
|
|
516
|
+
offer: "The Cormorant is on my book as a derelict, and Old Merrick swears she is only waiting for a tide. Somebody has to carry my papers down to Branson at Hope Beach and to Merrick at Blackwake Cove and get both to sign. The sea route is quickest: a boat from the Royal Pier to Hope Beach is free. Will you be my post?",
|
|
517
|
+
accept: "Take the Royal Pier's boat to Hope Beach and show Branson the papers. Then walk down the coast to Old Merrick at Blackwake Cove. Then come back by the same road, and tell me what they said.",
|
|
518
|
+
decline: 'Then the Cormorant stays on my book as a derelict, and Merrick stays angry.',
|
|
519
|
+
steps: [
|
|
520
|
+
{
|
|
521
|
+
kind: 'talk',
|
|
522
|
+
npc: BRANSON,
|
|
523
|
+
label: "Show Branson the Harbour Clerk's papers at Hope Beach",
|
|
524
|
+
hint: "Sail from the King's Harbour to Hope Beach (the harbourmaster sells passage, and the run to Hope Beach is always free), or walk. Branson stands on the landing stage at the end of the pier's east branch.",
|
|
525
|
+
say: "Papers from the King's Harbour? I haven't seen a clerk's seal on my deck since the last time the harbour thought I owed them money. Tell her the boat is sound and the fares are paid. Now go and bother Old Merrick.",
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
kind: 'talk',
|
|
529
|
+
npc: MERRICK,
|
|
530
|
+
label: "Take the papers to Old Merrick at Blackwake Cove",
|
|
531
|
+
hint: "Blackwake Cove is on the Sundered Coast, south-east of Hope Beach across the Sundered Span. Old Merrick keeps the galley by the beach.",
|
|
532
|
+
say: "A derelict, is she? She has been waiting for a tide since I was a lad. Tell the clerk the Cormorant is mine and the tide is coming, and she can put that in her book, and I will sign it with a drawn cutlass.",
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
kind: 'talk',
|
|
536
|
+
npc: HARBOUR,
|
|
537
|
+
label: 'Tell Harbour Clerk Tamsin Rell what they said',
|
|
538
|
+
hint: "The Harbour Clerk stands on the quay of the King's Harbour, north of the Harbour Road.",
|
|
539
|
+
say: "'Mine and the tide is coming'? That is not a signature, but it is an answer. I shall write 'under dispute' and be done with it. You have done the harbour a favour.",
|
|
540
|
+
},
|
|
541
|
+
],
|
|
542
|
+
done: "A dispute is better than a derelict, and a good deal quieter. Here is your fare, and the harbour's thanks.",
|
|
543
|
+
after: "The Cormorant sits on my book as 'under dispute'. It is the nicest thing I have ever written about a ship.",
|
|
544
|
+
rewards: { coins: 800, xp: { explorer: 2200 }, choiceXp: { qty: 1500, skills: ['fishing', 'cooking', 'explorer'] } },
|
|
545
|
+
};
|
|
546
|
+
// ---- The scribes' Explorer chain -----------------------------------------------------------------------------------------------------------
|
|
547
|
+
export const PAGES_FOR_BOOK_QUEST = {
|
|
548
|
+
giver: SCRIBE,
|
|
549
|
+
requires: {
|
|
550
|
+
combat: PAGES_COMBAT,
|
|
551
|
+
refuse: `The Archive keeps only deeds, and you have few yet. Come back with Combat ${PAGES_COMBAT} and something to show.`,
|
|
552
|
+
},
|
|
553
|
+
offer: "The Archive keeps a Ledger of every deed done in the kingdom, and it has two blank pages I am embarrassed by: the sparring yard and the Fishing Derby. Win a bout against Sergeant Mott, and weigh in at a Fishing Derby, and I will ink them both. Then Scholar Aldous will want a word.",
|
|
554
|
+
accept: "Open your Explorer's Ledger and see the two blank lines. Beat Sergeant Mott in the Training Yard, and weigh in at a Fishing Derby (every two hours at the Long Pier, Henson Pond or the Frozen Lake). Then come back and I shall ink them.",
|
|
555
|
+
decline: 'Then the pages stay blank, and the Archive stays embarrassed.',
|
|
556
|
+
steps: [
|
|
557
|
+
{
|
|
558
|
+
kind: 'talk',
|
|
559
|
+
npc: SCRIBE,
|
|
560
|
+
label: "Show Chief Scribe Isolde Marr that the yard and the derby pages are filled",
|
|
561
|
+
hint: "Beat Sergeant Mott in the Training Yard and weigh in at a Fishing Derby, then speak to the Chief Scribe in the Guild Hall, near the Exchange.",
|
|
562
|
+
say: "A bout won against Mott, and a derby weigh-in with your name on it. I have inked both. The Archive is a little less embarrassed than it was this morning.",
|
|
563
|
+
ledger: {
|
|
564
|
+
marks: ['yard:sergeant-mott', 'derby:entered'],
|
|
565
|
+
short: "Your Ledger still has blank lines: a bout won against Sergeant Mott in the Training Yard, and a weigh-in at a Fishing Derby. Fill both and show me.",
|
|
566
|
+
},
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
kind: 'talk',
|
|
570
|
+
npc: SCHOLAR,
|
|
571
|
+
label: 'Take the inked pages to Scholar Aldous at the Royal Administration',
|
|
572
|
+
hint: 'Scholar Aldous keeps the archives at the Royal Administration beside the keep.',
|
|
573
|
+
say: "Two fresh pages, signed and inked. The Archive will thank you for them, in due course. Please accept this small mark of the Scholars' gratitude.",
|
|
574
|
+
},
|
|
575
|
+
],
|
|
576
|
+
done: "The Ledger is a little fuller, and so is the Archive. Take this, from the Scribes.",
|
|
577
|
+
after: "There are more pages, further out. The far ones, when you are ready.",
|
|
578
|
+
rewards: { coins: 600, xp: { explorer: 3000 } },
|
|
579
|
+
};
|
|
580
|
+
export const FAR_PAGES_QUEST = {
|
|
581
|
+
giver: SCRIBE,
|
|
582
|
+
requires: {
|
|
583
|
+
quest: 'pagesForTheBook',
|
|
584
|
+
combat: FAR_PAGES_COMBAT,
|
|
585
|
+
refuse: `The far pages come after the near ones, and want a deeper pen than yours (Combat ${FAR_PAGES_COMBAT}).`,
|
|
586
|
+
},
|
|
587
|
+
offer: "The Archive's far pages are the hard ones: a bout won against Sergeant Brack, Hask's Sled Run ridden to the bottom, and Captain Rowena's hoard opened at Fort Rook. Three lines no scribe has had the courage to ink. Fill them, and I will ink them with my best pen.",
|
|
588
|
+
accept: "Beat Sergeant Brack in the Training Yard, ride Hask's Sled Run (after The Mammoth Road) and open Rowena's hoard at Fort Rook. The Ledger tells you when each is done.",
|
|
589
|
+
decline: 'Then the far pages stay blank, and my best pen stays dry.',
|
|
590
|
+
steps: [
|
|
591
|
+
{
|
|
592
|
+
kind: 'talk',
|
|
593
|
+
npc: SCRIBE,
|
|
594
|
+
label: "Show Chief Scribe Isolde Marr that the three far lines are filled",
|
|
595
|
+
hint: "Win a bout against Sergeant Brack, ride Hask's Sled Run to the bottom and open Captain Rowena's hoard at Fort Rook, then speak to the Chief Scribe in the Guild Hall.",
|
|
596
|
+
say: "Brack, the sled and the hoard. I have been the Archive's scribe for forty years and I have never written those three lines in one hand. My best pen, then.",
|
|
597
|
+
ledger: {
|
|
598
|
+
marks: ['yard:sergeant-brack', 'sled:finish', 'fort:hoard'],
|
|
599
|
+
short: "Three lines are still blank in your Ledger: a bout won against Sergeant Brack, Hask's Sled Run ridden to the bottom, and Captain Rowena's hoard opened at Fort Rook. Fill them and show me.",
|
|
600
|
+
},
|
|
601
|
+
},
|
|
602
|
+
],
|
|
603
|
+
done: "Inked in my best hand. The Archive will remember you when the rest of us are dust.",
|
|
604
|
+
after: "The Archive is complete, as far as it can be. For now.",
|
|
605
|
+
rewards: { coins: 1500, xp: { explorer: 5000 } },
|
|
606
|
+
};
|
|
607
|
+
// ---- The Wall Walk (the Gate Captain's timed patrol) ---------------------------------------------------------------------------------
|
|
608
|
+
export const WALL_WALK_QUEST = {
|
|
609
|
+
giver: CAPTAIN,
|
|
610
|
+
requires: {
|
|
611
|
+
combat: WALL_WALK_COMBAT,
|
|
612
|
+
refuse: `The night patrol is for guards with a few fights behind them (Combat ${WALL_WALK_COMBAT}).`,
|
|
613
|
+
},
|
|
614
|
+
offer: "The night watch walks the ring road inside the walls every evening, corner to corner, and every corner must be seen before the bells. My men are short tonight. Four corners, nine minutes, and back to me before the clock runs out. Will you walk the wall?",
|
|
615
|
+
accept: "North-west corner first, then north-east, then south-east, then south-west, and back to me at the Great Gate. The ring road runs one tile inside the wall. Nine minutes, and the bells will not wait.",
|
|
616
|
+
decline: 'Then the corners go unwatched, and I shall have to walk them myself.',
|
|
617
|
+
clock: {
|
|
618
|
+
durationMs: WALL_WALK_MS,
|
|
619
|
+
warnAtMs: WALL_WALK_WARN_AT_MS,
|
|
620
|
+
warn: 'The Wall Walk: {left} left. Next: {next}.',
|
|
621
|
+
fail: "The Wall Walk: the evening bells ring before you finish. The Gate Captain will send you out again when the watch is short.",
|
|
622
|
+
},
|
|
623
|
+
steps: [
|
|
624
|
+
{
|
|
625
|
+
kind: 'reach',
|
|
626
|
+
area: WALL_WALK_POSTS.northWest,
|
|
627
|
+
at: { ...CENTRE(WALL_WALK_POSTS.northWest), label: 'the north-west corner of the ring road' },
|
|
628
|
+
label: 'Walk to the north-west corner',
|
|
629
|
+
hint: 'The north-west corner of the ring road, inside the wall, north of the Westgate Outpost.',
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
kind: 'reach',
|
|
633
|
+
area: WALL_WALK_POSTS.northEast,
|
|
634
|
+
at: { ...CENTRE(WALL_WALK_POSTS.northEast), label: 'the north-east corner of the ring road' },
|
|
635
|
+
label: 'Walk to the north-east corner',
|
|
636
|
+
hint: 'The north-east corner of the ring road, behind the Temple Gardens and the keep. Follow the north stretch of the ring road east.',
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
kind: 'reach',
|
|
640
|
+
area: WALL_WALK_POSTS.southEast,
|
|
641
|
+
at: { ...CENTRE(WALL_WALK_POSTS.southEast), label: 'the south-east corner of the ring road' },
|
|
642
|
+
label: 'Walk to the south-east corner',
|
|
643
|
+
hint: 'The south-east corner of the ring road, beyond the Noble Quarter.',
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
kind: 'reach',
|
|
647
|
+
area: WALL_WALK_POSTS.southWest,
|
|
648
|
+
at: { ...CENTRE(WALL_WALK_POSTS.southWest), label: 'the south-west corner of the ring road' },
|
|
649
|
+
label: 'Walk to the south-west corner',
|
|
650
|
+
hint: 'The south-west corner of the ring road, below the Forge and Artisan Quarter.',
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
kind: 'talk',
|
|
654
|
+
npc: CAPTAIN,
|
|
655
|
+
label: 'Report back to Gate Captain Wynn Aldern at the Great Gate',
|
|
656
|
+
hint: 'The Gate Captain stands inside the Great Gate on the west wall, south of the Royal Way.',
|
|
657
|
+
say: "Four corners, one lap, inside the bells. The watch has been trying to do that all month. Take a day's pay from the Guard, and the Guard's thanks.",
|
|
658
|
+
},
|
|
659
|
+
],
|
|
660
|
+
done: "The wall has been walked and I can sleep. Here, from the Guard.",
|
|
661
|
+
after: "I shall give the watch your lap time and see if they are ashamed.",
|
|
662
|
+
rewards: { coins: 900, xp: { explorer: 2000 }, choiceXp: { qty: 1500, skills: COMBAT_CHOICE } },
|
|
663
|
+
};
|
|
664
|
+
/** The thirteen, for storyQuests.ts to enter. */
|
|
665
|
+
export const CAPITAL_QUESTS = {
|
|
666
|
+
royalErrand: ROYAL_ERRAND_QUEST,
|
|
667
|
+
theLostSeal: LOST_SEAL_QUEST,
|
|
668
|
+
ironForTheGate: IRON_FOR_GATE_QUEST,
|
|
669
|
+
goldForTheCrown: GOLD_FOR_CROWN_QUEST,
|
|
670
|
+
silverForTheWall: SILVER_FOR_WALL_QUEST,
|
|
671
|
+
greatCookOff: GREAT_COOK_OFF_QUEST,
|
|
672
|
+
tourneyRound1: TOURNEY_ROUND_1_QUEST,
|
|
673
|
+
tourneyRound2: TOURNEY_ROUND_2_QUEST,
|
|
674
|
+
tourneyFinal: TOURNEY_FINAL_QUEST,
|
|
675
|
+
papersForTheCormorant: PAPERS_FOR_CORMORANT_QUEST,
|
|
676
|
+
pagesForTheBook: PAGES_FOR_BOOK_QUEST,
|
|
677
|
+
theFarPages: FAR_PAGES_QUEST,
|
|
678
|
+
theWallWalk: WALL_WALK_QUEST,
|
|
679
|
+
};
|
|
680
|
+
/** The journal cards (quests.ts storyMeta). */
|
|
681
|
+
export const CAPITAL_QUEST_META = {
|
|
682
|
+
royalErrand: {
|
|
683
|
+
title: 'A Letter for the Garrison',
|
|
684
|
+
description: "Carry Royal Clerk Edmund Thorne's letters to the Gate Captain at the Great Gate and the Harbour Clerk on the King's Harbour quay, and bring their replies back. Needs Combat 15.",
|
|
685
|
+
category: 'side',
|
|
686
|
+
art: { item: 'bread' },
|
|
687
|
+
},
|
|
688
|
+
theLostSeal: {
|
|
689
|
+
title: 'The Lost Seal',
|
|
690
|
+
description: "The King's seal has vanished from the Royal Administration. Follow the trail through Scholar Aldous and the pedlar to the cutthroats on the wreck coast and the lighthouse on the harbour mole. Needs A Letter for the Garrison and Combat 22.",
|
|
691
|
+
category: 'side',
|
|
692
|
+
art: { item: 'coins' },
|
|
693
|
+
},
|
|
694
|
+
ironForTheGate: {
|
|
695
|
+
title: 'Iron for the Gate',
|
|
696
|
+
description: "Forge Master Dorran Vale needs eight iron bars for the Great Gate's fittings. Smelt them at any Anvil Square furnace. Needs Blacksmithing 16.",
|
|
697
|
+
category: 'skilling',
|
|
698
|
+
art: { item: 'ironbar' },
|
|
699
|
+
},
|
|
700
|
+
goldForTheCrown: {
|
|
701
|
+
title: 'Gold for the Crown',
|
|
702
|
+
description: "The King's crown needs mending: four steel bars for the frame and two gold bars for the point. Gold ore is on the Dwarf Hold's working face. Needs Iron for the Gate and Blacksmithing 30.",
|
|
703
|
+
category: 'skilling',
|
|
704
|
+
art: { item: 'goldbar' },
|
|
705
|
+
},
|
|
706
|
+
silverForTheWall: {
|
|
707
|
+
title: 'Silver for the Wall',
|
|
708
|
+
description: "The Castle Guard wants silver against the dead: three silver bars for the stock room and a silver dagger forged by you. Needs Gold for the Crown and Blacksmithing 34.",
|
|
709
|
+
category: 'skilling',
|
|
710
|
+
art: { item: 'silverdagger' },
|
|
711
|
+
},
|
|
712
|
+
greatCookOff: {
|
|
713
|
+
title: 'The Great Cook-Off',
|
|
714
|
+
description: "Cook a fish, a meat dish and a loaf, have Nan Brisk, Joss Tinker and Bea Holloway taste them in the Market Square, and pick your prize from Master Cook Hob Garrick. Needs Cooking 25.",
|
|
715
|
+
category: 'skilling',
|
|
716
|
+
art: { item: 'cookedtrout' },
|
|
717
|
+
},
|
|
718
|
+
tourneyRound1: {
|
|
719
|
+
title: "The King's Tourney: Squires' Round",
|
|
720
|
+
description: "Win a bout against Sergeant Hale and one against Sergeant Mott in the Capital's Training Yard for Tourney Marshal Cade Brightwater. Needs Combat 15.",
|
|
721
|
+
category: 'combat',
|
|
722
|
+
art: { npc: 'resident' },
|
|
723
|
+
},
|
|
724
|
+
tourneyRound2: {
|
|
725
|
+
title: "The King's Tourney: Knights' Round",
|
|
726
|
+
description: "Win a bout against Sergeant Brack, who lies about his stance. Needs the Squires' Round and Combat 24.",
|
|
727
|
+
category: 'combat',
|
|
728
|
+
art: { npc: 'resident' },
|
|
729
|
+
},
|
|
730
|
+
tourneyFinal: {
|
|
731
|
+
title: "The King's Tourney: The Final",
|
|
732
|
+
description: "Win the Final against Sergeant Vane and claim the champion's prize. Needs the Knights' Round and Combat 32.",
|
|
733
|
+
category: 'combat',
|
|
734
|
+
art: { npc: 'resident' },
|
|
735
|
+
},
|
|
736
|
+
papersForTheCormorant: {
|
|
737
|
+
title: "Papers for the Cormorant",
|
|
738
|
+
description: "Carry Harbour Clerk Tamsin Rell's papers by boat to Branson at Hope Beach and on to Old Merrick at Blackwake Cove, and tell her what they said. Needs The Gull's Map and Combat 20.",
|
|
739
|
+
category: 'exploration',
|
|
740
|
+
art: { npc: 'harbourmaster' },
|
|
741
|
+
},
|
|
742
|
+
pagesForTheBook: {
|
|
743
|
+
title: 'Pages for the Book',
|
|
744
|
+
description: "Fill two blank lines of your Explorer's Ledger (a bout won against Sergeant Mott, a Fishing Derby weigh-in) and show the Chief Scribe in the Guild Hall. Needs Combat 24.",
|
|
745
|
+
category: 'exploration',
|
|
746
|
+
art: { npc: 'capitalscholar' },
|
|
747
|
+
},
|
|
748
|
+
theFarPages: {
|
|
749
|
+
title: 'The Far Pages',
|
|
750
|
+
description: "Fill three harder lines of your Explorer's Ledger (Sergeant Brack, Hask's Sled Run, Rowena's hoard) for the Chief Scribe. Needs Pages for the Book and Combat 32.",
|
|
751
|
+
category: 'exploration',
|
|
752
|
+
art: { npc: 'capitalscholar' },
|
|
753
|
+
},
|
|
754
|
+
theWallWalk: {
|
|
755
|
+
title: 'The Wall Walk',
|
|
756
|
+
description: "Against the clock: walk the four corners of the Capital's ring road, inside the walls, for Gate Captain Wynn Aldern before the bells. Needs Combat 25.",
|
|
757
|
+
category: 'combat',
|
|
758
|
+
art: { npc: 'resident' },
|
|
759
|
+
},
|
|
760
|
+
};
|
|
761
|
+
/** Where each giver is, for the quest guide (backend questGuide.ts GIVER_PLACES). */
|
|
762
|
+
export const CAPITAL_QUEST_GIVER_PLACES = {
|
|
763
|
+
royalErrand: 'Royal Clerk Edmund Thorne stands at the Royal Administration, at the east end of the Royal Way beside the keep in the Capital.',
|
|
764
|
+
theLostSeal: 'Royal Clerk Edmund Thorne stands at the Royal Administration, at the east end of the Royal Way beside the keep in the Capital.',
|
|
765
|
+
ironForTheGate: 'Forge Master Dorran Vale stands by the anvil shed south of Anvil Square in the Capital\'s Forge and Artisan Quarter.',
|
|
766
|
+
goldForTheCrown: 'Forge Master Dorran Vale stands by the anvil shed south of Anvil Square in the Capital\'s Forge and Artisan Quarter.',
|
|
767
|
+
silverForTheWall: 'Forge Master Dorran Vale stands by the anvil shed south of Anvil Square in the Capital\'s Forge and Artisan Quarter.',
|
|
768
|
+
greatCookOff: 'Master Cook Hob Garrick works the Westgate cookhouse, just inside the Capital\'s Great Gate. The judges are in the Market Square.',
|
|
769
|
+
tourneyRound1: "Tourney Marshal Cade Brightwater stands in the Training Yard of the Capital's Military Ward, north of the sergeants' lane.",
|
|
770
|
+
tourneyRound2: "Tourney Marshal Cade Brightwater stands in the Training Yard of the Capital's Military Ward, north of the sergeants' lane.",
|
|
771
|
+
tourneyFinal: "Tourney Marshal Cade Brightwater stands in the Training Yard of the Capital's Military Ward, north of the sergeants' lane.",
|
|
772
|
+
papersForTheCormorant: "Harbour Clerk Tamsin Rell stands on the quay of the King's Harbour, outside the Capital's East Gate.",
|
|
773
|
+
pagesForTheBook: "Chief Scribe Isolde Marr keeps the Guild Hall near the Grand Exchange in the Capital's Trade District.",
|
|
774
|
+
theFarPages: "Chief Scribe Isolde Marr keeps the Guild Hall near the Grand Exchange in the Capital's Trade District.",
|
|
775
|
+
theWallWalk: 'Gate Captain Wynn Aldern stands inside the Great Gate on the west wall of the Capital.',
|
|
776
|
+
};
|
|
777
|
+
//# sourceMappingURL=capitalQuests.js.map
|