@nice2dev/ui-graphics 1.3.14 → 1.3.16

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 (294) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/animation/AnimatedPerson.js +470 -143
  3. package/dist/cjs/animation/AnimationEditor.js +289 -101
  4. package/dist/cjs/animation/Audience.js +83 -61
  5. package/dist/cjs/animation/BodyRenderer.js +69 -28
  6. package/dist/cjs/animation/animationHelper.js +281 -288
  7. package/dist/cjs/animation/characterTypes.js +200 -203
  8. package/dist/cjs/animation/choreoDSL.js +205 -219
  9. package/dist/cjs/animation/choreography.js +4 -32
  10. package/dist/cjs/animation/karaokeIntegration.js +68 -77
  11. package/dist/cjs/animation/lottieExport.js +108 -114
  12. package/dist/cjs/animation/motionPath.js +225 -248
  13. package/dist/cjs/animation/physics.js +227 -254
  14. package/dist/cjs/animation/rig/RigPlayer.js +53 -56
  15. package/dist/cjs/animation/rig/RiggedBody.js +71 -26
  16. package/dist/cjs/animation/rig/choreoRigBridge.js +72 -77
  17. package/dist/cjs/animation/rig/ik.js +13 -18
  18. package/dist/cjs/animation/rig/poseOps.js +34 -41
  19. package/dist/cjs/animation/rig/presets.js +64 -72
  20. package/dist/cjs/animation/rig/rigMath.js +25 -32
  21. package/dist/cjs/animation/rig/rigTypes.js +59 -63
  22. package/dist/cjs/animation/shapes/arms.js +31 -13
  23. package/dist/cjs/animation/shapes/eyes.js +129 -47
  24. package/dist/cjs/animation/shapes/hair.js +72 -45
  25. package/dist/cjs/animation/shapes/heads.js +131 -57
  26. package/dist/cjs/animation/shapes/headwear.js +47 -38
  27. package/dist/cjs/animation/shapes/legs.js +31 -13
  28. package/dist/cjs/animation/shapes/mouths.js +120 -44
  29. package/dist/cjs/animation/shapes/noses.js +80 -25
  30. package/dist/cjs/animation/shapes/outfits.js +101 -39
  31. package/dist/cjs/animation/shapes/torsos.js +15 -11
  32. package/dist/cjs/animation/spineExport.js +103 -121
  33. package/dist/cjs/core/LocalUI.js +108 -43
  34. package/dist/cjs/core/NiceBrushEngine.js +758 -552
  35. package/dist/cjs/core/collaboration.js +249 -251
  36. package/dist/cjs/core/colorBlindness.js +100 -115
  37. package/dist/cjs/core/dragDrop.js +155 -158
  38. package/dist/cjs/core/editorAsk.js +51 -41
  39. package/dist/cjs/core/fixes.js +140 -171
  40. package/dist/cjs/core/gridGuides.js +166 -201
  41. package/dist/cjs/core/historyVisual.js +156 -135
  42. package/dist/cjs/core/i18n.js +13 -14
  43. package/dist/cjs/core/integrations.js +238 -249
  44. package/dist/cjs/core/minimap.js +149 -151
  45. package/dist/cjs/core/plugins.js +98 -113
  46. package/dist/cjs/core/rtl.js +71 -83
  47. package/dist/cjs/core/shortcuts.js +196 -225
  48. package/dist/cjs/core/theme.js +142 -149
  49. package/dist/cjs/core/yjsCollaboration.js +232 -293
  50. package/dist/cjs/design/design-tools.js +12 -22
  51. package/dist/cjs/font/NiceFontEditor.js +877 -316
  52. package/dist/cjs/font/fontFormatUtils.js +388 -448
  53. package/dist/cjs/game/GameAsset2dEditor.js +1201 -392
  54. package/dist/cjs/game/GameAsset2dEditor.module.css.js +146 -5
  55. package/dist/cjs/game/gameAssetTypes.js +7 -16
  56. package/dist/cjs/game/gameAssetUtils.js +390 -413
  57. package/dist/cjs/game/useGameAssetEditor.js +820 -763
  58. package/dist/cjs/index.js +81 -84
  59. package/dist/cjs/nice2dev-ui-graphics.css +1 -1
  60. package/dist/cjs/node_modules/lib0/array.js +8 -70
  61. package/dist/cjs/node_modules/lib0/binary.js +3 -20
  62. package/dist/cjs/node_modules/lib0/broadcastchannel.js +24 -86
  63. package/dist/cjs/node_modules/lib0/buffer.js +15 -82
  64. package/dist/cjs/node_modules/lib0/conditions.js +3 -16
  65. package/dist/cjs/node_modules/lib0/decoding.js +108 -287
  66. package/dist/cjs/node_modules/lib0/dom.js +14 -44
  67. package/dist/cjs/node_modules/lib0/encoding.js +68 -418
  68. package/dist/cjs/node_modules/lib0/environment.js +26 -92
  69. package/dist/cjs/node_modules/lib0/error.js +5 -29
  70. package/dist/cjs/node_modules/lib0/function.js +27 -66
  71. package/dist/cjs/node_modules/lib0/iterator.js +8 -33
  72. package/dist/cjs/node_modules/lib0/logging.common.js +12 -22
  73. package/dist/cjs/node_modules/lib0/logging.js +32 -71
  74. package/dist/cjs/node_modules/lib0/map.js +16 -86
  75. package/dist/cjs/node_modules/lib0/math.js +3 -32
  76. package/dist/cjs/node_modules/lib0/number.js +4 -15
  77. package/dist/cjs/node_modules/lib0/object.js +14 -88
  78. package/dist/cjs/node_modules/lib0/observable.js +38 -78
  79. package/dist/cjs/node_modules/lib0/pair.js +3 -20
  80. package/dist/cjs/node_modules/lib0/prng.js +8 -77
  81. package/dist/cjs/node_modules/lib0/promise.js +6 -30
  82. package/dist/cjs/node_modules/lib0/random.js +8 -23
  83. package/dist/cjs/node_modules/lib0/schema.js +313 -687
  84. package/dist/cjs/node_modules/lib0/set.js +3 -10
  85. package/dist/cjs/node_modules/lib0/storage.js +20 -55
  86. package/dist/cjs/node_modules/lib0/string.js +17 -72
  87. package/dist/cjs/node_modules/lib0/symbol.js +2 -12
  88. package/dist/cjs/node_modules/lib0/time.js +2 -15
  89. package/dist/cjs/node_modules/lib0/trait/equality.js +3 -28
  90. package/dist/cjs/node_modules/lib0/url.js +4 -18
  91. package/dist/cjs/node_modules/lib0/webcrypto.js +2 -5
  92. package/dist/cjs/node_modules/y-protocols/auth.js +5 -19
  93. package/dist/cjs/node_modules/y-protocols/awareness.js +53 -116
  94. package/dist/cjs/node_modules/y-protocols/sync.js +16 -103
  95. package/dist/cjs/node_modules/y-websocket/src/y-websocket.js +77 -219
  96. package/dist/cjs/node_modules/yjs/dist/yjs.js +2128 -4868
  97. package/dist/cjs/photo/FilterThumb.js +37 -25
  98. package/dist/cjs/photo/NiceAITools.js +679 -467
  99. package/dist/cjs/photo/PhotoEditor.js +34 -20
  100. package/dist/cjs/photo/PhotoEditor.module.css.js +296 -5
  101. package/dist/cjs/photo/PhotoEditorCanvas.js +250 -91
  102. package/dist/cjs/photo/PhotoEditorLeftPanel.js +1086 -224
  103. package/dist/cjs/photo/PhotoEditorToolbar.js +135 -19
  104. package/dist/cjs/photo/photoEditorActions.js +89 -72
  105. package/dist/cjs/photo/photoEditorTypes.js +29 -32
  106. package/dist/cjs/photo/photoFilters.js +959 -985
  107. package/dist/cjs/photo/photoOverlays.js +899 -945
  108. package/dist/cjs/photo/photoSelection.js +427 -499
  109. package/dist/cjs/photo/usePhotoEditor.js +739 -741
  110. package/dist/cjs/pixel/HSVPicker.js +191 -175
  111. package/dist/cjs/pixel/PixelEditor.js +159 -48
  112. package/dist/cjs/pixel/PixelEditor.module.css.js +209 -5
  113. package/dist/cjs/pixel/PixelEditorCanvas.js +29 -16
  114. package/dist/cjs/pixel/PixelEditorMenuBar.js +160 -162
  115. package/dist/cjs/pixel/PixelEditorRightPanel.js +377 -45
  116. package/dist/cjs/pixel/PixelEditorStatusBar.js +47 -20
  117. package/dist/cjs/pixel/PixelEditorTimeline.js +106 -23
  118. package/dist/cjs/pixel/PixelEditorToolbar.js +99 -21
  119. package/dist/cjs/pixel/SpriteGeneratorPanel.js +483 -303
  120. package/dist/cjs/pixel/animalGeneratorPresets.js +776 -601
  121. package/dist/cjs/pixel/asepriteFormat.js +511 -560
  122. package/dist/cjs/pixel/buildingGeneratorPresets.js +693 -520
  123. package/dist/cjs/pixel/characterGeneratorPresets.js +644 -544
  124. package/dist/cjs/pixel/pixel-pro.js +52 -63
  125. package/dist/cjs/pixel/pixelEditorExports.js +388 -428
  126. package/dist/cjs/pixel/pixelEditorTypes.js +91 -108
  127. package/dist/cjs/pixel/pixelEditorUtils.js +519 -561
  128. package/dist/cjs/pixel/spriteGeneratorCore.js +206 -257
  129. package/dist/cjs/pixel/usePixelEditor.js +1321 -1343
  130. package/dist/cjs/texture/Nice3DTexturePainter.js +707 -440
  131. package/dist/cjs/ui/NiceUIDesigner.js +954 -527
  132. package/dist/cjs/vector/NiceSvgToCode.js +586 -446
  133. package/dist/cjs/vector/VectorEditor.js +290 -117
  134. package/dist/cjs/vector/VectorEditor.module.css.js +86 -5
  135. package/dist/cjs/vector/VectorEditorMenuBar.js +333 -275
  136. package/dist/cjs/vector/VectorEditorRightPanel.js +1094 -371
  137. package/dist/cjs/vector/VectorEditorShapeRenderer.js +198 -60
  138. package/dist/cjs/vector/VectorEditorStatusBar.js +39 -13
  139. package/dist/cjs/vector/useVectorEditor.js +848 -889
  140. package/dist/cjs/vector/vectorAnimation.js +110 -137
  141. package/dist/cjs/vector/vectorBooleanOps.js +398 -485
  142. package/dist/cjs/vector/vectorEditorExport.js +201 -203
  143. package/dist/cjs/vector/vectorEditorImport.js +173 -189
  144. package/dist/cjs/vector/vectorEditorTypes.js +42 -49
  145. package/dist/cjs/vector/vectorGradients.js +151 -174
  146. package/dist/cjs/vector/vectorIconExport.js +52 -59
  147. package/dist/cjs/vector/vectorIconImport.js +169 -219
  148. package/dist/esm/animation/AnimatedPerson.js +470 -141
  149. package/dist/esm/animation/AnimationEditor.js +290 -100
  150. package/dist/esm/animation/Audience.js +83 -59
  151. package/dist/esm/animation/BodyRenderer.js +71 -25
  152. package/dist/esm/animation/animationHelper.js +284 -287
  153. package/dist/esm/animation/characterTypes.js +204 -202
  154. package/dist/esm/animation/choreoDSL.js +212 -218
  155. package/dist/esm/animation/choreography.js +8 -31
  156. package/dist/esm/animation/karaokeIntegration.js +74 -76
  157. package/dist/esm/animation/lottieExport.js +112 -113
  158. package/dist/esm/animation/motionPath.js +235 -247
  159. package/dist/esm/animation/physics.js +235 -253
  160. package/dist/esm/animation/rig/RigPlayer.js +53 -54
  161. package/dist/esm/animation/rig/RiggedBody.js +71 -24
  162. package/dist/esm/animation/rig/choreoRigBridge.js +74 -76
  163. package/dist/esm/animation/rig/ik.js +14 -17
  164. package/dist/esm/animation/rig/poseOps.js +37 -40
  165. package/dist/esm/animation/rig/presets.js +70 -71
  166. package/dist/esm/animation/rig/rigMath.js +28 -31
  167. package/dist/esm/animation/rig/rigTypes.js +62 -62
  168. package/dist/esm/animation/shapes/arms.js +32 -12
  169. package/dist/esm/animation/shapes/eyes.js +135 -46
  170. package/dist/esm/animation/shapes/hair.js +80 -44
  171. package/dist/esm/animation/shapes/heads.js +140 -56
  172. package/dist/esm/animation/shapes/headwear.js +54 -37
  173. package/dist/esm/animation/shapes/legs.js +32 -12
  174. package/dist/esm/animation/shapes/mouths.js +127 -43
  175. package/dist/esm/animation/shapes/noses.js +87 -24
  176. package/dist/esm/animation/shapes/outfits.js +106 -38
  177. package/dist/esm/animation/shapes/torsos.js +16 -10
  178. package/dist/esm/animation/spineExport.js +106 -120
  179. package/dist/esm/core/LocalUI.js +111 -42
  180. package/dist/esm/core/NiceBrushEngine.js +761 -551
  181. package/dist/esm/core/collaboration.js +255 -250
  182. package/dist/esm/core/colorBlindness.js +106 -114
  183. package/dist/esm/core/dragDrop.js +157 -157
  184. package/dist/esm/core/editorAsk.js +53 -40
  185. package/dist/esm/core/fixes.js +145 -170
  186. package/dist/esm/core/gridGuides.js +178 -200
  187. package/dist/esm/core/historyVisual.js +158 -134
  188. package/dist/esm/core/i18n.js +15 -13
  189. package/dist/esm/core/integrations.js +244 -248
  190. package/dist/esm/core/minimap.js +151 -150
  191. package/dist/esm/core/plugins.js +102 -112
  192. package/dist/esm/core/rtl.js +77 -82
  193. package/dist/esm/core/shortcuts.js +200 -224
  194. package/dist/esm/core/theme.js +150 -148
  195. package/dist/esm/core/yjsCollaboration.js +240 -292
  196. package/dist/esm/design/design-tools.js +13 -21
  197. package/dist/esm/font/NiceFontEditor.js +880 -315
  198. package/dist/esm/font/fontFormatUtils.js +394 -447
  199. package/dist/esm/game/GameAsset2dEditor.js +1202 -391
  200. package/dist/esm/game/GameAsset2dEditor.module.css.js +146 -3
  201. package/dist/esm/game/gameAssetTypes.js +8 -15
  202. package/dist/esm/game/gameAssetUtils.js +408 -412
  203. package/dist/esm/game/useGameAssetEditor.js +821 -762
  204. package/dist/esm/index.js +332 -69
  205. package/dist/esm/nice2dev-ui-graphics.css +1 -1
  206. package/dist/esm/node_modules/lib0/array.js +15 -69
  207. package/dist/esm/node_modules/lib0/binary.js +14 -19
  208. package/dist/esm/node_modules/lib0/broadcastchannel.js +27 -85
  209. package/dist/esm/node_modules/lib0/buffer.js +20 -80
  210. package/dist/esm/node_modules/lib0/conditions.js +4 -15
  211. package/dist/esm/node_modules/lib0/decoding.js +128 -286
  212. package/dist/esm/node_modules/lib0/dom.js +20 -43
  213. package/dist/esm/node_modules/lib0/encoding.js +90 -415
  214. package/dist/esm/node_modules/lib0/environment.js +33 -91
  215. package/dist/esm/node_modules/lib0/error.js +8 -28
  216. package/dist/esm/node_modules/lib0/function.js +31 -65
  217. package/dist/esm/node_modules/lib0/iterator.js +11 -32
  218. package/dist/esm/node_modules/lib0/logging.common.js +22 -21
  219. package/dist/esm/node_modules/lib0/logging.js +44 -70
  220. package/dist/esm/node_modules/lib0/map.js +21 -85
  221. package/dist/esm/node_modules/lib0/math.js +9 -31
  222. package/dist/esm/node_modules/lib0/number.js +7 -14
  223. package/dist/esm/node_modules/lib0/object.js +26 -87
  224. package/dist/esm/node_modules/lib0/observable.js +40 -77
  225. package/dist/esm/node_modules/lib0/pair.js +5 -19
  226. package/dist/esm/node_modules/lib0/prng.js +15 -76
  227. package/dist/esm/node_modules/lib0/promise.js +7 -29
  228. package/dist/esm/node_modules/lib0/random.js +10 -22
  229. package/dist/esm/node_modules/lib0/schema.js +367 -686
  230. package/dist/esm/node_modules/lib0/set.js +4 -9
  231. package/dist/esm/node_modules/lib0/storage.js +23 -54
  232. package/dist/esm/node_modules/lib0/string.js +26 -71
  233. package/dist/esm/node_modules/lib0/symbol.js +3 -11
  234. package/dist/esm/node_modules/lib0/time.js +3 -14
  235. package/dist/esm/node_modules/lib0/trait/equality.js +5 -27
  236. package/dist/esm/node_modules/lib0/url.js +5 -17
  237. package/dist/esm/node_modules/lib0/webcrypto.js +3 -4
  238. package/dist/esm/node_modules/y-protocols/auth.js +7 -18
  239. package/dist/esm/node_modules/y-protocols/awareness.js +58 -115
  240. package/dist/esm/node_modules/y-protocols/sync.js +26 -102
  241. package/dist/esm/node_modules/y-websocket/src/y-websocket.js +82 -218
  242. package/dist/esm/node_modules/yjs/dist/yjs.js +2263 -4899
  243. package/dist/esm/photo/FilterThumb.js +37 -23
  244. package/dist/esm/photo/NiceAITools.js +685 -466
  245. package/dist/esm/photo/PhotoEditor.js +34 -18
  246. package/dist/esm/photo/PhotoEditor.module.css.js +296 -3
  247. package/dist/esm/photo/PhotoEditorCanvas.js +250 -89
  248. package/dist/esm/photo/PhotoEditorLeftPanel.js +1086 -222
  249. package/dist/esm/photo/PhotoEditorToolbar.js +135 -17
  250. package/dist/esm/photo/photoEditorActions.js +93 -71
  251. package/dist/esm/photo/photoEditorTypes.js +32 -31
  252. package/dist/esm/photo/photoFilters.js +967 -984
  253. package/dist/esm/photo/photoOverlays.js +913 -944
  254. package/dist/esm/photo/photoSelection.js +438 -498
  255. package/dist/esm/photo/usePhotoEditor.js +740 -740
  256. package/dist/esm/pixel/HSVPicker.js +192 -174
  257. package/dist/esm/pixel/PixelEditor.js +160 -47
  258. package/dist/esm/pixel/PixelEditor.module.css.js +209 -3
  259. package/dist/esm/pixel/PixelEditorCanvas.js +29 -14
  260. package/dist/esm/pixel/PixelEditorMenuBar.js +160 -160
  261. package/dist/esm/pixel/PixelEditorRightPanel.js +377 -43
  262. package/dist/esm/pixel/PixelEditorStatusBar.js +47 -18
  263. package/dist/esm/pixel/PixelEditorTimeline.js +106 -21
  264. package/dist/esm/pixel/PixelEditorToolbar.js +99 -19
  265. package/dist/esm/pixel/SpriteGeneratorPanel.js +483 -301
  266. package/dist/esm/pixel/animalGeneratorPresets.js +782 -600
  267. package/dist/esm/pixel/asepriteFormat.js +517 -559
  268. package/dist/esm/pixel/buildingGeneratorPresets.js +699 -519
  269. package/dist/esm/pixel/characterGeneratorPresets.js +650 -543
  270. package/dist/esm/pixel/pixel-pro.js +53 -62
  271. package/dist/esm/pixel/pixelEditorExports.js +397 -427
  272. package/dist/esm/pixel/pixelEditorTypes.js +103 -107
  273. package/dist/esm/pixel/pixelEditorUtils.js +551 -560
  274. package/dist/esm/pixel/spriteGeneratorCore.js +223 -256
  275. package/dist/esm/pixel/usePixelEditor.js +1322 -1342
  276. package/dist/esm/texture/Nice3DTexturePainter.js +709 -439
  277. package/dist/esm/ui/NiceUIDesigner.js +957 -526
  278. package/dist/esm/vector/NiceSvgToCode.js +589 -445
  279. package/dist/esm/vector/VectorEditor.js +291 -116
  280. package/dist/esm/vector/VectorEditor.module.css.js +86 -3
  281. package/dist/esm/vector/VectorEditorMenuBar.js +333 -273
  282. package/dist/esm/vector/VectorEditorRightPanel.js +1094 -369
  283. package/dist/esm/vector/VectorEditorShapeRenderer.js +199 -59
  284. package/dist/esm/vector/VectorEditorStatusBar.js +39 -11
  285. package/dist/esm/vector/useVectorEditor.js +849 -888
  286. package/dist/esm/vector/vectorAnimation.js +115 -136
  287. package/dist/esm/vector/vectorBooleanOps.js +401 -484
  288. package/dist/esm/vector/vectorEditorExport.js +207 -202
  289. package/dist/esm/vector/vectorEditorImport.js +174 -188
  290. package/dist/esm/vector/vectorEditorTypes.js +50 -48
  291. package/dist/esm/vector/vectorGradients.js +158 -173
  292. package/dist/esm/vector/vectorIconExport.js +53 -58
  293. package/dist/esm/vector/vectorIconImport.js +171 -218
  294. package/package.json +9 -15
