@buoy-gg/shared-ui 7.0.32 → 7.0.33

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 (69) hide show
  1. package/lib/commonjs/JsModal.js +13 -6
  2. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  3. package/lib/commonjs/storage/devToolsStorageKeys.js +12 -0
  4. package/lib/commonjs/ui/components/EmptyState.js +10 -2
  5. package/lib/commonjs/ui/components/ToolEmptyState.js +154 -0
  6. package/lib/commonjs/ui/components/WindowControls.js +8 -5
  7. package/lib/commonjs/ui/components/index.js +13 -0
  8. package/lib/commonjs/ui/index.js +12 -0
  9. package/lib/commonjs/ui/otto/OttoSprite.js +510 -0
  10. package/lib/commonjs/ui/otto/index.js +38 -0
  11. package/lib/commonjs/ui/otto/ottoEngine.js +2734 -0
  12. package/lib/commonjs/ui/otto/ottoSheet.js +191 -0
  13. package/lib/module/JsModal.js +13 -6
  14. package/lib/module/hooks/safe-area-impl.js +1 -1
  15. package/lib/module/storage/devToolsStorageKeys.js +12 -0
  16. package/lib/module/ui/components/EmptyState.js +10 -2
  17. package/lib/module/ui/components/ToolEmptyState.js +149 -0
  18. package/lib/module/ui/components/WindowControls.js +8 -5
  19. package/lib/module/ui/components/index.js +3 -0
  20. package/lib/module/ui/index.js +4 -1
  21. package/lib/module/ui/otto/OttoSprite.js +496 -0
  22. package/lib/module/ui/otto/index.js +20 -0
  23. package/lib/module/ui/otto/ottoEngine.js +2726 -0
  24. package/lib/module/ui/otto/ottoSheet.js +180 -0
  25. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  26. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  27. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +12 -0
  28. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
  29. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts +14 -1
  30. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/ui/components/ToolEmptyState.d.ts +113 -0
  32. package/lib/typescript/commonjs/ui/components/ToolEmptyState.d.ts.map +1 -0
  33. package/lib/typescript/commonjs/ui/components/WindowControls.d.ts +7 -1
  34. package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +1 -1
  35. package/lib/typescript/commonjs/ui/components/index.d.ts +2 -0
  36. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  37. package/lib/typescript/commonjs/ui/index.d.ts +1 -0
  38. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  39. package/lib/typescript/commonjs/ui/otto/OttoSprite.d.ts +103 -0
  40. package/lib/typescript/commonjs/ui/otto/OttoSprite.d.ts.map +1 -0
  41. package/lib/typescript/commonjs/ui/otto/index.d.ts +19 -0
  42. package/lib/typescript/commonjs/ui/otto/index.d.ts.map +1 -0
  43. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts +2205 -0
  44. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts.map +1 -0
  45. package/lib/typescript/commonjs/ui/otto/ottoSheet.d.ts +73 -0
  46. package/lib/typescript/commonjs/ui/otto/ottoSheet.d.ts.map +1 -0
  47. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  48. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  49. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +12 -0
  50. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
  51. package/lib/typescript/module/ui/components/EmptyState.d.ts +14 -1
  52. package/lib/typescript/module/ui/components/EmptyState.d.ts.map +1 -1
  53. package/lib/typescript/module/ui/components/ToolEmptyState.d.ts +113 -0
  54. package/lib/typescript/module/ui/components/ToolEmptyState.d.ts.map +1 -0
  55. package/lib/typescript/module/ui/components/WindowControls.d.ts +7 -1
  56. package/lib/typescript/module/ui/components/WindowControls.d.ts.map +1 -1
  57. package/lib/typescript/module/ui/components/index.d.ts +2 -0
  58. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  59. package/lib/typescript/module/ui/index.d.ts +1 -0
  60. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  61. package/lib/typescript/module/ui/otto/OttoSprite.d.ts +103 -0
  62. package/lib/typescript/module/ui/otto/OttoSprite.d.ts.map +1 -0
  63. package/lib/typescript/module/ui/otto/index.d.ts +19 -0
  64. package/lib/typescript/module/ui/otto/index.d.ts.map +1 -0
  65. package/lib/typescript/module/ui/otto/ottoEngine.d.ts +2205 -0
  66. package/lib/typescript/module/ui/otto/ottoEngine.d.ts.map +1 -0
  67. package/lib/typescript/module/ui/otto/ottoSheet.d.ts +73 -0
  68. package/lib/typescript/module/ui/otto/ottoSheet.d.ts.map +1 -0
  69. package/package.json +4 -4
