incanto 0.69.0 → 0.71.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 (147) hide show
  1. package/bin/_behaviors-loader.mjs +22 -0
  2. package/bin/_read-json.mjs +28 -0
  3. package/bin/incanto-assets.mjs +5 -4
  4. package/bin/incanto-check.mjs +58 -31
  5. package/bin/incanto-editor.mjs +128 -5
  6. package/bin/incanto-env.mjs +3 -2
  7. package/bin/incanto-feel.mjs +24 -13
  8. package/bin/incanto-frame.mjs +8 -1
  9. package/bin/incanto-multiplay.mjs +11 -9
  10. package/bin/incanto-new.mjs +105 -10
  11. package/bin/incanto-play.mjs +158 -16
  12. package/bin/incanto-playtest.mjs +66 -23
  13. package/bin/incanto-skills.mjs +14 -2
  14. package/bin/incanto-verify.mjs +121 -102
  15. package/bin/incanto.mjs +3 -2
  16. package/dist/2d.d.ts +296 -34
  17. package/dist/2d.js +4 -4
  18. package/dist/3d.d.ts +157 -9
  19. package/dist/3d.js +8 -8
  20. package/dist/{agent8-CvsfVskX.js → agent8-Cfmd3ar_.js} +61 -8
  21. package/dist/{audio-player-C0j2k-yB.d.ts → audio-player-L8yccdMP.d.ts} +2 -2
  22. package/dist/{behavior-rm8vVzu_.d.ts → behavior-Dcz0fr1S.d.ts} +755 -46
  23. package/dist/{create-game-CwxEDlCm.js → create-game-CH4kt78v.js} +143 -60
  24. package/dist/{create-game-CvJ1wSRP.js → create-game-LCHBLfA4.js} +98 -48
  25. package/dist/debug.d.ts +1 -1
  26. package/dist/debug.js +2 -3
  27. package/dist/diagnostics-Cu85N3tL.d.ts +12 -0
  28. package/dist/{editor-switch-CnIOiyNJ.d.ts → editor-switch-CFU9mCec.d.ts} +22 -13
  29. package/dist/editor.js +1088 -882
  30. package/dist/env.d.ts +1 -1
  31. package/dist/env.js +5 -3
  32. package/dist/{environment-presets-BO-7XoFV.js → environment-presets-99BzP_L-.js} +298 -45
  33. package/dist/{frame-report-Dlq13Gyj.js → frame-report-D-_7YF2G.js} +1 -1
  34. package/dist/{gameplay-D1KixWK8.js → gameplay-CNULJvwh.js} +914 -214
  35. package/dist/gameplay.d.ts +254 -10
  36. package/dist/gameplay.js +2 -2
  37. package/dist/{heightmap-CRK0M4jT.js → heightmap-BYgD5Edk.js} +1 -1
  38. package/dist/index.d.ts +179 -13
  39. package/dist/index.js +10 -12
  40. package/dist/json-CfTjpvW8.js +67 -0
  41. package/dist/{loader-DadV2QCT.d.ts → loader-8-IHvbKD.d.ts} +2 -2
  42. package/dist/net.d.ts +27 -3
  43. package/dist/net.js +2 -2
  44. package/dist/{noise-CGUMx44x.js → noise-D3nPpmFg.js} +1 -1
  45. package/dist/{physics-2d-CF5yyjbj.js → physics-2d-FhrXUc6B.js} +136 -11
  46. package/dist/{physics-3d-DbYaEcZy.js → physics-3d-CFEGxBXZ.js} +104 -23
  47. package/dist/{teardown-CMqFVxO9.js → picking-DVo7fI13.js} +104 -13
  48. package/dist/react.d.ts +2 -2
  49. package/dist/react.js +2 -2
  50. package/dist/{register-DbVArsns.js → register-BYQCBySi.js} +429 -28
  51. package/dist/{register-mmfugpaQ.js → register-DuVdzxbq.js} +594 -831
  52. package/dist/{replay-BEHLDcQV.js → replay-DEvp3kyV.js} +224 -14
  53. package/dist/{replay-BQfkX4x7.d.ts → replay-F7IZHdFR.d.ts} +20 -3
  54. package/dist/{schema-B6ugCV1Q.d.ts → rng-Bb-IutXB.d.ts} +38 -21
  55. package/dist/{rng-DP-SR7eg.js → rng-CDOMybym.js} +22 -0
  56. package/dist/{loader-DZE7B07H.js → save-slots-Bvuh2p_r.js} +4619 -2318
  57. package/dist/{split-screen-Cg76MCV5.d.ts → split-screen-CIYf1zSf.d.ts} +36 -4
  58. package/dist/{split-screen-CauMwu6y.js → split-screen-eULetcg-.js} +159 -26
  59. package/dist/{sprite-animation-CY-mrr1L.js → sprite-animation-CqR2o3SA.js} +39 -8
  60. package/dist/{src-CYEu-_S9.js → src-_jk0qLsS.js} +2 -17
  61. package/dist/test-CmN54kWv.js +4264 -0
  62. package/dist/test.d.ts +639 -30
  63. package/dist/test.js +3 -3
  64. package/dist/touch-BnCyPA0G.js +519 -0
  65. package/dist/vite.d.ts +20 -37
  66. package/dist/vite.js +177 -7
  67. package/dist/{webgl-unavailable-Z5_g8x9H.js → webgl-unavailable-C8aDbGmR.js} +44 -0
  68. package/editor/assets/agent8-yLIEYHbd.js +1 -0
  69. package/editor/assets/{debug-CMULinBW.js → debug-u31w_yhq.js} +2 -2
  70. package/editor/assets/index-DK9xMGpW.js +11046 -0
  71. package/editor/index.html +1 -1
  72. package/package.json +4 -14
  73. package/schemas/scene.schema.json +34 -3
  74. package/skills/incanto-3d-character.md +14 -1
  75. package/skills/incanto-3d-models.md +12 -0
  76. package/skills/incanto-assets.md +9 -1
  77. package/skills/incanto-audio.md +8 -2
  78. package/skills/incanto-behaviors-and-scripts.md +105 -7
  79. package/skills/incanto-building-2d-games.md +97 -10
  80. package/skills/incanto-building-3d-games.md +58 -4
  81. package/skills/incanto-editor.md +46 -7
  82. package/skills/incanto-environment.md +19 -1
  83. package/skills/incanto-game-feel.md +70 -0
  84. package/skills/incanto-gameplay-behaviors.md +172 -20
  85. package/skills/incanto-hud.md +142 -7
  86. package/skills/incanto-localization.md +13 -5
  87. package/skills/incanto-multiplayer.md +83 -3
  88. package/skills/incanto-node-reference.md +239 -59
  89. package/skills/incanto-performance.md +52 -0
  90. package/skills/incanto-physics-and-input.md +123 -24
  91. package/skills/incanto-playtesting.md +112 -2
  92. package/skills/incanto-save-slots.md +217 -7
  93. package/skills/incanto-scene-json-authoring.md +69 -12
  94. package/skills/incanto-verifying-your-game.md +207 -10
  95. package/skills/incanto-web-integration.md +28 -0
  96. package/skills/incanto-your-first-game.md +3 -1
  97. package/templates-app/beacon-isle-3d/generate-world.ts +77 -9
  98. package/templates-app/beacon-isle-3d/package.json +2 -2
  99. package/templates-app/beacon-isle-3d/src/behaviors.ts +22 -0
  100. package/templates-app/beacon-isle-3d/src/game.scene.json +143 -600
  101. package/templates-app/beacon-isle-3d/src/main.ts +11 -1
  102. package/templates-app/beacon-isle-3d/tsconfig.json +1 -1
  103. package/templates-app/beacon-isle-3d/verify.ts +3 -1
  104. package/templates-app/molehill-2d/.incanto/playtest/lost-seed1.json +4277 -0
  105. package/templates-app/molehill-2d/PROJECT/Context.md +58 -0
  106. package/templates-app/molehill-2d/PROJECT/Requirements.md +39 -0
  107. package/templates-app/molehill-2d/PROJECT/Status.md +27 -0
  108. package/templates-app/molehill-2d/PROJECT/Structure.md +48 -0
  109. package/templates-app/molehill-2d/docs/project-2d-rules.md +44 -0
  110. package/templates-app/molehill-2d/index.html +73 -0
  111. package/templates-app/molehill-2d/package.json +23 -0
  112. package/templates-app/molehill-2d/src/behaviors.ts +198 -0
  113. package/templates-app/molehill-2d/src/game.scene.json +1205 -0
  114. package/templates-app/molehill-2d/src/main.ts +41 -0
  115. package/templates-app/molehill-2d/tsconfig.json +13 -0
  116. package/templates-app/molehill-2d/verify.ts +247 -0
  117. package/templates-app/molehill-2d/vite.config.ts +12 -0
  118. package/templates-app/platformer-2d/package.json +2 -2
  119. package/templates-app/platformer-2d/src/game.scene.json +178 -986
  120. package/templates-app/platformer-2d/src/main.ts +11 -1
  121. package/templates-app/platformer-2d/tsconfig.json +1 -1
  122. package/templates-app/star-survivor/package.json +2 -2
  123. package/templates-app/star-survivor/src/game.scene.json +43 -216
  124. package/templates-app/star-survivor/src/main.ts +11 -1
  125. package/templates-app/star-survivor/tsconfig.json +1 -1
  126. package/templates-app/tps-3d/PROJECT/Context.md +1 -1
  127. package/templates-app/tps-3d/package.json +2 -2
  128. package/templates-app/tps-3d/src/behaviors.ts +19 -1
  129. package/templates-app/tps-3d/src/game.scene.json +66 -263
  130. package/templates-app/tps-3d/src/main.ts +13 -2
  131. package/templates-app/tps-3d/tsconfig.json +1 -1
  132. package/templates-app/village-quest-3d/.incanto/playtest/swapped-seed1.json +1735 -0
  133. package/templates-app/village-quest-3d/package.json +2 -2
  134. package/templates-app/village-quest-3d/src/behaviors.ts +42 -4
  135. package/templates-app/village-quest-3d/src/grove.scene.json +68 -306
  136. package/templates-app/village-quest-3d/src/main.ts +11 -1
  137. package/templates-app/village-quest-3d/src/village.scene.json +202 -863
  138. package/templates-app/village-quest-3d/tsconfig.json +1 -1
  139. package/templates-app/village-quest-3d/verify.ts +14 -1
  140. package/dist/duplicate-Dj4L-5AA.js +0 -22
  141. package/dist/json-CwwhxQgb.js +0 -36
  142. package/dist/registry-CF70EArN.js +0 -212
  143. package/dist/rolldown-runtime-D7D4PA-g.js +0 -13
  144. package/dist/test-D6ISmuFE.js +0 -2383
  145. package/dist/touch-DEAmqGdf.js +0 -225
  146. package/editor/assets/agent8-BDvaZMQJ.js +0 -1
  147. package/editor/assets/index-CZIRr5EL.js +0 -10958
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: incanto-node-reference
3
- description: GENERATED complete reference of every Incanto node type — props, defaults, kinds, signals — plus the machine-readable scene JSON Schema. Use when checking exact prop names, defaults, or which node type to use.
3
+ description: GENERATED complete reference of every Incanto node type — props, defaults, kinds, signals, and the METHODS a connection handler can name — plus the machine-readable scene JSON Schema. Use when checking exact prop names, defaults, what you can call on a node, or which node type to use.
4
4
  ---
