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/skill.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SKILLS = exports.SKILL_TYPE = exports.SKILL_NAMES = exports.SKILL_INFO_INACTIVE = exports.SKILL_INFO_ACTIVE = exports.SKILL_DURATION = exports.isSpecialSkill = exports.isSelectPlayersSkills = exports.isActivableSkills = exports.helpSkillsToDisplay = exports.hasToAgilityJumpUp = exports.hasSkillForPlayer = exports.hasSkillDisplayableInfo = exports.getPlayersWithSkill = exports.BIG_GUY_LIMIT = void 0;
3
+ exports.SKILLS = exports.SKILL_TYPE = exports.SKILL_NAMES = exports.SKILL_MIGRATION_2025 = exports.SKILL_IS_2025 = exports.SKILL_INFO_INACTIVE = exports.SKILL_INFO_ACTIVE = exports.SKILL_DURATION = exports.isSpecialSkill = exports.isSelectPlayersSkills = exports.isActivableSkills = exports.helpSkillsToDisplay = exports.hasToAgilityJumpUp = exports.hasSkillForPlayer = exports.hasSkillDisplayableInfo = exports.getPlayersWithSkill = exports.BIG_GUY_LIMIT = void 0;
4
4
  exports.getDisturbingPresenceMalus = getDisturbingPresenceMalus;
5
5
  exports.getNoTurnoverSkill = getNoTurnoverSkill;
6
6
  exports.getSkill = getSkill;
@@ -12,6 +12,7 @@ exports.hasSkill = hasSkill;
12
12
  exports.hasUsedSkill = hasUsedSkill;
13
13
  exports.isNoTurnoverSkill = isNoTurnoverSkill;
14
14
  exports.useSkill = useSkill;
15
+ const newSkills_1 = require("./2025/newSkills");
15
16
  const calcul_1 = require("./calcul");
16
17
  const status_1 = require("./status");
17
18
  const time_1 = require("./time");
@@ -37,17 +38,22 @@ exports.SKILL_DURATION = SKILL_DURATION;
37
38
  // Missing for races
38
39
  var SKILL_NAMES;
