@dreadwood-types/types 0.1.0 → 0.1.2

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.
@@ -15,7 +15,7 @@ export declare const BASECAMP_GATE_LOCAL_Z = 26;
15
15
  export declare const BASECAMP_GATE_HALF = 5;
16
16
  export declare const BASECAMP_WALL_X = 604;
17
17
  /**
18
- * Single-column rocky enclave on Base Camp's west face the thin cliff/shore
18
+ * Single-column rocky enclave on Base Camp's west face - the thin cliff/shore
19
19
  * where the battlefield lake meets camp. Not a filled gray slab.
20
20
  */
21
21
  export declare const BASECAMP_ENCLAVE_X = 604;
@@ -27,7 +27,7 @@ export declare const BASECAMP_CAVE_LOCAL_Z = 26;
27
27
  export declare const BASECAMP_FAR_SIDE_X: number;
28
28
  export declare const BASECAMP_FAR_SIDE_LOCAL_Z = 26;
29
29
  /**
30
- * Anne's cottage a longer walk north of the east road, halfway between
30
+ * Anne's cottage - a longer walk north of the east road, halfway between
31
31
  * Crossroads and Base Camp. Lower local Z is north (toward WORLD_NORTH_PAD).
32
32
  * Stays west of BASECAMP_WALL_X so it never touches the mountain wall.
33
33
  */
@@ -39,7 +39,7 @@ export declare const ANNES_ZONE_NORTH = 16;
39
39
  export declare const ANNES_ZONE_SOUTH = 22;
40
40
  /**
41
41
  * Small vestigial mud alcove right behind the Suspicious hole mouth at Base
42
- * Camp kept only as set dressing for the doorway. The real Rat Tunnel
42
+ * Camp - kept only as set dressing for the doorway. The real Rat Tunnel
43
43
  * dungeon lives far away in its own dedicated underground zone (see below);
44
44
  * the Base Camp Suspicious hole teleports players there. Forest animal dens
45
45
  * are separate tiny caverns, not extra doors into this dungeon.
@@ -51,10 +51,10 @@ export declare const RAT_TUNNEL_RZ = 5;
51
51
  export declare const SUSPICIOUS_HOLE_RETURN_X: number;
52
52
  export declare const SUSPICIOUS_HOLE_RETURN_LOCAL_Z = 26;
53
53
  /**
54
- * Rat Tunnel dungeon a genuinely separate underground zone carved into an
54
+ * Rat Tunnel dungeon - a genuinely separate underground zone carved into an
55
55
  * off-map strip east of the overworld (x >= UNDERGROUND_ORIGIN_X), so the
56
56
  * rooms are never painted as surface geography on the paper map. The
57
- * Suspicious hole doesn't lead into a pocket behind itself it teleports
57
+ * Suspicious hole doesn't lead into a pocket behind itself - it teleports
58
58
  * players into this dedicated 5-room dungeon (forest animal dens do not).
59
59
  * Room 1 has a crawl-out back to Base Camp so players are not trapped in the
60
60
  * pit; the portal at the far end of Room 5 is the dungeon-clear exit.
@@ -67,24 +67,24 @@ export declare const SUSPICIOUS_HOLE_RETURN_LOCAL_Z = 26;
67
67
  */
68
68
  export declare const DUNGEON_CENTER_X: number;
69
69
  /**
70
- * ROOM SCALE deliberately tight.
70
+ * ROOM SCALE - deliberately tight.
71
71
  *
72
72
  * The first build made every room a field: Room 4 was 53x44 tiles and Room 1
73
73
  * and 3 were 41 wide, on a map where a character occupies one tile. Crossing
74
- * the boss room took ~45 steps, and no amount of scenery could fill that every
74
+ * the boss room took ~45 steps, and no amount of scenery could fill that - every
75
75
  * dressing pass read as litter scattered on an empty plain. These are roughly
76
76
  * half the old linear dimensions (about a quarter of the floor area), which is
77
77
  * the range a dungeon crawl actually wants: you can see both walls, scenery
78
78
  * reaches you, and a fight fills the space instead of rattling around in it.
79
79
  *
80
- * Encounter room sizes still scale with what happens in them the boss cavern
80
+ * Encounter room sizes still scale with what happens in them - the boss cavern
81
81
  * is the largest, the exit vestibule barely more than a landing.
82
82
  */
83
83
  export declare const DUNGEON_ROOM_HALF_W = 14;
84
84
  /** The giant-rat warren is deliberately tighter than the human encounter rooms. */
85
85
  export declare const DUNGEON_GIANT_RAT_ROOM_HALF_W = 11;
86
86
  export declare const DUNGEON_BOSS_HALF_W = 17;
87
- /** Exit vestibule a landing, not a hall. */
87
+ /** Exit vestibule - a landing, not a hall. */
88
88
  export declare const DUNGEON_VESTIBULE_HALF_W = 9;
89
89
  /** Entry guardroom, tighter than the mid-dungeon encounter rooms. */
90
90
  export declare const DUNGEON_GUARDROOM_HALF_W = 12;
@@ -97,7 +97,7 @@ export declare const DUNGEON_CORRIDOR_HALF_W = 3;
97
97
  */
98
98
  export declare const DUNGEON_ROOM1_MIN_Z = 60;
99
99
  export declare const DUNGEON_ROOM1_MAX_Z = 82;
100
- /** Rat-pit centre in Room 1 mirrors DUNGEON_ROOM2_PIT_Z for the arena below. */
100
+ /** Rat-pit centre in Room 1 - mirrors DUNGEON_ROOM2_PIT_Z for the arena below. */
101
101
  export declare const DUNGEON_ROOM1_PIT_Z: number;
102
102
  export declare const DUNGEON_ROOM2_MIN_Z = 99;