5
5
 
6
6
  # Node Reference
@@ -9,6 +9,10 @@ description: GENERATED complete reference of every Incanto node type — props,
9
9
  > installed engine version. Sibling skills live in `node_modules/incanto/skills/`.
10
10
 
11
11
  > GENERATED from the engine source by `pnpm generate:reference` — do not edit by hand.
12
+ > **Methods** are what a connection's `handler` can name and what your behaviour can
13
+ > call; a `param?` is optional. **Reads** are read-only accessors — the questions you
14
+ > can ASK a node, which is what a headless harness is usually after. Each entry lists
15
+ > the type's OWN methods and reads — every node also has `Node`'s (see its section).
12
16
  > Every node also accepts the structural fields: `name`, `uid`, `groups`, `tags`, `script`,
13
17
  > `network`, `children` (see `incanto-scene-json-authoring.md`).
14
18
  > Machine contract: `node_modules/incanto/schemas/scene.schema.json` — a JSON Schema for
@@ -38,6 +42,8 @@ description: GENERATED complete reference of every Incanto node type — props,
38
42
 
39
43
  Signals: `animationFinished(name)`
40
44
 
45
+ Methods: `play(name)` · `stop()`
46
+
41
47
  ## `AnimatedSprite3D` — `incanto`
42
48
 
43
49
  | Prop | Default | Kind |
@@ -49,7 +55,7 @@ Signals: `animationFinished(name)`
49
55
  | `visible` | `true` | boolean |
50
56
  | `renderOrder` | `0` | number |
51
57
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
52
- | `snapToGround` | `null` | null |
58
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
53
59
  | `texture` | `""` | string |
54
60
  | `size` | `[1,1]` | array |
55
61
  | `billboard` | `"y"` | one of: `y` `full` `none` |
@@ -69,6 +75,8 @@ Signals: `animationFinished(name)`
69
75
 
70
76
  Signals: `animationFinished(name)`
71
77
 
78
+ Methods: `play(name)` · `stop()` · `free()`
79
+
72
80
  ## `Area2D` — `incanto/2d`
73
81
 
74
82
  | Prop | Default | Kind |
@@ -85,6 +93,8 @@ Signals: `animationFinished(name)`
85
93
 
86
94
  Signals: `triggerEnter(other)` · `triggerExit(other)`
87
95
 
96
+ Methods: `overlapping(group?)`
97
+
88
98
  ## `Area3D` — `incanto/3d`
89
99
 
90
100
  | Prop | Default | Kind |
@@ -96,12 +106,14 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
96
106
  | `visible` | `true` | boolean |
97
107
  | `renderOrder` | `0` | number |
98
108
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
99
- | `snapToGround` | `null` | null |
109
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
100
110
  | `collider` | `{}` | object |
101
111
  | `enabled` | `true` | boolean |
102
112
 
103
113
  Signals: `triggerEnter(other)` · `triggerExit(other)`
104
114
 
115
+ Methods: `overlapping(group?)`
116
+
105
117
  ## `AudioPlayer` — `incanto`
106
118
 
