@dreadwood-types/types 0.1.46 → 0.1.49

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 (59) hide show
  1. package/dist/appearance.js +12 -12
  2. package/dist/appearance.js.map +1 -1
  3. package/dist/areaTransitions.d.ts +1 -1
  4. package/dist/areaTransitions.d.ts.map +1 -1
  5. package/dist/areaTransitions.js +13 -0
  6. package/dist/areaTransitions.js.map +1 -1
  7. package/dist/blacksmithing.d.ts +3 -0
  8. package/dist/blacksmithing.d.ts.map +1 -1
  9. package/dist/blacksmithing.js +3 -0
  10. package/dist/blacksmithing.js.map +1 -1
  11. package/dist/capital.d.ts +15 -0
  12. package/dist/capital.d.ts.map +1 -1
  13. package/dist/capital.js +21 -0
  14. package/dist/capital.js.map +1 -1
  15. package/dist/clientConfig.d.ts +2 -2
  16. package/dist/clientConfig.d.ts.map +1 -1
  17. package/dist/clientConfig.js +4 -5
  18. package/dist/clientConfig.js.map +1 -1
  19. package/dist/constants.d.ts +28 -3
  20. package/dist/constants.d.ts.map +1 -1
  21. package/dist/constants.js +44 -4
  22. package/dist/constants.js.map +1 -1
  23. package/dist/cooking.d.ts.map +1 -1
  24. package/dist/cooking.js +2 -0
  25. package/dist/cooking.js.map +1 -1
  26. package/dist/equipment.d.ts.map +1 -1
  27. package/dist/equipment.js +4 -0
  28. package/dist/equipment.js.map +1 -1
  29. package/dist/groundItems.d.ts.map +1 -1
  30. package/dist/groundItems.js +11 -0
  31. package/dist/groundItems.js.map +1 -1
  32. package/dist/harbour.d.ts +187 -0
  33. package/dist/harbour.d.ts.map +1 -0
  34. package/dist/harbour.js +230 -0
  35. package/dist/harbour.js.map +1 -0
  36. package/dist/iceDepths.d.ts +139 -0
  37. package/dist/iceDepths.d.ts.map +1 -0
  38. package/dist/iceDepths.js +118 -0
  39. package/dist/iceDepths.js.map +1 -0
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/landmarks.d.ts +18 -14
  45. package/dist/landmarks.d.ts.map +1 -1
  46. package/dist/landmarks.js +83 -50
  47. package/dist/landmarks.js.map +1 -1
  48. package/dist/messages.d.ts +9 -0
  49. package/dist/messages.d.ts.map +1 -1
  50. package/dist/messages.js.map +1 -1
  51. package/dist/travel.d.ts +7 -4
  52. package/dist/travel.d.ts.map +1 -1
  53. package/dist/travel.js +20 -4
  54. package/dist/travel.js.map +1 -1
  55. package/dist/zones.d.ts +10 -0
  56. package/dist/zones.d.ts.map +1 -1
  57. package/dist/zones.js +10 -0
  58. package/dist/zones.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,187 @@
