@diffenderfer-games/hub 2.0.0-next.5 → 2.0.0-next.6

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 (170) hide show
  1. package/CHANGELOG.md +54 -19
  2. package/README.md +3 -6
  3. package/dist/auto.d.ts +5 -5
  4. package/dist/auto.js +2 -2
  5. package/dist/avatar-pixi.d.ts +147 -0
  6. package/dist/avatar-pixi.d.ts.map +1 -0
  7. package/dist/avatar-pixi.js +280 -0
  8. package/dist/avatar-pixi.js.map +1 -0
  9. package/dist/avatar-svg.d.ts +4 -0
  10. package/dist/avatar-svg.js +5 -0
  11. package/dist/avatar-three.d.ts +69 -0
  12. package/dist/avatar-three.d.ts.map +1 -0
  13. package/dist/avatar-three.js +49 -0
  14. package/dist/avatar-three.js.map +1 -0
  15. package/dist/avatar.d.ts +7 -0
  16. package/dist/avatar.js +487 -0
  17. package/dist/avatar.js.map +1 -0
  18. package/dist/daily.d.ts +2 -2
  19. package/dist/doctor/cli.mjs +1 -1
  20. package/dist/index.d.ts +5 -5
  21. package/dist/index.js +2 -2
  22. package/dist/input.d.ts +2 -2
  23. package/dist/shared/animator.d.ts +104 -0
  24. package/dist/shared/animator.d.ts.map +1 -0
  25. package/dist/shared/art.js +1804 -0
  26. package/dist/shared/art.js.map +1 -0
  27. package/dist/shared/atlas.d.ts +134 -0
  28. package/dist/shared/atlas.d.ts.map +1 -0
  29. package/dist/shared/avatar.d.ts +117 -0
  30. package/dist/shared/avatar.d.ts.map +1 -0
  31. package/dist/shared/bridge.js +13 -5
  32. package/dist/shared/bridge.js.map +1 -1
  33. package/dist/shared/client-version.gen.js +1 -1
  34. package/dist/shared/daily.d.ts +129 -18
  35. package/dist/shared/daily.d.ts.map +1 -1
  36. package/dist/shared/daily.js +120 -26
  37. package/dist/shared/daily.js.map +1 -1
  38. package/dist/shared/defineProperty.js +39 -0
  39. package/dist/shared/describe.d.ts +32 -0
  40. package/dist/shared/describe.d.ts.map +1 -0
  41. package/dist/shared/describe.js +101 -0
  42. package/dist/shared/describe.js.map +1 -0
  43. package/dist/shared/globals.js +1 -39
  44. package/dist/shared/globals.js.map +1 -1
  45. package/dist/shared/index.d.ts +503 -14
  46. package/dist/shared/index.d.ts.map +1 -1
  47. package/dist/shared/input.d.ts +31 -13
  48. package/dist/shared/input.d.ts.map +1 -1
  49. package/dist/shared/input.js +40 -2
  50. package/dist/shared/input.js.map +1 -1
  51. package/dist/shared/json-guards.js +48 -0
  52. package/dist/shared/json-guards.js.map +1 -0
  53. package/dist/shared/live-canvas.js +62 -0
  54. package/dist/shared/live-canvas.js.map +1 -0
  55. package/dist/shared/mp.js +1 -1
  56. package/dist/shared/overlays.js +800 -0
  57. package/dist/shared/overlays.js.map +1 -0
  58. package/dist/shared/page-stack.js +2 -1
  59. package/dist/shared/page-stack.js.map +1 -1
  60. package/dist/shared/pose-key.js +249 -0
  61. package/dist/shared/pose-key.js.map +1 -0
  62. package/dist/shared/race.js +1 -1
  63. package/dist/shared/rooms.js +1 -1
  64. package/dist/shared/scene.d.ts +90 -0
  65. package/dist/shared/scene.d.ts.map +1 -0
  66. package/dist/shared/social.d.ts +55 -4
  67. package/dist/shared/social.d.ts.map +1 -1
  68. package/dist/shared/src.js +2020 -144
  69. package/dist/shared/src.js.map +1 -1
  70. package/dist/shared/svg-markup.js +1860 -0
  71. package/dist/shared/svg-markup.js.map +1 -0
  72. package/dist/shared/svg.js +27 -0
  73. package/dist/shared/svg.js.map +1 -0
  74. package/dist/shared/types.d.ts +166 -0
  75. package/dist/shared/types.d.ts.map +1 -0
  76. package/dist/social.d.ts +2 -2
  77. package/dist/social.js +2 -2
  78. package/dist/turns.d.ts +39 -0
  79. package/dist/turns.d.ts.map +1 -0
  80. package/dist/turns.js +117 -0
  81. package/dist/turns.js.map +1 -0
  82. package/package.json +33 -3
  83. package/src/avatar/adapters/pixi-avatar.ts +73 -0
  84. package/src/avatar/adapters/pixi-crowd.ts +302 -0
  85. package/src/avatar/adapters/pixi-types.ts +84 -0
  86. package/src/avatar/adapters/three.ts +126 -0
  87. package/src/avatar/animator/animator.ts +285 -0
  88. package/src/avatar/animator/reactions.ts +44 -0
  89. package/src/avatar/animator/schedule.ts +73 -0
  90. package/src/avatar/art/beard.ts +49 -0
  91. package/src/avatar/art/glasses.ts +9 -0
  92. package/src/avatar/art/hair.ts +254 -0
  93. package/src/avatar/art/headwear.ts +75 -0
  94. package/src/avatar/art/index.ts +21 -0
  95. package/src/avatar/art/shape.ts +68 -0
  96. package/src/avatar/art-store.ts +36 -0
  97. package/src/avatar/atlas.ts +236 -0
  98. package/src/avatar/catalog-view.ts +14 -0
  99. package/src/avatar/colour.ts +109 -0
  100. package/src/avatar/describe.ts +76 -0
  101. package/src/avatar/face.ts +187 -0
  102. package/src/avatar/geom.ts +168 -0
  103. package/src/avatar/layout.ts +47 -0
  104. package/src/avatar/look-like.ts +52 -0
  105. package/src/avatar/outputs/bitmap.ts +75 -0
  106. package/src/avatar/outputs/canvas-paint.ts +177 -0
  107. package/src/avatar/outputs/canvas.ts +62 -0
  108. package/src/avatar/outputs/custom-element.ts +140 -0
  109. package/src/avatar/outputs/element.ts +58 -0
  110. package/src/avatar/outputs/live-canvas.ts +57 -0
  111. package/src/avatar/outputs/overlay-svg.ts +22 -0
  112. package/src/avatar/outputs/pose-key.ts +30 -0
  113. package/src/avatar/outputs/svg-markup.ts +113 -0
  114. package/src/avatar/outputs/svg.ts +41 -0
  115. package/src/avatar/overlays.ts +128 -0
  116. package/src/avatar/render/body.ts +116 -0
  117. package/src/avatar/render/colours.ts +81 -0
  118. package/src/avatar/render/compose.ts +258 -0
  119. package/src/avatar/render/context.ts +117 -0
  120. package/src/avatar/render/eyes.ts +78 -0
  121. package/src/avatar/render/eyewear.ts +56 -0
  122. package/src/avatar/render/frame.ts +60 -0
  123. package/src/avatar/render/head.ts +81 -0
  124. package/src/avatar/render/mouth.ts +86 -0
  125. package/src/avatar/render/props.ts +91 -0
  126. package/src/avatar/render/types.ts +84 -0
  127. package/src/avatar/scene.ts +119 -0
  128. package/src/avatar-pixi.ts +20 -0
  129. package/src/avatar-svg.ts +21 -0
  130. package/src/avatar-three.ts +18 -0
  131. package/src/avatar.ts +62 -0
  132. package/src/core/avatar/avatar-cache.ts +95 -0
  133. package/src/core/avatar/avatar-ref.ts +34 -0
  134. package/src/core/avatar/avatar-types.ts +43 -0
  135. package/src/core/avatar/hub-avatar.ts +308 -0
  136. package/src/core/connection.ts +8 -0
  137. package/src/core/errors.ts +7 -1
  138. package/src/core/hub-progress.ts +269 -238
  139. package/src/core/hub.ts +174 -6
  140. package/src/core/offline/hub-kinds/avatar-kind.ts +42 -0
  141. package/src/core/offline/hub-kinds/index.ts +9 -0
  142. package/src/core/offline/hub-kinds/saved-kind.ts +93 -0
  143. package/src/core/page-account.ts +121 -0
  144. package/src/core/rest/routes.gen.ts +31 -1
  145. package/src/core/resume/hub-resume.ts +39 -5
  146. package/src/core/resume/resume-types.ts +2 -2
  147. package/src/core/saved/daily-saves.ts +196 -0
  148. package/src/core/saved/daily-seed.ts +16 -0
  149. package/src/core/saved/hub-saved.ts +221 -0
  150. package/src/core/saved/local-saved.ts +122 -0
  151. package/src/core/saved/saved-list.ts +129 -0
  152. package/src/core/saved/saved-open.ts +104 -0
  153. package/src/core/saved/saved-order.ts +49 -0
  154. package/src/core/saved/saved-types.ts +24 -0
  155. package/src/core/turns/hub-turns.ts +140 -0
  156. package/src/core/turns/turn-game.ts +388 -0
  157. package/src/core/version/client-version.gen.ts +2 -2
  158. package/src/daily/daily-system.ts +112 -13
  159. package/src/daily/page-daily.ts +2 -2
  160. package/src/daily/types.ts +46 -9
  161. package/src/doctor/hub-version-fetch.ts +43 -43
  162. package/src/index.ts +10 -1
  163. package/src/input/input-system.ts +10 -1
  164. package/src/input/navigator.ts +11 -0
  165. package/src/input.ts +1 -0
  166. package/src/overlay/overlay.ts +25 -1
  167. package/src/realtime/runtime-api.ts +14 -3
  168. package/src/social.ts +1 -0
  169. package/src/turns-kit/check-rules.ts +182 -0
  170. package/src/turns.ts +13 -0