@@ -0,0 +1,2205 @@
1
+ /**
2
+ * Otto — Buoy's pixel mascot, ported 1:1 from the Claude Design mockup
3
+ * (`Otto.dc.html`, "Turn 6 — Otto, full state set").
4
+ *
5
+ * Everything here is pure: a pose is a parametric description (body rect,
6
+ * lamp, eyes, legs, prop extras) baked onto a 16×16 grid, composed with a
7
+ * keyline and water, then painted from the palette. No React, no timers —
8
+ * `renderOttoFrame(state, t)` is the whole API, so it can be lifted into a
9
+ * package unchanged. `OttoSprite.tsx` is the React Native renderer.
10
+ */
11
+ export declare const OTTO_GRID = 16;
12
+ /** Palette keys → colours. `.` is transparent. */
13
+ export declare const OTTO_PALETTE: Record<string, string>;
14
+ export type OttoEyes = "open" | "closed" | "happy" | "x" | "big";
15
+ /** [x, y, paletteKey] */
16
+ export type OttoExtra = [number, number, string];
17
+ export interface OttoPose {
18
+ x0: number;
19
+ y0: number;
20
+ w: number;
21
+ h: number;
22
+ eyes: OttoEyes;
23
+ lamp: string | null;
24
+ legs: number[] | null;
25
+ /** Whole-sprite horizontal shift (props included). */
26
+ dx?: number;
27
+ /** Eye offsets. */
28
+ ex?: number;
29
+ ey?: number;
30
+ extras?: OttoExtra[];
31
+ /** Water is drawn OVER the bottom three rows. */
32
+ submerged?: boolean;
33
+ }
34
+ /** The water on its own: rows 13–15 as palette keys at tick `t`. Period 7 in floor(t/2). */
35
+ export declare function ottoWaterRows(t: number): string[][];
36
+ export interface OttoRenderOptions {
37
+ water?: boolean;
38
+ keyline?: boolean;
39
+ }
40
+ export declare const OTTO_STATES: {
41
+ idle: (t: number) => {
42
+ y0: number;
43
+ eyes: "open" | "closed";
44
+ ex: number;
45
+ legs: number[];
46
+ x0: number;
47
+ w: number;
48
+ h: number;
49
+ lamp: string | null;
50
+ /** Whole-sprite horizontal shift (props included). */
51
+ dx?: number;
52
+ ey?: number;
53
+ extras?: OttoExtra[];
54
+ /** Water is drawn OVER the bottom three rows. */
55
+ submerged?: boolean;
56
+ };
57
+ thinking: (t: number) => {
58
+ ex: number;
59
+ ey: number;
60
+ lamp: string;
61
+ extras: OttoExtra[];
62
+ x0: number;
63
+ y0: number;
64
+ w: number;
65
+ h: number;
66
+ eyes: OttoEyes;
67
+ legs: number[] | null;
68
+ /** Whole-sprite horizontal shift (props included). */
69
+ dx?: number;
70
+ /** Water is drawn OVER the bottom three rows. */
71
+ submerged?: boolean;
72
+ };
73
+ happy: (t: number) => OttoPose;
74
+ error: (t: number) => {
75
+ lamp: string;
76
+ dx: number;
77
+ eyes: "closed";
78
+ x0: number;
79
+ y0: number;
80
+ w: number;
81
+ h: number;
82
+ legs: number[] | null;
83
+ /** Eye offsets. */
84
+ ex?: number;
85
+ ey?: number;
86
+ extras?: OttoExtra[];
87
+ /** Water is drawn OVER the bottom three rows. */
88
+ submerged?: boolean;
89
+ };
90
+ sleep: (t: number) => {
91
+ y0: number;
92
+ eyes: "closed";
93
+ lamp: string;
94
+ extras: OttoExtra[];
95
+ x0: number;
96
+ w: number;
97
+ h: number;
98
+ legs: number[] | null;
99
+ /** Whole-sprite horizontal shift (props included). */
100
+ dx?: number;
101
+ /** Eye offsets. */
102
+ ex?: number;
103
+ ey?: number;
104
+ /** Water is drawn OVER the bottom three rows. */
105
+ submerged?: boolean;
106
+ };
107
+ peek: (t: number) => {
108
+ submerged: true;
109
+ y0: number;
110
+ ex: number;
111
+ legs: null;
112
+ x0: number;
113
+ w: number;
114
+ h: number;
115
+ eyes: OttoEyes;
116
+ lamp: string | null;
117
+ /** Whole-sprite horizontal shift (props included). */
118
+ dx?: number;
119
+ ey?: number;
120
+ extras?: OttoExtra[];
121
+ };
122
+ typing: (t: number) => {
123
+ eyes: "open" | "closed";
124
+ legs: null;
125
+ extras: OttoExtra[];
126
+ x0: number;
127
+ y0: number;
128
+ w: number;
129
+ h: number;
130
+ lamp: string | null;
131
+ /** Whole-sprite horizontal shift (props included). */
132
+ dx?: number;
133
+ /** Eye offsets. */
134
+ ex?: number;
135
+ ey?: number;
136
+ /** Water is drawn OVER the bottom three rows. */
137
+ submerged?: boolean;
138
+ };
139
+ debugging: (t: number) => {
140
+ extras: OttoExtra[];
141
+ x0: number;
142
+ y0: number;
143
+ w: number;
144
+ h: number;
145
+ eyes: OttoEyes;
146
+ lamp: string | null;
147
+ legs: number[] | null;
148
+ /** Whole-sprite horizontal shift (props included). */
149
+ dx?: number;
150
+ /** Eye offsets. */
151
+ ex?: number;
152
+ ey?: number;
153
+ /** Water is drawn OVER the bottom three rows. */
154
+ submerged?: boolean;
155
+ };
156
+ building: (t: number) => {
157
+ lamp: null;
158
+ eyes: "open" | "closed";
159
+ extras: OttoExtra[];
160
+ x0: number;
161
+ y0: number;
162
+ w: number;
163
+ h: number;
164
+ legs: number[] | null;
165
+ /** Whole-sprite horizontal shift (props included). */
166
+ dx?: number;
167
+ /** Eye offsets. */
168
+ ex?: number;
169
+ ey?: number;
170
+ /** Water is drawn OVER the bottom three rows. */
171
+ submerged?: boolean;
172
+ };
173
+ carrying: (t: number) => {
174
+ y0: number;
175
+ lamp: null;
176
+ ey: number;
177
+ legs: number[];
178
+ extras: OttoExtra[];
179
+ x0: number;
180
+ w: number;
181
+ h: number;
182
+ eyes: OttoEyes;
183
+ /** Whole-sprite horizontal shift (props included). */
184
+ dx?: number;
185
+ /** Eye offsets. */
186
+ ex?: number;
187
+ /** Water is drawn OVER the bottom three rows. */
188
+ submerged?: boolean;
189
+ };
190
+ pushing: (t: number) => {
191
+ x0: number;
192
+ dx: number;
193
+ ex: number;
194
+ legs: number[];
195
+ extras: OttoExtra[];
196
+ y0: number;
197
+ w: number;
198
+ h: number;
199
+ eyes: OttoEyes;
200
+ lamp: string | null;
201
+ ey?: number;
202
+ /** Water is drawn OVER the bottom three rows. */
203
+ submerged?: boolean;
204
+ };
205
+ sweeping: (t: number) => {
206
+ ex: number;
207
+ eyes: "open" | "closed";
208
+ extras: OttoExtra[];
209
+ x0: number;
210
+ y0: number;
211
+ w: number;
212
+ h: number;
213
+ lamp: string | null;
214
+ legs: number[] | null;
215
+ /** Whole-sprite horizontal shift (props included). */
216
+ dx?: number;
217
+ ey?: number;
218
+ /** Water is drawn OVER the bottom three rows. */
219
+ submerged?: boolean;
220
+ };
221
+ juggling: (t: number) => {
222
+ lamp: null;
223
+ ey: number;
224
+ ex: number;
225
+ extras: OttoExtra[];
226
+ x0: number;
227
+ y0: number;
228
+ w: number;
229
+ h: number;
230
+ eyes: OttoEyes;
231
+ legs: number[] | null;
232
+ /** Whole-sprite horizontal shift (props included). */
233
+ dx?: number;
234
+ /** Water is drawn OVER the bottom three rows. */
235
+ submerged?: boolean;
236
+ };
237
+ wizard: (t: number) => {
238
+ lamp: null;
239
+ eyes: "open" | "closed";
240
+ extras: OttoExtra[];
241
+ x0: number;
242
+ y0: number;
243
+ w: number;
244
+ h: number;
245
+ legs: number[] | null;
246
+ /** Whole-sprite horizontal shift (props included). */
247
+ dx?: number;
248
+ /** Eye offsets. */
249
+ ex?: number;
250
+ ey?: number;
251
+ /** Water is drawn OVER the bottom three rows. */
252
+ submerged?: boolean;
253
+ };
254
+ conducting: (t: number) => {
255
+ eyes: "happy";
256
+ extras: OttoExtra[];
257
+ x0: number;
258
+ y0: number;
259
+ w: number;
260
+ h: number;
261
+ lamp: string | null;
262
+ legs: number[] | null;
263
+ /** Whole-sprite horizontal shift (props included). */
264
+ dx?: number;
265
+ /** Eye offsets. */
266
+ ex?: number;
267
+ ey?: number;
268
+ /** Water is drawn OVER the bottom three rows. */
269
+ submerged?: boolean;
270
+ };
271
+ beacon: (t: number) => {
272
+ lamp: string;
273
+ ey: number;
274
+ extras: OttoExtra[];
275
+ x0: number;
276
+ y0: number;
277
+ w: number;
278
+ h: number;
279
+ eyes: OttoEyes;
280
+ legs: number[] | null;
281
+ /** Whole-sprite horizontal shift (props included). */
282
+ dx?: number;
283
+ /** Eye offsets. */
284
+ ex?: number;
285
+ /** Water is drawn OVER the bottom three rows. */
286
+ submerged?: boolean;
287
+ };
288
+ notification: (t: number) => {
289
+ y0: number;
290
+ lamp: string;
291
+ legs: number[];
292
+ extras: OttoExtra[];
293
+ x0: number;
294
+ w: number;
295
+ h: number;
296
+ eyes: OttoEyes;
297
+ /** Whole-sprite horizontal shift (props included). */
298
+ dx?: number;
299
+ /** Eye offsets. */
300
+ ex?: number;
301
+ ey?: number;
302
+ /** Water is drawn OVER the bottom three rows. */
303
+ submerged?: boolean;
304
+ };
305
+ disconnected: (t: number) => {
306
+ y0: number;
307
+ lamp: string;
308
+ ex: number;
309
+ ey: number;
310
+ extras: OttoExtra[];
311
+ x0: number;
312
+ w: number;
313
+ h: number;
314
+ eyes: OttoEyes;
315
+ legs: number[] | null;
316
+ /** Whole-sprite horizontal shift (props included). */
317
+ dx?: number;
318
+ /** Water is drawn OVER the bottom three rows. */
319
+ submerged?: boolean;
320
+ };
321
+ dizzy: (t: number) => {
322
+ eyes: "x";
323
+ lamp: string;
324
+ dx: number;
325
+ extras: OttoExtra[];
326
+ x0: number;
327
+ y0: number;
328
+ w: number;
329
+ h: number;
330
+ legs: number[] | null;
331
+ /** Eye offsets. */
332
+ ex?: number;
333
+ ey?: number;
334
+ /** Water is drawn OVER the bottom three rows. */
335
+ submerged?: boolean;
336
+ };
337
+ overheated: (t: number) => {
338
+ eyes: "open" | "closed";
339
+ lamp: string;
340
+ extras: [number, number, string][];
341
+ h: number;
342
+ w: number;
343
+ x0: number;
344
+ y0: number;
345
+ ey?: number;
346
+ legs: number[] | null;
347
+ /** Whole-sprite horizontal shift (props included). */
348
+ dx?: number;
349
+ /** Eye offsets. */
350
+ ex?: number;
351
+ /** Water is drawn OVER the bottom three rows. */
352
+ submerged?: boolean;
353
+ };
354
+ confused: (t: number) => {
355
+ ex: number;
356
+ ey: number;
357
+ dx: number;
358
+ extras: OttoExtra[];
359
+ x0: number;
360
+ y0: number;
361
+ w: number;
362
+ h: number;
363
+ eyes: OttoEyes;
364
+ lamp: string | null;
365
+ legs: number[] | null;
366
+ /** Water is drawn OVER the bottom three rows. */
367
+ submerged?: boolean;
368
+ };
369
+ stare: (t: number) => {
370
+ eyes: "big" | "closed";
371
+ ex: number;
372
+ x0: number;
373
+ y0: number;
374
+ w: number;
375
+ h: number;
376
+ lamp: string | null;
377
+ legs: number[] | null;
378
+ /** Whole-sprite horizontal shift (props included). */
379
+ dx?: number;
380
+ ey?: number;
381
+ extras?: OttoExtra[];
382
+ /** Water is drawn OVER the bottom three rows. */
383
+ submerged?: boolean;
384
+ };
385
+ walking: (t: number) => {
386
+ dx: number;
387
+ ex: number;
388
+ legs: number[];
389
+ x0: number;
390
+ y0: number;
391
+ w: number;
392
+ h: number;
393
+ eyes: OttoEyes;
394
+ lamp: string | null;
395
+ ey?: number;
396
+ extras?: OttoExtra[];
397
+ /** Water is drawn OVER the bottom three rows. */
398
+ submerged?: boolean;
399
+ };
400
+ goingaway: (t: number) => {
401
+ dx: number;
402
+ ex: number;
403
+ legs: number[];
404
+ x0: number;
405
+ y0: number;
406
+ w: number;
407
+ h: number;
408
+ eyes: OttoEyes;
409
+ lamp: string | null;
410
+ ey?: number;
411
+ extras?: OttoExtra[];
412
+ /** Water is drawn OVER the bottom three rows. */
413
+ submerged?: boolean;
414
+ };
415
+ eureka: (t: number) => {
416
+ lamp: string;
417
+ eyes: "open" | "closed" | "happy";
418
+ ex: number;
419
+ ey: number;
420
+ y0: number;
421
+ extras: OttoExtra[];
422
+ x0: number;
423
+ w: number;
424
+ h: number;
425
+ legs: number[] | null;
426
+ /** Whole-sprite horizontal shift (props included). */
427
+ dx?: number;
428
+ /** Water is drawn OVER the bottom three rows. */
429
+ submerged?: boolean;
430
+ };
431
+ grooving: (t: number) => {
432
+ lamp: null;
433
+ dx: number;
434
+ eyes: "happy";
435
+ legs: number[];
436
+ y0: number;
437
+ extras: OttoExtra[];
438
+ x0: number;
439
+ w: number;
440
+ h: number;
441
+ /** Eye offsets. */
442
+ ex?: number;
443
+ ey?: number;
444
+ /** Water is drawn OVER the bottom three rows. */
445
+ submerged?: boolean;
446
+ };
447
+ hatmishap: (t: number) => {
448
+ lamp: null;
449
+ eyes: "open" | "closed" | "happy";
450
+ ex: number;
451
+ legs: number[];
452
+ dx: number;
453
+ extras: OttoExtra[];
454
+ x0: number;
455
+ y0: number;
456
+ w: number;
457
+ h: number;
458
+ ey?: number;
459
+ /** Water is drawn OVER the bottom three rows. */
460
+ submerged?: boolean;
461
+ };
462
+ lowbattery: (t: number) => {
463
+ y0: number;
464
+ h: number;
465
+ x0: number;
466
+ w: number;
467
+ lamp: string;
468
+ eyes: "open" | "closed";
469
+ ey: number;
470
+ legs: null;
471
+ extras: OttoExtra[];
472
+ /** Whole-sprite horizontal shift (props included). */
473
+ dx?: number;
474
+ /** Eye offsets. */
475
+ ex?: number;
476
+ /** Water is drawn OVER the bottom three rows. */
477
+ submerged?: boolean;
478
+ };
479
+ wake: (t: number) => {
480
+ x0: number;
481
+ w: number;
482
+ y0: number;
483
+ h: number;
484
+ lamp: string;
485
+ eyes: "big" | "closed";
486
+ ey: number;
487
+ legs: null;
488
+ /** Whole-sprite horizontal shift (props included). */
489
+ dx?: number;
490
+ /** Eye offsets. */
491
+ ex?: number;
492
+ extras?: OttoExtra[];
493
+ /** Water is drawn OVER the bottom three rows. */
494
+ submerged?: boolean;
495
+ } | {
496
+ x0: number;
497
+ w: number;
498
+ y0: number;
499
+ h: number;
500
+ lamp: null;
501
+ eyes: "big";
502
+ ey: number;
503
+ legs: number[];
504
+ /** Whole-sprite horizontal shift (props included). */
505
+ dx?: number;
506
+ /** Eye offsets. */
507
+ ex?: number;
508
+ extras?: OttoExtra[];
509
+ /** Water is drawn OVER the bottom three rows. */
510
+ submerged?: boolean;
511
+ } | {
512
+ y0: number;
513
+ eyes: "big";
514
+ lamp: string;
515
+ legs: number[];
516
+ x0: number;
517
+ w: number;
518
+ h: number;
519
+ /** Whole-sprite horizontal shift (props included). */
520
+ dx?: number;
521
+ /** Eye offsets. */
522
+ ex?: number;
523
+ ey?: number;
524
+ extras?: OttoExtra[];
525
+ /** Water is drawn OVER the bottom three rows. */
526
+ submerged?: boolean;
527
+ } | {
528
+ x0: number;
529
+ w: number;
530
+ y0: number;
531
+ h: number;
532
+ eyes: "open";
533
+ lamp: string;
534
+ legs: number[] | null;
535
+ /** Whole-sprite horizontal shift (props included). */
536
+ dx?: number;
537
+ /** Eye offsets. */
538
+ ex?: number;
539
+ ey?: number;
540
+ extras?: OttoExtra[];
541
+ /** Water is drawn OVER the bottom three rows. */
542
+ submerged?: boolean;
543
+ } | {
544
+ eyes: "open" | "closed";
545
+ legs: number[];
546
+ x0: number;
547
+ y0: number;
548
+ w: number;
549
+ h: number;
550
+ lamp: string | null;
551
+ /** Whole-sprite horizontal shift (props included). */
552
+ dx?: number;
553
+ /** Eye offsets. */
554
+ ex?: number;
555
+ ey?: number;
556
+ extras?: OttoExtra[];
557
+ /** Water is drawn OVER the bottom three rows. */
558
+ submerged?: boolean;
559
+ };
560
+ builder: (t: number) => {
561
+ lamp: null;
562
+ ex: number;
563
+ ey: number;
564
+ legs: number[];
565
+ extras: OttoExtra[];
566
+ x0: number;
567
+ y0: number;
568
+ w: number;
569
+ h: number;
570
+ eyes: OttoEyes;
571
+ /** Whole-sprite horizontal shift (props included). */
572
+ dx?: number;
573
+ /** Water is drawn OVER the bottom three rows. */
574
+ submerged?: boolean;
575
+ };
576
+ mini: (t: number) => {
577
+ x0: number;
578
+ w: number;
579
+ y0: number;
580
+ h: number;
581
+ lamp: string;
582
+ eyes: "big";
583
+ ex: number;
584
+ ey: number;
585
+ legs: number[];
586
+ extras: [number, number, string][];
587
+ /** Whole-sprite horizontal shift (props included). */
588
+ dx?: number;
589
+ /** Water is drawn OVER the bottom three rows. */
590
+ submerged?: boolean;
591
+ };
592
+ minityping: (t: number) => {
593
+ x0: number;
594
+ w: number;
595
+ y0: number;
596
+ h: number;
597
+ lamp: null;
598
+ legs: number[];
599
+ extras: OttoExtra[];
600
+ eyes: OttoEyes;
601
+ /** Whole-sprite horizontal shift (props included). */
602
+ dx?: number;
603
+ /** Eye offsets. */
604
+ ex?: number;
605
+ ey?: number;
606
+ /** Water is drawn OVER the bottom three rows. */
607
+ submerged?: boolean;
608
+ };
609
+ happydance: (t: number) => {
610
+ eyes: "open" | "happy";
611
+ legs: number[];
612
+ extras: OttoExtra[];
613
+ x0: number;
614
+ y0: number;
615
+ w: number;
616
+ h: number;
617
+ lamp: string | null;
618
+ /** Whole-sprite horizontal shift (props included). */
619
+ dx?: number;
620
+ /** Eye offsets. */
621
+ ex?: number;
622
+ ey?: number;
623
+ /** Water is drawn OVER the bottom three rows. */
624
+ submerged?: boolean;
625
+ };
626
+ jumping: (t: number) => {
627
+ y0: number;
628
+ eyes: "open" | "closed";
629
+ legs: number[];
630
+ extras: [number, number, string][];
631
+ x0: number;
632
+ w: number;
633
+ h: number;
634
+ lamp: string | null;
635
+ /** Whole-sprite horizontal shift (props included). */
636
+ dx?: number;
637
+ /** Eye offsets. */
638
+ ex?: number;
639
+ ey?: number;
640
+ /** Water is drawn OVER the bottom three rows. */
641
+ submerged?: boolean;
642
+ };
643
+ loading: (t: number) => {
644
+ ex: number;
645
+ ey: number;
646
+ extras: OttoExtra[];
647
+ x0: number;
648
+ y0: number;
649
+ w: number;
650
+ h: number;
651
+ eyes: OttoEyes;
652
+ lamp: string | null;
653
+ legs: number[] | null;
654
+ /** Whole-sprite horizontal shift (props included). */
655
+ dx?: number;
656
+ /** Water is drawn OVER the bottom three rows. */
657
+ submerged?: boolean;
658
+ };
659
+ progress: (t: number) => {
660
+ y0: number;
661
+ eyes: "open" | "happy";
662
+ ex: number;
663
+ ey: number;
664
+ lamp: string;
665
+ legs: number[];
666
+ extras: OttoExtra[];
667
+ x0: number;
668
+ w: number;
669
+ h: number;
670
+ /** Whole-sprite horizontal shift (props included). */
671
+ dx?: number;
672
+ /** Water is drawn OVER the bottom three rows. */
673
+ submerged?: boolean;
674
+ };
675
+ hourglass: (t: number) => {
676
+ ex: number;
677
+ eyes: "open" | "closed";
678
+ extras: OttoExtra[];
679
+ x0: number;
680
+ y0: number;
681
+ w: number;
682
+ h: number;
683
+ lamp: string | null;
684
+ legs: number[] | null;
685
+ /** Whole-sprite horizontal shift (props included). */
686
+ dx?: number;
687
+ ey?: number;
688
+ /** Water is drawn OVER the bottom three rows. */
689
+ submerged?: boolean;
690
+ };
691
+ waiting: (t: number) => {
692
+ ex: number;
693
+ ey: number;
694
+ legs: number[];
695
+ extras: OttoExtra[];
696
+ x0: number;
697
+ y0: number;
698
+ w: number;
699
+ h: number;
700
+ eyes: OttoEyes;
701
+ lamp: string | null;
702
+ /** Whole-sprite horizontal shift (props included). */
703
+ dx?: number;
704
+ /** Water is drawn OVER the bottom three rows. */
705
+ submerged?: boolean;
706
+ };
707
+ syncing: (t: number) => {
708
+ ex: number;
709
+ ey: number;
710
+ lamp: string;
711
+ extras: OttoExtra[];
712
+ x0: number;
713
+ y0: number;
714
+ w: number;
715
+ h: number;
716
+ eyes: OttoEyes;
717
+ legs: number[] | null;
718
+ /** Whole-sprite horizontal shift (props included). */
719
+ dx?: number;
720
+ /** Water is drawn OVER the bottom three rows. */
721
+ submerged?: boolean;
722
+ };
723
+ downloading: (t: number) => {
724
+ ex: number;
725
+ ey: number;
726
+ extras: OttoExtra[];
727
+ x0: number;
728
+ y0: number;
729
+ w: number;
730
+ h: number;
731
+ eyes: OttoEyes;
732
+ lamp: string | null;
733
+ legs: number[] | null;
734
+ /** Whole-sprite horizontal shift (props included). */
735
+ dx?: number;
736
+ /** Water is drawn OVER the bottom three rows. */
737
+ submerged?: boolean;
738
+ };
739
+ uploading: (t: number) => {
740
+ ex: number;
741
+ ey: number;
742
+ extras: OttoExtra[];
743
+ x0: number;
744
+ y0: number;
745
+ w: number;
746
+ h: number;
747
+ eyes: OttoEyes;
748
+ lamp: string | null;
749
+ legs: number[] | null;
750
+ /** Whole-sprite horizontal shift (props included). */
751
+ dx?: number;
752
+ /** Water is drawn OVER the bottom three rows. */
753
+ submerged?: boolean;
754
+ };
755
+ connecting: (t: number) => {
756
+ ex: number;
757
+ ey: number;
758
+ eyes: "open" | "happy";
759
+ extras: OttoExtra[];
760
+ x0: number;
761
+ y0: number;
762
+ w: number;
763
+ h: number;
764
+ lamp: string | null;
765
+ legs: number[] | null;
766
+ /** Whole-sprite horizontal shift (props included). */
767
+ dx?: number;
768
+ /** Water is drawn OVER the bottom three rows. */
769
+ submerged?: boolean;
770
+ };
771
+ scanning: (t: number) => {
772
+ eyes: "big";
773
+ legs: number[];
774
+ extras: OttoExtra[];
775
+ x0: number;
776
+ y0: number;
777
+ w: number;
778
+ h: number;
779
+ lamp: string | null;
780
+ /** Whole-sprite horizontal shift (props included). */
781
+ dx?: number;
782
+ /** Eye offsets. */
783
+ ex?: number;
784
+ ey?: number;
785
+ /** Water is drawn OVER the bottom three rows. */
786
+ submerged?: boolean;
787
+ };
788
+ searching: (t: number) => {
789
+ dx: number;
790
+ legs: number[];
791
+ extras: OttoExtra[];
792
+ x0: number;
793
+ y0: number;
794
+ w: number;
795
+ h: number;
796
+ eyes: OttoEyes;
797
+ lamp: string | null;
798
+ /** Eye offsets. */
799
+ ex?: number;
800
+ ey?: number;
801
+ /** Water is drawn OVER the bottom three rows. */
802
+ submerged?: boolean;
803
+ };
804
+ empty: (t: number) => {
805
+ ex: number;
806
+ ey: number;
807
+ eyes: "open" | "closed";
808
+ extras: OttoExtra[];
809
+ x0: number;
810
+ y0: number;
811
+ w: number;
812
+ h: number;
813
+ lamp: string | null;
814
+ legs: number[] | null;
815
+ /** Whole-sprite horizontal shift (props included). */
816
+ dx?: number;
817
+ /** Water is drawn OVER the bottom three rows. */
818
+ submerged?: boolean;
819
+ };
820
+ shrug: (t: number) => {
821
+ ex: number;
822
+ ey: number;
823
+ extras: OttoExtra[];
824
+ x0: number;
825
+ y0: number;
826
+ w: number;
827
+ h: number;
828
+ eyes: OttoEyes;
829
+ lamp: string | null;
830
+ legs: number[] | null;
831
+ /** Whole-sprite horizontal shift (props included). */
832
+ dx?: number;
833
+ /** Water is drawn OVER the bottom three rows. */
834
+ submerged?: boolean;
835
+ };
836
+ fishing: (t: number) => {
837
+ ex: number;
838
+ eyes: "big" | "open" | "closed";
839
+ extras: OttoExtra[];
840
+ x0: number;
841
+ y0: number;
842
+ w: number;
843
+ h: number;
844
+ lamp: string | null;
845
+ legs: number[] | null;
846
+ /** Whole-sprite horizontal shift (props included). */
847
+ dx?: number;
848
+ ey?: number;
849
+ /** Water is drawn OVER the bottom three rows. */
850
+ submerged?: boolean;
851
+ };
852
+ listening: (t: number) => {
853
+ dx: number;
854
+ eyes: "closed";
855
+ extras: OttoExtra[];
856
+ x0: number;
857
+ y0: number;
858
+ w: number;
859
+ h: number;
860
+ lamp: string | null;
861
+ legs: number[] | null;
862
+ /** Eye offsets. */
863
+ ex?: number;
864
+ ey?: number;
865
+ /** Water is drawn OVER the bottom three rows. */
866
+ submerged?: boolean;
867
+ };
868
+ tumbleweed: (t: number) => {
869
+ ex: number;
870
+ ey: number;
871
+ extras: OttoExtra[];
872
+ x0: number;
873
+ y0: number;
874
+ w: number;
875
+ h: number;
876
+ eyes: OttoEyes;
877
+ lamp: string | null;
878
+ legs: number[] | null;
879
+ /** Whole-sprite horizontal shift (props included). */
880
+ dx?: number;
881
+ /** Water is drawn OVER the bottom three rows. */
882
+ submerged?: boolean;
883
+ };
884
+ warning: (t: number) => {
885
+ dx: number;
886
+ eyes: "big";
887
+ ex: number;
888
+ ey: number;
889
+ lamp: string;
890
+ extras: OttoExtra[];
891
+ x0: number;
892
+ y0: number;
893
+ w: number;
894
+ h: number;
895
+ legs: number[] | null;
896
+ /** Water is drawn OVER the bottom three rows. */
897
+ submerged?: boolean;
898
+ };
899
+ crash: (t: number) => {
900
+ eyes: "x";
901
+ lamp: string;
902
+ dx: number;
903
+ legs: number[];
904
+ extras: OttoExtra[];
905
+ x0: number;
906
+ y0: number;
907
+ w: number;
908
+ h: number;
909
+ /** Eye offsets. */
910
+ ex?: number;
911
+ ey?: number;
912
+ /** Water is drawn OVER the bottom three rows. */
913
+ submerged?: boolean;
914
+ };
915
+ panic: (t: number) => {
916
+ eyes: "big";
917
+ lamp: string;
918
+ dx: number;
919
+ legs: number[];
920
+ extras: OttoExtra[];
921
+ x0: number;
922
+ y0: number;
923
+ w: number;
924
+ h: number;
925
+ /** Eye offsets. */
926
+ ex?: number;
927
+ ey?: number;
928
+ /** Water is drawn OVER the bottom three rows. */
929
+ submerged?: boolean;
930
+ };
931
+ sos: (t: number) => {
932
+ eyes: "big";
933
+ lamp: string;
934
+ extras: OttoExtra[];
935
+ x0: number;
936
+ y0: number;
937
+ w: number;
938
+ h: number;
939
+ legs: number[] | null;
940
+ /** Whole-sprite horizontal shift (props included). */
941
+ dx?: number;
942
+ /** Eye offsets. */
943
+ ex?: number;
944
+ ey?: number;
945
+ /** Water is drawn OVER the bottom three rows. */
946
+ submerged?: boolean;
947
+ };
948
+ offline: (t: number) => {
949
+ y0: number;
950
+ lamp: string;
951
+ eyes: "open" | "closed";
952
+ ex: number;
953
+ ey: number;
954
+ extras: OttoExtra[];
955
+ x0: number;
956
+ w: number;
957
+ h: number;
958
+ legs: number[] | null;
959
+ /** Whole-sprite horizontal shift (props included). */
960
+ dx?: number;
961
+ /** Water is drawn OVER the bottom three rows. */
962
+ submerged?: boolean;
963
+ };
964
+ timeout: (t: number) => {
965
+ ex: number;
966
+ ey: number;
967
+ eyes: "open" | "closed";
968
+ lamp: string;
969
+ dx: number;
970
+ extras: OttoExtra[];
971
+ x0: number;
972
+ y0: number;
973
+ w: number;
974
+ h: number;
975
+ legs: number[] | null;
976
+ /** Water is drawn OVER the bottom three rows. */
977
+ submerged?: boolean;
978
+ };
979
+ locked: (t: number) => {
980
+ ex: number;
981
+ ey: number;
982
+ eyes: "open" | "closed";
983
+ dx: number;
984
+ extras: OttoExtra[];
985
+ x0: number;
986
+ y0: number;
987
+ w: number;
988
+ h: number;
989
+ lamp: string | null;
990
+ legs: number[] | null;
991
+ /** Water is drawn OVER the bottom three rows. */
992
+ submerged?: boolean;
993
+ };
994
+ unlocked: (t: number) => {
995
+ y0: number;
996
+ ex: number;
997
+ ey: number;
998
+ eyes: "open" | "happy";
999
+ lamp: string;
1000
+ legs: number[];
1001
+ extras: OttoExtra[];
1002
+ x0: number;
1003
+ w: number;
1004
+ h: number;
1005
+ /** Whole-sprite horizontal shift (props included). */
1006
+ dx?: number;
1007
+ /** Water is drawn OVER the bottom three rows. */
1008
+ submerged?: boolean;
1009
+ };
1010
+ denied: (t: number) => {
1011
+ dx: number;
1012
+ ex: number;
1013
+ ey: number;
1014
+ extras: OttoExtra[];
1015
+ x0: number;
1016
+ y0: number;
1017
+ w: number;
1018
+ h: number;
1019
+ eyes: OttoEyes;
1020
+ lamp: string | null;
1021
+ legs: number[] | null;
1022
+ /** Water is drawn OVER the bottom three rows. */
1023
+ submerged?: boolean;
1024
+ };
1025
+ broken: (t: number) => {
1026
+ eyes: "open" | "closed";
1027
+ lamp: string;
1028
+ dx: number;
1029
+ extras: OttoExtra[];
1030
+ x0: number;
1031
+ y0: number;
1032
+ w: number;
1033
+ h: number;
1034
+ legs: number[] | null;
1035
+ /** Eye offsets. */
1036
+ ex?: number;
1037
+ ey?: number;
1038
+ /** Water is drawn OVER the bottom three rows. */
1039
+ submerged?: boolean;
1040
+ };
1041
+ sad: (t: number) => {
1042
+ y0: number;
1043
+ lamp: string;
1044
+ eyes: "closed";
1045
+ extras: OttoExtra[];
1046
+ x0: number;
1047
+ w: number;
1048
+ h: number;
1049
+ legs: number[] | null;
1050
+ /** Whole-sprite horizontal shift (props included). */
1051
+ dx?: number;
1052
+ /** Eye offsets. */
1053
+ ex?: number;
1054
+ ey?: number;
1055
+ /** Water is drawn OVER the bottom three rows. */
1056
+ submerged?: boolean;
1057
+ };
1058
+ rain: (t: number) => {
1059
+ y0: number;
1060
+ lamp: string;
1061
+ eyes: "closed";
1062
+ extras: OttoExtra[];
1063
+ x0: number;
1064
+ w: number;
1065
+ h: number;
1066
+ legs: number[] | null;
1067
+ /** Whole-sprite horizontal shift (props included). */
1068
+ dx?: number;
1069
+ /** Eye offsets. */
1070
+ ex?: number;
1071
+ ey?: number;
1072
+ /** Water is drawn OVER the bottom three rows. */
1073
+ submerged?: boolean;
1074
+ };
1075
+ sick: (t: number) => {
1076
+ eyes: "closed";
1077
+ lamp: string;
1078
+ dx: number;
1079
+ extras: OttoExtra[];
1080
+ x0: number;
1081
+ y0: number;
1082
+ w: number;
1083
+ h: number;
1084
+ legs: number[] | null;
1085
+ /** Eye offsets. */
1086
+ ex?: number;
1087
+ ey?: number;
1088
+ /** Water is drawn OVER the bottom three rows. */
1089
+ submerged?: boolean;
1090
+ };
1091
+ flood: (t: number) => {
1092
+ submerged: true;
1093
+ y0: number;
1094
+ eyes: "big";
1095
+ lamp: string;
1096
+ legs: null;
1097
+ extras: OttoExtra[];
1098
+ x0: number;
1099
+ w: number;
1100
+ h: number;
1101
+ /** Whole-sprite horizontal shift (props included). */
1102
+ dx?: number;
1103
+ /** Eye offsets. */
1104
+ ex?: number;
1105
+ ey?: number;
1106
+ };
1107
+ bug: (t: number) => {
1108
+ ex: number;
1109
+ ey: number;
1110
+ eyes: "big" | "open";
1111
+ extras: OttoExtra[];
1112
+ x0: number;
1113
+ y0: number;
1114
+ w: number;
1115
+ h: number;
1116
+ lamp: string | null;
1117
+ legs: number[] | null;
1118
+ /** Whole-sprite horizontal shift (props included). */
1119
+ dx?: number;
1120
+ /** Water is drawn OVER the bottom three rows. */
1121
+ submerged?: boolean;
1122
+ };
1123
+ alarm: (t: number) => {
1124
+ eyes: "big";
1125
+ lamp: string;
1126
+ extras: OttoExtra[];
1127
+ x0: number;
1128
+ y0: number;
1129
+ w: number;
1130
+ h: number;
1131
+ legs: number[] | null;
1132
+ /** Whole-sprite horizontal shift (props included). */
1133
+ dx?: number;
1134
+ /** Eye offsets. */
1135
+ ex?: number;
1136
+ ey?: number;
1137
+ /** Water is drawn OVER the bottom three rows. */
1138
+ submerged?: boolean;
1139
+ };
1140
+ frozen: (t: number) => {
1141
+ lamp: string;
1142
+ legs: null;
1143
+ dx: number;
1144
+ extras: OttoExtra[];
1145
+ x0: number;
1146
+ y0: number;
1147
+ w: number;
1148
+ h: number;
1149
+ eyes: OttoEyes;
1150
+ /** Eye offsets. */
1151
+ ex?: number;
1152
+ ey?: number;
1153
+ /** Water is drawn OVER the bottom three rows. */
1154
+ submerged?: boolean;
1155
+ };
1156
+ snail: (t: number) => {
1157
+ ex: number;
1158
+ ey: number;
1159
+ eyes: "open" | "closed";
1160
+ extras: OttoExtra[];
1161
+ x0: number;
1162
+ y0: number;
1163
+ w: number;
1164
+ h: number;
1165
+ lamp: string | null;
1166
+ legs: number[] | null;
1167
+ /** Whole-sprite horizontal shift (props included). */
1168
+ dx?: number;
1169
+ /** Water is drawn OVER the bottom three rows. */
1170
+ submerged?: boolean;
1171
+ };
1172
+ angry: (t: number) => {
1173
+ ey: number;
1174
+ lamp: string;
1175
+ legs: number[];
1176
+ extras: OttoExtra[];
1177
+ x0: number;
1178
+ y0: number;
1179
+ w: number;
1180
+ h: number;
1181
+ eyes: OttoEyes;
1182
+ /** Whole-sprite horizontal shift (props included). */
1183
+ dx?: number;
1184
+ /** Eye offsets. */
1185
+ ex?: number;
1186
+ /** Water is drawn OVER the bottom three rows. */
1187
+ submerged?: boolean;
1188
+ };
1189
+ ghost: (t: number) => {
1190
+ y0: number;
1191
+ lamp: string;
1192
+ legs: null;
1193
+ extras: OttoExtra[];
1194
+ x0: number;
1195
+ w: number;
1196
+ h: number;
1197
+ eyes: OttoEyes;
1198
+ /** Whole-sprite horizontal shift (props included). */
1199
+ dx?: number;
1200
+ /** Eye offsets. */
1201
+ ex?: number;
1202
+ ey?: number;
1203
+ /** Water is drawn OVER the bottom three rows. */
1204
+ submerged?: boolean;
1205
+ };
1206
+ nervous: (t: number) => {
1207
+ ex: number;
1208
+ lamp: string;
1209
+ legs: number[];
1210
+ extras: OttoExtra[];
1211
+ x0: number;
1212
+ y0: number;
1213
+ w: number;
1214
+ h: number;
1215
+ eyes: OttoEyes;
1216
+ /** Whole-sprite horizontal shift (props included). */
1217
+ dx?: number;
1218
+ ey?: number;
1219
+ /** Water is drawn OVER the bottom three rows. */
1220
+ submerged?: boolean;
1221
+ };
1222
+ puzzled: (t: number) => {
1223
+ ex: number;
1224
+ ey: number;
1225
+ eyes: "open" | "closed";
1226
+ extras: OttoExtra[];
1227
+ x0: number;
1228
+ y0: number;
1229
+ w: number;
1230
+ h: number;
1231
+ lamp: string | null;
1232
+ legs: number[] | null;
1233
+ /** Whole-sprite horizontal shift (props included). */
1234
+ dx?: number;
1235
+ /** Water is drawn OVER the bottom three rows. */
1236
+ submerged?: boolean;
1237
+ };
1238
+ detective: (t: number) => {
1239
+ lamp: null;
1240
+ ex: number;
1241
+ ey: number;
1242
+ eyes: "open" | "closed";
1243
+ extras: OttoExtra[];
1244
+ x0: number;
1245
+ y0: number;
1246
+ w: number;
1247
+ h: number;
1248
+ legs: number[] | null;
1249
+ /** Whole-sprite horizontal shift (props included). */
1250
+ dx?: number;
1251
+ /** Water is drawn OVER the bottom three rows. */
1252
+ submerged?: boolean;
1253
+ };
1254
+ reading: (t: number) => {
1255
+ ey: number;
1256
+ ex: number;
1257
+ eyes: "open" | "closed";
1258
+ legs: null;
1259
+ extras: OttoExtra[];
1260
+ x0: number;
1261
+ y0: number;
1262
+ w: number;
1263
+ h: number;
1264
+ lamp: string | null;
1265
+ /** Whole-sprite horizontal shift (props included). */
1266
+ dx?: number;
1267
+ /** Water is drawn OVER the bottom three rows. */
1268
+ submerged?: boolean;
1269
+ };
1270
+ success: (t: number) => {
1271
+ y0: number;
1272
+ eyes: "open" | "happy";
1273
+ ex: number;
1274
+ ey: number;
1275
+ lamp: string;
1276
+ legs: number[];
1277
+ extras: OttoExtra[];
1278
+ x0: number;
1279
+ w: number;
1280
+ h: number;
1281
+ /** Whole-sprite horizontal shift (props included). */
1282
+ dx?: number;
1283
+ /** Water is drawn OVER the bottom three rows. */
1284
+ submerged?: boolean;
1285
+ };
1286
+ celebrate: (t: number) => {
1287
+ y0: number;
1288
+ eyes: "happy";
1289
+ legs: number[];
1290
+ extras: OttoExtra[];
1291
+ x0: number;
1292
+ w: number;
1293
+ h: number;
1294
+ lamp: string | null;
1295
+ /** Whole-sprite horizontal shift (props included). */
1296
+ dx?: number;
1297
+ /** Eye offsets. */
1298
+ ex?: number;
1299
+ ey?: number;
1300
+ /** Water is drawn OVER the bottom three rows. */
1301
+ submerged?: boolean;
1302
+ };
1303
+ thumbsup: (t: number) => {
1304
+ eyes: "open" | "happy";
1305
+ extras: OttoExtra[];
1306
+ x0: number;
1307
+ y0: number;
1308
+ w: number;
1309
+ h: number;
1310
+ lamp: string | null;
1311
+ legs: number[] | null;
1312
+ /** Whole-sprite horizontal shift (props included). */
1313
+ dx?: number;
1314
+ /** Eye offsets. */
1315
+ ex?: number;
1316
+ ey?: number;
1317
+ /** Water is drawn OVER the bottom three rows. */
1318
+ submerged?: boolean;
1319
+ };
1320
+ party: (t: number) => {
1321
+ lamp: null;
1322
+ eyes: "happy";
1323
+ dx: number;
1324
+ legs: number[];
1325
+ extras: OttoExtra[];
1326
+ x0: number;
1327
+ y0: number;
1328
+ w: number;
1329
+ h: number;
1330
+ /** Eye offsets. */
1331
+ ex?: number;
1332
+ ey?: number;
1333
+ /** Water is drawn OVER the bottom three rows. */
1334
+ submerged?: boolean;
1335
+ };
1336
+ trophy: (t: number) => {
1337
+ y0: number;
1338
+ lamp: null;
1339
+ eyes: "happy";
1340
+ legs: number[];
1341
+ extras: OttoExtra[];
1342
+ x0: number;
1343
+ w: number;
1344
+ h: number;
1345
+ /** Whole-sprite horizontal shift (props included). */
1346
+ dx?: number;
1347
+ /** Eye offsets. */
1348
+ ex?: number;
1349
+ ey?: number;
1350
+ /** Water is drawn OVER the bottom three rows. */
1351
+ submerged?: boolean;
1352
+ };
1353
+ starred: (t: number) => {
1354
+ ex: number;
1355
+ ey: number;
1356
+ eyes: "open" | "happy";
1357
+ extras: OttoExtra[];
1358
+ x0: number;
1359
+ y0: number;
1360
+ w: number;
1361
+ h: number;
1362
+ lamp: string | null;
1363
+ legs: number[] | null;
1364
+ /** Whole-sprite horizontal shift (props included). */
1365
+ dx?: number;
1366
+ /** Water is drawn OVER the bottom three rows. */
1367
+ submerged?: boolean;
1368
+ };
1369
+ love: (t: number) => {
1370
+ y0: number;
1371
+ eyes: "happy";
1372
+ extras: OttoExtra[];
1373
+ x0: number;
1374
+ w: number;
1375
+ h: number;
1376
+ lamp: string | null;
1377
+ legs: number[] | null;
1378
+ /** Whole-sprite horizontal shift (props included). */
1379
+ dx?: number;
1380
+ /** Eye offsets. */
1381
+ ex?: number;
1382
+ ey?: number;
1383
+ /** Water is drawn OVER the bottom three rows. */
1384
+ submerged?: boolean;
1385
+ };
1386
+ wave: (t: number) => {
1387
+ eyes: "open" | "happy";
1388
+ extras: OttoExtra[];
1389
+ x0: number;
1390
+ y0: number;
1391
+ w: number;
1392
+ h: number;
1393
+ lamp: string | null;
1394
+ legs: number[] | null;
1395
+ /** Whole-sprite horizontal shift (props included). */
1396
+ dx?: number;
1397
+ /** Eye offsets. */
1398
+ ex?: number;
1399
+ ey?: number;
1400
+ /** Water is drawn OVER the bottom three rows. */
1401
+ submerged?: boolean;
1402
+ };
1403
+ bow: (t: number) => {
1404
+ x0: number;
1405
+ y0: number;
1406
+ w: number;
1407
+ h: number;
1408
+ eyes: OttoEyes;
1409
+ lamp: string | null;
1410
+ legs: number[] | null;
1411
+ /** Whole-sprite horizontal shift (props included). */
1412
+ dx?: number;
1413
+ /** Eye offsets. */
1414
+ ex?: number;
1415
+ ey?: number;
1416
+ extras?: OttoExtra[];
1417
+ /** Water is drawn OVER the bottom three rows. */
1418
+ submerged?: boolean;
1419
+ };
1420
+ cool: (t: number) => {
1421
+ dx: number;
1422
+ extras: OttoExtra[];
1423
+ x0: number;
1424
+ y0: number;
1425
+ w: number;
1426
+ h: number;
1427
+ eyes: OttoEyes;
1428
+ lamp: string | null;
1429
+ legs: number[] | null;
1430
+ /** Eye offsets. */
1431
+ ex?: number;
1432
+ ey?: number;
1433
+ /** Water is drawn OVER the bottom three rows. */
1434
+ submerged?: boolean;
1435
+ };
1436
+ flexing: (t: number) => {
1437
+ eyes: "open" | "happy";
1438
+ extras: OttoExtra[];
1439
+ x0: number;
1440
+ y0: number;
1441
+ w: number;
1442
+ h: number;
1443
+ lamp: string | null;
1444
+ legs: number[] | null;
1445
+ /** Whole-sprite horizontal shift (props included). */
1446
+ dx?: number;
1447
+ /** Eye offsets. */
1448
+ ex?: number;
1449
+ ey?: number;
1450
+ /** Water is drawn OVER the bottom three rows. */
1451
+ submerged?: boolean;
1452
+ };
1453
+ zen: (t: number) => {
1454
+ y0: number;
1455
+ lamp: string;
1456
+ eyes: "closed";
1457
+ legs: null;
1458
+ extras: OttoExtra[];
1459
+ x0: number;
1460
+ w: number;
1461
+ h: number;
1462
+ /** Whole-sprite horizontal shift (props included). */
1463
+ dx?: number;
1464
+ /** Eye offsets. */
1465
+ ex?: number;
1466
+ ey?: number;
1467
+ /** Water is drawn OVER the bottom three rows. */
1468
+ submerged?: boolean;
1469
+ };
1470
+ recording: (t: number) => {
1471
+ ex: number;
1472
+ extras: OttoExtra[];
1473
+ x0: number;
1474
+ y0: number;
1475
+ w: number;
1476
+ h: number;
1477
+ eyes: OttoEyes;
1478
+ lamp: string | null;
1479
+ legs: number[] | null;
1480
+ /** Whole-sprite horizontal shift (props included). */
1481
+ dx?: number;
1482
+ ey?: number;
1483
+ /** Water is drawn OVER the bottom three rows. */
1484
+ submerged?: boolean;
1485
+ };
1486
+ paused: (t: number) => {
1487
+ y0: number;
1488
+ lamp: string;
1489
+ eyes: "open" | "closed";
1490
+ ex: number;
1491
+ ey: number;
1492
+ extras: OttoExtra[];
1493
+ x0: number;
1494
+ w: number;
1495
+ h: number;
1496
+ legs: number[] | null;
1497
+ /** Whole-sprite horizontal shift (props included). */
1498
+ dx?: number;
1499
+ /** Water is drawn OVER the bottom three rows. */
1500
+ submerged?: boolean;
1501
+ };
1502
+ filtering: (t: number) => {
1503
+ ex: number;
1504
+ ey: number;
1505
+ extras: OttoExtra[];
1506
+ x0: number;
1507
+ y0: number;
1508
+ w: number;
1509
+ h: number;
1510
+ eyes: OttoEyes;
1511
+ lamp: string | null;
1512
+ legs: number[] | null;
1513
+ /** Whole-sprite horizontal shift (props included). */
1514
+ dx?: number;
1515
+ /** Water is drawn OVER the bottom three rows. */
1516
+ submerged?: boolean;
1517
+ };
1518
+ pinned: (t: number) => {
1519
+ ex: number;
1520
+ ey: number;
1521
+ eyes: "open" | "closed";
1522
+ extras: OttoExtra[];
1523
+ x0: number;
1524
+ y0: number;
1525
+ w: number;
1526
+ h: number;
1527
+ lamp: string | null;
1528
+ legs: number[] | null;
1529
+ /** Whole-sprite horizontal shift (props included). */
1530
+ dx?: number;
1531
+ /** Water is drawn OVER the bottom three rows. */
1532
+ submerged?: boolean;
1533
+ };
1534
+ rewind: (t: number) => {
1535
+ dx: number;
1536
+ ex: number;
1537
+ legs: number[];
1538
+ extras: OttoExtra[];
1539
+ x0: number;
1540
+ y0: number;
1541
+ w: number;
1542
+ h: number;
1543
+ eyes: OttoEyes;
1544
+ lamp: string | null;
1545
+ ey?: number;
1546
+ /** Water is drawn OVER the bottom three rows. */
1547
+ submerged?: boolean;
1548
+ };
1549
+ storing: (t: number) => {
1550
+ ex: number;
1551
+ ey: number;
1552
+ eyes: "open" | "happy";
1553
+ extras: OttoExtra[];
1554
+ x0: number;
1555
+ y0: number;
1556
+ w: number;
1557
+ h: number;
1558
+ lamp: string | null;
1559
+ legs: number[] | null;
1560
+ /** Whole-sprite horizontal shift (props included). */
1561
+ dx?: number;
1562
+ /** Water is drawn OVER the bottom three rows. */
1563
+ submerged?: boolean;
1564
+ };
1565
+ printing: (t: number) => {
1566
+ ex: number;
1567
+ ey: number;
1568
+ extras: OttoExtra[];
1569
+ x0: number;
1570
+ y0: number;
1571
+ w: number;
1572
+ h: number;
1573
+ eyes: OttoEyes;
1574
+ lamp: string | null;
1575
+ legs: number[] | null;
1576
+ /** Whole-sprite horizontal shift (props included). */
1577
+ dx?: number;
1578
+ /** Water is drawn OVER the bottom three rows. */
1579
+ submerged?: boolean;
1580
+ };
1581
+ stopwatch: (t: number) => {
1582
+ eyes: "big";
1583
+ ex: number;
1584
+ ey: number;
1585
+ extras: OttoExtra[];
1586
+ x0: number;
1587
+ y0: number;
1588
+ w: number;
1589
+ h: number;
1590
+ lamp: string | null;
1591
+ legs: number[] | null;
1592
+ /** Whole-sprite horizontal shift (props included). */
1593
+ dx?: number;
1594
+ /** Water is drawn OVER the bottom three rows. */
1595
+ submerged?: boolean;
1596
+ };
1597
+ spotlight: (t: number) => {
1598
+ ex: number;
1599
+ ey: number;
1600
+ extras: OttoExtra[];
1601
+ x0: number;
1602
+ y0: number;
1603
+ w: number;
1604
+ h: number;
1605
+ eyes: OttoEyes;
1606
+ lamp: string | null;
1607
+ legs: number[] | null;
1608
+ /** Whole-sprite horizontal shift (props included). */
1609
+ dx?: number;
1610
+ /** Water is drawn OVER the bottom three rows. */
1611
+ submerged?: boolean;
1612
+ };
1613
+ keys: (t: number) => {
1614
+ ex: number;
1615
+ ey: number;
1616
+ eyes: "open" | "closed";
1617
+ extras: OttoExtra[];
1618
+ x0: number;
1619
+ y0: number;
1620
+ w: number;
1621
+ h: number;
1622
+ lamp: string | null;
1623
+ legs: number[] | null;
1624
+ /** Whole-sprite horizontal shift (props included). */
1625
+ dx?: number;
1626
+ /** Water is drawn OVER the bottom three rows. */
1627
+ submerged?: boolean;
1628
+ };
1629
+ map: (t: number) => {
1630
+ ex: number;
1631
+ ey: number;
1632
+ legs: null;
1633
+ extras: OttoExtra[];
1634
+ x0: number;
1635
+ y0: number;
1636
+ w: number;
1637
+ h: number;
1638
+ eyes: OttoEyes;
1639
+ lamp: string | null;
1640
+ /** Whole-sprite horizontal shift (props included). */
1641
+ dx?: number;
1642
+ /** Water is drawn OVER the bottom three rows. */
1643
+ submerged?: boolean;
1644
+ };
1645
+ photo: (t: number) => {
1646
+ lamp: string;
1647
+ eyes: "open" | "closed";
1648
+ legs: null;
1649
+ extras: OttoExtra[];
1650
+ x0: number;
1651
+ y0: number;
1652
+ w: number;
1653
+ h: number;
1654
+ /** Whole-sprite horizontal shift (props included). */
1655
+ dx?: number;
1656
+ /** Eye offsets. */
1657
+ ex?: number;
1658
+ ey?: number;
1659
+ /** Water is drawn OVER the bottom three rows. */
1660
+ submerged?: boolean;
1661
+ };
1662
+ painting: (t: number) => {
1663
+ ex: number;
1664
+ ey: number;
1665
+ extras: OttoExtra[];
1666
+ x0: number;
1667
+ y0: number;
1668
+ w: number;
1669
+ h: number;
1670
+ eyes: OttoEyes;
1671
+ lamp: string | null;
1672
+ legs: number[] | null;
1673
+ /** Whole-sprite horizontal shift (props included). */
1674
+ dx?: number;
1675
+ /** Water is drawn OVER the bottom three rows. */
1676
+ submerged?: boolean;
1677
+ };
1678
+ disguise: (t: number) => {
1679
+ ex: number;
1680
+ extras: OttoExtra[];
1681
+ x0: number;
1682
+ y0: number;
1683
+ w: number;
1684
+ h: number;
1685
+ eyes: OttoEyes;
1686
+ lamp: string | null;
1687
+ legs: number[] | null;
1688
+ /** Whole-sprite horizontal shift (props included). */
1689
+ dx?: number;
1690
+ ey?: number;
1691
+ /** Water is drawn OVER the bottom three rows. */
1692
+ submerged?: boolean;
1693
+ };
1694
+ pro: (t: number) => {
1695
+ lamp: null;
1696
+ eyes: "open" | "happy";
1697
+ extras: OttoExtra[];
1698
+ x0: number;
1699
+ y0: number;
1700
+ w: number;
1701
+ h: number;
1702
+ legs: number[] | null;
1703
+ /** Whole-sprite horizontal shift (props included). */
1704
+ dx?: number;
1705
+ /** Eye offsets. */
1706
+ ex?: number;
1707
+ ey?: number;
1708
+ /** Water is drawn OVER the bottom three rows. */
1709
+ submerged?: boolean;
1710
+ };
1711
+ talking: (t: number) => {
1712
+ ex: number;
1713
+ ey: number;
1714
+ lamp: string;
1715
+ extras: OttoExtra[];
1716
+ x0: number;
1717
+ y0: number;
1718
+ w: number;
1719
+ h: number;
1720
+ eyes: OttoEyes;
1721
+ legs: number[] | null;
1722
+ /** Whole-sprite horizontal shift (props included). */
1723
+ dx?: number;
1724
+ /** Water is drawn OVER the bottom three rows. */
1725
+ submerged?: boolean;
1726
+ };
1727
+ handshake: (t: number) => {
1728
+ ex: number;
1729
+ eyes: "open" | "happy";
1730
+ extras: OttoExtra[];
1731
+ x0: number;
1732
+ y0: number;
1733
+ w: number;
1734
+ h: number;
1735
+ lamp: string | null;
1736
+ legs: number[] | null;
1737
+ /** Whole-sprite horizontal shift (props included). */
1738
+ dx?: number;
1739
+ ey?: number;
1740
+ /** Water is drawn OVER the bottom three rows. */
1741
+ submerged?: boolean;
1742
+ };
1743
+ robot: (t: number) => {
1744
+ ex: number;
1745
+ ey: number;
1746
+ eyes: "open" | "happy";
1747
+ extras: OttoExtra[];
1748
+ x0: number;
1749
+ y0: number;
1750
+ w: number;
1751
+ h: number;
1752
+ lamp: string | null;
1753
+ legs: number[] | null;
1754
+ /** Whole-sprite horizontal shift (props included). */
1755
+ dx?: number;
1756
+ /** Water is drawn OVER the bottom three rows. */
1757
+ submerged?: boolean;
1758
+ };
1759
+ plug: (t: number) => {
1760
+ lamp: string;
1761
+ ex: number;
1762
+ eyes: "open" | "happy";
1763
+ extras: OttoExtra[];
1764
+ x0: number;
1765
+ y0: number;
1766
+ w: number;
1767
+ h: number;
1768
+ legs: number[] | null;
1769
+ /** Whole-sprite horizontal shift (props included). */
1770
+ dx?: number;
1771
+ ey?: number;
1772
+ /** Water is drawn OVER the bottom three rows. */
1773
+ submerged?: boolean;
1774
+ };
1775
+ gift: (t: number) => {
1776
+ ex: number;
1777
+ ey: number;
1778
+ eyes: "big" | "happy";
1779
+ extras: OttoExtra[];
1780
+ x0: number;
1781
+ y0: number;
1782
+ w: number;
1783
+ h: number;
1784
+ lamp: string | null;
1785
+ legs: number[] | null;
1786
+ /** Whole-sprite horizontal shift (props included). */
1787
+ dx?: number;
1788
+ /** Water is drawn OVER the bottom three rows. */
1789
+ submerged?: boolean;
1790
+ };
1791
+ action: (t: number) => {
1792
+ ex: number;
1793
+ ey: number;
1794
+ eyes: "open" | "closed";
1795
+ extras: OttoExtra[];
1796
+ x0: number;
1797
+ y0: number;
1798
+ w: number;
1799
+ h: number;
1800
+ lamp: string | null;
1801
+ legs: number[] | null;
1802
+ /** Whole-sprite horizontal shift (props included). */
1803
+ dx?: number;
1804
+ /** Water is drawn OVER the bottom three rows. */
1805
+ submerged?: boolean;
1806
+ };
1807
+ guard: (t: number) => {
1808
+ ex: number;
1809
+ ey: number;
1810
+ eyes: "big" | "open";
1811
+ extras: OttoExtra[];
1812
+ x0: number;
1813
+ y0: number;
1814
+ w: number;
1815
+ h: number;
1816
+ lamp: string | null;
1817
+ legs: number[] | null;
1818
+ /** Whole-sprite horizontal shift (props included). */
1819
+ dx?: number;
1820
+ /** Water is drawn OVER the bottom three rows. */
1821
+ submerged?: boolean;
1822
+ };
1823
+ coffee: (t: number) => {
1824
+ ex: number;
1825
+ ey: number;
1826
+ eyes: "open" | "closed" | "happy";
1827
+ extras: OttoExtra[];
1828
+ x0: number;
1829
+ y0: number;
1830
+ w: number;
1831
+ h: number;
1832
+ lamp: string | null;
1833
+ legs: number[] | null;
1834
+ /** Whole-sprite horizontal shift (props included). */
1835
+ dx?: number;
1836
+ /** Water is drawn OVER the bottom three rows. */
1837
+ submerged?: boolean;
1838
+ };
1839
+ swimming: (t: number) => {
1840
+ submerged: true;
1841
+ y0: number;
1842
+ ex: number;
1843
+ legs: null;
1844
+ extras: OttoExtra[];
1845
+ x0: number;
1846
+ w: number;
1847
+ h: number;
1848
+ eyes: OttoEyes;
1849
+ lamp: string | null;
1850
+ /** Whole-sprite horizontal shift (props included). */
1851
+ dx?: number;
1852
+ ey?: number;
1853
+ };
1854
+ diving: (t: number) => {
1855
+ submerged: boolean;
1856
+ y0: number;
1857
+ ey: number;
1858
+ eyes: "open" | "happy";
1859
+ legs: number[] | null;
1860
+ extras: OttoExtra[];
1861
+ x0: number;
1862
+ w: number;
1863
+ h: number;
1864
+ lamp: string | null;
1865
+ /** Whole-sprite horizontal shift (props included). */
1866
+ dx?: number;
1867
+ /** Eye offsets. */
1868
+ ex?: number;
1869
+ };
1870
+ balloon: (t: number) => {
1871
+ y0: number;
1872
+ ex: number;
1873
+ ey: number;
1874
+ eyes: "open" | "happy";
1875
+ legs: number[];
1876
+ extras: OttoExtra[];
1877
+ x0: number;
1878
+ w: number;
1879
+ h: number;
1880
+ lamp: string | null;
1881
+ /** Whole-sprite horizontal shift (props included). */
1882
+ dx?: number;
1883
+ /** Water is drawn OVER the bottom three rows. */
1884
+ submerged?: boolean;
1885
+ };
1886
+ landing: (t: number) => {
1887
+ y0: number;
1888
+ eyes: "big";
1889
+ legs: number[];
1890
+ x0: number;
1891
+ w: number;
1892
+ h: number;
1893
+ lamp: string | null;
1894
+ /** Whole-sprite horizontal shift (props included). */
1895
+ dx?: number;
1896
+ /** Eye offsets. */
1897
+ ex?: number;
1898
+ ey?: number;
1899
+ extras?: OttoExtra[];
1900
+ /** Water is drawn OVER the bottom three rows. */
1901
+ submerged?: boolean;
1902
+ } | {
1903
+ eyes: "closed";
1904
+ x0: number;
1905
+ y0: number;
1906
+ w: number;
1907
+ h: number;
1908
+ lamp: string | null;
1909
+ legs: number[] | null;
1910
+ /** Whole-sprite horizontal shift (props included). */
1911
+ dx?: number;
1912
+ /** Eye offsets. */
1913
+ ex?: number;
1914
+ ey?: number;
1915
+ extras?: OttoExtra[];
1916
+ /** Water is drawn OVER the bottom three rows. */
1917
+ submerged?: boolean;
1918
+ } | {
1919
+ eyes: "open" | "happy";
1920
+ x0: number;
1921
+ y0: number;
1922
+ w: number;
1923
+ h: number;
1924
+ lamp: string | null;
1925
+ legs: number[] | null;
1926
+ /** Whole-sprite horizontal shift (props included). */
1927
+ dx?: number;
1928
+ /** Eye offsets. */
1929
+ ex?: number;
1930
+ ey?: number;
1931
+ extras?: OttoExtra[];
1932
+ /** Water is drawn OVER the bottom three rows. */
1933
+ submerged?: boolean;
1934
+ };
1935
+ spinning: (t: number) => {
1936
+ x0: number;
1937
+ w: number;
1938
+ ex: number;
1939
+ legs: number[] | null;
1940
+ extras: OttoExtra[];
1941
+ y0: number;
1942
+ h: number;
1943
+ eyes: OttoEyes;
1944
+ lamp: string | null;
1945
+ /** Whole-sprite horizontal shift (props included). */
1946
+ dx?: number;
1947
+ ey?: number;
1948
+ /** Water is drawn OVER the bottom three rows. */
1949
+ submerged?: boolean;
1950
+ };
1951
+ bubbles: (t: number) => {
1952
+ ex: number;
1953
+ ey: number;
1954
+ eyes: "open" | "closed";
1955
+ extras: OttoExtra[];
1956
+ x0: number;
1957
+ y0: number;
1958
+ w: number;
1959
+ h: number;
1960
+ lamp: string | null;
1961
+ legs: number[] | null;
1962
+ /** Whole-sprite horizontal shift (props included). */
1963
+ dx?: number;
1964
+ /** Water is drawn OVER the bottom three rows. */
1965
+ submerged?: boolean;
1966
+ };
1967
+ trash: (t: number) => {
1968
+ ex: number;
1969
+ ey: number;
1970
+ eyes: "open" | "happy";
1971
+ extras: OttoExtra[];
1972
+ x0: number;
1973
+ y0: number;
1974
+ w: number;
1975
+ h: number;
1976
+ lamp: string | null;
1977
+ legs: number[] | null;
1978
+ /** Whole-sprite horizontal shift (props included). */
1979
+ dx?: number;
1980
+ /** Water is drawn OVER the bottom three rows. */
1981
+ submerged?: boolean;
1982
+ };
1983
+ saved: (t: number) => {
1984
+ y0: number;
1985
+ ex: number;
1986
+ ey: number;
1987
+ eyes: "open" | "happy";
1988
+ legs: number[];
1989
+ extras: OttoExtra[];
1990
+ x0: number;
1991
+ w: number;
1992
+ h: number;
1993
+ lamp: string | null;
1994
+ /** Whole-sprite horizontal shift (props included). */
1995
+ dx?: number;
1996
+ /** Water is drawn OVER the bottom three rows. */
1997
+ submerged?: boolean;
1998
+ };
1999
+ copied: (t: number) => {
2000
+ ex: number;
2001
+ ey: number;
2002
+ eyes: "open" | "happy";
2003
+ extras: OttoExtra[];
2004
+ x0: number;
2005
+ y0: number;
2006
+ w: number;
2007
+ h: number;
2008
+ lamp: string | null;
2009
+ legs: number[] | null;
2010
+ /** Whole-sprite horizontal shift (props included). */
2011
+ dx?: number;
2012
+ /** Water is drawn OVER the bottom three rows. */
2013
+ submerged?: boolean;
2014
+ };
2015
+ charting: (t: number) => {
2016
+ ex: number;
2017
+ ey: number;
2018
+ eyes: "open" | "happy";
2019
+ extras: OttoExtra[];
2020
+ x0: number;
2021
+ y0: number;
2022
+ w: number;
2023
+ h: number;
2024
+ lamp: string | null;
2025
+ legs: number[] | null;
2026
+ /** Whole-sprite horizontal shift (props included). */
2027
+ dx?: number;
2028
+ /** Water is drawn OVER the bottom three rows. */
2029
+ submerged?: boolean;
2030
+ };
2031
+ present: (t: number) => {
2032
+ ex: number;
2033
+ ey: number;
2034
+ eyes: "open" | "closed" | "happy";
2035
+ extras: OttoExtra[];
2036
+ x0: number;
2037
+ y0: number;
2038
+ w: number;
2039
+ h: number;
2040
+ lamp: string | null;
2041
+ legs: number[] | null;
2042
+ /** Whole-sprite horizontal shift (props included). */
2043
+ dx?: number;
2044
+ /** Water is drawn OVER the bottom three rows. */
2045
+ submerged?: boolean;
2046
+ };
2047
+ lift: (t: number) => {
2048
+ y0: number;
2049
+ eyes: "happy";
2050
+ legs: number[];
2051
+ extras: OttoExtra[];
2052
+ x0: number;
2053
+ w: number;
2054
+ h: number;
2055
+ lamp: string | null;
2056
+ /** Whole-sprite horizontal shift (props included). */
2057
+ dx?: number;
2058
+ /** Eye offsets. */
2059
+ ex?: number;
2060
+ ey?: number;
2061
+ /** Water is drawn OVER the bottom three rows. */
2062
+ submerged?: boolean;
2063
+ };
2064
+ carry: (t: number) => {
2065
+ y0: number;
2066
+ ex: number;
2067
+ legs: number[];
2068
+ extras: OttoExtra[];
2069
+ x0: number;
2070
+ w: number;
2071
+ h: number;
2072
+ eyes: OttoEyes;
2073
+ lamp: string | null;
2074
+ /** Whole-sprite horizontal shift (props included). */
2075
+ dx?: number;
2076
+ ey?: number;
2077
+ /** Water is drawn OVER the bottom three rows. */
2078
+ submerged?: boolean;
2079
+ };
2080
+ hug: (t: number) => {
2081
+ y0: number;
2082
+ ey: number;
2083
+ eyes: "closed" | "happy";
2084
+ extras: OttoExtra[];
2085
+ x0: number;
2086
+ w: number;
2087
+ h: number;
2088
+ lamp: string | null;
2089
+ legs: number[] | null;
2090
+ /** Whole-sprite horizontal shift (props included). */
2091
+ dx?: number;
2092
+ /** Eye offsets. */
2093
+ ex?: number;
2094
+ /** Water is drawn OVER the bottom three rows. */
2095
+ submerged?: boolean;
2096
+ };
2097
+ lean: (t: number) => {
2098
+ ex: number;
2099
+ eyes: "open" | "closed";
2100
+ legs: number[];
2101
+ extras: OttoExtra[];
2102
+ x0: number;
2103
+ y0: number;
2104
+ w: number;
2105
+ h: number;
2106
+ lamp: string | null;
2107
+ /** Whole-sprite horizontal shift (props included). */
2108
+ dx?: number;
2109
+ ey?: number;
2110
+ /** Water is drawn OVER the bottom three rows. */
2111
+ submerged?: boolean;
2112
+ };
2113
+ point: (t: number) => {
2114
+ y0: number;
2115
+ ex: number;
2116
+ ey: number;
2117
+ eyes: "open" | "happy";
2118
+ legs: number[];
2119
+ extras: OttoExtra[];
2120
+ x0: number;
2121
+ w: number;
2122
+ h: number;
2123
+ lamp: string | null;
2124
+ /** Whole-sprite horizontal shift (props included). */
2125
+ dx?: number;
2126
+ /** Water is drawn OVER the bottom three rows. */
2127
+ submerged?: boolean;
2128
+ };
2129
+ static: () => {
2130
+ x0: number;
2131
+ y0: number;
2132
+ w: number;
2133
+ h: number;
2134
+ eyes: OttoEyes;
2135
+ lamp: string | null;
2136
+ legs: number[] | null;
2137
+ /** Whole-sprite horizontal shift (props included). */
2138
+ dx?: number;
2139
+ /** Eye offsets. */
2140
+ ex?: number;
2141
+ ey?: number;
2142
+ extras?: OttoExtra[];
2143
+ /** Water is drawn OVER the bottom three rows. */
2144
+ submerged?: boolean;
2145
+ };
2146
+ };
2147
+ /** Where a held object sits, in grid cells (may run past the 16×16 grid). */
2148
+ export interface OttoAnchor {
2149
+ x: number;
2150
+ y: number;
2151
+ /** Draw the object over Otto (true) or behind the arms (false). */
2152
+ over: boolean;
2153
+ }
2154
+ /**
2155
+ * The pairing poses' object anchors at tick `t`, for a 7×7-cell object — a
2156
+ * tool icon tile. Bobs follow the pose so the object moves with the hands.
2157
+ */
2158
+ export declare const OTTO_ANCHORS: Partial<Record<OttoState, (t: number) => OttoAnchor>>;
2159
+ /** The object size OTTO_ANCHORS is drawn for, in cells. */
2160
+ export declare const OTTO_ANCHOR_SIZE = 7;
2161
+ export type OttoState = keyof typeof OTTO_STATES;
2162
+ export declare const OTTO_NOTES: Record<OttoState, string>;
2163
+ /** Every animated state, in the mockup's order (`static` excluded). */
2164
+ export declare const OTTO_STATE_NAMES: ("map" | "keys" | "progress" | "copied" | "pro" | "idle" | "success" | "error" | "warning" | "ghost" | "happy" | "thinking" | "sleep" | "peek" | "typing" | "debugging" | "building" | "carrying" | "pushing" | "sweeping" | "juggling" | "wizard" | "conducting" | "beacon" | "notification" | "disconnected" | "dizzy" | "overheated" | "confused" | "stare" | "walking" | "goingaway" | "eureka" | "grooving" | "hatmishap" | "lowbattery" | "wake" | "builder" | "mini" | "minityping" | "happydance" | "jumping" | "loading" | "hourglass" | "waiting" | "syncing" | "downloading" | "uploading" | "connecting" | "scanning" | "searching" | "empty" | "shrug" | "fishing" | "listening" | "tumbleweed" | "crash" | "panic" | "sos" | "offline" | "timeout" | "locked" | "unlocked" | "denied" | "broken" | "sad" | "rain" | "sick" | "flood" | "bug" | "alarm" | "frozen" | "snail" | "angry" | "nervous" | "puzzled" | "detective" | "reading" | "celebrate" | "thumbsup" | "party" | "trophy" | "starred" | "love" | "wave" | "bow" | "cool" | "flexing" | "zen" | "recording" | "paused" | "filtering" | "pinned" | "rewind" | "storing" | "printing" | "stopwatch" | "spotlight" | "photo" | "painting" | "disguise" | "talking" | "handshake" | "robot" | "plug" | "gift" | "action" | "guard" | "coffee" | "swimming" | "diving" | "balloon" | "landing" | "spinning" | "bubbles" | "trash" | "saved" | "charting" | "present" | "lift" | "carry" | "hug" | "lean" | "point")[];
2165
+ export interface OttoGroup {
2166
+ id: string;
2167
+ title: string;
2168
+ /** What the group is for, in one line. */
2169
+ blurb: string;
2170
+ states: OttoState[];
2171
+ }
2172
+ /**
2173
+ * The states by job. Every animated state is in exactly one group; a tool
2174
+ * picks from the group that matches the moment (an empty list shows an
2175
+ * `empty` group state, a failed request a `trouble` one, and so on).
2176
+ */
2177
+ export declare const OTTO_GROUPS: ReadonlyArray<OttoGroup>;
2178
+ /** When to reach for each state — the moment in a tool it was drawn for. */
2179
+ export declare const OTTO_USES: Record<OttoState, string>;
2180
+ /** The demo reel: [state, frames]. */
2181
+ export declare const OTTO_REEL: ReadonlyArray<readonly [OttoState, number]>;
2182
+ /** Which reel state plays at tick `t`, and how far into it we are. */
2183
+ export declare function ottoReel(t: number): {
2184
+ state: OttoState;
2185
+ local: number;
2186
+ };
2187
+ /**
2188
+ * One frame of one state as a 16×16 grid of palette keys (`.` = transparent).
2189
+ * Look colours up in `OTTO_PALETTE`.
2190
+ */
2191
+ export declare function renderOttoFrame(state: OttoState, t: number, opts?: OttoRenderOptions): string[][];
2192
+ /** A horizontal run of one colour — what the renderer actually draws. */
2193
+ export interface OttoRun {
2194
+ x: number;
2195
+ y: number;
2196
+ w: number;
2197
+ color: string;
2198
+ }
2199
+ /**
2200
+ * Run-length encode a frame into coloured spans, skipping transparency. A
2201
+ * 16×16 frame is ~256 cells but only ~40–70 runs, which is what keeps a
2202
+ * screen full of animating sprites cheap on Fabric.
2203
+ */
2204
+ export declare function ottoRuns(grid: string[][]): OttoRun[];
2205
+ //# sourceMappingURL=ottoEngine.d.ts.map