@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,55 +1,44 @@
1
- 'use strict';
2
-
3
- var spriteGeneratorCore = require('./spriteGeneratorCore.js');
4
-
5
- /**
6
- * characterGeneratorPresets.ts — Extensive library of character parts
7
- * for the sprite generator. Provides heads, hair, torsos, arms, legs,
8
- * faces, and equipment in multiple styles at 16×16 and 32×32 sizes.
9
- *
10
- * Each part has directional pixel data (S, E, N with mirroring for W, etc.)
11
- */
12
- /* ════════════════════════════════════════════════════════════════
13
- COLOR PALETTES
14
- ════════════════════════════════════════════════════════════════ */
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const spriteGeneratorCore = require("./spriteGeneratorCore.js");
15
4
  const SKIN_PALETTES = {
16
- light: ['var(--nice-warning-bg, #ffecd2)', '#f5c6a0', '#e0a070', '#c07848', '#8b5e3c'],
17
- medium: ['#e8c090', '#d4a06c', '#b88050', '#946038', '#6b4423'],
18
- dark: ['#c08050', '#a06838', '#805028', '#603818', '#402010'],
19
- fantasy1: ['#d0f0d0', '#a8d8a0', '#78b868', '#508030', '#304818'],
20
- fantasy2: ['#d0d8f0', '#a8b0d8', '#7888b8', '#506090', '#303860'],
5
+ light: ["var(--nice-warning-bg, #ffecd2)", "#f5c6a0", "#e0a070", "#c07848", "#8b5e3c"],
6
+ medium: ["#e8c090", "#d4a06c", "#b88050", "#946038", "#6b4423"],
7
+ dark: ["#c08050", "#a06838", "#805028", "#603818", "#402010"],
8
+ fantasy1: ["#d0f0d0", "#a8d8a0", "#78b868", "#508030", "#304818"],
9
+ fantasy2: ["#d0d8f0", "#a8b0d8", "#7888b8", "#506090", "#303860"]
21
10
  };
22
11
  const HAIR_PALETTES = {
23
- black: ['var(--nice-bg, #1a1a2e)', '#101020', '#080810'],
24
- brown: ['#8b6914', '#6b4e0a', '#4a3508'],
25
- blonde: ['#f0d060', '#d0b040', '#b09028'],
26
- red: ['#d03020', '#a02018', '#781810'],
27
- white: [
28
- 'var(--nice-bg-secondary, #f0f0f0)',
29
- 'var(--nice-border, #d0d0d0)',
30
- 'var(--nice-text-muted, #a0a0a0)',
31
- ],
32
- blue: ['#4080e0', '#3060b0', '#204080'],
33
- green: ['#40c040', '#309030', '#206020'],
34
- pink: ['#f080b0', '#d06090', '#a04070'],
35
- purple: ['#a040e0', '#8030b0', '#602080'],
12
+ black: ["var(--nice-bg, #1a1a2e)", "#101020", "#080810"],
13
+ brown: ["#8b6914", "#6b4e0a", "#4a3508"],
14
+ blonde: ["#f0d060", "#d0b040", "#b09028"],
15
+ red: ["#d03020", "#a02018", "#781810"],
16
+ white: [
17
+ "var(--nice-bg-secondary, #f0f0f0)",
18
+ "var(--nice-border, #d0d0d0)",
19
+ "var(--nice-text-muted, #a0a0a0)"
20
+ ],
21
+ blue: ["#4080e0", "#3060b0", "#204080"],
22
+ green: ["#40c040", "#309030", "#206020"],
23
+ pink: ["#f080b0", "#d06090", "#a04070"],
24
+ purple: ["#a040e0", "#8030b0", "#602080"]
36
25
  };
37
26
  const CLOTHING_PALETTES = {
38
- leather: ['#b08060', '#906840', '#705028'],
39
- iron: ['var(--nice-border, #c0c0c8)', '#909098', '#606068'],
40
- gold: ['#f0d060', '#d0b040', '#a08020'],
41
- cloth_r: ['#d04040', '#b02020', '#801010'],
42
- cloth_b: ['#4060d0', '#3040b0', '#202880'],
43
- cloth_g: ['#40b040', '#208020', '#105010'],
44
- cloth_w: ['var(--nice-bg-secondary, #f0f0f0)', 'var(--nice-border, #d0d0d0)', '#b0b0b0'],
45
- cloth_k: ['var(--nice-border, #404040)', '#282828', '#181818'],
46
- royal: ['#8020a0', '#601080', '#400860'],
27
+ leather: ["#b08060", "#906840", "#705028"],
28
+ iron: ["var(--nice-border, #c0c0c8)", "#909098", "#606068"],
29
+ gold: ["#f0d060", "#d0b040", "#a08020"],
30
+ cloth_r: ["#d04040", "#b02020", "#801010"],
31
+ cloth_b: ["#4060d0", "#3040b0", "#202880"],
32
+ cloth_g: ["#40b040", "#208020", "#105010"],
33
+ cloth_w: ["var(--nice-bg-secondary, #f0f0f0)", "var(--nice-border, #d0d0d0)", "#b0b0b0"],
34
+ cloth_k: ["var(--nice-border, #404040)", "#282828", "#181818"],
35
+ royal: ["#8020a0", "#601080", "#400860"]
47
36
  };
