incanto 0.74.0 → 0.76.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 (92) hide show
  1. package/bin/incanto-multiplay.mjs +52 -4
  2. package/dist/2d.d.ts +83 -7
  3. package/dist/2d.js +4 -3
  4. package/dist/3d.d.ts +861 -167
  5. package/dist/3d.js +6 -6
  6. package/dist/{agent8-CHTT4unP.js → agent8-B-bh3n0X.js} +1 -1
  7. package/dist/{audio-player-BOrk4eQx.d.ts → audio-player-BRo2uvG6.d.ts} +23 -2
  8. package/dist/{behavior-J1cmVah0.d.ts → behavior-B_245qRy.d.ts} +15 -1
  9. package/dist/{create-game-ssvGvP7W.js → create-game-BMIPKrQW.js} +84 -8
  10. package/dist/{create-game-BAiA-FjP.js → create-game-Dai5vfVu.js} +80 -11
  11. package/dist/debug.d.ts +1 -1
  12. package/dist/{editor-switch-CFU9mCec.d.ts → editor-switch-Bzt0GzVp.d.ts} +13 -3
  13. package/dist/editor.js +1600 -1529
  14. package/dist/env.d.ts +1 -1
  15. package/dist/{environment-presets-BkqlWewf.js → environment-presets-e_9YCnGu.js} +2361 -104
  16. package/dist/{gameplay-Bxe1sMVT.js → gameplay-Bfff_beb.js} +10919 -6798
  17. package/dist/gameplay.d.ts +573 -31
  18. package/dist/gameplay.js +3 -2
  19. package/dist/index.d.ts +150 -6
  20. package/dist/index.js +6 -6
  21. package/dist/{loader-BAeWMYfF.d.ts → loader-CbkVdXL8.d.ts} +2 -2
  22. package/dist/net.d.ts +2 -2
  23. package/dist/net.js +2 -2
  24. package/dist/{physics-2d-C-SfvjzH.js → physics-2d-Tuf5LAyq.js} +250 -31
  25. package/dist/{physics-3d-rOzeg890.js → physics-3d-C5MOujfQ.js} +673 -51
  26. package/dist/{picking-BMV34Pjl.js → picking-DIwE48sU.js} +10 -7
  27. package/dist/{save-slots-CEUGeLuB.js → pose-ByFB_J3O.js} +217 -11
  28. package/dist/react.d.ts +2 -2
  29. package/dist/react.js +1 -1
  30. package/dist/{register-DRQyZKGU.js → register-7E3P1gz6.js} +191 -430
  31. package/dist/{register-CjociOtt.js → register-B768Qedj.js} +596 -2
  32. package/dist/{replay-B6BbgGM_.js → replay-DrqQ6dZj.js} +133 -18
  33. package/dist/{replay-wZK5Ok5c.d.ts → replay-W5nCw_cU.d.ts} +21 -2
  34. package/dist/{rng-Bb-IutXB.d.ts → rng-BsXZg3D6.d.ts} +7 -0
  35. package/dist/{split-screen-BxZ5rBe7.js → split-screen-B-dIcQsQ.js} +10 -5
  36. package/dist/{split-screen-D6sx8z3Z.d.ts → split-screen-CiLJf2-C.d.ts} +3 -3
  37. package/dist/{sprite-animation-Bz3DHD_4.js → sprite-animation-SQa5gIu2.js} +8 -6
  38. package/dist/{src-CqtvYtSN.js → src-D823V07k.js} +1 -1
  39. package/dist/{test-CEl0y2Sw.js → test-CVbxnXlv.js} +487 -82
  40. package/dist/test.d.ts +90 -12
  41. package/dist/test.js +2 -2
  42. package/dist/vite.js +34 -5
  43. package/editor/assets/{agent8-BlzturGi.js → agent8-DA-I5qhv.js} +1 -1
  44. package/editor/assets/{debug-BMUi8usj.js → debug-99tEPoGm.js} +1 -1
  45. package/editor/assets/index-Db74LZY-.js +11579 -0
  46. package/editor/index.html +1 -1
  47. package/package.json +1 -1
  48. package/schemas/scene.schema.json +1639 -280
  49. package/skills/incanto-3d-character.md +383 -20
  50. package/skills/incanto-audio.md +24 -2
  51. package/skills/incanto-building-2d-games.md +21 -2
  52. package/skills/incanto-building-3d-games.md +38 -3
  53. package/skills/incanto-editor.md +29 -8
  54. package/skills/incanto-environment.md +257 -14
  55. package/skills/incanto-game-feel.md +60 -1
  56. package/skills/incanto-gameplay-behaviors.md +668 -20
  57. package/skills/incanto-hud.md +116 -0
  58. package/skills/incanto-multiplayer.md +141 -2
  59. package/skills/incanto-node-reference.md +398 -16
  60. package/skills/incanto-performance.md +32 -0
  61. package/skills/incanto-physics-and-input.md +241 -13
  62. package/skills/incanto-playtesting.md +2 -2
  63. package/skills/incanto-save-slots.md +61 -2
  64. package/skills/incanto-scene-json-authoring.md +13 -0
  65. package/skills/incanto-verifying-your-game.md +86 -3
  66. package/templates-app/beacon-isle-3d/PROJECT/Status.md +12 -0
  67. package/templates-app/beacon-isle-3d/package.json +1 -1
  68. package/templates-app/beacon-isle-3d/src/game.scene.json +157 -3
  69. package/templates-app/molehill-2d/PROJECT/Status.md +7 -0
  70. package/templates-app/molehill-2d/package.json +1 -1
  71. package/templates-app/molehill-2d/src/game.scene.json +129 -2
  72. package/templates-app/platformer-2d/PROJECT/Status.md +7 -0
  73. package/templates-app/platformer-2d/docs/project-2d-rules.md +3 -2
  74. package/templates-app/platformer-2d/package.json +1 -1
  75. package/templates-app/platformer-2d/src/behaviors.ts +40 -26
  76. package/templates-app/platformer-2d/src/game.scene.json +144 -2
  77. package/templates-app/platformer-2d/verify.ts +18 -1
  78. package/templates-app/star-survivor/PROJECT/Status.md +7 -0
  79. package/templates-app/star-survivor/package.json +1 -1
  80. package/templates-app/star-survivor/src/behaviors.ts +9 -8
  81. package/templates-app/star-survivor/src/game.scene.json +142 -4
  82. package/templates-app/star-survivor/verify.ts +13 -0
  83. package/templates-app/tps-3d/PROJECT/Status.md +6 -0
  84. package/templates-app/tps-3d/package.json +1 -1
  85. package/templates-app/tps-3d/src/game.scene.json +71 -10
  86. package/templates-app/village-quest-3d/PROJECT/Status.md +7 -0
  87. package/templates-app/village-quest-3d/package.json +1 -1
  88. package/templates-app/village-quest-3d/src/behaviors.ts +8 -16
  89. package/templates-app/village-quest-3d/src/grove.scene.json +121 -5
  90. package/templates-app/village-quest-3d/src/village.scene.json +126 -2
  91. package/templates-app/village-quest-3d/verify.ts +52 -2
  92. package/editor/assets/index-CrUCQoaB.js +0 -11046