@@ -0,0 +1,1804 @@
1
+ import { l as roundedRect, o as arc, s as blob, u as scallop } from "./svg-markup.js";
2
+ /** Every facial-hair part by name. */
3
+ const BEARD_ART = {
4
+ none: {},
5
+ stubble: { beard: [{
6
+ d: blob([
7
+ [-45, -4],
8
+ [-44, 22],
9
+ [-30, 46],
10
+ [0, 54],
11
+ [30, 46],
12
+ [44, 22],
13
+ [45, -4],
14
+ [36, 6],
15
+ [22, 18],
16
+ [10, 19],
17
+ [0, 20],
18
+ [-10, 19],
19
+ [-22, 18],
20
+ [-36, 6]
21
+ ]),
22
+ fill: "stubble",
23
+ clip: "head",
24
+ stroke: "none",
25
+ opacity: .5
26
+ }] },
27
+ moustache: { moustache: [{
28
+ d: blob([
29
+ [0, 21.5],
30
+ [6, 19.5],
31
+ [13, 21],
32
+ [
33
+ 16,
34
+ 26,
35
+ "c"
36
+ ],
37
+ [9, 24.5],
38
+ [0, 24.5],
39
+ [-9, 24.5],
40
+ [
41
+ -16,
42
+ 26,
43
+ "c"
44
+ ],
45
+ [-13, 21],
46
+ [-6, 19.5]
47
+ ]),
48
+ fill: "beard"
49
+ }] },
50
+ handlebar: { moustache: [{
51
+ d: blob([
52
+ [0, 21],
53
+ [8, 19.5],
54
+ [16, 22],
55
+ [
56
+ 22,
57
+ 22,
58
+ "c"
59
+ ],
60
+ [24, 17],
61
+ [26, 20],
62
+ [22, 26],
63
+ [14, 25],
64
+ [0, 24.5],
65
+ [-14, 25],
66
+ [-22, 26],
67
+ [-26, 20],
68
+ [-24, 17],
69
+ [
70
+ -22,
71
+ 22,
72
+ "c"
73
+ ],
74
+ [-16, 22],
75
+ [-8, 19.5]
76
+ ]),
77
+ fill: "beard"
78
+ }] },
79
+ goatee: {
80
+ beard: [{
81
+ d: blob([
82
+ [-8, 34],
83
+ [0, 33],
84
+ [8, 34],
85
+ [7, 43],
86
+ [0, 50],
87
+ [-7, 43]
88
+ ]),
89
+ fill: "beard"
90
+ }],
91
+ moustache: [{
92
+ d: blob([
93
+ [0, 21.5],
94
+ [7, 20],
95
+ [12, 21.5],
96
+ [
97
+ 13,
98
+ 25,
99
+ "c"
100
+ ],
101
+ [6, 24.5],
102
+ [0, 24.5],
103
+ [-6, 24.5],
104
+ [
105
+ -13,
106
+ 25,
107
+ "c"
108
+ ],
109
+ [-12, 21.5],
110
+ [-7, 20]
111
+ ]),
112
+ fill: "beard"
113
+ }]
114
+ },
115
+ chinstrap: { beard: [{
116
+ d: blob([
117
+ ...[
118
+ [-45, 0],
119
+ [-44, 22],
120
+ [-30, 46],
121
+ [0, 56],
122
+ [30, 46],
123
+ [44, 22],
124
+ [45, 0]
125
+ ],
126
+ [40, 2],
127
+ [38, 22],
128
+ [26, 40],
129
+ [0, 47],
130
+ [-26, 40],
131
+ [-38, 22],
132
+ [-40, 2]
133
+ ]),
134
+ fill: "beard"
135
+ }] },
136
+ short: {
137
+ beard: [{
138
+ d: blob([
139
+ [-47, -1],
140
+ [-45.5, 16],
141
+ [-37.5, 34],
142
+ [-21, 48.5],
143
+ [0, 53.5],
144
+ [21, 48.5],
145
+ [37.5, 34],
146
+ [45.5, 16],
147
+ [47, -1],
148
+ [42, 3],
149
+ [39.5, 16],
150
+ [32, 30],
151
+ [18, 38.5],
152
+ [0, 41],
153
+ [-18, 38.5],
154
+ [-32, 30],
155
+ [-39.5, 16],
156
+ [-42, 3]
157
+ ]),
158
+ fill: "beard"
159
+ }, {
160
+ d: blob([
161
+ [-4, 47.5],
162
+ [0, 49],
163
+ [4, 47.5]
164
+ ], false),
165
+ fill: "none",
166
+ line: true,
167
+ stroke: "beardShade",
168
+ sw: 2
169
+ }],
170
+ moustache: [{
171
+ d: blob([
172
+ [0, 21.5],
173
+ [6.5, 20],
174
+ [13, 21.5],
175
+ [
176
+ 15.5,
177
+ 25.5,
178
+ "c"
179
+ ],
180
+ [8, 24.3],
181
+ [0, 24.3],
182
+ [-8, 24.3],
183
+ [
184
+ -15.5,
185
+ 25.5,
186
+ "c"
187
+ ],
188
+ [-13, 21.5],
189
+ [-6.5, 20]
190
+ ]),
191
+ fill: "beard"
192
+ }]
193
+ },
194
+ full: {
195
+ beard: [{
196
+ d: blob([
197
+ [-46, -4],
198
+ [-46, 22],
199
+ [-34, 48],
200
+ [-14, 60],
201
+ [0, 62],
202
+ [14, 60],
203
+ [34, 48],
204
+ [46, 22],
205
+ [46, -4],
206
+ [38, 4],
207
+ [30, 14],
208
+ [18, 20],
209
+ [0, 20],
210
+ [-18, 20],
211
+ [-30, 14],
212
+ [-38, 4]
213
+ ]),
214
+ fill: "beard"
215
+ }, {
216
+ d: blob([
217
+ [-6, 49],
218
+ [0, 52],
219
+ [6, 49]
220
+ ], false),
221
+ fill: "none",
222
+ line: true,
223
+ stroke: "beardShade",
224
+ sw: 2
225
+ }],
226
+ moustache: [{
227
+ d: blob([
228
+ [0, 21],
229
+ [8, 19.5],
230
+ [16, 22],
231
+ [
232
+ 18,
233
+ 27,
234
+ "c"
235
+ ],
236
+ [10, 25],
237
+ [0, 25],
238
+ [-10, 25],
239
+ [
240
+ -18,
241
+ 27,
242
+ "c"
243
+ ],
244
+ [-16, 22],
245
+ [-8, 19.5]
246
+ ]),
247
+ fill: "beard"
248
+ }]
249
+ },
250
+ long: {
251
+ beard: [
252
+ {
253
+ d: blob([
254
+ [-46, -4],
255
+ [-46, 24],
256
+ [-36, 54],
257
+ [-20, 74],
258
+ [
259
+ 0,
260
+ 82,
261
+ "c"
262
+ ],
263
+ [20, 74],
264
+ [36, 54],
265
+ [46, 24],
266
+ [46, -4],
267
+ [38, 4],
268
+ [30, 14],
269
+ [18, 20],
270
+ [0, 20],
271
+ [-18, 20],
272
+ [-30, 14],
273
+ [-38, 4]
274
+ ]),
275
+ fill: "beard"
276
+ },
277
+ {
278
+ d: blob([
279
+ [-10, 52],
280
+ [-6, 66],
281
+ [0, 76]
282
+ ], false),
283
+ fill: "none",
284
+ line: true,
285
+ stroke: "beardShade",
286
+ sw: 2
287
+ },
288
+ {
289
+ d: blob([[10, 52], [6, 66]], false),
290
+ fill: "none",
291
+ line: true,
292
+ stroke: "beardShade",
293
+ sw: 2
294
+ }
295
+ ],
296
+ moustache: [{
297
+ d: blob([
298
+ [0, 21],
299
+ [8, 19.5],
300
+ [16, 22],
301
+ [
302
+ 18,
303
+ 27,
304
+ "c"
305
+ ],
306
+ [10, 25],
307
+ [0, 25],
308
+ [-10, 25],
309
+ [
310
+ -18,
311
+ 27,
312
+ "c"
313
+ ],
314
+ [-16, 22],
315
+ [-8, 19.5]
316
+ ]),
317
+ fill: "beard"
318
+ }]
319
+ }
320
+ };
321
+ //#endregion
322
+ //#region src/avatar/art/glasses.ts
323
+ /** Glasses (catalog `glasses.*`), one lens shape drawn at each eye. */
324
+ /** Every glasses part by name. */
325
+ const GLASSES_ART = {
326
+ round: {
327
+ lens: blob(arc(0, 0, 13, 13, 0, 330, 11)),
328
+ bridge: blob([
329
+ [-4, 0],
330
+ [0, -3],
331
+ [4, 0]
332
+ ], false)
333
+ },
334
+ square: {
335
+ lens: roundedRect(-13.5, -10.5, 27, 21, 5),
336
+ bridge: blob([
337
+ [-3.5, -2],
338
+ [0, -4],
339
+ [3.5, -2]
340
+ ], false)
341
+ }
342
+ };
343
+ //#endregion
344
+ //#region src/avatar/art/hair.ts
345
+ /** The skull arc (centre 0,−4) from the left temple over the top to the right. */
346
+ const skull = (vol, a0 = 183, a1 = 357, steps = 8) => arc(0, -4, 46 + vol, 46 + vol, a0, a1, steps);
347
+ /** A cap: the skull arc outset by `vol`, closed by a hairline (right → left). */
348
+ const cap = (vol, hairline, a0 = 183, a1 = 357) => blob([...skull(vol, a0, a1), ...hairline]);
349
+ const shine = (r = 40, a0 = 212, a1 = 244) => ({
350
+ d: blob(arc(0, -4, r, r, a0, a1, 3), false),
351
+ fill: "hairLight",
352
+ line: true,
353
+ sw: 3.4,
354
+ stroke: "hairLight",
355
+ opacity: .85
356
+ });
357
+ /** A smooth back-view cap: down to the nape at `nape`. */
358
+ const rearCap = (vol, nape, napeW = 40) => blob([
359
+ ...arc(0, -4, 46 + vol, 46 + vol, 162, 378, 10),
360
+ [napeW + vol * .4, nape],
361
+ [0, nape + 4],
362
+ [-napeW - vol * .4, nape]
363
+ ]);
364
+ /** A round, scalloped cloud (afro, puffs, buns). */
365
+ const cloud = (cx, cy, rx, ry, count, bump, phase = 0) => scallop(arc(cx, cy, rx, ry, phase, phase + 360 - 360 / count, count - 1), bump, true);
366
+ /** A hanging strand (locs, braids): an outlined thick round line. */
367
+ const strand = (pts, w, slot = "hair") => {
368
+ const d = blob(pts, false);
369
+ return [{
370
+ d,
371
+ fill: "none",
372
+ line: true,
373
+ stroke: "hairInk",
374
+ sw: w + 3
375
+ }, {
376
+ d,
377
+ fill: "none",
378
+ line: true,
379
+ stroke: slot,
380
+ sw: w
381
+ }];
382
+ };
383
+ const smoothHairline = [
384
+ [45, -8],
385
+ [38, -24],
386
+ [22, -33],
387
+ [0, -36],
388
+ [-22, -33],
389
+ [-38, -24],
390
+ [-45, -8]
391
+ ];
392
+ //#endregion
393
+ //#region src/avatar/art/index.ts
394
+ /**
395
+ * The art chunk: every part's path data, keyed by catalog name. Loaded
396
+ * lazily by `ready()` so `encode`, `decode` and `defaultLook` never pull it
397
+ * in (avatars.md §3.1).
398
+ */
399
+ /** The launch art. */
400
+ const ART = {
401
+ hair: {
402
+ bald: {
403
+ front: [{
404
+ d: blob(arc(0, -4, 38, 38, 218, 240, 2), false),
405
+ fill: "none",
406
+ line: true,
407
+ stroke: "white",
408
+ sw: 3.2,
409
+ opacity: .35
410
+ }],
411
+ rear: [],
412
+ top: 0
413
+ },
414
+ buzz: {
415
+ front: [{
416
+ d: cap(3, [
417
+ [46, -10],
418
+ [40, -22],
419
+ [26, -29],
420
+ [0, -32],
421
+ [-26, -29],
422
+ [-40, -22],
423
+ [-46, -10]
424
+ ]),
425
+ fill: "hairBuzz",
426
+ clip: "head",
427
+ stroke: "none"
428
+ }],
429
+ rear: [{
430
+ d: rearCap(2, 22),
431
+ fill: "hairBuzz",
432
+ clip: "head",
433
+ stroke: "none"
434
+ }],
435
+ top: 0
436
+ },
437
+ crop: {
438
+ front: [{
439
+ d: cap(5, [
440
+ [45, -8],
441
+ [41, -21],
442
+ [29, -29],
443
+ [15, -27],
444
+ [2, -33],
445
+ [-12, -27],
446
+ [-26, -31],
447
+ [-39, -22],
448
+ [-46, -8]
449
+ ]),
450
+ fill: "hair"
451
+ }, shine(42)],
452
+ rear: [{
453
+ d: rearCap(5, 18),
454
+ fill: "hair"
455
+ }],
456
+ top: 5
457
+ },
458
+ swoop: {
459
+ front: [
460
+ {
461
+ d: blob([
462
+ [-48, -4],
463
+ [-52, -28],
464
+ [-42, -50],
465
+ [-18, -63],
466
+ [10, -64],
467
+ [34, -55],
468
+ [49, -35],
469
+ [51, -8],
470
+ [45, -6],
471
+ [41, -20],
472
+ [30, -26],
473
+ [16, -25],
474
+ [0, -29],
475
+ [-16, -36],
476
+ [-30, -40],
477
+ [-41, -34],
478
+ [-46, -18]
479
+ ]),
480
+ fill: "hair"
481
+ },
482
+ {
483
+ d: blob([
484
+ [24, -60],
485
+ [14, -46],
486
+ [6, -30]
487
+ ], false),
488
+ fill: "none",
489
+ line: true,
490
+ stroke: "hairShade",
491
+ sw: 2.4
492
+ },
493
+ shine(46, 222, 250)
494
+ ],
495
+ rear: [{
496
+ d: rearCap(7, 16),
497
+ fill: "hair"
498
+ }],
499
+ top: 14
500
+ },
501
+ spiky: {
502
+ front: [{
503
+ d: blob([
504
+ [-48, -4],
505
+ [
506
+ -58,
507
+ -22,
508
+ "c"
509
+ ],
510
+ [-47, -30],
511
+ [
512
+ -54,
513
+ -48,
514
+ "c"
515
+ ],
516
+ [-36, -48],
517
+ [
518
+ -30,
519
+ -66,
520
+ "c"
521
+ ],
522
+ [-16, -55],
523
+ [
524
+ -2,
525
+ -72,
526
+ "c"
527
+ ],
528
+ [8, -56],
529
+ [
530
+ 26,
531
+ -68,
532
+ "c"
533
+ ],
534
+ [30, -50],
535
+ [
536
+ 50,
537
+ -54,
538
+ "c"
539
+ ],
540
+ [46, -36],
541
+ [
542
+ 60,
543
+ -24,
544
+ "c"
545
+ ],
546
+ [48, -4],
547
+ [44, -10],
548
+ [
549
+ 38,
550
+ -26,
551
+ "c"
552
+ ],
553
+ [30, -21],
554
+ [
555
+ 22,
556
+ -34,
557
+ "c"
558
+ ],
559
+ [12, -25],
560
+ [
561
+ 2,
562
+ -36,
563
+ "c"
564
+ ],
565
+ [-8, -25],
566
+ [
567
+ -18,
568
+ -34,
569
+ "c"
570
+ ],
571
+ [-28, -22],
572
+ [
573
+ -38,
574
+ -29,
575
+ "c"
576
+ ],
577
+ [-45, -10]
578
+ ]),
579
+ fill: "hair"
580
+ }, shine(40)],
581
+ rear: [{
582
+ d: blob([
583
+ [-48, 14],
584
+ [
585
+ -58,
586
+ -6,
587
+ "c"
588
+ ],
589
+ [-50, -20],
590
+ [
591
+ -56,
592
+ -40,
593
+ "c"
594
+ ],
595
+ [-38, -44],
596
+ [
597
+ -30,
598
+ -64,
599
+ "c"
600
+ ],
601
+ [-14, -54],
602
+ [
603
+ 0,
604
+ -70,
605
+ "c"
606
+ ],
607
+ [14, -54],
608
+ [
609
+ 30,
610
+ -64,
611
+ "c"
612
+ ],
613
+ [38, -44],
614
+ [
615
+ 56,
616
+ -40,
617
+ "c"
618
+ ],
619
+ [50, -20],
620
+ [
621
+ 58,
622
+ -6,
623
+ "c"
624
+ ],
625
+ [48, 14],
626
+ [
627
+ 24,
628
+ 18,
629
+ "c"
630
+ ],
631
+ [
632
+ 12,
633
+ 26,
634
+ "c"
635
+ ],
636
+ [
637
+ 0,
638
+ 20,
639
+ "c"
640
+ ],
641
+ [
642
+ -12,
643
+ 26,
644
+ "c"
645
+ ],
646
+ [
647
+ -24,
648
+ 18,
649
+ "c"
650
+ ]
651
+ ]),
652
+ fill: "hair"
653
+ }],
654
+ top: 20
655
+ },
656
+ curly: {
657
+ back: [{
658
+ d: cloud(0, -8, 58, 54, 13, 6, 135),
659
+ fill: "hairShade"
660
+ }],
661
+ front: [{
662
+ d: scallop([
663
+ ...skull(9, 180, 360, 9),
664
+ [48, -6],
665
+ [40, -20],
666
+ [28, -28],
667
+ [14, -30],
668
+ [0, -29],
669
+ [-14, -30],
670
+ [-28, -28],
671
+ [-40, -20],
672
+ [-48, -6]
673
+ ], 4.5, true),
674
+ fill: "hair"
675
+ }, shine(44, 214, 238)],
676
+ rear: [{
677
+ d: cloud(0, -6, 58, 58, 15, 6, 0),
678
+ fill: "hair"
679
+ }],
680
+ top: 16
681
+ },
682
+ coily: {
683
+ front: [{
684
+ d: scallop([
685
+ ...skull(7, 178, 362, 14),
686
+ [46, -10],
687
+ [40, -22],
688
+ [30, -29],
689
+ [20, -31],
690
+ [10, -32],
691
+ [0, -32],
692
+ [-10, -32],
693
+ [-20, -31],
694
+ [-30, -29],
695
+ [-40, -22],
696
+ [-46, -10]
697
+ ], 2.6, true),
698
+ fill: "hair"
699
+ }, shine(42, 218, 240)],
700
+ rear: [{
701
+ d: scallop([
702
+ ...arc(0, -4, 53, 53, 160, 380, 18),
703
+ [44, 20],
704
+ [30, 24],
705
+ [15, 26],
706
+ [0, 27],
707
+ [-15, 26],
708
+ [-30, 24],
709
+ [-44, 20]
710
+ ], 2.6, true),
711
+ fill: "hair"
712
+ }],
713
+ top: 10
714
+ },
715
+ afro: {
716
+ back: [{
717
+ d: cloud(0, -16, 72, 64, 16, 6.5, 90),
718
+ fill: "hair"
719
+ }],
720
+ front: [
721
+ {
722
+ d: scallop([
723
+ ...skull(4, 186, 354, 6),
724
+ [44, -12],
725
+ [36, -24],
726
+ [24, -30],
727
+ [12, -31],
728
+ [0, -31],
729
+ [-12, -31],
730
+ [-24, -30],
731
+ [-36, -24],
732
+ [-44, -12]
733
+ ], 3.5, true),
734
+ fill: "hair",
735
+ stroke: "none"
736
+ },
737
+ {
738
+ d: scallop([
739
+ [44, -12],
740
+ [36, -24],
741
+ [24, -30],
742
+ [12, -31],
743
+ [0, -31],
744
+ [-12, -31],
745
+ [-24, -30],
746
+ [-36, -24],
747
+ [-44, -12]
748
+ ], 3.5, false, -1),
749
+ fill: "none",
750
+ line: true,
751
+ stroke: "hairInk",
752
+ sw: 3
753
+ },
754
+ shine(62, 214, 236)
755
+ ],
756
+ rear: [{
757
+ d: cloud(0, -16, 72, 64, 16, 6.5, 90),
758
+ fill: "hair"
759
+ }],
760
+ top: 30,
761
+ coversEars: true
762
+ },
763
+ bob: {
764
+ back: [{
765
+ d: blob([
766
+ [
767
+ -52,
768
+ 40,
769
+ "c"
770
+ ],
771
+ [-56, 6],
772
+ [-56, -28],
773
+ [-42, -52],
774
+ [0, -60],
775
+ [42, -52],
776
+ [56, -28],
777
+ [56, 6],
778
+ [
779
+ 52,
780
+ 40,
781
+ "c"
782
+ ]
783
+ ]),
784
+ fill: "hairShade"
785
+ }],
786
+ front: [{
787
+ d: blob([
788
+ [
789
+ -54,
790
+ 38,
791
+ "c"
792
+ ],
793
+ [-56, 4],
794
+ [-53, -28],
795
+ [-38, -51],
796
+ [0, -58],
797
+ [38, -51],
798
+ [53, -28],
799
+ [56, 4],
800
+ [
801
+ 54,
802
+ 38,
803
+ "c"
804
+ ],
805
+ [43, 36],
806
+ [41, 10],
807
+ [
808
+ 42,
809
+ -14,
810
+ "c"
811
+ ],
812
+ [30, -20],
813
+ [15, -19],
814
+ [0, -21],
815
+ [-15, -19],
816
+ [-30, -20],
817
+ [
818
+ -42,
819
+ -14,
820
+ "c"
821
+ ],
822
+ [-41, 10],
823
+ [-43, 36]
824
+ ]),
825
+ fill: "hair"
826
+ }, shine(46, 220, 246)],
827
+ rear: [{
828
+ d: blob([
829
+ [
830
+ -54,
831
+ 40,
832
+ "c"
833
+ ],
834
+ [-57, 4],
835
+ [-54, -28],
836
+ [-40, -52],
837
+ [0, -60],
838
+ [40, -52],
839
+ [54, -28],
840
+ [57, 4],
841
+ [
842
+ 54,
843
+ 40,
844
+ "c"
845
+ ],
846
+ [27, 44],
847
+ [0, 42],
848
+ [-27, 44]
849
+ ]),
850
+ fill: "hair"
851
+ }],
852
+ top: 10,
853
+ coversEars: true
854
+ },
855
+ long: {
856
+ back: [{
857
+ d: blob([
858
+ [-50, -10],
859
+ [-54, -36],
860
+ [-36, -52],
861
+ [0, -56],
862
+ [36, -52],
863
+ [54, -36],
864
+ [50, -10],
865
+ [56, 34],
866
+ [
867
+ 60,
868
+ 74,
869
+ "c"
870
+ ],
871
+ [30, 78],
872
+ [0, 72],
873
+ [-30, 78],
874
+ [
875
+ -60,
876
+ 74,
877
+ "c"
878
+ ],
879
+ [-56, 34]
880
+ ]),
881
+ fill: "hairShade"
882
+ }],
883
+ front: [{
884
+ d: blob([
885
+ [
886
+ 0,
887
+ -58,
888
+ "c"
889
+ ],
890
+ [26, -55],
891
+ [46, -40],
892
+ [53, -12],
893
+ [53, 30],
894
+ [
895
+ 52,
896
+ 70,
897
+ "c"
898
+ ],
899
+ [43, 62],
900
+ [41, 30],
901
+ [41, 0],
902
+ [35, -20],
903
+ [20, -31],
904
+ [7, -38],
905
+ [
906
+ 0,
907
+ -46,
908
+ "c"
909
+ ],
910
+ [-7, -38],
911
+ [-20, -31],
912
+ [-35, -20],
913
+ [-41, 0],
914
+ [-41, 30],
915
+ [-43, 62],
916
+ [
917
+ -52,
918
+ 70,
919
+ "c"
920
+ ],
921
+ [-53, 30],
922
+ [-53, -12],
923
+ [-46, -40],
924
+ [-26, -55]
925
+ ]),
926
+ fill: "hair"
927
+ }, shine(44, 220, 248)],
928
+ rear: [{
929
+ d: blob([
930
+ [-52, -10],
931
+ [-58, -40],
932
+ [-40, -60],
933
+ [0, -64],
934
+ [40, -60],
935
+ [58, -40],
936
+ [52, -10],
937
+ [56, 34],
938
+ [
939
+ 60,
940
+ 74,
941
+ "c"
942
+ ],
943
+ [30, 78],
944
+ [0, 74],
945
+ [-30, 78],
946
+ [
947
+ -60,
948
+ 74,
949
+ "c"
950
+ ],
951
+ [-56, 34]
952
+ ]),
953
+ fill: "hair"
954
+ }, {
955
+ d: blob([
956
+ [0, -58],
957
+ [0, -30],
958
+ [2, 10]
959
+ ], false),
960
+ fill: "none",
961
+ line: true,
962
+ stroke: "hairShade",
963
+ sw: 2.4
964
+ }],
965
+ top: 14,
966
+ coversEars: true
967
+ },
968
+ ponytail: {
969
+ back: [{
970
+ d: blob([
971
+ [18, -48],
972
+ [44, -64],
973
+ [66, -52],
974
+ [72, -22],
975
+ [66, 14],
976
+ [
977
+ 58,
978
+ 44,
979
+ "c"
980
+ ],
981
+ [52, 12],
982
+ [48, -18],
983
+ [34, -40]
984
+ ]),
985
+ fill: "hairShade"
986
+ }],
987
+ front: [
988
+ {
989
+ d: cap(4, smoothHairline),
990
+ fill: "hair"
991
+ },
992
+ {
993
+ d: blob([[34, -52], [40, -44]], false),
994
+ fill: "none",
995
+ line: true,
996
+ stroke: "acc",
997
+ sw: 7,
998
+ cap: "round"
999
+ },
1000
+ shine(42)
1001
+ ],
1002
+ rear: [
1003
+ {
1004
+ d: rearCap(4, 14),
1005
+ fill: "hair"
1006
+ },
1007
+ {
1008
+ d: blob([
1009
+ [0, -30],
1010
+ [14, -10],
1011
+ [12, 30],
1012
+ [
1013
+ 0,
1014
+ 62,
1015
+ "c"
1016
+ ],
1017
+ [-12, 30],
1018
+ [-14, -10]
1019
+ ]),
1020
+ fill: "hair"
1021
+ },
1022
+ {
1023
+ d: blob([[-7, -28], [7, -28]], false),
1024
+ fill: "none",
1025
+ line: true,
1026
+ stroke: "acc",
1027
+ sw: 7
1028
+ }
1029
+ ],
1030
+ top: 14
1031
+ },
1032
+ bun: {
1033
+ back: [{
1034
+ d: blob(arc(0, -60, 20, 18, 0, 345, 11)),
1035
+ fill: "hair"
1036
+ }, {
1037
+ d: blob(arc(0, -60, 12, 10, 200, 250, 2), false),
1038
+ fill: "none",
1039
+ line: true,
1040
+ stroke: "hairLight",
1041
+ sw: 3
1042
+ }],
1043
+ front: [
1044
+ {
1045
+ d: cap(4, smoothHairline),
1046
+ fill: "hair"
1047
+ },
1048
+ {
1049
+ d: blob([[0, -36], [-2, -48]], false),
1050
+ fill: "none",
1051
+ line: true,
1052
+ stroke: "hairShade",
1053
+ sw: 2.2
1054
+ },
1055
+ shine(42, 222, 246)
1056
+ ],
1057
+ rear: [{
1058
+ d: rearCap(4, 14),
1059
+ fill: "hair"
1060
+ }, {
1061
+ d: blob(arc(0, -52, 20, 18, 0, 345, 11)),
1062
+ fill: "hair"
1063
+ }],
1064
+ top: 30
1065
+ },
1066
+ puffs: {
1067
+ back: [{
1068
+ d: cloud(-46, -40, 20, 20, 9, 4, 20),
1069
+ fill: "hair"
1070
+ }, {
1071
+ d: cloud(46, -40, 20, 20, 9, 4, 0),
1072
+ fill: "hair"
1073
+ }],
1074
+ front: [
1075
+ {
1076
+ d: cap(4, smoothHairline),
1077
+ fill: "hair"
1078
+ },
1079
+ {
1080
+ d: blob([[0, -36], [0, -50]], false),
1081
+ fill: "none",
1082
+ line: true,
1083
+ stroke: "hairShade",
1084
+ sw: 2.2
1085
+ },
1086
+ {
1087
+ d: blob([[-36, -44], [-30, -52]], false),
1088
+ fill: "none",
1089
+ line: true,
1090
+ stroke: "acc",
1091
+ sw: 6
1092
+ },
1093
+ {
1094
+ d: blob([[36, -44], [30, -52]], false),
1095
+ fill: "none",
1096
+ line: true,
1097
+ stroke: "acc",
1098
+ sw: 6
1099
+ }
1100
+ ],
1101
+ rear: [
1102
+ {
1103
+ d: rearCap(4, 14),
1104
+ fill: "hair"
1105
+ },
1106
+ {
1107
+ d: cloud(-46, -40, 20, 20, 9, 4, 20),
1108
+ fill: "hair"
1109
+ },
1110
+ {
1111
+ d: cloud(46, -40, 20, 20, 9, 4, 0),
1112
+ fill: "hair"
1113
+ }
1114
+ ],
1115
+ top: 14
1116
+ },
1117
+ mohawk: {
1118
+ front: [{
1119
+ d: cap(2, [
1120
+ [46, -10],
1121
+ [40, -22],
1122
+ [26, -29],
1123
+ [0, -32],
1124
+ [-26, -29],
1125
+ [-40, -22],
1126
+ [-46, -10]
1127
+ ]),
1128
+ fill: "hairBuzz",
1129
+ clip: "head",
1130
+ stroke: "none",
1131
+ opacity: .55
1132
+ }, {
1133
+ d: blob([
1134
+ [-13, -28],
1135
+ [-18, -50],
1136
+ [
1137
+ -24,
1138
+ -72,
1139
+ "c"
1140
+ ],
1141
+ [-8, -62],
1142
+ [
1143
+ 0,
1144
+ -86,
1145
+ "c"
1146
+ ],
1147
+ [8, -62],
1148
+ [
1149
+ 24,
1150
+ -72,
1151
+ "c"
1152
+ ],
1153
+ [18, -50],
1154
+ [13, -28],
1155
+ [0, -32]
1156
+ ]),
1157
+ fill: "hair"
1158
+ }],
1159
+ rear: [{
1160
+ d: rearCap(2, 22),
1161
+ fill: "hairBuzz",
1162
+ clip: "head",
1163
+ stroke: "none",
1164
+ opacity: .55
1165
+ }, {
1166
+ d: blob([
1167
+ [-11, 18],
1168
+ [-13, -40],
1169
+ [
1170
+ -14,
1171
+ -60,
1172
+ "c"
1173
+ ],
1174
+ [-6, -54],
1175
+ [
1176
+ 0,
1177
+ -72,
1178
+ "c"
1179
+ ],
1180
+ [6, -54],
1181
+ [
1182
+ 14,
1183
+ -60,
1184
+ "c"
1185
+ ],
1186
+ [13, -40],
1187
+ [11, 18]
1188
+ ]),
1189
+ fill: "hair"
1190
+ }],
1191
+ top: 30
1192
+ },
1193
+ locs: {
1194
+ back: [{
1195
+ d: blob([
1196
+ [-50, -10],
1197
+ [-54, -36],
1198
+ [-36, -50],
1199
+ [0, -52],
1200
+ [36, -50],
1201
+ [54, -36],
1202
+ [50, -10],
1203
+ [56, 30],
1204
+ [
1205
+ 58,
1206
+ 62,
1207
+ "c"
1208
+ ],
1209
+ [0, 58],
1210
+ [
1211
+ -58,
1212
+ 62,
1213
+ "c"
1214
+ ],
1215
+ [-56, 30]
1216
+ ]),
1217
+ fill: "hairShade"
1218
+ }, ...[
1219
+ -44,
1220
+ -30,
1221
+ 30,
1222
+ 44
1223
+ ].flatMap((at) => strand([
1224
+ [at, 0],
1225
+ [at * 1.12, 30],
1226
+ [at * 1.12, 60]
1227
+ ], 7, "hairShade"))],
1228
+ front: [
1229
+ {
1230
+ d: cap(6, [
1231
+ [46, -2],
1232
+ [42, -20],
1233
+ [28, -30],
1234
+ [14, -26],
1235
+ [0, -32],
1236
+ [-14, -26],
1237
+ [-28, -30],
1238
+ [-42, -20],
1239
+ [-46, -2]
1240
+ ]),
1241
+ fill: "hair"
1242
+ },
1243
+ ...strand([
1244
+ [-46, -10],
1245
+ [-50, 14],
1246
+ [-50, 40]
1247
+ ], 8),
1248
+ ...strand([
1249
+ [46, -10],
1250
+ [50, 14],
1251
+ [50, 40]
1252
+ ], 8),
1253
+ ...strand([
1254
+ [-38, -14],
1255
+ [-41, 8],
1256
+ [-41, 24]
1257
+ ], 7),
1258
+ ...strand([
1259
+ [38, -14],
1260
+ [41, 8],
1261
+ [41, 24]
1262
+ ], 7),
1263
+ shine(44)
1264
+ ],
1265
+ rear: [{
1266
+ d: rearCap(6, 10),
1267
+ fill: "hair"
1268
+ }, ...[
1269
+ -40,
1270
+ -27,
1271
+ -14,
1272
+ 0,
1273
+ 14,
1274
+ 27,
1275
+ 40
1276
+ ].flatMap((at) => strand([
1277
+ [at * 1.05, -6],
1278
+ [at * 1.12, 26],
1279
+ [at * 1.12, 60]
1280
+ ], 9))],
1281
+ top: 8,
1282
+ coversEars: true
1283
+ },
1284
+ braids: {
1285
+ back: [{
1286
+ d: blob([
1287
+ [-50, -10],
1288
+ [-54, -36],
1289
+ [-36, -50],
1290
+ [0, -52],
1291
+ [36, -50],
1292
+ [54, -36],
1293
+ [50, -10],
1294
+ [54, 30],
1295
+ [
1296
+ 54,
1297
+ 70,
1298
+ "c"
1299
+ ],
1300
+ [0, 64],
1301
+ [
1302
+ -54,
1303
+ 70,
1304
+ "c"
1305
+ ],
1306
+ [-54, 30]
1307
+ ]),
1308
+ fill: "hairShade"
1309
+ }, ...[
1310
+ -46,
1311
+ -34,
1312
+ 34,
1313
+ 46
1314
+ ].flatMap((at) => strand([[at, 0], [at * 1.08, 70]], 6, "hairShade"))],
1315
+ front: [
1316
+ {
1317
+ d: cap(4, [
1318
+ [45, -6],
1319
+ [36, -24],
1320
+ [22, -30],
1321
+ [0, -34],
1322
+ [-22, -30],
1323
+ [-36, -24],
1324
+ [-45, -6]
1325
+ ]),
1326
+ fill: "hair"
1327
+ },
1328
+ {
1329
+ d: blob([[0, -34], [0, -52]], false),
1330
+ fill: "none",
1331
+ line: true,
1332
+ stroke: "hairShade",
1333
+ sw: 2.2
1334
+ },
1335
+ ...[
1336
+ -20,
1337
+ -10,
1338
+ 10,
1339
+ 20
1340
+ ].map((at) => ({
1341
+ d: blob([[at, -32], [at * 1.5, -52]], false),
1342
+ fill: "none",
1343
+ line: true,
1344
+ stroke: "hairShade",
1345
+ sw: 1.8
1346
+ })),
1347
+ ...strand([
1348
+ [-46, -8],
1349
+ [-50, 30],
1350
+ [-50, 66]
1351
+ ], 6),
1352
+ ...strand([
1353
+ [46, -8],
1354
+ [50, 30],
1355
+ [50, 66]
1356
+ ], 6),
1357
+ {
1358
+ d: blob([[-54, 60], [-46, 60]], false),
1359
+ fill: "none",
1360
+ line: true,
1361
+ stroke: "acc",
1362
+ sw: 4,
1363
+ cap: "butt"
1364
+ },
1365
+ {
1366
+ d: blob([[46, 60], [54, 60]], false),
1367
+ fill: "none",
1368
+ line: true,
1369
+ stroke: "acc",
1370
+ sw: 4,
1371
+ cap: "butt"
1372
+ }
1373
+ ],
1374
+ rear: [{
1375
+ d: rearCap(4, 10),
1376
+ fill: "hair"
1377
+ }, ...[
1378
+ -36,
1379
+ -24,
1380
+ -12,
1381
+ 0,
1382
+ 12,
1383
+ 24,
1384
+ 36
1385
+ ].flatMap((at) => strand([
1386
+ [at * 1.05, -10],
1387
+ [at * 1.08, 30],
1388
+ [at * 1.08, 66]
1389
+ ], 6.5))],
1390
+ top: 6,
1391
+ coversEars: true
1392
+ }
1393
+ },
1394
+ beard: BEARD_ART,
1395
+ glasses: GLASSES_ART,
1396
+ headwear: {
1397
+ hijab: {
1398
+ back: [{
1399
+ d: blob([
1400
+ [-54, -10],
1401
+ [-56, -40],
1402
+ [-36, -60],
1403
+ [0, -64],
1404
+ [36, -60],
1405
+ [56, -40],
1406
+ [54, -10],
1407
+ [58, 30],
1408
+ [
1409
+ 62,
1410
+ 66,
1411
+ "c"
1412
+ ],
1413
+ [30, 74],
1414
+ [0, 72],
1415
+ [-30, 74],
1416
+ [
1417
+ -62,
1418
+ 66,
1419
+ "c"
1420
+ ],
1421
+ [-58, 30]
1422
+ ]),
1423
+ fill: "accShade"
1424
+ }],
1425
+ front: [
1426
+ {
1427
+ d: blob([
1428
+ [-55, -8],
1429
+ [-55, -38],
1430
+ [-36, -58],
1431
+ [0, -62],
1432
+ [36, -58],
1433
+ [55, -38],
1434
+ [55, -8],
1435
+ [54, 28],
1436
+ [44, 56],
1437
+ [20, 66],
1438
+ [0, 66],
1439
+ [-20, 66],
1440
+ [-44, 56],
1441
+ [-54, 28]
1442
+ ]).add(blob([
1443
+ [0, -38],
1444
+ [24, -34],
1445
+ [37, -14],
1446
+ [38, 14],
1447
+ [30, 38],
1448
+ [14, 52],
1449
+ [0, 54],
1450
+ [-14, 52],
1451
+ [-30, 38],
1452
+ [-38, 14],
1453
+ [-37, -14],
1454
+ [-24, -34]
1455
+ ])),
1456
+ fill: "acc",
1457
+ evenOdd: true
1458
+ },
1459
+ {
1460
+ d: blob([
1461
+ [-30, 60],
1462
+ [-12, 52],
1463
+ [8, 58]
1464
+ ], false),
1465
+ fill: "none",
1466
+ line: true,
1467
+ stroke: "accShade",
1468
+ sw: 2.4
1469
+ },
1470
+ {
1471
+ d: blob([
1472
+ [-49, -6],
1473
+ [-46, -30],
1474
+ [-30, -48]
1475
+ ], false),
1476
+ fill: "none",
1477
+ line: true,
1478
+ stroke: "accLight",
1479
+ sw: 3,
1480
+ opacity: .8
1481
+ }
1482
+ ],
1483
+ rear: [{
1484
+ d: blob([
1485
+ [-54, -10],
1486
+ [-56, -40],
1487
+ [-36, -60],
1488
+ [0, -64],
1489
+ [36, -60],
1490
+ [56, -40],
1491
+ [54, -10],
1492
+ [58, 30],
1493
+ [
1494
+ 62,
1495
+ 66,
1496
+ "c"
1497
+ ],
1498
+ [30, 74],
1499
+ [0, 72],
1500
+ [-30, 74],
1501
+ [
1502
+ -62,
1503
+ 66,
1504
+ "c"
1505
+ ],
1506
+ [-58, 30]
1507
+ ]),
1508
+ fill: "acc"
1509
+ }, {
1510
+ d: blob([
1511
+ [-20, 20],
1512
+ [0, 30],
1513
+ [22, 22]
1514
+ ], false),
1515
+ fill: "none",
1516
+ line: true,
1517
+ stroke: "accShade",
1518
+ sw: 2.4
1519
+ }],
1520
+ hides: "all",
1521
+ hidesEars: true,
1522
+ top: 14
1523
+ },
1524
+ headwrap: {
1525
+ back: [{
1526
+ d: blob([
1527
+ [-12, -56],
1528
+ [-34, -80],
1529
+ [-14, -88],
1530
+ [0, -64]
1531
+ ]),
1532
+ fill: "accShade"
1533
+ }, {
1534
+ d: blob([
1535
+ [12, -56],
1536
+ [34, -82],
1537
+ [14, -90],
1538
+ [0, -64]
1539
+ ]),
1540
+ fill: "accShade"
1541
+ }],
1542
+ front: [
1543
+ {
1544
+ d: blob([
1545
+ [-49, -12],
1546
+ [-54, -38],
1547
+ [-38, -62],
1548
+ [0, -70],
1549
+ [38, -62],
1550
+ [54, -38],
1551
+ [49, -12],
1552
+ [36, -24],
1553
+ [18, -30],
1554
+ [0, -31],
1555
+ [-18, -30],
1556
+ [-36, -24]
1557
+ ]),
1558
+ fill: "acc"
1559
+ },
1560
+ {
1561
+ d: blob([
1562
+ [-44, -22],
1563
+ [-14, -48],
1564
+ [10, -64]
1565
+ ], false),
1566
+ fill: "none",
1567
+ line: true,
1568
+ stroke: "accShade",
1569
+ sw: 2.4
1570
+ },
1571
+ {
1572
+ d: blob([
1573
+ [44, -22],
1574
+ [20, -44],
1575
+ [2, -50]
1576
+ ], false),
1577
+ fill: "none",
1578
+ line: true,
1579
+ stroke: "accShade",
1580
+ sw: 2.4
1581
+ },
1582
+ {
1583
+ d: blob(arc(0, -64, 9, 7, 0, 330, 11)),
1584
+ fill: "acc"
1585
+ }
1586
+ ],
1587
+ rear: [
1588
+ {
1589
+ d: blob([
1590
+ [-49, 4],
1591
+ [-56, -30],
1592
+ [-40, -60],
1593
+ [0, -70],
1594
+ [40, -60],
1595
+ [56, -30],
1596
+ [49, 4],
1597
+ [24, 0],
1598
+ [0, -2],
1599
+ [-24, 0]
1600
+ ]),
1601
+ fill: "acc"
1602
+ },
1603
+ {
1604
+ d: blob([
1605
+ [-40, -8],
1606
+ [-6, -44],
1607
+ [16, -64]
1608
+ ], false),
1609
+ fill: "none",
1610
+ line: true,
1611
+ stroke: "accShade",
1612
+ sw: 2.4
1613
+ },
1614
+ {
1615
+ d: blob(arc(0, -64, 9, 7, 0, 330, 11)),
1616
+ fill: "acc"
1617
+ }
1618
+ ],
1619
+ hides: "all",
1620
+ top: 36
1621
+ },
1622
+ beanie: {
1623
+ front: [
1624
+ {
1625
+ d: blob([
1626
+ [
1627
+ -50,
1628
+ -22,
1629
+ "c"
1630
+ ],
1631
+ [-50, -40],
1632
+ [-34, -60],
1633
+ [0, -66],
1634
+ [34, -60],
1635
+ [50, -40],
1636
+ [
1637
+ 50,
1638
+ -22,
1639
+ "c"
1640
+ ]
1641
+ ]),
1642
+ fill: "acc"
1643
+ },
1644
+ {
1645
+ d: roundedRect(-52, -30, 104, 15, 6),
1646
+ fill: "accShade"
1647
+ },
1648
+ ...[
1649
+ -36,
1650
+ -18,
1651
+ 0,
1652
+ 18,
1653
+ 36
1654
+ ].map((at) => ({
1655
+ d: blob([[at, -27], [at, -18]], false),
1656
+ fill: "none",
1657
+ line: true,
1658
+ stroke: "acc",
1659
+ sw: 2.4
1660
+ })),
1661
+ {
1662
+ d: blob(arc(0, -70, 10, 9, 0, 330, 11)),
1663
+ fill: "accLight"
1664
+ }
1665
+ ],
1666
+ rear: [
1667
+ {
1668
+ d: blob([
1669
+ [
1670
+ -50,
1671
+ -22,
1672
+ "c"
1673
+ ],
1674
+ [-50, -40],
1675
+ [-34, -60],
1676
+ [0, -66],
1677
+ [34, -60],
1678
+ [50, -40],
1679
+ [
1680
+ 50,
1681
+ -22,
1682
+ "c"
1683
+ ]
1684
+ ]),
1685
+ fill: "acc"
1686
+ },
1687
+ {
1688
+ d: roundedRect(-52, -30, 104, 15, 6),
1689
+ fill: "accShade"
1690
+ },
1691
+ {
1692
+ d: blob(arc(0, -70, 10, 9, 0, 330, 11)),
1693
+ fill: "accLight"
1694
+ }
1695
+ ],
1696
+ hides: -24,
1697
+ top: 28
1698
+ },
1699
+ cap: {
1700
+ front: [
1701
+ {
1702
+ d: blob([
1703
+ [
1704
+ -49,
1705
+ -22,
1706
+ "c"
1707
+ ],
1708
+ [-48, -42],
1709
+ [-30, -60],
1710
+ [0, -64],
1711
+ [30, -60],
1712
+ [48, -42],
1713
+ [
1714
+ 49,
1715
+ -22,
1716
+ "c"
1717
+ ],
1718
+ [0, -26]
1719
+ ]),
1720
+ fill: "acc"
1721
+ },
1722
+ {
1723
+ d: blob([
1724
+ [-6, -63],
1725
+ [-4, -40],
1726
+ [0, -27]
1727
+ ], false),
1728
+ fill: "none",
1729
+ line: true,
1730
+ stroke: "accShade",
1731
+ sw: 2.2
1732
+ },
1733
+ {
1734
+ d: blob([
1735
+ [
1736
+ -46,
1737
+ -24,
1738
+ "c"
1739
+ ],
1740
+ [-24, -21],
1741
+ [0, -20],
1742
+ [24, -21],
1743
+ [
1744
+ 46,
1745
+ -24,
1746
+ "c"
1747
+ ],
1748
+ [40, -14],
1749
+ [20, -6],
1750
+ [0, -4],
1751
+ [-20, -6],
1752
+ [-40, -14]
1753
+ ]),
1754
+ fill: "accShade"
1755
+ },
1756
+ {
1757
+ d: blob(arc(0, -63, 4, 3, 0, 330, 7)),
1758
+ fill: "accShade"
1759
+ }
1760
+ ],
1761
+ rear: [{
1762
+ d: blob([
1763
+ [
1764
+ -49,
1765
+ -18,
1766
+ "c"
1767
+ ],
1768
+ [-48, -42],
1769
+ [-30, -60],
1770
+ [0, -64],
1771
+ [30, -60],
1772
+ [48, -42],
1773
+ [
1774
+ 49,
1775
+ -18,
1776
+ "c"
1777
+ ],
1778
+ [12, -20],
1779
+ [
1780
+ 12,
1781
+ -30,
1782
+ "c"
1783
+ ],
1784
+ [
1785
+ -12,
1786
+ -30,
1787
+ "c"
1788
+ ],
1789
+ [-12, -20]
1790
+ ]),
1791
+ fill: "acc"
1792
+ }, {
1793
+ d: roundedRect(-12, -26, 24, 5, 2),
1794
+ fill: "accShade"
1795
+ }],
1796
+ hides: -22,
1797
+ top: 18
1798
+ }
1799
+ }
1800
+ };
1801
+ //#endregion
1802
+ export { ART };
1803
+
1804
+ //# sourceMappingURL=art.js.map