@dreadwood-types/types 0.1.129 → 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.
- package/dist/animation.d.ts.map +1 -1
- package/dist/animation.js +11 -0
- package/dist/animation.js.map +1 -1
- package/dist/blackwakeCoast.d.ts +55 -0
- package/dist/blackwakeCoast.d.ts.map +1 -0
- package/dist/blackwakeCoast.js +86 -0
- package/dist/blackwakeCoast.js.map +1 -0
- package/dist/blackwakeFort.d.ts +41 -0
- package/dist/blackwakeFort.d.ts.map +1 -0
- package/dist/blackwakeFort.js +142 -0
- package/dist/blackwakeFort.js.map +1 -0
- package/dist/blackwakeGate.d.ts +37 -0
- package/dist/blackwakeGate.d.ts.map +1 -0
- package/dist/blackwakeGate.js +38 -0
- package/dist/blackwakeGate.js.map +1 -0
- package/dist/bossSignatures.d.ts +1 -1
- package/dist/bossSignatures.d.ts.map +1 -1
- package/dist/bossSignatures.js +14 -0
- package/dist/bossSignatures.js.map +1 -1
- package/dist/constants.d.ts +31 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +61 -1
- package/dist/constants.js.map +1 -1
- package/dist/gullsRansom.d.ts +36 -0
- package/dist/gullsRansom.d.ts.map +1 -0
- package/dist/gullsRansom.js +54 -0
- package/dist/gullsRansom.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/seaLanes.d.ts +21 -0
- package/dist/seaLanes.d.ts.map +1 -1
- package/dist/seaLanes.js +43 -0
- package/dist/seaLanes.js.map +1 -1
- package/dist/southExpansion.d.ts +16 -5
- package/dist/southExpansion.d.ts.map +1 -1
- package/dist/southExpansion.js +20 -7
- package/dist/southExpansion.js.map +1 -1
- package/package.json +2 -2
package/dist/animation.d.ts.map
CHANGED
|
@@ -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,
|
|
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))
|
package/dist/animation.js.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -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":"AAmBA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAoC,EAAE;IAChG,MAAM,GAAG,GAAqC,EAAE,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;QAAE,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AACF,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAM,GAAG,iBAAiB,EAAgB,EAAE,CACxG,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/D,MAAM,OAAO,GAAG,CAAC,KAA+C,EAAE,IAA8C,EAAE,EAAE,CAClH,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3E,sHAAsH;AACtH,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,MAAM,KAAK,GAAoB;IAC7B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,QAAQ,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAClC,CAAC;AACF,2GAA2G;AAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,MAAM,MAAM,GAAoB;IAC9B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,QAAQ,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAA8C;IAC/E,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,MAAM;IACvB,iGAAiG;IACjG,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvE,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC1E,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7E,qHAAqH;IACrH,mBAAmB,EAAE;QACnB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC;QAC5G,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACvF,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACvF,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACxF,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACpG,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACpG,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACrF,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACrF,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACvF,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACzF,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACrG,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE;IAC5F,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE;CACpG,CAAC;AAEF,SAAS,IAAI,CAAC,EAAU,EAAE,EAAU,EAAE,MAAc;IAClD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE5E,+HAA+H;AAC/H,MAAM,UAAU,YAAY,CAAC,IAAe,EAAE,KAAsB;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,OAAO,YAAY,CAAC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC;AACjE,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAA4D,CAAC,GAAG,EAAE;IACnG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoD,CAAC;IACzE,KAAK,MAAM,IAAI,IAAI,qBAAqB;QAAE,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC,CAAC,EAAE,CAAC;AAEL,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAW,CAAC"}
|
|
@@ -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"}
|
package/dist/bossSignatures.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/bossSignatures.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;
|
|
1
|
+
{"version":3,"file":"bossSignatures.js","sourceRoot":"","sources":["../src/bossSignatures.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -109,6 +109,8 @@ export declare function legacyZ(x: number, z: number): number;
|
|
|
109
109
|
export declare const NON_IDENTIFIABLE_KINDS: ReadonlySet<string>;
|
|
110
110
|
export declare function isPaperMapChunk(cx: number, cz: number): boolean;
|
|
111
111
|
export declare const HEIGHT_STEP = 0.45;
|
|
112
|
+
/** Authored structural kit metres converted to authoritative terrain units. */
|
|
113
|
+
export declare function terrainForPhysicalMetres(metres: number): number;
|
|
112
114
|
export declare const MAX_STEP_HEIGHT = 2;
|
|
113
115
|
export declare const PLAYABLE_BEACH_START_Z = 56;
|
|
114
116
|
export declare const PLAYABLE_BEACH_SAND_START_Z = 60;
|
|
@@ -333,7 +335,12 @@ export type NpcKind = 'seagull' | 'crab'
|
|
|
333
335
|
/** Bosun Harrow, level 26, inside Fort Rook. A larger smuggler sailor. */
|
|
334
336
|
| 'bosunharrow'
|
|
335
337
|
/** Captain Rowena Blackwake, level 32. The smuggler-captain model until she has her own. */
|
|
336
|
-
| 'captainrowena'
|
|
338
|
+
| 'captainrowena'
|
|
339
|
+
/**
|
|
340
|
+
* Grey seal, level 0, on the Sundered Coast (south.js). Not a fight.
|
|
341
|
+
* No Blender seal exists: the client draws a grey loaf with flippers and says so.
|
|
342
|
+
*/
|
|
343
|
+
| 'greyseal' | 'clark' | 'clarksson' | 'stablemaster' | 'ranger' | 'debbie' | 'anne' | 'wallarcher' | 'hijacker' | 'pony' | 'rat'
|
|
337
344
|
/** The Collapsed Copper Prospect's boss (worldEvents.ts): a big cave rat in a miner's helmet with a lamp, by the cache. */
|
|
338
345
|
| 'ratforeman' | 'soldier' | 'captain'
|
|
339
346
|
/** The Capital's steel-clad guards: on the gates, in the keep, level 40 and they fight back. */
|
|
@@ -465,6 +472,8 @@ export type ChunkData = {
|
|
|
465
472
|
* knows them from here. Absent when the chunk has none, and from older servers.
|
|
466
473
|
*/
|
|
467
474
|
furniture?: number[];
|
|
475
|
+
/** Authored flat structural floors/treads, as local indexes. Their heights are exact, not terrain-smoothed. */
|
|
476
|
+
structureFloors?: number[];
|
|
468
477
|
};
|
|
469
478
|
export declare const SURFACE_COLORS: Record<SurfaceType, string>;
|
|
470
479
|
export declare const TILE_COLORS: Record<TileType, string>;
|
|
@@ -692,6 +701,25 @@ export type CapitalBuildingModel = {
|
|
|
692
701
|
* its open-water neighbours drag it down into the water, the Long Pier's trap).
|
|
693
702
|
*/
|
|
694
703
|
readonly rawHeight?: boolean;
|
|
704
|
+
/**
|
|
705
|
+
* Exact occupied tile centers in the model's south-facing frame. An explicit
|
|
706
|
+
* mask replaces the rectangular wall rule, including for a walkable deck
|
|
707
|
+
* with solid masts or rails. Both server and client rotate this same mask.
|
|
708
|
+
*/
|
|
709
|
+
readonly blockedOffsets?: ReadonlyArray<readonly [number, number]>;
|
|
710
|
+
/**
|
|
711
|
+
* Named GLB groups that are actual walking surfaces. When present, floor
|
|
712
|
+
* picking accepts only these groups, so a mast, hull or sail is never floor.
|
|
713
|
+
* Group names are the workshop suffix, for example 'deck' or 'holdsteps'.
|
|
714
|
+
*/
|
|
715
|
+
readonly walkSurfaceParts?: ReadonlyArray<string>;
|
|
716
|
+
/**
|
|
717
|
+
* Exact room tiles in the south-facing frame, for a walk-in whose room is not centred on its anchor (a shanty on its
|
|
718
|
+
* deck). The roof lifts for anyone standing on one; the same list is rotated by the style's facing.
|
|
719
|
+
*/
|
|
720
|
+
readonly interiorOffsets?: ReadonlyArray<readonly [number, number]>;
|
|
721
|
+
/** What blocks instead of blockedOffsets when the style carries the token `closed`. */
|
|
722
|
+
readonly closedBlockedOffsets?: ReadonlyArray<readonly [number, number]>;
|
|
695
723
|
/**
|
|
696
724
|
* A regular octagon on its square footprint (the Great Aquarium's hall, sheet E): the walls stand on the tiles whose
|
|
697
725
|
* octagon radius (buildingOctagonRadius) is past the room's and within the wall's, r - 0.5 to r + 0.25 for a footprint
|
|
@@ -713,6 +741,8 @@ export declare const CAPITAL_BUILDING_MODELS: Readonly<Record<string, CapitalBui
|
|
|
713
741
|
/** The model id in a `capitalbuilding` style (its first dash token), when it names one. */
|
|
714
742
|
export declare function capitalBuildingModelId(style: string | undefined): string | null;
|
|
715
743
|
export declare function capitalBuildingModel(style: string | undefined): CapitalBuildingModel | null;
|
|
744
|
+
/** The room tiles of a walk-in whose room has its own list (interiorOffsets), turned to the style's facing; else null. */
|
|
745
|
+
export declare function buildingModelInteriorOffsets(style: string | undefined): Array<[number, number]> | null;
|
|
716
746
|
/** A Blender model's diagonal front, when it is a `diagonal` model standing on a diagonal (else null: n/e/s/w as ever). */
|
|
717
747
|
export declare function buildingModelDiagonalFront(style: string | undefined): readonly [number, number] | null;
|
|
718
748
|
/** The outline a walk-in's walls follow: a rectangle ring, or an `octagon` model's eight walls. */
|