@@ -189,7 +189,7 @@ Reads: `attachedBone: Object3D | null`
189
189
  | `weight` | `0.85` | number |
190
190
  | `forwardAxis` | `"+z"` | one of: `+x` `-x` `+y` `-y` `+z` `-z` |
191
191
 
192
- Reads: `attachedBone: Object3D | null`
192
+ Reads: `engaged: number` · `attachedBone: Object3D | null`
193
193
 
194
194
  ## `Camera2D` — `incanto/2d`
195
195
 
@@ -207,8 +207,9 @@ Reads: `attachedBone: Object3D | null`
207
207
  | `zoom` | `1` | number |
208
208
  | `limits` | `[]` | array |
209
209
  | `current` | `false` | boolean |
210
+ | `blendSeconds` | `0` | number |
210
211
 
211
- Methods: `clampedCenter(vw, vh)`
212
+ Methods: `makeCurrent(blendSeconds?)` · `clampedCenter(vw, vh)`
212
213
 
213
214
  Reads: `effectiveZoom: number`
214
215
 
@@ -225,10 +226,14 @@ Reads: `effectiveZoom: number`
225
226
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
226
227
  | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
227
228
  | `fov` | `60` | number |
229
+ | `minHorizontalFov` | `0` | number |
228
230
  | `near` | `0.1` | number |
229
231
  | `far` | `1000` | number |
230
232
  | `current` | `false` | boolean |
231
233
  | `lookAt` | `""` | node path |
234
+ | `blendSeconds` | `0` | number |
235
+
236
+ Methods: `makeCurrent(blendSeconds?)` · `viewFov(aspect)`
232
237
 
233
238
  ## `CharacterBody2D` — `incanto/2d`
234
239
 
@@ -248,6 +253,7 @@ Reads: `effectiveZoom: number`
248
253
  | `slopeLimitDeg` | `45` | number |
249
254
  | `stepHeight` | `35` | number |
250
255
  | `collideWithCharacters` | `true` | boolean |
256
+ | `pushes` | `0` | number |
251
257
 
252
258
  Signals: `triggerEnter(other)` · `triggerExit(other)`
253
259
 
@@ -272,6 +278,7 @@ Methods: `moveAndSlide()` · `isOnWall()` · `wallSide()` · `isOnCeiling()` ·
272
278
  | `slopeLimitDeg` | `45` | number |
273
279
  | `stepHeight` | `0.35` | number |
274
280
  | `collideWithCharacters` | `true` | boolean |
281
+ | `pushes` | `0` | number |
275
282
 
276
283
  Signals: `triggerEnter(other)` · `triggerExit(other)`
277
284
 
@@ -295,6 +302,9 @@ Methods: `moveAndSlide()` · `isOnWall()` · `wallNormal()` · `isOnCeiling()`
295
302
  | `dashAction` | `"dash"` | string |
296
303
  | `wallSlideSpeed` | `0` | number |
297
304
  | `wallJumpImpulse` | `[0,0]` | array |
305
+ | `crouchHeight` | `0` | number |
306
+ | `crouchSpeedMultiplier` | `0.5` | number |
307
+ | `crouchAction` | `"crouch"` | string |
298
308
 
299
309
  Signals: `movementStateChanged(state)`
300
310
 
@@ -310,6 +320,7 @@ Signals: `movementStateChanged(state)`
310
320
  | `renderOrder` | `0` | number |
311
321
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
312
322
  | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
323
+ | `enabled` | `true` | boolean |
313
324
  | `view` | `"free"` | one of: `free` `firstPerson` `quarter` `side` |
314
325
  | `camDistance` | `4` | number |
315
326
  | `eyeHeight` | `0.64` | number |
@@ -327,12 +338,29 @@ Signals: `movementStateChanged(state)`
327
338
  | `fallGravity` | `2.5` | number |
328
339
  | `floatHeight` | `0.01` | number |
329
340
  | `stepHeight` | `0.35` | number |