48
- /* ════════════════════════════════════════════════════════════════
49
- 16×16 CHARACTER PARTS — HEADS
50
- ════════════════════════════════════════════════════════════════ */
51
- const _ = -1; // transparent shorthand
52
- const HEAD_ROUND_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 8, [
37
+ const _ = -1;
38
+ const HEAD_ROUND_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
39
+ 8,
40
+ 8,
41
+ [
53
42
  [_, _, 1, 1, 1, 1, _, _],
54
43
  [_, 1, 0, 0, 0, 0, 1, _],
55
44
  [1, 0, 0, 0, 0, 0, 0, 1],
@@ -57,9 +46,14 @@ const HEAD_ROUND_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 8, [
57
46
  [1, 0, 0, 0, 0, 0, 0, 1],
58
47
  [1, 0, 0, 2, 2, 0, 0, 1],
59
48
  [_, 1, 0, 0, 0, 0, 1, _],
60
- [_, _, 1, 1, 1, 1, _, _],
61
- ], ['var(--nice-warning-bg, #ffecd2)', '#c07848', '#e05050', '#2a2a4e']);
62
- const HEAD_ROUND_E = /* @__PURE__ */ spriteGeneratorCore.createPartData(7, 8, [
49
+ [_, _, 1, 1, 1, 1, _, _]
50
+ ],
51
+ ["var(--nice-warning-bg, #ffecd2)", "#c07848", "#e05050", "#2a2a4e"]
52
+ );
53
+ const HEAD_ROUND_E = /* @__PURE__ */ spriteGeneratorCore.createPartData(
54
+ 7,
55
+ 8,
56
+ [
63
57
  [_, _, 1, 1, 1, _, _],
64
58
  [_, 1, 0, 0, 0, 1, _],
65
59
  [1, 0, 0, 0, 0, 0, 1],
@@ -67,9 +61,14 @@ const HEAD_ROUND_E = /* @__PURE__ */ spriteGeneratorCore.createPartData(7, 8, [
67
61
  [1, 0, 0, 0, 0, 0, 1],
68
62
  [1, 0, 0, 0, 2, 0, 1],
69
63
  [_, 1, 0, 0, 0, 1, _],
70
- [_, _, 1, 1, 1, _, _],
71
- ], ['var(--nice-warning-bg, #ffecd2)', '#c07848', '#e05050', '#2a2a4e']);
72
- const HEAD_ROUND_N = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 8, [
64
+ [_, _, 1, 1, 1, _, _]
65
+ ],
66
+ ["var(--nice-warning-bg, #ffecd2)", "#c07848", "#e05050", "#2a2a4e"]
67
+ );
68
+ const HEAD_ROUND_N = /* @__PURE__ */ spriteGeneratorCore.createPartData(
69
+ 8,
70
+ 8,
71
+ [
73
72
  [_, _, 1, 1, 1, 1, _, _],
74
73
  [_, 1, 0, 0, 0, 0, 1, _],
75
74
  [1, 0, 0, 0, 0, 0, 0, 1],
@@ -77,18 +76,28 @@ const HEAD_ROUND_N = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 8, [
77
76
  [1, 0, 0, 0, 0, 0, 0, 1],
78
77
  [1, 0, 0, 0, 0, 0, 0, 1],
79
78
  [_, 1, 0, 0, 0, 0, 1, _],
80
- [_, _, 1, 1, 1, 1, _, _],
81
- ], ['var(--nice-warning-bg, #ffecd2)', '#c07848', '#e05050', '#2a2a4e']);
82
- const HEAD_SQUARE_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 7, [
79
+ [_, _, 1, 1, 1, 1, _, _]
80
+ ],
81
+ ["var(--nice-warning-bg, #ffecd2)", "#c07848", "#e05050", "#2a2a4e"]
82
+ );
83
+ const HEAD_SQUARE_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
84
+ 8,
85
+ 7,
86
+ [
83
87
  [_, 1, 1, 1, 1, 1, 1, _],
84
88
  [1, 0, 0, 0, 0, 0, 0, 1],
85
89
  [1, 0, 3, 0, 0, 3, 0, 1],
86
90
  [1, 0, 0, 0, 0, 0, 0, 1],
87
91
  [1, 0, 0, 2, 2, 0, 0, 1],
88
92
  [1, 0, 0, 0, 0, 0, 0, 1],
89
- [_, 1, 1, 1, 1, 1, 1, _],
90
- ], ['var(--nice-warning-bg, #ffecd2)', '#c07848', '#e05050', '#2a2a4e']);
91
- const HEAD_CHIBI_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 10, [
93
+ [_, 1, 1, 1, 1, 1, 1, _]
94
+ ],
95
+ ["var(--nice-warning-bg, #ffecd2)", "#c07848", "#e05050", "#2a2a4e"]
96
+ );
97
+ const HEAD_CHIBI_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
98
+ 10,
99
+ 10,
100
+ [
92
101
  [_, _, _, 1, 1, 1, 1, _, _, _],
93
102
  [_, _, 1, 0, 0, 0, 0, 1, _, _],
94
103
  [_, 1, 0, 0, 0, 0, 0, 0, 1, _],
@@ -98,16 +107,25 @@ const HEAD_CHIBI_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 10,
98
107
  [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
99
108
  [1, 0, 0, 0, 2, 2, 0, 0, 0, 1],
100
109
  [_, 1, 0, 0, 0, 0, 0, 0, 1, _],
101
- [_, _, 1, 1, 1, 1, 1, 1, _, _],
102
- ], ['var(--nice-warning-bg, #ffecd2)', '#c07848', '#e05050', '#2a2a4e']);
103
- /* ── HAIR ── */
104
- const HAIR_SHORT_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 4, [
110
+ [_, _, 1, 1, 1, 1, 1, 1, _, _]
111
+ ],
112
+ ["var(--nice-warning-bg, #ffecd2)", "#c07848", "#e05050", "#2a2a4e"]
113
+ );
114
+ const HAIR_SHORT_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
115
+ 8,
116
+ 4,
117
+ [
105
118
  [_, _, 0, 0, 0, 0, _, _],
106
119
  [_, 0, 0, 0, 0, 0, 0, _],
107
120
  [0, 0, 1, 1, 1, 1, 0, 0],
108
- [0, 1, _, _, _, _, 1, 0],
109
- ], ['#4a3508', '#6b4e0a']);
110
- const HAIR_LONG_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 10, [
121
+ [0, 1, _, _, _, _, 1, 0]
122
+ ],
123
+ ["#4a3508", "#6b4e0a"]
124
+ );
125
+ const HAIR_LONG_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
126
+ 10,
127
+ 10,
128
+ [
111
129
  [_, _, _, 0, 0, 0, 0, _, _, _],
112
130
  [_, _, 0, 0, 0, 0, 0, 0, _, _],
113
131
  [_, 0, 0, 1, 1, 1, 1, 0, 0, _],
@@ -117,17 +135,27 @@ const HAIR_LONG_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 10, [
117
135
  [0, 1, _, _, _, _, _, _, 1, 0],
118
136
  [0, 0, _, _, _, _, _, _, 0, 0],
119
137
  [_, 0, _, _, _, _, _, _, 0, _],
120
- [_, 0, 0, _, _, _, _, 0, 0, _],
121
- ], ['#4a3508', '#6b4e0a']);
122
- const HAIR_MOHAWK_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 6, [
138
+ [_, 0, 0, _, _, _, _, 0, 0, _]
139
+ ],
140
+ ["#4a3508", "#6b4e0a"]
141
+ );
142
+ const HAIR_MOHAWK_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
143
+ 8,
144
+ 6,
145
+ [
123
146
  [_, _, _, 0, 0, _, _, _],
124
147
  [_, _, 0, 0, 0, 0, _, _],
125
148
  [_, _, 0, 0, 0, 0, _, _],
126
149
  [_, _, 0, 1, 1, 0, _, _],
127
150
  [_, 0, 1, _, _, 1, 0, _],
128
- [0, 1, _, _, _, _, 1, 0],
129
- ], ['#d03020', '#a02018']);
130
- const HAIR_PONYTAIL_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 8, [
151
+ [0, 1, _, _, _, _, 1, 0]
152
+ ],
153
+ ["#d03020", "#a02018"]
154
+ );
155
+ const HAIR_PONYTAIL_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
156
+ 10,
157
+ 8,
158
+ [
131
159
  [_, _, _, 0, 0, 0, 0, _, _, _],
132
160
  [_, _, 0, 0, 0, 0, 0, 0, _, _],
133
161
  [_, 0, 0, 1, 1, 1, 1, 0, 0, _],
@@ -135,35 +163,54 @@ const HAIR_PONYTAIL_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 8
135
163
  [_, _, _, _, _, _, _, _, 0, 0],
136
164
  [_, _, _, _, _, _, _, _, _, 0],
137
165
  [_, _, _, _, _, _, _, _, _, 0],
138
- [_, _, _, _, _, _, _, _, 0, _],
139
- ], ['#f0d060', '#d0b040']);
140
- const HAIR_SPIKY_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 6, [
166
+ [_, _, _, _, _, _, _, _, 0, _]
167
+ ],
168
+ ["#f0d060", "#d0b040"]
169
+ );
170
+ const HAIR_SPIKY_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
171
+ 10,
172
+ 6,
173
+ [
141
174
  [_, 0, _, _, 0, _, 0, _, _, _],
142
175
  [_, 0, 0, 0, 0, 0, 0, 0, _, _],
143
176
  [0, 0, 0, 0, 0, 0, 0, 0, 0, _],
144
177
  [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
145
178
  [0, 1, _, _, _, _, _, _, 1, 0],
146
- [_, _, _, _, _, _, _, _, _, _],
147
- ], ['var(--nice-bg, #1a1a2e)', '#101020']);
148
- /* ── TORSOS ── */
149
- const TORSO_BASIC_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(8, 6, [
179
+ [_, _, _, _, _, _, _, _, _, _]
180
+ ],
181
+ ["var(--nice-bg, #1a1a2e)", "#101020"]
182
+ );
183
+ const TORSO_BASIC_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
184
+ 8,
185
+ 6,
186
+ [
150
187
  [_, _, 1, 1, 1, 1, _, _],
151
188
  [_, 1, 0, 0, 0, 0, 1, _],
152
189
  [1, 0, 0, 0, 0, 0, 0, 1],
153
190
  [1, 0, 0, 0, 0, 0, 0, 1],
154
191
  [_, 1, 0, 0, 0, 0, 1, _],
155
- [_, _, 1, 1, 1, 1, _, _],
156
- ], ['#4060d0', '#3040b0']);
157
- const TORSO_ARMOR_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 7, [
192
+ [_, _, 1, 1, 1, 1, _, _]
193
+ ],
194
+ ["#4060d0", "#3040b0"]
195
+ );
196
+ const TORSO_ARMOR_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
197
+ 10,
198
+ 7,
199
+ [
158
200
  [_, _, _, 1, 1, 1, 1, _, _, _],
159
201
  [_, _, 1, 0, 2, 2, 0, 1, _, _],
160
202
  [_, 1, 0, 0, 2, 2, 0, 0, 1, _],
161
203
  [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
162
204
  [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
163
205
  [_, 1, 0, 0, 0, 0, 0, 0, 1, _],
164
- [_, _, 1, 1, 1, 1, 1, 1, _, _],
165
- ], ['var(--nice-border, #c0c0c8)', '#909098', '#f0d060']);
166
- const TORSO_ROBE_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 10, [
206
+ [_, _, 1, 1, 1, 1, 1, 1, _, _]
207
+ ],
208
+ ["var(--nice-border, #c0c0c8)", "#909098", "#f0d060"]
209
+ );
210
+ const TORSO_ROBE_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
211
+ 10,
212
+ 10,
213
+ [
167
214
  [_, _, _, 1, 1, 1, 1, _, _, _],
168
215
  [_, _, 1, 0, 0, 0, 0, 1, _, _],
169
216
  [_, 1, 0, 0, 2, 2, 0, 0, 1, _],
@@ -173,40 +220,62 @@ const TORSO_ROBE_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 10,
173
220
  [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
174
221
  [_, 1, 0, 0, 0, 0, 0, 0, 1, _],
175
222
  [_, _, 1, 0, 0, 0, 0, 1, _, _],
176
- [_, _, _, 1, 1, 1, 1, _, _, _],
177
- ], ['#8020a0', '#601080', '#f0d060']);
178
- /* ── ARMS ── */
179
- const ARM_BASIC_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(3, 5, [
223
+ [_, _, _, 1, 1, 1, 1, _, _, _]
224
+ ],
225
+ ["#8020a0", "#601080", "#f0d060"]
226
+ );
227
+ const ARM_BASIC_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
228
+ 3,
229
+ 5,
230
+ [
180
231
  [_, 0, _],
181
232
  [0, 0, 1],
182
233
  [0, 0, 1],
183
234
  [0, 0, 1],
184
- [_, 0, _],
185
- ], ['var(--nice-warning-bg, #ffecd2)', '#c07848']);
186
- const ARM_ARMORED_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(4, 5, [
235
+ [_, 0, _]
236
+ ],
237
+ ["var(--nice-warning-bg, #ffecd2)", "#c07848"]
238
+ );
239
+ const ARM_ARMORED_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
240
+ 4,
241
+ 5,
242
+ [
187
243
  [_, 0, 1, _],
188
244
  [0, 0, 0, 1],
189
245
  [0, 0, 0, 1],
190
246
  [0, 0, 0, 1],
191
- [_, 0, 1, _],
192
- ], ['var(--nice-border, #c0c0c8)', '#909098']);
193
- /* ── LEGS ── */
194
- const LEG_BASIC_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(3, 5, [
247
+ [_, 0, 1, _]
248
+ ],
249
+ ["var(--nice-border, #c0c0c8)", "#909098"]
250
+ );
251
+ const LEG_BASIC_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
252
+ 3,
253
+ 5,
254
+ [
195
255
  [_, 0, _],
196
256
  [0, 0, 1],
197
257
  [0, 0, 1],
198
258
  [0, 0, 1],
199
- [0, 1, 1],
200
- ], ['#4060d0', '#3040b0']);
201
- const LEG_BOOT_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(4, 5, [
259
+ [0, 1, 1]
260
+ ],
261
+ ["#4060d0", "#3040b0"]
262
+ );
263
+ const LEG_BOOT_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
264
+ 4,
265
+ 5,
266
+ [
202
267
  [_, 0, 0, _],
203
268
  [_, 0, 0, _],
204
269
  [_, 0, 0, _],
205
270
  [0, 0, 0, 1],
206
- [0, 0, 0, 1],
207
- ], ['#b08060', '#906840']);
208
- /* ── HATS ── */
209
- const HAT_WIZARD_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 8, [
271
+ [0, 0, 0, 1]
272
+ ],
273
+ ["#b08060", "#906840"]
274
+ );
275
+ const HAT_WIZARD_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
276
+ 10,
277
+ 8,
278
+ [
210
279
  [_, _, _, _, 0, _, _, _, _, _],
211
280
  [_, _, _, 0, 0, 0, _, _, _, _],
212
281
  [_, _, 0, 0, 0, 0, 0, _, _, _],
@@ -214,32 +283,51 @@ const HAT_WIZARD_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 8, [
214
283
  [_, 0, 0, 0, 2, 0, 0, 0, _, _],
215
284
  [0, 0, 0, 0, 2, 0, 0, 0, 0, _],
216
285
  [0, 1, 1, 1, 1, 1, 1, 1, 0, _],
217
- [_, _, _, _, _, _, _, _, _, _],
218
- ], ['#8020a0', '#601080', '#f0d060']);
219
- const HAT_KNIGHT_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 6, [
286
+ [_, _, _, _, _, _, _, _, _, _]
287
+ ],
288
+ ["#8020a0", "#601080", "#f0d060"]
289
+ );
290
+ const HAT_KNIGHT_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
291
+ 10,
292
+ 6,
293
+ [
220
294
  [_, _, _, 0, 0, 0, 0, _, _, _],
221
295
  [_, _, 0, 0, 0, 0, 0, 0, _, _],
222
296
  [_, 0, 0, 0, 0, 0, 0, 0, 0, _],
223
297
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
224
298
  [0, 0, 2, 2, 2, 2, 2, 2, 0, 0],
225
- [_, _, _, 1, 1, 1, 1, _, _, _],
226
- ], ['var(--nice-border, #c0c0c8)', '#606068', '#f0d060']);
227
- const HAT_CROWN_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(10, 5, [
299
+ [_, _, _, 1, 1, 1, 1, _, _, _]
300
+ ],
301
+ ["var(--nice-border, #c0c0c8)", "#606068", "#f0d060"]
302
+ );
303
+ const HAT_CROWN_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
304
+ 10,
305
+ 5,
306
+ [
228
307
  [_, 2, _, _, 2, _, _, 2, _, _],
229
308
  [_, 0, 2, _, 0, _, 2, 0, _, _],
230
309
  [_, 0, 0, 2, 0, 2, 0, 0, _, _],
231
310
  [_, 0, 0, 0, 0, 0, 0, 0, _, _],
232
- [_, 1, 1, 1, 1, 1, 1, 1, _, _],
233
- ], ['#f0d060', '#d0b040', '#ff4040']);
234
- const HAT_CAP_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(9, 5, [
311
+ [_, 1, 1, 1, 1, 1, 1, 1, _, _]
312
+ ],
313
+ ["#f0d060", "#d0b040", "#ff4040"]
314
+ );
315
+ const HAT_CAP_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
316
+ 9,
317
+ 5,
318
+ [
235
319
  [_, _, _, 0, 0, 0, _, _, _],
236
320
  [_, _, 0, 0, 0, 0, 0, _, _],
237
321
  [_, 0, 0, 0, 0, 0, 0, 0, _],
238
322
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
239
- [_, _, 1, 1, 1, 1, 1, _, _],
240
- ], ['#d04040', '#b02020']);
241
- /* ── WEAPONS ── */
242
- const WEAPON_SWORD_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(3, 10, [
323
+ [_, _, 1, 1, 1, 1, 1, _, _]
324
+ ],
325
+ ["#d04040", "#b02020"]
326
+ );
327
+ const WEAPON_SWORD_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
328
+ 3,
329
+ 10,
330
+ [
243
331
  [_, 0, _],
244
332
  [_, 0, _],
245
333
  [_, 0, _],
@@ -249,9 +337,14 @@ const WEAPON_SWORD_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(3, 10,
249
337
  [_, 0, _],
250
338
  [1, 1, 1],
251
339
  [_, 2, _],
252
- [_, 2, _],
253
- ], ['var(--nice-border, #c0c0c8)', '#f0d060', '#8b5e3c']);
254
- const WEAPON_STAFF_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(3, 12, [
340
+ [_, 2, _]
341
+ ],
342
+ ["var(--nice-border, #c0c0c8)", "#f0d060", "#8b5e3c"]
343
+ );
344
+ const WEAPON_STAFF_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
345
+ 3,
346
+ 12,
347
+ [
255
348
  [_, 1, _],
256
349
  [1, 1, 1],
257
350
  [_, 1, _],
@@ -263,9 +356,14 @@ const WEAPON_STAFF_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(3, 12,
263
356
  [_, 0, _],
264
357
  [_, 0, _],
265
358
  [_, 0, _],
266
- [_, 0, _],
267
- ], ['#8b5e3c', '#4080e0']);
268
- const WEAPON_BOW_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(5, 10, [
359
+ [_, 0, _]
360
+ ],
361
+ ["#8b5e3c", "#4080e0"]
362
+ );
363
+ const WEAPON_BOW_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
364
+ 5,
365
+ 10,
366
+ [
269
367
  [_, _, _, 0, _],
270
368
  [_, _, 0, _, 1],
271
369
  [_, 0, _, _, 1],
@@ -275,443 +373,445 @@ const WEAPON_BOW_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(5, 10, [
275
373
  [0, _, _, _, 1],
276
374
  [_, 0, _, _, 1],
277
375
  [_, _, 0, _, 1],
278
- [_, _, _, 0, _],
279
- ], ['#8b5e3c', 'var(--nice-border, #c0c0c8)']);
280
- const SHIELD_ROUND_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(6, 7, [
376
+ [_, _, _, 0, _]
377
+ ],
378
+ ["#8b5e3c", "var(--nice-border, #c0c0c8)"]
379
+ );
380
+ const SHIELD_ROUND_S = /* @__PURE__ */ spriteGeneratorCore.createPartData(
381
+ 6,
382
+ 7,
383
+ [
281
384
  [_, _, 1, 1, _, _],
282
385
  [_, 1, 0, 0, 1, _],
283
386
  [1, 0, 0, 2, 0, 1],
284
387
  [1, 0, 2, 2, 0, 1],
285
388
  [1, 0, 0, 2, 0, 1],
286
389
  [_, 1, 0, 0, 1, _],
287
- [_, _, 1, 1, _, _],
288
- ], ['var(--nice-border, #c0c0c8)', '#909098', '#f0d060']);
289
- /* ════════════════════════════════════════════════════════════════
290
- REGISTER ALL CHARACTER PARTS
291
- ════════════════════════════════════════════════════════════════ */
390
+ [_, _, 1, 1, _, _]
391
+ ],
392
+ ["var(--nice-border, #c0c0c8)", "#909098", "#f0d060"]
393
+ );
292
394
  const CHARACTER_PARTS = [
293
- // ── Heads ──
294
- {
295
- id: 'head-round',
296
- name: 'Round Head',
297
- category: 'head',
298
- slot: 'head',
299
- anchorX: 4,
300
- anchorY: 7,
301
- zOrder: 10,
302
- tags: ['basic', 'round'],
303
- pixels: spriteGeneratorCore.generateMirroredDirections({ S: HEAD_ROUND_S, E: HEAD_ROUND_E, N: HEAD_ROUND_N }),
304
- },
305
- {
306
- id: 'head-square',
307
- name: 'Square Head',
308
- category: 'head',
309
- slot: 'head',
310
- anchorX: 4,
311
- anchorY: 6,
312
- zOrder: 10,
313
- tags: ['basic', 'angular'],
314
- pixels: { S: HEAD_SQUARE_S },
315
- },
316
- {
317
- id: 'head-chibi',
318
- name: 'Chibi Head',
319
- category: 'head',
320
- slot: 'head',
321
- anchorX: 5,
322
- anchorY: 9,
323
- zOrder: 10,
324
- tags: ['cute', 'chibi', 'large'],
325
- pixels: { S: HEAD_CHIBI_S },
326
- },
327
- // ── Hair ──
328
- {
329
- id: 'hair-short',
330
- name: 'Short Hair',
331
- category: 'hair',
332
- slot: 'head',
333
- anchorX: 4,
334
- anchorY: 3,
335
- zOrder: 11,
336
- tags: ['basic', 'short'],
337
- pixels: { S: HAIR_SHORT_S },
338
- recolorableIndices: [0, 1],
339
- },
340
- {
341
- id: 'hair-long',
342
- name: 'Long Hair',
343
- category: 'hair',
344
- slot: 'head',
345
- anchorX: 5,
346
- anchorY: 3,
347
- zOrder: 11,
348
- tags: ['long', 'flowing'],
349
- pixels: { S: HAIR_LONG_S },
350
- recolorableIndices: [0, 1],
351
- },
352
- {
353
- id: 'hair-mohawk',
354
- name: 'Mohawk',
355
- category: 'hair',
356
- slot: 'head',
357
- anchorX: 4,
358
- anchorY: 5,
359
- zOrder: 12,
360
- tags: ['punk', 'mohawk'],
361
- pixels: { S: HAIR_MOHAWK_S },
362
- recolorableIndices: [0, 1],
363
- },
364
- {
365
- id: 'hair-ponytail',
366
- name: 'Ponytail',
367
- category: 'hair',
368
- slot: 'head',
369
- anchorX: 5,
370
- anchorY: 3,
371
- zOrder: 11,
372
- tags: ['long', 'ponytail'],
373
- pixels: { S: HAIR_PONYTAIL_S },
374
- recolorableIndices: [0, 1],
375
- },
376
- {
377
- id: 'hair-spiky',
378
- name: 'Spiky Hair',
379
- category: 'hair',
380
- slot: 'head',
381
- anchorX: 5,
382
- anchorY: 5,
383
- zOrder: 12,
384
- tags: ['spiky', 'anime'],
385
- pixels: { S: HAIR_SPIKY_S },
386
- recolorableIndices: [0, 1],
387
- },
388
- // ── Torsos ──
389
- {
390
- id: 'torso-basic',
391
- name: 'Basic Torso',
392
- category: 'torso',
393
- slot: 'torso',
394
- anchorX: 4,
395
- anchorY: 0,
396
- zOrder: 5,
397
- tags: ['basic', 'shirt'],
398
- pixels: { S: TORSO_BASIC_S },
399
- recolorableIndices: [0, 1],
400
- },
401
- {
402
- id: 'torso-armor',
403
- name: 'Armor Torso',
404
- category: 'torso',
405
- slot: 'torso',
406
- anchorX: 5,
407
- anchorY: 0,
408
- zOrder: 5,
409
- tags: ['armor', 'knight'],
410
- pixels: { S: TORSO_ARMOR_S },
411
- recolorableIndices: [0, 1, 2],
412
- },
413
- {
414
- id: 'torso-robe',
415
- name: 'Robe Torso',
416
- category: 'torso',
417
- slot: 'torso',
418
- anchorX: 5,
419
- anchorY: 0,
420
- zOrder: 5,
421
- tags: ['robe', 'wizard', 'long'],
422
- pixels: { S: TORSO_ROBE_S },
423
- recolorableIndices: [0, 1, 2],
424
- },
425
- // ── Arms ──
426
- {
427
- id: 'arm-basic',
428
- name: 'Basic Arm',
429
- category: 'arm',
430
- slot: 'leftArm',
431
- anchorX: 1,
432
- anchorY: 0,
433
- zOrder: 6,
434
- tags: ['basic', 'bare'],
435
- pixels: { S: ARM_BASIC_S },
436
- },
437
- {
438
- id: 'arm-armored',
439
- name: 'Armored Arm',
440
- category: 'arm',
441
- slot: 'leftArm',
442
- anchorX: 2,
443
- anchorY: 0,
444
- zOrder: 6,
445
- tags: ['armor', 'knight'],
446
- pixels: { S: ARM_ARMORED_S },
447
- recolorableIndices: [0, 1],
448
- },
449
- // ── Legs ──
450
- {
451
- id: 'leg-basic',
452
- name: 'Basic Leg',
453
- category: 'leg',
454
- slot: 'leftLeg',
455
- anchorX: 1,
456
- anchorY: 0,
457
- zOrder: 3,
458
- tags: ['basic', 'pants'],
459
- pixels: { S: LEG_BASIC_S },
460
- recolorableIndices: [0, 1],
461
- },
462
- {
463
- id: 'leg-boot',
464
- name: 'Boot Leg',
465
- category: 'leg',
466
- slot: 'leftLeg',
467
- anchorX: 2,
468
- anchorY: 0,
469
- zOrder: 3,
470
- tags: ['boot', 'heavy'],
471
- pixels: { S: LEG_BOOT_S },
472
- recolorableIndices: [0, 1],
473
- },
474
- // ── Hats ──
475
- {
476
- id: 'hat-wizard',
477
- name: 'Wizard Hat',
478
- category: 'hat',
479
- slot: 'head',
480
- anchorX: 5,
481
- anchorY: 7,
482
- zOrder: 13,
483
- tags: ['wizard', 'magic'],
484
- pixels: { S: HAT_WIZARD_S },
485
- recolorableIndices: [0, 1, 2],
486
- },
487
- {
488
- id: 'hat-knight',
489
- name: 'Knight Helmet',
490
- category: 'helmet',
491
- slot: 'head',
492
- anchorX: 5,
493
- anchorY: 5,
494
- zOrder: 13,
495
- tags: ['knight', 'armor'],
496
- pixels: { S: HAT_KNIGHT_S },
497
- recolorableIndices: [0, 1, 2],
498
- },
499
- {
500
- id: 'hat-crown',
501
- name: 'Crown',
502
- category: 'hat',
503
- slot: 'head',
504
- anchorX: 5,
505
- anchorY: 4,
506
- zOrder: 14,
507
- tags: ['royal', 'king'],
508
- pixels: { S: HAT_CROWN_S },
509
- recolorableIndices: [0, 1, 2],
510
- },
511
- {
512
- id: 'hat-cap',
513
- name: 'Cap',
514
- category: 'hat',
515
- slot: 'head',
516
- anchorX: 4,
517
- anchorY: 4,
518
- zOrder: 13,
519
- tags: ['casual', 'cap'],
520
- pixels: { S: HAT_CAP_S },
521
- recolorableIndices: [0, 1],
522
- },
523
- // ── Weapons ──
524
- {
525
- id: 'weapon-sword',
526
- name: 'Sword',
527
- category: 'weapon',
528
- slot: 'rightHand',
529
- anchorX: 1,
530
- anchorY: 7,
531
- zOrder: 15,
532
- tags: ['sword', 'melee'],
533
- pixels: { S: WEAPON_SWORD_S },
534
- },
535
- {
536
- id: 'weapon-staff',
537
- name: 'Staff',
538
- category: 'weapon',
539
- slot: 'rightHand',
540
- anchorX: 1,
541
- anchorY: 2,
542
- zOrder: 15,
543
- tags: ['staff', 'magic'],
544
- pixels: { S: WEAPON_STAFF_S },
545
- },
546
- {
547
- id: 'weapon-bow',
548
- name: 'Bow',
549
- category: 'weapon',
550
- slot: 'rightHand',
551
- anchorX: 0,
552
- anchorY: 5,
553
- zOrder: 15,
554
- tags: ['bow', 'ranged'],
555
- pixels: { S: WEAPON_BOW_S },
556
- },
557
- // ── Shields ──
558
- {
559
- id: 'shield-round',
560
- name: 'Round Shield',
561
- category: 'shield',
562
- slot: 'leftHand',
563
- anchorX: 3,
564
- anchorY: 3,
565
- zOrder: 7,
566
- tags: ['shield', 'defense'],
567
- pixels: { S: SHIELD_ROUND_S },
568
- recolorableIndices: [0, 1, 2],
569
- },
395
+ // ── Heads ──
396
+ {
397
+ id: "head-round",
398
+ name: "Round Head",
399
+ category: "head",
400
+ slot: "head",
401
+ anchorX: 4,
402
+ anchorY: 7,
403
+ zOrder: 10,
404
+ tags: ["basic", "round"],
405
+ pixels: spriteGeneratorCore.generateMirroredDirections({ S: HEAD_ROUND_S, E: HEAD_ROUND_E, N: HEAD_ROUND_N })
406
+ },
407
+ {
408
+ id: "head-square",
409
+ name: "Square Head",
410
+ category: "head",
411
+ slot: "head",
412
+ anchorX: 4,
413
+ anchorY: 6,
414
+ zOrder: 10,
415
+ tags: ["basic", "angular"],
416
+ pixels: { S: HEAD_SQUARE_S }
417
+ },
418
+ {
419
+ id: "head-chibi",
420
+ name: "Chibi Head",
421
+ category: "head",
422
+ slot: "head",
423
+ anchorX: 5,
424
+ anchorY: 9,
425
+ zOrder: 10,
426
+ tags: ["cute", "chibi", "large"],
427
+ pixels: { S: HEAD_CHIBI_S }
428
+ },
429
+ // ── Hair ──
430
+ {
431
+ id: "hair-short",
432
+ name: "Short Hair",
433
+ category: "hair",
434
+ slot: "head",
435
+ anchorX: 4,
436
+ anchorY: 3,
437
+ zOrder: 11,
438
+ tags: ["basic", "short"],
439
+ pixels: { S: HAIR_SHORT_S },
440
+ recolorableIndices: [0, 1]
441
+ },
442
+ {
443
+ id: "hair-long",
444
+ name: "Long Hair",
445
+ category: "hair",
446
+ slot: "head",
447
+ anchorX: 5,
448
+ anchorY: 3,
449
+ zOrder: 11,
450
+ tags: ["long", "flowing"],
451
+ pixels: { S: HAIR_LONG_S },
452
+ recolorableIndices: [0, 1]
453
+ },
454
+ {
455
+ id: "hair-mohawk",
456
+ name: "Mohawk",
457
+ category: "hair",
458
+ slot: "head",
459
+ anchorX: 4,
460
+ anchorY: 5,
461
+ zOrder: 12,
462
+ tags: ["punk", "mohawk"],
463
+ pixels: { S: HAIR_MOHAWK_S },
464
+ recolorableIndices: [0, 1]
465
+ },
466
+ {
467
+ id: "hair-ponytail",
468
+ name: "Ponytail",
469
+ category: "hair",
470
+ slot: "head",
471
+ anchorX: 5,
472
+ anchorY: 3,
473
+ zOrder: 11,
474
+ tags: ["long", "ponytail"],
475
+ pixels: { S: HAIR_PONYTAIL_S },
476
+ recolorableIndices: [0, 1]
477
+ },
478
+ {
479
+ id: "hair-spiky",
480
+ name: "Spiky Hair",
481
+ category: "hair",
482
+ slot: "head",
483
+ anchorX: 5,
484
+ anchorY: 5,
485
+ zOrder: 12,
486
+ tags: ["spiky", "anime"],
487
+ pixels: { S: HAIR_SPIKY_S },
488
+ recolorableIndices: [0, 1]
489
+ },
490
+ // ── Torsos ──
491
+ {
492
+ id: "torso-basic",
493
+ name: "Basic Torso",
494
+ category: "torso",
495
+ slot: "torso",
496
+ anchorX: 4,
497
+ anchorY: 0,
498
+ zOrder: 5,
499
+ tags: ["basic", "shirt"],
500
+ pixels: { S: TORSO_BASIC_S },
501
+ recolorableIndices: [0, 1]
502
+ },
503
+ {
504
+ id: "torso-armor",
505
+ name: "Armor Torso",
506
+ category: "torso",
507
+ slot: "torso",
508
+ anchorX: 5,
509
+ anchorY: 0,
510
+ zOrder: 5,
511
+ tags: ["armor", "knight"],
512
+ pixels: { S: TORSO_ARMOR_S },
513
+ recolorableIndices: [0, 1, 2]
514
+ },
515
+ {
516
+ id: "torso-robe",
517
+ name: "Robe Torso",
518
+ category: "torso",
519
+ slot: "torso",
520
+ anchorX: 5,
521
+ anchorY: 0,
522
+ zOrder: 5,
523
+ tags: ["robe", "wizard", "long"],
524
+ pixels: { S: TORSO_ROBE_S },
525
+ recolorableIndices: [0, 1, 2]
526
+ },
527
+ // ── Arms ──
528
+ {
529
+ id: "arm-basic",
530
+ name: "Basic Arm",
531
+ category: "arm",
532
+ slot: "leftArm",
533
+ anchorX: 1,
534
+ anchorY: 0,
535
+ zOrder: 6,
536
+ tags: ["basic", "bare"],
537
+ pixels: { S: ARM_BASIC_S }
538
+ },
539
+ {
540
+ id: "arm-armored",
541
+ name: "Armored Arm",
542
+ category: "arm",
543
+ slot: "leftArm",
544
+ anchorX: 2,
545
+ anchorY: 0,
546
+ zOrder: 6,
547
+ tags: ["armor", "knight"],
548
+ pixels: { S: ARM_ARMORED_S },
549
+ recolorableIndices: [0, 1]
550
+ },
551
+ // ── Legs ──
552
+ {
553
+ id: "leg-basic",
554
+ name: "Basic Leg",
555
+ category: "leg",
556
+ slot: "leftLeg",
557
+ anchorX: 1,
558
+ anchorY: 0,
559
+ zOrder: 3,
560
+ tags: ["basic", "pants"],
561
+ pixels: { S: LEG_BASIC_S },
562
+ recolorableIndices: [0, 1]
563
+ },
564
+ {
565
+ id: "leg-boot",
566
+ name: "Boot Leg",
567
+ category: "leg",
568
+ slot: "leftLeg",
569
+ anchorX: 2,
570
+ anchorY: 0,
571
+ zOrder: 3,
572
+ tags: ["boot", "heavy"],
573
+ pixels: { S: LEG_BOOT_S },
574
+ recolorableIndices: [0, 1]
575
+ },
576
+ // ── Hats ──
577
+ {
578
+ id: "hat-wizard",
579
+ name: "Wizard Hat",
580
+ category: "hat",
581
+ slot: "head",
582
+ anchorX: 5,
583
+ anchorY: 7,
584
+ zOrder: 13,
585
+ tags: ["wizard", "magic"],
586
+ pixels: { S: HAT_WIZARD_S },
587
+ recolorableIndices: [0, 1, 2]
588
+ },
589
+ {
590
+ id: "hat-knight",
591
+ name: "Knight Helmet",
592
+ category: "helmet",
593
+ slot: "head",
594
+ anchorX: 5,
595
+ anchorY: 5,
596
+ zOrder: 13,
597
+ tags: ["knight", "armor"],
598
+ pixels: { S: HAT_KNIGHT_S },
599
+ recolorableIndices: [0, 1, 2]
600
+ },
601
+ {
602
+ id: "hat-crown",
603
+ name: "Crown",
604
+ category: "hat",
605
+ slot: "head",
606
+ anchorX: 5,
607
+ anchorY: 4,
608
+ zOrder: 14,
609
+ tags: ["royal", "king"],
610
+ pixels: { S: HAT_CROWN_S },
611
+ recolorableIndices: [0, 1, 2]
612
+ },
613
+ {
614
+ id: "hat-cap",
615
+ name: "Cap",
616
+ category: "hat",
617
+ slot: "head",
618
+ anchorX: 4,
619
+ anchorY: 4,
620
+ zOrder: 13,
621
+ tags: ["casual", "cap"],
622
+ pixels: { S: HAT_CAP_S },
623
+ recolorableIndices: [0, 1]
624
+ },
625
+ // ── Weapons ──
626
+ {
627
+ id: "weapon-sword",
628
+ name: "Sword",
629
+ category: "weapon",
630
+ slot: "rightHand",
631
+ anchorX: 1,
632
+ anchorY: 7,
633
+ zOrder: 15,
634
+ tags: ["sword", "melee"],
635
+ pixels: { S: WEAPON_SWORD_S }
636
+ },
637
+ {
638
+ id: "weapon-staff",
639
+ name: "Staff",
640
+ category: "weapon",
641
+ slot: "rightHand",
642
+ anchorX: 1,
643
+ anchorY: 2,
644
+ zOrder: 15,
645
+ tags: ["staff", "magic"],
646
+ pixels: { S: WEAPON_STAFF_S }
647
+ },
648
+ {
649
+ id: "weapon-bow",
650
+ name: "Bow",
651
+ category: "weapon",
652
+ slot: "rightHand",
653
+ anchorX: 0,
654
+ anchorY: 5,
655
+ zOrder: 15,
656
+ tags: ["bow", "ranged"],
657
+ pixels: { S: WEAPON_BOW_S }
658
+ },
659
+ // ── Shields ──
660
+ {
661
+ id: "shield-round",
662
+ name: "Round Shield",
663
+ category: "shield",
664
+ slot: "leftHand",
665
+ anchorX: 3,
666
+ anchorY: 3,
667
+ zOrder: 7,
668
+ tags: ["shield", "defense"],
669
+ pixels: { S: SHIELD_ROUND_S },
670
+ recolorableIndices: [0, 1, 2]
671
+ }
570
672
  ];
