@ludic-labs/assembly 0.0.0-stage → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +2 -0
  3. package/README.md +50 -2
  4. package/dist/bake.d.ts +80 -0
  5. package/dist/bake.js +214 -0
  6. package/dist/browser.d.ts +89 -0
  7. package/dist/browser.js +534 -0
  8. package/dist/compat.d.ts +17 -0
  9. package/dist/compat.js +153 -0
  10. package/dist/compiler.d.ts +18 -0
  11. package/dist/compiler.js +1264 -0
  12. package/dist/diagnostics.d.ts +5 -0
  13. package/dist/diagnostics.js +8 -0
  14. package/dist/export.d.ts +54 -0
  15. package/dist/export.js +272 -0
  16. package/dist/index.d.ts +4 -0
  17. package/dist/index.js +3 -0
  18. package/dist/legacy.d.ts +36 -0
  19. package/dist/legacy.js +180 -0
  20. package/dist/math.d.ts +16 -0
  21. package/dist/math.js +62 -0
  22. package/dist/mesh.d.ts +11 -0
  23. package/dist/mesh.js +153 -0
  24. package/dist/motion.d.ts +63 -0
  25. package/dist/motion.js +1476 -0
  26. package/dist/pixel.d.ts +268 -0
  27. package/dist/pixel.js +942 -0
  28. package/dist/required.d.ts +2 -0
  29. package/dist/required.js +6 -0
  30. package/dist/shapes.d.ts +71 -0
  31. package/dist/shapes.js +396 -0
  32. package/dist/sprite-brief.d.ts +5 -0
  33. package/dist/sprite-brief.js +47 -0
  34. package/dist/sprite-compiler.d.ts +62 -0
  35. package/dist/sprite-compiler.js +1745 -0
  36. package/dist/sprite-decompile.d.ts +68 -0
  37. package/dist/sprite-decompile.js +786 -0
  38. package/dist/sprite-format.d.ts +4 -0
  39. package/dist/sprite-format.js +155 -0
  40. package/dist/sprite-guide.d.ts +40 -0
  41. package/dist/sprite-guide.js +330 -0
  42. package/dist/sprite-scene.d.ts +277 -0
  43. package/dist/sprite-scene.js +664 -0
  44. package/dist/sprite-types.d.ts +110 -0
  45. package/dist/sprite-types.js +1 -0
  46. package/dist/sprite.d.ts +8 -0
  47. package/dist/sprite.js +8 -0
  48. package/dist/svg/schema.d.ts +71 -0
  49. package/dist/svg/schema.js +217 -0
  50. package/dist/svg/types.d.ts +148 -0
  51. package/dist/svg/types.js +1 -0
  52. package/dist/svg.d.ts +26 -0
  53. package/dist/svg.js +539 -0
  54. package/dist/text.d.ts +12 -0
  55. package/dist/text.js +75 -0
  56. package/dist/types.d.ts +478 -0
  57. package/dist/types.js +1 -0
  58. package/docs/svg/README.md +150 -0
  59. package/docs/svg/specification.md +108 -0
  60. package/examples/svg/arcane-shield.json +261 -0
  61. package/examples/svg/aurora-ribbon.json +158 -0
  62. package/examples/svg/bouncing-ember.json +76 -0
  63. package/examples/svg/ember-fountain.json +224 -0
  64. package/examples/svg/lantern-keeper.json +1159 -0
  65. package/examples/svg/night-workshop.json +1120 -0
  66. package/examples/svg/waygate-platform.json +64 -0
  67. package/examples/svg/waygate-spark.json +92 -0
  68. package/examples/svg/waygate-wisp.json +105 -0
  69. package/examples/svg/waygate.json +485 -0
  70. package/package.json +132 -4
  71. package/schemas/asset-assembly-0.1.schema.json +354 -0
  72. package/schemas/asset-assembly-0.2.schema.json +429 -0
  73. package/schemas/asset-assembly-0.3.schema.json +572 -0
  74. package/schemas/motion-set-0.1.schema.json +178 -0
  75. package/schemas/pixel-sprite-0.1.schema.json +892 -0
  76. package/schemas/pixel-sprite-scene-0.1.schema.json +149 -0
  77. package/schemas/svg-asset-0.1.schema.json +1157 -0
  78. package/tools/svg-asset.mjs +106 -0
