@provable-games/dm-engine 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 (89) hide show
  1. package/dist/actions.d.ts +18 -0
  2. package/dist/actions.d.ts.map +1 -0
  3. package/dist/actions.js +88 -0
  4. package/dist/actions.js.map +1 -0
  5. package/dist/constants/beast.d.ts +28 -0
  6. package/dist/constants/beast.d.ts.map +1 -0
  7. package/dist/constants/beast.js +216 -0
  8. package/dist/constants/beast.js.map +1 -0
  9. package/dist/constants/game.d.ts +23 -0
  10. package/dist/constants/game.d.ts.map +1 -0
  11. package/dist/constants/game.js +26 -0
  12. package/dist/constants/game.js.map +1 -0
  13. package/dist/constants/loot.d.ts +341 -0
  14. package/dist/constants/loot.d.ts.map +1 -0
  15. package/dist/constants/loot.js +456 -0
  16. package/dist/constants/loot.js.map +1 -0
  17. package/dist/constants/obstacle.d.ts +4 -0
  18. package/dist/constants/obstacle.d.ts.map +1 -0
  19. package/dist/constants/obstacle.js +81 -0
  20. package/dist/constants/obstacle.js.map +1 -0
  21. package/dist/events.d.ts +50 -0
  22. package/dist/events.d.ts.map +1 -0
  23. package/dist/events.js +2 -0
  24. package/dist/events.js.map +1 -0
  25. package/dist/index.d.ts +30 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +34 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/packing.d.ts +6 -0
  30. package/dist/packing.d.ts.map +1 -0
  31. package/dist/packing.js +76 -0
  32. package/dist/packing.js.map +1 -0
  33. package/dist/protocol.d.ts +55 -0
  34. package/dist/protocol.d.ts.map +1 -0
  35. package/dist/protocol.js +250 -0
  36. package/dist/protocol.js.map +1 -0
  37. package/dist/replay.d.ts +35 -0
  38. package/dist/replay.d.ts.map +1 -0
  39. package/dist/replay.js +856 -0
  40. package/dist/replay.js.map +1 -0
  41. package/dist/rules/beast.d.ts +264 -0
  42. package/dist/rules/beast.d.ts.map +1 -0
  43. package/dist/rules/beast.js +535 -0
  44. package/dist/rules/beast.js.map +1 -0
  45. package/dist/rules/game.d.ts +35 -0
  46. package/dist/rules/game.d.ts.map +1 -0
  47. package/dist/rules/game.js +462 -0
  48. package/dist/rules/game.js.map +1 -0
  49. package/dist/rules/gameSimulation.d.ts +158 -0
  50. package/dist/rules/gameSimulation.d.ts.map +1 -0
  51. package/dist/rules/gameSimulation.js +845 -0
  52. package/dist/rules/gameSimulation.js.map +1 -0
  53. package/dist/rules/health.d.ts +3 -0
  54. package/dist/rules/health.d.ts.map +1 -0
  55. package/dist/rules/health.js +7 -0
  56. package/dist/rules/health.js.map +1 -0
  57. package/dist/rules/loot.d.ts +100 -0
  58. package/dist/rules/loot.d.ts.map +1 -0
  59. package/dist/rules/loot.js +626 -0
  60. package/dist/rules/loot.js.map +1 -0
  61. package/dist/rules/market.d.ts +28 -0
  62. package/dist/rules/market.d.ts.map +1 -0
  63. package/dist/rules/market.js +83 -0
  64. package/dist/rules/market.js.map +1 -0
  65. package/dist/rules/processFutures.d.ts +79 -0
  66. package/dist/rules/processFutures.d.ts.map +1 -0
  67. package/dist/rules/processFutures.js +429 -0
  68. package/dist/rules/processFutures.js.map +1 -0
  69. package/dist/rules/tokenId.d.ts +31 -0
  70. package/dist/rules/tokenId.d.ts.map +1 -0
  71. package/dist/rules/tokenId.js +102 -0
  72. package/dist/rules/tokenId.js.map +1 -0
  73. package/dist/staging.d.ts +18 -0
  74. package/dist/staging.d.ts.map +1 -0
  75. package/dist/staging.js +27 -0
  76. package/dist/staging.js.map +1 -0
  77. package/dist/transcript.d.ts +64 -0
  78. package/dist/transcript.d.ts.map +1 -0
  79. package/dist/transcript.js +92 -0
  80. package/dist/transcript.js.map +1 -0
  81. package/dist/types.d.ts +141 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +2 -0
  84. package/dist/types.js.map +1 -0
  85. package/dist/view.d.ts +4 -0
  86. package/dist/view.d.ts.map +1 -0
  87. package/dist/view.js +18 -0
  88. package/dist/view.js.map +1 -0
  89. package/package.json +51 -0