341
+ | `slopeLimitDeg` | `55` | number |
342
+ | `swimSpeed` | `1.6` | number |
343
+ | `swimDepth` | `null` | any JSON — see the skill for the accepted shapes, or number |
344
+ | `diveAction` | `"dive"` | string |
345
+ | `climbSpeed` | `1.5` | number |
346
+ | `ladderGroup` | `"ladder"` | string |
347
+ | `mantleHeight` | `0` | number |
348
+ | `crouchHeight` | `0` | number |
349
+ | `crouchSpeedMultiplier` | `0.5` | number |
350
+ | `crouchAction` | `"crouch"` | string |
351
+ | `dashSpeed` | `0` | number |
352
+ | `dashSeconds` | `0.25` | number |
353
+ | `dashCooldown` | `0` | number |
354
+ | `dashAction` | `"dash"` | string |
355
+ | `dashBackstep` | `false` | boolean |
330
356
  | `mouseLook` | `true` | boolean |
331
357
  | `zoomMin` | `0` | number |
332
358
  | `zoomMax` | `0` | number |
333
359
  | `pitchMin` | `-1.3` | number |
334
360
  | `pitchMax` | `1.5` | number |
361
+ | `pitchStart` | `0` | number |
335
362
  | `cameraCollision` | `true` | boolean |
363
+ | `camera` | `"drive"` | one of: `drive` `none` |
336
364
  | `platformCarry` | `true` | boolean |
337
365
  | `turnSpeed` | `100` | number |
338
366
  | `camLerp` | `25` | number |
@@ -341,9 +369,14 @@ Signals: `movementStateChanged(state)`
341
369
  | `sprintAction` | `"sprint"` | string |
342
370
  | `skinPath` | `"../Skin"` | node path |
343
371
  | `skinYawOffset` | `0` | number |
372
+ | `lockOnAction` | `""` | string |
373
+ | `lockGroup` | `"enemy"` | string |
374
+ | `lockRange` | `12` | number |
344
375
  | `animations` | `{}` | object |
345
376
 
346
- Signals: `movementStateChanged(state)` · `wallJumped`
377
+ Signals: `movementStateChanged(state)` · `wallJumped` · `lockChanged` · `dashed`
378
+
379
+ Methods: `lock(node)` · `unlock()` · `toggleLock()`
347
380
 
348
381
  ## `ColorRect2D` — `incanto/2d`
349
382
 
@@ -382,6 +415,38 @@ Methods: `free()`
382
415
  | `shadowMapSize` | `2048` | number |
383
416
  | `shadowFollowsCamera` | `false` | boolean |
384
417
 
418
+ ## `Flock3D` — `incanto/3d`
419
+
420
+ | Prop | Default | Kind |
421
+ |---|---|---|
422
+ | `position` | `[0,0,0]` | array |
423
+ | `rotation` | `[0,0,0]` | array |
424
+ | `static` | `false` | boolean |
425
+ | `scale` | `[1,1,1]` | array |
426
+ | `visible` | `true` | boolean |
427
+ | `renderOrder` | `0` | number |
428
+ | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
429
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
430
+ | `mesh` | `"box"` | one of: `box` `sphere` `capsule` `plane` `cylinder` `gem` |
431
+ | `size` | `[1,1,1]` | array |
432
+ | `material` | `{}` | object |
433
+ | `transforms` | `[]` | array |
434
+ | `castShadow` | `false` | boolean |
435
+ | `receiveShadow` | `false` | boolean |
436
+ | `collider` | `null` | any JSON — see the skill for the accepted shapes, or object |
437
+ | `count` | `30` | number |
438
+ | `radius` | `20` | number |
439
+ | `height` | `8` | number |
440
+ | `speed` | `6` | number |
441
+ | `turn` | `2.5` | number |
442
+ | `separation` | `1.5` | number |
443
+ | `sight` | `5` | number |
444
+ | `alignment` | `1` | number |
445
+ | `cohesion` | `1` | number |
446
+ | `follow` | `""` | node path |
447
+
448
+ Methods: `boids()`
449
+
385
450
  ## `Flowers3D` — `incanto/3d`
386
451
 
387
452
  | Prop | Default | Kind |
@@ -451,6 +516,7 @@ Methods: `free()`
451
516
  | `zIndex` | `100` | number |
452
517
  | `visible` | `true` | boolean |
453
518
  | `focusNavigation` | `false` | boolean |
519
+ | `letterbox` | `0` | number |
454
520
 
455
521
  Methods: `focusables()` · `focus(widget)`
456
522
 
@@ -489,10 +555,14 @@ Reads: `instanceCount: number`
489
555
  | `renderOrder` | `0` | number |
490
556
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
491
557
  | `visible` | `true` | boolean |
492
- | `type` | `"revolute"` | one of: `fixed` `revolute` `rope` `spring` |
558
+ | `type` | `"revolute"` | one of: `fixed` `revolute` `prismatic` `rope` `spring` |
493
559
  | `target` | `""` | node path · **required** |
494
560
  | `anchor` | `[0,0]` | array |
495
561
  | `targetAnchor` | `[0,0]` | array |
562
+ | `axis` | `[0,1]` | array |
563
+ | `limits` | `[]` | array |
564
+ | `motorSpeed` | `0` | number |
565
+ | `motorStrength` | `20` | number |
496
566
  | `length` | `0` | number |
497
567
  | `stiffness` | `50` | number |
498
568
  | `damping` | `5` | number |
@@ -510,10 +580,14 @@ Reads: `instanceCount: number`
510
580
  | `renderOrder` | `0` | number |
511
581
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
512
582
  | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
513
- | `type` | `"spherical"` | one of: `fixed` `spherical` `rope` `spring` |
583
+ | `type` | `"spherical"` | one of: `fixed` `spherical` `revolute` `prismatic` `rope` `spring` |
514
584
  | `target` | `""` | node path · **required** |
