@volter/cyclotron 0.5.211 → 0.5.213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (888) hide show
  1. package/BUNDLED_NOTICES +232 -1964
  2. package/LICENSE +2 -3
  3. package/LICENSE-BLENDER +9 -8
  4. package/NOTICE +8 -3
  5. package/README.md +39 -30
  6. package/dist/.vite/manifest.json +1215 -4338
  7. package/dist/assets/AudioViewer-B5pkIGXS.js +1 -0
  8. package/dist/assets/ImageViewer-BPVLEEQ2.js +1 -0
  9. package/dist/assets/JsonAssetDocument-DuVW9del.js +2 -0
  10. package/dist/assets/ProjectAuthoringBootstrap-CZJz4Svb.js +2 -0
  11. package/dist/assets/SourceAssetViewer-LwHBW53R.js +1 -0
  12. package/dist/assets/VideoViewer-Bfjjp4zH.js +1 -0
  13. package/dist/assets/client-BLXKEWrR.js +25 -0
  14. package/dist/assets/index-BKjLHm6K.js +483 -0
  15. package/dist/assets/index-CJcVFJ-l.css +1 -0
  16. package/dist/assets/product-CaIfLQVS.js +1 -0
  17. package/dist/assets/story-capture-C3xmgE62.js +1 -0
  18. package/dist/assets/volter-sdk-DT0xmh2J.js +1407 -0
  19. package/dist/assets/volter-sdk-activation-events-B-WERmWU.js +1 -0
  20. package/dist/assets/volter-sdk-active-project-DvEsy8Q6.js +1 -0
  21. package/dist/assets/volter-sdk-adapter-editor-config-CQ5V6W-o.js +1 -0
  22. package/dist/assets/volter-sdk-animation-animation-clock-Cy7j_2qF.js +1 -0
  23. package/dist/assets/volter-sdk-animation-stage-transport-DoUDq6Gb.js +1 -0
  24. package/dist/assets/volter-sdk-api-base-Dr1bx5e0.js +1 -0
  25. package/dist/assets/volter-sdk-api-project-open-D4nPvIPU.js +1 -0
  26. package/dist/assets/volter-sdk-api-project-source-DoO7WBwQ.js +1 -0
  27. package/dist/assets/volter-sdk-api-settings-BEHgO5wf.js +1 -0
  28. package/dist/assets/volter-sdk-asset-capabilities-CGkNwaAe.js +1 -0
  29. package/dist/assets/volter-sdk-asset-document-write-policy-CzWM1HhK.js +1 -0
  30. package/dist/assets/volter-sdk-asset-editor-context-BkSK1vL1.js +1 -0
  31. package/dist/assets/volter-sdk-asset-thumbnails-zSmJgI_x.js +1 -0
  32. package/dist/assets/volter-sdk-asset-viewers-B-ICvlkR.js +1 -0
  33. package/dist/assets/volter-sdk-asset-workflow-project-content-C6Ow0R-F.js +1 -0
  34. package/dist/assets/volter-sdk-authoring-active-adapter-CKuWwxgH.js +1 -0
  35. package/dist/assets/volter-sdk-authoring-boundary-authoring-adapter-DTwFKBkS.js +1 -0
  36. package/dist/assets/volter-sdk-authoring-composite-authoring-adapter-iRSbSHpV.js +1 -0
  37. package/dist/assets/volter-sdk-authoring-consumer-actions-DK9-B-wg.js +1 -0
  38. package/dist/assets/volter-sdk-authoring-design-time-mount-registry-BQnWcBVe.js +1 -0
  39. package/dist/assets/volter-sdk-authoring-design-time-roots-BKSmkD7_.js +1 -0
  40. package/dist/assets/volter-sdk-authoring-layered-pick-C-YvuxEG.js +1 -0
  41. package/dist/assets/volter-sdk-authoring-no-authoring-adapter-Cv9DD6G0.js +1 -0
  42. package/dist/assets/volter-sdk-authoring-panel-authoring-BLOrFs8L.js +1 -0
  43. package/dist/assets/volter-sdk-authoring-react-design-canvas-style-Dr9i31o5.js +1 -0
  44. package/dist/assets/volter-sdk-authoring-react-story-board-BlCQQM-8.js +1 -0
  45. package/dist/assets/volter-sdk-authoring-seam-evidence-CjetY_ZG.js +1 -0
  46. package/dist/assets/volter-sdk-authoring-selection-scope-BxmbC71H.js +1 -0
  47. package/dist/assets/volter-sdk-authoring-shell-document-ops-DDb8oGx9.js +1 -0
  48. package/dist/assets/volter-sdk-authoring-stage-root-B50LLhnJ.js +1 -0
  49. package/dist/assets/volter-sdk-authoring-story-board-chrome-fit-BVV9fbcw.js +1 -0
  50. package/dist/assets/volter-sdk-authoring-viewport-tool-context-cQafPSkT.js +1 -0
  51. package/dist/assets/volter-sdk-authoring-viewport-tool-owner-BppqL4f_.js +1 -0
  52. package/dist/assets/volter-sdk-authoring-world-session-state-BlpdiKod.js +1 -0
  53. package/dist/assets/volter-sdk-bitmap-label-BbtGPWgP.js +1 -0
  54. package/dist/assets/volter-sdk-breakpoint-state-DCFuSvgm.js +1 -0
  55. package/dist/assets/volter-sdk-bytes-codec-CrNeVT4e.js +1 -0
  56. package/dist/assets/volter-sdk-cancellation-reason-ByOH3mlF.js +1 -0
  57. package/dist/assets/volter-sdk-canvas-frames-BU8Rqr4J.js +1 -0
  58. package/dist/assets/volter-sdk-capture-size-D4cNT2XC.js +1 -0
  59. package/dist/assets/volter-sdk-chrome-registry-qHUiDauw.js +1 -0
  60. package/dist/assets/volter-sdk-command-result-text-2wzEhQ5t.js +1 -0
  61. package/dist/assets/volter-sdk-commands-C4RgHEOa.js +1 -0
  62. package/dist/assets/volter-sdk-component-board-registry-6gFZBkTP.js +1 -0
  63. package/dist/assets/volter-sdk-components-AssetEditorShell-CQVLedvW.js +1 -0
  64. package/dist/assets/volter-sdk-components-InspectorCanvasPreview-CN5ROhNT.js +1 -0
  65. package/dist/assets/volter-sdk-components-SurfaceStateOverlay-Cc9Ov1Ol.js +1 -0
  66. package/dist/assets/volter-sdk-components-Toolbar-ZoV9Yq_A.js +1 -0
  67. package/dist/assets/volter-sdk-components-TransientHint-BML2V3uu.js +1 -0
  68. package/dist/assets/volter-sdk-components-inspector-preview-section-BhDjhUyz.js +1 -0
  69. package/dist/assets/volter-sdk-components-use-after-paint-BVSO4qjV.js +1 -0
  70. package/dist/assets/volter-sdk-components-workspace-history-CThvGfsY.js +1 -0
  71. package/dist/assets/volter-sdk-content-entry-source-registry-CJLVq3tC.js +1 -0
  72. package/dist/assets/volter-sdk-contribution-surfaces-CeEDmriM.js +1 -0
  73. package/dist/assets/volter-sdk-contributions-x6j41XZp.js +1 -0
  74. package/dist/assets/volter-sdk-coverage-design-time-surfaces-D-tNGazo.js +1 -0
  75. package/dist/assets/volter-sdk-creation-site-registry-64gyrZPD.js +1 -0
  76. package/dist/assets/volter-sdk-css-numeric-style-CXeWqAoG.js +1 -0
  77. package/dist/assets/volter-sdk-declared-tools-BAzHxyUW.js +1 -0
  78. package/dist/assets/volter-sdk-document-areas-4DXjy0el.js +1 -0
  79. package/dist/assets/volter-sdk-document-layer-B4VYMPZ9.js +1 -0
  80. package/dist/assets/volter-sdk-document-open-registry-BLDMaEoN.js +1 -0
  81. package/dist/assets/volter-sdk-document-play-extension-Dv3fyS6K.js +1 -0
  82. package/dist/assets/volter-sdk-document-probe-drBhAyza.js +1 -0
  83. package/dist/assets/volter-sdk-document-stage-sessions-CtI9anAf.js +1 -0
  84. package/dist/assets/volter-sdk-document-viewports-BO0N7VyN.js +1 -0
  85. package/dist/assets/volter-sdk-editor-commands-BJ9Otxzu.js +1 -0
  86. package/dist/assets/volter-sdk-editor-console-BaGgfWmH.js +1 -0
  87. package/dist/assets/volter-sdk-editor-document-probe-D0ZhaXHx.js +1 -0
  88. package/dist/assets/volter-sdk-editor-mode-B07FDozS.js +1 -0
  89. package/dist/assets/volter-sdk-editor-runtime-D00Du7hG.js +1 -0
  90. package/dist/assets/volter-sdk-editor-server-response-C6kOPAsW.js +1 -0
  91. package/dist/assets/volter-sdk-editor-session-attribution-CggpIFb4.js +1 -0
  92. package/dist/assets/volter-sdk-editor-view-DEMsxlaT.js +1 -0
  93. package/dist/assets/volter-sdk-environment-images-OQtFG1kA.js +1 -0
  94. package/dist/assets/volter-sdk-extension-script-DanTHcyo.js +1 -0
  95. package/dist/assets/volter-sdk-eyedropper-session-BfVXtjzc.js +1 -0
  96. package/dist/assets/volter-sdk-files-file-provider-CXL6oCMd.js +1 -0
  97. package/dist/assets/volter-sdk-files-project-files-SBAE37py.js +1 -0
  98. package/dist/assets/volter-sdk-framed-document-capture-7TnE8pn1.js +1 -0
  99. package/dist/assets/volter-sdk-framed-document-driver-C0K3-SRt.js +1 -0
  100. package/dist/assets/volter-sdk-hierarchy-component-marks-BmJEMvvO.js +1 -0
  101. package/dist/assets/volter-sdk-hierarchy-kind-icon-CrwdpecY.js +1 -0
  102. package/dist/assets/volter-sdk-hierarchy-node-rows-FcK7_ULi.js +1 -0
  103. package/dist/assets/volter-sdk-hierarchy-projection-CKzUOZUa.js +1 -0
  104. package/dist/assets/volter-sdk-hierarchy-row-media-Czg40Ddi.js +1 -0
  105. package/dist/assets/volter-sdk-hierarchy-row-model-BGzmcywF.js +1 -0
  106. package/dist/assets/volter-sdk-hierarchy-rows-VAI0psTR.js +1 -0
  107. package/dist/assets/volter-sdk-hierarchy-walk-CaVqG7v2.js +1 -0
  108. package/dist/assets/volter-sdk-history-history-delegate-DH_xBvdh.js +1 -0
  109. package/dist/assets/volter-sdk-history-history-service-D0n0Gl5Z.js +1 -0
  110. package/dist/assets/volter-sdk-history-persistence-coordinator-CcywAFdm.js +1 -0
  111. package/dist/assets/volter-sdk-history-resource-registry-DMTlnwGv.js +1 -0
  112. package/dist/assets/volter-sdk-history-snapshot-store-BVh1DtBp.js +1 -0
  113. package/dist/assets/volter-sdk-history-source-history-backend-ulJ-65tX.js +1 -0
  114. package/dist/assets/volter-sdk-hmr-registration-group-DvMQVKyO.js +1 -0
  115. package/dist/assets/volter-sdk-hmr-stable-react-context-BMVr5YVk.js +1 -0
  116. package/dist/assets/volter-sdk-host-D765Py2w.js +1 -0
  117. package/dist/assets/volter-sdk-hotkeys-TesTKdAZ.js +1 -0
  118. package/dist/assets/volter-sdk-index-BABXozHr.js +1 -0
  119. package/dist/assets/volter-sdk-inference-diagnostics-CsDbQ0M5.js +1 -0
  120. package/dist/assets/volter-sdk-inspection-document-subject-BMRD77Va.js +1 -0
  121. package/dist/assets/volter-sdk-inspection-group-icons-Wpz-YhkE.js +1 -0
  122. package/dist/assets/volter-sdk-inspection-model-BVOyStdc.js +1 -0
  123. package/dist/assets/volter-sdk-inspection-node-media-B8AL8_3F.js +1 -0
  124. package/dist/assets/volter-sdk-inspection-null-subject-d5bQZCbS.js +1 -0
  125. package/dist/assets/volter-sdk-inspector-property-grouping-BqrZkwo4.js +1 -0
  126. package/dist/assets/volter-sdk-inspector-section-registry-C6U15zvC.js +1 -0
  127. package/dist/assets/volter-sdk-js-heap-CcOnY0kf.js +1 -0
  128. package/dist/assets/volter-sdk-keymap-presets-CSM-jVcZ.js +1 -0
  129. package/dist/assets/volter-sdk-layout-arrangements-DHA3uifx.js +1 -0
  130. package/dist/assets/volter-sdk-layouts-4v9ECCn9.js +1 -0
  131. package/dist/assets/volter-sdk-light-explorer-model-CPuZjpiR.js +1 -0
  132. package/dist/assets/volter-sdk-live-seam-evidence-B_RyDaOp.js +1 -0
  133. package/dist/assets/volter-sdk-live-session-registry-C6gHroaH.js +1 -0
  134. package/dist/assets/volter-sdk-manifest-project-CVVUDDuL.js +1 -0
  135. package/dist/assets/volter-sdk-mount-css-scope-DaJoEo3v.js +1 -0
  136. package/dist/assets/volter-sdk-mount-failure-report-Cm92oiGJ.js +1 -0
  137. package/dist/assets/volter-sdk-native-selection-style-Bp4IBnA4.js +1 -0
  138. package/dist/assets/volter-sdk-photograph-notice-C6_gZGpW.js +1 -0
  139. package/dist/assets/volter-sdk-play-camera-flight-SwlYhOxW.js +1 -0
  140. package/dist/assets/volter-sdk-product-command-G8kKVJ-i.js +1 -0
  141. package/dist/assets/volter-sdk-progress-4GGmPvZn.js +1 -0
  142. package/dist/assets/volter-sdk-project-module-changes-DIrDIHeD.js +1 -0
  143. package/dist/assets/volter-sdk-project-module-url-BuAUWpus.js +1 -0
  144. package/dist/assets/volter-sdk-project-output-roots-BON7FOwQ.js +1 -0
  145. package/dist/assets/volter-sdk-project-tab-census-CO06UOh-.js +1 -0
  146. package/dist/assets/volter-sdk-renderer-resource-counts-2kLiD8_S.js +1 -0
  147. package/dist/assets/volter-sdk-scoped-project-css-DA63CYkM.js +1 -0
  148. package/dist/assets/volter-sdk-selection-CSUq7EiY.js +1 -0
  149. package/dist/assets/volter-sdk-served-url-B_MypeId.js +1 -0
  150. package/dist/assets/volter-sdk-settings-settings-provider-CJuWxTB5.js +1 -0
  151. package/dist/assets/volter-sdk-settings-store-CEFKDj0h.js +1 -0
  152. package/dist/assets/volter-sdk-shell-store-Cl4sX9p4.js +1 -0
  153. package/dist/assets/volter-sdk-shell-store-door-DGjybg0J.js +1 -0
  154. package/dist/assets/volter-sdk-source-conflict-CV8Gk053.js +1 -0
  155. package/dist/assets/volter-sdk-stage-context-Cb0SaYhi.js +1 -0
  156. package/dist/assets/volter-sdk-stage-invalidation-VlBciYA0.js +1 -0
  157. package/dist/assets/volter-sdk-stage-store-registry-BpIy_QKq.js +1 -0
  158. package/dist/assets/volter-sdk-startup-failure-C_8H4xuP.js +1 -0
  159. package/dist/assets/volter-sdk-stories-StoryPreviewMount-BUX42gIR.js +1 -0
  160. package/dist/assets/volter-sdk-stories-compose-project-stories-CkSd4Si5.js +1 -0
  161. package/dist/assets/volter-sdk-stories-scope-Dndn7MD8.js +1 -0
  162. package/dist/assets/volter-sdk-stories-story-declared-medium-Byi4XWeJ.js +1 -0
  163. package/dist/assets/volter-sdk-stories-story-dom-runtime-BS1VPvJ6.js +1 -0
  164. package/dist/assets/volter-sdk-stories-story-grouping-CpNh4cUf.js +1 -0
  165. package/dist/assets/volter-sdk-story-document-openers-Ba5jQqay.js +1 -0
  166. package/dist/assets/volter-sdk-surface-state-BhQ45ars.js +1 -0
  167. package/dist/assets/volter-sdk-tab-census-D0r0s37y.js +1 -0
  168. package/dist/assets/volter-sdk-tool-contribution-convention-JCXL6f2w.js +1 -0
  169. package/dist/assets/volter-sdk-transform-mode-request-Cwk_Kyty.js +1 -0
  170. package/dist/assets/volter-sdk-transient-hint-BOfFzAV8.js +1 -0
  171. package/dist/assets/volter-sdk-types-CkT8l5N_.js +1 -0
  172. package/dist/assets/volter-sdk-ui-source-file-region-resolver-Cfza3eEl.js +1 -0
  173. package/dist/assets/volter-sdk-ui-source-inspect-CEjmAN75.js +1 -0
  174. package/dist/assets/volter-sdk-ui-source-source-write-backend-0njgRdI6.js +1 -0
  175. package/dist/assets/volter-sdk-ui-source-tier-source-write-backend-CpsxorYU.js +1 -0
  176. package/dist/assets/volter-sdk-viewport-activation-timings-B3hRTu3A.js +1 -0
  177. package/dist/assets/volter-sdk-viewport-editor-controls-DDBd-VqO.js +1 -0
  178. package/dist/assets/volter-sdk-viewport-presentation-DRhiAH1h.js +1 -0
  179. package/dist/assets/volter-sdk-volter-contributions-nlGXjgJZ.js +1 -0
  180. package/dist/assets/volter-sdk-wait-until-CMvYQmO8.js +1 -0
  181. package/dist/assets/volter-sdk-widgets-design-system-BJOyO8sO.js +1 -0
  182. package/dist/assets/volter-sdk-widgets-editor-appearance-eVtkxsIm.js +1 -0
  183. package/dist/assets/volter-sdk-widgets-editor-material-BoQP_5SK.js +1 -0
  184. package/dist/assets/volter-sdk-widgets-icon-set-registry-CP0D74kc.js +1 -0
  185. package/dist/assets/volter-sdk-widgets-index-De34FpYu.js +1 -0
  186. package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-_GjMjIGb.js +1 -0
  187. package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-B7vN7BEd.js +1 -0
  188. package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-E2J8cpyT.js +1 -0
  189. package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-D6TERGKs.js +1 -0
  190. package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-CXR8n-CA.js +1 -0
  191. package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-CDvfWY4Q.js +1 -0
  192. package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-BgpW8FW8.js +1 -0
  193. package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-DOOBkXjY.js +1 -0
  194. package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-1NXWR_gB.js +1 -0
  195. package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-Cd2-HwFn.js +1 -0
  196. package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-C4HuSjFu.js +1 -0
  197. package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-DUU2CCtc.js +1 -0
  198. package/dist/assets/volter-sdk-widgets-inspector-widgets-index-D5kwrOUQ.js +1 -0
  199. package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-CkFN2SUn.js +1 -0
  200. package/dist/assets/volter-sdk-widgets-interactive-edit-scope-DynpKMMZ.js +1 -0
  201. package/dist/assets/volter-sdk-widgets-palette-colors-DhL1I42R.js +1 -0
  202. package/dist/assets/volter-sdk-widgets-patterns-Dialog-EUtcZi0Y.js +1 -0
  203. package/dist/assets/volter-sdk-widgets-patterns-Fields-Bl_eaBej.js +1 -0
  204. package/dist/assets/volter-sdk-widgets-patterns-List--NE_1N5-.js +1 -0
  205. package/dist/assets/volter-sdk-widgets-patterns-StateSurface-BHXpv7qi.js +1 -0
  206. package/dist/assets/volter-sdk-widgets-patterns-Surfaces-BdKa5HGV.js +1 -0
  207. package/dist/assets/volter-sdk-widgets-patterns-Tabs-sFV7f1UP.js +1 -0
  208. package/dist/assets/volter-sdk-widgets-patterns-Toolbar-CIr5Cs49.js +1 -0
  209. package/dist/assets/volter-sdk-widgets-patterns-Tree-C2YHfddf.js +1 -0
  210. package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-DCclspnW.js +1 -0
  211. package/dist/assets/volter-sdk-widgets-primitives-Button-B0YxR4ea.js +1 -0
  212. package/dist/assets/volter-sdk-widgets-primitives-ColorInput-B1_SLTuc.js +1 -0
  213. package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-CpHzPdt8.js +1 -0
  214. package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Dw4knhya.js +1 -0
  215. package/dist/assets/volter-sdk-widgets-primitives-FormControls-BAbRanmE.js +1 -0
  216. package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-Cj7jKNd4.js +1 -0
  217. package/dist/assets/volter-sdk-widgets-primitives-JsonInput-C0DCI5bE.js +1 -0
  218. package/dist/assets/volter-sdk-widgets-primitives-Layout-gT4Z6mtt.js +1 -0
  219. package/dist/assets/volter-sdk-widgets-primitives-Menu-9EESAp9m.js +1 -0
  220. package/dist/assets/volter-sdk-widgets-primitives-NumberInput-Dk-5zqJ8.js +1 -0
  221. package/dist/assets/volter-sdk-widgets-primitives-Panel-BQWJF-Pb.js +1 -0
  222. package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-DXvmafCK.js +1 -0
  223. package/dist/assets/volter-sdk-widgets-primitives-Text-yBrdWK2w.js +1 -0
  224. package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-CRhefpUL.js +1 -0
  225. package/dist/assets/volter-sdk-widgets-primitives-Tooltip-D5Kcb-ZC.js +1 -0
  226. package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DiG6PEIe.js +1 -0
  227. package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-DhnSxXVK.js +1 -0
  228. package/dist/assets/volter-sdk-widgets-primitives-editor-icons-e65mgyAk.js +1 -0
  229. package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-BVL0mN8g.js +1 -0
  230. package/dist/assets/volter-sdk-widgets-theme-C-_RU9Ov.js +1 -0
  231. package/dist/assets/volter-sdk-widgets-z-index-CrJJXeKL.js +1 -0
  232. package/dist/assets/volter-sdk-worker-call-metrics-BTfmngck.js +1 -0
  233. package/dist/assets/volter-sdk-workspace-core-utilities-DtHGK9PF.js +1 -0
  234. package/dist/assets/volter-sdk-workspace-document-ids-COULA7c6.js +1 -0
  235. package/dist/assets/volter-sdk-workspace-document-registry-6m5csVP7.js +1 -0
  236. package/dist/assets/volter-sdk-workspace-document-restore-M8ifJMou.js +1 -0
  237. package/dist/assets/volter-sdk-workspace-host-commands-8Qzej--P.js +1 -0
  238. package/dist/assets/volter-sdk-workspace-static-panels-Ckk7qUuS.js +1 -0
  239. package/dist/assets/volter-sdk-workspace-status-registry-BdU0dZAt.js +1 -0
  240. package/dist/assets/volter-sdk-workspace-utility-registry-BHxymD2l.js +1 -0
  241. package/dist/assets/volter-sdk-world-canvas-viewport-state-CHO8s9gE.js +1 -0
  242. package/dist/assets/volter-sdk-world-pan-state-C-9xgzAh.js +1 -0
  243. package/dist/assets/volter-sdk-write-pipe-CJHg7J4i.js +1 -0
  244. package/dist/assets/volter-shared-fontawesome-BEv9WEZj.js +1 -0
  245. package/dist/assets/volter-shared-jsx-dev-runtime-domcKDU3.js +1 -0
  246. package/dist/assets/volter-shared-jsx-runtime-Cu7pVW-1.js +1 -0
  247. package/dist/assets/volter-shared-react-BLHga76C.js +1 -0
  248. package/dist/assets/volter-shared-react-dom-client-vi6WsWu2.js +1 -0
  249. package/dist/assets/volter-shared-react-dom-kzJVGsQd.js +1 -0
  250. package/dist/assets/volter-shared-three-BWbOWtM5.js +4220 -0
  251. package/dist/assets/volter-shared-three-core-DEsIwtOu.js +9 -0
  252. package/dist/volter-shared-modules.json +227 -0
  253. package/dist/volter-shared-react.json +6 -6
  254. package/dist/volter-shared-three.json +2 -1
  255. package/dist-node/cli.js +2962 -6245
  256. package/dist-node/create.js +350 -278
  257. package/package.json +51 -31
  258. package/src/index.ts +4 -6
  259. package/src/product-id.d.ts +4 -0
  260. package/src/styles/maya.style.ts +14 -0
  261. package/src/styles/substance.style.ts +15 -0
  262. package/starter/AGENTS.md +216 -156
  263. package/starter/cube.py +3 -9
  264. package/starter/film/boards/title.png +0 -0
  265. package/starter/film/cut.json +12 -0
  266. package/starter/film/film.json +7 -0
  267. package/starter/film/music/.gitkeep +0 -0
  268. package/starter/film/music.json +4 -0
  269. package/starter/film/script.fountain +16 -0
  270. package/starter/film/shots.json +26 -0
  271. package/starter/film/sounds/whoosh.wav +0 -0
  272. package/starter/film/src/graphics/title.css +33 -0
  273. package/starter/film/src/graphics/title.stories.tsx +6 -0
  274. package/starter/film/src/graphics/title.tsx +14 -0
  275. package/starter/film/src/models/opening.blend +0 -0
  276. package/starter/film/src/models/opening.py +87 -0
  277. package/starter/film/story.md +14 -0
  278. package/starter/film/takes/.gitkeep +0 -0
  279. package/starter/film/takes.json +4 -0
  280. package/starter/film-skills/film-cut/SKILL.md +31 -0
  281. package/starter/film-skills/film-shots/SKILL.md +32 -0
  282. package/starter/film-skills/film-story/SKILL.md +19 -0
  283. package/starter/game/levels/MainLevel.tsx +24 -0
  284. package/starter/game/prefabs/ground/Ground.tsx +24 -0
  285. package/starter/game/prefabs/ground/ground.blend +0 -0
  286. package/starter/game/prefabs/ground/ground.glb +0 -0
  287. package/starter/game/prefabs/ground/ground.py +106 -0
  288. package/starter/package.json +3 -2
  289. package/starter/sounds/mix.json +10 -0
  290. package/dist/assets/BVHLoader-V9f-EnYd.js +0 -1
  291. package/dist/assets/ColladaLoader-Cp-E7iiV.js +0 -3
  292. package/dist/assets/EntityModelDocument-DxdGehCz.js +0 -1
  293. package/dist/assets/EnvironmentAssetDocument-DSTdQdSt.js +0 -1
  294. package/dist/assets/FBXLoader-CpZqH4xx.js +0 -1
  295. package/dist/assets/InspectorObjectPreview-De6zT2B7.js +0 -1
  296. package/dist/assets/LiveModuleDocument-Do5YRpzB.js +0 -2
  297. package/dist/assets/LutAssetDocument-BjZgLVjR.js +0 -1
  298. package/dist/assets/MTLLoader-JK_iLZsm.js +0 -2
  299. package/dist/assets/ModelAssetDocument-Bb5UYcrj.js +0 -1
  300. package/dist/assets/NonThreeAuthoringBootstrap-CVri610U.js +0 -1
  301. package/dist/assets/OBJLoader-eGO6iVw8.js +0 -5
  302. package/dist/assets/Object3DDocumentToolbar-C7HT5nHi.js +0 -1
  303. package/dist/assets/Object3DPreview-CaOEIIdC.js +0 -2
  304. package/dist/assets/OrbitControls-DrHRrSFA.js +0 -1
  305. package/dist/assets/PLYLoader-BCSN1tYw.js +0 -2
  306. package/dist/assets/QuarksAssetDocument-DzS5h2Bc.js +0 -2
  307. package/dist/assets/RectAreaLightUniformsLib-HqHjURQQ.js +0 -1
  308. package/dist/assets/STLLoader-vhCvZeOF.js +0 -1
  309. package/dist/assets/ShaderAssetDocument-DYXX7aw5.js +0 -1
  310. package/dist/assets/StageHost-DVnv4TcF.js +0 -1179
  311. package/dist/assets/TDSLoader-DbUHSEO9.js +0 -1
  312. package/dist/assets/ToolObject3DPreview-Dad57oap.js +0 -1
  313. package/dist/assets/ViewportShadingMenu-Bl8IlWGh.js +0 -1
  314. package/dist/assets/animation-mixers.service-qJ4SNabd.js +0 -1
  315. package/dist/assets/animation-timeline.utility-wNtZO_cS.js +0 -1
  316. package/dist/assets/anthropic-DwpKRVGM.svg +0 -1
  317. package/dist/assets/asset-preview-OYr2sUbO.js +0 -4
  318. package/dist/assets/blender-display-shaders-BpnqnkG8.lut +0 -0
  319. package/dist/assets/blender-emscripten-engine-CTeOMKcG.js +0 -2
  320. package/dist/assets/blender-motion-worker-CtT2cV3V.js +0 -1
  321. package/dist/assets/blender-node-editor.document-pEhp9MZH.js +0 -1
  322. package/dist/assets/blender-properties-model-B7O1AR0g.js +0 -1
  323. package/dist/assets/blender-properties-tab-CBdCQseg.js +0 -3
  324. package/dist/assets/blender-runtime-host-swgDAdoy.js +0 -7221
  325. package/dist/assets/blender-runtime.document-BbtLLRrN.js +0 -13
  326. package/dist/assets/blender-screenshot.menu-CD1Bg0Z-.js +0 -1
  327. package/dist/assets/blender-timeline.document-DT_mWXnn.js +0 -1
  328. package/dist/assets/blender-uv-editor.document-9j_SUkf7.js +0 -1
  329. package/dist/assets/blender-version.status-Z13Xgrj-.js +0 -1
  330. package/dist/assets/blender-wali-engine-kfyCxO_U.js +0 -2
  331. package/dist/assets/blender.command-zp1Oe3pY.js +0 -1
  332. package/dist/assets/blender.environment-CG-pC7sk.js +0 -1
  333. package/dist/assets/blender.keymap-BmOBRY7p.js +0 -1
  334. package/dist/assets/blender.status-MRiv-9Ju.js +0 -1
  335. package/dist/assets/blender.style--aBP5V1k.js +0 -1
  336. package/dist/assets/city-EkhAOo5s.exr +0 -0
  337. package/dist/assets/courtyard-DqlebbpC.exr +0 -0
  338. package/dist/assets/forest-P_CQY3b_.exr +0 -0
  339. package/dist/assets/icon-BkiLD9ed.png +0 -0
  340. package/dist/assets/index-C8BwtQGN.js +0 -952
  341. package/dist/assets/interior-Bo_lba15.exr +0 -0
  342. package/dist/assets/linear-resolve-Cuka7Ypb.js +0 -377
  343. package/dist/assets/live-mixers-B-bwLZ7c.js +0 -1
  344. package/dist/assets/model-inspection-DVE8f3Dj.js +0 -1
  345. package/dist/assets/model.layout-BpZE1W9V.js +0 -1
  346. package/dist/assets/models.finder-5z7xbsOu.js +0 -1
  347. package/dist/assets/night-CvV4Gybt.exr +0 -0
  348. package/dist/assets/object3d-document-session-registry-DDpmVmir.js +0 -2
  349. package/dist/assets/openai-DHNKzFtc.svg +0 -1
  350. package/dist/assets/output-pass-j4dAGrPY.js +0 -85
  351. package/dist/assets/play-live-BBkOuWQn.js +0 -1
  352. package/dist/assets/product-CUU4-nDZ.js +0 -14
  353. package/dist/assets/product-DPOIZgKM.css +0 -1
  354. package/dist/assets/properties-bone-constraints.inspector-D8CtPu9c.js +0 -1
  355. package/dist/assets/properties-bone.inspector-j9aNQrP9.js +0 -1
  356. package/dist/assets/properties-collection.inspector-CaMveBur.js +0 -1
  357. package/dist/assets/properties-constraints.inspector-DB9bBgqn.js +0 -1
  358. package/dist/assets/properties-data.inspector-C7dh_XTe.js +0 -1
  359. package/dist/assets/properties-material.inspector-DWC5NJkW.js +0 -1
  360. package/dist/assets/properties-modifiers.inspector-CBUxUSB0.js +0 -1
  361. package/dist/assets/properties-object.inspector-wvO8nuGD.js +0 -1
  362. package/dist/assets/properties-output.inspector-CFyAZn9F.js +0 -1
  363. package/dist/assets/properties-particles.inspector-zEaTW3U7.js +0 -1
  364. package/dist/assets/properties-physics.inspector-CO-4UZbX.js +0 -1
  365. package/dist/assets/properties-render.inspector-DoJ1BMKP.js +0 -1
  366. package/dist/assets/properties-scene.inspector-BOhaiC0_.js +0 -1
  367. package/dist/assets/properties-texture.inspector-1JoYUWiR.js +0 -1
  368. package/dist/assets/properties-view-layer.inspector-DuRkFWtq.js +0 -1
  369. package/dist/assets/properties-world.inspector-Csfv-x0A.js +0 -1
  370. package/dist/assets/react-18-Dh4gvPqw.js +0 -1
  371. package/dist/assets/regions-DWeEBnE2.js +0 -1
  372. package/dist/assets/sculpt.layout-D-K5cLw6.js +0 -1
  373. package/dist/assets/session-CvHLFvpx.js +0 -6056
  374. package/dist/assets/shading.layout-CZZHKBer.js +0 -1
  375. package/dist/assets/sky-precompute-worker-CPGW9t_C.js +0 -1
  376. package/dist/assets/spark.module-CTTm62aa.js +0 -12120
  377. package/dist/assets/stage-keyboard-BvTth28t.js +0 -1
  378. package/dist/assets/stage-overlay-set-Dt6IH1xC.js +0 -1
  379. package/dist/assets/stage-presence-markers-DszBO9B1.js +0 -1
  380. package/dist/assets/stage-transform-tools-D6H_SBLV.js +0 -1
  381. package/dist/assets/standard-viewport-dressing-BSYojdsQ.js +0 -24
  382. package/dist/assets/studio-CysTBGIb.exr +0 -0
  383. package/dist/assets/sunrise-Dj0psFrf.exr +0 -0
  384. package/dist/assets/sunset-Bw3x2Bot.exr +0 -0
  385. package/dist/assets/texture.layout-DASpHVht.js +0 -1
  386. package/dist/assets/three-integration.service-DvOyomjh.js +0 -2
  387. package/dist/assets/three.module-CtVjCPcj.js +0 -3840
  388. package/dist/assets/uv-editing.layout-A8RA-cbM.js +0 -1
  389. package/dist/assets/volter-sdk-account-fYMnFHfe.js +0 -1
  390. package/dist/assets/volter-sdk-client-JmBOIwGe.js +0 -1
  391. package/dist/assets/volter-sdk-contributions-l9HrPjwW.js +0 -1
  392. package/dist/assets/volter-sdk-css-numeric-style-ud28AcW3.js +0 -1
  393. package/dist/assets/volter-sdk-document-probe-C4RhslOI.js +0 -1
  394. package/dist/assets/volter-sdk-editor-view-B_mScT1w.js +0 -1
  395. package/dist/assets/volter-sdk-host-B9QOINsX.js +0 -1
  396. package/dist/assets/volter-sdk-http-transport.browser-6a_cUtge.js +0 -1
  397. package/dist/assets/volter-sdk-index-DDdgpWqc.js +0 -1
  398. package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-CRc93EXv.js +0 -1
  399. package/dist/assets/volter-sdk-kit-account-client-ByjTbat7.js +0 -1
  400. package/dist/assets/volter-sdk-kit-action-registry-J5l20B9X.js +0 -1
  401. package/dist/assets/volter-sdk-kit-active-product-BTHzjkrh.js +0 -1
  402. package/dist/assets/volter-sdk-kit-active-project-CgXmYhKx.js +0 -1
  403. package/dist/assets/volter-sdk-kit-adapter-editor-config-CcSGBUF1.js +0 -1
  404. package/dist/assets/volter-sdk-kit-adapter-module-CqkP49hA.js +0 -1
  405. package/dist/assets/volter-sdk-kit-adapter-observation-MWNd8Bmj.js +0 -1
  406. package/dist/assets/volter-sdk-kit-animation-animation-clock-C5QhnLuY.js +0 -1
  407. package/dist/assets/volter-sdk-kit-animation-stage-transport-DFbbJ80P.js +0 -1
  408. package/dist/assets/volter-sdk-kit-api-assets-Dtg4_1jX.js +0 -1
  409. package/dist/assets/volter-sdk-kit-api-base-De8oXkY8.js +0 -1
  410. package/dist/assets/volter-sdk-kit-api-build-Cgmw35Ng.js +0 -1
  411. package/dist/assets/volter-sdk-kit-api-logs-B1mQlcPQ.js +0 -1
  412. package/dist/assets/volter-sdk-kit-api-project-identity-DEZz1U5_.js +0 -1
  413. package/dist/assets/volter-sdk-kit-api-project-open-DuXZ6vyn.js +0 -1
  414. package/dist/assets/volter-sdk-kit-api-project-source-DMnPoTP2.js +0 -1
  415. package/dist/assets/volter-sdk-kit-api-project-state-6Lu0Vxdr.js +0 -1
  416. package/dist/assets/volter-sdk-kit-api-relay-BuCkenvE.js +0 -1
  417. package/dist/assets/volter-sdk-kit-api-settings-CkFO_pMP.js +0 -1
  418. package/dist/assets/volter-sdk-kit-api-themes-D5J6TiAR.js +0 -1
  419. package/dist/assets/volter-sdk-kit-api-worktrees-de1U7-9B.js +0 -1
  420. package/dist/assets/volter-sdk-kit-asset-capabilities-IBJRDoU_.js +0 -1
  421. package/dist/assets/volter-sdk-kit-asset-compare-core-qeWQI0-1.js +0 -1
  422. package/dist/assets/volter-sdk-kit-asset-editor-context-JZ2T8xhF.js +0 -1
  423. package/dist/assets/volter-sdk-kit-asset-events-wfq-jH9_.js +0 -1
  424. package/dist/assets/volter-sdk-kit-asset-inspector-actions-NlF3CeMC.js +0 -1
  425. package/dist/assets/volter-sdk-kit-asset-selection-BUXGqut1.js +0 -1
  426. package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-DNj4RggW.js +0 -1
  427. package/dist/assets/volter-sdk-kit-asset-thumbnails-CPp1sS_w.js +0 -1
  428. package/dist/assets/volter-sdk-kit-asset-viewers-PKilU3Lm.js +0 -1
  429. package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-DHDfKVAJ.js +0 -1
  430. package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-Ch0TDXil.js +0 -1
  431. package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-Cb0-daSo.js +0 -1
  432. package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-Bznr7T6d.js +0 -1
  433. package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-BriZZqYC.js +0 -1
  434. package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-5K3HN4kg.js +0 -1
  435. package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-F65PsmIZ.js +0 -1
  436. package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-DzxVbaeb.js +0 -1
  437. package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-B2Oxd31D.js +0 -1
  438. package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-BmPO24SY.js +0 -1
  439. package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-BPRq-xQf.js +0 -1
  440. package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-CM64IwuA.js +0 -1
  441. package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-BIKxorKS.js +0 -1
  442. package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-7CNTmzBZ.js +0 -1
  443. package/dist/assets/volter-sdk-kit-asset-workflow-project-content-C3EJl866.js +0 -1
  444. package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-CQrbYiAp.js +0 -1
  445. package/dist/assets/volter-sdk-kit-authoring-active-adapter-BC9Cf4yx.js +0 -1
  446. package/dist/assets/volter-sdk-kit-authoring-active-systems-GZm33tOS.js +0 -1
  447. package/dist/assets/volter-sdk-kit-authoring-adapter-key-C4-d6xt1.js +0 -1
  448. package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-CEEw_XEg.js +0 -1
  449. package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-BJsS0bnj.js +0 -1
  450. package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-1NA63Idp.js +0 -1
  451. package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-BlbGyg38.js +0 -1
  452. package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-D0FSf6DM.js +0 -1
  453. package/dist/assets/volter-sdk-kit-authoring-consumer-actions-J7MnHWK3.js +0 -1
  454. package/dist/assets/volter-sdk-kit-authoring-design-time-layers-CnLS2erF.js +0 -1
  455. package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-BrmHkPuP.js +0 -1
  456. package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-HQAxbCiB.js +0 -1
  457. package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-CdLSRvO0.js +0 -1
  458. package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-EWM45v6y.js +0 -1
  459. package/dist/assets/volter-sdk-kit-authoring-layered-pick-BX3K3GR7.js +0 -1
  460. package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-BGatqFLR.js +0 -1
  461. package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-CerY6qmy.js +0 -1
  462. package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-DxZ-V-ys.js +0 -1
  463. package/dist/assets/volter-sdk-kit-authoring-panel-authoring-Bbv7lJc5.js +0 -1
  464. package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-C5rP-I6e.js +0 -1
  465. package/dist/assets/volter-sdk-kit-authoring-provenance-BNVk0DFH.js +0 -1
  466. package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-BqUskgSb.js +0 -1
  467. package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-DB8S6Vfi.js +0 -1
  468. package/dist/assets/volter-sdk-kit-authoring-react-story-board-M-VqCWKu.js +0 -1
  469. package/dist/assets/volter-sdk-kit-authoring-seam-evidence-Qbbz8M6t.js +0 -1
  470. package/dist/assets/volter-sdk-kit-authoring-selection-scope-CkblMrR8.js +0 -1
  471. package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-B9Y9p91j.js +0 -1
  472. package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-7umaPaVS.js +0 -1
  473. package/dist/assets/volter-sdk-kit-authoring-three-root-M5Gj55-Z.js +0 -1
  474. package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-CH5NA-YI.js +0 -1
  475. package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-CzTEMmzx.js +0 -1
  476. package/dist/assets/volter-sdk-kit-authoring-world-session-state-BjKbimsg.js +0 -1
  477. package/dist/assets/volter-sdk-kit-availability-tick-C7I6Zrut.js +0 -1
  478. package/dist/assets/volter-sdk-kit-bitmap-label-DPmffd8g.js +0 -1
  479. package/dist/assets/volter-sdk-kit-boot-routing-CaKypcBx.js +0 -1
  480. package/dist/assets/volter-sdk-kit-breakpoint-state-5m0qTYvY.js +0 -1
  481. package/dist/assets/volter-sdk-kit-build-identity-HQ0VWGG8.js +0 -1
  482. package/dist/assets/volter-sdk-kit-bytes-codec-BJDqylNg.js +0 -1
  483. package/dist/assets/volter-sdk-kit-cancellation-reason-B0z-IzQ9.js +0 -1
  484. package/dist/assets/volter-sdk-kit-canvas-frames-BtkS3lNe.js +0 -1
  485. package/dist/assets/volter-sdk-kit-capture-camera-pose-CUejcTcV.js +0 -1
  486. package/dist/assets/volter-sdk-kit-capture-size-Uyb3uqXA.js +0 -1
  487. package/dist/assets/volter-sdk-kit-chrome-registry-cc3AZlnV.js +0 -1
  488. package/dist/assets/volter-sdk-kit-chrome-slot-registry-C4g-na11.js +0 -1
  489. package/dist/assets/volter-sdk-kit-collaboration-client-Cd6918QC.js +0 -1
  490. package/dist/assets/volter-sdk-kit-collaboration-presence-qXC7JfS2.js +0 -1
  491. package/dist/assets/volter-sdk-kit-command-dispatch-D07Pn7pe.js +0 -1
  492. package/dist/assets/volter-sdk-kit-command-listener-Bm2sgP0i.js +0 -1
  493. package/dist/assets/volter-sdk-kit-command-registry-CJoVRu6V.js +0 -1
  494. package/dist/assets/volter-sdk-kit-component-board-registry-D7xm8cFr.js +0 -1
  495. package/dist/assets/volter-sdk-kit-component-states-registry-DtippeT3.js +0 -1
  496. package/dist/assets/volter-sdk-kit-components-AlignToolbar-BporX2iz.js +0 -1
  497. package/dist/assets/volter-sdk-kit-components-ApplicationMenus-DfmKRYtb.js +0 -1
  498. package/dist/assets/volter-sdk-kit-components-AssetEditorShell-B-_vx-Jb.js +0 -1
  499. package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-CyEcoLKv.js +0 -1
  500. package/dist/assets/volter-sdk-kit-components-BoardRulers-CjoDr2Ak.js +0 -1
  501. package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-Bz4W0Y2g.js +0 -1
  502. package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-Cyd5bYha.js +0 -1
  503. package/dist/assets/volter-sdk-kit-components-ChromeSlot-q_wsahlZ.js +0 -1
  504. package/dist/assets/volter-sdk-kit-components-CodeView-COOHbFef.js +0 -1
  505. package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-F5yS9e4v.js +0 -1
  506. package/dist/assets/volter-sdk-kit-components-ConsolePanel-Dnnq15qj.js +0 -1
  507. package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-CFCva8sQ.js +0 -1
  508. package/dist/assets/volter-sdk-kit-components-InspectionProjection-Cj0eqFPF.js +0 -1
  509. package/dist/assets/volter-sdk-kit-components-Inspector-DhnEEQ_5.js +0 -1
  510. package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-ljsWq41X.js +0 -1
  511. package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-pUp0DKhG.js +0 -1
  512. package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-BJKmp0B3.js +0 -1
  513. package/dist/assets/volter-sdk-kit-components-InspectorToolSection-DBDxp3Ir.js +0 -1
  514. package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-eGVZo2ph.js +0 -1
  515. package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-jKqvAsdL.js +0 -1
  516. package/dist/assets/volter-sdk-kit-components-MediaProperties-DEn9gV9T.js +0 -1
  517. package/dist/assets/volter-sdk-kit-components-ProjectHeader-CtsMXibh.js +0 -1
  518. package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-Bdu_gdRF.js +0 -1
  519. package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-8PYXBIYy.js +0 -1
  520. package/dist/assets/volter-sdk-kit-components-RootTextEditor-DFkpwNlX.js +0 -1
  521. package/dist/assets/volter-sdk-kit-components-SaveStatus-BP1Q1tfu.js +0 -1
  522. package/dist/assets/volter-sdk-kit-components-SurfaceCrashBoundary-C_FxlEvS.js +0 -1
  523. package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-C_O4-zsY.js +0 -1
  524. package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-DAoNJ2KS.js +0 -1
  525. package/dist/assets/volter-sdk-kit-components-ToolHost-z-CSuvra.js +0 -1
  526. package/dist/assets/volter-sdk-kit-components-Toolbar-CUsODOE2.js +0 -1
  527. package/dist/assets/volter-sdk-kit-components-TransientHint-BsejPKYD.js +0 -1
  528. package/dist/assets/volter-sdk-kit-components-VersionControlSection-ldwCuasW.js +0 -1
  529. package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-DjfcwDPM.js +0 -1
  530. package/dist/assets/volter-sdk-kit-components-VolterLogo-wmAjAypV.js +0 -1
  531. package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-JN-eaFqo.js +0 -1
  532. package/dist/assets/volter-sdk-kit-components-account-documents-BcgknOsj.js +0 -1
  533. package/dist/assets/volter-sdk-kit-components-asset-documents-B2W4TjZO.js +0 -1
  534. package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-NTgC5Ngq.js +0 -1
  535. package/dist/assets/volter-sdk-kit-components-asset-selection-section-CLS4gJUE.js +0 -1
  536. package/dist/assets/volter-sdk-kit-components-asset-thumbnails-CaYPgAtN.js +0 -1
  537. package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-DbLUYMKF.js +0 -1
  538. package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-B3ieuK68.js +0 -1
  539. package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-DicJ06Cl.js +0 -1
  540. package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-DRBY_95W.js +0 -1
  541. package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-BR14tR5R.js +0 -1
  542. package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-BI9bFeTE.js +0 -1
  543. package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-d7Wqtjxk.js +0 -1
  544. package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-Ykl90edA.js +0 -1
  545. package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-BmwRhUts.js +0 -1
  546. package/dist/assets/volter-sdk-kit-components-board-guides-Dw7AT-AY.js +0 -1
  547. package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-s3AK_b58.js +0 -1
  548. package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-DKdXJcd9.js +0 -1
  549. package/dist/assets/volter-sdk-kit-components-core-utilities-C5ZKnxiW.js +0 -1
  550. package/dist/assets/volter-sdk-kit-components-inspector-preview-section-BHsR6Ljx.js +0 -1
  551. package/dist/assets/volter-sdk-kit-components-inspector-revert-label-BcItYP-3.js +0 -1
  552. package/dist/assets/volter-sdk-kit-components-inspector-selection-DnVCu9NI.js +0 -1
  553. package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-BbWmsm9H.js +0 -1
  554. package/dist/assets/volter-sdk-kit-components-inspector-transform-BCj8sqj5.js +0 -1
  555. package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-DmyQlGz0.js +0 -1
  556. package/dist/assets/volter-sdk-kit-components-kind-documents-BECHMIFC.js +0 -1
  557. package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-BB28QlBb.js +0 -1
  558. package/dist/assets/volter-sdk-kit-components-project-tool-documents-CrMMOzM5.js +0 -1
  559. package/dist/assets/volter-sdk-kit-components-scene-documents-B3yfDsBz.js +0 -1
  560. package/dist/assets/volter-sdk-kit-components-status-contributions-CDzNj8Hu.js +0 -1
  561. package/dist/assets/volter-sdk-kit-components-tool-documents-BpEG-ABF.js +0 -1
  562. package/dist/assets/volter-sdk-kit-components-tool-schema-form-BOiPCwKc.js +0 -1
  563. package/dist/assets/volter-sdk-kit-components-use-after-paint-AcvAjLMf.js +0 -1
  564. package/dist/assets/volter-sdk-kit-components-use-project-image-assets-CRFbWY4e.js +0 -1
  565. package/dist/assets/volter-sdk-kit-components-workspace-history-DTgNtIrO.js +0 -1
  566. package/dist/assets/volter-sdk-kit-components-world-documents-N9ea5nLy.js +0 -1
  567. package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-CvVXrTkV.js +0 -1
  568. package/dist/assets/volter-sdk-kit-composite-screenshot-BsiNQIxC.js +0 -1
  569. package/dist/assets/volter-sdk-kit-content-entry-source-registry-BX8YW40L.js +0 -1
  570. package/dist/assets/volter-sdk-kit-contribution-surfaces-CMblNYDG.js +0 -1
  571. package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-BtPYs0AY.js +0 -1
  572. package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-BCRK-uUC.js +0 -1
  573. package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-3YuOn0LN.js +0 -1
  574. package/dist/assets/volter-sdk-kit-coverage-session-vitals-BpsIwBM0.js +0 -1
  575. package/dist/assets/volter-sdk-kit-creation-site-registry-C1_mEFTL.js +0 -1
  576. package/dist/assets/volter-sdk-kit-delegate-harness-registry-V07K9odj.js +0 -1
  577. package/dist/assets/volter-sdk-kit-document-areas-TQELDKqa.js +0 -1
  578. package/dist/assets/volter-sdk-kit-document-context-registry-BaPLLOGQ.js +0 -1
  579. package/dist/assets/volter-sdk-kit-document-open-registry-D-zxkb7y.js +0 -1
  580. package/dist/assets/volter-sdk-kit-document-play-extension-F8i5xdiU.js +0 -1
  581. package/dist/assets/volter-sdk-kit-document-preview-source-DgDf2lpD.js +0 -1
  582. package/dist/assets/volter-sdk-kit-document-renderer-session-YWnbpDFE.js +0 -1
  583. package/dist/assets/volter-sdk-kit-document-stage-sessions-BKZBGbit.js +0 -1
  584. package/dist/assets/volter-sdk-kit-document-viewports-DNuE6MQl.js +0 -1
  585. package/dist/assets/volter-sdk-kit-editor-api-DZDj3o86.js +0 -1
  586. package/dist/assets/volter-sdk-kit-editor-chrome-capture-De6DmSgV.js +0 -1
  587. package/dist/assets/volter-sdk-kit-editor-commands-CImZE1nE.js +0 -1
  588. package/dist/assets/volter-sdk-kit-editor-console-nzCbsR0U.js +0 -1
  589. package/dist/assets/volter-sdk-kit-editor-current-view-POB-DPkt.js +0 -1
  590. package/dist/assets/volter-sdk-kit-editor-document-probe-B5tRXCfR.js +0 -1
  591. package/dist/assets/volter-sdk-kit-editor-git-client-SsYoNC6J.js +0 -1
  592. package/dist/assets/volter-sdk-kit-editor-hotkeys-B4ocILot.js +0 -1
  593. package/dist/assets/volter-sdk-kit-editor-lease-CBvYmCsH.js +0 -1
  594. package/dist/assets/volter-sdk-kit-editor-lease-view-DVuaJEec.js +0 -1
  595. package/dist/assets/volter-sdk-kit-editor-mode-B2vWMS-_.js +0 -1
  596. package/dist/assets/volter-sdk-kit-editor-notifications-DgsalU9q.js +0 -1
  597. package/dist/assets/volter-sdk-kit-editor-presence-BQiXcYKf.js +0 -1
  598. package/dist/assets/volter-sdk-kit-editor-presentation-activity-DO7YpI0H.js +0 -1
  599. package/dist/assets/volter-sdk-kit-editor-presentation-notice-BZtrnX57.js +0 -1
  600. package/dist/assets/volter-sdk-kit-editor-runtime-C8mqfYkM.js +0 -1
  601. package/dist/assets/volter-sdk-kit-editor-server-response-qipqMDto.js +0 -1
  602. package/dist/assets/volter-sdk-kit-editor-session-attribution-_PNhRyeQ.js +0 -1
  603. package/dist/assets/volter-sdk-kit-editor-session-mode-BcDn3FZY.js +0 -1
  604. package/dist/assets/volter-sdk-kit-editor-state-facets-3r455vYW.js +0 -1
  605. package/dist/assets/volter-sdk-kit-editor-view-presentation-Dovw_-H_.js +0 -1
  606. package/dist/assets/volter-sdk-kit-environment-images-DNJU9lPC.js +0 -1
  607. package/dist/assets/volter-sdk-kit-eyedropper-session-DJMkT_IO.js +0 -1
  608. package/dist/assets/volter-sdk-kit-files-file-provider-BnmRHNTp.js +0 -1
  609. package/dist/assets/volter-sdk-kit-files-project-files-CiKUZlIY.js +0 -1
  610. package/dist/assets/volter-sdk-kit-finders-index-qZKU8xjn.js +0 -1
  611. package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-DBTnLBhQ.js +0 -1
  612. package/dist/assets/volter-sdk-kit-frame-frame-parts-DY-_uCea.js +0 -1
  613. package/dist/assets/volter-sdk-kit-framed-document-capture-CsprF9Ct.js +0 -1
  614. package/dist/assets/volter-sdk-kit-game-surface-defaults-Dz1sExNZ.js +0 -1
  615. package/dist/assets/volter-sdk-kit-gameplay-export-state-BwkWHkY-.js +0 -1
  616. package/dist/assets/volter-sdk-kit-gameplay-replay-CgF6vM6H.js +0 -1
  617. package/dist/assets/volter-sdk-kit-gameplay-session-time-BrdLX9MN.js +0 -1
  618. package/dist/assets/volter-sdk-kit-gameplay-sessions-0YRBcIBD.js +0 -1
  619. package/dist/assets/volter-sdk-kit-hierarchy-component-marks-pwxcueeL.js +0 -1
  620. package/dist/assets/volter-sdk-kit-hierarchy-internals-qxAC9Yyz.js +0 -1
  621. package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-Bguy3R2P.js +0 -1
  622. package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-CQ_dm6ZG.js +0 -1
  623. package/dist/assets/volter-sdk-kit-hierarchy-node-rows-BJliwGW1.js +0 -1
  624. package/dist/assets/volter-sdk-kit-hierarchy-panel-view-C6zK-ewB.js +0 -1
  625. package/dist/assets/volter-sdk-kit-hierarchy-projection-q1LvhfSm.js +0 -1
  626. package/dist/assets/volter-sdk-kit-hierarchy-row-media-jZ989Tvr.js +0 -1
  627. package/dist/assets/volter-sdk-kit-hierarchy-row-model-BmrBiFlP.js +0 -1
  628. package/dist/assets/volter-sdk-kit-hierarchy-rows-BMI3XBi-.js +0 -1
  629. package/dist/assets/volter-sdk-kit-hierarchy-walk-oEWRF-Iz.js +0 -1
  630. package/dist/assets/volter-sdk-kit-history-editor-session-CdficO7Z.js +0 -1
  631. package/dist/assets/volter-sdk-kit-history-history-commands-D7VwYk3h.js +0 -1
  632. package/dist/assets/volter-sdk-kit-history-history-delegate-DgIAPV-4.js +0 -1
  633. package/dist/assets/volter-sdk-kit-history-history-limit-notices-Bu07tHVz.js +0 -1
  634. package/dist/assets/volter-sdk-kit-history-history-service-BzbUb6oV.js +0 -1
  635. package/dist/assets/volter-sdk-kit-history-persistence-coordinator-DuWeeacm.js +0 -1
  636. package/dist/assets/volter-sdk-kit-history-project-file-history-C7m0teYF.js +0 -1
  637. package/dist/assets/volter-sdk-kit-history-project-root-history-backends-mip7BKbu.js +0 -1
  638. package/dist/assets/volter-sdk-kit-history-resource-registry-CZoZX7pJ.js +0 -1
  639. package/dist/assets/volter-sdk-kit-history-snapshot-store-DFlmQKjf.js +0 -1
  640. package/dist/assets/volter-sdk-kit-history-source-history-backend-C1tXQx-3.js +0 -1
  641. package/dist/assets/volter-sdk-kit-hmr-registration-group-CdWSrJkL.js +0 -1
  642. package/dist/assets/volter-sdk-kit-hmr-stable-react-context-B_NNyLJr.js +0 -1
  643. package/dist/assets/volter-sdk-kit-hotkeys-9UuVecd2.js +0 -1
  644. package/dist/assets/volter-sdk-kit-inference-diagnostics-Bp6UhMrh.js +0 -1
  645. package/dist/assets/volter-sdk-kit-initial-project-mIrJ1z4F.js +0 -1
  646. package/dist/assets/volter-sdk-kit-inspection-active-subject-Ci13od8C.js +0 -1
  647. package/dist/assets/volter-sdk-kit-inspection-active-surface-BbND9Nn7.js +0 -1
  648. package/dist/assets/volter-sdk-kit-inspection-compose-subject-Cruyx55P.js +0 -1
  649. package/dist/assets/volter-sdk-kit-inspection-display-Ckb72SDN.js +0 -1
  650. package/dist/assets/volter-sdk-kit-inspection-document-subject-Dd7sTsiM.js +0 -1
  651. package/dist/assets/volter-sdk-kit-inspection-game-subject-Zye7SfKC.js +0 -1
  652. package/dist/assets/volter-sdk-kit-inspection-model-B6kt5U5M.js +0 -1
  653. package/dist/assets/volter-sdk-kit-inspection-node-media-3WYK4mrg.js +0 -1
  654. package/dist/assets/volter-sdk-kit-inspection-null-subject-j5MU6Bqp.js +0 -1
  655. package/dist/assets/volter-sdk-kit-inspection-serialize-C5ElmYGd.js +0 -1
  656. package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-Dqr8YOfV.js +0 -1
  657. package/dist/assets/volter-sdk-kit-inspector-presentation-Bxm_mJug.js +0 -1
  658. package/dist/assets/volter-sdk-kit-inspector-property-grouping-DGsJwl0r.js +0 -1
  659. package/dist/assets/volter-sdk-kit-inspector-section-registry-BTw0xKeK.js +0 -1
  660. package/dist/assets/volter-sdk-kit-instance-source-actions-B_SYfHzK.js +0 -1
  661. package/dist/assets/volter-sdk-kit-js-heap-CMHIxDFc.js +0 -1
  662. package/dist/assets/volter-sdk-kit-key-actions-npGWeBwX.js +0 -1
  663. package/dist/assets/volter-sdk-kit-keymap-presets-Dgo5jMVc.js +0 -1
  664. package/dist/assets/volter-sdk-kit-layout-policy-D6cqDneT.js +0 -1
  665. package/dist/assets/volter-sdk-kit-light-explorer-model-D9220Fr3.js +0 -1
  666. package/dist/assets/volter-sdk-kit-live-canvas-frame-CQvRrTp5.js +0 -1
  667. package/dist/assets/volter-sdk-kit-live-document-StECWB5n.js +0 -1
  668. package/dist/assets/volter-sdk-kit-live-gesture-lock-DpKIl8Kh.js +0 -1
  669. package/dist/assets/volter-sdk-kit-live-seam-evidence-WkwVMDpm.js +0 -1
  670. package/dist/assets/volter-sdk-kit-live-session-registry-DmaGkq5x.js +0 -1
  671. package/dist/assets/volter-sdk-kit-live-transition-B5jM4iFM.js +0 -1
  672. package/dist/assets/volter-sdk-kit-manifest-project-amCdVxUh.js +0 -1
  673. package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-CpTsYq8x.js +0 -1
  674. package/dist/assets/volter-sdk-kit-mount-failure-report-DcYXxWwN.js +0 -1
  675. package/dist/assets/volter-sdk-kit-native-selection-style-bMu0TkER.js +0 -1
  676. package/dist/assets/volter-sdk-kit-object3d-document-write-policy-DCtXUN3w.js +0 -1
  677. package/dist/assets/volter-sdk-kit-packaged-runtime-8FNZVNB9.js +0 -1
  678. package/dist/assets/volter-sdk-kit-performance-profiler-DKuyDNq0.js +0 -1
  679. package/dist/assets/volter-sdk-kit-performance-sources-CUq2AYlp.js +0 -1
  680. package/dist/assets/volter-sdk-kit-photograph-notice-CJC3RuIs.js +0 -1
  681. package/dist/assets/volter-sdk-kit-play-boot-phase-CvmjrYem.js +0 -1
  682. package/dist/assets/volter-sdk-kit-play-camera-flight-Dp3bYFl4.js +0 -1
  683. package/dist/assets/volter-sdk-kit-presentation-surface-DDAJLzOO.js +0 -1
  684. package/dist/assets/volter-sdk-kit-product-command-CevBP_kA.js +0 -1
  685. package/dist/assets/volter-sdk-kit-project-adapter-DZMJa9qO.js +0 -1
  686. package/dist/assets/volter-sdk-kit-project-asset-refresh-BlzSWFsZ.js +0 -1
  687. package/dist/assets/volter-sdk-kit-project-asset-roots-ByJUql0c.js +0 -1
  688. package/dist/assets/volter-sdk-kit-project-local-state-CzuDIgqm.js +0 -1
  689. package/dist/assets/volter-sdk-kit-project-manager-KiOTeJwI.js +0 -1
  690. package/dist/assets/volter-sdk-kit-project-module-changes-BDLfMwF6.js +0 -1
  691. package/dist/assets/volter-sdk-kit-project-module-split-DVZB3699.js +0 -1
  692. package/dist/assets/volter-sdk-kit-project-provenance-GZJY3tis.js +0 -1
  693. package/dist/assets/volter-sdk-kit-project-ready-EtjRqua9.js +0 -1
  694. package/dist/assets/volter-sdk-kit-project-shape-Jb91qwQJ.js +0 -1
  695. package/dist/assets/volter-sdk-kit-project-tools-n1IzvKJM.js +0 -1
  696. package/dist/assets/volter-sdk-kit-readiness-j18YadCv.js +0 -1
  697. package/dist/assets/volter-sdk-kit-renderer-resource-counts-BjvWDcz5.js +0 -1
  698. package/dist/assets/volter-sdk-kit-reported-play-state-BdYUBkLM.js +0 -1
  699. package/dist/assets/volter-sdk-kit-resolve-contributed-command-7ZIwPRlj.js +0 -1
  700. package/dist/assets/volter-sdk-kit-resolve-relative-specifier-BEqx2z44.js +0 -1
  701. package/dist/assets/volter-sdk-kit-retained-document-states-BWSvbm_C.js +0 -1
  702. package/dist/assets/volter-sdk-kit-scene-document-plan-B8Q6NbgU.js +0 -1
  703. package/dist/assets/volter-sdk-kit-scene-live-open-PVToaH1e.js +0 -1
  704. package/dist/assets/volter-sdk-kit-scoped-game-css-DOF-inf1.js +0 -1
  705. package/dist/assets/volter-sdk-kit-served-url-C3OFjtsJ.js +0 -1
  706. package/dist/assets/volter-sdk-kit-session-close-CfqKNfrE.js +0 -1
  707. package/dist/assets/volter-sdk-kit-session-tombstone-wgZaXyq-.js +0 -1
  708. package/dist/assets/volter-sdk-kit-settings-settings-provider-CkU3sFW7.js +0 -1
  709. package/dist/assets/volter-sdk-kit-settings-store-vv_SoMfR.js +0 -1
  710. package/dist/assets/volter-sdk-kit-shell-store-DTExcaKL.js +0 -1
  711. package/dist/assets/volter-sdk-kit-shell-store-door-Y-FBGkmI.js +0 -1
  712. package/dist/assets/volter-sdk-kit-source-conflict-CnIJpwkZ.js +0 -1
  713. package/dist/assets/volter-sdk-kit-stage-context-q9FWjN1-.js +0 -1
  714. package/dist/assets/volter-sdk-kit-stage-invalidation-43bhizXB.js +0 -1
  715. package/dist/assets/volter-sdk-kit-stage-store-registry-BQo-SIuU.js +0 -1
  716. package/dist/assets/volter-sdk-kit-startup-failure-B7USi1FF.js +0 -1
  717. package/dist/assets/volter-sdk-kit-state-report-deferral-Cur6y3FE.js +0 -1
  718. package/dist/assets/volter-sdk-kit-storage-host-files-storage-C9d8xXNc.js +0 -1
  719. package/dist/assets/volter-sdk-kit-storage-http-storage-MuV46OcN.js +0 -1
  720. package/dist/assets/volter-sdk-kit-storage-index-CcMXaj5N.js +0 -1
  721. package/dist/assets/volter-sdk-kit-storage-mem-storage-CaZsvmox.js +0 -1
  722. package/dist/assets/volter-sdk-kit-storage-path-lock-ClaJ7vSM.js +0 -1
  723. package/dist/assets/volter-sdk-kit-storage-paths-Ci2ZChlj.js +0 -1
  724. package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-OjN0fncW.js +0 -1
  725. package/dist/assets/volter-sdk-kit-stories-compose-project-stories-BlKWWJmk.js +0 -1
  726. package/dist/assets/volter-sdk-kit-stories-prefabs-finder-CcmeyBzg.js +0 -1
  727. package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-CA_oKZKb.js +0 -1
  728. package/dist/assets/volter-sdk-kit-stories-project-story-regions-CFAyIdjW.js +0 -1
  729. package/dist/assets/volter-sdk-kit-stories-scope-XvZpLAc5.js +0 -1
  730. package/dist/assets/volter-sdk-kit-stories-story-capture-K4eH6MMa.js +0 -1
  731. package/dist/assets/volter-sdk-kit-stories-story-declared-medium-e8MXBoO_.js +0 -1
  732. package/dist/assets/volter-sdk-kit-stories-story-discovery-DViKEE-J.js +0 -1
  733. package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-DdlXu5tN.js +0 -1
  734. package/dist/assets/volter-sdk-kit-stories-story-grouping-BbgkS2Kl.js +0 -1
  735. package/dist/assets/volter-sdk-kit-stories-story-presentation-Bw39PGHN.js +0 -1
  736. package/dist/assets/volter-sdk-kit-stories-story-registry-DpouLkjB.js +0 -1
  737. package/dist/assets/volter-sdk-kit-story-document-openers-DckbFGIr.js +0 -1
  738. package/dist/assets/volter-sdk-kit-story-thumbnails-ruZKvQPb.js +0 -1
  739. package/dist/assets/volter-sdk-kit-surface-keyboard-ChQta2gu.js +0 -1
  740. package/dist/assets/volter-sdk-kit-surface-state-CUbH0mE7.js +0 -1
  741. package/dist/assets/volter-sdk-kit-system-seam-evidence-hHuyimda.js +0 -1
  742. package/dist/assets/volter-sdk-kit-tab-census-BKO-Cotm.js +0 -1
  743. package/dist/assets/volter-sdk-kit-tab-lifecycle-client--HEzpfrP.js +0 -1
  744. package/dist/assets/volter-sdk-kit-theme-library-cooHZE2t.js +0 -1
  745. package/dist/assets/volter-sdk-kit-theme-preference-BfzIz8X4.js +0 -1
  746. package/dist/assets/volter-sdk-kit-three-viewport-presentation-DJQ6GD49.js +0 -1
  747. package/dist/assets/volter-sdk-kit-tool-contribution-play-B1vfLya9.js +0 -1
  748. package/dist/assets/volter-sdk-kit-tool-loader-C_B2N1As.js +0 -1
  749. package/dist/assets/volter-sdk-kit-transform-mode-request-tOzI-V8h.js +0 -1
  750. package/dist/assets/volter-sdk-kit-transient-hint-qly8UT5T.js +0 -1
  751. package/dist/assets/volter-sdk-kit-transport-strip-CrqMX70b.js +0 -1
  752. package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-CjFRrSBS.js +0 -1
  753. package/dist/assets/volter-sdk-kit-ui-source-inspect-CPbxbbEw.js +0 -1
  754. package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-Ci45ai4Y.js +0 -1
  755. package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-B_pwEKI_.js +0 -1
  756. package/dist/assets/volter-sdk-kit-user-local-state-CZtLuAED.js +0 -1
  757. package/dist/assets/volter-sdk-kit-viewport-activation-timings-DtO34FL_.js +0 -1
  758. package/dist/assets/volter-sdk-kit-viewport-editor-controls-C4eYemqw.js +0 -1
  759. package/dist/assets/volter-sdk-kit-viewport-presentation-D1_lvqyl.js +0 -1
  760. package/dist/assets/volter-sdk-kit-viewport-surface-status-BsGJAuRu.js +0 -1
  761. package/dist/assets/volter-sdk-kit-wait-until-DlHFfLUu.js +0 -1
  762. package/dist/assets/volter-sdk-kit-worker-call-metrics-FsK4U-gz.js +0 -1
  763. package/dist/assets/volter-sdk-kit-workspace-areas-CvTSMn-H.js +0 -1
  764. package/dist/assets/volter-sdk-kit-workspace-aux-commands-CrxEUAQx.js +0 -1
  765. package/dist/assets/volter-sdk-kit-workspace-available-documents-Cl8CigSt.js +0 -1
  766. package/dist/assets/volter-sdk-kit-workspace-core-utilities-rQQcVO5n.js +0 -1
  767. package/dist/assets/volter-sdk-kit-workspace-document-ids-CisQDpex.js +0 -1
  768. package/dist/assets/volter-sdk-kit-workspace-document-registry-D4w40sGe.js +0 -1
  769. package/dist/assets/volter-sdk-kit-workspace-document-restore-B0s9617k.js +0 -1
  770. package/dist/assets/volter-sdk-kit-workspace-host-commands-DLqH47QQ.js +0 -1
  771. package/dist/assets/volter-sdk-kit-workspace-persistence-gate-eeXMeNbc.js +0 -1
  772. package/dist/assets/volter-sdk-kit-workspace-play-utilities-sGc6TcaG.js +0 -1
  773. package/dist/assets/volter-sdk-kit-workspace-presets-D-OZK4QQ.js +0 -1
  774. package/dist/assets/volter-sdk-kit-workspace-regions-CLU4KicA.js +0 -1
  775. package/dist/assets/volter-sdk-kit-workspace-static-panels-BtUQumTF.js +0 -1
  776. package/dist/assets/volter-sdk-kit-workspace-status-registry-BlOrc7aA.js +0 -1
  777. package/dist/assets/volter-sdk-kit-workspace-storage-B1cvxes9.js +0 -1
  778. package/dist/assets/volter-sdk-kit-workspace-style-Czyy_uk2.js +0 -1
  779. package/dist/assets/volter-sdk-kit-workspace-utility-commands-D7ToZCgr.js +0 -1
  780. package/dist/assets/volter-sdk-kit-workspace-utility-registry-Czk_iMpg.js +0 -1
  781. package/dist/assets/volter-sdk-kit-world-adoption-CvxzEI8V.js +0 -1
  782. package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-CjG34H8g.js +0 -1
  783. package/dist/assets/volter-sdk-kit-world-document-routing-B3yT1rzx.js +0 -1
  784. package/dist/assets/volter-sdk-kit-world-pan-state-Co5VSMOo.js +0 -1
  785. package/dist/assets/volter-sdk-kit-write-pipe-GbyDlxkJ.js +0 -1
  786. package/dist/assets/volter-sdk-layout-arrangements-DmBix6Gx.js +0 -1
  787. package/dist/assets/volter-sdk-layouts-CQccgb8u.js +0 -1
  788. package/dist/assets/volter-sdk-mgLi8_Cw.js +0 -2364
  789. package/dist/assets/volter-sdk-selection-wggwzLen.js +0 -1
  790. package/dist/assets/volter-sdk-session-command-table-HilHgL7-.js +0 -1
  791. package/dist/assets/volter-sdk-session-editor-brand-CnZ3VbR-.js +0 -1
  792. package/dist/assets/volter-sdk-session-editor-compatibility-BOYTGttq.js +0 -1
  793. package/dist/assets/volter-sdk-session-editor-control-protocol-DG79HI_x.js +0 -1
  794. package/dist/assets/volter-sdk-session-entrypoint-selection-readers-D9FXlkS2.js +0 -1
  795. package/dist/assets/volter-sdk-session-game-css-scope-CZmonWfe.js +0 -1
  796. package/dist/assets/volter-sdk-session-limited-view-KNOq_tYc.js +0 -1
  797. package/dist/assets/volter-sdk-session-project-module-url-D7htWtkD.js +0 -1
  798. package/dist/assets/volter-sdk-session-relative-path-guard-DYa5PL0U.js +0 -1
  799. package/dist/assets/volter-sdk-session-tool-contribution-convention-GC2AWVch.js +0 -1
  800. package/dist/assets/volter-sdk-types-Couxbiwa.js +0 -1
  801. package/dist/assets/volter-sdk-views-D8qvTyCn.js +0 -1
  802. package/dist/assets/volter-sdk-widgets-design-system-DOW3sA7o.js +0 -1
  803. package/dist/assets/volter-sdk-widgets-editor-appearance-iH79zcxr.js +0 -1
  804. package/dist/assets/volter-sdk-widgets-editor-material-D-LB0zxr.js +0 -1
  805. package/dist/assets/volter-sdk-widgets-icon-set-registry-ylLmSwSr.js +0 -1
  806. package/dist/assets/volter-sdk-widgets-index-DMo0Rqvn.js +0 -1
  807. package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-DhdNVPDu.js +0 -1
  808. package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-BEDX8viW.js +0 -1
  809. package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-9Vk3QrCy.js +0 -1
  810. package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-rhGdxW0L.js +0 -1
  811. package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-BXu0Q3-y.js +0 -1
  812. package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-C49uoql_.js +0 -1
  813. package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-BoRWZylN.js +0 -1
  814. package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-GxINOtYX.js +0 -1
  815. package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-rvCzzMDI.js +0 -1
  816. package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-DG-MGXQX.js +0 -1
  817. package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-Cy4AI76M.js +0 -1
  818. package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-ncKgVdwJ.js +0 -1
  819. package/dist/assets/volter-sdk-widgets-inspector-widgets-index-BtW7A1an.js +0 -1
  820. package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-lOZ7oJLL.js +0 -1
  821. package/dist/assets/volter-sdk-widgets-interactive-edit-scope-BbS6qOlJ.js +0 -1
  822. package/dist/assets/volter-sdk-widgets-patterns-Dialog-BqcAE1N1.js +0 -1
  823. package/dist/assets/volter-sdk-widgets-patterns-Fields-CD2kSMcv.js +0 -1
  824. package/dist/assets/volter-sdk-widgets-patterns-List-CZyrvaL-.js +0 -1
  825. package/dist/assets/volter-sdk-widgets-patterns-StateSurface-D8L-se9D.js +0 -1
  826. package/dist/assets/volter-sdk-widgets-patterns-Surfaces-sW43gM3D.js +0 -1
  827. package/dist/assets/volter-sdk-widgets-patterns-Tabs-CTEQRAHE.js +0 -1
  828. package/dist/assets/volter-sdk-widgets-patterns-Toolbar-CF8cj2Xd.js +0 -1
  829. package/dist/assets/volter-sdk-widgets-patterns-Tree-KffO8vo1.js +0 -1
  830. package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-D2my2vjj.js +0 -1
  831. package/dist/assets/volter-sdk-widgets-primitives-Button-CiaR71jI.js +0 -1
  832. package/dist/assets/volter-sdk-widgets-primitives-ColorInput-DAxGHgoQ.js +0 -1
  833. package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-CCZYI-j9.js +0 -1
  834. package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Fn9aFuF_.js +0 -1
  835. package/dist/assets/volter-sdk-widgets-primitives-FormControls-BMxlOety.js +0 -1
  836. package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-BzwvyU3c.js +0 -1
  837. package/dist/assets/volter-sdk-widgets-primitives-JsonInput-CTc6p9EQ.js +0 -1
  838. package/dist/assets/volter-sdk-widgets-primitives-Layout-CE-beP_c.js +0 -1
  839. package/dist/assets/volter-sdk-widgets-primitives-Menu-DfNc6W9I.js +0 -1
  840. package/dist/assets/volter-sdk-widgets-primitives-NumberInput-Cyjw5Lzx.js +0 -1
  841. package/dist/assets/volter-sdk-widgets-primitives-Panel-LGno17LT.js +0 -1
  842. package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-Cljf9N48.js +0 -1
  843. package/dist/assets/volter-sdk-widgets-primitives-Text-B4gPva4d.js +0 -1
  844. package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-CXqwIkjb.js +0 -1
  845. package/dist/assets/volter-sdk-widgets-primitives-Tooltip-DjwM-P34.js +0 -1
  846. package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DWMZJklN.js +0 -1
  847. package/dist/assets/volter-sdk-widgets-primitives-banner-tones-bbpLeXlG.js +0 -1
  848. package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-DB06CYVu.js +0 -1
  849. package/dist/assets/volter-sdk-widgets-primitives-editor-icons-FxdDZA6W.js +0 -1
  850. package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-CEiBBzGS.js +0 -1
  851. package/dist/assets/volter-sdk-widgets-theme-BysNs-Ha.js +0 -1
  852. package/dist/assets/volter-sdk-widgets-z-index-CQdgvLGF.js +0 -1
  853. package/dist/assets/volter-shared-fontawesome-BiNKLNA8.js +0 -1
  854. package/dist/assets/volter-shared-jsx-dev-runtime-BgDFKHr4.js +0 -1
  855. package/dist/assets/volter-shared-jsx-runtime-B6IXdFn7.js +0 -1
  856. package/dist/assets/volter-shared-react-dom-DOBDwT0W.js +0 -1
  857. package/dist/assets/volter-shared-react-dom-client-DxxNJanr.js +0 -1
  858. package/dist/assets/volter-shared-react-wgC9wOqr.js +0 -1
  859. package/dist/assets/volter-shared-three-CUSZKPWM.js +0 -1
  860. package/dist/assets/worker-DvJ796ja.js +0 -8
  861. package/dist/volter-shared-sdk.json +0 -465
  862. package/src/contributions.d.ts +0 -4
  863. package/starter/add-play/game-state.ts +0 -25
  864. package/starter/add-play/game.tsx +0 -16
  865. package/starter/add-play/model.play.ts +0 -77
  866. package/starter/playable/src/models/canyon.blend +0 -0
  867. package/starter/playable/src/models/canyon.play.ts +0 -107
  868. package/starter/playable/src/models/canyon.py +0 -55
  869. package/starter/playable/src/models/circuit.py +0 -131
  870. package/starter/playable/src/models/complete_environment.py +0 -35
  871. package/starter/playable/src/models/course.ts +0 -12
  872. package/starter/playable/src/models/detail.py +0 -44
  873. package/starter/playable/src/models/driver_details.py +0 -25
  874. package/starter/playable/src/models/environment.py +0 -87
  875. package/starter/playable/src/models/finish_scene.py +0 -13
  876. package/starter/playable/src/models/kart_finish.py +0 -31
  877. package/starter/playable/src/models/polish.py +0 -75
  878. package/starter/playable/src/models/race-state.ts +0 -15
  879. package/starter/playable/src/models/refine.py +0 -69
  880. package/starter/playable/src/models/scene_helpers.py +0 -54
  881. package/starter/playable/src/models/scenery_ao.py +0 -114
  882. package/starter/playable/src/textures/asphalt.png +0 -0
  883. package/starter/playable/src/textures/generate.py +0 -16
  884. package/starter/playable/src/textures/sandstone.png +0 -0
  885. package/starter/playable/src/ui/game.stories.tsx +0 -16
  886. package/starter/playable/src/ui/game.tsx +0 -6
  887. package/starter/playable/src/ui/race-hud.tsx +0 -29
  888. package/starter/playable/src/ui/race-widgets.tsx +0 -29
