@dreadwood-types/types 0.1.124 → 0.1.126

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.
@@ -65,7 +65,128 @@ export declare const SUNDERED_SPAN: {
65
65
  readonly minZ: 934;
66
66
  readonly maxZ: 938;
67
67
  };
68
+ readonly nearLanding: {
69
+ readonly minX: 682;
70
+ readonly maxX: 685;
71
+ readonly minZ: 894;
72
+ readonly maxZ: 899;
73
+ readonly stand: {
74
+ readonly x: 683;
75
+ readonly z: 897;
76
+ };
77
+ };
78
+ readonly farLanding: {
79
+ readonly minX: 682;
80
+ readonly maxX: 685;
81
+ readonly minZ: 914;
82
+ readonly maxZ: 919;
83
+ readonly stand: {
84
+ readonly x: 683;
85
+ readonly z: 917;
86
+ };
87
+ };
88
+ readonly tildaNearSpot: {
89
+ readonly x: 683;
90
+ readonly z: 895;
91
+ };
92
+ readonly tildaFarSpot: {
93
+ readonly x: 683;
94
+ readonly z: 917;
95
+ };
96
+ readonly osmundSpot: {
97
+ readonly x: 681;
98
+ readonly z: 866;
99
+ };
100
+ readonly tollRuin: {
101
+ readonly minX: 660;
102
+ readonly maxX: 665;
103
+ readonly minZ: 860;
104
+ readonly maxZ: 864;
105
+ };
106
+ readonly osmundCamp: {
107
+ readonly minX: 684;
108
+ readonly maxX: 688;
109
+ readonly minZ: 862;
110
+ readonly maxZ: 866;
111
+ };
112
+ readonly walkwayBox: {
113
+ readonly minX: 675;
114
+ readonly maxX: 676;
115
+ readonly minZ: 901;
116
+ readonly maxZ: 912;
117
+ };
118
+ readonly gapCrossingNear: {
119
+ readonly x: 676;
120
+ readonly z: 899;
121
+ };
122
+ readonly gapCrossingFar: {
123
+ readonly x: 676;
124
+ readonly z: 914;
125
+ };
68
126
  };
