@alpaca-software/40kdc-data 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 (155) hide show
  1. package/README.md +78 -0
  2. package/dist/bundle-schemas.d.ts +3 -0
  3. package/dist/bundle-schemas.js +137 -0
  4. package/dist/cli.d.ts +1 -0
  5. package/dist/cli.js +31 -0
  6. package/dist/codegen-data.d.ts +1 -0
  7. package/dist/codegen-data.js +128 -0
  8. package/dist/commands/translate.d.ts +7 -0
  9. package/dist/commands/translate.js +238 -0
  10. package/dist/commands/validate-all.d.ts +3 -0
  11. package/dist/commands/validate-all.js +20 -0
  12. package/dist/commands/validate-core.d.ts +3 -0
  13. package/dist/commands/validate-core.js +12 -0
  14. package/dist/commands/validate-enrichment.d.ts +3 -0
  15. package/dist/commands/validate-enrichment.js +12 -0
  16. package/dist/convert-faction.d.ts +45 -0
  17. package/dist/convert-faction.js +479 -0
  18. package/dist/converters/configs/adepta-sororitas.d.ts +3 -0
  19. package/dist/converters/configs/adepta-sororitas.js +70 -0
  20. package/dist/converters/configs/adeptus-astartes.d.ts +3 -0
  21. package/dist/converters/configs/adeptus-astartes.js +74 -0
  22. package/dist/converters/configs/adeptus-custodes.d.ts +3 -0
  23. package/dist/converters/configs/adeptus-custodes.js +14 -0
  24. package/dist/converters/configs/adeptus-mechanicus.d.ts +3 -0
  25. package/dist/converters/configs/adeptus-mechanicus.js +51 -0
  26. package/dist/converters/configs/aeldari.d.ts +3 -0
  27. package/dist/converters/configs/aeldari.js +79 -0
  28. package/dist/converters/configs/agents-of-the-imperium.d.ts +3 -0
  29. package/dist/converters/configs/agents-of-the-imperium.js +57 -0
  30. package/dist/converters/configs/astra-militarum.d.ts +3 -0
  31. package/dist/converters/configs/astra-militarum.js +80 -0
  32. package/dist/converters/configs/black-templars.d.ts +3 -0
  33. package/dist/converters/configs/black-templars.js +16 -0
  34. package/dist/converters/configs/blood-angels.d.ts +3 -0
  35. package/dist/converters/configs/blood-angels.js +16 -0
  36. package/dist/converters/configs/chaos-daemons.d.ts +3 -0
  37. package/dist/converters/configs/chaos-daemons.js +40 -0
  38. package/dist/converters/configs/chaos-knights.d.ts +3 -0
  39. package/dist/converters/configs/chaos-knights.js +14 -0
  40. package/dist/converters/configs/chaos-space-marines.d.ts +3 -0
  41. package/dist/converters/configs/chaos-space-marines.js +95 -0
  42. package/dist/converters/configs/crimson-fists.d.ts +3 -0
  43. package/dist/converters/configs/crimson-fists.js +16 -0
  44. package/dist/converters/configs/dark-angels.d.ts +3 -0
  45. package/dist/converters/configs/dark-angels.js +16 -0
  46. package/dist/converters/configs/death-guard.d.ts +3 -0
  47. package/dist/converters/configs/death-guard.js +30 -0
  48. package/dist/converters/configs/deathwatch.d.ts +3 -0
  49. package/dist/converters/configs/deathwatch.js +16 -0
  50. package/dist/converters/configs/drukhari.d.ts +3 -0
  51. package/dist/converters/configs/drukhari.js +51 -0
  52. package/dist/converters/configs/emperors-children.d.ts +3 -0
  53. package/dist/converters/configs/emperors-children.js +38 -0
  54. package/dist/converters/configs/genestealer-cults.d.ts +3 -0
  55. package/dist/converters/configs/genestealer-cults.js +36 -0
  56. package/dist/converters/configs/grey-knights.d.ts +3 -0
  57. package/dist/converters/configs/grey-knights.js +39 -0
  58. package/dist/converters/configs/imperial-fists.d.ts +3 -0
  59. package/dist/converters/configs/imperial-fists.js +16 -0
  60. package/dist/converters/configs/imperial-knights.d.ts +3 -0
  61. package/dist/converters/configs/imperial-knights.js +14 -0
  62. package/dist/converters/configs/iron-hands.d.ts +3 -0
  63. package/dist/converters/configs/iron-hands.js +16 -0
  64. package/dist/converters/configs/leagues-of-votann.d.ts +3 -0
  65. package/dist/converters/configs/leagues-of-votann.js +32 -0
  66. package/dist/converters/configs/necrons.d.ts +3 -0
  67. package/dist/converters/configs/necrons.js +19 -0
  68. package/dist/converters/configs/orks.d.ts +3 -0
  69. package/dist/converters/configs/orks.js +71 -0
  70. package/dist/converters/configs/raven-guard.d.ts +3 -0
  71. package/dist/converters/configs/raven-guard.js +16 -0
  72. package/dist/converters/configs/salamanders.d.ts +3 -0
  73. package/dist/converters/configs/salamanders.js +16 -0
  74. package/dist/converters/configs/space-wolves.d.ts +3 -0
  75. package/dist/converters/configs/space-wolves.js +16 -0
  76. package/dist/converters/configs/tau-empire.d.ts +3 -0
  77. package/dist/converters/configs/tau-empire.js +44 -0
  78. package/dist/converters/configs/thousand-sons.d.ts +3 -0
  79. package/dist/converters/configs/thousand-sons.js +30 -0
  80. package/dist/converters/configs/tyranids.d.ts +3 -0
  81. package/dist/converters/configs/tyranids.js +27 -0
  82. package/dist/converters/configs/ultramarines.d.ts +3 -0
  83. package/dist/converters/configs/ultramarines.js +16 -0
  84. package/dist/converters/configs/white-scars.d.ts +3 -0
  85. package/dist/converters/configs/white-scars.js +16 -0
  86. package/dist/converters/configs/world-eaters.d.ts +3 -0
  87. package/dist/converters/configs/world-eaters.js +43 -0
  88. package/dist/converters/faction-config.d.ts +53 -0
  89. package/dist/converters/faction-config.js +22 -0
  90. package/dist/converters/id-generator.d.ts +14 -0
  91. package/dist/converters/id-generator.js +65 -0
  92. package/dist/converters/keyword-filter.d.ts +26 -0
  93. package/dist/converters/keyword-filter.js +78 -0
  94. package/dist/converters/stat-parser.d.ts +22 -0
  95. package/dist/converters/stat-parser.js +84 -0
  96. package/dist/converters/view-selector.d.ts +54 -0
  97. package/dist/converters/view-selector.js +96 -0
  98. package/dist/converters/weapon-dedup.d.ts +60 -0
  99. package/dist/converters/weapon-dedup.js +120 -0
  100. package/dist/data/bundle.generated.d.ts +3 -0
  101. package/dist/data/bundle.generated.js +3 -0
  102. package/dist/data/collection.d.ts +64 -0
  103. package/dist/data/collection.js +118 -0
  104. package/dist/data/dataset.d.ts +50 -0
  105. package/dist/data/dataset.js +134 -0
  106. package/dist/data/entities.d.ts +80 -0
  107. package/dist/data/entities.js +133 -0
  108. package/dist/data/index.d.ts +59 -0
  109. package/dist/data/index.js +57 -0
  110. package/dist/data/normalize.d.ts +29 -0
  111. package/dist/data/normalize.js +37 -0
  112. package/dist/data/types.d.ts +43 -0
  113. package/dist/data/types.js +25 -0
  114. package/dist/generated.d.ts +1084 -0
  115. package/dist/generated.js +2 -0
  116. package/dist/index.d.ts +3 -0
  117. package/dist/index.js +7 -0
  118. package/dist/known-support-10e.d.ts +31 -0
  119. package/dist/known-support-10e.js +113 -0
  120. package/dist/port-10e-faction.d.ts +52 -0
  121. package/dist/port-10e-faction.js +413 -0
  122. package/dist/report.d.ts +3 -0
  123. package/dist/report.js +31 -0
  124. package/dist/schema-loader.d.ts +15 -0
  125. package/dist/schema-loader.js +79 -0
  126. package/dist/validate.d.ts +21 -0
  127. package/dist/validate.js +124 -0
  128. package/package.json +77 -0
  129. package/schemas/$defs/common.schema.json +86 -0
  130. package/schemas/$defs/game-version-ref.schema.json +11 -0
  131. package/schemas/core/deployment-pattern.schema.json +102 -0
  132. package/schemas/core/detachment.schema.json +56 -0
  133. package/schemas/core/enhancement.schema.json +46 -0
  134. package/schemas/core/faction.schema.json +29 -0
  135. package/schemas/core/force-disposition.schema.json +22 -0
  136. package/schemas/core/game-version.schema.json +20 -0
  137. package/schemas/core/leader-attachment.schema.json +18 -0
  138. package/schemas/core/mission-matchup.schema.json +25 -0
  139. package/schemas/core/mission.schema.json +42 -0
  140. package/schemas/core/roster.schema.json +203 -0
  141. package/schemas/core/secondary-card.schema.json +195 -0
  142. package/schemas/core/stratagem.schema.json +58 -0
  143. package/schemas/core/terrain-layout.schema.json +135 -0
  144. package/schemas/core/unit-composition.schema.json +38 -0
  145. package/schemas/core/unit.schema.json +125 -0
  146. package/schemas/core/wargear-option.schema.json +47 -0
  147. package/schemas/core/weapon.schema.json +56 -0
  148. package/schemas/enrichment/ability-dsl/ability.schema.json +60 -0
  149. package/schemas/enrichment/ability-dsl/condition.schema.json +48 -0
  150. package/schemas/enrichment/ability-dsl/effect.schema.json +145 -0
  151. package/schemas/enrichment/ability-dsl/scope.schema.json +12 -0
  152. package/schemas/enrichment/interaction-flag.schema.json +17 -0
  153. package/schemas/enrichment/phase-mapping.schema.json +14 -0
  154. package/schemas/enrichment/resource-pool.schema.json +36 -0
  155. package/schemas/enrichment/timing-flag.schema.json +28 -0
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const crimsonFists = {
3
+ sourceFactionId: "SM",
4
+ factionId: "crimson-fists",
5
+ factionName: "Crimson Fists",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Crimson Fists"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Liberator Assault Group"],
14
+ };
15
+ registerFaction(crimsonFists);
16
+ export default crimsonFists;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const darkAngels: FactionConfig;
3
+ export default darkAngels;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const darkAngels = {
3
+ sourceFactionId: "SM",
4
+ factionId: "dark-angels",
5
+ factionName: "Dark Angels",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Dark Angels"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Inner Circle Task Force", "Unforgiven Task Force", "Lion\u2019s Blade Task Force", "Wrath of the Rock"],
14
+ };
15
+ registerFaction(darkAngels);
16
+ export default darkAngels;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const deathGuard: FactionConfig;
3
+ export default deathGuard;
@@ -0,0 +1,30 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const deathGuard = {
3
+ sourceFactionId: "DG",
4
+ factionId: "death-guard",
5
+ factionName: "Death Guard",
6
+ factionAbilityName: "Nurgle\u2019s Gift (Aura)",
7
+ factionRuleId: "nurgles-gift",
8
+ factionKeywords: ["Chaos", "Nurgle", "Death Guard"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "plague-marines": [
13
+ { name: "Plague Champion", profile_name: "Plague Marine", min: 1, max: 1, default_weapon_ids: ["bolt-pistol", "plague-knives"], is_leader_model: true },
14
+ { name: "Plague Marine", min: 4, max: 9, default_weapon_ids: ["boltgun", "plague-knives"], is_leader_model: false },
15
+ ],
16
+ "blightlord-terminators": [
17
+ { name: "Blightlord Champion", profile_name: "Blightlord Terminator", min: 1, max: 1, default_weapon_ids: ["combi-bolter", "bubotic-blade"], is_leader_model: true },
18
+ { name: "Blightlord Terminator", min: 2, max: 9, default_weapon_ids: ["combi-bolter", "bubotic-blade"], is_leader_model: false },
19
+ ],
20
+ "deathshroud-terminators": [
21
+ { name: "Deathshroud Champion", profile_name: "Deathshroud Terminator", min: 1, max: 1, default_weapon_ids: ["plaguespurt-gauntlet", "manreaper-strike"], is_leader_model: true },
22
+ { name: "Deathshroud Terminator", min: 2, max: 5, default_weapon_ids: ["plaguespurt-gauntlet", "manreaper-strike"], is_leader_model: false },
23
+ ],
24
+ "chaos-spawn": [
25
+ { name: "Chaos Spawn", min: 2, max: 2, default_weapon_ids: ["hideous-mutations"], is_leader_model: false },
26
+ ],
27
+ },
28
+ };
29
+ registerFaction(deathGuard);
30
+ export default deathGuard;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const deathwatch: FactionConfig;
3
+ export default deathwatch;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const deathwatch = {
3
+ sourceFactionId: "SM",
4
+ factionId: "deathwatch",
5
+ factionName: "Deathwatch",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "mission-tactics",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Deathwatch"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Black Spear Task Force", "Shadowmark Talon"],
14
+ };
15
+ registerFaction(deathwatch);
16
+ export default deathwatch;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const drukhari: FactionConfig;
3
+ export default drukhari;
@@ -0,0 +1,51 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const drukhari = {
3
+ sourceFactionId: "DRU",
4
+ factionId: "drukhari",
5
+ factionName: "Drukhari",
6
+ factionAbilityName: "Power from Pain",
7
+ factionRuleId: "power-from-pain",
8
+ factionKeywords: ["Aeldari", "Drukhari"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "incubi": [
13
+ { name: "Klaivex", min: 1, max: 1, default_weapon_ids: ["demiklaives-single-blade"], is_leader_model: true },
14
+ { name: "Incubi", min: 4, max: 9, default_weapon_ids: ["klaive"], is_leader_model: false },
15
+ ],
16
+ "kabalite-warriors": [
17
+ { name: "Sybarite", profile_name: "Kabalite Warrior", min: 1, max: 1, default_weapon_ids: ["splinter-pistol", "power-weapon"], is_leader_model: true },
18
+ { name: "Kabalite Warrior", min: 9, max: 9, default_weapon_ids: ["splinter-rifle", "close-combat-weapon"], is_leader_model: false },
19
+ ],
20
+ "wyches": [
21
+ { name: "Hekatrix", profile_name: "Wych", min: 1, max: 1, default_weapon_ids: ["splinter-pistol", "power-weapon"], is_leader_model: true },
22
+ { name: "Wych", min: 9, max: 9, default_weapon_ids: ["splinter-pistol", "hekatarii-blade"], is_leader_model: false },
23
+ ],
24
+ "wracks": [
25
+ { name: "Acothyst", profile_name: "Wrack", min: 1, max: 1, default_weapon_ids: ["stinger-pistol", "power-weapon"], is_leader_model: true },
26
+ { name: "Wrack", min: 4, max: 9, default_weapon_ids: ["twin-torturers-tools"], is_leader_model: false },
27
+ ],
28
+ "hellions": [
29
+ { name: "Helliarch", profile_name: "Hellion", min: 1, max: 1, default_weapon_ids: ["splinter-pistol", "stunclaw"], is_leader_model: true },
30
+ { name: "Hellion", min: 4, max: 9, default_weapon_ids: ["splinter-pods", "hellglaive"], is_leader_model: false },
31
+ ],
32
+ "reavers": [
33
+ { name: "Arena Champion", profile_name: "Reaver", min: 1, max: 1, default_weapon_ids: ["splinter-pistol", "bladevanes"], is_leader_model: true },
34
+ { name: "Reaver", min: 2, max: 5, default_weapon_ids: ["splinter-pistol", "bladevanes"], is_leader_model: false },
35
+ ],
36
+ "scourges-with-heavy-weapons": [
37
+ { name: "Solarite", profile_name: "Scourge", min: 1, max: 1, default_weapon_ids: ["blast-pistol", "power-weapon"], is_leader_model: true },
38
+ { name: "Scourge", min: 4, max: 4, default_weapon_ids: ["shardcarbine", "close-combat-weapon"], is_leader_model: false },
39
+ ],
40
+ "scourges-with-shardcarbines": [
41
+ { name: "Solarite", profile_name: "Scourge", min: 1, max: 1, default_weapon_ids: ["blast-pistol", "power-weapon"], is_leader_model: true },
42
+ { name: "Scourge", min: 4, max: 4, default_weapon_ids: ["shardcarbine", "close-combat-weapon"], is_leader_model: false },
43
+ ],
44
+ "mandrakes": [
45
+ { name: "Nightfiend", profile_name: "Mandrake", min: 1, max: 1, default_weapon_ids: ["baleblast", "glimmersteel-blade"], is_leader_model: true },
46
+ { name: "Mandrake", min: 4, max: 9, default_weapon_ids: ["baleblast", "glimmersteel-blade"], is_leader_model: false },
47
+ ],
48
+ },
49
+ };
50
+ registerFaction(drukhari);
51
+ export default drukhari;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const emperorsChildren: FactionConfig;
3
+ export default emperorsChildren;
@@ -0,0 +1,38 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const emperorsChildren = {
3
+ sourceFactionId: "EC",
4
+ factionId: "emperors-children",
5
+ factionName: "Emperor\u2019s Children",
6
+ factionAbilityName: "Thrill Seekers",
7
+ factionRuleId: "thrill-seekers",
8
+ factionKeywords: ["Chaos", "Slaanesh", "Emperor\u2019s Children"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "noise-marines": [
13
+ { name: "Noise Champion", profile_name: "Noise Marine", min: 1, max: 1, default_weapon_ids: ["sonic-blaster", "close-combat-weapon"], is_leader_model: true },
14
+ { name: "Noise Marine", min: 5, max: 5, default_weapon_ids: ["sonic-blaster", "close-combat-weapon"], is_leader_model: false },
15
+ ],
16
+ "tormentors": [
17
+ { name: "Obsessionist", profile_name: "Tormentor", min: 1, max: 1, default_weapon_ids: ["bolt-pistol", "power-sword"], is_leader_model: true },
18
+ { name: "Tormentor", min: 4, max: 9, default_weapon_ids: ["boltgun", "close-combat-weapon"], is_leader_model: false },
19
+ ],
20
+ "infractors": [
21
+ { name: "Obsessionist", profile_name: "Infractor", min: 1, max: 1, default_weapon_ids: ["bolt-pistol", "power-sword"], is_leader_model: true },
22
+ { name: "Infractor", min: 4, max: 9, default_weapon_ids: ["bolt-pistol", "duelling-sabre"], is_leader_model: false },
23
+ ],
24
+ "flawless-blades": [
25
+ { name: "Flawless Champion", profile_name: "Flawless Blades", min: 1, max: 1, default_weapon_ids: ["bolt-pistol", "blissblade"], is_leader_model: true },
26
+ { name: "Flawless Blade", profile_name: "Flawless Blades", min: 2, max: 5, default_weapon_ids: ["bolt-pistol", "blissblade"], is_leader_model: false },
27
+ ],
28
+ "chaos-terminators": [
29
+ { name: "Terminator Champion", profile_name: "Chaos Terminator", min: 1, max: 1, default_weapon_ids: ["combi-bolter", "accursed-weapon"], is_leader_model: true },
30
+ { name: "Chaos Terminator", min: 4, max: 4, default_weapon_ids: ["combi-bolter", "accursed-weapon"], is_leader_model: false },
31
+ ],
32
+ "chaos-spawn": [
33
+ { name: "Chaos Spawn", min: 2, max: 2, default_weapon_ids: ["hideous-mutations"], is_leader_model: false },
34
+ ],
35
+ },
36
+ };
37
+ registerFaction(emperorsChildren);
38
+ export default emperorsChildren;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const genestealerCults: FactionConfig;
3
+ export default genestealerCults;
@@ -0,0 +1,36 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const genestealerCults = {
3
+ sourceFactionId: "GC",
4
+ factionId: "genestealer-cults",
5
+ factionName: "Genestealer Cults",
6
+ factionAbilityName: "Cult Ambush",
7
+ factionRuleId: "cult-ambush",
8
+ factionKeywords: ["Genestealer Cults"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "acolyte-hybrids-with-autopistols": [
13
+ { name: "Acolyte Leader", profile_name: "Acolyte Hybrid", min: 1, max: 1, default_weapon_ids: ["leaders-cult-weapons"], is_leader_model: true },
14
+ { name: "Acolyte Hybrid", min: 4, max: 9, default_weapon_ids: ["autopistol", "cult-claws-and-knife"], is_leader_model: false },
15
+ ],
16
+ "acolyte-hybrids-with-hand-flamers": [
17
+ { name: "Acolyte Leader", profile_name: "Acolyte Hybrid", min: 1, max: 1, default_weapon_ids: ["leaders-cult-weapons"], is_leader_model: true },
18
+ { name: "Acolyte Hybrid", min: 4, max: 9, default_weapon_ids: ["hand-flamer", "cult-claws-and-knife"], is_leader_model: false },
19
+ ],
20
+ "hybrid-metamorphs": [
21
+ { name: "Metamorph Leader", profile_name: "Hybrid Metamorph", min: 1, max: 1, default_weapon_ids: ["leaders-cult-weapons"], is_leader_model: true },
22
+ { name: "Hybrid Metamorph", min: 4, max: 9, default_weapon_ids: ["autopistol", "metamorph-mutations-strike"], is_leader_model: false },
23
+ ],
24
+ "neophyte-hybrids": [
25
+ { name: "Neophyte Leader", profile_name: "Neophyte Hybrid", min: 1, max: 1, default_weapon_ids: ["anointed-pistol", "power-weapon"], is_leader_model: true },
26
+ { name: "Neophyte Hybrid", min: 9, max: 19, default_weapon_ids: ["hybrid-firearm", "close-combat-weapon"], is_leader_model: false },
27
+ ],
28
+ "atalan-jackals": [
29
+ { name: "Atalan Leader", profile_name: "Atalan Jackal", min: 1, max: 1, default_weapon_ids: ["atalan-small-arms", "atalan-power-weapon"], is_leader_model: true },
30
+ { name: "Atalan Jackal", min: 3, max: 7, default_weapon_ids: ["atalan-small-arms", "close-combat-weapon"], is_leader_model: false },
31
+ { name: "Atalan Wolfquad", min: 1, max: 2, default_weapon_ids: ["heavy-stubber", "close-combat-weapon"], is_leader_model: false },
32
+ ],
33
+ },
34
+ };
35
+ registerFaction(genestealerCults);
36
+ export default genestealerCults;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const greyKnights: FactionConfig;
3
+ export default greyKnights;
@@ -0,0 +1,39 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const greyKnights = {
3
+ sourceFactionId: "GK",
4
+ factionId: "grey-knights",
5
+ factionName: "Grey Knights",
6
+ factionAbilityName: "Gate of Infinity",
7
+ factionRuleId: "gate-of-infinity",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Grey Knights"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "brotherhood-terminator-squad": [
13
+ { name: "Justicar", profile_name: "Terminator", min: 1, max: 1, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: true },
14
+ { name: "Terminator", min: 3, max: 9, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: false },
15
+ ],
16
+ "interceptor-squad": [
17
+ { name: "Justicar", profile_name: "Interceptor", min: 1, max: 1, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: true },
18
+ { name: "Interceptor", min: 4, max: 9, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: false },
19
+ ],
20
+ "paladin-squad": [
21
+ { name: "Paragon", profile_name: "Paladin", min: 1, max: 1, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: true },
22
+ { name: "Paladin", min: 3, max: 9, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: false },
23
+ ],
24
+ "purgation-squad": [
25
+ { name: "Justicar", profile_name: "Purgator", min: 1, max: 1, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: true },
26
+ { name: "Purgator", min: 4, max: 9, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: false },
27
+ ],
28
+ "purifier-squad": [
29
+ { name: "Knight of the Flame", profile_name: "Purifier", min: 1, max: 1, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: true },
30
+ { name: "Purifier", min: 4, max: 9, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: false },
31
+ ],
32
+ "strike-squad": [
33
+ { name: "Justicar", profile_name: "Grey Knight", min: 1, max: 1, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: true },
34
+ { name: "Grey Knight", min: 4, max: 9, default_weapon_ids: ["storm-bolter", "nemesis-force-weapon"], is_leader_model: false },
35
+ ],
36
+ },
37
+ };
38
+ registerFaction(greyKnights);
39
+ export default greyKnights;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const imperialFists: FactionConfig;
3
+ export default imperialFists;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const imperialFists = {
3
+ sourceFactionId: "SM",
4
+ factionId: "imperial-fists",
5
+ factionName: "Imperial Fists",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Imperial Fists"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Bastion Task Force", "Emperor\u2019s Shield"],
14
+ };
15
+ registerFaction(imperialFists);
16
+ export default imperialFists;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const imperialKnights: FactionConfig;
3
+ export default imperialKnights;
@@ -0,0 +1,14 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const imperialKnights = {
3
+ sourceFactionId: "QI",
4
+ factionId: "imperial-knights",
5
+ factionName: "Imperial Knights",
6
+ factionAbilityName: "Code Chivalric",
7
+ factionRuleId: "code-chivalric",
8
+ factionKeywords: ["Imperium", "Imperial Knights"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ };
13
+ registerFaction(imperialKnights);
14
+ export default imperialKnights;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const ironHands: FactionConfig;
3
+ export default ironHands;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const ironHands = {
3
+ sourceFactionId: "SM",
4
+ factionId: "iron-hands",
5
+ factionName: "Iron Hands",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Iron Hands"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Hammer of Avernii"],
14
+ };
15
+ registerFaction(ironHands);
16
+ export default ironHands;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const leaguesOfVotann: FactionConfig;
3
+ export default leaguesOfVotann;
@@ -0,0 +1,32 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const leaguesOfVotann = {
3
+ sourceFactionId: "LoV",
4
+ factionId: "leagues-of-votann",
5
+ factionName: "Leagues of Votann",
6
+ factionAbilityName: "Prioritised Efficiency",
7
+ factionRuleId: "prioritised-efficiency",
8
+ factionKeywords: ["Leagues of Votann"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "hearthkyn-warriors": [
13
+ { name: "Theyn", profile_name: "Hearthkyn Warrior", min: 1, max: 1, default_weapon_ids: ["theyns-pistol", "theyns-melee-weapon"], is_leader_model: true },
14
+ { name: "Hearthkyn Warrior", min: 9, max: 9, default_weapon_ids: ["autoch-pattern-bolt-pistol", "close-combat-weapon"], is_leader_model: false },
15
+ ],
16
+ "einhyr-hearthguard": [
17
+ { name: "Hesyr", profile_name: "Einhyr Hearthguard", min: 1, max: 1, default_weapon_ids: ["etacarn-plasma-gun", "concussion-gauntlet"], is_leader_model: true },
18
+ { name: "Einhyr Hearthguard", min: 4, max: 9, default_weapon_ids: ["etacarn-plasma-gun", "concussion-gauntlet"], is_leader_model: false },
19
+ ],
20
+ "brokhyr-iron-master": [
21
+ { name: "Brôkhyr Iron-master", min: 1, max: 1, default_weapon_ids: ["graviton-rifle", "graviton-hammer"], is_leader_model: true },
22
+ { name: "Ironkin Assistant", min: 3, max: 3, default_weapon_ids: ["las-beam-cutter", "close-combat-weapon"], is_leader_model: false },
23
+ { name: "E-COG", min: 1, max: 1, default_weapon_ids: ["plasma-torch", "close-combat-weapon"], is_leader_model: false },
24
+ ],
25
+ "grimnyr": [
26
+ { name: "Grimnyr", min: 1, max: 1, default_weapon_ids: ["ancestral-wrath-witchfire", "ancestral-ward-stave"], is_leader_model: true },
27
+ { name: "CORV", min: 2, max: 2, default_weapon_ids: ["close-combat-weapon"], is_leader_model: false },
28
+ ],
29
+ },
30
+ };
31
+ registerFaction(leaguesOfVotann);
32
+ export default leaguesOfVotann;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const necrons: FactionConfig;
3
+ export default necrons;
@@ -0,0 +1,19 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const necrons = {
3
+ sourceFactionId: "NEC",
4
+ factionId: "necrons",
5
+ factionName: "Necrons",
6
+ factionAbilityName: "Reanimation Protocols",
7
+ factionRuleId: "reanimation-protocols",
8
+ factionKeywords: ["Necrons"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "the-silent-king": [
13
+ { name: "Szarekh", min: 1, max: 1, default_weapon_ids: ["sceptre-of-eternal-glory"], is_leader_model: true },
14
+ { name: "Triarchal Menhir", min: 2, max: 2, default_weapon_ids: ["annihilator-beam"], is_leader_model: false },
15
+ ],
16
+ },
17
+ };
18
+ registerFaction(necrons);
19
+ export default necrons;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const orks: FactionConfig;
3
+ export default orks;
@@ -0,0 +1,71 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const orks = {
3
+ sourceFactionId: "ORK",
4
+ factionId: "orks",
5
+ factionName: "Orks",
6
+ factionAbilityName: "Waaagh!",
7
+ factionRuleId: "waaagh",
8
+ factionKeywords: ["Orks"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "boyz": [
13
+ { name: "Boss Nob", min: 1, max: 1, default_weapon_ids: ["slugga", "choppa"], is_leader_model: true },
14
+ { name: "Boy", min: 9, max: 19, default_weapon_ids: ["slugga", "choppa"], is_leader_model: false },
15
+ ],
16
+ "beast-snagga-boyz": [
17
+ { name: "Beast Snagga Nob", min: 1, max: 1, default_weapon_ids: ["slugga", "choppa"], is_leader_model: true },
18
+ { name: "Beast Snagga Boy", min: 9, max: 19, default_weapon_ids: ["slugga", "choppa"], is_leader_model: false },
19
+ ],
20
+ "kommandos": [
21
+ { name: "Boss Nob", min: 1, max: 1, default_weapon_ids: ["slugga", "power-klaw"], is_leader_model: true },
22
+ { name: "Kommando", min: 9, max: 9, default_weapon_ids: ["slugga", "choppa"], is_leader_model: false },
23
+ ],
24
+ "gretchin": [
25
+ { name: "Runtherd", min: 1, max: 1, default_weapon_ids: ["slugga", "close-combat-weapon"], is_leader_model: true },
26
+ { name: "Gretchin", min: 10, max: 21, default_weapon_ids: ["grot-blasta", "close-combat-weapon"], is_leader_model: false },
27
+ ],
28
+ "stormboyz": [
29
+ { name: "Boss Nob", min: 1, max: 1, default_weapon_ids: ["slugga", "choppa"], is_leader_model: true },
30
+ { name: "Stormboy", min: 4, max: 9, default_weapon_ids: ["slugga", "choppa"], is_leader_model: false },
31
+ ],
32
+ "tankbustas": [
33
+ { name: "Boss Nob", min: 1, max: 1, default_weapon_ids: ["rokkit-launcha", "close-combat-weapon"], is_leader_model: true },
34
+ { name: "Tankbusta", min: 5, max: 5, default_weapon_ids: ["rokkit-launcha", "close-combat-weapon"], is_leader_model: false },
35
+ ],
36
+ "warbikers": [
37
+ { name: "Boss Nob on Warbike", min: 1, max: 1, default_weapon_ids: ["slugga", "choppa"], is_leader_model: true },
38
+ { name: "Warbiker", min: 2, max: 5, default_weapon_ids: ["dakkagun", "close-combat-weapon"], is_leader_model: false },
39
+ ],
40
+ "squighog-boyz": [
41
+ { name: "Nob on Smasha Squig", min: 1, max: 1, default_weapon_ids: ["slugga", "big-choppa"], is_leader_model: true },
42
+ { name: "Squighog Boy", min: 3, max: 7, default_weapon_ids: ["saddlegit-weapons", "squighog-jaws"], is_leader_model: false },
43
+ ],
44
+ "ghazghkull-thraka": [
45
+ { name: "Ghazghkull Thraka", min: 1, max: 1, default_weapon_ids: ["gork-klaw-and-mork-klaw"], is_leader_model: true },
46
+ { name: "Makari", min: 1, max: 1, default_weapon_ids: ["close-combat-weapon"], is_leader_model: false },
47
+ ],
48
+ "meganobz": [
49
+ { name: "Meganob with Mega-Shoota", profile_name: "Meganob", min: 1, max: 1, default_weapon_ids: ["kombi-weapon", "power-klaw"], is_leader_model: true },
50
+ { name: "Meganob", min: 1, max: 5, default_weapon_ids: ["kombi-weapon", "power-klaw"], is_leader_model: false },
51
+ ],
52
+ "nobz": [
53
+ { name: "Boss Nob", profile_name: "Nob", min: 1, max: 1, default_weapon_ids: ["slugga", "power-klaw"], is_leader_model: true },
54
+ { name: "Nob", min: 4, max: 9, default_weapon_ids: ["slugga", "choppa"], is_leader_model: false },
55
+ ],
56
+ "burna-boyz": [
57
+ { name: "Spanner", profile_name: "Burna Boy", min: 1, max: 1, default_weapon_ids: ["kustom-mega-blasta", "close-combat-weapon"], is_leader_model: true },
58
+ { name: "Burna Boy", min: 4, max: 9, default_weapon_ids: ["burna", "close-combat-weapon"], is_leader_model: false },
59
+ ],
60
+ "lootas": [
61
+ { name: "Spanner", profile_name: "Loota", min: 1, max: 1, default_weapon_ids: ["kustom-mega-blasta", "close-combat-weapon"], is_leader_model: true },
62
+ { name: "Loota", min: 4, max: 9, default_weapon_ids: ["deffgun", "close-combat-weapon"], is_leader_model: false },
63
+ ],
64
+ "flash-gitz": [
65
+ { name: "Kaptin", profile_name: "Flash Git", min: 1, max: 1, default_weapon_ids: ["snazzgun", "choppa"], is_leader_model: true },
66
+ { name: "Flash Git", min: 4, max: 9, default_weapon_ids: ["snazzgun", "choppa"], is_leader_model: false },
67
+ ],
68
+ },
69
+ };
70
+ registerFaction(orks);
71
+ export default orks;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const ravenGuard: FactionConfig;
3
+ export default ravenGuard;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const ravenGuard = {
3
+ sourceFactionId: "SM",
4
+ factionId: "raven-guard",
5
+ factionName: "Raven Guard",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Raven Guard"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Company of Hunters"],
14
+ };
15
+ registerFaction(ravenGuard);
16
+ export default ravenGuard;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const salamanders: FactionConfig;
3
+ export default salamanders;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const salamanders = {
3
+ sourceFactionId: "SM",
4
+ factionId: "salamanders",
5
+ factionName: "Salamanders",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Salamanders"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Forgefather\u2019s Seekers"],
14
+ };
15
+ registerFaction(salamanders);
16
+ export default salamanders;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const spaceWolves: FactionConfig;
3
+ export default spaceWolves;
@@ -0,0 +1,16 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const spaceWolves = {
3
+ sourceFactionId: "SM",
4
+ factionId: "space-wolves",
5
+ factionName: "Space Wolves",
6
+ factionAbilityName: "Oath of Moment",
7
+ factionRuleId: "oath-of-moment",
8
+ factionKeywords: ["Imperium", "Adeptus Astartes", "Space Wolves"],
9
+ parentFactionId: "adeptus-astartes",
10
+ aliases: [],
11
+ compositionOverrides: {},
12
+ skipUnits: true,
13
+ detachmentFilter: ["Champions of Fenris", "Saga of the Beastslayer", "Saga of the Bold", "Saga of the Great Wolf", "Saga of the Hunter"],
14
+ };
15
+ registerFaction(spaceWolves);
16
+ export default spaceWolves;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const tauEmpire: FactionConfig;
3
+ export default tauEmpire;
@@ -0,0 +1,44 @@
1
+ import { registerFaction } from "../faction-config.js";
2
+ const tauEmpire = {
3
+ sourceFactionId: "TAU",
4
+ factionId: "tau-empire",
5
+ factionName: "T\u2019au Empire",
6
+ factionAbilityName: "For the Greater Good",
7
+ factionRuleId: "for-the-greater-good",
8
+ factionKeywords: ["T\u2019au Empire"],
9
+ parentFactionId: null,
10
+ aliases: [],
11
+ compositionOverrides: {
12
+ "breacher-team": [
13
+ { name: "Fire Warrior Shas\u2019ui", profile_name: "Fire Warrior", min: 1, max: 1, default_weapon_ids: ["pulse-blaster", "pulse-pistol", "close-combat-weapon"], is_leader_model: true },
14
+ { name: "Fire Warrior", min: 9, max: 9, default_weapon_ids: ["pulse-blaster", "pulse-pistol", "close-combat-weapon"], is_leader_model: false },
15
+ ],
16
+ "strike-team": [
17
+ { name: "Fire Warrior Shas\u2019ui", profile_name: "Fire Warrior", min: 1, max: 1, default_weapon_ids: ["pulse-pistol", "pulse-rifle", "close-combat-weapon"], is_leader_model: true },
18
+ { name: "Fire Warrior", min: 9, max: 9, default_weapon_ids: ["pulse-pistol", "pulse-rifle", "close-combat-weapon"], is_leader_model: false },
19
+ ],
20
+ "pathfinder-team": [
21
+ { name: "Pathfinder Shas\u2019ui", profile_name: "Pathfinder", min: 1, max: 1, default_weapon_ids: ["pulse-carbine", "close-combat-weapon"], is_leader_model: true },
22
+ { name: "Pathfinder", min: 9, max: 9, default_weapon_ids: ["pulse-carbine", "close-combat-weapon"], is_leader_model: false },
23
+ ],
24
+ "kroot-carnivores": [
25
+ { name: "Kroot Trail Shaper", profile_name: "Kroot Carnivore", min: 1, max: 1, default_weapon_ids: ["kroot-rifle", "close-combat-weapon"], is_leader_model: true },
26
+ { name: "Kroot Carnivore", min: 9, max: 19, default_weapon_ids: ["kroot-rifle", "close-combat-weapon"], is_leader_model: false },
27
+ ],
28
+ "kroot-farstalkers": [
29
+ { name: "Kill-Broker", profile_name: "Kroot Farstalker", min: 1, max: 1, default_weapon_ids: ["farstalker-firearm", "close-combat-weapon"], is_leader_model: true },
30
+ { name: "Kroot Farstalker", min: 10, max: 10, default_weapon_ids: ["farstalker-firearm", "close-combat-weapon"], is_leader_model: false },
31
+ { name: "Kroot Hound", min: 1, max: 1, default_weapon_ids: ["ripping-fangs"], is_leader_model: false },
32
+ ],
33
+ "stealth-battlesuits": [
34
+ { name: "Stealth Shas\u2019vre", profile_name: "Stealth Battlesuit", min: 1, max: 1, default_weapon_ids: ["burst-cannon", "battlesuit-fists"], is_leader_model: true },
35
+ { name: "Stealth Battlesuit", min: 4, max: 4, default_weapon_ids: ["burst-cannon", "battlesuit-fists"], is_leader_model: false },
36
+ ],
37
+ "vespid-stingwings": [
38
+ { name: "Vespid Strain Leader", profile_name: "Vespid Stingwing", min: 1, max: 1, default_weapon_ids: ["neutron-blaster", "stingwing-claws"], is_leader_model: true },
39
+ { name: "Vespid Stingwing", min: 4, max: 9, default_weapon_ids: ["neutron-blaster", "stingwing-claws"], is_leader_model: false },
40
+ ],
41
+ },
42
+ };
43
+ registerFaction(tauEmpire);
44
+ export default tauEmpire;
@@ -0,0 +1,3 @@
1
+ import { type FactionConfig } from "../faction-config.js";
2
+ declare const thousandSons: FactionConfig;
3
+ export default thousandSons;