@aqian0/dsh-unity 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE-UNITY-COMPANION.md +122 -0
  3. package/LICENSE.md +31 -0
  4. package/NOTICE.md +90 -0
  5. package/README.md +273 -2
  6. package/cordis.patch.yml +22 -0
  7. package/docs/design.md +297 -0
  8. package/icon.svg +16 -0
  9. package/lib/frontmatter.js +392 -0
  10. package/lib/gating.js +105 -0
  11. package/lib/harness.js +16 -0
  12. package/lib/index.js +171 -0
  13. package/lib/project.js +210 -0
  14. package/lib/registry.js +268 -0
  15. package/lib/requirements.js +214 -0
  16. package/lib/skills.js +191 -0
  17. package/lib/types/frontmatter.d.ts +84 -0
  18. package/lib/types/gating.d.ts +80 -0
  19. package/lib/types/harness.d.ts +152 -0
  20. package/lib/types/index.d.ts +75 -0
  21. package/lib/types/project.d.ts +93 -0
  22. package/lib/types/registry.d.ts +96 -0
  23. package/lib/types/requirements.d.ts +67 -0
  24. package/lib/types/skills.d.ts +54 -0
  25. package/lib/types/watch.d.ts +34 -0
  26. package/lib/watch.js +84 -0
  27. package/locale/en.json +6 -0
  28. package/locale/zh.json +6 -0
  29. package/package.json +70 -4
  30. package/skills/2d-pixel-perfect/SKILL.md +208 -0
  31. package/skills/2d-pixel-perfect/references/api-reference.md +81 -0
  32. package/skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
  33. package/skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
  34. package/skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
  35. package/skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
  36. package/skills/asset-transformer-toolkit/SECURITY.md +15 -0
  37. package/skills/asset-transformer-toolkit/SKILL.md +39 -0
  38. package/skills/asset-transformer-toolkit/references/create-importer.md +121 -0
  39. package/skills/asset-transformer-toolkit/references/lods.md +61 -0
  40. package/skills/asset-transformer-toolkit/references/rule-api.md +154 -0
  41. package/skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
  42. package/skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
  43. package/skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
  44. package/skills/audio-setup-mixers/SECURITY.md +16 -0
  45. package/skills/audio-setup-mixers/SKILL.md +127 -0
  46. package/skills/audio-setup-mixers/references/api.md +162 -0
  47. package/skills/build-gtk/SECURITY.md +16 -0
  48. package/skills/build-gtk/SKILL.md +200 -0
  49. package/skills/build-gtk/references/api-reference.md +33 -0
  50. package/skills/build-gtk/references/graph-api-gaps.md +96 -0
  51. package/skills/build-gtk/references/runtime-and-visualization.md +191 -0
  52. package/skills/build-gtk/references/state-machine-api.md +270 -0
  53. package/skills/build-gtk/references/where-the-docs-stop.md +49 -0
  54. package/skills/build-live-game/SKILL.md +159 -0
  55. package/skills/build-live-game/references/achievements.md +757 -0
  56. package/skills/build-live-game/references/apis.md +271 -0
  57. package/skills/build-live-game/references/authentication.md +431 -0
  58. package/skills/build-live-game/references/battlepass.md +904 -0
  59. package/skills/build-live-game/references/blueprints-and-samples.md +75 -0
  60. package/skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
  61. package/skills/build-live-game/references/cloud-code-modules.md +1276 -0
  62. package/skills/build-live-game/references/cloud-code.md +58 -0
  63. package/skills/build-live-game/references/cloud-save.md +464 -0
  64. package/skills/build-live-game/references/deployment.md +231 -0
  65. package/skills/build-live-game/references/orientation.md +30 -0
  66. package/skills/build-live-game/references/player-account.md +821 -0
  67. package/skills/build-live-game/references/remote-config.md +96 -0
  68. package/skills/build-live-game/references/services-overview.md +76 -0
  69. package/skills/build-live-game/references/tooling.md +375 -0
  70. package/skills/build-live-game/references/ugs-cli.md +86 -0
  71. package/skills/craft-game-floors/SECURITY.md +23 -0
  72. package/skills/craft-game-floors/SKILL.md +134 -0
  73. package/skills/craft-game-floors/references/art-direction.md +85 -0
  74. package/skills/craft-game-floors/references/camera-rigs.md +51 -0
  75. package/skills/craft-game-floors/references/character-motion.md +35 -0
  76. package/skills/craft-game-floors/references/game-audio.md +47 -0
  77. package/skills/craft-game-floors/references/game-feel.md +68 -0
  78. package/skills/craft-game-floors/references/game-shell.md +45 -0
  79. package/skills/craft-game-floors/references/live-floor.md +35 -0
  80. package/skills/craft-game-floors/references/placeholder-assets.md +35 -0
  81. package/skills/craft-game-floors/references/scene-lighting.md +52 -0
  82. package/skills/craft-game-floors/references/toon-shading.md +34 -0
  83. package/skills/craft-game-floors/references/vfx.md +40 -0
  84. package/skills/craft-game-floors/references/visual-scorecard.md +43 -0
  85. package/skills/create-2d-physics/SECURITY.md +16 -0
  86. package/skills/create-2d-physics/SKILL.md +128 -0
  87. package/skills/create-2d-physics/references/2d-physics-core.md +155 -0
  88. package/skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
  89. package/skills/create-tile-palette-or-rule-tiles/SKILL.md +95 -0
  90. package/skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
  91. package/skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
  92. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +37 -0
  93. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +219 -0
  94. package/skills/create-tile-palette-or-rule-tiles/references/ruletile.md +95 -0
  95. package/skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
  96. package/skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
  97. package/skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
  98. package/skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
  99. package/skills/fix-3d-physics-collisions/SECURITY.md +17 -0
  100. package/skills/fix-3d-physics-collisions/SKILL.md +139 -0
  101. package/skills/fix-3d-physics-collisions/references/collision-checklist.md +80 -0
  102. package/skills/fix-3d-physics-collisions/references/collision-debugger.md +18 -0
  103. package/skills/fix-3d-physics-collisions/references/console-errors-table.md +9 -0
  104. package/skills/fix-3d-physics-collisions/references/kinematic-trigger-facts.md +18 -0
  105. package/skills/fix-3d-physics-collisions/references/other-symptoms.md +29 -0
  106. package/skills/fix-3d-physics-collisions/references/raycast-checklist.md +8 -0
  107. package/skills/fix-3d-physics-collisions/references/topic-map.md +42 -0
  108. package/skills/fix-3d-physics-collisions/references/trigger-checklist.md +9 -0
  109. package/skills/fix-3d-physics-collisions/scripts/CollisionDebugger.cs +561 -0
  110. package/skills/generate-editor-search-query/SECURITY.md +17 -0
  111. package/skills/generate-editor-search-query/SKILL.md +117 -0
  112. package/skills/generate-editor-search-query/references/open-search-window.md +70 -0
  113. package/skills/generate-editor-search-query/references/query-patterns.md +124 -0
  114. package/skills/implement-in-app-purchases/SKILL.md +82 -0
  115. package/skills/implement-in-app-purchases/references/api-details.md +41 -0
  116. package/skills/implement-in-app-purchases/references/api-notes.md +105 -0
  117. package/skills/implement-in-app-purchases/references/codeless-catalog.md +197 -0
  118. package/skills/implement-in-app-purchases/references/convert-adapty.md +270 -0
  119. package/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
  120. package/skills/implement-in-app-purchases/references/convert-revenuecat.md +277 -0
  121. package/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
  122. package/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +46 -0
  123. package/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +197 -0
  124. package/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +302 -0
  125. package/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +357 -0
  126. package/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +253 -0
  127. package/skills/implement-in-app-purchases/references/platform-notes.md +55 -0
  128. package/skills/implement-in-app-purchases/references/pre-check.md +207 -0
  129. package/skills/implement-in-app-purchases/references/topic-map.md +46 -0
  130. package/skills/initialize-ai-navigation/SKILL.md +109 -0
  131. package/skills/initialize-ai-navigation/references/navigation-system.md +793 -0
  132. package/skills/initialize-ai-navigation/references/topic-map.md +66 -0
  133. package/skills/levelplay-unity-integration/SKILL.md +122 -0
  134. package/skills/levelplay-unity-integration/references/adding-more-ad-formats.md +15 -0
  135. package/skills/levelplay-unity-integration/references/banner-api.md +927 -0
  136. package/skills/levelplay-unity-integration/references/best-practices.md +604 -0
  137. package/skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
  138. package/skills/levelplay-unity-integration/references/examples.md +10 -0
  139. package/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
  140. package/skills/levelplay-unity-integration/references/initialization-api.md +851 -0
  141. package/skills/levelplay-unity-integration/references/interstitial-api.md +907 -0
  142. package/skills/levelplay-unity-integration/references/ios-setup.md +463 -0
  143. package/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
  144. package/skills/levelplay-unity-integration/references/privacy-settings.md +593 -0
  145. package/skills/levelplay-unity-integration/references/production-release-checklist.md +22 -0
  146. package/skills/levelplay-unity-integration/references/rewarded-api.md +918 -0
  147. package/skills/levelplay-unity-integration/references/step-0-new-or-migration.md +8 -0
  148. package/skills/levelplay-unity-integration/references/step-1-verify-environment.md +4 -0
  149. package/skills/levelplay-unity-integration/references/step-10-testing.md +15 -0
  150. package/skills/levelplay-unity-integration/references/step-2-business-goals.md +12 -0
  151. package/skills/levelplay-unity-integration/references/step-3-install-sdk.md +55 -0
  152. package/skills/levelplay-unity-integration/references/step-4-native-dependencies.md +22 -0
  153. package/skills/levelplay-unity-integration/references/step-5-app-key-and-ad-units.md +18 -0
  154. package/skills/levelplay-unity-integration/references/step-6-5-privacy-and-regulation.md +51 -0
  155. package/skills/levelplay-unity-integration/references/step-6-admob-keys.md +16 -0
  156. package/skills/levelplay-unity-integration/references/step-7-initialize.md +50 -0
  157. package/skills/levelplay-unity-integration/references/step-8-ad-unit-strategy.md +16 -0
  158. package/skills/levelplay-unity-integration/references/step-9-implement-ad-units.md +66 -0
  159. package/skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
  160. package/skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
  161. package/skills/localize-unity-project/SKILL.md +159 -0
  162. package/skills/localize-unity-project/references/api-notes.md +15 -0
  163. package/skills/localize-unity-project/references/cjk-fonts.md +83 -0
  164. package/skills/localize-unity-project/references/docs-map.md +42 -0
  165. package/skills/localize-unity-project/references/documentation-lookup.md +33 -0
  166. package/skills/localize-unity-project/references/locale-switching.md +17 -0
  167. package/skills/localize-unity-project/references/table-completeness-check.md +47 -0
  168. package/skills/localize-unity-project/references/translating-existing-project.md +47 -0
  169. package/skills/localize-unity-project/references/translation-strategy.md +41 -0
  170. package/skills/localize-unity-project/references/troubleshooting.md +12 -0
  171. package/skills/localize-unity-project/scripts/L10nBatchProcessor.cs +191 -0
  172. package/skills/localize-unity-project/scripts/LocalizedFontAsset.cs +18 -0
  173. package/skills/manage-sprite-atlas/SKILL.md +202 -0
  174. package/skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
  175. package/skills/manage-sprite-atlas/references/advanced-manual-authoring.md +19 -0
  176. package/skills/manage-sprite-atlas/references/api.md +382 -0
  177. package/skills/manage-sprite-atlas/references/best-practices.md +183 -0
  178. package/skills/manage-sprite-atlas/references/common-errors.md +123 -0
  179. package/skills/manage-sprite-atlas/references/complete-workflow.md +61 -0
  180. package/skills/manage-sprite-atlas/references/custom-packing.md +147 -0
  181. package/skills/manage-sprite-atlas/references/delivery-mechanism.md +30 -0
  182. package/skills/manage-sprite-atlas/references/key-requirements.md +21 -0
  183. package/skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
  184. package/skills/manage-sprite-atlas/references/namespaces.md +15 -0
  185. package/skills/manage-sprite-atlas/references/v2-architecture.md +21 -0
  186. package/skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
  187. package/skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
  188. package/skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
  189. package/skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
  190. package/skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
  191. package/skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
  192. package/skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
  193. package/skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
  194. package/skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
  195. package/skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
  196. package/skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
  197. package/skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
  198. package/skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
  199. package/skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
  200. package/skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
  201. package/skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
  202. package/skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
  203. package/skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
  204. package/skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
  205. package/skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
  206. package/skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
  207. package/skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
  208. package/skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
  209. package/skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
  210. package/skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
  211. package/skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
  212. package/skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
  213. package/skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
  214. package/skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
  215. package/skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
  216. package/skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
  217. package/skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
  218. package/skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
  219. package/skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
  220. package/skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
  221. package/skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
  222. package/skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
  223. package/skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
  224. package/skills/migrate-birp-to-urp/SECURITY.md +16 -0
  225. package/skills/migrate-birp-to-urp/SKILL.md +167 -0
  226. package/skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
  227. package/skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
  228. package/skills/migrate-birp-to-urp/references/conversion-and-rendering-triage.md +113 -0
  229. package/skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
  230. package/skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
  231. package/skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
  232. package/skills/migrate-birp-to-urp/references/parity-validation-and-troubleshooting.md +114 -0
  233. package/skills/migrate-birp-to-urp/references/preflight-and-urp-setup.md +195 -0
  234. package/skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
  235. package/skills/new-unity-project/SECURITY.md +26 -0
  236. package/skills/new-unity-project/SKILL.md +171 -0
  237. package/skills/new-unity-project/references/checklist.md +18 -0
  238. package/skills/new-unity-project/references/common-mistakes.md +15 -0
  239. package/skills/new-unity-project/references/skill-setup.md +66 -0
  240. package/skills/new-unity-project/references/step-1-concept.md +13 -0
  241. package/skills/new-unity-project/references/step-2-platforms-and-create.md +31 -0
  242. package/skills/new-unity-project/references/step-3-join-and-reconcile.md +16 -0
  243. package/skills/new-unity-project/references/step-4-source-control.md +9 -0
  244. package/skills/new-unity-project/references/step-5-packages.md +18 -0
  245. package/skills/new-unity-project/references/step-6-identity-and-floors.md +20 -0
  246. package/skills/new-unity-project/references/step-7-visual-baseline.md +75 -0
  247. package/skills/new-unity-project/references/step-8-first-commit.md +21 -0
  248. package/skills/new-unity-project/references/step-9-handoff.md +23 -0
  249. package/skills/optimize-audio/SECURITY.md +16 -0
  250. package/skills/optimize-audio/SKILL.md +120 -0
  251. package/skills/optimize-audio/references/diagnostics.md +42 -0
  252. package/skills/optimize-audio/references/troubleshooting.md +41 -0
  253. package/skills/optimize-audio/resources/audio-import-api.md +149 -0
  254. package/skills/optimize-audio/resources/platform-settings.md +48 -0
  255. package/skills/optimize-text-mesh-pro/SKILL.md +181 -0
  256. package/skills/optimize-text-mesh-pro/references/dynamic-atlas-and-profiling.md +28 -0
  257. package/skills/optimize-text-mesh-pro/references/topic-map.md +36 -0
  258. package/skills/optimize-web/SECURITY.md +16 -0
  259. package/skills/optimize-web/SKILL.md +157 -0
  260. package/skills/optimize-web/references/editor-csharp.md +120 -0
  261. package/skills/optimize-web/references/topic-map.md +49 -0
  262. package/skills/optimize-web/references/troubleshooting.md +45 -0
  263. package/skills/optimize-web/references/understand-request.md +19 -0
  264. package/skills/optimize-web/references/web-assets-quality.md +59 -0
  265. package/skills/optimize-web/references/web-player-settings.md +39 -0
  266. package/skills/optimize-web/references/web-profiling-memory.md +71 -0
  267. package/skills/optimize-web/scripts/WebOptimizer.cs +46 -0
  268. package/skills/optimize-web/scripts/toktx-examples.sh +11 -0
  269. package/skills/setup-multiplayer-services/SKILL.md +36 -0
  270. package/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
  271. package/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
  272. package/skills/setup-multiplayer-services/references/examples.md +33 -0
  273. package/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
  274. package/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
  275. package/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
  276. package/skills/setup-vivox-voice-chat/SECURITY.md +16 -0
  277. package/skills/setup-vivox-voice-chat/SKILL.md +166 -0
  278. package/skills/setup-vivox-voice-chat/references/api-reference-lookup.md +28 -0
  279. package/skills/setup-vivox-voice-chat/references/docs-topic-map.md +13 -0
  280. package/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
  281. package/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
  282. package/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
  283. package/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
  284. package/skills/setup-vivox-voice-chat/references/voice-channels.md +92 -0
  285. package/skills/shader-graph-create-custom-node/SKILL.md +25 -0
  286. package/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
  287. package/skills/sprite-editor/SECURITY.md +16 -0
  288. package/skills/sprite-editor/SKILL.md +66 -0
  289. package/skills/sprite-editor/references/api_reference.md +151 -0
  290. package/skills/sprite-editor/references/background.md +112 -0
  291. package/skills/sprite-editor/references/templates.md +72 -0
  292. package/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
  293. package/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
  294. package/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
  295. package/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
  296. package/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
  297. package/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
  298. package/skills/sprite-editor/scripts/README.md +134 -0
  299. package/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
  300. package/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
  301. package/skills/sprite-segment-3x3grid/SKILL.md +177 -0
  302. package/skills/sprite-segment-3x3grid/references/topic-map.md +37 -0
  303. package/skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
  304. package/skills/ui/SKILL.md +142 -0
  305. package/skills/ui-imgui/SKILL.md +180 -0
  306. package/skills/ui-imgui/references/gui-elements.md +156 -0
  307. package/skills/ui-imgui/references/templates.md +141 -0
  308. package/skills/ui-ugui/SKILL.md +217 -0
  309. package/skills/ui-ugui/references/layout-and-anchors.md +61 -0
  310. package/skills/ui-ugui/references/scrollview-setup.md +29 -0
  311. package/skills/ui-uitk/SKILL.md +229 -0
  312. package/skills/ui-uitk/references/common-issues.md +74 -0
  313. package/skills/ui-uitk/references/custom-elements.md +241 -0
  314. package/skills/ui-uitk/references/painter2d.md +282 -0
  315. package/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
  316. package/skills/ui-uitk/references/svg-icons.md +136 -0
  317. package/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
  318. package/skills/ui-uitk/references/uss-guide.md +138 -0
  319. package/skills/unity-cli/CHANGELOG.md +524 -0
  320. package/skills/unity-cli/SECURITY.md +68 -0
  321. package/skills/unity-cli/SKILL.md +160 -0
  322. package/skills/unity-cli/references/auth-license-cloud.md +318 -0
  323. package/skills/unity-cli/references/bootstrap-project.md +177 -0
  324. package/skills/unity-cli/references/build-run-test.md +555 -0
  325. package/skills/unity-cli/references/catalog-plugins.md +86 -0
  326. package/skills/unity-cli/references/ci-recipes.md +76 -0
  327. package/skills/unity-cli/references/cloud-automation.md +819 -0
  328. package/skills/unity-cli/references/cloud-workflows.md +19 -0
  329. package/skills/unity-cli/references/collaboration.md +533 -0
  330. package/skills/unity-cli/references/config-hub.md +239 -0
  331. package/skills/unity-cli/references/diagnostics-maintenance.md +718 -0
  332. package/skills/unity-cli/references/docs-workflow.md +179 -0
  333. package/skills/unity-cli/references/editor-targeting.md +29 -0
  334. package/skills/unity-cli/references/editors-install.md +490 -0
  335. package/skills/unity-cli/references/environment-variables.md +42 -0
  336. package/skills/unity-cli/references/exit-codes.md +47 -0
  337. package/skills/unity-cli/references/global-flags.md +32 -0
  338. package/skills/unity-cli/references/integration-advanced.md +1130 -0
  339. package/skills/unity-cli/references/notes.md +20 -0
  340. package/skills/unity-cli/references/notifications.md +39 -0
  341. package/skills/unity-cli/references/playmode-verification-loop.md +279 -0
  342. package/skills/unity-cli/references/projects-templates.md +997 -0
  343. package/skills/unity-cli/references/scene-editing-preflight.md +25 -0
  344. package/skills/unity-cli/references/setup-and-help.md +54 -0
  345. package/skills/unity-cli/references/version-control.md +612 -0
  346. package/skills/unity-package-management/SKILL.md +169 -0
  347. package/skills/unity-package-management/references/discovering-packages.md +66 -0
  348. package/skills/unity-package-management/references/headless-run.md +31 -0
  349. package/skills/unity-package-management/references/installer-script.md +92 -0
  350. package/skills/unity-package-management/references/select-packages.md +126 -0
  351. package/skills/unity-pipeline/SECURITY.md +17 -0
  352. package/skills/unity-pipeline/SKILL.md +205 -0
  353. package/skills/unity-pipeline/references/csharp-eval.md +23 -0
  354. package/skills/unity-pipeline/references/multiplayer-play-mode.md +103 -0
  355. package/skills/urp-postprocessing/SECURITY.md +16 -0
  356. package/skills/urp-postprocessing/SKILL.md +188 -0
  357. package/skills/urp-postprocessing/references/code-templates.md +150 -0
  358. package/skills/urp-postprocessing/references/effect-reference.md +86 -0
  359. package/skills/validate-urp-render-graph-renderer-feature/SKILL.md +92 -0
  360. package/skills/validate-urp-render-graph-renderer-feature/references/validation-checklist.md +179 -0
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: craft-game-floors
3
+ description: "Makes a Unity game look and feel finished: art style, lighting, juice, sound, menus, saves and look scoring. Use when building a new game's first playable version, or when a game looks like programmer art, feels flat or silent, or needs polish."
4
+ allowed-tools:
5
+ - Bash
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ ---
10
+
11
+ # Craft Game Floors
12
+
13
+ A functional game that looks and feels like programmer art reads as a failure to the person who
14
+ asked for it. This skill is the craft layer: **floors** — disciplines where every game needs a
15
+ minimum and the engine's defaults are unacceptable — each carried by a reference below with
16
+ opinionated values, worked examples to imitate, and a verify step. The floors are the heart of the
17
+ **paved** path (Unity's default scaffolding for agent-built games: assumptions declared up front,
18
+ reversible on a word); in this skill, "paved" simply means these floors are always on unless the
19
+ user declines one.
20
+
21
+ **Before starting any floor or diagnosis, open and read the matching reference below and the Unity
22
+ docs pages it links** — your engine knowledge may be out of date, wrong, or for a different
23
+ version. Name the files and pages you read in your report. **Do only what's asked. Don't change
24
+ unrelated assets or files. Avoid long explanations.**
25
+
26
+ Two ways in, same floors:
27
+
28
+ - **During project creation** — the `new-unity-project` skill loads this one and carries the
29
+ floors through the build in the order below.
30
+ - **Mid-project, on any craft ask** ("fix the look", "add sound", "it feels flat", "make a title
31
+ screen", "score it") — jump straight to the matching reference, after the mid-flow check below.
32
+
33
+ **Scope by the ask**: a request that authorizes changes ("fix", "add", "polish") gets the floor
34
+ applied; an assessment-only ask ("score it", "what should I fix?") gets the scored board and
35
+ recommendations, with no project modifications until the user says go.
36
+
37
+ ## Entering mid-flow
38
+
39
+ The references assume an **art bible** (style statement + fixed palette) and, where audio meets
40
+ UI, the **mixer handshake** (exposed params `MusicVol`/`SFXVol`). On an existing project, run
41
+ these in order before the asked-for floor:
42
+
43
+ 1. **Restore point** — confirm a clean commit to roll back to, or create one, before any change.
44
+ 2. **Render pipeline** — read `GraphicsSettings.currentRenderPipeline`: the look floors' verifies
45
+ are written for URP; on Built-in or HDRP, apply the opinions, name the pipeline gap, and skip
46
+ the URP-typed checks.
47
+ 3. **Art bible** — look for a `Palette` type or an art-bible note (CLAUDE.md, docs); if none
48
+ exists, write the three-line bible from the game's current look first — retro-tinting later is
49
+ the expensive order.
50
+ 4. **Identity (live floor only)** — verify player identity with a live probe (services
51
+ initialized and a PlayerId present), never by assuming an earlier setup step ran.
52
+ 5. **Scope the done gate** to the surface you touched: a title-screen session scores the shell
53
+ and look axes, not the whole board.
54
+
55
+ **A floor fills an engine default, never a developer's choice.** If the project already has its
56
+ own controller, camera, shader, palette or style, keep it, apply only the floor's opinions that
57
+ don't conflict, and name the difference in the report. Write an art bible only from choices the
58
+ developer has made, and ask before adding one mid-project.
59
+
60
+ ## The floors — numbered in build order, read each at its moment
61
+
62
+ 1. [art-direction](references/art-direction.md) — before the first material, light, or UI element
63
+ 2. [scene-lighting](references/scene-lighting.md) — with the visual baseline (3D)
64
+ 3. [toon-shading](references/toon-shading.md) — when the art bible picks a cel/toon style (3D)
65
+ 4. [camera-rigs](references/camera-rigs.md) — first gameplay camera (has a 2D section)
66
+ 5. [placeholder-assets](references/placeholder-assets.md) — first missing asset
67
+ 6. [character-motion](references/character-motion.md) — first moving character (3D-leaning)
68
+ 7. *(the playable loop lands here — loop before content, one system per pass)*
69
+ 8. [game-feel](references/game-feel.md) — the feel pass, after the loop
70
+ 9. [vfx](references/vfx.md) — with the feel pass (has a 2D section)
71
+ 10. [game-audio](references/game-audio.md) — before done
72
+ 11. [game-shell](references/game-shell.md) — before done (2D backdrop delta). Before the first TextMeshPro text, import TMP Essentials (see the reference's failure table).
73
+ 12. [live-floor](references/live-floor.md) — with the shell (services before gameplay code)
74
+ 13. [visual-scorecard](references/visual-scorecard.md) — **the done gate, always last; run it once a playable loop exists.** During project creation, stop at the lit-baseline capture and skip the gate.
75
+
76
+ Mid-project asks enter at the matching number and pull earlier floors only as the mid-flow check
77
+ requires (the bible, the pipeline, the identity probe).
78
+
79
+ **Resolving `<VERSION>` in the references' doc links** — prefer WebFetch of the exact page over
80
+ WebSearch: for `docs.unity.com/en-us/engine/<VERSION>` manual and script-reference pages, use the
81
+ project's Editor stream (e.g. `6000.3`) from `ProjectSettings/ProjectVersion.txt`, and the same
82
+ stream for the remaining `docs.unity3d.com/<VERSION>/Documentation` pages; for
83
+ `docs.unity3d.com/Packages/<package>@<VERSION>` pages, use the installed package's major.minor
84
+ from `Packages/manifest.json` or the `Library/PackageCache` folder name; the
85
+ `docs.unity.com/en-us/<service>.md` services pages are unversioned.
86
+
87
+ Routing follows the game's 2D/3D nature; **the 2D look floor (sprite art direction, 2D lights,
88
+ sprite placeholders) is not yet covered** — on a 2D game, say so at those beats rather than
89
+ applying 3D instructions. The scorecard's 2D anchor set still applies.
90
+
91
+ ## The boundary (what this skill is not)
92
+
93
+ This skill owns **opinionated creation and floors** — which values, in what order, to what bar.
94
+ Catalog neighbours own **mechanics on existing setups**: volume/post mechanics →
95
+ `urp-postprocessing` · routing sources into existing mixer groups → `audio-setup-mixers` · audio
96
+ import/memory → `optimize-audio` · UI framework choice and construction → `ui` · font assets →
97
+ `optimize-text-mesh-pro` · backend services → `build-live-game` · pixel-perfect 2D →
98
+ `2d-pixel-perfect`. When an ask is purely mechanical, route there; when it's "make it good," it's
99
+ this skill, which then delegates the mechanics. If this index wants to grow, the new thing is a
100
+ catalog skill routed by the prompt, not another floor — a floor must apply to *every* game.
101
+
102
+ ## The done gate
103
+
104
+ A craft session ends with [visual-scorecard](references/visual-scorecard.md)'s board — scored
105
+ frames, not a green compile. In order:
106
+
107
+ 1. **Score** all six axes per the scorecard. All six at 3 or better is the floor.
108
+ 2. **Fix pass** — anything below 3 gets its fix before done (assessment-only asks: scores and
109
+ recommendations, no fixes). If a fix doesn't work, reread the relevant reference and its
110
+ linked documentation before trying variations.
111
+ 3. **Console** — confirm zero console errors.
112
+ 4. **Play check** — enter Play mode and check the touched behavior with `Debug.Log` lines you
113
+ added for the purpose. If the fix pass or this check fails, reread the relevant reference and
114
+ its linked documentation before trying variations.
115
+
116
+ ## Final report
117
+
118
+ State: which floors ran and which references were read · the board (or the scoped axes) before and
119
+ after the fix pass · every incidental side effect — packages installed, files or settings edited,
120
+ assets imported — and any follow-up the user needs · any floor skipped or gap named (the 2D look
121
+ floor, a declined install, a missing neighbour skill), so the user knows what deeper guidance was
122
+ skipped.
123
+
124
+ ## Common mistakes
125
+
126
+ - **Polishing without a bible** — fixing one object's look against no palette; write the
127
+ three-line bible first, even mid-project.
128
+ - **Replacing a developer's choice with a floor recipe** — an existing custom controller,
129
+ camera, shader or palette stays; the fix pass never swaps it for the floor's default.
130
+ - **Treating a floor as a feature** — floors are defaults; the user declines one with a word, and
131
+ the decline is recorded in the report, never argued.
132
+ - **Running the mechanics from memory** when a neighbour skill owns them — route and delegate.
133
+ - **Skipping the done gate** because the change was small — scope it down instead.
134
+ - **Applying 3D look instructions to a 2D game** — name the gap instead.
@@ -0,0 +1,85 @@
1
+ # Art Direction
2
+
3
+ > Craft reference for the `craft-game-floors` skill. **Load:** before the first material, light, or UI element exists — in the creation flow, that is the start of the build (the paved default path); in an ad-hoc session, load it first whenever no art bible or `Palette` source exists yet, because every other floor depends on this one.
4
+
5
+ ## The art bible — three lines, written first
6
+
7
+ Before the first material, write and print:
8
+
9
+ 1. **Style statement** — one sentence ("Cel-shaded storybook interior: soft toon bands, chunky outlines, warm afternoon light").
10
+ 2. **Palette** — 5–6 hex values + one accent, each named for its job (floor, walls, character-primary, character-secondary, props, shadow, accent/XP). Derive from the prompt's mood; keep saturation in one family.
11
+ 3. **Mood** — the light source story ("late sun through windows, cool shadow bounce").
12
+
13
+ ## Three worked bibles — imitate, then vary
14
+
15
+ Copy the closest one and re-derive the hexes from the prompt's own nouns; never ship these verbatim twice.
16
+
17
+ **Hearthside** (cozy interior)
18
+
19
+ - Style: "Cel-shaded storybook café: soft toon bands, chunky outlines, everything slightly rounded."
20
+ - Palette: floor `#8A6F4D` honeyed oak · walls `#E8D9BE` cream plaster · character-primary `#C96F4A` terracotta · character-secondary `#F4E7CE` oat · props `#5E7B5A` sage · shadow `#6B7A8F` cool slate · accent `#F2B134` amber.
21
+ - Mood: late sun through west windows; cool blue-gray shadow bounce; lamps warm the corners.
22
+
23
+ **Neon Ricochet** (bright arcade)
24
+
25
+ - Style: "Flat-shaded neon arcade: saturated shapes on near-black courts; everything that scores, glows."
26
+ - Palette: floor `#141A2E` ink navy · bounds `#253057` midnight · character-primary `#19D3F0` electric cyan · character-secondary `#F037A5` hot magenta · props `#7A5CF0` violet · shadow `#0B0F1E` abyss · accent `#F7E04B` laser yellow.
27
+ - Mood: no sun — the pieces are the light source; dim cool key, emissives and glow carry the frame.
28
+
29
+ **Derelict Signal** (moody sci-fi)
30
+
31
+ - Style: "Grounded sci-fi interior: desaturated steel broken by one signal color, hard light through grates."
32
+ - Palette: floor `#3A3F46` deck gunmetal · walls `#2A2E35` hull plate · character-primary `#C8CCD4` worn ceramic · character-secondary `#5A6472` slate · props `#4E5A50` olive drab · shadow `#1C2026` void blue · accent `#FF6A2B` signal orange.
33
+ - Mood: one hard cool key through ceiling grates; the accent reads as emergency lighting; shadows stay deep but blue, never black.
34
+
35
+ ## Palette as the single source
36
+
37
+ Author one `Palette.cs` (static Color fields from the hex values) or a ScriptableObject. **Every** color in the project reads from it: materials, fog, light tints, particles, UI, text. The test is absolute: `Color.gray`, default Lit material, and default skybox never appear in a capture.
38
+
39
+ ## Style is a system, not a shader on the hero
40
+
41
+ Whatever the style is, it covers *everything in frame*: character, walls, props, floor, sky, UI. The proven failure mode is a cel-shaded character in a default-lit room — the game reads as broken exactly at the seam. When the bible picks a toon pass, the pass applies frame-wide.
42
+
43
+ ## Primitive characters that still read
44
+
45
+ Agent-built characters are assembled from primitives. Rules that make them charming instead of sad:
46
+
47
+ - **Silhouette first** — the character must be identifiable filled flat black. Exaggerate the identifying features (ears, tail, snout) ~30% past realistic.
48
+ - **Taper and tilt** — scale limb primitives asymmetrically (0.8× at the far end) and tilt joints a few degrees; nothing organic is axis-aligned.
49
+ - **Two-tone minimum** — body primary + belly/face secondary from the palette, plus dark accents (paw tips, ear interiors).
50
+ - **Nothing is statuary** — an idle character breathes: a 2–3 line sine bob on the body and a slow tail sway. Cheap, transformative.
51
+
52
+ ## Worked character: Scout, the fox courier
53
+
54
+ A complete build to imitate. Parent chest, head, legs, and tail to the body; snout, nose, and ears to the head. Scales are local (x, y, z) against a body ~1 unit long; rotations in degrees; palette roles come from the active bible.
55
+
56
+ | # | Part | Primitive | Scale | Placement and tilt | Palette role |
57
+ |---|---|---|---|---|---|
58
+ | 1 | Body (root) | Sphere | 0.50, 0.42, 0.62 | egg lying along +Z | character-primary |
59
+ | 2 | Chest | Sphere | 0.34, 0.30, 0.30 | embedded front-under of body | character-secondary |
60
+ | 3 | Head | Sphere | 0.32, 0.30, 0.32 | above body front; pitch down 6 | character-primary |
61
+ | 4 | Snout | Sphere | 0.14, 0.10, 0.20 | head front; pitch up 4 | character-secondary |
62
+ | 5 | Nose | Cube | 0.05 uniform | snout tip; yaw 45 (diamond) | shadow |
63
+ | 6 | Ears ×2 | Cube | 0.10, 0.18, 0.04 | head top; roll ±12 outward | primary; inner face shadow |
64
+ | 7 | Legs ×4 | Capsule | 0.09, 0.16, 0.09 | under body corners; tilt 3–5 off vertical | character-primary |
65
+ | 8 | Paw tips ×4 | Sphere | 0.072 uniform | leg ends (the 0.8× taper) | shadow |
66
+ | 9 | Tail | Capsule | 0.12, 0.30, 0.12 | body rear; pitch back 55 | character-primary |
67
+ | 10 | Tail tip | Sphere | 0.10 uniform | tail end | character-secondary |
68
+
69
+ Idle: sine-bob the body ±2% of its height at ~0.6 Hz; sway the tail ±8° at ~0.3 Hz. The 0.18-tall ears are the ~30% silhouette exaggeration — keep it.
70
+
71
+ ## Environment floor
72
+
73
+ No bare planes. Every room gets: floor material distinct from walls, baseboard/trim geometry at wall joins, 2–3 props scaled against the character, and one light-story element (window, lamp).
74
+
75
+ ## Verify
76
+
77
+ Machine check first, capture second:
78
+
79
+ - Eval (via `unity-cli`): walk every `Renderer` and assert no `sharedMaterial` named `Default-Material`, and that `RenderSettings.skybox` is a palette-derived material, not the template sky. Any hit names its object. **Scope the fixes by the ask**: hits on the surface the request authorized get fixed before capturing (a full-look pass authorizes everything; a title-screen ask authorizes the title backdrop); hits outside that scope are never edited uninvited — report them as follow-up recommendations instead.
80
+ - Grep the project scripts for literal `Color.` constants outside the `Palette` source; a hit means the single source is being bypassed.
81
+ - Capture the character beside a doorway: scale and palette read together. A gray or default-lit surface in the frame fails the bible, not the capture.
82
+
83
+ ## Expansion scope
84
+
85
+ Reference palettes per genre/mood beyond these three, texture and detail passes, integration with generated 2D/3D assets, style-transfer onto imported models, per-platform color calibration.
@@ -0,0 +1,51 @@
1
+ # Camera Rigs
2
+
3
+ > Craft reference for the `craft-game-floors` skill. Relative links in this file resolve to the skill directory. **Load:** whenever a gameplay camera is needed — never hand-roll one. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The opinion
6
+
7
+ The camera is half of game feel and the first thing a hand-rolled implementation gets wrong (a hand-rolled follow camera has shipped pointing at the outside of the house it was meant to film). Builds under these floors use **Cinemachine** (`com.unity.cinemachine` — on the paved package list, this skill's default install set, for any gameplay camera, 2D rigs included; install it if absent) and one of the recipes below. A hard-parented or static camera never ships.
8
+
9
+ **On new installs, take the current major — never 2.x.** On Unity 6 editors Cinemachine ships as a core package whose major the editor picks; where a version can be pinned, pin the 3.x line or newer (e.g. `com.unity.cinemachine@3.1`). 2.x is a different API surface (`CinemachineVirtualCamera` / `CinemachineCollider` vs the `CinemachineCamera` / `CinemachineDeoccluder` family from 3.x on), and package-install examples elsewhere still pin 2.x versions — every recipe here is written against the 3.x-family types and will not compile on 2.x.
10
+
11
+ **Existing projects: check the installed major first** (`Packages/manifest.json`), before any package change. A project already on Cinemachine **2.x** keeps it — upgrading the package breaks existing camera scripts across the API break, and a restore point recovers but does not make them compatible. On 2.x, apply this file's *opinions* (framing, damping, dead zones, FOV, shake-via-impulse) through the 2.x equivalents (`CinemachineVirtualCamera`, its Body/Aim stages, `CinemachineImpulseSource`), skip the 3.x-typed recipes and verifies, and name the version gap in the report. Migrating 2.x → 3.x is never a side effect of a craft fix: it happens only as an explicitly scoped ask, agreed with the user, following the [Cinemachine upgrade guide](https://docs.unity3d.com/Packages/com.unity.cinemachine@<VERSION>/manual/CinemachineUpgradeFrom2.html) and verified end-to-end afterward.
12
+
13
+ ## Third-person follow (the 3D default)
14
+
15
+ [`CinemachineCamera`](https://docs.unity3d.com/Packages/com.unity.cinemachine@<VERSION>/manual/CinemachineCamera.html) with:
16
+
17
+ - **Third Person Follow** body — camera distance ~4–6 for interiors, shoulder offset (~0.5 right, ~1.2 up) so the character sits at the lower-third intersection, not dead center.
18
+ - **Damping** ~0.5–1.0 s on position — the camera *settles*, never teleports.
19
+ - **The rig inherits the follow target's yaw.** On a character that turns toward its movement, the camera whips to face whatever the character faces — hedges, walls, the void. Raise rotation damping, or follow a yaw-damped proxy transform instead of the character root.
20
+ - **[Deoccluder](https://docs.unity3d.com/Packages/com.unity.cinemachine@<VERSION>/manual/CinemachineDeoccluder.html) — interiors default OFF.** The interior recipe: skip the deoccluder, frame high enough that walls can't eat the lens; add one only for exteriors/orbit cams. Its tuning knobs go by different names across CM3 minor versions — verify the fields on the *installed* version before touching them — and its failure modes are in the table below.
21
+ - **FOV 50–60** for interiors (default 40 feels like a telescope indoors; 90 feels like a fisheye).
22
+ - Slight **look-ahead** in movement direction when the game is about exploring toward things.
23
+
24
+ ## Orbit / inspect
25
+
26
+ [`CinemachineOrbitalFollow`](https://docs.unity3d.com/Packages/com.unity.cinemachine@<VERSION>/manual/CinemachineOrbitalFollow.html) with three-ring setup for player-rotatable cameras; recenter after ~2 s idle. Use for creature/vehicle games where the subject is the point.
27
+
28
+ ## 2D follow
29
+
30
+ `CinemachineCamera` + **Position Composer**: dead zone ~0.1×0.1 (breathing room for small motion), look-ahead 0.5–1 s along velocity, damping asymmetric (loose horizontal, tight vertical for platformers). Pixel-art projects: pair with `2d-pixel-perfect`.
31
+
32
+ ## Feel hooks
33
+
34
+ Screenshake and impact kicks route through **Cinemachine Impulse** (source on the event, listener on the camera) — the feel pass owns when they fire and how hard. Never move the camera transform directly for shake.
35
+
36
+ ## Failure modes (deoccluder)
37
+
38
+ | Symptom | Root cause | Fix |
39
+ |---|---|---|
40
+ | interior camera collapses onto the character (a configured 4.2 m distance measured at 0.7 m) | default deoccluder settings resolving against room geometry | disable the deoccluder indoors; reframe higher |
41
+ | Editor stack overflow in Play mode (seen on 6000.4–6000.6) | the deoccluder's obstacle resolution recursing when an obstacle crosses the camera–target line | remove or disable the deoccluder on that camera |
42
+ | deoccluder silently does nothing | Group Framing active on the same camera | pick one — they don't compose |
43
+ | camera flips on slopes/loops | the deoccluder resolves against world-up while the target's local up differs | disable it for that rig |
44
+
45
+ ## Verify
46
+
47
+ Capture during movement (via `unity-cli`): player on the lower-third line, no wall in front of the lens, horizon level. Then the measured check, by eval rather than eyeball: read the rig's configured camera distance off the Third Person Follow component and compare it to the live `(camera.transform.position − target.position).magnitude` — if the live value is under ~80% of the configured one, something is fighting the rig; disable the deoccluder first and re-measure. Walk the player into a corner and repeat both the capture and the distance read.
48
+
49
+ ## Expansion scope
50
+
51
+ State-driven camera sets (gameplay/menu/photo), blend tuning, target groups for multiplayer framing (note: the deoccluder and Group Framing don't compose), split-screen, cutscene dolly tracks, mobile gyro/touch orbit.
@@ -0,0 +1,35 @@
1
+ # Character Motion
2
+
3
+ > Craft reference for the `craft-game-floors` skill. Relative links in this file resolve to the skill directory. **Load:** when a character glides instead of walks, freezes instead of idles, or was assembled from primitives with no animation source. [art-direction](art-direction.md) owns silhouette and proportion; this reference makes the character *move* like a character. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The opinion
6
+
7
+ A character that translates across the floor in a fixed pose reads as a chess piece. Agent-built characters rarely have rigs — so the paved answer (this skill's default, rig or no rig) is **procedural motion**: a handful of sine waves and springs, driven by velocity, layered on the primitive hierarchy. It is cheap, tunable live via `unity-cli` eval, and the single biggest step from "tech demo" to "game".
8
+
9
+ ## The layers (one ~80-line component)
10
+
11
+ Drive everything from normalized speed (`speed / maxSpeed`) so it scales:
12
+
13
+ - **Gait bob** — body y-offset: `sin(t · stepFreq · 2π) · bobAmp · speedN`, stepFreq ~2.5 Hz at full speed. Add a half-frequency roll (z-rotation, ~2°) so weight shifts side to side.
14
+ - **Limb swing** — legs/arms rotate on x via the same sine, opposite limbs phase-shifted by π. Even cylinders read as walking when they alternate.
15
+ - **Lean** — pitch the body into acceleration (~8° at full accel) and bank into turns (~5°). Compute from velocity delta; damp it.
16
+ - **Squash & stretch** — jump: stretch y 1.1 on rise; land: squash y 0.85 / xz 1.1 for 0.1 s, ease out with the feel pass's Ease helper.
17
+ - **Secondary motion** — tail, ears, antennae follow with delay: each segment lags its parent's rotation by 0.05–0.1 s (a one-line exponential damp is enough). This is where charm lives.
18
+ - **Head look** — head yaws toward movement direction or the nearest point of interest, clamped ~60°, damped.
19
+ - **Settle, never freeze** — on stop, blend gait amplitude to zero over 0.3 s and hand off to the idle breathe/sway (from [art-direction](art-direction.md)); a hard stop at full pose is the giveaway.
20
+
21
+ ## Physics note (paid for live, docs-confirmed)
22
+
23
+ The [collider interaction rules](https://docs.unity.com/en-us/engine/<VERSION>/manual/physics-section/physics-overview/collision-section/collider-interactions/create-trigger.md) govern when trigger events fire; the trap this floor pays for: a NavMesh-driven character with its CharacterController disabled has **no collider at all**, so pickups' `OnTriggerEnter` silently never fires. Keep a kinematic Rigidbody + trigger SphereCollider on the character root so interaction survives whichever component is steering. NavMesh surfaces, agents, and links themselves are `initialize-ai-navigation`'s job — this note only keeps the character touchable while an agent drives it.
24
+
25
+ ## Tuning
26
+
27
+ Expose bobAmp, stepFreq, lean, squash on the component; tune live in Play mode via eval → capture → eval (no recompiles — the proven inner loop). Caveat: a timed-out `eval` may still have executed — mutations are not idempotent-safe; put anything long through `run_script`.
28
+
29
+ ## Verify
30
+
31
+ Capture three frames during movement at intervals that don't alias the gait — at 2.5 Hz, samples one second apart land after exactly five half-cycles and can repeat the pose, so sample at ~0.7 s and ~1.3 s offsets (or any interval that isn't a multiple of the configured step period). The pose must differ visibly in all three. Run the machine form of the same check alongside: eval-sample the body's `localPosition.y` and one limb's `localRotation` at the three timestamps — all three samples must differ. Then stop the character and sample twice 0.5 s apart: the values must still differ (breathing, not frozen); if they match, the settle blend never handed off to idle — check the amplitude blend-out. Finish with one interaction check: drive the character over a pickup and assert its `OnTriggerEnter` fired (counter or log line) — a silent pickup means the kinematic Rigidbody or trigger collider is missing from the root.
32
+
33
+ ## Expansion scope
34
+
35
+ Animator blend trees and state machines, humanoid retargeting onto imported/generated rigs, foot IK and slope adaptation, animation events driving feel/audio hooks, per-genre locomotion profiles.
@@ -0,0 +1,47 @@
1
+ # Game Audio
2
+
3
+ > Craft reference for the `craft-game-floors` skill. Relative links in this file resolve to the skill directory. **Load:** during the feel pass, or whenever a game has zero or unrouted audio. Routing sources into *existing* mixer groups lives in `audio-setup-mixers`; import/memory settings in `optimize-audio`; everything else about the mixer is owned here. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The floor rule
6
+
7
+ **Zero audio reads as broken, not minimal.** The paved minimum — this skill's always-on floor, in every build it touches: pickup/confirm blip · milestone sting · ambient bed · UI click. Silence is never the default; "no audio assets" is not an excuse because placeholders can be synthesized.
8
+
9
+ ## Synthesized placeholders (no assets, no downloads)
10
+
11
+ Generate PCM in code — either write WAVs from an editor script or build clips at runtime with `AudioClip.Create`. Recipes that sound intentional rather than like a test tone:
12
+
13
+ - **Pickup blip**: sine, 880→1320 Hz pitch envelope over 90 ms, fast decay. Vary pitch ±8% per play so repeats don't grate.
14
+ - **Milestone sting**: three ascending notes of a major triad (e.g. 523/659/784 Hz), 120 ms each with slight overlap, soft square or sine.
15
+ - **Ambient bed**: 4–8 s loop of low-passed noise (brown noise ≈ integrate white noise, clamp) at low volume — "room tone" — optionally a slow sine swell underneath.
16
+ - **UI click**: 20 ms filtered noise burst.
17
+
18
+ Always apply a 5 ms fade-in/out envelope to every clip — raw edges click.
19
+
20
+ ## The mixer (owned here)
21
+
22
+ One AudioMixer: `Master → Music, SFX, Ambient`. Every AudioSource routes to a group — nothing on Master directly.
23
+
24
+ - **Creation is editor-UI work** in the [Audio Mixer window](https://docs.unity.com/en-us/engine/<VERSION>/manual/audio/mixer/overview.md) — there is no public scripting API for creating mixers or groups; the mechanics live under that manual section. Once the groups exist, `audio-setup-mixers` routes every source into the right one — that skill *routes only*: it does not create mixers or groups, set volumes, expose parameters, or configure ducking. Those are this file's recipes.
25
+ - **Exposed parameters.** Expose each group's Volume to script (mechanics on the Audio Mixer manual page above) and name the parameters **MusicVol** and **SFXVol** — the shell's settings sliders bind to these names. Set from script with [`mixer.SetFloat("MusicVol", dB)`](https://docs.unity.com/en-us/engine/<VERSION>/script-reference/unityengine/audio/audiomixer/setfloat.md) — its call-timing constraint and its snapshot interaction are documented on that page; the ducking rule below exists because of that interaction.
26
+ - **Ducking — never through the parameter the sliders own.** Once a settings slider calls
27
+ `SetFloat("MusicVol", …)`, snapshots stop controlling that parameter, so snapshot ducking of the
28
+ same Music volume silently dies the first time the user touches the slider. Separate the two:
29
+ expose MusicVol/SFXVol for the sliders on the groups' own Volume, and duck through a different
30
+ mechanism — a Duck Volume effect on the Music group fed by a Send from SFX (sidechain; threshold
31
+ high enough that blips don't pump the music), or a snapshot that lowers a *separate*
32
+ duck-dedicated attenuation the sliders never touch. The sidechain route is the floor default
33
+ because it coexists with the sliders by construction.
34
+
35
+ **Headless floor:** mixer *authoring* needs editor UI, so a fully headless session routes volumes through one static gain layer (Music/SFX floats every source multiplies in) and leaves mixer creation as the first human-session upgrade — the settings sliders bind either way.
36
+
37
+ ## Placement
38
+
39
+ 2D (no spatialization) for UI and milestone sounds; spatialized 3D (`spatialBlend = 1`, sensible min/max distance) for world pickups and ambient emitters. Force short 3D clips to mono (`optimize-audio`).
40
+
41
+ ## Verify
42
+
43
+ Play-mode check via `unity-cli` eval, branched by implementation. **Mixer build:** trigger a pickup and a milestone, assert the sources played (`AudioSource.isPlaying` true during the clip, or `time` advanced), and assert the list of sources with a null `outputAudioMixerGroup` is empty — a null group means route that source. **Headless gain-layer build:** `outputAudioMixerGroup` is legitimately null everywhere; instead assert every source's volume multiplies through the gain layer (set the Music float to 0, assert the music source's effective volume followed; restore it). Either branch: a source that never plays means the clip was never generated — confirm the synth script ran and the clip's `length` is > 0. Caveat: a timed-out `eval` may still have executed — mutations are not idempotent-safe; put anything long through `run_script`.
44
+
45
+ ## Expansion scope
46
+
47
+ Generated audio via asset services, adaptive/vertical music layers, footstep surface systems, audio LOD and voice management, loudness normalization to platform targets.
@@ -0,0 +1,68 @@
1
+ # Game Feel
2
+
3
+ > Craft reference for the `craft-game-floors` skill. Relative links in this file resolve to the skill directory. **Load:** in the feel pass after the core loop works, and whenever actions feel flat, snappy-less, or unacknowledged. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The floor rule
6
+
7
+ **Every player-visible state change gets a visible + audible answer within 100 ms.** A pickup that just disappears, a bar that snaps, a level-up that's only text — each reads as broken, not minimal.
8
+
9
+ ## The utility (author once, no external deps)
10
+
11
+ One static `Ease` class — three curves plus a coroutine tween helper — is enough that nobody reaches for a package. The tween runs on **unscaled time by default** so pause fades and UI keep moving at `Time.timeScale = 0`; pass `unscaled: false` for gameplay tweens that should freeze under pause or hit-stop.
12
+
13
+ ```csharp
14
+ public static class Ease
15
+ {
16
+ // The three curves the recipes name — OutCubic, OutBack (classic 1.70158 overshoot) and
17
+ // OutElastic — use the standard formulas from an easing reference such as https://easings.net.
18
+
19
+ // The opinionated part: tweens run on UNSCALED time by default, so shell and UI motion
20
+ // survives timeScale 0; gameplay tweens that should freeze under pause pass unscaled: false.
21
+ public static IEnumerator Tween(
22
+ float duration, System.Action<float> apply, System.Func<float, float> ease, bool unscaled = true)
23
+ {
24
+ for (float t = 0f; t < 1f; t += (unscaled ? Time.unscaledDeltaTime : Time.deltaTime) / duration)
25
+ {
26
+ apply(ease(t));
27
+ yield return null;
28
+ }
29
+
30
+ apply(1f);
31
+ }
32
+ }
33
+ ```
34
+
35
+ ## The recipes
36
+
37
+ - **Pickup**: scale-pop the collector or a proxy (1 → 1.25 → 1, 0.15 s, OutBack), 8–12 palette-colored particles, a pickup blip (the audio floor's synthesized recipe), floating "+XP" text rising ~0.8 units and fading over 0.6 s.
38
+ - **Numbers animate, never snap**: XP/health bars tween fill over 0.3 s OutCubic; counters count up. (Set the uGUI `Image` sprite — `Type.Filled` silently no-ops with a null sprite; found live.)
39
+ - **Milestone (level-up, win)**: a *moment*, never just text — the worked sequence below is the template.
40
+ - **Movement life**: idle breathing bob (sine, ~2 s period), slight lean into movement direction, landing squash (y 0.85 for 0.1 s). See [art-direction](art-direction.md) for why nothing is statuary.
41
+ - **Impacts (action games)**: screenshake via Cinemachine Impulse ([camera-rigs](camera-rigs.md)), hit-stop via [`Time.timeScale`](https://docs.unity.com/en-us/engine/<VERSION>/script-reference/unityengine/time/timescale.md) `= 0.05` for 50–80 ms of *unscaled* time — always through one manager so effects never fight.
42
+
43
+ ## The worked milestone: level-up
44
+
45
+ Exact values; retime to taste but keep the shape (flash → sting → banner → payoff → hold):
46
+
47
+ | When | What | Values |
48
+ |---|---|---|
49
+ | 0 ms | Flash | fullscreen overlay in the palette accent, alpha 0.6 → 0 over 100 ms, OutCubic, unscaled |
50
+ | 0 ms | Sting | the audio floor's three-note ascending sting starts with the flash |
51
+ | 50 ms | Banner in | "LEVEL 7" scales 0 → 1 over 350 ms OutBack — overshoots to ~1.1 around 250 ms |
52
+ | 50 ms | Burst | 30–50 confetti particles, cone up, 2–3 palette colors |
53
+ | 400 ms | Payoff | XP bar refills to the new floor over 0.3 s OutCubic; the level counter counts up |
54
+ | 1,500 ms | Banner out | scales 1 → 0 over 200 ms OutCubic; overlay and particles are gone by now |
55
+
56
+ Input stays live throughout — the moment is a layer over play, never a lock. Run every tween in it unscaled so a level-up landing on the pause edge can't freeze mid-flash.
57
+
58
+ ## Tunables stay visible
59
+
60
+ Expose the numbers (pop scale, tween durations, shake amplitude) on one component or a debug overlay so the iterate-by-looking loop (`unity-cli` capture → eval → capture) can tune them live without recompiles. Caveat: a timed-out `eval` may still have executed — mutations are not idempotent-safe; put anything long through `run_script`.
61
+
62
+ ## Verify
63
+
64
+ Via `unity-cli` eval in Play mode: trigger one pickup and one milestone, then assert — the popped transform (the collector or its proxy — whichever the pickup recipe animated) returned to its **pre-pop baseline scale** within 0.5 s (record the baseline before triggering; characters often have non-unit root scales, so never assert against literal 1), the XP bar's `fillAmount` sampled twice 0.1 s apart mid-tween gives two different values (animating, not snapping), and the floating text object exists during the moment and is destroyed within ~1 s. Capture the busiest instant with the **screen** source so the feedback is in the frame. On any miss, the fix is wiring, not taste — confirm the gameplay event actually calls the feel layer.
65
+
66
+ ## Expansion scope
67
+
68
+ Curve-preset library, UI transition system, controller rumble, frame-event-driven animation feedback, per-genre feel profiles (platformer vs. shooter vs. cozy).
@@ -0,0 +1,45 @@
1
+ # Game Shell
2
+
3
+ > Craft reference for the `craft-game-floors` skill. **Load:** once the core loop works, before the feel pass concludes — and in any ad-hoc session, whenever the game boots straight into gameplay: such a build isn't done. UI construction mechanics live in the `ui` skill family; this reference owns which screens exist and how they behave. Relative links in this file resolve to the skill directory. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The opinion
6
+
7
+ A game that boots directly into gameplay reads as a demo. The shell is formulaic — which is exactly why an agent should never skip it: it's an hour of work that changes what the artifact *is*.
8
+
9
+ ## The minimum shell (four states, one state machine)
10
+
11
+ One `GameState` enum (`Title, Playing, Paused, Ended`) on one manager; every screen is a palette-styled panel (see [art-direction](art-direction.md) — default uGUI skin never ships; if no art bible or Palette source exists yet, run that reference first — it is the root dependency). On a fresh URP template, import TMP Essential Resources before the first text element ([TMP font assets](https://docs.unity3d.com/Packages/com.unity.ugui@<VERSION>/manual/TextMeshPro/index.html)); the exact failure and fix are in the table below.
12
+
13
+ - **Title** — the worked treatment below. **Backdrop is the live game scene**, gameplay HUD hidden. Free production value; no separate art, and the style uniformity is automatic.
14
+ - **Pause** — `Time.timeScale = 0` + dimmed overlay; Resume / Restart / Quit. Audio ducks −6 dB (mixer snapshot, [game-audio](game-audio.md)). Feel/tween code must run on *unscaled* time while paused ([game-feel](game-feel.md)'s Tween has an unscaled path).
15
+ - **Settings** — Music and SFX sliders bound to the mixer parameters MusicVol and SFXVol (the audio floor's exposed names, [game-audio](game-audio.md)). Probe before binding: `mixer.GetFloat("MusicVol", out _)` must return true; if there is no mixer, bind the audio floor's static gain layer instead — and if there is no audio at all, run that floor first. That's the floor; more is expansion scope.
16
+ - **Ended** — win/lose banner as a *moment* (milestone recipe from [game-feel](game-feel.md)), the run's numbers (score/level/time), Restart + Title. Restart must produce a clean run — re-enter via scene reload or a real reset path, never leftover state.
17
+
18
+ ## Worked title treatment (imitate this, then vary)
19
+
20
+ - **Layout**: game name centered at ~60% screen height, the shell's largest text; prompt line centered at ~25% height, small, letter-spaced uppercase. Nothing else on screen — no placeholder menus.
21
+ - **Palette roles**: name in the palette's accent with a soft shadow in the palette's darkest value; prompt in the neutral light tone at ~70% alpha; any scrim behind text is the darkest palette value at 60–80% alpha, never pure black.
22
+ - **Backdrop camera (3D)**: slow idle orbit of the play space, roughly 4–6°/s, framing the character or centerpiece off-center (rule of thirds); or a locked wide shot if the scene reads better still.
23
+ - **2D delta**: the backdrop is a slow parallax pan, not an orbit — pan across the level at ~0.5 units/s with background layers moving at fractional speeds.
24
+ - **Prompt text**: "press any key" (or the real bind), alpha pulsing 0.5↔1.0 over ~1.6 s on unscaled time — motion is what marks it interactive.
25
+
26
+ ## Transitions
27
+
28
+ Every state change crosses a 0.3 s fade (one fullscreen black-from-palette overlay, alpha tween on unscaled time). Hard cuts between screens read as broken.
29
+
30
+ ## Failure modes (verify by capture, not compile)
31
+
32
+ | Exact error / symptom | Root cause | Fix |
33
+ |---|---|---|
34
+ | `Value cannot be null (source)` on the first `TextMeshProUGUI` | fresh URP templates ship without TMP Essential Resources, so the default font asset is null | import the essentials first — editor-side `TMPro.TMP_PackageResourceImporter.ImportResources(true, false, false)` — then recreate the element |
35
+ | UITK text input renders at zero width despite an authored width | the default theme's flex-basis collapses it | set `flex-basis` explicitly on the input |
36
+ | UITK panel renders dark with no warning | an unresolved `var(--token)` in the stylesheet | define or correct the token |
37
+ | UITK styles silently absent | a `.tss` that `@import`s a `.uss` written in the same batch can drop it | author the `.uss` in its own pass, or inline the styles |
38
+
39
+ ## Verify
40
+
41
+ Drive the full loop headlessly via `unity-cli` (eval state changes + capture each screen): boot → Title frame, pause → Paused frame, end → Ended frame, restart → clean second run. "Clean" is asserted, not eyeballed: eval-read the `GameState` enum at each step to confirm the transition landed, re-read the run counters after restart (score/XP/level back at initial values), and read the Editor log for a zero console-error count. Caveat when driving via `eval`: a timed-out eval may still have executed — mutations are not idempotent-safe; long work goes through `run_script`.
42
+
43
+ ## Expansion scope
44
+
45
+ Save slots and persistence, options that persist (audio, quality, language via `localize-unity-project`), input rebinding UI, accessibility (text size, contrast, screen-shake toggle), controller/focus navigation, credits and legal screens.
@@ -0,0 +1,35 @@
1
+ # Live Floor
2
+
3
+ > Craft reference for the `craft-game-floors` skill. **Load:** when wiring services — after player identity exists, verified with a standalone probe (`UnityServices.State == ServicesInitializationState.Initialized` and `AuthenticationService.Instance.IsSignedIn` with a non-empty `PlayerId`), never by assuming an earlier step ran. In the creation flow the canonical moment is [game-shell](game-shell.md) time, after the flow's auth setup. Service mechanics live in `build-live-game`; this reference owns which slice, in what shape, wired when. Relative links in this file resolve to the skill directory. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The opinion
6
+
7
+ A build without persistence, comparison, or an off-switch is a demo with a backend. The live floor is the smallest slice of UGS that makes the artifact a *live game*: the save the player never sees, the rank the end screen shows, and the lever you can pull at 2am. All three are free-tier, invisible or nearly so, need zero genre awareness, and compose directly on the anonymous PlayerId — which is why identity precedes this floor.
8
+
9
+ **Identity precondition.** Every piece below keys on the PlayerId from the project's auth setup — run the probe in the load line above rather than trusting any prior session's record. If the probe fails (cloud link failed, sign-in skipped, or never set up), skip the floor and state its cost plainly: no persistence beyond PlayerPrefs, no rank, no remote lever — reduced scope, never UGS calls against a project with no cloud id. **Anonymous identity is device-local**: [`SignInAnonymouslyAsync`](https://docs.unity.com/en-us/authentication/use-anon-sign-in.md) creates a fresh account where no cached credentials exist — a reinstall can clear that cache, so the save is only as durable as the device's sign-in cache and never follows the player to a second device. Say "persists on this device while you stay signed in" in any user-facing claim, and name account linking (the graduation below) as what unlocks cross-device.
10
+
11
+ ## 1 · Cloud Save — progression persists by default
12
+
13
+ `PlayerPrefs` is the default-gray of save systems: device-bound, gone on reinstall. Floor shape: one [Cloud Save](https://docs.unity.com/en-us/cloud-save.md) slot (`progress`) holding the progression state the game already tracks (level, XP, collected, settings), written on milestone and on quit, read at boot. **Deliberate deviation:** `build-live-game`'s validation rule routes sensitive writes (XP, scores, currency) through Cloud Code; the floor is client-authoritative *on purpose* — zero server code at creation time — and the server-authoritative shape in Expansion scope is the graduation, not an alternative reading. Offline-safe: cache locally, sync when the service answers.
14
+
15
+ ## 2 · Leaderboard — derived from the game's progression design, never from genre
16
+
17
+ The game's own design names its milestone/score moment — the point where the loop calls progress (a level completed, resources banked, a run scored). **That event is the leaderboard's oracle**: if the progression design defines a score-shaped milestone, create one [leaderboard](https://docs.unity.com/en-us/leaderboards.md) from it, submit on that milestone, and show rank on the game shell's end screen ([game-shell](game-shell.md)'s stats block gains one line). No score-shaped milestone in the design, no leaderboard — the rule stays genre-blind. Anonymous players get generated display names ("Otter-7f2a" style), which defers the name-moderation question past the floor.
18
+
19
+ ## 3 · The kill switch — one Remote Config flag
20
+
21
+ `liveops_enabled` (bool, default true) in [Remote Config](https://docs.unity.com/en-us/remote-config.md) gates the live features: save sync, leaderboard submit/read. Fetched at boot **and re-fetched on a timer or at natural seams** (scene load, app focus) — a boot-only cache means the 2am toggle can't reach sessions already running, which defeats the lever. One flag, not a config schema — it exists so a live problem is a toggle, not a hotfix.
22
+
23
+ ## Wiring order
24
+
25
+ Identity → *(the loop and feel passes)* → **live floor wires with the shell**: rank belongs on the end screen and save-on-quit belongs to the shell's state machine, so this reference applies at [game-shell](game-shell.md) time, not before. Verify before done, each check naming its call: write the save and read it back (`CloudSaveService.Instance.Data.Player` save then load — the loaded value must equal the written one); submit a score and read the rank back (`LeaderboardsService.Instance` add-score then get-player-score — rank non-null); flip `liveops_enabled` in Remote Config's web console, wait past the re-fetch interval (or force a re-fetch), and assert the gated calls stop — a flip can only reach a running session through the re-fetch above, so this check also proves the re-fetch works. The flag flip is the one human-gated check — in a headless session, assert instead by eval that every live call path reads the flag first and that the re-fetch path exists.
26
+
27
+ **Provisioning floor (the honest headless line):** creating the leaderboard and Remote Config resources needs the Deployment window or a service-account key — a human gate this floor never consumes. A fully headless run wires the code paths, verifies the Cloud Save round-trip for real, and lets rank and the flag degrade gracefully ("Rank: unavailable"; flag defaults on) — naming leaderboard and Remote Config provisioning as the first human-session deploys, the same pattern as the audio floor's mixer authoring.
28
+
29
+ ## What the floor deliberately excludes
30
+
31
+ Cloud Code (infrastructure, not an outcome), **Economy** (check [its documentation](https://docs.unity.com/en-us/economy.md) for availability before ever choosing it — never default a new game onto a service whose docs say it cannot accept one; its documented replacement for new projects is a server-authoritative Cloud Code + Cloud Save + Remote Config setup, exactly the graduation shape below), matchmaking/multiplayer, Vivox, achievements/battle passes. All prompt-routed via `build-live-game` when asked for.
32
+
33
+ ## Expansion scope — the server-authoritative shape
34
+
35
+ When the leaderboard starts mattering or money enters, the floor graduates to `build-live-game`'s validated shape: a Cloud Code module owns every write (save becomes a server ledger, scores are validated server-side, the client is never trusted). Scar tissue that graduates with it: pin the Cloud Code package to the stable line, never the experimental major; keep the kill switch in the release-config template so no build ships without the lever.
@@ -0,0 +1,35 @@
1
+ # Placeholder Assets
2
+
3
+ > Craft reference for the `craft-game-floors` skill. **Load:** whenever the build needs an asset it doesn't have, before reaching for external content. Silhouette/proportion rules live in [art-direction](art-direction.md); the audio floor reference owns placeholder sound. Sibling links resolve to the skill directory. Confirm engine behavior against the linked documentation for the installed version before acting on it.
4
+
5
+ ## The doctrine: primitive but proud
6
+
7
+ A placeholder that follows the art bible is *style*; a placeholder that ignores it is *missing content*. The player can't tell a deliberate flat-shaded cube-chair from programmer art unless the color, proportion, or seam gives it away. This reference removes the giveaways. Nothing in frame is ever magenta, default-gray, or default-font.
8
+
9
+ ## Meshes
10
+
11
+ - **Compound primitives first** — characters and props assembled from tapered, tilted primitives per [art-direction](art-direction.md)'s rules (its worked fox build is the template to imitate), palette-tinted per part via material or vertex color.
12
+ - **[ProBuilder](https://docs.unity3d.com/Packages/com.unity.probuilder@<VERSION>/manual/index.html) for architecture** — add `com.unity.probuilder` when rooms need trim, baseboards, window frames, door reveals, or furniture beyond stacked cubes; the linked manual carries the authoring mechanics (editor-script mesh API included). Through `unity-cli`, short edits fit `eval`; anything longer goes through `run_script` — a timed-out `eval` may still have executed, so mesh mutations through it are not safe to blindly retry.
13
+ - **Bevel cheat** — a slight scale-inset second material band or ProBuilder bevel on edges catches the toon ramp and reads as manufactured, not extruded.
14
+ - **Scaled-primitive colliders lie** — a non-uniformly scaled primitive keeps its original collider shape limits: a squashed cylinder's capsule collider clamps its height to twice its radius and becomes an invisible dome that walls characters off. Strip or replace colliders on squashed primitives (a BoxCollider, or a fresh mesh collider).
15
+
16
+ ## Textures (sparingly — toon styles are mostly flat)
17
+
18
+ Generate `Texture2D` in code when a surface needs interest: stripes, checkers, dot grids, low-octave value noise — always palette-tinted, always subtle (10–15% value variation). A rug, a picture frame's art, a window's sky card. Point-filter small textures for crisp toon looks.
19
+
20
+ ## UI icons and type
21
+
22
+ - **Icons**: draw simple geometric glyphs (paw, star, gear, speaker) into a `Texture2D`/Sprite from code — circles, capsules, and rotated rects compose almost any HUD icon at 64px.
23
+ - **Type**: the default font is a giveaway. Style TMP's default aggressively — bold weight, +2–5% character spacing, palette-colored with a darker palette outline (0.15–0.2) — so it reads as chosen. Never ship untinted white Arial-look text. Font-asset mechanics (weights, outline and underlay setup, fallback atlases, SDF settings) live in `optimize-text-mesh-pro`; this reference owns only the styling opinion.
24
+
25
+ ## The escalation ladder
26
+
27
+ 1. Primitives + palette (free, always first) → 2. ProBuilder + procedural textures (minutes) → 3. **the generator slot** — external asset generation and store content are a product decision above this reference's pay grade; when that lands, it replaces rungs, not the doctrine.
28
+
29
+ ## Verify
30
+
31
+ The done gate's palette-discipline axis is the hard check, run as a machine scan before any capture (via `unity-cli` eval): walk every `Renderer` for a `sharedMaterial` named `Default-Material`, every TMP component for the stock `LiberationSans SDF` font asset left unstyled, and `RenderSettings.skybox` for the template sky — all three lists must come back empty, and any hit names its object. Then the taste check: screenshot a prop close-up — if it reads as "unfinished" rather than "stylized", the fix is proportion or color, not more geometry.
32
+
33
+ ## Expansion scope
34
+
35
+ First-party asset generation (text-to-3D, textures, sprites), Asset Store pull-and-restyle flows, style-transfer onto imported models, LOD/optimization of generated content — the strategic half this reference deliberately leaves open.