127
+ export type SunderedSpanWalkwayStage = 0 | 1 | 2 | 3 | 4;
128
+ export declare const SUNDERED_SPAN_STAGES: readonly [{
129
+ readonly stage: 1;
130
+ readonly name: "Posts";
131
+ readonly model: "spanwalk1";
132
+ readonly woodworkLevel: 5;
133
+ readonly cost: readonly [{
134
+ readonly kind: "poplarwood";
135
+ readonly qty: 20;
136
+ }];
137
+ readonly woodworkXp: 500;
138
+ readonly explorerXp: 500;
139
+ readonly desc: "Erect stout timber posts on the broken bridge stubs.";
140
+ }, {
141
+ readonly stage: 2;
142
+ readonly name: "Guide Ropes";
143
+ readonly model: "spanwalk2";
144
+ readonly woodworkLevel: 8;
145
+ readonly cost: readonly [{
146
+ readonly kind: "birchwood";
147
+ readonly qty: 25;
148
+ }, {
149
+ readonly kind: "poplarwood";
150
+ readonly qty: 10;
151
+ }];
152
+ readonly woodworkXp: 750;
153
+ readonly explorerXp: 750;
154
+ readonly desc: "String guide ropes between the posts across the gap.";
155
+ }, {
156
+ readonly stage: 3;
157
+ readonly name: "Half Decking";
158
+ readonly model: "spanwalk3";
159
+ readonly woodworkLevel: 12;
160
+ readonly cost: readonly [{
161
+ readonly kind: "pinewood";
162
+ readonly qty: 15;
163
+ }, {
164
+ readonly kind: "poplarwood";
165
+ readonly qty: 10;
166
+ }];
167
+ readonly woodworkXp: 1000;
168
+ readonly explorerXp: 1000;
169
+ readonly desc: "Lash the first run of decking planks along the ropes.";
170
+ }, {
171
+ readonly stage: 4;
172
+ readonly name: "Complete Walkway";
173
+ readonly model: "spanwalk4";
174
+ readonly woodworkLevel: 12;
175
+ readonly cost: readonly [{
176
+ readonly kind: "pinewood";
177
+ readonly qty: 15;
178
+ }, {
179
+ readonly kind: "birchwood";
180
+ readonly qty: 15;
181
+ }];
182
+ readonly woodworkXp: 1500;
183
+ readonly explorerXp: 1500;
184
+ readonly desc: "Finish the decking and secure the handrails across the gap.";
185
+ }];
186
+ export declare const ROW_SPAN_ACTION = "row_span";
187
+ export declare const SPAN_WALKWAY_ACTION = "span_walkway";
188
+ export declare const SUNDERED_SPAN_ZONE_ID = "sundered-span";
189
+ export declare function isSunderedSpanGapTile(x: number, z: number): boolean;
69
190
  /**
70
191
  * Base Camp's south stair: a cut through the camp's south rim (stone, h 9), the grass ledge under it and the crag
71
192
  * band, from the camp floor to the sand at the bridgehead. Open from phase a (decision 3): it leads only to the
@@ -116,16 +237,232 @@ export declare const SOUTH_FIELDS_GATE: {
116
237
  };
117
238
  };
118
239
  /**
119
- * Closed until phase c fills the fields (crops, the mill, the fold, the geese, the three farmers): a level 1 player
120
- * walking through an empty headland would find nothing to do. Phase c sets this true and the backend opens the cut
121
- * (map.ts `openSouthFieldsGate`, the function the smoke already proves). Admins reach the fields with /tp.
240
+ * Phase c opens the cut (map.ts `openSouthFieldsGate`): wheat, apples, the fold, the mill, the hives,
241
+ * the hay wain, the jetty, the stile, and the geese, goats, sheepdog and ducks. The side quests are phase f.
242
+ */
243
+ export declare const SOUTH_FIELDS_GATE_OPEN = true;
244
+ /** The five crop plots (south.js fields.pieces). Wheat rows, soil under them, the tracks left as path. */
245
+ export declare const SOUTH_FIELDS_CROP_FIELDS: readonly SouthBox[];
246
+ /**
247
+ * Six apple trees inside the orchard's box, north of the east track. The plan's stand (82, 898) stays clear.
248
+ */
249
+ export declare const SOUTH_FIELDS_APPLES: readonly SouthPoint[];
250
+ /**
251
+ * The sheep fold, inset south of the east track so the hurdles do not close the road.
252
+ * The gap is the south gate. Two plan spots (116,918 and 134,916) sat on that track, so the flock stands inside.
253
+ */
254
+ export declare const SOUTH_FIELDS_FOLD: {
255
+ readonly minX: 112;
256
+ readonly maxX: 144;
257
+ readonly minZ: 920;
258
+ readonly maxZ: 934;
259
+ readonly gap: {
260
+ readonly x: 128;
261
+ readonly z: 934;
262
+ };
263
+ };
264
+ export declare const SOUTH_FIELDS_SHEEP: readonly SouthPoint[];
265
+ export declare const SOUTH_FIELDS_PEOPLE: readonly [{
266
+ readonly name: "Miller Hettie";
267
+ readonly x: 194;
268
+ readonly z: 926;
269
+ readonly faceX: 194;
270
+ readonly faceZ: 924;
271
+ }, {
272
+ readonly name: "Shepherd Nye";
273
+ readonly x: 128;
274
+ readonly z: 938;
275
+ readonly faceX: 128;
276
+ readonly faceZ: 936;
277
+ }, {
278
+ readonly name: "Beekeeper Wren";
279
+ readonly x: 88;
280
+ readonly z: 904;
281
+ readonly faceX: 88;
282
+ readonly faceZ: 900;
283
+ }];
284
+ export declare const SOUTH_FIELDS_SCARECROW: {
285
+ readonly x: 22;
286
+ readonly z: 920;
287
+ readonly style: "scarecrow-s";
288
+ };
289
+ export declare const SOUTH_FIELDS_HAY: readonly SouthPoint[];
290
+ /** Miller Hettie's mill (dreadmodel windmill-s, 5 x 5, the same sails as Millbrook). Anchor is the centre; the door faces south. */
291
+ export declare const SOUTH_FIELDS_WINDMILL: {
292
+ readonly x: 194;
293
+ readonly z: 920;
294
+ readonly style: "windmill-s";
295
+ };
296
+ /** Three hives east of the orchard (barrel style hive: a round skep until a hive model exists). Wren stands south of them. */
297
+ export declare const SOUTH_FIELDS_HIVES: readonly SouthPoint[];
298
+ /** The hay wain on the track south of the orchard (farmcart style carriage). The stand is the tile east of it. */
299
+ export declare const SOUTH_FIELDS_HAY_WAIN: {
300
+ readonly x: 49;
301
+ readonly z: 917;
302
+ readonly style: "carriage";
303
+ };
304
+ /**
305
+ * The little jetty off the south shore: boards, then one water tile to fish from.
306
+ * The plan's box runs to z 992; that last row stays water.
122
307
  */