@@ -0,0 +1,1120 @@
1
+ {
2
+ "schema": "svg-asset/0.1",
3
+ "name": "The night workshop",
4
+ "viewBox": [0, 0, 640, 480],
5
+ "seed": 83,
6
+ "params": {
7
+ "sway": {
8
+ "default": 0,
9
+ "min": -5,
10
+ "max": 5
11
+ },
12
+ "glow": {
13
+ "default": 0.8,
14
+ "min": 0.55,
15
+ "max": 1
16
+ }
17
+ },
18
+ "palette": {
19
+ "ink": "#263743",
20
+ "wood": "#785349",
21
+ "trim": "#bf8960",
22
+ "gold": "#e8bd79"
23
+ },
24
+ "gradients": {
25
+ "wall": {
26
+ "kind": "linear",
27
+ "from": [0, 0],
28
+ "to": [0, 480],
29
+ "stops": [
30
+ {
31
+ "offset": 0.0,
32
+ "color": "#243b50"
33
+ },
34
+ {
35
+ "offset": 1.0,
36
+ "color": "#385967"
37
+ }
38
+ ]
39
+ },
40
+ "floor": {
41
+ "kind": "linear",
42
+ "from": [0, 340],
43
+ "to": [0, 480],
44
+ "stops": [
45
+ {
46
+ "offset": 0.0,
47
+ "color": "#b58362"
48
+ },
49
+ {
50
+ "offset": 1.0,
51
+ "color": "#624a47"
52
+ }
53
+ ]
54
+ },
55
+ "night": {
56
+ "kind": "linear",
57
+ "from": [0, 70],
58
+ "to": [0, 270],
59
+ "stops": [
60
+ {
61
+ "offset": 0.0,
62
+ "color": "#172b48"
63
+ },
64
+ {
65
+ "offset": 1.0,
66
+ "color": "#48788b"
67
+ }
68
+ ]
69
+ },
70
+ "lamp": {
71
+ "kind": "radial",
72
+ "center": [456, 219],
73
+ "radius": 100,
74
+ "stops": [
75
+ {
76
+ "offset": 0,
77
+ "color": "#ffe4a7",
78
+ "opacity": 0.55
79
+ },
80
+ {
81
+ "offset": 1,
82
+ "color": "#ffe4a7",
83
+ "opacity": 0
84
+ }
85
+ ]
86
+ }
87
+ },
88
+ "clips": {
89
+ "window": [
90
+ {
91
+ "id": "opening",
92
+ "kind": "rect",
93
+ "x": 62,
94
+ "y": 67,
95
+ "width": 165,
96
+ "height": 209,
97
+ "radius": 70,
98
+ "style": {
99
+ "fill": "#ffffff"
100
+ }
101
+ }
102
+ ]
103
+ },
104
+ "symbols": {
105
+ "book": {
106
+ "params": {
107
+ "height": {
108
+ "default": 44,
109
+ "min": 25,
110
+ "max": 65
111
+ }
112
+ },
113
+ "children": [
114
+ {
115
+ "id": "cover",
116
+ "kind": "rect",
117
+ "x": 0,
118
+ "y": ["mul", -1, "$height"],
119
+ "width": 17,
120
+ "height": "$height",
121
+ "radius": 2,
122
+ "style": {
123
+ "fill": "#648780"
124
+ }
125
+ },
126
+ {
127
+ "id": "spine",
128
+ "kind": "rect",
129
+ "x": 2,
130
+ "y": ["sub", 8, "$height"],
131
+ "width": 13,
132
+ "height": 3,
133
+ "radius": 1,
134
+ "style": {
135
+ "fill": "#d2b382"
136
+ }
137
+ },
138
+ {
139
+ "id": "lower",
140
+ "kind": "rect",
141
+ "x": 2,
142
+ "y": -8,
143
+ "width": 13,
144
+ "height": 2,
145
+ "radius": 1,
146
+ "style": {
147
+ "fill": "#d2b382"
148
+ }
149
+ }
150
+ ]
151
+ }
152
+ },
153
+ "animations": {
154
+ "evening": {
155
+ "duration": 4,
156
+ "loop": true,
157
+ "tracks": {
158
+ "sway": [
159
+ {
160
+ "time": 0,
161
+ "value": -2,
162
+ "ease": "smooth"
163
+ },
164
+ {
165
+ "time": 2,
166
+ "value": 2,
167
+ "ease": "smooth"
168
+ },
169
+ {
170
+ "time": 4,
171
+ "value": -2,
172
+ "ease": "smooth"
173
+ }
174
+ ],
175
+ "glow": [
176
+ {
177
+ "time": 0,
178
+ "value": 0.8,
179
+ "ease": "smooth"
180
+ },
181
+ {
182
+ "time": 1,
183
+ "value": 0.95,
184
+ "ease": "smooth"
185
+ },
186
+ {
187
+ "time": 1.5,
188
+ "value": 0.72,
189
+ "ease": "smooth"
190
+ },
191
+ {
192
+ "time": 2.5,
193
+ "value": 1,
194
+ "ease": "smooth"
195
+ },
196
+ {
197
+ "time": 3,
198
+ "value": 0.85,
199
+ "ease": "smooth"
200
+ },
201
+ {
202
+ "time": 4,
203
+ "value": 0.8,
204
+ "ease": "smooth"
205
+ }
206
+ ]
207
+ }
208
+ }
209
+ },
210
+ "defaultAnimation": "evening",
211
+ "nodes": [
212
+ {
213
+ "id": "wall",
214
+ "kind": "rect",
215
+ "x": 0,
216
+ "y": 0,
217
+ "width": 640,
218
+ "height": 480,
219
+ "radius": 0,
220
+ "style": {
221
+ "fill": {
222
+ "gradient": "wall"
223
+ }
224
+ }
225
+ },
226
+ {
227
+ "id": "wall-panels",
228
+ "kind": "repeat",
229
+ "count": 10,
230
+ "children": [
231
+ {
232
+ "id": "seam",
233
+ "kind": "rect",
234
+ "x": 0,
235
+ "y": 24,
236
+ "width": 2,
237
+ "height": 321,
238
+ "radius": 0,
239
+ "style": {
240
+ "fill": "#5c7980"
241
+ },
242
+ "opacity": 0.22,
243
+ "transform": {
244
+ "translate": [["mul", "$i", 70], 0]
245
+ }
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ "id": "ceiling",
251
+ "kind": "rect",
252
+ "x": 0,
253
+ "y": 0,
254
+ "width": 640,
255
+ "height": 24,
256
+ "radius": 0,
257
+ "style": {
258
+ "fill": "#172e3c"
259
+ }
260
+ },
261
+ {
262
+ "id": "cornice",
263
+ "kind": "rect",
264
+ "x": 0,
265
+ "y": 22,
266
+ "width": 640,
267
+ "height": 8,
268
+ "radius": 0,
269
+ "style": {
270
+ "fill": "#59717a"
271
+ }
272
+ },
273
+ {
274
+ "id": "floor",
275
+ "kind": "path",
276
+ "d": [["M", 0, 340], ["L", 640, 340], ["L", 640, 480], ["L", 0, 480], ["Z"]],
277
+ "style": {
278
+ "fill": {
279
+ "gradient": "floor"
280
+ }
281
+ }
282
+ },
283
+ {
284
+ "id": "floorboards",
285
+ "kind": "repeat",
286
+ "count": 12,
287
+ "children": [
288
+ {
289
+ "id": "seam",
290
+ "kind": "path",
291
+ "d": [
292
+ ["M", ["mul", "$i", 58], 344],
293
+ ["L", ["add", -120, ["mul", "$i", 80]], 480]
294
+ ],
295
+ "style": {
296
+ "fill": "none",
297
+ "stroke": "#4f4241",
298
+ "strokeWidth": 2,
299
+ "linecap": "round",
300
+ "linejoin": "round"
301
+ }
302
+ }
303
+ ]
304
+ },
305
+ {
306
+ "id": "board-rows",
307
+ "kind": "path",
308
+ "d": [
309
+ ["M", 0, 372],
310
+ ["L", 640, 372],
311
+ ["M", 0, 418],
312
+ ["L", 640, 418]
313
+ ],
314
+ "style": {
315
+ "fill": "none",
316
+ "stroke": "#71534a",
317
+ "strokeWidth": 2,
318
+ "linecap": "round",
319
+ "linejoin": "round"
320
+ }
321
+ },
322
+ {
323
+ "id": "skirting",
324
+ "kind": "rect",
325
+ "x": 0,
326
+ "y": 330,
327
+ "width": 640,
328
+ "height": 15,
329
+ "radius": 0,
330
+ "style": {
331
+ "fill": "#223943"
332
+ }
333
+ },
334
+ {
335
+ "id": "skirting-light",
336
+ "kind": "rect",
337
+ "x": 0,
338
+ "y": 330,
339
+ "width": 640,
340
+ "height": 3,
341
+ "radius": 0,
342
+ "style": {
343
+ "fill": "#7e9a96"
344
+ }
345
+ },
346
+ {
347
+ "id": "window-surround",
348
+ "kind": "rect",
349
+ "x": 51,
350
+ "y": 54,
351
+ "width": 187,
352
+ "height": 239,
353
+ "radius": 83,
354
+ "style": {
355
+ "fill": "#b18b67"
356
+ }
357
+ },
358
+ {
359
+ "id": "window-inset",
360
+ "kind": "rect",
361
+ "x": 58,
362
+ "y": 61,
363
+ "width": 173,
364
+ "height": 225,
365
+ "radius": 77,
366
+ "style": {
367
+ "fill": "#1d3443"
368
+ }
369
+ },
370
+ {
371
+ "id": "window",
372
+ "kind": "group",
373
+ "children": [
374
+ {
375
+ "id": "sky",
376
+ "kind": "rect",
377
+ "x": 62,
378
+ "y": 67,
379
+ "width": 165,
380
+ "height": 209,
381
+ "radius": 0,
382
+ "style": {
383
+ "fill": {
384
+ "gradient": "night"
385
+ }
386
+ }
387
+ },
388
+ {
389
+ "id": "moon-halo",
390
+ "kind": "ellipse",
391
+ "cx": 180,
392
+ "cy": 119,
393
+ "rx": 31,
394
+ "ry": 31,
395
+ "style": {
396
+ "fill": "#96bac1"
397
+ },
398
+ "opacity": 0.15
399
+ },
400
+ {
401
+ "id": "moon",
402
+ "kind": "ellipse",
403
+ "cx": 180,
404
+ "cy": 119,
405
+ "rx": 21,
406
+ "ry": 21,
407
+ "style": {
408
+ "fill": "#e5dcb8"
409
+ }
410
+ },
411
+ {
412
+ "id": "hills",
413
+ "kind": "path",
414
+ "d": [
415
+ ["M", 60, 248],
416
+ ["Q", 105, 189, 157, 241],
417
+ ["Q", 190, 193, 234, 225],
418
+ ["L", 240, 283],
419
+ ["L", 60, 283],
420
+ ["Z"]
421
+ ],
422
+ "style": {
423
+ "fill": "#274c62"
424
+ }
425
+ },
426
+ {
427
+ "id": "stars",
428
+ "kind": "repeat",
429
+ "count": 16,
430
+ "children": [
431
+ {
432
+ "id": "star",
433
+ "kind": "ellipse",
434
+ "cx": ["rand", 0, 65, 225],
435
+ "cy": ["rand", 1, 80, 223],
436
+ "rx": 1.2,
437
+ "ry": 1.2,
438
+ "style": {
439
+ "fill": "#d9dbbb"
440
+ },
441
+ "opacity": ["rand", 2, 0.25, 0.8]
442
+ }
443
+ ]
444
+ },
445
+ {
446
+ "id": "mullion",
447
+ "kind": "rect",
448
+ "x": 140,
449
+ "y": 64,
450
+ "width": 7,
451
+ "height": 214,
452
+ "radius": 0,
453
+ "style": {
454
+ "fill": "#b18b67"
455
+ }
456
+ },
457
+ {
458
+ "id": "crossbar",
459
+ "kind": "rect",
460
+ "x": 60,
461
+ "y": 181,
462
+ "width": 169,
463
+ "height": 6,
464
+ "radius": 0,
465
+ "style": {
466
+ "fill": "#b18b67"
467
+ }
468
+ }
469
+ ],
470
+ "clip": "window"
471
+ },
472
+ {
473
+ "id": "sill",
474
+ "kind": "rect",
475
+ "x": 42,
476
+ "y": 281,
477
+ "width": 207,
478
+ "height": 11,
479
+ "radius": 3,
480
+ "style": {
481
+ "fill": "@trim"
482
+ }
483
+ },
484
+ {
485
+ "id": "sill-shadow",
486
+ "kind": "rect",
487
+ "x": 49,
488
+ "y": 292,
489
+ "width": 193,
490
+ "height": 7,
491
+ "radius": 2,
492
+ "style": {
493
+ "fill": "#1b333e"
494
+ }
495
+ },
496
+ {
497
+ "id": "shelf",
498
+ "kind": "group",
499
+ "children": [
500
+ {
501
+ "id": "shelf-shadow",
502
+ "kind": "rect",
503
+ "x": 315,
504
+ "y": 117,
505
+ "width": 268,
506
+ "height": 12,
507
+ "radius": 0,
508
+ "style": {
509
+ "fill": "#18313f"
510
+ }
511
+ },
512
+ {
513
+ "id": "plank",
514
+ "kind": "rect",
515
+ "x": 305,
516
+ "y": 111,
517
+ "width": 280,
518
+ "height": 11,
519
+ "radius": 3,
520
+ "style": {
521
+ "fill": "@wood"
522
+ }
523
+ },
524
+ {
525
+ "id": "front",
526
+ "kind": "rect",
527
+ "x": 305,
528
+ "y": 110,
529
+ "width": 280,
530
+ "height": 4,
531
+ "radius": 0,
532
+ "style": {
533
+ "fill": "@trim"
534
+ }
535
+ },
536
+ {
537
+ "id": "books",
538
+ "kind": "repeat",
539
+ "count": 7,
540
+ "children": [
541
+ {
542
+ "id": "book",
543
+ "kind": "use",
544
+ "symbol": "book",
545
+ "args": {
546
+ "height": ["rand", 0, 32, 62]
547
+ },
548
+ "transform": {
549
+ "translate": [["add", 317, ["mul", "$i", 20]], 110],
550
+ "rotate": ["rand", 1, -3, 3]
551
+ }
552
+ }
553
+ ]
554
+ },
555
+ {
556
+ "id": "bottle-base",
557
+ "kind": "ellipse",
558
+ "cx": 512,
559
+ "cy": 101,
560
+ "rx": 17,
561
+ "ry": 7,
562
+ "style": {
563
+ "fill": "#72b2ae"
564
+ }
565
+ },
566
+ {
567
+ "id": "bottle-body",
568
+ "kind": "rect",
569
+ "x": 495,
570
+ "y": 75,
571
+ "width": 34,
572
+ "height": 26,
573
+ "radius": 8,
574
+ "style": {
575
+ "fill": "#72b2ae"
576
+ }
577
+ },
578
+ {
579
+ "id": "neck",
580
+ "kind": "rect",
581
+ "x": 505,
582
+ "y": 57,
583
+ "width": 14,
584
+ "height": 24,
585
+ "radius": 4,
586
+ "style": {
587
+ "fill": "#72b2ae"
588
+ }
589
+ },
590
+ {
591
+ "id": "stopper",
592
+ "kind": "rect",
593
+ "x": 503,
594
+ "y": 53,
595
+ "width": 18,
596
+ "height": 8,
597
+ "radius": 2,
598
+ "style": {
599
+ "fill": "@wood"
600
+ }
601
+ },
602
+ {
603
+ "id": "bottle-shine",
604
+ "kind": "path",
605
+ "d": [
606
+ ["M", 501, 82],
607
+ ["L", 501, 97]
608
+ ],
609
+ "style": {
610
+ "fill": "none",
611
+ "stroke": "#c1e2cb",
612
+ "strokeWidth": 3,
613
+ "linecap": "round",
614
+ "linejoin": "round"
615
+ }
616
+ },
617
+ {
618
+ "id": "box",
619
+ "kind": "rect",
620
+ "x": 545,
621
+ "y": 81,
622
+ "width": 31,
623
+ "height": 29,
624
+ "radius": 2,
625
+ "style": {
626
+ "fill": "#a37659"
627
+ }
628
+ },
629
+ {
630
+ "id": "box-label",
631
+ "kind": "rect",
632
+ "x": 553,
633
+ "y": 89,
634
+ "width": 15,
635
+ "height": 11,
636
+ "radius": 1,
637
+ "style": {
638
+ "fill": "#e1c698"
639
+ }
640
+ },
641
+ {
642
+ "id": "brackets",
643
+ "kind": "path",
644
+ "d": [
645
+ ["M", 321, 124],
646
+ ["L", 321, 146],
647
+ ["L", 346, 124],
648
+ ["M", 548, 124],
649
+ ["L", 573, 147],
650
+ ["L", 573, 124]
651
+ ],
652
+ "style": {
653
+ "fill": "none",
654
+ "stroke": "@trim",
655
+ "strokeWidth": 4,
656
+ "linecap": "round",
657
+ "linejoin": "round"
658
+ }
659
+ }
660
+ ]
661
+ },
662
+ {
663
+ "id": "lamp",
664
+ "kind": "group",
665
+ "children": [
666
+ {
667
+ "id": "cord",
668
+ "kind": "path",
669
+ "d": [
670
+ ["M", 456, 24],
671
+ ["L", 456, 173]
672
+ ],
673
+ "style": {
674
+ "fill": "none",
675
+ "stroke": "#172e3c",
676
+ "strokeWidth": 4,
677
+ "linecap": "round",
678
+ "linejoin": "round"
679
+ }
680
+ },
681
+ {
682
+ "id": "light-field",
683
+ "kind": "ellipse",
684
+ "cx": 456,
685
+ "cy": 219,
686
+ "rx": 100,
687
+ "ry": 100,
688
+ "style": {
689
+ "fill": {
690
+ "gradient": "lamp"
691
+ }
692
+ },
693
+ "opacity": "$glow"
694
+ },
695
+ {
696
+ "id": "bulb",
697
+ "kind": "ellipse",
698
+ "cx": 456,
699
+ "cy": 215,
700
+ "rx": 10,
701
+ "ry": 14,
702
+ "style": {
703
+ "fill": "#ffe9ac"
704
+ }
705
+ },
706
+ {
707
+ "id": "shade",
708
+ "kind": "path",
709
+ "d": [["M", 430, 171], ["L", 482, 171], ["L", 503, 212], ["Q", 456, 224, 409, 212], ["Z"]],
710
+ "style": {
711
+ "fill": "#d7aa64",
712
+ "stroke": "@ink",
713
+ "strokeWidth": 3,
714
+ "linecap": "round",
715
+ "linejoin": "round"
716
+ }
717
+ },
718
+ {
719
+ "id": "shade-bottom",
720
+ "kind": "ellipse",
721
+ "cx": 456,
722
+ "cy": 212,
723
+ "rx": 46,
724
+ "ry": 7,
725
+ "style": {
726
+ "fill": "#f1cc84"
727
+ }
728
+ },
729
+ {
730
+ "id": "shade-top",
731
+ "kind": "rect",
732
+ "x": 429,
733
+ "y": 167,
734
+ "width": 54,
735
+ "height": 8,
736
+ "radius": 3,
737
+ "style": {
738
+ "fill": "#8a694b"
739
+ }
740
+ }
741
+ ],
742
+ "transform": {
743
+ "pivot": [456, 24],
744
+ "rotate": "$sway"
745
+ }
746
+ },
747
+ {
748
+ "id": "rug-shadow",
749
+ "kind": "ellipse",
750
+ "cx": 345,
751
+ "cy": 428,
752
+ "rx": 202,
753
+ "ry": 30,
754
+ "style": {
755
+ "fill": "#342d36"
756
+ },
757
+ "opacity": 0.2
758
+ },
759
+ {
760
+ "id": "rug",
761
+ "kind": "ellipse",
762
+ "cx": 345,
763
+ "cy": 421,
764
+ "rx": 185,
765
+ "ry": 29,
766
+ "style": {
767
+ "fill": "#85635d"
768
+ }
769
+ },
770
+ {
771
+ "id": "rug-border",
772
+ "kind": "ellipse",
773
+ "cx": 345,
774
+ "cy": 421,
775
+ "rx": 173,
776
+ "ry": 23,
777
+ "style": {
778
+ "fill": "#bf8a68"
779
+ }
780
+ },
781
+ {
782
+ "id": "rug-inner",
783
+ "kind": "ellipse",
784
+ "cx": 345,
785
+ "cy": 421,
786
+ "rx": 164,
787
+ "ry": 18,
788
+ "style": {
789
+ "fill": "#527d7b"
790
+ }
791
+ },
792
+ {
793
+ "id": "desk",
794
+ "kind": "group",
795
+ "children": [
796
+ {
797
+ "id": "left-leg",
798
+ "kind": "rect",
799
+ "x": 295,
800
+ "y": 315,
801
+ "width": 17,
802
+ "height": 98,
803
+ "radius": 4,
804
+ "style": {
805
+ "fill": "@wood"
806
+ }
807
+ },
808
+ {
809
+ "id": "right-leg",
810
+ "kind": "rect",
811
+ "x": 548,
812
+ "y": 315,
813
+ "width": 17,
814
+ "height": 98,
815
+ "radius": 4,
816
+ "style": {
817
+ "fill": "@wood"
818
+ }
819
+ },
820
+ {
821
+ "id": "brace",
822
+ "kind": "rect",
823
+ "x": 305,
824
+ "y": 383,
825
+ "width": 250,
826
+ "height": 9,
827
+ "radius": 2,
828
+ "style": {
829
+ "fill": "#543d3b"
830
+ }
831
+ },
832
+ {
833
+ "id": "apron",
834
+ "kind": "rect",
835
+ "x": 282,
836
+ "y": 308,
837
+ "width": 292,
838
+ "height": 38,
839
+ "radius": 4,
840
+ "style": {
841
+ "fill": "#765347"
842
+ }
843
+ },
844
+ {
845
+ "id": "drawer",
846
+ "kind": "rect",
847
+ "x": 385,
848
+ "y": 316,
849
+ "width": 84,
850
+ "height": 22,
851
+ "radius": 3,
852
+ "style": {
853
+ "fill": "#a17155"
854
+ }
855
+ },
856
+ {
857
+ "id": "knob",
858
+ "kind": "ellipse",
859
+ "cx": 427,
860
+ "cy": 327,
861
+ "rx": 4,
862
+ "ry": 4,
863
+ "style": {
864
+ "fill": "@gold"
865
+ }
866
+ },
867
+ {
868
+ "id": "top-shadow",
869
+ "kind": "rect",
870
+ "x": 273,
871
+ "y": 308,
872
+ "width": 312,
873
+ "height": 8,
874
+ "radius": 2,
875
+ "style": {
876
+ "fill": "#3a3437"
877
+ }
878
+ },
879
+ {
880
+ "id": "tabletop",
881
+ "kind": "rect",
882
+ "x": 270,
883
+ "y": 297,
884
+ "width": 318,
885
+ "height": 15,
886
+ "radius": 4,
887
+ "style": {
888
+ "fill": "#bd8b63"
889
+ }
890
+ },
891
+ {
892
+ "id": "edge",
893
+ "kind": "rect",
894
+ "x": 272,
895
+ "y": 298,
896
+ "width": 314,
897
+ "height": 3,
898
+ "radius": 2,
899
+ "style": {
900
+ "fill": "#e1b47d"
901
+ }
902
+ },
903
+ {
904
+ "id": "paper",
905
+ "kind": "path",
906
+ "d": [["M", 327, 278], ["L", 421, 284], ["L", 414, 299], ["L", 317, 295], ["Z"]],
907
+ "style": {
908
+ "fill": "#dccba2"
909
+ }
910
+ },
911
+ {
912
+ "id": "drawing",
913
+ "kind": "path",
914
+ "d": [["M", 342, 287], ["L", 369, 282], ["L", 396, 291], ["L", 365, 295], ["Z"]],
915
+ "style": {
916
+ "fill": "none",
917
+ "stroke": "#8a9b91",
918
+ "strokeWidth": 1.5,
919
+ "linecap": "round",
920
+ "linejoin": "round"
921
+ }
922
+ },
923
+ {
924
+ "id": "inkwell",
925
+ "kind": "rect",
926
+ "x": 446,
927
+ "y": 275,
928
+ "width": 22,
929
+ "height": 22,
930
+ "radius": 5,
931
+ "style": {
932
+ "fill": "#27434e"
933
+ }
934
+ },
935
+ {
936
+ "id": "rim",
937
+ "kind": "rect",
938
+ "x": 446,
939
+ "y": 272,
940
+ "width": 22,
941
+ "height": 5,
942
+ "radius": 2,
943
+ "style": {
944
+ "fill": "#91a89b"
945
+ }
946
+ },
947
+ {
948
+ "id": "quill",
949
+ "kind": "path",
950
+ "d": [["M", 459, 280], ["Q", 461, 244, 487, 230], ["Q", 491, 254, 459, 280], ["Z"]],
951
+ "style": {
952
+ "fill": "#e2cb9a"
953
+ }
954
+ },
955
+ {
956
+ "id": "shaft",
957
+ "kind": "path",
958
+ "d": [
959
+ ["M", 456, 286],
960
+ ["L", 481, 242]
961
+ ],
962
+ "style": {
963
+ "fill": "none",
964
+ "stroke": "#7b8370",
965
+ "strokeWidth": 1.5,
966
+ "linecap": "round",
967
+ "linejoin": "round"
968
+ }
969
+ },
970
+ {
971
+ "id": "mug",
972
+ "kind": "rect",
973
+ "x": 501,
974
+ "y": 270,
975
+ "width": 28,
976
+ "height": 27,
977
+ "radius": 5,
978
+ "style": {
979
+ "fill": "#b77452"
980
+ }
981
+ },
982
+ {
983
+ "id": "tea",
984
+ "kind": "ellipse",
985
+ "cx": 515,
986
+ "cy": 271,
987
+ "rx": 12,
988
+ "ry": 4,
989
+ "style": {
990
+ "fill": "#523e39"
991
+ }
992
+ },
993
+ {
994
+ "id": "handle",
995
+ "kind": "path",
996
+ "d": [
997
+ ["M", 529, 276],
998
+ ["C", 546, 270, 546, 293, 529, 290]
999
+ ],
1000
+ "style": {
1001
+ "fill": "none",
1002
+ "stroke": "#b77452",
1003
+ "strokeWidth": 5,
1004
+ "linecap": "round",
1005
+ "linejoin": "round"
1006
+ }
1007
+ },
1008
+ {
1009
+ "id": "steam",
1010
+ "kind": "emitter",
1011
+ "count": 5,
1012
+ "lifetime": 4,
1013
+ "mode": "loop",
1014
+ "velocity": [["rand", 0, -3, 3], -12],
1015
+ "children": [
1016
+ {
1017
+ "id": "wisp",
1018
+ "kind": "path",
1019
+ "d": [
1020
+ ["M", 0, 0],
1021
+ ["C", -8, -7, 8, -10, 0, -18]
1022
+ ],
1023
+ "style": {
1024
+ "fill": "none",
1025
+ "stroke": "#e8ddc4",
1026
+ "strokeWidth": 2,
1027
+ "linecap": "round",
1028
+ "linejoin": "round"
1029
+ },
1030
+ "opacity": ["mul", 0.35, ["sin", ["mul", 3.141592653589793, "$age"]]],
1031
+ "transform": {
1032
+ "scale": [["add", 0.6, "$age"], 1]
1033
+ }
1034
+ }
1035
+ ],
1036
+ "transform": {
1037
+ "translate": [515, 268]
1038
+ }
1039
+ }
1040
+ ]
1041
+ },
1042
+ {
1043
+ "id": "plant",
1044
+ "kind": "group",
1045
+ "children": [
1046
+ {
1047
+ "id": "pot",
1048
+ "kind": "rect",
1049
+ "x": 80,
1050
+ "y": 345,
1051
+ "width": 64,
1052
+ "height": 55,
1053
+ "radius": 12,
1054
+ "style": {
1055
+ "fill": "#b87958"
1056
+ }
1057
+ },
1058
+ {
1059
+ "id": "pot-rim",
1060
+ "kind": "rect",
1061
+ "x": 75,
1062
+ "y": 341,
1063
+ "width": 74,
1064
+ "height": 15,
1065
+ "radius": 4,
1066
+ "style": {
1067
+ "fill": "#d6a173"
1068
+ }
1069
+ },
1070
+ {
1071
+ "id": "stem",
1072
+ "kind": "path",
1073
+ "d": [
1074
+ ["M", 111, 342],
1075
+ ["Q", 110, 298, 94, 278],
1076
+ ["M", 111, 329],
1077
+ ["Q", 131, 303, 144, 298],
1078
+ ["M", 107, 311],
1079
+ ["Q", 83, 301, 74, 312]
1080
+ ],
1081
+ "style": {
1082
+ "fill": "none",
1083
+ "stroke": "#91b494",
1084
+ "strokeWidth": 4,
1085
+ "linecap": "round",
1086
+ "linejoin": "round"
1087
+ }
1088
+ },
1089
+ {
1090
+ "id": "leaf-a",
1091
+ "kind": "path",
1092
+ "d": [["M", 94, 285], ["Q", 64, 278, 74, 256], ["Q", 99, 256, 94, 285], ["Z"]],
1093
+ "style": {
1094
+ "fill": "#6eaa91"
1095
+ }
1096
+ },
1097
+ {
1098
+ "id": "leaf-b",
1099
+ "kind": "path",
1100
+ "d": [["M", 124, 319], ["Q", 122, 285, 151, 287], ["Q", 159, 311, 124, 319], ["Z"]],
1101
+ "style": {
1102
+ "fill": "#82b396"
1103
+ }
1104
+ },
1105
+ {
1106
+ "id": "leaf-c",
1107
+ "kind": "path",
1108
+ "d": [["M", 87, 309], ["Q", 63, 283, 55, 314], ["Q", 74, 325, 87, 309], ["Z"]],
1109
+ "style": {
1110
+ "fill": "#427c77"
1111
+ }
1112
+ }
1113
+ ],
1114
+ "transform": {
1115
+ "pivot": [111, 350],
1116
+ "rotate": ["mul", 0.5, "$sway"]
1117
+ }
1118
+ }
1119
+ ]
1120
+ }