515
585
  | `anchor` | `[0,0,0]` | array |
516
586
  | `targetAnchor` | `[0,0,0]` | array |
587
+ | `axis` | `[0,1,0]` | array |
588
+ | `limits` | `[]` | array |
589
+ | `motorSpeed` | `0` | number |
590
+ | `motorStrength` | `20` | number |
517
591
  | `length` | `0` | number |
518
592
  | `stiffness` | `50` | number |
519
593
  | `damping` | `5` | number |
@@ -743,6 +817,8 @@ Reads: `effectiveRenderOrder: number`
743
817
  | `shimmer` | `0` | number |
744
818
  | `blend` | `"add"` | one of: `add` `normal` |
745
819
  | `maxParticles` | `256` | number |
820
+ | `emitBox` | `[0,0]` | array |
821
+ | `drift` | `[0,0]` | array |
746
822
 
747
823
  Signals: `finished`
748
824
 
@@ -784,6 +860,8 @@ Reads: `aliveCount: number`
784
860
  | `blend` | `"add"` | one of: `add` `normal` |
785
861
  | `depthTest` | `true` | boolean |
786
862
  | `maxParticles` | `256` | number |
863
+ | `emitBox` | `[0,0,0]` | array |
864
+ | `drift` | `[0,0,0]` | array |
787
865
 
788
866
  Signals: `finished`
789
867
 
@@ -791,6 +869,28 @@ Methods: `particles()` · `replay()` · `free()`
791
869
 
792
870
  Reads: `aliveCount: number`
793
871
 
872
+ ## `Ragdoll3D` — `incanto/3d`
873
+
874
+ | Prop | Default | Kind |
875
+ |---|---|---|
876
+ | `position` | `[0,0,0]` | array |
877
+ | `rotation` | `[0,0,0]` | array |
878
+ | `static` | `false` | boolean |
879
+ | `scale` | `[1,1,1]` | array |
880
+ | `visible` | `true` | boolean |
881
+ | `renderOrder` | `0` | number |
882
+ | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
883
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
884
+ | `target` | `"../Skin"` | node path |
885
+ | `mass` | `70` | number |
886
+ | `damping` | `3` | number |
887
+ | `lifetime` | `0` | number |
888
+ | `collide` | `true` | boolean |
889
+
890
+ Signals: `activated` · `reset`
891
+
892
+ Methods: `limbs()` · `activate(pose?)` · `reset()` · `free()`
893
+
794
894
  ## `Respawn` — `incanto`
795
895
 
796
896
  | Prop | Default | Kind |
@@ -854,6 +954,7 @@ Reads: `velocity: number[]`
854
954
  | `angularVelocity` | `[0,0,0]` | array |
855
955
  | `linearDamping` | `0` | number |
856
956
  | `angularDamping` | `0` | number |
957
+ | `buoyancy` | `0` | number |
857
958
 
858
959
  Signals: `triggerEnter(other)` · `triggerExit(other)`
859
960
 
@@ -1113,9 +1214,10 @@ Reads: `pointCount: number`
1113
1214
  | `leafFadeEnd` | `0` | number |
1114
1215
  | `leafShadows` | `true` | boolean |
1115
1216
  | `drape` | `null` | any JSON — see the skill for the accepted shapes, or boolean |
1217
+ | `avoidWater` | `true` | boolean |
1116
1218
  | `terrain` | `""` | node path |
1117
1219
 
1118
- Methods: `free()`
1220
+ Methods: `trunks()` · `free()`
1119
1221
 
1120
1222
  ## `UILayer` — `incanto/2d`
1121
1223
 
@@ -1195,6 +1297,7 @@ Methods: `press()`
1195
1297
  | `draggable` | `false` | boolean |
1196
1298
  | `dropTarget` | `false` | boolean |
1197
1299
  | `charsPerSecond` | `40` | number |
1300
+ | `autoAdvanceSeconds` | `0` | number |
1198
1301
  | `width` | `520` | number |
1199
1302
 
1200
1303
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `lineShown` · `choiceMade` · `dialogueFinished`
@@ -1251,6 +1354,29 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped`
1251
1354
 
1252
1355
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `changed`
1253
1356
 
1357
+ ## `UiMinimap` — `incanto`
1358
+
1359
+ | Prop | Default | Kind |
1360
+ |---|---|---|
1361
+ | `anchor` | `"topLeft"` | one of: `topLeft` `top` `topRight` `left` `center` `right` `bottomLeft` `bottom` `bottomRight` |
1362
+ | `visible` | `true` | boolean |
1363
+ | `focusable` | `false` | boolean |
1364
+ | `draggable` | `false` | boolean |
1365
+ | `dropTarget` | `false` | boolean |
1366
+ | `size` | `160` | number |
1367
+ | `radius` | `40` | number |
1368
+ | `follow` | `""` | node path |
1369
+ | `dots` | `{}` | object |
1370
+ | `heading` | `""` | node path |
1371
+ | `self` | `"#ffffff"` | string |
1372
+ | `dotSize` | `6` | number |
1373
+ | `background` | `"rgba(0,0,0,0.45)"` | string |
1374
+ | `shape` | `"circle"` | one of: `circle` `square` |
1375
+
1376
+ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped`
1377
+
1378
+ Methods: `centre()` · `markers()`
1379
+
1254
1380
  ## `UiMuteToggle` — `incanto`
1255
1381
 
1256
1382
  | Prop | Default | Kind |
@@ -1411,6 +1537,60 @@ Methods: `choose(value)`
1411
1537
 
1412
1538
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `changed`
1413
1539
 