107
119
  | Prop | Default | Kind |
@@ -121,6 +133,10 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
121
133
 
122
134
  Signals: `finished`
123
135
 
136
+ Methods: `playAt(when)` · `play()` · `free()` · `stop()` · `retryPending()`
137
+
138
+ Reads: `playing: boolean`
139
+
124
140
  ## `Billboard3D` — `incanto/3d`
125
141
 
126
142
  | Prop | Default | Kind |
@@ -132,7 +148,7 @@ Signals: `finished`
132
148
  | `visible` | `true` | boolean |
133
149
  | `renderOrder` | `0` | number |
134
150
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
135
- | `snapToGround` | `null` | null |
151
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
136
152
  | `mode` | `"screen"` | one of: `screen` `y` `none` |
137
153
 
138
154
  ## `BoneAttachment3D` — `incanto/3d`
@@ -146,10 +162,14 @@ Signals: `finished`
146
162
  | `visible` | `true` | boolean |
147
163
  | `renderOrder` | `0` | number |
148
164
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
149
- | `snapToGround` | `null` | null |
150
- | `target` | `""` | node path |
165
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
166
+ | `target` | `""` | node path · **required** |
151
167
  | `bone` | `""` | string |
152
168
 
169
+ Methods: `free()`
170
+
171
+ Reads: `attachedBone: Object3D | null`
172
+
153
173
  ## `BoneLookAt3D` — `incanto/3d`
154
174
 
155
175
  | Prop | Default | Kind |
@@ -161,14 +181,16 @@ Signals: `finished`
161
181
  | `visible` | `true` | boolean |
162
182
  | `renderOrder` | `0` | number |
163
183
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
164
- | `snapToGround` | `null` | null |
165
- | `target` | `""` | node path |
184
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
185
+ | `target` | `""` | node path · **required** |
166
186
  | `bone` | `"Head"` | string |
167
187
  | `lookAt` | `""` | node path |
168
188
  | `maxAngleDeg` | `75` | number |
169
189
  | `weight` | `0.85` | number |
170
190
  | `forwardAxis` | `"+z"` | one of: `+x` `-x` `+y` `-y` `+z` `-z` |
171
191
 
192
+ Reads: `attachedBone: Object3D | null`
193
+
172
194
  ## `Camera2D` — `incanto/2d`
173
195
 
174
196
  | Prop | Default | Kind |
@@ -186,6 +208,10 @@ Signals: `finished`
186
208
  | `limits` | `[]` | array |
187
209
  | `current` | `false` | boolean |
188
210
 
211
+ Methods: `clampedCenter(vw, vh)`
212
+
213
+ Reads: `effectiveZoom: number`
214
+
189
215
  ## `Camera3D` — `incanto/3d`
190
216
 
191
217
  | Prop | Default | Kind |
@@ -197,11 +223,12 @@ Signals: `finished`
197
223
  | `visible` | `true` | boolean |
198
224
  | `renderOrder` | `0` | number |
199
225
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
200
- | `snapToGround` | `null` | null |
226
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
201
227
  | `fov` | `60` | number |
202
228
  | `near` | `0.1` | number |
203
229
  | `far` | `1000` | number |
204
230
  | `current` | `false` | boolean |
231
+ | `lookAt` | `""` | node path |
205
232
 
206
233
  ## `CharacterBody2D` — `incanto/2d`
207
234
 
@@ -219,9 +246,12 @@ Signals: `finished`
219
246
  | `velocity` | `[0,0]` | array |
220
247
  | `stickToGround` | `true` | boolean |
221
248
  | `slopeLimitDeg` | `45` | number |
249
+ | `stepHeight` | `35` | number |
222
250
 
223
251
  Signals: `triggerEnter(other)` · `triggerExit(other)`
224
252
 
253
+ Methods: `moveAndSlide()` · `isOnWall()` · `wallSide()` · `isOnCeiling()` · `isOnFloor()`
254
+
225
255
  ## `CharacterBody3D` — `incanto/3d`
226
256
 
227
257
  | Prop | Default | Kind |
@@ -233,7 +263,7 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
233
263
  | `visible` | `true` | boolean |
234
264
  | `renderOrder` | `0` | number |
235
265
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
236
- | `snapToGround` | `null` | null |
266
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
237
267
  | `collider` | `{}` | object |
238
268
  | `enabled` | `true` | boolean |
239
269
  | `velocity` | `[0,0,0]` | array |
@@ -243,6 +273,8 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
243
273
 
244
274
  Signals: `triggerEnter(other)` · `triggerExit(other)`
245
275
 
276
+ Methods: `moveAndSlide()` · `isOnWall()` · `wallNormal()` · `isOnCeiling()` · `isOnFloor()`
277
+
246
278
  ## `CharacterController2D` — `incanto/2d`
247
279
 
248
280
  | Prop | Default | Kind |
@@ -275,7 +307,7 @@ Signals: `movementStateChanged(state)`
275
307
  | `visible` | `true` | boolean |
276
308
  | `renderOrder` | `0` | number |
277
309
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
278
- | `snapToGround` | `null` | null |
310
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
279
311
  | `view` | `"free"` | one of: `free` `firstPerson` `quarter` `side` |
280
312
  | `camDistance` | `4` | number |
281
313
  | `eyeHeight` | `0.64` | number |
@@ -325,6 +357,8 @@ Signals: `movementStateChanged(state)`
325
357
  | `opacity` | `1` | number |
326
358
  | `anchor` | `[0.5,0.5]` | array |
327
359
 
360
+ Methods: `free()`
361
+
328
362
  ## `DirectionalLight3D` — `incanto/3d`
329
363
 
330
364
  | Prop | Default | Kind |
@@ -336,7 +370,7 @@ Signals: `movementStateChanged(state)`
336
370
  | `visible` | `true` | boolean |
337
371
  | `renderOrder` | `0` | number |
338
372
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
339
- | `snapToGround` | `null` | null |
373
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
340
374
  | `color` | `"#ffffff"` | string |
341
375
  | `intensity` | `1` | number |
342
376
  | `castShadow` | `false` | boolean |
@@ -355,8 +389,8 @@ Signals: `movementStateChanged(state)`
355
389
  | `visible` | `true` | boolean |
356
390
  | `renderOrder` | `0` | number |
357
391
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
358
- | `snapToGround` | `null` | null |
359
- | `density` | `"sparse"` | one of: `lush` `sparse` `none` |
392
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
393
+ | `density` | `"sparse"` | one of: `lush` `sparse` `none`, or number |
360
394
  | `area` | `[20,20]` | array |
361
395
  | `seed` | `1` | number |
362
396
  | `varieties` | `[]` | array |
@@ -364,10 +398,12 @@ Signals: `movementStateChanged(state)`
364
398
  | `height` | `0.45` | number |
365
399
  | `clustering` | `0.6` | number |
366
400
  | `sway` | `0.5` | number |
367
- | `drape` | `null` | null |
401
+ | `drape` | `null` | any JSON — see the skill for the accepted shapes |
368
402
  | `avoidWater` | `true` | boolean |
369
403
  | `terrain` | `""` | node path |
370
404
 
405
+ Methods: `free()`
406
+
371
407
  ## `Foliage3D` — `incanto/3d`
372
408
 
373
409
  | Prop | Default | Kind |