@@ -1,646 +1,828 @@
1
- import { generateMirroredDirections, createPartData, registerParts } from './spriteGeneratorCore.js';
2
-
3
- /**
4
- * animalGeneratorPresets.ts — Modular animal sprite generator.
5
- *
6
- * Parts: heads (cat, dog, wolf, bird, dragon, rabbit, bear, horse),
7
- * bodies, legs, tails, wings, manes.
8
- * Integrates with quadruped skeleton template.
9
- */
10
- /* ════════════════════════════════════════════════════════════════
11
- COLOUR PALETTES
12
- ════════════════════════════════════════════════════════════════ */
1
+ import { registerParts, generateMirroredDirections, createPartData } from "./spriteGeneratorCore.js";
13
2
  const FUR_PALETTES = {
14
- white: ['var(--nice-bg-secondary, #f0f0f0)', 'var(--nice-border, #d0d0d0)', '#b0b0b0', '#909090'],
15
- black: ['var(--nice-border, #404040)', '#303030', '#202020', '#101010'],
16
- brown: ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)', '#805020', '#603818'],
17
- gray: ['var(--nice-text-muted, #a0a0a0)', 'var(--nice-text-secondary, #808080)', '#606060', 'var(--nice-border, #404040)'],
18
- orange: ['#e09040', '#c07828', '#a06020', '#804818'],
19
- golden: ['#f0d068', '#d0b048', '#b09030', '#907020'],
20
- cream: ['#f0e8d0', '#d8d0b8', '#c0b8a0', '#a8a088'],
3
+ white: ["var(--nice-bg-secondary, #f0f0f0)", "var(--nice-border, #d0d0d0)", "#b0b0b0", "#909090"],
4
+ black: ["var(--nice-border, #404040)", "#303030", "#202020", "#101010"],
5
+ brown: ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)", "#805020", "#603818"],
6
+ gray: ["var(--nice-text-muted, #a0a0a0)", "var(--nice-text-secondary, #808080)", "#606060", "var(--nice-border, #404040)"],
7
+ orange: ["#e09040", "#c07828", "#a06020", "#804818"],
8
+ golden: ["#f0d068", "#d0b048", "#b09030", "#907020"],
9
+ cream: ["#f0e8d0", "#d8d0b8", "#c0b8a0", "#a8a088"]
21
10
  };