@@ -0,0 +1,626 @@
1
+ import * as starknet from "@scure/starknet";
2
+ // Import icons
3
+ import { BEAST_SPECIAL_NAME_LEVEL_UNLOCK } from "../constants/beast.js";
4
+ import { TIER_PRICE } from "../constants/game.js";
5
+ import { ITEM_NAME_PREFIXES, ITEM_NAME_SUFFIXES, ITEM_SUFFIXES, ItemId, ItemIndex, ItemSlotLength, NUM_ITEMS, PREFIXES_UNLOCK_GREATNESS, SUFFIX_UNLOCK_GREATNESS, } from "../constants/loot.js";
6
+ import { calculateLevel } from "./game.js";
7
+ export const slotIcons = {
8
+ Weapon: "/images/types/weapon.svg",
9
+ Head: "/images/types/head.svg",
10
+ Chest: "/images/types/chest.svg",
11
+ Waist: "/images/types/waist.svg",
12
+ Hand: "/images/types/hand.svg",
13
+ Foot: "/images/types/foot.svg",
14
+ Ring: "/images/types/ring.svg",
15
+ Neck: "/images/types/neck.svg",
16
+ };
17
+ export const typeIcons = {
18
+ Cloth: "/images/types/cloth.svg",
19
+ Hide: "/images/types/hide.svg",
20
+ Metal: "/images/types/metal.svg",
21
+ Magic: "/images/types/magic.svg",
22
+ Bludgeon: "/images/types/bludgeon.svg",
23
+ Blade: "/images/types/blade.svg",
24
+ Ring: "/images/types/ring.svg",
25
+ Necklace: "/images/types/neck.svg",
26
+ };
27
+ // Create a mapping from ID to name
28
+ const ItemString = Object.entries(ItemId).reduce((acc, [name, id]) => {
29
+ acc[id] = name.replace(/([A-Z])/g, " $1").trim();
30
+ return acc;
31
+ }, {});
32
+ // Item types from Cairo contract
33
+ export var ItemType;
34
+ (function (ItemType) {
35
+ ItemType["Magic"] = "Magic";
36
+ ItemType["Bludgeon"] = "Bludgeon";
37
+ ItemType["Blade"] = "Blade";
38
+ ItemType["Cloth"] = "Cloth";
39
+ ItemType["Hide"] = "Hide";
40
+ ItemType["Metal"] = "Metal";
41
+ ItemType["Ring"] = "Ring";
42
+ ItemType["Necklace"] = "Necklace";
43
+ ItemType["None"] = "None";
44
+ })(ItemType || (ItemType = {}));
45
+ // Tier mapping from Cairo contract
46
+ export var Tier;
47
+ (function (Tier) {
48
+ Tier[Tier["T1"] = 1] = "T1";
49
+ Tier[Tier["T2"] = 2] = "T2";
50
+ Tier[Tier["T3"] = 3] = "T3";
51
+ Tier[Tier["T4"] = 4] = "T4";
52
+ Tier[Tier["T5"] = 5] = "T5";
53
+ Tier[Tier["None"] = 0] = "None";
54
+ })(Tier || (Tier = {}));
55
+ // Port of ItemUtils from loot.cairo
56
+ export const ItemUtils = {
57
+ isNecklace: (id) => id <= 3,
58
+ isRing: (id) => id >= 4 && id <= 8,
59
+ isWeapon: (id) => (id >= 9 && id <= 16) || (id >= 42 && id <= 46) || (id >= 72 && id <= 76),
60
+ isChest: (id) => (id >= 17 && id <= 21) || (id >= 47 && id <= 51) || (id >= 77 && id <= 81),
61
+ isHead: (id) => (id >= 22 && id <= 26) || (id >= 52 && id <= 56) || (id >= 82 && id <= 86),
62
+ isWaist: (id) => (id >= 27 && id <= 31) || (id >= 57 && id <= 61) || (id >= 87 && id <= 91),
63
+ isFoot: (id) => (id >= 32 && id <= 36) || (id >= 62 && id <= 66) || (id >= 92 && id <= 96),
64
+ isHand: (id) => (id >= 37 && id <= 41) || (id >= 67 && id <= 71) || (id >= 97 && id <= 101),
65
+ isMagicOrCloth: (id) => id >= 9 && id <= 41,
66
+ isBladeOrHide: (id) => id >= 42 && id <= 71,
67
+ isBludgeonOrMetal: (id) => id >= 72,
68
+ getItemType: (id) => {
69
+ if (ItemUtils.isNecklace(id))
70
+ return ItemType.Necklace;
71
+ if (ItemUtils.isRing(id))
72
+ return ItemType.Ring;
73
+ if (ItemUtils.isMagicOrCloth(id))
74
+ return ItemUtils.isWeapon(id) ? ItemType.Magic : ItemType.Cloth;
75
+ if (ItemUtils.isBladeOrHide(id))
76
+ return ItemUtils.isWeapon(id) ? ItemType.Blade : ItemType.Hide;
77
+ if (ItemUtils.isBludgeonOrMetal(id))
78
+ return ItemUtils.isWeapon(id) ? ItemType.Bludgeon : ItemType.Metal;
79
+ return ItemType.None;
80
+ },
81
+ getItemSlot: (id) => {
82
+ if (ItemUtils.isNecklace(id))
83
+ return "Neck";
84
+ if (ItemUtils.isRing(id))
85
+ return "Ring";
86
+ if (ItemUtils.isWeapon(id))
87
+ return "Weapon";
88
+ if (ItemUtils.isChest(id))
89
+ return "Chest";
90
+ if (ItemUtils.isHead(id))
91
+ return "Head";
92
+ if (ItemUtils.isWaist(id))
93
+ return "Waist";
94
+ if (ItemUtils.isFoot(id))
95
+ return "Foot";
96
+ if (ItemUtils.isHand(id))
97
+ return "Hand";
98
+ return "None";
99
+ },
100
+ getItemTier: (id) => {
101
+ if (id <= 0)
102
+ return Tier.None;
103
+ // Necklace items (1-3) are all T1
104
+ if (id <= 3)
105
+ return Tier.T1;
106
+ // silver ring (4) is T2
107
+ if (id === 4)
108
+ return Tier.T2;
109
+ // bronze ring (5) is T3
110
+ if (id === 5)
111
+ return Tier.T3;
112
+ // other rings are T1
113
+ if (id <= 8)
114
+ return Tier.T1;
115
+ // Magic/Cloth items (9-41)
116
+ if (id <= 41) {
117
+ if ([9, 13, 17, 22, 27, 32, 37].includes(id))
118
+ return Tier.T1;
119
+ if ([10, 14, 18, 23, 28, 33, 38].includes(id))
120
+ return Tier.T2;
121
+ if ([11, 15, 19, 24, 29, 34, 39].includes(id))
122
+ return Tier.T3;
123
+ if ([20, 25, 30, 35, 40].includes(id))
124
+ return Tier.T4;
125
+ return Tier.T5;
126
+ }
127
+ // Blade/Hide items (42-71)
128
+ if (id <= 71) {
129
+ if ([42, 47, 52, 57, 62, 67].includes(id))
130
+ return Tier.T1;
131
+ if ([43, 48, 53, 58, 63, 68].includes(id))
132
+ return Tier.T2;
133
+ if ([44, 49, 54, 59, 64, 69].includes(id))
134
+ return Tier.T3;
135
+ if ([45, 50, 55, 60, 65, 70].includes(id))
136
+ return Tier.T4;
137
+ return Tier.T5;
138
+ }
139
+ // Bludgeon/Metal items (72-101)
140
+ if ([72, 77, 82, 87, 92, 97].includes(id))
141
+ return Tier.T1;
142
+ if ([73, 78, 83, 88, 93, 98].includes(id))
143
+ return Tier.T2;
144
+ if ([74, 79, 84, 89, 94, 99].includes(id))
145
+ return Tier.T3;
146
+ if ([75, 80, 85, 90, 95, 100].includes(id))
147
+ return Tier.T4;
148
+ return Tier.T5;
149
+ },
150
+ getItemBasePrice: (tier) => {
151
+ switch (tier) {
152
+ case Tier.T1:
153
+ return 5 * TIER_PRICE;
154
+ case Tier.T2:
155
+ return 4 * TIER_PRICE;
156
+ case Tier.T3:
157
+ return 3 * TIER_PRICE;
158
+ case Tier.T4:
159
+ return 2 * TIER_PRICE;
160
+ case Tier.T5:
161
+ return TIER_PRICE;
162
+ default:
163
+ return 0;
164
+ }
165
+ },
166
+ getCharismaAdjustedItemPrice: (basePrice, charisma) => {
167
+ const CHARISMA_ITEM_DISCOUNT = 1; // From adventurer.cairo constants
168
+ const MINIMUM_ITEM_PRICE = 1; // From adventurer.cairo constants
169
+ const charismaDiscount = CHARISMA_ITEM_DISCOUNT * charisma;
170
+ if (charismaDiscount >= basePrice) {
171
+ return MINIMUM_ITEM_PRICE;
172
+ }
173
+ return basePrice - charismaDiscount;
174
+ },
175
+ getItemPrice: (tier, charisma) => {
176
+ const basePrice = ItemUtils.getItemBasePrice(tier);
177
+ return ItemUtils.getCharismaAdjustedItemPrice(basePrice, charisma);
178
+ },
179
+ getItemSpecialsSeed: (salt, adventurerId) => {
180
+ if (salt === 0)
181
+ return 0;
182
+ const hash = starknet.poseidonHashMany([BigInt(salt), BigInt(adventurerId)]);
183
+ return Number(BigInt(hash) % 0x10000n);
184
+ },
185
+ getSpecialsSeed: (itemId, entropy) => {
186
+ let itemEntropy = entropy + itemId;
187
+ if (itemEntropy > 65535) {
188
+ itemEntropy = entropy - itemId;
189
+ }
190
+ // Scope rnd between 0 and NUM_ITEMS-1
191
+ const rnd = itemEntropy % NUM_ITEMS;
192
+ // Get item name and index
193
+ const itemName = Object.entries(ItemId).find(([_, value]) => value === itemId)?.[0];
194
+ const itemIndex = itemName ? ItemIndex[itemName] || 0 : 0;
195
+ // Get slot length based on item slot
196
+ const slot = ItemUtils.getItemSlot(itemId);
197
+ let slotLength = 1;
198
+ switch (slot) {
199
+ case "Weapon":
200
+ slotLength = ItemSlotLength.SlotItemsLengthWeapon;
201
+ break;
202
+ case "Chest":
203
+ slotLength = ItemSlotLength.SlotItemsLengthChest;
204
+ break;
205
+ case "Head":
206
+ slotLength = ItemSlotLength.SlotItemsLengthHead;
207
+ break;
208
+ case "Waist":
209
+ slotLength = ItemSlotLength.SlotItemsLengthWaist;
210
+ break;
211
+ case "Foot":
212
+ slotLength = ItemSlotLength.SlotItemsLengthFoot;
213
+ break;
214
+ case "Hand":
215
+ slotLength = ItemSlotLength.SlotItemsLengthHand;
216
+ break;
217
+ case "Neck":
218
+ slotLength = ItemSlotLength.SlotItemsLengthNeck;
219
+ break;
220
+ case "Ring":
221
+ slotLength = ItemSlotLength.SlotItemsLengthRing;
222
+ break;
223
+ }
224
+ // Return the item specific entropy
225
+ return rnd * slotLength + itemIndex;
226
+ },
227
+ getSpecials: (id, greatness, seed) => {
228
+ const specialSeed = ItemUtils.getSpecialsSeed(id, seed);
229
+ const special1 = ItemUtils.getItemSuffix(specialSeed);
230
+ const special2 = ItemUtils.getItemPrefix1(specialSeed); // Prefix1
231
+ const special3 = ItemUtils.getItemPrefix2(specialSeed); // Prefix2
232
+ if (greatness < SUFFIX_UNLOCK_GREATNESS) {
233
+ return {
234
+ special1: null,
235
+ prefix: null,
236
+ suffix: null,
237
+ };
238
+ }
239
+ else if (greatness < PREFIXES_UNLOCK_GREATNESS) {
240
+ return {
241
+ special1: ITEM_SUFFIXES[special1],
242
+ prefix: null,
243
+ suffix: null,
244
+ };
245
+ }
246
+ else {
247
+ return {
248
+ special1: ITEM_SUFFIXES[special1],
249
+ prefix: ITEM_NAME_PREFIXES[special2],
250
+ suffix: ITEM_NAME_SUFFIXES[special3],
251
+ };
252
+ }
253
+ },
254
+ getItemSuffix: (seed) => {
255
+ return (seed % 16) + 1;
256
+ },
257
+ getItemPrefix1: (seed) => {
258
+ return (seed % 69) + 1;
259
+ },
260
+ getItemPrefix2: (seed) => {
261
+ return (seed % 18) + 1;
262
+ },
263
+ getItemName: (id) => {
264
+ return ItemString[id] || "Unknown Item";
265
+ },
266
+ formatItemName: (name) => {
267
+ return name.replace(/([A-Z])/g, " $1").trim();
268
+ },
269
+ getItemImage: (id) => {
270
+ const name = ItemUtils.getItemName(id);
271
+ try {
272
+ const fileName = name.replace(/ /g, "_").toLowerCase();
273
+ return `/images/loot/${fileName}.png`;
274
+ }
275
+ catch {
276
+ return "";
277
+ }
278
+ },
279
+ getMetadata: (id) => {
280
+ const name = ItemUtils.getItemName(id);
281
+ const formattedName = ItemUtils.formatItemName(name);
282
+ const imageUrl = ItemUtils.getItemImage(id);
283
+ return {
284
+ name: formattedName,
285
+ imageUrl,
286
+ };
287
+ },
288
+ getTierColor: (tier) => {
289
+ switch (tier) {
290
+ case Tier.T1:
291
+ return "#FFD700"; // Gold for T1 (Best)
292
+ case Tier.T2:
293
+ return "#9370DB"; // Purple for T2
294
+ case Tier.T3:
295
+ return "#4169E1"; // Royal Blue for T3
296
+ case Tier.T4:
297
+ return "#32CD32"; // Lime Green for T4
298
+ case Tier.T5:
299
+ return "#A9A9A9"; // Dark Gray for T5
300
+ default:
301
+ return "#808080"; // Default gray
302
+ }
303
+ },
304
+ isNameMatch: (itemId, itemLevel, itemSeed, beast) => {
305
+ if (itemLevel < PREFIXES_UNLOCK_GREATNESS || beast.level < BEAST_SPECIAL_NAME_LEVEL_UNLOCK) {
306
+ return false;
307
+ }
308
+ const specials = ItemUtils.getSpecials(itemId, itemLevel, itemSeed);
309
+ return specials.prefix === beast.specialPrefix || specials.suffix === beast.specialSuffix;
310
+ },
311
+ getStatBonus: (special1) => {
312
+ if (special1 === "of Power") {
313
+ return "+3 STR";
314
+ }
315
+ else if (special1 === "of Giant") {
316
+ return "+3 VIT";
317
+ }
318
+ else if (special1 === "of Titans") {
319
+ return "+2 STR +1 CHA";
320
+ }
321
+ else if (special1 === "of Skill") {
322
+ return "+3 DEX";
323
+ }
324
+ else if (special1 === "of Perfection") {
325
+ return "+1 STR +1 DEX +1 VIT";
326
+ }
327
+ else if (special1 === "of Brilliance") {
328
+ return "+3 INT";
329
+ }
330
+ else if (special1 === "of Enlightenment") {
331
+ return "+3 WIS";
332
+ }
333
+ else if (special1 === "of Protection") {
334
+ return "+2 VIT +1 DEX";
335
+ }
336
+ else if (special1 === "of Anger") {
337
+ return "+2 STR +1 DEX";
338
+ }
339
+ else if (special1 === "of Rage") {
340
+ return "+1 STR +1 CHA +1 WIS";
341
+ }
342
+ else if (special1 === "of Fury") {
343
+ return "+1 VIT +1 CHA +1 INT";
344
+ }
345
+ else if (special1 === "of Vitriol") {
346
+ return "+2 INT +1 WIS";
347
+ }
348
+ else if (special1 === "of the Fox") {
349
+ return "+2 DEX +1 CHA";
350
+ }
351
+ else if (special1 === "of Detection") {
352
+ return "+2 WIS +1 DEX";
353
+ }
354
+ else if (special1 === "of Reflection") {
355
+ return "+1 INT +2 WIS";
356
+ }
357
+ else if (special1 === "of the Twins") {
358
+ return "+3 CHA";
359
+ }
360
+ },
361
+ removeItemBoosts: (item, item_specials_salt, stats) => {
362
+ const level = calculateLevel(item.xp);
363
+ const specials = ItemUtils.getSpecials(item.id, level, item_specials_salt);
364
+ // Silver ring
365
+ if (item.id === 4) {
366
+ stats.luck = Math.max(2, stats.luck - level);
367
+ }
368
+ if (!specials.special1) {
369
+ return stats;
370
+ }
371
+ if (specials.special1 === "of Power") {
372
+ stats.strength -= 3;
373
+ }
374
+ else if (specials.special1 === "of Titans") {
375
+ stats.strength -= 2;
376
+ }
377
+ else if (specials.special1 === "of Skill") {
378
+ stats.dexterity -= 3;
379
+ }
380
+ else if (specials.special1 === "of Perfection") {
381
+ stats.strength -= 1;
382
+ stats.dexterity -= 1;
383
+ }
384
+ else if (specials.special1 === "of Brilliance") {
385
+ stats.intelligence -= 3;
386
+ }
387
+ else if (specials.special1 === "of Enlightenment") {
388
+ stats.wisdom -= 3;
389
+ }
390
+ else if (specials.special1 === "of Protection") {
391
+ stats.dexterity -= 1;
392
+ }
393
+ else if (specials.special1 === "of Anger") {
394
+ stats.strength -= 2;
395
+ stats.dexterity -= 1;
396
+ }
397
+ else if (specials.special1 === "of Rage") {
398
+ stats.strength -= 1;
399
+ stats.wisdom -= 1;
400
+ }
401
+ else if (specials.special1 === "of Fury") {
402
+ stats.intelligence -= 1;
403
+ }
404
+ else if (specials.special1 === "of Vitriol") {
405
+ stats.intelligence -= 2;
406
+ stats.wisdom -= 1;
407
+ }
408
+ else if (specials.special1 === "of the Fox") {
409
+ stats.dexterity -= 2;
410
+ }
411
+ else if (specials.special1 === "of Detection") {
412
+ stats.wisdom -= 2;
413
+ stats.dexterity -= 1;
414
+ }
415
+ else if (specials.special1 === "of Reflection") {
416
+ stats.intelligence -= 1;
417
+ stats.wisdom -= 2;
418
+ }
419
+ return stats;
420
+ },
421
+ addItemBoosts: (item, item_specials_salt, stats) => {
422
+ const level = calculateLevel(item.xp);
423
+ const specials = ItemUtils.getSpecials(item.id, level, item_specials_salt);
424
+ // Silver ring
425
+ if (item.id === 4) {
426
+ stats.luck = Math.min(100, stats.luck + level);
427
+ }
428
+ if (!specials.special1) {
429
+ return stats;
430
+ }
431
+ if (specials.special1 === "of Power") {
432
+ stats.strength += 3;
433
+ }
434
+ else if (specials.special1 === "of Titans") {
435
+ stats.strength += 2;
436
+ }
437
+ else if (specials.special1 === "of Skill") {
438
+ stats.dexterity += 3;
439
+ }
440
+ else if (specials.special1 === "of Perfection") {
441
+ stats.strength += 1;
442
+ stats.dexterity += 1;
443
+ }
444
+ else if (specials.special1 === "of Brilliance") {
445
+ stats.intelligence += 3;
446
+ }
447
+ else if (specials.special1 === "of Enlightenment") {
448
+ stats.wisdom += 3;
449
+ }
450
+ else if (specials.special1 === "of Protection") {
451
+ stats.dexterity += 1;
452
+ }
453
+ else if (specials.special1 === "of Anger") {
454
+ stats.strength += 2;
455
+ stats.dexterity += 1;
456
+ }
457
+ else if (specials.special1 === "of Rage") {
458
+ stats.strength += 1;
459
+ stats.wisdom += 1;
460
+ }
461
+ else if (specials.special1 === "of Fury") {
462
+ stats.intelligence += 1;
463
+ }
464
+ else if (specials.special1 === "of Vitriol") {
465
+ stats.intelligence += 2;
466
+ stats.wisdom += 1;
467
+ }
468
+ else if (specials.special1 === "of the Fox") {
469
+ stats.dexterity += 2;
470
+ }
471
+ else if (specials.special1 === "of Detection") {
472
+ stats.wisdom += 2;
473
+ stats.dexterity += 1;
474
+ }
475
+ else if (specials.special1 === "of Reflection") {
476
+ stats.intelligence += 1;
477
+ stats.wisdom += 2;
478
+ }
479
+ return stats;
480
+ },
481
+ fullItemBoost: (item, item_specials_salt, stats) => {
482
+ const level = calculateLevel(item.xp);
483
+ const specials = ItemUtils.getSpecials(item.id, level, item_specials_salt);
484
+ if (!specials.special1) {
485
+ return stats;
486
+ }
487
+ if (specials.special1 === "of Power") {
488
+ stats.strength += 3;
489
+ }
490
+ else if (specials.special1 === "of Giant") {
491
+ stats.vitality += 3;
492
+ }
493
+ else if (specials.special1 === "of Titans") {
494
+ stats.strength += 2;
495
+ stats.charisma += 1;
496
+ }
497
+ else if (specials.special1 === "of Skill") {
498
+ stats.dexterity += 3;
499
+ }
500
+ else if (specials.special1 === "of Perfection") {
501
+ stats.strength += 1;
502
+ stats.dexterity += 1;
503
+ stats.vitality += 1;
504
+ }
505
+ else if (specials.special1 === "of Brilliance") {
506
+ stats.intelligence += 3;
507
+ }
508
+ else if (specials.special1 === "of Enlightenment") {
509
+ stats.wisdom += 3;
510
+ }
511
+ else if (specials.special1 === "of Protection") {
512
+ stats.vitality += 2;
513
+ stats.dexterity += 1;
514
+ }
515
+ else if (specials.special1 === "of Anger") {
516
+ stats.strength += 2;
517
+ stats.dexterity += 1;
518
+ }
519
+ else if (specials.special1 === "of Rage") {
520
+ stats.strength += 1;
521
+ stats.charisma += 1;
522
+ stats.wisdom += 1;
523
+ }
524
+ else if (specials.special1 === "of Fury") {
525
+ stats.vitality += 1;
526
+ stats.charisma += 1;
527
+ stats.intelligence += 1;
528
+ }
529
+ else if (specials.special1 === "of Vitriol") {
530
+ stats.intelligence += 2;
531
+ stats.wisdom += 1;
532
+ }
533
+ else if (specials.special1 === "of the Fox") {
534
+ stats.dexterity += 2;
535
+ stats.charisma += 1;
536
+ }
537
+ else if (specials.special1 === "of Detection") {
538
+ stats.wisdom += 2;
539
+ stats.dexterity += 1;
540
+ }
541
+ else if (specials.special1 === "of Reflection") {
542
+ stats.intelligence += 1;
543
+ stats.wisdom += 2;
544
+ }
545
+ else if (specials.special1 === "of the Twins") {
546
+ stats.charisma += 3;
547
+ }
548
+ return stats;
549
+ },
550
+ getEquippedItemStats: (adventurer, bag) => {
551
+ let stats = {
552
+ dexterity: 0,
553
+ strength: 0,
554
+ vitality: 0,
555
+ intelligence: 0,
556
+ wisdom: 0,
557
+ charisma: 0,
558
+ luck: 0,
559
+ };
560
+ let bagStats = {
561
+ dexterity: 0,
562
+ strength: 0,
563
+ vitality: 0,
564
+ intelligence: 0,
565
+ wisdom: 0,
566
+ charisma: 0,
567
+ luck: 0,
568
+ };
569
+ for (const item of bag) {
570
+ bagStats = ItemUtils.fullItemBoost(item, adventurer.item_specials_salt, bagStats);
571
+ }
572
+ stats.vitality += bagStats.vitality;
573
+ stats.charisma += bagStats.charisma;
574
+ Object.values(adventurer.equipment).forEach((item) => {
575
+ if (item.id !== 0) {
576
+ stats = ItemUtils.fullItemBoost(item, adventurer.item_specials_salt, stats);
577
+ }
578
+ });
579
+ return stats;
580
+ },
581
+ getJewelryEffect: (id) => {
582
+ switch (id) {
583
+ // Necklaces
584
+ case 1:
585
+ return "Pendant increases hide armor defense (3% per level)";
586
+ case 2:
587
+ return "Necklace increases metal armor defense (3% per level)";
588
+ case 3:
589
+ return "Amulet increases cloth armor defense (3% per level)";
590
+ // Rings
591
+ case 4:
592
+ return "Crit chance gained from Silver Ring is doubled when equipped";
593
+ case 6:
594
+ return "Platinum Ring increases name match bonus damage (3% per level)";
595
+ case 7:
596
+ return "Titanium Ring increases critical hit bonus damage (3% per level)";
597
+ case 8:
598
+ return "Gold Ring increases gold earned from defeating beasts (3% extra per level)";
599
+ default:
600
+ return "No special effect";
601
+ }
602
+ },
603
+ getCurrentJewelryEffect: (id, level) => {
604
+ switch (id) {
605
+ // Necklaces
606
+ case 1:
607
+ return `Hide armor defense increased by ${level * 3}%`;
608
+ case 2:
609
+ return `Metal armor defense increased by ${level * 3}%`;
610
+ case 3:
611
+ return `Cloth armor defense increased by ${level * 3}%`;
612
+ // Rings
613
+ case 4:
614
+ return `Increases critical hit chance by ${level}%`;
615
+ case 6:
616
+ return `Name match bonus damage increased by ${level * 3}%`;
617
+ case 7:
618
+ return `Critical hit bonus damage increased by ${level * 3}%`;
619
+ case 8:
620
+ return `Gold earned from defeating beasts increased by ${level * 3}%`;
621
+ default:
622
+ return "No special effect";
623
+ }
624
+ },
625
+ };
626
+ //# sourceMappingURL=loot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loot.js","sourceRoot":"","sources":["../../src/rules/loot.ts"],"names":[],"mappings":"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"}