@dreadwood-types/types 0.1.47 → 0.1.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/adventure.d.ts +6 -6
  2. package/dist/adventure.d.ts.map +1 -1
  3. package/dist/appearance.d.ts +16 -6
  4. package/dist/appearance.d.ts.map +1 -1
  5. package/dist/appearance.js +43 -31
  6. package/dist/appearance.js.map +1 -1
  7. package/dist/areaTransitions.d.ts +1 -1
  8. package/dist/areaTransitions.d.ts.map +1 -1
  9. package/dist/areaTransitions.js +13 -0
  10. package/dist/areaTransitions.js.map +1 -1
  11. package/dist/bank.d.ts.map +1 -1
  12. package/dist/bearFloes.d.ts +83 -0
  13. package/dist/bearFloes.d.ts.map +1 -0
  14. package/dist/bearFloes.js +126 -0
  15. package/dist/bearFloes.js.map +1 -0
  16. package/dist/blacksmithing.d.ts +3 -0
  17. package/dist/blacksmithing.d.ts.map +1 -1
  18. package/dist/blacksmithing.js +81 -1
  19. package/dist/blacksmithing.js.map +1 -1
  20. package/dist/bloodRiver.d.ts +9 -6
  21. package/dist/bloodRiver.d.ts.map +1 -1
  22. package/dist/bloodRiver.js +19 -17
  23. package/dist/bloodRiver.js.map +1 -1
  24. package/dist/brokenRoad.d.ts.map +1 -1
  25. package/dist/capital.d.ts +541 -165
  26. package/dist/capital.d.ts.map +1 -1
  27. package/dist/capital.js +934 -163
  28. package/dist/capital.js.map +1 -1
  29. package/dist/charcoal.d.ts +43 -0
  30. package/dist/charcoal.d.ts.map +1 -0
  31. package/dist/charcoal.js +78 -0
  32. package/dist/charcoal.js.map +1 -0
  33. package/dist/clientConfig.d.ts +7 -2
  34. package/dist/clientConfig.d.ts.map +1 -1
  35. package/dist/clientConfig.js +14 -5
  36. package/dist/clientConfig.js.map +1 -1
  37. package/dist/constants.d.ts +196 -11
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +372 -21
  40. package/dist/constants.js.map +1 -1
  41. package/dist/cooking.d.ts.map +1 -1
  42. package/dist/cooking.js +2 -0
  43. package/dist/cooking.js.map +1 -1
  44. package/dist/dragonfire.d.ts +75 -0
  45. package/dist/dragonfire.d.ts.map +1 -0
  46. package/dist/dragonfire.js +73 -0
  47. package/dist/dragonfire.js.map +1 -0
  48. package/dist/dungeonCharts.d.ts +18 -0
  49. package/dist/dungeonCharts.d.ts.map +1 -0
  50. package/dist/dungeonCharts.js +67 -0
  51. package/dist/dungeonCharts.js.map +1 -0
  52. package/dist/equipment.d.ts +2 -0
  53. package/dist/equipment.d.ts.map +1 -1
  54. package/dist/equipment.js +37 -1
  55. package/dist/equipment.js.map +1 -1
  56. package/dist/frozenSet.d.ts +36 -0
  57. package/dist/frozenSet.d.ts.map +1 -0
  58. package/dist/frozenSet.js +58 -0
  59. package/dist/frozenSet.js.map +1 -0
  60. package/dist/goblinCave.d.ts +4 -4
  61. package/dist/goblinCave.d.ts.map +1 -1
  62. package/dist/goblinCave.js +1 -1
  63. package/dist/groundItems.d.ts.map +1 -1
  64. package/dist/groundItems.js +27 -0
  65. package/dist/groundItems.js.map +1 -1
  66. package/dist/harbour.d.ts +223 -0
  67. package/dist/harbour.d.ts.map +1 -0
  68. package/dist/harbour.js +264 -0
  69. package/dist/harbour.js.map +1 -0
  70. package/dist/iceDepths.d.ts +150 -0
  71. package/dist/iceDepths.d.ts.map +1 -0
  72. package/dist/iceDepths.js +132 -0
  73. package/dist/iceDepths.js.map +1 -0
  74. package/dist/index.d.ts +9 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +9 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/interiorFurniture.d.ts +57 -0
  79. package/dist/interiorFurniture.d.ts.map +1 -0
  80. package/dist/interiorFurniture.js +159 -0
  81. package/dist/interiorFurniture.js.map +1 -0
  82. package/dist/landmarks.d.ts +83 -59
  83. package/dist/landmarks.d.ts.map +1 -1
  84. package/dist/landmarks.js +194 -134
  85. package/dist/landmarks.js.map +1 -1
  86. package/dist/messages.d.ts +77 -5
  87. package/dist/messages.d.ts.map +1 -1
  88. package/dist/messages.js.map +1 -1
  89. package/dist/mineCave.d.ts +7 -7
  90. package/dist/mineCave.d.ts.map +1 -1
  91. package/dist/mining.d.ts +8 -0
  92. package/dist/mining.d.ts.map +1 -1
  93. package/dist/mining.js +8 -0
  94. package/dist/mining.js.map +1 -1
  95. package/dist/questGuide.d.ts +30 -0
  96. package/dist/questGuide.d.ts.map +1 -0
  97. package/dist/questGuide.js +3 -0
  98. package/dist/questGuide.js.map +1 -0
  99. package/dist/quests.d.ts +29 -0
  100. package/dist/quests.d.ts.map +1 -1
  101. package/dist/quests.js +70 -0
  102. package/dist/quests.js.map +1 -1
  103. package/dist/snow.d.ts +2 -2
  104. package/dist/snow.d.ts.map +1 -1
  105. package/dist/snow.js +8 -5
  106. package/dist/snow.js.map +1 -1
  107. package/dist/spiderCave.d.ts.map +1 -1
  108. package/dist/travel.d.ts +7 -4
  109. package/dist/travel.d.ts.map +1 -1
  110. package/dist/travel.js +20 -4
  111. package/dist/travel.js.map +1 -1
  112. package/dist/woodwork.d.ts +8 -2
  113. package/dist/woodwork.d.ts.map +1 -1
  114. package/dist/woodwork.js +13 -3
  115. package/dist/woodwork.js.map +1 -1
  116. package/dist/xp.d.ts +18 -7
  117. package/dist/xp.d.ts.map +1 -1
  118. package/dist/xp.js +20 -9
  119. package/dist/xp.js.map +1 -1
  120. package/dist/zones.d.ts +5 -0
  121. package/dist/zones.d.ts.map +1 -1
  122. package/dist/zones.js +8 -3
  123. package/dist/zones.js.map +1 -1
  124. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Furniture footprints inside walk-in buildings (2026-09-22, James: "npcs
3
+ * are still colliding with objects, e.g. Victoria is walking over a
4
+ * table").
5
+ *
6
+ * The interiors are meshes built on the client, so the server knew nothing
7
+ * about them: a shopkeeper's wander and a player's click-to-walk both ran
8
+ * straight through a counter. These are the pieces big enough to walk into,
9
+ * in the SAME local space the interior builders use: the door is at +z, the
10
+ * back wall at -z, x across the room, one unit to the tile. The builder
11
+ * that places the building turns them by its facing and stamps them into
12
+ * `blocked` (map.ts's stampInterior, capitalCity.ts's stampFurniture).
13
+ *
14
+ * Rectangles are deliberately a touch SMALLER than the mesh where it is
15
+ * close: over-stamping a doorway or a shopkeeper's own tile is worse than a
16
+ * shoulder clipping a counter's end.
17
+ */
18
+ export type FurnitureRect = {
19
+ x0: number;
20
+ x1: number;
21
+ z0: number;
22
+ z1: number;
23
+ };
24
+ /** Calverton's stone houses, by variant (stoneHouse.ts rooms). */
25
+ export declare const STONE_HOUSE_FURNITURE: Record<string, FurnitureRect[]>;
26
+ /**
27
+ * The Capital's walk-in buildings, by the style the builder places them
28
+ * with (capitalInteriors.ts rooms). Same local space; `hx`/`hz` there are
29
+ * half-extents, so these are measured off the middle.
30
+ */
31
+ export declare const CAPITAL_ROOM_FURNITURE: Record<string, FurnitureRect[]>;
32
+ export declare function stoneHouseFurniture(variant: string): FurnitureRect[];
33
+ export declare function capitalRoomFurniture(style: string | undefined): FurnitureRect[];
34
+ /**
35
+ * The furniture of a placed building, keyed by what it is rather than by
36
+ * its whole style (2026-09-25). A manor is styled by its roof (`blue-s`),
37
+ * so the style lookup never found the `manor` key and the long table was
38
+ * walk-through (finding F2); a style with look tokens in the middle
39
+ * (`<variant>-<tokens>-<facing>`) would have missed too. So: stonehouses by
40
+ * their variant (the style's FIRST token), the Capital's own kinds by kind,
41
+ * the Blender buildings by model id (the first token).
42
+ *
43
+ * Stamping: turn each rect by the building's facing (buildingStyleFacing)
44
+ * with visitFurnitureTiles. The room is built about the centre of the
45
+ * building's tile, so pass the tile's centre, `cx + 0.5, cz + 0.5`, to land
46
+ * each rect on the tiles its mesh covers; passing the tile index shifts the
47
+ * stamp half a tile toward -x/-z (what Calverton's map.ts does today).
48
+ */
49
+ export declare function buildingRoomFurniture(kind: string, style: string | undefined): FurnitureRect[];
50
+ /** The facing letter a building style ends with (its door side), or null when it has none (the keep). */
51
+ export declare function buildingStyleFacing(style: string | undefined): 'n' | 's' | 'e' | 'w' | null;
52
+ /**
53
+ * Every world tile a rectangle covers once the building's facing is applied.
54
+ * `facing` is the direction the door looks, as the builders record it.
55
+ */
56
+ export declare function visitFurnitureTiles(cx: number, cz: number, facing: 'n' | 's' | 'e' | 'w', rect: FurnitureRect, visit: (x: number, z: number) => void): void;
57
+ //# sourceMappingURL=interiorFurniture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interiorFurniture.d.ts","sourceRoot":"","sources":["../src/interiorFurniture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAqCjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAmClE,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,CAM/E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,CAkB9F;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAI3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAC7B,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,GACpC,IAAI,CAmBN"}
@@ -0,0 +1,159 @@
1
+ /** Calverton's stone houses, by variant (stoneHouse.ts rooms). */
2
+ export const STONE_HOUSE_FURNITURE = {
3
+ // The cutting table in the middle; the floor behind it is Victoria's beat.
4
+ clothes: [{ x0: -1, x1: 1, z0: -0.1, z1: 0.9 }],
5
+ // The potion counter across the back, and the cauldron in its corner.
6
+ potion: [
7
+ { x0: -2.5, x1: 2.5, z0: -1.7, z1: -1 },
8
+ { x0: -3.2, x1: -2.5, z0: -2.2, z1: -1.4 },
9
+ ],
10
+ // The bank counter and the clerk's chest behind it.
11
+ bank: [{ x0: -3.5, x1: 2.3, z0: -0.775, z1: -0.025 }],
12
+ // The bar down the left, the hearth on the back wall, the common table
13
+ // and its benches in the middle (the door lane at x -0.6..0.6 stays open
14
+ // only as far as the table's end).
15
+ pub: [
16
+ { x0: -3.25, x1: -2.55, z0: -3, z1: 2 },
17
+ { x0: -0.6, x1: 1.2, z0: -1.9, z1: 0.9 },
18
+ { x0: 2.3, x1: 3.5, z0: -2.6, z1: -1.4 },
19
+ ],
20
+ // The kitchen's hearth breast on the back wall, the work table right of
21
+ // the door line, the dresser on the right wall.
22
+ kitchen: [
23
+ { x0: 0.85, x1: 3.05, z0: -1.05, z1: -0.15 },
24
+ { x0: 3.1, x1: 3.6, z0: -1.2, z1: 0.4 },
25
+ ],
26
+ // The general shop's counter across the room.
27
+ shop: [{ x0: -1.8, x1: 2.6, z0: -1.9, z1: -1.2 }],
28
+ // The council table down the middle, its chairs either side, and the dais
29
+ // with the great chair across the back wall.
30
+ hall: [
31
+ { x0: -1.5, x1: 1.5, z0: -1.9, z1: 2.5 },
32
+ { x0: -2.6, x1: 2.6, z0: -3.4, z1: -2.4 },
33
+ ],
34
+ // The inn's beds down the sides and the table between them.
35
+ inn: [
36
+ { x0: -3.4, x1: -1.6, z0: -2.6, z1: 0.4 },
37
+ { x0: 1.6, x1: 3.4, z0: -2.6, z1: 0.4 },
38
+ ],
39
+ };
40
+ /**
41
+ * The Capital's walk-in buildings, by the style the builder places them
42
+ * with (capitalInteriors.ts rooms). Same local space; `hx`/`hz` there are
43
+ * half-extents, so these are measured off the middle.
44
+ */
45
+ export const CAPITAL_ROOM_FURNITURE = {
46
+ // The temple's altar on its step, across the back.
47
+ temple: [{ x0: -1.6, x1: 1.6, z0: -3.4, z1: -2.2 }],
48
+ // The forge hall: the hearth on the back wall and the two anvils before it.
49
+ forge: [
50
+ { x0: -2.6, x1: 2.6, z0: -3.6, z1: -2.4 },
51
+ { x0: -1.9, x1: -0.9, z0: -1.6, z1: -0.6 },
52
+ { x0: 0.9, x1: 1.9, z0: -1.6, z1: -0.6 },
53
+ ],
54
+ // The warehouse's stacks down both sides (its style token is `store`).
55
+ store: [
56
+ { x0: -3.6, x1: -1.8, z0: -3, z1: 2 },
57
+ { x0: 1.8, x1: 3.6, z0: -3, z1: 2 },
58
+ ],
59
+ // The manor's long table in the middle of the hall.
60
+ manor: [{ x0: -1.3, x1: 1.3, z0: -1.8, z1: 1.8 }],
61
+ // The Grand Exchange hall (capitalbuilding `grandexchange`, measured from
62
+ // backend capital-workshop/scripts/grandexchange_v003.py; Blender's +y is
63
+ // toward the back, so its y is this frame's -z and x is x): the clerks'
64
+ // counter across the back third in two halves (x +-3.7, y 1.9, 5.4 x 0.8)
65
+ // with the clerk's gap in the middle, the three clerks' desks behind it
66
+ // (x -4.5 / 0 / 4.5, y 4.2, 1.6 x 0.8), and the benches along the side
67
+ // walls (x +-8.25, y -3.6 and -0.8, 0.5 x 1.9). The runner, the price board
68
+ // on the back wall and the chandeliers are not in the way.
69
+ grandexchange: [
70
+ { x0: -6.35, x1: -1.05, z0: -2.25, z1: -1.55 },
71
+ { x0: 1.05, x1: 6.35, z0: -2.25, z1: -1.55 },
72
+ { x0: -5.25, x1: -3.75, z0: -4.55, z1: -3.85 },
73
+ { x0: -0.75, x1: 0.75, z0: -4.55, z1: -3.85 },
74
+ { x0: 3.75, x1: 5.25, z0: -4.55, z1: -3.85 },
75
+ { x0: -8.45, x1: -8.05, z0: 2.7, z1: 4.5 },
76
+ { x0: -8.45, x1: -8.05, z0: 0, z1: 1.5 },
77
+ { x0: 8.05, x1: 8.45, z0: 2.7, z1: 4.5 },
78
+ { x0: 8.05, x1: 8.45, z0: 0, z1: 1.5 },
79
+ ],
80
+ };
81
+ export function stoneHouseFurniture(variant) {
82
+ return STONE_HOUSE_FURNITURE[variant] ?? [];
83
+ }
84
+ export function capitalRoomFurniture(style) {
85
+ if (!style)
86
+ return [];
87
+ for (const key of Object.keys(CAPITAL_ROOM_FURNITURE)) {
88
+ if (style === key || style.startsWith(`${key}-`))
89
+ return CAPITAL_ROOM_FURNITURE[key];
90
+ }
91
+ return [];
92
+ }
93
+ /**
94
+ * The furniture of a placed building, keyed by what it is rather than by
95
+ * its whole style (2026-09-25). A manor is styled by its roof (`blue-s`),
96
+ * so the style lookup never found the `manor` key and the long table was
97
+ * walk-through (finding F2); a style with look tokens in the middle
98
+ * (`<variant>-<tokens>-<facing>`) would have missed too. So: stonehouses by
99
+ * their variant (the style's FIRST token), the Capital's own kinds by kind,
100
+ * the Blender buildings by model id (the first token).
101
+ *
102
+ * Stamping: turn each rect by the building's facing (buildingStyleFacing)
103
+ * with visitFurnitureTiles. The room is built about the centre of the
104
+ * building's tile, so pass the tile's centre, `cx + 0.5, cz + 0.5`, to land
105
+ * each rect on the tiles its mesh covers; passing the tile index shifts the
106
+ * stamp half a tile toward -x/-z (what Calverton's map.ts does today).
107
+ */
108
+ export function buildingRoomFurniture(kind, style) {
109
+ const first = (style ?? '').split('-')[0] ?? '';
110
+ switch (kind) {
111
+ case 'stonehouse':
112
+ return stoneHouseFurniture(first);
113
+ case 'manor':
114
+ return CAPITAL_ROOM_FURNITURE.manor ?? [];
115
+ case 'temple':
116
+ return CAPITAL_ROOM_FURNITURE.temple ?? [];
117
+ case 'forgehall':
118
+ return CAPITAL_ROOM_FURNITURE.forge ?? [];
119
+ case 'warehouse':
120
+ return CAPITAL_ROOM_FURNITURE.store ?? [];
121
+ case 'capitalbuilding':
122
+ return Object.prototype.hasOwnProperty.call(CAPITAL_ROOM_FURNITURE, first) ? CAPITAL_ROOM_FURNITURE[first] : [];
123
+ default:
124
+ return [];
125
+ }
126
+ }
127
+ /** The facing letter a building style ends with (its door side), or null when it has none (the keep). */
128
+ export function buildingStyleFacing(style) {
129
+ const parts = (style ?? '').split('-');
130
+ const last = parts[parts.length - 1];
131
+ return last === 'n' || last === 's' || last === 'e' || last === 'w' ? last : null;
132
+ }
133
+ /**
134
+ * Every world tile a rectangle covers once the building's facing is applied.
135
+ * `facing` is the direction the door looks, as the builders record it.
136
+ */
137
+ export function visitFurnitureTiles(cx, cz, facing, rect, visit) {
138
+ const step = 0.2;
139
+ for (let lx = rect.x0 + step * 0.5; lx < rect.x1; lx += step) {
140
+ for (let lz = rect.z0 + step * 0.5; lz < rect.z1; lz += step) {
141
+ let dx = lx;
142
+ let dz = lz;
143
+ if (facing === 'n') {
144
+ dx = -lx;
145
+ dz = -lz;
146
+ }
147
+ else if (facing === 'e') {
148
+ dx = lz;
149
+ dz = -lx;
150
+ }
151
+ else if (facing === 'w') {
152
+ dx = -lz;
153
+ dz = lx;
154
+ }
155
+ visit(Math.floor(cx + dx), Math.floor(cz + dz));
156
+ }
157
+ }
158
+ }
159
+ //# sourceMappingURL=interiorFurniture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interiorFurniture.js","sourceRoot":"","sources":["../src/interiorFurniture.ts"],"names":[],"mappings":"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"}
@@ -69,19 +69,19 @@ export declare const HOPE_BEACH_LANDING: {
69
69
  * FROZEN_LAKE_CENTER is declared further down; its z is 236.
70
70
  */
71
71
  /** The two rows of the pier walk, and the columns it runs over. */
72
- export declare const BRANSONS_LANDING_PIER_MIN_Z = 236;
73
- export declare const BRANSONS_LANDING_PIER_MAX_Z = 237;
72
+ export declare const BRANSONS_LANDING_PIER_MIN_Z = 300;
73
+ export declare const BRANSONS_LANDING_PIER_MAX_Z = 301;
74
74
  /** The seaward end of the walk (the head's west column) and its foot on the shore. */
75
75
  export declare const BRANSONS_LANDING_PIER_MIN_X = 3;
76
76
  export declare const BRANSONS_LANDING_PIER_FOOT_X = 21;
77
77
  /** The 4x4 landing head at the seaward end, a row wider than the walk each side. */
78
78
  export declare const BRANSONS_LANDING_HEAD_MAX_X = 6;
79
- export declare const BRANSONS_LANDING_HEAD_MIN_Z = 235;
80
- export declare const BRANSONS_LANDING_HEAD_MAX_Z = 238;
79
+ export declare const BRANSONS_LANDING_HEAD_MIN_Z = 299;
80
+ export declare const BRANSONS_LANDING_HEAD_MAX_Z = 302;
81
81
  /** Where the gangplank leaves the head for the ship: the head's south row. */
82
82
  export declare const BRANSONS_LANDING_GANGPLANK: {
83
83
  readonly x: 4;
84
- readonly z: 238;
84
+ readonly z: 302;
85
85
  };
86
86
  /**
87
87
  * The ship, lying east-west along the head's south side with its bow to the
@@ -90,7 +90,7 @@ export declare const BRANSONS_LANDING_GANGPLANK: {
90
90
  */
91
91
  export declare const BRANSONS_LANDING_SHIP: {
92
92
  readonly x: 6;
93
- readonly z: 241;
93
+ readonly z: 305;
94
94
  };
95
95
  export declare const BRANSONS_LANDING_SHIP_STYLE = "landingship-face270";
96
96
  /**
@@ -101,8 +101,8 @@ export declare const BRANSONS_LANDING_SHIP_STYLE = "landingship-face270";
101
101
  export declare const BRANSONS_LANDING_SHIP_HULL: {
102
102
  readonly minX: 1;
103
103
  readonly maxX: 11;
104
- readonly minZ: 239;
105
- readonly maxZ: 243;
104
+ readonly minZ: 303;
105
+ readonly maxZ: 307;
106
106
  };
107
107
  /**
108
108
  * Bay water by row: the columns from the rim water (x 0-1) east that the
@@ -113,57 +113,63 @@ export declare const BRANSONS_LANDING_COVE_ROWS: ReadonlyArray<{
113
113
  maxX: number;
114
114
  }>;
115
115
  /** The rim rows the bay replaces: the west rim loop places no crag on these. */
116
- export declare const BRANSONS_LANDING_COVE_MIN_Z = 224;
117
- export declare const BRANSONS_LANDING_COVE_MAX_Z = 251;
116
+ export declare const BRANSONS_LANDING_COVE_MIN_Z = 288;
117
+ export declare const BRANSONS_LANDING_COVE_MAX_Z = 315;
118
118
  /** Everything the landing owns, for the scenery sweep and the discovery zone. */
119
119
  export declare const BRANSONS_LANDING_WORKS: {
120
120
  readonly minX: 0;
121
121
  readonly maxX: 34;
122
- readonly minZ: 220;
123
- readonly maxZ: 255;
122
+ readonly minZ: 284;
123
+ readonly maxZ: 319;
124
124
  };
125
125
  /** Oskar, Branson's mate, on the shore a step off the pier foot, facing the boards. */
126
+ /**
127
+ * Oskar stands on the landing head, on the ship's side of it, where the
128
+ * gangway comes ashore: a boat man belongs beside his boat (James,
129
+ * 2026-09-22), not sixteen tiles up the pier on the sand. Passengers land
130
+ * on the head beside him and walk the planks in past the board.
131
+ */
126
132
  export declare const BRANSONS_LANDING_OSKAR: {
127
- readonly x: 22;
128
- readonly z: 235;
129
- readonly faceX: 21;
130
- readonly faceZ: 235;
133
+ readonly x: 5;
134
+ readonly z: 302;
135
+ readonly faceX: 9;
136
+ readonly faceZ: 301;
131
137
  };
132
138
  /** The sailings board, up the apron from Oskar with room to walk round it. */
133
139
  export declare const BRANSONS_LANDING_BOARD: {
134
140
  readonly x: 26;
135
- readonly z: 233;
141
+ readonly z: 297;
136
142
  };
137
143
  /** The hut on the shelf north of the pier foot, its door to the south, and the steps down. */
138
144
  export declare const BRANSONS_LANDING_HUT: {
139
145
  readonly x: 27;
140
- readonly z: 228;
146
+ readonly z: 292;
141
147
  };
142
148
  export declare const BRANSONS_LANDING_HUT_LANTERN: {
143
149
  readonly x: 28;
144
- readonly z: 230;
150
+ readonly z: 294;
145
151
  };
146
152
  export declare const BRANSONS_LANDING_STEPS: readonly [{
147
153
  readonly x: 27;
148
- readonly z: 230;
154
+ readonly z: 294;
149
155
  }, {
150
156
  readonly x: 27;
151
- readonly z: 231;
157
+ readonly z: 295;
152
158
  }];
153
159
  /** The shelf the hut stands on, its ledge row, and the apron the pier leaves from. */
154
160
  export declare const BRANSONS_LANDING_SHELF_HEIGHT = 3;
155
- export declare const BRANSONS_LANDING_LEDGE_Z = 230;
161
+ export declare const BRANSONS_LANDING_LEDGE_Z = 294;
156
162
  export declare const BRANSONS_LANDING_APRON: {
157
163
  readonly minX: 21;
158
164
  readonly maxX: 33;
159
- readonly minZ: 231;
160
- readonly maxZ: 243;
165
+ readonly minZ: 295;
166
+ readonly maxZ: 307;
161
167
  };
162
168
  export declare const BRANSONS_LANDING_APRON_HEIGHT = 1;
163
169
  /** A lantern post on the apron, south of the walk, and the stores stacked by the board. */
164
170
  export declare const BRANSONS_LANDING_APRON_LANTERN: {
165
171
  readonly x: 24;
166
- readonly z: 240;
172
+ readonly z: 304;
167
173
  };
168
174
  /** Ice floes on the bay water, clear of the ship and the pier. */
169
175
  export declare const BRANSONS_LANDING_FLOES: ReadonlyArray<{
@@ -178,12 +184,12 @@ export declare function isBransonsLandingDeckTile(x: number, z: number): boolean
178
184
  /** Kept for the rim loop and older callers: the crag line the bay now cuts through. */
179
185
  export declare const FROZEN_SHORE_JETTY: {
180
186
  readonly x: 2;
181
- readonly z: 237;
187
+ readonly z: 301;
182
188
  };
183
- /** Where a voyage puts you ashore: the pier's foot plank, on the landing side. */
189
+ /** Where a voyage puts you ashore: the landing head, off the ship's gangway. */
184
190
  export declare const FROZEN_SHORE_LANDING: {
185
- readonly x: 21;
186
- readonly z: 237;
191
+ readonly x: 4;
192
+ readonly z: 301;
187
193
  };
188
194
  /**
189
195
  * First smashed span, about a third of the way out - far enough that the walk
@@ -278,6 +284,8 @@ export declare const PIER_CAST_MAX_TILES = 10;
278
284
  * timer and after every catch.
279
285
  */
280
286
  export declare const HOPE_PIER_SMELT_SPOT_COUNT = 5;
287
+ /** Crab cage spots along the side of the Long Pier at once, redrawn like the smelt. */
288
+ export declare const HOPE_BEACH_CRAB_SPOT_COUNT = 4;
281
289
  /**
282
290
  * Chebyshev tiles around HOPE_PIER_SHIP_X/Z no pier fish may sit in. The
283
291
  * moored ship has a one-tile footprint but its hull mesh covers a few tiles
@@ -685,20 +693,20 @@ export declare const ANNES_ZONE_NORTH = 16;
685
693
  export declare const ANNES_ZONE_SOUTH = 40;
686
694
  /** Neighbours around Anne's green. Z stays local until world expansion. */
687
695
  export declare const ANNES_NEIGHBOUR_HOMES: readonly [{
688
- readonly name: 'Eldric';
696
+ readonly name: "Eldric";
689
697
  readonly x: number;
690
698
  readonly z: number;
691
- readonly style: 'cottage-slate';
699
+ readonly style: "cottage-slate";
692
700
  }, {
693
- readonly name: 'Rowan';
701
+ readonly name: "Rowan";
694
702
  readonly x: number;
695
703
  readonly z: number;
696
- readonly style: 'cottage-moss';
704
+ readonly style: "cottage-moss";
697
705
  }, {
698
- readonly name: 'Mara';
706
+ readonly name: "Mara";
699
707
  readonly x: number;
700
708
  readonly z: number;
701
- readonly style: 'cottage-russet';
709
+ readonly style: "cottage-russet";
702
710
  }];
703
711
  export declare const ANNES_GREEN: {
704
712
  readonly x: number;
@@ -1065,7 +1073,7 @@ export declare function inNorthernGarrison(x: number, z: number): boolean;
1065
1073
  */
1066
1074
  export declare const FROZEN_LAKE_CENTER: {
1067
1075
  readonly x: 56;
1068
- readonly z: 236;
1076
+ readonly z: 300;
1069
1077
  };
1070
1078
  export declare const FROZEN_LAKE_RX = 14;
1071
1079
  export declare const FROZEN_LAKE_RZ = 12;
@@ -1085,13 +1093,13 @@ export declare const FROZEN_LAKE_HOLES: readonly [{
1085
1093
  }];
1086
1094
  /** Where each fisher sits, and the hole they face. */
1087
1095
  export declare const FROZEN_LAKE_FISHERS: readonly [{
1088
- readonly name: 'Halvard';
1096
+ readonly name: "Halvard";
1089
1097
  readonly x: number;
1090
1098
  readonly z: number;
1091
1099
  readonly faceX: number;
1092
1100
  readonly faceZ: number;
1093
1101
  }, {
1094
- readonly name: 'Ingrid';
1102
+ readonly name: "Ingrid";
1095
1103
  readonly x: number;
1096
1104
  readonly z: number;
1097
1105
  readonly faceX: number;
@@ -1100,7 +1108,7 @@ export declare const FROZEN_LAKE_FISHERS: readonly [{
1100
1108
  /** Where the jetty leaves the east bank, and how many tiles it reaches west. */
1101
1109
  export declare const FROZEN_LAKE_JETTY: {
1102
1110
  readonly x: number;
1103
- readonly z: 236;
1111
+ readonly z: 300;
1104
1112
  readonly length: 4;
1105
1113
  };
1106
1114
  /**
@@ -1130,12 +1138,12 @@ export declare function onFrozenLakeIce(x: number, z: number): boolean;
1130
1138
  */
1131
1139
  export declare const FROZEN_PLATEAU_H = 5;
1132
1140
  /** Where the lowland starts climbing to the plateau, and where it is level. */
1133
- export declare const FROZEN_PLATEAU_RISE_Z = 214;
1134
- export declare const FROZEN_PLATEAU_TOP_Z = 198;
1141
+ export declare const FROZEN_PLATEAU_RISE_Z = 278;
1142
+ export declare const FROZEN_PLATEAU_TOP_Z = 262;
1135
1143
  /** The hills east of here are left as they are. */
1136
1144
  export declare const FROZEN_PLATEAU_MAX_X = 46;
1137
- export declare const CRYSTAL_GORGE_MIN_Z = 158;
1138
- export declare const CRYSTAL_GORGE_MAX_Z = 166;
1145
+ export declare const CRYSTAL_GORGE_MIN_Z = 222;
1146
+ export declare const CRYSTAL_GORGE_MAX_Z = 230;
1139
1147
  export declare const CRYSTAL_GORGE_MAX_X = 44;
1140
1148
  /** The bridge column and the deck's half-width in tiles. */
1141
1149
  export declare const CRYSTAL_BRIDGE_X = 21;
@@ -1145,9 +1153,9 @@ export declare const FROZEN_HALLWAY_HALF_W = 4;
1145
1153
  export declare const FROZEN_HALLWAY_WALL_T = 5;
1146
1154
  export declare const FROZEN_HALLWAY_WALL_H = 10;
1147
1155
  /** The rune arch at the mouth and the iron gate at the far end. */
1148
- export declare const FROZEN_HALLWAY_MOUTH_Z = 105;
1149
- export declare const FROZEN_HALLWAY_GATE_Z = 26;
1150
- export declare const FROZEN_HALLWAY_SEAL_Z = 6;
1156
+ export declare const FROZEN_HALLWAY_MOUTH_Z = 169;
1157
+ export declare const FROZEN_HALLWAY_GATE_Z = 90;
1158
+ export declare const FROZEN_HALLWAY_SEAL_Z = 70;
1151
1159
  /**
1152
1160
  * The Ice Prison: the rooms behind the hallway's iron gate, carved in the
1153
1161
  * off-map strip like the other interiors. You arrive in the Frozen Cells,
@@ -1225,6 +1233,11 @@ export declare const ICE_PRISON_BOUNDS: {
1225
1233
  readonly minZ: number;
1226
1234
  readonly maxZ: number;
1227
1235
  };
1236
+ /**
1237
+ * The prison proper and the Frozen Depths north of it (iceDepths.ts): one
1238
+ * predicate for the frost lighting, the rock palette and the cavern aggro,
1239
+ * so the boss rooms are the same cold as the shrine they open off.
1240
+ */
1228
1241
  export declare function inIcePrison(x: number, z: number): boolean;
1229
1242
  /** How far the hallway's centre line swings either side of FROZEN_HALLWAY_X. */
1230
1243
  export declare const FROZEN_HALLWAY_SWING = 7;
@@ -1238,7 +1251,7 @@ export declare const FROZEN_HALLWAY_SWING = 7;
1238
1251
  export declare function frozenHallwayCenterAt(z: number): number;
1239
1252
  export declare function frozenHallwayHalfWidthAt(z: number): number;
1240
1253
  export declare function inFrozenHallwayCorridor(x: number, z: number): boolean;
1241
- export type IceCavernMonsterKind = 'crystalskitter' | 'frostrevenant' | 'glaciallurker' | 'icetroll';
1254
+ export type IceCavernMonsterKind = 'crystalskitter' | 'frostrevenant' | 'glaciallurker' | 'icetroll' | 'frostwarden' | 'bonechillyeti' | 'icelich' | 'frostalchemist' | 'glacialbehemoth';
1242
1255
  /**
1243
1256
  * The ice cavern roster, INSIDE the Ice Prison behind the iron gate (moved
1244
1257
  * off the open Frozen Hallway on 2026-09-21: James wants the monsters in
@@ -1272,13 +1285,13 @@ export declare const ICE_CAVERN_SPAWNS: ReadonlyArray<{
1272
1285
  export declare const THAW_GORGE_CX: number;
1273
1286
  export declare const THAW_GORGE_MIN_X: number;
1274
1287
  export declare const THAW_GORGE_MAX_X: number;
1275
- export declare const THAW_GORGE_MIN_Z = 0;
1288
+ export declare const THAW_GORGE_MIN_Z = 64;
1276
1289
  /** Low river meets the battlefield lake's north bank. */
1277
1290
  export declare const THAW_GORGE_MAX_Z: number;
1278
- export declare const THAW_BRIDGE_Z = 49;
1279
- export declare const THAW_MID_BRIDGE_Z = 110;
1291
+ export declare const THAW_BRIDGE_Z = 113;
1292
+ export declare const THAW_MID_BRIDGE_Z = 174;
1280
1293
  export declare const THAW_WOODS_BRIDGE_Z: number;
1281
- export declare const THAW_BRIDGE_ZS: readonly [49, 110, number];
1294
+ export declare const THAW_BRIDGE_ZS: readonly [113, 174, number];
1282
1295
  export declare const THAW_BRIDGE_HALF_W = 1;
1283
1296
  /**
1284
1297
  * The river floor at the foot of the fall: eight below the sea, the height
@@ -1300,15 +1313,15 @@ export declare const THAW_FLOOD_EAST_X: number;
1300
1313
  * then this fall, then the bridges over the low water. Not at Rains' span
1301
1314
  * and not south of it.
1302
1315
  */
1303
- export declare const THAW_FALLS_Z = 26;
1316
+ export declare const THAW_FALLS_Z = 90;
1304
1317
  /** @deprecated Same tile as THAW_FALLS_Z; kept for older imports. */
1305
- export declare const THAW_SIDE_FALLS_Z = 26;
1318
+ export declare const THAW_SIDE_FALLS_Z = 90;
1306
1319
  export declare const THAW_ARCH_X: number;
1307
1320
  export declare const THAW_ARCH_PILLAR_DZ = 2;
1308
1321
  export declare const THAW_MOUTH_STAND_X: number;
1309
- export declare const THAW_MOUTH_STAND_Z = 6;
1322
+ export declare const THAW_MOUTH_STAND_Z = 70;
1310
1323
  export declare const THAW_FALLS_STAND_X: number;
1311
- export declare const THAW_FALLS_STAND_Z = 26;
1324
+ export declare const THAW_FALLS_STAND_Z = 90;
1312
1325
  export type ThawEastBridgeId = 1 | 2 | 3;
1313
1326
  export declare function thawEastBridgeIdAtZ(z: number): ThawEastBridgeId | null;
1314
1327
  export declare function inThawFlood(x: number, z: number): boolean;
@@ -1445,7 +1458,7 @@ export declare const BATTLEFIELD_GOBLIN_CAMPS: readonly {
1445
1458
  /** The goblins' ruined hinterland between their battle line and the first snow. */
1446
1459
  export declare const GOBLIN_FRONTIER_MIN_X = 28;
1447
1460
  export declare const GOBLIN_FRONTIER_MAX_X = 157;
1448
- export declare const GOBLIN_FRONTIER_MIN_Z = 543;
1461
+ export declare const GOBLIN_FRONTIER_MIN_Z = 607;
1449
1462
  export declare const GOBLIN_FRONTIER_MAX_Z: number;
1450
1463
  export declare const GOBLIN_FRONTIER_TOWERS: readonly [{
1451
1464
  readonly x: number;
@@ -1483,10 +1496,10 @@ export declare const GOBLIN_FRONTIER_ROAD: readonly [{
1483
1496
  /** The two occupied camp loops off the frontier road (built in goblinFrontier.ts). */
1484
1497
  export declare const GOBLIN_FRONTIER_CAMPS: readonly [{
1485
1498
  readonly x: 113;
1486
- readonly z: 613;
1499
+ readonly z: 677;
1487
1500
  }, {
1488
1501
  readonly x: 68;
1489
- readonly z: 571;
1502
+ readonly z: 635;
1490
1503
  }];
1491
1504
  /**
1492
1505
  * Where the frontier is held. Goblins spawn here the way they do at the
@@ -1519,7 +1532,12 @@ export type DiscoveryZone = {
1519
1532
  };
1520
1533
  export declare const DISCOVERY_ZONES: readonly DiscoveryZone[];
1521
1534
  export declare function discoveryZoneAt(worldX: number, worldZ: number): DiscoveryZone | null;
1522
- export type WorldMapLandmarkKind = 'place' | 'dungeon';
1535
+ /**
1536
+ * 'dungeon' and 'shop' get an icon on the world map instead of a plain
1537
+ * diamond, and both are hoverable and clickable there (James, 2026-09-22:
1538
+ * icons over the actual mouth, and a way to see which places trade).
1539
+ */
1540
+ export type WorldMapLandmarkKind = 'place' | 'dungeon' | 'shop';
1523
1541
  /** Caption seat relative to the marker. Default is above. `on` sits on the mark. */
1524
1542
  export type WorldMapLabelSide = 'above' | 'below' | 'right' | 'left' | 'on';
1525
1543
  export type WorldMapLandmark = {
@@ -1528,6 +1546,12 @@ export type WorldMapLandmark = {
1528
1546
  label: string;
1529
1547
  kind?: WorldMapLandmarkKind;
1530
1548
  labelSide?: WorldMapLabelSide;
1549
+ /**
1550
+ * For `kind: 'dungeon'`: the matching id in DUNGEON_CHARTS
1551
+ * (dungeonCharts.ts), so a click on the icon can drill down into that
1552
+ * dungeon's own chart instead of just zooming to the mouth.
1553
+ */
1554
+ dungeonId?: string;
1531
1555
  };
1532
1556
  /**
1533
1557
  * The mine's eastern Zone 2 location, shared by scenery, lighting, and the map.