@@ -379,7 +415,7 @@ Signals: `movementStateChanged(state)`
379
415
  | `visible` | `true` | boolean |
380
416
  | `renderOrder` | `2` | number |
381
417
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
382
- | `snapToGround` | `null` | null |
418
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
383
419
  | `kind` | `"grass"` | one of: `grass` `flowers` `reeds` |
384
420
  | `style` | `"mesh"` | one of: `blades` `simple` `mesh` `tufts` |
385
421
  | `tuftStyle` | `"grass"` | one of: `grass` `fern` |
@@ -398,10 +434,12 @@ Signals: `movementStateChanged(state)`
398
434
  | `coverage` | `0.85` | number |
399
435
  | `flowers` | `0` | number |
400
436
  | `seed` | `1` | number |
401
- | `drape` | `null` | null |
437
+ | `drape` | `null` | any JSON — see the skill for the accepted shapes |
402
438
  | `avoidWater` | `true` | boolean |
403
439
  | `terrain` | `""` | node path |
404
440
 
441
+ Methods: `free()`
442
+
405
443
  ## `HudLayer` — `incanto`
406
444
 
407
445
  | Prop | Default | Kind |
@@ -410,6 +448,8 @@ Signals: `movementStateChanged(state)`
410
448
  | `visible` | `true` | boolean |
411
449
  | `focusNavigation` | `false` | boolean |
412
450
 
451
+ Methods: `focusables()` · `focus(widget)`
452
+
413
453
  ## `InstancedMesh3D` — `incanto/3d`
414
454
 
415
455
  | Prop | Default | Kind |
@@ -421,14 +461,18 @@ Signals: `movementStateChanged(state)`
421
461
  | `visible` | `true` | boolean |
422
462
  | `renderOrder` | `0` | number |
423
463
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
424
- | `snapToGround` | `null` | null |
464
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
425
465
  | `mesh` | `"box"` | one of: `box` `sphere` `capsule` `plane` `cylinder` `gem` |
426
466
  | `size` | `[1,1,1]` | array |
427
467
  | `material` | `{}` | object |
428
468
  | `transforms` | `[]` | array |
429
469
  | `castShadow` | `false` | boolean |
430
470
  | `receiveShadow` | `false` | boolean |
431
- | `collider` | `null` | null |
471
+ | `collider` | `null` | any JSON — see the skill for the accepted shapes |
472
+
473
+ Methods: `free()`
474
+
475
+ Reads: `instanceCount: number`
432
476
 
433
477
  ## `Joint2D` — `incanto/2d`
434
478
 
@@ -442,13 +486,13 @@ Signals: `movementStateChanged(state)`
442
486
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
443
487
  | `visible` | `true` | boolean |
444
488
  | `type` | `"revolute"` | one of: `fixed` `revolute` `rope` `spring` |
445
- | `target` | `""` | node path |
489
+ | `target` | `""` | node path · **required** |
446
490
  | `anchor` | `[0,0]` | array |
447
491
  | `targetAnchor` | `[0,0]` | array |
448
492
  | `length` | `0` | number |
449
493
  | `stiffness` | `50` | number |
450
494
  | `damping` | `5` | number |
451
- | `collide` | `null` | null |
495
+ | `collide` | `null` | any JSON — see the skill for the accepted shapes |
452
496
 
453
497
  ## `Joint3D` — `incanto/3d`
454
498
 
@@ -461,15 +505,15 @@ Signals: `movementStateChanged(state)`
461
505
  | `visible` | `true` | boolean |
462
506
  | `renderOrder` | `0` | number |
463
507
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
464
- | `snapToGround` | `null` | null |
508
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
465
509
  | `type` | `"spherical"` | one of: `fixed` `spherical` `rope` `spring` |
466
- | `target` | `""` | node path |
510
+ | `target` | `""` | node path · **required** |
467
511
  | `anchor` | `[0,0,0]` | array |
468
512
  | `targetAnchor` | `[0,0,0]` | array |
469
513
  | `length` | `0` | number |
470
514
  | `stiffness` | `50` | number |
471
515
  | `damping` | `5` | number |
472
- | `collide` | `null` | null |
516
+ | `collide` | `null` | any JSON — see the skill for the accepted shapes |
473
517
 
474
518
  ## `Label` — `incanto/2d`
475
519
 
@@ -489,6 +533,8 @@ Signals: `movementStateChanged(state)`
489
533
  | `align` | `"left"` | string |
490
534
  | `opacity` | `1` | number |
491
535
 
536
+ Methods: `free()`
537
+
492
538
  ## `Label3D` — `incanto`
493
539
 
494
540
  | Prop | Default | Kind |
@@ -500,7 +546,7 @@ Signals: `movementStateChanged(state)`
500
546
  | `visible` | `true` | boolean |
501
547
  | `renderOrder` | `0` | number |
502
548
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
503
- | `snapToGround` | `null` | null |
549
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
504
550
  | `texture` | `""` | string |
505
551
  | `size` | `[1,1]` | array |
506
552
  | `billboard` | `"full"` | one of: `y` `full` `none` |
@@ -518,6 +564,8 @@ Signals: `movementStateChanged(state)`
518
564
  | `font` | `"sans-serif"` | string |
519
565
  | `outline` | `"#000000"` | string |
520
566
 
567
+ Methods: `free()`
568
+
521
569
  ## `LoftMesh3D` — `incanto/3d`
522
570
 
523
571
  | Prop | Default | Kind |
@@ -529,7 +577,7 @@ Signals: `movementStateChanged(state)`
529
577
  | `visible` | `true` | boolean |
530
578
  | `renderOrder` | `0` | number |
531
579
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
532
- | `snapToGround` | `null` | null |
580
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
533
581
  | `sections` | `[]` | array |
534
582
  | `slices` | `24` | number |
535
583
  | `smooth` | `4` | number |
@@ -537,6 +585,8 @@ Signals: `movementStateChanged(state)`
537
585
  | `castShadow` | `false` | boolean |
538
586
  | `receiveShadow` | `false` | boolean |
539
587
 
588
+ Methods: `free()`
589
+
540
590
  ## `MeshInstance3D` — `incanto/3d`
541
591
 
542
592
  | Prop | Default | Kind |
@@ -548,13 +598,15 @@ Signals: `movementStateChanged(state)`
548
598
  | `visible` | `true` | boolean |
549
599
  | `renderOrder` | `0` | number |
550
600
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
551
- | `snapToGround` | `null` | null |
601
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
552
602
  | `mesh` | `"box"` | one of: `box` `sphere` `capsule` `plane` `cylinder` `gem` |
553
603
  | `size` | `[1,1,1]` | array |
554
604
  | `material` | `{}` | object |
555
605
  | `castShadow` | `false` | boolean |
556
606
  | `receiveShadow` | `false` | boolean |
557
607
 
608
+ Methods: `free()`
609
+
558
610
  ## `ModelInstance3D` — `incanto/3d`
559
611
 
560
612
  | Prop | Default | Kind |
@@ -566,7 +618,7 @@ Signals: `movementStateChanged(state)`
566
618
  | `visible` | `true` | boolean |
567
619
  | `renderOrder` | `0` | number |
568
620
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
569
- | `snapToGround` | `null` | null |
621
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
570
622
  | `model` | `""` | string |