103
103
  export declare const DUNGEON_ROOM2_MAX_Z = 125;
@@ -113,7 +113,7 @@ export declare const DUNGEON_MIN_X: number;
113
113
  export declare const DUNGEON_MAX_X: number;
114
114
  export declare const DUNGEON_MIN_Z = 60;
115
115
  export declare const DUNGEON_MAX_Z = 246;
116
- /** Room-gate doorway rows the door sits on the entrance wall of the room being unlocked. */
116
+ /** Room-gate doorway rows - the door sits on the entrance wall of the room being unlocked. */
117
117
  export declare const DUNGEON_GATE1_Z = 99;
118
118
  export declare const DUNGEON_GATE2_Z = 142;
119
119
  export declare const DUNGEON_GATE3_Z = 185;
@@ -124,7 +124,7 @@ export declare const DUNGEON_EXIT_PORTAL_X: number;
124
124
  export declare const DUNGEON_EXIT_PORTAL_Z: number;
125
125
  /**
126
126
  * Crawl-out in Room 1 (rat pit), flush with the north wall and facing south
127
- * into the pit. Same `exit-*` interact/teleport as Room 5 returns to the
127
+ * into the pit. Same `exit-*` interact/teleport as Room 5 - returns to the
128
128
  * Suspicious hole approach at Base Camp. Compact footprint; keep the two
129
129
  * tiles in front standable so logout restore can slide off the blocked door.
130
130
  */
@@ -148,7 +148,7 @@ export declare const DUNGEON_WALL_MARGIN = 8;
148
148
  /**
149
149
  * How far the solid rock is actually PAINTED, as opposed to how far the dungeon
150
150
  * zone reaches. The camera looks down at ~53 degrees, so a 5-unit wall only
151
- * hides about four tiles of whatever is behind it with the old 8-tile margin
151
+ * hides about four tiles of whatever is behind it - with the old 8-tile margin
152
152
  * the overworld's grass and sky were plainly visible over the dungeon walls.
153
153
  * The apron is a cheap fix: keep painting rock until the far fog (62 units)
154
154
  * swallows it. It deliberately does NOT widen `inDungeonZone`, which gates
@@ -167,25 +167,25 @@ export type ForestDenSite = {
167
167
  cavernX: number;
168
168
  cavernZ: number;
169
169
  };
170
- /** Tight animal-dug hollow a handful of tiles, not a mystery hall. */
170
+ /** Tight animal-dug hollow - a handful of tiles, not a mystery hall. */
171
171
  export declare const FOREST_DEN_RX = 4;
172
172
  export declare const FOREST_DEN_RZ = 3;
173
173
  export declare const FOREST_DEN_WALL = 2;
174
174
  export declare const FOREST_DEN_EXPLORER_XP = 50;
175
175
  /**
176
176
  * Rat caves scattered through the woods. Same idea as the old extra Suspicious
177
- * holes they look like small rocky cave mouths, each with its own cramped
177
+ * holes - they look like small rocky cave mouths, each with its own cramped
178
178
  * cavern, not extra doors into the Rat Tunnel.
179
179
  */
180
180
  /**
181
- * Every site here is fully built by world generation cleared entrance
182
- * hollow, its own cavern, and a return exit but only FOREST_DEN_ACTIVE_COUNT
181
+ * Every site here is fully built by world generation - cleared entrance
182
+ * hollow, its own cavern, and a return exit - but only FOREST_DEN_ACTIVE_COUNT
183
183
  * of them show a cave mouth at any one time (see World.denEntranceActive).
184
184
  * Crawling out of a den retires that mouth and opens a different site, so the
185
185
  * dens move around the woods instead of being permanent scenery.
186
186
  *
187
187
  * There used to be 13 permanently-open mouths, which is why they read as
188
- * "everywhere" you could not cross the forest without tripping over one.
188
+ * "everywhere" - you could not cross the forest without tripping over one.
189
189
  * Keeping the full list (rather than deleting sites) is what gives the
190
190
  * relocation somewhere to move *to*; the count below is the dial for how
191
191
  * often you actually meet one.
@@ -205,7 +205,7 @@ export declare const DUNGEON_ROOM_SPAWNS: Record<DungeonRoomId, {
205
205
  z: number;
206
206
  }[]>;
207
207
  /**
208
- * Northwest battlefield north pad west of the Deadlands, inland of west cliffs.
208
+ * Northwest battlefield - north pad west of the Deadlands, inland of west cliffs.
209
209
  * World Z decreases toward the north wilderness; farm approaches from the south.
210
210
  * East edge meets the Deadlands west border. The lake continues east of this pad
211
211
  * (see BATTLEFIELD_LAKE_EAST_X).
@@ -219,7 +219,7 @@ export declare const BATTLEFIELD_MAX_LOCAL_Z: number;
219
219
  /**
220
220
  * Lake between soldier (south / farmward) and goblin (north) camps.
221
221
  * Water blocks walking; the battlefield crossing is the long bridge once repaired.
222
- * Thick NS band on the pad, then the same Z band continues east through the
222
+ * Thick N-S band on the pad, then the same Z band continues east through the
223
223
  * corridor south of the Deadlands, past the west-face enclave, until it meets
224
224
  * the SE high-rock row.
225
225
  */
@@ -233,7 +233,7 @@ export declare function isDeadlandsSouthWallClearance(x: number, z: number): boo
233
233
  /**
234
234
  * One-tile high-rock / crag row on the SW corner of remaining Base Camp land
235
235
  * (south of the lake). Same X as the thin west-face enclave; the lake band at
236
- * this X is water so the eastwest sheet can continue.
236
+ * this X is water so the east-west sheet can continue.
237
237
  */
238
238
  export declare const BATTLEFIELD_LAKE_SW_ROCK_X = 604;