22
11
  const SCALE_PALETTES = {
23
- green: ['var(--nice-success, #40a040)', '#308030', '#206020', '#104010'],
24
- red: ['#c04040', '#a03030', '#802020', '#601010'],
25
- blue: ['#4060c0', '#3048a0', '#203880', '#182060'],
26
- gold: ['#f0d060', '#d0b040', '#a08020', '#806010'],
27
- purple: ['#8040c0', '#6030a0', '#402080', '#301060'],
12
+ green: ["var(--nice-success, #40a040)", "#308030", "#206020", "#104010"],
13
+ red: ["#c04040", "#a03030", "#802020", "#601010"],
14
+ blue: ["#4060c0", "#3048a0", "#203880", "#182060"],
15
+ gold: ["#f0d060", "#d0b040", "#a08020", "#806010"],
16
+ purple: ["#8040c0", "#6030a0", "#402080", "#301060"]
28
17
  };
29
18
  const FEATHER_PALETTES = {
30
- brown: ['#a08040', '#806030', '#604020', '#402810'],
31
- white: ['var(--nice-bg-secondary, #f0f0f0)', '#d8d8d8', '#c0c0c0', 'var(--nice-text-muted, #a0a0a0)'],
32
- blue: ['#4080d0', '#3060b0', '#204890', '#183070'],
33
- red: ['#d04040', '#b03030', '#902020', '#701010'],
34
- tropical: ['#40c040', '#f0d040', '#d06020', '#c03030'],
19
+ brown: ["#a08040", "#806030", "#604020", "#402810"],
20
+ white: ["var(--nice-bg-secondary, #f0f0f0)", "#d8d8d8", "#c0c0c0", "var(--nice-text-muted, #a0a0a0)"],
21
+ blue: ["#4080d0", "#3060b0", "#204890", "#183070"],
22
+ red: ["#d04040", "#b03030", "#902020", "#701010"],
23
+ tropical: ["#40c040", "#f0d040", "#d06020", "#c03030"]
35
24
  };
36
- /* ════════════════════════════════════════════════════════════════
37
- ANIMAL PARTS
38
- ════════════════════════════════════════════════════════════════ */
39
25
  const _ = -1;
