@dreadwood-types/types 0.1.49 → 0.1.52
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/adventure.d.ts +6 -6
- package/dist/adventure.d.ts.map +1 -1
- package/dist/appearance.d.ts +16 -6
- package/dist/appearance.d.ts.map +1 -1
- package/dist/appearance.js +46 -34
- package/dist/appearance.js.map +1 -1
- package/dist/bank.d.ts.map +1 -1
- package/dist/bearFloes.d.ts +83 -0
- package/dist/bearFloes.d.ts.map +1 -0
- package/dist/bearFloes.js +126 -0
- package/dist/bearFloes.js.map +1 -0
- package/dist/blacksmithing.d.ts.map +1 -1
- package/dist/blacksmithing.js +78 -1
- package/dist/blacksmithing.js.map +1 -1
- package/dist/bloodRiver.d.ts +9 -6
- package/dist/bloodRiver.d.ts.map +1 -1
- package/dist/bloodRiver.js +19 -17
- package/dist/bloodRiver.js.map +1 -1
- package/dist/brokenRoad.d.ts.map +1 -1
- package/dist/capital.d.ts +541 -180
- package/dist/capital.d.ts.map +1 -1
- package/dist/capital.js +934 -184
- package/dist/capital.js.map +1 -1
- package/dist/charcoal.d.ts +43 -0
- package/dist/charcoal.d.ts.map +1 -0
- package/dist/charcoal.js +78 -0
- package/dist/charcoal.js.map +1 -0
- package/dist/clientConfig.d.ts +7 -2
- package/dist/clientConfig.d.ts.map +1 -1
- package/dist/clientConfig.js +13 -3
- package/dist/clientConfig.js.map +1 -1
- package/dist/constants.d.ts +177 -9
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +336 -17
- package/dist/constants.js.map +1 -1
- package/dist/dragonfire.d.ts +75 -0
- package/dist/dragonfire.d.ts.map +1 -0
- package/dist/dragonfire.js +73 -0
- package/dist/dragonfire.js.map +1 -0
- package/dist/dungeonCharts.d.ts +18 -0
- package/dist/dungeonCharts.d.ts.map +1 -0
- package/dist/dungeonCharts.js +67 -0
- package/dist/dungeonCharts.js.map +1 -0
- package/dist/equipment.d.ts +2 -0
- package/dist/equipment.d.ts.map +1 -1
- package/dist/equipment.js +33 -1
- package/dist/equipment.js.map +1 -1
- package/dist/frozenSet.d.ts +36 -0
- package/dist/frozenSet.d.ts.map +1 -0
- package/dist/frozenSet.js +58 -0
- package/dist/frozenSet.js.map +1 -0
- package/dist/goblinCave.d.ts +4 -4
- package/dist/goblinCave.d.ts.map +1 -1
- package/dist/goblinCave.js +1 -1
- package/dist/groundItems.d.ts.map +1 -1
- package/dist/groundItems.js +16 -0
- package/dist/groundItems.js.map +1 -1
- package/dist/harbour.d.ts +60 -24
- package/dist/harbour.d.ts.map +1 -1
- package/dist/harbour.js +84 -50
- package/dist/harbour.js.map +1 -1
- package/dist/iceDepths.d.ts +11 -0
- package/dist/iceDepths.d.ts.map +1 -1
- package/dist/iceDepths.js +14 -0
- package/dist/iceDepths.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/interiorFurniture.d.ts +57 -0
- package/dist/interiorFurniture.d.ts.map +1 -0
- package/dist/interiorFurniture.js +159 -0
- package/dist/interiorFurniture.js.map +1 -0
- package/dist/landmarks.d.ts +77 -58
- package/dist/landmarks.d.ts.map +1 -1
- package/dist/landmarks.js +145 -119
- package/dist/landmarks.js.map +1 -1
- package/dist/messages.d.ts +74 -5
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js.map +1 -1
- package/dist/mineCave.d.ts +7 -7
- package/dist/mineCave.d.ts.map +1 -1
- package/dist/mining.d.ts +8 -0
- package/dist/mining.d.ts.map +1 -1
- package/dist/mining.js +8 -0
- package/dist/mining.js.map +1 -1
- package/dist/questGuide.d.ts +30 -0
- package/dist/questGuide.d.ts.map +1 -0
- package/dist/questGuide.js +3 -0
- package/dist/questGuide.js.map +1 -0
- package/dist/quests.d.ts +29 -0
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +70 -0
- package/dist/quests.js.map +1 -1
- package/dist/snow.d.ts +2 -2
- package/dist/snow.d.ts.map +1 -1
- package/dist/snow.js +8 -5
- package/dist/snow.js.map +1 -1
- package/dist/spiderCave.d.ts.map +1 -1
- package/dist/woodwork.d.ts +8 -2
- package/dist/woodwork.d.ts.map +1 -1
- package/dist/woodwork.js +13 -3
- package/dist/woodwork.js.map +1 -1
- package/dist/xp.d.ts +18 -7
- package/dist/xp.d.ts.map +1 -1
- package/dist/xp.js +20 -9
- package/dist/xp.js.map +1 -1
- package/dist/zones.d.ts +5 -0
- package/dist/zones.d.ts.map +1 -1
- package/dist/zones.js +8 -3
- package/dist/zones.js.map +1 -1
- package/package.json +1 -1
package/dist/landmarks.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { BEACH_GATE_X, BEACH_SAND_START_Z, BEACH_START_Z, CHUNK_SIZE, OCEAN_START_Z, STONE_HOUSE_LODGE_RADIUS_ACROSS, STONE_HOUSE_RADIUS, UNDERGROUND_ORIGIN_X, WORLD_NORTH_PAD, WORLD_WIDTH, toLocalZ, toWorldZ, } from './constants.js';
|
|
1
|
+
import { BEACH_GATE_X, BEACH_SAND_START_Z, BEACH_START_Z, CHUNK_SIZE, NORTH_SHIFT, OCEAN_START_Z, STONE_HOUSE_LODGE_RADIUS_ACROSS, STONE_HOUSE_RADIUS, UNDERGROUND_ORIGIN_X, WORLD_NORTH_PAD, WORLD_WIDTH, toLocalZ, toWorldZ, } from './constants.js';
|
|
2
2
|
import { DEADLANDS_DEFENSE_DEPTH, DEADLANDS_GATE_X, DEADLANDS_MAX_X, DEADLANDS_MAX_Z, DEADLANDS_MIN_X, DEADLANDS_MIN_Z, } from './zones.js';
|
|
3
3
|
import { SNOW_DEEP_Z, SNOW_EDGE_Z } from './snow.js';
|
|
4
|
+
import { BEAR_FLOES_CAMP, BEAR_FLOES_ZONE } from './bearFloes.js';
|
|
4
5
|
import { inIceDepths } from './iceDepths.js';
|
|
5
6
|
import { dreadwoodsNpcZone } from './dreadwoodsZones.js';
|
|
6
|
-
import { CAPITAL_DISTRICTS,
|
|
7
|
+
import { CAPITAL_AVENUE_Z, CAPITAL_DISTRICTS, CAPITAL_ROYAL_WAY_X, CAPITAL_WORKS } from './capital.js';
|
|
7
8
|
import { GOBLIN_CAVE_OUTSIDE } from './goblinCave.js';
|
|
8
9
|
import { HARBOUR_LIGHTHOUSE, HARBOUR_MIN_X, HARBOUR_MOLE_HEAD, HARBOUR_NAME, HARBOUR_ROAD_Z, HARBOUR_ROYAL_PIER, HARBOUR_SOUTH_Z, } from './harbour.js';
|
|
9
10
|
import { BLOOD_LAKE_CX, BLOOD_LAKE_CZ, DREADWOODS_WEST_GATE_HALF_W, DREADWOODS_WEST_GATE_Z, } from './bloodRiver.js';
|
|
@@ -26,6 +27,11 @@ export const BOUNTY_BRUCE_LOCAL_Z = CROSSROADS_LOCAL_Z + 3;
|
|
|
26
27
|
* tiled deck like the battlefield bridge, running the full depth of the ocean
|
|
27
28
|
* strip, with two smashed spans in it that a player planks over one at a time.
|
|
28
29
|
*
|
|
30
|
+
* Every section was stretched to about 1.5x on 2026-09-24 (James: "extend
|
|
31
|
+
* every section"): shore walk 31 rows to 46, middle stretch 28 to 42, far
|
|
32
|
+
* stretch 28 to 42, the east branch 11 tiles to 17 and the west spur 10 to 15.
|
|
33
|
+
* The breaks stay two rows. WORLD_SOUTH_CHUNKS grew to keep open sea past the head.
|
|
34
|
+
*
|
|
29
35
|
* All world coordinates. The deck is Path at height 1 over Water, so it stands
|
|
30
36
|
* proud of the sea the same way the bridge stands proud of the lake.
|
|
31
37
|
*/
|
|
@@ -40,16 +46,16 @@ export const HOPE_PIER_SHORE_Z = OCEAN_START_Z - 3;
|
|
|
40
46
|
* and tying the end to WORLD_HEIGHT would spend that padding on more decking
|
|
41
47
|
* and leave the boundary visible from the last plank.
|
|
42
48
|
*/
|
|
43
|
-
export const HOPE_PIER_END_Z = OCEAN_START_Z +
|
|
49
|
+
export const HOPE_PIER_END_Z = OCEAN_START_Z + 130;
|
|
44
50
|
/**
|
|
45
51
|
* The east branch: a spur off the main walk to the moored ship, deliberately
|
|
46
52
|
* SHORE-SIDE of both smashed spans so the ship is open to everybody, repaired
|
|
47
53
|
* pier or not.
|
|
48
54
|
*/
|
|
49
|
-
export const HOPE_PIER_BRANCH_Z = OCEAN_START_Z +
|
|
55
|
+
export const HOPE_PIER_BRANCH_Z = OCEAN_START_Z + 22;
|
|
50
56
|
export const HOPE_PIER_BRANCH_HALF_W = 1;
|
|
51
57
|
export const HOPE_PIER_BRANCH_MIN_X = HOPE_PIER_X + HOPE_PIER_HALF_W + 1;
|
|
52
|
-
export const HOPE_PIER_BRANCH_MAX_X = HOPE_PIER_X +
|
|
58
|
+
export const HOPE_PIER_BRANCH_MAX_X = HOPE_PIER_X + 18;
|
|
53
59
|
/**
|
|
54
60
|
* The last four columns of the branch open out into a five-wide landing
|
|
55
61
|
* stage against the ship: somewhere for cargo, nets and the ship's master to
|
|
@@ -84,15 +90,15 @@ export const HOPE_BEACH_LANDING = { x: HOPE_PIER_BRANCH_MAX_X - 2, z: HOPE_PIER_
|
|
|
84
90
|
* FROZEN_LAKE_CENTER is declared further down; its z is 236.
|
|
85
91
|
*/
|
|
86
92
|
/** The two rows of the pier walk, and the columns it runs over. */
|
|
87
|
-
export const BRANSONS_LANDING_PIER_MIN_Z =
|
|
88
|
-
export const BRANSONS_LANDING_PIER_MAX_Z =
|
|
93
|
+
export const BRANSONS_LANDING_PIER_MIN_Z = 300;
|
|
94
|
+
export const BRANSONS_LANDING_PIER_MAX_Z = 301;
|
|
89
95
|
/** The seaward end of the walk (the head's west column) and its foot on the shore. */
|
|
90
96
|
export const BRANSONS_LANDING_PIER_MIN_X = 3;
|
|
91
97
|
export const BRANSONS_LANDING_PIER_FOOT_X = 21;
|
|
92
98
|
/** The 4x4 landing head at the seaward end, a row wider than the walk each side. */
|
|
93
99
|
export const BRANSONS_LANDING_HEAD_MAX_X = 6;
|
|
94
|
-
export const BRANSONS_LANDING_HEAD_MIN_Z =
|
|
95
|
-
export const BRANSONS_LANDING_HEAD_MAX_Z =
|
|
100
|
+
export const BRANSONS_LANDING_HEAD_MIN_Z = 299;
|
|
101
|
+
export const BRANSONS_LANDING_HEAD_MAX_Z = 302;
|
|
96
102
|
/** Where the gangplank leaves the head for the ship: the head's south row. */
|
|
97
103
|
export const BRANSONS_LANDING_GANGPLANK = { x: 4, z: BRANSONS_LANDING_HEAD_MAX_Z };
|
|
98
104
|
/**
|
|
@@ -100,82 +106,88 @@ export const BRANSONS_LANDING_GANGPLANK = { x: 4, z: BRANSONS_LANDING_HEAD_MAX_Z
|
|
|
100
106
|
* open sea. `face270` turns the SailShip's +z bow onto -x; the `landingship`
|
|
101
107
|
* token picks the shorter hull.
|
|
102
108
|
*/
|
|
103
|
-
export const BRANSONS_LANDING_SHIP = { x: 6, z:
|
|
109
|
+
export const BRANSONS_LANDING_SHIP = { x: 6, z: 305 };
|
|
104
110
|
export const BRANSONS_LANDING_SHIP_STYLE = 'landingship-face270';
|
|
105
111
|
/**
|
|
106
112
|
* The hull's tile footprint (all bay water), blocked so nothing paths under
|
|
107
113
|
* it. Eleven long and four wide about the anchor: the bow a tile in from the
|
|
108
114
|
* world's edge, the stern under the walk.
|
|
109
115
|
*/
|
|
110
|
-
export const BRANSONS_LANDING_SHIP_HULL = { minX: 1, maxX: 11, minZ:
|
|
116
|
+
export const BRANSONS_LANDING_SHIP_HULL = { minX: 1, maxX: 11, minZ: 303, maxZ: 307 };
|
|
111
117
|
/**
|
|
112
118
|
* Bay water by row: the columns from the rim water (x 0-1) east that the
|
|
113
119
|
* bay opens up. Rounded at both ends, twenty wide along the pier.
|
|
114
120
|
*/
|
|
115
121
|
export const BRANSONS_LANDING_COVE_ROWS = [
|
|
116
|
-
{ z:
|
|
117
|
-
{ z:
|
|
118
|
-
{ z:
|
|
119
|
-
{ z:
|
|
120
|
-
{ z:
|
|
121
|
-
{ z:
|
|
122
|
-
{ z:
|
|
123
|
-
{ z:
|
|
124
|
-
{ z:
|
|
125
|
-
{ z:
|
|
126
|
-
{ z:
|
|
127
|
-
{ z:
|
|
128
|
-
{ z:
|
|
129
|
-
{ z:
|
|
130
|
-
{ z:
|
|
131
|
-
{ z:
|
|
132
|
-
{ z:
|
|
133
|
-
{ z:
|
|
134
|
-
{ z:
|
|
135
|
-
{ z:
|
|
136
|
-
{ z:
|
|
137
|
-
{ z:
|
|
138
|
-
{ z:
|
|
139
|
-
{ z:
|
|
140
|
-
{ z:
|
|
141
|
-
{ z:
|
|
142
|
-
{ z:
|
|
143
|
-
{ z:
|
|
122
|
+
{ z: 288, maxX: 3 },
|
|
123
|
+
{ z: 289, maxX: 6 },
|
|
124
|
+
{ z: 290, maxX: 9 },
|
|
125
|
+
{ z: 291, maxX: 12 },
|
|
126
|
+
{ z: 292, maxX: 14 },
|
|
127
|
+
{ z: 293, maxX: 16 },
|
|
128
|
+
{ z: 294, maxX: 18 },
|
|
129
|
+
{ z: 295, maxX: 19 },
|
|
130
|
+
{ z: 296, maxX: 20 },
|
|
131
|
+
{ z: 297, maxX: 20 },
|
|
132
|
+
{ z: 298, maxX: 20 },
|
|
133
|
+
{ z: 299, maxX: 20 },
|
|
134
|
+
{ z: 300, maxX: 20 },
|
|
135
|
+
{ z: 301, maxX: 20 },
|
|
136
|
+
{ z: 302, maxX: 20 },
|
|
137
|
+
{ z: 303, maxX: 20 },
|
|
138
|
+
{ z: 304, maxX: 20 },
|
|
139
|
+
{ z: 305, maxX: 20 },
|
|
140
|
+
{ z: 306, maxX: 20 },
|
|
141
|
+
{ z: 307, maxX: 20 },
|
|
142
|
+
{ z: 308, maxX: 19 },
|
|
143
|
+
{ z: 309, maxX: 18 },
|
|
144
|
+
{ z: 310, maxX: 16 },
|
|
145
|
+
{ z: 311, maxX: 14 },
|
|
146
|
+
{ z: 312, maxX: 12 },
|
|
147
|
+
{ z: 313, maxX: 9 },
|
|
148
|
+
{ z: 314, maxX: 6 },
|
|
149
|
+
{ z: 315, maxX: 3 },
|
|
144
150
|
];
|
|
145
151
|
/** The rim rows the bay replaces: the west rim loop places no crag on these. */
|
|
146
|
-
export const BRANSONS_LANDING_COVE_MIN_Z =
|
|
147
|
-
export const BRANSONS_LANDING_COVE_MAX_Z =
|
|
152
|
+
export const BRANSONS_LANDING_COVE_MIN_Z = 288;
|
|
153
|
+
export const BRANSONS_LANDING_COVE_MAX_Z = 315;
|
|
148
154
|
/** Everything the landing owns, for the scenery sweep and the discovery zone. */
|
|
149
|
-
export const BRANSONS_LANDING_WORKS = { minX: 0, maxX: 34, minZ:
|
|
155
|
+
export const BRANSONS_LANDING_WORKS = { minX: 0, maxX: 34, minZ: 284, maxZ: 319 };
|
|
150
156
|
/** Oskar, Branson's mate, on the shore a step off the pier foot, facing the boards. */
|
|
151
|
-
|
|
157
|
+
/**
|
|
158
|
+
* Oskar stands on the landing head, on the ship's side of it, where the
|
|
159
|
+
* gangway comes ashore: a boat man belongs beside his boat (James,
|
|
160
|
+
* 2026-09-22), not sixteen tiles up the pier on the sand. Passengers land
|
|
161
|
+
* on the head beside him and walk the planks in past the board.
|
|
162
|
+
*/
|
|
163
|
+
export const BRANSONS_LANDING_OSKAR = { x: 5, z: 302, faceX: 9, faceZ: 301 };
|
|
152
164
|
/** The sailings board, up the apron from Oskar with room to walk round it. */
|
|
153
|
-
export const BRANSONS_LANDING_BOARD = { x: 26, z:
|
|
165
|
+
export const BRANSONS_LANDING_BOARD = { x: 26, z: 297 };
|
|
154
166
|
/** The hut on the shelf north of the pier foot, its door to the south, and the steps down. */
|
|
155
|
-
export const BRANSONS_LANDING_HUT = { x: 27, z:
|
|
156
|
-
export const BRANSONS_LANDING_HUT_LANTERN = { x: 28, z:
|
|
167
|
+
export const BRANSONS_LANDING_HUT = { x: 27, z: 292 };
|
|
168
|
+
export const BRANSONS_LANDING_HUT_LANTERN = { x: 28, z: 294 };
|
|
157
169
|
export const BRANSONS_LANDING_STEPS = [
|
|
158
|
-
{ x: 27, z:
|
|
159
|
-
{ x: 27, z:
|
|
170
|
+
{ x: 27, z: 294 },
|
|
171
|
+
{ x: 27, z: 295 },
|
|
160
172
|
];
|
|
161
173
|
/** The shelf the hut stands on, its ledge row, and the apron the pier leaves from. */
|
|
162
174
|
export const BRANSONS_LANDING_SHELF_HEIGHT = 3;
|
|
163
|
-
export const BRANSONS_LANDING_LEDGE_Z =
|
|
164
|
-
export const BRANSONS_LANDING_APRON = { minX: 21, maxX: 33, minZ:
|
|
175
|
+
export const BRANSONS_LANDING_LEDGE_Z = 294;
|
|
176
|
+
export const BRANSONS_LANDING_APRON = { minX: 21, maxX: 33, minZ: 295, maxZ: 307 };
|
|
165
177
|
export const BRANSONS_LANDING_APRON_HEIGHT = 1;
|
|
166
178
|
/** A lantern post on the apron, south of the walk, and the stores stacked by the board. */
|
|
167
|
-
export const BRANSONS_LANDING_APRON_LANTERN = { x: 24, z:
|
|
179
|
+
export const BRANSONS_LANDING_APRON_LANTERN = { x: 24, z: 304 };
|
|
168
180
|
/** Ice floes on the bay water, clear of the ship and the pier. */
|
|
169
181
|
export const BRANSONS_LANDING_FLOES = [
|
|
170
|
-
{ x: 2, z:
|
|
171
|
-
{ x: 10, z:
|
|
172
|
-
{ x: 16, z:
|
|
173
|
-
{ x: 2, z:
|
|
174
|
-
{ x: 19, z:
|
|
175
|
-
{ x: 15, z:
|
|
176
|
-
{ x: 18, z:
|
|
177
|
-
{ x: 10, z:
|
|
178
|
-
{ x: 4, z:
|
|
182
|
+
{ x: 2, z: 291, scale: 0.9 },
|
|
183
|
+
{ x: 10, z: 293, scale: 0.8 },
|
|
184
|
+
{ x: 16, z: 295, scale: 1.1 },
|
|
185
|
+
{ x: 2, z: 297, scale: 1.0 },
|
|
186
|
+
{ x: 19, z: 298, scale: 0.8 },
|
|
187
|
+
{ x: 15, z: 304, scale: 0.9 },
|
|
188
|
+
{ x: 18, z: 309, scale: 1.0 },
|
|
189
|
+
{ x: 10, z: 312, scale: 0.9 },
|
|
190
|
+
{ x: 4, z: 313, scale: 1.1 },
|
|
179
191
|
];
|
|
180
192
|
/** True for a cove water tile (the rim water at x 0-1 is water on every row anyway). */
|
|
181
193
|
export function isBransonsLandingCoveTile(x, z) {
|
|
@@ -198,26 +210,26 @@ export function isBransonsLandingDeckTile(x, z) {
|
|
|
198
210
|
z <= BRANSONS_LANDING_PIER_MAX_Z);
|
|
199
211
|
}
|
|
200
212
|
/** Kept for the rim loop and older callers: the crag line the bay now cuts through. */
|
|
201
|
-
export const FROZEN_SHORE_JETTY = { x: 2, z:
|
|
202
|
-
/** Where a voyage puts you ashore: the
|
|
203
|
-
export const FROZEN_SHORE_LANDING = { x:
|
|
213
|
+
export const FROZEN_SHORE_JETTY = { x: 2, z: 301 };
|
|
214
|
+
/** Where a voyage puts you ashore: the landing head, off the ship's gangway. */
|
|
215
|
+
export const FROZEN_SHORE_LANDING = { x: 4, z: BRANSONS_LANDING_PIER_MAX_Z };
|
|
204
216
|
/**
|
|
205
217
|
* First smashed span, about a third of the way out - far enough that the walk
|
|
206
218
|
* to it is a walk, close enough to see the break from the sand.
|
|
207
219
|
*/
|
|
208
|
-
export const HOPE_PIER_GAP1_MIN_Z = OCEAN_START_Z +
|
|
209
|
-
export const HOPE_PIER_GAP1_MAX_Z = OCEAN_START_Z +
|
|
220
|
+
export const HOPE_PIER_GAP1_MIN_Z = OCEAN_START_Z + 43;
|
|
221
|
+
export const HOPE_PIER_GAP1_MAX_Z = OCEAN_START_Z + 44;
|
|
210
222
|
/** Second smashed span, out past the middle deck at about two thirds. */
|
|
211
|
-
export const HOPE_PIER_GAP2_MIN_Z = OCEAN_START_Z +
|
|
212
|
-
export const HOPE_PIER_GAP2_MAX_Z = OCEAN_START_Z +
|
|
223
|
+
export const HOPE_PIER_GAP2_MIN_Z = OCEAN_START_Z + 87;
|
|
224
|
+
export const HOPE_PIER_GAP2_MAX_Z = OCEAN_START_Z + 88;
|
|
213
225
|
/**
|
|
214
226
|
* The pier head: the last four rows widen into a platform, so the end of a long
|
|
215
227
|
* walk is somewhere to stand rather than the last plank of a corridor.
|
|
216
228
|
*/
|
|
217
229
|
export const HOPE_PIER_HEAD_MIN_Z = HOPE_PIER_END_Z - 3;
|
|
218
230
|
/** The middle deck, a passing place between the two smashed spans. */
|
|
219
|
-
export const HOPE_PIER_MID_MIN_Z = OCEAN_START_Z +
|
|
220
|
-
export const HOPE_PIER_MID_MAX_Z = OCEAN_START_Z +
|
|
231
|
+
export const HOPE_PIER_MID_MIN_Z = OCEAN_START_Z + 63;
|
|
232
|
+
export const HOPE_PIER_MID_MAX_Z = OCEAN_START_Z + 65;
|
|
221
233
|
/** Both widenings are five tiles across against the walk's three. */
|
|
222
234
|
export const HOPE_PIER_WIDE_HALF_W = 2;
|
|
223
235
|
/** The moored ship, off the seaward corner of the branch. */
|
|
@@ -241,7 +253,7 @@ export const HOPE_PIER_SHIP_Z = HOPE_PIER_BRANCH_Z;
|
|
|
241
253
|
export const HOPE_PIER_SPUR_Z = HOPE_PIER_MID_MIN_Z + 1;
|
|
242
254
|
export const HOPE_PIER_SPUR_HALF_W = 1;
|
|
243
255
|
export const HOPE_PIER_SPUR_MAX_X = HOPE_PIER_X - HOPE_PIER_WIDE_HALF_W - 1;
|
|
244
|
-
export const HOPE_PIER_SPUR_MIN_X = HOPE_PIER_X -
|
|
256
|
+
export const HOPE_PIER_SPUR_MIN_X = HOPE_PIER_X - 17;
|
|
245
257
|
export const HOPE_PIER_HUT_X = HOPE_PIER_SPUR_MIN_X + 3;
|
|
246
258
|
export const HOPE_PIER_HUT_Z = HOPE_PIER_SPUR_Z + HOPE_PIER_SPUR_HALF_W + 4;
|
|
247
259
|
/**
|
|
@@ -294,6 +306,8 @@ export const PIER_CAST_MAX_TILES = 10;
|
|
|
294
306
|
* timer and after every catch.
|
|
295
307
|
*/
|
|
296
308
|
export const HOPE_PIER_SMELT_SPOT_COUNT = 5;
|
|
309
|
+
/** Crab cage spots along the side of the Long Pier at once, redrawn like the smelt. */
|
|
310
|
+
export const HOPE_BEACH_CRAB_SPOT_COUNT = 4;
|
|
297
311
|
/**
|
|
298
312
|
* Chebyshev tiles around HOPE_PIER_SHIP_X/Z no pier fish may sit in. The
|
|
299
313
|
* moored ship has a one-tile footprint but its hull mesh covers a few tiles
|
|
@@ -454,8 +468,8 @@ export const BASECAMP_FAR_SIDE_LOCAL_Z = BASECAMP_CAVE_LOCAL_Z;
|
|
|
454
468
|
* the south shore and the town stands back from the north shore.
|
|
455
469
|
*/
|
|
456
470
|
export const BATTLEFIELD_NORTH_SHIFT = 18;
|
|
457
|
-
/** An original survey Z, moved north by BATTLEFIELD_NORTH_SHIFT. */
|
|
458
|
-
const bfZ = (surveyZ) => surveyZ - BATTLEFIELD_NORTH_SHIFT;
|
|
471
|
+
/** An original survey Z, moved north by BATTLEFIELD_NORTH_SHIFT (and south by the northern extension, NORTH_SHIFT). */
|
|
472
|
+
const bfZ = (surveyZ) => surveyZ - BATTLEFIELD_NORTH_SHIFT + NORTH_SHIFT;
|
|
459
473
|
/**
|
|
460
474
|
* Lake between soldier (south / farmward) and goblin (north) camps.
|
|
461
475
|
* Water blocks walking; the battlefield crossing is the long bridge once repaired.
|
|
@@ -1174,43 +1188,38 @@ function roomSpawnSpots(minZ, maxZ, count) {
|
|
|
1174
1188
|
}
|
|
1175
1189
|
return spots;
|
|
1176
1190
|
}
|
|
1177
|
-
/** A small, close-quarters pit for the oversized level-10 rats
|
|
1191
|
+
/** A small, close-quarters pit for the oversized level-10 rats: a pair since 2026-09-22. */
|
|
1178
1192
|
function giantRatPitSpawnSpots() {
|
|
1179
1193
|
const cx = DUNGEON_CENTER_X;
|
|
1180
1194
|
const pz = DUNGEON_ROOM2_PIT_Z;
|
|
1181
1195
|
const offsets = [
|
|
1182
1196
|
[-7, -7],
|
|
1183
1197
|
[7, -7],
|
|
1184
|
-
[0, 1],
|
|
1185
1198
|
];
|
|
1186
1199
|
return offsets.map(([dx, dz]) => ({ x: cx + dx, z: pz + dz }));
|
|
1187
1200
|
}
|
|
1188
1201
|
/**
|
|
1189
1202
|
* Tunnel vermin across the sunken rat pit (room 1).
|
|
1190
|
-
*
|
|
1203
|
+
* Halved again on 2026-09-22 (James: the cave had too many rats): 15 spots,
|
|
1204
|
+
* one to a nook, alcove or pit ring so every part of the room still has one.
|
|
1191
1205
|
*/
|
|
1192
1206
|
function room1RatSpawnSpots() {
|
|
1193
1207
|
const cx = DUNGEON_CENTER_X;
|
|
1194
|
-
// [dx, z] - thinned from
|
|
1208
|
+
// [dx, z] - thinned from 29 (and 58 before that), still covering the room.
|
|
1195
1209
|
const offsets = [
|
|
1196
|
-
// North nooks and throat (z=
|
|
1197
|
-
[-10, 64], [
|
|
1210
|
+
// North nooks and throat (z=64)
|
|
1211
|
+
[-10, 64], [6, 64],
|
|
1198
1212
|
// NW and NE alcoves (z=65-67)
|
|
1199
|
-
[-14, 65], [
|
|
1200
|
-
|
|
1201
|
-
// Upper mid and arrival flank (z=65-68)
|
|
1213
|
+
[-14, 65], [14, 67],
|
|
1214
|
+
// Upper mid and arrival flank (z=66)
|
|
1202
1215
|
[-9, 66], [9, 66],
|
|
1203
|
-
|
|
1204
|
-
// Center feast and sunken pit ring (z=69-73)
|
|
1216
|
+
// Center feast and sunken pit ring (z=69-71)
|
|
1205
1217
|
[-10, 70], [-2, 69], [6, 69],
|
|
1206
|
-
[
|
|
1207
|
-
[-7, 73], [7, 73],
|
|
1218
|
+
[1, 71], [9, 71],
|
|
1208
1219
|
// SW and SE alcoves (z=75-77)
|
|
1209
|
-
[-14, 75], [
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
[-8, 75], [-2, 77], [6, 76],
|
|
1213
|
-
[-5, 78], [9, 78],
|
|
1220
|
+
[-14, 75], [14, 77],
|
|
1221
|
+
// Lower pit and south mud (z=76-77)
|
|
1222
|
+
[-2, 77], [6, 76],
|
|
1214
1223
|
];
|
|
1215
1224
|
return offsets.map(([dx, z]) => ({ x: cx + dx, z }));
|
|
1216
1225
|
}
|
|
@@ -1360,7 +1369,7 @@ export function inNorthernGarrison(x, z) {
|
|
|
1360
1369
|
* open up. Everything on it is placed from the centre; the fixed points
|
|
1361
1370
|
* below moved with it.
|
|
1362
1371
|
*/
|
|
1363
|
-
export const FROZEN_LAKE_CENTER = { x: 56, z:
|
|
1372
|
+
export const FROZEN_LAKE_CENTER = { x: 56, z: 300 };
|
|
1364
1373
|
export const FROZEN_LAKE_RX = 14;
|
|
1365
1374
|
export const FROZEN_LAKE_RZ = 12;
|
|
1366
1375
|
/** The level the ice is frozen at; the lowland around it already lies near it. */
|
|
@@ -1410,12 +1419,12 @@ export function onFrozenLakeIce(x, z) {
|
|
|
1410
1419
|
*/
|
|
1411
1420
|
export const FROZEN_PLATEAU_H = 5;
|
|
1412
1421
|
/** Where the lowland starts climbing to the plateau, and where it is level. */
|
|
1413
|
-
export const FROZEN_PLATEAU_RISE_Z =
|
|
1414
|
-
export const FROZEN_PLATEAU_TOP_Z =
|
|
1422
|
+
export const FROZEN_PLATEAU_RISE_Z = 278;
|
|
1423
|
+
export const FROZEN_PLATEAU_TOP_Z = 262;
|
|
1415
1424
|
/** The hills east of here are left as they are. */
|
|
1416
1425
|
export const FROZEN_PLATEAU_MAX_X = 46;
|
|
1417
|
-
export const CRYSTAL_GORGE_MIN_Z =
|
|
1418
|
-
export const CRYSTAL_GORGE_MAX_Z =
|
|
1426
|
+
export const CRYSTAL_GORGE_MIN_Z = 222;
|
|
1427
|
+
export const CRYSTAL_GORGE_MAX_Z = 230;
|
|
1419
1428
|
export const CRYSTAL_GORGE_MAX_X = 44;
|
|
1420
1429
|
/** The bridge column and the deck's half-width in tiles. */
|
|
1421
1430
|
export const CRYSTAL_BRIDGE_X = 21;
|
|
@@ -1425,9 +1434,9 @@ export const FROZEN_HALLWAY_HALF_W = 4;
|
|
|
1425
1434
|
export const FROZEN_HALLWAY_WALL_T = 5;
|
|
1426
1435
|
export const FROZEN_HALLWAY_WALL_H = 10;
|
|
1427
1436
|
/** The rune arch at the mouth and the iron gate at the far end. */
|
|
1428
|
-
export const FROZEN_HALLWAY_MOUTH_Z =
|
|
1429
|
-
export const FROZEN_HALLWAY_GATE_Z =
|
|
1430
|
-
export const FROZEN_HALLWAY_SEAL_Z =
|
|
1437
|
+
export const FROZEN_HALLWAY_MOUTH_Z = 169;
|
|
1438
|
+
export const FROZEN_HALLWAY_GATE_Z = 90;
|
|
1439
|
+
export const FROZEN_HALLWAY_SEAL_Z = 70;
|
|
1431
1440
|
/**
|
|
1432
1441
|
* The Ice Prison: the rooms behind the hallway's iron gate, carved in the
|
|
1433
1442
|
* off-map strip like the other interiors. You arrive in the Frozen Cells,
|
|
@@ -1553,11 +1562,11 @@ export const ICE_CAVERN_SPAWNS = [
|
|
|
1553
1562
|
export const THAW_GORGE_CX = DEADLANDS_MIN_X;
|
|
1554
1563
|
export const THAW_GORGE_MIN_X = THAW_GORGE_CX - 4;
|
|
1555
1564
|
export const THAW_GORGE_MAX_X = THAW_GORGE_CX + 4;
|
|
1556
|
-
export const THAW_GORGE_MIN_Z =
|
|
1565
|
+
export const THAW_GORGE_MIN_Z = 64;
|
|
1557
1566
|
/** Low river meets the battlefield lake's north bank. */
|
|
1558
1567
|
export const THAW_GORGE_MAX_Z = BATTLEFIELD_LAKE_MIN_Z;
|
|
1559
|
-
export const THAW_BRIDGE_Z =
|
|
1560
|
-
export const THAW_MID_BRIDGE_Z =
|
|
1568
|
+
export const THAW_BRIDGE_Z = 113;
|
|
1569
|
+
export const THAW_MID_BRIDGE_Z = 174;
|
|
1561
1570
|
export const THAW_WOODS_BRIDGE_Z = DEADLANDS_MIN_Z - 14;
|
|
1562
1571
|
export const THAW_BRIDGE_ZS = [THAW_BRIDGE_Z, THAW_MID_BRIDGE_Z, THAW_WOODS_BRIDGE_Z];
|
|
1563
1572
|
export const THAW_BRIDGE_HALF_W = 1;
|
|
@@ -1581,13 +1590,13 @@ export const THAW_FLOOD_EAST_X = THAW_GORGE_CX + 18;
|
|
|
1581
1590
|
* then this fall, then the bridges over the low water. Not at Rains' span
|
|
1582
1591
|
* and not south of it.
|
|
1583
1592
|
*/
|
|
1584
|
-
export const THAW_FALLS_Z =
|
|
1593
|
+
export const THAW_FALLS_Z = 90;
|
|
1585
1594
|
/** @deprecated Same tile as THAW_FALLS_Z; kept for older imports. */
|
|
1586
1595
|
export const THAW_SIDE_FALLS_Z = THAW_FALLS_Z;
|
|
1587
1596
|
export const THAW_ARCH_X = THAW_FLOOD_EAST_X + 7;
|
|
1588
1597
|
export const THAW_ARCH_PILLAR_DZ = 2;
|
|
1589
1598
|
export const THAW_MOUTH_STAND_X = THAW_FLOOD_WEST_X - 2;
|
|
1590
|
-
export const THAW_MOUTH_STAND_Z =
|
|
1599
|
+
export const THAW_MOUTH_STAND_Z = 70;
|
|
1591
1600
|
export const THAW_FALLS_STAND_X = THAW_FLOOD_WEST_X - 2;
|
|
1592
1601
|
export const THAW_FALLS_STAND_Z = THAW_FALLS_Z;
|
|
1593
1602
|
export function thawEastBridgeIdAtZ(z) {
|
|
@@ -1870,8 +1879,8 @@ export const GOBLIN_FRONTIER_ROAD = [
|
|
|
1870
1879
|
];
|
|
1871
1880
|
/** The two occupied camp loops off the frontier road (built in goblinFrontier.ts). */
|
|
1872
1881
|
export const GOBLIN_FRONTIER_CAMPS = [
|
|
1873
|
-
{ x: 113, z:
|
|
1874
|
-
{ x: 68, z:
|
|
1882
|
+
{ x: 113, z: 677 },
|
|
1883
|
+
{ x: 68, z: 635 },
|
|
1875
1884
|
];
|
|
1876
1885
|
/**
|
|
1877
1886
|
* Where the frontier is held. Goblins spawn here the way they do at the
|
|
@@ -2073,8 +2082,8 @@ export const DISCOVERY_ZONES = [
|
|
|
2073
2082
|
label: 'The Frozen Shore',
|
|
2074
2083
|
minX: 0,
|
|
2075
2084
|
maxX: 12,
|
|
2076
|
-
minZ:
|
|
2077
|
-
maxZ:
|
|
2085
|
+
minZ: NORTH_SHIFT - WORLD_NORTH_PAD,
|
|
2086
|
+
maxZ: 409 - WORLD_NORTH_PAD,
|
|
2078
2087
|
},
|
|
2079
2088
|
{
|
|
2080
2089
|
// The frozen lake and the fishers' ground on its banks. Listed before the
|
|
@@ -2115,9 +2124,10 @@ export const DISCOVERY_ZONES = [
|
|
|
2115
2124
|
minZ: HARBOUR_MOLE_HEAD.minZ - WORLD_NORTH_PAD,
|
|
2116
2125
|
maxZ: HARBOUR_SOUTH_Z - WORLD_NORTH_PAD,
|
|
2117
2126
|
},
|
|
2118
|
-
// The Capital's eight
|
|
2119
|
-
//
|
|
2120
|
-
|
|
2127
|
+
// The Capital's eight districts (the 2026-09-25 plan), each its own
|
|
2128
|
+
// discovery. The ids are the old wards', so nobody is paid twice; the
|
|
2129
|
+
// rects tile the interior without overlapping, so their order is free.
|
|
2130
|
+
...CAPITAL_DISTRICTS.map((d) => ({
|
|
2121
2131
|
id: d.id,
|
|
2122
2132
|
label: d.label,
|
|
2123
2133
|
minX: d.minX,
|
|
@@ -2144,12 +2154,22 @@ export const DISCOVERY_ZONES = [
|
|
|
2144
2154
|
minZ: THAW_GORGE_MIN_Z - WORLD_NORTH_PAD,
|
|
2145
2155
|
maxZ: DEADLANDS_MIN_Z - 1 - WORLD_NORTH_PAD,
|
|
2146
2156
|
},
|
|
2157
|
+
{
|
|
2158
|
+
// The headland the polar bears come ashore on (bearFloes.ts), and the
|
|
2159
|
+
// sea they ride in over. Listed before the snowfields, which reach it.
|
|
2160
|
+
id: 'bear-floes',
|
|
2161
|
+
label: 'The Bear Floes',
|
|
2162
|
+
minX: BEAR_FLOES_ZONE.minX,
|
|
2163
|
+
maxX: BEAR_FLOES_ZONE.maxX,
|
|
2164
|
+
minZ: BEAR_FLOES_ZONE.minZ - WORLD_NORTH_PAD,
|
|
2165
|
+
maxZ: BEAR_FLOES_ZONE.maxZ - WORLD_NORTH_PAD,
|
|
2166
|
+
},
|
|
2147
2167
|
{
|
|
2148
2168
|
id: 'northern-snowfields',
|
|
2149
2169
|
label: 'The Snowfields',
|
|
2150
2170
|
minX: 0,
|
|
2151
2171
|
maxX: NORTHERN_WALL_MAX_X,
|
|
2152
|
-
minZ:
|
|
2172
|
+
minZ: NORTH_SHIFT - WORLD_NORTH_PAD,
|
|
2153
2173
|
maxZ: NORTHERN_WALL_Z - 25 - WORLD_NORTH_PAD,
|
|
2154
2174
|
},
|
|
2155
2175
|
];
|
|
@@ -2198,19 +2218,21 @@ export function inMineYard(x, z, margin = 0) {
|
|
|
2198
2218
|
*/
|
|
2199
2219
|
export const WORLD_MAP_LANDMARKS = [
|
|
2200
2220
|
{ x: NORTHERN_GATE_X, z: NORTHERN_WALL_Z, label: 'Northern Gate' },
|
|
2201
|
-
{ x: NORTHERN_CAMP_CENTER.x, z: NORTHERN_CAMP_CENTER.z, label: 'War Camp', labelSide: 'right' },
|
|
2202
|
-
{ x: 8, z:
|
|
2203
|
-
{ x:
|
|
2221
|
+
{ x: NORTHERN_CAMP_CENTER.x, z: NORTHERN_CAMP_CENTER.z, label: 'War Camp', labelSide: 'right', kind: 'shop' },
|
|
2222
|
+
{ x: 8, z: 264, label: 'Frozen Shore', labelSide: 'right' },
|
|
2223
|
+
{ x: BEAR_FLOES_CAMP.x, z: BEAR_FLOES_CAMP.z - 8, label: 'The Bear Floes', labelSide: 'right' },
|
|
2224
|
+
{ x: BRANSONS_LANDING_SHIP.x, z: BRANSONS_LANDING_PIER_MAX_Z, label: "Branson's Landing", labelSide: 'below', kind: 'shop' },
|
|
2204
2225
|
{ x: FROZEN_LAKE_CENTER.x, z: FROZEN_LAKE_CENTER.z, label: 'Frozen Lake', labelSide: 'right' },
|
|
2205
2226
|
{ x: CRYSTAL_BRIDGE_X, z: (CRYSTAL_GORGE_MIN_Z + CRYSTAL_GORGE_MAX_Z) / 2, label: 'Crystal Bridge', labelSide: 'right' },
|
|
2206
2227
|
{ x: FROZEN_HALLWAY_X, z: (FROZEN_HALLWAY_GATE_Z + FROZEN_HALLWAY_MOUTH_Z) / 2, label: 'Frozen Hallway', labelSide: 'right' },
|
|
2207
2228
|
{ x: THAW_GORGE_CX, z: THAW_BRIDGE_Z, label: 'Thaw Bridge', labelSide: 'right' },
|
|
2208
2229
|
{ x: THAW_GORGE_CX, z: THAW_FALLS_Z, label: 'Thaw Fall', labelSide: 'right' },
|
|
2209
2230
|
{ x: THAW_GORGE_CX, z: THAW_MOUTH_STAND_Z, label: 'Thaw Mouth', labelSide: 'right' },
|
|
2210
|
-
|
|
2211
|
-
{ x:
|
|
2231
|
+
// The city's name over the Crown Cross, where the Royal Way meets the King's Road.
|
|
2232
|
+
{ x: CAPITAL_ROYAL_WAY_X, z: CAPITAL_AVENUE_Z, label: 'The Capital', labelSide: 'above', kind: 'shop' },
|
|
2233
|
+
{ x: HARBOUR_ROYAL_PIER.maxX - 6, z: HARBOUR_ROAD_Z, label: "King's Harbour", labelSide: 'below', kind: 'shop' },
|
|
2212
2234
|
{ x: HARBOUR_LIGHTHOUSE.x, z: HARBOUR_LIGHTHOUSE.z, label: 'Lighthouse', labelSide: 'right' },
|
|
2213
|
-
{ ...discoveryZoneCenter('no-harm-farm'), label: 'Farm' },
|
|
2235
|
+
{ ...discoveryZoneCenter('no-harm-farm'), label: 'Farm', kind: 'shop' },
|
|
2214
2236
|
{ x: CROSSROADS_WORLD_X, z: toWorldZ(CROSSROADS_LOCAL_Z), label: 'Crossroads' },
|
|
2215
2237
|
{ ...discoveryZoneCenter('henson-pond'), label: 'Pond' },
|
|
2216
2238
|
{
|
|
@@ -2226,38 +2248,42 @@ export const WORLD_MAP_LANDMARKS = [
|
|
|
2226
2248
|
label: 'Trout Fishery',
|
|
2227
2249
|
labelSide: 'on',
|
|
2228
2250
|
},
|
|
2229
|
-
{ ...discoveryZoneCenter('basecamp'), label: 'Base Camp', labelSide: 'left' },
|
|
2251
|
+
{ ...discoveryZoneCenter('basecamp'), label: 'Base Camp', labelSide: 'left', kind: 'shop' },
|
|
2230
2252
|
{
|
|
2231
2253
|
x: BATTLEFIELD_BRIDGE_X,
|
|
2232
2254
|
z: Math.round((GOBLIN_FRONTIER_MIN_Z + GOBLIN_FRONTIER_MAX_Z) / 2),
|
|
2233
2255
|
label: 'Battlefield',
|
|
2234
2256
|
labelSide: 'above',
|
|
2235
2257
|
},
|
|
2236
|
-
{ x: TOWN_GATE_X, z: TOWN_CROSS_STREET_Z, label: 'Calverton' },
|
|
2258
|
+
{ x: TOWN_GATE_X, z: TOWN_CROSS_STREET_Z, label: 'Calverton', kind: 'shop' },
|
|
2237
2259
|
{ x: BLOOD_LAKE_CX, z: BLOOD_LAKE_CZ, label: 'Blood Lake', labelSide: 'on' },
|
|
2238
2260
|
{
|
|
2239
2261
|
x: SPIDER_CAVE_MOUTH_X,
|
|
2240
2262
|
z: SPIDER_CAVE_MOUTH_Z,
|
|
2241
2263
|
label: 'Spider Cave',
|
|
2242
2264
|
kind: 'dungeon',
|
|
2265
|
+
dungeonId: 'spider-cave',
|
|
2243
2266
|
},
|
|
2244
2267
|
{
|
|
2245
2268
|
x: BASECAMP_CAVE_X,
|
|
2246
2269
|
z: toWorldZ(BASECAMP_CAVE_LOCAL_Z),
|
|
2247
2270
|
label: 'Rat Tunnel',
|
|
2248
2271
|
kind: 'dungeon',
|
|
2272
|
+
dungeonId: 'rat-tunnel',
|
|
2249
2273
|
},
|
|
2250
2274
|
{
|
|
2251
2275
|
x: ICE_PRISON_OUTSIDE.x,
|
|
2252
2276
|
z: ICE_PRISON_OUTSIDE.z,
|
|
2253
2277
|
label: 'Ice Prison',
|
|
2254
2278
|
kind: 'dungeon',
|
|
2279
|
+
dungeonId: 'ice-prison',
|
|
2255
2280
|
},
|
|
2256
2281
|
{
|
|
2257
2282
|
x: GOBLIN_CAVE_OUTSIDE.x,
|
|
2258
2283
|
z: GOBLIN_CAVE_OUTSIDE.z,
|
|
2259
2284
|
label: 'Goblin Cave',
|
|
2260
2285
|
kind: 'dungeon',
|
|
2286
|
+
dungeonId: 'goblin-cave',
|
|
2261
2287
|
},
|
|
2262
2288
|
];
|
|
2263
2289
|
/**
|