@dreadwood-types/types 0.1.107 → 0.1.109

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.
@@ -0,0 +1,544 @@
1
+ /**
2
+ * Random World Events: five-minute rewarding finds for levels 1-15 (James's sheets, 2026-10-03; backend
3
+ * design-references random-world-events and random-event-kit, then one full sheet per event under its id).
4
+ *
5
+ * How one works (every sheet's loop): an entrance turns up somewhere in the starter area; you go in and have
6
+ * WORLD_EVENT_DURATION_MS inside (a timed run keyed by the event id, timedRun.ts: logged in or not, you are put back
7
+ * outside when it runs out); NPCs keep coming; you mine, fish or forage the dense nodes; a short puzzle opens the way
8
+ * to the cache; going in pays Explorer XP and the cache pays more.
9
+ *
10
+ * The shape is the forest dens' (landmarks.ts FOREST_DEN_SITES): every candidate entrance site and every interior is
11
+ * built by world generation; only WORLD_EVENT_ACTIVE_COUNT entrances show at once, each a different event at one of
12
+ * its sites. The mouth stays open WORLD_EVENT_JOIN_WINDOW_MS after the first player goes in so friends can follow,
13
+ * then caves in. When the interior is empty again it resets (puzzle, cache, nodes, NPCs) and another event opens.
14
+ *
15
+ * An event is data: floor rooms in its plot of the underground strip, pieces (the way out, the cache, the puzzle's
16
+ * switches and the barriers they open, signs and dressing), puzzle steps, NPC streams, its loot and XP. The backend
17
+ * carves and runs it from this (worldEventsMap.ts, worldEvents.ts); the client draws the pieces as Blender models.
18
+ * Only events with `built` rotate; the others have their sites and plot and wait for their layout (James's order).
19
+ */
20
+ import { UNDERGROUND_ORIGIN_X } from './constants.js';
21
+ export const WORLD_EVENT_IDS = [
22
+ 'copper-prospect',
23
+ 'buried-storehouse',
24
+ 'reedbed-sinkhole',
25
+ 'tidepool-grotto',
26
+ 'storm-felled-grove',
27
+ 'forgotten-smithy',
28
+ 'old-kings-culvert',
29
+ 'sunken-wayshrine',
30
+ 'goblin-sapper',
31
+ ];
32
+ /** Time inside, wall clock (every sheet: "five minutes"). */
33
+ export const WORLD_EVENT_DURATION_MS = 5 * 60_000;
34
+ /** After the first player goes in, how long the mouth stays open for others to follow into the same run. */
35
+ export const WORLD_EVENT_JOIN_WINDOW_MS = 30_000;
36
+ /** Entrances showing across the starter area at once (never two of the same event). */
37
+ export const WORLD_EVENT_ACTIVE_COUNT = 3;
38
+ /** How long after one resets before the next entrance turns up, somewhere else. */
39
+ export const WORLD_EVENT_REOPEN_MS = { minMs: 45_000, maxMs: 120_000 };
40
+ /** Kinds. Each is a Blender model prop (isModelPropKind): its style is `<model>-<facing>`, its footprint the model's. */
41
+ export const EVENT_ENTRANCE_KIND = 'evententrance';
42
+ /** A way back out (a ladder, a crawlway, stairs). */
43
+ export const EVENT_EXIT_KIND = 'eventexit';
44
+ /** The cache: each character in the run may open it once. */
45
+ export const EVENT_CHEST_KIND = 'eventchest';
46
+ /** A puzzle piece you work: a lever, a winch, a wheel, a latch, a brace, bellows, a symbol. */
47
+ export const EVENT_SWITCH_KIND = 'eventswitch';
48
+ /** Something in the way until the puzzle opens it: a fallen beam, a gate, a hidden door. */
49
+ export const EVENT_BARRIER_KIND = 'eventbarrier';
50
+ /** The event signs (the clock, the fight, the loot, the way out): a click reads them. */
51
+ export const EVENT_SIGN_KIND = 'eventsign';
52
+ /** A quick gather node (grain sacks, fruit shelves, a reed bed): a click gives something and some XP, then it refills. */
53
+ export const EVENT_NODE_KIND = 'eventnode';
54
+ export const WORLD_EVENT_KINDS = [
55
+ EVENT_ENTRANCE_KIND,
56
+ EVENT_EXIT_KIND,
57
+ EVENT_CHEST_KIND,
58
+ EVENT_SWITCH_KIND,
59
+ EVENT_BARRIER_KIND,
60
+ EVENT_SIGN_KIND,
61
+ EVENT_NODE_KIND,
62
+ ];
63
+ export function isWorldEventKind(kind) {
64
+ return WORLD_EVENT_KINDS.includes(kind);
65
+ }
66
+ export const WORLD_EVENT_ROLE_KIND = {
67
+ exit: EVENT_EXIT_KIND,
68
+ cache: EVENT_CHEST_KIND,
69
+ switch: EVENT_SWITCH_KIND,
70
+ barrier: EVENT_BARRIER_KIND,
71
+ sign: EVENT_SIGN_KIND,
72
+ node: EVENT_NODE_KIND,
73
+ };
74
+ const site = (id, x, z, facing = 's') => ({ id, x, z, facing });
75
+ /**
76
+ * The interiors' plots: three across and three deep in the underground strip below the other caves (rows 640-820
77
+ * were untouched rock on 2026-10-03; the smoke test checks nothing else is carved in them).
78
+ */
79
+ const PLOT_W = 64;
80
+ const PLOT_D = 56;
81
+ function plot(col, row) {
82
+ // 24 tiles clear of the overworld's east edge (x 928), so no grass shows past an interior's rock even from above.
83
+ const minX = UNDERGROUND_ORIGIN_X + 24 + col * 72;
84
+ const minZ = 640 + row * 60;
85
+ return { minX, maxX: minX + PLOT_W - 1, minZ, maxZ: minZ + PLOT_D - 1 };
86
+ }
87
+ /** A local layout's helpers: tiles relative to a corner inside the plot (8 tiles of rock round the sheet's map). */
88
+ function layout(p) {
89
+ const ox = p.minX + 8;
90
+ const oz = p.minZ + 8;
91
+ return {
92
+ at: (x, z) => ({ x: ox + x, z: oz + z }),
93
+ spot: (x, z, facing) => ({ x: ox + x, z: oz + z, facing }),
94
+ rect: (x0, z0, x1, z1) => ({ minX: ox + x0, maxX: ox + x1, minZ: oz + z0, maxZ: oz + z1 }),
95
+ };
96
+ }
97
+ /** The event signage boards (the kit sheet), each placed where it helps. */
98
+ const SIGN_TEXT = {
99
+ timer: 'Five minutes. Whatever you are doing when the time is up, you are put back outside, logged in or not.',
100
+ combat: 'They never stop coming while anyone is down here. Keep moving.',
101
+ loot: 'The cache is through here. Each of you may take one share.',
102
+ exit: 'The way out. Take it any time you have had enough.',
103
+ };
104
+ // ---------------------------------------------------------------- 1 the Collapsed Copper Prospect (sheet v2)
105
+ const CP_PLOT = plot(0, 0);
106
+ const CP = layout(CP_PLOT);
107
+ /**
108
+ * The Collapsed Copper Prospect (sheet v2, map about 28 x 18): the Entrance Gallery in the west where the crawl from the
109
+ * mouth comes out, the Rat Nest to the north, the hall east to the Ore Chamber (copper, tin at level 5, the Old Winding
110
+ * Lever), the collapsed support across the way south into the Side Tunnel, the Prospector's Cache up off its east end
111
+ * and the Return Ladder at the very end.
112
+ */
113
+ const COPPER_PROSPECT = {
114
+ id: 'copper-prospect',
115
+ label: 'Collapsed Copper Prospect',
116
+ short: 'Copper Prospect',
117
+ levels: [1, 8],
118
+ skills: 'Mining, Combat, Explorer',
119
+ tagline: 'A forgotten mine mouth, still calling.',
120
+ blurb: 'A timber mine mouth cut into a rocky crag. Below: rats that never stop coming, rich copper and tin, and a collapsed support between you and the Prospector\'s Cache. Pull the Old Winding Lever in the ore chamber, push the beam aside, and the side tunnel is yours.',
121
+ entranceModel: 'evmineentrance',
122
+ enterVerb: 'Enter the mine mouth',
123
+ sites: [site('battlefield-edge', 250, 756), site('north-meadow', 374, 798), site('river-meadow', 496, 755), site('basecamp-road', 595, 798), site('basecamp-north', 726, 798)],
124
+ plot: CP_PLOT,
125
+ built: true,
126
+ xp: { entry: 50, cache: 100 },
127
+ rewards: 'Copper ore, tin ore, 20-50 coins, a chance of a bronze bar; rarely a bronze dagger, bronze boots or bronze gauntlets.',
128
+ loot: [
129
+ { kind: 'copper', min: 2, max: 4, chance: 1 },
130
+ { kind: 'tin', min: 1, max: 3, chance: 1 },
131
+ { kind: 'coins', min: 20, max: 50, chance: 1 },
132
+ { kind: 'bronzebar', min: 1, max: 1, chance: 0.3 },
133
+ { kind: 'bronzedagger', min: 1, max: 1, chance: 0.05 },
134
+ { kind: 'bronzeboots', min: 1, max: 1, chance: 0.04 },
135
+ { kind: 'bronzegauntlets', min: 1, max: 1, chance: 0.04 },
136
+ ],
137
+ arrival: CP.at(2, 8),
138
+ rooms: {
139
+ gallery: CP.rect(1, 5, 6, 10),
140
+ nest: CP.rect(7, 1, 13, 5),
141
+ hall: CP.rect(7, 6, 14, 9),
142
+ orepass: CP.rect(15, 5, 15, 8),
143
+ ore: CP.rect(16, 0, 22, 6),
144
+ beampass: CP.rect(11, 10, 13, 12),
145
+ side: CP.rect(8, 13, 26, 15),
146
+ cachegap: CP.rect(24, 12, 25, 12),
147
+ cache: CP.rect(21, 9, 26, 11),
148
+ },
149
+ pieces: [
150
+ { id: 'crawl', role: 'exit', model: 'evcrawlway', ...CP.spot(1, 7, 'e'), name: 'Crawlway to the surface', verb: 'Crawl out' },
151
+ { id: 'ladder', role: 'exit', model: 'evladder', ...CP.spot(26, 14, 'w'), name: 'Return ladder', verb: 'Climb out' },
152
+ { id: 'lever', role: 'switch', model: 'evwindinglever', doneModel: 'evwindingleverpulled', ...CP.spot(21, 6, 'n'), name: 'Old Winding Lever', verb: 'Pull' },
153
+ { id: 'beam', role: 'barrier', model: 'evbeamclosed', doneModel: 'evbeamopen', ...CP.spot(12, 11, 'n'), name: 'Collapsed support beam', verb: 'Inspect' },
154
+ { id: 'cache', role: 'cache', model: 'evprospectorscache', doneModel: 'evprospectorscacheopen', ...CP.spot(23, 10, 's'), name: "Prospector's Cache", verb: 'Open' },
155
+ { id: 'nest', role: 'decor', model: 'evratnest', ...CP.spot(10, 2, 's'), name: 'Rat nest', verb: 'Examine' },
156
+ { id: 'sign-timer', role: 'sign', model: 'evsigntimer', ...CP.spot(4, 5, 's'), name: 'The clock', verb: 'Read', text: SIGN_TEXT.timer },
157
+ { id: 'sign-combat', role: 'sign', model: 'evsigncombat', ...CP.spot(7, 1, 'e'), name: 'Rat warning', verb: 'Read', text: SIGN_TEXT.combat },
158
+ { id: 'sign-loot', role: 'sign', model: 'evsignloot', ...CP.spot(23, 13, 's'), name: 'Cache marker', verb: 'Read', text: SIGN_TEXT.loot },
159
+ { id: 'sign-exit', role: 'sign', model: 'evsignexit', ...CP.spot(26, 13, 'w'), name: 'Way out', verb: 'Read', text: SIGN_TEXT.exit },
160
+ ],
161
+ steps: [
162
+ {
163
+ piece: 'lever',
164
+ text: 'The Old Winding Lever groans down. Somewhere back along the hall a chain goes slack with a clatter: the collapsed support can be shifted now.',
165
+ notYet: 'The lever will not move.',
166
+ },
167
+ {
168
+ piece: 'beam',
169
+ needs: ['lever'],
170
+ text: 'You put your shoulder to the support beam and heave it aside. The side tunnel is open.',
171
+ notYet: 'A support beam has come down across the way south, its chain still wound tight on the old winding gear. Release it at the Old Winding Lever in the ore chamber, then come back and push.',
172
+ },
173
+ ],
174
+ streams: [
175
+ {
176
+ kind: 'rat',
177
+ name: 'Cave rat',
178
+ levels: [1, 8],
179
+ nests: [CP.at(9, 2), CP.at(12, 4), CP.at(8, 4)],
180
+ cap: 5,
181
+ perExtraPlayer: 2,
182
+ everyMs: 6_000,
183
+ firstWave: 3,
184
+ aggroCombat: 3,
185
+ aggroText: 'A cave rat bares its teeth and rushes at you!',
186
+ leader: { kind: 'ratforeman', name: 'Rat Foreman', levels: [3, 8], oneIn: 5, max: 1, aggroText: 'The Rat Foreman shrieks and leads the pack at you!' },
187
+ },
188
+ ],
189
+ seams: [
190
+ { ...CP.at(17, 0), ore: 'copper' },
191
+ { ...CP.at(20, 0), ore: 'copper' },
192
+ { ...CP.at(22, 2), ore: 'copper' },
193
+ { ...CP.at(16, 3), ore: 'tin' },
194
+ { ...CP.at(22, 4), ore: 'tin' },
195
+ { ...CP.at(14, 6), ore: 'copper' },
196
+ ],
197
+ stones: [CP.at(7, 9), CP.at(18, 6), CP.at(10, 15)],
198
+ };
199
+ // ---------------------------------------------------------------- 2 the Buried Storehouse
200
+ const BS_PLOT = plot(1, 0);
201
+ const BS = layout(BS_PLOT);
202
+ /**
203
+ * The Buried Storehouse (its sheet, map about 22 x 16): the cellar stairs come down into the south side of the Store
204
+ * Room (grain sacks, fruit shelves, the movable crate stacks over a rusted floor latch), the Side Room to the west with
205
+ * the Rat Nest below it, the old store corner to the north-east, the Hidden Pantry behind a shelf in the north wall
206
+ * with the Old Store Chest in it, and the Exit ladder in a nook on the east side.
207
+ */
208
+ const BURIED_STOREHOUSE = {
209
+ id: 'buried-storehouse',
210
+ label: 'Buried Storehouse',
211
+ short: 'Buried Storehouse',
212
+ levels: [1, 8],
213
+ skills: 'Combat, Foraging, Explorer',
214
+ tagline: 'Grass-covered cellar doors in abandoned field boundaries.',
215
+ blurb: 'Pull open the cellar doors into a root cellar full of rats and old stores: grain, fruit and supplies to gather. Shift the grain sacks, move the crates to find a rusted floor latch, and a shelf in the north wall swings open on the hidden pantry and the Old Store Chest.',
216
+ entranceModel: 'evcellardoors',
217
+ enterVerb: 'Pull open the cellar doors',
218
+ sites: [site('farm-fields', 111, 795), site('field-edge', 255, 801), site('pond-fields', 351, 826), site('plots-fields', 441, 815), site('east-fields', 598, 834)],
219
+ plot: BS_PLOT,
220
+ built: true,
221
+ xp: { entry: 50, cache: 100 },
222
+ rewards: 'Bread, apples, wheat, small coins; rarely leather boots, bronze gauntlets or bronze boots.',
223
+ loot: [
224
+ { kind: 'bread', min: 1, max: 3, chance: 1 },
225
+ { kind: 'apple', min: 1, max: 3, chance: 1 },
226
+ { kind: 'wheat', min: 1, max: 3, chance: 0.7 },
227
+ { kind: 'coins', min: 10, max: 30, chance: 1 },
228
+ { kind: 'leatherboots', min: 1, max: 1, chance: 0.08 },
229
+ { kind: 'bronzegauntlets', min: 1, max: 1, chance: 0.04 },
230
+ { kind: 'bronzeboots', min: 1, max: 1, chance: 0.04 },
231
+ ],
232
+ arrival: BS.at(13, 11),
233
+ rooms: {
234
+ store: BS.rect(5, 5, 18, 12),
235
+ side: BS.rect(0, 4, 4, 8),
236
+ nest: BS.rect(1, 10, 4, 13),
237
+ pantry: BS.rect(7, 0, 12, 3),
238
+ door: BS.rect(9, 4, 9, 4),
239
+ oldstore: BS.rect(14, 1, 19, 4),
240
+ stairs: BS.rect(12, 13, 14, 15),
241
+ exitnook: BS.rect(19, 10, 20, 12),
242
+ },
243
+ pieces: [
244
+ { id: 'stairs', role: 'exit', model: 'evcellarstairs', ...BS.spot(13, 14, 'n'), name: 'Cellar stairs', verb: 'Climb out' },
245
+ { id: 'ladder', role: 'exit', model: 'evladder', ...BS.spot(20, 11, 'w'), name: 'Exit ladder', verb: 'Climb out' },
246
+ { id: 'sacks', role: 'switch', model: 'evgrainsacks', doneModel: 'evgrainsacksmoved', ...BS.spot(15, 10, 'e'), name: 'Grain sacks', verb: 'Shift' },
247
+ // The latch shares the crates' tile: under them until they are moved (drawn in the tile's front half, the moved
248
+ // crates shoved into its back half).
249
+ { id: 'crates', role: 'switch', model: 'evcratestack', doneModel: 'evcratestackmoved', ...BS.spot(16, 10, 's'), name: 'Crate stack', verb: 'Move' },
250
+ { id: 'latch', role: 'switch', model: 'evfloorlatch', doneModel: 'evfloorlatchopen', ...BS.spot(16, 10, 's'), name: 'Rusted floor latch', verb: 'Open', hiddenUntil: 'crates' },
251
+ { id: 'shelfdoor', role: 'barrier', model: 'evpantrydoor', doneModel: 'evpantrydooropen', ...BS.spot(9, 4, 's'), name: 'Old shelf', verb: 'Search' },
252
+ { id: 'cache', role: 'cache', model: 'evoldstorechest', doneModel: 'evoldstorechestopen', ...BS.spot(9, 1, 's'), name: 'Old Store Chest', verb: 'Open' },
253
+ { id: 'grain', role: 'node', model: 'evgrainpile', doneModel: 'evgrainpileempty', ...BS.spot(7, 6, 's'), name: 'Grain store', verb: 'Gather from',
254
+ node: { give: [{ kind: 'wheat', min: 1, max: 2 }], skill: 'foraging', xp: 6, respawnMs: 45_000 } },
255
+ { id: 'fruit', role: 'node', model: 'evfruitshelves', doneModel: 'evfruitshelvesbare', ...BS.spot(12, 5, 's'), name: 'Fruit shelves', verb: 'Gather from',
256
+ node: { give: [{ kind: 'apple', min: 1, max: 2 }], skill: 'foraging', xp: 6, respawnMs: 45_000 } },
257
+ { id: 'supplies', role: 'node', model: 'evstoreshelf', doneModel: 'evstoreshelfbare', ...BS.spot(17, 1, 's'), name: 'Store shelf', verb: 'Search',
258
+ node: { give: [{ kind: 'coins', min: 3, max: 10 }, { kind: 'bread', min: 0, max: 1 }], skill: 'foraging', xp: 8, respawnMs: 60_000 } },
259
+ { id: 'nest', role: 'decor', model: 'evratnest', ...BS.spot(2, 12, 's'), name: 'Rat nest', verb: 'Examine' },
260
+ { id: 'sign-timer', role: 'sign', model: 'evsigntimer', ...BS.spot(11, 12, 's'), name: 'The clock', verb: 'Read', text: SIGN_TEXT.timer },
261
+ { id: 'sign-exit', role: 'sign', model: 'evsignexit', ...BS.spot(19, 12, 's'), name: 'Way out', verb: 'Read', text: SIGN_TEXT.exit },
262
+ ],
263
+ steps: [
264
+ {
265
+ piece: 'sacks',
266
+ text: 'The grain sacks are dragged off the crate stack in a cloud of chaff. The crates can be moved now.',
267
+ notYet: 'The sacks will not budge.',
268
+ },
269
+ {
270
+ piece: 'crates',
271
+ needs: ['sacks'],
272
+ text: 'The crate stack is heaved aside. Under it, set into the floor: a rusted iron latch.',
273
+ notYet: 'The crates are pinned under heavy grain sacks. Shift the sacks off them first.',
274
+ },
275
+ {
276
+ piece: 'latch',
277
+ needs: ['crates'],
278
+ opens: ['shelfdoor'],
279
+ text: 'The rusted latch grinds round. Behind the north wall a bolt shoots back, and an old shelf swings open on a hidden pantry!',
280
+ notYet: 'The latch will not turn.',
281
+ },
282
+ {
283
+ piece: 'shelfdoor',
284
+ needs: ['latch'],
285
+ text: 'The shelf swings open on the hidden pantry.',
286
+ notYet: 'An old shelf of jars, built into the wall. It rattles as if there were space behind it, but it will not move. Something in the floor must work it.',
287
+ },
288
+ ],
289
+ streams: [
290
+ {
291
+ kind: 'rat',
292
+ name: 'Common rat',
293
+ levels: [1, 8],
294
+ nests: [BS.at(2, 11), BS.at(3, 12), BS.at(2, 6), BS.at(18, 2)],
295
+ cap: 5,
296
+ perExtraPlayer: 2,
297
+ everyMs: 6_000,
298
+ firstWave: 3,
299
+ aggroCombat: 3,
300
+ aggroText: 'A rat drops off the shelves and rushes at you!',
301
+ leader: { kind: 'rat', name: 'Big store rat', levels: [6, 8], oneIn: 6, max: 1, aggroText: 'A big store rat, fat on the grain, comes at you!' },
302
+ },
303
+ ],
304
+ };
305
+ // ---------------------------------------------------------------- 2-9: planned (sites chosen, plots kept)
306
+ const PLANNED = {
307
+ built: false,
308
+ loot: [],
309
+ };
310
+ export const WORLD_EVENTS = {
311
+ 'copper-prospect': COPPER_PROSPECT,
312
+ 'buried-storehouse': BURIED_STOREHOUSE,
313
+ 'reedbed-sinkhole': {
314
+ ...PLANNED,
315
+ id: 'reedbed-sinkhole',
316
+ label: 'Reedbed Sinkhole',
317
+ short: 'Reedbed Sinkhole',
318
+ levels: [1, 10],
319
+ skills: 'Fishing, Foraging, Combat, Explorer',
320
+ tagline: 'A shallow marsh hides a deeper secret.',
321
+ blurb: 'Part the reeds and climb down the roots into a flooded grotto: pond catches, snails and frogs, a few rats. Turn the old sluice wheel, cross the stepping stones, pull the drain gate and reach the Naturalist\'s Cache.',
322
+ entranceModel: 'evreedentrance',
323
+ enterVerb: 'Part the reeds',
324
+ sites: [site('river-west', 262, 747), site('river-reeds', 358, 749), site('river-bend', 483, 747), site('river-ford', 593, 748), site('river-east', 703, 749)],
325
+ plot: plot(2, 0),
326
+ xp: { entry: 50, cache: 100 },
327
+ rewards: 'Pond specimens, bait or tackle, 20-50 coins, line, hook, float, a Simple Lure; rarely improved tackle, a Wooden Net or a specimen jar.',
328
+ },
329
+ 'tidepool-grotto': {
330
+ ...PLANNED,
331
+ id: 'tidepool-grotto',
332
+ label: 'Tidepool Crab Grotto',
333
+ short: 'Tidepool Grotto',
334
+ levels: [3, 12],
335
+ skills: 'Fishing, Combat, Foraging, Explorer',
336
+ tagline: 'A sea-cave arch in a coastal cliff, salt and secrets.',
337
+ blurb: 'Wade into the sea cave to a grotto of tide pools and brown crabs. Use the hand winch to lower the walkway, cross to the far ledge and open the Trader\'s Cache.',
338
+ entranceModel: 'evseacave',
339
+ enterVerb: 'Wade into the cave',
340
+ sites: [site('beach-west', 260, 861), site('beach-middle', 286, 861), site('beach-east', 311, 861)],
341
+ plot: plot(0, 1),
342
+ xp: { entry: 50, cache: 150 },
343
+ rewards: '30-80 coins, fishing tackle, lugworms, shells, crab items, a chance of a Live Brown Crab; rarely a bronze dagger or bronze boots.',
344
+ },
345
+ 'storm-felled-grove': {
346
+ ...PLANNED,
347
+ id: 'storm-felled-grove',
348
+ label: 'Storm-Felled Grove',
349
+ short: 'Storm-Felled Grove',
350
+ levels: [1, 12],
351
+ skills: 'Woodwork, Combat, Foraging, Explorer',
352
+ tagline: 'A normal woodland site, transformed by a storm.',
353
+ blurb: 'A clearing of storm-felled trees and roaming foxes. Clear the birch, poplar and pine trunks, expose the opening under the giant root plate and crawl into the Root Hollow for the Forester\'s Stash.',
354
+ entranceModel: 'evuprootedtree',
355
+ enterVerb: 'Step into the storm-felled clearing',
356
+ sites: [site('farm-woods', 122, 850), site('west-woods', 208, 848), site('pond-woods', 378, 848), site('east-woods', 749, 845)],
357
+ plot: plot(1, 1),
358
+ xp: { entry: 50, cache: 100 },
359
+ rewards: 'Birch, poplar and pine logs, 25-70 coins, herbs and forage finds, pine resin at Woodwork 10; rarely a hatchet.',
360
+ },
361
+ 'forgotten-smithy': {
362
+ ...PLANNED,
363
+ id: 'forgotten-smithy',
364
+ label: 'Forgotten Smithy Cellar',
365
+ short: 'Forgotten Smithy',
366
+ levels: [5, 15],
367
+ skills: 'Blacksmithing, Mining, Combat, Explorer',
368
+ tagline: 'A ruined smithy, overtaken by time.',
369
+ blurb: 'Down the cellar stairs to a forge room with ore, a furnace and an anvil, and rats coming through the wall. Pump the bellows, heat the chain, strike the seized lock and open the chain gate to the Smith\'s Locker.',
370
+ entranceModel: 'evsmithyruin',
371
+ enterVerb: 'Open the cellar doors',
372
+ sites: [site('battlefield-rise', 250, 771), site('river-rise', 383, 752), site('meadow-rise', 493, 793), site('camp-rise', 626, 796), site('far-rise', 726, 752)],
373
+ plot: plot(2, 1),
374
+ xp: { entry: 50, cache: 150 },
375
+ rewards: 'Bronze bars, copper ore, tin ore, 30-90 coins; rarely bronze dagger, shield, helmet, boots or gauntlets; very rarely a bronze sword.',
376
+ },
377
+ 'old-kings-culvert': {
378
+ ...PLANNED,
379
+ id: 'old-kings-culvert',
380
+ label: "Old King's Culvert",
381
+ short: "Old King's Culvert",
382
+ levels: [5, 15],
383
+ skills: 'Fishing, Foraging, Combat, Explorer',
384
+ tagline: 'An old drainage arch below a road.',
385
+ blurb: 'Wade past the bent grate into a flooded drain: rats on the ledges, fish in the pools. Turn the upstream sluice first, open the downstream gate second, and the upper ledge drains to the King\'s Cache.',
386
+ entranceModel: 'evdrainmouth',
387
+ enterVerb: 'Wade past the bent grate',
388
+ sites: [],
389
+ plot: plot(0, 2),
390
+ xp: { entry: 50, cache: 150 },
391
+ rewards: 'Fishing supplies, wet forage, freshwater finds, coins, basic food; rarely a bronze shield or helmet.',
392
+ },
393
+ 'sunken-wayshrine': {
394
+ ...PLANNED,
395
+ id: 'sunken-wayshrine',
396
+ label: 'Sunken Wayshrine',
397
+ short: 'Sunken Wayshrine',
398
+ levels: [8, 15],
399
+ skills: 'Combat, Explorer',
400
+ tagline: 'A collapsed roadside shrine, half-swallowed by earth and roots.',
401
+ blurb: 'Down the stone stairs to three chapels and a central altar. Read the stone relief, activate the three symbols in the right order (the wrong order brings rats), and the reliquary gate opens on the final cache.',
402
+ entranceModel: 'evshrineentrance',
403
+ enterVerb: 'Descend the stone stairs',
404
+ sites: [],
405
+ plot: plot(1, 2),
406
+ xp: { entry: 50, cache: 250 },
407
+ rewards: '60-140 coins, cooked food, bronze bars, useful supplies; rarely a bronze helmet, shield or sword; very rarely a bronze body or legs.',
408
+ },
409
+ 'goblin-sapper': {
410
+ ...PLANNED,
411
+ id: 'goblin-sapper',
412
+ label: 'Goblin Sapper Tunnel',
413
+ short: 'Goblin Sapper Tunnel',
414
+ levels: [10, 15],
415
+ skills: 'Combat, Mining, Explorer',
416
+ tagline: 'A fresh mound. Goblins work beneath.',
417
+ blurb: 'A goblin military tunnel full of sappers and dense ore. Disable braces A, B and C, collapse the timber gate, then defeat or slip past the Goblin Foreman to loot the Supply Vault.',
418
+ entranceModel: 'evsapperentrance',
419
+ enterVerb: 'Crawl into the sapper mouth',
420
+ sites: [],
421
+ plot: plot(2, 2),
422
+ xp: { entry: 50, cache: 250 },
423
+ rewards: '75-175 coins, bronze bars, copper, tin, maybe iron ore, arrows, food; rarely a bronze sword, helmet, shield, body or legs.',
424
+ },
425
+ };
426
+ export function worldEventDef(id) {
427
+ return WORLD_EVENTS[id];
428
+ }
429
+ export function isWorldEventId(value) {
430
+ return typeof value === 'string' && Object.prototype.hasOwnProperty.call(WORLD_EVENTS, value);
431
+ }
432
+ export function inTileRect(r, x, z) {
433
+ return x >= r.minX && x <= r.maxX && z >= r.minZ && z <= r.maxZ;
434
+ }
435
+ /** The event whose interior plot this tile is in, if any (built or not). */
436
+ export function worldEventAtInterior(x, z) {
437
+ if (x < UNDERGROUND_ORIGIN_X)
438
+ return null;
439
+ for (const id of WORLD_EVENT_IDS) {
440
+ const def = WORLD_EVENTS[id];
441
+ if (inTileRect(def.plot, x, z))
442
+ return def;
443
+ }
444
+ return null;
445
+ }
446
+ export function inWorldEventInterior(x, z) {
447
+ return worldEventAtInterior(x, z) !== null;
448
+ }
449
+ /** True on an interior's carved floor (a room), not its rock. */
450
+ export function onWorldEventFloor(def, x, z) {
451
+ return Object.values(def.rooms ?? {}).some((r) => inTileRect(r, x, z));
452
+ }
453
+ /** The tile in front of an entrance: where you stand to go in, and where you come back out. */
454
+ export function worldEventSiteApproach(s) {
455
+ // The footprint is 5 across and 3 deep, so the front row is one tile out from the centre; the approach is the next.
456
+ switch (s.facing) {
457
+ case 'n': return { x: s.x, z: s.z - 2 };
458
+ case 'e': return { x: s.x + 2, z: s.z };
459
+ case 'w': return { x: s.x - 2, z: s.z };
460
+ default: return { x: s.x, z: s.z + 2 };
461
+ }
462
+ }
463
+ /** The entrance entity's style. */
464
+ export function worldEventEntranceStyle(def, s) {
465
+ return `${def.entranceModel}-${s.facing}`;
466
+ }
467
+ /** The stable entity ids: an entrance per site, and each piece of an interior. */
468
+ export function worldEventEntranceId(def, s) {
469
+ return `${EVENT_ENTRANCE_KIND}-${def.id}-${s.id}`;
470
+ }
471
+ export function worldEventPieceEntityId(def, pieceId) {
472
+ return `ev-${def.id}-${pieceId}`;
473
+ }
474
+ /** The piece an entity is, if it is one of an event's (by its stable id). */
475
+ export function worldEventPieceForEntity(entityId) {
476
+ if (!entityId.startsWith('ev-'))
477
+ return null;
478
+ for (const id of WORLD_EVENT_IDS) {
479
+ const def = WORLD_EVENTS[id];
480
+ const prefix = `ev-${def.id}-`;
481
+ if (!entityId.startsWith(prefix))
482
+ continue;
483
+ const piece = def.pieces?.find((p) => p.id === entityId.slice(prefix.length));
484
+ return piece ? { def, piece } : null;
485
+ }
486
+ return null;
487
+ }
488
+ /** The style of a piece's entity in a state. */
489
+ export function worldEventPieceStyle(piece, done) {
490
+ return `${done && piece.doneModel ? piece.doneModel : piece.model}-${piece.facing}`;
491
+ }
492
+ /**
493
+ * What an event model is called and what a left click on it does, for the client, which knows an entity by its
494
+ * kind and style (`<model>-<facing>`): an entrance's event and verb, a piece's name and verb. A barrier once opened
495
+ * is just the way through.
496
+ */
497
+ export function worldEventModelInfo(model) {
498
+ for (const id of WORLD_EVENT_IDS) {
499
+ const def = WORLD_EVENTS[id];
500
+ if (def.entranceModel === model)
501
+ return { name: def.label, verb: def.enterVerb };
502
+ for (const p of def.pieces ?? []) {
503
+ if (p.model === model)
504
+ return { name: p.name, verb: p.verb };
505
+ if (p.doneModel === model)
506
+ return { name: p.name, verb: p.role === 'barrier' ? 'Walk past' : p.verb, open: true };
507
+ }
508
+ }
509
+ return null;
510
+ }
511
+ /** The step a click on this piece works, if it is a puzzle piece. */
512
+ export function worldEventStepFor(def, pieceId) {
513
+ return def.steps?.find((s) => s.piece === pieceId);
514
+ }
515
+ /** The orerock style for an event seam: the metal, drawn as the sheet's cluster. */
516
+ export function worldEventSeamStyle(seam) {
517
+ return `${seam.ore}:cluster`;
518
+ }
519
+ /**
520
+ * One character's share from an event cache. `roll` is called once per line (Math.random in the game, a seeded
521
+ * stream in tests). Lines that miss their chance give nothing.
522
+ */
523
+ export function rollWorldEventLoot(def, roll) {
524
+ const out = [];
525
+ for (const line of def.loot) {
526
+ if (line.chance < 1 && roll() >= line.chance)
527
+ continue;
528
+ const qty = line.min + Math.floor(roll() * (line.max - line.min + 1));
529
+ if (qty > 0)
530
+ out.push({ kind: line.kind, qty });
531
+ }
532
+ return out;
533
+ }
534
+ /**
535
+ * A stream NPC's level: inside the range, leaning towards the party's combat level (so a level-2 newcomer meets
536
+ * level 1-3 rats and a level-9 character the top of the range), with a little spread.
537
+ */
538
+ export function worldEventSpawnLevel(range, partyCombat, roll) {
539
+ const [lo, hi] = range;
540
+ const centre = Math.max(lo, Math.min(hi, Math.round(partyCombat * 0.75)));
541
+ const level = centre + Math.floor(roll() * 3) - 1;
542
+ return Math.max(lo, Math.min(hi, level));
543
+ }
544
+ //# sourceMappingURL=worldEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worldEvents.js","sourceRoot":"","sources":["../src/worldEvents.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreadwood-types/types",
3
- "version": "0.1.107",
3
+ "version": "0.1.109",
4
4
  "description": "Public wire protocol and client-safe constants for Dreadwoods",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",