@dreadwood-types/types 0.1.128 → 0.1.130

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 (55) hide show
  1. package/dist/animation.d.ts.map +1 -1
  2. package/dist/animation.js +11 -0
  3. package/dist/animation.js.map +1 -1
  4. package/dist/attackableNpcs.d.ts.map +1 -1
  5. package/dist/attackableNpcs.js +11 -0
  6. package/dist/attackableNpcs.js.map +1 -1
  7. package/dist/blackwakeCoast.d.ts +55 -0
  8. package/dist/blackwakeCoast.d.ts.map +1 -0
  9. package/dist/blackwakeCoast.js +86 -0
  10. package/dist/blackwakeCoast.js.map +1 -0
  11. package/dist/blackwakeFort.d.ts +41 -0
  12. package/dist/blackwakeFort.d.ts.map +1 -0
  13. package/dist/blackwakeFort.js +142 -0
  14. package/dist/blackwakeFort.js.map +1 -0
  15. package/dist/blackwakeGate.d.ts +37 -0
  16. package/dist/blackwakeGate.d.ts.map +1 -0
  17. package/dist/blackwakeGate.js +38 -0
  18. package/dist/blackwakeGate.js.map +1 -0
  19. package/dist/bossSignatures.d.ts +1 -1
  20. package/dist/bossSignatures.d.ts.map +1 -1
  21. package/dist/bossSignatures.js +14 -0
  22. package/dist/bossSignatures.js.map +1 -1
  23. package/dist/constants.d.ts +56 -2
  24. package/dist/constants.d.ts.map +1 -1
  25. package/dist/constants.js +61 -1
  26. package/dist/constants.js.map +1 -1
  27. package/dist/equipment.d.ts.map +1 -1
  28. package/dist/equipment.js +7 -3
  29. package/dist/equipment.js.map +1 -1
  30. package/dist/groundItems.d.ts.map +1 -1
  31. package/dist/groundItems.js +1 -0
  32. package/dist/groundItems.js.map +1 -1
  33. package/dist/gullsRansom.d.ts +36 -0
  34. package/dist/gullsRansom.d.ts.map +1 -0
  35. package/dist/gullsRansom.js +54 -0
  36. package/dist/gullsRansom.js.map +1 -0
  37. package/dist/index.d.ts +4 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +4 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/landmarks.d.ts.map +1 -1
  42. package/dist/landmarks.js +5 -0
  43. package/dist/landmarks.js.map +1 -1
  44. package/dist/seaLanes.d.ts +21 -0
  45. package/dist/seaLanes.d.ts.map +1 -1
  46. package/dist/seaLanes.js +43 -0
  47. package/dist/seaLanes.js.map +1 -1
  48. package/dist/southExpansion.d.ts +231 -4
  49. package/dist/southExpansion.d.ts.map +1 -1
  50. package/dist/southExpansion.js +157 -4
  51. package/dist/southExpansion.js.map +1 -1
  52. package/dist/woodwork.d.ts.map +1 -1
  53. package/dist/woodwork.js +10 -0
  54. package/dist/woodwork.js.map +1 -1
  55. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAC3H,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;AACjH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,qBAAqB,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAQtG,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,qBAAqB,CASjF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAOtE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAGxE"}
