@dreadwood-types/types 0.1.235 → 0.1.236

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/attackableNpcs.d.ts.map +1 -1
  2. package/dist/attackableNpcs.js +5 -0
  3. package/dist/attackableNpcs.js.map +1 -1
  4. package/dist/bossSignatures.d.ts +1 -1
  5. package/dist/bossSignatures.d.ts.map +1 -1
  6. package/dist/bossSignatures.js +7 -0
  7. package/dist/bossSignatures.js.map +1 -1
  8. package/dist/constants.d.ts +7 -0
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js.map +1 -1
  11. package/dist/expandedContracts.d.ts.map +1 -1
  12. package/dist/expandedContracts.js +2 -1
  13. package/dist/expandedContracts.js.map +1 -1
  14. package/dist/gallowmere.d.ts +171 -0
  15. package/dist/gallowmere.d.ts.map +1 -0
  16. package/dist/gallowmere.js +173 -0
  17. package/dist/gallowmere.js.map +1 -0
  18. package/dist/gallowmereCreatures.d.ts +69 -0
  19. package/dist/gallowmereCreatures.d.ts.map +1 -0
  20. package/dist/gallowmereCreatures.js +105 -0
  21. package/dist/gallowmereCreatures.js.map +1 -0
  22. package/dist/gallowmereFolk.d.ts +32 -0
  23. package/dist/gallowmereFolk.d.ts.map +1 -0
  24. package/dist/gallowmereFolk.js +30 -0
  25. package/dist/gallowmereFolk.js.map +1 -0
  26. package/dist/gallowmereQuest.d.ts +79 -0
  27. package/dist/gallowmereQuest.d.ts.map +1 -0
  28. package/dist/gallowmereQuest.js +86 -0
  29. package/dist/gallowmereQuest.js.map +1 -0
  30. package/dist/groundItems.d.ts.map +1 -1
  31. package/dist/groundItems.js +4 -0
  32. package/dist/groundItems.js.map +1 -1
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/quests.d.ts.map +1 -1
  38. package/dist/quests.js +7 -0
  39. package/dist/quests.js.map +1 -1
  40. package/dist/storyQuests.d.ts +11 -1
  41. package/dist/storyQuests.d.ts.map +1 -1
  42. package/dist/storyQuests.js +131 -0
  43. package/dist/storyQuests.js.map +1 -1
  44. package/dist/zones.d.ts +4 -0
  45. package/dist/zones.d.ts.map +1 -1
  46. package/dist/zones.js +8 -1
  47. package/dist/zones.js.map +1 -1
  48. package/package.json +43 -43