571
673
  function charAssembly(name, parts, w = 32, h = 32) {
572
- return {
573
- id: `char-${name.toLowerCase().replace(/\s+/g, '-')}`,
574
- name,
575
- parts,
576
- skeletonId: 'basic-humanoid',
577
- canvasWidth: w,
578
- canvasHeight: h,
579
- projection: 'sideView',
580
- };
674
+ return {
675
+ id: `char-${name.toLowerCase().replace(/\s+/g, "-")}`,
676
+ name,
677
+ parts,
678
+ skeletonId: "basic-humanoid",
679
+ canvasWidth: w,
680
+ canvasHeight: h,
681
+ projection: "sideView"
682
+ };
581
683
  }
582
684
  const CHARACTER_PRESETS = [
583
- {
584
- id: 'preset-warrior',
585
- name: 'Warrior',
586
- description: 'Knight with armor and sword',
587
- tags: ['knight', 'armor', 'melee'],
588
- assembly: charAssembly('Warrior', [
589
- { partId: 'leg-boot', offsetX: 10, offsetY: 24 },
590
- { partId: 'leg-boot', offsetX: 18, offsetY: 24, flipH: true },
591
- { partId: 'torso-armor', offsetX: 11, offsetY: 16 },
592
- { partId: 'arm-armored', offsetX: 7, offsetY: 17 },
593
- { partId: 'arm-armored', offsetX: 21, offsetY: 17, flipH: true },
594
- { partId: 'head-round', offsetX: 12, offsetY: 8 },
595
- { partId: 'hat-knight', offsetX: 11, offsetY: 3 },
596
- { partId: 'weapon-sword', offsetX: 24, offsetY: 12 },
597
- { partId: 'shield-round', offsetX: 3, offsetY: 16 },
598
- ]),
599
- },
600
- {
601
- id: 'preset-mage',
602
- name: 'Mage',
603
- description: 'Wizard with robe and staff',
604
- tags: ['wizard', 'magic', 'ranged'],
605
- assembly: charAssembly('Mage', [
606
- { partId: 'leg-basic', offsetX: 11, offsetY: 24 },
607
- { partId: 'leg-basic', offsetX: 18, offsetY: 24, flipH: true },
608
- { partId: 'torso-robe', offsetX: 11, offsetY: 14 },
609
- { partId: 'arm-basic', offsetX: 8, offsetY: 15 },
610
- { partId: 'arm-basic', offsetX: 22, offsetY: 15, flipH: true },
611
- { partId: 'head-round', offsetX: 12, offsetY: 6 },
612
- { partId: 'hat-wizard', offsetX: 11, offsetY: -2 },
613
- { partId: 'weapon-staff', offsetX: 24, offsetY: 6 },
614
- ]),
615
- },
616
- {
617
- id: 'preset-archer',
618
- name: 'Archer',
619
- description: 'Ranger with bow',
620
- tags: ['ranger', 'bow', 'ranged'],
621
- assembly: charAssembly('Archer', [
622
- { partId: 'leg-boot', offsetX: 10, offsetY: 24 },
623
- { partId: 'leg-boot', offsetX: 18, offsetY: 24, flipH: true },
624
- { partId: 'torso-basic', offsetX: 12, offsetY: 17 },
625
- { partId: 'arm-basic', offsetX: 9, offsetY: 18 },
626
- { partId: 'arm-basic', offsetX: 21, offsetY: 18, flipH: true },
627
- { partId: 'head-round', offsetX: 12, offsetY: 9 },
628
- { partId: 'hair-short', offsetX: 12, offsetY: 6 },
629
- { partId: 'weapon-bow', offsetX: 23, offsetY: 14 },
630
- ]),
631
- },
632
- {
633
- id: 'preset-king',
634
- name: 'King',
635
- description: 'Royal with crown and robe',
636
- tags: ['royal', 'king', 'npc'],
637
- assembly: charAssembly('King', [
638
- { partId: 'leg-basic', offsetX: 11, offsetY: 24 },
639
- { partId: 'leg-basic', offsetX: 18, offsetY: 24, flipH: true },
640
- { partId: 'torso-robe', offsetX: 11, offsetY: 14 },
641
- { partId: 'arm-basic', offsetX: 8, offsetY: 15 },
642
- { partId: 'arm-basic', offsetX: 22, offsetY: 15, flipH: true },
643
- { partId: 'head-round', offsetX: 12, offsetY: 6 },
644
- { partId: 'hat-crown', offsetX: 11, offsetY: 2 },
645
- ]),
646
- },
647
- {
648
- id: 'preset-villager',
649
- name: 'Villager',
650
- description: 'Simple villager NPC',
651
- tags: ['npc', 'villager', 'simple'],
652
- assembly: charAssembly('Villager', [
653
- { partId: 'leg-basic', offsetX: 11, offsetY: 24 },
654
- { partId: 'leg-basic', offsetX: 18, offsetY: 24, flipH: true },
655
- { partId: 'torso-basic', offsetX: 12, offsetY: 17 },
656
- { partId: 'arm-basic', offsetX: 9, offsetY: 18 },
657
- { partId: 'arm-basic', offsetX: 21, offsetY: 18, flipH: true },
658
- { partId: 'head-round', offsetX: 12, offsetY: 9 },
659
- { partId: 'hair-short', offsetX: 12, offsetY: 6 },
660
- ]),
661
- },
662
- {
663
- id: 'preset-punk',
664
- name: 'Punk',
665
- description: 'Edgy character with mohawk',
666
- tags: ['punk', 'rebellious'],
667
- assembly: charAssembly('Punk', [
668
- { partId: 'leg-boot', offsetX: 10, offsetY: 24 },
669
- { partId: 'leg-boot', offsetX: 18, offsetY: 24, flipH: true },
670
- { partId: 'torso-basic', offsetX: 12, offsetY: 17 },
671
- { partId: 'arm-basic', offsetX: 9, offsetY: 18 },
672
- { partId: 'arm-basic', offsetX: 21, offsetY: 18, flipH: true },
673
- { partId: 'head-round', offsetX: 12, offsetY: 9 },
674
- { partId: 'hair-mohawk', offsetX: 12, offsetY: 4 },
675
- ]),
676
- },
677
- {
678
- id: 'preset-chibi-hero',
679
- name: 'Chibi Hero',
680
- description: 'Cute chibi character',
681
- tags: ['chibi', 'cute', 'hero'],
682
- assembly: charAssembly('Chibi Hero', [
683
- { partId: 'leg-basic', offsetX: 11, offsetY: 26 },
684
- { partId: 'leg-basic', offsetX: 18, offsetY: 26, flipH: true },
685
- { partId: 'torso-basic', offsetX: 12, offsetY: 19 },
686
- { partId: 'arm-basic', offsetX: 9, offsetY: 20 },
687
- { partId: 'arm-basic', offsetX: 21, offsetY: 20, flipH: true },
688
- { partId: 'head-chibi', offsetX: 11, offsetY: 9 },
689
- { partId: 'hair-spiky', offsetX: 11, offsetY: 4 },
690
- { partId: 'weapon-sword', offsetX: 24, offsetY: 14 },
691
- ]),
692
- },
693
- {
694
- id: 'preset-princess',
695
- name: 'Princess',
696
- description: 'Royal princess with crown and long hair',
697
- tags: ['royal', 'princess', 'npc'],
698
- assembly: charAssembly('Princess', [
699
- { partId: 'leg-basic', offsetX: 11, offsetY: 24 },
700
- { partId: 'leg-basic', offsetX: 18, offsetY: 24, flipH: true },
701
- { partId: 'torso-robe', offsetX: 11, offsetY: 14 },
702
- { partId: 'arm-basic', offsetX: 8, offsetY: 15 },
703
- { partId: 'arm-basic', offsetX: 22, offsetY: 15, flipH: true },
704
- { partId: 'head-round', offsetX: 12, offsetY: 6 },
705
- { partId: 'hair-long', offsetX: 11, offsetY: 3 },
706
- { partId: 'hat-crown', offsetX: 11, offsetY: 2 },
707
- ]),
708
- },
685
+ {
686
+ id: "preset-warrior",
687
+ name: "Warrior",
688
+ description: "Knight with armor and sword",
689
+ tags: ["knight", "armor", "melee"],
690
+ assembly: charAssembly("Warrior", [
691
+ { partId: "leg-boot", offsetX: 10, offsetY: 24 },
692
+ { partId: "leg-boot", offsetX: 18, offsetY: 24, flipH: true },
693
+ { partId: "torso-armor", offsetX: 11, offsetY: 16 },
694
+ { partId: "arm-armored", offsetX: 7, offsetY: 17 },
695
+ { partId: "arm-armored", offsetX: 21, offsetY: 17, flipH: true },
696
+ { partId: "head-round", offsetX: 12, offsetY: 8 },
697
+ { partId: "hat-knight", offsetX: 11, offsetY: 3 },
698
+ { partId: "weapon-sword", offsetX: 24, offsetY: 12 },
699
+ { partId: "shield-round", offsetX: 3, offsetY: 16 }
700
+ ])
701
+ },
702
+ {
703
+ id: "preset-mage",
704
+ name: "Mage",
705
+ description: "Wizard with robe and staff",
706
+ tags: ["wizard", "magic", "ranged"],
707
+ assembly: charAssembly("Mage", [
708
+ { partId: "leg-basic", offsetX: 11, offsetY: 24 },
709
+ { partId: "leg-basic", offsetX: 18, offsetY: 24, flipH: true },
710
+ { partId: "torso-robe", offsetX: 11, offsetY: 14 },
711
+ { partId: "arm-basic", offsetX: 8, offsetY: 15 },
712
+ { partId: "arm-basic", offsetX: 22, offsetY: 15, flipH: true },
713
+ { partId: "head-round", offsetX: 12, offsetY: 6 },
714
+ { partId: "hat-wizard", offsetX: 11, offsetY: -2 },
715
+ { partId: "weapon-staff", offsetX: 24, offsetY: 6 }
716
+ ])
717
+ },
718
+ {
719
+ id: "preset-archer",
720
+ name: "Archer",
721
+ description: "Ranger with bow",
722
+ tags: ["ranger", "bow", "ranged"],
723
+ assembly: charAssembly("Archer", [
724
+ { partId: "leg-boot", offsetX: 10, offsetY: 24 },
725
+ { partId: "leg-boot", offsetX: 18, offsetY: 24, flipH: true },
726
+ { partId: "torso-basic", offsetX: 12, offsetY: 17 },
727
+ { partId: "arm-basic", offsetX: 9, offsetY: 18 },
728
+ { partId: "arm-basic", offsetX: 21, offsetY: 18, flipH: true },
729
+ { partId: "head-round", offsetX: 12, offsetY: 9 },
730
+ { partId: "hair-short", offsetX: 12, offsetY: 6 },
731
+ { partId: "weapon-bow", offsetX: 23, offsetY: 14 }
732
+ ])
733
+ },
734
+ {
735
+ id: "preset-king",
736
+ name: "King",
737
+ description: "Royal with crown and robe",
738
+ tags: ["royal", "king", "npc"],
739
+ assembly: charAssembly("King", [
740
+ { partId: "leg-basic", offsetX: 11, offsetY: 24 },
741
+ { partId: "leg-basic", offsetX: 18, offsetY: 24, flipH: true },
742
+ { partId: "torso-robe", offsetX: 11, offsetY: 14 },
743
+ { partId: "arm-basic", offsetX: 8, offsetY: 15 },
744
+ { partId: "arm-basic", offsetX: 22, offsetY: 15, flipH: true },
745
+ { partId: "head-round", offsetX: 12, offsetY: 6 },
746
+ { partId: "hat-crown", offsetX: 11, offsetY: 2 }
747
+ ])
748
+ },
749
+ {
750
+ id: "preset-villager",
751
+ name: "Villager",
752
+ description: "Simple villager NPC",
753
+ tags: ["npc", "villager", "simple"],
754
+ assembly: charAssembly("Villager", [
755
+ { partId: "leg-basic", offsetX: 11, offsetY: 24 },
756
+ { partId: "leg-basic", offsetX: 18, offsetY: 24, flipH: true },
757
+ { partId: "torso-basic", offsetX: 12, offsetY: 17 },
758
+ { partId: "arm-basic", offsetX: 9, offsetY: 18 },
759
+ { partId: "arm-basic", offsetX: 21, offsetY: 18, flipH: true },
760
+ { partId: "head-round", offsetX: 12, offsetY: 9 },
761
+ { partId: "hair-short", offsetX: 12, offsetY: 6 }
762
+ ])
763
+ },
764
+ {
765
+ id: "preset-punk",
766
+ name: "Punk",
767
+ description: "Edgy character with mohawk",
768
+ tags: ["punk", "rebellious"],
769
+ assembly: charAssembly("Punk", [
770
+ { partId: "leg-boot", offsetX: 10, offsetY: 24 },
771
+ { partId: "leg-boot", offsetX: 18, offsetY: 24, flipH: true },
772
+ { partId: "torso-basic", offsetX: 12, offsetY: 17 },
773
+ { partId: "arm-basic", offsetX: 9, offsetY: 18 },
774
+ { partId: "arm-basic", offsetX: 21, offsetY: 18, flipH: true },
775
+ { partId: "head-round", offsetX: 12, offsetY: 9 },
776
+ { partId: "hair-mohawk", offsetX: 12, offsetY: 4 }
777
+ ])
778
+ },
779
+ {
780
+ id: "preset-chibi-hero",
781
+ name: "Chibi Hero",
782
+ description: "Cute chibi character",
783
+ tags: ["chibi", "cute", "hero"],
784
+ assembly: charAssembly("Chibi Hero", [
785
+ { partId: "leg-basic", offsetX: 11, offsetY: 26 },
786
+ { partId: "leg-basic", offsetX: 18, offsetY: 26, flipH: true },
787
+ { partId: "torso-basic", offsetX: 12, offsetY: 19 },
788
+ { partId: "arm-basic", offsetX: 9, offsetY: 20 },
789
+ { partId: "arm-basic", offsetX: 21, offsetY: 20, flipH: true },
790
+ { partId: "head-chibi", offsetX: 11, offsetY: 9 },
791
+ { partId: "hair-spiky", offsetX: 11, offsetY: 4 },
792
+ { partId: "weapon-sword", offsetX: 24, offsetY: 14 }
793
+ ])
794
+ },
795
+ {
796
+ id: "preset-princess",
797
+ name: "Princess",
798
+ description: "Royal princess with crown and long hair",
799
+ tags: ["royal", "princess", "npc"],
800
+ assembly: charAssembly("Princess", [
801
+ { partId: "leg-basic", offsetX: 11, offsetY: 24 },
802
+ { partId: "leg-basic", offsetX: 18, offsetY: 24, flipH: true },
803
+ { partId: "torso-robe", offsetX: 11, offsetY: 14 },
804
+ { partId: "arm-basic", offsetX: 8, offsetY: 15 },
805
+ { partId: "arm-basic", offsetX: 22, offsetY: 15, flipH: true },
806
+ { partId: "head-round", offsetX: 12, offsetY: 6 },
807
+ { partId: "hair-long", offsetX: 11, offsetY: 3 },
808
+ { partId: "hat-crown", offsetX: 11, offsetY: 2 }
809
+ ])
810
+ }
709
811
  ];
710
- /** Initialize: register all character parts */
711
812
  function initCharacterParts() {
712
- spriteGeneratorCore.registerParts(CHARACTER_PARTS);
813
+ spriteGeneratorCore.registerParts(CHARACTER_PARTS);
713
814
  }
714
-
715
815
  exports.CHARACTER_PARTS = CHARACTER_PARTS;
716
816
  exports.CHARACTER_PRESETS = CHARACTER_PRESETS;
717
817
  exports.CLOTHING_PALETTES = CLOTHING_PALETTES;