@dreadwood-types/types 0.1.349 → 0.1.350
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/campStations.d.ts.map +1 -1
- package/dist/campStations.js +2 -1
- package/dist/campStations.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +13 -0
- package/dist/quests.js.map +1 -1
- package/dist/storyQuests.d.ts +2 -1
- package/dist/storyQuests.d.ts.map +1 -1
- package/dist/storyQuests.js +4 -0
- package/dist/storyQuests.js.map +1 -1
- package/dist/woodsBelts.d.ts +209 -0
- package/dist/woodsBelts.d.ts.map +1 -0
- package/dist/woodsBelts.js +509 -0
- package/dist/woodsBelts.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE OUTER WOODS AND THE DEEP WOODS: Rings 2 and 3 of the Dreadwoods PvP square (PvP woods by level, NEXT_STEPS item 6; design sheets pvp-woods-b02 "Ring 3, the Deep
|
|
3
|
+
* Woods" and b06 "gathering and crafting by ring"; the filed b01 is the Border's sheet, so Ring 2 is designed from the brief; 2026-10-17).
|
|
4
|
+
*
|
|
5
|
+
* The audit (the built world, 2026-10-17) found the two rings thin exactly where the sheets say they should pay: no herb patch, no tree a player could fell and
|
|
6
|
+
* no seam outside the Mine yard (3 copper, 1 tin, 2 iron) and Gallowmere's Old Mine anywhere in Rings 2 or 3, and nothing at all for levels 10-20 in Ring 2. This
|
|
7
|
+
* file is the data for the gaps, in the rings by the SQUARE rule (types zones.ts combatZoneAt: Ring 2 is inset 45-89 from the woods' edge, Ring 3 inset 90-134):
|
|
8
|
+
*
|
|
9
|
+
* RING 2, THE OUTER WOODS (levels about 10-20; players fight within 10 levels)
|
|
10
|
+
* - the SPOIL HEAPS north of the Mine yard: four iron seams (Mining 15) and two tin (Mining 5), on the Heaps Track from the yard's south-west way in;
|
|
11
|
+
* - the BANK BEDS on the Blood River's south bank: hawkweed (Foraging 14) and bloodroot (Foraging 18);
|
|
12
|
+
* - the HARDY STAND north of the yard's knoll: the last living trees on the east side, pine (Woodwork 10), spruce (15) and hazel (20) to fell;
|
|
13
|
+
* - the GRAVE-CUT in the south-west, north of the Crypt Grounds: iron, tin, hawkweed, pine and spruce;
|
|
14
|
+
* - three WOLF PACKS (the game's own `wolf`, level 12-14, which drops wolf pelts and fangs): two on the east strip, one in the south-west.
|
|
15
|
+
* RING 3, THE DEEP WOODS (levels about 18-28; players fight within 15 levels)
|
|
16
|
+
* - the DEEPWOOD STAND south of the Rotwood Grove and the Forester's camp: alder (Woodwork 25), ironwort (Foraging 22) and nightshade (Foraging 25);
|
|
17
|
+
* - the DEEPWOOD CUT south of it: coal (Mining 22) and iron (Mining 15);
|
|
18
|
+
* - the MIRE RIM: marsh marigold (Foraging 29) on the Blood Mire's north rim.
|
|
19
|
+
*
|
|
20
|
+
* Two people give work at the two ends: Foreman Hobb Garrow at the Mine yard (six jobs, Combat 10-16) and Reeve Maud Ellery at the Deepwood Stand (five jobs, Combat
|
|
21
|
+
* 18-24), each beside a Bounty Board (the generic one: every contract on every board). Every job is an existing mechanic: the story runner's reach, deliver, kill and
|
|
22
|
+
* talk steps. The pay is small placeholders for the balance pass.
|
|
23
|
+
*
|
|
24
|
+
* HARD CONSTRAINTS (James, 2026-10-17): NO safe post or pocket (these are open ground: any player may strike you there, nobody may eat in a fight), NO bank or
|
|
25
|
+
* strongbox (banks are in the towns), NO stall that sells food, no signs but place names, no litter, no runes or magic items. The goods are mined, picked, felled
|
|
26
|
+
* or hunted by the player. Nothing here is a new item (new gear and its drops are the gear ladder's).
|
|
27
|
+
*
|
|
28
|
+
* Abuse-first: a job is one-time per character (the story runner never offers a finished one and never pays twice); a hand-in without the goods moves nothing;
|
|
29
|
+
* kills count only the player's own, and the wolf and moss-wolf jobs count only kills inside their box; a seam, herb patch or tree is the game's own shared node (it
|
|
30
|
+
* empties and refills on its own clock, so camping a belt farms nothing the refill clock does not allow). The pay never comes from killing a player.
|
|
31
|
+
*
|
|
32
|
+
* Every position is a WORLD tile in the final frame. The levels written here are checked equal to the game's own tables in scripts/woods-belts-test.mjs (this file
|
|
33
|
+
* takes no runtime import from potionMaking, mining or woodwork: storyQuests reads it while they load).
|
|
34
|
+
* Types only from storyQuests.ts and campStations.ts (erased imports), so storyQuests.ts can spread WOODS_JOB_QUESTS without a cycle.
|
|
35
|
+
*/
|
|
36
|
+
import type { StoryQuestDef } from './storyQuests.js';
|
|
37
|
+
import type { CampStation } from './campStations.js';
|
|
38
|
+
export declare const WOODS_RINGS_NAME = "The Outer and Deep Woods";
|
|
39
|
+
export type WoodsBeltId = 'spoil-heaps' | 'bank-beds' | 'hardy-stand' | 'grave-cut' | 'deepwood-stand' | 'deepwood-cut' | 'mire-rim';
|
|
40
|
+
export type WoodsPieceKind = 'orerock' | 'herbpatch' | 'tree';
|
|
41
|
+
export type WoodsBelt = {
|
|
42
|
+
id: WoodsBeltId;
|
|
43
|
+
/** The ring it sits in (types zones.ts combatZoneAt) and the level band it is for. */
|
|
44
|
+
ring: 2 | 3;
|
|
45
|
+
name: string;
|
|
46
|
+
/** The belt's centre: its pieces are offsets from it. */
|
|
47
|
+
x: number;
|
|
48
|
+
z: number;
|
|
49
|
+
/** The Combat band the belt is for (Rings 2 and 3 read 10-20 and 18-28; the work's own gates are the skills below). */
|
|
50
|
+
band: string;
|
|
51
|
+
/** What is there, for the guide and the helper. */
|
|
52
|
+
what: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const WOODS_BELTS: readonly WoodsBelt[];
|
|
55
|
+
export type WoodsPiece = {
|
|
56
|
+
id: string;
|
|
57
|
+
belt: WoodsBeltId;
|
|
58
|
+
kind: WoodsPieceKind;
|
|
59
|
+
style: string;
|
|
60
|
+
dx: number;
|
|
61
|
+
dz: number;
|
|
62
|
+
};
|
|
63
|
+
export declare const WOODS_PIECES: readonly (WoodsPiece & {
|
|
64
|
+
x: number;
|
|
65
|
+
z: number;
|
|
66
|
+
ring: 2 | 3;
|
|
67
|
+
})[];
|
|
68
|
+
/** The Mining, Foraging and Woodwork level each style asks (equal to the game's own tables: woods-belts-test.mjs). */
|
|
69
|
+
export declare const WOODS_PIECE_LEVEL: Readonly<Record<string, {
|
|
70
|
+
skill: 'mining' | 'foraging' | 'woodwork';
|
|
71
|
+
level: number;
|
|
72
|
+
}>>;
|
|
73
|
+
/** How far a seam, patch or tree may move to find a free tile (the backend's placer; checked in the smoke). */
|
|
74
|
+
export declare const WOODS_PIECE_SEARCH = 3;
|
|
75
|
+
/**
|
|
76
|
+
* Three wolf packs in Ring 2, the game's own `wolf` (level 12-14, wolf pelt 40% and fang 5%, the snow's first trade good: Fenwick at the Northern Gate buys the pelts).
|
|
77
|
+
* They lunge at anyone within four tiles and give up at seven (the overworld wolves' own rule) and wander three from their spot, so a pack's danger reaches about seven tiles: every pack stands at least eight tiles from every seam, patch and tree, so a hunter can work a belt and meets a pack only on the way between belts or by going to it.
|
|
78
|
+
*/
|
|
79
|
+
export type WoodsWolfPack = {
|
|
80
|
+
id: string;
|
|
81
|
+
ring: 2;
|
|
82
|
+
name: string;
|
|
83
|
+
spots: ReadonlyArray<{
|
|
84
|
+
x: number;
|
|
85
|
+
z: number;
|
|
86
|
+
}>;
|
|
87
|
+
};
|
|
88
|
+
export declare const WOODS_WOLF_PACKS: readonly WoodsWolfPack[];
|
|
89
|
+
export declare const WOODS_WOLF_ID_PREFIX = "woods-wolf-";
|
|
90
|
+
/** How far a pack wolf wanders from its spot. */
|
|
91
|
+
export declare const WOODS_WOLF_LEASH: {
|
|
92
|
+
readonly radius: 3;
|
|
93
|
+
readonly speed: 0.9;
|
|
94
|
+
};
|
|
95
|
+
/** The east strip's box: only wolves put down here count for Wolves at the Heaps (the Spoil Heaps' packs and the Bank Beds'). */
|
|
96
|
+
export declare const WOODS_EAST_STRIP_BOX: {
|
|
97
|
+
readonly minX: 598;
|
|
98
|
+
readonly maxX: 642;
|
|
99
|
+
readonly minZ: 548;
|
|
100
|
+
readonly maxZ: 616;
|
|
101
|
+
};
|
|
102
|
+
/** Dirt tracks (surface only, two wide): the Heaps Track from the yard's south-west way in, and the Deepwood Track from the Forester's camp. */
|
|
103
|
+
export declare const WOODS_TRACKS: ReadonlyArray<{
|
|
104
|
+
id: string;
|
|
105
|
+
name: string;
|
|
106
|
+
w: number;
|
|
107
|
+
pts: ReadonlyArray<[number, number]>;
|
|
108
|
+
}>;
|
|
109
|
+
/** Signs only name places (the placard signpost). */
|
|
110
|
+
export declare const WOODS_SIGNS: ReadonlyArray<{
|
|
111
|
+
id: string;
|
|
112
|
+
x: number;
|
|
113
|
+
z: number;
|
|
114
|
+
text: string;
|
|
115
|
+
}>;
|
|
116
|
+
export declare const WOODS_BOARD_IDS: {
|
|
117
|
+
readonly yard: "camp-board-yard";
|
|
118
|
+
readonly deepwood: "camp-board-deepwood";
|
|
119
|
+
};
|
|
120
|
+
/** Two generic Bounty Boards in the open (NOT a safe post: no bank, no stall, no pocket), laid by the backend's campStations.ts with the others. */
|
|
121
|
+
export declare const WOODS_BOUNTY_BOARDS: readonly CampStation[];
|
|
122
|
+
export declare const WOODS_FOREMAN: {
|
|
123
|
+
readonly name: "Foreman Hobb Garrow";
|
|
124
|
+
readonly x: 610;
|
|
125
|
+
readonly z: 651;
|
|
126
|
+
readonly faceX: 608;
|
|
127
|
+
readonly faceZ: 650;
|
|
128
|
+
};
|
|
129
|
+
export declare const WOODS_REEVE: {
|
|
130
|
+
readonly name: "Reeve Maud Ellery";
|
|
131
|
+
readonly x: 348;
|
|
132
|
+
readonly z: 448;
|
|
133
|
+
readonly faceX: 346;
|
|
134
|
+
readonly faceZ: 447;
|
|
135
|
+
};
|
|
136
|
+
export declare const YARD_JOB_IDS: readonly ["yardHeaps", "yardTin", "yardIron", "yardHerbs", "yardWolves", "yardProps"];
|
|
137
|
+
export type YardJobId = (typeof YARD_JOB_IDS)[number];
|
|
138
|
+
export declare const DEEP_JOB_IDS: readonly ["deepAlder", "deepIronwort", "deepNightshade", "deepCoal", "deepMossWolves"];
|
|
139
|
+
export type DeepJobId = (typeof DEEP_JOB_IDS)[number];
|
|
140
|
+
export declare const WOODS_JOB_IDS: readonly ["yardHeaps", "yardTin", "yardIron", "yardHerbs", "yardWolves", "yardProps", "deepAlder", "deepIronwort", "deepNightshade", "deepCoal", "deepMossWolves"];
|
|
141
|
+
export type WoodsJobId = YardJobId | DeepJobId;
|
|
142
|
+
/** Combat levels (placeholders). The skills the goods ask (Mining, Foraging, Woodwork) are in WOODS_PIECE_LEVEL and said on each step. */
|
|
143
|
+
export declare const WOODS_JOB_COMBAT: Readonly<Record<WoodsJobId, number>>;
|
|
144
|
+
/** What each hand-in asks (placeholders). */
|
|
145
|
+
export declare const WOODS_JOB_GOODS: {
|
|
146
|
+
readonly yardTin: {
|
|
147
|
+
readonly kind: "tin";
|
|
148
|
+
readonly qty: 8;
|
|
149
|
+
};
|
|
150
|
+
readonly yardIron: {
|
|
151
|
+
readonly kind: "iron";
|
|
152
|
+
readonly qty: 6;
|
|
153
|
+
};
|
|
154
|
+
readonly yardHawkweed: {
|
|
155
|
+
readonly kind: "hawkweed";
|
|
156
|
+
readonly qty: 4;
|
|
157
|
+
};
|
|
158
|
+
readonly yardBloodroot: {
|
|
159
|
+
readonly kind: "bloodroot";
|
|
160
|
+
readonly qty: 3;
|
|
161
|
+
};
|
|
162
|
+
readonly yardPine: {
|
|
163
|
+
readonly kind: "pinewood";
|
|
164
|
+
readonly qty: 8;
|
|
165
|
+
};
|
|
166
|
+
readonly yardSpruce: {
|
|
167
|
+
readonly kind: "sprucewood";
|
|
168
|
+
readonly qty: 6;
|
|
169
|
+
};
|
|
170
|
+
readonly deepAlder: {
|
|
171
|
+
readonly kind: "alderwood";
|
|
172
|
+
readonly qty: 10;
|
|
173
|
+
};
|
|
174
|
+
readonly deepIronwort: {
|
|
175
|
+
readonly kind: "ironwort";
|
|
176
|
+
readonly qty: 4;
|
|
177
|
+
};
|
|
178
|
+
readonly deepNightshade: {
|
|
179
|
+
readonly kind: "nightshade";
|
|
180
|
+
readonly qty: 4;
|
|
181
|
+
};
|
|
182
|
+
readonly deepCoal: {
|
|
183
|
+
readonly kind: "coal";
|
|
184
|
+
readonly qty: 8;
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
/** Kill counts (placeholders), sized under the packs (ten wolves in three packs) and the Grove's moss wolves (four, plus the Hunt's brood). */
|
|
188
|
+
export declare const WOODS_JOB_KILLS: {
|
|
189
|
+
readonly yardWolves: 6;
|
|
190
|
+
readonly deepMossWolves: 8;
|
|
191
|
+
};
|
|
192
|
+
/** The Rotwood Grove's box (types rotwoodGrove.ts: centre 330,380, half-extents 22 x 17): only moss wolves put down inside it count. */
|
|
193
|
+
export declare const WOODS_GROVE_BOX: {
|
|
194
|
+
readonly minX: 308;
|
|
195
|
+
readonly maxX: 352;
|
|
196
|
+
readonly minZ: 363;
|
|
197
|
+
readonly maxZ: 397;
|
|
198
|
+
};
|
|
199
|
+
export declare const WOODS_JOB_QUESTS: Readonly<Record<WoodsJobId, StoryQuestDef>>;
|
|
200
|
+
export declare const WOODS_JOB_META: Readonly<Record<WoodsJobId, {
|
|
201
|
+
title: string;
|
|
202
|
+
description: string;
|
|
203
|
+
category: 'combat' | 'skilling';
|
|
204
|
+
art: {
|
|
205
|
+
item: string;
|
|
206
|
+
};
|
|
207
|
+
}>>;
|
|
208
|
+
export declare const WOODS_JOB_GIVER_PLACES: Readonly<Record<WoodsJobId, string>>;
|
|
209
|
+
//# sourceMappingURL=woodsBelts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"woodsBelts.d.ts","sourceRoot":"","sources":["../src/woodsBelts.ts"],"names":[],"mappings":"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"}
|