571
623
  | `animation` | `""` | string |
572
624
  | `targetHeight` | `0` | number |
@@ -584,20 +636,28 @@ Signals: `movementStateChanged(state)`
584
636
 
585
637
  Signals: `animationFinished(name)`
586
638
 
639
+ Methods: `poseNode(name, rotation)` · `findBone(name)` · `boneNames()` · `availableAnimations()`
640
+
587
641
  ## `NetworkSpawner` — `incanto/net`
588
642
 
589
643
  | Prop | Default | Kind |
590
644
  |---|---|---|
591
645
  | `source` | `"users"` | string |
592
- | `scene` | `""` | string |
646
+ | `scene` | `""` | string · **required** |
593
647
  | `interpolate` | `true` | boolean |
594
648
 
595
649
  Signals: `spawned(node, key)` · `despawned(node, key)`
596
650
 
651
+ Methods: `replicatedPosition(node)`
652
+
597
653
  ## `Node` — `incanto`
598
654
 
599
655
  _No props (structural fields only)._
600
656
 
657
+ Methods: `addChild(child)` · `removeChild(child)` · `reparent(newParent)` · `findChild(name, recursive?)` · `getRoot()` · `getNodeByUid(uid)` · `getNodesByName(name)` · `getPath()` · `wiringPath()` · `getNode(path)` · `getNodeOrNull(path)` · `addToGroup(group)` · `removeFromGroup(group)` · `isInGroup(group)` · `declareSignal(name)` · `declaredSignalNames()` · `signal(name)` · `on(signal, fn, opts?)` · `off(signal, fn)` · `listenerCount(signal)` · `emit(signal, ...args)` · `queueFree()` · `free()`
658
+
659
+ Reads: `uid: string | null` · `name: string` · `parent: Node | null` · `children: readonly Node[]` · `groups: ReadonlySet<string>` · `tree: SceneTree | null` · `isReady: boolean` · `freed: boolean`
660
+
601
661
  ## `Node2D` — `incanto/2d`
602
662
 
603
663
  | Prop | Default | Kind |
@@ -610,6 +670,10 @@ _No props (structural fields only)._
610
670
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
611
671
  | `visible` | `true` | boolean |
612
672
 
673
+ Methods: `free()`
674
+
675
+ Reads: `effectiveRenderOrder: number`
676
+
613
677
  ## `Node3D` — `incanto/3d`
614
678
 
615
679
  | Prop | Default | Kind |
@@ -621,7 +685,11 @@ _No props (structural fields only)._
621
685
  | `visible` | `true` | boolean |
622
686
  | `renderOrder` | `0` | number |
623
687
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
624
- | `snapToGround` | `null` | null |
688
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
689
+
690
+ Methods: `applyGroundSnap()` · `free()`
691
+
692
+ Reads: `effectiveRenderOrder: number`
625
693
 
626
694
  ## `OmniLight3D` — `incanto/3d`
627
695
 
@@ -634,7 +702,7 @@ _No props (structural fields only)._
634
702
  | `visible` | `true` | boolean |
635
703
  | `renderOrder` | `0` | number |
636
704
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
637
- | `snapToGround` | `null` | null |
705
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
638
706
  | `color` | `"#ffffff"` | string |
639
707
  | `intensity` | `1` | number |
640
708
  | `range` | `0` | number |
@@ -674,6 +742,10 @@ _No props (structural fields only)._
674
742
 
675
743
  Signals: `finished`
676
744
 
745
+ Methods: `particles()` · `free()` · `replay()`
746
+
747
+ Reads: `aliveCount: number`
748
+
677
749
  ## `Particles3D` — `incanto/3d`
678
750
 
679
751
  | Prop | Default | Kind |
@@ -685,7 +757,7 @@ Signals: `finished`
685
757
  | `visible` | `true` | boolean |
686
758
  | `renderOrder` | `0` | number |
687
759
  | `orderGroup` | `"effects"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
688
- | `snapToGround` | `null` | null |
760
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
689
761
  | `preset` | `"custom"` | one of: `custom` `fire` `smoke` `sparks` `fireworks` `explosion` `flash` `lightning` `rain` `snow` `magic` |
690
762
  | `emitting` | `true` | boolean |
691
763
  | `worldSpace` | `false` | boolean |
@@ -711,12 +783,16 @@ Signals: `finished`
711
783
 
712
784
  Signals: `finished`
713
785
 
786
+ Methods: `particles()` · `replay()` · `free()`
787
+
788
+ Reads: `aliveCount: number`
789
+
714
790
  ## `Respawn` — `incanto`
715
791
 
716
792
  | Prop | Default | Kind |
717
793
  |---|---|---|
718
794
  | `target` | `".."` | node path |
719
- | `below` | `null` | null |
795
+ | `below` | `null` | any JSON — see the skill for the accepted shapes |
720
796
  | `to` | `[]` | array |
721
797
  | `resetVelocity` | `true` | boolean |
722
798
 
@@ -741,9 +817,14 @@ Signals: `respawned`
741
817
  | `friction` | `0.5` | number |
742
818
  | `restitution` | `0` | number |
743
819
  | `linearVelocity` | `[0,0]` | array |
820
+ | `angularVelocity` | `0` | number |
744
821
 
745
822
  Signals: `triggerEnter(other)` · `triggerExit(other)`
746
823
 
824
+ Methods: `applyImpulse(impulse)`
825
+
826
+ Reads: `velocity: number[]`
827
+
747
828
  ## `RigidBody3D` — `incanto/3d`
748
829
 
749
830
  | Prop | Default | Kind |
@@ -755,7 +836,7 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
755
836
  | `visible` | `true` | boolean |
756
837
  | `renderOrder` | `0` | number |
757
838
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
758
- | `snapToGround` | `null` | null |
839
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
759
840
  | `collider` | `{}` | object |
760
841
  | `enabled` | `true` | boolean |
761
842
  | `mass` | `1` | number |
@@ -768,6 +849,10 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
768
849
 
769
850
  Signals: `triggerEnter(other)` · `triggerExit(other)`
770
851
 
852
+ Methods: `applyImpulse(impulse)`
853
+
854
+ Reads: `velocity: number[]`
855
+
771
856
  ## `River3D` — `incanto/3d`
772
857
 
773
858
  | Prop | Default | Kind |
@@ -779,7 +864,7 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
779
864
  | `visible` | `true` | boolean |
780
865
  | `renderOrder` | `0` | number |
781
866
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
782
- | `snapToGround` | `null` | null |
867
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
783
868
  | `path` | `[]` | array |
784
869
  | `width` | `6` | number |
785
870
  | `widths` | `[]` | array |
@@ -798,6 +883,8 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
798
883
  | `flowForce` | `1` | number |
799
884
  | `spray` | `1` | number |
800
885
 
886
+ Methods: `sampleAt(x, z)` · `fallsAt()` · `free()`
887
+
801
888
  ## `Sprite2D` — `incanto/2d`
802
889
 
803
890
  | Prop | Default | Kind |
@@ -816,6 +903,8 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
816
903
  | `tint` | `"#ffffff"` | string |
817
904
  | `opacity` | `1` | number |
818
905
 
906
+ Methods: `free()`
907
+
819
908
  ## `Sprite3D` — `incanto`
820
909
 
821
910
  | Prop | Default | Kind |
@@ -827,7 +916,7 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
827
916
  | `visible` | `true` | boolean |
828
917
  | `renderOrder` | `0` | number |
829
918
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
830
- | `snapToGround` | `null` | null |
919
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
831
920
  | `texture` | `""` | string |
832
921
  | `size` | `[1,1]` | array |
833
922
  | `billboard` | `"y"` | one of: `y` `full` `none` |
@@ -840,6 +929,8 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
840
929
  | `castShadow` | `false` | boolean |
841
930
  | `shadowMode` | `"silhouette"` | one of: `silhouette` `blob` |
842
931
 
932
+ Methods: `free()`
933
+
843
934
  ## `StaticBody2D` — `incanto/2d`
844
935
 
845
936
  | Prop | Default | Kind |
@@ -867,7 +958,7 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
867
958
  | `visible` | `true` | boolean |
868
959
  | `renderOrder` | `0` | number |
869
960
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
870
- | `snapToGround` | `null` | null |
961
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
871
962
  | `collider` | `{}` | object |
872
963
  | `enabled` | `true` | boolean |
873
964
 
@@ -884,7 +975,7 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
884
975
  | `visible` | `true` | boolean |
885
976
  | `renderOrder` | `0` | number |
886
977
  | `orderGroup` | `"terrain"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
