@almadar/std 16.182.0 → 16.183.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 (30) hide show
  1. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +2 -2
  2. package/behaviors/lolo/ui/game/atoms/std-fx-trail.lolo +63 -0
  3. package/behaviors/lolo/ui/game/atoms/std-gate-lock.lolo +96 -0
  4. package/behaviors/lolo/ui/game/atoms/std-lives.lolo +121 -0
  5. package/behaviors/lolo/ui/game/atoms/std-patrol-hazard.lolo +96 -0
  6. package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +164 -0
  7. package/behaviors/lolo/ui/learning/atoms/std-learn-slope-probe.lolo +117 -0
  8. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +18 -0
  9. package/behaviors/registry/infra/atoms/std-migration-job.orb +2 -2
  10. package/behaviors/registry/ui/game/atoms/std-fx-trail.orb +376 -0
  11. package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +852 -0
  12. package/behaviors/registry/ui/game/atoms/std-lives.orb +739 -0
  13. package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +768 -0
  14. package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +1060 -0
  15. package/behaviors/registry/ui/learning/atoms/std-learn-slope-probe.orb +908 -0
  16. package/dist/behaviors/exports-reader.js +2674 -2410
  17. package/dist/behaviors/functions/index.d.ts +534 -1
  18. package/dist/behaviors/functions/index.js +2657 -2411
  19. package/dist/behaviors/index.d.ts +1 -1
  20. package/dist/behaviors/index.js +2675 -2411
  21. package/dist/behaviors/query.js +2674 -2410
  22. package/dist/behaviors-embeddings.hash.json +3 -3
  23. package/dist/behaviors-embeddings.json +294 -270
  24. package/dist/behaviors-registry.json +1873 -390
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +2675 -2411
  27. package/dist/knob-embeddings.hash.json +3 -3
  28. package/dist/knob-embeddings.json +1 -1
  29. package/dist/registry/factory-signatures.json +1 -1
  30. package/package.json +2 -2