@@ -0,0 +1,173 @@
1
+ export const GALLOWMERE_NAME = 'Gallowmere';
2
+ export const GALLOWMERE_ID = 'gallowmere';
3
+ /** The village's whole box (its discovery zone and ground box). */
4
+ export const GALLOWMERE_BOX = { minX: 342, maxX: 437, minZ: 553, maxZ: 640 };
5
+ /** The tiles the link road may lay (it runs on east and south past the box to the Dreadwoods south road). */
6
+ export const GALLOWMERE_ROAD_BOX = { minX: 342, maxX: 470, minZ: 553, maxZ: 656 };
7
+ /**
8
+ * The palisade's ring box (the ring's own tiles are its edge) and the SAFE POCKET: every tile of it, the ring and the gate
9
+ * included, is outside the PvP rule. Pure data, so zones.ts can read it without importing the rest.
10
+ */
11
+ export const GALLOWMERE_PALISADE = { minX: 366, maxX: 409, minZ: 592, maxZ: 626 };
12
+ export const GALLOWMERE_SAFE_POCKET = GALLOWMERE_PALISADE;
13
+ export function inGallowmereSafePocket(x, z) {
14
+ const tx = Math.floor(x);
15
+ const tz = Math.floor(z);
16
+ const b = GALLOWMERE_SAFE_POCKET;
17
+ return tx >= b.minX && tx <= b.maxX && tz >= b.minZ && tz <= b.maxZ;
18
+ }
19
+ /** The chapel ruin's yard (the Bell-Ringer's arena) and the mine at the east edge. */
20
+ export const GALLOWMERE_CHAPEL = { minX: 346, maxX: 372, minZ: 556, maxZ: 582 };
21
+ export const GALLOWMERE_MINE = { minX: 420, maxX: 436, minZ: 588, maxZ: 604 };
22
+ /** The green inside the palisade (grass, the gallows at its middle). */
23
+ export const GALLOWMERE_GREEN = { minX: 378, maxX: 398, minZ: 598, maxZ: 610 };
24
+ /** The roads (world polylines, width in tiles), laid as Path. */
25
+ export const GALLOWMERE_PATHS = [
26
+ { id: 'link-road', w: 3, pts: [[463, 651], [420, 651], [388, 651], [388, 626]] },
27
+ { id: 'village-street', w: 3, pts: [[388, 625], [388, 612]] },
28
+ { id: 'cross-street', w: 3, pts: [[372, 612], [404, 612]] },
29
+ { id: 'chapel-lane', w: 3, pts: [[388, 640], [352, 640], [352, 592], [359, 584]] },
30
+ { id: 'mine-track', w: 2, pts: [[420, 651], [420, 625], [424, 612], [424, 598]] },
31
+ ];
32
+ /** The palisade's gate (south wall, facing the link road) and its four towers: two at the corners, two flanking the gate. */
33
+ export const GALLOWMERE_GATE = { x: 388, z: 626, style: 'redcapgate-s' };
34
+ export const GALLOWMERE_TOWERS = [
35
+ { x: 368, z: 595, style: 'redcaptower-s' },
36
+ { x: 407, z: 595, style: 'redcaptower-s' },
37
+ { x: 382, z: 623, style: 'redcaptower-s' },
38
+ { x: 394, z: 623, style: 'redcaptower-s' },
39
+ ];
40
+ /**
41
+ * The village inside the palisade: the green with the gallows, the well, the shrine with its braziers, the four lived-in
42
+ * cottages (the Mill's two models, 7 x 5), the woodpiles, benches, crates, lamps and the gate banners.
43
+ */
44
+ export const GALLOWMERE_VILLAGE_PIECES = [
45
+ { id: 'gal-gallows', kind: 'dreadmodel', style: 'cocoongallows-s', x: 388, z: 604 },
46
+ { id: 'gal-well', kind: 'dreadmodel', style: 'townwell1x1-s', x: 397, z: 616 },
47
+ { id: 'gal-shrine', kind: 'dreadmodel', style: 'hbshrine-s', x: 380, z: 601 },
48
+ { id: 'gal-shrine-brazier-1', kind: 'dreadmodel', style: 'dhbrazier-s', x: 378, z: 601 },
49
+ { id: 'gal-shrine-brazier-2', kind: 'dreadmodel', style: 'dhbrazier-s', x: 382, z: 601 },
50
+ { id: 'gal-cottage-nw', kind: 'dreadmodel', style: 'millcottage-s', x: 374, z: 598 },
51
+ { id: 'gal-cottage-ne', kind: 'dreadmodel', style: 'fredcottage-s', x: 402, z: 598 },
52
+ { id: 'gal-cottage-sw', kind: 'dreadmodel', style: 'millcottage-n', x: 374, z: 619 },
53
+ { id: 'gal-cottage-se', kind: 'dreadmodel', style: 'fredcottage-n', x: 402, z: 619 },
54
+ { id: 'gal-woodpile-1', kind: 'dreadmodel', style: 'woodpile-s', x: 369, z: 608 },
55
+ { id: 'gal-woodpile-2', kind: 'dreadmodel', style: 'woodpile-s', x: 404, z: 608 },
56
+ { id: 'gal-bench-green', kind: 'dreadmodel', style: 'hbbench-s', x: 394, z: 603 },
57
+ { id: 'gal-crates-1', kind: 'dreadmodel', style: 'hbcrates-s', x: 369, z: 624 },
58
+ { id: 'gal-crates-2', kind: 'dreadmodel', style: 'hbcrates-s', x: 407, z: 614 },
59
+ { id: 'gal-lamp-1', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 386, z: 622 },
60
+ { id: 'gal-lamp-2', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 390, z: 622 },
61
+ { id: 'gal-lamp-3', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 386, z: 614 },
62
+ { id: 'gal-lamp-4', kind: 'dreadmodel', style: 'townlantern1x1-s', x: 390, z: 614 },
63
+ { id: 'gal-banner-1', kind: 'dreadmodel', style: 'westbanner-s', x: 385, z: 625 },
64
+ { id: 'gal-banner-2', kind: 'dreadmodel', style: 'westbanner-s', x: 391, z: 625 },
65
+ { id: 'gal-cart', kind: 'dreadprop', style: 'cart', x: 398, z: 623 },
66
+ ];
67
+ /**
68
+ * The abandoned outer half, outside the palisade: ruined cottages (the Broken Road's `ruin` props, 3 x 3) west and east, the hanging
69
+ * tree on the chapel lane (the second gallows, where the crows gather), graves, a broken cart, a camp left cold.
70
+ */
71
+ export const GALLOWMERE_OUTER_PIECES = [
72
+ { id: 'gal-ruin-w1', kind: 'dreadprop', style: 'ruin-face90', x: 357, z: 600 },
73
+ { id: 'gal-ruin-w2', kind: 'dreadprop', style: 'ruin-face60', x: 348, z: 614 },
74
+ { id: 'gal-ruin-w3', kind: 'dreadprop', style: 'ruin-face120', x: 357, z: 626 },
75
+ { id: 'gal-ruin-e1', kind: 'dreadprop', style: 'ruin-face270', x: 418, z: 618 },
76
+ { id: 'gal-ruin-e2', kind: 'dreadprop', style: 'ruin-face240', x: 424, z: 628 },
77
+ { id: 'gal-ruin-e3', kind: 'dreadprop', style: 'ruin-face300', x: 414, z: 634 },
78
+ { id: 'gal-hanging-tree', kind: 'dreadmodel', style: 'cocoongallows-e', x: 346, z: 634 },
79
+ { id: 'gal-grave-1', kind: 'dreadprop', style: 'grave', x: 347, z: 626 },
80
+ { id: 'gal-grave-2', kind: 'dreadprop', style: 'grave', x: 349, z: 628 },
81
+ { id: 'gal-grave-3', kind: 'dreadprop', style: 'grave', x: 347, z: 630 },
82
+ { id: 'gal-grave-4', kind: 'dreadprop', style: 'grave', x: 349, z: 632 },
83
+ { id: 'gal-cart-1', kind: 'dreadprop', style: 'cart', x: 414, z: 640 },
84
+ { id: 'gal-cart-2', kind: 'dreadprop', style: 'cart', x: 362, z: 636 },
85
+ { id: 'gal-cold-fire', kind: 'campfire', style: 'beach-pit', x: 362, z: 616, scale: 0.9 },
86
+ { id: 'gal-bones-1', kind: 'dreadprop', style: 'bones', x: 360, z: 618 },
87
+ { id: 'gal-bones-2', kind: 'dreadprop', style: 'bones', x: 428, z: 640 },
88
+ ];
89
+ /**
90
+ * The mine mouth at the east edge: two pillars for the mouth, a short rail with the cart and the buffers, spoil heaps.
91
+ * Stand-ins: `evmasonrypillar` for the timbers, `evrailtrack` and `dhorecart` for the rail and the cart.
92
+ */
93
+ export const GALLOWMERE_MINE_PIECES = [
94
+ { id: 'gal-mine-pillar-1', kind: 'dreadmodel', style: 'evmasonrypillar-s', x: 428, z: 593 },
95
+ { id: 'gal-mine-pillar-2', kind: 'dreadmodel', style: 'evmasonrypillar-s', x: 432, z: 593 },
96
+ ...[428, 429, 430, 431, 432].map((x, i) => ({ id: `gal-mine-rail-${i + 1}`, kind: 'dreadmodel', style: 'evrailtrack-s', x, z: 596 })),
97
+ { id: 'gal-mine-buffer', kind: 'dreadmodel', style: 'evrailbuffer-s', x: 430, z: 599 },
98
+ { id: 'gal-mine-cart', kind: 'dreadmodel', style: 'dhorecart-s', x: 430, z: 597 },
99
+ { id: 'gal-mine-brazier', kind: 'dreadmodel', style: 'dhbrazier-s', x: 434, z: 596 },
100
+ ];
101
+ /**
102
+ * The chapel ruin (the Bell-Ringer's yard): two broken towers, the altar, the braziers, broken pews, fallen pillars, the banners.
103
+ * The ruin's wall is laid by the backend round GALLOWMERE_CHAPEL with a gap at the entrance, and the bell, the four ropes, the clues,
104
+ * the clapper and the altar cache are quest props (gallowmereQuest.ts).
105
+ */
106
+ export const GALLOWMERE_CHAPEL_ENTRANCE = { minX: 358, maxX: 360, z: 582 };
107
+ export const GALLOWMERE_CHAPEL_PIECES = [
108
+ { id: 'gal-chapel-tower-1', kind: 'dreadprop', style: 'ruin-face0', x: 351, z: 560 },
109
+ { id: 'gal-chapel-tower-2', kind: 'dreadprop', style: 'ruin-face0', x: 367, z: 560 },
110
+ { id: 'gal-chapel-altar', kind: 'dreadmodel', style: 'evmasonryaltar-s', x: 359, z: 572 },
111
+ { id: 'gal-chapel-brazier-1', kind: 'dreadmodel', style: 'evwatchbrazier-s', x: 355, z: 573 },
112
+ { id: 'gal-chapel-brazier-2', kind: 'dreadmodel', style: 'evwatchbrazier-s', x: 363, z: 573 },
113
+ { id: 'gal-chapel-brazier-3', kind: 'dreadmodel', style: 'evwatchbrazier-s', x: 355, z: 579 },
114
+ { id: 'gal-chapel-brazier-4', kind: 'dreadmodel', style: 'evwatchbrazier-s', x: 363, z: 579 },
115
+ { id: 'gal-chapel-pew-1', kind: 'dreadmodel', style: 'hbbench-s', x: 353, z: 577 },
116
+ { id: 'gal-chapel-pew-2', kind: 'dreadmodel', style: 'hbbench-s', x: 365, z: 577 },
117
+ { id: 'gal-chapel-pew-3', kind: 'dreadmodel', style: 'hbbench-s', x: 353, z: 566 },
118
+ { id: 'gal-chapel-pew-4', kind: 'dreadmodel', style: 'hbbench-s', x: 365, z: 566 },
119
+ { id: 'gal-chapel-pillar-1', kind: 'dreadprop', style: 'archpillar', x: 350, z: 580 },
120
+ { id: 'gal-chapel-pillar-2', kind: 'dreadprop', style: 'archpillar', x: 369, z: 568 },
121
+ { id: 'gal-chapel-banner-1', kind: 'dreadmodel', style: 'westbanner-s', x: 357, z: 570 },
122
+ { id: 'gal-chapel-banner-2', kind: 'dreadmodel', style: 'westbanner-s', x: 361, z: 570 },
123
+ ];
124
+ /** The road signs (the placard signpost). */
125
+ export const GALLOWMERE_SIGNS = [
126
+ { id: 'gal-sign-road', x: 391, z: 649, text: 'Gallowmere. The palisade is a safe pocket: no player may strike another inside it. Outside the wall this is Dreadwoods ground, and after the lamps are lit the Hollowed walk.' },
127
+ { id: 'gal-sign-gate', x: 391, z: 628, text: 'Gallowmere gate. Warden Osric keeps it. Bell or no bell.' },
128
+ { id: 'gal-sign-chapel', x: 349, z: 588, text: 'The chapel. The bell stopped. Something still rings it (Combat 20+).' },
129
+ { id: 'gal-sign-mine', x: 421, z: 607, text: 'The old mine. Closed since the bell stopped.' },
130
+ ];
131
+ /** Standable tiles (admin teleports, smokes): one for each place. */
132
+ export const GALLOWMERE_STANDS = {
133
+ road: { x: 388, z: 646 },
134
+ gate: { x: 388, z: 632 },
135
+ gateInside: { x: 388, z: 621 },
136
+ green: { x: 388, z: 609 },
137
+ well: { x: 396, z: 613 },
138
+ chapelLane: { x: 352, z: 620 },
139
+ chapel: { x: 359, z: 578 },
140
+ chapelEntrance: { x: 359, z: 585 },
141
+ outerWest: { x: 360, z: 608 },
142
+ outerEast: { x: 414, z: 622 },
143
+ mine: { x: 425, z: 600 },
144
+ };
145
+ /** The discovery zone (types expandedContracts.ts INSERTED_DISCOVERY_ZONES). */
146
+ export const GALLOWMERE_DISCOVERY_ZONE = { id: GALLOWMERE_ID, label: GALLOWMERE_NAME, coordinateFrame: 'world', ...GALLOWMERE_BOX };
147
+ export function inGallowmereBox(x, z, pad = 0) {
148
+ const b = GALLOWMERE_BOX;
149
+ return x >= b.minX - pad && x <= b.maxX + pad && z >= b.minZ - pad && z <= b.maxZ + pad;
150
+ }
151
+ /**
152
+ * THE NIGHT (the Saltmark Light's UTC lamp clock, `saltmarkLampPhase` in the client): lit from 18:00 (inclusive) to 06:00
153
+ * (exclusive) UTC, every day, read off the wall clock so every player at the same moment agrees. The Hollowed walk only while
154
+ * the lamps are lit; by day they lie down in the ash.
155
+ */
156
+ export const GALLOWMERE_NIGHT_FROM_UTC_HOUR = 18;
157
+ export const GALLOWMERE_NIGHT_UNTIL_UTC_HOUR = 6;
158
+ const HOUR_MS = 3_600_000;
159
+ const DAY_MS = 24 * HOUR_MS;
160
+ export function isGallowmereNight(epochMs) {
161
+ if (typeof epochMs !== 'number' || !Number.isFinite(epochMs))
162
+ return false;
163
+ const ofDay = ((epochMs % DAY_MS) + DAY_MS) % DAY_MS;
164
+ return ofDay >= GALLOWMERE_NIGHT_FROM_UTC_HOUR * HOUR_MS || ofDay < GALLOWMERE_NIGHT_UNTIL_UTC_HOUR * HOUR_MS;
165
+ }
166
+ /** The next moment the night begins (18:00 UTC), at or after `epochMs` when it is day; `epochMs` itself when it is already night. */
167
+ export function nextGallowmereNightMs(epochMs) {
168
+ if (isGallowmereNight(epochMs))
169
+ return epochMs;
170
+ const dayStart = Math.floor(epochMs / DAY_MS) * DAY_MS;
171
+ return dayStart + GALLOWMERE_NIGHT_FROM_UTC_HOUR * HOUR_MS;
172
+ }
173
+ //# sourceMappingURL=gallowmere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmere.js","sourceRoot":"","sources":["../src/gallowmere.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * GALLOWMERE'S CREATURES (slice C12-2, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t22-gallowmere.md`; design sheets `gallowmere-3`
3
+ * the Hollowed and the Gallows Crows, `gallowmere-4` the Bell-Ringer):
4
+ *
5
+ * - the Hollowed Villager (level 15) and the Hollowed Miner (level 17), night-only: they walk the abandoned outer half only while the
6
+ * lamps are lit (the UTC lamp clock, gallowmere.ts isGallowmereNight) and lie down by day; the miner works near the mine. Their kinds
7
+ * start with `hollowed`, which is how the undead rule (silver weapons, dragonfire.ts) finds them;
8
+ * - the Gallows Crow (level 14), noisy scavengers at the hanging tree and the chapel, day and night;
9
+ * - the Bell-Ringer (level 22), the chapel's mini-boss: one telegraphed Bell Swing (bossSignatures.ts) with the standing counter of
10
+ * a committed signature (step clear of him before it lands), drops the Cracked Bell Shard every time.
11
+ *
12
+ * Everything hostile hunts players who stand inside the village's outer half, the chapel or the mine, and turns back at its leash;
13
+ * NOTHING hostile stands inside the palisade (the safe pocket, gallowmere.ts), and the hunt never reaches into it. Every number is a
14
+ * WORLD tile.
15
+ */
16
+ import type { LanternWakeBox } from './lanternWake.js';
17
+ export declare const HOLLOWED_VILLAGER_KIND = "hollowedvillager";
18
+ export declare const HOLLOWED_MINER_KIND = "hollowedminer";
19
+ export declare const GALLOWS_CROW_KIND = "gallowscrow";
20
+ export declare const BELL_RINGER_KIND = "bellringer";
21
+ export declare const BELL_RINGER_NAME = "The Bell-Ringer";
22
+ export type GallowmereHostileKind = typeof HOLLOWED_VILLAGER_KIND | typeof HOLLOWED_MINER_KIND | typeof GALLOWS_CROW_KIND | typeof BELL_RINGER_KIND;
23
+ export declare const GALLOWMERE_HOSTILE_KINDS: readonly GallowmereHostileKind[];
24
+ /** The two kinds that walk only at night. */
25
+ export declare const GALLOWMERE_NIGHT_KINDS: readonly string[];
26
+ export declare function isGallowmereHostileKind(kind: string): kind is GallowmereHostileKind;
27
+ export declare function isGallowmereNightKind(kind: string): boolean;
28
+ export declare const GALLOWMERE_CREATURES: Readonly<Record<GallowmereHostileKind, {
29
+ name: string;
30
+ level: readonly [number, number];
31
+ maxHit: number;
32
+ healthFactor: number;
33
+ respawnMs: number;
34
+ note: string;
35
+ }>>;
36
+ /** Who hunts whom: aggro and leash radii (tiles) and the line a player is told when one locks on. Only players inside the hunt's ground are hunted. */
37
+ export declare const GALLOWMERE_AGGRO: Readonly<Record<GallowmereHostileKind, {
38
+ aggro: number;
39
+ leash: number;
40
+ text: string;
41
+ }>>;
42
+ /**
43
+ * The hunting ground: the box outside the palisade (the outer half, the chapel lane, the chapel and the mine). A hunter never locks on to
44
+ * a player inside the palisade, and a creature spawned outside never walks in (the ring is shut, only the gate is open and the hunt stops
45
+ * at it).
46
+ */
47
+ export declare function inGallowmereHunt(x: number, z: number): boolean;
48
+ export type GallowmereSpot = {
49
+ readonly kind: GallowmereHostileKind;
50
+ readonly x: number;
51
+ readonly z: number;
52
+ readonly leash: number;
53
+ };
54
+ /** Where they stand: the Hollowed over the outer half and the mine, the crows at the hanging tree and the chapel, the Bell-Ringer under the bell. */
55
+ export declare const GALLOWMERE_SPOTS: readonly GallowmereSpot[];
56
+ /** Movement of the hostile ones when they are not hunting. */
57
+ export declare const GALLOWMERE_PACE: Readonly<Record<GallowmereHostileKind, {
58
+ speed: number;
59
+ idleChance: number;
60
+ pause: readonly [number, number];
61
+ }>>;
62
+ /** A place a hunter may never stand: inside the palisade. Used by the world's hunt and the smokes. */
63
+ export declare const GALLOWMERE_NO_HUNT_BOX: LanternWakeBox;
64
+ /** The chapel and the mine boxes, re-exported for the hunt tests (which part of the hunting ground a spot is in). */
65
+ export declare const GALLOWMERE_HUNT_PARTS: {
66
+ readonly chapel: LanternWakeBox;
67
+ readonly mine: LanternWakeBox;
68
+ };
69
+ //# sourceMappingURL=gallowmereCreatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmereCreatures.d.ts","sourceRoot":"","sources":["../src/gallowmereCreatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG,OAAO,sBAAsB,GAAG,OAAO,mBAAmB,GAAG,OAAO,iBAAiB,GAAG,OAAO,gBAAgB,CAAC;AACpJ,eAAO,MAAM,wBAAwB,EAAE,SAAS,qBAAqB,EAAuF,CAAC;AAC7J,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAkD,CAAC;AAEvG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,qBAAqB,CAEnF;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CACzC,MAAM,CAAC,qBAAqB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkCzJ,CAAC;AAEF,uJAAuJ;AACvJ,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAKpH,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtI,qJAAqJ;AACrJ,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAwBrD,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAK5I,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,sBAAsB,EAAE,cAAoC,CAAC;AAC1E,qHAAqH;AACrH,eAAO,MAAM,qBAAqB,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;CAAyD,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { GALLOWMERE_BOX, GALLOWMERE_CHAPEL, GALLOWMERE_MINE, GALLOWMERE_PALISADE, inGallowmereSafePocket } from './gallowmere.js';
2
+ export const HOLLOWED_VILLAGER_KIND = 'hollowedvillager';
3
+ export const HOLLOWED_MINER_KIND = 'hollowedminer';
4
+ export const GALLOWS_CROW_KIND = 'gallowscrow';
5
+ export const BELL_RINGER_KIND = 'bellringer';
6
+ export const BELL_RINGER_NAME = 'The Bell-Ringer';
7
+ export const GALLOWMERE_HOSTILE_KINDS = [HOLLOWED_VILLAGER_KIND, HOLLOWED_MINER_KIND, GALLOWS_CROW_KIND, BELL_RINGER_KIND];
8
+ /** The two kinds that walk only at night. */
9
+ export const GALLOWMERE_NIGHT_KINDS = [HOLLOWED_VILLAGER_KIND, HOLLOWED_MINER_KIND];
10
+ export function isGallowmereHostileKind(kind) {
11
+ return GALLOWMERE_HOSTILE_KINDS.includes(kind);
12
+ }
13
+ export function isGallowmereNightKind(kind) {
14
+ return GALLOWMERE_NIGHT_KINDS.includes(kind);
15
+ }
16
+ export const GALLOWMERE_CREATURES = {
17
+ hollowedvillager: {
18
+ name: 'Hollowed Villager',
19
+ level: [15, 15],
20
+ maxHit: 8,
21
+ healthFactor: 1,
22
+ respawnMs: 40_000,
23
+ note: 'A shambling villager the bell left behind: slow, common round the cottages, disturbed by firelight. It walks only after the lamps are lit (18:00 to 06:00 UTC) and lies down in the ash by day.',
24
+ },
25
+ hollowedminer: {
26
+ name: 'Hollowed Miner',
27
+ level: [17, 17],
28
+ maxHit: 11,
29
+ healthFactor: 1.15,
30
+ respawnMs: 50_000,
31
+ note: 'A miner the mine kept: tougher and more set on you than the villagers, with a pick or a broken tool, found near the mine. It walks only after the lamps are lit (18:00 to 06:00 UTC).',
32
+ },
33
+ gallowscrow: {
34
+ name: 'Gallows Crow',
35
+ level: [14, 14],
36
+ maxHit: 6,
37
+ healthFactor: 0.8,
38
+ respawnMs: 30_000,
39
+ note: 'A noisy scavenger of the hanging tree and the chapel: quick, harder to hit than it looks, and it harries anyone who comes near. Day or night.',
40
+ },
41
+ bellringer: {
42
+ name: BELL_RINGER_NAME,
43
+ level: [22, 22],
44
+ maxHit: 16,
45
+ healthFactor: 1,
46
+ respawnMs: 240_000,
47
+ note: 'The chapel warden gone wrong, who rings the bell for reasons of his own: every fourth blow is a Bell Swing, announced a full turn ahead, twice an ordinary hit; step out of his reach before it lands and it misses. Drops the Cracked Bell Shard every time.',
48
+ },
49
+ };
50
+ /** Who hunts whom: aggro and leash radii (tiles) and the line a player is told when one locks on. Only players inside the hunt's ground are hunted. */
51
+ export const GALLOWMERE_AGGRO = {
52
+ hollowedvillager: { aggro: 5, leash: 14, text: 'A Hollowed Villager lifts its head and shambles at you, still walking home.' },
53
+ hollowedminer: { aggro: 6, leash: 16, text: 'A Hollowed Miner turns from the dark with its pick raised. The mine keeps what it takes.' },
54
+ gallowscrow: { aggro: 5, leash: 12, text: 'A Gallows Crow screams and dives at you.' },
55
+ bellringer: { aggro: 4, leash: 9, text: 'The Bell-Ringer turns from the bell. "If it rings again, do not answer."' },
56
+ };
57
+ /**
58
+ * The hunting ground: the box outside the palisade (the outer half, the chapel lane, the chapel and the mine). A hunter never locks on to
59
+ * a player inside the palisade, and a creature spawned outside never walks in (the ring is shut, only the gate is open and the hunt stops
60
+ * at it).
61
+ */
62
+ export function inGallowmereHunt(x, z) {
63
+ const b = GALLOWMERE_BOX;
64
+ if (x < b.minX || x > b.maxX || z < b.minZ || z > b.maxZ)
65
+ return false;
66
+ return !inGallowmereSafePocket(x, z);
67
+ }
68
+ /** Where they stand: the Hollowed over the outer half and the mine, the crows at the hanging tree and the chapel, the Bell-Ringer under the bell. */
69
+ export const GALLOWMERE_SPOTS = [
70
+ // Hollowed Villagers: the abandoned cottages west and east, the cold camp, the lane's graves.
71
+ { kind: 'hollowedvillager', x: 355, z: 606, leash: 6 },
72
+ { kind: 'hollowedvillager', x: 360, z: 620, leash: 6 },
73
+ { kind: 'hollowedvillager', x: 348, z: 620, leash: 5 },
74
+ { kind: 'hollowedvillager', x: 356, z: 630, leash: 5 },
75
+ { kind: 'hollowedvillager', x: 416, z: 624, leash: 6 },
76
+ { kind: 'hollowedvillager', x: 425, z: 620, leash: 5 },
77
+ { kind: 'hollowedvillager', x: 412, z: 636, leash: 5 },
78
+ { kind: 'hollowedvillager', x: 430, z: 634, leash: 5 },
79
+ // Hollowed Miners: round the mine mouth and its track.
80
+ { kind: 'hollowedminer', x: 427, z: 600, leash: 5 },
81
+ { kind: 'hollowedminer', x: 431, z: 603, leash: 4 },
82
+ { kind: 'hollowedminer', x: 424, z: 608, leash: 5 },
83
+ { kind: 'hollowedminer', x: 428, z: 612, leash: 4 },
84
+ // Gallows Crows: the hanging tree and the lane's graves, the chapel's yard and ruined towers.
85
+ { kind: 'gallowscrow', x: 348, z: 636, leash: 5 },
86
+ { kind: 'gallowscrow', x: 352, z: 630, leash: 5 },
87
+ { kind: 'gallowscrow', x: 349, z: 600, leash: 5 },
88
+ { kind: 'gallowscrow', x: 354, z: 585, leash: 5 },
89
+ { kind: 'gallowscrow', x: 350, z: 564, leash: 4 },
90
+ { kind: 'gallowscrow', x: 368, z: 564, leash: 4 },
91
+ // The Bell-Ringer, under the bell at the north end of the chapel.
92
+ { kind: 'bellringer', x: 359, z: 561, leash: 2 },
93
+ ];
94
+ /** Movement of the hostile ones when they are not hunting. */
95
+ export const GALLOWMERE_PACE = {
96
+ hollowedvillager: { speed: 0.8, idleChance: 0.6, pause: [3, 9] },
97
+ hollowedminer: { speed: 0.9, idleChance: 0.55, pause: [3, 8] },
98
+ gallowscrow: { speed: 1.6, idleChance: 0.4, pause: [2, 5] },
99
+ bellringer: { speed: 0.9, idleChance: 0.85, pause: [5, 12] },
100
+ };
101
+ /** A place a hunter may never stand: inside the palisade. Used by the world's hunt and the smokes. */
102
+ export const GALLOWMERE_NO_HUNT_BOX = GALLOWMERE_PALISADE;
103
+ /** The chapel and the mine boxes, re-exported for the hunt tests (which part of the hunting ground a spot is in). */
104
+ export const GALLOWMERE_HUNT_PARTS = { chapel: GALLOWMERE_CHAPEL, mine: GALLOWMERE_MINE };
105
+ //# sourceMappingURL=gallowmereCreatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmereCreatures.js","sourceRoot":"","sources":["../src/gallowmereCreatures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * GALLOWMERE'S PEOPLE (slice C12-2, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t22-gallowmere.md`; design sheet `gallowmere-2`,
3
+ * "The Cast"). Three people, each with a kind of their own on the player rig (frontend gallowmereFolk look): Warden Osric, the
4
+ * grizzled gatekeeper with a boar-spear who gives The Cracked Bell; Mother Hesk, the old herb-woman with her basket and lantern, who
5
+ * knows the ash; and Brother Calloway, the thin priest in ash-grey holding the bell rope. None is a fight (none of their kinds is in
6
+ * the attackable list), so a click is a talk. Osric and Hesk stand inside the palisade (the safe pocket); Calloway stays at the chapel.
7
+ *
8
+ * Every number is a WORLD tile. Backend gallowmereFolk.ts spawns them.
9
+ */
10
+ export declare const GALLOWMERE_OSRIC_KIND = "gwosric";
11
+ export declare const GALLOWMERE_HESK_KIND = "gwhesk";
12
+ export declare const GALLOWMERE_CALLOWAY_KIND = "gwcalloway";
13
+ export declare const GALLOWMERE_OSRIC_NAME = "Warden Osric";
14
+ export declare const GALLOWMERE_HESK_NAME = "Mother Hesk";
15
+ export declare const GALLOWMERE_CALLOWAY_NAME = "Brother Calloway";
16
+ export type GallowmereFolkKind = typeof GALLOWMERE_OSRIC_KIND | typeof GALLOWMERE_HESK_KIND | typeof GALLOWMERE_CALLOWAY_KIND;
17
+ /** Where each stands, facing what they look at: Osric just inside the gate, Hesk at the shrine, Calloway at the chapel's nave. */
18
+ export declare const GALLOWMERE_FOLK: ReadonlyArray<{
19
+ id: string;
20
+ kind: GallowmereFolkKind;
21
+ name: string;
22
+ x: number;
23
+ z: number;
24
+ faceX: number;
25
+ faceZ: number;
26
+ leash: number;
27
+ }>;
28
+ export declare function gallowmereFolkName(kind: string): string | null;
29
+ export declare function isGallowmereFolkKind(kind: string): kind is GallowmereFolkKind;
30
+ /** What a click on Calloway says when it is not a talk (never an attack): he keeps the bell rope and answers nothing he is not asked. */
31
+ export declare const GALLOWMERE_CALLOWAY_LINE = "Brother Calloway turns the bell rope over in his thin hands and does not look up. \"If it rings again, do not answer.\"";
32
+ //# sourceMappingURL=gallowmereFolk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmereFolk.d.ts","sourceRoot":"","sources":["../src/gallowmereFolk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,wBAAwB,eAAe,CAAC;AACrD,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,GAAG,OAAO,oBAAoB,GAAG,OAAO,wBAAwB,CAAC;AAE9H,kIAAkI;AAClI,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CACvH,CAIA,CAAC;AACF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9D;AACD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAE7E;AAED,yIAAyI;AACzI,eAAO,MAAM,wBAAwB,4HAA0H,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * GALLOWMERE'S PEOPLE (slice C12-2, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t22-gallowmere.md`; design sheet `gallowmere-2`,
3
+ * "The Cast"). Three people, each with a kind of their own on the player rig (frontend gallowmereFolk look): Warden Osric, the
4
+ * grizzled gatekeeper with a boar-spear who gives The Cracked Bell; Mother Hesk, the old herb-woman with her basket and lantern, who
5
+ * knows the ash; and Brother Calloway, the thin priest in ash-grey holding the bell rope. None is a fight (none of their kinds is in
6
+ * the attackable list), so a click is a talk. Osric and Hesk stand inside the palisade (the safe pocket); Calloway stays at the chapel.
7
+ *
8
+ * Every number is a WORLD tile. Backend gallowmereFolk.ts spawns them.
9
+ */
10
+ export const GALLOWMERE_OSRIC_KIND = 'gwosric';
11
+ export const GALLOWMERE_HESK_KIND = 'gwhesk';
12
+ export const GALLOWMERE_CALLOWAY_KIND = 'gwcalloway';
13
+ export const GALLOWMERE_OSRIC_NAME = 'Warden Osric';
14
+ export const GALLOWMERE_HESK_NAME = 'Mother Hesk';
15
+ export const GALLOWMERE_CALLOWAY_NAME = 'Brother Calloway';
16
+ /** Where each stands, facing what they look at: Osric just inside the gate, Hesk at the shrine, Calloway at the chapel's nave. */
17
+ export const GALLOWMERE_FOLK = [
18
+ { id: 'gal-osric', kind: GALLOWMERE_OSRIC_KIND, name: GALLOWMERE_OSRIC_NAME, x: 388, z: 621, faceX: 388, faceZ: 628, leash: 1 },
19
+ { id: 'gal-hesk', kind: GALLOWMERE_HESK_KIND, name: GALLOWMERE_HESK_NAME, x: 380, z: 604, faceX: 380, faceZ: 601, leash: 1 },
20
+ { id: 'gal-calloway', kind: GALLOWMERE_CALLOWAY_KIND, name: GALLOWMERE_CALLOWAY_NAME, x: 359, z: 577, faceX: 359, faceZ: 572, leash: 1 },
21
+ ];
22
+ export function gallowmereFolkName(kind) {
23
+ return GALLOWMERE_FOLK.find((p) => p.kind === kind)?.name ?? null;
24
+ }
25
+ export function isGallowmereFolkKind(kind) {
26
+ return GALLOWMERE_FOLK.some((p) => p.kind === kind);
27
+ }
28
+ /** What a click on Calloway says when it is not a talk (never an attack): he keeps the bell rope and answers nothing he is not asked. */
29
+ export const GALLOWMERE_CALLOWAY_LINE = 'Brother Calloway turns the bell rope over in his thin hands and does not look up. "If it rings again, do not answer."';
30
+ //# sourceMappingURL=gallowmereFolk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmereFolk.js","sourceRoot":"","sources":["../src/gallowmereFolk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAI3D,kIAAkI;AAClI,MAAM,CAAC,MAAM,eAAe,GAEvB;IACH,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/H,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5H,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;CACzI,CAAC;AACF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;AACpE,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,yIAAyI;AACzI,MAAM,CAAC,MAAM,wBAAwB,GAAG,uHAAuH,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * THE CRACKED BELL (slice C12-3, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t22-gallowmere.md`; PLAN_1_TO_40.md row "The Cracked Bell
3
+ * (14-22)"; design sheets `gallowmere-4` the Bell-Ringer and `gallowmere-5` the bell puzzle). Warden Osric wants the chapel's bell
4
+ * answered, because something still rings it. Mother Hesk says the bell will take blessed water and a clapper, and the water wants the
5
+ * ash of the Hollowed, who only walk after the lamps are lit (the UTC lamp clock, gallowmere.ts). The steps:
6
+ *
7
+ * 1. talk to Mother Hesk 3. bring her Hollowed Ash: she gives Blessed Water
8
+ * 2. put down four Hollowed (night only) 4. read three clues in the chapel (they give the rope order)
9
+ * 5. take the fallen Bell Clapper 6. refit it and sprinkle the Blessed Water on the bell
10
+ * 7. pull the four bell ropes in the right order 8. put down the Bell-Ringer (level 22)
11
+ * 9. bring Osric the Cracked Bell Shard
12
+ *
13
+ * A wrong rope resets the ropes and wakes the Hollowed round the chapel (the backend's gallowmere-wrong-rope effect). Rewards are a
14
+ * placeholder for the balance pass. Every number is a WORLD tile.
15
+ */
16
+ import type { LanternWakeQuestProp } from './lanternWakeQuests.js';
17
+ export declare const CRACKED_BELL_QUEST_ID = "crackedBell";
18
+ export declare const CRACKED_BELL_QUEST_NAME = "The Cracked Bell";
19
+ /** Combat level the quest asks (Gallowmere is levels 14-22; a placeholder until the balance pass). */
20
+ export declare const CRACKED_BELL_COMBAT_LEVEL = 14;
21
+ export declare const HOLLOWED_ASH_KIND = "hollowedash";
22
+ export declare const BLESSED_WATER_KIND = "blessedwater";
23
+ export declare const BELL_CLAPPER_KIND = "bellclapper";
24
+ export declare const CRACKED_BELL_SHARD_KIND = "crackedbellshard";
25
+ export declare const GALLOWMERE_QUEST_ITEM_KINDS: readonly string[];
26
+ export declare const GALLOWMERE_QUEST_ITEM_NAMES: Readonly<Record<string, string>>;
27
+ export declare const GALLOWMERE_QUEST_ITEM_NOTES: Readonly<Record<string, string>>;
28
+ /** How many Hollowed to put down, how much ash to bring, how many clues to read. */
29
+ export declare const CRACKED_BELL_HOLLOWED_TO_DEFEAT = 4;
30
+ export declare const CRACKED_BELL_ASH = 3;
31
+ export declare const CRACKED_BELL_CLUES = 3;
32
+ /** Props (questprop entities, style `<prop>:<which>`). */
33
+ export declare const GB_PROP: {
34
+ readonly clue: "gbclue";
35
+ readonly clapper: "gbclapper";
36
+ readonly bell: "gbbell";
37
+ readonly rope: "gbrope";
38
+ };
39
+ /** The three clues in the chapel: a scratched pew note, a soot-marked shrine and an ash circle. */
40
+ export declare const GB_CLUE_PEW: LanternWakeQuestProp;
41
+ export declare const GB_CLUE_SHRINE: LanternWakeQuestProp;
42
+ export declare const GB_CLUE_ASH: LanternWakeQuestProp;
43
+ /** The fallen clapper and the bell it belongs in (under the tower at the chapel's north end). */
44
+ export declare const GB_CLAPPER: LanternWakeQuestProp;
45
+ export declare const GB_BELL: LanternWakeQuestProp;
46
+ /** The four bell ropes, left to right across the nave: I, II, III, IV. */
47
+ export declare const GB_ROPE_I: LanternWakeQuestProp;
48
+ export declare const GB_ROPE_II: LanternWakeQuestProp;
49
+ export declare const GB_ROPE_III: LanternWakeQuestProp;
50
+ export declare const GB_ROPE_IV: LanternWakeQuestProp;
51
+ export declare const GALLOWMERE_QUEST_PROPS: readonly LanternWakeQuestProp[];
52
+ /** The right order (the sheet's panel: Ash before prayer, the shrine answers second, the old bell speaks before the last hush): II, IV, I, III. */
53
+ export declare const GALLOWMERE_ROPE_ORDER: readonly string[];
54
+ /** The effect names the backend does on a hand-in and on a wrong rope (types StoryStep `effect` and `wrong`). */
55
+ export declare const GALLOWMERE_BLESSED_WATER_EFFECT = "gallowmere-blessed-water";
56
+ export declare const GALLOWMERE_WRONG_ROPE_EFFECT = "gallowmere-wrong-rope";
57
+ /** How many Hollowed a wrong rope wakes round the player, and for how long they walk. */
58
+ export declare const GALLOWMERE_WRONG_ROPE_HOLLOWED = 2;
59
+ export declare const GALLOWMERE_WRONG_ROPE_MS = 90000;
60
+ /** The kit model a Gallowmere quest prop draws with (CAPITAL_BUILDING_MODELS stand-ins), or null if not one of them. */
61
+ export declare function gallowmerePropModel(prop: string): string | null;
62
+ /** What the game calls each prop (hover name, guide). */
63
+ export declare const GALLOWMERE_QUEST_PROP_NAMES: Readonly<Record<string, string>>;
64
+ /** What a prop says when no step wants it. */
65
+ export declare const GALLOWMERE_PROP_IDLE_LINES: Readonly<Record<string, string>>;
66
+ /** What the quest pays: coins, Explorer XP and a combat XP lump. A placeholder for the balance pass. */
67
+ export declare const CRACKED_BELL_REWARD: {
68
+ readonly coins: 1200;
69
+ readonly explorerXp: 700;
70
+ readonly choiceXp: 1500;
71
+ };
72
+ /** Where the chapel's yard stands, for the quest's `reach` step. */
73
+ export declare const CRACKED_BELL_CHAPEL_AREA: {
74
+ readonly minX: 346;
75
+ readonly maxX: 372;
76
+ readonly minZ: 556;
77
+ readonly maxZ: 582;
78
+ };
79
+ //# sourceMappingURL=gallowmereQuest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmereQuest.d.ts","sourceRoot":"","sources":["../src/gallowmereQuest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,sGAAsG;AACtG,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAAwF,CAAC;AAClJ,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxE,CAAC;AACF,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxE,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,0DAA0D;AAC1D,eAAO,MAAM,OAAO;;;;;CAAoF,CAAC;AAEzG,mGAAmG;AACnG,eAAO,MAAM,WAAW,EAAE,oBAAiG,CAAC;AAC5H,eAAO,MAAM,cAAc,EAAE,oBAAuG,CAAC;AACrI,eAAO,MAAM,WAAW,EAAE,oBAAiG,CAAC;AAC5H,iGAAiG;AACjG,eAAO,MAAM,UAAU,EAAE,oBAAiG,CAAC;AAC3H,eAAO,MAAM,OAAO,EAAE,oBAA2F,CAAC;AAClH,0EAA0E;AAC1E,eAAO,MAAM,SAAS,EAAE,oBAA6F,CAAC;AACtH,eAAO,MAAM,UAAU,EAAE,oBAA+F,CAAC;AACzH,eAAO,MAAM,WAAW,EAAE,oBAAiG,CAAC;AAC5H,eAAO,MAAM,UAAU,EAAE,oBAA+F,CAAC;AACzH,eAAO,MAAM,sBAAsB,EAAE,SAAS,oBAAoB,EAEjE,CAAC;AACF,mJAAmJ;AACnJ,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA6E,CAAC;AACjI,iHAAiH;AACjH,eAAO,MAAM,+BAA+B,6BAA6B,CAAC;AAC1E,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AACpE,yFAAyF;AACzF,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,wHAAwH;AACxH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM/D;AAED,yDAAyD;AACzD,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvE,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,mBAAmB;;;;CAA4D,CAAC;AAE7F,oEAAoE;AACpE,eAAO,MAAM,wBAAwB;;;;;CAA0D,CAAC"}