@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.
- package/README.md +1 -1
- package/dist/appearance.d.ts +4 -4
- package/dist/appearance.d.ts.map +1 -1
- package/dist/appearance.js +8 -5
- package/dist/appearance.js.map +1 -1
- package/dist/constants.d.ts +8 -8
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +11 -11
- package/dist/constants.js.map +1 -1
- package/dist/cooking.d.ts +1 -1
- package/dist/cooking.js +1 -1
- package/dist/equipment.js +1 -1
- package/dist/groundItems.d.ts +1 -1
- package/dist/groundItems.d.ts.map +1 -1
- package/dist/groundItems.js +3 -1
- package/dist/groundItems.js.map +1 -1
- package/dist/landmarks.d.ts +32 -32
- package/dist/landmarks.js +33 -33
- package/dist/messages.d.ts +7 -7
- package/dist/quests.d.ts +3 -3
- package/dist/quests.js +5 -5
- package/dist/woodwork.d.ts +8 -8
- package/dist/woodwork.js +9 -9
- package/dist/xp.d.ts +1 -1
- package/dist/xp.js +1 -1
- package/package.json +1 -1
package/dist/landmarks.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
182
|
-
* hollow, its own cavern, and a return exit
|
|
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"
|
|
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
|
|
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 N
|
|
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 east
|
|
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_*
|
|
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
|
-
* N
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
191
|
-
* hollow, its own cavern, and a return exit
|
|
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"
|
|
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]
|
|
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
|
|
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 N
|
|
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 east
|
|
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_*
|
|
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
|
-
* N
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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`
|
|
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 = [
|
package/dist/messages.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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'
|
|
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
|
|
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.',
|