@dreadwood-types/types 0.1.345 → 0.1.347

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 (70) hide show
  1. package/dist/blacksmithing.d.ts.map +1 -1
  2. package/dist/blacksmithing.js +40 -0
  3. package/dist/blacksmithing.js.map +1 -1
  4. package/dist/campKitchens.js +4 -4
  5. package/dist/campKitchens.js.map +1 -1
  6. package/dist/campStations.d.ts +13 -0
  7. package/dist/campStations.d.ts.map +1 -1
  8. package/dist/campStations.js +19 -1
  9. package/dist/campStations.js.map +1 -1
  10. package/dist/constants.d.ts +2 -0
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js.map +1 -1
  13. package/dist/cooking.d.ts.map +1 -1
  14. package/dist/cooking.js +10 -0
  15. package/dist/cooking.js.map +1 -1
  16. package/dist/equipment.d.ts.map +1 -1
  17. package/dist/equipment.js +12 -0
  18. package/dist/equipment.js.map +1 -1
  19. package/dist/explorerLedger.d.ts.map +1 -1
  20. package/dist/explorerLedger.js +1 -0
  21. package/dist/explorerLedger.js.map +1 -1
  22. package/dist/fishingDerby.d.ts +5 -1
  23. package/dist/fishingDerby.d.ts.map +1 -1
  24. package/dist/fishingDerby.js +16 -1
  25. package/dist/fishingDerby.js.map +1 -1
  26. package/dist/fishingReaches.d.ts.map +1 -1
  27. package/dist/fishingReaches.js +10 -0
  28. package/dist/fishingReaches.js.map +1 -1
  29. package/dist/foragePatches.d.ts +1 -1
  30. package/dist/foragePatches.d.ts.map +1 -1
  31. package/dist/foragePatches.js +39 -0
  32. package/dist/foragePatches.js.map +1 -1
  33. package/dist/groundItems.d.ts.map +1 -1
  34. package/dist/groundItems.js +9 -0
  35. package/dist/groundItems.js.map +1 -1
  36. package/dist/index.d.ts +5 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/longRoadBrewing.d.ts +48 -0
  41. package/dist/longRoadBrewing.d.ts.map +1 -0
  42. package/dist/longRoadBrewing.js +270 -0
  43. package/dist/longRoadBrewing.js.map +1 -0
  44. package/dist/longRoadTable.d.ts +29 -0
  45. package/dist/longRoadTable.d.ts.map +1 -0
  46. package/dist/longRoadTable.js +196 -0
  47. package/dist/longRoadTable.js.map +1 -0
  48. package/dist/quests.d.ts.map +1 -1
  49. package/dist/quests.js +17 -0
  50. package/dist/quests.js.map +1 -1
  51. package/dist/roadForage.d.ts +59 -0
  52. package/dist/roadForage.d.ts.map +1 -0
  53. package/dist/roadForage.js +66 -0
  54. package/dist/roadForage.js.map +1 -0
  55. package/dist/shopFood.d.ts.map +1 -1
  56. package/dist/shopFood.js +3 -0
  57. package/dist/shopFood.js.map +1 -1
  58. package/dist/storyQuests.d.ts +4 -1
  59. package/dist/storyQuests.d.ts.map +1 -1
  60. package/dist/storyQuests.js +12 -0
  61. package/dist/storyQuests.js.map +1 -1
  62. package/dist/thawFishing.d.ts +32 -0
  63. package/dist/thawFishing.d.ts.map +1 -0
  64. package/dist/thawFishing.js +99 -0
  65. package/dist/thawFishing.js.map +1 -0
  66. package/dist/woodsGearLadder.d.ts +74 -0
  67. package/dist/woodsGearLadder.d.ts.map +1 -0
  68. package/dist/woodsGearLadder.js +227 -0
  69. package/dist/woodsGearLadder.js.map +1 -0
  70. package/package.json +2 -2
