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
@@ -11,33 +11,16 @@
11
11
  "turbidity": 5,
12
12
  "rayleigh": 3.2
13
13
  },
14
- "fog": {
15
- "near": 20,
16
- "far": 80
17
- },
18
- "shadows": {
19
- "mapSize": 2048
20
- },
14
+ "fog": { "near": 20, "far": 80 },
15
+ "shadows": { "mapSize": 2048 },
21
16
  "exposure": 1,
22
- "ambient": {
23
- "color": "#a8b4e0",
24
- "intensity": 0.95
25
- },
17
+ "ambient": { "color": "#a8b4e0", "intensity": 0.95 },
26
18
  "iblIntensity": 0.85,
27
19
  "background": "#141322",
28
- "post": {
29
- "vignette": 0.34,
30
- "saturation": 0.88,
31
- "contrast": 1.05
32
- },
33
- "bloom": {
34
- "threshold": 0.85,
35
- "strength": 0.5
36
- }
37
- },
38
- "physics": {
39
- "gravity": [0, -9.81, 0]
20
+ "post": { "vignette": 0.34, "saturation": 0.88, "contrast": 1.05 },
21
+ "bloom": { "threshold": 0.85, "strength": 0.5 }
40
22
  },
23
+ "physics": { "gravity": [0, -9.81, 0] },
41
24
  "input": {
42
25
  "move": {
43
26
  "type": "vector2",
@@ -48,30 +31,12 @@
48
31
  "right": ["KeyD", "ArrowRight"]
49
32
  }
50
33
  },
51
- "jump": {
52
- "type": "button",
53
- "keys": ["Space"]
54
- },
55
- "sprint": {
56
- "type": "button",
57
- "keys": ["ShiftLeft", "ShiftRight"]
58
- },
59
- "interact": {
60
- "type": "button",
61
- "keys": ["KeyE"]
62
- },
63
- "attack": {
64
- "type": "button",
65
- "keys": ["Mouse0", "KeyF"]
66
- },
67
- "restart": {
68
- "type": "button",
69
- "keys": ["KeyR"]
70
- },
71
- "pause": {
72
- "type": "button",
73
- "keys": ["Escape"]
74
- }
34
+ "jump": { "type": "button", "keys": ["Space"] },
35
+ "sprint": { "type": "button", "keys": ["ShiftLeft", "ShiftRight"] },
36
+ "interact": { "type": "button", "keys": ["KeyE"] },
37
+ "attack": { "type": "button", "keys": ["Mouse0", "KeyF"] },
38
+ "restart": { "type": "button", "keys": ["KeyR"] },
39
+ "pause": { "type": "button", "keys": ["Escape"] }
75
40
  },