1540
+ ## `UiWaypoint` — `incanto`
1541
+
1542
+ | Prop | Default | Kind |
1543
+ |---|---|---|
1544
+ | `anchor` | `"topLeft"` | one of: `topLeft` `top` `topRight` `left` `center` `right` `bottomLeft` `bottom` `bottomRight` |
1545
+ | `visible` | `true` | boolean |
1546
+ | `focusable` | `false` | boolean |
1547
+ | `draggable` | `false` | boolean |
1548
+ | `dropTarget` | `false` | boolean |
1549
+ | `target` | `""` | node path |
1550
+ | `label` | `""` | string |
1551
+ | `color` | `"#ffd54f"` | string |
1552
+ | `size` | `22` | number |
1553
+ | `distance` | `true` | boolean |
1554
+ | `clamp` | `true` | boolean |
1555
+ | `margin` | `40` | number |
1556
+ | `hideWithin` | `0` | number |
1557
+ | `arriveWithin` | `0` | number |
1558
+ | `from` | `""` | node path |
1559
+
1560
+ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `arrived`
1561
+
1562
+ Methods: `distanceNow()` · `screen(view?)`
1563
+
1564
+ ## `Vehicle3D` — `incanto/3d`
1565
+
1566
+ | Prop | Default | Kind |
1567
+ |---|---|---|
1568
+ | `position` | `[0,0,0]` | array |
1569
+ | `rotation` | `[0,0,0]` | array |
1570
+ | `static` | `false` | boolean |
1571
+ | `scale` | `[1,1,1]` | array |
1572
+ | `visible` | `true` | boolean |
1573
+ | `renderOrder` | `0` | number |
1574
+ | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
1575
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
1576
+ | `wheels` | `[]` | array |
1577
+ | `suspensionStiffness` | `30` | number |
1578
+ | `suspensionCompression` | `2.3` | number |
1579
+ | `suspensionRelaxation` | `3.5` | number |
1580
+ | `maxTravel` | `0.3` | number |
1581
+ | `friction` | `2.5` | number |
1582
+ | `sideFriction` | `1` | number |
1583
+ | `maxSteerDeg` | `32` | number |
1584
+ | `engineForce` | `1500` | number |
1585
+ | `brakeForce` | `40` | number |
1586
+ | `moveAction` | `"move"` | string |
1587
+ | `brakeAction` | `"brake"` | string |
1588
+ | `enabled` | `true` | boolean |
1589
+
1590
+ Methods: `wheel(i)` · `specs()`
1591
+
1592
+ Reads: `body: RigidBody3D` · `maxSteer: number`
1593
+
1414
1594
  ## `VoxelGrid3D` — `incanto/3d`
1415
1595
 
1416
1596
  | Prop | Default | Kind |
@@ -1446,12 +1626,14 @@ Methods: `blockCount()` · `tileAt(x, y, z)` · `setBlocks(blocks)` · `addBlock
1446
1626
  | `opacity` | `0.8` | number |
1447
1627
  | `waveHeight` | `0.04` | number |
1448
1628
  | `waveSpeed` | `1` | number |
1629
+ | `drag` | `1.5` | number |
1449
1630
  | `quality` | `"fancy"` | one of: `fancy` `simple` |
1450
1631
  | `colors` | `{}` | object |
1451
1632
  | `reflection` | `true` | boolean |
1452
1633
  | `reflectionInterval` | `1000` | number |
1453
1634
  | `mirror` | `false` | boolean |
1454
1635
  | `mirrorInterval` | `33` | number |
1636
+ | `ssr` | `true` | boolean |
1455
1637
  | `swellSteepness` | `0.35` | number |
1456
1638
  | `foam` | `true` | boolean |
1457
1639
  | `reflectivity` | `null` | any JSON — see the skill for the accepted shapes, or number |
@@ -1468,13 +1650,16 @@ Methods: `blockCount()` · `tileAt(x, y, z)` · `setBlocks(blocks)` · `addBlock
1468
1650
  | `swellDirectionDeg` | `0` | number |
1469
1651
  | `swellWavelength` | `30` | number |
1470
1652
  | `whitecaps` | `0` | number |
1653
+ | `bed` | `""` | node path |
1654
+ | `wind` | `0` | number |
1655
+ | `choppiness` | `0.85` | number |
1471
1656
  | `preset` | `"custom"` | one of: `custom` `ocean` `pool` `lake` `pond` |
1472
1657
  | `causticsAbove` | `0` | number |
1473
1658
  | `shoreWaves` | `0` | number |
1474
1659
 
1475
1660
  Signals: `entered(body)` · `exited(body)`
1476
1661
 
1477
- Methods: `underwaterAt(camX, camY, camZ)` · `free()` · `heightAt(x, z)`
1662
+ Methods: `underwaterAt(camX, camY, camZ)` · `free()` · `heightAt(x, z)` · `depthAt(x, y, z)`
1478
1663
 
1479
1664
  ## `WaterCutout3D` — `incanto/3d`
1480
1665
 
@@ -1491,12 +1676,76 @@ Methods: `underwaterAt(camX, camY, camZ)` · `free()` · `heightAt(x, z)`
1491
1676
  | `size` | `[2,1,1]` | array |
1492
1677
  | `enabled` | `true` | boolean |
1493
1678
 
