enefel 2.9.1 → 2.11.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 (77) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/2025/newSkills.ts +769 -0
  3. package/2025/raceMigration.ts +66 -0
  4. package/2025/rawTeamsData.ts +1726 -0
  5. package/2025/skillMigration.ts +155 -0
  6. package/avatarsSeason.ts +61 -0
  7. package/career.ts +64 -8
  8. package/career2025.ts +2752 -0
  9. package/dice.ts +40 -8
  10. package/dist/2025/newSkills.d.ts +10 -0
  11. package/dist/2025/newSkills.js +663 -0
  12. package/dist/2025/raceMigration.d.ts +10 -0
  13. package/dist/2025/raceMigration.js +53 -0
  14. package/dist/2025/rawTeamsData.d.ts +12 -0
  15. package/dist/2025/rawTeamsData.js +1699 -0
  16. package/dist/2025/skillMigration.d.ts +31 -0
  17. package/dist/2025/skillMigration.js +95 -0
  18. package/dist/avatarsSeason.d.ts +22 -0
  19. package/dist/avatarsSeason.js +54 -0
  20. package/dist/career.d.ts +13 -4
  21. package/dist/career.js +36 -7
  22. package/dist/career2025.d.ts +192 -0
  23. package/dist/career2025.js +2611 -0
  24. package/dist/dice.d.ts +10 -2
  25. package/dist/dice.js +31 -8
  26. package/dist/index.d.ts +17 -2
  27. package/dist/index.js +44 -5
  28. package/dist/move.d.ts +6 -2
  29. package/dist/move.js +35 -0
  30. package/dist/package-lock.json +913 -7
  31. package/dist/package.json +6 -2
  32. package/dist/pitch.d.ts +10 -1
  33. package/dist/pitch.js +16 -0
  34. package/dist/player.d.ts +8 -4
  35. package/dist/player.js +104 -20
  36. package/dist/position.d.ts +4 -0
  37. package/dist/position.js +17 -1
  38. package/dist/race.d.ts +23 -12
  39. package/dist/race.js +210 -2
  40. package/dist/skill.d.ts +26 -3
  41. package/dist/skill.js +199 -81
  42. package/dist/skills/hitAndRun.d.ts +10 -0
  43. package/dist/skills/hitAndRun.js +12 -0
  44. package/dist/skills/safePairOfHands.d.ts +28 -0
  45. package/dist/skills/safePairOfHands.js +18 -0
  46. package/dist/skills/sidestep.d.ts +21 -0
  47. package/dist/skills/sidestep.js +20 -0
  48. package/dist/status.d.ts +4 -1
  49. package/dist/status.js +14 -4
  50. package/dist/store.d.ts +3 -0
  51. package/dist/store.js +3 -0
  52. package/dist/teams/career_v2025.d.ts +246 -0
  53. package/dist/teams/career_v2025.js +3512 -0
  54. package/dist/teams/convert-csv-to-career.d.ts +1 -0
  55. package/dist/teams/convert-csv-to-career.js +1085 -0
  56. package/dist/types/models.d.ts +4 -0
  57. package/index.ts +57 -4
  58. package/jest.config.js +3 -0
  59. package/move.ts +50 -2
  60. package/npm-login.sh +0 -0
  61. package/package.json +6 -2
  62. package/pitch.ts +22 -0
  63. package/player.ts +105 -22
  64. package/position.ts +16 -0
  65. package/race.ts +227 -13
  66. package/skill.ts +217 -83
  67. package/skills/hitAndRun.ts +14 -0
  68. package/skills/safePairOfHands.ts +33 -0
  69. package/skills/sidestep.ts +25 -0
  70. package/status.ts +15 -3
  71. package/store.ts +3 -0
  72. package/teams/README.md +53 -0
  73. package/teams/clean-stats.js +54 -0
  74. package/teams/convert-csv-to-career.ts +1209 -0
  75. package/teams/players_clean.csv +107 -0
  76. package/teams/players_next.csv +21 -0
  77. package/types/models.ts +4 -0