@@ -0,0 +1,32 @@
1
+ /**
2
+ * FISHING 31-40: the Thaw gorge (skills 31-40 pass, 2026-10-17; COVERAGE_1_40.md, "Left" of the thin-skills pass).
3
+ *
4
+ * Fishing 31-40 had three catches, four quests and six rod spots. The Thaw gorge already had the Surveyors' bank and the Salmon Leap; this pass adds
5
+ *
6
+ * - THE SOUTH BANK (fishingReaches.ts `thaw-south`): three more river pegs below the Rim Ledge's anchor strip;
7
+ * - THE THAW GORGE DERBY (fishingDerby.ts venue `gorge`): the Fishing Derby's sixth water, counting only the Thaw's river spots (grayling, char, salmon);
8
+ * - two quests from the Surveyors' Camp, both silent bonus quests of their giver (the giver's chain is unchanged until the gate opens):
9
+ *
10
+ * Fishing 35 The Rope-Master's Larder Rope-Master Bram Tolliver four grayling, then four char, off the gorge's pegs
11
+ * Fishing 36 The Gorge Ribbon Chief Surveyor Ottoline Keane win a ribbon in a Thaw gorge derby round (the Explorer's Ledger line
12
+ * `derby:gorge`, written when the round ends and you placed), then tell her
13
+ *
14
+ * Every catch is an existing fish and every giver an existing person. Rewards are PLACEHOLDERS for the balance pass (James, 2026-10-12: balance last).
15
+ * Types only from storyQuests.ts (an erased import), so storyQuests.ts can spread THAW_FISHING_QUESTS without a cycle.
16
+ */
17
+ import type { StoryQuestDef } from './storyQuests.js';
18
+ export declare const THAW_FISHING_IDS: readonly ["ropeCrewLarder", "gorgeRibbon"];
19
+ export type ThawFishingId = (typeof THAW_FISHING_IDS)[number];
20
+ /** The Fishing level each quest asks (placeholders): char bite from 33, so both sit a little above the fish they ask for. */
21
+ export declare const THAW_FISHING_LEVELS: Readonly<Record<ThawFishingId, number>>;
22
+ export declare const THAW_FISHING_QUESTS: Readonly<Record<ThawFishingId, StoryQuestDef>>;
23
+ export declare const THAW_FISHING_META: Readonly<Record<ThawFishingId, {
24
+ title: string;
25
+ description: string;
26
+ category: 'skilling';
27
+ art: {
28
+ item: string;
29
+ };
30
+ }>>;
31
+ export declare const THAW_FISHING_GIVER_PLACES: Readonly<Record<ThawFishingId, string>>;
32
+ //# sourceMappingURL=thawFishing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thawFishing.d.ts","sourceRoot":"","sources":["../src/thawFishing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,kBAAkB,CAAC;AAMnE,eAAO,MAAM,gBAAgB,4CAA6C,CAAC;AAC3E,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,6HAA6H;AAC7H,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAGvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAyE9E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CACtC,MAAM,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAc3G,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAG7E,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { THAW_FOLK_NAMES } from './thawCrossing.js';
2
+ const BRAM = { kind: 'resident', name: THAW_FOLK_NAMES.rope };
3
+ const OTTOLINE = { kind: 'resident', name: THAW_FOLK_NAMES.chief };
4
+ export const THAW_FISHING_IDS = ['ropeCrewLarder', 'gorgeRibbon'];
5
+ /** The Fishing level each quest asks (placeholders): char bite from 33, so both sit a little above the fish they ask for. */
6
+ export const THAW_FISHING_LEVELS = {
7
+ ropeCrewLarder: 35,
8
+ gorgeRibbon: 36,
9
+ };
10
+ export const THAW_FISHING_QUESTS = {
11
+ ropeCrewLarder: {
12
+ giver: BRAM,
13
+ requires: {
14
+ skill: { skill: 'fishing', level: THAW_FISHING_LEVELS.ropeCrewLarder },
15
+ silent: true,
16
+ refuse: `The rope crew eats grayling and char or goes hungry, and I cannot spare a hand to fish. Come back at Fishing ${THAW_FISHING_LEVELS.ropeCrewLarder} with a fly rod.`,
17
+ },
18
+ offer: "The rope crew spent the whole thaw hauling anchors and not one of them has a line in the water. There are pegs on the west bank all the way down the gorge now. Grayling for the quick supper and char for the proper one: four of each, and the crew will eat like the survey.",
19
+ accept: "The pegs on the Thaw's west bank: the Surveyors' bank beside the camp, the Salmon Leap by the Fall, and the new ones south of the Rim Ledge. A fly rod, fishing line and flies. Four raw grayling (Fishing 25), then four raw arctic char (Fishing 33).",
20
+ decline: 'Then it is hardtack for the crew, and they will blame the ice.',
21
+ steps: [
22
+ {
23
+ kind: 'catch',
24
+ fish: ['rawgrayling'],
25
+ qty: 4,
26
+ label: 'Catch four grayling off the Thaw gorge pegs',
27
+ hint: "Any of the river pegs on the Thaw gorge's west bank will do: beside the Surveyors' Camp, at the Salmon Leap or south of the Rim Ledge. You need a Fly Fishing Rod, fishing line and flies (Fishing 25).",
28
+ },
29
+ {
30
+ kind: 'catch',
31
+ fish: ['rawchar'],
32
+ qty: 4,
33
+ label: 'Catch four arctic char off the Thaw gorge pegs',
34
+ hint: 'The char bite at the same pegs from Fishing 33. Keep the grayling for the hand-in.',
35
+ },
36
+ {
37
+ kind: 'deliver',
38
+ npc: BRAM,
39
+ items: [
40
+ { kinds: ['rawgrayling'], qty: 4, label: 'Raw grayling' },
41
+ { kinds: ['rawchar'], qty: 4, label: 'Raw arctic char' },
42
+ ],
43
+ label: 'Bring Rope-Master Bram Tolliver the grayling and the char',
44
+ hint: "Rope-Master Bram Tolliver works the anchors beside the forge at the Surveyors' Camp, Thaw Crossing.",
45
+ say: 'Four of each, and not a scale out of place. The crew will not say thank you, they will say nothing at all, which is better.',
46
+ short: 'Four raw grayling and four raw arctic char, from the pegs.',
47
+ },
48
+ ],
49
+ done: 'That is the crew fed for a week. Take this, and the pegs are yours as long as the ice lets you stand on them.',
50
+ after: 'The crew has started leaving a line in the water overnight. I have told them it does not work that way.',
51
+ rewards: { coins: 640, xp: { fishing: 1900, explorer: 1600 } },
52
+ },
53
+ gorgeRibbon: {
54
+ giver: OTTOLINE,
55
+ requires: {
56
+ skill: { skill: 'fishing', level: THAW_FISHING_LEVELS.gorgeRibbon },
57
+ silent: true,
58
+ refuse: `The gorge has a contest of its own and it is not for beginners. Come back at Fishing ${THAW_FISHING_LEVELS.gorgeRibbon}.`,
59
+ },
60
+ offer: "The Fishing Derby comes round to the gorge now, in its turn with the other waters, and it is the only thing my surveyors have ever agreed to watch. Place in one, a ribbon of any colour, and I will see your name goes in the survey book beside the Fall. You will know when the gorge round is on: the World event line says so.",
61
+ accept: "Watch for the Fishing Derby at the Thaw gorge (the chat line says when, and the Fishing Derby page in your Explorer's Ledger keeps your ribbons). Fish the gorge's pegs in the round and place first, second or third. Then come and tell me; the Ledger line shows I may.",
62
+ decline: 'Then the survey book stays blank by the Fall, and the surveyors keep betting on the weather.',
63
+ steps: [
64
+ {
65
+ kind: 'talk',
66
+ npc: OTTOLINE,
67
+ label: 'Win a ribbon in a Thaw gorge derby round, then tell Chief Surveyor Keane',
68
+ hint: "Fish the gorge's pegs while the Fishing Derby is on at the Thaw gorge, place in the top three, then speak to Chief Surveyor Ottoline Keane at the Surveyors' Camp.",
69
+ say: 'There is the ribbon on your Ledger and there goes your name in the survey book, beside the Fall, where the ice cannot reach it. Well fished.',
70
+ ledger: {
71
+ marks: ['derby:gorge'],
72
+ short: "Your Ledger has no ribbon from the gorge yet. Place first, second or third in a Fishing Derby round at the Thaw gorge, and show me.",
73
+ },
74
+ },
75
+ ],
76
+ done: 'That is a name in the survey book and a ribbon to your credit. Take this, from the survey.',
77
+ after: 'The surveyors have started a book on the next round. I have asked them not to.',
78
+ rewards: { coins: 900, xp: { fishing: 2600, explorer: 2200 } },
79
+ },
80
+ };
81
+ export const THAW_FISHING_META = {
82
+ ropeCrewLarder: {
83
+ title: "The Rope-Master's Larder",
84
+ description: `Rope-Master Bram Tolliver wants four grayling and four arctic char for the rope crew at the Surveyors' Camp: fish the Thaw gorge's pegs on a fly rod. Needs Fishing ${THAW_FISHING_LEVELS.ropeCrewLarder}.`,
85
+ category: 'skilling',
86
+ art: { item: 'rawchar' },
87
+ },
88
+ gorgeRibbon: {
89
+ title: 'The Gorge Ribbon',
90
+ description: `Chief Surveyor Ottoline Keane will put your name in the survey book if you place in a Fishing Derby round at the Thaw gorge. Needs Fishing ${THAW_FISHING_LEVELS.gorgeRibbon}.`,
91
+ category: 'skilling',
92
+ art: { item: 'rawsalmon' },
93
+ },
94
+ };
95
+ export const THAW_FISHING_GIVER_PLACES = {
96
+ ropeCrewLarder: "Rope-Master Bram Tolliver works the anchors beside the forge at the Surveyors' Camp on the Thaw gorge's west bank, Thaw Crossing (Combat 30+).",
97
+ gorgeRibbon: "Chief Surveyor Ottoline Keane keeps the survey tent at the Surveyors' Camp on the Thaw gorge's west bank, Thaw Crossing (Combat 30+).",
98
+ };
99
+ //# sourceMappingURL=thawFishing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thawFishing.js","sourceRoot":"","sources":["../src/thawFishing.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAC3E,MAAM,QAAQ,GAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC;AAEhF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAU,CAAC;AAG3E,6HAA6H;AAC7H,MAAM,CAAC,MAAM,mBAAmB,GAA4C;IAC1E,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAmD;IACjF,cAAc,EAAE;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE;YACR,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,cAAc,EAAE;YACtE,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,gHAAgH,mBAAmB,CAAC,cAAc,kBAAkB;SAC7K;QACD,KAAK,EACH,iRAAiR;QACnR,MAAM,EAAE,yPAAyP;QACjQ,OAAO,EAAE,gEAAgE;QACzE,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,CAAC,aAAa,CAAC;gBACrB,GAAG,EAAE,CAAC;gBACN,KAAK,EAAE,6CAA6C;gBACpD,IAAI,EAAE,yMAAyM;aAChN;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,CAAC,SAAS,CAAC;gBACjB,GAAG,EAAE,CAAC;gBACN,KAAK,EAAE,gDAAgD;gBACvD,IAAI,EAAE,oFAAoF;aAC3F;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE;oBACzD,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE;iBACzD;gBACD,KAAK,EAAE,2DAA2D;gBAClE,IAAI,EAAE,qGAAqG;gBAC3G,GAAG,EAAE,6HAA6H;gBAClI,KAAK,EAAE,4DAA4D;aACpE;SACF;QACD,IAAI,EAAE,+GAA+G;QACrH,KAAK,EAAE,yGAAyG;QAChH,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;KAC/D;IAED,WAAW,EAAE;QACX,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE;YACR,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,WAAW,EAAE;YACnE,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,wFAAwF,mBAAmB,CAAC,WAAW,GAAG;SACnI;QACD,KAAK,EACH,qUAAqU;QACvU,MAAM,EAAE,4QAA4Q;QACpR,OAAO,EAAE,8FAA8F;QACvG,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,0EAA0E;gBACjF,IAAI,EAAE,oKAAoK;gBAC1K,GAAG,EAAE,8IAA8I;gBACnJ,MAAM,EAAE;oBACN,KAAK,EAAE,CAAC,aAAa,CAAC;oBACtB,KAAK,EAAE,qIAAqI;iBAC7I;aACF;SACF;QACD,IAAI,EAAE,4FAA4F;QAClG,KAAK,EAAE,gFAAgF;QACvF,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;KAC/D;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAE1B;IACF,cAAc,EAAE;QACd,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,uKAAuK,mBAAmB,CAAC,cAAc,GAAG;QACzN,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KACzB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,8IAA8I,mBAAmB,CAAC,WAAW,GAAG;QAC7L,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KAC3B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA4C;IAChF,cAAc,EAAE,gJAAgJ;IAChK,WAAW,EAAE,uIAAuI;CACrJ,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * The gear ladder by ring (NEXT_STEPS "The PvP woods by level", item 6; design sheet pvp-woods-b05; James, 2026-10-17).
3
+ *
4
+ * The Dreadwoods is cut into five rings by distance from the woods' edge (zones.ts `combatZoneAt`). Every ring has a reason to be
5
+ * there, and the gear is the clearest one: the deeper the ring, the better the weapons and armour its creatures drop, and the more
6
+ * Weapon Mastery they ask for. Ring 1 asks for nothing (the Borderer's kit, bordererKit.ts); Rings 2-5 climb through the metal tiers
7
+ * the game already has (bronze, iron, steel, the bow ladder) plus a few new rungs where a kind of weapon had a gap:
8
+ *
9
+ * Ring 2 (mastery 6-15): iron blades, the pine bow, the iron mace and spear, iron armour, the Gravewatch Buckler
10
+ * Ring 3 (mastery 16-23): iron longswords, the spruce bow, the Ironjaw Maul, steel armour (rare), the Rotwood Signet
11
+ * Ring 4 (mastery 24-31): steel blades, the ash bow, the steel mace and spear, steel armour, the Coreward Band
12
+ * Ring 5 (mastery 32-40): the Dragonfang Blade, the oak bow, the steel battleaxe, the best steel armour, the Dragonfang Pendant
13
+ *
14
+ * Everything here is 1-40 gear. The Frozen set (Combat 45) and anything for 41+ stays behind its gates; no magic items, no runes
15
+ * (James: no runes or magic items for players in this band). Nobody sells any of it: creatures drop it, a smith makes the iron and
16
+ * steel pieces. All numbers (damage, chances, prices) are PLACEHOLDERS for the balance pass.
17
+ *
18
+ * Where a creature stands is READ from the zones (dreadwoodsZones.ts), never typed per kind, so a place another session moves
19
+ * (the Mire into Ring 3, the Hollow into Ring 4) takes its gear with it. Creatures outside the zones are added to
20
+ * WOODS_EXTRA_CREATURE_RINGS.
21
+ */
22
+ export type WoodsRing = 1 | 2 | 3 | 4 | 5;
23
+ /** The kinds of weapon the sheet's ladder lists: blades, bows, clubs and maces, and spears. */
24
+ export type WoodsWeaponType = 'blade' | 'bow' | 'heavy' | 'spear';
25
+ export type WoodsLadderWeapon = {
26
+ kind: string;
27
+ type: WoodsWeaponType;
28
+ };
29
+ export type WoodsGearRung = {
30
+ /** A player's Combat range the ring is meant for (zones.ts and the sheet). */
31
+ readonly combat: readonly [number, number];
32
+ /** The weapons a creature in this ring may drop. */
33
+ readonly weapons: readonly WoodsLadderWeapon[];
34
+ /** Armour pieces (steel and iron come from the smith's tiers). */
35
+ readonly armour: readonly string[];
36
+ /** The rare chase item(s): worn, rare, theirs alone. */
37
+ readonly chase: readonly string[];
38
+ };
39
+ /** The Weapon Mastery band of each ring: every weapon on a rung asks for a level inside its ring's band (a test holds it). */
40
+ export declare const WOODS_RING_MASTERY_BANDS: Readonly<Record<WoodsRing, readonly [number, number]>>;
41
+ /** The eight new weapons and trinkets this ladder adds, and the one pendant. Everything else is an existing item. */
42
+ export declare const WOODS_GEAR_NEW_ITEMS: readonly string[];
43
+ export declare const WOODS_GEAR_ITEM_NAMES: Readonly<Record<string, string>>;
44
+ /** What a trader pays for each new item (and its death-keep value): PLACEHOLDERS for the balance pass. */
45
+ export declare const WOODS_GEAR_PRICES: Readonly<Record<string, number>>;
46
+ export declare const WOODS_GEAR_LADDER: Readonly<Record<WoodsRing, WoodsGearRung>>;
47
+ /** What the sheet shows that the ladder does not build yet (NEXT_STEPS): a spear for Rings 3 and 5. */
48
+ export declare const WOODS_GEAR_GAPS: readonly string[];
49
+ export declare function woodsGearForRing(ring: WoodsRing): WoodsGearRung;
50
+ /** Creatures that are not a zone's grunt or boss (a worker adds one here with its ring). */
51
+ export declare const WOODS_EXTRA_CREATURE_RINGS: Readonly<Record<string, WoodsRing>>;
52
+ /** The ring a woods creature stands in, read from the zones' centres (null: not a woods creature). */
53
+ export declare function woodsRingOfNpcKind(kind: string): WoodsRing | null;
54
+ /** Every creature kind that carries a ladder drop. */
55
+ export declare function woodsGearNpcKinds(): string[];
56
+ /** A grunt's chance for each weapon, and a boss's (placeholders: roughly one in two hundred, and one in twenty-five). */
57
+ export declare const WOODS_GRUNT_WEAPON_CHANCE = 0.005;
58
+ export declare const WOODS_BOSS_WEAPON_CHANCE = 0.04;
59
+ export declare const WOODS_BOSS_ARMOUR_MULT = 5;
60
+ /** The chase item: one in about 650 off a grunt, one in 65 off a boss. */
61
+ export declare const WOODS_GRUNT_CHASE_CHANCE = 0.0015;
62
+ export declare const WOODS_BOSS_CHASE_CHANCE = 0.015;
63
+ export type WoodsGearDrop = {
64
+ itemKind: string;
65
+ chance: number;
66
+ minQty: number;
67
+ maxQty: number;
68
+ };
69
+ /**
70
+ * The ladder drops of one creature kind: its ring's weapons, armour and chase items, each an independent small chance (drops.ts rolls
71
+ * every entry on its own). Empty for a creature on no ring, the crooks (their own table) and the spiderlings.
72
+ */
73
+ export declare function woodsGearDropEntries(kind: string): WoodsGearDrop[];
74
+ //# sourceMappingURL=woodsGearLadder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woodsGearLadder.d.ts","sourceRoot":"","sources":["../src/woodsGearLadder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE1C,+FAA+F;AAC/F,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;AAEF,8HAA8H;AAC9H,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAM3F,CAAC;AAEF,qHAAqH;AACrH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAUjD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUlE,CAAC;AAEF,0GAA0G;AAC1G,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU9D,CAAC;AAKF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAwDxE,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAqC,CAAC;AAEnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,CAE/D;AAED,4FAA4F;AAC5F,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAM,CAAC;AAqBlF,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAWjE;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAQ5C;AAYD,yHAAyH;AACzH,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAG7C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAC/C,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAsBlE"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * The gear ladder by ring (NEXT_STEPS "The PvP woods by level", item 6; design sheet pvp-woods-b05; James, 2026-10-17).
3
+ *
4
+ * The Dreadwoods is cut into five rings by distance from the woods' edge (zones.ts `combatZoneAt`). Every ring has a reason to be
5
+ * there, and the gear is the clearest one: the deeper the ring, the better the weapons and armour its creatures drop, and the more
6
+ * Weapon Mastery they ask for. Ring 1 asks for nothing (the Borderer's kit, bordererKit.ts); Rings 2-5 climb through the metal tiers
7
+ * the game already has (bronze, iron, steel, the bow ladder) plus a few new rungs where a kind of weapon had a gap:
8
+ *
9
+ * Ring 2 (mastery 6-15): iron blades, the pine bow, the iron mace and spear, iron armour, the Gravewatch Buckler
10
+ * Ring 3 (mastery 16-23): iron longswords, the spruce bow, the Ironjaw Maul, steel armour (rare), the Rotwood Signet
11
+ * Ring 4 (mastery 24-31): steel blades, the ash bow, the steel mace and spear, steel armour, the Coreward Band
12
+ * Ring 5 (mastery 32-40): the Dragonfang Blade, the oak bow, the steel battleaxe, the best steel armour, the Dragonfang Pendant
13
+ *
14
+ * Everything here is 1-40 gear. The Frozen set (Combat 45) and anything for 41+ stays behind its gates; no magic items, no runes
15
+ * (James: no runes or magic items for players in this band). Nobody sells any of it: creatures drop it, a smith makes the iron and
16
+ * steel pieces. All numbers (damage, chances, prices) are PLACEHOLDERS for the balance pass.
17
+ *
18
+ * Where a creature stands is READ from the zones (dreadwoodsZones.ts), never typed per kind, so a place another session moves
19
+ * (the Mire into Ring 3, the Hollow into Ring 4) takes its gear with it. Creatures outside the zones are added to
20
+ * WOODS_EXTRA_CREATURE_RINGS.
21
+ */
22
+ import { DREADWOODS_NPC_ZONES } from './dreadwoodsZones.js';
23
+ import { combatZoneAt } from './zones.js';
24
+ /** The Weapon Mastery band of each ring: every weapon on a rung asks for a level inside its ring's band (a test holds it). */
25
+ export const WOODS_RING_MASTERY_BANDS = {
26
+ 1: [1, 1],
27
+ 2: [6, 15],
28
+ 3: [16, 23],
29
+ 4: [24, 31],
30
+ 5: [32, 40],
31
+ };
32
+ /** The eight new weapons and trinkets this ladder adds, and the one pendant. Everything else is an existing item. */
33
+ export const WOODS_GEAR_NEW_ITEMS = [
34
+ 'ironmace',
35
+ 'ironspear',
36
+ 'steelspear',
37
+ 'ironjawmaul',
38
+ 'dragonfangblade',
39
+ 'gravewatchbuckler',
40
+ 'rotwoodsignet',
41
+ 'corewardband',
42
+ 'dragonfangpendant',
43
+ ];
44
+ export const WOODS_GEAR_ITEM_NAMES = {
45
+ ironmace: 'Iron Mace',
46
+ ironspear: 'Iron Spear',
47
+ steelspear: 'Steel Spear',
48
+ ironjawmaul: 'Ironjaw Maul',
49
+ dragonfangblade: 'Dragonfang Blade',
50
+ gravewatchbuckler: 'Gravewatch Buckler',
51
+ rotwoodsignet: 'Rotwood Signet',
52
+ corewardband: 'Coreward Band',
53
+ dragonfangpendant: 'Dragonfang Pendant',
54
+ };
55
+ /** What a trader pays for each new item (and its death-keep value): PLACEHOLDERS for the balance pass. */
56
+ export const WOODS_GEAR_PRICES = {
57
+ ironmace: 120,
58
+ ironspear: 110,
59
+ steelspear: 320,
60
+ ironjawmaul: 260,
61
+ dragonfangblade: 2500,
62
+ gravewatchbuckler: 400,
63
+ rotwoodsignet: 900,
64
+ corewardband: 1500,
65
+ dragonfangpendant: 4000,
66
+ };
67
+ const IRON_SET = ['ironhelmet', 'ironbody', 'ironlegs', 'ironboots', 'irongauntlets', 'ironshield'];
68
+ const STEEL_SET = ['steelhelmet', 'steelbody', 'steellegs', 'steelboots', 'steelgauntlets', 'steelshield'];
69
+ export const WOODS_GEAR_LADDER = {
70
+ 1: {
71
+ combat: [1, 12],
72
+ weapons: [
73
+ { kind: 'piratecutlass', type: 'blade' },
74
+ { kind: 'birchshortbow', type: 'bow' },
75
+ { kind: 'woodenclub', type: 'heavy' },
76
+ ],
77
+ armour: ['leatherboots', 'pineshield'],
78
+ chase: ['piratecutlass'],
79
+ },
80
+ 2: {
81
+ combat: [10, 20],
82
+ weapons: [
83
+ { kind: 'bronzesword', type: 'blade' },
84
+ { kind: 'irondagger', type: 'blade' },
85
+ { kind: 'pinebow', type: 'bow' },
86
+ { kind: 'ironmace', type: 'heavy' },
87
+ { kind: 'ironspear', type: 'spear' },
88
+ ],
89
+ armour: IRON_SET,
90
+ chase: ['gravewatchbuckler'],
91
+ },
92
+ 3: {
93
+ combat: [18, 28],
94
+ weapons: [
95
+ { kind: 'ironsword', type: 'blade' },
96
+ { kind: 'ironlongsword', type: 'blade' },
97
+ { kind: 'sprucebow', type: 'bow' },
98
+ { kind: 'ironjawmaul', type: 'heavy' },
99
+ ],
100
+ armour: STEEL_SET,
101
+ chase: ['rotwoodsignet'],
102
+ },
103
+ 4: {
104
+ combat: [26, 36],
105
+ weapons: [
106
+ { kind: 'steelsword', type: 'blade' },
107
+ { kind: 'steellongsword', type: 'blade' },
108
+ { kind: 'ashbow', type: 'bow' },
109
+ { kind: 'steelmace', type: 'heavy' },
110
+ { kind: 'steelspear', type: 'spear' },
111
+ ],
112
+ armour: [...STEEL_SET, 'steeltowershield'],
113
+ chase: ['corewardband'],
114
+ },
115
+ 5: {
116
+ combat: [36, 40],
117
+ weapons: [
118
+ { kind: 'dragonfangblade', type: 'blade' },
119
+ { kind: 'oakbow', type: 'bow' },
120
+ { kind: 'steelbattleaxe', type: 'heavy' },
121
+ ],
122
+ armour: [...STEEL_SET, 'steeltowershield'],
123
+ chase: ['dragonfangpendant'],
124
+ },
125
+ };
126
+ /** What the sheet shows that the ladder does not build yet (NEXT_STEPS): a spear for Rings 3 and 5. */
127
+ export const WOODS_GEAR_GAPS = ['ring 3 spear', 'ring 5 spear'];
128
+ export function woodsGearForRing(ring) {
129
+ return WOODS_GEAR_LADDER[ring];
130
+ }
131
+ /** Creatures that are not a zone's grunt or boss (a worker adds one here with its ring). */
132
+ export const WOODS_EXTRA_CREATURE_RINGS = {};
133
+ /** Lair bosses that stand in a zone but are not its listed boss: the NpcKind and the zone whose centre gives its ring. */
134
+ const WOODS_LAIR_BOSS_ZONES = {
135
+ spidermatriarch: 'spider-hollow',
136
+ };
137
+ /** Creatures that never drop ladder gear: the broken road's crooks keep their own Borderer's kit table (bordererKit.ts), and the
138
+ * Hollow's level 5 spiderlings are an egg farm a low level could grind for steel (abuse-first). */
139
+ const WOODS_NO_GEAR_KINDS = new Set(['crook', 'spiderling']);
140
+ /** Fights hard enough to count as a boss for gear: the zones' bosses, the lair bosses and the dragons. */
141
+ function isWoodsBossKind(kind) {
142
+ if (kind === 'dragon' || kind in WOODS_LAIR_BOSS_ZONES)
143
+ return true;
144
+ return DREADWOODS_NPC_ZONES.some((z) => z.boss?.kind === kind);
145
+ }
146
+ function asRing(n) {
147
+ return n !== null && n >= 1 && n <= 5 ? n : null;
148
+ }
149
+ /** The ring a woods creature stands in, read from the zones' centres (null: not a woods creature). */
150
+ export function woodsRingOfNpcKind(kind) {
151
+ for (const zone of DREADWOODS_NPC_ZONES) {
152
+ if (zone.npc.kind === kind)
153
+ return asRing(combatZoneAt(zone.cx, zone.cz));
154
+ if (zone.boss?.kind === kind)
155
+ return asRing(combatZoneAt(zone.boss.x, zone.boss.z));
156
+ }
157
+ const lairZone = WOODS_LAIR_BOSS_ZONES[kind];
158
+ if (lairZone) {
159
+ const zone = DREADWOODS_NPC_ZONES.find((z) => z.id === lairZone);
160
+ if (zone)
161
+ return asRing(combatZoneAt(zone.cx, zone.cz));
162
+ }
163
+ return WOODS_EXTRA_CREATURE_RINGS[kind] ?? null;
164
+ }
165
+ /** Every creature kind that carries a ladder drop. */
166
+ export function woodsGearNpcKinds() {
167
+ const kinds = new Set(Object.keys(WOODS_EXTRA_CREATURE_RINGS));
168
+ for (const zone of DREADWOODS_NPC_ZONES) {
169
+ kinds.add(zone.npc.kind);
170
+ if (zone.boss)
171
+ kinds.add(zone.boss.kind);
172
+ }
173
+ for (const kind of Object.keys(WOODS_LAIR_BOSS_ZONES))
174
+ kinds.add(kind);
175
+ return [...kinds].filter((k) => !WOODS_NO_GEAR_KINDS.has(k) && (woodsRingOfNpcKind(k) ?? 1) > 1);
176
+ }
177
+ /**
178
+ * Some pieces are the lair's own: the maul is the ogres' (the Ironjaw Fortress hammers its iron into gear), the blade and the pendant
179
+ * are the dragons'. Anything not listed drops from every creature in its ring.
180
+ */
181
+ const WOODS_GEAR_ONLY_FROM = {
182
+ ironjawmaul: ['ironjawogre', 'ironjawchief'],
183
+ dragonfangblade: ['dragon'],
184
+ dragonfangpendant: ['dragon'],
185
+ };
186
+ /** A grunt's chance for each weapon, and a boss's (placeholders: roughly one in two hundred, and one in twenty-five). */
187
+ export const WOODS_GRUNT_WEAPON_CHANCE = 0.005;
188
+ export const WOODS_BOSS_WEAPON_CHANCE = 0.04;
189
+ /** Armour pieces climb with the ring (a grunt: 0.25% in Ring 2, 0.6% in Ring 5); a boss rolls five times as often. */
190
+ const WOODS_GRUNT_ARMOUR_CHANCE = { 1: 0, 2: 0.0025, 3: 0.003, 4: 0.004, 5: 0.006 };
191
+ export const WOODS_BOSS_ARMOUR_MULT = 5;
192
+ /** The chase item: one in about 650 off a grunt, one in 65 off a boss. */
193
+ export const WOODS_GRUNT_CHASE_CHANCE = 0.0015;
194
+ export const WOODS_BOSS_CHASE_CHANCE = 0.015;
195
+ /**
196
+ * The ladder drops of one creature kind: its ring's weapons, armour and chase items, each an independent small chance (drops.ts rolls
197
+ * every entry on its own). Empty for a creature on no ring, the crooks (their own table) and the spiderlings.
198
+ */
199
+ export function woodsGearDropEntries(kind) {
200
+ if (WOODS_NO_GEAR_KINDS.has(kind))
201
+ return [];
202
+ const ring = woodsRingOfNpcKind(kind);
203
+ if (!ring || ring < 2)
204
+ return [];
205
+ const boss = isWoodsBossKind(kind);
206
+ const rung = WOODS_GEAR_LADDER[ring];
207
+ const allowed = (item) => {
208
+ const only = WOODS_GEAR_ONLY_FROM[item];
209
+ return !only || only.includes(kind);
210
+ };
211
+ const entry = (itemKind, chance) => ({ itemKind, chance, minQty: 1, maxQty: 1 });
212
+ const out = [];
213
+ for (const w of rung.weapons) {
214
+ if (allowed(w.kind))
215
+ out.push(entry(w.kind, boss ? WOODS_BOSS_WEAPON_CHANCE : WOODS_GRUNT_WEAPON_CHANCE));
216
+ }
217
+ for (const a of rung.armour) {
218
+ if (allowed(a))
219
+ out.push(entry(a, WOODS_GRUNT_ARMOUR_CHANCE[ring] * (boss ? WOODS_BOSS_ARMOUR_MULT : 1)));
220
+ }
221
+ for (const c of rung.chase) {
222
+ if (allowed(c))
223
+ out.push(entry(c, boss ? WOODS_BOSS_CHASE_CHANCE : WOODS_GRUNT_CHASE_CHANCE));
224
+ }
225
+ return out;
226
+ }
227
+ //# sourceMappingURL=woodsGearLadder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woodsGearLadder.js","sourceRoot":"","sources":["../src/woodsGearLadder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreadwood-types/types",
3
- "version": "0.1.345",
3
+ "version": "0.1.347",
4
4
  "description": "Public wire protocol and client-safe constants for Dreadwoods",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "scripts": {
24
24
  "build": "tsc -p tsconfig.json",
25
- "test": "node --test scripts/pirate-bay-phase6-test.mjs scripts/bay-reaches-test.mjs scripts/pirate-ships-test.mjs scripts/crescent-queen-test.mjs scripts/port-blackwake-test.mjs scripts/pirate-treasure-test.mjs scripts/shop-food-test.mjs scripts/castaway-camp-test.mjs scripts/animation-test.mjs scripts/starter-jobs-test.mjs scripts/cooking-nudge-test.mjs scripts/surface-chart-test.mjs scripts/south-expansion-test.mjs scripts/rudd-test.mjs scripts/cave-map-test.mjs scripts/birch-combat-test.mjs scripts/border-kit-test.mjs scripts/fort-rook-bosses-test.mjs scripts/bounty-first-test.mjs scripts/bounty-high-tiers-test.mjs scripts/running-test.mjs scripts/energy-test.mjs scripts/starter-town-test.mjs scripts/starter-expansion-test.mjs scripts/five-arches-test.mjs scripts/landing-test.mjs scripts/cove-ship-test.mjs scripts/south-fields-quests-test.mjs scripts/south-fields-errands-test.mjs scripts/arcane-lands-test.mjs scripts/fair-folk-test.mjs scripts/fair-contests-test.mjs scripts/missing-shipment-test.mjs scripts/world-boss-ring-test.mjs scripts/ringstone-fight-test.mjs scripts/highstone-test.mjs scripts/fenstone-test.mjs scripts/brackenstone-test.mjs scripts/lair-awakening-test.mjs scripts/spider-hollow-deeper-test.mjs scripts/hopewood-wildlife-test.mjs scripts/hollin-wildlife-test.mjs scripts/hopewood-quests-test.mjs scripts/western-train-test.mjs scripts/moving-train-test.mjs scripts/train-circuit-test.mjs scripts/forge-halt-test.mjs scripts/forge-polish-test.mjs scripts/western-station-test.mjs scripts/hollin-quests-test.mjs scripts/western-lost-supplies-test.mjs scripts/western-herbal-remedies-test.mjs scripts/western-field-shrine-test.mjs scripts/western-kingdoms-test.mjs scripts/lantern-wake-test.mjs scripts/brindlecross-test.mjs scripts/brindlecross-quest-test.mjs scripts/greenwood-wilds-test.mjs scripts/greenwood-wildlife-test.mjs scripts/greenwood-quest-test.mjs scripts/dwarf-road-wildlife-test.mjs scripts/dwarf-road-test.mjs scripts/riversend-test.mjs scripts/riversend-content-test.mjs scripts/gatewarden-rounds-test.mjs scripts/boss-e8-test.mjs scripts/lantern-wake-town-test.mjs scripts/world-regions-test.mjs scripts/copse-wildlife-test.mjs scripts/copse-quests-test.mjs scripts/marches-wildlife-test.mjs scripts/marches-quests-test.mjs scripts/train-seats-test.mjs scripts/lantern-wake-gallery-test.mjs scripts/lantern-wake-wildlife-test.mjs scripts/lantern-wake-quest-test.mjs scripts/dwarf-hold-test.mjs scripts/dwarf-road-camp-test.mjs scripts/western-line-texts-test.mjs scripts/xp-test.mjs scripts/bank-test.mjs scripts/timed-access-test.mjs scripts/ground-items-test.mjs scripts/name-filter-test.mjs scripts/woodwork-logs-test.mjs scripts/area-gates-test.mjs scripts/arcane-realms-test.mjs scripts/frozen-dungeons-test.mjs scripts/deep-seam-test.mjs scripts/hollow-delve-test.mjs scripts/mining-quests-test.mjs scripts/long-winter-test.mjs scripts/roster-delta-test.mjs scripts/bow-ladder-test.mjs scripts/lantern-wake-ledge-test.mjs scripts/explorer-ledger-test.mjs scripts/ore-smithing-test.mjs scripts/red-waste-test.mjs scripts/red-waste-folk-test.mjs scripts/daily-hooks-test.mjs scripts/sparring-yard-test.mjs scripts/t16-siege-floe-beach-test.mjs scripts/mammoth-road-test.mjs scripts/mammoth-road-test.mjs scripts/gulls-map-test.mjs scripts/gulls-rook-test.mjs scripts/ride-the-line-test.mjs scripts/gallowmere-test.mjs scripts/gallowmere-content-test.mjs scripts/fishing-derby-test.mjs scripts/sled-run-test.mjs scripts/eastern-marches-a-test.mjs scripts/windward-chalkshell-test.mjs scripts/gullhook-head-test.mjs scripts/webfen-test.mjs scripts/safe-pockets-test.mjs scripts/gallowmere-extras-test.mjs scripts/t53-high-ledge-skill-quests-test.mjs scripts/camp-traders-recommended-test.mjs scripts/west-coast-test.mjs scripts/heartwood-hunt-test.mjs scripts/ironjaw-watch-test.mjs scripts/beacon-night-test.mjs scripts/calverton-extension-test.mjs scripts/gravewatch-test.mjs scripts/tide-of-blood-test.mjs scripts/north-wilds-test.mjs scripts/toll-road-test.mjs scripts/capital-quests-test.mjs scripts/capital-shops-test.mjs scripts/lean-wanted-test.mjs scripts/delvers-ladder-test.mjs scripts/last-signal-test.mjs scripts/sea-salt-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/field-guide-test.mjs scripts/titles-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/voyages-test.mjs scripts/weekly-hunt-test.mjs scripts/west-branches-test.mjs scripts/skill-fill-test.mjs scripts/early-fill-test.mjs scripts/battlefield-test.mjs scripts/war-camp-drill-test.mjs scripts/camp-kitchens-test.mjs scripts/rangers-rest-test.mjs scripts/fishing-reaches-test.mjs scripts/thaw-crossing-test.mjs scripts/millstream-hamlet-test.mjs scripts/timber-convoy-test.mjs scripts/ashfall-camp-test.mjs scripts/tide-tunnel-test.mjs scripts/server-update-test.mjs scripts/border-jobs-test.mjs scripts/north-quarry-quest-test.mjs",
25
+ "test": "node --test scripts/pirate-bay-phase6-test.mjs scripts/bay-reaches-test.mjs scripts/pirate-ships-test.mjs scripts/crescent-queen-test.mjs scripts/port-blackwake-test.mjs scripts/pirate-treasure-test.mjs scripts/shop-food-test.mjs scripts/castaway-camp-test.mjs scripts/animation-test.mjs scripts/starter-jobs-test.mjs scripts/cooking-nudge-test.mjs scripts/surface-chart-test.mjs scripts/south-expansion-test.mjs scripts/rudd-test.mjs scripts/cave-map-test.mjs scripts/birch-combat-test.mjs scripts/border-kit-test.mjs scripts/fort-rook-bosses-test.mjs scripts/bounty-first-test.mjs scripts/bounty-high-tiers-test.mjs scripts/running-test.mjs scripts/energy-test.mjs scripts/starter-town-test.mjs scripts/starter-expansion-test.mjs scripts/five-arches-test.mjs scripts/landing-test.mjs scripts/cove-ship-test.mjs scripts/south-fields-quests-test.mjs scripts/south-fields-errands-test.mjs scripts/arcane-lands-test.mjs scripts/fair-folk-test.mjs scripts/fair-contests-test.mjs scripts/missing-shipment-test.mjs scripts/world-boss-ring-test.mjs scripts/ringstone-fight-test.mjs scripts/highstone-test.mjs scripts/fenstone-test.mjs scripts/brackenstone-test.mjs scripts/lair-awakening-test.mjs scripts/spider-hollow-deeper-test.mjs scripts/hopewood-wildlife-test.mjs scripts/hollin-wildlife-test.mjs scripts/hopewood-quests-test.mjs scripts/western-train-test.mjs scripts/moving-train-test.mjs scripts/train-circuit-test.mjs scripts/forge-halt-test.mjs scripts/forge-polish-test.mjs scripts/western-station-test.mjs scripts/hollin-quests-test.mjs scripts/western-lost-supplies-test.mjs scripts/western-herbal-remedies-test.mjs scripts/western-field-shrine-test.mjs scripts/western-kingdoms-test.mjs scripts/lantern-wake-test.mjs scripts/brindlecross-test.mjs scripts/brindlecross-quest-test.mjs scripts/greenwood-wilds-test.mjs scripts/greenwood-wildlife-test.mjs scripts/greenwood-quest-test.mjs scripts/dwarf-road-wildlife-test.mjs scripts/dwarf-road-test.mjs scripts/riversend-test.mjs scripts/riversend-content-test.mjs scripts/gatewarden-rounds-test.mjs scripts/boss-e8-test.mjs scripts/lantern-wake-town-test.mjs scripts/world-regions-test.mjs scripts/copse-wildlife-test.mjs scripts/copse-quests-test.mjs scripts/marches-wildlife-test.mjs scripts/marches-quests-test.mjs scripts/train-seats-test.mjs scripts/lantern-wake-gallery-test.mjs scripts/lantern-wake-wildlife-test.mjs scripts/lantern-wake-quest-test.mjs scripts/dwarf-hold-test.mjs scripts/dwarf-road-camp-test.mjs scripts/western-line-texts-test.mjs scripts/xp-test.mjs scripts/bank-test.mjs scripts/timed-access-test.mjs scripts/ground-items-test.mjs scripts/name-filter-test.mjs scripts/woodwork-logs-test.mjs scripts/area-gates-test.mjs scripts/arcane-realms-test.mjs scripts/frozen-dungeons-test.mjs scripts/deep-seam-test.mjs scripts/hollow-delve-test.mjs scripts/mining-quests-test.mjs scripts/long-winter-test.mjs scripts/roster-delta-test.mjs scripts/bow-ladder-test.mjs scripts/lantern-wake-ledge-test.mjs scripts/explorer-ledger-test.mjs scripts/ore-smithing-test.mjs scripts/red-waste-test.mjs scripts/red-waste-folk-test.mjs scripts/daily-hooks-test.mjs scripts/sparring-yard-test.mjs scripts/t16-siege-floe-beach-test.mjs scripts/mammoth-road-test.mjs scripts/mammoth-road-test.mjs scripts/gulls-map-test.mjs scripts/gulls-rook-test.mjs scripts/ride-the-line-test.mjs scripts/gallowmere-test.mjs scripts/gallowmere-content-test.mjs scripts/fishing-derby-test.mjs scripts/sled-run-test.mjs scripts/eastern-marches-a-test.mjs scripts/windward-chalkshell-test.mjs scripts/gullhook-head-test.mjs scripts/webfen-test.mjs scripts/safe-pockets-test.mjs scripts/gallowmere-extras-test.mjs scripts/t53-high-ledge-skill-quests-test.mjs scripts/camp-traders-recommended-test.mjs scripts/west-coast-test.mjs scripts/heartwood-hunt-test.mjs scripts/ironjaw-watch-test.mjs scripts/beacon-night-test.mjs scripts/calverton-extension-test.mjs scripts/gravewatch-test.mjs scripts/tide-of-blood-test.mjs scripts/north-wilds-test.mjs scripts/toll-road-test.mjs scripts/capital-quests-test.mjs scripts/capital-shops-test.mjs scripts/lean-wanted-test.mjs scripts/delvers-ladder-test.mjs scripts/last-signal-test.mjs scripts/sea-salt-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/field-guide-test.mjs scripts/titles-test.mjs scripts/dwarf-hold-hub-test.mjs scripts/voyages-test.mjs scripts/weekly-hunt-test.mjs scripts/west-branches-test.mjs scripts/skill-fill-test.mjs scripts/early-fill-test.mjs scripts/battlefield-test.mjs scripts/war-camp-drill-test.mjs scripts/camp-kitchens-test.mjs scripts/rangers-rest-test.mjs scripts/fishing-reaches-test.mjs scripts/thaw-crossing-test.mjs scripts/millstream-hamlet-test.mjs scripts/timber-convoy-test.mjs scripts/ashfall-camp-test.mjs scripts/tide-tunnel-test.mjs scripts/server-update-test.mjs scripts/border-jobs-test.mjs scripts/north-quarry-quest-test.mjs scripts/skills-31-40-test.mjs scripts/road-table-test.mjs scripts/woods-gear-ladder-test.mjs",
26
26
  "dev": "tsc -p tsconfig.json --watch",
27
27
  "prepare": "npm run build",
28
28
  "prepublishOnly": "npm run build"