239
239
  export declare const BATTLEFIELD_LAKE_SW_ROCK_MIN_Z: number;
@@ -251,14 +251,14 @@ export declare const BATTLEFIELD_LAKE_SE_ROCK_MAX_Z: number;
251
251
  */
252
252
  export declare const BATTLEFIELD_LAKE_EAST_X: number;
253
253
  export declare const BATTLEFIELD_LAKE_MID_Z: number;
254
- /** @deprecated Use BATTLEFIELD_LAKE_* kept for older imports. */
254
+ /** @deprecated Use BATTLEFIELD_LAKE_* - kept for older imports. */
255
255
  export declare const BATTLEFIELD_CONTESTED_MIN_Z = 666;
256
256
  /** @deprecated Use BATTLEFIELD_LAKE_* */
257
257
  export declare const BATTLEFIELD_CONTESTED_MAX_Z = 698;
258
258
  /** @deprecated Use BATTLEFIELD_LAKE_* */
259
259
  export declare const BATTLEFIELD_CONTESTED_MID_Z: number;
260
260
  /**
261
- * NS bridge across the lake (world X).
261
+ * N-S bridge across the lake (world X).
262
262
  * Anchored on the original battlefield mid-X so expanding east to the Deadlands
263
263
  * lengthens the water sheet without sliding the crossing.
264
264
  */
@@ -270,7 +270,7 @@ export declare const BATTLEFIELD_BRIDGE_HALF_W = 1;
270
270
  *
271
271
  * The lake now runs from the west cliffs to the SE rock row, while the
272
272
  * bridge sits at x 91, so an unconstrained spot could land far down the new
273
- * east shore a long walk, and on the wrong side of the map from the crossing.
273
+ * east shore - a long walk, and on the wrong side of the map from the crossing.
274
274
  */
275
275
  export declare const BATTLEFIELD_FISHING_MAX_BRIDGE_DX = 16;
276
276
  /**
@@ -282,18 +282,18 @@ export declare const BATTLEFIELD_BRIDGE_GAP_MAX_Z: number;
282
282
  /** Inclusive smashed mid-span the unrepaired player still sees as wreckage. */
283
283
  export declare function isBattlefieldBridgeGapTile(x: number, z: number): boolean;
284
284
  /**
285
- * Single clickable crossing icon centre of the gap (x 91, z 682), not every
285
+ * Single clickable crossing icon - centre of the gap (x 91, z 682), not every
286
286
  * plank and not the intact approaches.
287
287
  */
288
288
  export declare function isBattlefieldBridgeTravelIconTile(x: number, z: number): boolean;
289
289
  /**
290
290
  * Chebyshev tiles from a travel-through target (bridge crossing icon, dungeon
291
291
  * pit gate). Those tiles are water or blocked, and the last intact plank is two
292
- * steps from the icon range 1 would demand standing on the gap itself.
292
+ * steps from the icon - range 1 would demand standing on the gap itself.
293
293
  */
294
294
  export declare const TRAVEL_THROUGH_RANGE = 4;
295
295
  /**
296
- * Rupert Row's dock a short wooden pier on the south shore west of the bridge,
296
+ * Rupert Row's dock - a short wooden pier on the south shore west of the bridge,
297
297
  * with his rowboat tied at the water end.
298
298
  */
299
299
  export declare const RUPERT_ROW_PIER_X: number;
@@ -306,7 +306,7 @@ export declare const RUPERT_ROW_SPAWN_Z: number;
306
306
  export declare const BATTLEFIELD_CAMP_CLEAR_RADIUS = 6;
307
307
  export declare const BATTLEFIELD_NPCS_PER_CAMP = 4;
308
308
  /**
309
- * Goblin camps run denser than soldier camps. Goblins are the grind target
309
+ * Goblin camps run denser than soldier camps. Goblins are the grind target -
310
310
  * at 2 per camp a player working a camp spent most of the trip walking between
311
311
  * camps waiting on respawns, which is what made the battlefield feel empty.
312
312
  * Soldiers now hold their camps in force too, so both sides read as active
@@ -315,7 +315,7 @@ export declare const BATTLEFIELD_NPCS_PER_CAMP = 4;
315
315
  export declare const BATTLEFIELD_GOBLINS_PER_CAMP = 6;
316
316
  /** How long a faction camp chest stays before fading out and relocating. */
317
317
  export declare const BATTLEFIELD_CAMP_CHEST_LIFETIME_MS = 60000;