76
41
  "assets": {
77
42
  "characters/base": {
@@ -106,29 +71,19 @@
106
71
  "root": {
107
72
  "name": "Game",
108
73
  "type": "Node",
109
- "script": {
110
- "name": "GroveDirector"
111
- },
74
+ "script": { "name": "GroveDirector" },
112
75
  "children": [
113
76
  {
114
77
  "name": "Flow",
115
78
  "type": "Node",
116
- "script": {
117
- "name": "GameFlow",
118
- "props": {
119
- "pausePanelPath": "%PauseMenu"
120
- }
121
- },
79
+ "script": { "name": "GameFlow", "props": { "pausePanelPath": "%PauseMenu" } },
122
80
  "uid": "n_72gl5aezorlb9d5n"
123
81
  },
124
82
  {
125
83
  "name": "Ground",
126
84
  "type": "StaticBody3D",
127
85
  "props": {
128
- "collider": {
129
- "shape": "box",
130
- "size": [40, 0.1, 32]
131
- },
86
+ "collider": { "shape": "box", "size": [40, 0.1, 32] },
132
87
  "position": [0, -0.05, 0]
133
88
  },
134
89
  "children": [
@@ -138,65 +93,37 @@
138
93
  "props": {
139
94
  "mesh": "box",
140
95
  "size": [40, 0.1, 32],
141
- "material": {
142
- "color": "#2f4030",
143
- "roughness": 1
144
- },
96
+ "material": { "color": "#2f4030", "roughness": 1 },
145
97
  "receiveShadow": true
146
98
  }
147
99
  }
148
100
  ]
149
101
  },
150
- {
151
- "name": "Maze",
152
- "type": "Node3D"
153
- },
102
+ { "name": "Maze", "type": "Node3D" },
154
103
  {
155
104
  "name": "Scenery",
156
105
  "type": "Node3D",
157
- "props": {
158
- "static": true
159
- },
106
+ "props": { "static": true },
160
107
  "children": [
161
108
  {
162
109
  "name": "Pine1",
163
110
  "type": "Tree3D",
164
- "props": {
165
- "position": [-18, 0, -13],
166
- "type": "conifer",
167
- "seed": 7,
168
- "height": 9
169
- }
111
+ "props": { "position": [-18, 0, -13], "type": "conifer", "seed": 7, "height": 9 }
170
112
  },
171
113
  {
172
114
  "name": "Pine2",
173
115
  "type": "Tree3D",
174
- "props": {
175
- "position": [18, 0, -12],
176
- "type": "conifer",
177
- "seed": 13,
178
- "height": 8
179
- }
116
+ "props": { "position": [18, 0, -12], "type": "conifer", "seed": 13, "height": 8 }
180
117
  },
181
118
  {
182
119
  "name": "Pine3",
183
120
  "type": "Tree3D",
184
- "props": {
185
- "position": [-17, 0, 12],
186
- "type": "dead",
187
- "seed": 29,
188
- "height": 7
189
- }
121
+ "props": { "position": [-17, 0, 12], "type": "dead", "seed": 29, "height": 7 }
190
122
  },
191
123
  {
192
124
  "name": "Pine4",
193
125
  "type": "Tree3D",
194
- "props": {
195
- "position": [17, 0, 13],
196
- "type": "conifer",
197
- "seed": 41,
198
- "height": 10
199
- }
126
+ "props": { "position": [17, 0, 13], "type": "conifer", "seed": 41, "height": 10 }
200
127
  },
201
128
  {
202
129
  "name": "Moon",
@@ -219,13 +146,7 @@
219
146
  "name": "Wolf1",
220
147
  "type": "Node3D",
221
148
  "groups": ["wolf"],
222
- "script": {
223
- "name": "PathFollow",
224
- "props": {
225
- "speed": 2.4,
226
- "loop": true
227
- }
228
- },
149
+ "script": { "name": "PathFollow", "props": { "speed": 2.4, "loop": true } },
229
150
  "children": [
230
151
  {
231
152
  "name": "Body",
@@ -234,10 +155,7 @@
234
155
  "mesh": "box",
235
156
  "size": [0.55, 0.5, 1.3],
236
157
  "position": [0, 0, 0],
237
- "material": {
238
- "color": "#3b3b44",
239
- "roughness": 0.9
240
- },
158
+ "material": { "color": "#3b3b44", "roughness": 0.9 },
241
159
  "castShadow": true
242
160
  }
243
161
  },
@@ -248,10 +166,7 @@
248
166
  "mesh": "box",
249
167
  "size": [0.4, 0.38, 0.5],
250
168
  "position": [0, 0.18, 0.75],
251
- "material": {
252
- "color": "#46464f",
253
- "roughness": 0.9
254
- },
169
+ "material": { "color": "#46464f", "roughness": 0.9 },
255
170
  "castShadow": true
256
171
  }
257
172
  },
@@ -262,11 +177,7 @@
262
177
  "mesh": "sphere",
263
178
  "size": [0.07, 0.07, 0.07],
264
179
  "position": [-0.1, 0.24, 1],
265
- "material": {
266
- "color": "#ff3030",
267
- "emissive": "#ff3030",
268
- "emissiveIntensity": 2
269
- }
180
+ "material": { "color": "#ff3030", "emissive": "#ff3030", "emissiveIntensity": 2 }
270
181
  }
271
182
  },
272
183
  {
@@ -276,11 +187,7 @@
276
187
  "mesh": "sphere",
277
188
  "size": [0.07, 0.07, 0.07],
278
189
  "position": [0.1, 0.24, 1],
279
- "material": {
280
- "color": "#ff3030",
281
- "emissive": "#ff3030",
282
- "emissiveIntensity": 2
283
- }
190
+ "material": { "color": "#ff3030", "emissive": "#ff3030", "emissiveIntensity": 2 }
284
191
  }
285
192
  },
286
193
  {
@@ -291,10 +198,7 @@
291
198
  "size": [0.12, 0.12, 0.55],
292
199
  "position": [0, 0.12, -0.85],
293
200
  "rotation": [-20, 0, 0],
294
- "material": {
295
- "color": "#33333b",
296
- "roughness": 0.9
297
- },
201
+ "material": { "color": "#33333b", "roughness": 0.9 },
298
202
  "castShadow": true
299
203
  }
300
204
  },