package/dist/race.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isPrivateRace = exports.hasUnlockRace = exports.hasUnlockCareer = exports.GROUP_NAME = exports.getRaceSpecialSkills = exports.getRaceGroup = exports.getRaceFromPlayer = exports.getRaceFromCareer = exports.getRaceCompatibility = exports.getPlayersByState = exports.getPlayerGroup = exports.getPlayerCompatibility = exports.getPlayerAvatarPath = exports.getPlayerAvatarDefault = exports.getPlayerAvatar = exports.getCareersByRace = exports.getCareerKeyFromPlayer = exports.getCareerFromPlayer = exports.getCareerFromKey = exports.getCareerFromIcon = exports.getAvatarTypeFromPlayer = exports.GAIN_CAREER_POINT_FRIENDLY = exports.GAIN_CAREER_POINT = exports.COMPATIBILITY = exports.ANIMOSITY_NUMBER = void 0;
6
+ exports.isPrivateRace = exports.hasUnlockRace = exports.hasUnlockCareer = exports.GROUP_NAME = exports.getRaceSpecialSkills = exports.getRaceGroup = exports.getRaceFromPlayer = exports.getRaceFromCareer = exports.getRaceCompatibility = exports.getPlayersByState = exports.getPlayerGroup = exports.getPlayerCompatibility = exports.getPlayerAvatarPath = exports.getPlayerAvatarDefault = exports.getPlayerAvatar = exports.getCareersByRace = exports.getCareerKeyFromPlayer = exports.getCareerFromPlayer = exports.getCareerFromKey = exports.getCareerFromIcon = exports.getCareerId2025 = exports.getAvatarTypeFromPlayer = exports.getAvatarRarityFromFile = exports.getAvatarBasePathFromFile = exports.getAvailableCareersByRace = exports.GAIN_CAREER_POINT_FRIENDLY = exports.GAIN_CAREER_POINT = exports.COMPATIBILITY = exports.ANIMOSITY_NUMBER = void 0;
7
7
  exports.getCareerRanges = getCareerRanges;
8
8
  exports.getPlayersAvailableForPromo = getPlayersAvailableForPromo;
9
9
  exports.getPriceCareer = getPriceCareer;
@@ -15,6 +15,7 @@ exports.isPlayerNeutralGroup = isPlayerNeutralGroup;
15
15
  const seedrandom_1 = __importDefault(require("seedrandom"));
16
16
  const avatars_1 = require("./avatars");
17
17
  const avatarsDefault_1 = require("./avatarsDefault");
18
+ const avatarsSeason_1 = require("./avatarsSeason");
18
19
  const badge_1 = require("./badge");
19
20
  const career_1 = require("./career");
20
21
  const random_1 = require("./random");
@@ -115,6 +116,139 @@ const getCareerKeyFromPlayer = (player) => {
115
116
  return player.race_id;
116
117
  };
117
118
  exports.getCareerKeyFromPlayer = getCareerKeyFromPlayer;