123
- export declare const SOUTH_FIELDS_GATE_OPEN = false;
308
+ export declare const SOUTH_FIELDS_JETTY: {
309
+ readonly minX: 72;
310
+ readonly maxX: 75;
311
+ readonly minZ: 979;
312
+ readonly maxZ: 991;
313
+ readonly fish: {
314
+ readonly x: 73;
315
+ readonly z: 992;
316
+ };
317
+ };
318
+ /** A rowing boat alongside the jetty, off the boards. */
319
+ export declare const SOUTH_FIELDS_BOAT: {
320
+ readonly x: 76;
321
+ readonly z: 986;
322
+ readonly style: "rowboat";
323
+ };
324
+ /** A short hurdle on the west of the goat cliff, with the stile (the gap) at 160, 950. */
325
+ export declare const SOUTH_FIELDS_STILE: {
326
+ readonly x: 160;
327
+ readonly minZ: 944;
328
+ readonly maxZ: 956;
329
+ readonly gapZ: 950;
330
+ };
331
+ /** Angry geese, level 2, on the pond bank (south.js). A spot in the water is walked to the nearest bank. */
332
+ export declare const SOUTH_FIELDS_GEESE: readonly SouthPoint[];
333
+ /** Goats on the cliff. */
334
+ export declare const SOUTH_FIELDS_GOATS: readonly SouthPoint[];
335
+ /** Nye's dog, just south of the fold gate. */
336
+ export declare const SOUTH_FIELDS_SHEEPDOG: {
337
+ readonly x: 130;
338
+ readonly z: 939;
339
+ };
340
+ /** Two ducks on the pond water (south.js). They swim this pond; the bank spots were only a stand-in. */
341
+ export declare const SOUTH_FIELDS_DUCKS: readonly SouthPoint[];
124
342
  export declare const SOUTH_FIELDS_ROADS: ReadonlyArray<{
125
343
  id: string;
126
344
  pts: readonly SouthPoint[];
127
345
  }>;
128
346
  export declare function onSouthFields(x: number, z: number): boolean;