@@ -315,10 +219,7 @@
315
219
  "type": "Area3D",
316
220
  "props": {
317
221
  "position": [0, 0.1, 0.55],
318
- "collider": {
319
- "shape": "box",
320
- "size": [0.6, 0.8, 0.7]
321
- }
222
+ "collider": { "shape": "box", "size": [0.6, 0.8, 0.7] }
322
223
  },
323
224
  "script": {
324
225
  "name": "DamageOnContact",
@@ -338,13 +239,7 @@
338
239
  "name": "Wolf2",
339
240
  "type": "Node3D",
340
241
  "groups": ["wolf"],
341
- "script": {
342
- "name": "PathFollow",
343
- "props": {
344
- "speed": 2.4,
345
- "loop": true
346
- }
347
- },
242
+ "script": { "name": "PathFollow", "props": { "speed": 2.4, "loop": true } },
348
243
  "children": [
349
244
  {
350
245
  "name": "Body",
@@ -353,10 +248,7 @@
353
248
  "mesh": "box",
354
249
  "size": [0.55, 0.5, 1.3],
355
250
  "position": [0, 0, 0],
356
- "material": {
357
- "color": "#3b3b44",
358
- "roughness": 0.9
359
- },
251
+ "material": { "color": "#3b3b44", "roughness": 0.9 },
360
252
  "castShadow": true
361
253
  }
362
254
  },
@@ -367,10 +259,7 @@
367
259
  "mesh": "box",
368
260
  "size": [0.4, 0.38, 0.5],
369
261
  "position": [0, 0.18, 0.75],
370
- "material": {
371
- "color": "#46464f",
372
- "roughness": 0.9
373
- },
262
+ "material": { "color": "#46464f", "roughness": 0.9 },
374
263
  "castShadow": true
375
264
  }
376
265
  },
@@ -381,11 +270,7 @@
381
270
  "mesh": "sphere",
382
271
  "size": [0.07, 0.07, 0.07],
383
272
  "position": [-0.1, 0.24, 1],
384
- "material": {
385
- "color": "#ff3030",
386
- "emissive": "#ff3030",
387
- "emissiveIntensity": 2
388
- }
273
+ "material": { "color": "#ff3030", "emissive": "#ff3030", "emissiveIntensity": 2 }
389
274
  }
390
275
  },
391
276
  {
@@ -395,11 +280,7 @@
395
280
  "mesh": "sphere",
396
281
  "size": [0.07, 0.07, 0.07],
397
282
  "position": [0.1, 0.24, 1],
398
- "material": {
399
- "color": "#ff3030",
400
- "emissive": "#ff3030",
401
- "emissiveIntensity": 2
402
- }
283
+ "material": { "color": "#ff3030", "emissive": "#ff3030", "emissiveIntensity": 2 }
403
284
  }
404
285
  },
405
286
  {
@@ -410,10 +291,7 @@
410
291
  "size": [0.12, 0.12, 0.55],
411
292
  "position": [0, 0.12, -0.85],
412
293
  "rotation": [-20, 0, 0],
413
- "material": {
414
- "color": "#33333b",
415
- "roughness": 0.9
416
- },
294
+ "material": { "color": "#33333b", "roughness": 0.9 },
417
295
  "castShadow": true
418
296
  }