1679
+ ## `Weather3D` — `incanto/3d`
1680
+
1681
+ | Prop | Default | Kind |
1682
+ |---|---|---|
1683
+ | `position` | `[0,0,0]` | array |
1684
+ | `rotation` | `[0,0,0]` | array |
1685
+ | `static` | `false` | boolean |
1686
+ | `scale` | `[1,1,1]` | array |
1687
+ | `visible` | `true` | boolean |
1688
+ | `renderOrder` | `0` | number |
1689
+ | `orderGroup` | `"effects"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
1690
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes, or boolean or number |
1691
+ | `preset` | `"custom"` | one of: `custom` `fire` `smoke` `sparks` `fireworks` `explosion` `flash` `lightning` `rain` `snow` `magic` |
1692
+ | `emitting` | `true` | boolean |
1693
+ | `worldSpace` | `false` | boolean |
1694
+ | `rate` | `40` | number |
1695
+ | `burst` | `0` | number |
1696
+ | `lifetime` | `[0.6,1.2]` | array |
1697
+ | `speed` | `[40,120]` | array |
1698
+ | `directionDeg` | `-90` | number |
1699
+ | `spreadDeg` | `30` | number |
1700
+ | `gravity` | `[0,0]` | array |
1701
+ | `drag` | `0` | number |
1702
+ | `sizeStart` | `8` | number |
1703
+ | `sizeEnd` | `2` | number |
1704
+ | `colorStart` | `"#ffffff"` | string |
1705
+ | `colorEnd` | `"#ffffff"` | string |
1706
+ | `paletteColors` | `[]` | array |
1707
+ | `alphaStart` | `1` | number |
1708
+ | `alphaEnd` | `0` | number |
1709
+ | `shimmer` | `0` | number |
1710
+ | `blend` | `"add"` | one of: `add` `normal` |
1711
+ | `depthTest` | `true` | boolean |
1712
+ | `maxParticles` | `256` | number |
1713
+ | `emitBox` | `[0,0,0]` | array |
1714
+ | `drift` | `[0,0,0]` | array |
1715
+ | `kind` | `"rain"` | one of: `rain` `snow` |
1716
+ | `intensity` | `0.6` | number |
1717
+ | `radius` | `20` | number |
1718
+ | `height` | `12` | number |
1719
+ | `wind` | `[0,0]` | array |
1720
+ | `follow` | `""` | node path |
1721
+
1722
+ Signals: `finished`
1723
+
1494
1724
  ## Gameplay behaviors — `incanto/gameplay`
1495
1725
 
1496
1726
  Ready-made `Behavior`s auto-registered by `createGame2D`/`createGame3D` (opt out
1497
1727
  with `gameplay: false`). Attach via `"script": {"name": "...", "props": {...}}` and
1498
1728
  wire their signals through scene `connections`. Full guide: `incanto-gameplay-behaviors.md`.
1499
1729
 
1730
+ ### `Blast`
1731
+
1732
+ | Prop | Default | Kind |
1733
+ |---|---|---|
1734
+ | `enabled` | `true` | boolean |
1735
+ | `radius` | `4` | number |
1736
+ | `damage` | `40` | number |
1737
+ | `falloff` | `"linear"` | one of: `linear` `none` |
1738
+ | `groups` | `""` | string |
1739
+ | `when` | `"died"` | string |
1740
+ | `self` | `false` | boolean |
1741
+ | `throughWalls` | `true` | boolean |
1742
+
1743
+ Signals: `blasted`
1744
+
1745
+ Methods: `blast()`
1746
+
1747
+ Reads: `spent: boolean`
1748
+
1500
1749
  ### `Buoyancy`
1501
1750
 
1502
1751
  | Prop | Default | Kind |
@@ -1522,6 +1771,27 @@ Signals: `submerged` · `surfaced`
1522
1771
 
1523
1772
  Methods: `shake(magnitude, seconds?)`
1524
1773
 
1774
+ ### `Carry`
1775
+
1776
+ | Prop | Default | Kind |
1777
+ |---|---|---|
1778
+ | `enabled` | `true` | boolean |
1779
+ | `action` | `"grab"` | string |
1780
+ | `throwAction` | `"throw"` | string |
1781
+ | `range` | `2.2` | number |
1782
+ | `group` | `"carryable"` | string |
1783
+ | `maxMass` | `30` | number |
1784
+ | `holdDistance` | `1.2` | number |
1785
+ | `holdHeight` | `0.5` | number |
1786
+ | `throwSpeed` | `9` | number |
1787
+ | `gain` | `14` | number |
1788
+ | `inheritMotion` | `1` | number |
1789
+ | `facePath` | `"../Skin"` | node path |
1790
+
1791
+ Signals: `grabbed` · `dropped` · `thrown`
1792
+
1793
+ Methods: `grab()` · `drop()` · `throw()`
1794
+
1525
1795
  ### `Chase`
1526
1796
 
1527
1797
  | Prop | Default | Kind |
@@ -1534,12 +1804,27 @@ Methods: `shake(magnitude, seconds?)`
1534
1804
  | `stopRange` | `0` | number |
1535
1805
  | `loseRange` | `0` | number |
1536
1806
  | `moveParent` | `false` | boolean |
1807
+ | `requireSight` | `false` | boolean |
1537
1808
  | `ground` | `null` | any JSON — see the skill for the accepted shapes, or boolean |
1538
1809
  | `facePath` | `""` | node path |
1539
1810
  | `turnSpeed` | `100` | number |
1540
1811
 
1541
1812
  Signals: `reachedTarget` · `lostTarget`
1542
1813
 
1814
+ Reads: `chasing: Node | null`
1815
+
1816
+ ### `ChaseCamera`
1817
+
1818
+ | Prop | Default | Kind |
1819
+ |---|---|---|
1820
+ | `enabled` | `true` | boolean |
1821
+ | `target` | `""` | node path · **required** |
1822
+ | `back` | `8` | number |
1823
+ | `up` | `3` | number |
1824
+ | `smoothing` | `0.85` | number |
1825
+
1826
+ Methods: `snap()`
1827
+
1543
1828
  ### `Checkpoint`
1544
1829
 
1545
1830
  | Prop | Default | Kind |
@@ -1552,6 +1837,8 @@ Signals: `reachedTarget` · `lostTarget`
1552
1837
 
1553
1838
  Signals: `activated`
1554
1839
 
1840
+ Methods: `announce()`
1841
+
1555
1842
  ### `Clickable`
1556
1843
 
1557
1844
  | Prop | Default | Kind |
@@ -1585,6 +1872,8 @@ Signals: `changed` · `earned` · `spent` · `refused`
1585
1872
 
1586
1873
  Methods: `canAfford(cost)` · `spend(cost)` · `earn(gain)` · `setAmount(next)` · `announce()`
1587
1874
 
1875
+ Reads: `room: number`
1876
+
1588
1877
  ### `DamageOnContact`
1589
1878
 
1590
1879
  | Prop | Default | Kind |
@@ -1658,10 +1947,27 @@ Methods: `shake(magnitude, seconds?)`
1658
1947
  | `freezeOnEnd` | `true` | boolean |
1659
1948
  | `bannerPath` | `"%Banner"` | node path |
1660
1949
  | `pausePanelPath` | `"%PauseMenu"` | node path |
1950
+ | `titlePanelPath` | `""` | node path |
1951
+ | `saveSlots` | `""` | string |
1661
1952
 
1662
1953
  Signals: `flowChanged`
1663
1954
 
1664
- Methods: `gameOver(text?, color?)` · `win(text?, color?)` · `pause()` · `resume()` · `restart()` · `goToScene(sceneJson, opts?)`
1955
+ Methods: `save(slot?)` · `hasSave(slot?)` · `continueFrom(slot?)` · `screen(path)` · `back()` · `gameOver(text?, color?)` · `win(text?, color?)` · `pause()` · `resume()` · `restart()` · `goToScene(sceneJson, opts?)`
1956
+
1957
+ ### `GroupCamera`
1958
+
1959
+ | Prop | Default | Kind |
1960
+ |---|---|---|
1961
+ | `enabled` | `true` | boolean |
1962
+ | `targets` | `"player"` | string |
1963
+ | `offset` | `[0,12,14]` | array |
1964
+ | `minZoom` | `1` | number |
1965
+ | `maxZoom` | `2.5` | number |
1966
+ | `padding` | `0.25` | number |
1967
+ | `smoothing` | `0.15` | number |
1968
+ | `lookAtGroup` | `true` | boolean |
1969
+
1970
+ Methods: `members()` · `snap()`
1665
1971
 
1666
1972
  ### `Health`
1667
1973
 
@@ -1672,13 +1978,18 @@ Methods: `gameOver(text?, color?)` · `win(text?, color?)` · `pause()` · `resu
1672
1978
  | `regenPerSec` | `0` | number |
