@v12-engine/create 0.1.0 → 0.4.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 (263) hide show
  1. package/README.md +4 -1
  2. package/base/_gitignore +5 -0
  3. package/base/package.json +3 -3
  4. package/base/src/main.ts +36 -10
  5. package/base/src/navigation.worker.ts +7 -0
  6. package/base/vite.config.ts +24 -2
  7. package/cli.mjs +21 -6
  8. package/index.mjs +27 -7
  9. package/layers/desktop/electron/app.mjs +237 -0
  10. package/layers/desktop/electron/config.mjs +16 -0
  11. package/layers/desktop/electron/dev.mjs +63 -0
  12. package/layers/desktop/electron/files.mjs +86 -0
  13. package/layers/desktop/electron/icons/icon.icns +0 -0
  14. package/layers/desktop/electron/icons/icon.png +0 -0
  15. package/layers/desktop/electron/main.mjs +12 -0
  16. package/layers/desktop/electron/package.mjs +75 -0
  17. package/layers/desktop/electron/preload.cjs +41 -0
  18. package/layers/desktop/electron/presentation.m +87 -0
  19. package/layers/desktop/electron/serve.mjs +76 -0
  20. package/layers/desktop/electron/tools.mjs +63 -0
  21. package/layers/desktop/electron/updates.mjs +71 -0
  22. package/layers/desktop/package.json +13 -0
  23. package/layers/desktop/src/desktop.ts +175 -0
  24. package/layers/desktop/src/shell.ts +279 -0
  25. package/layers/desktop/tests/main.test.ts +189 -0
  26. package/layers/desktop/tests/shell.test.ts +152 -0
  27. package/layers/rooms/server.ts +13 -10
  28. package/layers/server/server.ts +4 -5
  29. package/layers/source/vite.config.ts +21 -1
  30. package/package.json +2 -1
  31. package/starters/campaign/README.md +9 -2
  32. package/starters/campaign/layers/rooms/server.ts +3 -3
  33. package/starters/campaign/layers/server/server.ts +3 -5
  34. package/starters/campaign/layers/tests/tests/rules.test.ts +40 -21
  35. package/starters/campaign/src/campaign/game.ts +26 -5
  36. package/starters/campaign/src/campaign/index.ts +104 -68
  37. package/starters/campaign/src/campaign/kills.ts +1 -1
  38. package/starters/campaign/src/campaign/missions/homecoming.ts +7 -7
  39. package/starters/campaign/src/campaign/missions/siege.ts +6 -6
  40. package/starters/campaign/src/campaign/missions/warlord.ts +13 -14
  41. package/starters/campaign/src/campaign/scenes.ts +8 -7
  42. package/starters/campaign/src/campaign/units.ts +59 -20
  43. package/starters/campaign/src/campaign/view/attacks.ts +19 -0
  44. package/starters/campaign/src/campaign/view/fire.ts +2 -2
  45. package/starters/campaign/src/campaign/view/index.ts +54 -43
  46. package/starters/campaign/src/campaign/waves.ts +18 -17
  47. package/starters/campaign/src/game.ts +8 -1
  48. package/starters/campaign/src/main.ts +38 -19
  49. package/starters/campaign/src/maps/fort.names.ts +2 -2
  50. package/starters/campaign/src/maps/fort.vgmap.json +102 -2
  51. package/starters/campaign/src/maps/homestead.names.ts +2 -2
  52. package/starters/campaign/src/maps/homestead.vgmap.json +85 -1
  53. package/starters/campaign/src/maps/pass.names.ts +2 -2
  54. package/starters/campaign/src/maps/pass.vgmap.json +69 -1
  55. package/starters/campaign/src/waves-panel.ts +2 -1
  56. package/starters/empty/README.md +18 -10
  57. package/starters/empty/layers/tests/tests/rules.test.ts +16 -17
  58. package/starters/empty/src/game.ts +11 -75
  59. package/starters/empty/src/generate.worker.ts +5 -5
  60. package/starters/empty/src/rules.ts +83 -25
  61. package/starters/empty/src/view.ts +82 -0
  62. package/starters/examples/README.md +83 -0
  63. package/starters/examples/layers/tests/tests/examples.test.ts +30 -0
  64. package/starters/examples/package.json +5 -0
  65. package/starters/examples/src/examples/abilities/areas.ts +165 -0
  66. package/starters/examples/src/examples/abilities/areasLooks.ts +30 -0
  67. package/starters/examples/src/examples/abilities/buffs.ts +287 -0
  68. package/starters/examples/src/examples/abilities/buffsLooks.ts +46 -0
  69. package/starters/examples/src/examples/abilities/changing.ts +228 -0
  70. package/starters/examples/src/examples/abilities/changingLooks.ts +61 -0
  71. package/starters/examples/src/examples/abilities/control.ts +158 -0
  72. package/starters/examples/src/examples/abilities/controlLooks.ts +78 -0
  73. package/starters/examples/src/examples/abilities/damage.ts +156 -0
  74. package/starters/examples/src/examples/abilities/damageLooks.ts +37 -0
  75. package/starters/examples/src/examples/abilities/family.ts +29 -0
  76. package/starters/examples/src/examples/abilities/index.ts +32 -0
  77. package/starters/examples/src/examples/abilities/kit.ts +179 -0
  78. package/starters/examples/src/examples/abilities/lookKit.ts +71 -0
  79. package/starters/examples/src/examples/abilities/looks.ts +47 -0
  80. package/starters/examples/src/examples/abilities/missiles.ts +203 -0
  81. package/starters/examples/src/examples/abilities/missilesLooks.ts +38 -0
  82. package/starters/examples/src/examples/abilities/moves.ts +206 -0
  83. package/starters/examples/src/examples/abilities/movesLooks.ts +52 -0
  84. package/starters/examples/src/examples/abilities/recasts.ts +181 -0
  85. package/starters/examples/src/examples/abilities/recastsLooks.ts +41 -0
  86. package/starters/examples/src/examples/abilities/resources.ts +166 -0
  87. package/starters/examples/src/examples/abilities/resourcesLooks.ts +42 -0
  88. package/starters/examples/src/examples/abilities/summons.ts +296 -0
  89. package/starters/examples/src/examples/abilities/summonsLooks.ts +115 -0
  90. package/starters/examples/src/examples/abilities/triggers.ts +204 -0
  91. package/starters/examples/src/examples/abilities/triggersLooks.ts +53 -0
  92. package/starters/examples/src/examples/abilities/vision.ts +137 -0
  93. package/starters/examples/src/examples/abilities/visionLooks.ts +50 -0
  94. package/starters/examples/src/examples/animation/index.ts +235 -0
  95. package/starters/examples/src/examples/animation/looks.ts +444 -0
  96. package/starters/examples/src/examples/catalog.ts +52 -0
  97. package/starters/examples/src/examples/cinematics/index.ts +217 -0
  98. package/starters/examples/src/examples/cinematics/looks.ts +476 -0
  99. package/starters/examples/src/examples/cinematics/tour.json +43 -0
  100. package/starters/examples/src/examples/cinematics/village.ts +88 -0
  101. package/starters/examples/src/examples/common/looks.ts +65 -0
  102. package/starters/examples/src/examples/common/units.ts +70 -0
  103. package/starters/examples/src/examples/construction/index.ts +329 -0
  104. package/starters/examples/src/examples/construction/looks.ts +275 -0
  105. package/starters/examples/src/examples/custom-animation/bones.ts +92 -0
  106. package/starters/examples/src/examples/custom-animation/index.ts +190 -0
  107. package/starters/examples/src/examples/custom-animation/looks.ts +523 -0
  108. package/starters/examples/src/examples/custom-animation/runes.ts +82 -0
  109. package/starters/examples/src/examples/custom-fx/glaive.look.ts +110 -0
  110. package/starters/examples/src/examples/custom-fx/glaive.ts +40 -0
  111. package/starters/examples/src/examples/custom-fx/gpu.look.ts +145 -0
  112. package/starters/examples/src/examples/custom-fx/gpu.ts +22 -0
  113. package/starters/examples/src/examples/custom-fx/index.ts +25 -0
  114. package/starters/examples/src/examples/custom-fx/lights.look.ts +144 -0
  115. package/starters/examples/src/examples/custom-fx/lights.ts +25 -0
  116. package/starters/examples/src/examples/custom-fx/looks.ts +36 -0
  117. package/starters/examples/src/examples/custom-fx/meteor.look.ts +133 -0
  118. package/starters/examples/src/examples/custom-fx/meteor.ts +26 -0
  119. package/starters/examples/src/examples/custom-fx/parts.look.ts +193 -0
  120. package/starters/examples/src/examples/custom-fx/parts.ts +21 -0
  121. package/starters/examples/src/examples/custom-fx/portal.look.ts +193 -0
  122. package/starters/examples/src/examples/custom-fx/portal.ts +48 -0
  123. package/starters/examples/src/examples/custom-fx/renderer.look.ts +139 -0
  124. package/starters/examples/src/examples/custom-fx/renderer.ts +18 -0
  125. package/starters/examples/src/examples/custom-fx/ribbons.look.ts +151 -0
  126. package/starters/examples/src/examples/custom-fx/ribbons.ts +22 -0
  127. package/starters/examples/src/examples/custom-fx/shader.ts +42 -0
  128. package/starters/examples/src/examples/custom-fx/shield.look.ts +226 -0
  129. package/starters/examples/src/examples/custom-fx/shield.ts +43 -0
  130. package/starters/examples/src/examples/define.ts +86 -0
  131. package/starters/examples/src/examples/destruction/index.ts +570 -0
  132. package/starters/examples/src/examples/destruction/looks.ts +447 -0
  133. package/starters/examples/src/examples/dialogs/index.ts +383 -0
  134. package/starters/examples/src/examples/dialogs/looks.ts +546 -0
  135. package/starters/examples/src/examples/dynamic-map/index.ts +603 -0
  136. package/starters/examples/src/examples/dynamic-map/looks.ts +301 -0
  137. package/starters/examples/src/examples/fx/blood.look.ts +62 -0
  138. package/starters/examples/src/examples/fx/blood.ts +59 -0
  139. package/starters/examples/src/examples/fx/feel.look.ts +86 -0
  140. package/starters/examples/src/examples/fx/feel.ts +57 -0
  141. package/starters/examples/src/examples/fx/fight.ts +28 -0
  142. package/starters/examples/src/examples/fx/floats.look.ts +108 -0
  143. package/starters/examples/src/examples/fx/floats.ts +24 -0
  144. package/starters/examples/src/examples/fx/gallery.look.ts +168 -0
  145. package/starters/examples/src/examples/fx/gallery.ts +23 -0
  146. package/starters/examples/src/examples/fx/index.ts +30 -0
  147. package/starters/examples/src/examples/fx/links.look.ts +83 -0
  148. package/starters/examples/src/examples/fx/links.ts +49 -0
  149. package/starters/examples/src/examples/fx/looks.ts +55 -0
  150. package/starters/examples/src/examples/fx/map.look.ts +93 -0
  151. package/starters/examples/src/examples/fx/map.ts +33 -0
  152. package/starters/examples/src/examples/fx/marks.look.ts +100 -0
  153. package/starters/examples/src/examples/fx/marks.ts +36 -0
  154. package/starters/examples/src/examples/fx/shots.look.ts +92 -0
  155. package/starters/examples/src/examples/fx/shots.ts +71 -0
  156. package/starters/examples/src/examples/fx/spells.look.ts +87 -0
  157. package/starters/examples/src/examples/fx/spells.ts +122 -0
  158. package/starters/examples/src/examples/fx/stage.ts +31 -0
  159. package/starters/examples/src/examples/gui/babylonScreen.ts +167 -0
  160. package/starters/examples/src/examples/gui/babylonWorld.ts +191 -0
  161. package/starters/examples/src/examples/gui/htmlPart.ts +95 -0
  162. package/starters/examples/src/examples/gui/index.ts +143 -0
  163. package/starters/examples/src/examples/gui/keys.ts +91 -0
  164. package/starters/examples/src/examples/gui/layout.ts +42 -0
  165. package/starters/examples/src/examples/gui/looks.ts +270 -0
  166. package/starters/examples/src/examples/gui/minimap.ts +127 -0
  167. package/starters/examples/src/examples/gui/ownInterface.ts +129 -0
  168. package/starters/examples/src/examples/gui/plates.ts +87 -0
  169. package/starters/examples/src/examples/gui/radial.ts +104 -0
  170. package/starters/examples/src/examples/gui/solidPart.ts +107 -0
  171. package/starters/examples/src/examples/looks.ts +45 -0
  172. package/starters/examples/src/examples/mechanics/battle.ts +51 -0
  173. package/starters/examples/src/examples/mechanics/damage.ts +80 -0
  174. package/starters/examples/src/examples/mechanics/flying.ts +93 -0
  175. package/starters/examples/src/examples/mechanics/formations.ts +58 -0
  176. package/starters/examples/src/examples/mechanics/highGround.ts +82 -0
  177. package/starters/examples/src/examples/mechanics/index.ts +44 -0
  178. package/starters/examples/src/examples/mechanics/looks.ts +289 -0
  179. package/starters/examples/src/examples/mechanics/maze.ts +119 -0
  180. package/starters/examples/src/examples/mechanics/orders.ts +68 -0
  181. package/starters/examples/src/examples/mechanics/selection.ts +30 -0
  182. package/starters/examples/src/examples/moba/index.ts +377 -0
  183. package/starters/examples/src/examples/moba/looks.ts +349 -0
  184. package/starters/examples/src/examples/moba/maps.ts +69 -0
  185. package/starters/examples/src/examples/moba/spells.ts +34 -0
  186. package/starters/examples/src/examples/moba/units.ts +196 -0
  187. package/starters/examples/src/examples/nature/camera.ts +15 -0
  188. package/starters/examples/src/examples/nature/grass.ts +64 -0
  189. package/starters/examples/src/examples/nature/index.ts +327 -0
  190. package/starters/examples/src/examples/nature/land.ts +173 -0
  191. package/starters/examples/src/examples/nature/looks.ts +577 -0
  192. package/starters/examples/src/examples/nature/maps.ts +370 -0
  193. package/starters/examples/src/examples/nature/skies.ts +324 -0
  194. package/starters/examples/src/examples/nature/weather.ts +80 -0
  195. package/starters/examples/src/examples/performance/index.ts +263 -0
  196. package/starters/examples/src/examples/performance/looks.ts +372 -0
  197. package/starters/examples/src/examples/performance/meter.ts +158 -0
  198. package/starters/examples/src/examples/post/grades.ts +86 -0
  199. package/starters/examples/src/examples/post/index.ts +202 -0
  200. package/starters/examples/src/examples/post/looks.ts +884 -0
  201. package/starters/examples/src/examples/post/passes.ts +213 -0
  202. package/starters/examples/src/examples/rts/ai.ts +49 -0
  203. package/starters/examples/src/examples/rts/airlift.ts +43 -0
  204. package/starters/examples/src/examples/rts/base.ts +129 -0
  205. package/starters/examples/src/examples/rts/build.ts +65 -0
  206. package/starters/examples/src/examples/rts/camps.ts +36 -0
  207. package/starters/examples/src/examples/rts/carry.ts +103 -0
  208. package/starters/examples/src/examples/rts/creeps.ts +61 -0
  209. package/starters/examples/src/examples/rts/data.ts +406 -0
  210. package/starters/examples/src/examples/rts/ferry.ts +41 -0
  211. package/starters/examples/src/examples/rts/garrison.ts +50 -0
  212. package/starters/examples/src/examples/rts/harvest.ts +29 -0
  213. package/starters/examples/src/examples/rts/hero.ts +67 -0
  214. package/starters/examples/src/examples/rts/index.ts +77 -0
  215. package/starters/examples/src/examples/rts/looks.ts +721 -0
  216. package/starters/examples/src/examples/rts/shop.ts +46 -0
  217. package/starters/examples/src/examples/rts/tech.ts +39 -0
  218. package/starters/examples/src/examples/rts/train.ts +48 -0
  219. package/starters/examples/src/examples/rts/waterside.ts +185 -0
  220. package/starters/examples/src/examples/showcase/index.ts +714 -0
  221. package/starters/examples/src/examples/showcase/looks.ts +238 -0
  222. package/starters/examples/src/game.ts +17 -0
  223. package/starters/examples/src/main.ts +82 -0
  224. package/starters/examples/src/rules.ts +31 -0
  225. package/starters/examples/src/shell/look.ts +79 -0
  226. package/starters/examples/src/shell/registry.ts +7 -0
  227. package/starters/examples/src/shell/scenes.ts +178 -0
  228. package/starters/examples/src/shell/shell.ts +290 -0
  229. package/starters/examples/src/shell/style.ts +202 -0
  230. package/starters/examples/src/view.ts +50 -0
  231. package/starters/melee/README.md +12 -3
  232. package/starters/melee/layers/tests/tests/heroes.test.ts +402 -0
  233. package/starters/melee/layers/tests/tests/rules.test.ts +10 -8
  234. package/starters/melee/src/game.ts +32 -2
  235. package/starters/melee/src/maps/bay.names.ts +2 -2
  236. package/starters/melee/src/maps/bay.vgmap.json +198 -1
  237. package/starters/melee/src/maps.ts +11 -9
  238. package/starters/melee/src/melee/abilities.ts +1 -194
  239. package/starters/melee/src/melee/blight.ts +7 -7
  240. package/starters/melee/src/melee/cellLayers.json +3 -3
  241. package/starters/melee/src/melee/data.json +1 -18
  242. package/starters/melee/src/melee/game.ts +6 -4
  243. package/starters/melee/src/melee/heroes.ts +1025 -0
  244. package/starters/melee/src/melee/index.ts +64 -61
  245. package/starters/melee/src/melee/items.ts +15 -362
  246. package/starters/melee/src/melee/languages/he.json +14 -2
  247. package/starters/melee/src/melee/pings.ts +5 -6
  248. package/starters/melee/src/melee/saves.ts +1 -1
  249. package/starters/melee/src/melee/undead.ts +15 -230
  250. package/starters/melee/src/melee/units.ts +37 -171
  251. package/starters/melee/src/melee/view/attacks.ts +19 -0
  252. package/starters/melee/src/melee/view/heroSpellLooks.ts +39 -8
  253. package/starters/melee/src/melee/view/index.ts +56 -52
  254. package/starters/melee/src/melee/view/looks.ts +86 -63
  255. package/starters/melee/src/melee/view/undeadLooks.ts +70 -31
  256. package/starters/melee/src/melee/view/walls.ts +1 -1
  257. package/starters.mjs +6 -0
  258. package/v12.mjs +14 -15
  259. package/starters/campaign/src/rules.ts +0 -20
  260. package/starters/empty/src/maps.ts +0 -44
  261. package/starters/empty/src/tiles.ts +0 -12
  262. package/starters/melee/src/melee/heroSpells.ts +0 -38
  263. package/starters/melee/src/rules.ts +0 -24
