@dopaminefx/effect-comic 0.1.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.
- package/dist/comic-fonts.d.ts +18 -0
- package/dist/comic-fonts.d.ts.map +1 -0
- package/dist/comic-fonts.js +16 -0
- package/dist/comic-fonts.js.map +1 -0
- package/dist/comic-params.d.ts +77 -0
- package/dist/comic-params.d.ts.map +1 -0
- package/dist/comic-params.js +31 -0
- package/dist/comic-params.js.map +1 -0
- package/dist/comic-renderer.d.ts +32 -0
- package/dist/comic-renderer.d.ts.map +1 -0
- package/dist/comic-renderer.js +299 -0
- package/dist/comic-renderer.js.map +1 -0
- package/dist/comic-shader.d.ts +30 -0
- package/dist/comic-shader.d.ts.map +1 -0
- package/dist/comic-shader.js +238 -0
- package/dist/comic-shader.js.map +1 -0
- package/dist/comic-tempo.d.ts +24 -0
- package/dist/comic-tempo.d.ts.map +1 -0
- package/dist/comic-tempo.js +45 -0
- package/dist/comic-tempo.js.map +1 -0
- package/dist/comic.dope.json +842 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
- package/src/comic-fonts.ts +23 -0
- package/src/comic-params.ts +95 -0
- package/src/comic-renderer.ts +336 -0
- package/src/comic-shader.ts +247 -0
- package/src/comic-tempo.ts +46 -0
- package/src/comic.dope.json +842 -0
- package/src/index.ts +80 -0
|
@@ -0,0 +1,842 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fmt": "dopamine-effect",
|
|
3
|
+
"v": "1.0.0",
|
|
4
|
+
"id": "dopamine.success.comic",
|
|
5
|
+
"meta": {
|
|
6
|
+
"name": "Comic Impact",
|
|
7
|
+
"description": "A Golden/Silver-Age comic-book success shout: a hand-lettered affirmation slams in over a jagged starburst with halftone + action lines.",
|
|
8
|
+
"tags": [
|
|
9
|
+
"success",
|
|
10
|
+
"comic",
|
|
11
|
+
"impact"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"controls": {
|
|
15
|
+
"mood": {
|
|
16
|
+
"type": "enum",
|
|
17
|
+
"label": "Mood",
|
|
18
|
+
"default": "celebratory",
|
|
19
|
+
"options": [
|
|
20
|
+
"serene",
|
|
21
|
+
"celebratory",
|
|
22
|
+
"electric"
|
|
23
|
+
],
|
|
24
|
+
"ui": "segmented"
|
|
25
|
+
},
|
|
26
|
+
"intensity": {
|
|
27
|
+
"type": "scalar",
|
|
28
|
+
"label": "Intensity",
|
|
29
|
+
"default": 0.7,
|
|
30
|
+
"min": 0,
|
|
31
|
+
"max": 1,
|
|
32
|
+
"step": 0.01,
|
|
33
|
+
"ui": "slider",
|
|
34
|
+
"help": "Slam force, word size, spike + line count, saturation."
|
|
35
|
+
},
|
|
36
|
+
"whimsy": {
|
|
37
|
+
"type": "scalar",
|
|
38
|
+
"label": "Whimsy",
|
|
39
|
+
"default": 0.5,
|
|
40
|
+
"min": 0,
|
|
41
|
+
"max": 1,
|
|
42
|
+
"step": 0.01,
|
|
43
|
+
"ui": "slider",
|
|
44
|
+
"help": "Noir chiaroscuro (0) to full pop-art Ben-Day (1)."
|
|
45
|
+
},
|
|
46
|
+
"seed": {
|
|
47
|
+
"type": "int",
|
|
48
|
+
"label": "Seed",
|
|
49
|
+
"default": null,
|
|
50
|
+
"nullable": true,
|
|
51
|
+
"help": "Null = unique palette + word per fire; pin to reproduce."
|
|
52
|
+
},
|
|
53
|
+
"target": {
|
|
54
|
+
"type": "selector",
|
|
55
|
+
"label": "Target",
|
|
56
|
+
"default": "document.body"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"baselines": {
|
|
60
|
+
"serene": {
|
|
61
|
+
"durationMs": 2400,
|
|
62
|
+
"lightness": 0.82,
|
|
63
|
+
"chroma": 0.1,
|
|
64
|
+
"hueCenter": 230,
|
|
65
|
+
"hueRange": 120,
|
|
66
|
+
"scale": 0.34,
|
|
67
|
+
"burstPoints": 14,
|
|
68
|
+
"actionLines": 18,
|
|
69
|
+
"overshoot": 0.55
|
|
70
|
+
},
|
|
71
|
+
"celebratory": {
|
|
72
|
+
"durationMs": 1900,
|
|
73
|
+
"lightness": 0.82,
|
|
74
|
+
"chroma": 0.18,
|
|
75
|
+
"hueCenter": 50,
|
|
76
|
+
"hueRange": 320,
|
|
77
|
+
"scale": 0.4,
|
|
78
|
+
"burstPoints": 20,
|
|
79
|
+
"actionLines": 30,
|
|
80
|
+
"overshoot": 1
|
|
81
|
+
},
|
|
82
|
+
"electric": {
|
|
83
|
+
"durationMs": 1500,
|
|
84
|
+
"lightness": 0.8,
|
|
85
|
+
"chroma": 0.24,
|
|
86
|
+
"hueCenter": 35,
|
|
87
|
+
"hueRange": 150,
|
|
88
|
+
"scale": 0.46,
|
|
89
|
+
"burstPoints": 28,
|
|
90
|
+
"actionLines": 44,
|
|
91
|
+
"overshoot": 1.45
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"palette": {
|
|
95
|
+
"model": "oklch",
|
|
96
|
+
"space": "linear-srgb",
|
|
97
|
+
"generator": "golden-angle",
|
|
98
|
+
"goldenAngleDeg": 137.50776405003785,
|
|
99
|
+
"stops": 3,
|
|
100
|
+
"hueSpread": 0.55,
|
|
101
|
+
"lightness": {
|
|
102
|
+
"baseline": "lightness",
|
|
103
|
+
"perStop": [
|
|
104
|
+
0,
|
|
105
|
+
0.06,
|
|
106
|
+
-0.05
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"chroma": {
|
|
110
|
+
"from": {
|
|
111
|
+
"mul": [
|
|
112
|
+
{
|
|
113
|
+
"baseline": "chroma"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"lerp": [
|
|
117
|
+
"intensity",
|
|
118
|
+
0.7,
|
|
119
|
+
1.5
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
"perStop": [
|
|
125
|
+
0,
|
|
126
|
+
0.02,
|
|
127
|
+
-0.01
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"seed": {
|
|
131
|
+
"deterministic": true,
|
|
132
|
+
"source": "controls.seed",
|
|
133
|
+
"prng": "mulberry32"
|
|
134
|
+
},
|
|
135
|
+
"perMood": {
|
|
136
|
+
"serene": {
|
|
137
|
+
"hueCenter": 230,
|
|
138
|
+
"hueRange": 120,
|
|
139
|
+
"lightness": 0.82,
|
|
140
|
+
"chroma": 0.1
|
|
141
|
+
},
|
|
142
|
+
"celebratory": {
|
|
143
|
+
"hueCenter": 50,
|
|
144
|
+
"hueRange": 320,
|
|
145
|
+
"lightness": 0.82,
|
|
146
|
+
"chroma": 0.18
|
|
147
|
+
},
|
|
148
|
+
"electric": {
|
|
149
|
+
"hueCenter": 35,
|
|
150
|
+
"hueRange": 150,
|
|
151
|
+
"lightness": 0.8,
|
|
152
|
+
"chroma": 0.24
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"tempo": {
|
|
157
|
+
"durationMs": {
|
|
158
|
+
"from": {
|
|
159
|
+
"round": {
|
|
160
|
+
"mul": [
|
|
161
|
+
{
|
|
162
|
+
"baseline": "durationMs"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"lerp": [
|
|
166
|
+
"intensity",
|
|
167
|
+
1.1,
|
|
168
|
+
0.9
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"frame": {
|
|
176
|
+
"amp": {
|
|
177
|
+
"lt": [
|
|
178
|
+
{
|
|
179
|
+
"clamp01": {
|
|
180
|
+
"input": "life"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
0.04,
|
|
184
|
+
{
|
|
185
|
+
"easeOutCubic": {
|
|
186
|
+
"div": [
|
|
187
|
+
{
|
|
188
|
+
"clamp01": {
|
|
189
|
+
"input": "life"
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
0.04
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"lt": [
|
|
198
|
+
{
|
|
199
|
+
"clamp01": {
|
|
200
|
+
"input": "life"
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
0.82,
|
|
204
|
+
1,
|
|
205
|
+
{
|
|
206
|
+
"pow": [
|
|
207
|
+
{
|
|
208
|
+
"clamp01": {
|
|
209
|
+
"sub": [
|
|
210
|
+
1,
|
|
211
|
+
{
|
|
212
|
+
"div": [
|
|
213
|
+
{
|
|
214
|
+
"sub": [
|
|
215
|
+
{
|
|
216
|
+
"clamp01": {
|
|
217
|
+
"input": "life"
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
0.82
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
0.18
|
|
224
|
+
]
|
|
225
|
+
}
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
1.4
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
"extras": {
|
|
237
|
+
"presence": {
|
|
238
|
+
"lt": [
|
|
239
|
+
{
|
|
240
|
+
"clamp01": {
|
|
241
|
+
"input": "life"
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
0.04,
|
|
245
|
+
{
|
|
246
|
+
"easeOutCubic": {
|
|
247
|
+
"div": [
|
|
248
|
+
{
|
|
249
|
+
"clamp01": {
|
|
250
|
+
"input": "life"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
0.04
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"lt": [
|
|
259
|
+
{
|
|
260
|
+
"clamp01": {
|
|
261
|
+
"input": "life"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
0.82,
|
|
265
|
+
1,
|
|
266
|
+
{
|
|
267
|
+
"pow": [
|
|
268
|
+
{
|
|
269
|
+
"clamp01": {
|
|
270
|
+
"sub": [
|
|
271
|
+
1,
|
|
272
|
+
{
|
|
273
|
+
"div": [
|
|
274
|
+
{
|
|
275
|
+
"sub": [
|
|
276
|
+
{
|
|
277
|
+
"clamp01": {
|
|
278
|
+
"input": "life"
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
0.82
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
0.18
|
|
285
|
+
]
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
1.4
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
]
|
|
296
|
+
},
|
|
297
|
+
"flash": {
|
|
298
|
+
"min": [
|
|
299
|
+
1.2,
|
|
300
|
+
{
|
|
301
|
+
"add": [
|
|
302
|
+
{
|
|
303
|
+
"exp": {
|
|
304
|
+
"sub": [
|
|
305
|
+
0,
|
|
306
|
+
{
|
|
307
|
+
"div": [
|
|
308
|
+
{
|
|
309
|
+
"input": "elapsedMs"
|
|
310
|
+
},
|
|
311
|
+
110
|
|
312
|
+
]
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"mul": [
|
|
319
|
+
0.25,
|
|
320
|
+
{
|
|
321
|
+
"exp": {
|
|
322
|
+
"sub": [
|
|
323
|
+
0,
|
|
324
|
+
{
|
|
325
|
+
"div": [
|
|
326
|
+
{
|
|
327
|
+
"max": [
|
|
328
|
+
{
|
|
329
|
+
"sub": [
|
|
330
|
+
{
|
|
331
|
+
"input": "elapsedMs"
|
|
332
|
+
},
|
|
333
|
+
130
|
|
334
|
+
]
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"sub": [
|
|
338
|
+
130,
|
|
339
|
+
{
|
|
340
|
+
"input": "elapsedMs"
|
|
341
|
+
}
|
|
342
|
+
]
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
},
|
|
346
|
+
160
|
|
347
|
+
]
|
|
348
|
+
}
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
]
|
|
353
|
+
}
|
|
354
|
+
]
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"reducedMotion": {
|
|
361
|
+
"peakMs": 220,
|
|
362
|
+
"holdMs": 360
|
|
363
|
+
},
|
|
364
|
+
"note": "Datafied per-frame logic (the web/Swift/Kotlin comic factory frame() hook, delta-0). amp = impactPresence(life): a snap-in over the first 4% of life, a proud hold to 82%, then a pow(.,1.4) clean fade. presence mirrors amp (panel opacity / shadow geometry). flash is the impact light spike: a fast exp decay off the slam (IMPACT_MS·0.55 = 110ms) plus a small secondary bump around the hold (IMPACT_HOLD_MS·0.2 = 130ms, width IMPACT_MS·0.8 = 160ms), clamped to 1.2. The per-letter SLAM SCALE (impactScale) + per-letter layout stay in the panel-draw seam (code by design)."
|
|
365
|
+
},
|
|
366
|
+
"geometry": {
|
|
367
|
+
"kind": "radial",
|
|
368
|
+
"viewBox": [
|
|
369
|
+
0,
|
|
370
|
+
0,
|
|
371
|
+
100,
|
|
372
|
+
100
|
|
373
|
+
],
|
|
374
|
+
"outlines": {
|
|
375
|
+
"starburst": {
|
|
376
|
+
"role": "burst",
|
|
377
|
+
"note": "Procedural jagged star drawn in the panel from burstPoints + comicSeed."
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
"content": {
|
|
382
|
+
"note": "The per-fire SLAMMED token, picked by seed from this pool (words + the checkmark sentinel, equal odds). Reskin = edit this list, no code.",
|
|
383
|
+
"words": [
|
|
384
|
+
"YES!",
|
|
385
|
+
"DONE!",
|
|
386
|
+
"NICE!",
|
|
387
|
+
"OKAY!",
|
|
388
|
+
"WIN!",
|
|
389
|
+
"GREAT!",
|
|
390
|
+
"WOO!"
|
|
391
|
+
],
|
|
392
|
+
"checkToken": "✓",
|
|
393
|
+
"pool": [
|
|
394
|
+
"YES!",
|
|
395
|
+
"DONE!",
|
|
396
|
+
"NICE!",
|
|
397
|
+
"OKAY!",
|
|
398
|
+
"WIN!",
|
|
399
|
+
"GREAT!",
|
|
400
|
+
"WOO!",
|
|
401
|
+
"✓"
|
|
402
|
+
]
|
|
403
|
+
},
|
|
404
|
+
"typography": {
|
|
405
|
+
"note": "Mood selects the primary bundled display face; whimsy/intensity drive the lettering treatment (noir restrained caps to pop-art balloon). All curves are data; reskinning the font/feel is no-code. Reproduces engine/mood.ts comicTypography byte-for-byte (parity-tested).",
|
|
406
|
+
"fallbackStack": "\"Arial Black\", \"Haettenschweiler\", Impact, system-ui, sans-serif",
|
|
407
|
+
"perMood": {
|
|
408
|
+
"serene": {
|
|
409
|
+
"face": "\"Luckiest Guy\"",
|
|
410
|
+
"skew": 0,
|
|
411
|
+
"tilt": -0.015,
|
|
412
|
+
"stretchX": 1,
|
|
413
|
+
"tracking": 0.04,
|
|
414
|
+
"roundness": 1
|
|
415
|
+
},
|
|
416
|
+
"celebratory": {
|
|
417
|
+
"face": "\"Bangers\"",
|
|
418
|
+
"skew": -0.06,
|
|
419
|
+
"tilt": -0.05,
|
|
420
|
+
"stretchX": 1,
|
|
421
|
+
"tracking": 0,
|
|
422
|
+
"roundness": 0.55
|
|
423
|
+
},
|
|
424
|
+
"electric": {
|
|
425
|
+
"face": "\"Anton\"",
|
|
426
|
+
"skew": -0.26,
|
|
427
|
+
"tilt": -0.1,
|
|
428
|
+
"stretchX": 0.82,
|
|
429
|
+
"tracking": -0.02,
|
|
430
|
+
"roundness": 0.1
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
"fields": {
|
|
434
|
+
"fontStretchX": {
|
|
435
|
+
"from": {
|
|
436
|
+
"mul": [
|
|
437
|
+
{
|
|
438
|
+
"baseline": "stretchX"
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"lerp": [
|
|
442
|
+
"whimsy",
|
|
443
|
+
1,
|
|
444
|
+
1.18
|
|
445
|
+
]
|
|
446
|
+
}
|
|
447
|
+
]
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
"fontSkew": {
|
|
451
|
+
"from": {
|
|
452
|
+
"mul": [
|
|
453
|
+
{
|
|
454
|
+
"baseline": "skew"
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"lerp": [
|
|
458
|
+
"whimsy",
|
|
459
|
+
1,
|
|
460
|
+
0.7
|
|
461
|
+
]
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"lerp": [
|
|
465
|
+
"intensity",
|
|
466
|
+
0.9,
|
|
467
|
+
1.1
|
|
468
|
+
]
|
|
469
|
+
}
|
|
470
|
+
]
|
|
471
|
+
}
|
|
472
|
+
},
|
|
473
|
+
"fontTilt": {
|
|
474
|
+
"from": {
|
|
475
|
+
"add": [
|
|
476
|
+
{
|
|
477
|
+
"baseline": "tilt"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"lerp": [
|
|
481
|
+
"whimsy",
|
|
482
|
+
0,
|
|
483
|
+
-0.04
|
|
484
|
+
]
|
|
485
|
+
}
|
|
486
|
+
]
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"fontTracking": {
|
|
490
|
+
"from": {
|
|
491
|
+
"add": [
|
|
492
|
+
{
|
|
493
|
+
"baseline": "tracking"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"lerp": [
|
|
497
|
+
"whimsy",
|
|
498
|
+
0,
|
|
499
|
+
0.02
|
|
500
|
+
]
|
|
501
|
+
}
|
|
502
|
+
]
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
"outlineLayers": {
|
|
506
|
+
"from": {
|
|
507
|
+
"max": [
|
|
508
|
+
1,
|
|
509
|
+
{
|
|
510
|
+
"round": {
|
|
511
|
+
"mul": [
|
|
512
|
+
{
|
|
513
|
+
"lerp": [
|
|
514
|
+
"whimsy",
|
|
515
|
+
1,
|
|
516
|
+
3
|
|
517
|
+
]
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"lerp": [
|
|
521
|
+
"intensity",
|
|
522
|
+
0.95,
|
|
523
|
+
1.05
|
|
524
|
+
]
|
|
525
|
+
}
|
|
526
|
+
]
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
]
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
"extrudeDepth": {
|
|
533
|
+
"from": {
|
|
534
|
+
"mul": [
|
|
535
|
+
{
|
|
536
|
+
"lerp": [
|
|
537
|
+
"whimsy",
|
|
538
|
+
0,
|
|
539
|
+
0.13
|
|
540
|
+
]
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"lerp": [
|
|
544
|
+
"intensity",
|
|
545
|
+
0.85,
|
|
546
|
+
1.15
|
|
547
|
+
]
|
|
548
|
+
}
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"letterRotJitter": {
|
|
553
|
+
"from": {
|
|
554
|
+
"lerp": [
|
|
555
|
+
"whimsy",
|
|
556
|
+
0,
|
|
557
|
+
0.16
|
|
558
|
+
]
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
"letterBaselineJitter": {
|
|
562
|
+
"from": {
|
|
563
|
+
"lerp": [
|
|
564
|
+
"whimsy",
|
|
565
|
+
0,
|
|
566
|
+
0.06
|
|
567
|
+
]
|
|
568
|
+
}
|
|
569
|
+
},
|
|
570
|
+
"inkRoundness": {
|
|
571
|
+
"clamp01": true,
|
|
572
|
+
"from": {
|
|
573
|
+
"mix": [
|
|
574
|
+
{
|
|
575
|
+
"mul": [
|
|
576
|
+
{
|
|
577
|
+
"baseline": "roundness"
|
|
578
|
+
},
|
|
579
|
+
0.6
|
|
580
|
+
]
|
|
581
|
+
},
|
|
582
|
+
1,
|
|
583
|
+
"whimsy"
|
|
584
|
+
]
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
"render": {
|
|
590
|
+
"params": {
|
|
591
|
+
"exposure": {
|
|
592
|
+
"type": "float",
|
|
593
|
+
"from": {
|
|
594
|
+
"lerp": [
|
|
595
|
+
"intensity",
|
|
596
|
+
0.85,
|
|
597
|
+
1.5
|
|
598
|
+
]
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
"overshoot": {
|
|
602
|
+
"type": "float",
|
|
603
|
+
"from": {
|
|
604
|
+
"mul": [
|
|
605
|
+
{
|
|
606
|
+
"baseline": "overshoot"
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
"lerp": [
|
|
610
|
+
"intensity",
|
|
611
|
+
0.7,
|
|
612
|
+
1.3
|
|
613
|
+
]
|
|
614
|
+
}
|
|
615
|
+
]
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
"scale": {
|
|
619
|
+
"type": "float",
|
|
620
|
+
"from": {
|
|
621
|
+
"mul": [
|
|
622
|
+
{
|
|
623
|
+
"baseline": "scale"
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"lerp": [
|
|
627
|
+
"intensity",
|
|
628
|
+
0.85,
|
|
629
|
+
1.12
|
|
630
|
+
]
|
|
631
|
+
}
|
|
632
|
+
]
|
|
633
|
+
}
|
|
634
|
+
},
|
|
635
|
+
"burstPoints": {
|
|
636
|
+
"type": "int",
|
|
637
|
+
"from": {
|
|
638
|
+
"round": {
|
|
639
|
+
"mul": [
|
|
640
|
+
{
|
|
641
|
+
"baseline": "burstPoints"
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"lerp": [
|
|
645
|
+
"intensity",
|
|
646
|
+
0.8,
|
|
647
|
+
1.2
|
|
648
|
+
]
|
|
649
|
+
}
|
|
650
|
+
]
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"actionLines": {
|
|
655
|
+
"type": "int",
|
|
656
|
+
"from": {
|
|
657
|
+
"round": {
|
|
658
|
+
"mul": [
|
|
659
|
+
{
|
|
660
|
+
"baseline": "actionLines"
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"lerp": [
|
|
664
|
+
"intensity",
|
|
665
|
+
0.7,
|
|
666
|
+
1.25
|
|
667
|
+
]
|
|
668
|
+
}
|
|
669
|
+
]
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
},
|
|
673
|
+
"halftone": {
|
|
674
|
+
"type": "float",
|
|
675
|
+
"clamp01": true,
|
|
676
|
+
"from": {
|
|
677
|
+
"lerp": [
|
|
678
|
+
"whimsy",
|
|
679
|
+
0.28,
|
|
680
|
+
1
|
|
681
|
+
]
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
"dotSize": {
|
|
685
|
+
"type": "float",
|
|
686
|
+
"from": {
|
|
687
|
+
"lerp": [
|
|
688
|
+
"whimsy",
|
|
689
|
+
5,
|
|
690
|
+
11
|
|
691
|
+
]
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
"saturation": {
|
|
695
|
+
"type": "float",
|
|
696
|
+
"clamp01": true,
|
|
697
|
+
"from": {
|
|
698
|
+
"mul": [
|
|
699
|
+
{
|
|
700
|
+
"lerp": [
|
|
701
|
+
"whimsy",
|
|
702
|
+
0.18,
|
|
703
|
+
1
|
|
704
|
+
]
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"lerp": [
|
|
708
|
+
"intensity",
|
|
709
|
+
0.8,
|
|
710
|
+
1.1
|
|
711
|
+
]
|
|
712
|
+
}
|
|
713
|
+
]
|
|
714
|
+
}
|
|
715
|
+
},
|
|
716
|
+
"inkWeight": {
|
|
717
|
+
"type": "float",
|
|
718
|
+
"from": {
|
|
719
|
+
"mul": [
|
|
720
|
+
{
|
|
721
|
+
"lerp": [
|
|
722
|
+
"whimsy",
|
|
723
|
+
5,
|
|
724
|
+
12
|
|
725
|
+
]
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"lerp": [
|
|
729
|
+
"intensity",
|
|
730
|
+
0.85,
|
|
731
|
+
1.1
|
|
732
|
+
]
|
|
733
|
+
}
|
|
734
|
+
]
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
"style": {
|
|
738
|
+
"type": "float",
|
|
739
|
+
"from": {
|
|
740
|
+
"control": "whimsy"
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
"shadowHeightFrac": 0.5,
|
|
745
|
+
"pass": {
|
|
746
|
+
"note": "Per-PASS uniforms: the Ben-Day cell is authored in CSS-ish px and scaled to device px on the host (uDotSize = dotSize * dpr); uInkBoost fattens the ink toward the pop end (1 + style * 0.4).",
|
|
747
|
+
"dotSize": {
|
|
748
|
+
"mul": [
|
|
749
|
+
{
|
|
750
|
+
"param": "dotSize"
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
"input": "dpr"
|
|
754
|
+
}
|
|
755
|
+
]
|
|
756
|
+
},
|
|
757
|
+
"inkBoost": {
|
|
758
|
+
"add": [
|
|
759
|
+
1,
|
|
760
|
+
{
|
|
761
|
+
"mul": [
|
|
762
|
+
{
|
|
763
|
+
"param": "style"
|
|
764
|
+
},
|
|
765
|
+
0.4
|
|
766
|
+
]
|
|
767
|
+
}
|
|
768
|
+
]
|
|
769
|
+
}
|
|
770
|
+
},
|
|
771
|
+
"panel": {
|
|
772
|
+
"sampler": "uPanel",
|
|
773
|
+
"texture": 0,
|
|
774
|
+
"note": "The Canvas2D/CoreGraphics/android.graphics panel (jagged starburst balloon + hand-lettered word + bold ink contours, R=wordFill G=ink B=burstFill) the host redraws every frame; the draw itself — incl. the per-letter slam SCALE + the display-face lettering — is the per-platform panel-draw seam (web panelDraw hook / ComicPanel files)."
|
|
775
|
+
},
|
|
776
|
+
"consts": {},
|
|
777
|
+
"config": {
|
|
778
|
+
"usesOrigin": true,
|
|
779
|
+
"stepping": "none"
|
|
780
|
+
},
|
|
781
|
+
"backends": {
|
|
782
|
+
"webgl2": {
|
|
783
|
+
"stage": "fullscreen-triangle",
|
|
784
|
+
"blend": "screen",
|
|
785
|
+
"shader": {
|
|
786
|
+
"program": "comic"
|
|
787
|
+
},
|
|
788
|
+
"note": "Hybrid: a Canvas2D panel (word/burst/ink) is uploaded as a texture; the shader adds halftone, action lines, flash, styling."
|
|
789
|
+
}
|
|
790
|
+
},
|
|
791
|
+
"fallbackOrder": [
|
|
792
|
+
"webgl2"
|
|
793
|
+
]
|
|
794
|
+
},
|
|
795
|
+
"binding": {
|
|
796
|
+
"note": "CROSS-PLATFORM uniform-binding contract. Which render.params are NOT shader uniforms, the seed-keyed scatter field, the per-frame/host extras, and the texture samplers — one source of truth for the web u<Name> list, the Swift struct + packer, and the MSL struct. SHIPS in the portable .dope (the runtime derives its uniform bindings from it); the toolchain consumes it too for the Metal struct codegen. Only `x-build`, `slug` and `kind` stay toolchain-only.",
|
|
797
|
+
"excludeParams": [
|
|
798
|
+
"style",
|
|
799
|
+
"overshoot",
|
|
800
|
+
"scale",
|
|
801
|
+
"burstPoints",
|
|
802
|
+
"inkWeight",
|
|
803
|
+
"dotSize"
|
|
804
|
+
],
|
|
805
|
+
"scatterKey": "comicSeed",
|
|
806
|
+
"scatterWeb": "uSeed",
|
|
807
|
+
"extras": [
|
|
808
|
+
{
|
|
809
|
+
"name": "presence",
|
|
810
|
+
"type": "float",
|
|
811
|
+
"web": "uPresence",
|
|
812
|
+
"note": "impactPresence(life) — panel opacity / presence 0..1"
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"name": "flash",
|
|
816
|
+
"type": "float",
|
|
817
|
+
"web": "uFlash",
|
|
818
|
+
"note": "0..1 impact flash (fast spike, decays)"
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"name": "dotSize",
|
|
822
|
+
"type": "float",
|
|
823
|
+
"web": "uDotSize",
|
|
824
|
+
"note": "Ben-Day cell size in device px (dpr-scaled; render.pass)"
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
"name": "inkBoost",
|
|
828
|
+
"type": "float",
|
|
829
|
+
"web": "uInkBoost",
|
|
830
|
+
"note": "ink darkness/spread, 1 + style*0.4 (render.pass)"
|
|
831
|
+
}
|
|
832
|
+
],
|
|
833
|
+
"samplers": [
|
|
834
|
+
{
|
|
835
|
+
"web": "uPanel",
|
|
836
|
+
"name": "panelTex",
|
|
837
|
+
"texture": 0,
|
|
838
|
+
"note": "the per-frame panel texture (render.panel)"
|
|
839
|
+
}
|
|
840
|
+
]
|
|
841
|
+
}
|
|
842
|
+
}
|