887
- | `snapToGround` | `null` | null |
978
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
888
979
  | `size` | `[200,200]` | array |
889
980
  | `maxHeight` | `28` | number |
890
981
  | `seed` | `1` | number |
@@ -893,12 +984,14 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
893
984
  | `roughness` | `0.5` | number |
894
985
  | `detail` | `4` | number |
895
986
  | `flatThreshold` | `0.95` | number |
896
- | `islandEdge` | `null` | null |
987
+ | `islandEdge` | `null` | any JSON — see the skill for the accepted shapes |
897
988
  | `layers` | `[]` | array |
898
989
  | `textureBase` | `"https://agent8-games.verse8.io/assets/3D/default/textures/terrain"` | string |
899
990
  | `basins` | `[]` | array |
900
991
  | `channels` | `[]` | array |
901
- | `wetline` | `null` | null |
992
+ | `wetline` | `null` | any JSON — see the skill for the accepted shapes |
993
+
994
+ Methods: `heightAt(x, z)` · `resolvedLayers()` · `free()`
902
995
 
903
996
  ## `TileMap2D` — `incanto/2d`
904
997
 
@@ -916,9 +1009,14 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
916
1009
  | `columns` | `0` | number |
917
1010
  | `cells` | `[]` | array |
918
1011
  | `legend` | `{}` | object |
1012
+ | `colors` | `{}` | object |
919
1013
  | `solid` | `[]` | array |
920
1014
  | `opacity` | `1` | number |
921
1015
 
1016
+ Methods: `grid()` · `cellAt(worldX, worldY)` · `tileAt(cx, cy)` · `worldAt(cx, cy)` · `setTile(cx, cy, char)` · `free()`
1017
+
1018
+ Reads: `renderedTileCount: number`
1019
+
922
1020
  ## `Timer` — `incanto`
923
1021
 
924
1022
  | Prop | Default | Kind |
@@ -929,6 +1027,8 @@ Signals: `triggerEnter(other)` · `triggerExit(other)`
929
1027
 
930
1028
  Signals: `timeout`
931
1029
 
1030
+ Methods: `start(time?)` · `stop()`
1031
+
932
1032
  ## `Trail3D` — `incanto/3d`
933
1033
 
934
1034
  | Prop | Default | Kind |
@@ -940,7 +1040,7 @@ Signals: `timeout`
940
1040
  | `visible` | `true` | boolean |
941
1041
  | `renderOrder` | `0` | number |
942
1042
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
943
- | `snapToGround` | `null` | null |
1043
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
944
1044
  | `width` | `0.3` | number |
945
1045
  | `color` | `"#ffffff"` | string |
946
1046
  | `opacity` | `0.8` | number |
@@ -949,6 +1049,10 @@ Signals: `timeout`
949
1049
  | `additive` | `false` | boolean |
950
1050
  | `minDistance` | `0.05` | number |
951
1051
 
1052
+ Methods: `free()`
1053
+
1054
+ Reads: `pointCount: number`
1055
+
952
1056
  ## `Tree3D` — `incanto/3d`
953
1057
 
954
1058
  | Prop | Default | Kind |
@@ -960,7 +1064,7 @@ Signals: `timeout`
960
1064
  | `visible` | `true` | boolean |
961
1065
  | `renderOrder` | `0` | number |
962
1066
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
963
- | `snapToGround` | `null` | null |
1067
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
964
1068
  | `tier` | `"medium"` | one of: `simple` `medium` `high` |
965
1069
  | `type` | `"conifer"` | one of: `conifer` `broadleaf` `dead` `bush` |
966
1070
  | `seed` | `1` | number |
@@ -973,9 +1077,11 @@ Signals: `timeout`
973
1077
  | `leafFadeStart` | `0` | number |
974
1078
  | `leafFadeEnd` | `0` | number |
975
1079
  | `leafShadows` | `true` | boolean |
976
- | `drape` | `null` | null |
1080
+ | `drape` | `null` | any JSON — see the skill for the accepted shapes |
977
1081
  | `terrain` | `""` | node path |
978
1082
 
1083
+ Methods: `free()`
1084
+
979
1085
  ## `UILayer` — `incanto/2d`
980
1086
 
981
1087
  | Prop | Default | Kind |
@@ -996,6 +1102,10 @@ Signals: `timeout`
996
1102
 
997
1103
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `bannerShown`
998
1104
 
1105
+ Methods: `show(text, opts?)` · `clear()`
1106
+
1107
+ Reads: `showing: string`
1108
+
999
1109
  ## `UiBar` — `incanto`
1000
1110
 
1001
1111
  | Prop | Default | Kind |
@@ -1017,6 +1127,10 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `banner
1017
1127
 
1018
1128
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped`
1019
1129
 
1130
+ Methods: `setValue(value, max?)` · `setMax(max)`
1131
+
1132
+ Reads: `ratio: number`
1133
+
1020
1134
  ## `UiButton` — `incanto`
1021
1135
 
1022
1136
  | Prop | Default | Kind |
@@ -1034,6 +1148,8 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped`
1034
1148
 
1035
1149
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `pressed`
1036
1150
 
1151
+ Methods: `press()`
1152
+
1037
1153
  ## `UiDialogue` — `incanto`
1038
1154
 
1039
1155
  | Prop | Default | Kind |
@@ -1048,6 +1164,10 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `presse
1048
1164
 
1049
1165
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `lineShown` · `choiceMade` · `dialogueFinished`
1050
1166
 
1167
+ Methods: `say(speaker, text, choices?)` · `advance()` · `choose(index)` · `clear()`
1168
+
1169
+ Reads: `active: boolean` · `showing: string`
1170
+
1051
1171
  ## `UiFrameCapSelect` — `incanto`
1052
1172
 
1053
1173
  | Prop | Default | Kind |
@@ -1176,6 +1296,8 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `change
1176
1296
 
1177
1297
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `changed`
1178
1298
 
1299
+ Methods: `choose(value)`
1300
+
1179
1301
  ## `UiSlider` — `incanto`
1180
1302
 
1181
1303
  | Prop | Default | Kind |
@@ -1195,6 +1317,8 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `change
1195
1317
 
