@dreadwood-types/types 0.1.234 → 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 (58) 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 +9 -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/fairContests.d.ts +197 -0
  15. package/dist/fairContests.d.ts.map +1 -0
  16. package/dist/fairContests.js +201 -0
  17. package/dist/fairContests.js.map +1 -0
  18. package/dist/gallowmere.d.ts +171 -0
  19. package/dist/gallowmere.d.ts.map +1 -0
  20. package/dist/gallowmere.js +173 -0
  21. package/dist/gallowmere.js.map +1 -0
  22. package/dist/gallowmereCreatures.d.ts +69 -0
  23. package/dist/gallowmereCreatures.d.ts.map +1 -0
  24. package/dist/gallowmereCreatures.js +105 -0
  25. package/dist/gallowmereCreatures.js.map +1 -0
  26. package/dist/gallowmereFolk.d.ts +32 -0
  27. package/dist/gallowmereFolk.d.ts.map +1 -0
  28. package/dist/gallowmereFolk.js +30 -0
  29. package/dist/gallowmereFolk.js.map +1 -0
  30. package/dist/gallowmereQuest.d.ts +79 -0
  31. package/dist/gallowmereQuest.d.ts.map +1 -0
  32. package/dist/gallowmereQuest.js +86 -0
  33. package/dist/gallowmereQuest.js.map +1 -0
  34. package/dist/groundItems.d.ts.map +1 -1
  35. package/dist/groundItems.js +5 -0
  36. package/dist/groundItems.js.map +1 -1
  37. package/dist/index.d.ts +5 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +5 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/legacy.d.ts +1 -0
  42. package/dist/legacy.d.ts.map +1 -1
  43. package/dist/legacy.js +1 -0
  44. package/dist/legacy.js.map +1 -1
  45. package/dist/messages.d.ts +2 -2
  46. package/dist/messages.d.ts.map +1 -1
  47. package/dist/quests.d.ts.map +1 -1
  48. package/dist/quests.js +13 -0
  49. package/dist/quests.js.map +1 -1
  50. package/dist/storyQuests.d.ts +11 -1
  51. package/dist/storyQuests.d.ts.map +1 -1
  52. package/dist/storyQuests.js +165 -0
  53. package/dist/storyQuests.js.map +1 -1
  54. package/dist/zones.d.ts +4 -0
  55. package/dist/zones.d.ts.map +1 -1
  56. package/dist/zones.js +8 -1
  57. package/dist/zones.js.map +1 -1
  58. package/package.json +2 -2
