@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,104 @@
1
+ export const GROUND_ITEM_KINDS = [
2
+ 'unlitbirchtorch',
3
+ 'litbirchtorch',
4
+ 'bronzechestkey',
5
+ 'goblincavekey',
6
+ 'goblinprisonkey',
7
+ // Forageables. These also exist as scenery of the same kind, so a dropped one
8
+ // is told apart by its ttl, not its kind (see droppedLoot in WorldView).
9
+ 'nettles',
10
+ 'sharprock',
11
+ 'feather',
12
+ 'crabmeat',
13
+ 'rawrabbit',
14
+ 'rawbass',
15
+ 'cookedcrab',
16
+ 'cookedrabbit',
17
+ 'cookedchicken',
18
+ 'cookedbass',
19
+ 'lugworm',
20
+ 'maggot',
21
+ 'earthworm',
22
+ 'fishingline',
23
+ 'fishinghook',
24
+ 'fishingfloat',
25
+ 'coins',
26
+ 'frog',
27
+ 'cookedfroglegs',
28
+ 'bucket',
29
+ 'milkbucket',
30
+ 'egg',
31
+ 'hay',
32
+ 'birchwood',
33
+ 'woodenclub',
34
+ 'livoniapineclub',
35
+ 'leatherboots',
36
+ 'poplarhelmet',
37
+ 'poplarbody',
38
+ 'poplarlegs',
39
+ 'poplarspear',
40
+ 'pineshield',
41
+ 'rawperch',
42
+ 'cookedperch',
43
+ 'rawtench',
44
+ 'cookedtench',
45
+ 'rattail',
46
+ 'ratteeth',
47
+ 'foxtail',
48
+ 'brokensaw',
49
+ 'copper',
50
+ 'tin',
51
+ 'iron',
52
+ 'gardenfork',
53
+ 'woodennet',
54
+ 'smallfishingrod',
55
+ 'foldingsaw',
56
+ 'hatchet',
57
+ 'woolyhat',
58
+ 'woolygloves',
59
+ 'woolyboots',
60
+ 'carvingknife',
61
+ 'pinebow',
62
+ 'apple',
63
+ 'wheat',
64
+ 'poplarwood',
65
+ 'pinewood',
66
+ 'sprucewood',
67
+ 'bircharrow',
68
+ 'sprucearrow',
69
+ 'stone',
70
+ 'grapes',
71
+ 'orange',
72
+ ];
73
+ const GROUND_ITEM_KIND_SET = new Set(GROUND_ITEM_KINDS);
74
+ /**
75
+ * Item kinds that should never show a "Drop" action, e.g. because dropping them would
76
+ * softlock progression. Empty by default — every known item is droppable unless a kind
77
+ * is explicitly listed here for a specific, documented reason.
78
+ */
79
+ export const UNDROPPABLE_ITEM_KINDS = [];
80
+ const UNDROPPABLE_ITEM_KIND_SET = new Set(UNDROPPABLE_ITEM_KINDS);
81
+ export function isGroundItemKind(kind) {
82
+ return GROUND_ITEM_KIND_SET.has(kind);
83
+ }
84
+ export function isUndroppableItemKind(kind) {
85
+ return UNDROPPABLE_ITEM_KIND_SET.has(kind);
86
+ }
87
+ export function isDroppableItemKind(kind) {
88
+ return isGroundItemKind(kind) && !isUndroppableItemKind(kind);
89
+ }
90
+ export const DROPPED_ITEM_LIFETIME_MS = 30000;
91
+ /** Death loot stays on the tile this long; any player may pick it up. */
92
+ export const DEATH_DROP_LIFETIME_MS = 60000;
93
+ /** Default late-life fade for timed ground items that do not set `fadeMs`. */
94
+ export const GROUND_ITEM_FADE_MS = 10000;
95
+ export function groundItemFadeAlpha(remainingMs, fadeMs = GROUND_ITEM_FADE_MS) {
96
+ if (remainingMs <= 0)
97
+ return 0;
98
+ if (!Number.isFinite(fadeMs) || fadeMs <= 0)
99
+ return remainingMs > 0 ? 1 : 0;
100
+ if (remainingMs >= fadeMs)
101
+ return 1;
102
+ return remainingMs / fadeMs;
103
+ }
104
+ //# sourceMappingURL=groundItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groundItems.js","sourceRoot":"","sources":["../src/groundItems.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,iBAAiB;IACjB,8EAA8E;IAC9E,yEAAyE;IACzE,SAAS;IACT,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,SAAS;IACT,YAAY;IACZ,cAAc;IACd,eAAe;IACf,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,OAAO;IACP,MAAM;IACN,gBAAgB;IAChB,QAAQ;IACR,YAAY;IACZ,KAAK;IACL,KAAK;IACL,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,UAAU;IACV,aAAa;IACb,UAAU;IACV,aAAa;IACb,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,QAAQ;IACR,KAAK;IACL,MAAM;IACN,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,YAAY;IACZ,SAAS;IACT,UAAU;IACV,aAAa;IACb,YAAY;IACZ,cAAc;IACd,SAAS;IACT,OAAO;IACP,OAAO;IACP,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,OAAO;IACP,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsB,EAAE,CAAC;AAE5D,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAElE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAEzC,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,MAAM,GAAG,mBAAmB;IAE5B,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,WAAW,IAAI,MAAM;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,WAAW,GAAG,MAAM,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from './constants.js';
2
+ export * from './appearance.js';
3
+ export * from './clientConfig.js';
4
+ export * from './messages.js';
5
+ export * from './xp.js';
6
+ export * from './cooking.js';
7
+ export * from './quests.js';
8
+ export * from './equipment.js';
9
+ export * from './zones.js';
10
+ export * from './landmarks.js';
11
+ export * from './woodwork.js';
12
+ export * from './groundItems.js';
13
+ export * from './bank.js';
14
+ export * from './goblinCave.js';
15
+ export * from './torches.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export * from './constants.js';
2
+ export * from './appearance.js';
3
+ export * from './clientConfig.js';
4
+ export * from './messages.js';
5
+ export * from './xp.js';
6
+ export * from './cooking.js';
7
+ export * from './quests.js';
8
+ export * from './equipment.js';
9
+ export * from './zones.js';
10
+ export * from './landmarks.js';
11
+ export * from './woodwork.js';
12
+ export * from './groundItems.js';
13
+ export * from './bank.js';
14
+ export * from './goblinCave.js';
15
+ export * from './torches.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,366 @@
1
+ export declare const CROSSROADS_WORLD_X: number;
2
+ export declare const CROSSROADS_LOCAL_Z = 17;
3
+ export declare const EAST_ROAD_START_X: number;
4
+ export declare const HIJACK_SITE_X = 402;
5
+ export declare const HIJACK_SITE_LOCAL_Z = 22;
6
+ export declare const BASECAMP_CENTER_X = 676;
7
+ export declare const BASECAMP_CENTER_LOCAL_Z = 26;
8
+ export declare const BASECAMP_RX = 54;
9
+ export declare const BASECAMP_RZ = 19;
10
+ export declare const BASECAMP_RIM_SCALE = 1.3;
11
+ export declare const BASECAMP_FLOOR_H = 0;
12
+ export declare const BASECAMP_PLATEAU_H = 6;
13
+ export declare const BASECAMP_RIM_H = 10;
14
+ export declare const BASECAMP_GATE_LOCAL_Z = 26;
15
+ export declare const BASECAMP_GATE_HALF = 5;
16
+ export declare const BASECAMP_WALL_X = 604;
17
+ /**
18
+ * Single-column rocky enclave on Base Camp's west face — the thin cliff/shore
19
+ * where the battlefield lake meets camp. Not a filled gray slab.
20
+ */
21
+ export declare const BASECAMP_ENCLAVE_X = 604;
22
+ export declare const BASECAMP_SLOPE_MIN_X = 605;
23
+ export declare const BASECAMP_SLOPE_MAX_X = 626;
24
+ export declare const BASECAMP_CAVE_X: number;
25
+ export declare const BASECAMP_CAVE_LOCAL_Z = 26;
26
+ /** Small lookout beyond the Base Camp tunnel, reached only after clearing Livonia. */
27
+ export declare const BASECAMP_FAR_SIDE_X: number;
28
+ export declare const BASECAMP_FAR_SIDE_LOCAL_Z = 26;
29
+ /**
30
+ * Anne's cottage — a longer walk north of the east road, halfway between
31
+ * Crossroads and Base Camp. Lower local Z is north (toward WORLD_NORTH_PAD).
32
+ * Stays west of BASECAMP_WALL_X so it never touches the mountain wall.
33
+ */
34
+ export declare const ANNES_SPUR_TILES = 12;
35
+ export declare const ANNES_X: number;
36
+ export declare const ANNES_HOUSE_LOCAL_Z: number;
37
+ export declare const ANNES_ZONE_RX = 12;
38
+ export declare const ANNES_ZONE_NORTH = 16;
39
+ export declare const ANNES_ZONE_SOUTH = 22;
40
+ /**
41
+ * Small vestigial mud alcove right behind the Suspicious hole mouth at Base
42
+ * Camp — kept only as set dressing for the doorway. The real Rat Tunnel
43
+ * dungeon lives far away in its own dedicated underground zone (see below);
44
+ * the Base Camp Suspicious hole teleports players there. Forest animal dens
45
+ * are separate tiny caverns, not extra doors into this dungeon.
46
+ */
47
+ export declare const RAT_TUNNEL_CENTER_X: number;
48
+ export declare const RAT_TUNNEL_CENTER_LOCAL_Z = 26;
49
+ export declare const RAT_TUNNEL_RX = 6;
50
+ export declare const RAT_TUNNEL_RZ = 5;
51
+ export declare const SUSPICIOUS_HOLE_RETURN_X: number;
52
+ export declare const SUSPICIOUS_HOLE_RETURN_LOCAL_Z = 26;
53
+ /**
54
+ * Rat Tunnel dungeon — a genuinely separate underground zone carved into an
55
+ * off-map strip east of the overworld (x >= UNDERGROUND_ORIGIN_X), so the
56
+ * rooms are never painted as surface geography on the paper map. The
57
+ * Suspicious hole doesn't lead into a pocket behind itself — it teleports
58
+ * players into this dedicated 5-room dungeon (forest animal dens do not).
59
+ * Room 1 has a crawl-out back to Base Camp so players are not trapped in the
60
+ * pit; the portal at the far end of Room 5 is the dungeon-clear exit.
61
+ *
62
+ * Layout (world space, north → south): entry Room 1 (sunken rat pit / nest
63
+ * ledges, crawl-out on the north wall) → corridor + gate → Room 2 (bandits)
64
+ * → corridor + gate → Room 3 (amazons) → corridor + gate → Room 4 (Liv,
65
+ * boss) → corridor + gate (opens on her death) → Room 5, the exit vestibule
66
+ * with the far-end portal back to Base Camp.
67
+ */
68
+ export declare const DUNGEON_CENTER_X: number;
69
+ /**
70
+ * ROOM SCALE — deliberately tight.
71
+ *
72
+ * The first build made every room a field: Room 4 was 53x44 tiles and Room 1
73
+ * and 3 were 41 wide, on a map where a character occupies one tile. Crossing
74
+ * the boss room took ~45 steps, and no amount of scenery could fill that — every
75
+ * dressing pass read as litter scattered on an empty plain. These are roughly
76
+ * half the old linear dimensions (about a quarter of the floor area), which is
77
+ * the range a dungeon crawl actually wants: you can see both walls, scenery
78
+ * reaches you, and a fight fills the space instead of rattling around in it.
79
+ *
80
+ * Encounter room sizes still scale with what happens in them — the boss cavern
81
+ * is the largest, the exit vestibule barely more than a landing.
82
+ */
83
+ export declare const DUNGEON_ROOM_HALF_W = 14;
84
+ /** The giant-rat warren is deliberately tighter than the human encounter rooms. */
85
+ export declare const DUNGEON_GIANT_RAT_ROOM_HALF_W = 11;
86
+ export declare const DUNGEON_BOSS_HALF_W = 17;
87
+ /** Exit vestibule — a landing, not a hall. */
88
+ export declare const DUNGEON_VESTIBULE_HALF_W = 9;
89
+ /** Entry guardroom, tighter than the mid-dungeon encounter rooms. */
90
+ export declare const DUNGEON_GUARDROOM_HALF_W = 12;
91
+ export declare const DUNGEON_CORRIDOR_HALF_W = 3;
92
+ /**
93
+ * Corridors are longer than the rooms are deep in places, on purpose: the old
94
+ * layout butted five halls almost directly together, so the dungeon read as one
95
+ * continuous space rather than a sequence of places. A real walk between
96
+ * encounters is what makes each room feel like arriving somewhere.
97
+ */
98
+ export declare const DUNGEON_ROOM1_MIN_Z = 60;
99
+ export declare const DUNGEON_ROOM1_MAX_Z = 82;
100
+ /** Rat-pit centre in Room 1 — mirrors DUNGEON_ROOM2_PIT_Z for the arena below. */
101
+ export declare const DUNGEON_ROOM1_PIT_Z: number;
102
+ export declare const DUNGEON_ROOM2_MIN_Z = 99;
103
+ export declare const DUNGEON_ROOM2_MAX_Z = 125;
104
+ /** Sunken giant-rat-arena centre in Room 2. */
105
+ export declare const DUNGEON_ROOM2_PIT_Z: number;
106
+ export declare const DUNGEON_ROOM3_MIN_Z = 142;
107
+ export declare const DUNGEON_ROOM3_MAX_Z = 168;
108
+ export declare const DUNGEON_ROOM4_MIN_Z = 185;
109
+ export declare const DUNGEON_ROOM4_MAX_Z = 217;
110
+ export declare const DUNGEON_ROOM5_MIN_Z = 232;
111
+ export declare const DUNGEON_ROOM5_MAX_Z = 246;
112
+ export declare const DUNGEON_MIN_X: number;
113
+ export declare const DUNGEON_MAX_X: number;
114
+ export declare const DUNGEON_MIN_Z = 60;
115
+ export declare const DUNGEON_MAX_Z = 246;
116
+ /** Room-gate doorway rows — the door sits on the entrance wall of the room being unlocked. */
117
+ export declare const DUNGEON_GATE1_Z = 99;
118
+ export declare const DUNGEON_GATE2_Z = 142;
119
+ export declare const DUNGEON_GATE3_Z = 185;
120
+ export declare const DUNGEON_GATE4_Z = 232;
121
+ export declare const DUNGEON_ENTRY_X: number;
122
+ export declare const DUNGEON_ENTRY_Z: number;
123
+ export declare const DUNGEON_EXIT_PORTAL_X: number;
124
+ export declare const DUNGEON_EXIT_PORTAL_Z: number;
125
+ /**
126
+ * Crawl-out in Room 1 (rat pit), flush with the north wall and facing south
127
+ * into the pit. Same `exit-*` interact/teleport as Room 5 — returns to the
128
+ * Suspicious hole approach at Base Camp. Compact footprint; keep the two
129
+ * tiles in front standable so logout restore can slide off the blocked door.
130
+ */
131
+ export declare const DUNGEON_PIT_EXIT_X: number;
132
+ export declare const DUNGEON_PIT_EXIT_Z = 60;
133
+ export declare const DUNGEON_PIT_EXIT_STYLE = "exit-south";
134
+ /** The Base Camp Suspicious hole funnels here (see world.ts caveentrance handling). Forest animal dens do not. */
135
+ export declare const RAT_TUNNEL_SPAWN_X: number;
136
+ export declare const RAT_TUNNEL_SPAWN_LOCAL_Z: number;
137
+ /** The portal prop inside Room 5 that teleports players back to Base Camp. */
138
+ export declare const RAT_TUNNEL_EXIT_X: number;
139
+ export declare const RAT_TUNNEL_EXIT_LOCAL_Z: number;
140
+ export declare const DUNGEON_GATE_MIN_X: number;
141
+ export declare const DUNGEON_GATE_MAX_X: number;
142
+ /**
143
+ * Solid rock carved around the whole footprint. Must exceed the deepest wall
144
+ * alcove (currently 4) with room to spare, or an alcove punches straight
145
+ * through the envelope and opens the dungeon onto the outside world.
146
+ */
147
+ export declare const DUNGEON_WALL_MARGIN = 8;
148
+ /**
149
+ * How far the solid rock is actually PAINTED, as opposed to how far the dungeon
150
+ * zone reaches. The camera looks down at ~53 degrees, so a 5-unit wall only
151
+ * hides about four tiles of whatever is behind it — with the old 8-tile margin
152
+ * the overworld's grass and sky were plainly visible over the dungeon walls.
153
+ * The apron is a cheap fix: keep painting rock until the far fog (62 units)
154
+ * swallows it. It deliberately does NOT widen `inDungeonZone`, which gates
155
+ * gameplay and lighting and should stay tight to the rooms.
156
+ */
157
+ export declare const DUNGEON_ROCK_APRON = 62;
158
+ export declare function inDungeonZone(x: number, z: number): boolean;
159
+ export type ForestDenFacing = 'north' | 'south' | 'east' | 'west';
160
+ export type ForestDenSite = {
161
+ id: string;
162
+ /** Entrance tile on the playable (local) map, same space as other overworld props. */
163
+ entranceX: number;
164
+ entranceLocalZ: number;
165
+ facing: ForestDenFacing;
166
+ /** Hollowed cavern centre in the off-map underground strip (east of the overworld). */
167
+ cavernX: number;
168
+ cavernZ: number;
169
+ };
170
+ /** Tight animal-dug hollow — a handful of tiles, not a mystery hall. */
171
+ export declare const FOREST_DEN_RX = 4;
172
+ export declare const FOREST_DEN_RZ = 3;
173
+ export declare const FOREST_DEN_WALL = 2;
174
+ export declare const FOREST_DEN_EXPLORER_XP = 50;
175
+ /**
176
+ * Rat caves scattered through the woods. Same idea as the old extra Suspicious
177
+ * holes — they look like small rocky cave mouths, each with its own cramped
178
+ * cavern, not extra doors into the Rat Tunnel.
179
+ */
180
+ /**
181
+ * Every site here is fully built by world generation — cleared entrance
182
+ * hollow, its own cavern, and a return exit — but only FOREST_DEN_ACTIVE_COUNT
183
+ * of them show a cave mouth at any one time (see World.denEntranceActive).
184
+ * Crawling out of a den retires that mouth and opens a different site, so the
185
+ * dens move around the woods instead of being permanent scenery.
186
+ *
187
+ * There used to be 13 permanently-open mouths, which is why they read as
188
+ * "everywhere" — you could not cross the forest without tripping over one.
189
+ * Keeping the full list (rather than deleting sites) is what gives the
190
+ * relocation somewhere to move *to*; the count below is the dial for how
191
+ * often you actually meet one.
192
+ */
193
+ export declare const FOREST_DEN_SITES: readonly ForestDenSite[];
194
+ /** How many den mouths are open across the whole map at once. */
195
+ export declare const FOREST_DEN_ACTIVE_COUNT = 3;
196
+ export declare function forestDenEntranceStyle(facing: ForestDenFacing): string;
197
+ export declare function forestDenExitStyle(facing: ForestDenFacing): string;
198
+ export declare function forestDenByEntrance(worldX: number, worldZ: number): ForestDenSite | null;
199
+ export declare function forestDenByCavern(worldX: number, worldZ: number): ForestDenSite | null;
200
+ export declare function inForestDenCavern(x: number, z: number): boolean;
201
+ export type DungeonRoomId = 1 | 2 | 3 | 4;
202
+ /** Fixed, deterministic spawn spots for each dungeon room's enemy group. */
203
+ export declare const DUNGEON_ROOM_SPAWNS: Record<DungeonRoomId, {
204
+ x: number;
205
+ z: number;
206
+ }[]>;
207
+ /**
208
+ * Northwest battlefield — north pad west of the Deadlands, inland of west cliffs.
209
+ * World Z decreases toward the north wilderness; farm approaches from the south.
210
+ * East edge meets the Deadlands west border. The lake continues east of this pad
211
+ * (see BATTLEFIELD_LAKE_EAST_X).
212
+ */
213
+ export declare const BATTLEFIELD_MIN_X = 10;
214
+ export declare const BATTLEFIELD_MAX_X: number;
215
+ export declare const BATTLEFIELD_MIN_WORLD_Z = 648;
216
+ export declare const BATTLEFIELD_MAX_WORLD_Z = 748;
217
+ export declare const BATTLEFIELD_MIN_LOCAL_Z: number;
218
+ export declare const BATTLEFIELD_MAX_LOCAL_Z: number;
219
+ /**
220
+ * Lake between soldier (south / farmward) and goblin (north) camps.
221
+ * Water blocks walking; the battlefield crossing is the long bridge once repaired.
222
+ * Thick N–S band on the pad, then the same Z band continues east through the
223
+ * corridor south of the Deadlands, past the west-face enclave, until it meets
224
+ * the SE high-rock row.
225
+ */
226
+ export declare const BATTLEFIELD_LAKE_MIN_Z = 666;
227
+ export declare const BATTLEFIELD_LAKE_MAX_Z = 698;
228
+ /** Solid southward wall returns join both Dreadwoods corners to the lake bank. */
229
+ export declare const DEADLANDS_SOUTH_WALL_XS: readonly [number, number];
230
+ export declare const DEADLANDS_SOUTH_WALL_END_Z: number;
231
+ /** Reserve the wall returns and their wire for fortifications, not wild scenery. */
232
+ export declare function isDeadlandsSouthWallClearance(x: number, z: number): boolean;
233
+ /**
234
+ * One-tile high-rock / crag row on the SW corner of remaining Base Camp land
235
+ * (south of the lake). Same X as the thin west-face enclave; the lake band at
236
+ * this X is water so the east–west sheet can continue.
237
+ */
238
+ export declare const BATTLEFIELD_LAKE_SW_ROCK_X = 604;
239
+ export declare const BATTLEFIELD_LAKE_SW_ROCK_MIN_Z: number;
240
+ export declare const BATTLEFIELD_LAKE_SW_ROCK_MAX_Z: number;
241
+ /**
242
+ * One-tile high-rock / crag row on the SE corner of remaining east land.
243
+ * Inland of the east sea-cliff water+rim (map.ts SEA_CLIFF_WATER + SEA_CLIFF_RIM).
244
+ * The lake meets this column; dungeon interiors stay at x >= WORLD_WIDTH.
245
+ */
246
+ export declare const BATTLEFIELD_LAKE_SE_ROCK_X: number;
247
+ export declare const BATTLEFIELD_LAKE_SE_ROCK_MIN_Z = 666;
248
+ export declare const BATTLEFIELD_LAKE_SE_ROCK_MAX_Z: number;
249
+ /**
250
+ * Inclusive east water column of the lake, flush against the SE rock row.
251
+ */
252
+ export declare const BATTLEFIELD_LAKE_EAST_X: number;
253
+ export declare const BATTLEFIELD_LAKE_MID_Z: number;
254
+ /** @deprecated Use BATTLEFIELD_LAKE_* — kept for older imports. */
255
+ export declare const BATTLEFIELD_CONTESTED_MIN_Z = 666;
256
+ /** @deprecated Use BATTLEFIELD_LAKE_* */
257
+ export declare const BATTLEFIELD_CONTESTED_MAX_Z = 698;
258
+ /** @deprecated Use BATTLEFIELD_LAKE_* */
259
+ export declare const BATTLEFIELD_CONTESTED_MID_Z: number;
260
+ /**
261
+ * N–S bridge across the lake (world X).
262
+ * Anchored on the original battlefield mid-X so expanding east to the Deadlands
263
+ * lengthens the water sheet without sliding the crossing.
264
+ */
265
+ export declare const BATTLEFIELD_BRIDGE_X = 91;
266
+ /** Half-width of the walkable bridge deck (tiles either side of bridge X). */
267
+ export declare const BATTLEFIELD_BRIDGE_HALF_W = 1;
268
+ /**
269
+ * How far along the shore a lake fishing spot may drift from the bridge.
270
+ *
271
+ * The lake now runs from the west cliffs to the SE rock row, while the
272
+ * bridge sits at x 91, so an unconstrained spot could land far down the new
273
+ * east shore — a long walk, and on the wrong side of the map from the crossing.
274
+ */
275
+ export declare const BATTLEFIELD_FISHING_MAX_BRIDGE_DX = 16;
276
+ /**
277
+ * Broken gap in the middle of the bridge (inclusive world Z).
278
+ * Stays water / uncrossable until woodwork repair.
279
+ */
280
+ export declare const BATTLEFIELD_BRIDGE_GAP_MIN_Z: number;
281
+ export declare const BATTLEFIELD_BRIDGE_GAP_MAX_Z: number;
282
+ /** Inclusive smashed mid-span the unrepaired player still sees as wreckage. */
283
+ export declare function isBattlefieldBridgeGapTile(x: number, z: number): boolean;
284
+ /**
285
+ * Single clickable crossing icon — centre of the gap (x 91, z 682), not every
286
+ * plank and not the intact approaches.
287
+ */
288
+ export declare function isBattlefieldBridgeTravelIconTile(x: number, z: number): boolean;
289
+ /**
290
+ * Chebyshev tiles from a travel-through target (bridge crossing icon, dungeon
291
+ * pit gate). Those tiles are water or blocked, and the last intact plank is two
292
+ * steps from the icon — range 1 would demand standing on the gap itself.
293
+ */
294
+ export declare const TRAVEL_THROUGH_RANGE = 4;
295
+ /**
296
+ * Rupert Row's dock — a short wooden pier on the south shore west of the bridge,
297
+ * with his rowboat tied at the water end.
298
+ */
299
+ export declare const RUPERT_ROW_PIER_X: number;
300
+ export declare const RUPERT_ROW_PIER_Z: number;
301
+ export declare const RUPERT_ROW_BOAT_X: number;
302
+ export declare const RUPERT_ROW_BOAT_Z: number;
303
+ /** Beach beside the pier, just south of the water. */
304
+ export declare const RUPERT_ROW_SPAWN_X: number;
305
+ export declare const RUPERT_ROW_SPAWN_Z: number;
306
+ export declare const BATTLEFIELD_CAMP_CLEAR_RADIUS = 6;
307
+ export declare const BATTLEFIELD_NPCS_PER_CAMP = 4;
308
+ /**
309
+ * Goblin camps run denser than soldier camps. Goblins are the grind target —
310
+ * at 2 per camp a player working a camp spent most of the trip walking between
311
+ * camps waiting on respawns, which is what made the battlefield feel empty.
312
+ * Soldiers now hold their camps in force too, so both sides read as active
313
+ * battle lines rather than isolated pairs.
314
+ */
315
+ export declare const BATTLEFIELD_GOBLINS_PER_CAMP = 6;
316
+ /** How long a faction camp chest stays before fading out and relocating. */
317
+ export declare const BATTLEFIELD_CAMP_CHEST_LIFETIME_MS = 60000;
318
+ /** Soldier camps — closer to the farm (higher world Z), south of the lake. */
319
+ export declare const BATTLEFIELD_SOLDIER_CAMPS: readonly {
320
+ x: number;
321
+ z: number;
322
+ }[];
323
+ /** The large central soldier camp is commanded by the Battlefield Captain. */
324
+ export declare const BATTLEFIELD_CAPTAIN_CAMP: {
325
+ readonly x: 119;
326
+ readonly z: 734;
327
+ };
328
+ /** Goblin camps — farther wilderness (lower world Z), north of the lake. */
329
+ export declare const BATTLEFIELD_GOBLIN_CAMPS: readonly {
330
+ x: number;
331
+ z: number;
332
+ }[];
333
+ /**
334
+ * Cultivated cabbage plots on the soldier shore — between lake and camps.
335
+ * Filled as neat soil rows (not sparse scatter).
336
+ */
337
+ export declare const BATTLEFIELD_CABBAGE_PLOTS: readonly {
338
+ minX: number;
339
+ maxX: number;
340
+ minZ: number;
341
+ maxZ: number;
342
+ }[];
343
+ export type DiscoveryZone = {
344
+ id: string;
345
+ label: string;
346
+ minX: number;
347
+ maxX: number;
348
+ minZ: number;
349
+ maxZ: number;
350
+ };
351
+ export declare const DISCOVERY_ZONES: readonly DiscoveryZone[];
352
+ export declare function discoveryZoneAt(worldX: number, worldZ: number): DiscoveryZone | null;
353
+ export type WorldMapLandmarkKind = 'place' | 'dungeon';
354
+ export type WorldMapLandmark = {
355
+ x: number;
356
+ z: number;
357
+ label: string;
358
+ kind?: WorldMapLandmarkKind;
359
+ };
360
+ /**
361
+ * Paper-map labels. Keep this list in lockstep with named places in this file
362
+ * and `DISCOVERY_ZONES` — the in-game map and the public website chart both
363
+ * paint from here. Village is not a labelled stop.
364
+ */
365
+ export declare const WORLD_MAP_LANDMARKS: readonly WorldMapLandmark[];
366
+ //# sourceMappingURL=landmarks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landmarks.d.ts","sourceRoot":"","sources":["../src/landmarks.ts"],"names":[],"mappings":"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"}