39
40
  (function (SKILL_NAMES) {
40
- // SIDE_STEP: "side-step",
41
41
  SKILL_NAMES["ACCURATE"] = "accurate";
42
42
  SKILL_NAMES["ALWAYS_HUNGRY"] = "always-hungry";
43
43
  SKILL_NAMES["ANIMAL_SAVAGERY"] = "animal-salvagery";
44
44
  SKILL_NAMES["ANIMOSITY"] = "animosity";
45
+ SKILL_NAMES["ARM_BAR"] = "arm-bar";
46
+ // BALL_AND_CHAIN = "ball-and-chain",
45
47
  SKILL_NAMES["BIG_GUY"] = "big-guy";
46
48
  SKILL_NAMES["BIG_HAND"] = "big-hand";
47
49
  SKILL_NAMES["BLOCK"] = "block";
50
+ SKILL_NAMES["BLOODLUST"] = "bloodlust";
48
51
  SKILL_NAMES["BONE_HEAD"] = "bone-head";
52
+ // BOMBARDIER = "bombardier",
49
53
  SKILL_NAMES["BRAWLER"] = "brawler";
54
+ SKILL_NAMES["BREATHE_FIRE"] = "breathe-fire";
50
55
  SKILL_NAMES["BREAK_TACKLE"] = "break-tackle";
56
+ // BULLSEYE = "bullseye",
51
57
  SKILL_NAMES["CANNONEER"] = "cannoneer";
52
58
  SKILL_NAMES["CATCH"] = "catch";
53
59
  SKILL_NAMES["CHAINSAW"] = "chainsaw";
@@ -62,56 +68,85 @@ var SKILL_NAMES;
62
68
  SKILL_NAMES["DODGE"] = "dodge";
63
69
  SKILL_NAMES["DRUNKARD"] = "drunkard";
64
70
  SKILL_NAMES["DUMP_OFF"] = "dump-off";
71
+ SKILL_NAMES["EYE_GOUGE"] = "eye-gouge";
65
72
  SKILL_NAMES["EXTRA_ARMS"] = "extra-arms";
66
73
  SKILL_NAMES["FEND"] = "fend";
67
74
  SKILL_NAMES["FOUL_APPEARANCE"] = "foul-appearance";
68
75
  SKILL_NAMES["FRENZY"] = "frenzy";
69
76
  SKILL_NAMES["FUMBLEROOSKIE"] = "fumblerooskie";
77
+ // GRAB = "grab",
78
+ SKILL_NAMES["HAIL_MARY_PASS"] = "hail-mary-pass";
79
+ // HATRED = "hatred",
70
80
  SKILL_NAMES["GUARD"] = "guard";
81
+ SKILL_NAMES["HIT_AND_RUN"] = "hit-and-run";
71
82
  SKILL_NAMES["HORNS"] = "horns";
72
83
  SKILL_NAMES["HYPNOTIC_GAZE"] = "hypnotic-gaze";
84
+ // INSIGNIFICANT = "insignificant",
73
85
  SKILL_NAMES["IRON_HARD_SKIN"] = "iron-hard-skin";
74
86
  SKILL_NAMES["JUGGERNAUT"] = "juggernaut";
75
87
  SKILL_NAMES["JUMP_UP"] = "jump-up";
88
+ // KICK = "kick",
89
+ // KICK_TEAMMATE = "kick-teammate",
90
+ // LETHAL_FLIGHT = "lethal-flight",
91
+ // LEADER = "leader",
76
92
  SKILL_NAMES["LEAP"] = "leap";
93
+ // LONE_FOULER = "lone-fouler",
77
94
  SKILL_NAMES["LONER"] = "loner";
78
95
  SKILL_NAMES["MIGHTY_BLOW"] = "mighty-blow";
79
96
  SKILL_NAMES["MONSTROUS_MOUTH"] = "monstrous-mouth";
97
+ SKILL_NAMES["MY_BALL"] = "my-ball";
98
+ // MULTIPLE_BLOCK = "multiple-block",
80
99
  SKILL_NAMES["NERVES_OF_STEEL"] = "nerves-of-steel";
81
100
  SKILL_NAMES["NO_HANDS"] = "no-hand";
82
101
  SKILL_NAMES["ON_THE_BALL"] = "on-the-ball";
83
102
  SKILL_NAMES["PASS"] = "pass";
84
103
  SKILL_NAMES["PILE_DRIVER"] = "pile-driver";
104
+ SKILL_NAMES["PICK_ME_UP"] = "pick-me-up";
85
105
  SKILL_NAMES["PLAGUE_RIDDEN"] = "plague-ridden";
106
+ SKILL_NAMES["PUNT"] = "punt";
107
+ SKILL_NAMES["PRO"] = "pro";
108
+ SKILL_NAMES["PUT_THE_BOOT_IN"] = "put-the-boot-in";
86
109
  SKILL_NAMES["POGO_STICK"] = "pogo-stick";
87
110
  SKILL_NAMES["PREHENSILE_TAIL"] = "prehensile-tail";
111
+ SKILL_NAMES["QUICK_FOUL"] = "quick-foul";
88
112
  SKILL_NAMES["PROJECTILE_VOMIT"] = "projectile-vomit";
89
113
  SKILL_NAMES["REALLY_STUPID"] = "really-stupid";
90
114
  SKILL_NAMES["REGENERATION"] = "regeneration";
91
115
  SKILL_NAMES["RIGHT_STUFF"] = "right-stuff";
92
- SKILL_NAMES["RUNNING_PASS"] = "running-pass";
116
+ SKILL_NAMES["GIVE_AND_GO"] = "running-pass";
117
+ SKILL_NAMES["SAFE_PAIR_OF_HANDS"] = "safe-pair-of-hands";
118
+ // SABOTEUR = "saboteur",
93
119
  SKILL_NAMES["SAFE_PASS"] = "safe-pass";
94
120
  SKILL_NAMES["SECRET_WEAPON"] = "secret-weapon";
95
121
  SKILL_NAMES["SHADOWING"] = "shadowing";
122
+ SKILL_NAMES["STAB"] = "stab";
123
+ SKILL_NAMES["SIDESTEP"] = "sidestep";
96
124
  SKILL_NAMES["SNEAKY_GIT"] = "sneaky-git";
97
125
  SKILL_NAMES["SPECIALIST"] = "specialist";
98
126
  SKILL_NAMES["SPRINT"] = "sprint";
99
127
  SKILL_NAMES["STAND_FIRM"] = "stand-firm";
128
+ SKILL_NAMES["STEADY_FOOTING"] = "steady-footing";
100
129
  SKILL_NAMES["STAR"] = "star";
101
130
  SKILL_NAMES["STRIP_BALL"] = "strip-ball";
102
131
  SKILL_NAMES["STRONG_ARM"] = "strong-arm";
103
132
  SKILL_NAMES["STUNTY"] = "stunty";
133
+ SKILL_NAMES["SWOOP"] = "swoop";
104
134
  SKILL_NAMES["SURE_FEET"] = "sure-feet";
105
135
  SKILL_NAMES["SURE_HANDS"] = "sure-hands";
106
136
  SKILL_NAMES["TACKLE"] = "tackle";
137
+ SKILL_NAMES["TAUNT"] = "taunt";
107
138
  SKILL_NAMES["TAKE_ROOT"] = "take-root";
108
139
  SKILL_NAMES["TENTACLES"] = "tentacles";
109
140
  SKILL_NAMES["THICK_SKULL"] = "thick-skull";
110
141
  SKILL_NAMES["THROW_TEAM_MATE"] = "throw-team-mate";
142
+ SKILL_NAMES["TIMMM_BER"] = "timmm-ber";
111
143
  SKILL_NAMES["TITCHY"] = "titchy";
144
+ // TRICKSTER = "trickster",
112
145
  SKILL_NAMES["TWO_HEADS"] = "two-heads";
113
146
  SKILL_NAMES["UNCHANNELLED_FURY"] = "unchannelled-fury";
147
+ SKILL_NAMES["UNSTEADY"] = "unsteady";
114
148
  SKILL_NAMES["VERY_LONG_LEGS"] = "very-long-legs";
149
+ // VIOLENT_INNOVATOR = "violent-innovator",
115
150
  SKILL_NAMES["WRESTLE"] = "wrestle";
116
151
  SKILL_NAMES["DIVING_CATCH"] = "diving-catch";
117
152
  })(SKILL_NAMES || (exports.SKILL_NAMES = SKILL_NAMES = {}));
@@ -123,89 +158,159 @@ var SKILL_TYPE;
123
158
  SKILL_TYPE["MUTATION"] = "M";
124
159
  SKILL_TYPE["PASSING"] = "P";
125
160
  SKILL_TYPE["STRENGTH"] = "S";
