@dreadwood-types/types 0.1.0

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/README.md +43 -0
  2. package/dist/appearance.d.ts +80 -0
  3. package/dist/appearance.d.ts.map +1 -0
  4. package/dist/appearance.js +319 -0
  5. package/dist/appearance.js.map +1 -0
  6. package/dist/bank.d.ts +15 -0
  7. package/dist/bank.d.ts.map +1 -0
  8. package/dist/bank.js +45 -0
  9. package/dist/bank.js.map +1 -0
  10. package/dist/clientConfig.d.ts +103 -0
  11. package/dist/clientConfig.d.ts.map +1 -0
  12. package/dist/clientConfig.js +209 -0
  13. package/dist/clientConfig.js.map +1 -0
  14. package/dist/constants.d.ts +205 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +713 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/cooking.d.ts +26 -0
  19. package/dist/cooking.d.ts.map +1 -0
  20. package/dist/cooking.js +41 -0
  21. package/dist/cooking.js.map +1 -0
  22. package/dist/equipment.d.ts +47 -0
  23. package/dist/equipment.d.ts.map +1 -0
  24. package/dist/equipment.js +186 -0
  25. package/dist/equipment.js.map +1 -0
  26. package/dist/goblinCave.d.ts +112 -0
  27. package/dist/goblinCave.d.ts.map +1 -0
  28. package/dist/goblinCave.js +69 -0
  29. package/dist/goblinCave.js.map +1 -0
  30. package/dist/groundItems.d.ts +17 -0
  31. package/dist/groundItems.d.ts.map +1 -0
  32. package/dist/groundItems.js +104 -0
  33. package/dist/groundItems.js.map +1 -0
  34. package/dist/index.d.ts +16 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +16 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/landmarks.d.ts +366 -0
  39. package/dist/landmarks.d.ts.map +1 -0
  40. package/dist/landmarks.js +584 -0
  41. package/dist/landmarks.js.map +1 -0
  42. package/dist/messages.d.ts +723 -0
  43. package/dist/messages.d.ts.map +1 -0
  44. package/dist/messages.js +38 -0
  45. package/dist/messages.js.map +1 -0
  46. package/dist/nameFilter.d.ts +8 -0
  47. package/dist/nameFilter.d.ts.map +1 -0
  48. package/dist/nameFilter.js +94 -0
  49. package/dist/nameFilter.js.map +1 -0
  50. package/dist/quests.d.ts +63 -0
  51. package/dist/quests.d.ts.map +1 -0
  52. package/dist/quests.js +233 -0
  53. package/dist/quests.js.map +1 -0
  54. package/dist/torches.d.ts +7 -0
  55. package/dist/torches.d.ts.map +1 -0
  56. package/dist/torches.js +11 -0
  57. package/dist/torches.js.map +1 -0
  58. package/dist/woodwork.d.ts +206 -0
  59. package/dist/woodwork.d.ts.map +1 -0
  60. package/dist/woodwork.js +365 -0
  61. package/dist/woodwork.js.map +1 -0
  62. package/dist/xp.d.ts +74 -0
  63. package/dist/xp.d.ts.map +1 -0
  64. package/dist/xp.js +126 -0
  65. package/dist/xp.js.map +1 -0
  66. package/dist/zones.d.ts +30 -0
  67. package/dist/zones.d.ts.map +1 -0
  68. package/dist/zones.js +143 -0
  69. package/dist/zones.js.map +1 -0
  70. package/package.json +36 -0