1
+ {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAC3H,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;AACjH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,qBAAqB,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAQtG,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,qBAAqB,CASjF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CActE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAGxE"}
package/dist/animation.js CHANGED
@@ -29,6 +29,17 @@ export function attackFamilyForNpc(kind) {
29
29
  return 'bow_shot';
30
30
  if (kind === 'soldier' || kind === 'amazon')
31
31
  return 'thrust';
32
+ // Fort Rook: Bosun Harrow's boarding axe comes down overhead; Captain Rowena slashes with her cutlasses.
33
+ if (kind === 'bosunharrow')
34
+ return 'overhead';
35
+ if (kind === 'captainrowena')
36
+ return 'light_swing';
37
+ // The Blackwake crew in their Blender kit (2026-10-07): cutlasses slash, the Lookout's short bow is drawn and
38
+ // loosed (the client's draw animation only: its blow is still the melee roll it always was, no arrow flies).
39
+ if (kind === 'blackwakedeckhand' || kind === 'cutthroat')
40
+ return 'light_swing';
41
+ if (kind === 'lookout')
42
+ return 'bow_shot';
32
43
  if (['liv', 'grem', 'redcap', 'ironjawogre', 'ironjawchief'].includes(kind))
33
44
  return 'heavy_swing';
34
45
  if (['icelich', 'frostalchemist'].includes(kind))
@@ -1 +1 @@
1
- {"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAA6E;IACzG,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC1C,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAChD,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAChD,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC3C,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC7C,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC7C,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;CAC3C,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,IAAoB;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,OAAO,CAAC;IACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC;IAChG,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC;IACzG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,aAAa,CAAC;IACxJ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,aAAa,CAAC;IACvG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC;IACxE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAClG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACjE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAC5I,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAA6B;IAC9D,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,YAAY;QAAE,OAAO,CAAC,CAAC;IACzD,OAAO,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAA6E;IACzG,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC1C,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAChD,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAChD,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC3C,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC7C,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IAC7C,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;CAC3C,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,IAAoB;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,OAAO,CAAC;IACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC;IAChG,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC;IACzG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,aAAa,CAAC;IACxJ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,aAAa,CAAC;IACvG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC;IACxE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7D,yGAAyG;IACzG,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,UAAU,CAAC;IAC9C,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,aAAa,CAAC;IACnD,8GAA8G;IAC9G,6GAA6G;IAC7G,IAAI,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,aAAa,CAAC;IAC/E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAClG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACjE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAC5I,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAA6B;IAC9D,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,YAAY;QAAE,OAAO,CAAC,CAAC;IACzD,OAAO,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACrG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"attackableNpcs.d.ts","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAkEpD,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"attackableNpcs.d.ts","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,OAAO,CA6EpD,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -14,6 +14,17 @@ export const ATTACKABLE_NPC_KINDS = new Set([
14
14
  'greencrab',
15
15
  'seagull',
16
16
  'chicken',
17
+ // The South Fields' pond (southExpansion.ts): level 2, they hiss and they bite.
18
+ 'goose',
19
+ 'gull',
20
+ 'shellback',
21
+ 'wreckrat',
22
+ 'lookout',
23
+ 'blackwakedeckhand',
24
+ 'cutthroat',
25
+ 'drowneddeckhand',
26
+ 'bosunharrow',
27
+ 'captainrowena',
17
28
  'rabbit',
18
29
  // Only the wild flock. The pen sheep at No Harm Farm are not a target,
19
30
  // which is the whole reason wildsheep is its own kind.
@@ -1 +1 @@
1
- {"version":3,"file":"attackableNpcs.js","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAyB,IAAI,GAAG,CAAU;IACzE,OAAO;IACP,MAAM;IACN,uEAAuE;IACvE,8BAA8B;IAC9B,WAAW;IACX,SAAS;IACT,SAAS;IACT,QAAQ;IACR,uEAAuE;IACvE,uDAAuD;IACvD,WAAW;IACX,UAAU;IACV,MAAM;IACN,KAAK;IACL,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,OAAO;IACP,UAAU;IACV,iBAAiB;IACjB,QAAQ;IACR,cAAc;IACd,UAAU;IACV,QAAQ;IACR,KAAK;IACL,KAAK;IACL,MAAM;IACN,WAAW;IACX,QAAQ;IACR,iEAAiE;IACjE,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,UAAU;IACV,2DAA2D;IAC3D,aAAa;IACb,eAAe;IACf,SAAS;IACT,gBAAgB;IAChB,iBAAiB;IACjB,iEAAiE;IACjE,UAAU;IACV,0CAA0C;IAC1C,iBAAiB;IACjB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,oBAAoB;IACpB,sEAAsE;IACtE,UAAU;IACV,aAAa;IACb,kDAAkD;IAClD,aAAa;IACb,cAAc;IACd,6EAA6E;IAC7E,+CAA+C;IAC/C,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,8DAA8D;IAC9D,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAe,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"attackableNpcs.js","sourceRoot":"","sources":["../src/attackableNpcs.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAyB,IAAI,GAAG,CAAU;IACzE,OAAO;IACP,MAAM;IACN,uEAAuE;IACvE,8BAA8B;IAC9B,WAAW;IACX,SAAS;IACT,SAAS;IACT,gFAAgF;IAChF,OAAO;IACP,MAAM;IACN,WAAW;IACX,UAAU;IACV,SAAS;IACT,mBAAmB;IACnB,WAAW;IACX,iBAAiB;IACjB,aAAa;IACb,eAAe;IACf,QAAQ;IACR,uEAAuE;IACvE,uDAAuD;IACvD,WAAW;IACX,UAAU;IACV,MAAM;IACN,KAAK;IACL,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,OAAO;IACP,UAAU;IACV,iBAAiB;IACjB,QAAQ;IACR,cAAc;IACd,UAAU;IACV,QAAQ;IACR,KAAK;IACL,KAAK;IACL,MAAM;IACN,WAAW;IACX,QAAQ;IACR,iEAAiE;IACjE,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,UAAU;IACV,2DAA2D;IAC3D,aAAa;IACb,eAAe;IACf,SAAS;IACT,gBAAgB;IAChB,iBAAiB;IACjB,iEAAiE;IACjE,UAAU;IACV,0CAA0C;IAC1C,iBAAiB;IACjB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,oBAAoB;IACpB,sEAAsE;IACtE,UAAU;IACV,aAAa;IACb,kDAAkD;IAClD,aAAa;IACb,cAAc;IACd,6EAA6E;IAC7E,+CAA+C;IAC/C,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,8DAA8D;IAC9D,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAe,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The Blackwake cove's stilt shanties, rope walkways, galley, shore steps and jetty (Blender kits
3
+ * blackwakeshacka/b, blackwakewalk, blackwakecorner, blackwakegalley, blackwakeshoresteps and
4
+ * blackwakejettyshort). Every number was measured from the exported GLBs with
5
+ * dreadwoods-backend/quest-workshop/scripts/glb-tile-mask.mjs, in the model's own frame
6
+ * (x east, z south, the root tile at 0,0), and is rotated by the style's facing like any building.
7
+ * Heights are physical metres above the water datum; terrainForPhysicalMetres turns them into terrain units.
8
+ */
9
+ export type CoastFloor = Readonly<{
10
+ dx: number;
11
+ dz: number;
12
+ metres: number;
13
+ }>;
14
+ export type CoastPart = Readonly<{
15
+ id: string;
16
+ model: string;
17
+ x: number;
18
+ z: number;
19
+ style: string;
20
+ }>;
21
+ export type CoastModelLocal = Readonly<{
22
+ floors: ReadonlyArray<CoastFloor>;
23
+ blocked: ReadonlyArray<readonly [number, number]>;
24
+ /** The room under the roof: the roof lifts for anyone standing on these tiles. */
25
+ interior: ReadonlyArray<readonly [number, number]>;
26
+ /** Blocked tiles when the style carries the token `closed` (a wall walk nobody can reach, shut off rather than left standable). */
27
+ closedBlocked?: ReadonlyArray<readonly [number, number]>;
28
+ }>;
29
+ export declare const COAST_DECK_METRES = 3;
30
+ export declare const BLACKWAKE_COAST_MODELS: Readonly<Record<string, CoastModelLocal>>;
31
+ /** Where each piece stands. A shanty turned north faces the shore it is climbed from. */
32
+ export declare const BLACKWAKE_COAST_PARTS: ReadonlyArray<CoastPart>;
33
+ /** Every floor tile of a placed piece (its local spec turned to the style's facing), in world tiles, with its exact height. */
34
+ export declare function placedFloors(part: CoastPart, local: CoastModelLocal): Array<{
35
+ x: number;
36
+ z: number;
37
+ metres: number;
38
+ }>;
39
+ export declare function coastPartFloors(part: CoastPart): Array<{
40
+ x: number;
41
+ z: number;
42
+ metres: number;
43
+ }>;
44
+ /** All floor tiles of the cove. A later piece wins a shared tile. */
45
+ export declare const BLACKWAKE_COAST_FLOORS: ReadonlyArray<{
46
+ x: number;
47
+ z: number;
48
+ metres: number;
49
+ }>;
50
+ /** The cove's fishing tile stays open water at the end of the jetty. */
51
+ export declare const COVE_JETTY_FISH: {
52
+ readonly x: 591;
53
+ readonly z: 1019;
54
+ };
55
+ //# sourceMappingURL=blackwakeCoast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackwakeCoast.d.ts","sourceRoot":"","sources":["../src/blackwakeCoast.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC9E,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACrG,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,kFAAkF;IAClF,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,mIAAmI;IACnI,aAAa,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AA2BnC,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAc5E,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,SAAS,CAa1D,CAAC;AAUF,+HAA+H;AAC/H,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAMrH;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAEhG;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIvF,CAAC;AAEL,wEAAwE;AACxE,eAAO,MAAM,eAAe;;;CAA+B,CAAC"}
@@ -0,0 +1,86 @@
1
+ export const COAST_DECK_METRES = 3;
2
+ const rect = (x0, x1, z0, z1) => {
3
+ const out = [];
4
+ for (let z = z0; z <= z1; z++)
5
+ for (let x = x0; x <= x1; x++)
6
+ out.push([x, z]);
7
+ return out;
8
+ };
9
+ const deck = (x0, x1, z0, z1, metres = COAST_DECK_METRES) => rect(x0, x1, z0, z1).map(([dx, dz]) => ({ dx, dz, metres }));
10
+ const without = (tiles, drop) => tiles.filter(([x, z]) => !drop.some(([dx, dz]) => dx === x && dz === z));
11
+ /** A shanty: a 6 x 6 deck, a tarred 6 x 4 shell with one door tile on the porch side, a 4 x 2 room under the roof. */
12
+ const SHACK_ROOM = rect(-1, 2, -1, 0);
13
+ const SHACK = {
14
+ floors: deck(-2, 3, -2, 3),
15
+ blocked: without(rect(-2, 3, -2, 1), [...SHACK_ROOM, [1, 1]]),
16
+ interior: [...SHACK_ROOM, [1, 1]],
17
+ };
18
+ /** The galley: a 7 x 6 deck, a 7 x 4 shell with a two-tile door and the serving hatch on its east wall. */
19
+ const GALLEY_ROOM = rect(-2, 2, -1, 0);
20
+ const GALLEY = {
21
+ floors: deck(-3, 3, -2, 3),
22
+ blocked: without(rect(-3, 3, -2, 1), [...GALLEY_ROOM, [0, 1], [1, 1]]),
23
+ interior: [...GALLEY_ROOM, [0, 1], [1, 1]],
24
+ };
25
+ export const BLACKWAKE_COAST_MODELS = {
26
+ blackwakeshacka: SHACK,
27
+ blackwakeshackb: SHACK,
28
+ blackwakegalley: GALLEY,
29
+ /** The straight walk, shifted half a tile by the build so its 6 x 2 deck sits on whole tiles. */
30
+ blackwakewalk: { floors: deck(-2, 3, 0, 1), blocked: [], interior: [] },
31
+ blackwakecorner: { floors: deck(-1, 2, -1, 2), blocked: [], interior: [] },
32
+ blackwakejettyshort: { floors: deck(0, 1, -1, 2), blocked: [], interior: [] },
33
+ /** Two treads wide, four long, rising south: .45, 1.3, 2.15 and 3 m (each rise .85 m, under the .9 m step limit). */
34
+ blackwakeshoresteps: {
35
+ floors: [-1, 0, 1, 2].flatMap((dz, i) => [0, 1].map((dx) => ({ dx, dz, metres: [0.45, 1.3, 2.15, 3][i] }))),
36
+ blocked: [],
37
+ interior: [],
38
+ },
39
+ };
40
+ /** Where each piece stands. A shanty turned north faces the shore it is climbed from. */
41
+ export const BLACKWAKE_COAST_PARTS = [
42
+ { id: 'shack-1', model: 'blackwakeshacka', x: 561, z: 999, style: 'blackwakeshacka-n' },
43
+ { id: 'shack-2', model: 'blackwakeshackb', x: 573, z: 999, style: 'blackwakeshackb-n' },
44
+ { id: 'shack-3', model: 'blackwakeshacka', x: 584, z: 1002, style: 'blackwakeshacka-s' },
45
+ { id: 'shoresteps-1', model: 'blackwakeshoresteps', x: 560, z: 994, style: 'blackwakeshoresteps-s' },
46
+ { id: 'shoresteps-2', model: 'blackwakeshoresteps', x: 572, z: 994, style: 'blackwakeshoresteps-s' },
47
+ { id: 'walkway-1', model: 'blackwakewalk', x: 566, z: 996, style: 'blackwakewalk-s' },
48
+ { id: 'walkway-2', model: 'blackwakewalk', x: 578, z: 996, style: 'blackwakewalk-s' },
49
+ { id: 'galley', model: 'blackwakegalley', x: 597, z: 1010, style: 'blackwakegalley-s' },
50
+ { id: 'galley-porch', model: 'blackwakewalk', x: 601, z: 1008, style: 'blackwakewalk-e' },
51
+ { id: 'galley-steps', model: 'blackwakeshoresteps', x: 602, z: 1013, style: 'blackwakeshoresteps-n' },
52
+ { id: 'cove-corner', model: 'blackwakecorner', x: 592, z: 1012, style: 'blackwakecorner-s' },
53
+ { id: 'cove-jetty', model: 'blackwakejettyshort', x: 591, z: 1016, style: 'blackwakejettyshort-s' },
54
+ ];
55
+ function turn(lx, lz, facing) {
56
+ if (facing === 'n')
57
+ return [-lx, -lz];
58
+ if (facing === 'e')
59
+ return [lz, -lx];
60
+ if (facing === 'w')
61
+ return [-lz, lx];
62
+ return [lx, lz];
63
+ }
64
+ const facingOf = (style) => style.slice(style.lastIndexOf('-') + 1);
65
+ /** Every floor tile of a placed piece (its local spec turned to the style's facing), in world tiles, with its exact height. */
66
+ export function placedFloors(part, local) {
67
+ const facing = facingOf(part.style);
68
+ return local.floors.map((f) => {
69
+ const [dx, dz] = turn(f.dx, f.dz, facing);
70
+ return { x: part.x + dx, z: part.z + dz, metres: f.metres };
71
+ });
72
+ }
73
+ export function coastPartFloors(part) {
74
+ return placedFloors(part, BLACKWAKE_COAST_MODELS[part.model]);
75
+ }
76
+ /** All floor tiles of the cove. A later piece wins a shared tile. */
77
+ export const BLACKWAKE_COAST_FLOORS = (() => {
78
+ const seen = new Map();
79
+ for (const part of BLACKWAKE_COAST_PARTS)
80
+ for (const f of coastPartFloors(part))
81
+ seen.set(`${f.x},${f.z}`, f);
82
+ return [...seen.values()];
83
+ })();
84
+ /** The cove's fishing tile stays open water at the end of the jetty. */
85
+ export const COVE_JETTY_FISH = { x: 591, z: 1019 };
86
+ //# sourceMappingURL=blackwakeCoast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackwakeCoast.js","sourceRoot":"","sources":["../src/blackwakeCoast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type CoastModelLocal, type CoastPart } from './blackwakeCoast.js';
2
+ /**
3
+ * Fort Rook's wall ring, gate, towers, ruined east ends, stairs and cabin, and Saltmark Light (Blender kits fortrook*,
4
+ * saltmarklight). As blackwakeCoast.ts: every tile was measured from the exported GLBs with
5
+ * dreadwoods-backend/quest-workshop/scripts/glb-tile-mask.mjs, in the model's own frame (x east, z south), after the
6
+ * half-tile shift glb-shift.mjs gives the even-sized kits so their decks sit on whole tiles.
7
+ *
8
+ * Physical heights (metres above the water datum, 0.45 m a terrain unit): fort ground 3.6, wall walk 7.3, cabin floor 4.2.
9
+ * The towers are drawn and solid: their platform is 3.7 m above the wall walks' inner strip and no door of theirs meets one.
10
+ */
11
+ export declare const FORT_GROUND_METRES = 3.6;
12
+ export declare const FORT_WALK_METRES = 7.3;
13
+ export declare const FORT_CABIN_METRES = 4.2;
14
+ /** The anchor tread of the main stair run (x 810-813): ground + 1.5 m, half-way up its four 0.75 m rises. */
15
+ export declare const FORT_STEPS_TREADS: readonly [0.75, 1.5, 2.25, 3];
16
+ export declare const FORT_STEPCAP_TREADS: readonly [0.262, 0.613];
17
+ export declare const BLACKWAKE_FORT_MODELS: Readonly<Record<string, CoastModelLocal>>;
18
+ export declare const FORT_ROOK_GATE_ROOT: {
19
+ readonly x: 818;
20
+ readonly z: 1005;
21
+ readonly facing: "n";
22
+ };
23
+ export declare const BLACKWAKE_FORT_PARTS: ReadonlyArray<CoastPart>;
24
+ /**
25
+ * The yard's dressing, on the fort ground (3.6 m) and off every route: the awning on the yard's east side, the hoarding
26
+ * along the inside of the north wall east of Harrow, and a banner either side of the gate lane's inside end, each pole and
27
+ * flag in front of a gate jamb, off the lane. Kept clear (the south smoke checks it): the gate lane
28
+ * x 816-819, the courtyard stair, the cabin stand and porch, the breach, both bosses' leash boxes and the melee ring round
29
+ * them, and every coast NPC home.
30
+ */
31
+ export declare const FORT_ROOK_DRESSING_PARTS: ReadonlyArray<CoastPart>;
32
+ /** Every tile a placed piece's mask blocks (its local mask turned to the style's facing), in world tiles. */
33
+ export declare function placedBlocked(p: CoastPart, local: CoastModelLocal): Array<readonly [number, number]>;
34
+ export declare const SALTMARK_LIGHT_PART: CoastPart;
35
+ /** Every floor tile of the fort: the wall walks, the stair and the cabin deck. A later piece wins a shared tile. */
36
+ export declare const BLACKWAKE_FORT_FLOORS: ReadonlyArray<{
37
+ x: number;
38
+ z: number;
39
+ metres: number;
40
+ }>;
41
+ //# sourceMappingURL=blackwakeFort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackwakeFort.d.ts","sourceRoot":"","sources":["../src/blackwakeFort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEzF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB,+BAAgC,CAAC;AAC/D,eAAO,MAAM,mBAAmB,yBAA0B,CAAC;AAO3D,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA+C3E,CAAC;AAuBF,eAAO,MAAM,mBAAmB;;;;CAA4C,CAAC;AAE7E,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,SAAS,CAsBzD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAAC,SAAS,CAO7D,CAAC;AAEF,6GAA6G;AAC7G,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEpG;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAkE,CAAC;AAErG,oHAAoH;AACpH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAItF,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { placedFloors } from './blackwakeCoast.js';
2
+ /**
3
+ * Fort Rook's wall ring, gate, towers, ruined east ends, stairs and cabin, and Saltmark Light (Blender kits fortrook*,
4
+ * saltmarklight). As blackwakeCoast.ts: every tile was measured from the exported GLBs with
5
+ * dreadwoods-backend/quest-workshop/scripts/glb-tile-mask.mjs, in the model's own frame (x east, z south), after the
6
+ * half-tile shift glb-shift.mjs gives the even-sized kits so their decks sit on whole tiles.
7
+ *
8
+ * Physical heights (metres above the water datum, 0.45 m a terrain unit): fort ground 3.6, wall walk 7.3, cabin floor 4.2.
9
+ * The towers are drawn and solid: their platform is 3.7 m above the wall walks' inner strip and no door of theirs meets one.
10
+ */
11
+ export const FORT_GROUND_METRES = 3.6;
12
+ export const FORT_WALK_METRES = 7.3;
13
+ export const FORT_CABIN_METRES = 4.2;
14
+ /** The anchor tread of the main stair run (x 810-813): ground + 1.5 m, half-way up its four 0.75 m rises. */
15
+ export const FORT_STEPS_TREADS = [0.75, 1.5, 2.25, 3];
16
+ export const FORT_STEPCAP_TREADS = [0.262, 0.613];
17
+ const range = (a, b) => Array.from({ length: b - a + 1 }, (_, i) => a + i);
18
+ const tiles = (xs, zs) => zs.flatMap((z) => xs.map((x) => [x, z]));
19
+ const WALK = (x0, x1) => range(x0, x1).map((dx) => ({ dx, dz: 0, metres: FORT_WALK_METRES }));
20
+ export const BLACKWAKE_FORT_MODELS = {
21
+ /** An 8 x 2 wall: the inner row is the 7.3 m walk, the outer row the battlement. */
22
+ fortrookwall: { floors: WALK(-3, 4), blocked: tiles(range(-3, 4), [1]), interior: [], closedBlocked: tiles(range(-3, 4), [0, 1]) },
23
+ fortrookwallshort: { floors: WALK(0, 1), blocked: tiles(range(0, 1), [1]), interior: [], closedBlocked: tiles(range(0, 1), [0, 1]) },
24
+ /** A corner tower: its root tile carries the platform height (so the drawing sits right); every tile of it is solid. */
25
+ fortrooktower: { floors: [{ dx: 0, dz: 0, metres: FORT_WALK_METRES }], blocked: tiles(range(-2, 3), range(-2, 3)), interior: [] },
26
+ /** The gate: two jambs of two tiles, four open tiles at ground between them. */
27
+ fortrookgateopen: { floors: [], blocked: tiles([-3, -2, 3, 4], [0, 1]), interior: [] },
28
+ fortrookruin: { floors: [], blocked: tiles(range(-1, 2), [0, 1]), interior: [] },
29
+ fortrooksteps: {
30
+ floors: range(-1, 2).flatMap((dx) => [0, 1].map((dz) => ({ dx, dz, metres: FORT_GROUND_METRES + FORT_STEPS_TREADS[dx + 1] }))),
31
+ blocked: [],
32
+ interior: [],
33
+ },
34
+ fortrookstepcap: {
35
+ floors: range(0, 1).flatMap((dx) => [0, 1].map((dz) => ({ dx, dz, metres: FORT_GROUND_METRES + 3 + FORT_STEPCAP_TREADS[dx] }))),
36
+ blocked: [],
37
+ interior: [],
38
+ },
39
+ /**
40
+ * The captain's cabin: a 17 x 6 forecourt deck at 4.2 m, three porch-step tiles at 4.0 m on its front edge, a stern
41
+ * shell (11 x 4 tiles inside a ring) with one doorway on the front wall at the centre.
42
+ */
43
+ fortrookcabin: {
44
+ floors: tiles(range(-8, 8), range(-2, 3)).map(([dx, dz]) => ({ dx, dz, metres: dz === -2 && Math.abs(dx) <= 1 ? 4.0 : FORT_CABIN_METRES })),
45
+ blocked: tiles(range(-6, 6), range(0, 3)).filter(([x, z]) => !(Math.abs(x) <= 5 && z >= 1 && z <= 2) && !(x === 0 && z === 0)),
46
+ interior: [...tiles(range(-5, 5), [1, 2]), [0, 0]],
47
+ },
48
+ /**
49
+ * Saltmark Light: a rock-ringed tower 9 tiles wide and 7 deep, solid but for the south door's two steps
50
+ * (0.46 and 0.91 m above the rock base, which is the anchor's ground at 2.25 m).
51
+ */
52
+ saltmarklight: {
53
+ floors: [{ dx: 0, dz: 7, metres: 2.25 + 0.46 }, { dx: 0, dz: 6, metres: 2.25 + 0.91 }],
54
+ blocked: tiles(range(-4, 4), range(0, 6)).filter(([x, z]) => !(x === 0 && z === 6)),
55
+ interior: [],
56
+ },
57
+ /**
58
+ * The yard's awning (fortrookawning v002): 5 x 4 on the fort ground, shifted half a tile south so its four rows sit on
59
+ * whole tiles. Only its four corner posts stand on the ground (measured at x +-2, z -1 and 2); the middle and every side
60
+ * are open, and its roof is a canopy you walk under, never a roof to lift (an open model).
61
+ */
62
+ fortrookawning: { floors: [], blocked: tiles([-2, 2], [-1, 2]), interior: [] },
63
+ /** A 4 x 1 timber screen (fortrookhoarding v002), shifted half a tile east: boards and braces on all four tiles. */
64
+ fortrookhoarding: { floors: [], blocked: tiles(range(-1, 2), [0]), interior: [] },
65
+ /** A Blackwake banner on its pole (blackwakebanner v002), shifted half a tile east: the pole is the root tile, the flag hangs over the next. */
66
+ blackwakebanner: { floors: [], blocked: [[0, 0]], interior: [] },
67
+ };
68
+ const part = (id, model, x, z, facing) => ({ id, model, x, z, style: `${model}-${facing}` });
69
+ /** Wall runs: each [first, last] is an inclusive span of tiles along the wall. 8 tiles take a long module, 2 a short one. */
70
+ function run(side, inner, spans, closed = false) {
71
+ return spans.map(([a, b]) => {
72
+ const long = b - a + 1 === 8;
73
+ const model = long ? 'fortrookwall' : 'fortrookwallshort';
74
+ const id = `fort-wall-${side}-${a}`;
75
+ const style = (facing) => `${model}${closed ? '-closed' : ''}-${facing}`;
76
+ // 'n' mirrors x (x = root - lx) so the first tile is root - (last lx); 's' reads straight; 'w' runs south (z = root + lx);
77
+ // 'e' runs north (z = root - lx).
78
+ const lastLx = long ? 4 : 1;
79
+ const firstLx = long ? -3 : 0;
80
+ const at = (x, z, facing) => ({ id, model, x, z, style: style(facing) });
81
+ if (side === 'n')
82
+ return at(a + lastLx, inner, 'n');
83
+ if (side === 's')
84
+ return at(a - firstLx, inner, 's');
85
+ if (side === 'w')
86
+ return at(inner, a - firstLx, 'w');
87
+ return at(inner, a + lastLx, 'e');
88
+ });
89
+ }
90
+ export const FORT_ROOK_GATE_ROOT = { x: 818, z: 1005, facing: 'n' };
91
+ export const BLACKWAKE_FORT_PARTS = [
92
+ // North: filler, gate, three long runs, two fillers (inner row z 1005; the gate has its own part). The north, south and
93
+ // east walks are drawn and shut: the towers at their ends have no door onto them, so only the west walk, up the stair, is a walk.
94
+ ...run('n', 1005, [[812, 813], [822, 829], [830, 837], [838, 845], [846, 847], [848, 849]], true),
95
+ part('fort-gate', 'fortrookgateopen', FORT_ROOK_GATE_ROOT.x, FORT_ROOK_GATE_ROOT.z, 'n'),
96
+ // South (inner z 1042)
97
+ ...run('s', 1042, [[812, 819], [820, 827], [828, 835], [836, 843], [844, 845], [846, 847], [848, 849]], true),
98
+ // West (inner x 807)
99
+ ...run('w', 807, [[1010, 1017], [1018, 1025], [1026, 1033], [1034, 1035], [1036, 1037]]),
100
+ // East (inner x 854): the north run and filler, then the breach z 1024-1032 stays open between two ruined ends
101
+ ...run('e', 854, [[1010, 1017], [1018, 1019], [1036, 1037]], true),
102
+ part('fort-ruin-north', 'fortrookruin', 854, 1022, 'e'),
103
+ part('fort-ruin-south', 'fortrookruin', 854, 1035, 'e'),
104
+ // The four corner towers: root is the tile left of and above the middle of the six
105
+ part('fort-tower-nw', 'fortrooktower', 808, 1006, 's'),
106
+ part('fort-tower-ne', 'fortrooktower', 852, 1006, 's'),
107
+ part('fort-tower-sw', 'fortrooktower', 808, 1040, 's'),
108
+ part('fort-tower-se', 'fortrooktower', 852, 1040, 's'),
109
+ // The courtyard stair to the west walk: main run rises west from x 813, the cap runs on to the walk at x 807
110
+ part('fort-steps', 'fortrooksteps', 812, 1015, 'n'),
111
+ part('fort-stepcap', 'fortrookstepcap', 809, 1015, 'n'),
112
+ part('fort-cabin', 'fortrookcabin', 830, 1038, 's'),
113
+ ];
114
+ /**
115
+ * The yard's dressing, on the fort ground (3.6 m) and off every route: the awning on the yard's east side, the hoarding
116
+ * along the inside of the north wall east of Harrow, and a banner either side of the gate lane's inside end, each pole and
117
+ * flag in front of a gate jamb, off the lane. Kept clear (the south smoke checks it): the gate lane
118
+ * x 816-819, the courtyard stair, the cabin stand and porch, the breach, both bosses' leash boxes and the melee ring round
119
+ * them, and every coast NPC home.
120
+ */
121
+ export const FORT_ROOK_DRESSING_PARTS = [
122
+ part('fort-awning', 'fortrookawning', 840, 1015, 's'),
123
+ part('fort-hoarding', 'fortrookhoarding', 841, 1006, 's'),
124
+ // Both face south, so the yard sees the flag's dressed side (black, the sea-green tail and the emblem over it, as the
125
+ // kit's renders show it); a south-facing flag hangs east of its pole (815 and 821).
126
+ part('fort-banner-west', 'blackwakebanner', 814, 1006, 's'),
127
+ part('fort-banner-east', 'blackwakebanner', 820, 1006, 's'),
128
+ ];
129
+ /** Every tile a placed piece's mask blocks (its local mask turned to the style's facing), in world tiles. */
130
+ export function placedBlocked(p, local) {
131
+ return placedFloors(p, { ...local, floors: local.blocked.map(([dx, dz]) => ({ dx, dz, metres: 0 })) }).map((f) => [f.x, f.z]);
132
+ }
133
+ export const SALTMARK_LIGHT_PART = part('saltmark-light', 'saltmarklight', 890, 944, 's');
134
+ /** Every floor tile of the fort: the wall walks, the stair and the cabin deck. A later piece wins a shared tile. */
135
+ export const BLACKWAKE_FORT_FLOORS = (() => {
136
+ const seen = new Map();
137
+ for (const p of BLACKWAKE_FORT_PARTS)
138
+ for (const f of placedFloors(p, BLACKWAKE_FORT_MODELS[p.model]))
139
+ seen.set(`${f.x},${f.z}`, f);
140
+ return [...seen.values()];
141
+ })();
142
+ //# sourceMappingURL=blackwakeFort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackwakeFort.js","sourceRoot":"","sources":["../src/blackwakeFort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The Blackwake Gatehouse at the north end of the Sundered Span. The shared world keeps it shut. Each character carries
3
+ * `blackwakeGatePosts`, a 2-bit mask of the two gate Lookouts they have defeated (1 west, 2 east); at 3 the gate is open
4
+ * for that character alone: their client is sent the open style and their own walks may cross the corridor.
5
+ *
6
+ * Both posts stand NORTH of the shut gate (the original homes at 668,940 and 684,940 were behind it, so a locked
7
+ * player could not reach them at all): the nearest safe tiles on the bridge approach.
8
+ */
9
+ export declare const BLACKWAKE_GATE: {
10
+ readonly id: "blackwake-gatehouse";
11
+ readonly x: 676;
12
+ readonly z: 936;
13
+ readonly closedStyle: "blackwakegate-n";
14
+ readonly openStyle: "blackwakegateopen-n";
15
+ /** The three-tile passage through the gatehouse, for a character who has earned it. */
16
+ readonly corridor: {
17
+ readonly minX: 675;
18
+ readonly maxX: 677;
19
+ readonly minZ: 934;
20
+ readonly maxZ: 938;
21
+ };
22
+ };
23
+ export type BlackwakeGatePostId = 'west' | 'east';
24
+ export declare const BLACKWAKE_GATE_POSTS: ReadonlyArray<{
25
+ id: BlackwakeGatePostId;
26
+ bit: number;
27
+ x: number;
28
+ z: number;
29
+ }>;
30
+ export declare const BLACKWAKE_GATE_ALL_POSTS = 3;
31
+ /** Anything but a whole number 0-3 is no progress. */
32
+ export declare function normalizeBlackwakeGatePosts(value: unknown): number;
33
+ export declare function blackwakeGateOpenFor(posts: unknown): boolean;
34
+ export declare function isBlackwakeGateCorridorTile(x: number, z: number): boolean;
35
+ /** The post a Lookout home belongs to, if it is one of the two gate posts. */
36
+ export declare function blackwakeGatePostAt(x: number, z: number): BlackwakeGatePostId | null;
37
+ //# sourceMappingURL=blackwakeGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackwakeGate.d.ts","sourceRoot":"","sources":["../src/blackwakeGate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;IAMzB,uFAAuF;;;;;;;CAE/E,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAAC;AAClD,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,mBAAmB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAG9G,CAAC;AACF,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,sDAAsD;AACtD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAGzE;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAEpF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The Blackwake Gatehouse at the north end of the Sundered Span. The shared world keeps it shut. Each character carries
3
+ * `blackwakeGatePosts`, a 2-bit mask of the two gate Lookouts they have defeated (1 west, 2 east); at 3 the gate is open
4
+ * for that character alone: their client is sent the open style and their own walks may cross the corridor.
5
+ *
6
+ * Both posts stand NORTH of the shut gate (the original homes at 668,940 and 684,940 were behind it, so a locked
7
+ * player could not reach them at all): the nearest safe tiles on the bridge approach.
8
+ */
9
+ export const BLACKWAKE_GATE = {
10
+ id: 'blackwake-gatehouse',
11
+ x: 676,
12
+ z: 936,
13
+ closedStyle: 'blackwakegate-n',
14
+ openStyle: 'blackwakegateopen-n',
15
+ /** The three-tile passage through the gatehouse, for a character who has earned it. */
16
+ corridor: { minX: 675, maxX: 677, minZ: 934, maxZ: 938 },
17
+ };
18
+ export const BLACKWAKE_GATE_POSTS = [
19
+ { id: 'west', bit: 1, x: 674, z: 932 },
20
+ { id: 'east', bit: 2, x: 678, z: 932 },
21
+ ];
22
+ export const BLACKWAKE_GATE_ALL_POSTS = 3;
23
+ /** Anything but a whole number 0-3 is no progress. */
24
+ export function normalizeBlackwakeGatePosts(value) {
25
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= BLACKWAKE_GATE_ALL_POSTS ? value : 0;
26
+ }
27
+ export function blackwakeGateOpenFor(posts) {
28
+ return normalizeBlackwakeGatePosts(posts) === BLACKWAKE_GATE_ALL_POSTS;
29
+ }
30
+ export function isBlackwakeGateCorridorTile(x, z) {
31
+ const c = BLACKWAKE_GATE.corridor;
32
+ return x >= c.minX && x <= c.maxX && z >= c.minZ && z <= c.maxZ;
33
+ }
34
+ /** The post a Lookout home belongs to, if it is one of the two gate posts. */
35
+ export function blackwakeGatePostAt(x, z) {
36
+ return BLACKWAKE_GATE_POSTS.find((p) => p.x === x && p.z === z)?.id ?? null;
37
+ }
38
+ //# sourceMappingURL=blackwakeGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackwakeGate.js","sourceRoot":"","sources":["../src/blackwakeGate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,qBAAqB;IACzB,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,qBAAqB;IAChC,uFAAuF;IACvF,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;CAChD,CAAC;AAGX,MAAM,CAAC,MAAM,oBAAoB,GAAkF;IACjH,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACtC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CACvC,CAAC;AACF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,sDAAsD;AACtD,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,2BAA2B,CAAC,KAAK,CAAC,KAAK,wBAAwB,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,CAAS,EAAE,CAAS;IAC9D,MAAM,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACtD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AAC9E,CAAC"}
@@ -26,7 +26,7 @@
26
26
  * - `poolScale` (Blood Mire Elemental): its blows scale with how much of its
27
27
  * pool is left, which is also how the client draws the pool draining.
28
28
  */
29
- export type BossSignatureId = 'brood-bite' | 'root-slam' | 'overhead' | 'mire-slam' | 'grave-cleave' | 'guard' | 'stomp' | 'deep-freeze' | 'three-phials' | 'crystal-shatter' | 'breaker' | 'claw-rake';
29
+ export type BossSignatureId = 'brood-bite' | 'root-slam' | 'overhead' | 'mire-slam' | 'grave-cleave' | 'guard' | 'stomp' | 'deep-freeze' | 'three-phials' | 'crystal-shatter' | 'breaker' | 'claw-rake' | 'chain-axe' | 'crew-whistle';
30
30
  export type BossSignature = {
31
31
  id: BossSignatureId;
32
32
  /** Every Nth attack is the signature. 0: not periodic (see `shatterAt`). */
@@ -1 +1 @@
1
- {"version":3,"file":"bossSignatures.d.ts","sourceRoot":"","sources":["../src/bossSignatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,WAAW,GACX,UAAU,GACV,WAAW,GACX,cAAc,GACd,OAAO,GACP,OAAO,GACP,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,eAAe,CAAC;IACpB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,mHAAmH;AACnH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,yEAAyE;AACzE,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAqDnE,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAmC,CAAC;AAErF,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,MAAM,CAGnF"}
1
+ {"version":3,"file":"bossSignatures.d.ts","sourceRoot":"","sources":["../src/bossSignatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,WAAW,GACX,UAAU,GACV,WAAW,GACX,cAAc,GACd,OAAO,GACP,OAAO,GACP,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,SAAS,GACT,WAAW,GACX,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,eAAe,CAAC;IACpB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,mHAAmH;AACnH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,yEAAyE;AACzE,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmEnE,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAmC,CAAC;AAErF,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,MAAM,CAGnF"}
@@ -85,6 +85,20 @@ export const BOSS_SIGNATURES = {
85
85
  id: 'claw-rake', every: 2, mult: 1.5, tell: 0xff7a2e,
86
86
  notice: 'The Dragon rears back on its hind legs, one foreleg raised, and an ember ring closes round it. Brace for the claws.',
87
87
  },
88
+ // Fort Rook (the Sundered Coast, 2026-10-07; dreadwoods/.cursor/task-plans/2026-10-07-finish-blackwake/task-4-design.md).
89
+ // Presentation only: mult 1, so every fourth blow is announced and drawn as the sheet's move but lands exactly as an
90
+ // ordinary one (ordinaryHitScale is 1). No pull, stun or extra damage was specified for either.
91
+ // Harrow's chain-and-axe swing (design-references blackwakecrew): the boarding axe heaved overhead, the chain with it.
92
+ bosunharrow: {
93
+ id: 'chain-axe', every: 4, mult: 1, tell: 0x9aa7b4,
94
+ notice: 'Bosun Harrow heaves his boarding axe over his head and the chain across his chest swings with it. Watch the axe.',
95
+ },
96
+ // Rowena's whistle (design-references rowenablackwake): her idle crew by the fort walk into the yard and wait there.
97
+ // They are the real Cutthroats, not new ones, and none of them joins her fight (backend rowenaCrew.ts).
98
+ captainrowena: {
99
+ id: 'crew-whistle', every: 4, mult: 1, tell: 0x3fae8f,
100
+ notice: 'Captain Rowena puts two fingers to her lips and whistles. Any of her crew idling by the fort come into the yard to wait their turn.',
101
+ },
88
102
  };
89
103
  /** The tell's colour for a variant (the Alchemist's phials go red, blue, green). */
90
104
  export const THREE_PHIAL_COLOURS = [0xff5a3a, 0x4ab0ff, 0x6bd86b];
@@ -1 +1 @@
1
- {"version":3,"file":"bossSignatures.js","sourceRoot":"","sources":["../src/bossSignatures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bossSignatures.js","sourceRoot":"","sources":["../src/bossSignatures.ts"],"names":[],"mappings":"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"}