1
+ /**
2
+ * THE KING'S HARBOUR
3
+ *
4
+ * The Capital's port (2026-09-21, James: "the capital city should have a
5
+ * large port coming out of it"). The city's north side is the edge of the
6
+ * world, so the sea is to the east: everything east of HARBOUR_SEA_X is the
7
+ * Sound, open water to the map's edge, with a shore curving back east to
8
+ * the edge south of the harbour. Between the moat and the water sits a
9
+ * walled harbour ward on the city's own axis: the East Gate's bridge lands
10
+ * on the Harbour Road, which runs the Royal Way's rows straight to the
11
+ * quay and on out along the Royal Pier. Warehouses face the quay either
12
+ * side of the road with cranes at their doors, the harbour master's house
13
+ * and the customs house face the road, an inn and a chandler behind them,
14
+ * and a breakwater runs out from the north tower to a lighthouse at the
15
+ * harbour mouth. Ships lie alongside the piers with gangplanks down; the
16
+ * harbour master sells passage on Branson's chart (travel.ts).
17
+ *
18
+ * World tiles, absolute like the capital's. Backend builder:
19
+ * capitalHarbour.ts. Assets: the quay grammar in pierDeck.ts (`quay`
20
+ * base), the lighthouse and harbour tower in capitalMonuments.ts, the
21
+ * crane in capitalFabric.ts (yardprop `crane`).
22
+ */
23
+ /** The ward: the moat's east bank to the quay edge, the wall rows included. */
24
+ export declare const HARBOUR_MIN_X: number;
25
+ /** The quay's edge tile: the last land, the water begins on the next. */
26
+ export declare const HARBOUR_MAX_X = 819;
27
+ export declare const HARBOUR_SEA_X: number;
28
+ export declare const HARBOUR_NORTH_Z = 44;
29
+ export declare const HARBOUR_SOUTH_Z = 148;
30
+ /** Everything the ward and the bay own, for the sweep and the levelling. */
31
+ export declare const HARBOUR_WORKS: {
32
+ readonly minX: number;
33
+ readonly maxX: 927;
34
+ readonly minZ: 0;
35
+ readonly maxZ: 232;
36
+ };
37
+ /** The ward's floor is the city's; the quay stands two heights over the water. */
38
+ export declare const HARBOUR_FLOOR_H = 2;
39
+ export declare const HARBOUR_WATER_H = 0;
40
+ export declare const HARBOUR_SHORE_H = 1;
41
+ /** The Harbour Road: the Way's rows, kerbed, from the bridge foot to the quay. */
42
+ export declare const HARBOUR_ROAD_Z = 96;
43
+ export declare const HARBOUR_ROAD_HALF_W = 2;
44
+ export declare const HARBOUR_ROAD_KERB_HALF_W = 3;
45
+ /** The quay strip along the water, six wide, flags. */
46
+ export declare const HARBOUR_QUAY_MIN_X = 814;
47
+ /** Wall towers every this many tiles along the harbour walls. */
48
+ export declare const HARBOUR_BASTION_EVERY = 16;
49
+ /** The drums at the water ends of the walls stand on the quay's corners. */
50
+ export declare const HARBOUR_TOWER_X = 818;
51
+ type Rect = {
52
+ readonly minX: number;
53
+ readonly maxX: number;
54
+ readonly minZ: number;
55
+ readonly maxZ: number;
56
+ };
57
+ /**
58
+ * The piers: stone, terrain at the ward's height with the quay grammar on
59
+ * their edges. The Royal Pier is on the road's rows; the two smaller piers
60
+ * flank it.
61
+ */
62
+ export declare const HARBOUR_ROYAL_PIER: {
63
+ readonly minX: number;
64
+ readonly maxX: 853;
65
+ readonly minZ: number;
66
+ readonly maxZ: number;
67
+ };
68
+ export declare const HARBOUR_NORTH_PIER: {
69
+ readonly minX: number;
70
+ readonly maxX: 845;
71
+ readonly minZ: 64;
72
+ readonly maxZ: 67;
73
+ };
74
+ export declare const HARBOUR_SOUTH_PIER: {
75
+ readonly minX: number;
76
+ readonly maxX: 845;
77
+ readonly minZ: 125;
78
+ readonly maxZ: 128;
79
+ };
80
+ export declare const HARBOUR_PIERS: ReadonlyArray<Rect>;
81
+ /** The breakwater from the north tower, three wide, and its head with the lighthouse on it. */
82
+ export declare const HARBOUR_MOLE: {
83
+ readonly minX: number;
84
+ readonly maxX: 861;
85
+ readonly minZ: 44;
86
+ readonly maxZ: number;
87
+ };
88
+ export declare const HARBOUR_MOLE_HEAD: {
89
+ readonly minX: 862;
90
+ readonly maxX: 866;
91
+ readonly minZ: 42;
92
+ readonly maxZ: 48;
93
+ };
94
+ export declare const HARBOUR_LIGHTHOUSE: {
95
+ readonly x: 864;
96
+ readonly z: 45;
97
+ };
98
+ /**
99
+ * The ships. `style` is the ship kind and its bow's heading (face90 is bow
100
+ * east, face270 bow west, face0 bow south); `hull` is the water the hull
101
+ * lies over, blocked so nothing paths under a keel; `plank` is the pier
102
+ * tile the gangplank leaves from and the side it goes over.
103
+ */
104
+ export declare const HARBOUR_SHIPS: ReadonlyArray<{
105
+ id: string;
106
+ x: number;
107
+ z: number;
108
+ style: string;
109
+ hull: Rect;
110
+ plank: {
111
+ x: number;
112
+ z: number;
113
+ side: 'north' | 'south' | 'east' | 'west';
114
+ };
115
+ }>;
116
+ /**
117
+ * The buildings. Warehouses face the quay (door east), the master's house
118
+ * and the customs house face the road, the inn and the chandler stand
119
+ * behind them on the road too. Styles as the capital's landmarks.
120
+ */
121
+ export declare const HARBOUR_LANDMARKS: ReadonlyArray<{
122
+ id: string;
123
+ kind: 'stonehouse' | 'warehouse';
124
+ style: string;
125
+ x: number;
126
+ z: number;
127
+ board?: string;
128
+ }>;
129
+ /** Blind terraces along the wall walks and across the yards, backdrop between the hero buildings. */
130
+ export declare const HARBOUR_TERRACES: ReadonlyArray<{
131
+ z: number;
132
+ facing: 'n' | 's';
133
+ xs: ReadonlyArray<number>;
134
+ }>;
135
+ /** Treadwheel cranes on the quay edge, at the warehouse doors. */
136
+ export declare const HARBOUR_CRANES: ReadonlyArray<{
137
+ x: number;
138
+ z: number;
139
+ }>;
140
+ /** The fish market on the south quay: stalls with their backs to the water. */
141
+ export declare const HARBOUR_FISH_STALLS: ReadonlyArray<{
142
+ x: number;
143
+ z: number;
144
+ }>;
145
+ /** The sailings board at the Royal Pier's root, and the harbour master beside it. */
146
+ export declare const HARBOUR_BOARD: {
147
+ readonly x: 817;
148
+ readonly z: 90;
149
+ };
150
+ export declare const HARBOUR_MASTER: {
151
+ readonly x: 817;
152
+ readonly z: 102;
153
+ readonly faceX: 816;
154
+ readonly faceZ: 96;
155
+ };
156
+ /** Where a sailing puts you ashore: the Royal Pier beside the first gangplank. */
157
+ export declare const HARBOUR_LANDING: {
158
+ readonly x: 836;
159
+ readonly z: 96;
160
+ };
161
+ /** The name on the road and the map. */
162
+ export declare const HARBOUR_NAME = "The King's Harbour";
163
+ /** The wall rows and the tiles inward that the wall pieces fill. */
164
+ export declare function onHarbourWall(x: number, z: number): boolean;
165
+ export declare function inHarbourWard(x: number, z: number): boolean;
166
+ /** Inside the walls: where the buildings and yards are. */
167
+ export declare function inHarbourInterior(x: number, z: number): boolean;
168
+ export declare function onHarbourRoad(x: number, z: number): boolean;
169
+ export declare function onHarbourQuay(x: number, z: number): boolean;
170
+ export declare function onHarbourPier(x: number, z: number): boolean;
171
+ export declare function onHarbourMole(x: number, z: number): boolean;
172
+ /** Every stone deck standing over the water: the piers and the breakwater. */
173
+ export declare function onHarbourDeck(x: number, z: number): boolean;
174
+ /**
175
+ * The Sound's shore south of the harbour: the first water column on a row.
176
+ * Straight along the quay and the ward, then bending east below the south
177
+ * tower to reach the map's edge, wandering a tile or two so it is a coast
178
+ * and not a ruler.
179
+ */
180
+ export declare const HARBOUR_SHORE_BEND_Z = 176;
181
+ export declare function harbourShoreX(z: number): number;
182
+ /** The Sound: sea from the shore to the map's edge, the north rows included, the decks excepted. */
183
+ export declare function inHarbourSea(x: number, z: number): boolean;
184
+ /** Laid stone: the ward inside its walls, the piers and the breakwater (see the frontend's LaidPaving). */
185
+ export declare function inHarbourPaving(x: number, z: number): boolean;
186
+ export {};
187
+ //# sourceMappingURL=harbour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harbour.d.ts","sourceRoot":"","sources":["../src/harbour.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,230 @@
1
+ import { CAPITAL_AVENUE_Z, CAPITAL_BRIDGE_HALF_W, CAPITAL_FLOOR_H, CAPITAL_GATE_HALF_W, CAPITAL_MOAT_MAX_X, } from './capital.js';
2
+ /**
3
+ * THE KING'S HARBOUR
4
+ *
5
+ * The Capital's port (2026-09-21, James: "the capital city should have a
6
+ * large port coming out of it"). The city's north side is the edge of the
7
+ * world, so the sea is to the east: everything east of HARBOUR_SEA_X is the
8
+ * Sound, open water to the map's edge, with a shore curving back east to
9
+ * the edge south of the harbour. Between the moat and the water sits a
10
+ * walled harbour ward on the city's own axis: the East Gate's bridge lands
11
+ * on the Harbour Road, which runs the Royal Way's rows straight to the
12
+ * quay and on out along the Royal Pier. Warehouses face the quay either
13
+ * side of the road with cranes at their doors, the harbour master's house
14
+ * and the customs house face the road, an inn and a chandler behind them,
15
+ * and a breakwater runs out from the north tower to a lighthouse at the
16
+ * harbour mouth. Ships lie alongside the piers with gangplanks down; the
17
+ * harbour master sells passage on Branson's chart (travel.ts).
18
+ *
19
+ * World tiles, absolute like the capital's. Backend builder:
20
+ * capitalHarbour.ts. Assets: the quay grammar in pierDeck.ts (`quay`
21
+ * base), the lighthouse and harbour tower in capitalMonuments.ts, the
22
+ * crane in capitalFabric.ts (yardprop `crane`).
23
+ */
24
+ /** The ward: the moat's east bank to the quay edge, the wall rows included. */
25
+ export const HARBOUR_MIN_X = CAPITAL_MOAT_MAX_X + 1;
26
+ /** The quay's edge tile: the last land, the water begins on the next. */
27
+ export const HARBOUR_MAX_X = 819;
28
+ export const HARBOUR_SEA_X = HARBOUR_MAX_X + 1;
29
+ export const HARBOUR_NORTH_Z = 44;
30
+ export const HARBOUR_SOUTH_Z = 148;
31
+ /** Everything the ward and the bay own, for the sweep and the levelling. */
32
+ export const HARBOUR_WORKS = { minX: HARBOUR_MIN_X, maxX: 927, minZ: 0, maxZ: 232 };
33
+ /** The ward's floor is the city's; the quay stands two heights over the water. */
34
+ export const HARBOUR_FLOOR_H = CAPITAL_FLOOR_H;
35
+ export const HARBOUR_WATER_H = 0;
36
+ export const HARBOUR_SHORE_H = 1;
37
+ /** The Harbour Road: the Way's rows, kerbed, from the bridge foot to the quay. */
38
+ export const HARBOUR_ROAD_Z = CAPITAL_AVENUE_Z;
39
+ export const HARBOUR_ROAD_HALF_W = CAPITAL_GATE_HALF_W;
40
+ export const HARBOUR_ROAD_KERB_HALF_W = CAPITAL_BRIDGE_HALF_W;
41
+ /** The quay strip along the water, six wide, flags. */
42
+ export const HARBOUR_QUAY_MIN_X = 814;
43
+ /** Wall towers every this many tiles along the harbour walls. */
44
+ export const HARBOUR_BASTION_EVERY = 16;
45
+ /** The drums at the water ends of the walls stand on the quay's corners. */
46
+ export const HARBOUR_TOWER_X = 818;
47
+ const inRect = (r, x, z) => x >= r.minX && x <= r.maxX && z >= r.minZ && z <= r.maxZ;
48
+ /**
49
+ * The piers: stone, terrain at the ward's height with the quay grammar on
50
+ * their edges. The Royal Pier is on the road's rows; the two smaller piers
51
+ * flank it.
52
+ */
53
+ export const HARBOUR_ROYAL_PIER = { minX: HARBOUR_SEA_X, maxX: 853, minZ: HARBOUR_ROAD_Z - 3, maxZ: HARBOUR_ROAD_Z + 3 };
54
+ export const HARBOUR_NORTH_PIER = { minX: HARBOUR_SEA_X, maxX: 845, minZ: 64, maxZ: 67 };
55
+ export const HARBOUR_SOUTH_PIER = { minX: HARBOUR_SEA_X, maxX: 845, minZ: 125, maxZ: 128 };
56
+ export const HARBOUR_PIERS = [HARBOUR_ROYAL_PIER, HARBOUR_NORTH_PIER, HARBOUR_SOUTH_PIER];
57
+ /** The breakwater from the north tower, three wide, and its head with the lighthouse on it. */
58
+ export const HARBOUR_MOLE = { minX: HARBOUR_SEA_X, maxX: 861, minZ: HARBOUR_NORTH_Z, maxZ: HARBOUR_NORTH_Z + 2 };
59
+ export const HARBOUR_MOLE_HEAD = { minX: 862, maxX: 866, minZ: 42, maxZ: 48 };
60
+ export const HARBOUR_LIGHTHOUSE = { x: 864, z: 45 };
61
+ /**
62
+ * The ships. `style` is the ship kind and its bow's heading (face90 is bow
63
+ * east, face270 bow west, face0 bow south); `hull` is the water the hull
64
+ * lies over, blocked so nothing paths under a keel; `plank` is the pier
65
+ * tile the gangplank leaves from and the side it goes over.
66
+ */
67
+ export const HARBOUR_SHIPS = [
68
+ {
69
+ id: 'royal-north',
70
+ x: 838,
71
+ z: 89,
72
+ style: 'harbourship-crimson-face90',
73
+ hull: { minX: 830, maxX: 846, minZ: 87, maxZ: 91 },
74
+ plank: { x: 838, z: HARBOUR_ROYAL_PIER.minZ, side: 'north' },
75
+ },
76
+ {
77
+ id: 'royal-south',
78
+ x: 842,
79
+ z: 103,
80
+ style: 'harbourship-gold-face270',
81
+ hull: { minX: 834, maxX: 850, minZ: 101, maxZ: 105 },
82
+ plank: { x: 842, z: HARBOUR_ROYAL_PIER.maxZ, side: 'south' },
83
+ },
84
+ {
85
+ id: 'north-pier',
86
+ x: 834,
87
+ z: 60,
88
+ style: 'harbourship-green-face90',
89
+ hull: { minX: 826, maxX: 842, minZ: 58, maxZ: 62 },
90
+ plank: { x: 834, z: HARBOUR_NORTH_PIER.minZ, side: 'north' },
91
+ },
92
+ {
93
+ id: 'north-pier-south',
94
+ x: 834,
95
+ z: 71,
96
+ style: 'harbourship-blue-face270',
97
+ hull: { minX: 826, maxX: 842, minZ: 69, maxZ: 73 },
98
+ plank: { x: 834, z: HARBOUR_NORTH_PIER.maxZ, side: 'south' },
99
+ },
100
+ {
101
+ id: 'south-pier',
102
+ x: 832,
103
+ z: 121,
104
+ style: 'landingship-face270',
105
+ hull: { minX: 827, maxX: 837, minZ: 119, maxZ: 123 },
106
+ plank: { x: 832, z: HARBOUR_SOUTH_PIER.minZ, side: 'north' },
107
+ },
108
+ {
109
+ id: 'south-pier-south',
110
+ x: 830,
111
+ z: 132,
112
+ style: 'viking-face90',
113
+ hull: { minX: 826, maxX: 834, minZ: 130, maxZ: 134 },
114
+ plank: { x: 830, z: HARBOUR_SOUTH_PIER.maxZ, side: 'south' },
115
+ },
116
+ {
117
+ id: 'south-quay',
118
+ x: 823,
119
+ z: 140,
120
+ style: 'viking-face0',
121
+ hull: { minX: 821, maxX: 825, minZ: 136, maxZ: 144 },
122
+ plank: { x: HARBOUR_MAX_X, z: 140, side: 'east' },
123
+ },
124
+ ];
125
+ /**
126
+ * The buildings. Warehouses face the quay (door east), the master's house
127
+ * and the customs house face the road, the inn and the chandler stand
128
+ * behind them on the road too. Styles as the capital's landmarks.
129
+ */
130
+ export const HARBOUR_LANDMARKS = [
131
+ { id: 'harbour-master', kind: 'stonehouse', style: 'hall-s', x: 800, z: 84, board: 'Harbour Master' },
132
+ { id: 'customs', kind: 'stonehouse', style: 'bank-n', x: 800, z: 108, board: 'Customs House' },
133
+ { id: 'anchor-inn', kind: 'stonehouse', style: 'pub-s', x: 784, z: 84 },
134
+ { id: 'chandler', kind: 'stonehouse', style: 'shop-n', x: 784, z: 108, board: 'Chandler' },
135
+ { id: 'warehouse-n1', kind: 'warehouse', style: 'store-e', x: 806, z: 70 },
136
+ { id: 'warehouse-n2', kind: 'warehouse', style: 'store-e', x: 806, z: 55 },
137
+ { id: 'warehouse-s1', kind: 'warehouse', style: 'store-e', x: 806, z: 122 },
138
+ { id: 'warehouse-s2', kind: 'warehouse', style: 'store-e', x: 806, z: 137 },
139
+ ];
140
+ /** Blind terraces along the wall walks and across the yards, backdrop between the hero buildings. */
141
+ export const HARBOUR_TERRACES = [
142
+ { z: 49, facing: 's', xs: [774, 779, 784, 789, 794] },
143
+ { z: 64, facing: 'n', xs: [773, 778, 783, 788, 793] },
144
+ { z: 128, facing: 's', xs: [773, 778, 783, 788, 793] },
145
+ { z: 143, facing: 'n', xs: [774, 779, 784, 789, 794] },
146
+ ];
147
+ /** Treadwheel cranes on the quay edge, at the warehouse doors. */
148
+ export const HARBOUR_CRANES = [
149
+ { x: 818, z: 60 },
150
+ { x: 818, z: 76 },
151
+ { x: 818, z: 116 },
152
+ { x: 818, z: 132 },
153
+ ];
154
+ /** The fish market on the south quay: stalls with their backs to the water. */
155
+ export const HARBOUR_FISH_STALLS = [
156
+ { x: 816, z: 134 },
157
+ { x: 816, z: 138 },
158
+ { x: 816, z: 142 },
159
+ ];
160
+ /** The sailings board at the Royal Pier's root, and the harbour master beside it. */
161
+ export const HARBOUR_BOARD = { x: 817, z: 90 };
162
+ export const HARBOUR_MASTER = { x: 817, z: 102, faceX: 816, faceZ: 96 };
163
+ /** Where a sailing puts you ashore: the Royal Pier beside the first gangplank. */
164
+ export const HARBOUR_LANDING = { x: 836, z: HARBOUR_ROAD_Z };
165
+ /** The name on the road and the map. */
166
+ export const HARBOUR_NAME = "The King's Harbour";
167
+ /** The wall rows and the tiles inward that the wall pieces fill. */
168
+ export function onHarbourWall(x, z) {
169
+ if (x < HARBOUR_MIN_X || x > HARBOUR_MAX_X)
170
+ return false;
171
+ return z === HARBOUR_NORTH_Z || z === HARBOUR_NORTH_Z + 1 || z === HARBOUR_SOUTH_Z || z === HARBOUR_SOUTH_Z - 1;
172
+ }
173
+ export function inHarbourWard(x, z) {
174
+ return x >= HARBOUR_MIN_X && x <= HARBOUR_MAX_X && z >= HARBOUR_NORTH_Z && z <= HARBOUR_SOUTH_Z;
175
+ }
176
+ /** Inside the walls: where the buildings and yards are. */
177
+ export function inHarbourInterior(x, z) {
178
+ return inHarbourWard(x, z) && !onHarbourWall(x, z);
179
+ }
180
+ export function onHarbourRoad(x, z) {
181
+ return x >= HARBOUR_MIN_X && x < HARBOUR_QUAY_MIN_X && Math.abs(z - HARBOUR_ROAD_Z) <= HARBOUR_ROAD_KERB_HALF_W;
182
+ }
183
+ export function onHarbourQuay(x, z) {
184
+ return x >= HARBOUR_QUAY_MIN_X && x <= HARBOUR_MAX_X && inHarbourInterior(x, z);
185
+ }
186
+ export function onHarbourPier(x, z) {
187
+ return HARBOUR_PIERS.some((p) => inRect(p, x, z));
188
+ }
189
+ export function onHarbourMole(x, z) {
190
+ return inRect(HARBOUR_MOLE, x, z) || inRect(HARBOUR_MOLE_HEAD, x, z);
191
+ }
192
+ /** Every stone deck standing over the water: the piers and the breakwater. */
193
+ export function onHarbourDeck(x, z) {
194
+ return onHarbourPier(x, z) || onHarbourMole(x, z);
195
+ }
196
+ /** A small deterministic hash in [0, 1) for the shore's wander. */
197
+ function shoreHash(x, z) {
198
+ let h = (x * 374761393 + z * 668265263) | 0;
199
+ h = Math.imul(h ^ (h >>> 13), 1274126177);
200
+ return ((h ^ (h >>> 16)) >>> 0) / 4294967296;
201
+ }
202
+ /**
203
+ * The Sound's shore south of the harbour: the first water column on a row.
204
+ * Straight along the quay and the ward, then bending east below the south
205
+ * tower to reach the map's edge, wandering a tile or two so it is a coast
206
+ * and not a ruler.
207
+ */
208
+ export const HARBOUR_SHORE_BEND_Z = 176;
209
+ export function harbourShoreX(z) {
210
+ if (z <= HARBOUR_SHORE_BEND_Z)
211
+ return HARBOUR_SEA_X;
212
+ const run = z - HARBOUR_SHORE_BEND_Z;
213
+ const w = (shoreHash(Math.floor(z / 3), 7) + shoreHash(Math.floor(z / 5) + 3, 11)) / 2;
214
+ return Math.min(HARBOUR_WORKS.maxX + 1, HARBOUR_SEA_X + Math.round(run * 2.7 + w * 4 - 2));
215
+ }
216
+ /** The Sound: sea from the shore to the map's edge, the north rows included, the decks excepted. */
217
+ export function inHarbourSea(x, z) {
218
+ if (z < HARBOUR_WORKS.minZ || z > HARBOUR_WORKS.maxZ)
219
+ return false;
220
+ if (onHarbourDeck(x, z))
221
+ return false;
222
+ if (z <= 2 && x >= HARBOUR_MIN_X)
223
+ return true;
224
+ return x >= harbourShoreX(z);
225
+ }
226
+ /** Laid stone: the ward inside its walls, the piers and the breakwater (see the frontend's LaidPaving). */
227
+ export function inHarbourPaving(x, z) {
228
+ return inHarbourInterior(x, z) || onHarbourDeck(x, z);
229
+ }
230
+ //# sourceMappingURL=harbour.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harbour.js","sourceRoot":"","sources":["../src/harbour.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { iceDepthsPropBlocks, type EntityKind } from './constants.js';
2
+ /**
3
+ * The Frozen Depths (2026-09-21, James: "expand the frozen dungeon to have
4
+ * boss rooms"): five boss rooms carved in the off-map strip north of the
5
+ * Ice Prison, reached from the Frozen Shrine, which is the dungeon's hub.
6
+ *
7
+ * There are no puzzles. Every "lever" on the reference map (the chain
8
+ * winches, the soul braziers, the reagent bench, the relic lift) is a rune
9
+ * arch in the shrine's wall that teleports you into its room, and every
10
+ * room has an arch by its arrival tile that teleports you back. The one
11
+ * gate is the lift down to the Final Core: the four wing bosses each drop
12
+ * a relic, and the lift wants all four in the bag (kept, not spent).
13
+ *
14
+ * Layout in world tiles (the strip runs x 928-1183; the prison holds
15
+ * x 1112-1160, z 102-180; the Rat Tunnel holds x 1032-1080). Two rows of
16
+ * rooms north of the shrine, walls of the same dark rock between them:
17
+ *
18
+ * z 6-40 Rune Chamber (Frost Warden) x 1086-1114
19
+ * Ritual Chamber (Ice Lich) x 1150-1178
20
+ * z 50-94 Shattered Hollow (Bonechill Yeti) x 1086-1114
21
+ * Final Core (Glacial Behemoth) x 1118-1146
22
+ * Lower Laboratory (Frost Alchemist) x 1150-1178
23
+ *
24
+ * Each room's arrival tile is at its south end and its return arch is in
25
+ * the south wall behind it; the boss waits at the far end. The hub's
26
+ * arches: west wall (rune at z 116, hollow at the seal's row), east wall
27
+ * (ritual at the seal's row, lab at z 134), and the Warden's sealed door
28
+ * in the north wall, which is the lift.
29
+ */
30
+ export type IceDepthsRoomId = 'rune' | 'hollow' | 'ritual' | 'lab' | 'core';
31
+ export type IceDepthsBossKind = 'frostwarden' | 'bonechillyeti' | 'icelich' | 'frostalchemist' | 'glacialbehemoth';
32
+ /** The relic each wing boss drops, in the order of the rooms above. */
33
+ export type IceDepthsRelicKind = 'gatesealkey' | 'prisonchainhook' | 'frostsigil' | 'crystalphial';
34
+ export declare const ICE_DEPTHS_RELICS: ReadonlyArray<IceDepthsRelicKind>;
35
+ export type IceDepthsRoom = {
36
+ id: IceDepthsRoomId;
37
+ /** The room's name, on the cover and in Examine. */
38
+ title: string;
39
+ /** The line under the title on the cover. */
40
+ line: string;
41
+ boss: IceDepthsBossKind;
42
+ bossName: string;
43
+ minX: number;
44
+ maxX: number;
45
+ minZ: number;
46
+ maxZ: number;
47
+ cx: number;
48
+ cz: number;
49
+ /** The room's floor height (the shrine is -1). */
50
+ floorH: number;
51
+ /** Where the hub's arch drops you. */
52
+ arrival: {
53
+ x: number;
54
+ z: number;
55
+ };
56
+ /** The arch back to the hub, in the south wall behind the arrival tile. */
57
+ returnArch: {
58
+ x: number;
59
+ z: number;
60
+ };
61
+ /** Where the boss stands. */
62
+ bossSpawn: {
63
+ x: number;
64
+ z: number;
65
+ };
66
+ /** The arch in the shrine's wall that leads here, and where you land coming back. */
67
+ hubArch: {
68
+ x: number;
69
+ z: number;
70
+ facing: 'n' | 'e' | 'w';
71
+ };
72
+ hubArrival: {
73
+ x: number;
74
+ z: number;
75
+ };
76
+ /** The relic the boss drops, for the lift; the Final Core drops none. */
77
+ relic?: IceDepthsRelicKind;
78
+ };
79
+ export declare const ICE_DEPTHS_ROOMS: Readonly<Record<IceDepthsRoomId, IceDepthsRoom>>;
80
+ export declare const ICE_DEPTHS_ROOM_IDS: ReadonlyArray<IceDepthsRoomId>;
81
+ /** Wall margin included: rock, lighting and colouring cover the rock between the rooms. */
82
+ export declare const ICE_DEPTHS_BOUNDS: {
83
+ readonly minX: number;
84
+ readonly maxX: number;
85
+ readonly minZ: 0;
86
+ readonly maxZ: 100;
87
+ };
88
+ export declare function inIceDepths(x: number, z: number): boolean;
89
+ /** The room whose floor rectangle holds the tile, wall tiles excluded. */
90
+ export declare function iceDepthsRoomAt(x: number, z: number): IceDepthsRoomId | null;
91
+ /**
92
+ * Portal arches are rune arches whose style carries `portal-<room>` (into
93
+ * a room) or `portal-hub` (back to the shrine), after the facing letter and,
94
+ * for the lift, the `sealed` token that keeps the slab drawn:
95
+ * `w-portal-rune`, `s-portal-hub`, `n-sealed-portal-core`.
96
+ */
97
+ export declare const ICE_DEPTHS_PORTAL_TOKEN = "portal-";
98
+ export type IceDepthsPortalTarget = IceDepthsRoomId | 'hub';
99
+ export declare function iceDepthsPortalTarget(style: string | undefined): IceDepthsPortalTarget | null;
100
+ export declare function iceDepthsPortalStyle(facing: 'n' | 's' | 'e' | 'w', target: IceDepthsPortalTarget, sealed?: boolean): string;
101
+ /** The bosses, where they stand, and the scale the client draws them at (player-rig giants). */
102
+ export declare const ICE_DEPTHS_BOSS_SPAWNS: ReadonlyArray<{
103
+ kind: IceDepthsBossKind;
104
+ room: IceDepthsRoomId;
105
+ x: number;
106
+ z: number;
107
+ scale?: number;
108
+ }>;
109
+ /**
110
+ * The Depths' own dressing, one entity kind styled by token (the dreadprop
111
+ * pattern). Solid unless listed in ICE_DEPTHS_PROP_WALK_THROUGH.
112
+ *
113
+ * obelisk a black monolith with a glowing diamond rune (the ring round an arena)
114
+ * wolfstatue-<f> a stone wolf seated on a plinth, facing n/s/e/w
115
+ * coffin, coffin-ew a stone sarcophagus, lid ajar, long on z or on x
116
+ * ribcage a beast's ribcage in the ice
117
+ * throne the Lich's throne of black stone and ice on its own step
118
+ * altar a ritual altar with a skull and a lit rune
119
+ * vat-red|blue|green a great cauldron glowing that colour, steam over it
120
+ * tube a glass specimen tube on an iron base with a figure frozen in it
121
+ * pipe-ns|ew|corner a run of ice-glass pipe on iron stands (corner turns n to e)
122
+ * valve-red|blue|green a valve wheel on a pedestal
123
+ * shelf a potion shelf, bottles glowing
124
+ * bench the alchemist's bench with a burner and flasks
125
+ * grate an iron floor grate (walk-through)
126
+ * medallion the snowflake medallion set in the floor, three tiles across (walk-through)
127
+ * runecircle a glowing rune circle on the floor, three tiles across (walk-through)
128
+ * spill-red|blue|green a spill of reagent across the floor (walk-through)
129
+ * lantern-red|blue|green a lantern hung from the dark on a chain (walk-through)
130
+ * ladder a ladder up the rock face (walk-through)
131
+ * brazier-blue a pedestal brazier burning cold blue
132
+ * chest an iron-bound chest of the Warden's things
133
+ */
134
+ export declare const ICE_DEPTHS_PROP_STYLES: ReadonlyArray<string>;
135
+ /** Solid or floor, by style: see iceDepthsPropBlocks in constants.ts. */
136
+ export { iceDepthsPropBlocks };
137
+ /** The drops that are not equipment, so the guide can group them. */
138
+ export declare const ICE_DEPTHS_MATERIAL_KINDS: ReadonlyArray<EntityKind>;
139
+ //# sourceMappingURL=iceDepths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iceDepths.d.ts","sourceRoot":"","sources":["../src/iceDepths.ts"],"names":[],"mappings":"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"}