419
297
  },
@@ -434,10 +312,7 @@
434
312
  "type": "Area3D",
435
313
  "props": {
436
314
  "position": [0, 0.1, 0.55],
437
- "collider": {
438
- "shape": "box",
439
- "size": [0.6, 0.8, 0.7]
440
- }
315
+ "collider": { "shape": "box", "size": [0.6, 0.8, 0.7] }
441
316
  },
442
317
  "script": {
443
318
  "name": "DamageOnContact",
@@ -457,13 +332,7 @@
457
332
  "name": "Wolf3",
458
333
  "type": "Node3D",
459
334
  "groups": ["wolf"],
460
- "script": {
461
- "name": "PathFollow",
462
- "props": {
463
- "speed": 2.4,
464
- "loop": true
465
- }
466
- },
335
+ "script": { "name": "PathFollow", "props": { "speed": 2.4, "loop": true } },
467
336
  "children": [
468
337
  {
469
338
  "name": "Body",
@@ -472,10 +341,7 @@
472
341
  "mesh": "box",
473
342
  "size": [0.55, 0.5, 1.3],
474
343
  "position": [0, 0, 0],
475
- "material": {
476
- "color": "#3b3b44",
477
- "roughness": 0.9
478
- },
344
+ "material": { "color": "#3b3b44", "roughness": 0.9 },
479
345
  "castShadow": true
480
346
  }
481
347
  },
@@ -486,10 +352,7 @@
486
352
  "mesh": "box",
487
353
  "size": [0.4, 0.38, 0.5],
488
354
  "position": [0, 0.18, 0.75],
489
- "material": {
490
- "color": "#46464f",
491
- "roughness": 0.9
492
- },
355
+ "material": { "color": "#46464f", "roughness": 0.9 },
493
356
  "castShadow": true
494
357
  }
495
358
  },
@@ -500,11 +363,7 @@
500
363
  "mesh": "sphere",
501
364
  "size": [0.07, 0.07, 0.07],
502
365
  "position": [-0.1, 0.24, 1],
503
- "material": {
504
- "color": "#ff3030",
505
- "emissive": "#ff3030",
506
- "emissiveIntensity": 2
507
- }
366
+ "material": { "color": "#ff3030", "emissive": "#ff3030", "emissiveIntensity": 2 }
508
367
  }
509
368
  },
510
369
  {
@@ -514,11 +373,7 @@
514
373
  "mesh": "sphere",
515
374
  "size": [0.07, 0.07, 0.07],
516
375
  "position": [0.1, 0.24, 1],
517
- "material": {
518
- "color": "#ff3030",
519
- "emissive": "#ff3030",
520
- "emissiveIntensity": 2
521
- }
376
+ "material": { "color": "#ff3030", "emissive": "#ff3030", "emissiveIntensity": 2 }
522
377
  }
523
378
  },
524
379
  {
@@ -529,10 +384,7 @@
529
384
  "size": [0.12, 0.12, 0.55],
530
385
  "position": [0, 0.12, -0.85],
531
386
  "rotation": [-20, 0, 0],
532
- "material": {
533
- "color": "#33333b",
534
- "roughness": 0.9
535
- },
387
+ "material": { "color": "#33333b", "roughness": 0.9 },
536
388
  "castShadow": true
537
389
  }
538
390
  },
@@ -553,10 +405,7 @@
553
405
  "type": "Area3D",
554
406
  "props": {
555
407
  "position": [0, 0.1, 0.55],
556
- "collider": {
557
- "shape": "box",
558
- "size": [0.6, 0.8, 0.7]
559
- }
408
+ "collider": { "shape": "box", "size": [0.6, 0.8, 0.7] }
560
409
  },
