@dreadwood-types/types 0.1.274 → 0.1.275
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/areaGates.d.ts.map +1 -1
- package/dist/areaGates.js +11 -0
- package/dist/areaGates.js.map +1 -1
- package/dist/areaTransitions.d.ts +1 -1
- package/dist/areaTransitions.d.ts.map +1 -1
- package/dist/areaTransitions.js +11 -0
- package/dist/areaTransitions.js.map +1 -1
- package/dist/attackableNpcs.d.ts.map +1 -1
- package/dist/attackableNpcs.js +2 -0
- package/dist/attackableNpcs.js.map +1 -1
- package/dist/bossSignatures.d.ts +1 -1
- package/dist/bossSignatures.d.ts.map +1 -1
- package/dist/bossSignatures.js +6 -0
- package/dist/bossSignatures.js.map +1 -1
- package/dist/bounty.d.ts +1 -1
- package/dist/bounty.d.ts.map +1 -1
- package/dist/bounty.js +3 -0
- package/dist/bounty.js.map +1 -1
- package/dist/campTraders.d.ts.map +1 -1
- package/dist/campTraders.js +12 -0
- package/dist/campTraders.js.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/explorerLedger.d.ts +2 -1
- package/dist/explorerLedger.d.ts.map +1 -1
- package/dist/explorerLedger.js +7 -0
- package/dist/explorerLedger.js.map +1 -1
- package/dist/groundItems.d.ts.map +1 -1
- package/dist/groundItems.js +2 -0
- package/dist/groundItems.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/landmarks.d.ts.map +1 -1
- package/dist/landmarks.js +4 -0
- package/dist/landmarks.js.map +1 -1
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +25 -0
- package/dist/quests.js.map +1 -1
- package/dist/storyQuests.d.ts +1 -1
- package/dist/storyQuests.d.ts.map +1 -1
- package/dist/storyQuests.js +16 -0
- package/dist/storyQuests.js.map +1 -1
- package/dist/tollRoad.d.ts +368 -0
- package/dist/tollRoad.d.ts.map +1 -0
- package/dist/tollRoad.js +368 -0
- package/dist/tollRoad.js.map +1 -0
- package/dist/tollRoadQuests.d.ts +60 -0
- package/dist/tollRoadQuests.d.ts.map +1 -0
- package/dist/tollRoadQuests.js +233 -0
- package/dist/tollRoadQuests.js.map +1 -0
- package/package.json +2 -2
package/dist/tollRoad.js
ADDED
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE TOLL ROAD (Highwayman's Ridge phase 3, T79 2026-10-14; plan `.cursor/task-plans/2026-10-14-t79-toll-road.md`; levels 18-26):
|
|
3
|
+
* the Fishery road past the Redcaps' hold gets a second life. Every Road Pays broke Black Tom; the gang did not die, it moved its
|
|
4
|
+
* books and its coin to a Captain in the cellar under the longhouse and went back to taxing the road from two camps. This adds
|
|
5
|
+
*
|
|
6
|
+
* - the RIDGE TOLL HOUSE, the Calverton guard's outpost on the road's west verge south of the cutting: Toll-Warden Ansel Pike (the
|
|
7
|
+
* chain's giver), a camp cook (campTraders.ts), a Bounty Board (the generic `bountyboard`: Redcap and Black Tom contracts) and the
|
|
8
|
+
* road signs that point at Highstone, Webfen and Gullhook (those three are joined by a sign only, never by a road we build);
|
|
9
|
+
* - two REDCAP CAMPS in the grass east of the cutting, Stile Camp (the toll camp) and Hollow Camp (where the payroll was cached),
|
|
10
|
+
* with the footpads and archers of the Ridge's own kinds;
|
|
11
|
+
* - the PAYROLL TRAIL, five sets of cart tracks from the wagon wreck at the road to Hollow Camp (quest props touched in order, as the
|
|
12
|
+
* fox tracks of the hunting quests are followed);
|
|
13
|
+
* - Whisper Pim, an informer in the reeds by the pond, who sells the way into the cellar for a favour;
|
|
14
|
+
* - the RIDGE CELLAR, a small dungeon in the underground strip entered by a hatch in the Ridge's yard (a Redcap Captain boss with ONE
|
|
15
|
+
* telegraphed blow you can step clear of, `toll-cleave`, and a store room of guards);
|
|
16
|
+
* - the REDCAP PATROL, a timed event on the road itself, read off the wall clock (never rolled, never stored) like the Passing Bay's raid;
|
|
17
|
+
* - the Explorer's Ledger page "The Toll Road".
|
|
18
|
+
*
|
|
19
|
+
* The quests are in tollRoadQuests.ts. EVERY NUMBER HERE (levels, counts, pay, timings) IS A PLACEHOLDER for the balance pass.
|
|
20
|
+
* Every position is a WORLD tile (the underground cellar is raw strip tiles, x >= UNDERGROUND_ORIGIN_X). Models are stand-ins from the
|
|
21
|
+
* kit (logged in dreadwoods-backend/upgrades). The road's verge (x 788-796 along the whole Fishery road) stays clear: calverton-road-smoke.
|
|
22
|
+
*/
|
|
23
|
+
import { UNDERGROUND_ORIGIN_X, toLocalZ } from './constants.js';
|
|
24
|
+
export const TOLL_ROAD_NAME = 'The Toll Road';
|
|
25
|
+
export const TOLL_HOUSE_NAME = 'The Ridge Toll House';
|
|
26
|
+
// ---- The Ridge Toll House (the outpost) ----------------------------------------------------------------------------------------------
|
|
27
|
+
/** The outpost's ground, west of the Fishery road (x 788-796 is the verge and stays clear) and south of the cutting's west ridge (to z 480). */
|
|
28
|
+
export const TOLL_HOUSE = { minX: 764, maxX: 786, minZ: 483, maxZ: 499 };
|
|
29
|
+
/** The track from the outpost out to the road (surface only: no entity may stand within 4 of x 792). */
|
|
30
|
+
export const TOLL_HOUSE_LINK = { minX: 787, maxX: 791, minZ: 489, maxZ: 491 };
|
|
31
|
+
/** The outpost's pieces: a cook's tent and fire, the Bounty Board on the track side, stores, benches and lanterns. */
|
|
32
|
+
export const TOLL_HOUSE_PIECES = [
|
|
33
|
+
{ id: 'tr-house-tent', kind: 'dreadprop', style: 'tent-face0', x: 770, z: 489 },
|
|
34
|
+
{ id: 'tr-house-fire', kind: 'campfire', style: 'beach-pit', x: 776, z: 493, scale: 1 },
|
|
35
|
+
{ id: 'tr-house-board', kind: 'bountyboard', style: 'wall-s', x: 781, z: 490 },
|
|
36
|
+
{ id: 'tr-house-crates', kind: 'dreadmodel', style: 'hbcrates-s', x: 768, z: 495 },
|
|
37
|
+
{ id: 'tr-house-woodpile', kind: 'dreadmodel', style: 'woodpile-s', x: 773, z: 496 },
|
|
38
|
+
{ id: 'tr-house-planks', kind: 'dreadmodel', style: 'plankstack-s', x: 766, z: 491 },
|
|
39
|
+
{ id: 'tr-house-bench', kind: 'dreadmodel', style: 'hbbench-s', x: 778, z: 495 },
|
|
40
|
+
{ id: 'tr-house-banner', kind: 'dreadprop', style: 'banner', x: 784, z: 485 },
|
|
41
|
+
{ id: 'tr-house-barrel', kind: 'barrel', style: 'barrel', x: 767, z: 487, scale: 1 },
|
|
42
|
+
{ id: 'tr-house-lantern-n', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 785, z: 488 },
|
|
43
|
+
{ id: 'tr-house-lantern-s', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 785, z: 497 },
|
|
44
|
+
{ id: 'tr-house-lantern-w', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 765, z: 493 },
|
|
45
|
+
];
|
|
46
|
+
/** The signs. The Highstone, Webfen and Gullhook signs are the only things that join those places to this road. */
|
|
47
|
+
export const TOLL_ROAD_SIGNS = [
|
|
48
|
+
{
|
|
49
|
+
id: 'tr-sign-house',
|
|
50
|
+
x: 786,
|
|
51
|
+
z: 491,
|
|
52
|
+
text: "The Ridge Toll House. Calverton's guard keeps the road through the cutting: a camp cook, a Bounty Board and Toll-Warden Ansel Pike. Redcaps hold the camps east of the road and the hold on the ridge. Combat 18+.",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'tr-sign-highstone',
|
|
56
|
+
x: 786,
|
|
57
|
+
z: 494,
|
|
58
|
+
text: 'Highstone, the ring of standing stones on the open hill east of the Ridge: a crowd boss every few hours (Combat 20 to 30). Follow the hill east past the Redcap camps.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'tr-sign-fen',
|
|
62
|
+
x: 786,
|
|
63
|
+
z: 497,
|
|
64
|
+
text: 'The fen boards of Webfen Causeway run east from this road, a long walk south of here. Gullhook Head and the Windward coast lie far to the north-east beyond them. Both are a long way for the green.',
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
/** Standable tiles (teleport links, smokes). */
|
|
68
|
+
export const TOLL_ROAD_STANDS = {
|
|
69
|
+
house: { x: 777, z: 490 },
|
|
70
|
+
road: { x: 792, z: 490 },
|
|
71
|
+
stile: { x: 816, z: 466 },
|
|
72
|
+
hollow: { x: 836, z: 485 },
|
|
73
|
+
wagon: { x: 800, z: 436 },
|
|
74
|
+
pond: { x: 807, z: 490 },
|
|
75
|
+
hatch: { x: 755, z: 449 },
|
|
76
|
+
cellar: { x: UNDERGROUND_ORIGIN_X + 172, z: 551 },
|
|
77
|
+
};
|
|
78
|
+
// ---- The people ----------------------------------------------------------------------------------------------------------------------
|
|
79
|
+
export const TOLL_WARDEN_KIND = 'tollwarden';
|
|
80
|
+
export const TOLL_WARDEN_NAME = 'Toll-Warden Ansel Pike';
|
|
81
|
+
export const TOLL_WARDEN = { id: 'tr-warden', kind: TOLL_WARDEN_KIND, name: TOLL_WARDEN_NAME, x: 779, z: 489, faceX: 786, faceZ: 491, leash: 1 };
|
|
82
|
+
export const RIDGE_INFORMER_KIND = 'ridgeinformer';
|
|
83
|
+
export const RIDGE_INFORMER_NAME = 'Whisper Pim';
|
|
84
|
+
export const RIDGE_INFORMER = { id: 'tr-informer', kind: RIDGE_INFORMER_KIND, name: RIDGE_INFORMER_NAME, x: 807, z: 490, faceX: 803, faceZ: 488, leash: 1 };
|
|
85
|
+
export function isTollRoadFolkKind(kind) {
|
|
86
|
+
return kind === TOLL_WARDEN_KIND || kind === RIDGE_INFORMER_KIND;
|
|
87
|
+
}
|
|
88
|
+
/** What a click says when it is not a talk (never an attack). */
|
|
89
|
+
export const TOLL_ROAD_FOLK_LINES = {
|
|
90
|
+
[TOLL_WARDEN_KIND]: 'Toll-Warden Pike keeps a tally on a slate and does not look up. "Carts in, carts out. It was a short list until the Redcaps learned to count."',
|
|
91
|
+
[RIDGE_INFORMER_KIND]: 'Whisper Pim glances at the reeds and then at you. "Not here. Not now. Somebody is always counting who talks."',
|
|
92
|
+
};
|
|
93
|
+
/** Stile Camp: the toll camp, where the road's coin is counted. */
|
|
94
|
+
export const STILE_CAMP = {
|
|
95
|
+
id: 'stile-camp',
|
|
96
|
+
name: 'Stile Camp',
|
|
97
|
+
box: { minX: 810, maxX: 824, minZ: 458, maxZ: 472 },
|
|
98
|
+
hold: { minX: 809, maxX: 825, minZ: 457, maxZ: 473 },
|
|
99
|
+
redcaps: [{ x: 814, z: 462 }, { x: 819, z: 462 }, { x: 813, z: 468 }, { x: 820, z: 469 }],
|
|
100
|
+
archers: [{ x: 817, z: 460 }, { x: 822, z: 466 }],
|
|
101
|
+
pieces: [
|
|
102
|
+
{ id: 'tr-stile-tent', kind: 'dreadprop', style: 'tent-face90', x: 817, z: 465 },
|
|
103
|
+
{ id: 'tr-stile-fire', kind: 'campfire', style: 'beach-pit', x: 815, z: 465, scale: 1 },
|
|
104
|
+
{ id: 'tr-stile-crates', kind: 'dreadmodel', style: 'hbcrates-s', x: 822, z: 463 },
|
|
105
|
+
{ id: 'tr-stile-barrel', kind: 'barrel', style: 'barrel', x: 812, z: 466, scale: 1 },
|
|
106
|
+
{ id: 'tr-stile-banner', kind: 'dreadprop', style: 'banner', x: 811, z: 460 },
|
|
107
|
+
{ id: 'tr-stile-bench', kind: 'dreadmodel', style: 'hbbench-s', x: 819, z: 467 },
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
/** Hollow Camp: the dip where the payroll was cached. */
|
|
111
|
+
export const HOLLOW_CAMP = {
|
|
112
|
+
id: 'hollow-camp',
|
|
113
|
+
name: 'Hollow Camp',
|
|
114
|
+
box: { minX: 828, maxX: 844, minZ: 478, maxZ: 494 },
|
|
115
|
+
hold: { minX: 827, maxX: 845, minZ: 477, maxZ: 495 },
|
|
116
|
+
redcaps: [{ x: 832, z: 482 }, { x: 838, z: 482 }, { x: 831, z: 489 }],
|
|
117
|
+
archers: [{ x: 836, z: 480 }, { x: 841, z: 487 }],
|
|
118
|
+
pieces: [
|
|
119
|
+
{ id: 'tr-hollow-tent', kind: 'dreadprop', style: 'tent-face180', x: 834, z: 486 },
|
|
120
|
+
{ id: 'tr-hollow-fire', kind: 'campfire', style: 'beach-pit', x: 837, z: 488, scale: 1 },
|
|
121
|
+
{ id: 'tr-hollow-crates', kind: 'dreadmodel', style: 'hbcrates-s', x: 830, z: 486 },
|
|
122
|
+
{ id: 'tr-hollow-barrel', kind: 'barrel', style: 'barrel', x: 842, z: 484, scale: 1 },
|
|
123
|
+
{ id: 'tr-hollow-banner', kind: 'dreadprop', style: 'banner', x: 829, z: 480 },
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
export const REDCAP_CAMPS = [STILE_CAMP, HOLLOW_CAMP];
|
|
127
|
+
/** The camps' footpads and archers walk with these ids so a death, a respawn and the aggro tick can tell them from the yard's. */
|
|
128
|
+
export const TOLL_CAMP_ID_PREFIX = 'trc-';
|
|
129
|
+
/** The camp whose hold a creature of this spawn tile belongs to, or null. */
|
|
130
|
+
export function redcapCampAt(x, z) {
|
|
131
|
+
return REDCAP_CAMPS.find((c) => x >= c.hold.minX && x <= c.hold.maxX && z >= c.hold.minZ && z <= c.hold.maxZ) ?? null;
|
|
132
|
+
}
|
|
133
|
+
/** True when the player stands inside the hold of the camp the creature (spawned at sx, sz) keeps. */
|
|
134
|
+
export function inOwnCampHold(sx, sz, px, pz) {
|
|
135
|
+
const camp = redcapCampAt(sx, sz);
|
|
136
|
+
return !!camp && px >= camp.hold.minX && px <= camp.hold.maxX && pz >= camp.hold.minZ && pz <= camp.hold.maxZ;
|
|
137
|
+
}
|
|
138
|
+
// ---- The payroll trail ---------------------------------------------------------------------------------------------------------------
|
|
139
|
+
/** The wagon wreck at the road's east verge (dressing, not a quest prop): the trail starts beside it. */
|
|
140
|
+
export const PAYROLL_WAGON = { id: 'tr-payroll-wagon', kind: 'dreadmodel', style: 'fishcartwreck-e', x: 800, z: 434 };
|
|
141
|
+
export const TR_PROP = { tally: 'tolltally', tracks: 'tolltracks', chest: 'tollpayroll', drop: 'tolldrop', book: 'tollbook' };
|
|
142
|
+
/** The three tally boards (quest 1): at the Toll House, east of the road by the pond, and at Stile Camp's gate. */
|
|
143
|
+
export const TR_TALLY_HOUSE = { id: 'tr-quest-tally-house', x: 783, z: 487, style: `${TR_PROP.tally}:house` };
|
|
144
|
+
export const TR_TALLY_POND = { id: 'tr-quest-tally-pond', x: 812, z: 480, style: `${TR_PROP.tally}:pond` };
|
|
145
|
+
export const TR_TALLY_STILE = { id: 'tr-quest-tally-stile', x: 809, z: 465, style: `${TR_PROP.tally}:stile` };
|
|
146
|
+
export const TR_TALLIES = [TR_TALLY_HOUSE, TR_TALLY_POND, TR_TALLY_STILE];
|
|
147
|
+
/** The five sets of cart tracks, from the wagon to Hollow Camp (the trail skirts Stile Camp's north-east corner). Touch them in order. */
|
|
148
|
+
export const TR_TRACKS = [
|
|
149
|
+
{ id: 'tr-quest-tracks-1', x: 807, z: 438, style: `${TR_PROP.tracks}:1` },
|
|
150
|
+
{ id: 'tr-quest-tracks-2', x: 815, z: 445, style: `${TR_PROP.tracks}:2` },
|
|
151
|
+
{ id: 'tr-quest-tracks-3', x: 824, z: 453, style: `${TR_PROP.tracks}:3` },
|
|
152
|
+
{ id: 'tr-quest-tracks-4', x: 831, z: 464, style: `${TR_PROP.tracks}:4` },
|
|
153
|
+
{ id: 'tr-quest-tracks-5', x: 836, z: 474, style: `${TR_PROP.tracks}:5` },
|
|
154
|
+
];
|
|
155
|
+
export const TR_TRACKS_ORDER = TR_TRACKS.map((t) => t.style);
|
|
156
|
+
/** The cached payroll in Hollow Camp: a strongbox by the tent (gives the satchel). */
|
|
157
|
+
export const TR_PAYROLL_CHEST = { id: 'tr-quest-payroll', x: 838, z: 485, style: `${TR_PROP.chest}:chest` };
|
|
158
|
+
/** The dead drop by the pond: a hollow stump (gives the cellar key). */
|
|
159
|
+
export const TR_DEAD_DROP = { id: 'tr-quest-drop', x: 809, z: 489, style: `${TR_PROP.drop}:stump` };
|
|
160
|
+
/** The Captain's toll book on his table in the cellar hall (quest 4). */
|
|
161
|
+
export const TR_TOLL_BOOK = { id: 'tr-quest-book', x: UNDERGROUND_ORIGIN_X + 172, z: 520, style: `${TR_PROP.book}:book` };
|
|
162
|
+
export const TOLL_ROAD_QUEST_PROPS = [...TR_TALLIES, ...TR_TRACKS, TR_PAYROLL_CHEST, TR_DEAD_DROP, TR_TOLL_BOOK];
|
|
163
|
+
/** The surface props (everything except the cellar's book, which the cellar's carve places underground). */
|
|
164
|
+
export const TOLL_ROAD_SURFACE_QUEST_PROPS = TOLL_ROAD_QUEST_PROPS.filter((p) => p !== TR_TOLL_BOOK);
|
|
165
|
+
/** The kit model a Toll Road quest prop draws with (CAPITAL_BUILDING_MODELS stand-ins), or null if not one of them. */
|
|
166
|
+
export function tollRoadPropModel(prop) {
|
|
167
|
+
if (prop === TR_PROP.tally)
|
|
168
|
+
return 'questclue';
|
|
169
|
+
if (prop === TR_PROP.tracks)
|
|
170
|
+
return 'questhogtracks';
|
|
171
|
+
if (prop === TR_PROP.chest)
|
|
172
|
+
return 'evoldstorechest';
|
|
173
|
+
if (prop === TR_PROP.drop)
|
|
174
|
+
return 'questclue';
|
|
175
|
+
if (prop === TR_PROP.book)
|
|
176
|
+
return 'questledger';
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
export const TOLL_ROAD_QUEST_PROP_NAMES = {
|
|
180
|
+
[TR_TALLY_HOUSE.style]: 'Toll House Tally Board',
|
|
181
|
+
[TR_TALLY_POND.style]: 'Pond Road Tally Board',
|
|
182
|
+
[TR_TALLY_STILE.style]: 'Stile Camp Tally Board',
|
|
183
|
+
[TR_TRACKS[0].style]: 'Cart Tracks (by the wagon)',
|
|
184
|
+
[TR_TRACKS[1].style]: 'Cart Tracks (second set)',
|
|
185
|
+
[TR_TRACKS[2].style]: 'Cart Tracks (third set)',
|
|
186
|
+
[TR_TRACKS[3].style]: 'Cart Tracks (fourth set)',
|
|
187
|
+
[TR_TRACKS[4].style]: 'Cart Tracks (by the hollow)',
|
|
188
|
+
[TR_PAYROLL_CHEST.style]: 'The Cached Payroll',
|
|
189
|
+
[TR_DEAD_DROP.style]: "Pim's Hollow Stump",
|
|
190
|
+
[TR_TOLL_BOOK.style]: "The Captain's Toll Book",
|
|
191
|
+
};
|
|
192
|
+
/** What a prop says when no step wants it. */
|
|
193
|
+
export const TOLL_ROAD_PROP_IDLE_LINES = {
|
|
194
|
+
[TR_PROP.tally]: 'A slate on a post, ticked in chalk: carts through, carts missing. Somebody has not been keeping up.',
|
|
195
|
+
[TR_PROP.tracks]: 'Deep wheel ruts and a scatter of boot prints: a heavy wagon came this way, and a lot of men walked beside it.',
|
|
196
|
+
[TR_PROP.chest]: 'A strongbox with its lock hammered open. Whatever it held is long gone.',
|
|
197
|
+
[TR_PROP.drop]: 'A hollow stump with a flat stone over it. It looks like nothing, which is the point.',
|
|
198
|
+
[TR_PROP.book]: 'A fat book chained to a table. Every cart, every toll, every name.',
|
|
199
|
+
};
|
|
200
|
+
export const TOLL_ROAD_WRONG_TRACKS_NOTICE = 'These are not the tracks you were following: the ruts here belong to a lighter cart. Go back to the wagon and pick the trail up again, in order.';
|
|
201
|
+
// ---- Items ---------------------------------------------------------------------------------------------------------------------------
|
|
202
|
+
export const PAYROLL_SATCHEL_KIND = 'payrollsatchet';
|
|
203
|
+
export const CELLAR_KEY_KIND = 'cellarkey';
|
|
204
|
+
export const TOLL_ROAD_QUEST_ITEM_KINDS = [PAYROLL_SATCHEL_KIND, CELLAR_KEY_KIND];
|
|
205
|
+
export const TOLL_ROAD_QUEST_ITEM_NAMES = {
|
|
206
|
+
[PAYROLL_SATCHEL_KIND]: "Calverton's Payroll Satchel",
|
|
207
|
+
[CELLAR_KEY_KIND]: 'Ridge Cellar Key',
|
|
208
|
+
};
|
|
209
|
+
export const TOLL_ROAD_QUEST_ITEM_NOTES = {
|
|
210
|
+
[PAYROLL_SATCHEL_KIND]: "The guard's missing wages in a stitched leather satchel, cut out of Hollow Camp's cache. Toll-Warden Pike wants it back.",
|
|
211
|
+
[CELLAR_KEY_KIND]: "A small black key on a greasy cord. Whisper Pim swears it fits the hatch in the Ridge yard's north-west corner, and that the Captain does not know it was copied.",
|
|
212
|
+
};
|
|
213
|
+
// ---- The Ridge cellar (underground) --------------------------------------------------------------------------------------------------
|
|
214
|
+
/** The hatch in the Ridge yard (a `caveentrance`, kit stair model facing south; the standard gate asks Combat + the key) and where it lands you. */
|
|
215
|
+
export const RIDGE_CELLAR_MOUTH = { x: 755, z: 447, style: 'wlhaltstair-s' };
|
|
216
|
+
export const RIDGE_CELLAR_OUTSIDE = { x: 755, z: 449 };
|
|
217
|
+
export const RIDGE_CELLAR_COMBAT_LEVEL = 22;
|
|
218
|
+
export const CELLAR_CX = UNDERGROUND_ORIGIN_X + 172;
|
|
219
|
+
/** The rooms, south to north: the stair vestibule, the store room (guards), a short passage, the Captain's hall. Raw strip tiles. */
|
|
220
|
+
export const CELLAR_VESTIBULE = { cx: CELLAR_CX, minZ: 547, maxZ: 555, halfW: 3, floor: 'stair-vestibule' };
|
|
221
|
+
export const CELLAR_STORE = { cx: CELLAR_CX, minZ: 536, maxZ: 546, halfW: 6, floor: 'guard-post', props: 'guard-supplies' };
|
|
222
|
+
export const CELLAR_PASSAGE = { cx: CELLAR_CX, minZ: 532, maxZ: 535, halfW: 2, floor: 'worked-flagstone' };
|
|
223
|
+
export const CELLAR_HALL = { cx: CELLAR_CX, minZ: 514, maxZ: 531, halfW: 8, floor: 'worked-flagstone', props: 'guard-supplies' };
|
|
224
|
+
/** The way back up (the same kit stair, facing north, in the vestibule's south end) and where a player arrives. */
|
|
225
|
+
export const RIDGE_CELLAR_EXIT = { x: CELLAR_CX, z: 556, style: 'wlhaltstair-n' };
|
|
226
|
+
export const RIDGE_CELLAR_ENTRY = { x: CELLAR_CX, z: 551 };
|
|
227
|
+
/** The whole cellar (for the aggro rule, the quest's reach step and the isLowerKingdoms mapping). */
|
|
228
|
+
export const RIDGE_CELLAR_BOX = { minX: CELLAR_CX - 10, maxX: CELLAR_CX + 10, minZ: 512, maxZ: 560 };
|
|
229
|
+
export function inRidgeCellar(x, z) {
|
|
230
|
+
const b = RIDGE_CELLAR_BOX;
|
|
231
|
+
return x >= b.minX && x <= b.maxX && z >= b.minZ && z <= b.maxZ;
|
|
232
|
+
}
|
|
233
|
+
/** The Captain's hall, where the quest's reach step lands. */
|
|
234
|
+
export const RIDGE_CELLAR_HALL_AREA = { minX: CELLAR_CX - 8, maxX: CELLAR_CX + 8, minZ: CELLAR_HALL.minZ, maxZ: CELLAR_HALL.maxZ };
|
|
235
|
+
export function ridgeCellarDoorEnd(style, x, z) {
|
|
236
|
+
if (style === RIDGE_CELLAR_MOUTH.style && x === RIDGE_CELLAR_MOUTH.x && z === RIDGE_CELLAR_MOUTH.z)
|
|
237
|
+
return 'down';
|
|
238
|
+
if (style === RIDGE_CELLAR_EXIT.style && x === RIDGE_CELLAR_EXIT.x && z === RIDGE_CELLAR_EXIT.z)
|
|
239
|
+
return 'up';
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
export const RIDGE_CELLAR_DOWN_LABEL = 'Lift the cellar hatch';
|
|
243
|
+
export const RIDGE_CELLAR_UP_LABEL = 'Climb up to the Ridge yard';
|
|
244
|
+
export const RIDGE_CELLAR_DOWN_TEXT = 'You lift the hatch and go down the cellar stair. Cold stone, lamp oil and a smell of old cheese and gun-metal. Somebody down here is counting.';
|
|
245
|
+
export const RIDGE_CELLAR_UP_TEXT = 'You climb up into the Ridge yard and the daylight. The Redcaps are still where you left them.';
|
|
246
|
+
export const RIDGE_CELLAR_DOWN_TITLE = 'The Ridge Cellar';
|
|
247
|
+
export const RIDGE_CELLAR_UP_TITLE = 'The Ridge Yard';
|
|
248
|
+
/** The cellar's guards: the Ridge's own footpads and an archer in the store room, one archer in the hall. They hold the rooms they stand in. */
|
|
249
|
+
export const CELLAR_GUARD_ID_PREFIX = 'trk-';
|
|
250
|
+
export const CELLAR_REDCAPS = [{ x: CELLAR_CX - 3, z: 540 }, { x: CELLAR_CX + 3, z: 543 }];
|
|
251
|
+
export const CELLAR_ARCHERS = [{ x: CELLAR_CX + 4, z: 538 }, { x: CELLAR_CX - 5, z: 524 }];
|
|
252
|
+
/** The Redcap Captain: a boss in the hall, one telegraphed blow (bossSignatures.ts `toll-cleave`), back after four minutes. */
|
|
253
|
+
export const REDCAP_CAPTAIN_KIND = 'redcapcaptain';
|
|
254
|
+
export const REDCAP_CAPTAIN_NAME = 'Redcap Captain Dorran Voss';
|
|
255
|
+
export const REDCAP_CAPTAIN = {
|
|
256
|
+
name: REDCAP_CAPTAIN_NAME,
|
|
257
|
+
level: [26, 26],
|
|
258
|
+
maxHit: 14,
|
|
259
|
+
healthFactor: 1.4,
|
|
260
|
+
respawnMs: 240_000,
|
|
261
|
+
aggro: 7,
|
|
262
|
+
leash: 12,
|
|
263
|
+
x: CELLAR_CX,
|
|
264
|
+
z: 522,
|
|
265
|
+
spawnLeash: 2,
|
|
266
|
+
text: 'Captain Voss looks up from his book. "The Ridge pays. It always pays. Who sent you, the guard or the sea?"',
|
|
267
|
+
note: "Black Tom's captain, a heavy man in a red tabard who counts coin at a table in the cellar hall. Every fourth blow is a cleave, announced a full turn ahead and twice an ordinary hit: step out of his reach before it lands and it misses. Two footpads and an archer hold the store room before him.",
|
|
268
|
+
};
|
|
269
|
+
export function isTollRoadHostileKind(kind) {
|
|
270
|
+
return kind === REDCAP_CAPTAIN_KIND;
|
|
271
|
+
}
|
|
272
|
+
// ---- The Redcap patrol (a timer on the road) -----------------------------------------------------------------------------------------
|
|
273
|
+
/**
|
|
274
|
+
* The Redcaps send a patrol down the cutting four times a day, at fixed UTC times (06:20, 12:20, 18:20, 00:20), for twelve minutes each.
|
|
275
|
+
* Read off the wall clock like the Passing Bay's raid: nothing rolled or stored, so every server agrees and a restart changes nothing.
|
|
276
|
+
* The squad is a small copy of the Random World Events engine's stream (scaled levels, lighter than a lone creature of the level, never
|
|
277
|
+
* respawning in place, leaving with the last player).
|
|
278
|
+
*/
|
|
279
|
+
export const REDCAP_PATROL = {
|
|
280
|
+
periodMs: 6 * 3_600_000,
|
|
281
|
+
/** Minutes past 00:00 UTC the first window opens at. */
|
|
282
|
+
offsetMs: 20 * 60_000,
|
|
283
|
+
durationMs: 12 * 60_000,
|
|
284
|
+
kind: 'redcap',
|
|
285
|
+
archerKind: 'redcaparcher',
|
|
286
|
+
name: 'Redcap patrol',
|
|
287
|
+
levels: [15, 26],
|
|
288
|
+
/** Alive at once with one player on the road, plus `perExtraPlayer` for each more (twice `cap` at most). */
|
|
289
|
+
cap: 3,
|
|
290
|
+
perExtraPlayer: 1,
|
|
291
|
+
/** One more every this long while the road has someone on it. */
|
|
292
|
+
everyMs: 9_000,
|
|
293
|
+
firstWave: 2,
|
|
294
|
+
/** The patrol ignores anyone below this Combat (a newcomer passing through is left alone). */
|
|
295
|
+
aggroCombat: 12,
|
|
296
|
+
aggroRadius: 7,
|
|
297
|
+
leashRadius: 40,
|
|
298
|
+
aggroText: 'A Redcap patrol swings out across the road: "Toll! Everyone pays the toll!"',
|
|
299
|
+
/** Every fourth raider is an archer. */
|
|
300
|
+
archerEvery: 4,
|
|
301
|
+
};
|
|
302
|
+
/** The strip of road the patrol keeps: the cutting between the two ridges (x 786-798) from the north end to the Toll House. */
|
|
303
|
+
export const REDCAP_PATROL_ZONE = { minX: 786, maxX: 798, minZ: 436, maxZ: 482 };
|
|
304
|
+
export function inRedcapPatrolZone(x, z) {
|
|
305
|
+
const b = REDCAP_PATROL_ZONE;
|
|
306
|
+
return x >= b.minX && x <= b.maxX && z >= b.minZ && z <= b.maxZ;
|
|
307
|
+
}
|
|
308
|
+
/** Where the squad forms: on the verge-side ground at the cutting's north mouth and the middle (NPCs, not map entities, so the verge rule does not apply). */
|
|
309
|
+
export const REDCAP_PATROL_NESTS = [
|
|
310
|
+
{ x: 794, z: 442 },
|
|
311
|
+
{ x: 794, z: 458 },
|
|
312
|
+
{ x: 790, z: 470 },
|
|
313
|
+
];
|
|
314
|
+
/** Patrol raiders felled, in one patrol, that earn the guard's thanks. */
|
|
315
|
+
export const REDCAP_PATROL_KILLS_TO_PAY = 4;
|
|
316
|
+
/** The thanks (PLACEHOLDER): once per patrol per player who stood and fought and is still standing when it ends. */
|
|
317
|
+
export const REDCAP_PATROL_REWARD = { coins: 220, explorerXp: 300 };
|
|
318
|
+
export const REDCAP_PATROL_DIFFICULTY = 1;
|
|
319
|
+
export const REDCAP_PATROL_ID_PREFIX = 'rp-';
|
|
320
|
+
export const REDCAP_PATROL_TEXTS = {
|
|
321
|
+
start: 'A Redcap patrol is marching the cutting! Hold the road with the guard until it breaks.',
|
|
322
|
+
endPaid: "The patrol breaks and runs for the ridge. Toll-Warden Pike's lads salute you from the Toll House.",
|
|
323
|
+
endPlain: 'The Redcap patrol breaks and runs for the ridge.',
|
|
324
|
+
quiet: 'A Redcap patrol is marching the cutting, but the Redcaps have no interest in someone so green. Keep to the verge.',
|
|
325
|
+
warn: 'Toll-Warden Pike rings the Toll House bell: a Redcap patrol will march the cutting in a minute or so.',
|
|
326
|
+
};
|
|
327
|
+
/** The Toll House bell rings this long before a window opens. */
|
|
328
|
+
export const REDCAP_PATROL_WARN_MS = 90_000;
|
|
329
|
+
const PATROL_EPOCH_MS = Date.UTC(2026, 0, 1, 0, 0, 0);
|
|
330
|
+
/** The patrol window `nowMs` is in or the next one: a pure function of the clock. */
|
|
331
|
+
export function redcapPatrolWindow(nowMs) {
|
|
332
|
+
const rel = nowMs - PATROL_EPOCH_MS - REDCAP_PATROL.offsetMs;
|
|
333
|
+
const slot = Math.floor(rel / REDCAP_PATROL.periodMs);
|
|
334
|
+
const startMs = PATROL_EPOCH_MS + REDCAP_PATROL.offsetMs + slot * REDCAP_PATROL.periodMs;
|
|
335
|
+
const endMs = startMs + REDCAP_PATROL.durationMs;
|
|
336
|
+
return { slot, startMs, endMs, active: nowMs >= startMs && nowMs < endMs, nextStartMs: startMs + REDCAP_PATROL.periodMs };
|
|
337
|
+
}
|
|
338
|
+
/** The slot whose window is open or the NEXT one to open (the slot the warning belongs to). */
|
|
339
|
+
export function redcapPatrolSlotAfter(nowMs) {
|
|
340
|
+
const w = redcapPatrolWindow(nowMs);
|
|
341
|
+
return w.active ? w.slot : w.slot + 1;
|
|
342
|
+
}
|
|
343
|
+
// ---- The Explorer's Ledger page ------------------------------------------------------------------------------------------------------
|
|
344
|
+
/** The Toll Road's lines (marked by the server, ids are the marks it writes; explorerLedger.ts section `road`). */
|
|
345
|
+
export const LEDGER_ROAD_LINES = [
|
|
346
|
+
{ id: 'road:patrol', label: 'Held the road against a Redcap patrol' },
|
|
347
|
+
{ id: 'road:payroll', label: "Found the guard's missing payroll" },
|
|
348
|
+
{ id: 'road:cellar', label: 'Went down into the Ridge cellar' },
|
|
349
|
+
{ id: 'road:cleave-dodged', label: "Stepped clear of the Redcap Captain's cleave" },
|
|
350
|
+
];
|
|
351
|
+
// ---- Discovery zones -----------------------------------------------------------------------------------------------------------------
|
|
352
|
+
export const TOLL_HOUSE_ZONE = {
|
|
353
|
+
id: 'ridge-toll-house',
|
|
354
|
+
label: 'The Ridge Toll House',
|
|
355
|
+
minX: TOLL_HOUSE.minX - 2,
|
|
356
|
+
maxX: TOLL_HOUSE.maxX + 2,
|
|
357
|
+
minZ: toLocalZ(TOLL_HOUSE.minZ - 2),
|
|
358
|
+
maxZ: toLocalZ(TOLL_HOUSE.maxZ + 2),
|
|
359
|
+
};
|
|
360
|
+
export const REDCAP_CAMPS_ZONE = {
|
|
361
|
+
id: 'redcap-camps',
|
|
362
|
+
label: 'The Redcap Camps',
|
|
363
|
+
minX: STILE_CAMP.box.minX - 2,
|
|
364
|
+
maxX: HOLLOW_CAMP.box.maxX + 2,
|
|
365
|
+
minZ: toLocalZ(STILE_CAMP.box.minZ - 2),
|
|
366
|
+
maxZ: toLocalZ(HOLLOW_CAMP.box.maxZ + 2),
|
|
367
|
+
};
|
|
368
|
+
//# sourceMappingURL=tollRoad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tollRoad.js","sourceRoot":"","sources":["../src/tollRoad.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE TOLL ROAD quest chain (Highwayman's Ridge phase 3, T79 2026-10-14; the places, people and the cellar are in tollRoad.ts). Four
|
|
3
|
+
* quests, levels 18-23, after Every Road Pays. Toll-Warden Ansel Pike (at the Ridge Toll House) gives three, Whisper Pim one:
|
|
4
|
+
*
|
|
5
|
+
* 1. Tolls and Tallies (Combat 18) read three tally boards (the Toll House, the pond road, Stile Camp's gate), put down five
|
|
6
|
+
* Redcaps, tell Pike
|
|
7
|
+
* 2. The Missing Payroll (Combat 19) follow five sets of cart tracks in order from the wagon wreck to Hollow Camp, put down four
|
|
8
|
+
* Redcaps, take the payroll satchel from the cache, bring it to Pike
|
|
9
|
+
* 3. Whisper in the Reeds (Combat 21) Pim's quest: put down three Redcap archers (his watchers), take the cellar key from his dead
|
|
10
|
+
* drop by the pond, tell Pim
|
|
11
|
+
* 4. The Captain's Cellar (Combat 22) down the hatch in the Ridge yard (the standard gate asks the key), put down the Redcap
|
|
12
|
+
* Captain (one telegraphed cleave, step clear), take his toll book, tell Pike
|
|
13
|
+
*
|
|
14
|
+
* EVERY NUMBER HERE (levels, counts, rewards) IS A PLACEHOLDER for the balance pass.
|
|
15
|
+
*/
|
|
16
|
+
import type { StoryQuestDef } from './storyQuests.js';
|
|
17
|
+
export declare const TOLL_ROAD_QUEST_IDS: readonly ["tollsAndTallies", "theMissingPayroll", "whisperInTheReeds", "theCaptainsCellar"];
|
|
18
|
+
export type TollRoadQuestId = (typeof TOLL_ROAD_QUEST_IDS)[number];
|
|
19
|
+
/** Combat levels each quest asks. */
|
|
20
|
+
export declare const TOLL_ROAD_COMBAT_LEVELS: Readonly<Record<TollRoadQuestId, number>>;
|
|
21
|
+
export declare const TOLL_ROAD_QUEST_NAMES: Readonly<Record<TollRoadQuestId, string>>;
|
|
22
|
+
/** Counts. */
|
|
23
|
+
export declare const TOLL_TALLIES_TO_READ = 3;
|
|
24
|
+
export declare const TOLL_REDCAPS_TO_DEFEAT = 5;
|
|
25
|
+
export declare const PAYROLL_REDCAPS_TO_DEFEAT = 4;
|
|
26
|
+
export declare const PIM_ARCHERS_TO_DEFEAT = 3;
|
|
27
|
+
/** What each quest pays: coins, Explorer XP, a combat XP lump and bars (iron). Placeholders. */
|
|
28
|
+
export declare const TOLL_ROAD_REWARDS: {
|
|
29
|
+
readonly tollsAndTallies: {
|
|
30
|
+
readonly coins: 700;
|
|
31
|
+
readonly explorerXp: 400;
|
|
32
|
+
readonly choiceXp: 1200;
|
|
33
|
+
readonly ironBars: 0;
|
|
34
|
+
};
|
|
35
|
+
readonly theMissingPayroll: {
|
|
36
|
+
readonly coins: 900;
|
|
37
|
+
readonly explorerXp: 500;
|
|
38
|
+
readonly choiceXp: 1600;
|
|
39
|
+
readonly ironBars: 0;
|
|
40
|
+
};
|
|
41
|
+
readonly whisperInTheReeds: {
|
|
42
|
+
readonly coins: 800;
|
|
43
|
+
readonly explorerXp: 450;
|
|
44
|
+
readonly choiceXp: 0;
|
|
45
|
+
readonly ironBars: 3;
|
|
46
|
+
};
|
|
47
|
+
readonly theCaptainsCellar: {
|
|
48
|
+
readonly coins: 1800;
|
|
49
|
+
readonly explorerXp: 900;
|
|
50
|
+
readonly choiceXp: 2500;
|
|
51
|
+
readonly ironBars: 2;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
/** The last quest's gear piece (existing item). */
|
|
55
|
+
export declare const TOLL_ROAD_FINAL_GEAR = "ironshield";
|
|
56
|
+
export declare const TOLLS_AND_TALLIES_QUEST: StoryQuestDef;
|
|
57
|
+
export declare const THE_MISSING_PAYROLL_QUEST: StoryQuestDef;
|
|
58
|
+
export declare const WHISPER_IN_THE_REEDS_QUEST: StoryQuestDef;
|
|
59
|
+
export declare const THE_CAPTAINS_CELLAR_QUEST: StoryQuestDef;
|
|
60
|
+
//# sourceMappingURL=tollRoadQuests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tollRoadQuests.d.ts","sourceRoot":"","sources":["../src/tollRoadQuests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAe,aAAa,EAAe,MAAM,kBAAkB,CAAC;AAyBhF,eAAO,MAAM,mBAAmB,6FAA8F,CAAC;AAC/H,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,qCAAqC;AACrC,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAK7E,CAAC;AACF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAK3E,CAAC;AACF,cAAc;AACd,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAKpB,CAAC;AACX,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAejD,eAAO,MAAM,uBAAuB,EAAE,aA4CrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,aA2DvC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,aAyCxC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,aAoDvC,CAAC"}
|