1673
1979
  | `invulnerableFor` | `0` | number |
1674
1980
  | `freeOnDeath` | `false` | boolean |
1981
+ | `knockback` | `0` | number |
1982
+ | `knockbackSeconds` | `0.15` | number |
1983
+ | `knockUp` | `0` | number |
1984
+ | `staggerSeconds` | `0` | number |
1985
+ | `applyKnockback` | `true` | boolean |
1675
1986
  | `freeParent` | `false` | boolean |
1676
1987
 
1677
- Signals: `damaged(amount, current)` · `healed(amount, current)` · `died` · `revived` · `healthChanged`
1988
+ Signals: `damaged(amount, current)` · `healed(amount, current)` · `died` · `revived` · `healthChanged` · `staggerEnded`
1678
1989
 
1679
- Methods: `damage(n)` · `protect(seconds)` · `heal(n)` · `revive(hp?)` · `reviveFull()` · `kill()` · `announce()`
1990
+ Methods: `takeLift()` · `damage(n, from?)` · `protect(seconds)` · `heal(n)` · `revive(hp?)` · `reviveFull()` · `kill()` · `announce()`
1680
1991
 
1681
- Reads: `isDead: boolean` · `invulnerableRemaining: number`
1992
+ Reads: `staggered: boolean` · `knocked: boolean` · `kickVelocity: number[]` · `isDead: boolean` · `invulnerableRemaining: number`
1682
1993
 
1683
1994
  ### `Interactable`
1684
1995
 
@@ -1707,6 +2018,25 @@ Signals: `expired`
1707
2018
 
1708
2019
  Methods: `startTimer()`
1709
2020
 
2021
+ ### `Mount`
2022
+
2023
+ | Prop | Default | Kind |
2024
+ |---|---|---|
2025
+ | `enabled` | `true` | boolean |
2026
+ | `rider` | `""` | node path · **required** |
2027
+ | `steed` | `".."` | node path |
2028
+ | `drive` | `""` | node path |
2029
+ | `walk` | `""` | node path |
2030
+ | `skin` | `"Skin"` | string |
2031
+ | `saddle` | `""` | node path |
2032
+ | `skinOnSaddle` | `[0,0,0]` | array |
2033
+ | `skinOnRider` | `[0,0,0]` | array |
2034
+ | `dismountAt` | `[1.8,0.3,0]` | array |
2035
+
2036
+ Signals: `mounted` · `dismounted`
2037
+
2038
+ Methods: `mount()` · `dismount()` · `toggle()`
2039
+
1710
2040
  ### `MoveTo`
1711
2041
 
1712
2042
  | Prop | Default | Kind |
@@ -1719,7 +2049,7 @@ Methods: `startTimer()`
1719
2049
 
1720
2050
  Signals: `arrived`
1721
2051
 
1722
- Methods: `start()`
2052
+ Methods: `start()` · `finish()`
1723
2053
 
1724
2054
  ### `Oscillate`
1725
2055
 
@@ -1739,12 +2069,14 @@ Methods: `start()`
1739
2069
  | `speed` | `120` | number |