40
- /* ── Cat head ── */
41
26
  const CAT_HEAD_S = /* @__PURE__ */ createPartData(8, 7, [
42
- [_, 0, _, _, _, _, 0, _],
43
- [0, 0, 0, 0, 0, 0, 0, 0],
44
- [0, 0, 0, 0, 0, 0, 0, 0],
45
- [0, 0, 2, 0, 0, 2, 0, 0],
46
- [0, 0, 0, 0, 0, 0, 0, 0],
47
- [0, 0, 0, 3, 3, 0, 0, 0],
48
- [_, 0, 0, 0, 0, 0, 0, _],
49
- ], ['#e09040', '#c07828', 'var(--nice-success, #40a040)', '#f0a0a0']);
27
+ [_, 0, _, _, _, _, 0, _],
28
+ [0, 0, 0, 0, 0, 0, 0, 0],
29
+ [0, 0, 0, 0, 0, 0, 0, 0],
30
+ [0, 0, 2, 0, 0, 2, 0, 0],
31
+ [0, 0, 0, 0, 0, 0, 0, 0],
32
+ [0, 0, 0, 3, 3, 0, 0, 0],
33
+ [_, 0, 0, 0, 0, 0, 0, _]
34
+ ], ["#e09040", "#c07828", "var(--nice-success, #40a040)", "#f0a0a0"]);
50
35
  const CAT_HEAD_E = /* @__PURE__ */ createPartData(6, 7, [
51
- [_, _, _, _, 0, _],
52
- [_, 0, 0, 0, 0, 0],
53
- [0, 0, 0, 0, 0, 0],
54
- [0, 0, 0, 2, 0, 0],
55
- [0, 0, 0, 0, 0, 0],
56
- [0, 0, 0, 0, 3, 0],
57
- [_, 0, 0, 0, 0, _],
58
- ], ['#e09040', '#c07828', 'var(--nice-success, #40a040)', '#f0a0a0']);
59
- /* ── Dog head ── */
36
+ [_, _, _, _, 0, _],
37
+ [_, 0, 0, 0, 0, 0],
38
+ [0, 0, 0, 0, 0, 0],
39
+ [0, 0, 0, 2, 0, 0],
40
+ [0, 0, 0, 0, 0, 0],
41
+ [0, 0, 0, 0, 3, 0],
42
+ [_, 0, 0, 0, 0, _]
43
+ ], ["#e09040", "#c07828", "var(--nice-success, #40a040)", "#f0a0a0"]);
60
44
  const DOG_HEAD_S = /* @__PURE__ */ createPartData(8, 8, [
61
- [_, _, 0, 0, 0, 0, _, _],
62
- [_, 0, 0, 0, 0, 0, 0, _],
63
- [0, 0, 0, 0, 0, 0, 0, 0],
64
- [0, 0, 2, 0, 0, 2, 0, 0],
65
- [0, 0, 0, 0, 0, 0, 0, 0],
66
- [_, 0, 0, 3, 3, 0, 0, _],
67
- [_, _, 0, 0, 0, 0, _, _],
68
- [_, _, _, 0, 0, _, _, _],
69
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)', 'var(--nice-bg, #301818)', 'var(--nice-bg, #301818)']);
45
+ [_, _, 0, 0, 0, 0, _, _],
46
+ [_, 0, 0, 0, 0, 0, 0, _],
47
+ [0, 0, 0, 0, 0, 0, 0, 0],
48
+ [0, 0, 2, 0, 0, 2, 0, 0],
49
+ [0, 0, 0, 0, 0, 0, 0, 0],
50
+ [_, 0, 0, 3, 3, 0, 0, _],
51
+ [_, _, 0, 0, 0, 0, _, _],
52
+ [_, _, _, 0, 0, _, _, _]
53
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)", "var(--nice-bg, #301818)", "var(--nice-bg, #301818)"]);
70
54
  const DOG_HEAD_E = /* @__PURE__ */ createPartData(7, 8, [
71
- [_, _, 0, 0, 0, _, _],
72
- [_, 0, 0, 0, 0, 0, _],
73
- [0, 0, 0, 0, 0, 0, _],
74
- [0, 0, 0, 0, 2, 0, _],
75
- [0, 0, 0, 0, 0, 0, _],
76
- [_, 0, 0, 0, 0, 3, 0],
77
- [_, _, 0, 0, 0, 3, 0],
78
- [_, _, _, 0, 0, 0, _],
79
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)', 'var(--nice-bg, #301818)', 'var(--nice-bg, #301818)']);
80
- /* ── Wolf head ── */
55
+ [_, _, 0, 0, 0, _, _],
56
+ [_, 0, 0, 0, 0, 0, _],
57
+ [0, 0, 0, 0, 0, 0, _],
58
+ [0, 0, 0, 0, 2, 0, _],
59
+ [0, 0, 0, 0, 0, 0, _],
60
+ [_, 0, 0, 0, 0, 3, 0],
61
+ [_, _, 0, 0, 0, 3, 0],
62
+ [_, _, _, 0, 0, 0, _]
63
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)", "var(--nice-bg, #301818)", "var(--nice-bg, #301818)"]);
81
64
  const WOLF_HEAD_S = /* @__PURE__ */ createPartData(10, 8, [
82
- [_, 0, _, _, _, _, _, _, 0, _],
83
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
84
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
85
- [0, 0, 0, 2, 0, 0, 2, 0, 0, 0],
86
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
87
- [_, 0, 0, 0, 3, 3, 0, 0, 0, _],
88
- [_, _, 0, 0, 0, 0, 0, 0, _, _],
89
- [_, _, _, 0, 0, 0, 0, _, _, _],
90
- ], ['var(--nice-text-secondary, #808080)', '#606060', '#f0d060', 'var(--nice-bg, #301818)']);
91
- /* ── Bird head ── */
65
+ [_, 0, _, _, _, _, _, _, 0, _],
66
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
67
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
68
+ [0, 0, 0, 2, 0, 0, 2, 0, 0, 0],
69
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
70
+ [_, 0, 0, 0, 3, 3, 0, 0, 0, _],
71
+ [_, _, 0, 0, 0, 0, 0, 0, _, _],
72
+ [_, _, _, 0, 0, 0, 0, _, _, _]
73
+ ], ["var(--nice-text-secondary, #808080)", "#606060", "#f0d060", "var(--nice-bg, #301818)"]);
92
74
  const BIRD_HEAD_S = /* @__PURE__ */ createPartData(6, 6, [
93
- [_, _, 0, 0, _, _],
94
- [_, 0, 0, 0, 0, _],
95
- [0, 0, 2, 2, 0, 0],
96
- [0, 0, 0, 0, 0, 0],
97
- [_, 0, 3, 3, 0, _],
98
- [_, _, _, 3, _, _],
99
- ], ['#a08040', '#806030', 'var(--nice-bg, #301818)', '#f0a020']);
100
- /* ── Dragon head ── */
75
+ [_, _, 0, 0, _, _],
76
+ [_, 0, 0, 0, 0, _],
77
+ [0, 0, 2, 2, 0, 0],
78
+ [0, 0, 0, 0, 0, 0],
79
+ [_, 0, 3, 3, 0, _],
80
+ [_, _, _, 3, _, _]
81
+ ], ["#a08040", "#806030", "var(--nice-bg, #301818)", "#f0a020"]);
101
82
  const DRAGON_HEAD_S = /* @__PURE__ */ createPartData(10, 9, [
102
- [_, _, _, 0, _, _, 0, _, _, _],
103
- [_, _, 0, 0, 0, 0, 0, 0, _, _],
104
- [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
105
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
106
- [0, 0, 0, 2, 0, 0, 2, 0, 0, 0],
107
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
108
- [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
109
- [_, _, 0, 0, 3, 3, 0, 0, _, _],
110
- [_, _, _, 0, 0, 0, 0, _, _, _],
111
- ], ['var(--nice-success, #40a040)', '#308030', '#f0d060', 'var(--nice-bg, #301818)']);
112
- /* ── Rabbit head ── */
83
+ [_, _, _, 0, _, _, 0, _, _, _],
84
+ [_, _, 0, 0, 0, 0, 0, 0, _, _],
85
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
86
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
87
+ [0, 0, 0, 2, 0, 0, 2, 0, 0, 0],
88
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
89
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
90
+ [_, _, 0, 0, 3, 3, 0, 0, _, _],
91
+ [_, _, _, 0, 0, 0, 0, _, _, _]
92
+ ], ["var(--nice-success, #40a040)", "#308030", "#f0d060", "var(--nice-bg, #301818)"]);
113
93
  const RABBIT_HEAD_S = /* @__PURE__ */ createPartData(8, 10, [
114
- [_, _, 0, _, _, 0, _, _],
115
- [_, _, 0, _, _, 0, _, _],
116
- [_, _, 0, _, _, 0, _, _],
117
- [_, 0, 0, 0, 0, 0, 0, _],
118
- [0, 0, 0, 0, 0, 0, 0, 0],
119
- [0, 0, 2, 0, 0, 2, 0, 0],
120
- [0, 0, 0, 0, 0, 0, 0, 0],
121
- [0, 0, 0, 3, 3, 0, 0, 0],
122
- [_, 0, 0, 0, 0, 0, 0, _],
123
- [_, _, 0, 0, 0, 0, _, _],
124
- ], ['#f0e8d0', '#d8d0b8', '#d04040', '#f0a0a0']);
125
- /* ── Bear head ── */
94
+ [_, _, 0, _, _, 0, _, _],
95
+ [_, _, 0, _, _, 0, _, _],
96
+ [_, _, 0, _, _, 0, _, _],
97
+ [_, 0, 0, 0, 0, 0, 0, _],
98
+ [0, 0, 0, 0, 0, 0, 0, 0],
99
+ [0, 0, 2, 0, 0, 2, 0, 0],
100
+ [0, 0, 0, 0, 0, 0, 0, 0],
101
+ [0, 0, 0, 3, 3, 0, 0, 0],
102
+ [_, 0, 0, 0, 0, 0, 0, _],
103
+ [_, _, 0, 0, 0, 0, _, _]
104
+ ], ["#f0e8d0", "#d8d0b8", "#d04040", "#f0a0a0"]);
126
105
  const BEAR_HEAD_S = /* @__PURE__ */ createPartData(10, 9, [
127
- [_, 0, 0, _, _, _, _, 0, 0, _],
128
- [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
129
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
130
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
131
- [0, 0, 0, 2, 0, 0, 2, 0, 0, 0],
132
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
133
- [0, 0, 0, 0, 3, 3, 0, 0, 0, 0],
134
- [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
135
- [_, _, 0, 0, 0, 0, 0, 0, _, _],
136
- ], ['#805020', '#603818', '#201010', '#402818']);
137
- /* ── Horse head ── */
106
+ [_, 0, 0, _, _, _, _, 0, 0, _],
107
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
108
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
109
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
110
+ [0, 0, 0, 2, 0, 0, 2, 0, 0, 0],
111
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
112
+ [0, 0, 0, 0, 3, 3, 0, 0, 0, 0],
113
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
114
+ [_, _, 0, 0, 0, 0, 0, 0, _, _]
115
+ ], ["#805020", "#603818", "#201010", "#402818"]);
138
116
  const HORSE_HEAD_S = /* @__PURE__ */ createPartData(8, 10, [
139
- [_, _, _, 0, 0, _, _, _],
140
- [_, _, 0, 0, 0, 0, _, _],
141
- [_, 0, 0, 0, 0, 0, 0, _],
142
- [0, 0, 0, 0, 0, 0, 0, 0],
143
- [0, 0, 2, 0, 0, 2, 0, 0],
144
- [0, 0, 0, 0, 0, 0, 0, 0],
145
- [_, 0, 0, 0, 0, 0, 0, _],
146
- [_, _, 0, 0, 0, 0, _, _],
147
- [_, _, 0, 0, 0, 0, _, _],
148
- [_, _, _, 0, 0, _, _, _],
149
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)', 'var(--nice-bg, #301818)']);
150
- /* ── Bodies ── */
117
+ [_, _, _, 0, 0, _, _, _],
118
+ [_, _, 0, 0, 0, 0, _, _],
119
+ [_, 0, 0, 0, 0, 0, 0, _],
120
+ [0, 0, 0, 0, 0, 0, 0, 0],
121
+ [0, 0, 2, 0, 0, 2, 0, 0],
122
+ [0, 0, 0, 0, 0, 0, 0, 0],
123
+ [_, 0, 0, 0, 0, 0, 0, _],
124
+ [_, _, 0, 0, 0, 0, _, _],
125
+ [_, _, 0, 0, 0, 0, _, _],
126
+ [_, _, _, 0, 0, _, _, _]
127
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)", "var(--nice-bg, #301818)"]);
151
128
  const BODY_SMALL = /* @__PURE__ */ createPartData(8, 6, [
152
- [_, _, 0, 0, 0, 0, _, _],
153
- [_, 0, 0, 0, 0, 0, 0, _],
154
- [0, 0, 0, 0, 0, 0, 0, 0],
155
- [0, 0, 0, 0, 0, 0, 0, 0],
156
- [_, 0, 0, 0, 0, 0, 0, _],
157
- [_, _, 0, 0, 0, 0, _, _],
158
- ], ['#e09040', '#c07828']);
129
+ [_, _, 0, 0, 0, 0, _, _],
130
+ [_, 0, 0, 0, 0, 0, 0, _],
131
+ [0, 0, 0, 0, 0, 0, 0, 0],
132
+ [0, 0, 0, 0, 0, 0, 0, 0],
133
+ [_, 0, 0, 0, 0, 0, 0, _],
134
+ [_, _, 0, 0, 0, 0, _, _]
135
+ ], ["#e09040", "#c07828"]);
159
136
  const BODY_MEDIUM = /* @__PURE__ */ createPartData(12, 8, [
160
- [_, _, _, 0, 0, 0, 0, 0, 0, _, _, _],
161
- [_, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
162
- [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
163
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
164
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
165
- [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
166
- [_, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
167
- [_, _, _, 0, 0, 0, 0, 0, 0, _, _, _],
168
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)']);
137
+ [_, _, _, 0, 0, 0, 0, 0, 0, _, _, _],
138
+ [_, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
139
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
140
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
141
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
142
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
143
+ [_, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
144
+ [_, _, _, 0, 0, 0, 0, 0, 0, _, _, _]
145
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)"]);
169
146
  const BODY_LARGE = /* @__PURE__ */ createPartData(14, 10, [
170
- [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _],
171
- [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
172
- [_, _, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
173
- [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
174
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
175
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
176
- [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
177
- [_, _, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
178
- [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
179
- [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _],
180
- ], ['#805020', '#603818']);
147
+ [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _],
148
+ [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
149
+ [_, _, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
150
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
151
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
152
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
153
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
154
+ [_, _, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
155
+ [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
156
+ [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _]
157
+ ], ["#805020", "#603818"]);
181
158
  const BODY_BIRD = /* @__PURE__ */ createPartData(8, 7, [
182
- [_, _, _, 0, 0, _, _, _],
183
- [_, _, 0, 0, 0, 0, _, _],
184
- [_, 0, 0, 0, 0, 0, 0, _],
185
- [0, 0, 0, 0, 0, 0, 0, 0],
186
- [_, 0, 0, 0, 0, 0, 0, _],
187
- [_, _, 0, 0, 0, 0, _, _],
188
- [_, _, _, 0, 0, _, _, _],
189
- ], ['#a08040', '#806030']);
159
+ [_, _, _, 0, 0, _, _, _],
160
+ [_, _, 0, 0, 0, 0, _, _],
161
+ [_, 0, 0, 0, 0, 0, 0, _],
162
+ [0, 0, 0, 0, 0, 0, 0, 0],
163
+ [_, 0, 0, 0, 0, 0, 0, _],
164
+ [_, _, 0, 0, 0, 0, _, _],
165
+ [_, _, _, 0, 0, _, _, _]
166
+ ], ["#a08040", "#806030"]);
190
167
  const BODY_DRAGON = /* @__PURE__ */ createPartData(14, 10, [
191
- [_, _, _, _, _, 0, 0, 0, 0, _, _, _, _, _],
192
- [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _],
193
- [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
194
- [_, _, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
195
- [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
196
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
197
- [_, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, _],
198
- [_, _, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, _, _],
199
- [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
200
- [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _],
201
- ], ['var(--nice-success, #40a040)', '#f0d060']);
202
- /* ── Legs ── */
168
+ [_, _, _, _, _, 0, 0, 0, 0, _, _, _, _, _],
169
+ [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _],
170
+ [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
171
+ [_, _, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _, _],
172
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _],
173
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
174
+ [_, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, _],
175
+ [_, _, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, _, _],
176
+ [_, _, _, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _],
177
+ [_, _, _, _, 0, 0, 0, 0, 0, 0, _, _, _, _]
178
+ ], ["var(--nice-success, #40a040)", "#f0d060"]);
203
179
  const LEG_THIN = /* @__PURE__ */ createPartData(2, 5, [
204
- [0, 0],
205
- [0, 0],
206
- [0, 0],
207
- [0, 0],
208
- [0, 1],
209
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)']);
180
+ [0, 0],
181
+ [0, 0],
182
+ [0, 0],
183
+ [0, 0],
184
+ [0, 1]
185
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)"]);
210
186
  const LEG_THICK = /* @__PURE__ */ createPartData(3, 5, [
211
- [0, 0, 0],
212
- [0, 0, 0],
213
- [0, 0, 0],
214
- [0, 0, 0],
215
- [0, 0, 1],
216
- ], ['#805020', '#603818']);
187
+ [0, 0, 0],
188
+ [0, 0, 0],
189
+ [0, 0, 0],
190
+ [0, 0, 0],
191
+ [0, 0, 1]
192
+ ], ["#805020", "#603818"]);
217
193
  const LEG_BIRD = /* @__PURE__ */ createPartData(2, 5, [
218
- [_, 0],
219
- [_, 0],
220
- [_, 0],
221
- [0, 0],
222
- [0, 0],
223
- ], ['#f0a020', '#c08010']);
194
+ [_, 0],
195
+ [_, 0],
196
+ [_, 0],
197
+ [0, 0],
198
+ [0, 0]
199
+ ], ["#f0a020", "#c08010"]);
224
200
  const LEG_DRAGON = /* @__PURE__ */ createPartData(3, 6, [
225
- [_, 0, 0],
226
- [0, 0, 0],
227
- [0, 0, 0],
228
- [0, 0, 0],
229
- [0, 0, 0],
230
- [0, 1, 0],
231
- ], ['var(--nice-success, #40a040)', '#206020']);
232
- /* ── Tails ── */
201
+ [_, 0, 0],
202
+ [0, 0, 0],
203
+ [0, 0, 0],
204
+ [0, 0, 0],
205
+ [0, 0, 0],
206
+ [0, 1, 0]
207
+ ], ["var(--nice-success, #40a040)", "#206020"]);
233
208
  const TAIL_SHORT = /* @__PURE__ */ createPartData(4, 3, [
234
- [0, 0, _, _],
235
- [_, 0, 0, _],
236
- [_, _, 0, 0],
237
- ], ['#e09040', '#c07828']);
209
+ [0, 0, _, _],
210
+ [_, 0, 0, _],
211
+ [_, _, 0, 0]
212
+ ], ["#e09040", "#c07828"]);
238
213
  const TAIL_LONG = /* @__PURE__ */ createPartData(6, 4, [
239
- [0, 0, _, _, _, _],
240
- [_, 0, 0, _, _, _],
241
- [_, _, 0, 0, _, _],
242
- [_, _, _, 0, 0, 0],
243
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)']);
214
+ [0, 0, _, _, _, _],
215
+ [_, 0, 0, _, _, _],
216
+ [_, _, 0, 0, _, _],
217
+ [_, _, _, 0, 0, 0]
218
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)"]);
244
219
  const TAIL_FLUFFY = /* @__PURE__ */ createPartData(6, 5, [
245
- [_, 0, 0, _, _, _],
246
- [0, 0, 0, 0, _, _],
247
- [_, 0, 0, 0, 0, _],
248
- [_, _, 0, 0, 0, 0],
249
- [_, _, _, 0, 0, _],
250
- ], ['var(--nice-text-secondary, #808080)', '#606060']);
220
+ [_, 0, 0, _, _, _],
221
+ [0, 0, 0, 0, _, _],
222
+ [_, 0, 0, 0, 0, _],
223
+ [_, _, 0, 0, 0, 0],
224
+ [_, _, _, 0, 0, _]
225
+ ], ["var(--nice-text-secondary, #808080)", "#606060"]);
251
226
  const TAIL_DRAGON = /* @__PURE__ */ createPartData(8, 4, [
252
- [0, 0, _, _, _, _, _, _],
253
- [_, 0, 0, 0, _, _, _, _],
254
- [_, _, _, 0, 0, 0, _, _],
255
- [_, _, _, _, _, 0, 1, 0],
256
- ], ['var(--nice-success, #40a040)', '#308030']);
227
+ [0, 0, _, _, _, _, _, _],
228
+ [_, 0, 0, 0, _, _, _, _],
229
+ [_, _, _, 0, 0, 0, _, _],
230
+ [_, _, _, _, _, 0, 1, 0]
231
+ ], ["var(--nice-success, #40a040)", "#308030"]);
257
232
  const TAIL_BIRD = /* @__PURE__ */ createPartData(5, 5, [
258
- [_, _, 0, _, _],
259
- [_, 0, 0, 0, _],
260
- [0, 0, 0, 0, 0],
261
- [_, 0, 0, 0, _],
262
- [_, _, 0, _, _],
263
- ], ['#a08040', '#806030']);
264
- /* ── Wings ── */
233
+ [_, _, 0, _, _],
234
+ [_, 0, 0, 0, _],
235
+ [0, 0, 0, 0, 0],
236
+ [_, 0, 0, 0, _],
237
+ [_, _, 0, _, _]
238
+ ], ["#a08040", "#806030"]);
265
239
  const WING_SMALL = /* @__PURE__ */ createPartData(6, 5, [
266
- [_, _, _, _, 0, _],
267
- [_, _, _, 0, 0, 0],
268
- [_, _, 0, 0, 0, 0],
269
- [_, 0, 0, 0, 0, 0],
270
- [0, 0, 0, 0, 0, _],
271
- ], ['#a08040', '#806030']);
240
+ [_, _, _, _, 0, _],
241
+ [_, _, _, 0, 0, 0],
242
+ [_, _, 0, 0, 0, 0],
243
+ [_, 0, 0, 0, 0, 0],
244
+ [0, 0, 0, 0, 0, _]
245
+ ], ["#a08040", "#806030"]);
272
246
  const WING_LARGE = /* @__PURE__ */ createPartData(10, 8, [
273
- [_, _, _, _, _, _, _, _, 0, _],
274
- [_, _, _, _, _, _, _, 0, 0, 0],
275
- [_, _, _, _, _, _, 0, 0, 0, 0],
276
- [_, _, _, _, _, 0, 0, 0, 0, 0],
277
- [_, _, _, _, 0, 0, 0, 0, 0, 0],
278
- [_, _, _, 0, 0, 0, 0, 0, 0, 0],
279
- [_, _, 0, 0, 0, 0, 0, 0, 0, _],
280
- [_, 0, 0, 0, 0, 0, 0, 0, _, _],
281
- ], ['var(--nice-success, #40a040)', '#308030']);
247
+ [_, _, _, _, _, _, _, _, 0, _],
248
+ [_, _, _, _, _, _, _, 0, 0, 0],
249
+ [_, _, _, _, _, _, 0, 0, 0, 0],
250
+ [_, _, _, _, _, 0, 0, 0, 0, 0],
251
+ [_, _, _, _, 0, 0, 0, 0, 0, 0],
252
+ [_, _, _, 0, 0, 0, 0, 0, 0, 0],
253
+ [_, _, 0, 0, 0, 0, 0, 0, 0, _],
254
+ [_, 0, 0, 0, 0, 0, 0, 0, _, _]
255
+ ], ["var(--nice-success, #40a040)", "#308030"]);
282
256
  const WING_BAT = /* @__PURE__ */ createPartData(10, 7, [
283
- [_, _, 0, _, _, 0, _, _, 0, _],
284
- [_, 0, 0, _, 0, 0, _, 0, 0, _],
285
- [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
286
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
287
- [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
288
- [_, _, 0, 0, 0, 0, 0, 0, _, _],
289
- [_, _, _, 0, 0, 0, 0, _, _, _],
290
- ], ['var(--nice-border, #404040)', '#303030']);
291
- /* ── Manes ── */
257
+ [_, _, 0, _, _, 0, _, _, 0, _],
258
+ [_, 0, 0, _, 0, 0, _, 0, 0, _],
259
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
260
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
261
+ [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
262
+ [_, _, 0, 0, 0, 0, 0, 0, _, _],
263
+ [_, _, _, 0, 0, 0, 0, _, _, _]
264
+ ], ["var(--nice-border, #404040)", "#303030"]);
292
265
  const MANE_SHORT = /* @__PURE__ */ createPartData(6, 4, [
293
- [_, _, 0, 0, _, _],
294
- [_, 0, 0, 0, 0, _],
295
- [0, 0, 0, 0, 0, 0],
296
- [_, _, 0, 0, _, _],
297
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)']);
266
+ [_, _, 0, 0, _, _],
267
+ [_, 0, 0, 0, 0, _],
268
+ [0, 0, 0, 0, 0, 0],
269
+ [_, _, 0, 0, _, _]
270
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)"]);
298
271
  const MANE_LONG = /* @__PURE__ */ createPartData(6, 8, [
299
- [_, _, 0, 0, _, _],
300
- [_, 0, 0, 0, 0, _],
301
- [0, 0, 0, 0, 0, 0],
302
- [0, 0, 0, 0, 0, 0],
303
- [0, 0, 0, 0, 0, 0],
304
- [_, 0, 0, 0, 0, _],
305
- [_, 0, 0, 0, 0, _],
306
- [_, _, 0, 0, _, _],
307
- ], ['var(--nice-warning-dark, #c08848)', 'var(--nice-warning-dark, #a06830)']);
308
- /* ── Horns ── */
272
+ [_, _, 0, 0, _, _],
273
+ [_, 0, 0, 0, 0, _],
274
+ [0, 0, 0, 0, 0, 0],
275
+ [0, 0, 0, 0, 0, 0],
276
+ [0, 0, 0, 0, 0, 0],
277
+ [_, 0, 0, 0, 0, _],
278
+ [_, 0, 0, 0, 0, _],
279
+ [_, _, 0, 0, _, _]
280
+ ], ["var(--nice-warning-dark, #c08848)", "var(--nice-warning-dark, #a06830)"]);
309
281
  const HORNS_SMALL = /* @__PURE__ */ createPartData(8, 3, [
310
- [0, _, _, _, _, _, _, 0],
311
- [0, 0, _, _, _, _, 0, 0],
312
- [_, 0, _, _, _, _, 0, _],
313
- ], ['#f0e8d0', '#d8d0b8']);
282
+ [0, _, _, _, _, _, _, 0],
283
+ [0, 0, _, _, _, _, 0, 0],
284
+ [_, 0, _, _, _, _, 0, _]
285
+ ], ["#f0e8d0", "#d8d0b8"]);
314
286
  const HORNS_DRAGON = /* @__PURE__ */ createPartData(10, 4, [
315
- [0, _, _, _, _, _, _, _, _, 0],
316
- [0, 0, _, _, _, _, _, _, 0, 0],
317
- [_, 0, 0, _, _, _, _, 0, 0, _],
318
- [_, _, 0, _, _, _, _, 0, _, _],
319
- ], ['#805020', '#603818']);
320
- /* ════════════════════════════════════════════════════════════════
321
- REGISTER ALL ANIMAL PARTS
322
- ════════════════════════════════════════════════════════════════ */
287
+ [0, _, _, _, _, _, _, _, _, 0],
288
+ [0, 0, _, _, _, _, _, _, 0, 0],
289
+ [_, 0, 0, _, _, _, _, 0, 0, _],
290
+ [_, _, 0, _, _, _, _, 0, _, _]
291
+ ], ["#805020", "#603818"]);
323
292
  const ANIMAL_PARTS = [
324
- // ── Heads ──
325
- {
326
- id: 'animal-head-cat', name: 'Cat Head', category: 'animalHead', slot: 'head',
327
- anchorX: 4, anchorY: 6, zOrder: 10, tags: ['cat', 'small', 'pet'],
328
- pixels: generateMirroredDirections({ S: CAT_HEAD_S, E: CAT_HEAD_E }),
329
- recolorableIndices: [0, 1],
330
- },
331
- {
332
- id: 'animal-head-dog', name: 'Dog Head', category: 'animalHead', slot: 'head',
333
- anchorX: 4, anchorY: 7, zOrder: 10, tags: ['dog', 'medium', 'pet'],
334
- pixels: generateMirroredDirections({ S: DOG_HEAD_S, E: DOG_HEAD_E }),
335
- recolorableIndices: [0, 1],
336
- },
337
- {
338
- id: 'animal-head-wolf', name: 'Wolf Head', category: 'animalHead', slot: 'head',
339
- anchorX: 5, anchorY: 7, zOrder: 10, tags: ['wolf', 'wild', 'predator'],
340
- pixels: { S: WOLF_HEAD_S },
341
- recolorableIndices: [0, 1],
342
- },
343
- {
344
- id: 'animal-head-bird', name: 'Bird Head', category: 'animalHead', slot: 'head',
345
- anchorX: 3, anchorY: 5, zOrder: 10, tags: ['bird', 'small', 'flying'],
346
- pixels: { S: BIRD_HEAD_S },
347
- recolorableIndices: [0, 1],
348
- },
349
- {
350
- id: 'animal-head-dragon', name: 'Dragon Head', category: 'animalHead', slot: 'head',
351
- anchorX: 5, anchorY: 8, zOrder: 10, tags: ['dragon', 'fantasy', 'large'],
352
- pixels: { S: DRAGON_HEAD_S },
353
- recolorableIndices: [0, 1],
354
- },
355
- {
356
- id: 'animal-head-rabbit', name: 'Rabbit Head', category: 'animalHead', slot: 'head',
357
- anchorX: 4, anchorY: 9, zOrder: 10, tags: ['rabbit', 'small', 'pet'],
358
- pixels: { S: RABBIT_HEAD_S },
359
- recolorableIndices: [0, 1],
360
- },
361
- {
362
- id: 'animal-head-bear', name: 'Bear Head', category: 'animalHead', slot: 'head',
363
- anchorX: 5, anchorY: 8, zOrder: 10, tags: ['bear', 'large', 'wild'],
364
- pixels: { S: BEAR_HEAD_S },
365
- recolorableIndices: [0, 1],
366
- },
367
- {
368
- id: 'animal-head-horse', name: 'Horse Head', category: 'animalHead', slot: 'head',
369
- anchorX: 4, anchorY: 9, zOrder: 10, tags: ['horse', 'large', 'rideable'],
370
- pixels: { S: HORSE_HEAD_S },
371
- recolorableIndices: [0, 1],
372
- },
373
- // ── Bodies ──
374
- {
375
- id: 'animal-body-small', name: 'Small Body', category: 'animalBody', slot: 'body',
376
- anchorX: 4, anchorY: 0, zOrder: 5, tags: ['small', 'cat', 'rabbit'],
377
- pixels: { S: BODY_SMALL },
378
- recolorableIndices: [0, 1],
379
- },
380
- {
381
- id: 'animal-body-medium', name: 'Medium Body', category: 'animalBody', slot: 'body',
382
- anchorX: 6, anchorY: 0, zOrder: 5, tags: ['medium', 'dog', 'wolf'],
383
- pixels: { S: BODY_MEDIUM },
384
- recolorableIndices: [0, 1],
385
- },
386
- {
387
- id: 'animal-body-large', name: 'Large Body', category: 'animalBody', slot: 'body',
388
- anchorX: 7, anchorY: 0, zOrder: 5, tags: ['large', 'bear', 'horse'],
389
- pixels: { S: BODY_LARGE },
390
- recolorableIndices: [0, 1],
391
- },
392
- {
393
- id: 'animal-body-bird', name: 'Bird Body', category: 'animalBody', slot: 'body',
394
- anchorX: 4, anchorY: 0, zOrder: 5, tags: ['bird', 'small', 'flying'],
395
- pixels: { S: BODY_BIRD },
396
- recolorableIndices: [0, 1],
397
- },
398
- {
399
- id: 'animal-body-dragon', name: 'Dragon Body', category: 'animalBody', slot: 'body',
400
- anchorX: 7, anchorY: 0, zOrder: 5, tags: ['dragon', 'fantasy', 'large'],
401
- pixels: { S: BODY_DRAGON },
402
- recolorableIndices: [0, 1],
403
- },
404
- // ── Legs ──
405
- {
406
- id: 'animal-leg-thin', name: 'Thin Leg', category: 'animalLeg', slot: 'leftLeg',
407
- anchorX: 1, anchorY: 0, zOrder: 3, tags: ['thin', 'small', 'cat', 'dog'],
408
- pixels: { S: LEG_THIN },
409
- recolorableIndices: [0, 1],
410
- },
411
- {
412
- id: 'animal-leg-thick', name: 'Thick Leg', category: 'animalLeg', slot: 'leftLeg',
413
- anchorX: 1, anchorY: 0, zOrder: 3, tags: ['thick', 'large', 'bear', 'horse'],
414
- pixels: { S: LEG_THICK },
415
- recolorableIndices: [0, 1],
416
- },
417
- {
418
- id: 'animal-leg-bird', name: 'Bird Leg', category: 'animalLeg', slot: 'leftLeg',
419
- anchorX: 1, anchorY: 0, zOrder: 3, tags: ['bird', 'claw'],
420
- pixels: { S: LEG_BIRD },
421
- recolorableIndices: [0, 1],
422
- },
423
- {
424
- id: 'animal-leg-dragon', name: 'Dragon Leg', category: 'animalLeg', slot: 'leftLeg',
425
- anchorX: 1, anchorY: 0, zOrder: 3, tags: ['dragon', 'claw', 'large'],
426
- pixels: { S: LEG_DRAGON },
427
- recolorableIndices: [0, 1],
428
- },
429
- // ── Tails ──
430
- {
431
- id: 'animal-tail-short', name: 'Short Tail', category: 'animalTail', slot: 'tail',
432
- anchorX: 0, anchorY: 1, zOrder: 2, tags: ['short', 'cat', 'dog'],
433
- pixels: { S: TAIL_SHORT },
434
- recolorableIndices: [0, 1],
435
- },
436
- {
437
- id: 'animal-tail-long', name: 'Long Tail', category: 'animalTail', slot: 'tail',
438
- anchorX: 0, anchorY: 1, zOrder: 2, tags: ['long', 'dog', 'wolf'],
439
- pixels: { S: TAIL_LONG },
440
- recolorableIndices: [0, 1],
441
- },
442
- {
443
- id: 'animal-tail-fluffy', name: 'Fluffy Tail', category: 'animalTail', slot: 'tail',
444
- anchorX: 0, anchorY: 2, zOrder: 2, tags: ['fluffy', 'fox', 'wolf'],
445
- pixels: { S: TAIL_FLUFFY },
446
- recolorableIndices: [0, 1],
447
- },
448
- {
449
- id: 'animal-tail-dragon', name: 'Dragon Tail', category: 'animalTail', slot: 'tail',
450
- anchorX: 0, anchorY: 1, zOrder: 2, tags: ['dragon', 'spiked'],
451
- pixels: { S: TAIL_DRAGON },
452
- recolorableIndices: [0, 1],
453
- },
454
- {
455
- id: 'animal-tail-bird', name: 'Bird Tail', category: 'animalTail', slot: 'tail',
456
- anchorX: 2, anchorY: 0, zOrder: 2, tags: ['bird', 'feather'],
457
- pixels: { S: TAIL_BIRD },
458
- recolorableIndices: [0, 1],
459
- },
460
- // ── Wings ──
461
- {
462
- id: 'animal-wing-small', name: 'Small Wing', category: 'animalWing', slot: 'wing',
463
- anchorX: 0, anchorY: 4, zOrder: 8, tags: ['small', 'bird'],
464
- pixels: { S: WING_SMALL },
465
- recolorableIndices: [0, 1],
466
- },
467
- {
468
- id: 'animal-wing-large', name: 'Large Wing', category: 'animalWing', slot: 'wing',
469
- anchorX: 0, anchorY: 7, zOrder: 8, tags: ['large', 'dragon'],
470
- pixels: { S: WING_LARGE },
471
- recolorableIndices: [0, 1],
472
- },
473
- {
474
- id: 'animal-wing-bat', name: 'Bat Wing', category: 'animalWing', slot: 'wing',
475
- anchorX: 0, anchorY: 6, zOrder: 8, tags: ['bat', 'dragon', 'dark'],
476
- pixels: { S: WING_BAT },
477
- recolorableIndices: [0, 1],
478
- },
479
- // ── Manes ──
480
- {
481
- id: 'animal-mane-short', name: 'Short Mane', category: 'animalMane', slot: 'mane',
482
- anchorX: 3, anchorY: 0, zOrder: 9, tags: ['short', 'horse'],
483
- pixels: { S: MANE_SHORT },
484
- recolorableIndices: [0, 1],
485
- },
486
- {
487
- id: 'animal-mane-long', name: 'Long Mane', category: 'animalMane', slot: 'mane',
488
- anchorX: 3, anchorY: 0, zOrder: 9, tags: ['long', 'lion', 'horse'],
489
- pixels: { S: MANE_LONG },
490
- recolorableIndices: [0, 1],
491
- },
492
- // ── Horns ──
493
- {
494
- id: 'animal-horns-small', name: 'Small Horns', category: 'animalHead', slot: 'head',
495
- anchorX: 4, anchorY: 2, zOrder: 12, tags: ['horns', 'small', 'goat'],
496
- pixels: { S: HORNS_SMALL },
497
- recolorableIndices: [0, 1],
498
- },
499
- {
500
- id: 'animal-horns-dragon', name: 'Dragon Horns', category: 'animalHead', slot: 'head',
501
- anchorX: 5, anchorY: 3, zOrder: 12, tags: ['horns', 'dragon', 'large'],
502
- pixels: { S: HORNS_DRAGON },
503
- recolorableIndices: [0, 1],
504
- },
293
+ // ── Heads ──
294
+ {
295
+ id: "animal-head-cat",
296
+ name: "Cat Head",
297
+ category: "animalHead",
298
+ slot: "head",
299
+ anchorX: 4,
300
+ anchorY: 6,
301
+ zOrder: 10,
302
+ tags: ["cat", "small", "pet"],
303
+ pixels: generateMirroredDirections({ S: CAT_HEAD_S, E: CAT_HEAD_E }),
304
+ recolorableIndices: [0, 1]
305
+ },
306
+ {
307
+ id: "animal-head-dog",
308
+ name: "Dog Head",
309
+ category: "animalHead",
310
+ slot: "head",
311
+ anchorX: 4,
312
+ anchorY: 7,
313
+ zOrder: 10,
314
+ tags: ["dog", "medium", "pet"],
315
+ pixels: generateMirroredDirections({ S: DOG_HEAD_S, E: DOG_HEAD_E }),
316
+ recolorableIndices: [0, 1]
317
+ },
318
+ {
319
+ id: "animal-head-wolf",
320
+ name: "Wolf Head",
321
+ category: "animalHead",
322
+ slot: "head",
323
+ anchorX: 5,
324
+ anchorY: 7,
325
+ zOrder: 10,
326
+ tags: ["wolf", "wild", "predator"],
327
+ pixels: { S: WOLF_HEAD_S },
328
+ recolorableIndices: [0, 1]
329
+ },
330
+ {
331
+ id: "animal-head-bird",
332
+ name: "Bird Head",
333
+ category: "animalHead",
334
+ slot: "head",
335
+ anchorX: 3,
336
+ anchorY: 5,
337
+ zOrder: 10,
338
+ tags: ["bird", "small", "flying"],
339
+ pixels: { S: BIRD_HEAD_S },
340
+ recolorableIndices: [0, 1]
341
+ },
342
+ {
343
+ id: "animal-head-dragon",
344
+ name: "Dragon Head",
345
+ category: "animalHead",
346
+ slot: "head",
347
+ anchorX: 5,
348
+ anchorY: 8,
349
+ zOrder: 10,
350
+ tags: ["dragon", "fantasy", "large"],
351
+ pixels: { S: DRAGON_HEAD_S },
352
+ recolorableIndices: [0, 1]
353
+ },
354
+ {
355
+ id: "animal-head-rabbit",
356
+ name: "Rabbit Head",
357
+ category: "animalHead",
358
+ slot: "head",
359
+ anchorX: 4,
360
+ anchorY: 9,
361
+ zOrder: 10,
362
+ tags: ["rabbit", "small", "pet"],
363
+ pixels: { S: RABBIT_HEAD_S },
364
+ recolorableIndices: [0, 1]
365
+ },
366
+ {
367
+ id: "animal-head-bear",
368
+ name: "Bear Head",
369
+ category: "animalHead",
370
+ slot: "head",
371
+ anchorX: 5,
372
+ anchorY: 8,
373
+ zOrder: 10,
374
+ tags: ["bear", "large", "wild"],
375
+ pixels: { S: BEAR_HEAD_S },
376
+ recolorableIndices: [0, 1]
377
+ },
378
+ {
379
+ id: "animal-head-horse",
380
+ name: "Horse Head",
381
+ category: "animalHead",
382
+ slot: "head",
383
+ anchorX: 4,
384
+ anchorY: 9,
385
+ zOrder: 10,
386
+ tags: ["horse", "large", "rideable"],
387
+ pixels: { S: HORSE_HEAD_S },
388
+ recolorableIndices: [0, 1]
389
+ },
390
+ // ── Bodies ──
391
+ {
392
+ id: "animal-body-small",
393
+ name: "Small Body",
394
+ category: "animalBody",
395
+ slot: "body",
396
+ anchorX: 4,
397
+ anchorY: 0,
398
+ zOrder: 5,
399
+ tags: ["small", "cat", "rabbit"],
400
+ pixels: { S: BODY_SMALL },
401
+ recolorableIndices: [0, 1]
402
+ },
403
+ {
404
+ id: "animal-body-medium",
405
+ name: "Medium Body",
406
+ category: "animalBody",
407
+ slot: "body",
408
+ anchorX: 6,
409
+ anchorY: 0,
410
+ zOrder: 5,
411
+ tags: ["medium", "dog", "wolf"],
412
+ pixels: { S: BODY_MEDIUM },
413
+ recolorableIndices: [0, 1]
414
+ },
415
+ {
416
+ id: "animal-body-large",
417
+ name: "Large Body",
418
+ category: "animalBody",
419
+ slot: "body",
420
+ anchorX: 7,
421
+ anchorY: 0,
422
+ zOrder: 5,
423
+ tags: ["large", "bear", "horse"],
424
+ pixels: { S: BODY_LARGE },
425
+ recolorableIndices: [0, 1]
426
+ },
427
+ {
428
+ id: "animal-body-bird",
429
+ name: "Bird Body",
430
+ category: "animalBody",
431
+ slot: "body",
432
+ anchorX: 4,
433
+ anchorY: 0,
434
+ zOrder: 5,
435
+ tags: ["bird", "small", "flying"],
436
+ pixels: { S: BODY_BIRD },
437
+ recolorableIndices: [0, 1]
438
+ },
439
+ {
440
+ id: "animal-body-dragon",
441
+ name: "Dragon Body",
442
+ category: "animalBody",
443
+ slot: "body",
444
+ anchorX: 7,
445
+ anchorY: 0,
446
+ zOrder: 5,
447
+ tags: ["dragon", "fantasy", "large"],
448
+ pixels: { S: BODY_DRAGON },
449
+ recolorableIndices: [0, 1]
450
+ },
451
+ // ── Legs ──
452
+ {
453
+ id: "animal-leg-thin",
454
+ name: "Thin Leg",
455
+ category: "animalLeg",
456
+ slot: "leftLeg",
457
+ anchorX: 1,
458
+ anchorY: 0,
459
+ zOrder: 3,
460
+ tags: ["thin", "small", "cat", "dog"],
461
+ pixels: { S: LEG_THIN },
462
+ recolorableIndices: [0, 1]
463
+ },
464
+ {
465
+ id: "animal-leg-thick",
466
+ name: "Thick Leg",
467
+ category: "animalLeg",
468
+ slot: "leftLeg",
469
+ anchorX: 1,
470
+ anchorY: 0,
471
+ zOrder: 3,
472
+ tags: ["thick", "large", "bear", "horse"],
473
+ pixels: { S: LEG_THICK },
474
+ recolorableIndices: [0, 1]
475
+ },
476
+ {
477
+ id: "animal-leg-bird",
478
+ name: "Bird Leg",
479
+ category: "animalLeg",
480
+ slot: "leftLeg",
481
+ anchorX: 1,
482
+ anchorY: 0,
483
+ zOrder: 3,
484
+ tags: ["bird", "claw"],
485
+ pixels: { S: LEG_BIRD },
486
+ recolorableIndices: [0, 1]
487
+ },
488
+ {
489
+ id: "animal-leg-dragon",
490
+ name: "Dragon Leg",
491
+ category: "animalLeg",
492
+ slot: "leftLeg",
493
+ anchorX: 1,
494
+ anchorY: 0,
495
+ zOrder: 3,
496
+ tags: ["dragon", "claw", "large"],
497
+ pixels: { S: LEG_DRAGON },
498
+ recolorableIndices: [0, 1]
499
+ },
500
+ // ── Tails ──
501
+ {
502
+ id: "animal-tail-short",
503
+ name: "Short Tail",
504
+ category: "animalTail",
505
+ slot: "tail",
506
+ anchorX: 0,
507
+ anchorY: 1,
508
+ zOrder: 2,
509
+ tags: ["short", "cat", "dog"],
510
+ pixels: { S: TAIL_SHORT },
511
+ recolorableIndices: [0, 1]
512
+ },
513
+ {
514
+ id: "animal-tail-long",
515
+ name: "Long Tail",
516
+ category: "animalTail",
517
+ slot: "tail",
518
+ anchorX: 0,
519
+ anchorY: 1,
520
+ zOrder: 2,
521
+ tags: ["long", "dog", "wolf"],
522
+ pixels: { S: TAIL_LONG },
523
+ recolorableIndices: [0, 1]
524
+ },
525
+ {
526
+ id: "animal-tail-fluffy",
527
+ name: "Fluffy Tail",
528
+ category: "animalTail",
529
+ slot: "tail",
530
+ anchorX: 0,
531
+ anchorY: 2,
532
+ zOrder: 2,
533
+ tags: ["fluffy", "fox", "wolf"],
534
+ pixels: { S: TAIL_FLUFFY },
535
+ recolorableIndices: [0, 1]
536
+ },
537
+ {
538
+ id: "animal-tail-dragon",
539
+ name: "Dragon Tail",
540
+ category: "animalTail",
541
+ slot: "tail",
542
+ anchorX: 0,
543
+ anchorY: 1,
544
+ zOrder: 2,
545
+ tags: ["dragon", "spiked"],
546
+ pixels: { S: TAIL_DRAGON },
547
+ recolorableIndices: [0, 1]
548
+ },
549
+ {
550
+ id: "animal-tail-bird",
551
+ name: "Bird Tail",
552
+ category: "animalTail",
553
+ slot: "tail",
554
+ anchorX: 2,
555
+ anchorY: 0,
556
+ zOrder: 2,
557
+ tags: ["bird", "feather"],
558
+ pixels: { S: TAIL_BIRD },
559
+ recolorableIndices: [0, 1]
560
+ },
561
+ // ── Wings ──
562
+ {
563
+ id: "animal-wing-small",
564
+ name: "Small Wing",
565
+ category: "animalWing",
566
+ slot: "wing",
567
+ anchorX: 0,
568
+ anchorY: 4,
569
+ zOrder: 8,
570
+ tags: ["small", "bird"],
571
+ pixels: { S: WING_SMALL },
572
+ recolorableIndices: [0, 1]
573
+ },
574
+ {
575
+ id: "animal-wing-large",
576
+ name: "Large Wing",
577
+ category: "animalWing",
578
+ slot: "wing",
579
+ anchorX: 0,
580
+ anchorY: 7,
581
+ zOrder: 8,
582
+ tags: ["large", "dragon"],
583
+ pixels: { S: WING_LARGE },
584
+ recolorableIndices: [0, 1]
585
+ },
586
+ {
587
+ id: "animal-wing-bat",
588
+ name: "Bat Wing",
589
+ category: "animalWing",
590
+ slot: "wing",
591
+ anchorX: 0,
592
+ anchorY: 6,
593
+ zOrder: 8,
594
+ tags: ["bat", "dragon", "dark"],
595
+ pixels: { S: WING_BAT },
596
+ recolorableIndices: [0, 1]
597
+ },
598
+ // ── Manes ──
599
+ {
600
+ id: "animal-mane-short",
601
+ name: "Short Mane",
602
+ category: "animalMane",
603
+ slot: "mane",
604
+ anchorX: 3,
605
+ anchorY: 0,
606
+ zOrder: 9,
607
+ tags: ["short", "horse"],
608
+ pixels: { S: MANE_SHORT },
609
+ recolorableIndices: [0, 1]
610
+ },
611
+ {
612
+ id: "animal-mane-long",
613
+ name: "Long Mane",
614
+ category: "animalMane",
615
+ slot: "mane",
616
+ anchorX: 3,
617
+ anchorY: 0,
618
+ zOrder: 9,
619
+ tags: ["long", "lion", "horse"],
620
+ pixels: { S: MANE_LONG },
621
+ recolorableIndices: [0, 1]
622
+ },
623
+ // ── Horns ──
624
+ {
625
+ id: "animal-horns-small",
626
+ name: "Small Horns",
627
+ category: "animalHead",
628
+ slot: "head",
629
+ anchorX: 4,
630
+ anchorY: 2,
631
+ zOrder: 12,
632
+ tags: ["horns", "small", "goat"],
633
+ pixels: { S: HORNS_SMALL },
634
+ recolorableIndices: [0, 1]
635
+ },
636
+ {
637
+ id: "animal-horns-dragon",
638
+ name: "Dragon Horns",
639
+ category: "animalHead",
640
+ slot: "head",
641
+ anchorX: 5,
642
+ anchorY: 3,
643
+ zOrder: 12,
644
+ tags: ["horns", "dragon", "large"],
645
+ pixels: { S: HORNS_DRAGON },
646
+ recolorableIndices: [0, 1]
647
+ }
505
648
  ];