@@ -0,0 +1,201 @@
1
+ export const FAIR_CONTEST_IDS = ['butts', 'piglets', 'show', 'herd'];
2
+ /** The ribbon a placing earns: one item, a few per placing (gold 3, silver 2, bronze 1). */
3
+ export const FAIR_RIBBON_KIND = 'fairribbon';
4
+ // ---- The Marshal's menu ----------------------------------------------------------------------------------------------
5
+ /** npc_action ids the Marshal answers (the client sends them on untouched). */
6
+ export const FAIR_CONTEST_ACTION_PREFIX = 'fairc:';
7
+ export const FAIR_CONTEST_ACTIONS = {
8
+ board: 'fairc:board',
9
+ butts: 'fairc:butts',
10
+ piglets: 'fairc:piglets',
11
+ show: 'fairc:show',
12
+ present: 'fairc:present',
13
+ herd: 'fairc:herd',
14
+ };
15
+ export const FAIR_CONTEST_OPTION_LABELS = {
16
+ [FAIR_CONTEST_ACTIONS.board]: 'Contest board',
17
+ [FAIR_CONTEST_ACTIONS.butts]: 'Enter the archery butts',
18
+ [FAIR_CONTEST_ACTIONS.piglets]: 'Enter the piglet chase',
19
+ [FAIR_CONTEST_ACTIONS.show]: 'Enter the livestock show',
20
+ [FAIR_CONTEST_ACTIONS.present]: 'Present my entrant',
21
+ [FAIR_CONTEST_ACTIONS.herd]: 'Enter the herding trial',
22
+ };
23
+ /** The actions on the animals themselves (a show lamb, a loose lamb, a greased piglet). */
24
+ export const FAIR_ANIMAL_ACTIONS = {
25
+ brush: 'fairc:brush',
26
+ feed: 'fairc:feed',
27
+ lead: 'fairc:lead',
28
+ herd: 'fairc:herd-lamb',
29
+ catch: 'fairc:catch',
30
+ };
31
+ /** Who the two kinds of lamb are, and the piglets (NPC `name`s: the client dresses their menus by name). */
32
+ export const FAIR_SHOW_LAMB_NAME = 'Show Lamb';
33
+ export const FAIR_LOOSE_LAMB_NAME = 'Loose Lamb';
34
+ export const FAIR_PIGLET_NAME = 'Greased Piglet';
35
+ export const FAIR_PUP_NAME = 'Nye\'s Pup';
36
+ const prizes = (gold, silver, bronze, none) => ({ gold, silver, bronze, none });
37
+ export const FAIR_CONTESTS = {
38
+ butts: {
39
+ id: 'butts',
40
+ title: 'The Archery Butts',
41
+ skill: 'archery',
42
+ blurb: 'Three rounds of three arrows at the contest butts. 24 or more takes gold, 18 silver, 12 bronze.',
43
+ prizes: prizes({ coins: 60, xp: 80, ribbons: 3 }, { coins: 40, xp: 55, ribbons: 2 }, { coins: 25, xp: 35, ribbons: 1 }, { coins: 8, xp: 10, ribbons: 0 }),
44
+ },
45
+ piglets: {
46
+ id: 'piglets',
47
+ title: 'The Piglet Chase',
48
+ skill: 'strength',
49
+ blurb: 'A minute in the arena with the greased piglets. Catch five for gold, three for silver, two for bronze.',
50
+ prizes: prizes({ coins: 60, xp: 80, ribbons: 3 }, { coins: 40, xp: 55, ribbons: 2 }, { coins: 25, xp: 35, ribbons: 1 }, { coins: 8, xp: 10, ribbons: 0 }),
51
+ },
52
+ show: {
53
+ id: 'show',
54
+ title: 'The Livestock Show',
55
+ skill: 'foraging',
56
+ blurb: 'Brush a show lamb, give it an apple, lead it to the ring and present it. Judged on care, not on luck.',
57
+ prizes: prizes({ coins: 60, xp: 80, ribbons: 3 }, { coins: 40, xp: 55, ribbons: 2 }, { coins: 25, xp: 35, ribbons: 1 }, { coins: 8, xp: 10, ribbons: 0 }),
58
+ },
59
+ herd: {
60
+ id: 'herd',
61
+ title: 'The Herding Trial',
62
+ skill: 'explorer',
63
+ blurb: 'Round three loose lambs into the fold before the clock runs out. A sheepdog pup rounds them up for you.',
64
+ prizes: prizes({ coins: 60, xp: 80, ribbons: 3 }, { coins: 40, xp: 55, ribbons: 2 }, { coins: 25, xp: 35, ribbons: 1 }, { coins: 8, xp: 10, ribbons: 0 }),
65
+ },
66
+ };
67
+ /** The slate id a contest's prize is recorded under for the hour. */
68
+ export const fairContestDoneId = (id) => `contest-${id}`;
69
+ /**
70
+ * The contest meadow: the low basin east of the fair's pens (the 2026-10-14 survey: grass at height 0 to 2 between the pens'
71
+ * plateau and the shore cliff, a few rocks to clear). Levelled to one height and eased into the land, like the fair itself.
72
+ */
73
+ export const FAIR_MEADOW = { minX: 904, maxX: 922, minZ: 631, maxZ: 652 };
74
+ export const FAIR_MEADOW_HEIGHT = 2;
75
+ export const FAIR_MEADOW_EASE = 3;
76
+ /** The tile a signpost at the meadow's mouth stands on, and what it says. */
77
+ export const FAIR_MEADOW_SIGN = { x: 903, z: 649, text: 'Fair Contests' };
78
+ /** The fold (the pup's pen and the show lambs' home): a rail fence, a gap on the east side. */
79
+ export const FAIR_FOLD = { minX: 905, maxX: 909, minZ: 633, maxZ: 638 };
80
+ export const FAIR_FOLD_GAP = [{ x: 909, z: 635 }, { x: 909, z: 636 }];
81
+ /** Inside the fold, where a herded lamb counts (strictly inside the fence). */
82
+ export const FAIR_FOLD_INSIDE = { minX: 906, maxX: 908, minZ: 634, maxZ: 637 };
83
+ /** The three show lambs graze inside the fold. */
84
+ export const FAIR_SHOW_LAMB_SPOTS = [{ x: 906, z: 634 }, { x: 907, z: 636 }, { x: 908, z: 634 }];
85
+ /** The loose lambs graze on the meadow in front of the fold and its gate. */
86
+ export const FAIR_LOOSE_LAMB_SPOTS = [{ x: 911, z: 634 }, { x: 912, z: 638 }, { x: 910, z: 641 }];
87
+ /** The piglet arena: rail fence, a gap in the south side. Piglets stay inside. */
88
+ export const FAIR_PIGLET_ARENA = { minX: 914, maxX: 921, minZ: 632, maxZ: 640 };
89
+ export const FAIR_PIGLET_GATE = [{ x: 917, z: 640 }, { x: 918, z: 640 }];
90
+ export const FAIR_PIGLET_SPOTS = [
91
+ { x: 916, z: 634 }, { x: 919, z: 634 }, { x: 917, z: 637 }, { x: 920, z: 637 }, { x: 915, z: 638 }, { x: 919, z: 639 },
92
+ ];
93
+ export const FAIR_PIGLET_LEASH = 3;
94
+ /** The contest butts: a row at z 650, shot from marks six tiles north (the drill's firing position is z - 6). */
95
+ export const FAIR_BUTT_PREFIX = 'fair-butt-';
96
+ export const FAIR_BUTT_ROW_Z = 650;
97
+ export const FAIR_BUTT_FIRING_Z = FAIR_BUTT_ROW_Z - 6;
98
+ export const FAIR_BUTT_XS = [908, 913, 918];
99
+ export const FAIR_BUTT_IDS = FAIR_BUTT_XS.map((_, i) => `${FAIR_BUTT_PREFIX}${i + 1}`);
100
+ /** The chained bows' rack on the firing line (anyone may shoot with no bow in hand, as at Brindlecross). */
101
+ export const FAIR_BUTT_BOWS = { x: 921, z: FAIR_BUTT_FIRING_Z };
102
+ export function isFairButtTargetId(id) {
103
+ return typeof id === 'string' && /^fair-butt-[1-9]\d*$/.test(id) && FAIR_BUTT_IDS.includes(id);
104
+ }
105
+ // ---- The archery butts -----------------------------------------------------------------------------------------------
106
+ export const FAIR_BUTTS_ROUNDS = 3;
107
+ export const FAIR_BUTTS_ARROWS = 3;
108
+ export const FAIR_BUTTS_TIERS = { gold: 24, silver: 18, bronze: 12 };
109
+ /**
110
+ * One arrow's score, 1 to 5: one plus how many of four rolls (each 0 to 1) fall under the archer's chance. The chance climbs
111
+ * with Archery (0.25 at level 1 to 0.6 at level 30 and over), so a better shot scores more and nobody is certain.
112
+ */
113
+ export function fairArrowScore(archery, rolls) {
114
+ const chance = Math.min(0.6, Math.max(0.25, 0.25 + (Math.max(1, archery) - 1) * 0.012));
115
+ let score = 1;
116
+ for (let i = 0; i < 4; i++)
117
+ if ((rolls[i] ?? 1) < chance)
118
+ score++;
119
+ return score;
120
+ }
121
+ export function fairButtsPlacing(total) {
122
+ if (total >= FAIR_BUTTS_TIERS.gold)
123
+ return 'gold';
124
+ if (total >= FAIR_BUTTS_TIERS.silver)
125
+ return 'silver';
126
+ if (total >= FAIR_BUTTS_TIERS.bronze)
127
+ return 'bronze';
128
+ return 'none';
129
+ }
130
+ // ---- The piglet chase ------------------------------------------------------------------------------------------------
131
+ export const FAIR_PIGLET_TIME_MS = 60_000;
132
+ /** A piglet slips a catch more often than not: the chance a try holds it. */
133
+ export const FAIR_PIGLET_CATCH_CHANCE = 0.45;
134
+ /** How close a player must be to try (tiles), and the pause between tries (ms). */
135
+ export const FAIR_PIGLET_REACH = 2;
136
+ export const FAIR_PIGLET_TRY_MS = 1_200;
137
+ /** A caught piglet goes back to the crate and is out again in the arena after this long. */
138
+ export const FAIR_PIGLET_RETURN_MS = 12_000;
139
+ export const FAIR_PIGLETS_TIERS = { gold: 5, silver: 3, bronze: 2 };
140
+ export function fairPigletsPlacing(caught) {
141
+ if (caught >= FAIR_PIGLETS_TIERS.gold)
142
+ return 'gold';
143
+ if (caught >= FAIR_PIGLETS_TIERS.silver)
144
+ return 'silver';
145
+ if (caught >= FAIR_PIGLETS_TIERS.bronze)
146
+ return 'bronze';
147
+ return 'none';
148
+ }
149
+ // ---- The livestock show ----------------------------------------------------------------------------------------------
150
+ /** Inside the ring's fence (types/backend fairGreen.ts FAIR_RING x 884-895, z 639-646): a lamb led in here is presented. */
151
+ export const FAIR_RING_INSIDE = { minX: 885, maxX: 894, minZ: 640, maxZ: 645 };
152
+ /** What a show lamb is given (an apple off the fair's own orchard). */
153
+ export const FAIR_SHOW_FEED_KIND = 'apple';
154
+ /** Care points: a brush and an apple are two each, arriving within the time is one. Judged on care, never on luck. */
155
+ export const FAIR_SHOW_CARE = { brush: 2, feed: 2, prompt: 1 };
156
+ export const FAIR_SHOW_PROMPT_MS = 4 * 60_000;
157
+ export const FAIR_SHOW_TIERS = { gold: 5, silver: 4, bronze: 2 };
158
+ /** A led lamb's pace (tiles a tick, the stray ewes' and the warthog's), how close behind it walks, and when it catches up by itself. */
159
+ export const FAIR_SHOW_LEAD = { speed: 0.22, heel: 1.8, teleport: 14 };
160
+ /** A lamb led away is back in the fold after this long (or when its player's show is over). */
161
+ export const FAIR_SHOW_RESPAWN_MS = 25_000;
162
+ export function fairShowPoints(brushed, fed, promptly) {
163
+ return (brushed ? FAIR_SHOW_CARE.brush : 0) + (fed ? FAIR_SHOW_CARE.feed : 0) + (promptly ? FAIR_SHOW_CARE.prompt : 0);
164
+ }
165
+ export function fairShowPlacing(points) {
166
+ if (points >= FAIR_SHOW_TIERS.gold)
167
+ return 'gold';
168
+ if (points >= FAIR_SHOW_TIERS.silver)
169
+ return 'silver';
170
+ if (points >= FAIR_SHOW_TIERS.bronze)
171
+ return 'bronze';
172
+ return 'none';
173
+ }
174
+ // ---- The herding trial and the sheepdog pup ---------------------------------------------------------------------------------
175
+ /** Three loose lambs, a fold, a clock. A lamb is penned when it is led through the gate and in (or, with a pup out, rounded up for you). */
176
+ export const FAIR_HERD_LAMBS = 3;
177
+ export const FAIR_HERD_TIME_MS = 3 * 60_000;
178
+ /** The trial's marks: all three penned inside 90 seconds is gold, 150 silver, anything inside the three minutes bronze. */
179
+ export const FAIR_HERD_TIERS = { gold: 90_000, silver: 150_000 };
180
+ /** With a pup out a lamb is rounded up on the click, after this pause (the pup runs her in). */
181
+ export const FAIR_HERD_PUP_PAUSE_MS = 4_000;
182
+ export function fairHerdPlacing(penned, elapsedMs) {
183
+ if (penned < FAIR_HERD_LAMBS || elapsedMs > FAIR_HERD_TIME_MS)
184
+ return 'none';
185
+ if (elapsedMs <= FAIR_HERD_TIERS.gold)
186
+ return 'gold';
187
+ if (elapsedMs <= FAIR_HERD_TIERS.silver)
188
+ return 'silver';
189
+ return 'bronze';
190
+ }
191
+ /**
192
+ * Nye's pup (E12): earned by the quest `nyesPup` (A Dog for the Flock), which asks for a win at the fair's herding trial after
193
+ * Nye's Strays is done. It walks at your heel in the pet's place (the member beagle stays home while it is out), and is called
194
+ * or sent home from Shepherd Nye's or Drover Alwyn's menu. Nothing is saved about it but the away flag.
195
+ */
196
+ export const FAIR_PUP_ACTIONS = { call: 'fairc:pup-call', home: 'fairc:pup-home' };
197
+ export const FAIR_PUP_OPTION_LABELS = {
198
+ [FAIR_PUP_ACTIONS.call]: "Call Nye's pup",
199
+ [FAIR_PUP_ACTIONS.home]: "Send Nye's pup home",
200
+ };
201
+ //# sourceMappingURL=fairContests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fairContests.js","sourceRoot":"","sources":["../src/fairContests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * GALLOWMERE (slice C12 of PLAN_1_TO_40.md, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t22-gallowmere.md`; design sheets
3
+ * `gallowmere-1` village, `gallowmere-2` the cast, `gallowmere-3` the Hollowed and the Gallows Crows, `gallowmere-4` the
4
+ * Bell-Ringer, `gallowmere-5` the bell puzzle): a cursed woodsmen's and miners' village on the ashen plain south of the blood
5
+ * river, in the Dreadwoods south-west. "The bell stopped. They didn't." Levels 14-22.
6
+ *
7
+ * Decision D4 (PLAN_1_TO_40.md, 2026-10-12): the village's palisade is a SAFE POCKET inside the PvP Dreadwoods. Inside the
8
+ * palisade nobody can attack anybody (`isPvpZone` is false there, zones.ts); the outer half, the chapel ruin and the mine stay
9
+ * PvP ground like the rest of the woods, so the village is the place to eat, trade and breathe. Nothing hostile spawns inside
10
+ * the palisade either (the Hollowed walk the outer half, the crows keep to the chapel and the hanging tree).
11
+ *
12
+ * The box is x 342-437, z 553-640 (claimed in the early-game program file): the blood river runs along its north edge, the Red
13
+ * Waste (x 440-589, z 560-649) lies east of it, the Dreadwoods south road (x 463) is joined by the link road along z 651.
14
+ *
15
+ * z 556-582 the chapel ruin (north-west): the Bell-Ringer's yard, the bell tower, the four bell ropes, the altar
16
+ * z 592-626 the palisade (centre-south): the green with the gallows, four lived-in cottages, the well, the shrine, the gate south
17
+ * z 586-632 the abandoned outer half: ruined cottages west and east, the hanging tree, graves
18
+ * x 420-436 the mine mouth and its short rail (east edge)
19
+ *
20
+ * Every number is a WORLD tile. The sheets are proposals: only their names and places are used, never their pixels. Every piece
21
+ * is a stand-in built from the kit and the old Dreadwoods props until Blender pieces replace them (listed in NEXT_STEPS):
22
+ * the palisade is the Redcap hold's `redcappalisade`, the gallows the spider hollow's `cocoongallows`, the cottages the
23
+ * Mill's two, the shrine the Brindle shrine, the chapel's ruin the Broken Road's `ruin` props and the Brindle Ruin wall pieces.
24
+ */
25
+ import type { LanternWakeBox, LanternWakePoint } from './lanternWake.js';
26
+ export declare const GALLOWMERE_NAME = "Gallowmere";
27
+ export declare const GALLOWMERE_ID = "gallowmere";
28
+ /** The village's whole box (its discovery zone and ground box). */
29
+ export declare const GALLOWMERE_BOX: LanternWakeBox;
30
+ /** The tiles the link road may lay (it runs on east and south past the box to the Dreadwoods south road). */
31
+ export declare const GALLOWMERE_ROAD_BOX: LanternWakeBox;
32
+ /**
33
+ * 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
34
+ * included, is outside the PvP rule. Pure data, so zones.ts can read it without importing the rest.
35
+ */
36
+ export declare const GALLOWMERE_PALISADE: LanternWakeBox;
37
+ export declare const GALLOWMERE_SAFE_POCKET: LanternWakeBox;
38
+ export declare function inGallowmereSafePocket(x: number, z: number): boolean;
39
+ /** The chapel ruin's yard (the Bell-Ringer's arena) and the mine at the east edge. */
40
+ export declare const GALLOWMERE_CHAPEL: LanternWakeBox;
41
+ export declare const GALLOWMERE_MINE: LanternWakeBox;
42
+ /** The green inside the palisade (grass, the gallows at its middle). */
43
+ export declare const GALLOWMERE_GREEN: LanternWakeBox;
44
+ /** The roads (world polylines, width in tiles), laid as Path. */
45
+ export declare const GALLOWMERE_PATHS: ReadonlyArray<{
46
+ id: string;
47
+ w: number;
48
+ pts: readonly LanternWakePoint[];
49
+ }>;
50
+ /** What a placed prop is: a kit model (dreadmodel, style `<model>-<facing>`) or an entity of one of the old kinds. */
51
+ export type GallowmereProp = {
52
+ id: string;
53
+ kind: 'dreadmodel' | 'dreadprop' | 'rock' | 'tree' | 'campfire' | 'barrel' | 'logpile';
54
+ style: string;
55
+ x: number;
56
+ z: number;
57
+ scale?: number;
58
+ };
59
+ /** The palisade's gate (south wall, facing the link road) and its four towers: two at the corners, two flanking the gate. */
60
+ export declare const GALLOWMERE_GATE: {
61
+ readonly x: 388;
62
+ readonly z: 626;
63
+ readonly style: "redcapgate-s";
64
+ };
65
+ export declare const GALLOWMERE_TOWERS: ReadonlyArray<{
66
+ x: number;
67
+ z: number;
68
+ style: string;
69
+ }>;
70
+ /**
71
+ * The village inside the palisade: the green with the gallows, the well, the shrine with its braziers, the four lived-in
72
+ * cottages (the Mill's two models, 7 x 5), the woodpiles, benches, crates, lamps and the gate banners.
73
+ */
74
+ export declare const GALLOWMERE_VILLAGE_PIECES: readonly GallowmereProp[];
75
+ /**
76
+ * The abandoned outer half, outside the palisade: ruined cottages (the Broken Road's `ruin` props, 3 x 3) west and east, the hanging
77
+ * tree on the chapel lane (the second gallows, where the crows gather), graves, a broken cart, a camp left cold.
78
+ */
79
+ export declare const GALLOWMERE_OUTER_PIECES: readonly GallowmereProp[];
80
+ /**
81
+ * The mine mouth at the east edge: two pillars for the mouth, a short rail with the cart and the buffers, spoil heaps.
82
+ * Stand-ins: `evmasonrypillar` for the timbers, `evrailtrack` and `dhorecart` for the rail and the cart.
83
+ */
84
+ export declare const GALLOWMERE_MINE_PIECES: readonly GallowmereProp[];
85
+ /**
86
+ * The chapel ruin (the Bell-Ringer's yard): two broken towers, the altar, the braziers, broken pews, fallen pillars, the banners.
87
+ * 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,
88
+ * the clapper and the altar cache are quest props (gallowmereQuest.ts).
89
+ */
90
+ export declare const GALLOWMERE_CHAPEL_ENTRANCE: {
91
+ readonly minX: 358;
92
+ readonly maxX: 360;
93
+ readonly z: 582;
94
+ };
95
+ export declare const GALLOWMERE_CHAPEL_PIECES: readonly GallowmereProp[];
96
+ /** The road signs (the placard signpost). */
97
+ export declare const GALLOWMERE_SIGNS: ReadonlyArray<{
98
+ id: string;
99
+ x: number;
100
+ z: number;
101
+ text: string;
102
+ }>;
103
+ /** Standable tiles (admin teleports, smokes): one for each place. */
104
+ export declare const GALLOWMERE_STANDS: {
105
+ readonly road: {
106
+ readonly x: 388;
107
+ readonly z: 646;
108
+ };
109
+ readonly gate: {
110
+ readonly x: 388;
111
+ readonly z: 632;
112
+ };
113
+ readonly gateInside: {
114
+ readonly x: 388;
115
+ readonly z: 621;
116
+ };
117
+ readonly green: {
118
+ readonly x: 388;
119
+ readonly z: 609;
120
+ };
121
+ readonly well: {
122
+ readonly x: 396;
123
+ readonly z: 613;
124
+ };
125
+ readonly chapelLane: {
126
+ readonly x: 352;
127
+ readonly z: 620;
128
+ };
129
+ readonly chapel: {
130
+ readonly x: 359;
131
+ readonly z: 578;
132
+ };
133
+ readonly chapelEntrance: {
134
+ readonly x: 359;
135
+ readonly z: 585;
136
+ };
137
+ readonly outerWest: {
138
+ readonly x: 360;
139
+ readonly z: 608;
140
+ };
141
+ readonly outerEast: {
142
+ readonly x: 414;
143
+ readonly z: 622;
144
+ };
145
+ readonly mine: {
146
+ readonly x: 425;
147
+ readonly z: 600;
148
+ };
149
+ };
150
+ /** The discovery zone (types expandedContracts.ts INSERTED_DISCOVERY_ZONES). */
151
+ export declare const GALLOWMERE_DISCOVERY_ZONE: {
152
+ minX: number;
153
+ maxX: number;
154
+ minZ: number;
155
+ maxZ: number;
156
+ id: string;
157
+ label: string;
158
+ coordinateFrame: "world";
159
+ };
160
+ export declare function inGallowmereBox(x: number, z: number, pad?: number): boolean;
161
+ /**
162
+ * THE NIGHT (the Saltmark Light's UTC lamp clock, `saltmarkLampPhase` in the client): lit from 18:00 (inclusive) to 06:00
163
+ * (exclusive) UTC, every day, read off the wall clock so every player at the same moment agrees. The Hollowed walk only while
164
+ * the lamps are lit; by day they lie down in the ash.
165
+ */
166
+ export declare const GALLOWMERE_NIGHT_FROM_UTC_HOUR = 18;
167
+ export declare const GALLOWMERE_NIGHT_UNTIL_UTC_HOUR = 6;
168
+ export declare function isGallowmereNight(epochMs: number): boolean;
169
+ /** The next moment the night begins (18:00 UTC), at or after `epochMs` when it is day; `epochMs` itself when it is already night. */
170
+ export declare function nextGallowmereNightMs(epochMs: number): number;
171
+ //# sourceMappingURL=gallowmere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallowmere.d.ts","sourceRoot":"","sources":["../src/gallowmere.ts"],"names":[],"mappings":"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"}
@@ -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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"}