1196
1318
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `changed`
1197
1319
 
1320
+ Methods: `choose(value)`
1321
+
1198
1322
  ## `UiText` — `incanto`
1199
1323
 
1200
1324
  | Prop | Default | Kind |
@@ -1212,6 +1336,10 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `change
1212
1336
 
1213
1337
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped`
1214
1338
 
1339
+ Methods: `setText(value)`
1340
+
1341
+ Reads: `shown: string`
1342
+
1215
1343
  ## `UiToggle` — `incanto`
1216
1344
 
1217
1345
  | Prop | Default | Kind |
@@ -1226,6 +1354,8 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped`
1226
1354
 
1227
1355
  Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `changed`
1228
1356
 
1357
+ Methods: `choose(value)`
1358
+
1229
1359
  ## `UiVolumeSlider` — `incanto`
1230
1360
 
1231
1361
  | Prop | Default | Kind |
@@ -1257,11 +1387,13 @@ Signals: `dragStarted` · `dragCancelled` · `droppedOn` · `dropped` · `change
1257
1387
  | `visible` | `true` | boolean |
1258
1388
  | `renderOrder` | `0` | number |
1259
1389
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
1260
- | `snapToGround` | `null` | null |
1390
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
1261
1391
  | `voxels` | `[]` | array |
1262
1392
 
1263
1393
  Signals: `blocksChanged`
1264
1394
 
1395
+ Methods: `blockCount()` · `tileAt(x, y, z)` · `setBlocks(blocks)` · `addBlock(b)` · `removeBlockAt(x, y, z)` · `blocks()` · `free()`
1396
+
1265
1397
  ## `Water3D` — `incanto/3d`
1266
1398
 
1267
1399
  | Prop | Default | Kind |
@@ -1273,7 +1405,7 @@ Signals: `blocksChanged`
1273
1405
  | `visible` | `true` | boolean |
1274
1406
  | `renderOrder` | `1` | number |
1275
1407
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
1276
- | `snapToGround` | `null` | null |
1408
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
1277
1409
  | `size` | `[40,40]` | array |
1278
1410
  | `color` | `"#2a6fbe"` | string |
1279
1411
  | `opacity` | `0.8` | number |
@@ -1287,7 +1419,7 @@ Signals: `blocksChanged`
1287
1419
  | `mirrorInterval` | `33` | number |
1288
1420
  | `swellSteepness` | `0.35` | number |
1289
1421
  | `foam` | `true` | boolean |
1290
- | `reflectivity` | `null` | null |
1422
+ | `reflectivity` | `null` | any JSON — see the skill for the accepted shapes |
1291
1423
  | `interaction` | `true` | boolean |
1292
1424
  | `splash` | `true` | boolean |
1293
1425
  | `sunDirection` | `[0.5,0.8,0.3]` | array |
@@ -1296,7 +1428,7 @@ Signals: `blocksChanged`
1296
1428
  | `detailStrength` | `0.26` | number |
1297
1429
  | `absorption` | `0.15` | number |
1298
1430
  | `refraction` | `true` | boolean |
1299
- | `underwater` | `true` | boolean |
1431
+ | `underwater` | `true` | boolean, or object |
1300
1432
  | `swell` | `0` | number |
1301
1433
  | `swellDirectionDeg` | `0` | number |
1302
1434
  | `swellWavelength` | `30` | number |
@@ -1307,6 +1439,8 @@ Signals: `blocksChanged`
1307
1439
 
1308
1440
  Signals: `entered(body)` · `exited(body)`
1309
1441
 
1442
+ Methods: `underwaterAt(camX, camY, camZ)` · `free()` · `heightAt(x, z)`
1443
+
1310
1444
  ## `WaterCutout3D` — `incanto/3d`
1311
1445
 
1312
1446
  | Prop | Default | Kind |
@@ -1318,7 +1452,7 @@ Signals: `entered(body)` · `exited(body)`
1318
1452
  | `visible` | `true` | boolean |
1319
1453
  | `renderOrder` | `0` | number |
1320
1454
  | `orderGroup` | `"default"` | one of: `background` `terrain` `default` `characters` `effects` `overlay` |
1321
- | `snapToGround` | `null` | null |
1455
+ | `snapToGround` | `null` | any JSON — see the skill for the accepted shapes |
1322
1456
  | `size` | `[2,1,1]` | array |
1323
1457
  | `enabled` | `true` | boolean |
1324
1458
 
@@ -1351,12 +1485,14 @@ Signals: `submerged` · `surfaced`
1351
1485
  | `enabled` | `true` | boolean |
1352
1486
  | `falloff` | `0.28` | number |
1353
1487
 
1488
+ Methods: `shake(magnitude, seconds?)`
1489
+
1354
1490
  ### `Chase`
1355
1491
 
1356
1492
  | Prop | Default | Kind |
1357
1493
  |---|---|---|
1358
1494
  | `enabled` | `true` | boolean |
1359
- | `target` | `""` | node path |
1495
+ | `target` | `""` | node path · **required** |
1360
1496
  | `speed` | `60` | number |
1361
1497
  | `stopRange` | `0` | number |
1362
1498
  | `loseRange` | `0` | number |
@@ -1385,6 +1521,8 @@ Signals: `clicked` · `hovered` · `unhovered`
1385
1521
 
1386
1522
  Signals: `totalChanged(total)`
1387
1523
 
1524
+ Methods: `collect(value)` · `announce()`
1525
+
1388
1526
  ### `Currency`
1389
1527
 
1390
1528
  | Prop | Default | Kind |
@@ -1395,6 +1533,8 @@ Signals: `totalChanged(total)`
1395
1533
 
1396
1534
  Signals: `changed` · `earned` · `spent` · `refused`
1397
1535
 
1536
+ Methods: `canAfford(cost)` · `spend(cost)` · `earn(gain)` · `setAmount(next)` · `announce()`
1537
+
1398
1538
  ### `DamageOnContact`
1399
1539
 
1400
1540
  | Prop | Default | Kind |
@@ -1427,7 +1567,7 @@ Signals: `dayPhaseChanged`
1427
1567
  | Prop | Default | Kind |
1428
1568
  |---|---|---|
1429
1569
  | `enabled` | `true` | boolean |
1430
- | `targetGroup` | `""` | string |
1570
+ | `targetGroup` | `""` | string · **required** |
1431
1571
  | `range` | `0` | number |
1432
1572
  | `facePath` | `""` | node path |
1433
1573
  | `turnSpeed` | `6` | number |
@@ -1451,11 +1591,13 @@ Signals: `acquired` · `lostTarget` · `aimed` · `lostAim`
1451
1591
  | Prop | Default | Kind |
1452
1592
  |---|---|---|
1453
1593
  | `enabled` | `true` | boolean |
1454
- | `target` | `""` | node path |
1594
+ | `target` | `""` | node path · **required** |
1455
1595
  | `offset` | `[]` | array |
1456
1596
  | `smoothing` | `0` | number |
1457
1597
  | `deadzone` | `0` | number |
1458
1598
 
1599
+ Methods: `shake(magnitude, seconds?)`
1600
+
1459
1601
  ### `GameFlow`