119
+ /**
120
+ * Maps legacy (pre-2025) career IDs to their 2025 equivalents.
121
+ * Derived by inverting the ICON_ADAPTER from convert-csv-to-career.ts:
122
+ * old icon name (strip "1") → new 2025 career ID
123
+ */
124
+ const LEGACY_TO_2025_CAREER_ID = {
125
+ // Amazon
126
+ "amazon-linewomen": "amazon-linewoman-2025",
127
+ "amazon-blocker": "amazon-blocker-2025",
128
+ "amazon-blitzer": "amazon-blitzer-2025",
129
+ "amazon-catcher": "amazon-catcher-2025",
130
+ "amazon-thrower": "amazon-thrower-2025",
131
+ // Chaos Chosen
132
+ "chaos-beastman": "chaos-chosen-beastman-2025",
133
+ "chaos-warrior": "chaos-chosen-chosen-2025",
134
+ "chaos-minotaur": "chaos-chosen-minotaur-2025",
135
+ // Chaos Dwarf
136
+ "chaos-dwarf-blocker": "chaos-dwarf-blocker-2025",
137
+ "chaos-dwarf-bull-centaur": "chaos-dwarf-bull-centaur-2025",
138
+ "chaos-dwarf-hobgobelin": "chaos-dwarf-hobgoblin-2025",
139
+ // Dark Elf
140
+ "dark-elfe-blitzer": "dark-elf-blitzer-2025",
141
+ "dark-elfe-lineman": "dark-elf-lineman-2025",
142
+ "dark-elfe-runner": "dark-elf-runner-2025",
143
+ "dark-elfe-witch": "dark-elf-witch-elf-2025",
144
+ // Dwarf
145
+ "dwarf": "dwarf-lineman-2025",
146
+ "dwarf-blocker": "dwarf-lineman-2025",
147
+ "dwarf-blitzer": "dwarf-blitzer-2025",
148
+ "dwarf-deathroller": "dwarf-deathroller-2025",
149
+ "dwarf-runner": "dwarf-runner-2025",
150
+ "dwarf-troll-slayer": "dwarf-troll-slayer-2025",
151
+ // Elven Union
152
+ "elven-union-blitzer": "elven-union-blitzer-2025",
153
+ "elven-union-catcher": "elven-union-catcher-2025",
154
+ "elven-union-lineman": "elven-union-lineman-2025",
155
+ "elven-union-thrower": "elven-union-thrower-2025",
156
+ // Goblin
157
+ "gobelin-lineman": "goblin-lineman-2025",
158
+ "gobelin-looney": "goblin-loony-2025",
159
+ "gobelin-pogoer": "goblin-pogoer-2025",
160
+ "gobelin-troll": "goblin-troll-2025",
161
+ // Halfling
162
+ "halfling-lineman": "halfling-lineman-2025",
163
+ "halfling-hefty": "halfling-hefty-2025",
164
+ "halfling-catcher": "halfling-catcher-2025",
165
+ "halfling-treeman": "halfling-treeman-2025",
166
+ // Human
167
+ "human": "human-lineman-2025",
168
+ "human-lineman": "human-lineman-2025",
169
+ "human-blitzer": "human-blitzer-2025",
170
+ "human-catcher": "human-catcher-2025",
171
+ "human-ogre": "human-ogre-2025",
172
+ "human-thrower": "human-thrower-2025",
173
+ // Imperial Nobility
174
+ "imperial-lineman": "imperial-nobility-retainer-2025",
175
+ "imperial-blitzer": "imperial-nobility-blitzer-2025",
176
+ "imperial-bodyguard": "imperial-nobility-bodyguard-2025",
177
+ "imperial-ogre": "imperial-nobility-ogre-2025",
178
+ "imperial-thrower": "imperial-nobility-thrower-2025",
179
+ // Khorne
180
+ "khorne-lineman": "khorne-marauder-2025",
181
+ "khorne-khorngor": "khorne-khorngor-2025",
182
+ "khorne-bloodseeker": "khorne-bloodseeker-2025",
183
+ "khorne-bloodspawn": "khorne-bloodspawn-2025",
184
+ // Lizardmen
185
+ "lizardmen-chameleon": "lizardmen-chameleon-2025",
186
+ "lizardmen-kroxigor": "lizardmen-kroxigor-2025",
187
+ "lizardmen-saurus": "lizardmen-saurus-2025",
188
+ "lizardmen-skink": "lizardmen-skink-2025",
189
+ // Necromantic
190
+ "necromantic-zombie": "necromantic-horror-zombie-2025",
191
+ "necromantic-ghoul": "necromantic-horror-ghoul-2025",
192
+ "necromantic-wraith": "necromantic-horror-wraith-2025",
193
+ "necromantic-werewolf": "necromantic-horror-werewolf-2025",
194
+ "necromantic-golem": "necromantic-horror-flesh-golem-2025",
195
+ // Norse
196
+ "norse-lineman": "norse-raider-2025",
197
+ "norse-berserker": "norse-berserker-2025",
198
+ "norse-catcher": "norse-catcher-2025",
199
+ "norse-thrower": "norse-thrower-2025",
200
+ "norse-ulfwereners": "norse-ulfwerner-2025",
201
+ "norse-yhetee": "norse-yhetee-2025",
202
+ // Nurgle
203
+ "nurgle-rotter": "nurgle-rotter-2025",
204
+ "nurgle-pestigor": "nurgle-pestigor-2025",
205
+ "nurgle-bloater": "nurgle-bloater-2025",
206
+ "nurgle-rotspawn": "nurgle-rotspawn-2025",
207
+ // Orc
208
+ "orc": "orc-lineman-2025",
209
+ "orc-lineman": "orc-lineman-2025",
210
+ "orc-black-orc": "orc-big-un-2025",
211
+ "orc-blitzer": "orc-blitzer-2025",
212
+ "orc-thrower": "orc-thrower-2025",
213
+ "orc-troll": "orc-troll-2025",
214
+ // Skaven (anciens "rat")
215
+ "rat": "skaven-clanrat-2025",
216
+ "rat-lineman": "skaven-clanrat-2025",
217
+ "rat-runner": "skaven-gutter-2025",
218
+ "rat-blitzer": "skaven-blitzer-2025",
219
+ "rat-thrower": "skaven-thrower-2025",
220
+ "rat-ogre": "skaven-rat-ogre-2025",
221
+ // Shambling Undead (anciens "undead")
222
+ "undead-skeleton": "shambling-undead-skeleton-2025",
223
+ "undead-zombie": "shambling-undead-zombie-2025",
224
+ "undead-ghoul": "shambling-undead-ghoul-2025",
225
+ "undead-wight": "shambling-undead-wight-2025",
226
+ "undead-mummies": "shambling-undead-mummy-2025",
227
+ // Snotling
228
+ "snotling-lineman": "snotling-lineman-2025",
229
+ "snotling-runner": "snotling-runna-2025",
230
+ "snotling-wagon": "snotling-pump-wagon-2025",
231
+ "snotling-troll": "snotling-troll-2025",
232
+ // Vampire
233
+ "vampire-thrall": "vampire-thrall-2025",
234
+ "vampire-vampire": "vampire-blitzer-2025",
235
+ // Wood Elf (anciens "silvan")
236
+ "silvan": "wood-elf-lineman-2025",
237
+ "silvan-lineman": "wood-elf-lineman-2025",
238
+ "silvan-thrower": "wood-elf-thrower-2025",
239
+ "silvan-catcher": "wood-elf-catcher-2025",
240
+ "silvan-wardancer": "wood-elf-wardancer-2025",
241
+ };
242
+ /**
243
+ * Returns the 2025 career ID for a given career ID (legacy or already 2025).
244
+ * Returns undefined for careers without a 2025 equivalent (e.g. Slann).
245
+ */
246
+ const getCareerId2025 = (careerId) => {
247
+ if (careerId.endsWith("-2025"))
248
+ return careerId;
249
+ return LEGACY_TO_2025_CAREER_ID[careerId];
250
+ };
251
+ exports.getCareerId2025 = getCareerId2025;
118
252
  const getCareerFromPlayer = (player) => {
119
253
  const careerKey = getCareerKeyFromPlayer(player);
120
254
  return getCareerFromKey(careerKey);
@@ -160,11 +294,26 @@ const getPlayerAvatar = (player) => {
160
294
  if (!av) {
161
295
  return null;
162
296
  }
297
+ // Les avatars saisonniers (format "s17/1.png" ou trouvés dans la liste) gardent leur extension
298
+ // Normalise .jpeg → .png car les fichiers sont PNG (anciens enregistrements DB peuvent avoir .jpeg)
299
+ if (av.includes("/") || (0, avatarsSeason_1.findSeasonAvatar)(av)) {
300
+ return av.replace(".jpeg", ".png");
301
+ }
163
302
  return av.replace(".png", ".jpeg");
164
303
  };
165
304
  exports.getPlayerAvatar = getPlayerAvatar;
166
305
  const getPlayerAvatarPath = (player) => {
167
306
  if (player.avatar) {
307
+ // Nouveau format "s17/1.png"
308
+ if (player.avatar.includes("/")) {
309
+ const slashIdx = player.avatar.indexOf("/");
310
+ const season = parseInt(player.avatar.slice(1, slashIdx), 10);
311
+ return (0, avatarsSeason_1.getSeasonAvatarPath)(season);
312
+ }
313
+ const seasonAvatar = (0, avatarsSeason_1.findSeasonAvatar)(player.avatar);
314
+ if (seasonAvatar) {
315
+ return (0, avatarsSeason_1.getSeasonAvatarPath)(seasonAvatar.season);
316
+ }
168
317
  return "tile/shop/avatar";
169
318
  }
170
319
  else if (player.avatarDefault) {
@@ -201,6 +350,43 @@ const getAvatarTypeFromPlayer = (player, avatarFile) => {
201
350
  return null;
202
351
  };
203
352
  exports.getAvatarTypeFromPlayer = getAvatarTypeFromPlayer;
353
+ /** Returns the correct base path for an avatar file based on which list it belongs to,
354
+ * independent of the player's currently active avatar. */
355
+ const getAvatarBasePathFromFile = (player, avatarFile) => {
356
+ const career = getCareerFromPlayer(player);
357
+ if (!avatarFile)
358
+ return null;
359
+ for (const avatarType of career.avatars) {
360
+ const avatars = avatars_1.AVATAR_LIST[avatarType];
361
+ if (avatars?.find((al) => al.file === avatarFile)) {
362
+ return "tile/shop/avatar";
363
+ }
364
+ const avatarsDefault = avatarsDefault_1.AVATAR_DEFAULT_LIST[avatarType];
365
+ if (avatarsDefault?.find((al) => al.file === avatarFile)) {
366
+ return "tile/shop/avatar-default";
367
+ }
368
+ }
369
+ return null;
370
+ };
371
+ exports.getAvatarBasePathFromFile = getAvatarBasePathFromFile;
372
+ /** Returns the rarity string of a standard avatar file for the given player's career. */
373
+ const getAvatarRarityFromFile = (player, avatarFile) => {
374
+ const career = getCareerFromPlayer(player);
375
+ if (!avatarFile)
376
+ return undefined;
377
+ for (const avatarType of career.avatars) {
378
+ const avatars = avatars_1.AVATAR_LIST[avatarType];
379
+ const found = avatars?.find((al) => al.file === avatarFile);
380
+ if (found)
381
+ return found.rarity;
382
+ const avatarsDefault = avatarsDefault_1.AVATAR_DEFAULT_LIST[avatarType];
383
+ const foundDefault = avatarsDefault?.find((al) => al.file === avatarFile);
384
+ if (foundDefault)
385
+ return foundDefault.rarity;
386
+ }
387
+ return undefined;
388
+ };
389
+ exports.getAvatarRarityFromFile = getAvatarRarityFromFile;
204
390
  const getRaceFromPlayer = (player) => {
205
391
  return getRaceFromCareer(getCareerKeyFromPlayer(player));
206
392
  };
@@ -220,6 +406,21 @@ const getCareersByRace = () => {
220
406
  return carrers;
221
407
  };
222
408
  exports.getCareersByRace = getCareersByRace;
409
+ const getAvailableCareersByRace = () => {
410
+ const carrers = {};
411
+ for (const [name, values] of Object.entries((0, career_1.getAvailableCareers)())) {
412
+ const badge = values.badge;
413
+ if (!carrers[badge]) {
414
+ carrers[badge] = [];
415
+ }
416
+ if (!carrers[badge][values.range]) {
417
+ carrers[badge][values.range] = {};
418
+ }
419
+ carrers[badge][values.range][name] = values;
420
+ }
421
+ return carrers;
422
+ };
423
+ exports.getAvailableCareersByRace = getAvailableCareersByRace;
223
424
  const GAIN_CAREER_POINT = 2;
224
425
  exports.GAIN_CAREER_POINT = GAIN_CAREER_POINT;
225
426
  const GAIN_CAREER_POINT_FRIENDLY = 2;
@@ -254,7 +455,11 @@ const COMPATIBILITY = {
254
455
  };
255
456
  exports.COMPATIBILITY = COMPATIBILITY;
256
457
  const getPlayerGroup = (player) => {
257
- return getRaceGroup(getRaceFromPlayer(player));
458
+ const race = getRaceFromPlayer(player);
459
+ if (!race) {
460
+ return undefined;
461
+ }
462
+ return getRaceGroup(race);
258
463
  };
259
464
  exports.getPlayerGroup = getPlayerGroup;
260
465
  const getRaceGroup = (race) => {
@@ -280,6 +485,9 @@ exports.getRaceCompatibility = getRaceCompatibility;
280
485
  const getPlayerCompatibility = (player1, player2) => {
281
486
  const race1 = getRaceFromPlayer(player1);
282
487
  const race2 = getRaceFromPlayer(player2);
488
+ if (!race1 || !race2) {
489
+ return;
490
+ }
283
491
  getRaceCompatibility(race1, race2);
284
492
  };
285
493
  exports.getPlayerCompatibility = getPlayerCompatibility;
package/dist/skill.d.ts CHANGED
@@ -13,11 +13,14 @@ declare enum SKILL_NAMES {
13
13
  ALWAYS_HUNGRY = "always-hungry",
14
14
  ANIMAL_SAVAGERY = "animal-salvagery",
15
15
  ANIMOSITY = "animosity",
16
+ ARM_BAR = "arm-bar",
16
17
  BIG_GUY = "big-guy",
17
18
  BIG_HAND = "big-hand",
18
19
  BLOCK = "block",
20
+ BLOODLUST = "bloodlust",
19
21
  BONE_HEAD = "bone-head",
20
22
  BRAWLER = "brawler",
23
+ BREATHE_FIRE = "breathe-fire",
21
24
  BREAK_TACKLE = "break-tackle",
22
25
  CANNONEER = "cannoneer",
23
26
  CATCH = "catch",
@@ -33,12 +36,15 @@ declare enum SKILL_NAMES {
33
36
  DODGE = "dodge",
34
37
  DRUNKARD = "drunkard",
35
38
  DUMP_OFF = "dump-off",
39
+ EYE_GOUGE = "eye-gouge",
36
40
  EXTRA_ARMS = "extra-arms",
37
41
  FEND = "fend",
38
42
  FOUL_APPEARANCE = "foul-appearance",
39
43
  FRENZY = "frenzy",
40
44
  FUMBLEROOSKIE = "fumblerooskie",
45
+ HAIL_MARY_PASS = "hail-mary-pass",
41
46
  GUARD = "guard",
47
+ HIT_AND_RUN = "hit-and-run",
42
48
  HORNS = "horns",
43
49
  HYPNOTIC_GAZE = "hypnotic-gaze",
44
50
  IRON_HARD_SKIN = "iron-hard-skin",
@@ -48,54 +54,70 @@ declare enum SKILL_NAMES {
48
54
  LONER = "loner",
49
55
  MIGHTY_BLOW = "mighty-blow",
50
56
  MONSTROUS_MOUTH = "monstrous-mouth",
57
+ MY_BALL = "my-ball",
51
58
  NERVES_OF_STEEL = "nerves-of-steel",
52
59
  NO_HANDS = "no-hand",
53
60
  ON_THE_BALL = "on-the-ball",
54
61
  PASS = "pass",
55
62
  PILE_DRIVER = "pile-driver",
63
+ PICK_ME_UP = "pick-me-up",
56
64
  PLAGUE_RIDDEN = "plague-ridden",
65
+ PUNT = "punt",
66
+ PRO = "pro",
67
+ PUT_THE_BOOT_IN = "put-the-boot-in",
57
68
  POGO_STICK = "pogo-stick",
58
69
  PREHENSILE_TAIL = "prehensile-tail",
70
+ QUICK_FOUL = "quick-foul",
59
71
  PROJECTILE_VOMIT = "projectile-vomit",
60
72
  REALLY_STUPID = "really-stupid",
61
73
  REGENERATION = "regeneration",
62
74
  RIGHT_STUFF = "right-stuff",
63
- RUNNING_PASS = "running-pass",
75
+ GIVE_AND_GO = "running-pass",// Keep "running-pass" for DB compatibility
76
+ SAFE_PAIR_OF_HANDS = "safe-pair-of-hands",
64
77
  SAFE_PASS = "safe-pass",
65
78
  SECRET_WEAPON = "secret-weapon",
66
79
  SHADOWING = "shadowing",
80
+ STAB = "stab",
81
+ SIDESTEP = "sidestep",
67
82
  SNEAKY_GIT = "sneaky-git",
68
83
  SPECIALIST = "specialist",
69
84
  SPRINT = "sprint",
70
85
  STAND_FIRM = "stand-firm",
86
+ STEADY_FOOTING = "steady-footing",
71
87
  STAR = "star",
72
88
  STRIP_BALL = "strip-ball",
73
89
  STRONG_ARM = "strong-arm",
74
90
  STUNTY = "stunty",
91
+ SWOOP = "swoop",
75
92
  SURE_FEET = "sure-feet",
76
93
  SURE_HANDS = "sure-hands",
77
94
  TACKLE = "tackle",
95
+ TAUNT = "taunt",
78
96
  TAKE_ROOT = "take-root",
79
97
  TENTACLES = "tentacles",
80
98
  THICK_SKULL = "thick-skull",
81
99
  THROW_TEAM_MATE = "throw-team-mate",
100
+ TIMMM_BER = "timmm-ber",
82
101
  TITCHY = "titchy",
83
102
  TWO_HEADS = "two-heads",
84
103
  UNCHANNELLED_FURY = "unchannelled-fury",
104
+ UNSTEADY = "unsteady",
85
105
  VERY_LONG_LEGS = "very-long-legs",
86
106
  WRESTLE = "wrestle",
87
107
  DIVING_CATCH = "diving-catch"
88
108
  }
89
109
  declare enum SKILL_TYPE {
90
110
  AGILITY = "A",
91
- EXTRAORDINARY = "E",
111
+ EXTRAORDINARY = "E",// TRAIT
92
112
  GENERAL = "G",
93
113
  MUTATION = "M",
94
114
  PASSING = "P",
95
115
  STRENGTH = "S",
116
+ DEVIOUS = "D",
96
117
  SPECIAL = "SP"
97
118
  }
98
119
  declare const SKILLS: Record<SKILL_NAMES, SKILL_TYPE>;
120
+ declare const SKILL_IS_2025: Record<SKILL_NAMES, boolean>;
99
121
  declare function useSkill(player: PlayerWithSkill, skillId: SKILL_NAMES, date?: Date | -1, info?: string | null): false | undefined;
100
122
  declare function getSkill(player: PlayerWithSkill, skillId: SKILL_NAMES, info?: string | null): PlayerSkill | false;
101
123
  declare function hasUsedSkill(player: PlayerWithSkill, skill: SKILL_NAMES): boolean;
@@ -107,6 +129,7 @@ declare const isSelectPlayersSkills: (skill: SKILL_NAMES) => boolean;
107
129
  declare const hasSkillForPlayer: (playerWithSkill: PlayerWithSkill, playerTarget: Player, skillId: SKILL_NAMES) => boolean;
108
130
  declare function getStarLimit(teamPlayers: PlayerWithSkill[]): number;
109
131
  declare function getSpecialistLimit(teamPlayers: PlayerWithSkill[]): number;
132
+ declare const SKILL_MIGRATION_2025: Record<SKILL_NAMES, boolean>;
110
133
  declare function getSkillLimitSizeTeam(player: PlayerWithSkill, teamPlayers: PlayerWithSkill[]): SKILL_NAMES.BIG_GUY | SKILL_NAMES.SPECIALIST | SKILL_NAMES.STAR | null;
111
134
  declare function getSkillDisplayedWithCarrer(): SKILL_NAMES[];
112
135
  declare function getNoTurnoverSkill(): SKILL_NAMES[];
@@ -148,4 +171,4 @@ declare const helpSkillsToDisplay: {
148
171
  };
149
172
  };
150
173
  declare const hasToAgilityJumpUp: (player: PlayerWithSkill) => boolean;
151
- export { BIG_GUY_LIMIT, getDisturbingPresenceMalus, getNoTurnoverSkill, getPlayersWithSkill, getSkill, getSkillDisplayedWithCarrer, getSkillLimitSizeTeam, getSpecialistLimit, getStarLimit, hasSkill, hasSkillDisplayableInfo, hasSkillForPlayer, hasToAgilityJumpUp, hasUsedSkill, helpSkillsToDisplay, isActivableSkills, isNoTurnoverSkill, isSelectPlayersSkills, isSpecialSkill, SKILL_DURATION, SKILL_INFO_ACTIVE, SKILL_INFO_INACTIVE, SKILL_NAMES, SKILL_TYPE, SKILLS, useSkill, };
174
+ export { BIG_GUY_LIMIT, getDisturbingPresenceMalus, getNoTurnoverSkill, getPlayersWithSkill, getSkill, getSkillDisplayedWithCarrer, getSkillLimitSizeTeam, getSpecialistLimit, getStarLimit, hasSkill, hasSkillDisplayableInfo, hasSkillForPlayer, hasToAgilityJumpUp, hasUsedSkill, helpSkillsToDisplay, isActivableSkills, isNoTurnoverSkill, isSelectPlayersSkills, isSpecialSkill, SKILL_DURATION, SKILL_INFO_ACTIVE, SKILL_INFO_INACTIVE, SKILL_IS_2025, SKILL_MIGRATION_2025, SKILL_NAMES, SKILL_TYPE, SKILLS, useSkill, };