@volter/game-editor 0.5.65
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/BUNDLED_NOTICES +11228 -0
- package/LICENSE +686 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +21 -0
- package/catalog/entries/audio.json +14 -0
- package/catalog/entries/bake.json +36 -0
- package/catalog/entries/blender.json +17 -0
- package/catalog/entries/react-root.json +24 -0
- package/catalog/entries/reflections.json +29 -0
- package/catalog/entries/static-batch.json +25 -0
- package/catalog/project-source/LICENSE +37 -0
- package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
- package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
- package/catalog/project-source/src/contributions/builder-state.ts +27 -0
- package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
- package/catalog/project-source/src/contributions/module-source.ts +502 -0
- package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
- package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
- package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
- package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
- package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
- package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
- package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
- package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
- package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
- package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
- package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
- package/catalog/project-source/src/lib/bake/params.ts +75 -0
- package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
- package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
- package/catalog/project-source/src/lib/react-root/index.ts +20 -0
- package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/catalog/project-source/src/lib/reflections/index.ts +19 -0
- package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
- package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
- package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
- package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
- package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
- package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
- package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
- package/dist/.vite/manifest.json +8304 -0
- package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
- package/dist/assets/AudioViewer-CR7333fe.js +1 -0
- package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
- package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
- package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
- package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
- package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
- package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
- package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
- package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
- package/dist/assets/ConvexHull-BINCESFp.js +1 -0
- package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
- package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
- package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
- package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
- package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
- package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
- package/dist/assets/Fbo-Dz-Soul3.js +1 -0
- package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
- package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
- package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
- package/dist/assets/Gltf-UHVWKz65.js +2 -0
- package/dist/assets/HDRLoader-THU88oVD.js +5 -0
- package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
- package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
- package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
- package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
- package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
- package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
- package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
- package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
- package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
- package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
- package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
- package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
- package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
- package/dist/assets/OrbitControls-CM3bPray.js +1 -0
- package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
- package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
- package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
- package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
- package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
- package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
- package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
- package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
- package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
- package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
- package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
- package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
- package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
- package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
- package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
- package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
- package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
- package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
- package/dist/assets/Sky-CQKCgYDs.js +154 -0
- package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
- package/dist/assets/StageHost-BN-IoTef.js +2 -0
- package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
- package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
- package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
- package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
- package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
- package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
- package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
- package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
- package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
- package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
- package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
- package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
- package/dist/assets/after-paint-CB4bz1-e.js +1 -0
- package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
- package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
- package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
- package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
- package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
- package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
- package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
- package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
- package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
- package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
- package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
- package/dist/assets/assets-BuSoGjBX.js +1 -0
- package/dist/assets/audio-meter-CyiToeUW.js +1 -0
- package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
- package/dist/assets/audio.utility-C6K6jem8.js +1 -0
- package/dist/assets/authoring-CgcOFhGS.js +1 -0
- package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
- package/dist/assets/axe-LkjAB6Lv.js +30 -0
- package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
- package/dist/assets/binding-Bmxqznjk.js +1 -0
- package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
- package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
- package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
- package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
- package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
- package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
- package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
- package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
- package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
- package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
- package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
- package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
- package/dist/assets/blender.command-BtJeWk-A.js +1 -0
- package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
- package/dist/assets/blender.status-ujwGU6dU.js +1 -0
- package/dist/assets/blender.style-Dcem5f_T.js +1 -0
- package/dist/assets/board-guides-DziKSTss.js +1 -0
- package/dist/assets/body-marks-h_xDxiDE.js +1 -0
- package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
- package/dist/assets/browserAll-DeWblVez.js +1 -0
- package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
- package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
- package/dist/assets/build-session-C_sg3CEn.js +9 -0
- package/dist/assets/build.action-lYjTLb7K.js +1 -0
- package/dist/assets/build.command-DIGgUPU_.js +1 -0
- package/dist/assets/build.header-CKajx5U3.js +1 -0
- package/dist/assets/build.menu-BdU0QXny.js +1 -0
- package/dist/assets/build.service-CbBAyeu3.js +1 -0
- package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
- package/dist/assets/camera-KEsKvOL7.js +1 -0
- package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
- package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
- package/dist/assets/capability-coverage-Czas4C18.js +7 -0
- package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
- package/dist/assets/client-DNXj_opT.js +25 -0
- package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
- package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
- package/dist/assets/collider-Bw0mXlsW.js +1 -0
- package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
- package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
- package/dist/assets/command-results-CUQD49AB.js +1 -0
- package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
- package/dist/assets/component-board.service-DCwcUssB.js +2 -0
- package/dist/assets/component-board.service-DidCyM4O.js +2 -0
- package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
- package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
- package/dist/assets/config-CEZk921y.js +6 -0
- package/dist/assets/configurations-DTBMdaTL.js +1 -0
- package/dist/assets/connection.status-BifnQdOs.js +1 -0
- package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
- package/dist/assets/constraint-De8f1Uiq.js +1 -0
- package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
- package/dist/assets/countdown-timer-CUm74dom.js +1 -0
- package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
- package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
- package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
- package/dist/assets/curve-7Q79VgU4.js +1 -0
- package/dist/assets/data-asset-4hjS642k.js +5 -0
- package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
- package/dist/assets/data-ref-CQI28C0D.js +1 -0
- package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
- package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
- package/dist/assets/defaults-DKiBJCPN.js +1 -0
- package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
- package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
- package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
- package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
- package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
- package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
- package/dist/assets/dev-build-gDYrq68M.js +1 -0
- package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
- package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
- package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
- package/dist/assets/draco3d-BBUTcNkz.js +1 -0
- package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
- package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
- package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
- package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
- package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
- package/dist/assets/editor-api-BoJIcyZG.js +1 -0
- package/dist/assets/editor-port-C_FeBdeV.js +1 -0
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
- package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
- package/dist/assets/environment-capture-7himRh2L.js +1 -0
- package/dist/assets/esbuild-BHljloGq.wasm +0 -0
- package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
- package/dist/assets/extend-B-eOccUm.js +36 -0
- package/dist/assets/extends-CF3RwP-h.js +1 -0
- package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
- package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
- package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
- package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
- package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
- package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
- package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
- package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
- package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
- package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
- package/dist/assets/game-DHOZVb-7.js +1 -0
- package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
- package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
- package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
- package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
- package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
- package/dist/assets/game-loop-CZvXlY00.js +1 -0
- package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
- package/dist/assets/game.layout-CBASrvQu.js +1 -0
- package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
- package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
- package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
- package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
- package/dist/assets/generation-DhwCUHPf.css +1 -0
- package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
- package/dist/assets/generation.service-CDIgObuw.js +1 -0
- package/dist/assets/generations-DzUogZsM.js +1 -0
- package/dist/assets/generations.status-CgOUBCum.js +1 -0
- package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
- package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
- package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
- package/dist/assets/index-96FBF1Oj.js +1 -0
- package/dist/assets/index-BAWkB0dv.js +1 -0
- package/dist/assets/index-BDnS2b6S.js +1 -0
- package/dist/assets/index-BHp07vN0.js +2 -0
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BcCBqgM_.js +952 -0
- package/dist/assets/index-Bge9JUr6.js +1 -0
- package/dist/assets/index-BjTCPEQ7.js +134 -0
- package/dist/assets/index-BncK9THk.js +1 -0
- package/dist/assets/index-CJbYy-CF.js +3 -0
- package/dist/assets/index-CVCb_ImQ.js +1 -0
- package/dist/assets/index-CZd9o7Lu.js +1 -0
- package/dist/assets/index-CanA16PU.js +2 -0
- package/dist/assets/index-CinJrH5C.js +9 -0
- package/dist/assets/index-CtzuWnCS.js +1 -0
- package/dist/assets/index-D2fNXpHa.css +1 -0
- package/dist/assets/index-DUpHH6JR.js +3120 -0
- package/dist/assets/index-DUqP1RMl.js +1 -0
- package/dist/assets/index-D_NuPfjr.js +9 -0
- package/dist/assets/index-Da9JhEvW.js +25 -0
- package/dist/assets/index-DgapqSPi.js +7 -0
- package/dist/assets/index-FUuS4qwW.js +562 -0
- package/dist/assets/index-GIL7oGEO.js +4894 -0
- package/dist/assets/index-IEjydI9d.js +1 -0
- package/dist/assets/index-OrYXPk3Z.js +487 -0
- package/dist/assets/index-V1R-e5Bd.js +1 -0
- package/dist/assets/index-bQE2NA0D.js +1 -0
- package/dist/assets/index-gHZae-lw.js +13 -0
- package/dist/assets/index-mjWQmGhM.js +1 -0
- package/dist/assets/index-nmcBqr7Y.js +1 -0
- package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
- package/dist/assets/ingest-BbYMC2vQ.js +1 -0
- package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
- package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
- package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
- package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
- package/dist/assets/input-manager-DH_hGW6d.js +1 -0
- package/dist/assets/input-router-BNQvtIqw.js +1 -0
- package/dist/assets/inspect-BZfi3mmo.js +1 -0
- package/dist/assets/inspection-CObLhnrs.js +1 -0
- package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
- package/dist/assets/instances.command-D6UkZNO8.js +1 -0
- package/dist/assets/instruments-CKR02Y8I.js +1 -0
- package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
- package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
- package/dist/assets/light-D-_wsKTq.js +1 -0
- package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
- package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
- package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
- package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
- package/dist/assets/loader-CaF_I7Yt.js +1 -0
- package/dist/assets/logger-Dqis-7W1.js +1 -0
- package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
- package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
- package/dist/assets/material-CpAdjDxn.js +1 -0
- package/dist/assets/material-factory-Bz6h__6g.js +1 -0
- package/dist/assets/mesh-B3WPtNKO.js +1 -0
- package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
- package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
- package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
- package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
- package/dist/assets/model.layout-BJUEQYUI.js +1 -0
- package/dist/assets/models.finder-G2jQgIRu.js +1 -0
- package/dist/assets/module-mode-DVBLT9d-.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
- package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
- package/dist/assets/mount-game-6t9cKNo4.js +1 -0
- package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
- package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
- package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
- package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
- package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
- package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
- package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
- package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
- package/dist/assets/navigation-CIiCx-SM.js +1 -0
- package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
- package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
- package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
- package/dist/assets/network.utility-CEu5nHf7.js +1 -0
- package/dist/assets/object-marks-DwvIEBOK.js +1 -0
- package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
- package/dist/assets/output-DK8waum9.js +195 -0
- package/dist/assets/particles-Y626p22p.js +1 -0
- package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
- package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
- package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
- package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
- package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
- package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
- package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
- package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
- package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
- package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
- package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
- package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
- package/dist/assets/play-mode-BFU2PCkG.js +22 -0
- package/dist/assets/play.command-BpqqLqkq.js +2 -0
- package/dist/assets/playtest-BXIL1JEF.js +1 -0
- package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
- package/dist/assets/presentation-BPP5pXeQ.js +1 -0
- package/dist/assets/product-DFhyARJj.js +1 -0
- package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
- package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
- package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
- package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
- package/dist/assets/project-provenance-BoP3nrle.js +1 -0
- package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
- package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
- package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
- package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
- package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
- package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
- package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
- package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
- package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
- package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
- package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
- package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
- package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
- package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
- package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
- package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
- package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
- package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
- package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
- package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
- package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
- package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
- package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
- package/dist/assets/react-18-By2b4xR9.js +1 -0
- package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
- package/dist/assets/react-root-CEz5NTck.js +1 -0
- package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
- package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
- package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
- package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
- package/dist/assets/realm-services-CobQsq_X.js +1 -0
- package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
- package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
- package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
- package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
- package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
- package/dist/assets/registry-02YZjMNp.js +1 -0
- package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
- package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
- package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
- package/dist/assets/render-census-BrQX_CXv.js +1 -0
- package/dist/assets/render-control-Df3yTiyr.js +1 -0
- package/dist/assets/render-env-D2IV2x5k.js +1 -0
- package/dist/assets/render-features-CPQ_e568.js +1 -0
- package/dist/assets/render-seed-DF4JHy7P.js +1 -0
- package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
- package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
- package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
- package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
- package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
- package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
- package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
- package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
- package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
- package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
- package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
- package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
- package/dist/assets/scene-index-B6BZOHMk.js +1 -0
- package/dist/assets/scene-query-C7_N-TpI.js +1 -0
- package/dist/assets/schema-kl9-2B_J.js +1 -0
- package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
- package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
- package/dist/assets/session-CZ5JPg-z.js +4877 -0
- package/dist/assets/setup-audio-S8GQF91f.js +1 -0
- package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
- package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
- package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
- package/dist/assets/shading.layout-DULYZV6M.js +1 -0
- package/dist/assets/sim-clock-CLflx7kg.js +1 -0
- package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
- package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
- package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
- package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
- package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
- package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
- package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
- package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
- package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
- package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
- package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
- package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
- package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
- package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
- package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
- package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
- package/dist/assets/stats.module-BL02l9NC.js +1 -0
- package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
- package/dist/assets/story-capture-_gC8dXV-.js +1 -0
- package/dist/assets/story-documents--TDLaPeL.js +3 -0
- package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
- package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
- package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
- package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
- package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
- package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
- package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
- package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
- package/dist/assets/structural-signature-0w-i_ats.js +1 -0
- package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
- package/dist/assets/surface-state-DaxyruCj.js +3 -0
- package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
- package/dist/assets/system-runner-DkOjxEBt.js +1 -0
- package/dist/assets/system-slot-E2mEdiih.js +1 -0
- package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-CDSueJyJ.js +1 -0
- package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
- package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
- package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
- package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
- package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
- package/dist/assets/three.module-D396a9Mn.js +3840 -0
- package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
- package/dist/assets/tools-B_NJsk05.js +1 -0
- package/dist/assets/transform-writer-BhBBTx33.js +1 -0
- package/dist/assets/transport.header-B-6HQlU2.js +1 -0
- package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
- package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
- package/dist/assets/tween.module-DciWpAG6.js +1 -0
- package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
- package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
- package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
- package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
- package/dist/assets/use-data-Dzq-MytE.js +1 -0
- package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
- package/dist/assets/use-selection-DbR73-xd.js +1 -0
- package/dist/assets/user-data-BB2Of6Ht.js +1 -0
- package/dist/assets/utility-view-state-BHypxA33.js +1 -0
- package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
- package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
- package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
- package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
- package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
- package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
- package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
- package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
- package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
- package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
- package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
- package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
- package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
- package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
- package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
- package/dist/assets/wav-encode-D31zWF6O.js +1 -0
- package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
- package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
- package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
- package/dist/assets/worker-UrMcrc5_.js +2 -0
- package/dist/assets/world-documents-147tiFZe.js +1 -0
- package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
- package/dist/assets/world-state-BWG-IcOd.js +1 -0
- package/dist/assets/writer-B-KovzkA.js +5 -0
- package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
- package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
- package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
- package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
- package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
- package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
- package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
- package/dist/vgai-shared-react.json +10 -0
- package/dist/vgai-shared-three.json +3 -0
- package/dist-node/cli.js +9320 -0
- package/dist-node/create.js +3239 -0
- package/package.json +91 -0
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +38 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +81 -0
- package/template/.agents/references/project-manual.md +341 -0
- package/template/.agents/skills/editor/SKILL.md +53 -0
- package/template/.agents/skills/editor/agents/openai.yaml +4 -0
- package/template/.agents/skills/editor/references/editor-control.md +363 -0
- package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.claude/skills/editor/SKILL.md +53 -0
- package/template/.claude/skills/editor/agents/openai.yaml +4 -0
- package/template/.claude/skills/editor/references/editor-control.md +363 -0
- package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.github/copilot-instructions.md +6 -0
- package/template/.github/skills/editor/SKILL.md +53 -0
- package/template/.github/skills/editor/agents/openai.yaml +4 -0
- package/template/.github/skills/editor/references/editor-control.md +363 -0
- package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.mcp.json +12 -0
- package/template/.vgai/assets.json +1 -0
- package/template/.vgai/provenance.json +4 -0
- package/template/.volter/tracker/validation/.preset.base.mts +178 -0
- package/template/.volter/tracker/validation/preset.mts +186 -0
- package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
- package/template/.volter/tracker/visualizer/extension.tsx +14 -0
- package/template/.volter/tracker-config.json +17 -0
- package/template/AGENTS.md +176 -0
- package/template/CLAUDE.md +1 -0
- package/template/DEVLOG.md +20 -0
- package/template/IDIOMS.md +118 -0
- package/template/LICENSE +30 -0
- package/template/README.md +83 -0
- package/template/ROADMAP.md +20 -0
- package/template/asset-manifest.json +3 -0
- package/template/check-idioms.ts +1533 -0
- package/template/index.html +18 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +62 -0
- package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
- package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/template/public/shaders/daylight-sky.frag.glsl +15 -0
- package/template/public/shaders/daylight-sky.vert.glsl +7 -0
- package/template/scripts/patch-drei-stats-gl.mjs +35 -0
- package/template/server/colyseus-setup.ts +111 -0
- package/template/server/loopback.ts +76 -0
- package/template/server/main.ts +78 -0
- package/template/server/rooms/arena-room.ts +488 -0
- package/template/server/rooms/game-room.ts +274 -0
- package/template/server/rooms.ts +15 -0
- package/template/server/tsconfig.json +19 -0
- package/template/src/bot/QaTester.tsx +35 -0
- package/template/src/bot/behaviors.ts +203 -0
- package/template/src/bot/bot-station.ts +192 -0
- package/template/src/bot/tester-run.ts +238 -0
- package/template/src/bot/tester-station.ts +193 -0
- package/template/src/components/environment/DaylightSky.tsx +54 -0
- package/template/src/components/environment/Ground.tsx +129 -0
- package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
- package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
- package/template/src/components/environment/SunShadowFit.tsx +141 -0
- package/template/src/contributions/README.md +98 -0
- package/template/src/contributions/analytics.analytics.tsx +26 -0
- package/template/src/contributions/data.document.tsx +35 -0
- package/template/src/contributions/pages.finder.ts +61 -0
- package/template/src/contributions/tester.inspector.tsx +64 -0
- package/template/src/contributions/use-game-modules.ts +80 -0
- package/template/src/data/README.md +17 -0
- package/template/src/input.ts +97 -0
- package/template/src/lib/audio/capability.json +4 -0
- package/template/src/lib/audio/sfx.ts +255 -0
- package/template/src/lib/react-root/capability.json +4 -0
- package/template/src/lib/react-root/index.ts +20 -0
- package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/template/src/lib/reflections/capability.json +4 -0
- package/template/src/lib/reflections/index.ts +19 -0
- package/template/src/lib/reflections/probe-controller.ts +75 -0
- package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/template/src/lib/static-batch/Frozen.tsx +91 -0
- package/template/src/lib/static-batch/capability.json +4 -0
- package/template/src/lib/static-batch/freeze.ts +579 -0
- package/template/src/lib/static-batch/index.ts +44 -0
- package/template/src/lib/static-batch/mutation-watch.ts +149 -0
- package/template/src/lib/static-batch/shadow-cache.ts +171 -0
- package/template/src/main.ts +63 -0
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/prefabs/HeroBox.stories.tsx +23 -0
- package/template/src/prefabs/HeroBox.tsx +35 -0
- package/template/src/scenes/MainScene.tsx +77 -0
- package/template/src/world.tsx +87 -0
- package/template/tsconfig.json +35 -0
- package/template/tsconfig.node.json +32 -0
- package/template/tsconfig.tools.json +22 -0
- package/template/validate-asset-content.ts +27 -0
- package/template/validate-assets.ts +60 -0
- package/template/validate-manifest.ts +55 -0
- package/template/vgai.adapter.ts +76 -0
- package/template/vgai.project.json +24 -0
- package/template/vite.config.ts +247 -0
- package/template-dotfiles/gitignore +63 -0
- package/workbench/src/media/game-cover.css +83 -0
- package/workbench/src/product.contribution.ts +188 -0
- package/workbench/src/vgaiGameSkew.ts +276 -0
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@volter/game-editor",
|
|
3
|
+
"author": "Volter AI, Inc.",
|
|
4
|
+
"version": "0.5.65",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=24"
|
|
11
|
+
},
|
|
12
|
+
"license": "AGPL-3.0-only AND GPL-3.0-or-later",
|
|
13
|
+
"description": "Volter Game Editor: the game packages and Blender stitched onto the editor kit.",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/volter-ai/editor.git",
|
|
17
|
+
"directory": "packages/game-editor"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"src",
|
|
22
|
+
"LICENSE",
|
|
23
|
+
"LICENSE-BLENDER",
|
|
24
|
+
"NOTICE",
|
|
25
|
+
"LICENSE-MCP",
|
|
26
|
+
"dist-node",
|
|
27
|
+
"presets.mjs",
|
|
28
|
+
"workbench",
|
|
29
|
+
"template",
|
|
30
|
+
"template-dotfiles",
|
|
31
|
+
"catalog",
|
|
32
|
+
"starter",
|
|
33
|
+
"BUNDLED_NOTICES"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "vite build --config vite.config.ts",
|
|
37
|
+
"build:node": "node scripts/build-node.mjs",
|
|
38
|
+
"typecheck": "tsc -p tsconfig.node.json"
|
|
39
|
+
},
|
|
40
|
+
"vgai": {
|
|
41
|
+
"product": {
|
|
42
|
+
"entry": "./src/index.ts",
|
|
43
|
+
"displayName": "Volter Game Editor",
|
|
44
|
+
"colorTheme": "dark",
|
|
45
|
+
"workbench": {
|
|
46
|
+
"release": "game-editor-f8664703ab59-595ba7af8402-darwin-arm64",
|
|
47
|
+
"tarballSha256": "fac04a80a9745b6af25c232308faab1691ef2ecc40883cc8c9b89b42f12f8ccd"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@volter/editor-core": "0.5.65",
|
|
53
|
+
"@volter/editor-game": "0.5.65",
|
|
54
|
+
"@volter/editor-blender": "0.1.8",
|
|
55
|
+
"@volter/blender-engine": "0.1.7",
|
|
56
|
+
"@volter/editor-project": "0.5.65",
|
|
57
|
+
"@volter/editor-sdk": "0.5.65",
|
|
58
|
+
"@volter/editor-live": "0.5.65",
|
|
59
|
+
"@volter/game-live": "0.5.65",
|
|
60
|
+
"@modelcontextprotocol/sdk": "1.30.0",
|
|
61
|
+
"@volter/game-runtime": "0.5.65",
|
|
62
|
+
"@volter/threejs-runtime": "0.5.65",
|
|
63
|
+
"undici": "7.29.1",
|
|
64
|
+
"typescript": "5.9.3",
|
|
65
|
+
"@colyseus/schema": "^4.0.14",
|
|
66
|
+
"@colyseus/sdk": "^0.17.34",
|
|
67
|
+
"@react-three/drei": "^10.7.7",
|
|
68
|
+
"@react-three/fiber": "^9.6.1",
|
|
69
|
+
"react": "~19.2.4",
|
|
70
|
+
"react-dom": "~19.2.4",
|
|
71
|
+
"three": "^0.180.0",
|
|
72
|
+
"zod": "^4.3.6",
|
|
73
|
+
"@colyseus/ws-transport": "^0.17.9",
|
|
74
|
+
"@storybook/react": "10.6.0",
|
|
75
|
+
"@types/node": "^25.3.0",
|
|
76
|
+
"@types/react": "^19.2.14",
|
|
77
|
+
"@types/react-dom": "^19.2.3",
|
|
78
|
+
"@types/three": "^0.180.0",
|
|
79
|
+
"@vitejs/plugin-react": "^5.1.4",
|
|
80
|
+
"colyseus": "^0.17.8",
|
|
81
|
+
"storybook": "10.6.0",
|
|
82
|
+
"tsx": "^4.23.0",
|
|
83
|
+
"vite": "^6.4.3",
|
|
84
|
+
"ztrack": "^1.5.5",
|
|
85
|
+
"three-bvh-csg": "^0.0.18",
|
|
86
|
+
"three-mesh-bvh": "^0.9.12"
|
|
87
|
+
},
|
|
88
|
+
"bin": {
|
|
89
|
+
"volter-game-editor": "./dist-node/cli.js"
|
|
90
|
+
}
|
|
91
|
+
}
|
package/presets.mjs
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE GAME EDITOR, COMPOSED — this file is the whole product.
|
|
3
|
+
*
|
|
4
|
+
* Thin code that stitches packages onto the editor kit and holds only what
|
|
5
|
+
* building a game needs. Three decisions, each a product's to make and nobody
|
|
6
|
+
* else's:
|
|
7
|
+
*
|
|
8
|
+
* - WHICH PACKAGES, in mount order. `vgai:contributions/<package>` is that
|
|
9
|
+
* package's own `package.json#vgai.contributions`, read at build time
|
|
10
|
+
* (`@volter/editor-core/build/product-contributions`) — the product names
|
|
11
|
+
* the package, never its modules, so a package that grows a contribution
|
|
12
|
+
* grows this product with no edit here.
|
|
13
|
+
* - THE LOOK. `classic` — the editor's own Graphite, which is the reference
|
|
14
|
+
* frame every host-default shape was measured against. A DEFAULT:
|
|
15
|
+
* `~/.vgai/settings.json`, the project's own, and its adapter's declaration
|
|
16
|
+
* each outrank it.
|
|
17
|
+
* - THE WORKSPACE. `game` — `@volter/editor-game`'s own workspace
|
|
18
|
+
* contribution, which applies to a project with at least one root that
|
|
19
|
+
* plays.
|
|
20
|
+
*
|
|
21
|
+
* `mountVgai` is what the workbench contribution reads off this module once
|
|
22
|
+
* `/__editor/served-modules` hands it this file's URL.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import blender from 'vgai:contributions/@volter/editor-blender';
|
|
26
|
+
import game from 'vgai:contributions/@volter/editor-game';
|
|
27
|
+
import { product } from '@volter/editor-core/frame/product';
|
|
28
|
+
|
|
29
|
+
export const { mountVgai } = product({
|
|
30
|
+
id: 'game-editor',
|
|
31
|
+
packages: {
|
|
32
|
+
'@volter/editor-game': game,
|
|
33
|
+
'@volter/editor-blender': blender,
|
|
34
|
+
},
|
|
35
|
+
look: 'classic',
|
|
36
|
+
workspace: 'game',
|
|
37
|
+
nativeMenus: true,
|
|
38
|
+
});
|
|
Binary file
|
package/starter/cube.py
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
#
|
|
3
|
+
# THIS FILE IS GPL, AND THE REST OF YOUR PROJECT IS NOT.
|
|
4
|
+
#
|
|
5
|
+
# It drives `bpy`, Blender's Python API. The Blender Foundation's stated
|
|
6
|
+
# position — their licence page, under "Add-ons (Python scripts)" — is that
|
|
7
|
+
# the API "is an integral part of the software" and that the GPL "therefore
|
|
8
|
+
# requires that such scripts (if published) are being shared under a GPL
|
|
9
|
+
# compliant license". So a bpy script is a derivative work of Blender, and
|
|
10
|
+
# this one is licensed GNU General Public License version 3 or later,
|
|
11
|
+
# exercising Blender's own "or later".
|
|
12
|
+
#
|
|
13
|
+
# WHAT THIS DOES NOT TOUCH. `cube.blend` beside this file is YOURS, and so is
|
|
14
|
+
# anything you export from it — glTF, GLB, renders. That is the Foundation's
|
|
15
|
+
# position too, on the same page under "Your Artwork": what you make with
|
|
16
|
+
# Blender is your sole property, "including the .blend files and other data
|
|
17
|
+
# files Blender can write". Every other file the template gave you is MIT.
|
|
18
|
+
# This licence reaches this script and nothing else.
|
|
19
|
+
#
|
|
20
|
+
# If you would rather not carry it: delete this file. The `.blend` is the
|
|
21
|
+
# document — this is only the recorded source of how it was made — and
|
|
22
|
+
# nothing in the project reads this script at runtime. If you write your own
|
|
23
|
+
# bpy scripts, the Foundation's position applies to them on the same terms;
|
|
24
|
+
# it is not a rule of ours and is not ours to waive, because the copyright in
|
|
25
|
+
# Blender is Blender's authors'.
|
|
26
|
+
#
|
|
27
|
+
# Copyright 2026 Volter AI, Inc.
|
|
28
|
+
|
|
29
|
+
"""The starter model — the bpy that made `cube.blend`, and its SOURCE.
|
|
30
|
+
|
|
31
|
+
A model is Blender data: `cube.blend` beside this file is the document the
|
|
32
|
+
editor opens, and this is the script that authored it. Run it again and you
|
|
33
|
+
get the same file; edit it and re-run it, or open the `.blend` and model in
|
|
34
|
+
Blender's own Edit Mode — both are authoring, and the `.blend` is the truth
|
|
35
|
+
either way.
|
|
36
|
+
|
|
37
|
+
Run it through the session's Blender, from this project:
|
|
38
|
+
|
|
39
|
+
npm run --silent vgai -- blender-mcp # the transport an agent drives
|
|
40
|
+
# or, in a live editor session:
|
|
41
|
+
# editor.blender('blender-execute', { code: open('src/models/cube.py').read() })
|
|
42
|
+
|
|
43
|
+
The session saves the open document about a second after the last call, so a
|
|
44
|
+
script that models is a script that saves.
|
|
45
|
+
|
|
46
|
+
Coordinates are metres, Z is up (Blender's), and the exporter converts to the
|
|
47
|
+
game's Y-up on the way to glTF.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
import bpy
|
|
51
|
+
|
|
52
|
+
# ONE DATABLOCK, AT THE ORIGIN. A model file holds the model, not a set: the
|
|
53
|
+
# factory startup's Light and Camera belong to a scene, and a model that
|
|
54
|
+
# carries them exports them too.
|
|
55
|
+
for obj in list(bpy.data.objects):
|
|
56
|
+
bpy.data.objects.remove(obj, do_unlink=True)
|
|
57
|
+
for mesh in list(bpy.data.meshes):
|
|
58
|
+
bpy.data.meshes.remove(mesh)
|
|
59
|
+
# Materials too, or a re-run appends `Material.001` beside the one it made
|
|
60
|
+
# last time and the Shader Editor shows whichever slot happens to be active.
|
|
61
|
+
for material in list(bpy.data.materials):
|
|
62
|
+
bpy.data.materials.remove(material)
|
|
63
|
+
|
|
64
|
+
# Blender opens on a cube; so does this. `size` is the full width, so 1.0 is
|
|
65
|
+
# a 1 m box — the starter's own scale, not the factory cube's 2 m.
|
|
66
|
+
bpy.ops.mesh.primitive_cube_add(size=1.0, location=(0.0, 0.0, 0.0))
|
|
67
|
+
cube = bpy.context.active_object
|
|
68
|
+
cube.name = "Cube"
|
|
69
|
+
cube.data.name = "Cube"
|
|
70
|
+
|
|
71
|
+
# AND BLENDER'S OWN DEFAULT MATERIAL, because Blender's own default cube has
|
|
72
|
+
# one. Without it the Shading workspace opens on `Shader Editor · No material`
|
|
73
|
+
# with nothing drawn and nothing a person can click to change that — its one
|
|
74
|
+
# control, Use Nodes, correctly refuses, because this view inspects a node
|
|
75
|
+
# tree and never writes one (walk 3, beat 4). `materials.new` leaves
|
|
76
|
+
# `use_nodes` FALSE, which is a material the header names and the canvas still
|
|
77
|
+
# cannot draw; setting it True is what builds the pair Blender builds —
|
|
78
|
+
# Principled BSDF into Material Output, 2 nodes and 37 sockets.
|
|
79
|
+
material = bpy.data.materials.new(name="Material")
|
|
80
|
+
material.use_nodes = True
|
|
81
|
+
cube.data.materials.append(material)
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
# Detailed VGAI game project reference
|
|
2
|
+
|
|
3
|
+
This is the procedural reference behind the compact project `AGENTS.md`
|
|
4
|
+
router. Load only the section the current decision needs. The source files
|
|
5
|
+
named here are the examples an agent should copy; no hidden generator or
|
|
6
|
+
registry supplies their semantics.
|
|
7
|
+
|
|
8
|
+
## Contents
|
|
9
|
+
|
|
10
|
+
- [Starting a game](#starting-a-game)
|
|
11
|
+
- [Roadmap and journal](#roadmap-and-journal)
|
|
12
|
+
- [Source architecture](#source-architecture)
|
|
13
|
+
- [Playable slices](#playable-slices)
|
|
14
|
+
- [The resident QA tester](#the-resident-qa-tester)
|
|
15
|
+
- [Studio surfaces](#studio-surfaces)
|
|
16
|
+
- [Analytics and gameplay sessions](#analytics-and-gameplay-sessions)
|
|
17
|
+
- [Game data](#game-data)
|
|
18
|
+
- [UI roots](#ui-roots)
|
|
19
|
+
- [Capabilities and assets](#capabilities-and-assets)
|
|
20
|
+
- [Multiplayer](#multiplayer)
|
|
21
|
+
- [Live verification](#live-verification)
|
|
22
|
+
|
|
23
|
+
## Starting a game
|
|
24
|
+
|
|
25
|
+
Read the brief, create the first `ROADMAP.md` arc, inspect
|
|
26
|
+
`vgai.project.json`, then start the editor immediately:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm run dev
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Tell the user the printed URL in the first visible message and keep that
|
|
33
|
+
session running. The editor is where the source is observed and verified;
|
|
34
|
+
source edits remain ordinary file edits. `npm run dev:standalone` serves only
|
|
35
|
+
an exported build and is not a development bypass.
|
|
36
|
+
|
|
37
|
+
## Roadmap and journal
|
|
38
|
+
|
|
39
|
+
`ROADMAP.md` is the only game-level tracker. Its first entry is the complete
|
|
40
|
+
playable prototype from the brief, not one task per mechanic, UI, tool, or
|
|
41
|
+
test. Later entries are only major features of comparable scope. Each entry
|
|
42
|
+
has one `status:` and one `Summary:`; do not add acceptance criteria yet.
|
|
43
|
+
`ztrack check` verifies this shape.
|
|
44
|
+
|
|
45
|
+
`DEVLOG.md` is not another tracker. Add one entry when a coherent feature arc
|
|
46
|
+
finishes, covering what changed, why, important decisions, the live playtest
|
|
47
|
+
outcome, and what remains. Link only evidence you inspected. Copy selected
|
|
48
|
+
screenshots into `media/screenshots/` and selected short clips into
|
|
49
|
+
`media/clips/`; bounded `.vgai/` history is working material, not a permanent
|
|
50
|
+
journal attachment.
|
|
51
|
+
|
|
52
|
+
## Source architecture
|
|
53
|
+
|
|
54
|
+
Read `vgai.project.json` and `src/main.ts` first. Every manifest root has one
|
|
55
|
+
adapter and lifecycle. Its entry is the source document: TSX for a Three or
|
|
56
|
+
Canvas root, JSX for a DOM root. Do not call `createRoot`, `hydrateRoot`, or
|
|
57
|
+
`ReactDOM.render` inside a root component; host mounting belongs to the
|
|
58
|
+
adapter boundary.
|
|
59
|
+
|
|
60
|
+
The neutral Three starter demonstrates the complete taxonomy:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
src/world.tsx thin persistent root + scene swap slot
|
|
64
|
+
src/scenes/MainScene.tsx complete replaceable composition
|
|
65
|
+
src/prefabs/HeroBox.tsx independently placeable object
|
|
66
|
+
src/prefabs/HeroBox.stories.tsx Content registration/design state
|
|
67
|
+
src/components/environment/Ground.tsx non-placeable support assembly
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Preserve the meanings when replacing the starter content:
|
|
71
|
+
|
|
72
|
+
- A scene composes environment, prefabs, and cameras. It is not a Content
|
|
73
|
+
prefab and does not hide independent repeated entities inside scenery.
|
|
74
|
+
- A prefab is a thing a designer selects, places, duplicates, or reuses as one
|
|
75
|
+
piece. It accepts ordinary `ThreeElements[...]` props, forwards them to one
|
|
76
|
+
native outer root, has meaningful node names, and ships a colocated story
|
|
77
|
+
naming it as `meta.component`.
|
|
78
|
+
- Construction pieces that only make sense as part of a prefab stay inside
|
|
79
|
+
that owner. Do not create a prefab per primitive.
|
|
80
|
+
- Supporting components are non-placeable implementation: sky, atmosphere,
|
|
81
|
+
a one-per-scene floor assembly, a light rig. They belong under
|
|
82
|
+
`src/components/` and do not receive hollow stories.
|
|
83
|
+
- A character is the rigged humanoid-generator asset path, never a stack of
|
|
84
|
+
capsules and boxes.
|
|
85
|
+
|
|
86
|
+
`check-idioms` makes the objective edges loud: E10 for a prefab without its
|
|
87
|
+
story, E11 for scene-folder misclassification, E9 for R3F authoring warnings,
|
|
88
|
+
and W10 when a Three project has no registered prefab at all. W10 is a prompt,
|
|
89
|
+
not a claim that fully procedural games are impossible; record and suppress a
|
|
90
|
+
genuine exception with a reason.
|
|
91
|
+
|
|
92
|
+
The world node is the entity. Behavior on an R3F root is an ordinary React
|
|
93
|
+
component using `useFrame`; physics is ordinary `@react-three/rapier` JSX.
|
|
94
|
+
Use the ecosystem library directly. No mirror tree, gameplay registry, or
|
|
95
|
+
vgai phase vocabulary belongs in game code.
|
|
96
|
+
|
|
97
|
+
## Playable slices
|
|
98
|
+
|
|
99
|
+
Ship one vertical slice at a time. A mechanic slice includes all of:
|
|
100
|
+
|
|
101
|
+
- the player-visible behavior;
|
|
102
|
+
- the rendering/HUD required to read it;
|
|
103
|
+
- an ordinary exported state readout beside the mechanic;
|
|
104
|
+
- an ordinary exported setup function when reaching a QA situation costs
|
|
105
|
+
roughly more than 30 seconds of honest play;
|
|
106
|
+
- a tester behavior that exercises the mechanic through normal input;
|
|
107
|
+
- any game-specific Tester/Data/Analytics presentation the slice earns;
|
|
108
|
+
- a live playtest, reviewed visual evidence, and a commit.
|
|
109
|
+
|
|
110
|
+
The exported function is the debug door. There is no command registry:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
// src/sim/cooling.ts
|
|
114
|
+
export function readCooling() {
|
|
115
|
+
return { temperature, capacity, throttled };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function setupHeatSpike() {
|
|
119
|
+
// Arrange the expensive precondition only. Do not perform the behavior
|
|
120
|
+
// the tester is meant to exercise.
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The developer reaches that exact running module from the session:
|
|
125
|
+
|
|
126
|
+
```js
|
|
127
|
+
game.run(async ({ modules }) => {
|
|
128
|
+
const cooling = await modules('src/sim/cooling.ts');
|
|
129
|
+
cooling.setupHeatSpike();
|
|
130
|
+
return cooling.readCooling();
|
|
131
|
+
})
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Do not press the player's controls from the developer REPL in a realtime game.
|
|
135
|
+
The developer arranges and observes; the resident tester holds the controller
|
|
136
|
+
at simulation speed. A genuinely turn-paced action is the narrow exception
|
|
137
|
+
where developer-paced input can still be honest.
|
|
138
|
+
|
|
139
|
+
## The resident QA tester
|
|
140
|
+
|
|
141
|
+
The tester is ordinary game code under `src/bot/`, not an LLM service and not
|
|
142
|
+
gameplay automation that belongs to the shipped player's economy. It is the QA
|
|
143
|
+
person holding this game instance's controller.
|
|
144
|
+
|
|
145
|
+
The starter demonstrates the mechanics without standardizing the game's
|
|
146
|
+
vocabulary:
|
|
147
|
+
|
|
148
|
+
- `src/input.ts` is the game's own input store. Human key bindings and virtual
|
|
149
|
+
tester actuation merge into the same action reads.
|
|
150
|
+
- `src/bot/behaviors.ts` is the game-specific repertoire. Replace the starter
|
|
151
|
+
`sweep` with intent-level goals named for real outcomes and grow it with
|
|
152
|
+
every mechanic.
|
|
153
|
+
- `src/bot/tester-station.ts` exports `hireTester`, `describeTester`, and the
|
|
154
|
+
sim-tick stepper.
|
|
155
|
+
- `src/bot/bot-station.ts` exports status plus pause, resume, abort, and
|
|
156
|
+
handoff controls.
|
|
157
|
+
- `src/bot/QaTester.tsx` is the thin frame hook that steps the tester before
|
|
158
|
+
gameplay reads input.
|
|
159
|
+
|
|
160
|
+
A tester behavior actuates only `ctx.hands` and reads the game's own state. It
|
|
161
|
+
never teleports, buys resources directly, or calls setup functions. A setup
|
|
162
|
+
function may establish the hard-to-reach state before the goal begins; the
|
|
163
|
+
goal must still play the behavior under judgment normally.
|
|
164
|
+
|
|
165
|
+
Handoff releases virtual input and returns the controller to the human.
|
|
166
|
+
Pause, refusal, a goal that completes within one paint, blockers, and terminal
|
|
167
|
+
outcomes must all narrate themselves on the Tester surface and in the play
|
|
168
|
+
log.
|
|
169
|
+
|
|
170
|
+
## Studio surfaces
|
|
171
|
+
|
|
172
|
+
`src/contributions/` contains this game's editor panels. Contributions are ordinary
|
|
173
|
+
TSX discovered by filename (`*.inspector.tsx`, `*.document.tsx`,
|
|
174
|
+
`*.utility.tsx`, `*.analytics.tsx`). They export a contribution `point`, a
|
|
175
|
+
`title`, and a default React component. There is no registry, declaration API,
|
|
176
|
+
generated form, command vocabulary, or required section layout.
|
|
177
|
+
|
|
178
|
+
Live contributions read the running mount through
|
|
179
|
+
`src/contributions/use-game-modules.ts`. Never directly import a live gameplay module
|
|
180
|
+
from a contribution; that would create a second module instance under the
|
|
181
|
+
editor importer. Hand-type the narrow slice the surface uses and call the
|
|
182
|
+
same exported functions the developer reaches through `game.run`.
|
|
183
|
+
|
|
184
|
+
The `studio` addition (`game-editor create <name> --with studio`, or `--template full`)
|
|
185
|
+
brings three unfinished surfaces. No other preset does, because nothing a
|
|
186
|
+
project inherits may error and these three throw until they are rewritten:
|
|
187
|
+
|
|
188
|
+
- Tester is the live QA cockpit: controller ownership, repertoire, current
|
|
189
|
+
goal mind and outcome, controls, setup cheats, and live judgment readings.
|
|
190
|
+
- Data edits the game's authored content and mechanic parameters.
|
|
191
|
+
- Analytics shows game-specific charts and metrics from the selected recorded
|
|
192
|
+
Gameplay Session, using the editor's existing playback controls.
|
|
193
|
+
|
|
194
|
+
All three stubs emit `VGAI_STUB_UNIMPLEMENTED`, which makes the live console and
|
|
195
|
+
`check-idioms` report remaining work. Rewrite the files whole in the game's
|
|
196
|
+
vocabulary.
|
|
197
|
+
|
|
198
|
+
## Analytics and gameplay sessions
|
|
199
|
+
|
|
200
|
+
One Play interval is one durable Gameplay Session. The editor writes
|
|
201
|
+
`logs/play-*.jsonl`, including lifecycle rows and structured game events. A
|
|
202
|
+
WebM recording is also captured by CLI Play. The log itself is the session catalog, so
|
|
203
|
+
sessions survive Stop and editor reload without a second manifest.
|
|
204
|
+
|
|
205
|
+
`workspace.analytics` has a shared host shell: session selector, real-time
|
|
206
|
+
scrub rail, current elapsed time, and optional video hover preview. The game's
|
|
207
|
+
`analytics.analytics.tsx` is only the body. It receives a stable Gameplay
|
|
208
|
+
Session store and deliberately receives no live `play` handle, so charts
|
|
209
|
+
cannot accidentally depend on ephemeral simulation state.
|
|
210
|
+
|
|
211
|
+
In a React component, `useDebugEmit` from `@volter/game-runtime/react/world-state`
|
|
212
|
+
returns the event callback: `const emit = useDebugEmit()`. Call
|
|
213
|
+
`emit('gem-collected', { count })` in the mechanic's collection handler; the
|
|
214
|
+
editor stamps and records it. Build charts from the selected log at the shared cursor.
|
|
215
|
+
|
|
216
|
+
Record motion while Play runs:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
npm run --silent vgai -- eval 'return editor.recording.start({ fps: 30 })'
|
|
220
|
+
# direct tester goals and advance with game.waitSimTime(...)
|
|
221
|
+
npm run --silent vgai -- eval 'return editor.recording.stop()'
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Recordings are standard WebM files under `.vgai/recordings/`. Use ordinary
|
|
225
|
+
`ffprobe`/`ffmpeg` to inspect and trim them.
|
|
226
|
+
|
|
227
|
+
## Game data
|
|
228
|
+
|
|
229
|
+
Game rules and content are plain typed TS literals under `src/data/`, named
|
|
230
|
+
for the mechanic or content they describe:
|
|
231
|
+
|
|
232
|
+
```ts
|
|
233
|
+
// src/data/cooling.ts
|
|
234
|
+
export const cooling = {
|
|
235
|
+
baseCapacity: 120,
|
|
236
|
+
throttleAt: 86,
|
|
237
|
+
} as const;
|
|
238
|
+
|
|
239
|
+
export type Cooling = typeof cooling;
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Mechanics import the literal directly. TypeScript is the schema; Vite HMR is
|
|
243
|
+
the edit transport. There is no engine data format, handle, emitted schema, or
|
|
244
|
+
runtime parse layer. Put derived calculations beside the data as plain
|
|
245
|
+
functions, then render the useful derived columns/graphs in the Data
|
|
246
|
+
contribution. A table too large to balance by hand should be generated from a
|
|
247
|
+
small set of authored parameters; the generated table is build output.
|
|
248
|
+
|
|
249
|
+
## UI roots
|
|
250
|
+
|
|
251
|
+
A player HUD is a `dom` root in `vgai.project.json`, default-exporting an
|
|
252
|
+
ordinary React component. It reads the project's own React context/store and
|
|
253
|
+
uses normal React subscriptions. Do not mount a second React root from project
|
|
254
|
+
code, and do not use Drei `Html` for a HUD—it is absent from clean composite
|
|
255
|
+
captures.
|
|
256
|
+
|
|
257
|
+
The host owns root mounting. `src/main.ts` registers the root adapters and the
|
|
258
|
+
manifest supplies root identity/entry. The source component itself stays free
|
|
259
|
+
of vgai runtime context.
|
|
260
|
+
|
|
261
|
+
## Capabilities and assets
|
|
262
|
+
|
|
263
|
+
Capabilities are optional standard libraries copied into the project. Before
|
|
264
|
+
writing reusable plumbing, list what already exists:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
npm run --silent vgai -- add
|
|
268
|
+
npm run --silent vgai -- add <id>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
The copied source under `src/lib/` is project-owned and editable. Use its
|
|
272
|
+
native library API; do not wrap Three, Rapier, Pixi, React, Colyseus, or XState
|
|
273
|
+
behind another programming model.
|
|
274
|
+
|
|
275
|
+
For 3D, 2D, animation, humanoid, environment, or generated assets, load the
|
|
276
|
+
matching `.agents/skills/vgai-*` skill before acting. The 3D asset floor is a
|
|
277
|
+
named prefab component, a colocated story, named nodes, and inspected visual
|
|
278
|
+
evidence. Provider generation must go through the provider-native skill and
|
|
279
|
+
`ctx.projectOutputs.write(...)`; never spend funds by calling a provider ad
|
|
280
|
+
hoc.
|
|
281
|
+
|
|
282
|
+
Repeatable creative sequences are flat scripts under
|
|
283
|
+
`scripts/<task>/steps/`, with a README at each meaningful step and
|
|
284
|
+
intermediates under `.vgai/tmp/<task>/`. Helpers under `src/lib/<domain>/` are
|
|
285
|
+
only for reusable, purely mechanical operations—not workflow runners,
|
|
286
|
+
registries, or auto-judges.
|
|
287
|
+
|
|
288
|
+
## Multiplayer
|
|
289
|
+
|
|
290
|
+
Call Colyseus directly with typed rooms and the callbacks API. Dynamically
|
|
291
|
+
import the client so single-player bundles remain clean. A multiplayer seat is
|
|
292
|
+
a person; in the editor it lives in one full game instance with its own
|
|
293
|
+
resident tester or a human handoff.
|
|
294
|
+
|
|
295
|
+
Use one editor, not extra browser tabs or synthetic clients:
|
|
296
|
+
|
|
297
|
+
```js
|
|
298
|
+
await editor.instances(['host', 'guest'])
|
|
299
|
+
const host = game.instance('host')
|
|
300
|
+
const guest = game.instance('guest')
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Address each instance explicitly, load its running tester module, and direct
|
|
304
|
+
its tester toward the seat's goal. Keyboard focus, the Inspector's currently
|
|
305
|
+
viewed instance, and the instance addressed by code are separate; never assume
|
|
306
|
+
a human click retargeted the developer wire.
|
|
307
|
+
|
|
308
|
+
## Live verification
|
|
309
|
+
|
|
310
|
+
After every slice:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
npm run check-idioms
|
|
314
|
+
npm run typecheck
|
|
315
|
+
npm run validate
|
|
316
|
+
npm run validate-manifest
|
|
317
|
+
npm run --silent vgai -- status
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Then verify through the live editor-owned session:
|
|
321
|
+
|
|
322
|
+
1. Enter Play and wait for the full mount acknowledgement.
|
|
323
|
+
2. Arrange one situation through exported setup functions.
|
|
324
|
+
3. Direct the resident tester toward an intent-level goal.
|
|
325
|
+
4. Advance with `game.waitSimTime({ simSeconds })`; never use wall-clock
|
|
326
|
+
sleeps, rAF loops, or synthetic keyboard events.
|
|
327
|
+
5. Read module state and `logs/play-*.jsonl`, one observation at a time.
|
|
328
|
+
6. Look at the visible result and capture a legible screenshot. Exercise the
|
|
329
|
+
face control itself when validating a visible button.
|
|
330
|
+
7. Repeat for the few varied situations that could expose the slice.
|
|
331
|
+
8. Inspect hierarchy and Content: prefabs appear as prefabs, repeated
|
|
332
|
+
primitives are collapsed under their owner, and independent entities are
|
|
333
|
+
not hidden in scenery.
|
|
334
|
+
9. `npm run --silent vgai -- console` must be silent. Any unresolved warning/error is
|
|
335
|
+
remaining work or must be explicitly acknowledged with an honest reason.
|
|
336
|
+
10. Commit the verified slice immediately. When the arc finishes, update
|
|
337
|
+
`DEVLOG.md` with the judged result and reviewed media.
|
|
338
|
+
|
|
339
|
+
Do not add automated tests, specs, or committed autoplay routes to a game
|
|
340
|
+
project. The live interactive playtest is the approved proof; its play log is
|
|
341
|
+
the receipt.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: editor
|
|
3
|
+
description: Launch, control, inspect, and verify a VGAI game through its live visual editor. Use for editor sessions, Play mode, selection, hierarchy or inspector work, screenshots, status, logs, restart after setup changes, or the live playtest loop.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Control the VGAI editor
|
|
7
|
+
|
|
8
|
+
## Open the observable session
|
|
9
|
+
|
|
10
|
+
1. Run `npm run dev` from the game project. Let it auto-open unless the run is
|
|
11
|
+
genuinely unattended CI.
|
|
12
|
+
2. Tell the user the printed editor URL and keep the process running.
|
|
13
|
+
3. Run `npm run --silent vgai -- status`; require `connected: true` before treating the
|
|
14
|
+
response as live state. A running server without a browser tab only has a
|
|
15
|
+
cached snapshot.
|
|
16
|
+
4. Use Play mode for user-visible game runs. The standalone page
|
|
17
|
+
(`npm run dev:standalone`) serves EXPORTED builds only — until the game is
|
|
18
|
+
exported it refuses to mount, so the editor is the one surface for a game
|
|
19
|
+
in development.
|
|
20
|
+
|
|
21
|
+
Always invoke the scaffold-pinned CLI as `npm run --silent vgai -- <verb>`. Never use
|
|
22
|
+
a bare global `vgai` command, which may come from a different checkout.
|
|
23
|
+
|
|
24
|
+
## Verify the loop
|
|
25
|
+
|
|
26
|
+
- Use `play`, `stop`, `status`, and `screenshot` to observe work — selection,
|
|
27
|
+
focus, and panels go through the eval door (`npx volter-game-editor eval
|
|
28
|
+
'editor.select("<id>")'` / `editor.focus()` / `editor.showPanel(...)`);
|
|
29
|
+
edit project source directly when that is the simplest authoring path.
|
|
30
|
+
- Use `restart` after init-time registrations, listeners, resources, or
|
|
31
|
+
ownership changes. Ordinary component HMR does not rerun `init()`. Its ack
|
|
32
|
+
IS the readiness guarantee (relay up, tab attached, play running); a
|
|
33
|
+
failure names the next step.
|
|
34
|
+
- Playtest LIVE from first playability: exported setup functions arrange the
|
|
35
|
+
situation, the resident tester is hired through its running module, and the
|
|
36
|
+
event log is read on an interval while the run is redirected until
|
|
37
|
+
satisfied. The play log is the receipt.
|
|
38
|
+
- Read persisted Play logs and visible pixels as well as state. Screenshots
|
|
39
|
+
must make the result being claimed legible.
|
|
40
|
+
- **Every `npx volter-game-editor play` records video automatically** — the ack prints the
|
|
41
|
+
recording path (`.vgai/recordings/play-latest.webm`, replaced by the next
|
|
42
|
+
play; `npx volter-game-editor play --record <name>` keeps a clip forever), play auto-stops
|
|
43
|
+
after 2 idle minutes, and stopping finalizes the WebM. A claim about
|
|
44
|
+
MOTION (an effect, an animation, a stutter, anything that lives between
|
|
45
|
+
frames) is judged from that clip: find the moment via the play log's
|
|
46
|
+
event timestamps against the recording's start time, then examine at
|
|
47
|
+
least 10 frames within a ≤5-second span around it. `npx volter-game-editor screenshot`
|
|
48
|
+
while play is running refuses and points at the clip; screenshots are for
|
|
49
|
+
static states.
|
|
50
|
+
|
|
51
|
+
Read [references/editor-control.md](references/editor-control.md) when exact
|
|
52
|
+
CLI verbs, connection behavior, E2E exit codes, SDK methods, or worked command
|
|
53
|
+
sequences are needed.
|