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