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
@@ -0,0 +1,31 @@
1
+ import { SKILL_TYPE } from "../skill";
2
+ type CareerLite = {
3
+ skills?: (string | [string, number])[];
4
+ };
5
+ type SkillBasic = {
6
+ id: string;
7
+ name?: string;
8
+ family?: string;
9
+ mode?: string;
10
+ elite?: boolean;
11
+ };
12
+ type SkillMigrationRow = {
13
+ key: string;
14
+ label: string;
15
+ intrinsic: boolean;
16
+ legacy?: {
17
+ name: string;
18
+ family: string;
19
+ };
20
+ next?: {
21
+ name: string;
22
+ family?: string;
23
+ mode?: string;
24
+ elite?: boolean;
25
+ };
26
+ };
27
+ declare const SKILL_DISPLAY_OVERRIDE: Record<string, string>;
28
+ declare const normalizeSkillKey: (value: string) => string;
29
+ declare const formatSkillName: (value: string) => string;
30
+ declare const buildSkillMigrationRows: (existingSkills: Record<string, SKILL_TYPE>, nextSkills: SkillBasic[], legacyCareers: Record<string, CareerLite>, nextCareers: Record<string, CareerLite>) => SkillMigrationRow[];
31
+ export { buildSkillMigrationRows, formatSkillName, normalizeSkillKey, SKILL_DISPLAY_OVERRIDE, SkillBasic, SkillMigrationRow, };
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SKILL_DISPLAY_OVERRIDE = exports.normalizeSkillKey = exports.formatSkillName = exports.buildSkillMigrationRows = void 0;
4
+ const skill_1 = require("../skill");
5
+ const SKILL_DISPLAY_OVERRIDE = {
6
+ "animal-salvagery": "Animal Savagery",
7
+ "distrubing-presence": "Disturbing Presence",
8
+ claw: "Claws",
9
+ animosity: "Animosity (X)",
10
+ "running-pass": "Give and Go", // GIVE_AND_GO renamed to Give and Go
11
+ runningpass: "Give and Go", // Alias for GIVE_AND_GO
12
+ };
13
+ exports.SKILL_DISPLAY_OVERRIDE = SKILL_DISPLAY_OVERRIDE;
14
+ const SKILL_KEY_ALIAS = {
15
+ fumblerooskie: "fumblerooski",
16
+ giveandgo: "runningpass",
17
+ animalsalvagery: "animalsavagery",
18
+ distrubingpresence: "disturbingpresence",
19
+ claws: "claw",
20
+ animosityx: "animosity",
21
+ nohand: "noball",
22
+ lonerx: "loner",
23
+ pogostick: "pogo",
24
+ };
25
+ const normalizeSkillKey = (value) => {
26
+ const base = value.toLowerCase().replace(/[^a-z0-9]/gi, "");
27
+ return SKILL_KEY_ALIAS[base] ?? base;
28
+ };
29
+ exports.normalizeSkillKey = normalizeSkillKey;
30
+ const formatSkillName = (value) => value.replace(/-/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
31
+ exports.formatSkillName = formatSkillName;
32
+ const buildSkillMigrationRows = (existingSkills, nextSkills, legacyCareers, nextCareers) => {
33
+ const labelByType = {
34
+ [skill_1.SKILL_TYPE.AGILITY]: "Agility",
35
+ [skill_1.SKILL_TYPE.EXTRAORDINARY]: "Extraordinary",
36
+ [skill_1.SKILL_TYPE.GENERAL]: "General",
37
+ [skill_1.SKILL_TYPE.MUTATION]: "Mutation",
38
+ [skill_1.SKILL_TYPE.PASSING]: "Passing",
39
+ [skill_1.SKILL_TYPE.STRENGTH]: "Strength",
40
+ [skill_1.SKILL_TYPE.DEVIOUS]: "Devious",
41
+ [skill_1.SKILL_TYPE.SPECIAL]: "Special",
42
+ };
43
+ const intrinsicSkills = new Set();
44
+ const collectSkills = (careers) => {
45
+ Object.values(careers).forEach((career) => {
46
+ (career.skills ?? []).forEach((s) => {
47
+ const skillName = Array.isArray(s) ? s[0] : s;
48
+ intrinsicSkills.add(normalizeSkillKey(String(skillName)));
49
+ });
50
+ });
51
+ };
52
+ collectSkills(legacyCareers);
53
+ collectSkills(nextCareers);
54
+ const existingMap = new Map();
55
+ Object.entries(existingSkills).forEach(([id, type]) => {
56
+ const key = normalizeSkillKey(id);
57
+ const display = SKILL_DISPLAY_OVERRIDE[id] ?? formatSkillName(id);
58
+ existingMap.set(key, {
59
+ name: display,
60
+ family: labelByType[type] ?? String(type),
61
+ });
62
+ });
63
+ const nextMap = new Map();
64
+ nextSkills.forEach((skill) => {
65
+ const key = normalizeSkillKey(skill.id);
66
+ nextMap.set(key, {
67
+ name: skill.name ?? formatSkillName(skill.id),
68
+ family: skill.family,
69
+ mode: skill.mode,
70
+ elite: skill.elite,
71
+ });
72
+ });
73
+ const keys = [];
74
+ existingMap.forEach((_v, key) => keys.push(key));
75
+ nextMap.forEach((_v, key) => {
76
+ if (!existingMap.has(key)) {
77
+ keys.push(key);
78
+ }
79
+ });
80
+ return keys
81
+ .map((key) => {
82
+ const legacy = existingMap.get(key);
83
+ const next = nextMap.get(key);
84
+ const label = next?.name ?? legacy?.name ?? key;
85
+ return {
86
+ key,
87
+ label,
88
+ legacy,
89
+ next,
90
+ intrinsic: intrinsicSkills.has(key),
91
+ };
92
+ })
93
+ .sort((a, b) => a.label.localeCompare(b.label));
94
+ };
95
+ exports.buildSkillMigrationRows = buildSkillMigrationRows;
@@ -0,0 +1,22 @@
1
+ import { AVATAR_RARITY } from "./career";
2
+ export type SeasonAvatar = {
3
+ file: string;
4
+ season: number;
5
+ rarity: AVATAR_RARITY;
6
+ /** true for portrait images (ratio 2:3, e.g. 1024×1536) */
7
+ portrait?: boolean;
8
+ };
9
+ /** Display height multiplier for portrait avatars (2:3 ratio) */
10
+ export declare const PORTRAIT_RATIO = 1.5;
11
+ /**
12
+ * Avatars saisonniers — universels (aucune restriction de race).
13
+ * Pour ajouter des avatars : déposer l'image dans
14
+ * client/public/tile/shop/avatar-season/s{season}/
15
+ * et ajouter une entrée ici.
16
+ */
17
+ export declare const AVATAR_SEASON_LIST: SeasonAvatar[];
18
+ /** Chemin complet utilisé pour afficher l'avatar d'un joueur (ex: <img src>) */
19
+ export declare function getSeasonAvatarPath(season: number): string;
20
+ /** Chemin relatif utilisé comme prop `type` dans le composant Item du shop */
21
+ export declare function getSeasonAvatarItemType(season: number): string;
22
+ export declare function findSeasonAvatar(file: string): SeasonAvatar | undefined;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AVATAR_SEASON_LIST = exports.PORTRAIT_RATIO = void 0;
4
+ exports.getSeasonAvatarPath = getSeasonAvatarPath;
5
+ exports.getSeasonAvatarItemType = getSeasonAvatarItemType;
6
+ exports.findSeasonAvatar = findSeasonAvatar;
7
+ const career_1 = require("./career");
8
+ /** Display height multiplier for portrait avatars (2:3 ratio) */
9
+ exports.PORTRAIT_RATIO = 1.5;
10
+ /**
11
+ * Avatars saisonniers — universels (aucune restriction de race).
12
+ * Pour ajouter des avatars : déposer l'image dans
13
+ * client/public/tile/shop/avatar-season/s{season}/
14
+ * et ajouter une entrée ici.
15
+ */
16
+ exports.AVATAR_SEASON_LIST = [
17
+ { file: "1.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
18
+ { file: "2.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
19
+ { file: "3.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
20
+ { file: "4.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
21
+ { file: "5.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
22
+ { file: "6.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
23
+ { file: "7.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
24
+ { file: "8.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
25
+ { file: "9.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
26
+ { file: "10.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
27
+ { file: "11.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
28
+ { file: "12.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
29
+ { file: "13.png", season: 17, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
30
+ { file: "1.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
31
+ { file: "2.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
32
+ { file: "3.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
33
+ { file: "4.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
34
+ { file: "5.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
35
+ { file: "6.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
36
+ { file: "7.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
37
+ { file: "8.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
38
+ { file: "9.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
39
+ { file: "10.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
40
+ { file: "11.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
41
+ { file: "12.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
42
+ { file: "13.png", season: 19, rarity: career_1.AVATAR_RARITY.SEASONAL, portrait: true },
43
+ ];
44
+ /** Chemin complet utilisé pour afficher l'avatar d'un joueur (ex: <img src>) */
45
+ function getSeasonAvatarPath(season) {
46
+ return `tile/shop/avatar-season/s${season}`;
47
+ }
48
+ /** Chemin relatif utilisé comme prop `type` dans le composant Item du shop */
49
+ function getSeasonAvatarItemType(season) {
50
+ return `avatar-season/s${season}`;
51
+ }
52
+ function findSeasonAvatar(file) {
53
+ return exports.AVATAR_SEASON_LIST.find((a) => a.file === file);
54
+ }
package/dist/career.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { CAREER_ID as CAREER_ID_2025, Career as Career2025 } from "./career2025";
1
2
  import { SKILL_NAMES } from "./skill";
2
3
  declare enum RACE {
3
4
  AMAZON = "amazon-career",
@@ -26,7 +27,8 @@ declare enum RACE {
26
27
  declare enum AVATAR_RARITY {
27
28
  COMMUN = "c",
28
29
  RARE = "r",
29
- UNIQUE = "u"
30
+ UNIQUE = "u",
31
+ SEASONAL = "s"
30
32
  }
31
33
  declare enum AVATAR {
32
34
  BEASTMAN = "beastman",
@@ -157,7 +159,8 @@ declare enum CAREER_ID {
157
159
  }
158
160
  declare enum CAREER_VERSION {
159
161
  V6 = "v6",
160
- V2020 = "v2020"
162
+ V2020 = "v2020",
163
+ V2025 = "v2025"
161
164
  }
162
165
  export type Career = {
163
166
  MA: number;
@@ -177,5 +180,11 @@ export type Career = {
177
180
  hasSprite?: boolean;
178
181
  version: CAREER_VERSION;
179
182
  };
180
- declare const getCareers: () => Record<CAREER_ID, Career>;
181
- export { AVATAR, AVATAR_RARITY, CAREER_ID, CAREER_VERSION, getCareers, RACE };
183
+ type CAREER_ID_ALL = CAREER_ID | CAREER_ID_2025;
184
+ type CareerMap = Record<CAREER_ID_ALL, Career | Career2025>;
185
+ type AvailableCareerMap = Record<CAREER_ID_2025, Career2025>;
186
+ declare const getCareers: () => CareerMap;
187
+ declare const getAvailableCareers: () => AvailableCareerMap;
188
+ declare const CAREER_IS_2025: Record<CAREER_ID, boolean>;
189
+ declare const CAREER_MIGRATION_2025: Record<CAREER_ID, boolean>;
190
+ export { AVATAR, AVATAR_RARITY, CAREER_ID, CAREER_ID_ALL, CAREER_IS_2025, CAREER_MIGRATION_2025, CAREER_VERSION, RACE, getAvailableCareers, getCareers, };
package/dist/career.js CHANGED
@@ -4,7 +4,8 @@
4
4
  // AG: Agility
5
5
  // AV: Armour Value
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.RACE = exports.getCareers = exports.CAREER_VERSION = exports.CAREER_ID = exports.AVATAR_RARITY = exports.AVATAR = void 0;
7
+ exports.getCareers = exports.getAvailableCareers = exports.RACE = exports.CAREER_VERSION = exports.CAREER_MIGRATION_2025 = exports.CAREER_IS_2025 = exports.CAREER_ID = exports.AVATAR_RARITY = exports.AVATAR = void 0;
8
+ const career2025_1 = require("./career2025");
8
9
  const skill_1 = require("./skill");
9
10
  var RACE;
10
11
  (function (RACE) {
@@ -36,6 +37,7 @@ var AVATAR_RARITY;
36
37
  AVATAR_RARITY["COMMUN"] = "c";
37
38
  AVATAR_RARITY["RARE"] = "r";
38
39
  AVATAR_RARITY["UNIQUE"] = "u";
40
+ AVATAR_RARITY["SEASONAL"] = "s";
39
41
  })(AVATAR_RARITY || (exports.AVATAR_RARITY = AVATAR_RARITY = {}));
40
42
  var AVATAR;
41
43
  (function (AVATAR) {
@@ -179,6 +181,7 @@ var CAREER_VERSION;
179
181
  (function (CAREER_VERSION) {
180
182
  CAREER_VERSION["V6"] = "v6";
181
183
  CAREER_VERSION["V2020"] = "v2020";
184
+ CAREER_VERSION["V2025"] = "v2025";
182
185
  })(CAREER_VERSION || (exports.CAREER_VERSION = CAREER_VERSION = {}));
183
186
  const CAREER = {
184
187
  // SLANN
@@ -670,11 +673,7 @@ const CAREER = {
670
673
  double: "AS",
671
674
  normalCoach: "G",
672
675
  icons: ["imperial-thrower1"],
673
- skills: [
674
- skill_1.SKILL_NAMES.PASS,
675
- skill_1.SKILL_NAMES.RUNNING_PASS,
676
- skill_1.SKILL_NAMES.SPECIALIST,
677
- ],
676
+ skills: [skill_1.SKILL_NAMES.PASS, skill_1.SKILL_NAMES.GIVE_AND_GO, skill_1.SKILL_NAMES.SPECIALIST],
678
677
  avatars: [AVATAR.HUMAN, AVATAR.HUMAN_WOMAN],
679
678
  badge: RACE.IMPERIAL,
680
679
  range: 1,
@@ -2120,6 +2119,36 @@ const CAREER = {
2120
2119
  },
2121
2120
  };
2122
2121
  const getCareers = () => {
2123
- return CAREER;
2122
+ const nextCareers = (0, career2025_1.getCareers)();
2123
+ return {
2124
+ ...CAREER,
2125
+ ...nextCareers,
2126
+ };
2124
2127
  };
2125
2128
  exports.getCareers = getCareers;
2129
+ const getAvailableCareers = () => {
2130
+ const nextCareers = (0, career2025_1.getCareers)();
2131
+ const allowedBadges = new Set(Object.values(RACE));
2132
+ return Object.entries(nextCareers).reduce((acc, [id, career]) => {
2133
+ if (allowedBadges.has(career.badge)) {
2134
+ acc[id] = career;
2135
+ }
2136
+ return acc;
2137
+ }, {});
2138
+ };
2139
+ exports.getAvailableCareers = getAvailableCareers;
2140
+ const CAREER_IS_2025 = Object.values(CAREER_ID).reduce((acc, id) => {
2141
+ acc[id] = new Set(Object.values(career2025_1.CAREER_ID)).has(id);
2142
+ return acc;
2143
+ }, {});
2144
+ exports.CAREER_IS_2025 = CAREER_IS_2025;
2145
+ // Migration 2025 : indique si un career legacy existe en v2025
2146
+ const CAREER_MIGRATION_2025 = (() => {
2147
+ const migrated = new Set(Object.values(career2025_1.CAREER_ID));
2148
+ const map = {};
2149
+ Object.values(CAREER_ID).forEach((id) => {
2150
+ map[id] = migrated.has(id);
2151
+ });
2152
+ return map;
2153
+ })();
2154
+ exports.CAREER_MIGRATION_2025 = CAREER_MIGRATION_2025;
@@ -0,0 +1,192 @@
1
+ import { SKILL_NAMES } from "./skill";
2
+ declare enum RACE {
3
+ AMAZON_CAREER = "amazon-career",
4
+ CHAOS_CAREER = "chaos-career",
5
+ CHAOS_DWARF_CAREER = "chaos-dwarf-career",
6
+ DARK_ELFE_CAREER = "dark-elfe-career",
7
+ DWARF_CAREER = "dwarf-career",
8
+ ELVEN_UNION_CAREER = "elven-union-career",
9
+ GOBELIN_CAREER = "gobelin-career",
10
+ HALFLING_CAREER = "halfling-career",
11
+ HIGH_ELF_CAREER = "high-elf-career",
12
+ HUMAN_CAREER = "human-career",
13
+ IMPERIAL_CAREER = "imperial-career",
14
+ KHORNE_CAREER = "khorne-career",
15
+ LIZARDMEN_CAREER = "lizardmen-career",
16
+ NECROMANTIC_CAREER = "necromantic-career",
17
+ NORSE_CAREER = "norse-career",
18
+ NURGLE_CAREER = "nurgle-career",
19
+ ORC_CAREER = "orc-career",
20
+ RAT_CAREER = "rat-career",
21
+ SILVAN_CAREER = "silvan-career",
22
+ SLANN_CAREER = "slann-career",
23
+ SNOTLING_CAREER = "snotling-career",
24
+ UNDEAD_CAREER = "undead-career",
25
+ VAMPIRE_CAREER = "vampire-career"
26
+ }
27
+ declare enum AVATAR {
28
+ BEASTMAN = "beastman",
29
+ BLACK_ORC = "black-orc",
30
+ BLOATER = "bloater",
31
+ BLOODSPAWN = "bloodspawn",
32
+ CENTAUR = "centaur",
33
+ CHAOS_DWARF = "chaos-dwarf",
34
+ CHAOS_WARRIOR = "chaos-warrior",
35
+ DARK_ELF = "dark_elf",
36
+ DWARF = "dwarf",
37
+ ELF = "elf",
38
+ GOBELIN = "gobelin",
39
+ GOLEM = "golem",
40
+ HALFING = "halfing",
41
+ HUMAN_WOMAN = "human-woman",
42
+ HUMAN = "human",
43
+ LIZARDMEN = "lezard",
44
+ MINOTAUR = "minotaur",
45
+ MUMMIE = "mummie",
46
+ OGRE = "ogre",
47
+ ORC = "orc",
48
+ RAT_OGRE = "rat_ogre",
49
+ RAT = "rat",
50
+ ROTSPAWN = "rotspawn",
51
+ SLANN = "slann",
52
+ TREEMAN = "treeman",
53
+ TROLL = "troll",
54
+ UNDEAD = "undead",
55
+ VAMPIRE = "vampire",
56
+ WAGON = "wagon",
57
+ WEREWOLF = "werewolf",
58
+ YHETEE = "yhetee"
59
+ }
60
+ declare enum CAREER_ID {
61
+ AMAZON_BLITZER_2025 = "amazon-blitzer-2025",
62
+ AMAZON_BLOCKER_2025 = "amazon-blocker-2025",
63
+ AMAZON_LINEWOMAN_2025 = "amazon-linewoman-2025",
64
+ AMAZON_THROWER_2025 = "amazon-thrower-2025",
65
+ CHAOS_CHOSEN_BEASTMAN_2025 = "chaos-chosen-beastman-2025",
66
+ CHAOS_CHOSEN_CHOSEN_2025 = "chaos-chosen-chosen-2025",
67
+ CHAOS_CHOSEN_MINOTAUR_2025 = "chaos-chosen-minotaur-2025",
68
+ CHAOS_DWARF_BLOCKER_2025 = "chaos-dwarf-blocker-2025",
69
+ CHAOS_DWARF_BULL_CENTAUR_2025 = "chaos-dwarf-bull-centaur-2025",
70
+ CHAOS_DWARF_FLAMER_2025 = "chaos-dwarf-flamer-2025",
71
+ CHAOS_DWARF_HOBGOBLIN_2025 = "chaos-dwarf-hobgoblin-2025",
72
+ CHAOS_DWARF_MINOTAUR_2025 = "chaos-dwarf-minotaur-2025",
73
+ CHAOS_DWARF_STABBA_2025 = "chaos-dwarf-stabba-2025",
74
+ DARK_ELF_ASSASSIN_2025 = "dark-elf-assassin-2025",
75
+ DARK_ELF_BLITZER_2025 = "dark-elf-blitzer-2025",
76
+ DARK_ELF_LINEMAN_2025 = "dark-elf-lineman-2025",
77
+ DARK_ELF_RUNNER_2025 = "dark-elf-runner-2025",
78
+ DARK_ELF_WITCH_ELF_2025 = "dark-elf-witch-elf-2025",
79
+ DWARF_BLITZER_2025 = "dwarf-blitzer-2025",
80
+ DWARF_DEATHROLLER_2025 = "dwarf-deathroller-2025",
81
+ DWARF_LINEMAN_2025 = "dwarf-lineman-2025",
82
+ DWARF_RUNNER_2025 = "dwarf-runner-2025",
83
+ DWARF_TROLL_SLAYER_2025 = "dwarf-troll-slayer-2025",
84
+ ELVEN_UNION_BLITZER_2025 = "elven-union-blitzer-2025",
85
+ ELVEN_UNION_CATCHER_2025 = "elven-union-catcher-2025",
86
+ ELVEN_UNION_LINEMAN_2025 = "elven-union-lineman-2025",
87
+ ELVEN_UNION_THROWER_2025 = "elven-union-thrower-2025",
88
+ GOBLIN_DOOM_DIVER_2025 = "goblin-doom-diver-2025",
89
+ GOBLIN_LINEMAN_2025 = "goblin-lineman-2025",
90
+ GOBLIN_LOONY_2025 = "goblin-loony-2025",
91
+ GOBLIN_OOLIGAN_2025 = "goblin-ooligan-2025",
92
+ GOBLIN_POGOER_2025 = "goblin-pogoer-2025",
93
+ GOBLIN_TROLL_2025 = "goblin-troll-2025",
94
+ HALFLING_CATCHER_2025 = "halfling-catcher-2025",
95
+ HALFLING_HEFTY_2025 = "halfling-hefty-2025",
96
+ HALFLING_LINEMAN_2025 = "halfling-lineman-2025",
97
+ HALFLING_TREEMAN_2025 = "halfling-treeman-2025",
98
+ HIGH_ELF_BLITZER_2025 = "high-elf-blitzer-2025",
99
+ HIGH_ELF_CATCHER_2025 = "high-elf-catcher-2025",
100
+ HIGH_ELF_LINEMAN_2025 = "high-elf-lineman-2025",
101
+ HIGH_ELF_THROWER_2025 = "high-elf-thrower-2025",
102
+ HUMAN_BLITZER_2025 = "human-blitzer-2025",
103
+ HUMAN_CATCHER_2025 = "human-catcher-2025",
104
+ HUMAN_LINEMAN_2025 = "human-lineman-2025",
105
+ HUMAN_OGRE_2025 = "human-ogre-2025",
106
+ HUMAN_THROWER_2025 = "human-thrower-2025",
107
+ IMPERIAL_NOBILITY_BLITZER_2025 = "imperial-nobility-blitzer-2025",
108
+ IMPERIAL_NOBILITY_BODYGUARD_2025 = "imperial-nobility-bodyguard-2025",
109
+ IMPERIAL_NOBILITY_OGRE_2025 = "imperial-nobility-ogre-2025",
110
+ IMPERIAL_NOBILITY_RETAINER_2025 = "imperial-nobility-retainer-2025",
111
+ IMPERIAL_NOBILITY_THROWER_2025 = "imperial-nobility-thrower-2025",
112
+ KHORNE_BLOODSEEKER_2025 = "khorne-bloodseeker-2025",
113
+ KHORNE_BLOODSPAWN_2025 = "khorne-bloodspawn-2025",
114
+ KHORNE_KHORNGOR_2025 = "khorne-khorngor-2025",
115
+ KHORNE_MARAUDER_2025 = "khorne-marauder-2025",
116
+ LIZARDMEN_CHAMELEON_2025 = "lizardmen-chameleon-2025",
117
+ LIZARDMEN_KROXIGOR_2025 = "lizardmen-kroxigor-2025",
118
+ LIZARDMEN_SAURUS_2025 = "lizardmen-saurus-2025",
119
+ LIZARDMEN_SKINK_2025 = "lizardmen-skink-2025",
120
+ NECROMANTIC_HORROR_FLESH_GOLEM_2025 = "necromantic-horror-flesh-golem-2025",
121
+ NECROMANTIC_HORROR_GHOUL_2025 = "necromantic-horror-ghoul-2025",
122
+ NECROMANTIC_HORROR_WEREWOLF_2025 = "necromantic-horror-werewolf-2025",
123
+ NECROMANTIC_HORROR_WRAITH_2025 = "necromantic-horror-wraith-2025",
124
+ NECROMANTIC_HORROR_ZOMBIE_2025 = "necromantic-horror-zombie-2025",
125
+ NORSE_BERSERKER_2025 = "norse-berserker-2025",
126
+ NORSE_RAIDER_2025 = "norse-raider-2025",
127
+ NORSE_ULFWERNER_2025 = "norse-ulfwerner-2025",
128
+ NORSE_VALKYRIE_2025 = "norse-valkyrie-2025",
129
+ NORSE_YHETEE_2025 = "norse-yhetee-2025",
130
+ NURGLE_BLOATER_2025 = "nurgle-bloater-2025",
131
+ NURGLE_PESTIGOR_2025 = "nurgle-pestigor-2025",
132
+ NURGLE_ROTSPAWN_2025 = "nurgle-rotspawn-2025",
133
+ NURGLE_ROTTER_2025 = "nurgle-rotter-2025",
134
+ ORC_BIG_UN_2025 = "orc-big-un-2025",
135
+ ORC_BLITZER_2025 = "orc-blitzer-2025",
136
+ ORC_LINEMAN_2025 = "orc-lineman-2025",
137
+ ORC_THROWER_2025 = "orc-thrower-2025",
138
+ ORC_TROLL_2025 = "orc-troll-2025",
139
+ SHAMBLING_UNDEAD_GHOUL_2025 = "shambling-undead-ghoul-2025",
140
+ SHAMBLING_UNDEAD_MUMMY_2025 = "shambling-undead-mummy-2025",
141
+ SHAMBLING_UNDEAD_SKELETON_2025 = "shambling-undead-skeleton-2025",
142
+ SHAMBLING_UNDEAD_WIGHT_2025 = "shambling-undead-wight-2025",
143
+ SHAMBLING_UNDEAD_ZOMBIE_2025 = "shambling-undead-zombie-2025",
144
+ SKAVEN_BLITZER_2025 = "skaven-blitzer-2025",
145
+ SKAVEN_CLANRAT_2025 = "skaven-clanrat-2025",
146
+ SKAVEN_GUTTER_2025 = "skaven-gutter-2025",
147
+ SKAVEN_RAT_OGRE_2025 = "skaven-rat-ogre-2025",
148
+ SKAVEN_THROWER_2025 = "skaven-thrower-2025",
149
+ SLANN_BLITZER_2025 = "slann-blitzer-2025",
150
+ SLANN_CATCHER_2025 = "slann-catcher-2025",
151
+ SLANN_KROXIGOR_2025 = "slann-kroxigor-2025",
152
+ SLANN_LINEMAN_2025 = "slann-lineman-2025",
153
+ SNOTLING_HOPPA_2025 = "snotling-hoppa-2025",
154
+ SNOTLING_LINEMAN_2025 = "snotling-lineman-2025",
155
+ SNOTLING_PUMP_WAGON_2025 = "snotling-pump-wagon-2025",
156
+ SNOTLING_RUNNA_2025 = "snotling-runna-2025",
157
+ SNOTLING_TROLL_2025 = "snotling-troll-2025",
158
+ VAMPIRE_BLITZER_2025 = "vampire-blitzer-2025",
159
+ VAMPIRE_RUNNER_2025 = "vampire-runner-2025",
160
+ VAMPIRE_THRALL_2025 = "vampire-thrall-2025",
161
+ VAMPIRE_THROWER_2025 = "vampire-thrower-2025",
162
+ VAMPIRE_VARGHEIST_2025 = "vampire-vargheist-2025",
163
+ WOOD_ELF_CATCHER_2025 = "wood-elf-catcher-2025",
164
+ WOOD_ELF_LINEMAN_2025 = "wood-elf-lineman-2025",
165
+ WOOD_ELF_THROWER_2025 = "wood-elf-thrower-2025",
166
+ WOOD_ELF_WARDANCER_2025 = "wood-elf-wardancer-2025"
167
+ }
168
+ declare enum CAREER_VERSION {
169
+ V6 = "v6",
170
+ V2020 = "v2020",
171
+ V2025 = "v2025"
172
+ }
173
+ export type Career = {
174
+ MA: number;
175
+ ST: number;
176
+ AG: number;
177
+ PA: number;
178
+ AV: number;
179
+ normal: string;
180
+ double: string;
181
+ normalCoach: string;
182
+ icons: string[];
183
+ skills: (SKILL_NAMES | [SKILL_NAMES, number])[];
184
+ avatars: AVATAR[];
185
+ badge: RACE;
186
+ range: number;
187
+ cost: number;
188
+ hasSprite?: boolean;
189
+ version: CAREER_VERSION;
190
+ };
191
+ declare const getCareers: () => Record<CAREER_ID, Career>;
192
+ export { AVATAR, CAREER_ID, CAREER_VERSION, getCareers, RACE };