@provable-games/dm-engine 0.5.0 → 0.6.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 (44) hide show
  1. package/dist/constants/game.d.ts +2 -0
  2. package/dist/constants/game.d.ts.map +1 -1
  3. package/dist/constants/game.js +2 -0
  4. package/dist/constants/game.js.map +1 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/packing.d.ts +51 -3
  10. package/dist/packing.d.ts.map +1 -1
  11. package/dist/packing.js +99 -8
  12. package/dist/packing.js.map +1 -1
  13. package/dist/protocol.d.ts +8 -0
  14. package/dist/protocol.d.ts.map +1 -1
  15. package/dist/protocol.js +9 -1
  16. package/dist/protocol.js.map +1 -1
  17. package/dist/replay.d.ts +22 -9
  18. package/dist/replay.d.ts.map +1 -1
  19. package/dist/replay.js +170 -45
  20. package/dist/replay.js.map +1 -1
  21. package/dist/rules/boosts.d.ts +39 -0
  22. package/dist/rules/boosts.d.ts.map +1 -0
  23. package/dist/rules/boosts.js +105 -0
  24. package/dist/rules/boosts.js.map +1 -0
  25. package/dist/rules/game.d.ts +19 -3
  26. package/dist/rules/game.d.ts.map +1 -1
  27. package/dist/rules/game.js +66 -42
  28. package/dist/rules/game.js.map +1 -1
  29. package/dist/rules/gameSimulation.d.ts +22 -6
  30. package/dist/rules/gameSimulation.d.ts.map +1 -1
  31. package/dist/rules/gameSimulation.js +102 -47
  32. package/dist/rules/gameSimulation.js.map +1 -1
  33. package/dist/rules/loot.d.ts +39 -4
  34. package/dist/rules/loot.d.ts.map +1 -1
  35. package/dist/rules/loot.js +75 -142
  36. package/dist/rules/loot.js.map +1 -1
  37. package/dist/transcript.d.ts +6 -1
  38. package/dist/transcript.d.ts.map +1 -1
  39. package/dist/transcript.js.map +1 -1
  40. package/dist/view.d.ts +7 -2
  41. package/dist/view.d.ts.map +1 -1
  42. package/dist/view.js +10 -4
  43. package/dist/view.js.map +1 -1
  44. package/package.json +1 -1