506
649
  function animalAssembly(name, parts, w = 32, h = 32) {
507
- return {
508
- id: `animal-${name.toLowerCase().replace(/\s+/g, '-')}`,
509
- name,
510
- parts,
511
- skeletonId: 'quadruped',
512
- canvasWidth: w,
513
- canvasHeight: h,
514
- projection: 'sideView',
515
- };
650
+ return {
651
+ id: `animal-${name.toLowerCase().replace(/\s+/g, "-")}`,
652
+ name,
653
+ parts,
654
+ skeletonId: "quadruped",
655
+ canvasWidth: w,
656
+ canvasHeight: h,
657
+ projection: "sideView"
658
+ };
516
659
  }
517
660
  const ANIMAL_PRESETS = [
518
- {
519
- id: 'preset-cat', name: 'Cat', description: 'Small domestic cat',
520
- tags: ['cat', 'pet', 'small'],
521
- assembly: animalAssembly('Cat', [
522
- { partId: 'animal-leg-thin', offsetX: 8, offsetY: 22 },
523
- { partId: 'animal-leg-thin', offsetX: 12, offsetY: 22 },
524
- { partId: 'animal-leg-thin', offsetX: 18, offsetY: 22 },
525
- { partId: 'animal-leg-thin', offsetX: 22, offsetY: 22 },
526
- { partId: 'animal-body-small', offsetX: 10, offsetY: 16 },
527
- { partId: 'animal-head-cat', offsetX: 6, offsetY: 9 },
528
- { partId: 'animal-tail-short', offsetX: 22, offsetY: 15 },
529
- ]),
530
- },
531
- {
532
- id: 'preset-dog', name: 'Dog', description: 'Medium-sized dog',
533
- tags: ['dog', 'pet', 'medium'],
534
- assembly: animalAssembly('Dog', [
535
- { partId: 'animal-leg-thin', offsetX: 6, offsetY: 22 },
536
- { partId: 'animal-leg-thin', offsetX: 10, offsetY: 22 },
537
- { partId: 'animal-leg-thin', offsetX: 18, offsetY: 22 },
538
- { partId: 'animal-leg-thin', offsetX: 22, offsetY: 22 },
539
- { partId: 'animal-body-medium', offsetX: 6, offsetY: 14 },
540
- { partId: 'animal-head-dog', offsetX: 2, offsetY: 6 },
541
- { partId: 'animal-tail-long', offsetX: 22, offsetY: 13 },
542
- ]),
543
- },
544
- {
545
- id: 'preset-wolf', name: 'Wolf', description: 'Wild wolf with fluffy tail',
546
- tags: ['wolf', 'wild', 'predator'],
547
- assembly: animalAssembly('Wolf', [
548
- { partId: 'animal-leg-thin', offsetX: 5, offsetY: 22 },
549
- { partId: 'animal-leg-thin', offsetX: 9, offsetY: 22 },
550
- { partId: 'animal-leg-thin', offsetX: 18, offsetY: 22 },
551
- { partId: 'animal-leg-thin', offsetX: 22, offsetY: 22 },
552
- { partId: 'animal-body-medium', offsetX: 5, offsetY: 14 },
553
- { partId: 'animal-head-wolf', offsetX: 1, offsetY: 6 },
554
- { partId: 'animal-tail-fluffy', offsetX: 22, offsetY: 12 },
555
- ]),
556
- },
557
- {
558
- id: 'preset-bird', name: 'Bird', description: 'Small bird with wings',
559
- tags: ['bird', 'flying', 'small'],
560
- assembly: animalAssembly('Bird', [
561
- { partId: 'animal-leg-bird', offsetX: 12, offsetY: 24 },
562
- { partId: 'animal-leg-bird', offsetX: 16, offsetY: 24 },
563
- { partId: 'animal-body-bird', offsetX: 10, offsetY: 17 },
564
- { partId: 'animal-head-bird', offsetX: 9, offsetY: 11 },
565
- { partId: 'animal-wing-small', offsetX: 18, offsetY: 14 },
566
- { partId: 'animal-tail-bird', offsetX: 6, offsetY: 19 },
567
- ]),
568
- },
569
- {
570
- id: 'preset-dragon', name: 'Dragon', description: 'Fire-breathing dragon with wings',
571
- tags: ['dragon', 'fantasy', 'large'],
572
- assembly: animalAssembly('Dragon', [
573
- { partId: 'animal-leg-dragon', offsetX: 4, offsetY: 24 },
574
- { partId: 'animal-leg-dragon', offsetX: 9, offsetY: 24 },
575
- { partId: 'animal-leg-dragon', offsetX: 18, offsetY: 24 },
576
- { partId: 'animal-leg-dragon', offsetX: 23, offsetY: 24 },
577
- { partId: 'animal-body-dragon', offsetX: 4, offsetY: 14 },
578
- { partId: 'animal-head-dragon', offsetX: 0, offsetY: 4 },
579
- { partId: 'animal-horns-dragon', offsetX: 0, offsetY: 1 },
580
- { partId: 'animal-wing-large', offsetX: 18, offsetY: 4 },
581
- { partId: 'animal-tail-dragon', offsetX: 22, offsetY: 18 },
582
- ], 32, 32),
583
- },
584
- {
585
- id: 'preset-rabbit', name: 'Rabbit', description: 'Small fluffy rabbit',
586
- tags: ['rabbit', 'pet', 'small'],
587
- assembly: animalAssembly('Rabbit', [
588
- { partId: 'animal-leg-thin', offsetX: 10, offsetY: 24 },
589
- { partId: 'animal-leg-thin', offsetX: 14, offsetY: 24 },
590
- { partId: 'animal-leg-thin', offsetX: 18, offsetY: 24 },
591
- { partId: 'animal-leg-thin', offsetX: 22, offsetY: 24 },
592
- { partId: 'animal-body-small', offsetX: 10, offsetY: 18 },
593
- { partId: 'animal-head-rabbit', offsetX: 6, offsetY: 8 },
594
- { partId: 'animal-tail-short', offsetX: 22, offsetY: 18 },
595
- ]),
596
- },
597
- {
598
- id: 'preset-bear', name: 'Bear', description: 'Large bear',
599
- tags: ['bear', 'wild', 'large'],
600
- assembly: animalAssembly('Bear', [
601
- { partId: 'animal-leg-thick', offsetX: 4, offsetY: 22 },
602
- { partId: 'animal-leg-thick', offsetX: 9, offsetY: 22 },
603
- { partId: 'animal-leg-thick', offsetX: 18, offsetY: 22 },
604
- { partId: 'animal-leg-thick', offsetX: 23, offsetY: 22 },
605
- { partId: 'animal-body-large', offsetX: 3, offsetY: 12 },
606
- { partId: 'animal-head-bear', offsetX: 0, offsetY: 3 },
607
- { partId: 'animal-tail-short', offsetX: 22, offsetY: 14 },
608
- ]),
609
- },
610
- {
611
- id: 'preset-horse', name: 'Horse', description: 'Horse with mane',
612
- tags: ['horse', 'rideable', 'large'],
613
- assembly: animalAssembly('Horse', [
614
- { partId: 'animal-leg-thick', offsetX: 4, offsetY: 22 },
615
- { partId: 'animal-leg-thick', offsetX: 9, offsetY: 22 },
616
- { partId: 'animal-leg-thick', offsetX: 18, offsetY: 22 },
617
- { partId: 'animal-leg-thick', offsetX: 23, offsetY: 22 },
618
- { partId: 'animal-body-large', offsetX: 3, offsetY: 12 },
619
- { partId: 'animal-head-horse', offsetX: 0, offsetY: 2 },
620
- { partId: 'animal-mane-long', offsetX: 4, offsetY: 4 },
621
- { partId: 'animal-tail-long', offsetX: 22, offsetY: 14 },
622
- ]),
623
- },
624
- {
625
- id: 'preset-phoenix', name: 'Phoenix', description: 'Mythical fire bird',
626
- tags: ['phoenix', 'fantasy', 'bird', 'fire'],
627
- assembly: animalAssembly('Phoenix', [
628
- { partId: 'animal-leg-bird', offsetX: 12, offsetY: 24 },
629
- { partId: 'animal-leg-bird', offsetX: 16, offsetY: 24 },
630
- { partId: 'animal-body-bird', offsetX: 10, offsetY: 17,
631
- colorOverrides: { 0: '#f06020', 1: '#c04010' } },
632
- { partId: 'animal-head-bird', offsetX: 9, offsetY: 11,
633
- colorOverrides: { 0: '#f06020', 1: '#c04010', 3: '#f0d060' } },
634
- { partId: 'animal-wing-large', offsetX: 18, offsetY: 10,
635
- colorOverrides: { 0: '#f0a020', 1: '#d06010' } },
636
- { partId: 'animal-tail-bird', offsetX: 4, offsetY: 19,
637
- colorOverrides: { 0: '#f07030', 1: '#d05020' } },
638
- ]),
639
- },
661
+ {
662
+ id: "preset-cat",
663
+ name: "Cat",
664
+ description: "Small domestic cat",
665
+ tags: ["cat", "pet", "small"],
666
+ assembly: animalAssembly("Cat", [
667
+ { partId: "animal-leg-thin", offsetX: 8, offsetY: 22 },
668
+ { partId: "animal-leg-thin", offsetX: 12, offsetY: 22 },
669
+ { partId: "animal-leg-thin", offsetX: 18, offsetY: 22 },
670
+ { partId: "animal-leg-thin", offsetX: 22, offsetY: 22 },
671
+ { partId: "animal-body-small", offsetX: 10, offsetY: 16 },
672
+ { partId: "animal-head-cat", offsetX: 6, offsetY: 9 },
673
+ { partId: "animal-tail-short", offsetX: 22, offsetY: 15 }
674
+ ])
675
+ },
676
+ {
677
+ id: "preset-dog",
678
+ name: "Dog",
679
+ description: "Medium-sized dog",
680
+ tags: ["dog", "pet", "medium"],
681
+ assembly: animalAssembly("Dog", [
682
+ { partId: "animal-leg-thin", offsetX: 6, offsetY: 22 },
683
+ { partId: "animal-leg-thin", offsetX: 10, offsetY: 22 },
684
+ { partId: "animal-leg-thin", offsetX: 18, offsetY: 22 },
685
+ { partId: "animal-leg-thin", offsetX: 22, offsetY: 22 },
686
+ { partId: "animal-body-medium", offsetX: 6, offsetY: 14 },
687
+ { partId: "animal-head-dog", offsetX: 2, offsetY: 6 },
688
+ { partId: "animal-tail-long", offsetX: 22, offsetY: 13 }
689
+ ])
690
+ },
691
+ {
692
+ id: "preset-wolf",
693
+ name: "Wolf",
694
+ description: "Wild wolf with fluffy tail",
695
+ tags: ["wolf", "wild", "predator"],
696
+ assembly: animalAssembly("Wolf", [
697
+ { partId: "animal-leg-thin", offsetX: 5, offsetY: 22 },
698
+ { partId: "animal-leg-thin", offsetX: 9, offsetY: 22 },
699
+ { partId: "animal-leg-thin", offsetX: 18, offsetY: 22 },
700
+ { partId: "animal-leg-thin", offsetX: 22, offsetY: 22 },
701
+ { partId: "animal-body-medium", offsetX: 5, offsetY: 14 },
702
+ { partId: "animal-head-wolf", offsetX: 1, offsetY: 6 },
703
+ { partId: "animal-tail-fluffy", offsetX: 22, offsetY: 12 }
704
+ ])
705
+ },
706
+ {
707
+ id: "preset-bird",
708
+ name: "Bird",
709
+ description: "Small bird with wings",
710
+ tags: ["bird", "flying", "small"],
711
+ assembly: animalAssembly("Bird", [
712
+ { partId: "animal-leg-bird", offsetX: 12, offsetY: 24 },
713
+ { partId: "animal-leg-bird", offsetX: 16, offsetY: 24 },
714
+ { partId: "animal-body-bird", offsetX: 10, offsetY: 17 },
715
+ { partId: "animal-head-bird", offsetX: 9, offsetY: 11 },
716
+ { partId: "animal-wing-small", offsetX: 18, offsetY: 14 },
717
+ { partId: "animal-tail-bird", offsetX: 6, offsetY: 19 }
718
+ ])
719
+ },
720
+ {
721
+ id: "preset-dragon",
722
+ name: "Dragon",
723
+ description: "Fire-breathing dragon with wings",
724
+ tags: ["dragon", "fantasy", "large"],
725
+ assembly: animalAssembly("Dragon", [
726
+ { partId: "animal-leg-dragon", offsetX: 4, offsetY: 24 },
727
+ { partId: "animal-leg-dragon", offsetX: 9, offsetY: 24 },
728
+ { partId: "animal-leg-dragon", offsetX: 18, offsetY: 24 },
729
+ { partId: "animal-leg-dragon", offsetX: 23, offsetY: 24 },
730
+ { partId: "animal-body-dragon", offsetX: 4, offsetY: 14 },
731
+ { partId: "animal-head-dragon", offsetX: 0, offsetY: 4 },
732
+ { partId: "animal-horns-dragon", offsetX: 0, offsetY: 1 },
733
+ { partId: "animal-wing-large", offsetX: 18, offsetY: 4 },
734
+ { partId: "animal-tail-dragon", offsetX: 22, offsetY: 18 }
735
+ ], 32, 32)
736
+ },
737
+ {
738
+ id: "preset-rabbit",
739
+ name: "Rabbit",
740
+ description: "Small fluffy rabbit",
741
+ tags: ["rabbit", "pet", "small"],
742
+ assembly: animalAssembly("Rabbit", [
743
+ { partId: "animal-leg-thin", offsetX: 10, offsetY: 24 },
744
+ { partId: "animal-leg-thin", offsetX: 14, offsetY: 24 },
745
+ { partId: "animal-leg-thin", offsetX: 18, offsetY: 24 },
746
+ { partId: "animal-leg-thin", offsetX: 22, offsetY: 24 },
747
+ { partId: "animal-body-small", offsetX: 10, offsetY: 18 },
748
+ { partId: "animal-head-rabbit", offsetX: 6, offsetY: 8 },
749
+ { partId: "animal-tail-short", offsetX: 22, offsetY: 18 }
750
+ ])
751
+ },
752
+ {
753
+ id: "preset-bear",
754
+ name: "Bear",
755
+ description: "Large bear",
756
+ tags: ["bear", "wild", "large"],
757
+ assembly: animalAssembly("Bear", [
758
+ { partId: "animal-leg-thick", offsetX: 4, offsetY: 22 },
759
+ { partId: "animal-leg-thick", offsetX: 9, offsetY: 22 },
760
+ { partId: "animal-leg-thick", offsetX: 18, offsetY: 22 },
761
+ { partId: "animal-leg-thick", offsetX: 23, offsetY: 22 },
762
+ { partId: "animal-body-large", offsetX: 3, offsetY: 12 },
763
+ { partId: "animal-head-bear", offsetX: 0, offsetY: 3 },
764
+ { partId: "animal-tail-short", offsetX: 22, offsetY: 14 }
765
+ ])
766
+ },
767
+ {
768
+ id: "preset-horse",
769
+ name: "Horse",
770
+ description: "Horse with mane",
771
+ tags: ["horse", "rideable", "large"],
772
+ assembly: animalAssembly("Horse", [
773
+ { partId: "animal-leg-thick", offsetX: 4, offsetY: 22 },
774
+ { partId: "animal-leg-thick", offsetX: 9, offsetY: 22 },
775
+ { partId: "animal-leg-thick", offsetX: 18, offsetY: 22 },
776
+ { partId: "animal-leg-thick", offsetX: 23, offsetY: 22 },
777
+ { partId: "animal-body-large", offsetX: 3, offsetY: 12 },
778
+ { partId: "animal-head-horse", offsetX: 0, offsetY: 2 },
779
+ { partId: "animal-mane-long", offsetX: 4, offsetY: 4 },
780
+ { partId: "animal-tail-long", offsetX: 22, offsetY: 14 }
781
+ ])
782
+ },
783
+ {
784
+ id: "preset-phoenix",
785
+ name: "Phoenix",
786
+ description: "Mythical fire bird",
787
+ tags: ["phoenix", "fantasy", "bird", "fire"],
788
+ assembly: animalAssembly("Phoenix", [
789
+ { partId: "animal-leg-bird", offsetX: 12, offsetY: 24 },
790
+ { partId: "animal-leg-bird", offsetX: 16, offsetY: 24 },
791
+ {
792
+ partId: "animal-body-bird",
793
+ offsetX: 10,
794
+ offsetY: 17,
795
+ colorOverrides: { 0: "#f06020", 1: "#c04010" }
796
+ },
797
+ {
798
+ partId: "animal-head-bird",
799
+ offsetX: 9,
800
+ offsetY: 11,
801
+ colorOverrides: { 0: "#f06020", 1: "#c04010", 3: "#f0d060" }
802
+ },
803
+ {
804
+ partId: "animal-wing-large",
805
+ offsetX: 18,
806
+ offsetY: 10,
807
+ colorOverrides: { 0: "#f0a020", 1: "#d06010" }
808
+ },
809
+ {
810
+ partId: "animal-tail-bird",
811
+ offsetX: 4,
812
+ offsetY: 19,
813
+ colorOverrides: { 0: "#f07030", 1: "#d05020" }
814
+ }
815
+ ])
816
+ }
640
817
  ];
641
- /** Initialize: register all animal parts */
642
818
  function initAnimalParts() {
643
- registerParts(ANIMAL_PARTS);
819
+ registerParts(ANIMAL_PARTS);
644
820
  }
645
-
646
- export { ANIMAL_PARTS, ANIMAL_PRESETS, FEATHER_PALETTES, FUR_PALETTES, SCALE_PALETTES, initAnimalParts };
821
+ export {
822
+ ANIMAL_PARTS,
823
+ ANIMAL_PRESETS,
824
+ FEATHER_PALETTES,
825
+ FUR_PALETTES,
826
+ SCALE_PALETTES,
827
+ initAnimalParts
828
+ };