@@ -1,17 +1,17 @@
1
1
  import { rubbleType, type UnitTypeDef, type UpgradeDef } from '@v12-engine/engine'
2
2
  import { catalogue } from './items'
3
+ import { heroes, HOLLOW_HEROES, KINGDOM_HEROES } from './heroes'
3
4
  import { undeadUnits, undeadUpgrades } from './undead'
4
5
 
5
6
  export const peasant: UnitTypeDef = {
6
7
  id: 'peasant',
7
- armourType: 'medium',
8
8
  race: 'human',
9
9
  name: 'Peasant',
10
10
  kind: 'unit',
11
11
  radius: 0.4,
12
12
  stats: { health: 250, attackDamage: 8, attackSpeed: 0.6, attackRange: 0.4, moveSpeed: 4.05 },
13
13
  sight: 8,
14
- attacks: [{ attackType: 'normal', damagePoint: 0.4, acquisitionRange: 0, targets: ['unit', 'building'] }],
14
+ attacks: [{ damagePoint: 0.4, acquisitionRange: 0, targets: ['unit', 'building'] }],
15
15
  cost: { gold: 75 },
16
16
  supply: 1,
17
17
  buildTime: 10,
@@ -23,14 +23,13 @@ export const peasant: UnitTypeDef = {
23
23
 
24
24
  export const footman: UnitTypeDef = {
25
25
  id: 'footman',
26
- armourType: 'heavy',
27
26
  race: 'human',
28
27
  name: 'Footman',
29
28
  kind: 'unit',
30
29
  radius: 0.45,
31
30
  stats: { health: 480, attackDamage: 12, attackSpeed: 1.25, attackRange: 0.5, armor: 10, moveSpeed: 4.05 },
32
31
  sight: 10,
33
- attacks: [{ attackType: 'normal', damagePoint: 0.45, acquisitionRange: 8 }],
32
+ attacks: [{ damagePoint: 0.45, acquisitionRange: 8 }],
34
33
  cost: { gold: 135 },
35
34
  supply: 2,
36
35
  buildTime: 14,
@@ -40,14 +39,13 @@ export const footman: UnitTypeDef = {
40
39
 
41
40
  export const rifleman: UnitTypeDef = {
42
41
  id: 'rifleman',
43
- armourType: 'medium',
44
42
  race: 'human',
45
43
  name: 'Rifleman',
46
44
  kind: 'unit',
47
45
  radius: 0.45,
48
46
  stats: { health: 300, attackDamage: 23, attackSpeed: 0.667, attackRange: 6.9, moveSpeed: 4.05 },
49
47
  sight: 11,
50
- attacks: [{ attackType: 'pierce', damagePoint: 0.35, acquisitionRange: 9, projectileSpeed: 22, targets: ['ground', 'air'] }],
48
+ attacks: [{ damagePoint: 0.35, acquisitionRange: 9, projectileSpeed: 22, targets: ['ground', 'air'] }],
51
49
  cost: { gold: 205, lumber: 30 },
52
50
  supply: 3,
53
51
  buildTime: 18,
@@ -57,7 +55,6 @@ export const rifleman: UnitTypeDef = {
57
55
 
58
56
  export const catapult: UnitTypeDef = {
59
57
  id: 'catapult',
60
- armourType: 'heavy',
61
58
  race: 'human',
62
59
  name: 'Catapult',
63
60
  kind: 'unit',
@@ -67,7 +64,6 @@ export const catapult: UnitTypeDef = {
67
64
  turnRate: 2.5,
68
65
  attacks: [
69
66
  {
70
- attackType: 'siege',
71
67
  damagePoint: 0.6,
72
68
  acquisitionRange: 11,
73
69
  projectileSpeed: 11,
@@ -85,7 +81,6 @@ export const catapult: UnitTypeDef = {
85
81
 
86
82
  export const gryphon: UnitTypeDef = {
87
83
  id: 'gryphon',
88
- armourType: 'medium',
89
84
  race: 'human',
90
85
  name: 'Gryphon Rider',
91
86
  kind: 'unit',
@@ -94,7 +89,7 @@ export const gryphon: UnitTypeDef = {
94
89
  stats: { health: 700, attackDamage: 45, attackSpeed: 0.5, attackRange: 4.5, armor: 10, magicResist: 20, moveSpeed: 5 },
95
90
  sight: 12,
96
91
  turnRate: 6,
97
- attacks: [{ attackType: 'normal', damageType: 'magic', damagePoint: 0.5, acquisitionRange: 8, projectileSpeed: 14, targets: ['ground', 'air'] }],
92
+ attacks: [{ damageType: 'magic', damagePoint: 0.5, acquisitionRange: 8, projectileSpeed: 14, targets: ['ground', 'air'] }],
98
93
  cost: { gold: 280, lumber: 70 },
99
94
  supply: 4,
100
95
  buildTime: 35,
@@ -103,7 +98,6 @@ export const gryphon: UnitTypeDef = {
103
98
 
104
99
  export const priest: UnitTypeDef = {
105
100
  id: 'priest',
106
- armourType: 'light',
107
101
  race: 'human',
108
102
  name: 'Priest',
109
103
  kind: 'unit',
@@ -111,7 +105,7 @@ export const priest: UnitTypeDef = {
111
105
  stats: { health: 290, mana: 200, manaRegen: 0.7, attackDamage: 10, attackSpeed: 0.6, attackRange: 6, moveSpeed: 4.05 },
112
106
  initialMana: 75,
113
107
  sight: 10,
114
- attacks: [{ attackType: 'magic', damageType: 'magic', damagePoint: 0.4, acquisitionRange: 7, projectileSpeed: 16, targets: ['ground', 'air'] }],
108
+ attacks: [{ damageType: 'magic', damagePoint: 0.4, acquisitionRange: 7, projectileSpeed: 16, targets: ['ground', 'air'] }],
115
109
  abilities: ['heal', 'innerFire', 'raiseDead', 'dispelMagic'],
116
110
  cost: { gold: 145, lumber: 10 },
117
111
  supply: 2,
@@ -122,7 +116,6 @@ export const priest: UnitTypeDef = {
122
116
 
123
117
  export const sorceress: UnitTypeDef = {
124
118
  id: 'sorceress',
125
- armourType: 'light',
126
119
  race: 'human',
127
120
  name: 'Sorceress',
128
121
  kind: 'unit',
@@ -130,7 +123,7 @@ export const sorceress: UnitTypeDef = {
130
123
  stats: { health: 325, mana: 200, manaRegen: 0.7, attackDamage: 12, attackSpeed: 0.6, attackRange: 6, moveSpeed: 4.05 },
131
124
  initialMana: 75,
132
125
  sight: 10,
133
- attacks: [{ attackType: 'magic', damageType: 'magic', damagePoint: 0.4, acquisitionRange: 7, projectileSpeed: 16, targets: ['ground', 'air'] }],
126
+ attacks: [{ damageType: 'magic', damagePoint: 0.4, acquisitionRange: 7, projectileSpeed: 16, targets: ['ground', 'air'] }],
134
127
  abilities: ['slow', 'arcaneBlast', 'manaShield', 'mirrorImage'],
135
128
  cost: { gold: 165, lumber: 20 },
136
129
  supply: 2,
@@ -139,120 +132,8 @@ export const sorceress: UnitTypeDef = {
139
132
  hotkey: 'S'
140
133
  }
141
134
 
142
- export const paladin: UnitTypeDef = {
143
- id: 'paladin',
144
- armourType: 'hero',
145
- race: 'human',
146
- name: 'Paladin',
147
- kind: 'unit',
148
- radius: 0.5,
149
- stats: {
150
- health: 645,
151
- healthRegen: 1.2,
152
- mana: 300,
153
- manaRegen: 1.7,
154
- attackDamage: 55,
155
- attackSpeed: 0.625,
156
- attackRange: 0.6,
157
- armor: 40,
158
- magicResist: 32,
159
- moveSpeed: 4.25
160
- },
161
- sight: 12,
162
- attacks: [{ attackType: 'hero', damagePoint: 0.45, acquisitionRange: 8 }],
163
- hero: {
164
- growth: {
165
- stats: { health: 99, healthRegen: 0.1, mana: 60, manaRegen: 0.2, attackDamage: 3.5, armor: 4.3, magicResist: 2.05 },
166
- percent: { attackSpeed: 0.02 }
167
- },
168
- learns: ['holyLight', 'stomp', 'devotionAura', 'blessedSprint', 'avatar'],
169
- spells: ['barrier', 'flash']
170
- },
171
- inventory: 6,
172
- cost: { gold: 425, lumber: 100 },
173
- supply: 5,
174
- buildTime: 45,
175
- hotkey: 'P',
176
- threat: 3
177
- }
178
-
179
- export const archmage: UnitTypeDef = {
180
- id: 'archmage',
181
- armourType: 'hero',
182
- race: 'human',
183
- name: 'Archmage',
184
- kind: 'unit',
185
- radius: 0.5,
186
- stats: {
187
- health: 580,
188
- healthRegen: 1.1,
189
- mana: 480,
190
- manaRegen: 1.6,
191
- attackDamage: 54,
192
- attackSpeed: 0.669,
193
- attackRange: 6.9,
194
- armor: 21,
195
- magicResist: 30,
196
- moveSpeed: 4.1
197
- },
198
- sight: 12,
199
- attacks: [{ attackType: 'hero', damageType: 'magic', damagePoint: 0.4, acquisitionRange: 8, projectileSpeed: 18, targets: ['ground', 'air'] }],
200
- hero: {
201
- growth: {
202
- stats: { health: 99, healthRegen: 0.11, mana: 24, manaRegen: 0.16, attackDamage: 3.3, armor: 5.2, magicResist: 1.3 },
203
- percent: { attackSpeed: 0.03 }
204
- },
205
- learns: ['flameStrike', 'frostBolt', 'clarityAura', 'cataclysm'],
206
- spells: ['secondWind', 'flash']
207
- },
208
- inventory: 6,
209
- cost: { gold: 425, lumber: 100 },
210
- supply: 5,
211
- buildTime: 45,
212
- hotkey: 'A',
213
- threat: 3
214
- }
215
-
216
- export const testiro: UnitTypeDef = {
217
- id: 'testiro',
218
- armourType: 'hero',
219
- race: 'human',
220
- name: 'Testiro',
221
- kind: 'unit',
222
- radius: 0.5,
223
- stats: {
224
- health: 570,
225
- healthRegen: 1.1,
226
- mana: 360,
227
- manaRegen: 2.3,
228
- attackDamage: 52,
229
- attackSpeed: 0.625,
230
- attackRange: 6.9,
231
- armor: 28,
232
- magicResist: 30,
233
- moveSpeed: 4.1
234
- },
235
- sight: 12,
236
- attacks: [{ attackType: 'hero', damageType: 'magic', damagePoint: 0.4, acquisitionRange: 8, projectileSpeed: 18, targets: ['ground', 'air'] }],
237
- hero: {
238
- growth: {
239
- stats: { health: 90, healthRegen: 0.1, mana: 64, manaRegen: 0.08, attackDamage: 3, armor: 4.5, magicResist: 1.3 },
240
- percent: { attackSpeed: 0.025 }
241
- },
242
- learns: ['tornado', 'groundSmash', 'lasso'],
243
- spells: ['secondWind', 'flash']
244
- },
245
- inventory: 6,
246
- cost: { gold: 425, lumber: 100 },
247
- supply: 5,
248
- buildTime: 45,
249
- hotkey: 'E',
250
- threat: 3
251
- }
252
-
253
135
  export const altar: UnitTypeDef = {
254
136
  id: 'altar',
255
- armourType: 'fortified',
256
137
  race: 'human',
257
138
  name: 'Hero Altar',
258
139
  kind: 'building',
@@ -262,7 +143,8 @@ export const altar: UnitTypeDef = {
262
143
  sight: 9,
263
144
  cost: { gold: 180, lumber: 50 },
264
145
  buildTime: 30,
265
- trains: ['paladin', 'archmage', 'testiro'],
146
+ // the Kingdom's heroes (`heroes.ts`)
147
+ trains: KINGDOM_HEROES,
266
148
  revives: true,
267
149
  hotkey: 'L'
268
150
  }
@@ -270,7 +152,6 @@ export const altar: UnitTypeDef = {
270
152
  /** Put down by a hero from the Sentry Ward item: sees around it for a minute, and enemies only see it being put down */
271
153
  export const ward: UnitTypeDef = {
272
154
  id: 'ward',
273
- armourType: 'unarmored',
274
155
  name: 'Sentry Ward',
275
156
  kind: 'unit',
276
157
  radius: 0.3,
@@ -279,7 +160,7 @@ export const ward: UnitTypeDef = {
279
160
  sightNight: 12,
280
161
  lifetime: 60,
281
162
  invisible: { after: 2 },
282
- hits: 3,
163
+ uses: 3,
283
164
  bounty: [15, 15],
284
165
  xp: 15
285
166
  }
@@ -287,13 +168,12 @@ export const ward: UnitTypeDef = {
287
168
  /** Raised from a corpse by a priest's Raise Dead: weak, and gone after a while */
288
169
  export const skeleton: UnitTypeDef = {
289
170
  id: 'skeleton',
290
- armourType: 'light',
291
171
  name: 'Skeleton Warrior',
292
172
  kind: 'unit',
293
173
  radius: 0.4,
294
174
  stats: { health: 180, attackDamage: 9, attackSpeed: 0.75, attackRange: 1, moveSpeed: 3.5, armor: 5 },
295
175
  sight: 8,
296
- attacks: [{ attackType: 'normal', damagePoint: 0.4, acquisitionRange: 6 }],
176
+ attacks: [{ damagePoint: 0.4, acquisitionRange: 6 }],
297
177
  // bones leave no corpse to raise again
298
178
  corpse: false,
299
179
  abilities: ['burrow'],
@@ -304,13 +184,12 @@ export const skeleton: UnitTypeDef = {
304
184
 
305
185
  export const gnoll: UnitTypeDef = {
306
186
  id: 'gnoll',
307
- armourType: 'medium',
308
187
  name: 'Gnoll',
309
188
  kind: 'unit',
310
189
  radius: 0.42,
311
190
  stats: { health: 400, attackDamage: 16, attackSpeed: 0.7, attackRange: 0.5, moveSpeed: 4 },
312
191
  sight: 8,
313
- attacks: [{ attackType: 'normal', damagePoint: 0.4, acquisitionRange: 5 }],
192
+ attacks: [{ damagePoint: 0.4, acquisitionRange: 5 }],
314
193
  level: 1,
315
194
  bounty: [8, 12],
316
195
  xp: 25
@@ -318,22 +197,20 @@ export const gnoll: UnitTypeDef = {
318
197
 
319
198
  export const troll: UnitTypeDef = {
320
199
  id: 'troll',
321
- armourType: 'medium',
322
200
  name: 'Forest Troll',
323
201
  kind: 'unit',
324
202
  radius: 0.45,
325
203
  stats: { health: 500, attackDamage: 25, attackSpeed: 0.6, attackRange: 6, armor: 10, magicResist: 10, moveSpeed: 4 },
326
204
  sight: 9,
327
- attacks: [{ attackType: 'normal', damagePoint: 0.4, acquisitionRange: 5, projectileSpeed: 18, targets: ['ground', 'air'] }],
205
+ attacks: [{ damagePoint: 0.4, acquisitionRange: 5, projectileSpeed: 18, targets: ['ground', 'air'] }],
328
206
  level: 2,
329
207
  bounty: [14, 20],
330
208
  xp: 40,
331
- drops: [{ item: 'healingPotion', chance: 0.25 }]
209
+ drops: [{ item: 'healingDraught', chance: 0.25 }]
332
210
  }
333
211
 
334
212
  export const ogre: UnitTypeDef = {
335
213
  id: 'ogre',
336
- armourType: 'heavy',
337
214
  name: 'Ogre Lord',
338
215
  kind: 'unit',
339
216
  radius: 0.75,
@@ -351,16 +228,20 @@ export const ogre: UnitTypeDef = {
351
228
  moveSpeed: 3.6
352
229
  },
353
230
  sight: 9,
354
- attacks: [{ attackType: 'normal', damagePoint: 0.55, acquisitionRange: 5 }],
231
+ attacks: [{ damagePoint: 0.55, acquisitionRange: 5 }],
355
232
  abilities: ['clap'],
356
233
  level: 5,
357
234
  bounty: [45, 60],
358
235
  xp: 115,
359
236
  threat: 3,
237
+ // what it leaves behind, and now and then a relic of the default items: found, never sold
360
238
  drops: [
361
- { item: 'longSword', chance: 0.5 },
362
- { item: 'clothArmor', chance: 0.5 },
363
- { item: 'manaPotion', chance: 0.5 }
239
+ { item: 'ironSword', chance: 0.5 },
240
+ { item: 'paddedCoat', chance: 0.5 },
241
+ { item: 'manaDraught', chance: 0.5 },
242
+ { item: 'emberIdol', chance: 0.05 },
243
+ { item: 'ringOfTheOldKing', chance: 0.05 },
244
+ { item: 'wolfhideCharm', chance: 0.05 }
364
245
  ]
365
246
  }
366
247
 
@@ -368,7 +249,6 @@ export const creeps = [gnoll, troll, ogre]
368
249
 
369
250
  export const townhall: UnitTypeDef = {
370
251
  id: 'townhall',
371
- armourType: 'fortified',
372
252
  race: 'human',
373
253
  name: 'Town Hall',
374
254
  kind: 'building',
@@ -378,7 +258,7 @@ export const townhall: UnitTypeDef = {
378
258
  sight: 12,
379
259
  cost: { gold: 385, lumber: 205 },
380
260
  buildTime: 45,
381
- supplyProvided: 12,
261
+ supplyGiven: 12,
382
262
  trains: ['peasant'],
383
263
  dropOff: true,
384
264
  upgradesTo: 'keep',
@@ -387,7 +267,6 @@ export const townhall: UnitTypeDef = {
387
267
 
388
268
  export const keep: UnitTypeDef = {
389
269
  id: 'keep',
390
- armourType: 'fortified',
391
270
  race: 'human',
392
271
  name: 'Keep',
393
272
  kind: 'building',
@@ -397,7 +276,7 @@ export const keep: UnitTypeDef = {
397
276
  sight: 12,
398
277
  cost: { gold: 320, lumber: 210 },
399
278
  buildTime: 50,
400
- supplyProvided: 12,
279
+ supplyGiven: 12,
401
280
  trains: ['peasant'],
402
281
  dropOff: true,
403
282
  provides: ['townhall'],
@@ -407,7 +286,6 @@ export const keep: UnitTypeDef = {
407
286
 
408
287
  export const castle: UnitTypeDef = {
409
288
  id: 'castle',
410
- armourType: 'fortified',
411
289
  race: 'human',
412
290
  name: 'Castle',
413
291
  kind: 'building',
@@ -417,7 +295,7 @@ export const castle: UnitTypeDef = {
417
295
  sight: 12,
418
296
  cost: { gold: 360, lumber: 210 },
419
297
  buildTime: 60,
420
- supplyProvided: 12,
298
+ supplyGiven: 12,
421
299
  trains: ['peasant'],
422
300
  dropOff: true,
423
301
  provides: ['townhall', 'keep'],
@@ -426,7 +304,6 @@ export const castle: UnitTypeDef = {
426
304
 
427
305
  export const farm: UnitTypeDef = {
428
306
  id: 'farm',
429
- armourType: 'fortified',
430
307
  race: 'human',
431
308
  name: 'Farm',
432
309
  kind: 'building',
@@ -436,7 +313,7 @@ export const farm: UnitTypeDef = {
436
313
  sight: 6,
437
314
  cost: { gold: 80, lumber: 20 },
438
315
  buildTime: 12,
439
- supplyProvided: 6,
316
+ supplyGiven: 6,
440
317
  hotkey: 'F',
441
318
  // up to four peasants take cover in it, and shoot out of it: it attacks only with them inside, as an orc burrow does
442
319
  transport: { capacity: 4, takes: (def) => def.id === 'peasant', armed: 9 },
@@ -445,7 +322,6 @@ export const farm: UnitTypeDef = {
445
322
 
446
323
  export const barracks: UnitTypeDef = {
447
324
  id: 'barracks',
448
- armourType: 'fortified',
449
325
  race: 'human',
450
326
  name: 'Barracks',
451
327
  kind: 'building',
@@ -461,7 +337,6 @@ export const barracks: UnitTypeDef = {
461
337
 
462
338
  export const tower: UnitTypeDef = {
463
339
  id: 'tower',
464
- armourType: 'fortified',
465
340
  race: 'human',
466
341
  name: 'Guard Tower',
467
342
  kind: 'building',
@@ -469,7 +344,7 @@ export const tower: UnitTypeDef = {
469
344
  footprint: { w: 2, d: 2 },
470
345
  stats: { health: 1500, attackDamage: 60, attackSpeed: 0.83, attackRange: 8, armor: 40, magicResist: 40 },
471
346
  sight: 12,
472
- attacks: [{ attackType: 'pierce', damagePoint: 0.3, acquisitionRange: 8, projectileSpeed: 24, targets: ['ground', 'air'] }],
347
+ attacks: [{ damagePoint: 0.3, acquisitionRange: 8, projectileSpeed: 24, targets: ['ground', 'air'] }],
473
348
  cost: { gold: 110, lumber: 50 },
474
349
  buildTime: 20,
475
350
  requires: ['barracks'],
@@ -477,12 +352,11 @@ export const tower: UnitTypeDef = {
477
352
  }
478
353
 
479
354
  /**
480
- * A piece of stone wall: a cell of it, laid in a line by a drag (`withWalls`), each piece joined with those beside it
355
+ * A piece of stone wall: a cell of it, laid in a line by a drag (`wallsPack`), each piece joined with those beside it
481
356
  * and drawn by the shape that makes (its look: `stoneWallLooks`)
482
357
  */
483
358
  export const stoneWall: UnitTypeDef = {
484
359
  id: 'stoneWall',
485
- armourType: 'fortified',
486
360
  race: 'human',
487
361
  name: 'Stone Wall',
488
362
  kind: 'building',
@@ -501,12 +375,11 @@ export const stoneWall: UnitTypeDef = {
501
375
 
502
376
  /**
503
377
  * A gate of stone wall: a gatehouse of 3 by 3 in a line of the wall, joined and turned along it, that its owner opens
504
- * and shuts for everyone (`withWalls`' `wallGateCommand`): open, whoever walks goes through. A cell's gap would let
378
+ * and shuts for everyone (`wallsPack`' `wallGateCommand`): open, whoever walks goes through. A cell's gap would let
505
379
  * nobody by
506
380
  */
507
381
  export const stoneGate: UnitTypeDef = {
508
382
  id: 'stoneGate',
509
- armourType: 'fortified',
510
383
  race: 'human',
511
384
  name: 'Stone Gate',
512
385
  kind: 'building',
@@ -524,7 +397,6 @@ export const stoneGate: UnitTypeDef = {
524
397
 
525
398
  export const blacksmith: UnitTypeDef = {
526
399
  id: 'blacksmith',
527
- armourType: 'fortified',
528
400
  race: 'human',
529
401
  name: 'Blacksmith',
530
402
  kind: 'building',
@@ -541,7 +413,6 @@ export const blacksmith: UnitTypeDef = {
541
413
 
542
414
  export const alchemist: UnitTypeDef = {
543
415
  id: 'alchemist',
544
- armourType: 'fortified',
545
416
  race: 'human',
546
417
  name: 'Alchemist',
547
418
  kind: 'building',
@@ -562,7 +433,6 @@ export const alchemist: UnitTypeDef = {
562
433
  */
563
434
  export const transportShip: UnitTypeDef = {
564
435
  id: 'transportShip',
565
- armourType: 'heavy',
566
436
  name: 'Transport Ship',
567
437
  kind: 'unit',
568
438
  radius: 1,
@@ -593,7 +463,6 @@ export const goblinShipyard: UnitTypeDef = {
593
463
 
594
464
  export const armory: UnitTypeDef = {
595
465
  id: 'armory',
596
- armourType: 'fortified',
597
466
  race: 'human',
598
467
  name: 'Armory',
599
468
  kind: 'building',
@@ -610,7 +479,6 @@ export const armory: UnitTypeDef = {
610
479
 
611
480
  export const aviary: UnitTypeDef = {
612
481
  id: 'aviary',
613
- armourType: 'fortified',
614
482
  race: 'human',
615
483
  name: 'Aviary',
616
484
  kind: 'building',
@@ -627,7 +495,6 @@ export const aviary: UnitTypeDef = {
627
495
 
628
496
  export const lumbermill: UnitTypeDef = {
629
497
  id: 'lumbermill',
630
- armourType: 'fortified',
631
498
  race: 'human',
632
499
  name: 'Lumber Mill',
633
500
  kind: 'building',
@@ -651,7 +518,7 @@ export const tree: UnitTypeDef = {
651
518
  sight: 0,
652
519
  invulnerable: true,
653
520
  fellable: true,
654
- resource: { kind: 'lumber', amount: 50, slots: 1, gatherTime: 8 }
521
+ resource: { id: 'lumber', amount: 50, slots: 1, gatherTime: 8 }
655
522
  }
656
523
 
657
524
  export const goldmine: UnitTypeDef = {
@@ -663,12 +530,12 @@ export const goldmine: UnitTypeDef = {
663
530
  stats: { health: 1 },
664
531
  sight: 0,
665
532
  invulnerable: true,
666
- resource: { kind: 'gold', amount: 12500, slots: 1, entered: true }
533
+ resource: { id: 'gold', amount: 12500, slots: 1, entered: true }
667
534
  }
668
535
 
669
536
  /**
670
- * A tavern: neutral, and it cannot be destroyed. It hires out no one yet: heroes of no race given to it (`hires`) would
671
- * go to whoever has someone of theirs by it, once each
537
+ * A tavern: neutral, and it cannot be destroyed. It hires out every hero, of either side, to whoever has someone of
538
+ * theirs by it (`hires`, the `hire` command): each once, and no more heroes than a player may have
672
539
  */
673
540
  export const tavern: UnitTypeDef = {
674
541
  id: 'tavern',
@@ -678,11 +545,12 @@ export const tavern: UnitTypeDef = {
678
545
  footprint: { w: 3, d: 3 },
679
546
  stats: { health: 1500, armor: 40, magicResist: 40 },
680
547
  sight: 9,
681
- invulnerable: true
548
+ invulnerable: true,
549
+ hires: [...KINGDOM_HEROES, ...HOLLOW_HEROES]
682
550
  }
683
551
 
684
552
  /**
685
- * The ruins a fallen building leaves where it stood, by its size (`withRemains`): they block the way until workers clear
553
+ * The ruins a fallen building leaves where it stood, by its size (`remainsPack`): they block the way until workers clear
686
554
  * them, gathering their timber as lumber
687
555
  */
688
556
  export const ruins = [2, 3, 4].map((size) =>
@@ -711,9 +579,7 @@ export const units = [
711
579
  sorceress,
712
580
  catapult,
713
581
  gryphon,
714
- paladin,
715
- archmage,
716
- testiro,
582
+ ...heroes,
717
583
  dummy,
718
584
  ward,
719
585
  skeleton,
@@ -0,0 +1,19 @@
1
+ import type { AttackLook } from '@v12-engine/client'
2
+
3
+ // The swings of the shared characters' rig (`UnitLook.attacks`): several each, so a fight does not play the same blow
4
+ // over and over. At random, never the same twice running; a critical strike ends in a big two-handed slice
5
+
6
+ /** A one-handed weapon's swings: a chop, a slice, a stab */
7
+ export const ONE_HANDED: AttackLook = {
8
+ clip: ['Melee_1H_Attack_Chop', 'Melee_1H_Attack_Slice_Diagonal', 'Melee_1H_Attack_Stab'],
9
+ order: 'random',
10
+ crit: 'Melee_2H_Attack_Slice'
11
+ }
12
+ /** A two-handed weapon's: a chop and a slice, in turn */
13
+ export const TWO_HANDED: AttackLook = { clip: ['Melee_2H_Attack_Chop', 'Melee_2H_Attack_Slice'], crit: 'Melee_2H_Attack_Chop' }
14
+ /** Two weapons': both together, and each alone */
15
+ export const DUAL_WIELD: AttackLook = {
16
+ clip: ['Melee_Dualwield_Attack_Chop', 'Melee_1H_Attack_Slice_Diagonal', 'Melee_1H_Attack_Stab'],
17
+ order: 'random',
18
+ crit: 'Melee_Dualwield_Attack_Chop'
19
+ }
@@ -1,21 +1,52 @@
1
- import type { AbilityLooks } from '@v12-engine/client'
1
+ import type { AbilityLooks, Rgb } from '@v12-engine/client'
2
2
 
3
- type Rgb = [number, number, number]
4
-
5
- /** The spells every hero brings along */
3
+ /** The spells every hero brings along: the engine's (`defaultHeroSpells`) */
6
4
  const GOLD: Rgb = [1, 0.85, 0.35]
7
5
  const LIFE: Rgb = [0.5, 1, 0.55]
8
- /** What falls from the sky is gold */
9
6
  const STARLIGHT: Rgb = [1, 0.92, 0.5]
10
7
 
11
- /** How the spells every hero brings along and what an item calls down look, by their id */
8
+ /** How the spells every hero brings along look, by their id */
12
9
  export const heroSpellEffects: AbilityLooks = {
13
10
  // ---- the spells every hero brings along
14
11
  flash: { color: GOLD, style: 'burst', options: { where: 'point', rise: 0, count: 40 } },
15
12
  secondWind: { color: LIFE, style: 'burst', options: { count: 50 } },
16
13
  healHaste: { color: LIFE, aura: 'glow', options: { shape: 'rise', streaks: true } },
17
14
  barrier: { color: GOLD, style: 'burst', aura: 'glow', options: { count: 36, shape: 'shell' } },
15
+ brand: { color: [1, 0.4, 0.1], aura: 'glow', options: { shape: 'rise', streaks: true } },
16
+ withered: { color: [0.5, 0.45, 0.35], aura: 'glow' },
17
+ phantomStride: { color: [0.7, 0.85, 1], aura: 'glow', options: { shape: 'rise' } },
18
+ purify: { color: [1, 1, 1], style: 'burst', options: { count: 40, shape: 'shell' } },
19
+ purified: { color: [1, 1, 1], aura: 'glow' },
20
+ waystone: { color: [0.55, 0.75, 1], style: 'burst', options: { where: 'point', count: 60, rise: 2.5, shape: 'rise' } },
21
+ reap: { color: [0.75, 0.2, 0.25], style: 'burst', options: { count: 30 } }
22
+ }
18
23
 
19
- // ---- what an item calls down
20
- intervention: { color: [0.7, 1, 0.8], style: 'mark', options: { lasts: 2.5, radius: 6.9, sparks: 12, column: true, burst: 80, tint: STARLIGHT } }
24
+ /** How the Kingdom's heroes' abilities look (`heroes.ts`), by their id */
25
+ export const kingdomHeroEffects: AbilityLooks = {
26
+ // Oathbreaker
27
+ oathCharge: { color: [1, 0.85, 0.4], style: 'burst', options: { count: 40, ring: 2.5, shape: 'about' } },
28
+ taunted: { color: [1, 0.3, 0.2] },
29
+ shieldwall: { color: GOLD, style: 'burst', aura: 'glow', options: { count: 30, shape: 'shell' } },
30
+ lastStand: { color: [1, 0.8, 0.35], aura: 'glow' },
31
+ bulwarkWard: { color: [0.9, 0.8, 0.5] },
32
+ // Dawn Priest
33
+ holyLight: { color: [1, 0.95, 0.45] },
34
+ cleansingFlame: { color: [1, 0.85, 0.5], style: 'burst', options: { count: 60, ring: 3, shape: 'about' } },
35
+ dawnlight: { color: [1, 0.95, 0.6] },
36
+ sanctuary: { color: STARLIGHT, aura: 'glow', options: { shape: 'rise', streaks: true } },
37
+ hallowed: { color: STARLIGHT, aura: 'glow', options: { count: 36, shape: 'shell' } },
38
+ echoShield: { color: LIFE, aura: 'glow' },
39
+ // Stormcaller
40
+ tornado: { color: [0.78, 0.86, 0.92], style: 'tornado' },
41
+ chainLightning: { color: [0.6, 0.8, 1] },
42
+ buffeted: { color: [0.78, 0.86, 0.92] },
43
+ eyeOfTheStorm: { color: [0.6, 0.75, 1], style: 'mark', options: { lasts: 5, radius: 4, sparks: 30 } },
44
+ stormSlow: { color: [0.6, 0.75, 1] },
45
+ staticCharge: { color: [0.6, 0.8, 1] },
46
+ // Gale Hunter
47
+ piercingBolt: { color: [0.85, 0.95, 0.8] },
48
+ tumbleShot: { color: [0.8, 1, 0.85], aura: 'glow' },
49
+ steadied: { color: [0.85, 0.95, 0.8] },
50
+ arrowstorm: { color: [0.85, 0.95, 0.8], style: 'mark', options: { lasts: 4, radius: 5, sparks: 30 } },
51
+ pinned: { color: [0.85, 0.95, 0.8] }
21
52
  }