561
410
  "script": {
562
411
  "name": "DamageOnContact",
@@ -579,10 +428,7 @@
579
428
  "type": "Area3D",
580
429
  "props": {
581
430
  "position": [3.5, 1.2, 13.5],
582
- "collider": {
583
- "shape": "box",
584
- "size": [1.8, 2.4, 0.8]
585
- }
431
+ "collider": { "shape": "box", "size": [1.8, 2.4, 0.8] }
586
432
  },
587
433
  "children": [
588
434
  {
@@ -592,10 +438,7 @@
592
438
  "mesh": "box",
593
439
  "size": [2.2, 2.8, 0.3],
594
440
  "position": [0, 0.2, 0.6],
595
- "material": {
596
- "color": "#5c4632",
597
- "roughness": 0.9
598
- },
441
+ "material": { "color": "#5c4632", "roughness": 0.9 },
599
442
  "castShadow": true
600
443
  }
601
444
  },
@@ -624,11 +467,7 @@
624
467
  "position": [0, 1.4, 13],
625
468
  "fixedRotation": true,
626
469
  "friction": 0,
627
- "collider": {
628
- "shape": "capsule",
629
- "radius": 0.34,
630
- "height": 1
631
- }
470
+ "collider": { "shape": "capsule", "radius": 0.34, "height": 1 }
632
471
  },
633
472
  "children": [
634
473
  {
@@ -648,11 +487,11 @@
648
487
  "run": "$anims/run",
649
488
  "fastRun": "$anims/runFast",
650
489
  "airborne": "$anims/jump"
651
- }
652
- },
653
- "script": {
654
- "name": "SwordStrike"
490
+ },
491
+ "coyoteSeconds": 0.12,
492
+ "jumpBufferSeconds": 0.15
655
493
  },
494
+ "script": { "name": "SwordStrike" },
656
495
  "uid": "n_9xdg9b3a5eb9r4x1"
657
496
  },
658
497
  {
@@ -669,10 +508,7 @@
669
508
  {
670
509
  "name": "SwordMount",
671
510
  "type": "BoneAttachment3D",
672
- "props": {
673
- "target": "../Skin",
674
- "bone": "RightHand"
675
- },
511
+ "props": { "target": "../Skin", "bone": "RightHand" },
676
512
  "children": [
677
513
  {
678
514
  "name": "Blade",
@@ -681,11 +517,7 @@
681
517
  "mesh": "box",
682
518
  "size": [0.045, 0.7, 0.045],
683
519
  "position": [0, 0.42, 0],
684
- "material": {
685
- "color": "#d8dde8",
686
- "metalness": 0.9,
687
- "roughness": 0.25
688
- },
520
+ "material": { "color": "#d8dde8", "metalness": 0.9, "roughness": 0.25 },
689
521
  "castShadow": true
690
522
  }
691
523
  },
@@ -696,19 +528,13 @@
696
528
  "mesh": "box",
697
529
  "size": [0.16, 0.04, 0.06],
698
530
  "position": [0, 0.09, 0],
699
- "material": {
700
- "color": "#8a6d3a",
701
- "metalness": 0.7,
702
- "roughness": 0.4
703
- }
531
+ "material": { "color": "#8a6d3a", "metalness": 0.7, "roughness": 0.4 }
704
532
  }
705
533
  },