@@ -0,0 +1,105 @@
1
+ import { ItemId } from "../constants/loot.js";
2
+ import { ItemUtils } from "./loot.js";
3
+ /**
4
+ * `ImplAdventurer::add_stat_boosts` / `remove_stat_boosts` -- the bracket every action runs inside.
5
+ *
6
+ * `Replay::step` (replay.cairo:468/545) wraps EVERY dispatch in it, and `Replay::start`
7
+ * (replay.cairo:602/638) wraps START the same way. So on chain there are two conventions and both
8
+ * matter:
9
+ *
10
+ * - STORAGE holds unboosted stats. That is what `pack` writes, what `GameSettled` publishes and
11
+ * what `ChainCheck.packed_adventurer` reports.
12
+ * - The RULES always see boosted stats: equipment suffix boosts, bag boosts, and a `luck`
13
+ * derived from jewellery.
14
+ *
15
+ * The distinction is load-bearing rather than cosmetic. `equip_item` and `process_item_level_up`
16
+ * adjust `stats` mid-action, and those adjustments are net-zero against storage only because
17
+ * `remove_stat_boosts` recomputes from the POST-action equipment and bag. Run the same handlers
18
+ * without the bracket and every greatness-15 unlock leaves a permanent offset behind.
19
+ */
20
+ /** `ImplItem::get_greatness` -- 1 at zero xp, `sqrt(xp)` after, capped at 20. */
21
+ function itemGreatness(item) {
22
+ if (!item || item.xp === 0)
23
+ return 1;
24
+ return Math.min(20, Math.floor(Math.sqrt(item.xp)));
25
+ }
26
+ /** `ImplAdventurer::jewelry_bonus_luck` -- the silver ring, and nothing else. */
27
+ export function jewelryBonusLuck(ring) {
28
+ return ring?.id === ItemId.SilverRing ? itemGreatness(ring) : 0;
29
+ }
30
+ /** `ImplBag::get_jewelry_greatness` -- every necklace and ring sitting in the bag. */
31
+ function bagJewelryGreatness(bag) {
32
+ let total = 0;
33
+ for (const item of bag) {
34
+ if (item.id === 0)
35
+ continue;
36
+ const slot = ItemUtils.getItemSlot(item.id);
37
+ if (slot === "Neck" || slot === "Ring")
38
+ total += itemGreatness(item);
39
+ }
40
+ return total;
41
+ }
42
+ /**
43
+ * `Equipment::calculate_luck` -- the adventurer's crit chance, derived from jewellery.
44
+ *
45
+ * Never stored and never accumulated: `add_stat_boosts` ASSIGNS it on every action, and the packed
46
+ * codec drops it. An empty slot still has greatness 1, so a started adventurer always carries at
47
+ * least 2 -- roughly a 2.3% crit chance per attack round, which is why treating luck as zero off
48
+ * chain diverges from the very first fight.
49
+ */
50
+ export function calculateLuck(equipment, bag) {
51
+ return (itemGreatness(equipment.neck) +
52
+ itemGreatness(equipment.ring) +
53
+ jewelryBonusLuck(equipment.ring) +
54
+ bagJewelryGreatness(bag));
55
+ }
56
+ /**
57
+ * `ImplAdventurer::get_item_specials_seed(salt, adventurer_id)`.
58
+ *
59
+ * NOT the raw `item_specials_salt`. The salt is 14 bits of packed state; the seed every specials
60
+ * lookup actually takes is `poseidon([salt, adventurer_id]) % 2^16`, so the same salt names
61
+ * different specials for different adventurers. Passing the salt where the seed belongs resolves
62
+ * every one of the 101 items to a different suffix.
63
+ */
64
+ export function itemSpecialsSeed(adventurer, adventurerId) {
65
+ return ItemUtils.getItemSpecialsSeed(adventurer.item_specials_salt, adventurerId);
66
+ }
67
+ /** The suffix + bag boosts an adventurer's loadout is currently granting. */
68
+ export function loadoutBoosts(adventurer, bag, adventurerId, specialsOverride = 0n) {
69
+ return ItemUtils.getEquippedItemStats(adventurer, bag, adventurerId, specialsOverride);
70
+ }
71
+ const STAT_KEYS = [
72
+ "strength",
73
+ "dexterity",
74
+ "vitality",
75
+ "intelligence",
76
+ "wisdom",
77
+ "charisma",
78
+ ];
79
+ /**
80
+ * `add_stat_boosts` -- mutates in place, exactly as the Cairo does.
81
+ *
82
+ * `luck` is ASSIGNED rather than added, which is why `remove_stat_boosts` has no matching
83
+ * subtraction for it.
84
+ */
85
+ export function addStatBoosts(adventurer, bag, adventurerId, specialsOverride = 0n) {
86
+ const boosts = loadoutBoosts(adventurer, bag, adventurerId, specialsOverride);
87
+ for (const key of STAT_KEYS)
88
+ adventurer.stats[key] += boosts[key];
89
+ adventurer.stats.luck = calculateLuck(adventurer.equipment, bag);
90
+ return adventurer;
91
+ }
92
+ /**
93
+ * `remove_stat_boosts` -- mutates in place.
94
+ *
95
+ * Computed against the state it is handed, which after an action is the POST-action equipment and
96
+ * bag. That is what makes an equip's mid-action `apply_suffix_boost` net out to nothing.
97
+ * `luck` is deliberately left alone: the codec drops it, so the chain never has to unwind it.
98
+ */
99
+ export function removeStatBoosts(adventurer, bag, adventurerId, specialsOverride = 0n) {
100
+ const boosts = loadoutBoosts(adventurer, bag, adventurerId, specialsOverride);
101
+ for (const key of STAT_KEYS)
102
+ adventurer.stats[key] -= boosts[key];
103
+ return adventurer;
104
+ }
105
+ //# sourceMappingURL=boosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boosts.js","sourceRoot":"","sources":["../../src/rules/boosts.ts"],"names":[],"mappings":"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"}
@@ -17,19 +17,35 @@ export declare const calculateNextLevelXP: (currentLevel: number, item?: boolean
17
17
  export declare const calculateProgress: (xp: number, item?: boolean) => number;
18
18
  export declare const getNewItemsEquipped: (newEquipment: Equipment, oldEquipment: Equipment) => Item[];
19
19
  export declare const incrementBeastsCollected: (gameId: string) => void;
20
- export declare const calculateAttackDamage: (weapon: Item, adventurer: Adventurer, beast: Beast | null, specialsOverride?: bigint) => {
20
+ /**
21
+ * `ImplAdventurer::precompute_attack_damage` -- both outcomes of one swing.
22
+ *
23
+ * The ORDER is the thing to preserve. The contract totals elemental + strength + weapon specials,
24
+ * floors that against the beast's armour at `MINIMUM_DAMAGE_TO_BEASTS`, and adds the ring bonuses
25
+ * to the floored result. Folding the rings in before the floor -- which this used to do -- agrees
26
+ * everywhere the floor does not bind and silently differs everywhere it does.
27
+ */
28
+ export declare const calculateAttackDamage: (weapon: Item, adventurer: Adventurer, beast: Beast | null, adventurerId: string | bigint, specialsOverride?: bigint) => {
21
29
  baseDamage: number;
22
30
  criticalDamage: number;
23
31
  };
24
32
  export declare const ability_based_percentage: (adventurer_xp: number, relevant_stat: number) => number;
25
33
  export declare const ability_based_avoid_threat: (adventurer_level: number, relevant_stat: number, rnd: number) => boolean;
26
34
  export declare const ability_based_damage_reduction: (adventurer_xp: number, relevant_stat: number) => number;
27
- export declare const calculateBeastDamage: (beast: Beast, adventurer: Adventurer, armor: Item, specialsOverride?: bigint) => {
35
+ /**
36
+ * `Item::jewelry_armor_bonus` -- the armour a matching necklace adds, as a flat damage reduction.
37
+ *
38
+ * `base_armor * (neck.greatness * 3) / 100`, and zero unless the necklace matches the struck
39
+ * armour's material. Shared by the beast path here and the obstacle path in `gameSimulation.ts`,
40
+ * because `defend` and `get_obstacle_damage` apply the identical term.
41
+ */
42
+ export declare const jewelryArmorBonus: (armor: Item, neck: Item) => number;
43
+ export declare const calculateBeastDamage: (beast: Beast, adventurer: Adventurer, armor: Item, adventurerId: string | bigint, specialsOverride?: bigint) => {
28
44
  baseDamage: number;
29
45
  criticalDamage: number;
30
46
  };
31
47
  export declare function elementalAdjustedDamage(base_attack: number, weapon_type: string, armor_type: string): number;
32
48
  export declare function strength_dmg(damage: number, strength: number): number;
33
- export declare const calculateCombatStats: (adventurer: Adventurer, bagItems: Item[], beast: Beast | null) => CombatStats;
49
+ export declare const calculateCombatStats: (adventurer: Adventurer, bagItems: readonly Item[], beast: Beast | null, adventurerId: string | bigint, specialsOverride?: bigint) => CombatStats;
34
50
  export declare const calculateGoldReward: (beast: Beast, ring: Item | null) => number;
35
51
  //# sourceMappingURL=game.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/rules/game.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAK9E,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,GAAG,MAAM,GAAG,SAAS,WAKpE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,WAGxC,CAAC;AAiDF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GAAI,aAAa,MAAM,EAAE,OAAO,MAAM,KAAG,MAKjF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,cAAc,MAAM,KACnB,MAAM,GAAG,IAaX,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,cAAc,MAAM,KACnB,MAAM,GAAG,IAKX,CAAC;AAmDF,eAAO,MAAM,yBAAyB,GACpC,UAAU,MAAM,EAChB,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,MASF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,EAAE,OAAM,OAAe,WAM/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,IAAI,MAAM,EAAE,OAAM,OAAe,WAKlE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,cAAc,SAAS,EAAE,cAAc,SAAS,WAgBnF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,SAGtD,CAAC;AAuDF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,IAAI,EACZ,YAAY,UAAU,EACtB,OAAO,KAAK,GAAG,IAAI,EACnB,mBAAkB,MAAW;;;CA8D9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,WAQpF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,kBAAkB,MAAM,EACxB,eAAe,MAAM,EACrB,KAAK,MAAM,YAQZ,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,WAc1F,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,KAAK,EACZ,YAAY,UAAU,EACtB,OAAO,IAAI,EACX,mBAAkB,MAAW;;;CAuD9B,CAAC;AAyBF,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAoBR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrE;AAGD,eAAO,MAAM,oBAAoB,GAC/B,YAAY,UAAU,EACtB,UAAU,IAAI,EAAE,EAChB,OAAO,KAAK,GAAG,IAAI,KAClB,WA4GF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,WAUlE,CAAC"}
1
+ {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/rules/game.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAK9E,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,GAAG,MAAM,GAAG,SAAS,WAKpE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,WAGxC,CAAC;AAiDF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GAAI,aAAa,MAAM,EAAE,OAAO,MAAM,KAAG,MAKjF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,cAAc,MAAM,KACnB,MAAM,GAAG,IAaX,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,cAAc,MAAM,KACnB,MAAM,GAAG,IAKX,CAAC;AAmDF,eAAO,MAAM,yBAAyB,GACpC,UAAU,MAAM,EAChB,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,MASF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,EAAE,OAAM,OAAe,WAM/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,IAAI,MAAM,EAAE,OAAM,OAAe,WAKlE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,cAAc,SAAS,EAAE,cAAc,SAAS,WAgBnF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,SAGtD,CAAC;AAmDF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,IAAI,EACZ,YAAY,UAAU,EACtB,OAAO,KAAK,GAAG,IAAI,EACnB,cAAc,MAAM,GAAG,MAAM,EAC7B,mBAAkB,MAAW;;;CA6D9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,WAQpF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,kBAAkB,MAAM,EACxB,eAAe,MAAM,EACrB,KAAK,MAAM,YAQZ,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,WAc1F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,IAAI,EAAE,MAAM,IAAI,KAAG,MAI3D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,KAAK,EACZ,YAAY,UAAU,EACtB,OAAO,IAAI,EACX,cAAc,MAAM,GAAG,MAAM,EAC7B,mBAAkB,MAAW;;;CAgD9B,CAAC;AAyBF,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAoBR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrE;AAGD,eAAO,MAAM,oBAAoB,GAC/B,YAAY,UAAU,EACtB,UAAU,SAAS,IAAI,EAAE,EACzB,OAAO,KAAK,GAAG,IAAI,EACnB,cAAc,MAAM,GAAG,MAAM,EAC7B,mBAAkB,MAAW,KAC5B,WAsHF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,WAUlE,CAAC"}
@@ -183,19 +183,25 @@ export const incrementBeastsCollected = (gameId) => {
183
183
  const currentCount = parseInt(localStorage.getItem(`beast_collected_${gameId}`) || "0");
184
184
  localStorage.setItem(`beast_collected_${gameId}`, (currentCount + 1).toString());
185
185
  };
186
- // Calculate critical hit bonus based on luck and ring
187
- const critical_hit_bonus = (base_damage, ring) => {
188
- let total = 0;
189
- total = base_damage;
190
- // Titanium Ring gives 3% bonus per level on critical hits
191
- if (ring && ItemUtils.getItemName(ring.id) === "Titanium Ring" && total > 0) {
192
- const ringLevel = calculateLevel(ring.xp);
193
- total += Math.floor((total * 3 * ringLevel) / 100);
194
- }
195
- return total;
186
+ /**
187
+ * `Item::name_match_bonus_damage` / `critical_hit_bonus_damage` -- both are
188
+ * `base * 3 * greatness / 100` for one named ring and zero for anything else.
189
+ *
190
+ * These land OUTSIDE the minimum-damage floor on chain (`precompute_attack_damage`), which is why
191
+ * they are their own function rather than being folded into the terms below.
192
+ */
193
+ const ringBonusDamage = (ring, baseDamage, ringName) => {
194
+ if (!ring || ItemUtils.getItemName(ring.id) !== ringName || baseDamage <= 0)
195
+ return 0;
196
+ return Math.floor((baseDamage * 3 * calculateLevel(ring.xp)) / 100);
196
197
  };
197
- // Calculate weapon special bonus based on matching specials
198
- const calculateWeaponSpecialBonus = (weaponId, weaponLevel, itemSpecialsSeed, beastPrefix, beastSuffix, baseDamage, ring, specialsOverride) => {
198
+ /**
199
+ * `ImplCombat::weapon_special_bonus` -- 8x on a prefix match, 2x on a suffix match.
200
+ *
201
+ * Deliberately excludes the Platinum Ring's cut: the contract computes this bonus, floors the
202
+ * whole attack against the beast's armour, and only then adds `name_match_bonus_damage`.
203
+ */
204
+ const calculateWeaponSpecialBonus = (weaponId, weaponLevel, itemSpecialsSeed, beastPrefix, beastSuffix, baseDamage, specialsOverride) => {
199
205
  if (!beastPrefix && !beastSuffix)
200
206
  return 0;
201
207
  const weaponSpecials = ItemUtils.getSpecials(weaponId, weaponLevel, itemSpecialsSeed, specialsOverride);
@@ -208,14 +214,17 @@ const calculateWeaponSpecialBonus = (weaponId, weaponLevel, itemSpecialsSeed, be
208
214
  if (weaponSpecials.suffix && weaponSpecials.suffix === beastSuffix) {
209
215
  bonus += baseDamage * 2;
210
216
  }
211
- // Platinum Ring gives 3% bonus per level on special matches
212
- if (ItemUtils.getItemName(ring.id) === "Platinum Ring" && bonus > 0) {
213
- const ringLevel = calculateLevel(ring.xp);
214
- bonus += Math.floor((bonus * 3 * ringLevel) / 100);
215
- }
216
217
  return bonus;
217
218
  };
218
- export const calculateAttackDamage = (weapon, adventurer, beast, specialsOverride = 0n) => {
219
+ /**
220
+ * `ImplAdventurer::precompute_attack_damage` -- both outcomes of one swing.
221
+ *
222
+ * The ORDER is the thing to preserve. The contract totals elemental + strength + weapon specials,
223
+ * floors that against the beast's armour at `MINIMUM_DAMAGE_TO_BEASTS`, and adds the ring bonuses
224
+ * to the floored result. Folding the rings in before the floor -- which this used to do -- agrees
225
+ * everywhere the floor does not bind and silently differs everywhere it does.
226
+ */
227
+ export const calculateAttackDamage = (weapon, adventurer, beast, adventurerId, specialsOverride = 0n) => {
219
228
  if (!weapon)
220
229
  return { baseDamage: MIN_DAMAGE, criticalDamage: MIN_DAMAGE }; // Minimum damage
221
230
  const weaponLevel = calculateLevel(weapon.xp);
@@ -240,17 +249,21 @@ export const calculateAttackDamage = (weapon, adventurer, beast, specialsOverrid
240
249
  if (adventurer.stats.strength > 0) {
241
250
  strengthBonus = Math.floor((elementalDamage * adventurer.stats.strength * 10) / 100);
242
251
  }
243
- // Calculate special name bonus damage with ring bonus
252
+ // Calculate special name bonus damage. The ring's cut is added after the floor, below.
244
253
  const ring = adventurer.equipment.ring;
245
- const specialBonus = calculateWeaponSpecialBonus(weapon.id, weaponLevel, adventurer.item_specials_salt, beast.specialPrefix, beast.specialSuffix, elementalDamage, ring, specialsOverride);
246
- // Calculate base damage (without critical)
247
- const baseDamage = Math.max(MIN_DAMAGE, elementalDamage + strengthBonus + specialBonus - baseArmor);
248
- // Calculate critical hit bonus with ring bonus using adventurer's luck stat
249
- const critBonus = critical_hit_bonus(elementalDamage, ring);
250
- const criticalDamage = Math.max(MIN_DAMAGE, elementalDamage + strengthBonus + specialBonus + critBonus - baseArmor);
254
+ const specialBonus = calculateWeaponSpecialBonus(weapon.id, weaponLevel, ItemUtils.getItemSpecialsSeed(adventurer.item_specials_salt, adventurerId), beast.specialPrefix, beast.specialSuffix, elementalDamage, specialsOverride);
255
+ // The floor, written the way `calculate_damage` writes it: strictly greater, or the minimum.
256
+ const totalNoCrit = elementalDamage + strengthBonus + specialBonus;
257
+ const normalBase = totalNoCrit > baseArmor + MIN_DAMAGE ? totalNoCrit - baseArmor : MIN_DAMAGE;
258
+ // A critical hit's bonus is one more copy of the elemental damage, inside the floor.
259
+ const totalCrit = totalNoCrit + elementalDamage;
260
+ const critBase = totalCrit > baseArmor + MIN_DAMAGE ? totalCrit - baseArmor : MIN_DAMAGE;
261
+ // Both ring bonuses sit outside it.
262
+ const nameMatchJewelry = ringBonusDamage(ring, specialBonus, "Platinum Ring");
263
+ const critJewelry = ringBonusDamage(ring, elementalDamage, "Titanium Ring");
251
264
  return {
252
- baseDamage,
253
- criticalDamage,
265
+ baseDamage: normalBase + nameMatchJewelry,
266
+ criticalDamage: critBase + nameMatchJewelry + critJewelry,
254
267
  };
255
268
  };
256
269
  export const ability_based_percentage = (adventurer_xp, relevant_stat) => {
@@ -283,7 +296,20 @@ export const ability_based_damage_reduction = (adventurer_xp, relevant_stat) =>
283
296
  const smooth = 3 * r2 - 2 * r3;
284
297
  return Math.floor((100 * smooth) / SCALE);
285
298
  };
286
- export const calculateBeastDamage = (beast, adventurer, armor, specialsOverride = 0n) => {
299
+ /**
300
+ * `Item::jewelry_armor_bonus` -- the armour a matching necklace adds, as a flat damage reduction.
301
+ *
302
+ * `base_armor * (neck.greatness * 3) / 100`, and zero unless the necklace matches the struck
303
+ * armour's material. Shared by the beast path here and the obstacle path in `gameSimulation.ts`,
304
+ * because `defend` and `get_obstacle_damage` apply the identical term.
305
+ */
306
+ export const jewelryArmorBonus = (armor, neck) => {
307
+ if (!neck_reduction(armor, neck))
308
+ return 0;
309
+ const baseArmor = calculateLevel(armor.xp) * (6 - Number(ItemUtils.getItemTier(armor.id)));
310
+ return Math.floor((baseArmor * calculateLevel(neck.xp) * 3) / 100);
311
+ };
312
+ export const calculateBeastDamage = (beast, adventurer, armor, adventurerId, specialsOverride = 0n) => {
287
313
  const baseAttack = beast.level * (6 - Number(beast.tier));
288
314
  let baseDamage = baseAttack;
289
315
  let critDamage = baseAttack;
@@ -297,7 +323,7 @@ export const calculateBeastDamage = (beast, adventurer, armor, specialsOverride
297
323
  let damage = elementalDamage;
298
324
  // Apply name match bonus
299
325
  if (beast.specialPrefix && beast.specialSuffix) {
300
- const itemSpecials = ItemUtils.getSpecials(armor.id, armorLevel, adventurer.item_specials_salt, specialsOverride);
326
+ const itemSpecials = ItemUtils.getSpecials(armor.id, armorLevel, ItemUtils.getItemSpecialsSeed(adventurer.item_specials_salt, adventurerId), specialsOverride);
301
327
  if (itemSpecials.suffix === beast.specialSuffix) {
302
328
  damage += elementalDamage * 2; // Suffix match
303
329
  }
@@ -308,13 +334,9 @@ export const calculateBeastDamage = (beast, adventurer, armor, specialsOverride
308
334
  critDamage = Math.max(BEAST_MIN_DAMAGE, damage + elementalDamage - armorValue);
309
335
  baseDamage = Math.max(BEAST_MIN_DAMAGE, damage - armorValue);
310
336
  // Check for neck armor reduction
311
- const neck = adventurer.equipment.neck;
312
- if (neck_reduction(armor, neck)) {
313
- const neckLevel = calculateLevel(neck.xp);
314
- const neckReduction = Math.floor((armorLevel * (6 - ItemUtils.getItemTier(armor.id)) * neckLevel * 3) / 100);
315
- baseDamage -= neckReduction;
316
- critDamage -= neckReduction;
317
- }
337
+ const neckReduction = jewelryArmorBonus(armor, adventurer.equipment.neck);
338
+ baseDamage -= neckReduction;
339
+ critDamage -= neckReduction;
318
340
  }
319
341
  else {
320
342
  baseDamage = Math.floor(baseAttack * 1.5);
@@ -360,8 +382,8 @@ export function strength_dmg(damage, strength) {
360
382
  return (damage * strength * 10) / 100;
361
383
  }
362
384
  // Calculate combat stats
363
- export const calculateCombatStats = (adventurer, bagItems, beast) => {
364
- const { baseDamage, criticalDamage } = calculateAttackDamage(adventurer.equipment.weapon, adventurer, beast);
385
+ export const calculateCombatStats = (adventurer, bagItems, beast, adventurerId, specialsOverride = 0n) => {
386
+ const { baseDamage, criticalDamage } = calculateAttackDamage(adventurer.equipment.weapon, adventurer, beast, adventurerId, specialsOverride);
365
387
  let protection = 0;
366
388
  let bestProtection = 0;
367
389
  const bestItems = [];
@@ -376,7 +398,7 @@ export const calculateCombatStats = (adventurer, bagItems, beast) => {
376
398
  bagItems
377
399
  .filter((item) => ItemUtils.getItemSlot(item.id) === "Weapon")
378
400
  .forEach((item) => {
379
- const itemDamage = calculateAttackDamage(item, adventurer, beast).baseDamage;
401
+ const itemDamage = calculateAttackDamage(item, adventurer, beast, adventurerId, specialsOverride).baseDamage;
380
402
  if (itemDamage > bestDamage) {
381
403
  bestDamage = itemDamage;
382
404
  bestWeapon = item;
@@ -389,14 +411,14 @@ export const calculateCombatStats = (adventurer, bagItems, beast) => {
389
411
  const armor = adventurer.equipment[slot];
390
412
  let armorDefense = 0;
391
413
  if (armor.id !== 0) {
392
- const beastDmg = calculateBeastDamage(beast, adventurer, armor);
414
+ const beastDmg = calculateBeastDamage(beast, adventurer, armor, adventurerId, specialsOverride);
393
415
  armorDefense = Math.max(0, maxDamage - beastDmg.baseDamage);
394
416
  maxBeastBaseDamage = Math.max(maxBeastBaseDamage, beastDmg.baseDamage);
395
417
  maxBeastCriticalDamage = Math.max(maxBeastCriticalDamage, beastDmg.criticalDamage);
396
418
  }
397
419
  else {
398
420
  // No armor in this slot - beast does unmitigated damage
399
- const beastDmg = calculateBeastDamage(beast, adventurer, armor);
421
+ const beastDmg = calculateBeastDamage(beast, adventurer, armor, adventurerId, specialsOverride);
400
422
  maxBeastBaseDamage = Math.max(maxBeastBaseDamage, beastDmg.baseDamage);
401
423
  maxBeastCriticalDamage = Math.max(maxBeastCriticalDamage, beastDmg.criticalDamage);
402
424
  }
@@ -405,7 +427,9 @@ export const calculateCombatStats = (adventurer, bagItems, beast) => {
405
427
  bagItems
406
428
  .filter((item) => ItemUtils.getItemSlot(item.id).toLowerCase() === slot)
407
429
  .forEach((item) => {
408
- const itemDefense = Math.max(0, maxDamage - calculateBeastDamage(beast, adventurer, item).baseDamage);
430
+ const itemDefense = Math.max(0, maxDamage -
431
+ calculateBeastDamage(beast, adventurer, item, adventurerId, specialsOverride)
432
+ .baseDamage);
409
433
  if (itemDefense > bestDefense) {
410
434
  bestDefense = itemDefense;
411
435
  bestItem = item;
@@ -1 +1 @@
1
- {"version":3,"file":"game.js","sourceRoot":"","sources":["../../src/rules/game.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../src/rules/game.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ export interface ObstacleRolls {
50
50
  levelRnd: number;
51
51
  }
52
52
  export declare const generateObstacle: (adventurerLevel: number, rolls?: ObstacleRolls) => GeneratedObstacle;
53
- export declare const calculateObstacleDamage: (obstacle: GeneratedObstacle, armor: Item, adventurerLevel: number, baseDamageReduction: number, rolls?: BeastAttackRolls) => {
53
+ export declare const calculateObstacleDamage: (obstacle: GeneratedObstacle, armor: Item, adventurerLevel: number, baseDamageReduction: number, rolls?: BeastAttackRolls, neck?: Item) => {
54
54
  damage: number;
55
55
  location: string;
56
56
  critical_hit: boolean;
@@ -72,6 +72,8 @@ export declare const increaseHealth: (adventurer: Adventurer, amount: number) =>
72
72
  export declare const decreaseHealth: (adventurer: Adventurer, amount: number) => void;
73
73
  export declare const increaseGold: (adventurer: Adventurer, amount: number) => void;
74
74
  export declare const increaseXp: (adventurer: Adventurer, amount: number) => void;
75
+ /** `ImplAdventurer::increase_stat_upgrades_available` -- saturates at 15, the field's width. */
76
+ export declare const grantStatUpgrades: (adventurer: Adventurer, amount: number) => void;
75
77
  export declare const canExplore: (adventurer: Adventurer) => boolean;
76
78
  /**
77
79
  * Get the armor Item at a given attack slot.
@@ -87,7 +89,7 @@ export interface LootGoldConversion {
87
89
  * already owns it (equipped or in bag) or has nowhere to put it (bag full and
88
90
  * equipment slot occupied). Returns null when the item would be kept.
89
91
  */
90
- export declare const getLootDiscoveryGoldConversion: (adventurer: Adventurer, bag: Item[], itemId: number) => LootGoldConversion | null;
92
+ export declare const getLootDiscoveryGoldConversion: (adventurer: Adventurer, bag: readonly Item[], itemId: number) => LootGoldConversion | null;
91
93
  /**
92
94
  * Try to add a discovered loot item to equipment or bag.
93
95
  * Returns the gold conversion if the item couldn't be added (already owned or
@@ -108,7 +110,7 @@ export declare const isCriticalHit: (luck: number, criticalHitRnd?: number) => b
108
110
  * Delegates to calculateAttackDamage from game.ts which includes weapon specials,
109
111
  * ring name-match bonus, and ring critical hit bonus.
110
112
  */
111
- export declare const calculateAdventurerAttackDamage: (adventurer: Adventurer, beast: Beast, specialsOverride?: bigint) => {
113
+ export declare const calculateAdventurerAttackDamage: (adventurer: Adventurer, beast: Beast, adventurerId: string | bigint, specialsOverride?: bigint) => {
112
114
  normal: number;
113
115
  crit: number;
114
116
  };
@@ -125,7 +127,7 @@ export interface BeastAttackRolls {
125
127
  attackLocationRnd: number;
126
128
  criticalHitRnd: number;
127
129
  }
128
- export declare const calculateBeastCounterAttack: (beast: Beast, adventurer: Adventurer, baseDamageReduction: number, isAmbush?: boolean, rolls?: BeastAttackRolls, specialsOverride?: bigint) => {
130
+ export declare const calculateBeastCounterAttack: (beast: Beast, adventurer: Adventurer, baseDamageReduction: number, isAmbush: boolean | undefined, rolls: BeastAttackRolls | undefined, adventurerId: string | bigint, specialsOverride?: bigint) => {
129
131
  damage: number;
130
132
  location: string;
131
133
  critical_hit: boolean;
@@ -148,11 +150,25 @@ export declare const grantXpToEquippedItems: (adventurer: Adventurer, xpAmount:
148
150
  * Equip a single item from bag into the correct equipment slot.
149
151
  * If the slot is occupied, the displaced item moves to the bag.
150
152
  */
151
- export declare const equipItem: (adventurer: Adventurer, bag: Item[], itemId: number, specialsOverride?: bigint) => void;
153
+ export declare const equipItem: (adventurer: Adventurer, bag: Item[], itemId: number, adventurerId: string | bigint, specialsOverride?: bigint) => void;
152
154
  /**
153
155
  * Drop a single item from equipment or bag.
154
156
  */
155
- export declare const dropItem: (adventurer: Adventurer, bag: Item[], itemId: number, specialsOverride?: bigint) => void;
157
+ /**
158
+ * `Inventory::_drop` for one item. Returns false when the adventurer does not own it, which the
159
+ * contract answers with a `'Item not owned by adventurer'` panic -- so a caller replaying a
160
+ * transcript has to treat false as a refused action, not a no-op.
161
+ */
162
+ export declare const dropItem: (adventurer: Adventurer, bag: Item[], itemId: number, adventurerId: string | bigint, specialsOverride?: bigint) => boolean;
163
+ /**
164
+ * `ImplStats::apply_random_stats` -- deal `count` points onto stats that are ALREADY there.
165
+ *
166
+ * Point by point, each one saturating at `MAX_STAT_VALUE`. Dealing them into a fresh delta and
167
+ * adding it afterwards is not the same thing: the contract clamps against the running total, so a
168
+ * stat that is already at 31 -- which an overridden start or a boosted one can be -- swallows the
169
+ * point instead of overflowing the 5-bit field.
170
+ */
171
+ export declare const applyRandomStats: (stats: Stats, seed: bigint, count: number) => void;
156
172
  export declare const generateStartingStats: (levelSeed?: bigint, count?: number) => Stats;
157
173
  export {};
158
174
  //# sourceMappingURL=gameSimulation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gameSimulation.d.ts","sourceRoot":"","sources":["../../src/rules/gameSimulation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gameSimulation.d.ts","sourceRoot":"","sources":["../../src/rules/gameSimulation.ts"],"names":[],"mappings":"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"}