347
+ /** North-coast creatures (south.js hostiles), levels 4 to 10. Spots in the water are walked to the nearest bank. */
348
+ export declare const SUNDERED_COAST_RATS: readonly SouthPoint[];
349
+ export declare const SUNDERED_COAST_GULLS: readonly SouthPoint[];
350
+ export declare const SUNDERED_COAST_CRABS: readonly SouthPoint[];
351
+ export declare const SUNDERED_COAST_LOOKOUTS: readonly SouthPoint[];
352
+ /** Cove crew (south.js). The drowned deckhands stay out until the wreck deck exists: their spots are sea. */
353
+ export declare const SUNDERED_COAST_DECKHANDS: readonly SouthPoint[];
354
+ export declare const SUNDERED_COAST_CUTTHROATS: readonly SouthPoint[];
355
+ /** On the wreck deck (south.js). 575,1034 sits one tile off the hull, on the stern boards. */
356
+ export declare const SUNDERED_COAST_DROWNED: readonly SouthPoint[];
357
+ /** The Gull's Ransom hull (south.js). Boards, with Hope Beach's sailship as the hull. */
358
+ export declare const GULLS_RANSOM: {
359
+ readonly minX: 560;
360
+ readonly maxX: 583;
361
+ readonly minZ: 1024;
362
+ readonly maxZ: 1031;
363
+ readonly shipX: 572;
364
+ readonly shipZ: 1027;
365
+ };
366
+ /** Stilt shacks, rope walkways, the galley and the cove jetty (south.js boxes). */
367
+ export declare const SUNDERED_COAST_SHACKS: readonly [{
368
+ readonly id: "shack-1";
369
+ readonly minX: 558;
370
+ readonly maxX: 563;
371
+ readonly minZ: 996;
372
+ readonly maxZ: 1001;
373
+ readonly tentX: 560;
374
+ readonly tentZ: 998;
375
+ }, {
376
+ readonly id: "shack-2";
377
+ readonly minX: 570;
378
+ readonly maxX: 575;
379
+ readonly minZ: 996;
380
+ readonly maxZ: 1001;
381
+ readonly tentX: 572;
382
+ readonly tentZ: 998;
383
+ }, {
384
+ readonly id: "shack-3";
385
+ readonly minX: 582;
386
+ readonly maxX: 587;
387
+ readonly minZ: 1000;
388
+ readonly maxZ: 1005;
389
+ readonly tentX: 584;
390
+ readonly tentZ: 1002;
391
+ }];
392
+ export declare const SUNDERED_COAST_WALKWAYS: readonly [{
393
+ readonly id: "walkway-1";
394
+ readonly minX: 564;
395
+ readonly maxX: 569;
396
+ readonly minZ: 996;
397
+ readonly maxZ: 997;
398
+ }, {
399
+ readonly id: "walkway-2";
400
+ readonly minX: 576;
401
+ readonly maxX: 581;
402
+ readonly minZ: 998;
403
+ readonly maxZ: 1000;
404
+ }];
405
+ export declare const SUNDERED_COAST_GALLEY: {
406
+ readonly minX: 594;
407
+ readonly maxX: 600;
408
+ readonly minZ: 1008;
409
+ readonly maxZ: 1013;
410
+ readonly tentX: 597;
411
+ readonly tentZ: 1010;
412
+ };
413
+ export declare const SUNDERED_COAST_COVE_JETTY: {
414
+ readonly minX: 591;
415
+ readonly maxX: 592;
416
+ readonly minZ: 1014;
417
+ readonly maxZ: 1019;
418
+ readonly fishX: 591;
419
+ readonly fishZ: 1019;
420
+ };
421
+ /**
422
+ * Saltmark Light's stand-in: the Old Watchtower model, door south.
423
+ * Centred on z 944 so the solid 7 x 7 stops at z 947 and the rock tile 890, 948 stays walkable.
424
+ * Ada stands clear to the south-east.
425
+ */
426
+ export declare const SALTMARK_LIGHT: {
427
+ readonly x: 890;
428
+ readonly z: 944;
429
+ readonly style: "watchtower-s";
430
+ };
431
+ /** Fort Rook's bosses (south.js). The wall ring is the Deadlands fortwall. */
432
+ export declare const FORT_ROOK_GATE: {
433
+ readonly minX: 814;
434
+ readonly maxX: 821;
435
+ readonly minZ: 1004;
436
+ readonly maxZ: 1005;
437
+ };
438
+ export declare const FORT_ROOK_HARROW: {
439
+ readonly x: 832;
440
+ readonly z: 1009;
441
+ };
442
+ export declare const FORT_ROOK_ROWENA: {
443
+ readonly x: 830;
444
+ readonly z: 1024;
445
+ };
446
+ export declare const FORT_ROOK_CABIN: {
447
+ readonly x: 830;
448
+ readonly z: 1038;
449
+ };
450
+ /** Old Merrick at the cove, Keeper Ada under the light. Their buildings are not built yet. */
451
+ export declare const SUNDERED_COAST_PEOPLE: readonly [{
452
+ readonly name: "Old Merrick";
453
+ readonly x: 601;
454
+ readonly z: 1009;
455
+ readonly faceX: 594;
456
+ readonly faceZ: 1010;
457
+ }, {
458
+ readonly name: "Keeper Ada";
459
+ readonly x: 895;
460
+ readonly z: 951;
461
+ readonly faceX: 890;
462
+ readonly faceZ: 948;
463
+ }];
464
+ /** A campfire beside each of them, off the tile they stand on. */
465
+ export declare const SUNDERED_COAST_FIRES: readonly SouthPoint[];
129
466
  export declare const SOUTH_EXPANSION_ZONES: readonly [{
130
467
  readonly id: string;
131
468
  readonly label: string;
@@ -161,6 +498,13 @@ export declare const SOUTH_EXPANSION_ZONES: readonly [{
161
498
  readonly maxX: number;
162
499
  readonly minZ: number;
163
500
  readonly maxZ: number;
501
+ }, {
502
+ readonly id: string;
503
+ readonly label: string;
504
+ readonly minX: number;
505
+ readonly maxX: number;
506
+ readonly minZ: number;
507
+ readonly maxZ: number;
164
508
  }];
165
509
  /** The paper map keeps both pieces opaque (surfaceChart.ts revision 2). */
166
510
  export declare const SOUTH_EXPANSION_FOOTPRINTS: ReadonlyArray<SouthBox & {
@@ -1 +1 @@
1
- {"version":3,"file":"southExpansion.d.ts","sourceRoot":"","sources":["../src/southExpansion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"southExpansion.d.ts","sourceRoot":"","sources":["../src/southExpansion.ts"],"names":[],"mappings":"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"}
@@ -97,7 +97,65 @@ export const SUNDERED_SPAN = {
97
97
  gap: { minZ: 901, maxZ: 912 },
98
98
  farDeck: { minZ: 913, maxZ: 933 },
99
99
  gatehouse: { minZ: 934, maxZ: 938 },
100
+ nearLanding: { minX: 682, maxX: 685, minZ: 894, maxZ: 899, stand: { x: 683, z: 897 } },
101
+ farLanding: { minX: 682, maxX: 685, minZ: 914, maxZ: 919, stand: { x: 683, z: 917 } },
102
+ tildaNearSpot: { x: 683, z: 895 },
103
+ tildaFarSpot: { x: 683, z: 917 },
104
+ osmundSpot: { x: 681, z: 866 },
105
+ tollRuin: { minX: 660, maxX: 665, minZ: 860, maxZ: 864 },
106
+ osmundCamp: { minX: 684, maxX: 688, minZ: 862, maxZ: 866 },
107
+ walkwayBox: { minX: 675, maxX: 676, minZ: 901, maxZ: 912 },
108
+ gapCrossingNear: { x: 676, z: 899 },
109
+ gapCrossingFar: { x: 676, z: 914 },
100
110
  };
111
+ export const SUNDERED_SPAN_STAGES = [
112
+ {
113
+ stage: 1,
114
+ name: 'Posts',
115
+ model: 'spanwalk1',
116
+ woodworkLevel: 5,
117
+ cost: [{ kind: 'poplarwood', qty: 20 }],
118
+ woodworkXp: 500,
119
+ explorerXp: 500,
120
+ desc: 'Erect stout timber posts on the broken bridge stubs.',
121
+ },
122
+ {
123
+ stage: 2,
124
+ name: 'Guide Ropes',
125
+ model: 'spanwalk2',
126
+ woodworkLevel: 8,
127
+ cost: [{ kind: 'birchwood', qty: 25 }, { kind: 'poplarwood', qty: 10 }],
128
+ woodworkXp: 750,
129
+ explorerXp: 750,
130
+ desc: 'String guide ropes between the posts across the gap.',
131
+ },
132
+ {
133
+ stage: 3,
134
+ name: 'Half Decking',
135
+ model: 'spanwalk3',
136
+ woodworkLevel: 12,
137
+ cost: [{ kind: 'pinewood', qty: 15 }, { kind: 'poplarwood', qty: 10 }],
138
+ woodworkXp: 1000,
139
+ explorerXp: 1000,
140
+ desc: 'Lash the first run of decking planks along the ropes.',
141
+ },
142
+ {
143
+ stage: 4,
144
+ name: 'Complete Walkway',
145
+ model: 'spanwalk4',
146
+ woodworkLevel: 12,
147
+ cost: [{ kind: 'pinewood', qty: 15 }, { kind: 'birchwood', qty: 15 }],
148
+ woodworkXp: 1500,
149
+ explorerXp: 1500,
150
+ desc: 'Finish the decking and secure the handrails across the gap.',
151
+ },
152
+ ];
153
+ export const ROW_SPAN_ACTION = 'row_span';
154
+ export const SPAN_WALKWAY_ACTION = 'span_walkway';
155
+ export const SUNDERED_SPAN_ZONE_ID = 'sundered-span';
156
+ export function isSunderedSpanGapTile(x, z) {
157
+ return x >= SUNDERED_SPAN.minX && x <= SUNDERED_SPAN.maxX && z >= SUNDERED_SPAN.gap.minZ && z <= SUNDERED_SPAN.gap.maxZ;
158
+ }
101
159
  /**
102
160
  * Base Camp's south stair: a cut through the camp's south rim (stone, h 9), the grass ledge under it and the crag
103
161
  * band, from the camp floor to the sand at the bridgehead. Open from phase a (decision 3): it leads only to the
@@ -111,9 +169,23 @@ export const BRIDGEHEAD_SPURS = [
111
169
  { id: 'spur-w', minX: 640, minZ: 859, maxX: 642, maxZ: 881 },
112
170
  { id: 'spur-e', minX: 710, minZ: 859, maxX: 712, maxZ: 881 },
113
171
  ];
172
+ /**
173
+ * Walkable joins that the plan's deck rectangles do not cover: the rope walkway's last row onto shack 3,
174
+ * the gangway from the Gull's Ransom to the cove beach (one tile past the boards, onto the sand), and the
175
+ * stern step where the wreck's stand and a drowned deckhand are. They are coast, so the shore path reaches them.
176
+ */
177
+ const SUNDERED_COAST_DECK_LINKS = [
178
+ { minX: 576, maxX: 581, minZ: 1000, maxZ: 1000 },
179
+ // The shore at 582,997 meets the rope walkway at 581,998 through this one tile.
180
+ { minX: 581, maxX: 581, minZ: 997, maxZ: 997 },
181
+ { minX: 584, maxX: 595, minZ: 1029, maxZ: 1030 },
182
+ { minX: 573, maxX: 577, minZ: 1032, maxZ: 1034 },
183
+ ];
114
184
  export function onSunderedCoast(x, z) {
115
185
  if (!inSouthBox(x, z, SUNDERED_COAST_BOX))
116
186
  return false;
187
+ if (SUNDERED_COAST_DECK_LINKS.some((b) => inSouthBox(x, z, b)))
188
+ return true;
117
189
  return inSouthPolygon(x, z, SUNDERED_COAST_OUTLINE) && !inSouthPolygon(x, z, SUNDERED_COAST_COVE);
118
190
  }
119
191
  // ---------------------------------------------------------------- the South Fields
@@ -141,11 +213,73 @@ export const SOUTH_FIELDS_SAND_RIM = { minX: 0, minZ: 970, maxX: 110, maxZ: 990
141
213
  /** The farm's new gate: a cut through the crag band on its south edge, on the farm track. */
142
214
  export const SOUTH_FIELDS_GATE = { minX: 39, maxX: 41, minZ: 852, maxZ: 858, stand: { x: 40, z: 851 } };
143
215
  /**
144
- * Closed until phase c fills the fields (crops, the mill, the fold, the geese, the three farmers): a level 1 player
145
- * walking through an empty headland would find nothing to do. Phase c sets this true and the backend opens the cut
146
- * (map.ts `openSouthFieldsGate`, the function the smoke already proves). Admins reach the fields with /tp.
216
+ * Phase c opens the cut (map.ts `openSouthFieldsGate`): wheat, apples, the fold, the mill, the hives,
217
+ * the hay wain, the jetty, the stile, and the geese, goats, sheepdog and ducks. The side quests are phase f.
218
+ */
219
+ export const SOUTH_FIELDS_GATE_OPEN = true;
220
+ /** The five crop plots (south.js fields.pieces). Wheat rows, soil under them, the tracks left as path. */
221
+ export const SOUTH_FIELDS_CROP_FIELDS = [
222
+ { minX: 10, maxX: 34, minZ: 900, maxZ: 918 },
223
+ { minX: 10, maxX: 34, minZ: 922, maxZ: 940 },
224
+ { minX: 10, maxX: 34, minZ: 944, maxZ: 962 },
225
+ { minX: 46, maxX: 70, minZ: 922, maxZ: 940 },
226
+ { minX: 46, maxX: 70, minZ: 944, maxZ: 962 },
227
+ ];
228
+ /**
229
+ * Six apple trees inside the orchard's box, north of the east track. The plan's stand (82, 898) stays clear.
230
+ */
231
+ export const SOUTH_FIELDS_APPLES = [
232
+ [56, 890], [64, 890], [72, 890],
233
+ [56, 898], [64, 898], [72, 898],
234
+ ];
235
+ /**
236
+ * The sheep fold, inset south of the east track so the hurdles do not close the road.
237
+ * The gap is the south gate. Two plan spots (116,918 and 134,916) sat on that track, so the flock stands inside.
238
+ */
239
+ export const SOUTH_FIELDS_FOLD = { minX: 112, maxX: 144, minZ: 920, maxZ: 934, gap: { x: 128, z: 934 } };
240
+ export const SOUTH_FIELDS_SHEEP = [
241
+ [116, 924], [124, 926], [130, 922], [136, 922], [120, 930], [140, 928],
242
+ ];
243
+ export const SOUTH_FIELDS_PEOPLE = [
244
+ { name: 'Miller Hettie', x: 194, z: 926, faceX: 194, faceZ: 924 },
245
+ { name: 'Shepherd Nye', x: 128, z: 938, faceX: 128, faceZ: 936 },
246
+ { name: 'Beekeeper Wren', x: 88, z: 904, faceX: 88, faceZ: 900 },
247
+ ];
248
+ export const SOUTH_FIELDS_SCARECROW = { x: 22, z: 920, style: 'scarecrow-s' };
249
+ export const SOUTH_FIELDS_HAY = [[16, 919], [28, 919]];
250
+ /** Miller Hettie's mill (dreadmodel windmill-s, 5 x 5, the same sails as Millbrook). Anchor is the centre; the door faces south. */
251
+ export const SOUTH_FIELDS_WINDMILL = { x: 194, z: 920, style: 'windmill-s' };
252
+ /** Three hives east of the orchard (barrel style hive: a round skep until a hive model exists). Wren stands south of them. */
253
+ export const SOUTH_FIELDS_HIVES = [
254
+ [86, 897],
255
+ [88, 899],
256
+ [90, 898],
257
+ ];
258
+ /** The hay wain on the track south of the orchard (farmcart style carriage). The stand is the tile east of it. */
259
+ export const SOUTH_FIELDS_HAY_WAIN = { x: 49, z: 917, style: 'carriage' };
260
+ /**
261
+ * The little jetty off the south shore: boards, then one water tile to fish from.
262
+ * The plan's box runs to z 992; that last row stays water.
147
263
  */
148
- export const SOUTH_FIELDS_GATE_OPEN = false;
264
+ export const SOUTH_FIELDS_JETTY = { minX: 72, maxX: 75, minZ: 979, maxZ: 991, fish: { x: 73, z: 992 } };
265
+ /** A rowing boat alongside the jetty, off the boards. */
266
+ export const SOUTH_FIELDS_BOAT = { x: 76, z: 986, style: 'rowboat' };
267
+ /** A short hurdle on the west of the goat cliff, with the stile (the gap) at 160, 950. */
268
+ export const SOUTH_FIELDS_STILE = { x: 160, minZ: 944, maxZ: 956, gapZ: 950 };
269
+ /** Angry geese, level 2, on the pond bank (south.js). A spot in the water is walked to the nearest bank. */
270
+ export const SOUTH_FIELDS_GEESE = [
271
+ [112, 948], [126, 945], [140, 952], [142, 962], [122, 968], [108, 960],
272
+ ];
273
+ /** Goats on the cliff. */
274
+ export const SOUTH_FIELDS_GOATS = [
275
+ [168, 944], [180, 952], [192, 946], [176, 958], [196, 956],
276
+ ];
277
+ /** Nye's dog, just south of the fold gate. */
278
+ export const SOUTH_FIELDS_SHEEPDOG = { x: 130, z: 939 };
279
+ /** Two ducks on the pond water (south.js). They swim this pond; the bank spots were only a stand-in. */
280
+ export const SOUTH_FIELDS_DUCKS = [
281
+ [120, 955], [132, 958],
282
+ ];
149
283
  export const SOUTH_FIELDS_ROADS = [
150
284
  { id: 'track', pts: [[40, 859], [40, 905], [40, 920], [40, 966], [56, 972], [73, 977]] },
151
285
  { id: 'east-track', pts: [[40, 905], [60, 912], [100, 908], [150, 910], [190, 916], [194, 917]] },
@@ -164,7 +298,71 @@ export function onSouthFields(x, z) {
164
298
  * sand, which the south stair already reaches, and a player should not discover a bridge that is not built.
165
299
  */
166
300
  const zone = (id, label, minX, minZ, maxX, maxZ) => ({ id, label, minX, maxX, minZ: toLocalZ(minZ), maxZ: toLocalZ(maxZ) });
301
+ /** North-coast creatures (south.js hostiles), levels 4 to 10. Spots in the water are walked to the nearest bank. */
302
+ export const SUNDERED_COAST_RATS = [
303
+ [668, 868], [688, 869], [672, 866], [686, 862],
304
+ [684, 917], [666, 936], [688, 936],
305
+ // On the Gull's Ransom deck (the hull box). They were sea until that deck was laid.
306
+ [570, 1026], [578, 1028],
307
+ ];
308
+ export const SUNDERED_COAST_GULLS = [
309
+ [588, 937], [620, 926], [740, 920], [800, 928], [866, 927], [900, 936],
310
+ ];
311
+ export const SUNDERED_COAST_CRABS = [
312
+ [590, 934], [596, 932], [610, 930], [630, 928], [650, 928],
313
+ [704, 925], [730, 922], [760, 924], [790, 928], [820, 926], [846, 924], [600, 1038],
314
+ ];
315
+ export const SUNDERED_COAST_LOOKOUTS = [
316
+ [668, 940], [684, 940], [676, 950], [700, 962], [850, 954],
317
+ ];
318
+ /** Cove crew (south.js). The drowned deckhands stay out until the wreck deck exists: their spots are sea. */
319
+ export const SUNDERED_COAST_DECKHANDS = [
320
+ [560, 991], [572, 991], [581, 995], [601, 1006], [601, 1013], [600, 1020],
321
+ ];
322
+ export const SUNDERED_COAST_CUTTHROATS = [
323
+ [605, 978], [608, 992], [602, 1036], [790, 1000], [812, 992], [826, 1000],
324
+ ];
325
+ /** On the wreck deck (south.js). 575,1034 sits one tile off the hull, on the stern boards. */
326
+ export const SUNDERED_COAST_DROWNED = [
327
+ [566, 1030], [575, 1034], [582, 1030],
328
+ ];
329
+ /** The Gull's Ransom hull (south.js). Boards, with Hope Beach's sailship as the hull. */
330
+ export const GULLS_RANSOM = { minX: 560, maxX: 583, minZ: 1024, maxZ: 1031, shipX: 572, shipZ: 1027 };
331
+ /** Stilt shacks, rope walkways, the galley and the cove jetty (south.js boxes). */
332
+ export const SUNDERED_COAST_SHACKS = [
333
+ { id: 'shack-1', minX: 558, maxX: 563, minZ: 996, maxZ: 1001, tentX: 560, tentZ: 998 },
334
+ { id: 'shack-2', minX: 570, maxX: 575, minZ: 996, maxZ: 1001, tentX: 572, tentZ: 998 },
335
+ { id: 'shack-3', minX: 582, maxX: 587, minZ: 1000, maxZ: 1005, tentX: 584, tentZ: 1002 },
336
+ ];
337
+ export const SUNDERED_COAST_WALKWAYS = [
338
+ { id: 'walkway-1', minX: 564, maxX: 569, minZ: 996, maxZ: 997 },
339
+ // south.js ends this one at z 999. z 1000 is the join onto shack 3, and it counts as coast (the deck links).
340
+ { id: 'walkway-2', minX: 576, maxX: 581, minZ: 998, maxZ: 1000 },
341
+ ];
342
+ export const SUNDERED_COAST_GALLEY = { minX: 594, maxX: 600, minZ: 1008, maxZ: 1013, tentX: 597, tentZ: 1010 };
343
+ export const SUNDERED_COAST_COVE_JETTY = { minX: 591, maxX: 592, minZ: 1014, maxZ: 1019, fishX: 591, fishZ: 1019 };
344
+ /**
345
+ * Saltmark Light's stand-in: the Old Watchtower model, door south.
346
+ * Centred on z 944 so the solid 7 x 7 stops at z 947 and the rock tile 890, 948 stays walkable.
347
+ * Ada stands clear to the south-east.
348
+ */
349
+ export const SALTMARK_LIGHT = { x: 890, z: 944, style: 'watchtower-s' };
350
+ /** Fort Rook's bosses (south.js). The wall ring is the Deadlands fortwall. */
351
+ export const FORT_ROOK_GATE = { minX: 814, maxX: 821, minZ: 1004, maxZ: 1005 };
352
+ export const FORT_ROOK_HARROW = { x: 832, z: 1009 };
353
+ export const FORT_ROOK_ROWENA = { x: 830, z: 1024 };
354
+ export const FORT_ROOK_CABIN = { x: 830, z: 1038 };
355
+ /** Old Merrick at the cove, Keeper Ada under the light. Their buildings are not built yet. */
356
+ export const SUNDERED_COAST_PEOPLE = [
357
+ { name: 'Old Merrick', x: 601, z: 1009, faceX: 594, faceZ: 1010 },
358
+ { name: 'Keeper Ada', x: 895, z: 951, faceX: 890, faceZ: 948 },
359
+ ];
360
+ /** A campfire beside each of them, off the tile they stand on. */
361
+ export const SUNDERED_COAST_FIRES = [
362
+ [603, 1009], [896, 952],
363
+ ];
167
364
  export const SOUTH_EXPANSION_ZONES = [
365
+ zone('sundered-span', 'The Sundered Span', 660, 859, 692, 940),
168
366
  zone('blackwake-cove', 'Blackwake Cove', 548, 976, 614, 1046),
169
367
  zone('fort-rook', 'Fort Rook', 756, 990, 910, 1056),
170
368
  zone('saltmark-light', 'Saltmark Light', 866, 925, 914, 982),