1460
1602
 
1461
1603
  | Prop | Default | Kind |
@@ -1469,6 +1611,8 @@ Signals: `acquired` · `lostTarget` · `aimed` · `lostAim`
1469
1611
 
1470
1612
  Signals: `flowChanged`
1471
1613
 
1614
+ Methods: `gameOver(text?, color?)` · `win(text?, color?)` · `pause()` · `resume()` · `restart()` · `goToScene(sceneJson, opts?)`
1615
+
1472
1616
  ### `Health`
1473
1617
 
1474
1618
  | Prop | Default | Kind |
@@ -1478,9 +1622,14 @@ Signals: `flowChanged`
1478
1622
  | `regenPerSec` | `0` | number |
1479
1623
  | `invulnerableFor` | `0` | number |
1480
1624
  | `freeOnDeath` | `false` | boolean |
1625
+ | `freeParent` | `false` | boolean |
1481
1626
 
1482
1627
  Signals: `damaged(amount, current)` · `healed(amount, current)` · `died` · `revived` · `healthChanged`
1483
1628
 
1629
+ Methods: `damage(n)` · `heal(n)` · `revive(hp?)` · `reviveFull()` · `kill()` · `announce()`
1630
+
1631
+ Reads: `isDead: boolean` · `invulnerableRemaining: number`
1632
+
1484
1633
  ### `Interactable`
1485
1634
 
1486
1635
  | Prop | Default | Kind |
@@ -1503,18 +1652,22 @@ Signals: `interacted(actor)`
1503
1652
 
1504
1653
  Signals: `expired`
1505
1654
 
1655
+ Methods: `startTimer()`
1656
+
1506
1657
  ### `MoveTo`
1507
1658
 
1508
1659
  | Prop | Default | Kind |
1509
1660
  |---|---|---|
1510
1661
  | `enabled` | `true` | boolean |
1511
- | `to` | `[]` | array |
1662
+ | `to` | `[]` | array · **required** |
1512
1663
  | `duration` | `1` | number |
1513
1664
  | `ease` | `"easeInOut"` | one of: `linear` `easeIn` `easeOut` `easeInOut` |
1514
1665
  | `startOnSignal` | `false` | boolean |
1515
1666
 
1516
1667
  Signals: `arrived`
1517
1668
 
1669
+ Methods: `start()`
1670
+
1518
1671
  ### `Oscillate`
1519
1672
 
1520
1673
  | Prop | Default | Kind |
@@ -1535,12 +1688,16 @@ Signals: `arrived`
1535
1688
 
1536
1689
  Signals: `waypointReached` · `arrived`
1537
1690
 
1691
+ Methods: `setPath(waypoints)` · `stop()`
1692
+
1693
+ Reads: `moving: boolean`
1694
+
1538
1695
  ### `Patrol`
1539
1696
 
1540
1697
  | Prop | Default | Kind |
1541
1698
  |---|---|---|
1542
1699
  | `enabled` | `true` | boolean |
1543
- | `points` | `[]` | array |
1700
+ | `points` | `[]` | array · **required** |
1544
1701
  | `speed` | `60` | number |
1545
1702
  | `loop` | `true` | boolean |
1546
1703
  | `mode` | `"loop"` | one of: `loop` `pingpong` |
@@ -1562,15 +1719,26 @@ Signals: `reachedPoint(index)`
1562
1719
 
1563
1720
  Signals: `collected(value, other)`
1564
1721
 
1722
+ ### `PrefabShelf`
1723
+
1724
+ | Prop | Default | Kind |
1725
+ |---|---|---|
1726
+ | `enabled` | `true` | boolean |
1727
+ | `prefabs` | `""` | string |
1728
+
1729
+ Methods: `names()` · `make(name)`
1730
+
1565
1731
  ### `Projectile`
1566
1732
 
1567
1733
  | Prop | Default | Kind |
1568
1734
  |---|---|---|
1569
1735
  | `enabled` | `true` | boolean |
1570
1736
  | `speed` | `300` | number |
1571
- | `direction` | `null` | null |
1737
+ | `direction` | `null` | any JSON — see the skill for the accepted shapes |
1572
1738
  | `gravity` | `0` | number |
1573
1739
 
1740
+ Methods: `aim(direction?)`
1741
+
1574
1742
  ### `SavePoint`
1575
1743
 
1576
1744
  | Prop | Default | Kind |
@@ -1583,7 +1751,11 @@ Signals: `collected(value, other)`
1583
1751
  | `restoreOnReady` | `false` | boolean |
1584
1752
  | `probeOnReady` | `false` | boolean |
1585
1753
 
1586
- Signals: `saved` · `restored` · `noSave` · `hasSave`
1754
+ Signals: `saved` · `saveFailed` · `restored` · `noSave` · `hasSave`
1755
+
1756
+ Methods: `probe()` · `slotScene()` · `save()` · `restore()` · `clear()`
1757
+
1758
+ Reads: `playtime: number`
1587
1759
 
1588
1760
  ### `ScoreKeeper`
1589
1761
 
@@ -1594,14 +1766,16 @@ Signals: `saved` · `restored` · `noSave` · `hasSave`
1594
1766
  | `lives` | `0` | number |
1595
1767
  | `scoreToWin` | `0` | number |
1596
1768
 
1597
- Signals: `scoreChanged(score)` · `won` · `lost` · `lifeLost(lives)`
1769
+ Signals: `scoreChanged(score)` · `won` · `lost` · `lifeLost(lives)` · `livesChanged`
1770
+
1771
+ Methods: `addScore(n)` · `setScore(value)` · `loseLife()` · `announce()`
1598
1772
 
1599
1773
  ### `Spawner`
1600
1774
 
1601
1775
  | Prop | Default | Kind |
1602
1776
  |---|---|---|
1603
1777
  | `enabled` | `true` | boolean |
1604
- | `prefab` | `""` | node path |
1778
+ | `prefab` | `""` | node path · **required** |
1605
1779
  | `interval` | `1` | number |
1606
1780
  | `max` | `0` | number |
1607
1781
  | `at` | `[]` | array |
@@ -1610,6 +1784,10 @@ Signals: `scoreChanged(score)` · `won` · `lost` · `lifeLost(lives)`
1610
1784
 
1611
1785
  Signals: `spawned(node)` · `finished`
1612
1786
 
1787
+ Methods: `start()` · `stop()` · `spawn()`
1788
+
1789
+ Reads: `liveCount: number`
1790
+
1613
1791
  ### `Wander`
1614
1792
 
1615
1793
  | Prop | Default | Kind |
@@ -1624,10 +1802,12 @@ Signals: `spawned(node)` · `finished`
1624
1802
  | Prop | Default | Kind |
1625
1803
  |---|---|---|
1626
1804
  | `enabled` | `true` | boolean |
1627
- | `waves` | `[]` | array |
1805
+ | `waves` | `[]` | array · **required** |
1628
1806
  | `autoStart` | `true` | boolean |
1629
1807
 
1630
- Signals: `waveStarted(index)` · `waveCleared(index)` · `allCleared`
1808
+ Signals: `spawned(node)` · `waveStarted(index)` · `waveCleared(index)` · `allCleared`
1809
+
1810
+ Methods: `start()`
1631
1811
 
1632
1812
  ### `ZombieAI`
1633
1813