161
+ SKILL_TYPE["DEVIOUS"] = "D";
126
162
  SKILL_TYPE["SPECIAL"] = "SP";
127
163
  })(SKILL_TYPE || (exports.SKILL_TYPE = SKILL_TYPE = {}));
128
- // TODO: add text translation when add a skill
164
+ const SKILL_AGILITY = [
165
+ SKILL_NAMES.CATCH,
166
+ SKILL_NAMES.DEFENSIVE,
167
+ SKILL_NAMES.DIVING_CATCH,
168
+ SKILL_NAMES.DIVING_TACKLE,
169
+ SKILL_NAMES.DODGE,
170
+ SKILL_NAMES.HIT_AND_RUN,
171
+ SKILL_NAMES.JUMP_UP,
172
+ SKILL_NAMES.LEAP,
173
+ SKILL_NAMES.SAFE_PAIR_OF_HANDS,
174
+ SKILL_NAMES.SIDESTEP,
175
+ SKILL_NAMES.SPRINT,
176
+ SKILL_NAMES.SURE_FEET,
177
+ ];
178
+ const SKILL_EXTRAORDINARY = [
179
+ SKILL_NAMES.ALWAYS_HUNGRY,
180
+ SKILL_NAMES.ANIMAL_SAVAGERY,
181
+ SKILL_NAMES.ANIMOSITY,
182
+ // SKILL_NAMES.BALL_AND_CHAIN,
183
+ SKILL_NAMES.BONE_HEAD,
184
+ // SKILL_NAMES.BOMBARDIER,
185
+ SKILL_NAMES.BLOODLUST,
186
+ SKILL_NAMES.BREATHE_FIRE,
187
+ SKILL_NAMES.CHAINSAW,
188
+ SKILL_NAMES.DECAY,
189
+ SKILL_NAMES.DRUNKARD,
190
+ // SKILL_NAMES.HATRED,
191
+ SKILL_NAMES.HYPNOTIC_GAZE,
192
+ // SKILL_NAMES.INSIGNIFICANT,
193
+ // SKILL_NAMES.KICK_TEAMMATE,
194
+ SKILL_NAMES.LONER,
195
+ SKILL_NAMES.MY_BALL,
196
+ SKILL_NAMES.NO_HANDS,
197
+ SKILL_NAMES.PICK_ME_UP,
198
+ SKILL_NAMES.PLAGUE_RIDDEN,
199
+ SKILL_NAMES.POGO_STICK,
200
+ SKILL_NAMES.PROJECTILE_VOMIT,
201
+ SKILL_NAMES.REALLY_STUPID,
202
+ SKILL_NAMES.REGENERATION,
203
+ SKILL_NAMES.RIGHT_STUFF,
204
+ SKILL_NAMES.SECRET_WEAPON,
205
+ SKILL_NAMES.STAB,
206
+ SKILL_NAMES.STUNTY,
207
+ SKILL_NAMES.SWOOP,
208
+ SKILL_NAMES.TAKE_ROOT,
209
+ SKILL_NAMES.THROW_TEAM_MATE,
210
+ SKILL_NAMES.TIMMM_BER,
211
+ SKILL_NAMES.TITCHY,
212
+ // SKILL_NAMES.TRICKSTER,
213
+ SKILL_NAMES.UNCHANNELLED_FURY,
214
+ SKILL_NAMES.UNSTEADY,
215
+ ];
216
+ const SKILL_GENERAL = [
217
+ SKILL_NAMES.BLOCK,
218
+ SKILL_NAMES.DAUNTLESS,
219
+ SKILL_NAMES.FEND,
220
+ SKILL_NAMES.FRENZY,
221
+ // SKILL_NAMES.KICK,
222
+ SKILL_NAMES.PRO,
223
+ SKILL_NAMES.STEADY_FOOTING,
224
+ SKILL_NAMES.STRIP_BALL,
225
+ SKILL_NAMES.SURE_HANDS,
226
+ SKILL_NAMES.TACKLE,
227
+ SKILL_NAMES.TAUNT,
228
+ SKILL_NAMES.WRESTLE,
229
+ ];
230
+ const SKILL_MUTATION = [
231
+ SKILL_NAMES.BIG_HAND,
232
+ SKILL_NAMES.CLAW,
233
+ SKILL_NAMES.DISTURBING_PRESENCE,
234
+ SKILL_NAMES.EXTRA_ARMS,
235
+ SKILL_NAMES.FOUL_APPEARANCE,
236
+ SKILL_NAMES.HORNS,
237
+ SKILL_NAMES.IRON_HARD_SKIN,
238
+ SKILL_NAMES.MONSTROUS_MOUTH,
239
+ SKILL_NAMES.PREHENSILE_TAIL,
240
+ SKILL_NAMES.TENTACLES,
241
+ SKILL_NAMES.TWO_HEADS,
242
+ SKILL_NAMES.VERY_LONG_LEGS,
243
+ ];
244
+ const SKILL_PASSING = [
245
+ SKILL_NAMES.ACCURATE,
246
+ SKILL_NAMES.CANNONEER,
247
+ SKILL_NAMES.CLOUD_BURSTER,
248
+ SKILL_NAMES.DUMP_OFF,
249
+ SKILL_NAMES.GIVE_AND_GO,
250
+ SKILL_NAMES.HAIL_MARY_PASS,
251
+ // SKILL_NAMES.LEADER,
252
+ SKILL_NAMES.NERVES_OF_STEEL,
253
+ SKILL_NAMES.ON_THE_BALL,
254
+ SKILL_NAMES.PASS,
255
+ SKILL_NAMES.PUNT,
256
+ SKILL_NAMES.SAFE_PASS,
257
+ ];
258
+ const SKILL_STRENGTH = [
259
+ SKILL_NAMES.ARM_BAR,
260
+ SKILL_NAMES.BRAWLER,
261
+ SKILL_NAMES.BREAK_TACKLE,
262
+ // SKILL_NAMES.BULLSEYE,
263
+ // SKILL_NAMES.GRAB,
264
+ SKILL_NAMES.GUARD,
265
+ SKILL_NAMES.JUGGERNAUT,
266
+ SKILL_NAMES.MIGHTY_BLOW,
267
+ // SKILL_NAMES.MULTIPLE_BLOCK,
268
+ SKILL_NAMES.STAND_FIRM,
269
+ SKILL_NAMES.STRONG_ARM,
270
+ SKILL_NAMES.THICK_SKULL,
271
+ ];
272
+ const SKILL_DEVIOUS = [
273
+ SKILL_NAMES.DIRTY_PLAYER,
274
+ SKILL_NAMES.EYE_GOUGE,
275
+ SKILL_NAMES.FUMBLEROOSKIE,
276
+ // SKILL_NAMES.LETHAL_FLIGHT,
277
+ // SKILL_NAMES.LONE_FOULER,
278
+ SKILL_NAMES.PILE_DRIVER,
279
+ SKILL_NAMES.PUT_THE_BOOT_IN,
280
+ SKILL_NAMES.QUICK_FOUL,
281
+ // SKILL_NAMES.SABOTEUR,
282
+ SKILL_NAMES.SHADOWING,
283
+ SKILL_NAMES.SNEAKY_GIT,
284
+ // SKILL_NAMES.VIOLENT_INNOVATOR,
285
+ ];
286
+ const SKILL_SPECIAL = [
287
+ SKILL_NAMES.BIG_GUY,
288
+ SKILL_NAMES.SPECIALIST,
289
+ SKILL_NAMES.STAR,
290
+ ];
291
+ const buildSkillsByType = (skills, type) => {
292
+ return skills.reduce((acc, skill) => {
293
+ acc[skill] = type;
294
+ return acc;
295
+ }, {});
296
+ };
129
297
  const SKILLS = {
130
- [SKILL_NAMES.ACCURATE]: SKILL_TYPE.PASSING,
131
- [SKILL_NAMES.ALWAYS_HUNGRY]: SKILL_TYPE.EXTRAORDINARY,
132
- [SKILL_NAMES.ANIMAL_SAVAGERY]: SKILL_TYPE.EXTRAORDINARY,
133
- [SKILL_NAMES.ANIMOSITY]: SKILL_TYPE.SPECIAL,
134
- [SKILL_NAMES.BIG_GUY]: SKILL_TYPE.SPECIAL,
135
- [SKILL_NAMES.BIG_HAND]: SKILL_TYPE.MUTATION,
136
- [SKILL_NAMES.BLOCK]: SKILL_TYPE.GENERAL,
137
- [SKILL_NAMES.BONE_HEAD]: SKILL_TYPE.EXTRAORDINARY,
138
- [SKILL_NAMES.BRAWLER]: SKILL_TYPE.STRENGTH,
139
- [SKILL_NAMES.BREAK_TACKLE]: SKILL_TYPE.STRENGTH,
140
- [SKILL_NAMES.CANNONEER]: SKILL_TYPE.PASSING,
141
- [SKILL_NAMES.CATCH]: SKILL_TYPE.AGILITY,
142
- [SKILL_NAMES.CHAINSAW]: SKILL_TYPE.EXTRAORDINARY,
143
- [SKILL_NAMES.CLAW]: SKILL_TYPE.MUTATION,
144
- [SKILL_NAMES.CLOUD_BURSTER]: SKILL_TYPE.PASSING,
145
- [SKILL_NAMES.DAUNTLESS]: SKILL_TYPE.GENERAL,
146
- [SKILL_NAMES.DECAY]: SKILL_TYPE.EXTRAORDINARY,
147
- [SKILL_NAMES.DEFENSIVE]: SKILL_TYPE.AGILITY,
148
- [SKILL_NAMES.DIRTY_PLAYER]: SKILL_TYPE.GENERAL,
149
- [SKILL_NAMES.DISTURBING_PRESENCE]: SKILL_TYPE.MUTATION,
150
- [SKILL_NAMES.DIVING_TACKLE]: SKILL_TYPE.AGILITY,
151
- [SKILL_NAMES.DODGE]: SKILL_TYPE.AGILITY,
152
- [SKILL_NAMES.DRUNKARD]: SKILL_TYPE.EXTRAORDINARY,
153
- [SKILL_NAMES.DUMP_OFF]: SKILL_TYPE.PASSING,
154
- [SKILL_NAMES.EXTRA_ARMS]: SKILL_TYPE.MUTATION,
155
- [SKILL_NAMES.FEND]: SKILL_TYPE.GENERAL,
156
- [SKILL_NAMES.FOUL_APPEARANCE]: SKILL_TYPE.MUTATION,
157
- [SKILL_NAMES.FRENZY]: SKILL_TYPE.GENERAL,
158
- [SKILL_NAMES.FUMBLEROOSKIE]: SKILL_TYPE.PASSING,
159
- [SKILL_NAMES.GUARD]: SKILL_TYPE.STRENGTH,
160
- [SKILL_NAMES.HORNS]: SKILL_TYPE.MUTATION,
161
- [SKILL_NAMES.HYPNOTIC_GAZE]: SKILL_TYPE.EXTRAORDINARY,
162
- [SKILL_NAMES.IRON_HARD_SKIN]: SKILL_TYPE.MUTATION,
163
- [SKILL_NAMES.JUGGERNAUT]: SKILL_TYPE.STRENGTH,
164
- [SKILL_NAMES.JUMP_UP]: SKILL_TYPE.AGILITY,
165
- [SKILL_NAMES.LEAP]: SKILL_TYPE.AGILITY,
166
- [SKILL_NAMES.LONER]: SKILL_TYPE.EXTRAORDINARY,
167
- [SKILL_NAMES.MIGHTY_BLOW]: SKILL_TYPE.STRENGTH,
168
- [SKILL_NAMES.MONSTROUS_MOUTH]: SKILL_TYPE.MUTATION,
169
- [SKILL_NAMES.NERVES_OF_STEEL]: SKILL_TYPE.PASSING,
170
- [SKILL_NAMES.NO_HANDS]: SKILL_TYPE.EXTRAORDINARY,
171
- [SKILL_NAMES.ON_THE_BALL]: SKILL_TYPE.PASSING,
172
- [SKILL_NAMES.PASS]: SKILL_TYPE.PASSING,
173
- [SKILL_NAMES.PILE_DRIVER]: SKILL_TYPE.STRENGTH,
174
- [SKILL_NAMES.PLAGUE_RIDDEN]: SKILL_TYPE.EXTRAORDINARY,
175
- [SKILL_NAMES.POGO_STICK]: SKILL_TYPE.EXTRAORDINARY,
176
- [SKILL_NAMES.PREHENSILE_TAIL]: SKILL_TYPE.MUTATION,
177
- [SKILL_NAMES.PROJECTILE_VOMIT]: SKILL_TYPE.EXTRAORDINARY,
178
- [SKILL_NAMES.REALLY_STUPID]: SKILL_TYPE.EXTRAORDINARY,
179
- [SKILL_NAMES.REGENERATION]: SKILL_TYPE.EXTRAORDINARY,
180
- [SKILL_NAMES.RIGHT_STUFF]: SKILL_TYPE.EXTRAORDINARY,
181
- [SKILL_NAMES.RUNNING_PASS]: SKILL_TYPE.PASSING,
182
- [SKILL_NAMES.SAFE_PASS]: SKILL_TYPE.PASSING,
183
- [SKILL_NAMES.SECRET_WEAPON]: SKILL_TYPE.EXTRAORDINARY,
184
- [SKILL_NAMES.SHADOWING]: SKILL_TYPE.GENERAL,
185
- [SKILL_NAMES.SNEAKY_GIT]: SKILL_TYPE.AGILITY,
186
- [SKILL_NAMES.SPECIALIST]: SKILL_TYPE.SPECIAL,
187
- [SKILL_NAMES.SPRINT]: SKILL_TYPE.AGILITY,
188
- [SKILL_NAMES.STAND_FIRM]: SKILL_TYPE.STRENGTH,
189
- [SKILL_NAMES.STAR]: SKILL_TYPE.SPECIAL,
190
- [SKILL_NAMES.STRIP_BALL]: SKILL_TYPE.GENERAL,
191
- [SKILL_NAMES.STRONG_ARM]: SKILL_TYPE.STRENGTH,
192
- [SKILL_NAMES.STUNTY]: SKILL_TYPE.EXTRAORDINARY,
193
- [SKILL_NAMES.SURE_FEET]: SKILL_TYPE.AGILITY,
194
- [SKILL_NAMES.SURE_HANDS]: SKILL_TYPE.GENERAL,
195
- [SKILL_NAMES.TACKLE]: SKILL_TYPE.GENERAL,
196
- [SKILL_NAMES.TAKE_ROOT]: SKILL_TYPE.EXTRAORDINARY,
197
- [SKILL_NAMES.TENTACLES]: SKILL_TYPE.MUTATION,
198
- [SKILL_NAMES.THICK_SKULL]: SKILL_TYPE.STRENGTH,
199
- [SKILL_NAMES.THROW_TEAM_MATE]: SKILL_TYPE.EXTRAORDINARY,
200
- [SKILL_NAMES.TITCHY]: SKILL_TYPE.EXTRAORDINARY,
201
- [SKILL_NAMES.TWO_HEADS]: SKILL_TYPE.MUTATION,
202
- [SKILL_NAMES.UNCHANNELLED_FURY]: SKILL_TYPE.EXTRAORDINARY,
203
- [SKILL_NAMES.VERY_LONG_LEGS]: SKILL_TYPE.MUTATION,
204
- [SKILL_NAMES.WRESTLE]: SKILL_TYPE.GENERAL,
205
- [SKILL_NAMES.DIVING_CATCH]: SKILL_TYPE.AGILITY,
206
- // [SKILL_NAMES.SIDE_STEP]: SKILL_TYPE.AGILITY,
298
+ ...buildSkillsByType(SKILL_AGILITY, SKILL_TYPE.AGILITY),
299
+ ...buildSkillsByType(SKILL_EXTRAORDINARY, SKILL_TYPE.EXTRAORDINARY),
300
+ ...buildSkillsByType(SKILL_GENERAL, SKILL_TYPE.GENERAL),
301
+ ...buildSkillsByType(SKILL_MUTATION, SKILL_TYPE.MUTATION),
302
+ ...buildSkillsByType(SKILL_PASSING, SKILL_TYPE.PASSING),
303
+ ...buildSkillsByType(SKILL_STRENGTH, SKILL_TYPE.STRENGTH),
304
+ ...buildSkillsByType(SKILL_DEVIOUS, SKILL_TYPE.DEVIOUS),
305
+ ...buildSkillsByType(SKILL_SPECIAL, SKILL_TYPE.SPECIAL),
207
306
  };