1740
2070
  | `loop` | `false` | boolean |
1741
2071
  | `moveParent` | `false` | boolean |
2072
+ | `path` | `""` | node path |
2073
+ | `autoStart` | `true` | boolean |
1742
2074
  | `facePath` | `""` | node path |
1743
2075
  | `turnSpeed` | `100` | number |
1744
2076
 
1745
2077
  Signals: `waypointReached` · `arrived`
1746
2078
 
1747
- Methods: `setPath(waypoints)` · `stop()`
2079
+ Methods: `setPath(waypoints)` · `start()` · `stop()`
1748
2080
 
1749
2081
  Reads: `moving: boolean`
1750
2082
 
@@ -1764,6 +2096,18 @@ Reads: `moving: boolean`
1764
2096
 
1765
2097
  Signals: `reachedPoint(index)`
1766
2098
 
2099
+ ### `Phases`
2100
+
2101
+ | Prop | Default | Kind |
2102
+ |---|---|---|
2103
+ | `enabled` | `true` | boolean |
2104
+ | `at` | `[]` | array |
2105
+ | `health` | `""` | node path |
2106
+
2107
+ Signals: `phaseChanged` · `phase2` · `phase3` · `phase4` · `phase5`
2108
+
2109
+ Methods: `read(current, max)` · `announce()`
2110
+
1767
2111
  ### `Pickup`
1768
2112
 
1769
2113
  | Prop | Default | Kind |
@@ -1782,7 +2126,7 @@ Signals: `collected(value, other)`
1782
2126
  | `enabled` | `true` | boolean |
1783
2127
  | `prefabs` | `""` | string |
1784
2128
 
1785
- Methods: `names()` · `make(name)`
2129
+ Methods: `names()` · `template(name)` · `make(name)`
1786
2130
 
1787
2131
  ### `Projectile`
1788
2132
 
@@ -1793,7 +2137,7 @@ Methods: `names()` · `make(name)`
1793
2137
  | `direction` | `null` | any JSON — see the skill for the accepted shapes, or array or string |
1794
2138
  | `gravity` | `0` | number |
1795
2139
 
1796
- Methods: `aim(direction?)`
2140
+ Methods: `aim(direction?, carry?)`
1797
2141
 
1798
2142
  ### `SavePoint`
1799
2143
 
@@ -1806,10 +2150,11 @@ Methods: `aim(direction?)`
1806
2150
  | `scene` | `""` | string |
1807
2151
  | `restoreOnReady` | `false` | boolean |
1808
2152
  | `probeOnReady` | `false` | boolean |
2153
+ | `keep` | `[]` | node path |
1809
2154
 
1810
2155
  Signals: `saved` · `saveFailed` · `restored` · `noSave` · `hasSave`
1811
2156
 
1812
- Methods: `probe()` · `slotScene()` · `save()` · `restore()` · `clear()`
2157
+ Methods: `probe()` · `slotScene()` · `save()` · `restore()` · `clear()` · `announce()`
1813
2158
 
1814
2159
  Reads: `playtime: number`
1815
2160
 
@@ -1828,6 +2173,41 @@ Methods: `addScore(n)` · `setScore(value)` · `loseLife()` · `announce()`
1828
2173
 
1829
2174
  Reads: `won: boolean` · `lost: boolean`
1830
2175
 
2176
+ ### `Shatter`
2177
+
2178
+ | Prop | Default | Kind |
2179
+ |---|---|---|
2180
+ | `enabled` | `true` | boolean |
2181
+ | `pieces` | `8` | number |
2182
+ | `impulse` | `4` | number |
2183
+ | `spin` | `6` | number |
2184
+ | `lifetime` | `2.5` | number |
2185
+ | `when` | `"died"` | string |
2186
+ | `mesh` | `""` | node path |
2187
+ | `free` | `true` | boolean |
2188
+
2189
+ Signals: `shattered`
2190
+
2191
+ Methods: `break()`
2192
+
2193
+ ### `Sight`
2194
+
2195
+ | Prop | Default | Kind |
2196
+ |---|---|---|
2197
+ | `enabled` | `true` | boolean |
2198
+ | `range` | `12` | number |
2199
+ | `coneDeg` | `70` | number |
2200
+ | `targetGroup` | `"player"` | string |
2201
+ | `facingPath` | `"../Skin"` | node path |
2202
+ | `eyeHeight` | `0.6` | number |
2203
+ | `chestHeight` | `0.3` | number |
2204
+ | `fillSeconds` | `0` | number |
2205
+ | `los` | `true` | boolean |
2206
+
2207
+ Signals: `spotted` · `lost`
2208
+
2209
+ Methods: `sees(node)` · `seen()`
2210
+
1831
2211
  ### `Spawner`
1832
2212
 
1833
2213
  | Prop | Default | Kind |
@@ -1853,12 +2233,14 @@ Reads: `liveCount: number`
1853
2233
  |---|---|---|
1854
2234
  | `enabled` | `true` | boolean |
1855
2235
  | `targetGroup` | `"enemy"` | string |
2236
+ | `requireSight` | `false` | boolean |
1856
2237
  | `range` | `6` | number |
1857
2238
  | `damage` | `10` | number |
1858
2239
  | `cooldown` | `0.6` | number |
1859
2240
  | `shelf` | `""` | node path |
1860
2241
  | `prefab` | `""` | string |
1861
2242
  | `muzzle` | `[]` | array |
2243
+ | `arc` | `"flat"` | one of: `flat` `low` `high` |
1862
2244
  | `into` | `""` | node path |
1863
2245
  | `facePath` | `""` | node path |
1864
2246
  | `turnSpeed` | `100` | number |