@@ -1,107 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- // Copyright 2026 Volter AI, Inc.
3
- import * as THREE from 'three';
4
- import type {ModelPlayContext} from '@volter/play/play-script';
5
- import {initialState,publishRaceState,consumeCommands,type Racer,type RaceState,type RaceEvent,type Command} from './race-state';
6
- import {at,nearest,length,wrap,angle,leftWidth} from './course';
7
- type Car=Racer & {object:THREE.Object3D;s:number;distance:number;checkpoint:number;lane:number;parked:boolean;boostCooldown:number;drift:number;drifting:boolean;offroad:boolean;collisionCooldown:number;lastDecision:number};
8
- type Inputs={throttle:number;brake:boolean;steer:number;drift:boolean;boost:boolean};
9
- export default function play(ctx:ModelPlayContext){
10
- const initialPositions=[[0,0],[-6.2,2.7],[4.8,6],[-1.5,24],[1,31],[7,41]];
11
- const names=['Pip','Miso','Nova','Sprig','Mica','Rook'];
12
- let state:RaceState={...initialState,events:[],racers:[]};let events:RaceEvent[]=[];let simTime=0,frame=0,clock=0,accumulator=0,previousKeys=new Set<string>(),endTime:number|null=null;let lastManual='';
13
- // Each race event is kept for the HUD's race state and written to the editor's play log (`cyclotron play-log`).
14
- const log=(kind:string,detail:Record<string,unknown>={})=>{events.push({time:+simTime.toFixed(3),frame,kind,...detail});if(events.length>1200)events.shift();ctx.log(kind,detail)};
15
- const cars:Car[]=initialPositions.map(([x,y],id)=>{const object=ctx.find('Kart.'+id);if(!object)throw new Error('Missing authored Kart.'+id);const n=nearest(x,y);return {id,name:names[id],object,x,y,s:n.s,distance:n.s,heading:0,speed:0,progress:n.s/length,lap:1,finished:false,finishTime:null,coins:id===0?8:4,boost:0,checkpoint:1,lane:[0,-4.6,4.6,-2.2,1.8,3.7][id],parked:false,boostCooldown:0,drift:0,drifting:false,offroad:false,collisionCooldown:0,lastDecision:-1}});
16
- ctx.root.traverse((o:any)=>{if(o.isDirectionalLight){o.shadow.mapSize.set(4096,4096);o.shadow.map?.dispose();o.shadow.map=null}});
17
- const pickups=new THREE.Group();pickups.name='Race coin pickups';ctx.root.add(pickups);
18
- const coinMaterial=new THREE.MeshStandardMaterial({color:0xffbe18,metalness:.55,roughness:.25});
19
- const coinGeometry=new THREE.TorusGeometry(.34,.1,8,20);
20
- const coins=Array.from({length:24},(_,i)=>{const s=(.25+Math.floor(i/3)*.086)*length, lane=[-4,0,4][i%3],p=at(s,lane);const mesh=new THREE.Mesh(coinGeometry,coinMaterial);mesh.name='Coin.'+i;mesh.position.set(p.x,p.y,.95);mesh.rotation.x=Math.PI/2;mesh.castShadow=true;pickups.add(mesh);return {mesh,x:p.x,y:p.y,ready:0,id:i}});
21
- const sparks=new THREE.Group();sparks.name='Boost exhaust';ctx.root.add(sparks);const flameMat=new THREE.MeshBasicMaterial({color:0x47e5ff,transparent:true,opacity:.7});const flameGeo=new THREE.ConeGeometry(.18,.8,8);const flames=cars.map(()=>{const a=new THREE.Mesh(flameGeo,flameMat);a.rotation.x=Math.PI/2;sparks.add(a);return a});
22
- const reset=(start=false)=>{const auto=state.autoplay;events=[];simTime=frame=clock=accumulator=0;endTime=null;lastManual='';for(const c of cars){const [x,y]=initialPositions[c.id],n=nearest(x,y);Object.assign(c,{x,y,s:n.s,distance:n.s,heading:0,speed:0,progress:n.s/length,lap:1,finished:false,finishTime:null,coins:c.id===0?8:4,boost:0,checkpoint:1,parked:false,boostCooldown:0,drift:0,drifting:false,offroad:false,collisionCooldown:0,lastDecision:-1});c.object.position.set(x,y,0);c.object.rotation.set(0,0,0)}for(const c of coins){c.ready=0;c.mesh.visible=true;c.mesh.rotation.z=0;}flames.forEach(f=>f.visible=false);state={...initialState,autoplay:auto,phase:start?'countdown':'ready',events:[],racers:[]};log('restart',{autoplay:auto,positions:cars.map(c=>({id:c.id,x:c.x,y:c.y}))});if(start)log('phase',{phase:'countdown'});publish();};
23
- const publish=()=>{const order=[...cars].sort((a,b)=>a.finished&&b.finished?(a.finishTime??0)-(b.finishTime??0):a.finished?-1:b.finished?1:b.distance-a.distance);const p=cars[0];state={...state,time:simTime,frame,speed:p.speed,lap:p.lap,coins:p.coins,boost:p.boost,place:order.indexOf(p)+1,racers:cars.map(c=>({id:c.id,name:c.name,x:+c.x.toFixed(3),y:+c.y.toFixed(3),heading:+c.heading.toFixed(4),speed:+c.speed.toFixed(3),progress:+(c.distance/length).toFixed(5),lap:c.lap,finished:c.finished,finishTime:c.finishTime,coins:c.coins,boost:+c.boost.toFixed(3),parked:c.parked,drifting:c.drifting,offroad:c.offroad})),events:[...events],message:cars.every(c=>c.parked)?'All six racers finished':state.message};publishRaceState(state)};
24
- const start=()=>{if(state.phase==='ready'){state={...state,phase:'countdown',countdown:3};log('phase',{phase:'countdown'})}};
25
- const command=(cmd:Command)=>{if(cmd==='restart'){reset(state.autoplay);return;}if(cmd==='pause'){if(state.phase!=='ready'){state={...state,paused:!state.paused};log(state.paused?'pause':'resume')}return;}if(state.paused)return;if(cmd==='auto'){state={...state,autoplay:!state.autoplay};log('autoplay',{enabled:state.autoplay});if(state.autoplay)start()}else if(cmd==='start')start();};
26
- function controller(c:Car):Inputs{
27
- const look=at(c.s+7+Math.abs(c.speed)*.45,c.finished?9.5:c.lane);const desired=Math.atan2(look.x-c.x,look.y-c.y),err=angle(desired-c.heading);const bend=Math.abs(angle(at(c.s+18).heading-at(c.s+3).heading));const target=(c.id===0?24.5:20.5+c.id*.25)-Math.min(6,bend*7);
28
- const inputs={throttle:c.speed<target?1:0,brake:c.speed>target+1,steer:Math.max(-1,Math.min(1,err*2.4)),drift:Math.abs(err)>(c.drifting?.20:.40)&&c.speed>13,boost:!c.finished&&bend<.15&&c.coins>=2&&c.speed>15&&c.boostCooldown===0};
29
- if(c.finished){const remaining=length*3+28+c.id*8-c.distance;const desiredSpeed=Math.min(15,Math.sqrt(Math.max(0,remaining-.7)*32));inputs.throttle=c.speed<desiredSpeed-.2?1:0;inputs.brake=c.speed>desiredSpeed+.05;inputs.drift=false;inputs.boost=false;}
30
- if(c.id===0&&simTime-c.lastDecision>2){c.lastDecision=simTime;log('autoplay-decision',{racer:c.id,targetSpeed:+target.toFixed(2),target:{x:+look.x.toFixed(2),y:+look.y.toFixed(2)},inputs:{...inputs,steer:+inputs.steer.toFixed(2)}})}
31
- return inputs;
32
- }
33
- const boost=(c:Car,drift=false)=>{if(c.boostCooldown>0||c.finished)return;if(!drift&&c.coins<2)return;if(!drift)c.coins-=2;c.boost=drift?.7:1.4;c.boostCooldown=drift?1.2:3;log('boost',{racer:c.id,source:drift?'drift':'coins',coins:c.coins,duration:c.boost})};
34
- function drive(c:Car,input:Inputs,dt:number){
35
- if(c.parked)return;
36
- c.collisionCooldown=Math.max(0,c.collisionCooldown-dt);c.boostCooldown=Math.max(0,c.boostCooldown-dt);
37
- if(c.boost>0){c.boost=Math.max(0,c.boost-dt);if(c.boost===0)log('boost-end',{racer:c.id})}
38
- if(input.boost)boost(c);
39
- const drift=input.drift&&Math.abs(input.steer)>.1&&c.speed>6;
40
- if(drift!==c.drifting){log(drift?'drift-start':'drift-end',{racer:c.id,charge:+c.drift.toFixed(2)});if(!drift&&c.drift>.6)boost(c,true);if(!drift)c.drift=0;c.drifting=drift}if(drift)c.drift+=dt;
41
- let acceleration=input.throttle*12;
42
- if(input.brake)acceleration=c.speed>0?-22:(c.finished?0:-9);
43
- if(c.finished&&Math.abs(c.speed)<=.5&&c.distance>=3*length+26.5+c.id*8){c.speed=0;c.parked=true;log('parked',{racer:c.id,x:c.x,y:c.y,clearedFinish:true});return;}
44
- const drag=input.throttle===0&&!input.brake?2.8:1.7;
45
- if(c.speed!==0)acceleration-=Math.sign(c.speed)*drag;
46
- c.speed+=acceleration*dt;
47
- const maxSpeed=c.boost>0?33:25.5;
48
- c.speed=Math.max(-7,Math.min(maxSpeed,c.speed));if(!input.throttle&&!input.brake&&Math.abs(c.speed)<.12)c.speed=0;
49
- const turn=input.steer*(drift?1.9:1.45)*Math.min(1,Math.abs(c.speed)/7)*(c.speed<0?-1:1);c.heading=angle(c.heading+turn*dt);
50
- c.x+=Math.sin(c.heading)*c.speed*dt;c.y+=Math.cos(c.heading)*c.speed*dt;
51
- let n=nearest(c.x,c.y);const left=leftWidth(n.t,n.y),limit=n.lane<0?left:12;
52
- const offroad=n.d>limit-1.2;
53
- if(offroad!==c.offroad){c.offroad=offroad;log(offroad?'surface-leave':'surface-enter',{racer:c.id,surface:'Circuit asphalt',x:+c.x.toFixed(2),y:+c.y.toFixed(2)})}
54
- if(offroad)c.speed*=Math.exp(-1.8*dt);
55
- if(n.d>limit+1.2){const sign=Math.sign(n.lane),p=at(n.s,sign*(limit+1));c.x=p.x;c.y=p.y;c.speed*=.6;if(c.collisionCooldown===0){log('barrier-contact',{racer:c.id,object:sign<0?'Outside guardrail':'Inside sandstone verge',x:c.x,y:c.y});c.collisionCooldown=.8}n=nearest(c.x,c.y)}
56
- let delta=n.s-c.s;if(delta>length/2)delta-=length;if(delta<-length/2)delta+=length;
57
- // Projection advances only through physically adjacent road segments.
58
- if(Math.abs(delta)<3+Math.abs(c.speed)*dt*2)c.distance+=delta;
59
- c.s=n.s;
60
- if(!c.finished&&c.distance>=c.checkpoint*length/4){log('checkpoint',{racer:c.id,checkpoint:c.checkpoint,x:c.x,y:c.y});c.checkpoint++;}
61
- const lap=Math.min(3,Math.max(1,Math.floor(c.distance/length)+1));if(lap!==c.lap){c.lap=lap;log('lap',{racer:c.id,lap})}
62
- if(!c.finished&&c.distance>=3*length&&c.checkpoint>=12){c.finished=true;c.finishTime=simTime;log('finish',{racer:c.id,name:c.name,time:simTime,x:c.x,y:c.y});if(c.id===0){endTime=simTime;state={...state,phase:'finished'};log('phase',{phase:'finished'})}}
63
- c.object.position.set(c.x,c.y,0);c.object.rotation.set(0,0,-c.heading);
64
- }
65
- const eye=new THREE.Vector3(),target=new THREE.Vector3();
66
- function camera(){const p=cars[0],h=p.heading;ctx.root.localToWorld(eye.set(p.x-Math.sin(h)*10.7,p.y-Math.cos(h)*10.7,4.7));ctx.root.localToWorld(target.set(p.x+Math.sin(h)*18,p.y+Math.cos(h)*18,.05));ctx.camera.position.copy(eye);ctx.camera.up.set(0,1,0);ctx.camera.lookAt(target);const cam=ctx.camera as THREE.PerspectiveCamera;cam.fov=47;cam.far=180;cam.updateProjectionMatrix();}
67
- function physics(dt:number){
68
- if(state.phase==='ready'||state.paused||cars.every(c=>c.parked))return;
69
- simTime+=dt;frame++;
70
- if(state.phase==='countdown'){state={...state,countdown:Math.max(0,state.countdown-dt)};if(state.countdown===0){state={...state,phase:'racing'};log('phase',{phase:'racing'});}return;}
71
- const k=ctx.keys,manual:Inputs={throttle:k.has('ArrowUp')||k.has('KeyW')?1:0,brake:k.has('ArrowDown')||k.has('KeyS'),steer:(k.has('ArrowRight')||k.has('KeyD')?1:0)-(k.has('ArrowLeft')||k.has('KeyA')?1:0),drift:k.has('Space'),boost:k.has('ShiftLeft')||k.has('ShiftRight')};
72
- const manualString=JSON.stringify(manual);if(!state.autoplay&&!botNow&&manualString!==lastManual){lastManual=manualString;log('manual-input',{inputs:manual});}
73
- for(const c of cars)drive(c,c.id===0&&!state.autoplay&&!c.finished?manual:controller(c),dt);
74
- for(let i=0;i<cars.length;i++)for(let j=i+1;j<cars.length;j++){
75
- const a=cars[i],b=cars[j];if(a.finished||b.finished)continue;const dx=b.x-a.x,dy=b.y-a.y,d=Math.hypot(dx,dy);if(d>0&&d<2){const push=(2-d)*.51;a.x-=dx/d*push;a.y-=dy/d*push;b.x+=dx/d*push;b.y+=dy/d*push;if(a.collisionCooldown===0&&b.collisionCooldown===0){a.speed*=.85;b.speed*=.85;log('kart-contact',{a:i,b:j,object:'Kart.'+j,x:a.x,y:a.y});a.collisionCooldown=b.collisionCooldown=.5}}
76
- }
77
- for(const coin of coins){coin.mesh.visible=simTime>=coin.ready;if(!coin.mesh.visible)continue;coin.mesh.rotation.z=simTime*2;for(const c of cars){if(c.finished)continue;if(Math.hypot(c.x-coin.x,c.y-coin.y)<1.5){c.coins++;coin.ready=simTime+6;coin.mesh.visible=false;log('pickup',{racer:c.id,object:'Coin.'+coin.id,coins:c.coins});break}}}
78
- cars.forEach((c,i)=>{const f=flames[i];f.visible=c.boost>0&&!c.parked;f.position.set(c.x-Math.sin(c.heading)*1.8,c.y-Math.cos(c.heading)*1.8,.38);f.rotation.set(Math.PI/2,0,-c.heading);f.scale.setScalar(.8+.25*Math.sin(simTime*42));});
79
- }
80
- // THE GAME PANEL'S AUTOPLAY (`play autoplay on race`): a bot that drives Pip with the keys a person
81
- // holds, through the manual code above, steering as the race's own AUTO does (`controller`, which logs
82
- // its decisions). Steering keys are pulsed so their average follows that steer; while the bot drives,
83
- // those key changes are not logged as manual input.
84
- let botDriving=false,botNow=false,steerDebt=0;
85
- ctx.autoplay({race:()=>{
86
- botDriving=true;const c=cars[0];
87
- if(state.paused)return {keys:[],state:'race paused'};
88
- if(state.phase==='ready')return {keys:['ArrowUp'],state:'starting the race'};
89
- if(state.phase==='countdown')return {keys:[],state:'waiting for the countdown'};
90
- if(c.finished)return {keys:[],state:'finished; Pip parks past the line'};
91
- const input=controller(c),keys:string[]=[];steerDebt+=input.steer;
92
- if(steerDebt>=.5){keys.push('ArrowRight');steerDebt-=1}else if(steerDebt<=-.5){keys.push('ArrowLeft');steerDebt+=1}
93
- if(input.throttle)keys.push('ArrowUp');if(input.brake)keys.push('ArrowDown');if(input.drift)keys.push('Space');if(input.boost)keys.push('ShiftLeft');
94
- return {keys,state:`racing lap ${c.lap} of 3`};
95
- }});
96
- reset(false);
97
- return {update(dt:number){
98
- botNow=botDriving;botDriving=false;
99
- const keyCommands:[string,Command][]=[['Enter','start'],['KeyO','auto'],['KeyP','pause'],['KeyR','restart']];
100
- const commands=consumeCommands();for(const [key,cmd]of keyCommands)if(ctx.keys.has(key)&&!previousKeys.has(key))commands.push(cmd);
101
- for(const cmd of commands)command(cmd);
102
- const moving=['ArrowUp','ArrowDown','ArrowLeft','ArrowRight','KeyW','KeyA','KeyS','KeyD'].some(k=>ctx.keys.has(k));
103
- if(moving&&!state.paused&&!cars[0].finished){if(state.autoplay){state={...state,autoplay:false};log('autoplay',{enabled:false,cause:'manual takeover'})}start()}
104
- previousKeys=new Set(ctx.keys);if(!state.paused){accumulator+=Math.min(dt,.1);while(accumulator>=1/60){physics(1/60);accumulator-=1/60}}else accumulator=0;
105
- camera();clock+=dt;if(clock>.075||commands.length){publish();clock=0;}
106
- },dispose(){pickups.removeFromParent();sparks.removeFromParent();coinGeometry.dispose();coinMaterial.dispose();flameGeo.dispose();flameMat.dispose();}};
107
- }
@@ -1,55 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- #
3
- # THE bpy SCRIPTS ARE GPL, AND THE REST OF YOUR PROJECT IS NOT.
4
- #
5
- # This file and the step scripts beside it drive `bpy`, Blender's Python API.
6
- # The Blender Foundation's stated position — their licence page, under
7
- # "Add-ons (Python scripts)" — is that the API "is an integral part of the
8
- # software" and that the GPL "therefore requires that such scripts (if
9
- # published) are being shared under a GPL compliant license". So a bpy script
10
- # is a derivative work of Blender, and these are licensed GNU General Public
11
- # License version 3 or later, exercising Blender's own "or later".
12
- #
13
- # WHAT THIS DOES NOT TOUCH. `canyon.blend` beside this file is YOURS, and so
14
- # is anything you export from it — glTF, GLB, renders. That is the
15
- # Foundation's position too, on the same page under "Your Artwork": what you
16
- # make with Blender is your sole property, "including the .blend files and
17
- # other data files Blender can write". The play script, the race state, the
18
- # textures and the React UI the template gave you are MIT. This licence
19
- # reaches the bpy scripts and nothing else.
20
- #
21
- # If you would rather not carry them: delete them. The `.blend` is the
22
- # document — these are only the recorded source of how it was made — and
23
- # nothing in the project reads them at runtime. If you write your own bpy
24
- # scripts, the Foundation's position applies to them on the same terms; it is
25
- # not a rule of ours and is not ours to waive, because the copyright in
26
- # Blender is Blender's authors'.
27
- #
28
- # Copyright 2026 Volter AI, Inc.
29
-
30
- """Canyon Comet's authoring entry: the record of how `canyon.blend` was made.
31
-
32
- The saved `canyon.blend` is the document, and it is authoritative: this script
33
- never rebuilds existing artwork. Run on a file without the `Canyon Comet`
34
- collection, it runs the milestone scripts beside it in order (the circuit,
35
- six karts and chase camera, then the canyon, textures from `src/textures/`,
36
- polish and details, and last `scenery_ao.py`, which bakes ambient occlusion
37
- into the static scenery), each saving `src/models/canyon.blend`.
38
-
39
- Run it through the session's Blender, from this project:
40
-
41
- exec(open("<project root>/src/models/canyon.py").read())
42
-
43
- Coordinates are metres, Z is up. At Play, `canyon.play.ts` drives the six
44
- `Kart.N` empties around the circuit that `course.ts` shares with these scripts.
45
- """
46
- import bpy
47
- from pathlib import Path
48
- ROOT=Path(bpy.data.filepath).resolve().parents[2]
49
- if bpy.data.collections.get('Canyon Comet'):
50
- print('Canyon Comet is already authored. Existing geometry and manual edits preserved.')
51
- else:
52
- # Each step runs in its own namespace: they all name their own ROOT and helpers.
53
- for step in ['circuit','environment','refine','polish','detail','complete_environment','kart_finish','driver_details','finish_scene','scenery_ao']:
54
- source=ROOT/'src'/'models'/(step+'.py')
55
- exec(compile(source.read_text(),step+'.py','exec'),{'__name__':'__main__','__file__':str(source)})
@@ -1,131 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- # Milestone 1 of canyon.py: the circuit, six karts, sky, sun and chase camera.
4
- import bpy, math, random, datetime
5
- from mathutils import Vector
6
- from pathlib import Path
7
- ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
8
- random.seed(71)
9
- # Rebuild only owned scene content, preserving reference, notes and manual objects.
10
- for o in list(bpy.data.objects):
11
- if (o.get('canyon_owned') or o.name=='Cube') and not any(c.name in ['References','Notes'] for c in o.users_collection): bpy.data.objects.remove(o,do_unlink=True)
12
- col=bpy.data.collections.get('Canyon Comet') or bpy.data.collections.new('Canyon Comet')
13
- if col.name not in bpy.context.scene.collection.children: bpy.context.scene.collection.children.link(col)
14
- def own(o): o['canyon_owned']=True; col.objects.link(o); return o
15
- def lin(c): return c/12.92 if c<.04045 else ((c+.055)/1.055)**2.4
16
- def mat(n,h,rough=.55,metal=0):
17
- m=bpy.data.materials.get(n) or bpy.data.materials.new(n); m.use_nodes=True
18
- rgb=[lin(int(h[i:i+2],16)/255) for i in (0,2,4)]; m.diffuse_color=(*rgb,1)
19
- p=m.node_tree.nodes.get('Principled BSDF'); p.inputs['Base Color'].default_value=(*rgb,1); p.inputs['Roughness'].default_value=rough;p.inputs['Metallic'].default_value=metal
20
- return m
21
- sand=mat('Warm peach sand','EBA76B'); road=mat('Granular warm asphalt','777970',.98); white=mat('Ivory enamel','EDF1E7',.28); teal=mat('Lagoon turquoise','13C8CF',.25,.15); yellow=mat('Golden yellow','F5C62B',.3); purple=mat('Violet racer','773FDC',.28); green=mat('Apple racer','59BC37',.28); blue=mat('Sky racer','319BBE',.27); coral=mat('Coral racer','F05C33',.3); tire=mat('Graphite rubber','202A29',.9); metal=mat('Brushed aluminum','A3AFAA',.3,.55); dark=mat('Ink blue helmet','203D58',.28); red=mat('Ruby tail lamps','BA291D',.22); orange=mat('Tangerine trim','F68B25',.3); mint=mat('Mint creature','38CCAC',.4); edge=mat('Mint track paint','5AF1B9',.8); black=mat('Sign charcoal','343B32',.8); lamp=mat('Amber lamps','FFF399',.4)
22
- lamp.node_tree.nodes.get('Principled BSDF').inputs['Emission Color'].default_value=(1,.72,.15,1);lamp.node_tree.nodes.get('Principled BSDF').inputs['Emission Strength'].default_value=1.2
23
- cache={}
24
- def mesh(n,v,f,m):
25
- d=bpy.data.meshes.new(n);d.from_pydata(v,[],f);d.materials.append(m);d.update();return d
26
- def obj(n,d,loc=(0,0,0),scale=(1,1,1),parent=None):
27
- o=own(bpy.data.objects.new(n,d));o.location=loc;o.scale=scale;o.parent=parent;return o
28
- def sphere(n,loc,scale,m,parent=None):
29
- key=('sphere',m.name)
30
- if key not in cache:
31
- v=[(math.sin(math.pi*j/16)*math.cos(2*math.pi*i/28),math.sin(math.pi*j/16)*math.sin(2*math.pi*i/28),math.cos(math.pi*j/16)) for j in range(17) for i in range(28)]
32
- f=[(j*28+i,j*28+(i+1)%28,(j+1)*28+(i+1)%28,(j+1)*28+i) for j in range(16) for i in range(28)]
33
- # Sphere param runs north to south, winding outward.
34
- d=mesh('Smooth '+m.name,v,[tuple(reversed(a)) for a in f],m)
35
- for p in d.polygons:p.use_smooth=True
36
- cache[key]=d
37
- return obj(n,cache[key],loc,scale,parent)
38
- def box(n,loc,s,m,parent=None):
39
- key=('box',m.name)
40
- if key not in cache:
41
- v=[(-1,-1,-1),(1,-1,-1),(1,1,-1),(-1,1,-1),(-1,-1,1),(1,-1,1),(1,1,1),(-1,1,1)]
42
- cache[key]=mesh(m.name+' block',v,[(0,3,2,1),(0,1,5,4),(1,2,6,5),(2,3,7,6),(3,0,4,7),(4,5,6,7)],m)
43
- return obj(n,cache[key],loc,tuple(a/2 for a in s),parent)
44
- def rod(n,a,b,r,m,parent=None):
45
- mid=(Vector(a)+Vector(b))/2;o=sphere(n,mid,(r,r,(Vector(b)-Vector(a)).length/2+r),m,parent);o.rotation_euler=(Vector(b)-Vector(a)).to_track_quat('Z','Y').to_euler();return o
46
- def torus(n,loc,R,r,m,parent=None):
47
- key=('torus',R,r,m.name)
48
- if key not in cache:
49
- v=[((R+r*math.cos(j*math.tau/12))*math.cos(i*math.tau/28),(R+r*math.cos(j*math.tau/12))*math.sin(i*math.tau/28),r*math.sin(j*math.tau/12)) for i in range(28) for j in range(12)]
50
- f=[(i*12+j,((i+1)%28)*12+j,((i+1)%28)*12+(j+1)%12,i*12+(j+1)%12) for i in range(28) for j in range(12)]
51
- d=mesh(n,v,f,m)
52
- for p in d.polygons:p.use_smooth=True
53
- cache[key]=d
54
- return obj(n,cache[key],loc,parent=parent)
55
- POINTS=[(0,0),(0,25),(12,55),(42,70),(68,45),(65,5),(40,-25),(8,-25)]
56
- def center(t):
57
- k=math.floor(t)%8;u=t%1;p0=Vector(POINTS[(k-1)%8]);p1=Vector(POINTS[k]);p2=Vector(POINTS[(k+1)%8]);p3=Vector(POINTS[(k+2)%8]);return .5*((2*p1)+(-p0+p2)*u+(2*p0-5*p1+4*p2-p3)*u*u+(-p0+3*p1-3*p2+p3)*u*u*u)
58
- def sample(t,offset=0):
59
- p=center(t);d=(center(t+.001)-center(t-.001)).normalized();return p+Vector((d.y,-d.x))*offset
60
- N=512
61
- def ribbon(n,left,right,z,m):
62
- v=[]
63
- for i in range(N):
64
- for off in [left,right]:
65
- p=sample(i*8/N,off);v.append((p.x,p.y,z))
66
- f=[(2*i,2*i+1,2*((i+1)%N)+1,2*((i+1)%N)) for i in range(N)]
67
- return obj(n,mesh(n,v,f,m))
68
- box('Desert floor',(30,20,-.3),(360,360,.5),sand)
69
- ribbon('Circuit asphalt',-12,12,0,road)
70
- for side in [-1,1]:
71
- ribbon('Ivory shoulder '+str(side),side*12,side*12.5,.015,white)
72
- ribbon('Turquoise racing edge '+str(side),side*11.45,side*12,.028,edge)
73
- for i in range(90):
74
- t=i*8/90;p=sample(t);q=sample(t+.015);d=q-p
75
- o=box('Lane dash %03d'%i,(p.x,p.y,.035),(.28,2.1,.015),white);o.rotation_euler.z=-math.atan2(d.x,d.y)
76
- def kart(index,pos,color,character):
77
- root=own(bpy.data.objects.new('Kart.%d'%index,None));root.location=pos
78
- sphere('K%d sculpted chassis'%index,(0,0,.64),(1.05,1.5,.52),color,root)
79
- sphere('K%d cockpit'%index,(0,.12,1.01),(.73,.8,.19),tire,root)
80
- sphere('K%d nose'%index,(0,1,.67),(.9,.75,.35),color,root)
81
- for x in [-1,1]:
82
- for y in [-.88,.88]:
83
- o=torus('K%d tire'%index,(x,y,.46),.31,.16,tire,root);o.rotation_euler.y=math.pi/2
84
- sphere('K%d gold wheel'%index,(x*1.145,y,.46),(.07,.28,.28),yellow,root)
85
- sphere('K%d wheel hub'%index,(x*1.2,y,.46),(.025,.13,.13),tire,root)
86
- sphere('K%d white rear pod'%index,(x*.8,-.85,.85),(.23,.53,.44),white,root)
87
- sphere('K%d red lamp'%index,(x*.83,-1.28,.98),(.14,.065,.23),red,root)
88
- sphere('K%d lamp glint'%index,(x*.8,-1.34,1.06),(.045,.017,.085),orange,root)
89
- rod('K%d wing strut'%index,(x*.6,-.84,1.1),(x*.6,-.84,1.4),.055,metal,root)
90
- sphere('K%d rounded wing'%index,(0,-.96,1.4),(.88,.18,.09),color,root)
91
- box('K%d rear cream stripe'%index,(0,-1.46,.72),(.32,.018,.45),white,root)
92
- sphere('K%d bumper'%index,(0,-1.43,.46),(.48,.16,.22),metal,root)
93
- for x in [-.17,.17]:
94
- o=torus('K%d exhaust rim'%index,(x,-1.66,.34),.12,.042,metal,root);o.rotation_euler.x=math.pi/2
95
- sphere('K%d exhaust bore'%index,(x,-1.65,.34),(.105,.02,.105),tire,root)
96
- sphere('K%d driver suit'%index,(0,.05,1.36),(.43,.34,.48),orange if index==0 else coral,root)
97
- for x in [-.37,.37]:rod('K%d driver arm'%index,(x,0,1.49),(x,.55,1.18),.14,white,root)
98
- if character=='helmet':
99
- sphere('K%d helmet rim'%index,(0,.05,1.82),(.64,.6,.28),tire,root)
100
- sphere('K%d helmet'%index,(0,.06,2.14),(.67,.61,.65),white,root)
101
- sphere('K%d face visor'%index,(0,.55,2.11),(.5,.14,.32),dark,root)
102
- # Orange stripe follows the curved helmet from brow to neck.
103
- v=[];f=[]
104
- for j in range(33):
105
- a=-math.pi*.48+math.pi*1.05*j/32
106
- for x in [-.115,.115]:v.append((x,.06+math.sin(a)*.623,2.14+math.cos(a)*.657))
107
- for j in range(32):f.append((j*2,j*2+1,j*2+3,j*2+2))
108
- obj('K%d helmet stripe'%index,mesh('Stripe',v,f,orange),parent=root)
109
- sphere('K%d scarf'%index,(0,-.28,1.49),(.38,.12,.14),coral,root)
110
- elif character=='miso':
111
- sphere('K%d mint head'%index,(0,.06,2.03),(.77,.66,.65),mint,root)
112
- for x in [-.73,.73]:sphere('K%d rounded ears'%index,(x,.05,2.17),(.28,.21,.28),mint,root)
113
- for x in [-.28,.28]:sphere('K%d coral crest'%index,(x,.02,2.67),(.14,.25,.28),orange,root)
114
- else:
115
- sphere('K%d navy helmet'%index,(0,.06,2.1),(.68,.62,.64),dark,root)
116
- for x in [-.66,.66]:
117
- sphere('K%d orange earcup'%index,(x,0,2.04),(.15,.28,.3),orange,root)
118
- sphere('K%d earcup metal'%index,(x*1.14,0,2.04),(.025,.17,.19),metal,root)
119
- rod('K%d headband'%index,(-.52,.04,2.56),(.52,.04,2.56),.08,metal,root)
120
- sphere('K%d visor'%index,(0,.6,2.12),(.48,.13,.28),teal,root)
121
- return root
122
- kart(0,(0,0,0),teal,'helmet');kart(1,(-5.4,1.3,0),yellow,'miso');kart(2,(4.8,4.4,0),purple,'nova');kart(3,(-1.5,17,0),green,'miso');kart(4,(1,23,0),blue,'helmet');kart(5,(7,30,0),coral,'nova')
123
- # Sunlight and a sky dome use the actual authored scene in Edit and Play.
124
- world=bpy.context.scene.world or bpy.data.worlds.new('Canyon sky');bpy.context.scene.world=world;world.use_nodes=True;world.node_tree.nodes['Background'].inputs[0].default_value=(.23,.65,.8,1);world.node_tree.nodes['Background'].inputs[1].default_value=.7
125
- sky=mat('Cyan sky','6AD9ED',1);p=sky.node_tree.nodes.get('Principled BSDF');p.inputs['Emission Color'].default_value=(*[lin(a/255) for a in (106,217,237)],1);p.inputs['Emission Strength'].default_value=.8
126
- light=bpy.data.lights.new('Afternoon sun','SUN');light.energy=3;light.angle=.08;l=own(bpy.data.objects.new('Afternoon sun',light));l.rotation_euler=(.5,-.5,-.5)
127
- c=bpy.data.cameras.new('Chase camera');c.lens=24;c.sensor_width=36;cam=own(bpy.data.objects.new('Chase camera',c));cam.location=(0,-9,5.1);cam.rotation_euler=(Vector((0,18,1.6))-cam.location).to_track_quat('-Z','Y').to_euler();bpy.context.scene.camera=cam
128
- bpy.context.scene.render.resolution_x=1672;bpy.context.scene.render.resolution_y=941
129
- bpy.context.scene.view_settings.view_transform='Standard'
130
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
131
- print('Milestone 1: circuit, six rounded karts and chase camera saved')
@@ -1,35 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- import bpy,math,random,datetime
4
- from pathlib import Path
5
- ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
6
- exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
7
- random.seed(38)
8
- rock=bpy.data.materials['Continuous sandstone strata']
9
- # Layered landforms on the return straight and inner island.
10
- def mesa2(n,x,y,rx,ry,h):
11
- v=[];count=18;rings=17
12
- jitter=[random.uniform(.87,1.1)for _ in range(count)]
13
- for j in range(rings):
14
- z=h*j/(rings-1);s=1-(j//4)*.14
15
- for i in range(count):
16
- a=i*math.tau/count;r=s*jitter[i];v.append((x+rx*r*math.cos(a)+.16*math.sin(z+i),y+ry*r*math.sin(a),z))
17
- f=[(j*count+i,j*count+(i+1)%count,(j+1)*count+(i+1)%count,(j+1)*count+i)for j in range(rings-1)for i in range(count)];f+=[tuple(range((rings-1)*count,rings*count))]
18
- d=mesh(n,v,f,rock);o=obj(n,d);uv=d.uv_layers.new(name='Strata')
19
- for p in d.polygons:
20
- for li in p.loop_indices:
21
- a=d.vertices[d.loops[li].vertex_index].co;uv.data[li].uv=((a.x+a.y*.61)/18,a.z/9)
22
- b=o.modifiers.new('Weathered corners','BEVEL');b.width=.22;b.segments=2
23
- return o
24
- for i,(x,y,rx,ry,h)in enumerate([(-40,-32,15,22,23),(-14,-59,22,12,21),(22,-62,21,12,28),(57,-56,15,12,19),(90,-34,15,20,24),(112,0,16,22,29),(112,38,13,21,24),(104,76,15,18,27),(70,106,21,15,22),(32,26,10,14,8),(38,48,9,8,5)]):mesa2('Return canyon mesa '+str(i),x,y,rx,ry,h)
25
- for ob in list(bpy.data.objects):
26
- if ob.name.startswith('Distant eroded butte'):bpy.data.objects.remove(ob,do_unlink=True)
27
- # Add fine puffs to the clouds, using one shared mesh.
28
- cloud=bpy.data.materials['Soft cream clouds'];p=cloud.node_tree.nodes['Principled BSDF'];p.inputs['Emission Color'].default_value=(.45,.43,.38,1);p.inputs['Emission Strength'].default_value=.45
29
- for x,y,z in [(-5,-140,40),(60,-140,42),(155,30,47)]:
30
- for j in range(18):sphere('Return cloud puff',(x+random.uniform(-15,15),y+random.uniform(-3,3),z+random.uniform(-3,4)),(random.uniform(2,5),3,random.uniform(2,4)),cloud)
31
- # Visible start/finish stripe lives just behind the grid, leaving the reference shot open.
32
- for ix in range(20):
33
- for iy in range(2):box('Finish line tile',(-11.4+ix*1.2,-2+iy*.6,.045),(1.2,.6,.018),white if (ix+iy)%2==0 else tire)
34
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
35
- print('Return circuit scenery and finish line saved')
@@ -1,12 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- // Copyright 2026 Volter AI, Inc.
3
- export const points=[[0,0],[0,25],[12,55],[42,70],[68,45],[65,5],[40,-25],[8,-25]];
4
- export function curve(t:number){const k=Math.floor(t),u=t-k;const p=[-1,0,1,2].map(d=>points[((k+d)%8+8)%8]);return [0,1].map(c=>.5*(2*p[1][c]+(-p[0][c]+p[2][c])*u+(2*p[0][c]-5*p[1][c]+4*p[2][c]-p[3][c])*u*u+(-p[0][c]+3*p[1][c]-3*p[2][c]+p[3][c])*u*u*u));}
5
- export const course=Array.from({length:769},(_,i)=>{const p=curve(i*8/768);return {x:p[0],y:p[1],s:0,t:i*8/768}});
6
- for(let i=1;i<course.length;i++)course[i].s=course[i-1].s+Math.hypot(course[i].x-course[i-1].x,course[i].y-course[i-1].y);
7
- export const length=course.at(-1)!.s;
8
- export const wrap=(v:number)=>((v%length)+length)%length;
9
- export function at(s:number,lane=0){s=wrap(s);let lo=0,hi=768;while(hi-lo>1){const m=(lo+hi)>>1;if(course[m].s<s)lo=m;else hi=m;}const a=course[lo],b=course[hi],f=(s-a.s)/(b.s-a.s),dx=b.x-a.x,dy=b.y-a.y,h=Math.atan2(dx,dy);return {x:a.x+(b.x-a.x)*f+Math.cos(h)*lane,y:a.y+(b.y-a.y)*f-Math.sin(h)*lane,heading:h,t:a.t+(b.t-a.t)*f};}
10
- export function nearest(x:number,y:number){let best=Infinity,res={s:0,x:0,y:0,d:0,lane:0,t:0,heading:0};for(let i=0;i<768;i++){const a=course[i],b=course[i+1],dx=b.x-a.x,dy=b.y-a.y,q=Math.max(0,Math.min(1,((x-a.x)*dx+(y-a.y)*dy)/(dx*dx+dy*dy))),px=a.x+dx*q,py=a.y+dy*q,d=(px-x)**2+(py-y)**2;if(d<best){best=d;const h=Math.atan2(dx,dy);res={x:px,y:py,s:a.s+q*(b.s-a.s),d:Math.sqrt(d),lane:(x-px)*Math.cos(h)-(y-py)*Math.sin(h),heading:h,t:a.t+(b.t-a.t)*q}}}return res;}
11
- export const leftWidth=(t:number,y:number)=>12+((t<2.4||t>7.3)?17*Math.exp(-Math.max(0,y)/28):0);
12
- export const angle=(v:number)=>Math.atan2(Math.sin(v),Math.cos(v));
@@ -1,44 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- import bpy,math,random,datetime
4
- from pathlib import Path
5
- ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
6
- exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
7
- for ob in list(bpy.data.objects):
8
- if 'exhaust tube' in ob.name:bpy.data.objects.remove(ob,do_unlink=True)
9
- # Wider, softer kart body with a rounded rectangular engine bumper.
10
- for i in range(6):
11
- rt=bpy.data.objects['Kart.'+str(i)]
12
- for ob in rt.children:
13
- if 'bumper' in ob.name:
14
- ob.scale.z*=1.6;ob.scale.y*=.85
15
- if 'helmet stripe' in ob.name:
16
- for j in range(33):
17
- a=-2.2+4.0*j/32
18
- for k,x in enumerate([-.115,.115]):ob.data.vertices[j*2+k].co=(x,.06+math.sin(a)*.623,2.14+math.cos(a)*.657)
19
- ob.data.update()
20
- # Small amber brake studs and bolts provide scale and material contrast.
21
- for x in [-.58,.58]:sphere('K%d wing bolt'%i,(x,-1.08,1.4),(.055,.035,.035),metal,rt)
22
- # Broader lane dashes and a more open skyline.
23
- for ob in bpy.data.objects:
24
- if ob.name.startswith('Lane dash'):
25
- ob.scale.x*=1.8;ob.scale.y*=.7
26
- if ob.name.startswith('Cloud'):
27
- ob.scale.z*=.65;ob.location.z+=5
28
- # Raised sand terraces put the left signs above the distant rail like the reference.
29
- for name in ['West ledge','West middle mesa']:
30
- ob=bpy.data.objects[name];ob.scale.z*=.86
31
- # Secondary sandstone shelves, forming broad irregular blocks rather than isolated cylinders.
32
- rock=bpy.data.materials['Continuous sandstone strata']
33
- for i,(x,y,z,sx,sy,sz) in enumerate([(-29,28,1.2,18,18,2.4),(-23,45,1.1,14,16,2.2),(28,37,.7,8,7,1.4)]):
34
- ob=box('Low sandstone shelf '+str(i),(x,y,z),(sx,sy,sz),rock)
35
- uv=ob.data.uv_layers.get('Strata') or ob.data.uv_layers.new(name='Strata')
36
- for p in ob.data.polygons:
37
- for li in p.loop_indices:
38
- v=ob.data.vertices[ob.data.loops[li].vertex_index].co;uv.data[li].uv=((v.x+v.y)*.5,v.z*.25)
39
- # Hazy distant formations fill the opening below the arch.
40
- haze=mat('Distant rose sandstone','DBA188',1)
41
- for x,y,z,sx,sy,sz in [(23,122,5,18,13,10),(29,123,11,13,11,5),(29,123,15,8,8,3),(-3,137,6,16,16,12)]:
42
- sphere('Distant eroded butte',(x,y,z),(sx,sy,sz*.5),haze)
43
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
44
- print('Final surface and silhouette detailing saved')
@@ -1,25 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- import bpy,math
4
- from pathlib import Path
5
- ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
6
- exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
7
- for i in range(6):
8
- root=bpy.data.objects['Kart.'+str(i)]
9
- if bpy.data.objects.get('K%d steering wheel'%i):continue
10
- wheel=torus('K%d steering wheel'%i,(0,.63,1.25),.24,.043,tire,root);wheel.rotation_euler.x=.9
11
- rod('K%d steering column'%i,(0,.65,.9),(0,.63,1.25),.045,metal,root)
12
- rod('K%d steering spoke'%i,(-.23,.63,1.25),(.23,.63,1.25),.025,metal,root)
13
- for x in [-.54,.54]:
14
- sphere('K%d headlight housing'%i,(x,1.53,.77),(.26,.17,.18),white,root)
15
- sphere('K%d golden headlight'%i,(x,1.66,.77),(.17,.055,.115),yellow,root)
16
- sphere('K%d front air intake'%i,(0,1.72,.52),(.34,.04,.09),tire,root)
17
- if i in [1,3]:
18
- for x in [-.27,.27]:
19
- sphere('K%d creature eye'%i,(x,.637,2.2),(.18,.06,.22),white,root)
20
- sphere('K%d creature pupil'%i,(x,.693,2.19),(.087,.035,.13),dark,root)
21
- sphere('K%d eye sparkle'%i,(x-.025,.721,2.24),(.026,.015,.036),white,root)
22
- sphere('K%d creature muzzle'%i,(0,.686,1.92),(.27,.11,.13),mint,root)
23
- sphere('K%d creature nose'%i,(0,.783,1.98),(.075,.025,.047),dark,root)
24
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
25
- print('Steering controls, headlights and original creature faces saved')
@@ -1,87 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- # Additive environment milestone; shares helpers from scene_helpers.py.
4
- import bpy, math, random, datetime
5
- exec(compile(open(str(__import__('pathlib').Path(bpy.data.filepath).resolve().parent / 'scene_helpers.py')).read(),"scene_helpers.py","exec"))
6
- random.seed(178)
7
- for o in list(bpy.data.objects):
8
- if o.get('environment_owned'):bpy.data.objects.remove(o,do_unlink=True)
9
- before=set(bpy.data.objects)
10
- rocks=[mat('Sandstone band '+str(i),h,.95) for i,h in enumerate(['C8794E','D98654','B9603F','E49C61','BB6548','F3B576','D78457','A95A42'])]
11
- def mesa(n,x,y,rx,ry,h):
12
- count=14; rings=18;v=[]
13
- angular=[random.uniform(.85,1.12) for i in range(count)]
14
- for j in range(rings):
15
- z=h*j/(rings-1);s=1-(j//4)*.12+random.uniform(-.015,.015)
16
- for i in range(count):
17
- a=i*math.tau/count;v.append((x+rx*s*angular[i]*math.cos(a),y+ry*s*angular[i]*math.sin(a),z))
18
- f=[]
19
- for j in range(rings-1):
20
- for i in range(count):f.append((j*count+i,j*count+(i+1)%count,(j+1)*count+(i+1)%count,(j+1)*count+i))
21
- f.append(tuple(range((rings-1)*count,rings*count)));f.append(tuple(reversed(range(count))))
22
- d=mesh(n,v,f,rocks[0]);[d.materials.append(m) for m in rocks[1:]]
23
- for p in d.polygons:p.material_index=(p.index//count)%len(rocks)
24
- return obj(n,d)
25
- # Main composition: left stepped escarpment and right arch buttress.
26
- for args in [('West high mesa',-29,28,16,23,29),('West middle mesa',-22,42,12,22,18),('West ledge',-22,12,11,17,9),('Arch east tower',38,49,12,17,24),('East foreground cliff',43,27,15,15,17),('Arch west tower',-12,53,9,11,15),('Distant mesa',36,106,23,18,22),('Far left mesa',-31,102,21,24,25),('Far right mesa',95,85,21,27,30)]:mesa(*args)
27
- # Uneven, layered voussoirs form a true open arch over the roadway.
28
- for i in range(14):
29
- a=i/14*math.pi;b=(i+1)/14*math.pi
30
- inner=20;outer=25+random.uniform(-.5,.7);cx=13;cz=3
31
- v=[]
32
- for y in [46,55]:
33
- for r,t in [(inner,a),(outer,a),(outer,b),(inner,b)]:v.append((cx+r*math.cos(t),y,cz+r*.65*math.sin(t)))
34
- d=mesh('Arch stone',v,[(0,3,2,1),(4,5,6,7),(0,1,5,4),(1,2,6,5),(2,3,7,6),(3,0,4,7)],rocks[i%6]);obj('Natural arch span %02d'%i,d)
35
- # Thin sediment seams across each major mesa, geometry preserves horizontal strata.
36
- for o in list(bpy.data.objects):
37
- if o.type=='MESH' and 'mesa' in o.name.lower() or o.name in ['West ledge','East foreground cliff','Arch east tower','Arch west tower']:
38
- if not o.type=='MESH':continue
39
- # add subtle surface noise as an image texture via shared materials later
40
- # Guardrail wraps the outside bend.
41
- for i in range(80):
42
- t=-.28+i*.038;p=sample(t,-12.9);q=sample(t+.038,-12.9)
43
- rod('Guardrail beam',(p.x,p.y,.97),(q.x,q.y,.97),.13,metal)
44
- rod('Guardrail lower',(p.x,p.y,.73),(q.x,q.y,.73),.08,metal)
45
- if i%2==0:box('Rail post',(p.x,p.y,.43),(.18,.2,.86),metal)
46
- # Arrow panels are front facing and properly lit dot lamps.
47
- for ix,(x,y,s) in enumerate([(-15,10,1.5),(-14,24,1.35),(-8,38,1.18)]):
48
- box('Arrow panel frame '+str(ix),(x,y,4.1*s),(4.7*s,.25,2.5*s),metal)
49
- box('Arrow panel face '+str(ix),(x,y-.15,4.1*s),(4.4*s,.07,2.25*s),black)
50
- for cx in [-1.4,0,1.4]:
51
- for j in range(9):
52
- zz=(j-4)*.2;xx=cx+.65-abs(j-4)*.18
53
- sphere('Arrow amber lamp',(x+xx*s,y-.22,4.1*s+zz*s),(.075*s,.05,.08*s),lamp)
54
- for xx in [-1.65,1.65]:box('Arrow board post',(x+xx*s,y,1.8*s),(.19,.2,3.6*s),metal)
55
- pole=rod('Flag pole',(x,y,5.3*s),(x,y,8.4*s),.06,metal)
56
- obj('Sunrise racing pennant',mesh('Pennant',[(x,y,8.35*s),(x+1.4*s,y,7.8*s),(x,y,7.45*s)],[(0,1,2),(2,1,0)],green))
57
- obj('Flag gold inset',mesh('Pennant gold',[(x+.15*s,y-.01,8.11*s),(x+1.05*s,y-.01,7.81*s),(x+.15*s,y-.01,7.63*s)],[(0,1,2),(2,1,0)],yellow))
58
- cactus=mat('Saguaro green','529554',.85);rib=mat('Saguaro sunlit ribs','8CAC61',.85);thorn=mat('Cactus gold thorns','D4B66E',.9)
59
- def cactus_at(x,y,h):
60
- sphere('Saguaro trunk',(x,y,h*.5),(.36*h/4,.4*h/4,h*.5),cactus)
61
- for j in range(7):
62
- a=j*math.tau/7;rod('Cactus rib',(x+math.cos(a)*.33*h/4,y+math.sin(a)*.37*h/4,.3),(x+math.cos(a)*.28*h/4,y+math.sin(a)*.31*h/4,h*.9),.035*h/4,rib)
63
- for s,z in [(-1,.48),(1,.66)]:
64
- rod('Saguaro arm',(x,y,h*z),(x+s*h*.24,y,h*z),.22*h/4,cactus)
65
- sphere('Saguaro arm tip',(x+s*h*.24,y,h*(z+.12)),(.23*h/4,.25*h/4,h*.22),cactus)
66
- for i in range(int(h*3)):
67
- a=random.random()*math.tau;z=random.uniform(.5,h*.92);sphere('Cactus thorn',(x+math.cos(a)*.39*h/4,y+math.sin(a)*.4*h/4,z),(.035,.035,.06),thorn)
68
- for x,y,h in [(-19,14,6.8),(-16,23,4.2),(-16,34,3.7),(19,28,4.2),(27,39,6),(31,40,4.8),(-7,48,4),(43,75,6),(78,13,5),(-15,-15,6),(50,-42,5)]:cactus_at(x,y,h)
69
- # Roadside stones and desert scrub, placed outside the drivable ribbon.
70
- scrub=mat('Dry agave','8F9453',.95)
71
- for i in range(90):
72
- t=random.random()*8;p=sample(t,random.choice([-1,1])*random.uniform(14,23))
73
- if i%4:
74
- o=sphere('Tumbled sandstone',(p.x,p.y,.15),(random.uniform(.2,.7),random.uniform(.2,.65),random.uniform(.15,.4)),random.choice(rocks));o.rotation_euler.z=random.random()*6
75
- else:
76
- for j in range(9):
77
- a=j*math.tau/9;b=(p.x,p.y,0);tip=(p.x+math.cos(a)*1.1,p.y+math.sin(a)*1.1,random.uniform(.4,1.5))
78
- obj('Agave blade',mesh('Blade',[b,(p.x+.12,p.y+.12,.05),tip],[(0,1,2),(2,1,0)],scrub))
79
- cloud=mat('Soft cream clouds','FCFCED',1)
80
- # Puffy distant clouds remain beyond the cliffs, far from casting track shadows.
81
- for x,y,z,sz in [(-65,165,47,9),(0,175,39,8),(65,170,45,12),(122,155,54,11),(-80,70,50,8)]:
82
- for j in range(8):sphere('Cloud puff',(x+random.uniform(-sz,sz),y+random.uniform(-4,4),z+random.uniform(-3,4)),(random.uniform(3,7),4,random.uniform(2,5)),cloud)
83
- for o in set(bpy.data.objects)-before:o['environment_owned']=True
84
- # Avoid drawing camera wireframe over the intended shot.
85
- bpy.data.objects['Chase camera'].hide_set(True)
86
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
87
- print('Milestone 2: layered canyon, open rock arch, cacti, arrows, guardrails, cloud banks')
@@ -1,13 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- import bpy,math,datetime
4
- from pathlib import Path
5
- ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
6
- for name in ['West high mesa','West middle mesa','West ledge','Arch east tower','East foreground cliff','Arch west tower','Distant mesa','Far left mesa','Far right mesa','Natural sandstone arch']:
7
- o=bpy.data.objects[name]
8
- if not o.get('eroded'):
9
- for v in o.data.vertices:
10
- v.co.x+=.22*math.sin(v.co.z*1.3+v.co.y*.7);v.co.y+=.16*math.sin(v.co.z*2.1+v.co.x*.5)
11
- b=o.modifiers.new('Weathered sandstone edges','BEVEL');b.width=.28;b.segments=3;o['eroded']=True
12
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
13
- print('Weathered sandstone edges saved')
@@ -1,31 +0,0 @@
1
- # SPDX-License-Identifier: GPL-3.0-or-later
2
- # Copyright 2026 Volter AI, Inc.
3
- import bpy,math,bmesh
4
- from pathlib import Path
5
- ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
6
- exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
7
- # Reusable rounded rear bumper and flat-tread racing tyre geometry.
8
- verts=[];profile=[(-.225,.27),(-.225,.39),(-.18,.465),(.18,.465),(.225,.39),(.225,.27)]
9
- for x,r in profile:
10
- for i in range(32):a=i*math.tau/32;verts.append((x,r*math.cos(a),r*math.sin(a)))
11
- faces=[]
12
- for j in range(len(profile)):
13
- for i in range(32):faces.append((j*32+i,j*32+(i+1)%32,((j+1)%len(profile))*32+(i+1)%32,((j+1)%len(profile))*32+i))
14
- d=mesh('Rounded racing tire',verts,faces,tire);bm=bmesh.new();bm.from_mesh(d);bmesh.ops.recalc_face_normals(bm,faces=list(bm.faces));bm.to_mesh(d);bm.free()
15
- for p in d.polygons:p.use_smooth=True
16
- for i in range(6):
17
- root=bpy.data.objects['Kart.'+str(i)]
18
- for ob in root.children:
19
- if ' tire' in ob.name:ob.data=d;ob.rotation_euler=(0,0,0)
20
- if ' bumper' in ob.name and not ob.get('rounded_final'):
21
- ob.data=box('Temporary bumper mesh',(0,0,0),(.88,.29,.48),white).data.copy()
22
- temp=bpy.data.objects['Temporary bumper mesh'];bpy.data.objects.remove(temp,do_unlink=True)
23
- # Box helper stores unit corners; bake its dimensions into the mesh.
24
- for v in ob.data.vertices:v.co.x*=.44;v.co.y*=.145;v.co.z*=.24
25
- ob.location=(0,-1.47,.48);ob.scale=(1,1,1)
26
- m=ob.modifiers.new('Rounded bumper corners','BEVEL');m.width=.11;m.segments=4
27
- ob['rounded_final']=True
28
- # Tail reflector directly over the chrome pipes.
29
- if not bpy.data.objects.get('K%d bumper reflector'%i):box('K%d bumper reflector'%i,(0,-1.622,.59),(.31,.012,.065),red,root)
30
- bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
31
- print('Reusable flat-tread tyres and rounded rear bumpers saved')