318
- /** Soldier camps closer to the farm (higher world Z), south of the lake. */
318
+ /** Soldier camps - closer to the farm (higher world Z), south of the lake. */
319
319
  export declare const BATTLEFIELD_SOLDIER_CAMPS: readonly {
320
320
  x: number;
321
321
  z: number;
@@ -325,13 +325,13 @@ export declare const BATTLEFIELD_CAPTAIN_CAMP: {
325
325
  readonly x: 119;
326
326
  readonly z: 734;
327
327
  };
328
- /** Goblin camps farther wilderness (lower world Z), north of the lake. */
328
+ /** Goblin camps - farther wilderness (lower world Z), north of the lake. */
329
329
  export declare const BATTLEFIELD_GOBLIN_CAMPS: readonly {
330
330
  x: number;
331
331
  z: number;
332
332
  }[];
333
333
  /**
334
- * Cultivated cabbage plots on the soldier shore between lake and camps.
334
+ * Cultivated cabbage plots on the soldier shore - between lake and camps.
335
335
  * Filled as neat soil rows (not sparse scatter).
336
336
  */
337
337
  export declare const BATTLEFIELD_CABBAGE_PLOTS: readonly {
@@ -359,7 +359,7 @@ export type WorldMapLandmark = {
359
359
  };
360
360
  /**
361
361
  * Paper-map labels. Keep this list in lockstep with named places in this file
362
- * and `DISCOVERY_ZONES` the in-game map and the public website chart both
362
+ * and `DISCOVERY_ZONES` - the in-game map and the public website chart both
363
363
  * paint from here. Village is not a labelled stop.
364
364
  */
365
365
  export declare const WORLD_MAP_LANDMARKS: readonly WorldMapLandmark[];
package/dist/landmarks.js CHANGED
@@ -17,7 +17,7 @@ export const BASECAMP_GATE_LOCAL_Z = BASECAMP_CENTER_LOCAL_Z;
17
17
  export const BASECAMP_GATE_HALF = 5;
18
18
  export const BASECAMP_WALL_X = 604;
19
19
  /**
20
- * Single-column rocky enclave on Base Camp's west face the thin cliff/shore
20
+ * Single-column rocky enclave on Base Camp's west face - the thin cliff/shore
21
21
  * where the battlefield lake meets camp. Not a filled gray slab.
22
22
  */
23
23
  export const BASECAMP_ENCLAVE_X = BASECAMP_WALL_X;
@@ -29,7 +29,7 @@ export const BASECAMP_CAVE_LOCAL_Z = BASECAMP_CENTER_LOCAL_Z;
29
29
  export const BASECAMP_FAR_SIDE_X = BASECAMP_CAVE_X + 30;
30
30
  export const BASECAMP_FAR_SIDE_LOCAL_Z = BASECAMP_CAVE_LOCAL_Z;
31
31
  /**
32
- * Anne's cottage a longer walk north of the east road, halfway between
32
+ * Anne's cottage - a longer walk north of the east road, halfway between
33
33
  * Crossroads and Base Camp. Lower local Z is north (toward WORLD_NORTH_PAD).
34
34
  * Stays west of BASECAMP_WALL_X so it never touches the mountain wall.
35
35
  */
@@ -41,7 +41,7 @@ export const ANNES_ZONE_NORTH = 16;
41
41
  export const ANNES_ZONE_SOUTH = 22;
42
42
  /**
43
43
  * Small vestigial mud alcove right behind the Suspicious hole mouth at Base
44
- * Camp kept only as set dressing for the doorway. The real Rat Tunnel
44
+ * Camp - kept only as set dressing for the doorway. The real Rat Tunnel
45
45
  * dungeon lives far away in its own dedicated underground zone (see below);
46
46
  * the Base Camp Suspicious hole teleports players there. Forest animal dens
47
47
  * are separate tiny caverns, not extra doors into this dungeon.
@@ -53,10 +53,10 @@ export const RAT_TUNNEL_RZ = 5;
53
53
  export const SUSPICIOUS_HOLE_RETURN_X = BASECAMP_CAVE_X - 3;
54
54
  export const SUSPICIOUS_HOLE_RETURN_LOCAL_Z = BASECAMP_CAVE_LOCAL_Z;
55
55
  /**
56
- * Rat Tunnel dungeon a genuinely separate underground zone carved into an
56
+ * Rat Tunnel dungeon - a genuinely separate underground zone carved into an
57
57
  * off-map strip east of the overworld (x >= UNDERGROUND_ORIGIN_X), so the
58
58
  * rooms are never painted as surface geography on the paper map. The
59
- * Suspicious hole doesn't lead into a pocket behind itself it teleports
59
+ * Suspicious hole doesn't lead into a pocket behind itself - it teleports
60
60
  * players into this dedicated 5-room dungeon (forest animal dens do not).
61
61
  * Room 1 has a crawl-out back to Base Camp so players are not trapped in the
62
62
  * pit; the portal at the far end of Room 5 is the dungeon-clear exit.
@@ -69,24 +69,24 @@ export const SUSPICIOUS_HOLE_RETURN_LOCAL_Z = BASECAMP_CAVE_LOCAL_Z;
69
69
  */
70
70
  export const DUNGEON_CENTER_X = UNDERGROUND_ORIGIN_X + CHUNK_SIZE * 4;
71
71
  /**
72
- * ROOM SCALE deliberately tight.
72
+ * ROOM SCALE - deliberately tight.
73
73
  *
74
74
  * The first build made every room a field: Room 4 was 53x44 tiles and Room 1
75
75
  * and 3 were 41 wide, on a map where a character occupies one tile. Crossing
76
- * the boss room took ~45 steps, and no amount of scenery could fill that every
76
+ * the boss room took ~45 steps, and no amount of scenery could fill that - every
77
77
  * dressing pass read as litter scattered on an empty plain. These are roughly
78
78
  * half the old linear dimensions (about a quarter of the floor area), which is
79
79
  * the range a dungeon crawl actually wants: you can see both walls, scenery
80
80
  * reaches you, and a fight fills the space instead of rattling around in it.
81
81
  *
82
- * Encounter room sizes still scale with what happens in them the boss cavern
82
+ * Encounter room sizes still scale with what happens in them - the boss cavern
83
83
  * is the largest, the exit vestibule barely more than a landing.
84
84
  */
85
85
  export const DUNGEON_ROOM_HALF_W = 14;
86
86
  /** The giant-rat warren is deliberately tighter than the human encounter rooms. */
87
87
  export const DUNGEON_GIANT_RAT_ROOM_HALF_W = 11;
88
88
  export const DUNGEON_BOSS_HALF_W = 17;
89
- /** Exit vestibule a landing, not a hall. */
89
+ /** Exit vestibule - a landing, not a hall. */
90
90
  export const DUNGEON_VESTIBULE_HALF_W = 9;
91
91
  /** Entry guardroom, tighter than the mid-dungeon encounter rooms. */
92
92
  export const DUNGEON_GUARDROOM_HALF_W = 12;
@@ -99,7 +99,7 @@ export const DUNGEON_CORRIDOR_HALF_W = 3;
99
99
  */
100
100
  export const DUNGEON_ROOM1_MIN_Z = 60;
101
101
  export const DUNGEON_ROOM1_MAX_Z = 82;
102
- /** Rat-pit centre in Room 1 mirrors DUNGEON_ROOM2_PIT_Z for the arena below. */
102
+ /** Rat-pit centre in Room 1 - mirrors DUNGEON_ROOM2_PIT_Z for the arena below. */
103
103
  export const DUNGEON_ROOM1_PIT_Z = Math.round((DUNGEON_ROOM1_MIN_Z + DUNGEON_ROOM1_MAX_Z) / 2);
104
104
  export const DUNGEON_ROOM2_MIN_Z = 99;
105
105
  export const DUNGEON_ROOM2_MAX_Z = 125;
@@ -115,7 +115,7 @@ export const DUNGEON_MIN_X = DUNGEON_CENTER_X - DUNGEON_BOSS_HALF_W;
115
115
  export const DUNGEON_MAX_X = DUNGEON_CENTER_X + DUNGEON_BOSS_HALF_W;
116
116
  export const DUNGEON_MIN_Z = DUNGEON_ROOM1_MIN_Z;
117
117
  export const DUNGEON_MAX_Z = DUNGEON_ROOM5_MAX_Z;
118
- /** Room-gate doorway rows the door sits on the entrance wall of the room being unlocked. */
118
+ /** Room-gate doorway rows - the door sits on the entrance wall of the room being unlocked. */
119
119
  export const DUNGEON_GATE1_Z = DUNGEON_ROOM2_MIN_Z;
120
120
  export const DUNGEON_GATE2_Z = DUNGEON_ROOM3_MIN_Z;
121
121
  export const DUNGEON_GATE3_Z = DUNGEON_ROOM4_MIN_Z;
@@ -126,7 +126,7 @@ export const DUNGEON_EXIT_PORTAL_X = DUNGEON_CENTER_X;
126
126
  export const DUNGEON_EXIT_PORTAL_Z = DUNGEON_ROOM5_MAX_Z - 6;
127
127
  /**
128
128
  * Crawl-out in Room 1 (rat pit), flush with the north wall and facing south
129
- * into the pit. Same `exit-*` interact/teleport as Room 5 returns to the
129
+ * into the pit. Same `exit-*` interact/teleport as Room 5 - returns to the
130
130
  * Suspicious hole approach at Base Camp. Compact footprint; keep the two
131
131
  * tiles in front standable so logout restore can slide off the blocked door.
132
132
  */
@@ -150,7 +150,7 @@ export const DUNGEON_WALL_MARGIN = 8;
150
150
  /**
151
151
  * How far the solid rock is actually PAINTED, as opposed to how far the dungeon
152
152
  * zone reaches. The camera looks down at ~53 degrees, so a 5-unit wall only
153
- * hides about four tiles of whatever is behind it with the old 8-tile margin
153
+ * hides about four tiles of whatever is behind it - with the old 8-tile margin
154
154
  * the overworld's grass and sky were plainly visible over the dungeon walls.
155
155
  * The apron is a cheap fix: keep painting rock until the far fog (62 units)
156
156
  * swallows it. It deliberately does NOT widen `inDungeonZone`, which gates
@@ -163,7 +163,7 @@ export function inDungeonZone(x, z) {
163
163
  z >= DUNGEON_MIN_Z - DUNGEON_WALL_MARGIN &&
164
164
  z <= DUNGEON_MAX_Z + DUNGEON_WALL_MARGIN);
165
165
  }
166
- /** Tight animal-dug hollow a handful of tiles, not a mystery hall. */
166
+ /** Tight animal-dug hollow - a handful of tiles, not a mystery hall. */
167
167
  export const FOREST_DEN_RX = 4;
168
168
  export const FOREST_DEN_RZ = 3;
169
169
  export const FOREST_DEN_WALL = 2;
@@ -183,18 +183,18 @@ function forestDenSite(id, entranceX, entranceLocalZ, facing, cavernIndex) {
183
183
  }
184
184
  /**
185
185
  * Rat caves scattered through the woods. Same idea as the old extra Suspicious
186
- * holes they look like small rocky cave mouths, each with its own cramped
186
+ * holes - they look like small rocky cave mouths, each with its own cramped
187
187
  * cavern, not extra doors into the Rat Tunnel.
188
188
  */
189
189
  /**
190
- * Every site here is fully built by world generation cleared entrance
191
- * hollow, its own cavern, and a return exit but only FOREST_DEN_ACTIVE_COUNT
190
+ * Every site here is fully built by world generation - cleared entrance
191
+ * hollow, its own cavern, and a return exit - but only FOREST_DEN_ACTIVE_COUNT
192
192
  * of them show a cave mouth at any one time (see World.denEntranceActive).
193
193
  * Crawling out of a den retires that mouth and opens a different site, so the
194
194
  * dens move around the woods instead of being permanent scenery.
195
195
  *
196
196
  * There used to be 13 permanently-open mouths, which is why they read as
197
- * "everywhere" you could not cross the forest without tripping over one.
197
+ * "everywhere" - you could not cross the forest without tripping over one.
198
198
  * Keeping the full list (rather than deleting sites) is what gives the
199
199
  * relocation somewhere to move *to*; the count below is the dial for how
200
200
  * often you actually meet one.
@@ -280,7 +280,7 @@ function room1RatSpawnSpots() {
280
280
  const cx = DUNGEON_CENTER_X;
281
281
  const minZ = DUNGEON_ROOM1_MIN_Z;
282
282
  const maxZ = DUNGEON_ROOM1_MAX_Z;
283
- // [dx, depth fraction] keep clear of the wall ring (±12) and gate approaches.
283
+ // [dx, depth fraction] - keep clear of the wall ring (±12) and gate approaches.
284
284
  const offsets = [
285
285
  [-9, 0.22],
286
286
  [0, 0.22],
@@ -312,7 +312,7 @@ export const DUNGEON_ROOM_SPAWNS = {
312
312
  4: roomSpawnSpots(DUNGEON_ROOM4_MIN_Z, DUNGEON_ROOM4_MAX_Z, 1),
313
313
  };
314
314
  /**
315
- * Northwest battlefield north pad west of the Deadlands, inland of west cliffs.
315
+ * Northwest battlefield - north pad west of the Deadlands, inland of west cliffs.
316
316
  * World Z decreases toward the north wilderness; farm approaches from the south.
317
317
  * East edge meets the Deadlands west border. The lake continues east of this pad
318
318
  * (see BATTLEFIELD_LAKE_EAST_X).
@@ -327,7 +327,7 @@ export const BATTLEFIELD_MAX_LOCAL_Z = BATTLEFIELD_MAX_WORLD_Z - WORLD_NORTH_PAD
327
327
  /**
328
328
  * Lake between soldier (south / farmward) and goblin (north) camps.
329
329
  * Water blocks walking; the battlefield crossing is the long bridge once repaired.
330
- * Thick NS band on the pad, then the same Z band continues east through the
330
+ * Thick N-S band on the pad, then the same Z band continues east through the
331
331
  * corridor south of the Deadlands, past the west-face enclave, until it meets
332
332
  * the SE high-rock row.
333
333
  */
@@ -345,7 +345,7 @@ export function isDeadlandsSouthWallClearance(x, z) {
345
345
  /**
346
346
  * One-tile high-rock / crag row on the SW corner of remaining Base Camp land
347
347
  * (south of the lake). Same X as the thin west-face enclave; the lake band at
348
- * this X is water so the eastwest sheet can continue.
348
+ * this X is water so the east-west sheet can continue.
349
349
  */
350
350
  export const BATTLEFIELD_LAKE_SW_ROCK_X = BASECAMP_ENCLAVE_X;
351
351
  export const BATTLEFIELD_LAKE_SW_ROCK_MIN_Z = BATTLEFIELD_LAKE_MAX_Z + 1;
@@ -363,14 +363,14 @@ export const BATTLEFIELD_LAKE_SE_ROCK_MAX_Z = WORLD_NORTH_PAD + 1;
363
363
  */
364
364
  export const BATTLEFIELD_LAKE_EAST_X = BATTLEFIELD_LAKE_SE_ROCK_X - 1;
365
365
  export const BATTLEFIELD_LAKE_MID_Z = Math.floor((BATTLEFIELD_LAKE_MIN_Z + BATTLEFIELD_LAKE_MAX_Z) / 2);
366
- /** @deprecated Use BATTLEFIELD_LAKE_* kept for older imports. */
366
+ /** @deprecated Use BATTLEFIELD_LAKE_* - kept for older imports. */
367
367
  export const BATTLEFIELD_CONTESTED_MIN_Z = BATTLEFIELD_LAKE_MIN_Z;
368
368
  /** @deprecated Use BATTLEFIELD_LAKE_* */
369
369
  export const BATTLEFIELD_CONTESTED_MAX_Z = BATTLEFIELD_LAKE_MAX_Z;
370
370
  /** @deprecated Use BATTLEFIELD_LAKE_* */
371
371
  export const BATTLEFIELD_CONTESTED_MID_Z = BATTLEFIELD_LAKE_MID_Z;
372
372
  /**
373
- * NS bridge across the lake (world X).
373
+ * N-S bridge across the lake (world X).
374
374
  * Anchored on the original battlefield mid-X so expanding east to the Deadlands
375
375
  * lengthens the water sheet without sliding the crossing.
376
376
  */
@@ -382,7 +382,7 @@ export const BATTLEFIELD_BRIDGE_HALF_W = 1;
382
382
  *
383
383
  * The lake now runs from the west cliffs to the SE rock row, while the
384
384
  * bridge sits at x 91, so an unconstrained spot could land far down the new
385
- * east shore a long walk, and on the wrong side of the map from the crossing.
385
+ * east shore - a long walk, and on the wrong side of the map from the crossing.
386
386
  */
387
387
  export const BATTLEFIELD_FISHING_MAX_BRIDGE_DX = 16;
388
388
  /**
@@ -398,7 +398,7 @@ export function isBattlefieldBridgeGapTile(x, z) {
398
398
  z <= BATTLEFIELD_BRIDGE_GAP_MAX_Z);
399
399
  }
400
400
  /**
401
- * Single clickable crossing icon centre of the gap (x 91, z 682), not every
401
+ * Single clickable crossing icon - centre of the gap (x 91, z 682), not every
402
402
  * plank and not the intact approaches.
403
403
  */
404
404
  export function isBattlefieldBridgeTravelIconTile(x, z) {
@@ -407,11 +407,11 @@ export function isBattlefieldBridgeTravelIconTile(x, z) {
407
407
  /**
408
408
  * Chebyshev tiles from a travel-through target (bridge crossing icon, dungeon
409
409
  * pit gate). Those tiles are water or blocked, and the last intact plank is two
410
- * steps from the icon range 1 would demand standing on the gap itself.
410
+ * steps from the icon - range 1 would demand standing on the gap itself.
411
411
  */
412
412
  export const TRAVEL_THROUGH_RANGE = 4;
413
413
  /**
414
- * Rupert Row's dock a short wooden pier on the south shore west of the bridge,
414
+ * Rupert Row's dock - a short wooden pier on the south shore west of the bridge,
415
415
  * with his rowboat tied at the water end.
416
416
  */
417
417
  export const RUPERT_ROW_PIER_X = BATTLEFIELD_BRIDGE_X - BATTLEFIELD_BRIDGE_HALF_W - 11;
@@ -424,7 +424,7 @@ export const RUPERT_ROW_SPAWN_Z = RUPERT_ROW_PIER_Z;
424
424
  export const BATTLEFIELD_CAMP_CLEAR_RADIUS = 6;
425
425
  export const BATTLEFIELD_NPCS_PER_CAMP = 4;
426
426
  /**
427
- * Goblin camps run denser than soldier camps. Goblins are the grind target
427
+ * Goblin camps run denser than soldier camps. Goblins are the grind target -
428
428
  * at 2 per camp a player working a camp spent most of the trip walking between
429
429
  * camps waiting on respawns, which is what made the battlefield feel empty.
430
430
  * Soldiers now hold their camps in force too, so both sides read as active
@@ -433,7 +433,7 @@ export const BATTLEFIELD_NPCS_PER_CAMP = 4;
433
433
  export const BATTLEFIELD_GOBLINS_PER_CAMP = 6;
434
434
  /** How long a faction camp chest stays before fading out and relocating. */
435
435
  export const BATTLEFIELD_CAMP_CHEST_LIFETIME_MS = 60_000;
436
- /** Soldier camps closer to the farm (higher world Z), south of the lake. */
436
+ /** Soldier camps - closer to the farm (higher world Z), south of the lake. */
437
437
  export const BATTLEFIELD_SOLDIER_CAMPS = [
438
438
  { x: 22, z: 720 },
439
439
  { x: 48, z: 714 },
@@ -452,7 +452,7 @@ export const BATTLEFIELD_SOLDIER_CAMPS = [
452
452
  ];
453
453
  /** The large central soldier camp is commanded by the Battlefield Captain. */
454
454
  export const BATTLEFIELD_CAPTAIN_CAMP = { x: 119, z: 734 };
455
- /** Goblin camps farther wilderness (lower world Z), north of the lake. */
455
+ /** Goblin camps - farther wilderness (lower world Z), north of the lake. */
456
456
  export const BATTLEFIELD_GOBLIN_CAMPS = [
457
457
  { x: 30, z: 654 },
458
458
  { x: 58, z: 648 },
@@ -466,7 +466,7 @@ export const BATTLEFIELD_GOBLIN_CAMPS = [
466
466
  { x: 128, z: 656 },
467
467
  ];
468
468
  /**
469
- * Cultivated cabbage plots on the soldier shore between lake and camps.
469
+ * Cultivated cabbage plots on the soldier shore - between lake and camps.
470
470
  * Filled as neat soil rows (not sparse scatter).
471
471
  */
472
472
  export const BATTLEFIELD_CABBAGE_PLOTS = [
@@ -563,7 +563,7 @@ function discoveryZoneCenter(id) {
563
563
  }
564
564
  /**
565
565
  * Paper-map labels. Keep this list in lockstep with named places in this file
566
- * and `DISCOVERY_ZONES` the in-game map and the public website chart both
566
+ * and `DISCOVERY_ZONES` - the in-game map and the public website chart both
567
567
  * paint from here. Village is not a labelled stop.
568
568
  */
569
569
  export const WORLD_MAP_LANDMARKS = [
@@ -52,7 +52,7 @@ export type PlayerPublic = {
52
52
  /**
53
53
  * Which tackle the fishing pose should show. Pond fishing is a scoop net;
54
54
  * lake fishing (perch/tench) is the small rod, which previously also drew a
55
- * net so casting for perch looked like scooping frogs.
55
+ * net - so casting for perch looked like scooping frogs.
56
56
  */
57
57
  fishingGear?: 'net' | 'rod';
58
58
  /**
@@ -121,7 +121,7 @@ export type ItemAction = 'eat' | 'drop' | 'equip' | 'unequip';
121
121
  /**
122
122
  * A shop listing a player can buy. Normally costed in gold via `price`, but a
123
123
  * listing can instead be a barter (e.g. Wilson's rod-for-maggots trade) by
124
- * setting `costKind`/`costQty` to an item cost `price` is ignored then.
124
+ * setting `costKind`/`costQty` to an item cost - `price` is ignored then.
125
125
  */
126
126
  export type ShopBuyEntry = {
127
127
  kind: string;
@@ -136,7 +136,7 @@ export type ShopSellEntry = {
136
136
  };
137
137
  export type JoinRejectedReason = 'name_taken' | 'invalid_name';
138
138
  /**
139
- * `reward` is for "you just gained something" moments landing a fish, and
139
+ * `reward` is for "you just gained something" moments - landing a fish, and
140
140
  * anything else worth a beat of celebration. Distinct from `quiet` (which is a
141
141
  * plain grey chat line and was where catches used to land, so they slid past
142
142
  * unnoticed) and from the default gold notice, which is used for routine
@@ -348,7 +348,7 @@ export type ClientMessage =
348
348
  type: 'duel_cancel';
349
349
  }
350
350
  /**
351
- * Claims the rescued beagle, or renames one already claimed the same
351
+ * Claims the rescued beagle, or renames one already claimed - the same
352
352
  * message either way, since "name your beagle" and "rename your beagle" are
353
353
  * the same operation to the server.
354
354
  */
@@ -373,7 +373,7 @@ export type ClientMessage =
373
373
  };
374
374
  /** Crash/error diagnostics pushed from client to server so they land in server logs
375
375
  * instead of only a phone's on-device console (which on TikTok can miss early boot
376
- * output see crashDiagnostics.ts on the client). Best-effort, not persisted server-side. */
376
+ * output - see crashDiagnostics.ts on the client). Best-effort, not persisted server-side. */
377
377
  export type ClientErrorReport = {
378
378
  reason: string;
379
379
  message?: string;
@@ -660,7 +660,7 @@ export type ServerMessage = {
660
660
  damage: number;
661
661
  health: number;
662
662
  healthMax: number;
663
- /** Ranged attack flavor client renders a projectile instead of a melee punch. */
663
+ /** Ranged attack flavor - client renders a projectile instead of a melee punch. */
664
664
  projectile?: 'blueberry' | 'arrow';
665
665
  } | {
666
666
  type: 'combat_end';
@@ -714,7 +714,7 @@ export type ServerMessage = {
714
714
  name: string | null;
715
715
  out: boolean;
716
716
  }
717
- /** Someone patted their beagle shown over that owner's pet, not your own. */
717
+ /** Someone patted their beagle - shown over that owner's pet, not your own. */
718
718
  | {
719
719
  type: 'companion_speech';
720
720
  ownerId: string;
package/dist/quests.d.ts CHANGED
@@ -34,7 +34,7 @@ export declare const RANGER_SAW_EXPLORER_XP = 25;
34
34
  export declare const ANNE_FOXES_NEEDED = 20;
35
35
  /** Matches Debbie's skill-XP grant; Mastery is the Weapon Mastery pool (`precisionXp`). */
36
36
  export declare const ANNE_FOXES_MASTERY_XP = 100;
37
- /** Same as Clark's Chores foxes are found by foraging tracks. */
37
+ /** Same as Clark's Chores - foxes are found by foraging tracks. */
38
38
  export declare const ANNE_FOXES_FORAGING_XP = 120;
39
39
  /** Same as Clark's Chores / Debbie. */
40
40
  export declare const ANNE_FOXES_EXPLORER_XP = 80;
@@ -44,9 +44,9 @@ export declare const CARRIAGE_REPAIR_WOODWORK_XP = 150;
44
44
  export declare const CARRIAGE_DRIVER_EXPLORER_XP = 60;
45
45
  export declare const CARRIAGE_RIDE_BASECAMP_COST = 10;
46
46
  export declare const CARRIAGE_RIDE_FARM_COST = 5;
47
- /** Lil Beach is the starting shore same short hop as the farm, priced to match. */
47
+ /** Lil Beach is the starting shore - same short hop as the farm, priced to match. */
48
48
  export declare const CARRIAGE_RIDE_BEACH_COST = 5;
49
- /** Sold at the stable counter; never enters the bag it hitches to the carriage. */
49
+ /** Sold at the stable counter; never enters the bag - it hitches to the carriage. */
50
50
  export declare const CARRIAGE_HORSE_KIND = "carriagehorse";
51
51
  /** Stable Master sells a draft horse so the carriage can actually run. */
52
52
  export declare const CARRIAGE_HORSE_COST = 200;
package/dist/quests.js CHANGED
@@ -26,7 +26,7 @@ export const RANGER_SAW_EXPLORER_XP = 25;
26
26
  export const ANNE_FOXES_NEEDED = 20;
27
27
  /** Matches Debbie's skill-XP grant; Mastery is the Weapon Mastery pool (`precisionXp`). */
28
28
  export const ANNE_FOXES_MASTERY_XP = 100;
29
- /** Same as Clark's Chores foxes are found by foraging tracks. */
29
+ /** Same as Clark's Chores - foxes are found by foraging tracks. */
30
30
  export const ANNE_FOXES_FORAGING_XP = 120;
31
31
  /** Same as Clark's Chores / Debbie. */
32
32
  export const ANNE_FOXES_EXPLORER_XP = 80;
@@ -36,9 +36,9 @@ export const CARRIAGE_REPAIR_WOODWORK_XP = 150;
36
36
  export const CARRIAGE_DRIVER_EXPLORER_XP = 60;
37
37
  export const CARRIAGE_RIDE_BASECAMP_COST = 10;
38
38
  export const CARRIAGE_RIDE_FARM_COST = 5;
39
- /** Lil Beach is the starting shore same short hop as the farm, priced to match. */
39
+ /** Lil Beach is the starting shore - same short hop as the farm, priced to match. */
40
40
  export const CARRIAGE_RIDE_BEACH_COST = 5;
41
- /** Sold at the stable counter; never enters the bag it hitches to the carriage. */
41
+ /** Sold at the stable counter; never enters the bag - it hitches to the carriage. */
42
42
  export const CARRIAGE_HORSE_KIND = 'carriagehorse';
43
43
  /** Stable Master sells a draft horse so the carriage can actually run. */
44
44
  export const CARRIAGE_HORSE_COST = 200;
@@ -48,7 +48,7 @@ export const CAPTAINS_ORDERS_GOBLINS_NEEDED = 30;
48
48
  export const BERNIE_BUBBLE_MS = 4000;
49
49
  export const QUEST_META = {
50
50
  lostBeagle: {
51
- // QuestId stays 'lostBeagle' it is persisted on character documents and
51
+ // QuestId stays 'lostBeagle' - it is persisted on character documents and
52
52
  // threaded through the wire protocol. Only the player-facing copy changed,
53
53
  // to match Bernie being a dog rather than a beagle specifically.
54
54
  title: 'The Lost Dog',
@@ -177,7 +177,7 @@ export const QUEST_META = {
177
177
  },
178
178
  findRimdel: {
179
179
  title: 'Find Rimdel',
180
- description: "You freed Rimdel from the goblin prison in the Goblin Cave. He told you he's headed to the capital of the Upper Kingdoms seek him out if you ever make it there.",
180
+ description: "You freed Rimdel from the goblin prison in the Goblin Cave. He told you he's headed to the capital of the Upper Kingdoms - seek him out if you ever make it there.",
181
181
  giverNpcKind: 'rimdel',
182
182
  objectives: {
183
183
  active: 'Find Rimdel at the capital in the Upper Kingdoms.',