208
307
  exports.SKILLS = SKILLS;
308
+ const SKILL_IS_2025 = Object.values(SKILL_NAMES).reduce((acc, id) => {
309
+ acc[id] = false;
310
+ return acc;
311
+ }, {});
312
+ exports.SKILL_IS_2025 = SKILL_IS_2025;
313
+ SKILL_IS_2025[SKILL_NAMES.BLOCK] = true;
209
314
  // Strip Ball: When a player with this skill pushes an opposing player during a Block, they will cause the opposing player to drop the ball in square they are pushed back to, even if the opposing player is not Knocked Down.
210
315
  // Sure Hands: A player with Sure Hands is allowed to re-roll the result if they fail to pick up the ball. In addition, the Strip Ball skill does not work against a player with this skill.
211
316
  function useSkill(player, skillId, date = -1, info = null) {
@@ -276,6 +381,7 @@ const getPlayersWithSkill = (players, skillId) => {
276
381
  exports.getPlayersWithSkill = getPlayersWithSkill;
277
382
  const hasSkillDisplayableInfo = (skillId) => {
278
383
  const activables = [
384
+ SKILL_NAMES.BLOODLUST,
279
385
  SKILL_NAMES.LONER,
280
386
  SKILL_NAMES.ANIMOSITY,
281
387
  SKILL_NAMES.CHAINSAW,
@@ -324,6 +430,17 @@ function getSpecialistLimit(teamPlayers) {
324
430
  const extra = STAR_LIMIT - stars;
325
431
  return SPECIALIST_LIMIT + extra;
326
432
  }
433
+ // Migration 2025: indique si une compétence legacy existe dans la nouvelle liste 2025
434
+ const SKILL_MIGRATION_2025 = (() => {
435
+ const normalize = (value) => value.toLowerCase().replace(/[^a-z0-9]/gi, "");
436
+ const migrated = new Set(newSkills_1.newSkills.map((s) => normalize(s.name)));
437
+ const map = {};
438
+ Object.values(SKILL_NAMES).forEach((id) => {
439
+ map[id] = migrated.has(normalize(id));
440
+ });
441
+ return map;
442
+ })();
443
+ exports.SKILL_MIGRATION_2025 = SKILL_MIGRATION_2025;
327
444
  function getSkillLimitSizeTeam(player, teamPlayers) {
328
445
  let limitSkill = null;
329
446
  let skillToCheck = null;
@@ -359,6 +476,7 @@ function getNoTurnoverSkill() {
359
476
  SKILL_NAMES.ANIMOSITY,
360
477
  SKILL_NAMES.TAKE_ROOT,
361
478
  SKILL_NAMES.UNCHANNELLED_FURY,
479
+ SKILL_NAMES.BLOODLUST,
362
480
  SKILL_NAMES.DUMP_OFF,
363
481
  SKILL_NAMES.HYPNOTIC_GAZE,
364
482
  SKILL_NAMES.FOUL_APPEARANCE,
@@ -0,0 +1,10 @@
1
+ export { SidestepStrategy as HitAndRunStrategy, CustomPriorities } from "./sidestep";
2
+ export declare enum HitAndRunMode {
3
+ DISABLED = "DISABLED",
4
+ ENABLED = "ENABLED"
5
+ }
6
+ export interface HitAndRunPreference {
7
+ mode: HitAndRunMode;
8
+ strategy: import("./sidestep").SidestepStrategy;
9
+ customPriorities?: import("./safePairOfHands").CustomPriorities;
10
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HitAndRunMode = exports.HitAndRunStrategy = void 0;
4
+ // Hit and Run reuses the same strategies as Sidestep
5
+ // The UI is a toggle + select in the block action dialog
6
+ var sidestep_1 = require("./sidestep");
7
+ Object.defineProperty(exports, "HitAndRunStrategy", { enumerable: true, get: function () { return sidestep_1.SidestepStrategy; } });
8
+ var HitAndRunMode;
9
+ (function (HitAndRunMode) {
10
+ HitAndRunMode["DISABLED"] = "DISABLED";
11
+ HitAndRunMode["ENABLED"] = "ENABLED";
12
+ })(HitAndRunMode || (exports.HitAndRunMode = HitAndRunMode = {}));
@@ -0,0 +1,28 @@
1
+ export interface CustomPriorities {
2
+ topLeft: number;
3
+ top: number;
4
+ topRight: number;
5
+ left: number;
6
+ right: number;
7
+ bottomLeft: number;
8
+ bottom: number;
9
+ bottomRight: number;
10
+ }
11
+ export declare enum SafePairOfHandsMode {
12
+ DISABLED = "DISABLED",
13
+ AUTO = "AUTO"
14
+ }
15
+ export declare enum SafePairOfHandsStrategy {
16
+ TOWARD_TEAMMATE = "TOWARD_TEAMMATE",
17
+ AWAY_FROM_THREAT = "AWAY_FROM_THREAT",
18
+ TOWARD_ENDZONE = "TOWARD_ENDZONE",
19
+ AWAY_FROM_SIDELINE = "AWAY_FROM_SIDELINE",
20
+ SAFE_SQUARE = "SAFE_SQUARE",
21
+ RANDOM = "RANDOM",
22
+ CUSTOM = "CUSTOM"
23
+ }
24
+ export interface SafePairOfHandsPreference {
25
+ mode: SafePairOfHandsMode;
26
+ strategy: SafePairOfHandsStrategy;
27
+ customPriorities?: CustomPriorities;
28
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SafePairOfHandsStrategy = exports.SafePairOfHandsMode = void 0;
4
+ var SafePairOfHandsMode;
5
+ (function (SafePairOfHandsMode) {
6
+ SafePairOfHandsMode["DISABLED"] = "DISABLED";
7
+ SafePairOfHandsMode["AUTO"] = "AUTO";
8
+ })(SafePairOfHandsMode || (exports.SafePairOfHandsMode = SafePairOfHandsMode = {}));
9
+ var SafePairOfHandsStrategy;
10
+ (function (SafePairOfHandsStrategy) {
11
+ SafePairOfHandsStrategy["TOWARD_TEAMMATE"] = "TOWARD_TEAMMATE";
12
+ SafePairOfHandsStrategy["AWAY_FROM_THREAT"] = "AWAY_FROM_THREAT";
13
+ SafePairOfHandsStrategy["TOWARD_ENDZONE"] = "TOWARD_ENDZONE";
14
+ SafePairOfHandsStrategy["AWAY_FROM_SIDELINE"] = "AWAY_FROM_SIDELINE";
15
+ SafePairOfHandsStrategy["SAFE_SQUARE"] = "SAFE_SQUARE";
16
+ SafePairOfHandsStrategy["RANDOM"] = "RANDOM";
17
+ SafePairOfHandsStrategy["CUSTOM"] = "CUSTOM";
18
+ })(SafePairOfHandsStrategy || (exports.SafePairOfHandsStrategy = SafePairOfHandsStrategy = {}));
@@ -0,0 +1,21 @@
1
+ export { CustomPriorities } from "./safePairOfHands";
2
+ export declare enum SidestepMode {
3
+ DISABLED = "DISABLED",
4
+ AUTO = "AUTO"
5
+ }
6
+ export declare enum SidestepStrategy {
7
+ AWAY_FROM_BALL = "AWAY_FROM_BALL",
8
+ TOWARD_BALL = "TOWARD_BALL",
9
+ AWAY_FROM_THREAT = "AWAY_FROM_THREAT",
10
+ MARK = "MARK",
11
+ TOWARD_SIDELINE = "TOWARD_SIDELINE",
12
+ AWAY_FROM_SIDELINE = "AWAY_FROM_SIDELINE",
13
+ TOWARD_ENDZONE = "TOWARD_ENDZONE",
14
+ RANDOM = "RANDOM",
15
+ CUSTOM = "CUSTOM"
16
+ }
17
+ export interface SidestepPreference {
18
+ mode: SidestepMode;
19
+ strategy: SidestepStrategy;
20
+ customPriorities?: import("./safePairOfHands").CustomPriorities;
21
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SidestepStrategy = exports.SidestepMode = void 0;
4
+ var SidestepMode;
5
+ (function (SidestepMode) {
6
+ SidestepMode["DISABLED"] = "DISABLED";
7
+ SidestepMode["AUTO"] = "AUTO";
8
+ })(SidestepMode || (exports.SidestepMode = SidestepMode = {}));
9
+ var SidestepStrategy;
10
+ (function (SidestepStrategy) {
11
+ SidestepStrategy["AWAY_FROM_BALL"] = "AWAY_FROM_BALL";
12
+ SidestepStrategy["TOWARD_BALL"] = "TOWARD_BALL";
13
+ SidestepStrategy["AWAY_FROM_THREAT"] = "AWAY_FROM_THREAT";
14
+ SidestepStrategy["MARK"] = "MARK";
15
+ SidestepStrategy["TOWARD_SIDELINE"] = "TOWARD_SIDELINE";
16
+ SidestepStrategy["AWAY_FROM_SIDELINE"] = "AWAY_FROM_SIDELINE";
17
+ SidestepStrategy["TOWARD_ENDZONE"] = "TOWARD_ENDZONE";
18
+ SidestepStrategy["RANDOM"] = "RANDOM";
19
+ SidestepStrategy["CUSTOM"] = "CUSTOM";
20
+ })(SidestepStrategy || (exports.SidestepStrategy = SidestepStrategy = {}));
package/dist/status.d.ts CHANGED
@@ -7,12 +7,15 @@ export declare enum PLAYER_STATUS {
7
7
  KO = 4,
8
8
  CASUALTY = 5,// Blessé
9
9
  SENDOFF = 6,// Expulsé
10
- BONE_HEAD = 7
10
+ BONE_HEAD = 7,// Plus de zdt
11
+ EYE_GOUGED = 8,// Ne peut pas fournir de soutiens
12
+ BLOODLUST = 9
11
13
  }
12
14
  export declare const hasStatusCanFaceup: (player: Player) => boolean;
13
15
  export declare const hasStatusCanStandup: (player: Player) => boolean;
14
16
  export declare const hasStatusTacleZone: (player: Player) => boolean;
15
17
  export declare const hasStatusStanding: (player: Player) => boolean;
18
+ export declare const hasStatusCanAssist: (player: Player) => boolean;
16
19
  export declare const hasStatusInjury: (player: Player) => boolean;
17
20
  export declare const hasStatusFall: (player: Player) => boolean;
18
21
  export declare const hasStatusOnField: (player: Player) => boolean;
package/dist/status.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasStatusCantPlay = exports.hasStatusOnField = exports.hasStatusFall = exports.hasStatusInjury = exports.hasStatusStanding = exports.hasStatusTacleZone = exports.hasStatusCanStandup = exports.hasStatusCanFaceup = exports.PLAYER_STATUS = void 0;
3
+ exports.hasStatusCantPlay = exports.hasStatusOnField = exports.hasStatusFall = exports.hasStatusInjury = exports.hasStatusCanAssist = exports.hasStatusStanding = exports.hasStatusTacleZone = exports.hasStatusCanStandup = exports.hasStatusCanFaceup = exports.PLAYER_STATUS = void 0;
4
4
  var PLAYER_STATUS;
5
5
  (function (PLAYER_STATUS) {
6
6
  PLAYER_STATUS[PLAYER_STATUS["STANDING"] = 0] = "STANDING";
@@ -12,6 +12,8 @@ var PLAYER_STATUS;
12
12
  // For other casuality (death), update all playerTo.status === PLAYER_STATUS.CASUALTY
13
13
  PLAYER_STATUS[PLAYER_STATUS["SENDOFF"] = 6] = "SENDOFF";
14
14
  PLAYER_STATUS[PLAYER_STATUS["BONE_HEAD"] = 7] = "BONE_HEAD";
15
+ PLAYER_STATUS[PLAYER_STATUS["EYE_GOUGED"] = 8] = "EYE_GOUGED";
16
+ PLAYER_STATUS[PLAYER_STATUS["BLOODLUST"] = 9] = "BLOODLUST";
15
17
  })(PLAYER_STATUS || (exports.PLAYER_STATUS = PLAYER_STATUS = {}));
16
18
  const hasStatusCanFaceup = (player) => {
17
19
  return player.status === PLAYER_STATUS.STUNNED;
@@ -22,15 +24,23 @@ const hasStatusCanStandup = (player) => {
22
24
  };
23
25
  exports.hasStatusCanStandup = hasStatusCanStandup;
24
26
  const hasStatusTacleZone = (player) => {
25
- // BONE_HEAD doesn't have table zone
26
- return player.status === PLAYER_STATUS.STANDING;
27
+ // BONE_HEAD doesn't have tackle zone, EYE_GOUGED keeps tackle zone
28
+ return (player.status === PLAYER_STATUS.STANDING ||
29
+ player.status === PLAYER_STATUS.EYE_GOUGED ||
30
+ player.status === PLAYER_STATUS.BLOODLUST);
27
31
  };
28
32
  exports.hasStatusTacleZone = hasStatusTacleZone;
29
33
  const hasStatusStanding = (player) => {
30
34
  return (player.status === PLAYER_STATUS.STANDING ||
31
- player.status === PLAYER_STATUS.BONE_HEAD);
35
+ player.status === PLAYER_STATUS.BONE_HEAD ||
36
+ player.status === PLAYER_STATUS.EYE_GOUGED ||
37
+ player.status === PLAYER_STATUS.BLOODLUST);
32
38
  };
33
39
  exports.hasStatusStanding = hasStatusStanding;
40
+ const hasStatusCanAssist = (player) => {
41
+ return player.status !== PLAYER_STATUS.EYE_GOUGED;
42
+ };
43
+ exports.hasStatusCanAssist = hasStatusCanAssist;
34
44
  const hasStatusInjury = (player) => {
35
45
  return (player.status === PLAYER_STATUS.KO ||
36
46
  player.status === PLAYER_STATUS.CASUALTY);
package/dist/store.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  declare const STORE_ITEM_TYPE: {
2
2
  AVATAR: string;
3
3
  BADGE: string;
4
+ DICE: string;
5
+ SEASON_AVATAR: string;
4
6
  };
5
7
  declare const PRODUCTS: {
6
8
  1: {
@@ -64,6 +66,7 @@ declare const AVATAR_PRICE: {
64
66
  c: number;
65
67
  r: number;
66
68
  u: number;
69
+ s: number;
67
70
  };
68
71
  declare const storeBadges: {
69
72
  "elfen-union": {
package/dist/store.js CHANGED
@@ -6,6 +6,8 @@ const career_1 = require("./career");
6
6
  const STORE_ITEM_TYPE = {
7
7
  AVATAR: "a",
8
8
  BADGE: "b",
9
+ DICE: "d",
10
+ SEASON_AVATAR: "sa",
9
11
  };
10
12
  exports.STORE_ITEM_TYPE = STORE_ITEM_TYPE;
11
13
  const PRODUCTS = {
@@ -71,6 +73,7 @@ const AVATAR_PRICE = {
71
73
  [career_1.AVATAR_RARITY.COMMUN]: 100,
72
74
  [career_1.AVATAR_RARITY.RARE]: 250,
73
75
  [career_1.AVATAR_RARITY.UNIQUE]: 390,
76
+ [career_1.AVATAR_RARITY.SEASONAL]: 100,
74
77
  };
75
78
  exports.AVATAR_PRICE = AVATAR_PRICE;
76
79
  const STORE_BADGE_PRICE = 180;