706
534
  {
707
535
  "name": "SwordTip",
708
536
  "type": "Node3D",
709
- "props": {
710
- "position": [0, 0.78, 0]
711
- },
537
+ "props": { "position": [0, 0.78, 0] },
712
538
  "children": [
713
539
  {
714
540
  "name": "SwingTrail",
@@ -730,50 +556,20 @@
730
556
  {
731
557
  "name": "SwingSfx",
732
558
  "type": "AudioPlayer",
733
- "props": {
734
- "preset": "shoot",
735
- "volume": 0.35,
736
- "pitch": 0.55
737
- }
559
+ "props": { "preset": "shoot", "volume": 0.35, "pitch": 0.55 }
738
560
  },
739
- {
740
- "name": "HitSfx",
741
- "type": "AudioPlayer",
742
- "props": {
743
- "preset": "hit",
744
- "volume": 0.6
745
- }
746
- },
747
- {
748
- "name": "Catch",
749
- "type": "Respawn"
750
- }
561
+ { "name": "HitSfx", "type": "AudioPlayer", "props": { "preset": "hit", "volume": 0.6 } },
562
+ { "name": "Catch", "type": "Respawn" }
751
563
  ],
752
- "script": {
753
- "name": "Health",
754
- "props": {
755
- "max": 100,
756
- "invulnerableFor": 0.8
757
- }
758
- },
564
+ "script": { "name": "Health", "props": { "max": 100, "invulnerableFor": 0.8 } },
759
565
  "uid": "n_3hp4w1vicxhqr375"
760
566
  },
761
567
  {
762
568
  "name": "Camera",
763
569
  "type": "Camera3D",
764
- "props": {
765
- "current": true,
766
- "position": [0, 4, 19]
767
- }
768
- },
769
- {
770
- "name": "WinSfx",
771
- "type": "AudioPlayer",
772
- "props": {
773
- "preset": "win",
774
- "volume": 0.6
775
- }
570
+ "props": { "current": true, "position": [0, 4, 19] }
776
571
  },
572
+ { "name": "WinSfx", "type": "AudioPlayer", "props": { "preset": "win", "volume": 0.6 } },
777
573
  {
778
574
  "name": "HUD",
779
575
  "type": "HudLayer",
@@ -782,31 +578,19 @@
782
578
  "name": "Quest",
783
579
  "type": "UiText",
784
580
  "uid": "n_nmkf915b9r8d37nf",
785
- "props": {
786
- "text": "Wolves left: 3",
787
- "size": 16,
788
- "anchor": "topLeft",
789
- "shadow": true
790
- }
581
+ "props": { "text": "Wolves left: 3", "size": 16, "anchor": "topLeft", "shadow": true }
791
582
  },
792
583
  {
793
584
  "name": "HP",
794
585
  "type": "UiBar",
795
586
  "uid": "n_kdm2vun7p0o3t4l2",
796
- "props": {
797
- "anchor": "topRight",
798
- "value": 100,
799
- "max": 100,
800
- "width": 160
801
- }
587
+ "props": { "anchor": "topRight", "value": 100, "max": 100, "width": 160 }
802
588
  },
803
589
  {
804
590
  "name": "Banner",
805
591
  "type": "UiBanner",
806
592
  "uid": "n_21yz0pgnwqvz81yo",
807
- "props": {
808
- "anchor": "center"
809
- }
593
+ "props": { "anchor": "center" }
810
594
  },
811
595
  {
812
596
  "name": "Hint",
@@ -823,29 +607,17 @@
823
607
  {
824
608
  "name": "PauseMenu",
825
609
  "type": "UiPanel",
826
- "props": {
827
- "anchor": "center",
828
- "layout": "column",
829
- "gap": 10,
830
- "padding": 18
831
- },
610
+ "props": { "anchor": "center", "layout": "column", "gap": 10, "padding": 18 },
832
611
  "children": [
833
612
  {
834
613
  "name": "PausedTitle",
835
614
  "type": "UiText",
836
- "props": {
837
- "text": "Paused",
838
- "size": 24
839
- }
615
+ "props": { "text": "Paused", "size": 24 }
840
616
  },
841
617
  {
842
618
  "name": "ResumeHint",
843
619
  "type": "UiText",
844
- "props": {
845
- "text": "Esc to resume · R to restart",
846
- "size": 13,
847
- "color": "#c9d2dd"
848
- }
620
+ "props": { "text": "Esc to resume · R to restart", "size": 13, "color": "#c9d2dd" }
849
621
  }
850
622
  ]
851
623
  }
@@ -855,17 +627,7 @@
855
627
  "uid": "n_tq2dy6amirvyfhlg"
856
628
  },
857
629
  "connections": [
858
- {
859
- "signal": "triggerEnter",
860
- "from": "ReturnPortal",
861
- "to": "/root",
862
- "handler": "onPortalEnter"
863
- },
864
- {
865
- "signal": "died",
866
- "from": "Player",
867
- "to": "/root",
868
- "handler": "onPlayerDown"
869
- }
630
+ { "signal": "triggerEnter", "from": "ReturnPortal", "to": "/root", "handler": "onPortalEnter" },
631
+ { "signal": "died", "from": "Player", "to": "/root", "handler": "onPlayerDown" }
870
632
  ]
871
633
  }