@@ -0,0 +1,768 @@
1
+ {
2
+ "description": "Headless patrol-hazard mechanic for side-view boards: moves each configured patrol back and forth along its [x0, x1] beat at its own speed (33ms tick, ping-pong with clamped turnarounds), tracks the player position off the body authority's BODY_MOVED, and emits PATROL_HIT once per contact — a per-patrol hit flag re-arms only after the player separates, so damage rules stay sparse (when two patrols connect on the same tick the first reports; the other reports on the next tick). Patrols live on a [runtime, shared] entity for the render layer (boards draw them as markers/sprites); damage, lives, and respawn stay downstream (std-lives) — this atom simulates, it never judges. Renders nothing.",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M0PCAKKXX0TFABTMPC8BNH64": {
6
+ "bakedName": "PatrolState",
7
+ "curName": "PatrolState",
8
+ "id": "ent_01M0PCAKKXX0TFABTMPC8BNH64",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M0PCAKKX4Q8XWSYERBAF5HQ2": {
14
+ "bakedName": "RESTART",
15
+ "curName": "RESTART",
16
+ "id": "evt_01M0PCAKKX4Q8XWSYERBAF5HQ2",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6",
20
+ "renames": []
21
+ },
22
+ "evt_01M0PCAKKXFZTMW79Z96WV5A60": {
23
+ "bakedName": "INIT",
24
+ "curName": "INIT",
25
+ "id": "evt_01M0PCAKKXFZTMW79Z96WV5A60",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6",
29
+ "renames": []
30
+ },
31
+ "evt_01M0PCAKKXG9B0VPZMP3H1B5F9": {
32
+ "bakedName": "PATROL_HIT",
33
+ "curName": "PATROL_HIT",
34
+ "id": "evt_01M0PCAKKXG9B0VPZMP3H1B5F9",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6",
38
+ "renames": []
39
+ },
40
+ "evt_01M0PCAKKXZGA2QS6J3G9MZTPJ": {
41
+ "bakedName": "BODY_MOVED",
42
+ "curName": "BODY_MOVED",
43
+ "id": "evt_01M0PCAKKXZGA2QS6J3G9MZTPJ",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6",
47
+ "renames": []
48
+ },
49
+ "orb_01M0PCAKKX0Z1Y4YYMHYN88XSB": {
50
+ "bakedName": "PatrolHazardOrbital",
51
+ "curName": "PatrolHazardOrbital",
52
+ "id": "orb_01M0PCAKKX0Z1Y4YYMHYN88XSB",
53
+ "kind": "orbital",
54
+ "owner": "workspace",
55
+ "renames": []
56
+ },
57
+ "pag_01M0PCAKKYG6SZ7JK2WYNR99H2": {
58
+ "bakedName": "PatrolHazardPage",
59
+ "curName": "PatrolHazardPage",
60
+ "id": "pag_01M0PCAKKYG6SZ7JK2WYNR99H2",
61
+ "kind": "page",
62
+ "owner": "workspace",
63
+ "renames": []
64
+ },
65
+ "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6": {
66
+ "bakedName": "PatrolHazard",
67
+ "curName": "PatrolHazard",
68
+ "id": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6",
69
+ "kind": "trait",
70
+ "owner": "workspace",
71
+ "renames": []
72
+ }
73
+ },
74
+ "schemaVersion": 1
75
+ },
76
+ "name": "std-patrol-hazard",
77
+ "orbitals": [
78
+ {
79
+ "entity": {
80
+ "fields": [
81
+ {
82
+ "name": "id",
83
+ "required": true,
84
+ "type": "string"
85
+ },
86
+ {
87
+ "default": [],
88
+ "items": {
89
+ "properties": {
90
+ "dir": {
91
+ "name": "dir",
92
+ "required": false,
93
+ "type": "number"
94
+ },
95
+ "hit": {
96
+ "name": "hit",
97
+ "required": false,
98
+ "type": "boolean"
99
+ },
100
+ "id": {
101
+ "name": "id",
102
+ "required": true,
103
+ "type": "string"
104
+ },
105
+ "speed": {
106
+ "name": "speed",
107
+ "required": true,
108
+ "type": "number"
109
+ },
110
+ "touching": {
111
+ "name": "touching",
112
+ "required": false,
113
+ "type": "boolean"
114
+ },
115
+ "x": {
116
+ "name": "x",
117
+ "required": false,
118
+ "type": "number"
119
+ },
120
+ "x0": {
121
+ "name": "x0",
122
+ "required": true,
123
+ "type": "number"
124
+ },
125
+ "x1": {
126
+ "name": "x1",
127
+ "required": true,
128
+ "type": "number"
129
+ },
130
+ "y": {
131
+ "name": "y",
132
+ "required": true,
133
+ "type": "number"
134
+ }
135
+ },
136
+ "type": "object"
137
+ },
138
+ "name": "patrols",
139
+ "type": "array"
140
+ },
141
+ {
142
+ "default": 0.0,
143
+ "name": "px",
144
+ "type": "number"
145
+ },
146
+ {
147
+ "default": 0.0,
148
+ "name": "py",
149
+ "type": "number"
150
+ }
151
+ ],
152
+ "id": "ent_01M0PCAKKXX0TFABTMPC8BNH64",
153
+ "name": "PatrolState",
154
+ "persistence": "runtime",
155
+ "shared": true
156
+ },
157
+ "id": "orb_01M0PCAKKX0Z1Y4YYMHYN88XSB",
158
+ "name": "PatrolHazardOrbital",
159
+ "pages": [
160
+ {
161
+ "id": "pag_01M0PCAKKYG6SZ7JK2WYNR99H2",
162
+ "name": "PatrolHazardPage",
163
+ "path": "/patrol-hazard",
164
+ "traits": [
165
+ {
166
+ "ref": "PatrolHazard",
167
+ "refId": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6"
168
+ }
169
+ ]
170
+ }
171
+ ],
172
+ "traits": [
173
+ {
174
+ "category": "lifecycle",
175
+ "config": {
176
+ "hitRadius": {
177
+ "default": 0.7,
178
+ "description": "Per-axis distance (world units) within which a patrol counts as touching the player; smaller values demand precise contact, larger values forgive.",
179
+ "label": "Hit Radius",
180
+ "tier": "domain",
181
+ "type": "number"
182
+ },
183
+ "patrols": {
184
+ "default": [],
185
+ "description": "One row per patroller: id, the [x0, x1] beat it walks, its fixed y, and its speed in units/s. Current x/dir/touching/hit are stamped at runtime.",
186
+ "items": {
187
+ "properties": {
188
+ "dir": {
189
+ "name": "dir",
190
+ "required": false,
191
+ "type": "number"
192
+ },
193
+ "hit": {
194
+ "name": "hit",
195
+ "required": false,
196
+ "type": "boolean"
197
+ },
198
+ "id": {
199
+ "name": "id",
200
+ "required": true,
201
+ "type": "string"
202
+ },
203
+ "speed": {
204
+ "name": "speed",
205
+ "required": true,
206
+ "type": "number"
207
+ },
208
+ "touching": {
209
+ "name": "touching",
210
+ "required": false,
211
+ "type": "boolean"
212
+ },
213
+ "x": {
214
+ "name": "x",
215
+ "required": false,
216
+ "type": "number"
217
+ },
218
+ "x0": {
219
+ "name": "x0",
220
+ "required": true,
221
+ "type": "number"
222
+ },
223
+ "x1": {
224
+ "name": "x1",
225
+ "required": true,
226
+ "type": "number"
227
+ },
228
+ "y": {
229
+ "name": "y",
230
+ "required": true,
231
+ "type": "number"
232
+ }
233
+ },
234
+ "type": "object"
235
+ },
236
+ "label": "Patrols",
237
+ "tier": "domain",
238
+ "type": "[Patrol]"
239
+ },
240
+ "playerSpawnX": {
241
+ "default": 0.0,
242
+ "description": "Player x assumed before the first BODY_MOVED arrives (match the body authority's spawn).",
243
+ "label": "Player Spawn X",
244
+ "tier": "domain",
245
+ "type": "number"
246
+ },
247
+ "playerSpawnY": {
248
+ "default": 0.0,
249
+ "description": "Player y assumed before the first BODY_MOVED arrives.",
250
+ "label": "Player Spawn Y",
251
+ "tier": "domain",
252
+ "type": "number"
253
+ },
254
+ "running": {
255
+ "default": true,
256
+ "description": "When true the 33ms tick moves patrols and tests contact; toggle to freeze every patrol in place.",
257
+ "label": "Running",
258
+ "tier": "domain",
259
+ "type": "boolean"
260
+ }
261
+ },
262
+ "emits": [
263
+ {
264
+ "description": "A patrol made contact with the player this tick; fires once per contact and re-arms only after separation — boards route it to their damage rule (std-lives DAMAGE).",
265
+ "event": "PATROL_HIT",
266
+ "eventId": "evt_01M0PCAKKXG9B0VPZMP3H1B5F9",
267
+ "payloadSchema": [
268
+ {
269
+ "name": "id",
270
+ "required": true,
271
+ "type": "string"
272
+ },
273
+ {
274
+ "name": "x",
275
+ "required": true,
276
+ "type": "number"
277
+ },
278
+ {
279
+ "name": "y",
280
+ "required": true,
281
+ "type": "number"
282
+ }
283
+ ],
284
+ "scope": "external",
285
+ "tier": "domain"
286
+ }
287
+ ],
288
+ "entityContract": {
289
+ "provides": [
290
+ "patrols",
291
+ "px",
292
+ "py"
293
+ ],
294
+ "requires": []
295
+ },
296
+ "entityRebindable": true,
297
+ "entityRefIds": {
298
+ "PatrolState": "ent_01M0PCAKKXX0TFABTMPC8BNH64"
299
+ },
300
+ "id": "trt_01M0PCAKKXTHKSQ9FKTMSFDTQ6",
301
+ "linkedEntity": "PatrolState",
302
+ "linkedEntityId": "ent_01M0PCAKKXX0TFABTMPC8BNH64",
303
+ "name": "PatrolHazard",
304
+ "scope": "instance",
305
+ "stateMachine": {
306
+ "events": [
307
+ {
308
+ "id": "evt_01M0PCAKKXFZTMW79Z96WV5A60",
309
+ "key": "INIT",
310
+ "name": "Initialize"
311
+ },
312
+ {
313
+ "id": "evt_01M0PCAKKXZGA2QS6J3G9MZTPJ",
314
+ "key": "BODY_MOVED",
315
+ "name": "Body Moved",
316
+ "payloadSchema": [
317
+ {
318
+ "name": "x",
319
+ "required": true,
320
+ "type": "number"
321
+ },
322
+ {
323
+ "name": "y",
324
+ "required": true,
325
+ "type": "number"
326
+ },
327
+ {
328
+ "name": "vx",
329
+ "required": true,
330
+ "type": "number"
331
+ },
332
+ {
333
+ "name": "vy",
334
+ "required": true,
335
+ "type": "number"
336
+ },
337
+ {
338
+ "name": "grounded",
339
+ "required": true,
340
+ "type": "boolean"
341
+ },
342
+ {
343
+ "name": "skating",
344
+ "required": true,
345
+ "type": "boolean"
346
+ },
347
+ {
348
+ "name": "speed",
349
+ "required": true,
350
+ "type": "number"
351
+ }
352
+ ]
353
+ },
354
+ {
355
+ "id": "evt_01M0PCAKKX4Q8XWSYERBAF5HQ2",
356
+ "key": "RESTART",
357
+ "name": "Restart",
358
+ "payloadSchema": [
359
+ {
360
+ "name": "id",
361
+ "type": "string"
362
+ }
363
+ ]
364
+ },
365
+ {
366
+ "description": "A patrol made contact with the player this tick; fires once per contact and re-arms only after separation — boards route it to their damage rule (std-lives DAMAGE).",
367
+ "id": "evt_01M0PCAKKXG9B0VPZMP3H1B5F9",
368
+ "key": "PATROL_HIT",
369
+ "name": "Patrol Hit",
370
+ "payloadSchema": [
371
+ {
372
+ "name": "id",
373
+ "required": true,
374
+ "type": "string"
375
+ },
376
+ {
377
+ "name": "x",
378
+ "required": true,
379
+ "type": "number"
380
+ },
381
+ {
382
+ "name": "y",
383
+ "required": true,
384
+ "type": "number"
385
+ }
386
+ ],
387
+ "tier": "domain"
388
+ }
389
+ ],
390
+ "states": [
391
+ {
392
+ "isInitial": true,
393
+ "name": "active"
394
+ }
395
+ ],
396
+ "transitions": [
397
+ {
398
+ "effects": [
399
+ [
400
+ "set",
401
+ "@entity.patrols",
402
+ [
403
+ "array/map",
404
+ "@config.patrols",
405
+ [
406
+ "fn",
407
+ "p",
408
+ [
409
+ "object/merge",
410
+ "@p",
411
+ {
412
+ "dir": 1.0,
413
+ "hit": false,
414
+ "touching": false,
415
+ "x": [
416
+ "object/get",
417
+ "@p",
418
+ "x0"
419
+ ]
420
+ }
421
+ ]
422
+ ]
423
+ ]
424
+ ],
425
+ [
426
+ "set",
427
+ "@entity.px",
428
+ "@config.playerSpawnX"
429
+ ],
430
+ [
431
+ "set",
432
+ "@entity.py",
433
+ "@config.playerSpawnY"
434
+ ]
435
+ ],
436
+ "event": "INIT",
437
+ "eventId": "evt_01M0PCAKKXFZTMW79Z96WV5A60",
438
+ "from": "active",
439
+ "to": "active"
440
+ },
441
+ {
442
+ "effects": [
443
+ [
444
+ "set",
445
+ "@entity.px",
446
+ "@payload.x"
447
+ ],
448
+ [
449
+ "set",
450
+ "@entity.py",
451
+ "@payload.y"
452
+ ]
453
+ ],
454
+ "event": "BODY_MOVED",
455
+ "eventId": "evt_01M0PCAKKXZGA2QS6J3G9MZTPJ",
456
+ "from": "active",
457
+ "to": "active"
458
+ },
459
+ {
460
+ "effects": [
461
+ [
462
+ "set",
463
+ "@entity.patrols",
464
+ [
465
+ "array/map",
466
+ "@config.patrols",
467
+ [
468
+ "fn",
469
+ "p",
470
+ [
471
+ "object/merge",
472
+ "@p",
473
+ {
474
+ "dir": 1.0,
475
+ "hit": false,
476
+ "touching": false,
477
+ "x": [
478
+ "object/get",
479
+ "@p",
480
+ "x0"
481
+ ]
482
+ }
483
+ ]
484
+ ]
485
+ ]
486
+ ]
487
+ ],
488
+ "event": "RESTART",
489
+ "eventId": "evt_01M0PCAKKX4Q8XWSYERBAF5HQ2",
490
+ "from": "active",
491
+ "to": "active"
492
+ }
493
+ ]
494
+ },
495
+ "ticks": [
496
+ {
497
+ "effects": [
498
+ [
499
+ "set",
500
+ "@entity.patrols",
501
+ [
502
+ "array/map",
503
+ "@entity.patrols",
504
+ [
505
+ "fn",
506
+ "p",
507
+ [
508
+ "let",
509
+ [
510
+ [
511
+ "nx",
512
+ [
513
+ "+",
514
+ [
515
+ "object/get",
516
+ "@p",
517
+ "x"
518
+ ],
519
+ [
520
+ "*",
521
+ [
522
+ "*",
523
+ [
524
+ "object/get",
525
+ "@p",
526
+ "dir"
527
+ ],
528
+ [
529
+ "object/get",
530
+ "@p",
531
+ "speed"
532
+ ]
533
+ ],
534
+ 0.033
535
+ ]
536
+ ]
537
+ ]
538
+ ],
539
+ [
540
+ "let",
541
+ [
542
+ [
543
+ "overshoot",
544
+ [
545
+ ">",
546
+ "@nx",
547
+ [
548
+ "object/get",
549
+ "@p",
550
+ "x1"
551
+ ]
552
+ ]
553
+ ],
554
+ [
555
+ "undershoot",
556
+ [
557
+ "<",
558
+ "@nx",
559
+ [
560
+ "object/get",
561
+ "@p",
562
+ "x0"
563
+ ]
564
+ ]
565
+ ]
566
+ ],
567
+ [
568
+ "let",
569
+ [
570
+ [
571
+ "cx",
572
+ [
573
+ "if",
574
+ "@overshoot",
575
+ [
576
+ "object/get",
577
+ "@p",
578
+ "x1"
579
+ ],
580
+ [
581
+ "if",
582
+ "@undershoot",
583
+ [
584
+ "object/get",
585
+ "@p",
586
+ "x0"
587
+ ],
588
+ "@nx"
589
+ ]
590
+ ]
591
+ ],
592
+ [
593
+ "cdir",
594
+ [
595
+ "if",
596
+ "@overshoot",
597
+ -1.0,
598
+ [
599
+ "if",
600
+ "@undershoot",
601
+ 1.0,
602
+ [
603
+ "object/get",
604
+ "@p",
605
+ "dir"
606
+ ]
607
+ ]
608
+ ]
609
+ ]
610
+ ],
611
+ [
612
+ "let",
613
+ [
614
+ [
615
+ "near",
616
+ [
617
+ "and",
618
+ [
619
+ "<=",
620
+ [
621
+ "math/abs",
622
+ [
623
+ "-",
624
+ "@entity.px",
625
+ "@cx"
626
+ ]
627
+ ],
628
+ "@config.hitRadius"
629
+ ],
630
+ [
631
+ "<=",
632
+ [
633
+ "math/abs",
634
+ [
635
+ "-",
636
+ "@entity.py",
637
+ [
638
+ "object/get",
639
+ "@p",
640
+ "y"
641
+ ]
642
+ ]
643
+ ],
644
+ "@config.hitRadius"
645
+ ]
646
+ ]
647
+ ]
648
+ ],
649
+ [
650
+ "object/merge",
651
+ "@p",
652
+ {
653
+ "dir": "@cdir",
654
+ "hit": [
655
+ "and",
656
+ "@near",
657
+ [
658
+ "==",
659
+ [
660
+ "object/get",
661
+ "@p",
662
+ "touching"
663
+ ],
664
+ false
665
+ ]
666
+ ],
667
+ "touching": "@near",
668
+ "x": "@cx"
669
+ }
670
+ ]
671
+ ]
672
+ ]
673
+ ]
674
+ ]
675
+ ]
676
+ ]
677
+ ],
678
+ [
679
+ "let",
680
+ [
681
+ [
682
+ "hits",
683
+ [
684
+ "array/filter",
685
+ "@entity.patrols",
686
+ [
687
+ "fn",
688
+ "p",
689
+ [
690
+ "==",
691
+ [
692
+ "object/get",
693
+ "@p",
694
+ "hit"
695
+ ],
696
+ true
697
+ ]
698
+ ]
699
+ ]
700
+ ]
701
+ ],
702
+ [
703
+ "if",
704
+ [
705
+ ">",
706
+ [
707
+ "array/len",
708
+ "@hits"
709
+ ],
710
+ 0.0
711
+ ],
712
+ [
713
+ "emit",
714
+ "PATROL_HIT",
715
+ {
716
+ "id": [
717
+ "object/get",
718
+ [
719
+ "array/first",
720
+ "@hits"
721
+ ],
722
+ "id"
723
+ ],
724
+ "x": [
725
+ "object/get",
726
+ [
727
+ "array/first",
728
+ "@hits"
729
+ ],
730
+ "x"
731
+ ],
732
+ "y": [
733
+ "object/get",
734
+ [
735
+ "array/first",
736
+ "@hits"
737
+ ],
738
+ "y"
739
+ ]
740
+ }
741
+ ],
742
+ null
743
+ ]
744
+ ]
745
+ ],
746
+ "guard": [
747
+ "and",
748
+ "@config.running",
749
+ [
750
+ ">",
751
+ [
752
+ "array/len",
753
+ "@entity.patrols"
754
+ ],
755
+ 0.0
756
+ ]
757
+ ],
758
+ "interval": 33.0,
759
+ "name": "patrolTick"
760
+ }
761
+ ]
762
+ }
763
+ ]
764
+ }
765
+ ],
766
+ "schemaVersion": 1,
767
+ "version": "1.0.0"
768
+ }