incanto 0.67.0 → 0.69.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.
- package/assets/catalog.json +9 -5
- package/bin/_pick-server.mjs +48 -0
- package/bin/incanto-assets.mjs +14 -1
- package/bin/incanto-check.mjs +69 -5
- package/bin/incanto-frame.mjs +10 -25
- package/bin/incanto-logs.mjs +8 -18
- package/bin/incanto-new.mjs +29 -1
- package/bin/incanto-serve.mjs +160 -0
- package/bin/incanto-verify.mjs +40 -0
- package/bin/incanto.mjs +1 -0
- package/dist/2d.d.ts +10 -8
- package/dist/2d.js +6 -4
- package/dist/3d.d.ts +31 -7
- package/dist/3d.js +9 -7
- package/dist/{audio-player-BNUHo0JF.d.ts → audio-player-C0j2k-yB.d.ts} +80 -3
- package/dist/{behavior-ZnfzKDo3.d.ts → behavior-rm8vVzu_.d.ts} +145 -1
- package/dist/boot-failure-CKYrEcGF.js +47 -0
- package/dist/{create-game-FAXdHta3.js → create-game-CvJ1wSRP.js} +27 -27
- package/dist/{create-game-DMetd3vR.js → create-game-CwxEDlCm.js} +15 -11
- package/dist/debug.d.ts +1 -1
- package/dist/{duplicate-B8QnX2-r.js → duplicate-Dj4L-5AA.js} +1 -1
- package/dist/{editor-switch-DAvWQeld.d.ts → editor-switch-CnIOiyNJ.d.ts} +1 -1
- package/dist/editor.js +12 -6
- package/dist/env.d.ts +1 -1
- package/dist/{environment-presets-C-5g2pMh.js → environment-presets-BO-7XoFV.js} +58 -9
- package/dist/{frame-report-DCnHFmto.d.ts → frame-report-DNxDAb1w.d.ts} +8 -0
- package/dist/{frame-report-BSMny7oe.js → frame-report-Dlq13Gyj.js} +1 -0
- package/dist/{gameplay-CGSv-9XR.js → gameplay-D1KixWK8.js} +175 -151
- package/dist/gameplay.d.ts +51 -3
- package/dist/gameplay.js +2 -2
- package/dist/index.d.ts +6 -6
- package/dist/index.js +8 -7
- package/dist/{loader-KZESOZmE.js → loader-DZE7B07H.js} +48 -7
- package/dist/{loader-DyT30ArB.d.ts → loader-DadV2QCT.d.ts} +2 -2
- package/dist/net.d.ts +2 -2
- package/dist/net.js +1 -1
- package/dist/{physics-2d-_B6zj3zU.js → physics-2d-CF5yyjbj.js} +2 -2
- package/dist/{physics-3d-i1IeAY0F.js → physics-3d-DbYaEcZy.js} +3 -3
- package/dist/react.d.ts +2 -2
- package/dist/react.js +1 -1
- package/dist/{register-vIxU3Xbv.js → register-DbVArsns.js} +19 -10
- package/dist/{register-Cs53CY7s.js → register-mmfugpaQ.js} +159 -6
- package/dist/{replay-BkpDV51O.js → replay-BEHLDcQV.js} +28 -5
- package/dist/{replay-D0GcEHYU.d.ts → replay-BQfkX4x7.d.ts} +38 -4
- package/dist/{schema-CFeioQRE.d.ts → schema-B6ugCV1Q.d.ts} +11 -0
- package/dist/{sheet-grid-BT6N_Bjs.js → sheet-grid-Cea343VO.js} +6 -2
- package/dist/{split-screen-DS8RaUV_.js → split-screen-CauMwu6y.js} +2 -2
- package/dist/{split-screen-DD5eYIgW.d.ts → split-screen-Cg76MCV5.d.ts} +3 -3
- package/dist/{src-BLlsGJW9.js → src-CYEu-_S9.js} +1 -1
- package/dist/{teardown-LB9cTnXJ.js → teardown-CMqFVxO9.js} +5 -4
- package/dist/{test-81uZ967a.js → test-D6ISmuFE.js} +73 -25
- package/dist/test.d.ts +17 -6
- package/dist/test.js +3 -3
- package/dist/vite.d.ts +70 -2
- package/dist/vite.js +176 -14
- package/dist/{rendering-options-ByAdi8PF.js → webgl-unavailable-Z5_g8x9H.js} +57 -2
- package/editor/assets/{agent8-C2jtNKbx.js → agent8-BDvaZMQJ.js} +1 -1
- package/editor/assets/{debug-DoU3KeqS.js → debug-CMULinBW.js} +1 -1
- package/editor/assets/{index-CNqHojcC.js → index-CZIRr5EL.js} +92 -92
- package/editor/index.html +1 -1
- package/package.json +4 -3
- package/schemas/scene.schema.json +4 -0
- package/skills/incanto-3d-character.md +1 -0
- package/skills/incanto-assets.md +16 -2
- package/skills/incanto-audio.md +65 -0
- package/skills/incanto-building-2d-games.md +66 -0
- package/skills/incanto-building-3d-games.md +97 -2
- package/skills/incanto-gameplay-behaviors.md +46 -2
- package/skills/incanto-node-reference.md +1 -0
- package/skills/incanto-physics-and-input.md +23 -0
- package/skills/incanto-save-slots.md +27 -0
- package/skills/incanto-scene-json-authoring.md +12 -1
- package/skills/incanto-verifying-your-game.md +96 -2
- package/skills/incanto-your-first-game.md +2 -1
- package/templates-app/beacon-isle-3d/package.json +1 -1
- package/templates-app/beacon-isle-3d/src/main.ts +21 -4
- package/templates-app/platformer-2d/index.html +0 -23
- package/templates-app/platformer-2d/package.json +1 -1
- package/templates-app/platformer-2d/src/behaviors.ts +26 -16
- package/templates-app/platformer-2d/src/game.scene.json +17 -27
- package/templates-app/platformer-2d/src/main.ts +32 -13
- package/templates-app/star-survivor/package.json +1 -1
- package/templates-app/star-survivor/src/main.ts +25 -7
- package/templates-app/tps-3d/package.json +1 -1
- package/templates-app/tps-3d/src/main.ts +34 -16
- package/templates-app/village-quest-3d/package.json +1 -1
- package/templates-app/village-quest-3d/src/main.ts +21 -4
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
|
|
2
|
-
import { d as computeViewport, f as resolveViewport, k as diagnose, n as loadScene, z as registerBehavior } from "./loader-
|
|
3
|
-
import { _ as AudioPlayer, v as Engine } from "./register-
|
|
2
|
+
import { d as computeViewport, f as resolveViewport, k as diagnose, n as loadScene, z as registerBehavior } from "./loader-DZE7B07H.js";
|
|
3
|
+
import { _ as AudioPlayer, v as Engine } from "./register-mmfugpaQ.js";
|
|
4
4
|
import { t as IncantoError } from "./errors-BpWbnbb_.js";
|
|
5
5
|
import { n as attachTouchControls } from "./touch-DEAmqGdf.js";
|
|
6
|
-
import {
|
|
7
|
-
import { a as openBundledEditor, c as claimCanvasGestures, i as devServerLibrary, l as audioErrors, n as pauseWhenHidden, r as crossFade, s as wireDevChannel, t as teardown } from "./teardown-
|
|
8
|
-
import { o as frameStats } from "./frame-report-
|
|
9
|
-
import { n as registerGameplayBehaviors } from "./gameplay-
|
|
10
|
-
import { g as PhysicsBody2D, n as UILayer, t as registerNodes2D, u as Camera2D, y as Node2D } from "./register-
|
|
6
|
+
import { n as withWebGLContext, r as resolveRendering } from "./webgl-unavailable-Z5_g8x9H.js";
|
|
7
|
+
import { a as openBundledEditor, c as claimCanvasGestures, i as devServerLibrary, l as audioErrors, n as pauseWhenHidden, r as crossFade, s as wireDevChannel, t as teardown } from "./teardown-CMqFVxO9.js";
|
|
8
|
+
import { o as frameStats } from "./frame-report-Dlq13Gyj.js";
|
|
9
|
+
import { n as registerGameplayBehaviors } from "./gameplay-D1KixWK8.js";
|
|
10
|
+
import { g as PhysicsBody2D, n as UILayer, t as registerNodes2D, u as Camera2D, y as Node2D } from "./register-DbVArsns.js";
|
|
11
11
|
import { t as debugSources } from "./debug-draw-BM3DsvtT.js";
|
|
12
|
-
import { n as enablePhysics2D } from "./physics-2d-
|
|
12
|
+
import { n as enablePhysics2D } from "./physics-2d-CF5yyjbj.js";
|
|
13
13
|
import { Box3, BufferAttribute, BufferGeometry, Color, LineBasicMaterial, LineSegments, LinearFilter, NearestFilter, OrthographicCamera, Raycaster, SRGBColorSpace, Scene, TextureLoader, Vector2, Vector3, WebGLRenderer } from "three";
|
|
14
14
|
//#region src/2d/assets.ts
|
|
15
15
|
/**
|
|
@@ -445,11 +445,11 @@ var Renderer2D = class {
|
|
|
445
445
|
pixelRatio: 1,
|
|
446
446
|
preserveDrawingBuffer: false
|
|
447
447
|
}, globalThis.devicePixelRatio ?? 1, opts);
|
|
448
|
-
this.webgl = new WebGLRenderer({
|
|
448
|
+
this.webgl = withWebGLContext(() => new WebGLRenderer({
|
|
449
449
|
canvas: opts.canvas,
|
|
450
450
|
antialias: rendering.antialias,
|
|
451
451
|
preserveDrawingBuffer: rendering.preserveDrawingBuffer
|
|
452
|
-
});
|
|
452
|
+
}));
|
|
453
453
|
this.webgl.info.autoReset = false;
|
|
454
454
|
this.engine.picker = (x, y) => this.pick(x, y);
|
|
455
455
|
this.basePixelRatio = rendering.pixelRatio;
|
|
@@ -768,6 +768,10 @@ async function createGame2D(opts) {
|
|
|
768
768
|
engine.setScene(scene);
|
|
769
769
|
let physics = null;
|
|
770
770
|
if (opts.physics === true || (opts.physics ?? "auto") === "auto" && hasBody(scene.root)) physics = await enablePhysics2D(engine);
|
|
771
|
+
if (opts.physics !== false) engine.physicsProvider = async (root) => {
|
|
772
|
+
if (engine.physics || !hasBody(root)) return;
|
|
773
|
+
physics = await enablePhysics2D(engine);
|
|
774
|
+
};
|
|
771
775
|
const cleanups = [];
|
|
772
776
|
const keyboard = opts.keyboard ?? (typeof window !== "undefined" ? window : false);
|
|
773
777
|
if (keyboard) engine.input.attachKeyboard(keyboard);
|
|
@@ -910,7 +914,7 @@ async function createGame2D(opts) {
|
|
|
910
914
|
engine.start();
|
|
911
915
|
function disposeGame() {
|
|
912
916
|
teardown([
|
|
913
|
-
|
|
917
|
+
["physics", () => physics?.dispose()],
|
|
914
918
|
["app cleanups", () => {
|
|
915
919
|
for (const cleanup of cleanups) cleanup();
|
|
916
920
|
}],
|
package/dist/debug.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ft as LogLevel, T as RendererStats, b as Engine } from "./behavior-
|
|
1
|
+
import { Ft as LogLevel, T as RendererStats, b as Engine } from "./behavior-rm8vVzu_.js";
|
|
2
2
|
|
|
3
3
|
//#region src/debug/panel.d.ts
|
|
4
4
|
/** Minimal document surface the overlay needs (injectable for tests). */
|
package/dist/editor.js
CHANGED
|
@@ -1983,7 +1983,7 @@ function an(e) {
|
|
|
1983
1983
|
}
|
|
1984
1984
|
//#endregion
|
|
1985
1985
|
//#region ../engine/assets/catalog.json
|
|
1986
|
-
var on = /*#__PURE__*/ JSON.parse("[{\"name\":\"2dbasic\",\"file\":\"characters/2dbasic.png\",\"url\":\"incanto/assets/characters/2dbasic.png\",\"kind\":\"character\",\"bytes\":30499,\"description\":\"2dbasic sprite sheet image.anything,base character. (frame size 192x192)\",\"animation\":\"characters/2dbasic.json\",\"frameWidth\":111,\"frameHeight\":83},{\"name\":\"attacked\",\"file\":\"audio/attacked.mp3\",\"url\":\"incanto/assets/audio/attacked.mp3\",\"kind\":\"audio\",\"bytes\":8757,\"description\":\"Short hurt / took-damage SFX for the player or an enemy.\"},{\"name\":\"bark_birch_color\",\"file\":\"vegetation/bark/birch_color_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/birch_color_1k.jpg\",\"kind\":\"foliage\",\"bytes\":194186,\"description\":\"Birch bark base color texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_birch_normal\",\"file\":\"vegetation/bark/birch_normal_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/birch_normal_1k.jpg\",\"kind\":\"foliage\",\"bytes\":378046,\"description\":\"Birch bark tangent-space normal texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_birch_roughness\",\"file\":\"vegetation/bark/birch_roughness_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/birch_roughness_1k.jpg\",\"kind\":\"foliage\",\"bytes\":127387,\"description\":\"Birch bark roughness texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_oak_color\",\"file\":\"vegetation/bark/oak_color_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/oak_color_1k.jpg\",\"kind\":\"foliage\",\"bytes\":297877,\"description\":\"Oak bark base color texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_oak_normal\",\"file\":\"vegetation/bark/oak_normal_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/oak_normal_1k.jpg\",\"kind\":\"foliage\",\"bytes\":67610,\"description\":\"Oak bark tangent-space normal texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_oak_roughness\",\"file\":\"vegetation/bark/oak_roughness_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/oak_roughness_1k.jpg\",\"kind\":\"foliage\",\"bytes\":16648,\"description\":\"Oak bark roughness texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_pine_color\",\"file\":\"vegetation/bark/pine_color_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/pine_color_1k.jpg\",\"kind\":\"foliage\",\"bytes\":196361,\"description\":\"Pine bark base color texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_pine_normal\",\"file\":\"vegetation/bark/pine_normal_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/pine_normal_1k.jpg\",\"kind\":\"foliage\",\"bytes\":58237,\"description\":\"Pine bark tangent-space normal texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_pine_roughness\",\"file\":\"vegetation/bark/pine_roughness_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/pine_roughness_1k.jpg\",\"kind\":\"foliage\",\"bytes\":36136,\"description\":\"Pine bark roughness texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"box\",\"file\":\"items/box.png\",\"url\":\"incanto/assets/items/box.png\",\"kind\":\"item\",\"bytes\":10861,\"description\":\"Item box sprite for Dungeons and Dungeoners. Container sprite that holds random items or rewards when opened by player.\"},{\"name\":\"buff_potion\",\"file\":\"items/buff_potion.png\",\"url\":\"incanto/assets/items/buff_potion.png\",\"kind\":\"item\",\"bytes\":3809,\"description\":\"Buff potion item sprite for Dungeons and Dungeoners. Consumable item that grants temporary stat boosts or positive effects to player character.\"},{\"name\":\"coin\",\"file\":\"items/coin.png\",\"url\":\"incanto/assets/items/coin.png\",\"kind\":\"item\",\"bytes\":1689,\"description\":\"Gold coin collectible sprite for Dungeons and Dungeoners. Currency item with metallic sheen, used as in-game money or collectible reward.\"},{\"name\":\"explosion\",\"file\":\"audio/explosion.mp3\",\"url\":\"incanto/assets/audio/explosion.mp3\",\"kind\":\"audio\",\"bytes\":40124,\"description\":\"Impactful explosion / large destructive hit SFX. Pair with the Particles2D \\\"explosion\\\" preset.\"},{\"name\":\"floor00\",\"file\":\"tiles/floor00.jpg\",\"url\":\"incanto/assets/tiles/floor00.jpg\",\"kind\":\"tile\",\"bytes\":28736,\"description\":\"Basic floor tile texture for Dungeons and Dungeoners project, suitable for dungeon ground surfaces.\"},{\"name\":\"gem\",\"file\":\"items/gem.png\",\"url\":\"incanto/assets/items/gem.png\",\"kind\":\"item\",\"bytes\":8762,\"description\":\"Gem collectible sprite for Dungeons and Dungeoners. Valuable gemstone item used as currency, crafting material, or quest objective.\"},{\"name\":\"ghost\",\"file\":\"characters/ghost.png\",\"url\":\"incanto/assets/characters/ghost.png\",\"kind\":\"character\",\"bytes\":22933,\"description\":\"Ghost character with translucent appearance sprite sheet image (frame size 112x128)\",\"animation\":\"characters/ghost.json\",\"frameWidth\":112,\"frameHeight\":128},{\"name\":\"goblin\",\"file\":\"characters/goblin.png\",\"url\":\"incanto/assets/characters/goblin.png\",\"kind\":\"character\",\"bytes\":57994,\"description\":\"Medieval goblin with torch sprite sheet image (frame size 192x192)\",\"animation\":\"characters/goblin.json\",\"frameWidth\":192,\"frameHeight\":192},{\"name\":\"gold\",\"file\":\"items/gold.png\",\"url\":\"incanto/assets/items/gold.png\",\"kind\":\"item\",\"bytes\":22313,\"description\":\"Gold item sprite for Dungeons and Dungeoners. Gold pile or gold bar sprite representing valuable currency or treasure reward.\"},{\"name\":\"gold-loot\",\"file\":\"audio/gold_loot.mp3\",\"url\":\"incanto/assets/audio/gold_loot.mp3\",\"kind\":\"audio\",\"bytes\":7506,\"description\":\"Metallic coin / gold pickup jingle — collecting currency.\"},{\"name\":\"ground_dirt\",\"file\":\"vegetation/ground/dirt_color.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ground/dirt_color.jpg\",\"kind\":\"foliage\",\"bytes\":231383,\"description\":\"Dense dirt/gravel ground texture (1024px) from the ez-tree demo app (MIT) — the reference meadow ground. Terrain3D grassland themes tile it for slope + noise-patch dirt by default; also bundled in `incanto/assets` (see `file`) for offline use.\"},{\"name\":\"ground_dirt_normal\",\"file\":\"vegetation/ground/dirt_normal.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ground/dirt_normal.jpg\",\"kind\":\"foliage\",\"bytes\":123478,\"description\":\"Dirt ground normal map (1024px) from the ez-tree demo app (MIT). Terrain3D grassland themes apply it across the whole ground band (demo parity); also bundled in `incanto/assets` (see `file`) for offline use.\"},{\"name\":\"ground_grass\",\"file\":\"vegetation/ground/grass.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ground/grass.jpg\",\"kind\":\"foliage\",\"bytes\":322486,\"description\":\"Mossy meadow grass ground texture (1024px) from the ez-tree demo app (MIT). Terrain3D grassland themes (meadow/forest generators) tile it as the grass splat layer by default; also bundled in `incanto/assets` (see `file`) for offline use.\"},{\"name\":\"heal\",\"file\":\"audio/heal.mp3\",\"url\":\"incanto/assets/audio/heal.mp3\",\"kind\":\"audio\",\"bytes\":29764,\"description\":\"Soothing health-restore / heal spell SFX.\"},{\"name\":\"hit-metal-bang\",\"file\":\"audio/hit_metal_bang.mp3\",\"url\":\"incanto/assets/audio/hit_metal_bang.mp3\",\"kind\":\"audio\",\"bytes\":17972,\"description\":\"Metallic impact — hitting armor, metal, or a blocked attack.\"},{\"name\":\"hp_potion\",\"file\":\"items/hp_potion.png\",\"url\":\"incanto/assets/items/hp_potion.png\",\"kind\":\"item\",\"bytes\":3513,\"description\":\"Health potion item sprite for Dungeons and Dungeoners. Consumable healing item that restores player health points when used.\"},{\"name\":\"ice-spear\",\"file\":\"audio/ice_spear.mp3\",\"url\":\"incanto/assets/audio/ice_spear.mp3\",\"kind\":\"audio\",\"bytes\":21315,\"description\":\"Sharp piercing ice projectile fire SFX.\"},{\"name\":\"leaves_ash\",\"file\":\"vegetation/ash_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ash_color.png\",\"kind\":\"foliage\",\"bytes\":181423,\"description\":\"Ash leaf-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for broadleaf/dead ash variants by default; copy it next to your game and set leafTexture to serve offline.\"},{\"name\":\"leaves_aspen\",\"file\":\"vegetation/aspen_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/aspen_color.png\",\"kind\":\"foliage\",\"bytes\":142116,\"description\":\"Aspen leaf-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for high-tier broadleaf aspen variants; copy + leafTexture for offline serving.\"},{\"name\":\"leaves_oak\",\"file\":\"vegetation/oak_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/oak_color.png\",\"kind\":\"foliage\",\"bytes\":238115,\"description\":\"Oak leaf-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for broadleaf oak variants by default; copy + leafTexture for offline serving.\"},{\"name\":\"leaves_pine\",\"file\":\"vegetation/pine_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/pine_color.png\",\"kind\":\"foliage\",\"bytes\":303684,\"description\":\"Pine needle-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for conifer variants by default; copy + leafTexture for offline serving.\"},{\"name\":\"locked_item_box\",\"file\":\"items/locked_item_box.png\",\"url\":\"incanto/assets/items/locked_item_box.png\",\"kind\":\"item\",\"bytes\":11074,\"description\":\"Locked item box sprite for Dungeons and Dungeoners. Container sprite requiring key or lockpick to open, containing valuable rewards.\"},{\"name\":\"map\",\"file\":\"items/map.png\",\"url\":\"incanto/assets/items/map.png\",\"kind\":\"item\",\"bytes\":3754,\"description\":\"Map item sprite for Dungeons and Dungeoners. Navigation item revealing dungeon layout or providing exploration assistance.\"},{\"name\":\"medieval-knight\",\"file\":\"characters/medieval-knight.png\",\"url\":\"incanto/assets/characters/medieval-knight.png\",\"kind\":\"character\",\"bytes\":84367,\"description\":\"(frame size 192x192) Using a medieval-themed SD(Super Deformed) knight sprite sheet image, you can apply idle, move, and attack animations, among others.\",\"animation\":\"characters/medieval-knight.json\",\"frameWidth\":192,\"frameHeight\":192},{\"name\":\"minecraft-tiles\",\"file\":\"tiles/minecraft-tiles.png\",\"url\":\"incanto/assets/tiles/minecraft-tiles.png\",\"kind\":\"tile\",\"bytes\":10511,\"description\":\"Minecraft-themed tiles sprite sheet image (frame size 16x16)\"},{\"name\":\"monster-died\",\"file\":\"audio/monster_died.mp3\",\"url\":\"incanto/assets/audio/monster_died.mp3\",\"kind\":\"audio\",\"bytes\":16836,\"description\":\"Enemy defeat / death SFX.\"},{\"name\":\"resurrection_potion\",\"file\":\"items/resurrection_potion.png\",\"url\":\"incanto/assets/items/resurrection_potion.png\",\"kind\":\"item\",\"bytes\":3471,\"description\":\"Resurrection potion item sprite for Dungeons and Dungeoners. Rare consumable that revives fallen party members or prevents death.\"},{\"name\":\"slash\",\"file\":\"audio/slash.mp3\",\"url\":\"incanto/assets/audio/slash.mp3\",\"kind\":\"audio\",\"bytes\":10425,\"description\":\"Quick sword swing / melee slash SFX.\"},{\"name\":\"smite\",\"file\":\"audio/smite.mp3\",\"url\":\"incanto/assets/audio/smite.mp3\",\"kind\":\"audio\",\"bytes\":12956,\"description\":\"Powerful holy downward-strike SFX.\"},{\"name\":\"spells-cast\",\"file\":\"audio/spells_cast.mp3\",\"url\":\"incanto/assets/audio/spells_cast.mp3\",\"kind\":\"audio\",\"bytes\":22151,\"description\":\"Generic magical spell-cast / chant SFX.\"},{\"name\":\"super_box\",\"file\":\"items/super_box.png\",\"url\":\"incanto/assets/items/super_box.png\",\"kind\":\"item\",\"bytes\":12184,\"description\":\"Super item box sprite for Dungeons and Dungeoners. Premium container sprite containing rare or powerful items and equipment.\"},{\"name\":\"swoosh\",\"file\":\"effects/swoosh.png\",\"url\":\"incanto/assets/effects/swoosh.png\",\"kind\":\"effect\",\"bytes\":2599,\"description\":\"Swoosh effect sprite for Dungeons and Dungeoners. Motion blur or attack trail effect used for melee attacks, sword slashes, or fast movement animations.\"},{\"name\":\"trap\",\"file\":\"items/trap.png\",\"url\":\"incanto/assets/items/trap.png\",\"kind\":\"item\",\"bytes\":3969,\"description\":\"Trap object sprite for Dungeons and Dungeoners. Hazard sprite that damages players when triggered in dungeon exploration.\"},{\"name\":\"ui-click\",\"file\":\"audio/ui_click.wav\",\"url\":\"incanto/assets/audio/ui_click.wav\",\"kind\":\"audio\",\"bytes\":17332,\"description\":\"Short tactile UI click for menus and buttons.\"},{\"name\":\"walk\",\"file\":\"audio/walk.mp3\",\"url\":\"incanto/assets/audio/walk.mp3\",\"kind\":\"audio\",\"bytes\":5642,\"description\":\"Single footstep SFX for character movement (loop or one-shot).\"},{\"name\":\"wall00\",\"file\":\"tiles/wall00.jpg\",\"url\":\"incanto/assets/tiles/wall00.jpg\",\"kind\":\"tile\",\"bytes\":44344,\"description\":\"Basic wall tile texture for Dungeons and Dungeoners project, suitable for dungeon vertical boundaries.\"}]");
|
|
1986
|
+
var on = /*#__PURE__*/ JSON.parse("[{\"name\":\"2dbasic\",\"file\":\"characters/2dbasic.png\",\"url\":\"incanto/assets/characters/2dbasic.png\",\"kind\":\"character\",\"bytes\":30499,\"description\":\"2dbasic sprite sheet image.anything,base character.\",\"animation\":\"characters/2dbasic.json\",\"frameWidth\":111,\"frameHeight\":83},{\"name\":\"attacked\",\"file\":\"audio/attacked.mp3\",\"url\":\"incanto/assets/audio/attacked.mp3\",\"kind\":\"audio\",\"bytes\":8757,\"description\":\"Short hurt / took-damage SFX for the player or an enemy.\"},{\"name\":\"bark_birch_color\",\"file\":\"vegetation/bark/birch_color_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/birch_color_1k.jpg\",\"kind\":\"foliage\",\"bytes\":194186,\"description\":\"Birch bark base color texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_birch_normal\",\"file\":\"vegetation/bark/birch_normal_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/birch_normal_1k.jpg\",\"kind\":\"foliage\",\"bytes\":378046,\"description\":\"Birch bark tangent-space normal texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_birch_roughness\",\"file\":\"vegetation/bark/birch_roughness_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/birch_roughness_1k.jpg\",\"kind\":\"foliage\",\"bytes\":127387,\"description\":\"Birch bark roughness texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_oak_color\",\"file\":\"vegetation/bark/oak_color_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/oak_color_1k.jpg\",\"kind\":\"foliage\",\"bytes\":297877,\"description\":\"Oak bark base color texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_oak_normal\",\"file\":\"vegetation/bark/oak_normal_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/oak_normal_1k.jpg\",\"kind\":\"foliage\",\"bytes\":67610,\"description\":\"Oak bark tangent-space normal texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_oak_roughness\",\"file\":\"vegetation/bark/oak_roughness_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/oak_roughness_1k.jpg\",\"kind\":\"foliage\",\"bytes\":16648,\"description\":\"Oak bark roughness texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_pine_color\",\"file\":\"vegetation/bark/pine_color_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/pine_color_1k.jpg\",\"kind\":\"foliage\",\"bytes\":196361,\"description\":\"Pine bark base color texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_pine_normal\",\"file\":\"vegetation/bark/pine_normal_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/pine_normal_1k.jpg\",\"kind\":\"foliage\",\"bytes\":58237,\"description\":\"Pine bark tangent-space normal texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"bark_pine_roughness\",\"file\":\"vegetation/bark/pine_roughness_1k.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/bark/pine_roughness_1k.jpg\",\"kind\":\"foliage\",\"bytes\":36136,\"description\":\"Pine bark roughness texture (1k), ambientcg Bark (CC0) packaged by ez-tree (MIT). Tree3D trunks/branches sample it by default from the agent8 CDN (the only sanctioned external host); the bundled `incanto/assets` copy (see this entry’s `file`) serves it offline.\"},{\"name\":\"box\",\"file\":\"items/box.png\",\"url\":\"incanto/assets/items/box.png\",\"kind\":\"item\",\"bytes\":10861,\"description\":\"Item box sprite for Dungeons and Dungeoners. Container sprite that holds random items or rewards when opened by player.\"},{\"name\":\"buff_potion\",\"file\":\"items/buff_potion.png\",\"url\":\"incanto/assets/items/buff_potion.png\",\"kind\":\"item\",\"bytes\":3809,\"description\":\"Buff potion item sprite for Dungeons and Dungeoners. Consumable item that grants temporary stat boosts or positive effects to player character.\"},{\"name\":\"coin\",\"file\":\"items/coin.png\",\"url\":\"incanto/assets/items/coin.png\",\"kind\":\"item\",\"bytes\":1689,\"description\":\"Gold coin collectible sprite for Dungeons and Dungeoners. Currency item with metallic sheen, used as in-game money or collectible reward.\"},{\"name\":\"explosion\",\"file\":\"audio/explosion.mp3\",\"url\":\"incanto/assets/audio/explosion.mp3\",\"kind\":\"audio\",\"bytes\":40124,\"description\":\"Impactful explosion / large destructive hit SFX. Pair with the Particles2D \\\"explosion\\\" preset.\"},{\"name\":\"floor00\",\"file\":\"tiles/floor00.jpg\",\"url\":\"incanto/assets/tiles/floor00.jpg\",\"kind\":\"tile\",\"bytes\":28736,\"description\":\"Basic floor tile texture for Dungeons and Dungeoners project, suitable for dungeon ground surfaces.\"},{\"name\":\"gem\",\"file\":\"items/gem.png\",\"url\":\"incanto/assets/items/gem.png\",\"kind\":\"item\",\"bytes\":8762,\"description\":\"Gem collectible sprite for Dungeons and Dungeoners. Valuable gemstone item used as currency, crafting material, or quest objective.\"},{\"name\":\"ghost\",\"file\":\"characters/ghost.png\",\"url\":\"incanto/assets/characters/ghost.png\",\"kind\":\"character\",\"bytes\":22933,\"description\":\"Ghost character with translucent appearance sprite sheet image\",\"animation\":\"characters/ghost.json\",\"frameWidth\":112,\"frameHeight\":128},{\"name\":\"goblin\",\"file\":\"characters/goblin.png\",\"url\":\"incanto/assets/characters/goblin.png\",\"kind\":\"character\",\"bytes\":57994,\"description\":\"Medieval goblin with torch sprite sheet image\",\"animation\":\"characters/goblin.json\",\"frameWidth\":192,\"frameHeight\":192},{\"name\":\"gold\",\"file\":\"items/gold.png\",\"url\":\"incanto/assets/items/gold.png\",\"kind\":\"item\",\"bytes\":22313,\"description\":\"Gold item sprite for Dungeons and Dungeoners. Gold pile or gold bar sprite representing valuable currency or treasure reward.\"},{\"name\":\"gold-loot\",\"file\":\"audio/gold_loot.mp3\",\"url\":\"incanto/assets/audio/gold_loot.mp3\",\"kind\":\"audio\",\"bytes\":7506,\"description\":\"Metallic coin / gold pickup jingle — collecting currency.\"},{\"name\":\"ground_dirt\",\"file\":\"vegetation/ground/dirt_color.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ground/dirt_color.jpg\",\"kind\":\"foliage\",\"bytes\":231383,\"description\":\"Dense dirt/gravel ground texture (1024px) from the ez-tree demo app (MIT) — the reference meadow ground. Terrain3D grassland themes tile it for slope + noise-patch dirt by default; also bundled in `incanto/assets` (see `file`) for offline use.\"},{\"name\":\"ground_dirt_normal\",\"file\":\"vegetation/ground/dirt_normal.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ground/dirt_normal.jpg\",\"kind\":\"foliage\",\"bytes\":123478,\"description\":\"Dirt ground normal map (1024px) from the ez-tree demo app (MIT). Terrain3D grassland themes apply it across the whole ground band (demo parity); also bundled in `incanto/assets` (see `file`) for offline use.\"},{\"name\":\"ground_grass\",\"file\":\"vegetation/ground/grass.jpg\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ground/grass.jpg\",\"kind\":\"foliage\",\"bytes\":322486,\"description\":\"Mossy meadow grass ground texture (1024px) from the ez-tree demo app (MIT). Terrain3D grassland themes (meadow/forest generators) tile it as the grass splat layer by default; also bundled in `incanto/assets` (see `file`) for offline use.\"},{\"name\":\"heal\",\"file\":\"audio/heal.mp3\",\"url\":\"incanto/assets/audio/heal.mp3\",\"kind\":\"audio\",\"bytes\":29764,\"description\":\"Soothing health-restore / heal spell SFX.\"},{\"name\":\"hit-metal-bang\",\"file\":\"audio/hit_metal_bang.mp3\",\"url\":\"incanto/assets/audio/hit_metal_bang.mp3\",\"kind\":\"audio\",\"bytes\":17972,\"description\":\"Metallic impact — hitting armor, metal, or a blocked attack.\"},{\"name\":\"hp_potion\",\"file\":\"items/hp_potion.png\",\"url\":\"incanto/assets/items/hp_potion.png\",\"kind\":\"item\",\"bytes\":3513,\"description\":\"Health potion item sprite for Dungeons and Dungeoners. Consumable healing item that restores player health points when used.\"},{\"name\":\"ice-spear\",\"file\":\"audio/ice_spear.mp3\",\"url\":\"incanto/assets/audio/ice_spear.mp3\",\"kind\":\"audio\",\"bytes\":21315,\"description\":\"Sharp piercing ice projectile fire SFX.\"},{\"name\":\"leaves_ash\",\"file\":\"vegetation/ash_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/ash_color.png\",\"kind\":\"foliage\",\"bytes\":181423,\"description\":\"Ash leaf-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for broadleaf/dead ash variants by default; copy it next to your game and set leafTexture to serve offline.\"},{\"name\":\"leaves_aspen\",\"file\":\"vegetation/aspen_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/aspen_color.png\",\"kind\":\"foliage\",\"bytes\":142116,\"description\":\"Aspen leaf-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for high-tier broadleaf aspen variants; copy + leafTexture for offline serving.\"},{\"name\":\"leaves_oak\",\"file\":\"vegetation/oak_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/oak_color.png\",\"kind\":\"foliage\",\"bytes\":238115,\"description\":\"Oak leaf-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for broadleaf oak variants by default; copy + leafTexture for offline serving.\"},{\"name\":\"leaves_pine\",\"file\":\"vegetation/pine_color.png\",\"url\":\"https://agent8-games.verse8.io/assets/3D/default/textures/vegetation/pine_color.png\",\"kind\":\"foliage\",\"bytes\":303684,\"description\":\"Pine needle-cluster alpha-cutout texture (1024px) from ez-tree by Dan Greenheck (MIT). Tree3D samples it for conifer variants by default; copy + leafTexture for offline serving.\"},{\"name\":\"locked_item_box\",\"file\":\"items/locked_item_box.png\",\"url\":\"incanto/assets/items/locked_item_box.png\",\"kind\":\"item\",\"bytes\":11074,\"description\":\"Locked item box sprite for Dungeons and Dungeoners. Container sprite requiring key or lockpick to open, containing valuable rewards.\"},{\"name\":\"map\",\"file\":\"items/map.png\",\"url\":\"incanto/assets/items/map.png\",\"kind\":\"item\",\"bytes\":3754,\"description\":\"Map item sprite for Dungeons and Dungeoners. Navigation item revealing dungeon layout or providing exploration assistance.\"},{\"name\":\"medieval-knight\",\"file\":\"characters/medieval-knight.png\",\"url\":\"incanto/assets/characters/medieval-knight.png\",\"kind\":\"character\",\"bytes\":84367,\"description\":\"Using a medieval-themed SD(Super Deformed) knight sprite sheet image, you can apply idle, move, and attack animations, among others.\",\"animation\":\"characters/medieval-knight.json\",\"frameWidth\":192,\"frameHeight\":192},{\"name\":\"minecraft-tiles\",\"file\":\"tiles/minecraft-tiles.png\",\"url\":\"incanto/assets/tiles/minecraft-tiles.png\",\"kind\":\"tile\",\"bytes\":10511,\"description\":\"Minecraft-themed tiles sprite sheet image\",\"frameWidth\":16,\"frameHeight\":16,\"columns\":5,\"tiles\":25},{\"name\":\"monster-died\",\"file\":\"audio/monster_died.mp3\",\"url\":\"incanto/assets/audio/monster_died.mp3\",\"kind\":\"audio\",\"bytes\":16836,\"description\":\"Enemy defeat / death SFX.\"},{\"name\":\"resurrection_potion\",\"file\":\"items/resurrection_potion.png\",\"url\":\"incanto/assets/items/resurrection_potion.png\",\"kind\":\"item\",\"bytes\":3471,\"description\":\"Resurrection potion item sprite for Dungeons and Dungeoners. Rare consumable that revives fallen party members or prevents death.\"},{\"name\":\"slash\",\"file\":\"audio/slash.mp3\",\"url\":\"incanto/assets/audio/slash.mp3\",\"kind\":\"audio\",\"bytes\":10425,\"description\":\"Quick sword swing / melee slash SFX.\"},{\"name\":\"smite\",\"file\":\"audio/smite.mp3\",\"url\":\"incanto/assets/audio/smite.mp3\",\"kind\":\"audio\",\"bytes\":12956,\"description\":\"Powerful holy downward-strike SFX.\"},{\"name\":\"spells-cast\",\"file\":\"audio/spells_cast.mp3\",\"url\":\"incanto/assets/audio/spells_cast.mp3\",\"kind\":\"audio\",\"bytes\":22151,\"description\":\"Generic magical spell-cast / chant SFX.\"},{\"name\":\"super_box\",\"file\":\"items/super_box.png\",\"url\":\"incanto/assets/items/super_box.png\",\"kind\":\"item\",\"bytes\":12184,\"description\":\"Super item box sprite for Dungeons and Dungeoners. Premium container sprite containing rare or powerful items and equipment.\"},{\"name\":\"swoosh\",\"file\":\"effects/swoosh.png\",\"url\":\"incanto/assets/effects/swoosh.png\",\"kind\":\"effect\",\"bytes\":2599,\"description\":\"Swoosh effect sprite for Dungeons and Dungeoners. Motion blur or attack trail effect used for melee attacks, sword slashes, or fast movement animations.\"},{\"name\":\"trap\",\"file\":\"items/trap.png\",\"url\":\"incanto/assets/items/trap.png\",\"kind\":\"item\",\"bytes\":3969,\"description\":\"Trap object sprite for Dungeons and Dungeoners. Hazard sprite that damages players when triggered in dungeon exploration.\"},{\"name\":\"ui-click\",\"file\":\"audio/ui_click.wav\",\"url\":\"incanto/assets/audio/ui_click.wav\",\"kind\":\"audio\",\"bytes\":17332,\"description\":\"Short tactile UI click for menus and buttons.\"},{\"name\":\"walk\",\"file\":\"audio/walk.mp3\",\"url\":\"incanto/assets/audio/walk.mp3\",\"kind\":\"audio\",\"bytes\":5642,\"description\":\"Single footstep SFX for character movement (loop or one-shot).\"},{\"name\":\"wall00\",\"file\":\"tiles/wall00.jpg\",\"url\":\"incanto/assets/tiles/wall00.jpg\",\"kind\":\"tile\",\"bytes\":44344,\"description\":\"Basic wall tile texture for Dungeons and Dungeoners project, suitable for dungeon vertical boundaries.\"}]");
|
|
1987
1987
|
//#endregion
|
|
1988
1988
|
//#region src/connections.ts
|
|
1989
1989
|
function sn(e) {
|
|
@@ -2398,19 +2398,25 @@ function Hn(e, t, n) {
|
|
|
2398
2398
|
t.mutate(() => {
|
|
2399
2399
|
t.working.dimension = r.value;
|
|
2400
2400
|
});
|
|
2401
|
-
}), e.appendChild(B("dimension", r))
|
|
2402
|
-
let i =
|
|
2401
|
+
}), e.appendChild(B("dimension", r));
|
|
2402
|
+
let i = document.createElement("input");
|
|
2403
|
+
i.type = "checkbox", i.checked = t.working.fragment === !0, i.addEventListener("change", () => {
|
|
2404
|
+
t.mutate(() => {
|
|
2405
|
+
i.checked ? t.working.fragment = !0 : delete t.working.fragment;
|
|
2406
|
+
});
|
|
2407
|
+
}), e.appendChild(B("fragment", i)), e.appendChild(Tr("physics", "physics"));
|
|
2408
|
+
let a = (t.working.physics ?? {}).gravity ?? (t.working.dimension === "3d" ? [
|
|
2403
2409
|
0,
|
|
2404
2410
|
-9.81,
|
|
2405
2411
|
0
|
|
2406
|
-
] : [0, 980]),
|
|
2412
|
+
] : [0, 980]), o = t.working.dimension === "3d" ? [
|
|
2407
2413
|
0,
|
|
2408
2414
|
-9.81,
|
|
2409
2415
|
0
|
|
2410
2416
|
] : [0, 980];
|
|
2411
|
-
e.appendChild(Mr("gravity",
|
|
2417
|
+
e.appendChild(Mr("gravity", a, (e) => {
|
|
2412
2418
|
t.mutate(() => {
|
|
2413
|
-
if (JSON.stringify(e) === JSON.stringify(
|
|
2419
|
+
if (JSON.stringify(e) === JSON.stringify(o)) {
|
|
2414
2420
|
let e = { ...t.working.physics };
|
|
2415
2421
|
delete e.gravity, Object.keys(e).length === 0 ? delete t.working.physics : t.working.physics = e;
|
|
2416
2422
|
} else t.working.physics = {
|
package/dist/env.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Rng, i as SceneJson, n as NodeJson, s as JsonObject } from "./schema-
|
|
1
|
+
import { a as Rng, i as SceneJson, n as NodeJson, s as JsonObject } from "./schema-B6ugCV1Q.js";
|
|
2
2
|
|
|
3
3
|
//#region src/env/arena.d.ts
|
|
4
4
|
/** Valid `generateArena` themes — drives the catalog options AND validation. */
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { k as diagnose } from "./loader-
|
|
2
|
-
import { L as translateOn, t as registerCoreNodes } from "./register-
|
|
1
|
+
import { k as diagnose } from "./loader-DZE7B07H.js";
|
|
2
|
+
import { L as translateOn, t as registerCoreNodes } from "./register-mmfugpaQ.js";
|
|
3
3
|
import { t as IncantoError } from "./errors-BpWbnbb_.js";
|
|
4
4
|
import { t as Rng } from "./rng-DP-SR7eg.js";
|
|
5
5
|
import { i as getNodeSchema, l as registerNode } from "./registry-CF70EArN.js";
|
|
6
6
|
import { t as createNoise2D } from "./noise-CGUMx44x.js";
|
|
7
7
|
import { i as ParticleSim, n as resolveFrames, o as PARTICLE_PRESET_NAMES, r as validateAnimationAliases, s as applyParticlePreset, t as resolveAnimation } from "./sprite-animation-CY-mrr1L.js";
|
|
8
|
-
import { B as rejectScale, G as StaticBody3D, H as CharacterBody3D, K as Node3D, L as Water3D, U as PhysicsBody3D, V as Area3D, W as RigidBody3D, X as colliderFootDrop, w as tolerateUnknownAction, z as WaterCutout3D } from "./gameplay-
|
|
9
|
-
import { t as checkSheetGrid } from "./sheet-grid-
|
|
8
|
+
import { B as rejectScale, G as StaticBody3D, H as CharacterBody3D, I as worldPosition, K as Node3D, L as Water3D, U as PhysicsBody3D, V as Area3D, W as RigidBody3D, X as colliderFootDrop, w as tolerateUnknownAction, z as WaterCutout3D } from "./gameplay-D1KixWK8.js";
|
|
9
|
+
import { t as checkSheetGrid } from "./sheet-grid-Cea343VO.js";
|
|
10
10
|
import { n as splatWeights, t as buildHeightmap } from "./heightmap-CRK0M4jT.js";
|
|
11
11
|
import { AdditiveBlending, AnimationClip, AnimationMixer, Box3, BoxGeometry, BufferAttribute, BufferGeometry, CanvasTexture, CapsuleGeometry, ClampToEdgeWrapping, Color, ConeGeometry, CylinderGeometry, DataTexture, DirectionalLight, DoubleSide, DynamicDrawUsage, Euler, Group, IcosahedronGeometry, ImageBitmapLoader, InstancedBufferAttribute, InstancedMesh, LinearFilter, LinearMipmapLinearFilter, LoopOnce, LoopRepeat, Matrix4, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshPhysicalMaterial, MeshStandardMaterial, NearestFilter, NoBlending, NoColorSpace, NormalBlending, PerspectiveCamera, PlaneGeometry, PointLight, Points, PointsMaterial, Quaternion, QuaternionKeyframeTrack, RGBADepthPacking, RGBAFormat, RepeatWrapping, SRGBColorSpace, ShaderChunk, ShaderMaterial, SphereGeometry, Texture, TextureLoader, UniformsLib, UniformsUtils, Vector3, Vector4, VectorKeyframeTrack } from "three";
|
|
12
12
|
import { clone } from "three/addons/utils/SkeletonUtils.js";
|
|
@@ -2714,6 +2714,7 @@ var CharacterController3D = class extends Node3D {
|
|
|
2714
2714
|
pitchMin: { default: -1.3 },
|
|
2715
2715
|
pitchMax: { default: 1.5 },
|
|
2716
2716
|
cameraCollision: { default: true },
|
|
2717
|
+
platformCarry: { default: true },
|
|
2717
2718
|
turnSpeed: { default: 100 },
|
|
2718
2719
|
camLerp: { default: 25 },
|
|
2719
2720
|
moveAction: { default: "move" },
|
|
@@ -2766,6 +2767,43 @@ var CharacterController3D = class extends Node3D {
|
|
|
2766
2767
|
pitchMax = 1.5;
|
|
2767
2768
|
/** Spring-arm: pull the orbit camera in front of walls/ground instead of clipping. */
|
|
2768
2769
|
cameraCollision = true;
|
|
2770
|
+
/**
|
|
2771
|
+
* Ride whatever you are standing on.
|
|
2772
|
+
*
|
|
2773
|
+
* `false` restores the old behaviour: the controller steers toward a target
|
|
2774
|
+
* velocity in WORLD space, so standing still on a moving floor brakes you off
|
|
2775
|
+
* it. Turn it off for a conveyor you want to be scenery.
|
|
2776
|
+
*/
|
|
2777
|
+
platformCarry = true;
|
|
2778
|
+
/** The node the ground probe hit last step, and where it was. */
|
|
2779
|
+
carriedBy = null;
|
|
2780
|
+
carriedFrom = [0, 0];
|
|
2781
|
+
/**
|
|
2782
|
+
* How fast the floor is moving, in world units per second.
|
|
2783
|
+
*
|
|
2784
|
+
* From the POSITION DELTA, not `linearVelocity`, because the documented way
|
|
2785
|
+
* to author a platform is to move its `position` — a behavior, a `PathFollow`,
|
|
2786
|
+
* an `Oscillate` — and that path calls `body.setTranslation`, which teleports
|
|
2787
|
+
* and carries no momentum at all. The delta sees both kinds.
|
|
2788
|
+
*
|
|
2789
|
+
* Only while grounded on the SAME node two steps running: the first step on a
|
|
2790
|
+
* new platform has nothing to compare against, and inventing a velocity there
|
|
2791
|
+
* would fling the player on every step onto one.
|
|
2792
|
+
*/
|
|
2793
|
+
groundCarry(ground, dt) {
|
|
2794
|
+
if (!this.platformCarry || !this.grounded || !ground || dt <= 0) {
|
|
2795
|
+
this.carriedBy = ground;
|
|
2796
|
+
if (ground) this.carriedFrom = groundXZ(ground);
|
|
2797
|
+
return [0, 0];
|
|
2798
|
+
}
|
|
2799
|
+
const at = groundXZ(ground);
|
|
2800
|
+
const same = this.carriedBy === ground;
|
|
2801
|
+
const was = this.carriedFrom;
|
|
2802
|
+
this.carriedBy = ground;
|
|
2803
|
+
this.carriedFrom = at;
|
|
2804
|
+
if (!same) return [0, 0];
|
|
2805
|
+
return [(at[0] - was[0]) / dt, (at[1] - was[1]) / dt];
|
|
2806
|
+
}
|
|
2769
2807
|
turnSpeed = 100;
|
|
2770
2808
|
/** Camera smoothing rate (1-exp(-rate·dt)); side view uses 5. */
|
|
2771
2809
|
camLerp = 25;
|
|
@@ -2830,6 +2868,8 @@ var CharacterController3D = class extends Node3D {
|
|
|
2830
2868
|
const rayLen = radius + 2;
|
|
2831
2869
|
const originY = pos[1] - halfHeight;
|
|
2832
2870
|
let toi = null;
|
|
2871
|
+
/** What the probe landed on — the platform, when there is one. */
|
|
2872
|
+
let ground = null;
|
|
2833
2873
|
for (const [ox, oz] of [
|
|
2834
2874
|
[0, 0],
|
|
2835
2875
|
[radius, 0],
|
|
@@ -2848,11 +2888,15 @@ var CharacterController3D = class extends Node3D {
|
|
|
2848
2888
|
], rayLen, body);
|
|
2849
2889
|
if (hit) {
|
|
2850
2890
|
const d = hit.distance;
|
|
2851
|
-
|
|
2891
|
+
if (toi === null || d < toi) {
|
|
2892
|
+
toi = d;
|
|
2893
|
+
ground = hit.node;
|
|
2894
|
+
}
|
|
2852
2895
|
if (ox === 0 && oz === 0) break;
|
|
2853
2896
|
}
|
|
2854
2897
|
}
|
|
2855
2898
|
this.grounded = toi !== null && toi < floatingDis * 2;
|
|
2899
|
+
const carry = this.groundCarry(ground, dt);
|
|
2856
2900
|
const footed = toi !== null && toi < floatingDis * 1.3 && (vel[1] ?? 0) <= .5;
|
|
2857
2901
|
let mx = 0;
|
|
2858
2902
|
let mz = 0;
|
|
@@ -2877,17 +2921,17 @@ var CharacterController3D = class extends Node3D {
|
|
|
2877
2921
|
const speedMultiplier = 1 + (this.sprintMultiplier - 1) * intensity;
|
|
2878
2922
|
const targetSpeed = moving ? this.maxSpeed * speedMultiplier : 0;
|
|
2879
2923
|
const control = this.grounded ? 1 : this.airControl;
|
|
2880
|
-
const ax = (mx * targetSpeed - vel[0]) / ACC_DELTA_TIME * control;
|
|
2881
|
-
const az = (mz * targetSpeed - vel[2]) / ACC_DELTA_TIME * control;
|
|
2924
|
+
const ax = (mx * targetSpeed + carry[0] - vel[0]) / ACC_DELTA_TIME * control;
|
|
2925
|
+
const az = (mz * targetSpeed + carry[1] - vel[2]) / ACC_DELTA_TIME * control;
|
|
2882
2926
|
body.applyImpulse([
|
|
2883
2927
|
ax * mass,
|
|
2884
2928
|
0,
|
|
2885
2929
|
az * mass
|
|
2886
2930
|
]);
|
|
2887
2931
|
if (!moving && this.grounded) body.applyImpulse([
|
|
2888
|
-
-vel[0] * DRAG_DAMPING * mass,
|
|
2932
|
+
-(vel[0] - carry[0]) * DRAG_DAMPING * mass,
|
|
2889
2933
|
0,
|
|
2890
|
-
-vel[2] * DRAG_DAMPING * mass
|
|
2934
|
+
-(vel[2] - carry[1]) * DRAG_DAMPING * mass
|
|
2891
2935
|
]);
|
|
2892
2936
|
let springToi = toi;
|
|
2893
2937
|
if (this.stepHeight > 0 && moving && toi !== null && !this.jumping && (vel[1] ?? 0) <= .5) {
|
|
@@ -3137,6 +3181,11 @@ function worldOf(node) {
|
|
|
3137
3181
|
* coyote time incoherent (a held button would re-fire through the whole
|
|
3138
3182
|
* window). Undeclared actions are tolerated, and reported once.
|
|
3139
3183
|
*/
|
|
3184
|
+
/** A node's world x/z — the platform may itself be parented to something. */
|
|
3185
|
+
function groundXZ(node) {
|
|
3186
|
+
const world = worldPosition(node);
|
|
3187
|
+
return [world[0] ?? 0, world[2] ?? 0];
|
|
3188
|
+
}
|
|
3140
3189
|
//#endregion
|
|
3141
3190
|
//#region src/3d/vegetation/grass-placement.ts
|
|
3142
3191
|
const NOISE_SCALE = .15;
|
|
@@ -30,6 +30,14 @@ interface FrameStats {
|
|
|
30
30
|
grid: GridCell[][];
|
|
31
31
|
/** What the frame is OF, or null when it is all background. */
|
|
32
32
|
subject: Subject | null;
|
|
33
|
+
/**
|
|
34
|
+
* The page was HIDDEN when these pixels were read, so they are whatever it
|
|
35
|
+
* last drew.
|
|
36
|
+
*
|
|
37
|
+
* Added by the page, not computed from pixels — a stale buffer looks exactly
|
|
38
|
+
* like a live one. Undefined for a capture that never came from a browser.
|
|
39
|
+
*/
|
|
40
|
+
hidden?: boolean;
|
|
33
41
|
}
|
|
34
42
|
/**
|
|
35
43
|
* The thing in the shot: everything that is not the background.
|
|
@@ -177,6 +177,7 @@ const pct = (v) => `${(v * 100).toFixed(1)}%`;
|
|
|
177
177
|
/** The report a person or an agent reads. Verdict first, numbers after. */
|
|
178
178
|
function frameText(stats) {
|
|
179
179
|
const lines = [];
|
|
180
|
+
if (stats.hidden) lines.push("THE PAGE IS HIDDEN — a browser stops animating a window covered by another, so these pixels are whatever it last drew. Bring it to the front and capture again.");
|
|
180
181
|
if (stats.black) lines.push("BLACK SCREEN — nothing was drawn (no light, no camera, or nothing in view)");
|
|
181
182
|
else if (stats.uniform) lines.push("one flat colour — the camera may be inside geometry, or only the sky is drawn");
|
|
182
183
|
else if (!stats.subject) lines.push("nothing but background — the camera is pointed away from everything in the scene");
|