@@ -0,0 +1,206 @@
1
+ export declare const WOODWORK_TREE_LEVELS: {
2
+ readonly birch: 1;
3
+ readonly poplar: 5;
4
+ readonly pine: 10;
5
+ readonly spruce: 15;
6
+ readonly hazel: 20;
7
+ readonly alder: 25;
8
+ readonly ash: 30;
9
+ readonly beech: 35;
10
+ readonly oak: 40;
11
+ };
12
+ export type WoodworkTreeId = keyof typeof WOODWORK_TREE_LEVELS;
13
+ export declare const BIRCH_WOOD_KIND = "birchwood";
14
+ export declare const POPLAR_WOOD_KIND = "poplarwood";
15
+ export declare const PINE_WOOD_KIND = "pinewood";
16
+ export declare const SPRUCE_WOOD_KIND = "sprucewood";
17
+ export declare const HATCHET_KIND = "hatchet";
18
+ export declare const FOLDING_SAW_KIND = "foldingsaw";
19
+ export declare const BROKEN_SAW_KIND = "brokensaw";
20
+ /** Forest Ranger sells a working saw for this many coins. */
21
+ export declare const FOLDING_SAW_PRICE = 30;
22
+ /** Chance a working saw breaks on each woodwork action that uses one. */
23
+ export declare const SAW_BREAK_CHANCE = 0.01;
24
+ /**
25
+ * Birch only. Poplar and pine additionally gated the cart behind woodcut levels
26
+ * 5 and 10, which put the first fast-travel far past the point it is useful.
27
+ */
28
+ export declare const CARRIAGE_REPAIR_COST: Array<{
29
+ kind: string;
30
+ qty: number;
31
+ }>;
32
+ /** Just above beginner birch work; pine/poplar materials still gate the gather. */
33
+ export declare const CARRIAGE_REPAIR_WOODWORK_LEVEL = 2;
34
+ export declare const CARRIAGE_STYLE_BROKEN = "broken";
35
+ export declare const CARRIAGE_STYLE_FIXED = "carriage";
36
+ export declare const CARRIAGE_STYLE_DRIVEN = "driven";
37
+ /** Hired driver plus owned draft horse hitched to the shafts. */
38
+ export declare const CARRIAGE_STYLE_HITCHED = "hitched";
39
+ /** Northwest battlefield lake bridge — a modest early Woodwork project. */
40
+ export declare const BATTLEFIELD_BRIDGE_REPAIR_COST: Array<{
41
+ kind: string;
42
+ qty: number;
43
+ }>;
44
+ export declare const BATTLEFIELD_BRIDGE_REPAIR_WOODWORK_LEVEL = 15;
45
+ /** Roughly a full spruce-tier craft plus the gather effort across four woods. */
46
+ export declare const BATTLEFIELD_BRIDGE_REPAIR_WOODWORK_XP = 1500;
47
+ /** Building a new route across the battlefield is a major discovery. */
48
+ export declare const BATTLEFIELD_BRIDGE_REPAIR_EXPLORER_XP = 500;
49
+ export declare const RUPERT_ROW_BRIDGE_CROSSING_COST = 200;
50
+ export declare const JOHN_SAFE_PASSAGE_COST = 250;
51
+ export declare const BATTLEFIELD_BRIDGE_STYLE_BROKEN = "broken";
52
+ export declare const BATTLEFIELD_BRIDGE_STYLE_FIXED = "repaired";
53
+ /**
54
+ * Personal gap span for a player who finished the quest. Shared world tiles
55
+ * stay `broken`; only this viewer's chunk is rewritten, so the smashed
56
+ * mid-span can look like a magical crossing without turning the whole deck
57
+ * into a travel target.
58
+ */
59
+ export declare const BATTLEFIELD_BRIDGE_STYLE_CROSSING = "crossing";
60
+ export declare function isBattlefieldBridgeBrokenStyle(style?: string): boolean;
61
+ export declare function isBattlefieldBridgeCrossingStyle(style?: string): boolean;
62
+ /** Rewrite a smashed-gap style (`broken`, `broken-west`, …) to the personal span. */
63
+ export declare function personalBridgeCrossingStyle(brokenStyle: string | undefined): string;
64
+ export declare function woodKindForStyle(style: string | undefined): string;
65
+ export declare function woodXpForStyle(style: string | undefined): number;
66
+ export declare const BIRCH_WOOD_XP = 60;
67
+ export declare const BIRCH_WOOD_YIELD_MIN = 1;
68
+ export declare const BIRCH_WOOD_YIELD_MAX = 3;
69
+ export declare const WOODCUT_DURATION_MS = 3200;
70
+ export declare const WOODCUT_RANGE = 1;
71
+ /** Local mesh size before the storage hut's entity scale (5 → 9-tile wall ring). */
72
+ export declare const STORAGE_HUT_MESH_WIDTH = 1.76;
73
+ export declare const STORAGE_HUT_MESH_DEPTH = 1.76;
74
+ export declare const STORAGE_HUT_REPAIR_WOODWORK_LEVEL = 5;
75
+ export declare const STORAGE_HUT_REPAIR_COST: Array<{
76
+ kind: string;
77
+ qty: number;
78
+ }>;
79
+ /** Buildable from the start — birch arrows are a level 1 recipe and need it. */
80
+ export declare const WORKBENCH_BUILD_WOODWORK_LEVEL = 1;
81
+ export declare const WORKBENCH_BUILD_COST: Array<{
82
+ kind: string;
83
+ qty: number;
84
+ }>;
85
+ export declare const NETTLES_KIND = "nettles";
86
+ /** Legacy item id retained so existing inventories remain valid; shown as Sharp Stone. */
87
+ export declare const SHARP_ROCK_KIND = "sharprock";
88
+ /** Common cobble chipped from ordinary scenery rocks — not the rare knapped sharp stone. */
89
+ export declare const STONE_KIND = "stone";
90
+ export declare const SPRUCE_ARROW_KIND = "sprucearrow";
91
+ export declare const CARVING_KNIFE_KIND = "carvingknife";
92
+ /** One craft batch per tick. Fast enough that a knife-stroke loop can fill it. */
93
+ export declare const WOODCRAFT_INTERVAL_MS = 900;
94
+ export type WoodworkRecipe = {
95
+ id: string;
96
+ /** Item produced, and how many per craft. */
97
+ output: string;
98
+ outputQty: number;
99
+ level: number;
100
+ xp: number;
101
+ materials: Array<{
102
+ kind: string;
103
+ qty: number;
104
+ }>;
105
+ };
106
+ /**
107
+ * Everything craftable at a work bench. Ordered by level so the bench menu can
108
+ * render the table straight through. Crafting also requires a carving knife.
109
+ */
110
+ export declare const WOODWORK_RECIPES: WoodworkRecipe[];
111
+ export declare function woodworkRecipe(id: string): WoodworkRecipe | null;
112
+ export declare const NETTLES_FORAGING_LEVEL = 1;
113
+ /** Ordinary scenery rocks — pebbles, default stones, boulders. Crags are cliff faces. */
114
+ export declare const STONE_FORAGING_LEVEL = 1;
115
+ export declare const SHARP_ROCK_FORAGING_LEVEL = 5;
116
+ /** Inspect rotten farm food or battlefield rotten meat for maggots. */
117
+ export declare const MAGGOT_FORAGING_LEVEL = 8;
118
+ /** Dig earthworm casts on grass with a garden fork. */
119
+ export declare const EARTHWORM_FORAGING_LEVEL = 15;
120
+ /** Tench on the goblin side of the battlefield lake. */
121
+ export declare const TENCH_FISHING_LEVEL = 20;
122
+ /** Perch need a rod, tackle, bait and a little lake-fishing experience. */
123
+ export declare const PERCH_FISHING_LEVEL = 7;
124
+ export declare const POND_FISHING_LEVEL = 1;
125
+ /**
126
+ * Odds a cast lands its fish. Used to be a flat 0.5 regardless of skill, so
127
+ * Fishing level bought you nothing at the rod — the only thing it gated was
128
+ * whether tench were castable at all.
129
+ *
130
+ * Now a cast starts unreliable at the level that unlocks the fish and improves
131
+ * toward MAX_LEVEL, so training the skill is visible in the catch rate. The
132
+ * floor is per-fish rather than global: arriving at tench (level 20) is as
133
+ * scrappy as arriving at perch (level 1) was, instead of veterans landing
134
+ * their first tench four casts in five.
135
+ */
136
+ export declare const FISHING_CATCH_CHANCE_MIN = 0.45;
137
+ export declare const FISHING_CATCH_CHANCE_MAX = 0.9;
138
+ export declare function fishingCatchChance(fishingLevel: number, requiredLevel: number): number;
139
+ export declare const NETTLES_XP = 20;
140
+ export declare const STONE_FORAGE_XP = 3;
141
+ export declare const SHARP_ROCK_XP = 60;
142
+ /** Cliff-face crags stay scenery; everything else is a loose stone you can pocket. */
143
+ export declare function isForageableRockStyle(style: string | undefined): boolean;
144
+ export declare const MAGGOT_FORAGE_XP = 28;
145
+ export declare const EARTHWORM_FORAGE_XP = 38;
146
+ export declare const CHICKEN_FEATHER_FORAGE_LEVEL = 1;
147
+ export declare const CHICKEN_FEATHER_FORAGE_XP = 23;
148
+ /** Identify forest "Suspicious tracks" as Fox Tracks. */
149
+ export declare const FOX_TRACKS_FORAGING_LEVEL = 3;
150
+ export declare const FOX_TRACKS_IDENTIFY_XP = 22;
151
+ export declare const FOX_TRACKS_KIND = "foxtracks";
152
+ export declare const FOXTAIL_KIND = "foxtail";
153
+ export declare const FOX_BAIT_RAW_RABBITS = 3;
154
+ export declare const FOX_BAIT_DELAY_MIN_MS = 5000;
155
+ export declare const FOX_BAIT_DELAY_MAX_MS = 10000;
156
+ export declare const FOX_BAIT_SPAWN_MIN = 3;
157
+ export declare const FOX_BAIT_SPAWN_MAX = 4;
158
+ /** Base Camp Suspicious hole (and other caveentrance tunnels that use the same gate). */
159
+ export declare const CAVE_ENTRANCE_EXPLORER_LEVEL = 5;
160
+ /** Bait-end tile of a fox-track trail (`end` or `end-n` / `end-e` / …). */
161
+ export declare function isFoxTrackEndStyle(style: string | undefined): boolean;
162
+ export declare const CHICKEN_FEATHER_YIELD_MIN = 1;
163
+ export declare const CHICKEN_FEATHER_YIELD_MAX = 3;
164
+ /** Same odds as picking a fight with a seagull worth its feathers — sometimes it isn't peaceful. */
165
+ export declare const CHICKEN_ATTACK_CHANCE = 0.1;
166
+ export declare const CHICKEN_PECK_DAMAGE_MIN = 1;
167
+ export declare const CHICKEN_PECK_DAMAGE_MAX = 3;
168
+ export declare const WILSON_MAGGOT_COST = 150;
169
+ export declare const SMALL_FISHING_ROD_KIND = "smallfishingrod";
170
+ export declare const MAGGOT_KIND = "maggot";
171
+ export declare const EARTHWORM_KIND = "earthworm";
172
+ export declare const FISHING_LINE_KIND = "fishingline";
173
+ export declare const FISHING_HOOK_KIND = "fishinghook";
174
+ export declare const FISHING_FLOAT_KIND = "fishingfloat";
175
+ /** Chance a fishing attempt snaps the line (consumes line, hook, and float). */
176
+ export declare const FISHING_LINE_SNAP_CHANCE = 0.05;
177
+ export declare const WILSON_SHOP_STOCK: readonly {
178
+ kind: string;
179
+ price: number;
180
+ qty: number;
181
+ }[];
182
+ export declare const CARVING_KNIFE_PRICE = 50;
183
+ /**
184
+ * Minimum spacing between nettle patches, in tiles. The brief was "30-40
185
+ * seconds of walking apart"; at MOVE_SPEED_TILES_PER_SEC that is 105-140 tiles,
186
+ * so patches are genuinely hunted rather than stumbled over.
187
+ */
188
+ export declare const NETTLES_MIN_SPACING = 105;
189
+ /** Sharp rock is the long hunt — roughly ten minutes of searching. */
190
+ export declare const SHARP_ROCK_MIN_SPACING = 260;
191
+ /**
192
+ * Earthworm casts are a rare, world-scale forage node (like the beach worm
193
+ * poo casts), not a per-tile density roll — only this many exist at once,
194
+ * anywhere in the world.
195
+ */
196
+ export declare const EARTHWORM_CAST_COUNT = 3;
197
+ /** Keep the handful of casts spread across the map rather than clustered. */
198
+ export declare const EARTHWORM_CAST_MIN_SPACING = 150;
199
+ export declare function isBrokenSaw(kind: string): boolean;
200
+ /** Working saw suitable for chopping / woodwork (not a broken remnant). */
201
+ export declare function isWorkingSaw(kind: string): boolean;
202
+ export declare function isWoodworkTool(kind: string): boolean;
203
+ export declare function isCuttableTreeStyle(style: string | undefined): boolean;
204
+ export declare function woodworkLevelForStyle(style: string | undefined): number;
205
+ export declare function rollBirchWoodQty(): number;
206
+ //# sourceMappingURL=woodwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woodwork.d.ts","sourceRoot":"","sources":["../src/woodwork.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,365 @@
1
+ import { MAX_LEVEL } from './xp.js';
2
+ import { UNLIT_BIRCH_TORCH } from './torches.js';
3
+ export const WOODWORK_TREE_LEVELS = {
4
+ birch: 1,
5
+ poplar: 5,
6
+ pine: 10,
7
+ spruce: 15,
8
+ hazel: 20,
9
+ alder: 25,
10
+ ash: 30,
11
+ beech: 35,
12
+ oak: 40,
13
+ };
14
+ export const BIRCH_WOOD_KIND = 'birchwood';
15
+ export const POPLAR_WOOD_KIND = 'poplarwood';
16
+ export const PINE_WOOD_KIND = 'pinewood';
17
+ export const SPRUCE_WOOD_KIND = 'sprucewood';
18
+ export const HATCHET_KIND = 'hatchet';
19
+ export const FOLDING_SAW_KIND = 'foldingsaw';
20
+ export const BROKEN_SAW_KIND = 'brokensaw';
21
+ /** Forest Ranger sells a working saw for this many coins. */
22
+ export const FOLDING_SAW_PRICE = 30;
23
+ /** Chance a working saw breaks on each woodwork action that uses one. */
24
+ export const SAW_BREAK_CHANCE = 0.01;
25
+ /**
26
+ * Birch only. Poplar and pine additionally gated the cart behind woodcut levels
27
+ * 5 and 10, which put the first fast-travel far past the point it is useful.
28
+ */
29
+ export const CARRIAGE_REPAIR_COST = [
30
+ { kind: BIRCH_WOOD_KIND, qty: 30 },
31
+ ];
32
+ /** Just above beginner birch work; pine/poplar materials still gate the gather. */
33
+ export const CARRIAGE_REPAIR_WOODWORK_LEVEL = 2;
34
+ export const CARRIAGE_STYLE_BROKEN = 'broken';
35
+ export const CARRIAGE_STYLE_FIXED = 'carriage';
36
+ export const CARRIAGE_STYLE_DRIVEN = 'driven';
37
+ /** Hired driver plus owned draft horse hitched to the shafts. */
38
+ export const CARRIAGE_STYLE_HITCHED = 'hitched';
39
+ /** Northwest battlefield lake bridge — a modest early Woodwork project. */
40
+ export const BATTLEFIELD_BRIDGE_REPAIR_COST = [
41
+ { kind: BIRCH_WOOD_KIND, qty: 30 },
42
+ { kind: POPLAR_WOOD_KIND, qty: 20 },
43
+ ];
44
+ export const BATTLEFIELD_BRIDGE_REPAIR_WOODWORK_LEVEL = 15;
45
+ /** Roughly a full spruce-tier craft plus the gather effort across four woods. */
46
+ export const BATTLEFIELD_BRIDGE_REPAIR_WOODWORK_XP = 1500;
47
+ /** Building a new route across the battlefield is a major discovery. */
48
+ export const BATTLEFIELD_BRIDGE_REPAIR_EXPLORER_XP = 500;
49
+ export const RUPERT_ROW_BRIDGE_CROSSING_COST = 200;
50
+ export const JOHN_SAFE_PASSAGE_COST = 250;
51
+ export const BATTLEFIELD_BRIDGE_STYLE_BROKEN = 'broken';
52
+ export const BATTLEFIELD_BRIDGE_STYLE_FIXED = 'repaired';
53
+ /**
54
+ * Personal gap span for a player who finished the quest. Shared world tiles
55
+ * stay `broken`; only this viewer's chunk is rewritten, so the smashed
56
+ * mid-span can look like a magical crossing without turning the whole deck
57
+ * into a travel target.
58
+ */
59
+ export const BATTLEFIELD_BRIDGE_STYLE_CROSSING = 'crossing';
60
+ export function isBattlefieldBridgeBrokenStyle(style) {
61
+ return (style ?? '').startsWith(BATTLEFIELD_BRIDGE_STYLE_BROKEN);
62
+ }
63
+ export function isBattlefieldBridgeCrossingStyle(style) {
64
+ return (style ?? '').startsWith(BATTLEFIELD_BRIDGE_STYLE_CROSSING);
65
+ }
66
+ /** Rewrite a smashed-gap style (`broken`, `broken-west`, …) to the personal span. */
67
+ export function personalBridgeCrossingStyle(brokenStyle) {
68
+ const style = brokenStyle ?? BATTLEFIELD_BRIDGE_STYLE_BROKEN;
69
+ if (!style.startsWith(BATTLEFIELD_BRIDGE_STYLE_BROKEN))
70
+ return style;
71
+ return `${BATTLEFIELD_BRIDGE_STYLE_CROSSING}${style.slice(BATTLEFIELD_BRIDGE_STYLE_BROKEN.length)}`;
72
+ }
73
+ /**
74
+ * Log dropped by each tree style, and the Woodwork XP for felling it.
75
+ * Felling rates were tripled: a chop is a 3.2s commit plus the walk to the tree,
76
+ * and Woodwork gates most of the crafting tree, so the old rates made it the
77
+ * slowest skill to level by a wide margin.
78
+ */
79
+ const WOOD_BY_STYLE = {
80
+ poplar: { kind: POPLAR_WOOD_KIND, xp: 36 },
81
+ pine: { kind: PINE_WOOD_KIND, xp: 75 },
82
+ spruce: { kind: SPRUCE_WOOD_KIND, xp: 120 },
83
+ };
84
+ export function woodKindForStyle(style) {
85
+ return (style && WOOD_BY_STYLE[style]?.kind) || BIRCH_WOOD_KIND;
86
+ }
87
+ export function woodXpForStyle(style) {
88
+ return (style && WOOD_BY_STYLE[style]?.xp) || BIRCH_WOOD_XP;
89
+ }
90
+ export const BIRCH_WOOD_XP = 60;
91
+ export const BIRCH_WOOD_YIELD_MIN = 1;
92
+ export const BIRCH_WOOD_YIELD_MAX = 3;
93
+ export const WOODCUT_DURATION_MS = 3200;
94
+ export const WOODCUT_RANGE = 1;
95
+ /** Local mesh size before the storage hut's entity scale (5 → 9-tile wall ring). */
96
+ export const STORAGE_HUT_MESH_WIDTH = 1.76;
97
+ export const STORAGE_HUT_MESH_DEPTH = 1.76;
98
+ export const STORAGE_HUT_REPAIR_WOODWORK_LEVEL = 5;
99
+ export const STORAGE_HUT_REPAIR_COST = [
100
+ { kind: BIRCH_WOOD_KIND, qty: 20 },
101
+ ];
102
+ /** Buildable from the start — birch arrows are a level 1 recipe and need it. */
103
+ export const WORKBENCH_BUILD_WOODWORK_LEVEL = 1;
104
+ export const WORKBENCH_BUILD_COST = [
105
+ { kind: BIRCH_WOOD_KIND, qty: 40 },
106
+ ];
107
+ export const NETTLES_KIND = 'nettles';
108
+ /** Legacy item id retained so existing inventories remain valid; shown as Sharp Stone. */
109
+ export const SHARP_ROCK_KIND = 'sharprock';
110
+ /** Common cobble chipped from ordinary scenery rocks — not the rare knapped sharp stone. */
111
+ export const STONE_KIND = 'stone';
112
+ export const SPRUCE_ARROW_KIND = 'sprucearrow';
113
+ export const CARVING_KNIFE_KIND = 'carvingknife';
114
+ /** One craft batch per tick. Fast enough that a knife-stroke loop can fill it. */
115
+ export const WOODCRAFT_INTERVAL_MS = 900;
116
+ /**
117
+ * Everything craftable at a work bench. Ordered by level so the bench menu can
118
+ * render the table straight through. Crafting also requires a carving knife.
119
+ */
120
+ export const WOODWORK_RECIPES = [
121
+ {
122
+ id: 'bircharrow',
123
+ output: 'bircharrow',
124
+ outputQty: 5,
125
+ level: 1,
126
+ xp: 10,
127
+ materials: [
128
+ { kind: BIRCH_WOOD_KIND, qty: 1 },
129
+ { kind: 'feather', qty: 1 },
130
+ ],
131
+ },
132
+ {
133
+ id: UNLIT_BIRCH_TORCH,
134
+ output: UNLIT_BIRCH_TORCH,
135
+ outputQty: 1,
136
+ level: 5,
137
+ xp: 15,
138
+ materials: [{ kind: BIRCH_WOOD_KIND, qty: 1 }, { kind: 'hay', qty: 1 }],
139
+ },
140
+ {
141
+ // The poplar tier starts at 5 because that is when poplar becomes cuttable;
142
+ // any lower and the recipes are unbuildable without trading for the wood.
143
+ id: 'poplarhelmet',
144
+ output: 'poplarhelmet',
145
+ outputQty: 1,
146
+ level: 5,
147
+ xp: 120,
148
+ materials: [{ kind: POPLAR_WOOD_KIND, qty: 20 }],
149
+ },
150
+ {
151
+ id: 'poplarbody',
152
+ output: 'poplarbody',
153
+ outputQty: 1,
154
+ level: 6,
155
+ xp: 240,
156
+ materials: [{ kind: POPLAR_WOOD_KIND, qty: 40 }],
157
+ },
158
+ {
159
+ id: 'poplarspear',
160
+ output: 'poplarspear',
161
+ outputQty: 1,
162
+ level: 5,
163
+ xp: 180,
164
+ materials: [
165
+ { kind: POPLAR_WOOD_KIND, qty: 10 },
166
+ { kind: SHARP_ROCK_KIND, qty: 1 },
167
+ ],
168
+ },
169
+ {
170
+ id: 'poplarlegs',
171
+ output: 'poplarlegs',
172
+ outputQty: 1,
173
+ level: 7,
174
+ xp: 240,
175
+ materials: [{ kind: POPLAR_WOOD_KIND, qty: 40 }],
176
+ },
177
+ {
178
+ id: 'pinebow',
179
+ output: 'pinebow',
180
+ outputQty: 1,
181
+ level: 10,
182
+ // Deliberately far above woodcutting: felling 20 pines yields 500 XP, the
183
+ // bow alone pays 900 on top.
184
+ xp: 900,
185
+ materials: [
186
+ { kind: PINE_WOOD_KIND, qty: 20 },
187
+ { kind: NETTLES_KIND, qty: 8 },
188
+ ],
189
+ },
190
+ {
191
+ id: 'pineshield',
192
+ output: 'pineshield',
193
+ outputQty: 1,
194
+ level: 10,
195
+ xp: 800,
196
+ materials: [{ kind: PINE_WOOD_KIND, qty: 40 }],
197
+ },
198
+ {
199
+ id: SPRUCE_ARROW_KIND,
200
+ output: SPRUCE_ARROW_KIND,
201
+ outputQty: 5,
202
+ level: 20,
203
+ xp: 50,
204
+ materials: [
205
+ { kind: SPRUCE_WOOD_KIND, qty: 1 },
206
+ { kind: STONE_KIND, qty: 1 },
207
+ ],
208
+ },
209
+ ];
210
+ export function woodworkRecipe(id) {
211
+ return WOODWORK_RECIPES.find((r) => r.id === id) ?? null;
212
+ }
213
+ export const NETTLES_FORAGING_LEVEL = 1;
214
+ /** Ordinary scenery rocks — pebbles, default stones, boulders. Crags are cliff faces. */
215
+ export const STONE_FORAGING_LEVEL = 1;
216
+ export const SHARP_ROCK_FORAGING_LEVEL = 5;
217
+ /** Inspect rotten farm food or battlefield rotten meat for maggots. */
218
+ export const MAGGOT_FORAGING_LEVEL = 8;
219
+ /** Dig earthworm casts on grass with a garden fork. */
220
+ export const EARTHWORM_FORAGING_LEVEL = 15;
221
+ /** Tench on the goblin side of the battlefield lake. */
222
+ export const TENCH_FISHING_LEVEL = 20;
223
+ /** Perch need a rod, tackle, bait and a little lake-fishing experience. */
224
+ export const PERCH_FISHING_LEVEL = 7;
225
+ export const POND_FISHING_LEVEL = 1;
226
+ /**
227
+ * Odds a cast lands its fish. Used to be a flat 0.5 regardless of skill, so
228
+ * Fishing level bought you nothing at the rod — the only thing it gated was
229
+ * whether tench were castable at all.
230
+ *
231
+ * Now a cast starts unreliable at the level that unlocks the fish and improves
232
+ * toward MAX_LEVEL, so training the skill is visible in the catch rate. The
233
+ * floor is per-fish rather than global: arriving at tench (level 20) is as
234
+ * scrappy as arriving at perch (level 1) was, instead of veterans landing
235
+ * their first tench four casts in five.
236
+ */
237
+ /*
238
+ * Retuned after play: 0.25 at the unlock level made early fishing a slog —
239
+ * with a 3s cast that is ~12s a fish before the XP cut is even felt. The
240
+ * scaling is the point, not the punishment, so the floor now sits just under
241
+ * the old flat 0.5 and the ceiling is comfortably above it.
242
+ */
243
+ export const FISHING_CATCH_CHANCE_MIN = 0.45;
244
+ export const FISHING_CATCH_CHANCE_MAX = 0.9;
245
+ export function fishingCatchChance(fishingLevel, requiredLevel) {
246
+ const level = Math.max(1, Math.floor(fishingLevel));
247
+ const required = Math.max(1, Math.floor(requiredLevel));
248
+ const headroom = Math.max(1, MAX_LEVEL - required);
249
+ const t = Math.min(1, Math.max(0, (level - required) / headroom));
250
+ return (FISHING_CATCH_CHANCE_MIN + (FISHING_CATCH_CHANCE_MAX - FISHING_CATCH_CHANCE_MIN) * t);
251
+ }
252
+ /*
253
+ * Foraging XP awards, retuned 2026-08-23. The original rates made the skill
254
+ * effectively untrainable: against XP_TABLE (level 40 = 111,672 xp) a 12 xp
255
+ * nettle needed ~9,300 gathers for the cap and ~1,100 just for level 20.
256
+ *
257
+ * Nettles and sharp rocks remain the meaningful Foraging progress sources.
258
+ * Ordinary stones are intentionally much lower because they are plentiful,
259
+ * immediately accessible, and primarily a starter crafting material.
260
+ */
261
+ export const NETTLES_XP = 20;
262
+ // Ordinary rocks are plentiful starter materials, so a single stone should
263
+ // contribute only a small amount of Foraging progress.
264
+ export const STONE_FORAGE_XP = 3;
265
+ export const SHARP_ROCK_XP = 60;
266
+ /** Cliff-face crags stay scenery; everything else is a loose stone you can pocket. */
267
+ export function isForageableRockStyle(style) {
268
+ return style !== 'crag';
269
+ }
270
+ export const MAGGOT_FORAGE_XP = 28;
271
+ export const EARTHWORM_FORAGE_XP = 38;
272
+ export const CHICKEN_FEATHER_FORAGE_LEVEL = 1;
273
+ export const CHICKEN_FEATHER_FORAGE_XP = 23;
274
+ /** Identify forest "Suspicious tracks" as Fox Tracks. */
275
+ export const FOX_TRACKS_FORAGING_LEVEL = 3;
276
+ export const FOX_TRACKS_IDENTIFY_XP = 22;
277
+ export const FOX_TRACKS_KIND = 'foxtracks';
278
+ export const FOXTAIL_KIND = 'foxtail';
279
+ export const FOX_BAIT_RAW_RABBITS = 3;
280
+ export const FOX_BAIT_DELAY_MIN_MS = 5000;
281
+ export const FOX_BAIT_DELAY_MAX_MS = 10000;
282
+ export const FOX_BAIT_SPAWN_MIN = 3;
283
+ export const FOX_BAIT_SPAWN_MAX = 4;
284
+ /** Base Camp Suspicious hole (and other caveentrance tunnels that use the same gate). */
285
+ export const CAVE_ENTRANCE_EXPLORER_LEVEL = 5;
286
+ /** Bait-end tile of a fox-track trail (`end` or `end-n` / `end-e` / …). */
287
+ export function isFoxTrackEndStyle(style) {
288
+ return typeof style === 'string' && (style === 'end' || style.startsWith('end-'));
289
+ }
290
+ export const CHICKEN_FEATHER_YIELD_MIN = 1;
291
+ export const CHICKEN_FEATHER_YIELD_MAX = 3;
292
+ /** Same odds as picking a fight with a seagull worth its feathers — sometimes it isn't peaceful. */
293
+ export const CHICKEN_ATTACK_CHANCE = 0.1;
294
+ export const CHICKEN_PECK_DAMAGE_MIN = 1;
295
+ export const CHICKEN_PECK_DAMAGE_MAX = 3;
296
+ export const WILSON_MAGGOT_COST = 150;
297
+ export const SMALL_FISHING_ROD_KIND = 'smallfishingrod';
298
+ export const MAGGOT_KIND = 'maggot';
299
+ export const EARTHWORM_KIND = 'earthworm';
300
+ export const FISHING_LINE_KIND = 'fishingline';
301
+ export const FISHING_HOOK_KIND = 'fishinghook';
302
+ export const FISHING_FLOAT_KIND = 'fishingfloat';
303
+ /** Chance a fishing attempt snaps the line (consumes line, hook, and float). */
304
+ export const FISHING_LINE_SNAP_CHANCE = 0.05;
305
+ export const WILSON_SHOP_STOCK = [
306
+ { kind: FISHING_LINE_KIND, price: 15, qty: 50 },
307
+ { kind: FISHING_HOOK_KIND, price: 10, qty: 50 },
308
+ { kind: FISHING_FLOAT_KIND, price: 8, qty: 50 },
309
+ ];
310
+ export const CARVING_KNIFE_PRICE = 50;
311
+ /**
312
+ * Minimum spacing between nettle patches, in tiles. The brief was "30-40
313
+ * seconds of walking apart"; at MOVE_SPEED_TILES_PER_SEC that is 105-140 tiles,
314
+ * so patches are genuinely hunted rather than stumbled over.
315
+ */
316
+ export const NETTLES_MIN_SPACING = 105;
317
+ /** Sharp rock is the long hunt — roughly ten minutes of searching. */
318
+ export const SHARP_ROCK_MIN_SPACING = 260;
319
+ /**
320
+ * Earthworm casts are a rare, world-scale forage node (like the beach worm
321
+ * poo casts), not a per-tile density roll — only this many exist at once,
322
+ * anywhere in the world.
323
+ */
324
+ export const EARTHWORM_CAST_COUNT = 3;
325
+ /** Keep the handful of casts spread across the map rather than clustered. */
326
+ export const EARTHWORM_CAST_MIN_SPACING = 150;
327
+ const UNCUTABLE_TREE_STYLES = new Set(['dead', 'stump']);
328
+ export function isBrokenSaw(kind) {
329
+ const id = kind.toLowerCase();
330
+ return id === BROKEN_SAW_KIND || (id.startsWith('broken') && id.endsWith('saw'));
331
+ }
332
+ /** Working saw suitable for chopping / woodwork (not a broken remnant). */
333
+ export function isWorkingSaw(kind) {
334
+ if (isBrokenSaw(kind))
335
+ return false;
336
+ const id = kind.toLowerCase();
337
+ return id === FOLDING_SAW_KIND || id.endsWith('saw');
338
+ }
339
+ export function isWoodworkTool(kind) {
340
+ if (isBrokenSaw(kind))
341
+ return false;
342
+ const id = kind.toLowerCase();
343
+ return (id === FOLDING_SAW_KIND ||
344
+ id === 'hatchet' ||
345
+ id === 'axe' ||
346
+ id.endsWith('saw') ||
347
+ id.endsWith('axe'));
348
+ }
349
+ export function isCuttableTreeStyle(style) {
350
+ if (!style)
351
+ return true;
352
+ return !UNCUTABLE_TREE_STYLES.has(style);
353
+ }
354
+ export function woodworkLevelForStyle(style) {
355
+ if (!style || style === 'default' || style === 'birch') {
356
+ return WOODWORK_TREE_LEVELS.birch;
357
+ }
358
+ const level = WOODWORK_TREE_LEVELS[style];
359
+ return typeof level === 'number' ? level : WOODWORK_TREE_LEVELS.birch;
360
+ }
361
+ export function rollBirchWoodQty() {
362
+ const span = BIRCH_WOOD_YIELD_MAX - BIRCH_WOOD_YIELD_MIN + 1;
363
+ return BIRCH_WOOD_YIELD_MIN + Math.floor(Math.random() * span);
364
+ }
365
+ //# sourceMappingURL=woodwork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woodwork.js","sourceRoot":"","sources":["../src/woodwork.ts"],"names":[],"mappings":"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"}