@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.
- package/README.md +43 -0
- package/dist/appearance.d.ts +80 -0
- package/dist/appearance.d.ts.map +1 -0
- package/dist/appearance.js +319 -0
- package/dist/appearance.js.map +1 -0
- package/dist/bank.d.ts +15 -0
- package/dist/bank.d.ts.map +1 -0
- package/dist/bank.js +45 -0
- package/dist/bank.js.map +1 -0
- package/dist/clientConfig.d.ts +103 -0
- package/dist/clientConfig.d.ts.map +1 -0
- package/dist/clientConfig.js +209 -0
- package/dist/clientConfig.js.map +1 -0
- package/dist/constants.d.ts +205 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +713 -0
- package/dist/constants.js.map +1 -0
- package/dist/cooking.d.ts +26 -0
- package/dist/cooking.d.ts.map +1 -0
- package/dist/cooking.js +41 -0
- package/dist/cooking.js.map +1 -0
- package/dist/equipment.d.ts +47 -0
- package/dist/equipment.d.ts.map +1 -0
- package/dist/equipment.js +186 -0
- package/dist/equipment.js.map +1 -0
- package/dist/goblinCave.d.ts +112 -0
- package/dist/goblinCave.d.ts.map +1 -0
- package/dist/goblinCave.js +69 -0
- package/dist/goblinCave.js.map +1 -0
- package/dist/groundItems.d.ts +17 -0
- package/dist/groundItems.d.ts.map +1 -0
- package/dist/groundItems.js +104 -0
- package/dist/groundItems.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/landmarks.d.ts +366 -0
- package/dist/landmarks.d.ts.map +1 -0
- package/dist/landmarks.js +584 -0
- package/dist/landmarks.js.map +1 -0
- package/dist/messages.d.ts +723 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +38 -0
- package/dist/messages.js.map +1 -0
- package/dist/nameFilter.d.ts +8 -0
- package/dist/nameFilter.d.ts.map +1 -0
- package/dist/nameFilter.js +94 -0
- package/dist/nameFilter.js.map +1 -0
- package/dist/quests.d.ts +63 -0
- package/dist/quests.d.ts.map +1 -0
- package/dist/quests.js +233 -0
- package/dist/quests.js.map +1 -0
- package/dist/torches.d.ts +7 -0
- package/dist/torches.d.ts.map +1 -0
- package/dist/torches.js +11 -0
- package/dist/torches.js.map +1 -0
- package/dist/woodwork.d.ts +206 -0
- package/dist/woodwork.d.ts.map +1 -0
- package/dist/woodwork.js +365 -0
- package/dist/woodwork.js.map +1 -0
- package/dist/xp.d.ts +74 -0
- package/dist/xp.d.ts.map +1 -0
- package/dist/xp.js +126 -0
- package/dist/xp.js.map +1 -0
- package/dist/zones.d.ts +30 -0
- package/dist/zones.d.ts.map +1 -0
- package/dist/zones.js +143 -0
- package/dist/zones.js.map +1 -0
- package/package.json +36 -0
package/dist/xp.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current cap. Levels are derived from stored XP on load (see db/characters.ts),
|
|
3
|
+
* so raising this later restores any progress banked above the cap rather than
|
|
4
|
+
* losing it. Level 40 is the current long-term cap; reaching it is deliberately
|
|
5
|
+
* a substantial commitment rather than a starter-area milestone.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MAX_LEVEL = 40;
|
|
8
|
+
/**
|
|
9
|
+
* A welcoming early curve that rises steadily into a long-term level-40 goal.
|
|
10
|
+
* The first level costs 49 XP instead of 664; each following level takes a
|
|
11
|
+
* little more work, without the old exponential wall.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PLAYER_MAX_HIT_CAP = 20;
|
|
14
|
+
export declare const XP_TABLE: readonly number[];
|
|
15
|
+
export declare function xpForLevel(level: number): number;
|
|
16
|
+
export declare function levelForXp(xp: number): number;
|
|
17
|
+
export type XpProgress = {
|
|
18
|
+
level: number;
|
|
19
|
+
intoLevel: number;
|
|
20
|
+
span: number;
|
|
21
|
+
totalXp: number;
|
|
22
|
+
};
|
|
23
|
+
export declare function xpProgress(xp: number): XpProgress;
|
|
24
|
+
export declare function maxHitForStrength(strengthLevel: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* Unboosted player health is exactly their combat level. Equipment and other
|
|
27
|
+
* temporary boosts can layer on top later, while the base remains predictable.
|
|
28
|
+
*/
|
|
29
|
+
export declare function maxHealthForLevel(combatLevel: number): number;
|
|
30
|
+
/**
|
|
31
|
+
* Fraction of an incoming hit that armour removes: `A / (A + ARMOUR_SOFTNESS)`.
|
|
32
|
+
*
|
|
33
|
+
* Replaces a subtractive soak (`damage - random(0..armour)`), which had a nasty
|
|
34
|
+
* cliff: once armour approached the attacker's max hit, damage collapsed toward
|
|
35
|
+
* zero, so two points either way swung survival from a few minutes to over half
|
|
36
|
+
* an hour. Measured, not guessed — see scripts/sim-combat.ts.
|
|
37
|
+
*
|
|
38
|
+
* A ratio curve has none of that. It gives diminishing returns, never reaches
|
|
39
|
+
* immunity, and stays predictable to tune.
|
|
40
|
+
*/
|
|
41
|
+
export declare const ARMOUR_SOFTNESS = 18;
|
|
42
|
+
export declare function armourReduction(armour: number): number;
|
|
43
|
+
/**
|
|
44
|
+
* Combat is derived, not trained directly: it is the average of Weapon Mastery
|
|
45
|
+
* and the better of Strength or Archery. Taking the higher primary skill means
|
|
46
|
+
* switching weapons never lowers combat level.
|
|
47
|
+
*/
|
|
48
|
+
export declare function combatLevelFrom(strengthLevel: number, archeryLevel: number, precisionLevel: number): number;
|
|
49
|
+
/**
|
|
50
|
+
* Effective attack level from a weapon's primary skill (Strength or Archery)
|
|
51
|
+
* combined with Mastery. Caps at PLAYER_MAX_HIT_CAP for damage, but hit chance
|
|
52
|
+
* uses the uncapped blend below MAX_LEVEL.
|
|
53
|
+
*/
|
|
54
|
+
export declare function effectiveAttackLevel(primaryLevel: number, precisionLevel: number): number;
|
|
55
|
+
/** Flat damage bonus from a weapon's craft precision (woodwork level when made). */
|
|
56
|
+
export declare function weaponPrecisionBonus(weaponPrecision: number | null | undefined): number;
|
|
57
|
+
/**
|
|
58
|
+
* Fraction of a weapon's / ammo's flat damage the wielder actually lands.
|
|
59
|
+
*
|
|
60
|
+
* Gear damage used to be added raw, entirely independent of the combat skill
|
|
61
|
+
* swinging it. That made skill almost irrelevant at the low end: a level-1
|
|
62
|
+
* archer holding a pine bow crafted at woodwork 40 hit for 13-16, of which
|
|
63
|
+
* exactly 1 came from their archery level and 8 from the *crafter's* woodwork.
|
|
64
|
+
* Levelling archery from 1 to 20 barely moved the number, while a hand-me-down
|
|
65
|
+
* bow moved it enormously.
|
|
66
|
+
*
|
|
67
|
+
* Scaling the flat bonuses by the wielder's level keeps good gear worth having
|
|
68
|
+
* without letting it stand in for training: at MAX_LEVEL the weapon performs at
|
|
69
|
+
* its full printed damage, and at level 1 it lands a quarter of it. The floor
|
|
70
|
+
* is deliberately non-zero so a starter weapon still beats bare fists.
|
|
71
|
+
*/
|
|
72
|
+
export declare const GEAR_DAMAGE_SCALE_MIN = 0.25;
|
|
73
|
+
export declare function gearDamageScale(attackLevel: number): number;
|
|
74
|
+
//# sourceMappingURL=xp.d.ts.map
|
package/dist/xp.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xp.d.ts","sourceRoot":"","sources":["../src/xp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAYrC,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAAmB,CAAC;AAE1D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAYjD;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGvF;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI3D"}
|
package/dist/xp.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current cap. Levels are derived from stored XP on load (see db/characters.ts),
|
|
3
|
+
* so raising this later restores any progress banked above the cap rather than
|
|
4
|
+
* losing it. Level 40 is the current long-term cap; reaching it is deliberately
|
|
5
|
+
* a substantial commitment rather than a starter-area milestone.
|
|
6
|
+
*/
|
|
7
|
+
export const MAX_LEVEL = 40;
|
|
8
|
+
/**
|
|
9
|
+
* A welcoming early curve that rises steadily into a long-term level-40 goal.
|
|
10
|
+
* The first level costs 49 XP instead of 664; each following level takes a
|
|
11
|
+
* little more work, without the old exponential wall.
|
|
12
|
+
*/
|
|
13
|
+
export const PLAYER_MAX_HIT_CAP = 20;
|
|
14
|
+
function buildXpTable() {
|
|
15
|
+
const table = [0, 0];
|
|
16
|
+
let points = 0;
|
|
17
|
+
for (let level = 2; level <= MAX_LEVEL; level++) {
|
|
18
|
+
points += Math.floor(35 + 14 * Math.pow(level - 1, 1.42));
|
|
19
|
+
table[level] = points;
|
|
20
|
+
}
|
|
21
|
+
return table;
|
|
22
|
+
}
|
|
23
|
+
export const XP_TABLE = buildXpTable();
|
|
24
|
+
export function xpForLevel(level) {
|
|
25
|
+
const clamped = Math.max(1, Math.min(MAX_LEVEL, Math.floor(level)));
|
|
26
|
+
return XP_TABLE[clamped] ?? 0;
|
|
27
|
+
}
|
|
28
|
+
export function levelForXp(xp) {
|
|
29
|
+
const safe = Math.max(0, Math.floor(xp));
|
|
30
|
+
let level = 1;
|
|
31
|
+
for (let l = 2; l <= MAX_LEVEL; l++) {
|
|
32
|
+
if (safe >= (XP_TABLE[l] ?? Infinity))
|
|
33
|
+
level = l;
|
|
34
|
+
else
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
return level;
|
|
38
|
+
}
|
|
39
|
+
export function xpProgress(xp) {
|
|
40
|
+
const totalXp = Math.max(0, Math.floor(xp));
|
|
41
|
+
const level = levelForXp(totalXp);
|
|
42
|
+
const current = xpForLevel(level);
|
|
43
|
+
const next = level >= MAX_LEVEL ? current : xpForLevel(level + 1);
|
|
44
|
+
const span = Math.max(1, next - current);
|
|
45
|
+
return {
|
|
46
|
+
level,
|
|
47
|
+
intoLevel: Math.min(span, totalXp - current),
|
|
48
|
+
span,
|
|
49
|
+
totalXp,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function maxHitForStrength(strengthLevel) {
|
|
53
|
+
const level = Math.max(1, Math.floor(strengthLevel));
|
|
54
|
+
return Math.min(PLAYER_MAX_HIT_CAP, level);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Unboosted player health is exactly their combat level. Equipment and other
|
|
58
|
+
* temporary boosts can layer on top later, while the base remains predictable.
|
|
59
|
+
*/
|
|
60
|
+
export function maxHealthForLevel(combatLevel) {
|
|
61
|
+
return Math.max(1, Math.min(MAX_LEVEL, Math.floor(combatLevel)));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Fraction of an incoming hit that armour removes: `A / (A + ARMOUR_SOFTNESS)`.
|
|
65
|
+
*
|
|
66
|
+
* Replaces a subtractive soak (`damage - random(0..armour)`), which had a nasty
|
|
67
|
+
* cliff: once armour approached the attacker's max hit, damage collapsed toward
|
|
68
|
+
* zero, so two points either way swung survival from a few minutes to over half
|
|
69
|
+
* an hour. Measured, not guessed — see scripts/sim-combat.ts.
|
|
70
|
+
*
|
|
71
|
+
* A ratio curve has none of that. It gives diminishing returns, never reaches
|
|
72
|
+
* immunity, and stays predictable to tune.
|
|
73
|
+
*/
|
|
74
|
+
export const ARMOUR_SOFTNESS = 18;
|
|
75
|
+
export function armourReduction(armour) {
|
|
76
|
+
const a = Math.max(0, armour);
|
|
77
|
+
return a / (a + ARMOUR_SOFTNESS);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Combat is derived, not trained directly: it is the average of Weapon Mastery
|
|
81
|
+
* and the better of Strength or Archery. Taking the higher primary skill means
|
|
82
|
+
* switching weapons never lowers combat level.
|
|
83
|
+
*/
|
|
84
|
+
export function combatLevelFrom(strengthLevel, archeryLevel, precisionLevel) {
|
|
85
|
+
const primary = Math.max(1, Math.floor(Math.max(strengthLevel, archeryLevel)));
|
|
86
|
+
const precision = Math.max(1, Math.floor(precisionLevel));
|
|
87
|
+
return Math.max(1, Math.min(MAX_LEVEL, Math.floor((primary + precision) / 2)));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Effective attack level from a weapon's primary skill (Strength or Archery)
|
|
91
|
+
* combined with Mastery. Caps at PLAYER_MAX_HIT_CAP for damage, but hit chance
|
|
92
|
+
* uses the uncapped blend below MAX_LEVEL.
|
|
93
|
+
*/
|
|
94
|
+
export function effectiveAttackLevel(primaryLevel, precisionLevel) {
|
|
95
|
+
const primary = Math.max(1, Math.floor(primaryLevel));
|
|
96
|
+
const precision = Math.max(1, Math.floor(precisionLevel));
|
|
97
|
+
return Math.min(MAX_LEVEL, primary + Math.floor(precision / 2));
|
|
98
|
+
}
|
|
99
|
+
/** Flat damage bonus from a weapon's craft precision (woodwork level when made). */
|
|
100
|
+
export function weaponPrecisionBonus(weaponPrecision) {
|
|
101
|
+
if (weaponPrecision == null || !Number.isFinite(weaponPrecision))
|
|
102
|
+
return 0;
|
|
103
|
+
return Math.max(0, Math.floor(weaponPrecision / 5));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Fraction of a weapon's / ammo's flat damage the wielder actually lands.
|
|
107
|
+
*
|
|
108
|
+
* Gear damage used to be added raw, entirely independent of the combat skill
|
|
109
|
+
* swinging it. That made skill almost irrelevant at the low end: a level-1
|
|
110
|
+
* archer holding a pine bow crafted at woodwork 40 hit for 13-16, of which
|
|
111
|
+
* exactly 1 came from their archery level and 8 from the *crafter's* woodwork.
|
|
112
|
+
* Levelling archery from 1 to 20 barely moved the number, while a hand-me-down
|
|
113
|
+
* bow moved it enormously.
|
|
114
|
+
*
|
|
115
|
+
* Scaling the flat bonuses by the wielder's level keeps good gear worth having
|
|
116
|
+
* without letting it stand in for training: at MAX_LEVEL the weapon performs at
|
|
117
|
+
* its full printed damage, and at level 1 it lands a quarter of it. The floor
|
|
118
|
+
* is deliberately non-zero so a starter weapon still beats bare fists.
|
|
119
|
+
*/
|
|
120
|
+
export const GEAR_DAMAGE_SCALE_MIN = 0.25;
|
|
121
|
+
export function gearDamageScale(attackLevel) {
|
|
122
|
+
const level = Math.max(1, Math.min(MAX_LEVEL, Math.floor(attackLevel)));
|
|
123
|
+
const t = (level - 1) / (MAX_LEVEL - 1);
|
|
124
|
+
return GEAR_DAMAGE_SCALE_MIN + (1 - GEAR_DAMAGE_SCALE_MIN) * t;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=xp.js.map
|
package/dist/xp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xp.js","sourceRoot":"","sources":["../src/xp.ts"],"names":[],"mappings":"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"}
|
package/dist/zones.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type WorldZoneId = 'safe' | 'deadlands';
|
|
2
|
+
export declare const DEADLANDS_WIDTH = 448;
|
|
3
|
+
export declare const DEADLANDS_DEPTH = 448;
|
|
4
|
+
export declare const DEADLANDS_MIN_X: number;
|
|
5
|
+
export declare const DEADLANDS_MAX_X: number;
|
|
6
|
+
export declare const DEADLANDS_MIN_Z: number;
|
|
7
|
+
export declare const DEADLANDS_MAX_Z: number;
|
|
8
|
+
export declare const DEADLANDS_GATE_X: number;
|
|
9
|
+
export declare const DEADLANDS_DEFENSE_DEPTH = 3;
|
|
10
|
+
export declare const DEADLANDS_WALL_TERRAIN_H = 2;
|
|
11
|
+
export declare const DEADLANDS_TOWER_MIN_GAP = 12;
|
|
12
|
+
export declare const DEADLANDS_BOUNDS: {
|
|
13
|
+
readonly minX: number;
|
|
14
|
+
readonly maxX: number;
|
|
15
|
+
readonly minZ: number;
|
|
16
|
+
readonly maxZ: number;
|
|
17
|
+
};
|
|
18
|
+
export declare const ZONE_DISPLAY_NAME: Record<WorldZoneId, string>;
|
|
19
|
+
export declare function isPlayableTile(x: number, z: number): boolean;
|
|
20
|
+
export declare function zoneAt(x: number, z: number): WorldZoneId;
|
|
21
|
+
export declare function zoneDisplayName(zone: WorldZoneId): string;
|
|
22
|
+
export declare function isDeadlands(x: number, z: number): boolean;
|
|
23
|
+
export declare function isPvpZone(x: number, z: number): boolean;
|
|
24
|
+
export declare function isDeadlandsPerimeter(x: number, z: number): boolean;
|
|
25
|
+
export declare function isDeadlandsDefenseBand(x: number, z: number): boolean;
|
|
26
|
+
export declare function collectDeadlandsTowerSpots(): {
|
|
27
|
+
x: number;
|
|
28
|
+
z: number;
|
|
29
|
+
}[];
|
|
30
|
+
//# sourceMappingURL=zones.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zones.d.ts","sourceRoot":"","sources":["../src/zones.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/C,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,eAAe,QAAkD,CAAC;AAC/E,eAAO,MAAM,eAAe,QAAwC,CAAC;AACrE,eAAO,MAAM,eAAe,QAAmD,CAAC;AAChF,eAAO,MAAM,eAAe,QAAwC,CAAC;AACrE,eAAO,MAAM,gBAAgB,QAAsD,CAAC;AACpF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,eAAO,MAAM,gBAAgB;aAC3B,IAAI;aACJ,IAAI;aACJ,IAAI;aACJ,IAAI;CACI,CAAC;AAEX,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAGzD,CAAC;AAEF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAaxD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEzD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAQlE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CA6BpE;AAQD,wBAAgB,0BAA0B,IAAI;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CA+CvE"}
|
package/dist/zones.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { PLAYABLE_HEIGHT, PLAYABLE_ORIGIN_X, PLAYABLE_ORIGIN_Z, PLAYABLE_WIDTH, WORLD_HEIGHT, WORLD_WIDTH, } from './constants.js';
|
|
2
|
+
export const DEADLANDS_WIDTH = 448;
|
|
3
|
+
export const DEADLANDS_DEPTH = 448;
|
|
4
|
+
export const DEADLANDS_MIN_X = Math.floor((WORLD_WIDTH - DEADLANDS_WIDTH) / 2);
|
|
5
|
+
export const DEADLANDS_MAX_X = DEADLANDS_MIN_X + DEADLANDS_WIDTH - 1;
|
|
6
|
+
export const DEADLANDS_MIN_Z = Math.floor((WORLD_HEIGHT - DEADLANDS_DEPTH) / 2);
|
|
7
|
+
export const DEADLANDS_MAX_Z = DEADLANDS_MIN_Z + DEADLANDS_DEPTH - 1;
|
|
8
|
+
export const DEADLANDS_GATE_X = Math.floor((DEADLANDS_MIN_X + DEADLANDS_MAX_X) / 2);
|
|
9
|
+
export const DEADLANDS_DEFENSE_DEPTH = 3;
|
|
10
|
+
export const DEADLANDS_WALL_TERRAIN_H = 2;
|
|
11
|
+
export const DEADLANDS_TOWER_MIN_GAP = 12;
|
|
12
|
+
export const DEADLANDS_BOUNDS = {
|
|
13
|
+
minX: DEADLANDS_MIN_X,
|
|
14
|
+
maxX: DEADLANDS_MAX_X,
|
|
15
|
+
minZ: DEADLANDS_MIN_Z,
|
|
16
|
+
maxZ: DEADLANDS_MAX_Z,
|
|
17
|
+
};
|
|
18
|
+
export const ZONE_DISPLAY_NAME = {
|
|
19
|
+
safe: 'Safe zone',
|
|
20
|
+
deadlands: 'Dreadwoods',
|
|
21
|
+
};
|
|
22
|
+
export function isPlayableTile(x, z) {
|
|
23
|
+
return (x >= PLAYABLE_ORIGIN_X &&
|
|
24
|
+
x < PLAYABLE_ORIGIN_X + PLAYABLE_WIDTH &&
|
|
25
|
+
z >= PLAYABLE_ORIGIN_Z &&
|
|
26
|
+
z < PLAYABLE_ORIGIN_Z + PLAYABLE_HEIGHT);
|
|
27
|
+
}
|
|
28
|
+
export function zoneAt(x, z) {
|
|
29
|
+
const tx = Math.floor(x);
|
|
30
|
+
const tz = Math.floor(z);
|
|
31
|
+
if (tx < 0 || tz < 0 || tx >= WORLD_WIDTH || tz >= WORLD_HEIGHT)
|
|
32
|
+
return 'safe';
|
|
33
|
+
if (tx >= DEADLANDS_MIN_X &&
|
|
34
|
+
tx <= DEADLANDS_MAX_X &&
|
|
35
|
+
tz >= DEADLANDS_MIN_Z &&
|
|
36
|
+
tz <= DEADLANDS_MAX_Z) {
|
|
37
|
+
return 'deadlands';
|
|
38
|
+
}
|
|
39
|
+
return 'safe';
|
|
40
|
+
}
|
|
41
|
+
export function zoneDisplayName(zone) {
|
|
42
|
+
return ZONE_DISPLAY_NAME[zone];
|
|
43
|
+
}
|
|
44
|
+
export function isDeadlands(x, z) {
|
|
45
|
+
return zoneAt(x, z) === 'deadlands';
|
|
46
|
+
}
|
|
47
|
+
export function isPvpZone(x, z) {
|
|
48
|
+
return isDeadlands(x, z);
|
|
49
|
+
}
|
|
50
|
+
export function isDeadlandsPerimeter(x, z) {
|
|
51
|
+
if (!isDeadlands(x, z))
|
|
52
|
+
return false;
|
|
53
|
+
return (x === DEADLANDS_MIN_X ||
|
|
54
|
+
x === DEADLANDS_MAX_X ||
|
|
55
|
+
z === DEADLANDS_MIN_Z ||
|
|
56
|
+
z === DEADLANDS_MAX_Z);
|
|
57
|
+
}
|
|
58
|
+
export function isDeadlandsDefenseBand(x, z) {
|
|
59
|
+
if (isDeadlands(x, z))
|
|
60
|
+
return false;
|
|
61
|
+
const nearX = x >= DEADLANDS_MIN_X - DEADLANDS_DEFENSE_DEPTH &&
|
|
62
|
+
x <= DEADLANDS_MAX_X + DEADLANDS_DEFENSE_DEPTH;
|
|
63
|
+
const nearZ = z >= DEADLANDS_MIN_Z - DEADLANDS_DEFENSE_DEPTH &&
|
|
64
|
+
z <= DEADLANDS_MAX_Z + DEADLANDS_DEFENSE_DEPTH;
|
|
65
|
+
if (!nearX || !nearZ)
|
|
66
|
+
return false;
|
|
67
|
+
const outsideRing = x < DEADLANDS_MIN_X ||
|
|
68
|
+
x > DEADLANDS_MAX_X ||
|
|
69
|
+
z < DEADLANDS_MIN_Z ||
|
|
70
|
+
z > DEADLANDS_MAX_Z;
|
|
71
|
+
if (!outsideRing)
|
|
72
|
+
return false;
|
|
73
|
+
const dx = x < DEADLANDS_MIN_X
|
|
74
|
+
? DEADLANDS_MIN_X - x
|
|
75
|
+
: x > DEADLANDS_MAX_X
|
|
76
|
+
? x - DEADLANDS_MAX_X
|
|
77
|
+
: 0;
|
|
78
|
+
const dz = z < DEADLANDS_MIN_Z
|
|
79
|
+
? DEADLANDS_MIN_Z - z
|
|
80
|
+
: z > DEADLANDS_MAX_Z
|
|
81
|
+
? z - DEADLANDS_MAX_Z
|
|
82
|
+
: 0;
|
|
83
|
+
const dist = Math.max(dx, dz);
|
|
84
|
+
return dist >= 1 && dist <= DEADLANDS_DEFENSE_DEPTH;
|
|
85
|
+
}
|
|
86
|
+
function towerHash(x, z, salt) {
|
|
87
|
+
let n = x * 374761393 + z * 668265263 + salt;
|
|
88
|
+
n = (n ^ (n >> 13)) * 1274126177;
|
|
89
|
+
return (n ^ (n >> 16)) >>> 0;
|
|
90
|
+
}
|
|
91
|
+
export function collectDeadlandsTowerSpots() {
|
|
92
|
+
const spots = [];
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
const tooClose = (x, z) => {
|
|
95
|
+
for (const s of spots) {
|
|
96
|
+
if (Math.abs(s.x - x) + Math.abs(s.z - z) < DEADLANDS_TOWER_MIN_GAP)
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
};
|
|
101
|
+
const push = (x, z) => {
|
|
102
|
+
const k = `${x},${z}`;
|
|
103
|
+
if (seen.has(k))
|
|
104
|
+
return;
|
|
105
|
+
if (!isDeadlands(x, z))
|
|
106
|
+
return;
|
|
107
|
+
seen.add(k);
|
|
108
|
+
spots.push({ x, z });
|
|
109
|
+
};
|
|
110
|
+
push(DEADLANDS_MIN_X, DEADLANDS_MIN_Z);
|
|
111
|
+
push(DEADLANDS_MAX_X, DEADLANDS_MIN_Z);
|
|
112
|
+
push(DEADLANDS_MIN_X, DEADLANDS_MAX_Z);
|
|
113
|
+
push(DEADLANDS_MAX_X, DEADLANDS_MAX_Z);
|
|
114
|
+
const wall = [];
|
|
115
|
+
for (let x = DEADLANDS_MIN_X + 1; x <= DEADLANDS_MAX_X - 1; x++) {
|
|
116
|
+
wall.push({ x, z: DEADLANDS_MIN_Z });
|
|
117
|
+
wall.push({ x, z: DEADLANDS_MAX_Z });
|
|
118
|
+
}
|
|
119
|
+
for (let z = DEADLANDS_MIN_Z + 1; z <= DEADLANDS_MAX_Z - 1; z++) {
|
|
120
|
+
wall.push({ x: DEADLANDS_MIN_X, z });
|
|
121
|
+
wall.push({ x: DEADLANDS_MAX_X, z });
|
|
122
|
+
}
|
|
123
|
+
for (const p of wall) {
|
|
124
|
+
const n = towerHash(p.x, p.z, 901);
|
|
125
|
+
if (n % 11 !== 0 && n % 13 !== 1)
|
|
126
|
+
continue;
|
|
127
|
+
if (tooClose(p.x, p.z))
|
|
128
|
+
continue;
|
|
129
|
+
push(p.x, p.z);
|
|
130
|
+
}
|
|
131
|
+
for (let z = DEADLANDS_MIN_Z + 4; z <= DEADLANDS_MAX_Z - 4; z += 3) {
|
|
132
|
+
for (let x = DEADLANDS_MIN_X + 4; x <= DEADLANDS_MAX_X - 4; x += 3) {
|
|
133
|
+
const n = towerHash(x, z, 1703);
|
|
134
|
+
if (n % 47 !== 0)
|
|
135
|
+
continue;
|
|
136
|
+
if (tooClose(x, z))
|
|
137
|
+
continue;
|
|
138
|
+
push(x, z);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return spots;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=zones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zones.js","sourceRoot":"","sources":["../src/zones.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dreadwood-types/types",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Public wire protocol and client-safe constants for Dreadwoods",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.json",
|
|
19
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
20
|
+
"prepare": "npm run build",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"typescript": "^5.9.2"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/JamesPhelps/dreadwoods-types.git"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=22"
|
|
35
|
+
}
|
|
36
|
+
}
|