@playcraft/cli 0.0.43 → 0.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atom-tree/build-skeleton.js +180 -0
- package/dist/atom-tree/fusion-hints.js +86 -0
- package/dist/atom-tree/selection.js +402 -0
- package/dist/commands/build-all.js +33 -5
- package/dist/commands/build.js +13 -7
- package/dist/commands/create.js +774 -50
- package/dist/commands/image.js +11 -0
- package/dist/commands/prad.js +3 -3
- package/dist/commands/remix.js +20 -0
- package/dist/commands/skills.js +961 -185
- package/dist/commands/tools-detect.js +56 -0
- package/dist/commands/tools-generation.js +21 -0
- package/dist/commands/tools-video-review.js +100 -0
- package/dist/commands/tools.js +4 -0
- package/dist/index.js +2 -0
- package/dist/prad/check.test.js +23 -1
- package/dist/prad/skills-index.js +1 -1
- package/dist/remix/init-template.js +80 -0
- package/dist/scaffold/compose.js +211 -0
- package/engine-packs/phaser/game/adapters/phaser.ts +52 -0
- package/engine-packs/phaser/game/config/game-config.ts +46 -0
- package/engine-packs/phaser/game/contract/publish.ts +141 -0
- package/engine-packs/phaser/game/contract/types.ts +34 -0
- package/engine-packs/phaser/game/index.ts +81 -0
- package/engine-packs/phaser/game/runtime-contract.ts +28 -0
- package/engine-packs/phaser/manifest.json +1 -0
- package/engine-packs/phaser/package.deps.json +1 -0
- package/engine-packs/threejs/game/config/game-config.ts +46 -0
- package/engine-packs/threejs/game/contract/publish.ts +141 -0
- package/engine-packs/threejs/game/contract/types.ts +34 -0
- package/engine-packs/threejs/game/index.ts +76 -0
- package/engine-packs/threejs/game/runtime-contract.ts +15 -0
- package/engine-packs/threejs/manifest.json +1 -0
- package/engine-packs/threejs/package.deps.json +8 -0
- package/package.json +18 -4
- package/project-template/.claude/agents/artist.md +101 -0
- package/project-template/.claude/agents/developer.md +90 -93
- package/project-template/.claude/agents/game-designer.md +192 -0
- package/project-template/.claude/agents/refs/README.md +57 -51
- package/project-template/.claude/agents/refs/{designer-color-audio-recipes.md → artist-color-audio-recipes.md} +2 -2
- package/project-template/.claude/agents/refs/{designer-deliverable-spec.md → artist-deliverable-spec.md} +57 -57
- package/project-template/.claude/agents/refs/{designer-dimension-axis.md → artist-dimension-axis.md} +5 -5
- package/project-template/.claude/agents/refs/{designer-handoff-v2-checklist.md → artist-handoff-v2-checklist.md} +15 -15
- package/project-template/.claude/agents/refs/artist-legacy-fallback.md +14 -0
- package/project-template/.claude/agents/refs/{designer-master-composite-recipes.md → artist-master-composite-recipes.md} +3 -3
- package/project-template/.claude/agents/refs/artist-style-exploration-flow.md +55 -0
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +83 -40
- package/project-template/.claude/agents/refs/developer-impl-cookbook.md +365 -67
- package/project-template/.claude/agents/refs/developer-legacy-fallback.md +15 -0
- package/project-template/.claude/agents/refs/developer-phase1-flow.md +131 -85
- package/project-template/.claude/agents/refs/framework-5-component-filter.md +252 -0
- package/project-template/.claude/agents/refs/framework-game-feel-juice.md +266 -0
- package/project-template/.claude/agents/refs/framework-mda.md +147 -0
- package/project-template/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
- package/project-template/.claude/agents/refs/game-designer-legacy-fallback.md +15 -0
- package/project-template/.claude/agents/refs/game-designer-workflow-detail.md +69 -0
- package/project-template/.claude/agents/refs/implementation-plan-guide.md +316 -0
- package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +247 -33
- package/project-template/.claude/agents/refs/reviewer-legacy-fallback.md +14 -0
- package/project-template/.claude/agents/refs/skill-selector-guide.md +465 -0
- package/project-template/.claude/agents/refs/skill-value-layers.md +145 -0
- package/project-template/.claude/agents/refs/storyboard-generation-guide.md +110 -0
- package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +4 -4
- package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +101 -104
- package/project-template/.claude/agents/refs/technical-artist-legacy-fallback.md +14 -0
- package/project-template/.claude/agents/reviewer.md +81 -95
- package/project-template/.claude/agents/technical-artist.md +71 -95
- package/project-template/.claude/hooks/README.md +83 -35
- package/project-template/.claude/hooks/asr-coverage-validate.mjs +19 -19
- package/project-template/.claude/hooks/block-developer-preflight.mjs +185 -0
- package/project-template/.claude/hooks/block-ring1-tasklist.mjs +95 -0
- package/project-template/.claude/hooks/gate-dispatcher.mjs +78 -0
- package/project-template/.claude/hooks/gate-runner.mjs +557 -0
- package/project-template/.claude/hooks/gate.mjs +170 -0
- package/project-template/.claude/hooks/snapshot-milestone.mjs +246 -0
- package/project-template/.claude/hooks/user-prompt.mjs +193 -0
- package/project-template/.claude/hooks/validate-atom-tree-selection.mjs +281 -0
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +1535 -95
- package/project-template/.claude/settings.json +54 -9
- package/project-template/.claude/skills/brainstorming/SKILL.md +161 -0
- package/project-template/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
- package/project-template/.claude/skills/brainstorming/scripts/helper.js +177 -0
- package/project-template/.claude/skills/brainstorming/scripts/server.cjs +354 -0
- package/project-template/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
- package/project-template/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/project-template/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
- package/project-template/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/project-template/.claude/skills/brainstorming/visual-companion.md +309 -0
- package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +3 -3
- package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +3 -3
- package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +35 -25
- package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +15 -15
- package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +5 -5
- package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +5 -5
- package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +5 -5
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +116 -27
- package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +1 -1
- package/project-template/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
- package/project-template/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
- package/project-template/.claude/skills/playcraft-research/SKILL.md +24 -21
- package/project-template/.claude/skills/playcraft-skill-recommender/SKILL.md +331 -0
- package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +48 -48
- package/project-template/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
- package/project-template/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
- package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +4 -4
- package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +45 -45
- package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +27 -27
- package/project-template/.claude/skills/session-analyzer/SKILL.md +386 -0
- package/project-template/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
- package/project-template/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
- package/project-template/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
- package/project-template/.claude/skills/session-analyzer/scripts/resolve-session.mjs +103 -0
- package/project-template/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
- package/project-template/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
- package/project-template/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
- package/project-template/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
- package/project-template/.claude/snapshot.mjs +350 -0
- package/project-template/.codebuddy/settings.json +53 -0
- package/project-template/.cursor/hooks.json +1 -1
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +91 -86
- package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +16 -5
- package/project-template/CHANGELOG.md +105 -0
- package/project-template/CLAUDE.md +58 -254
- package/project-template/docs/DESIGN.md +65 -0
- package/project-template/docs/intent-clarifications.md +58 -0
- package/project-template/docs/pipeline-overview.md +69 -0
- package/project-template/docs/project-state.md +211 -0
- package/project-template/docs/team/agent-conduct.md +51 -105
- package/project-template/docs/team/agent-runtime-matrix.md +60 -74
- package/project-template/docs/team/atom-tree-format.md +169 -0
- package/project-template/docs/team/collaboration.md +319 -225
- package/project-template/docs/team/core-model.md +80 -46
- package/project-template/docs/team/game-designer-migration-todo.md +8 -0
- package/project-template/docs/team/harness-legacy-deprecation.md +23 -0
- package/project-template/docs/team/platform-capabilities.md +16 -13
- package/project-template/docs/team/workflow-changelog.md +95 -23
- package/project-template/docs/team/workflow-consistency-checklist.md +93 -45
- package/project-template/focus-lab/.gitkeep +0 -0
- package/project-template/game/.playcraft-scaffold-pending +0 -0
- package/project-template/game/index.ts +18 -0
- package/project-template/globals.d.ts +51 -0
- package/project-template/index.css +34 -0
- package/project-template/index.html +18 -0
- package/project-template/main.ts +9 -0
- package/project-template/package.json +79 -0
- package/project-template/skills/README.md +52 -0
- package/project-template/skills/_shared/agent-prep.md +136 -0
- package/project-template/skills/_shared/requirements.txt +1 -0
- package/project-template/skills/_shared/scripts/build-evidence-gate.mjs +87 -0
- package/project-template/skills/_shared/scripts/context-budget.mjs +215 -0
- package/project-template/skills/_shared/scripts/create-playable.mjs +140 -0
- package/project-template/skills/_shared/scripts/dev-start.mjs +151 -0
- package/project-template/skills/_shared/scripts/disclosure-config.mjs +480 -0
- package/project-template/skills/_shared/scripts/ensure-project.mjs +532 -0
- package/project-template/skills/_shared/scripts/gen-placeholder-audio.py +345 -0
- package/project-template/skills/_shared/scripts/gen-placeholder.py +244 -0
- package/project-template/skills/_shared/scripts/harness-smoke.mjs +257 -0
- package/project-template/skills/_shared/scripts/lib/validator-artifacts.mjs +129 -0
- package/project-template/skills/_shared/scripts/placeholder-pack-sheet.mjs +67 -0
- package/project-template/skills/_shared/scripts/placeholder_audio_lib.py +142 -0
- package/project-template/skills/_shared/scripts/placeholder_lib.py +993 -0
- package/project-template/skills/_shared/scripts/render-project-state.mjs +278 -0
- package/project-template/skills/_shared/scripts/ring-config.mjs +252 -0
- package/project-template/skills/_shared/scripts/skills-check.mjs +176 -0
- package/project-template/skills/_shared/scripts/slice-set.mjs +77 -0
- package/project-template/skills/_shared/scripts/state-advance-ring.mjs +63 -0
- package/project-template/skills/_shared/scripts/state-get.mjs +215 -0
- package/project-template/skills/_shared/scripts/state-handoff.mjs +120 -0
- package/project-template/skills/_shared/scripts/state-set.mjs +113 -0
- package/project-template/skills/_shared/scripts/state-store.mjs +893 -0
- package/project-template/skills/_shared/scripts/sync-template-skills.mjs +112 -0
- package/project-template/skills/_shared/scripts/verify-asset-code-sync.mjs +265 -0
- package/project-template/skills/_shared/scripts/verify-atom-conformance.mjs +181 -0
- package/project-template/skills/_shared/scripts/verify-env.mjs +285 -0
- package/project-template/skills/_shared/scripts/verify-placeholders.mjs +161 -0
- package/project-template/skills/_shared/scripts/workflow-doctor.mjs +348 -0
- package/project-template/skills/playable-animate/SKILL.md +52 -0
- package/project-template/skills/playable-animate/agents/openai.yaml +4 -0
- package/project-template/skills/playable-animate/references/board-refresh.md +30 -0
- package/project-template/skills/playable-animate/references/diagnosis-checklist.md +25 -0
- package/project-template/skills/playable-animate/references/entrance-sequencing.md +33 -0
- package/project-template/skills/playable-animate/references/interaction-timing.md +23 -0
- package/project-template/skills/playable-art/SKILL.md +203 -0
- package/project-template/skills/playable-art/agents/openai.yaml +4 -0
- package/project-template/skills/playable-art/references/alpha-postprocess.md +46 -0
- package/project-template/skills/playable-art/references/cta-art-spec.md +59 -0
- package/project-template/skills/playable-art/references/layout-proportions.md +30 -0
- package/project-template/skills/playable-art/references/prompt-patterns.md +83 -0
- package/project-template/skills/playable-art/references/reference-comparison.md +30 -0
- package/project-template/skills/playable-art/references/sheet-import-v2.md +91 -0
- package/project-template/skills/playable-art/scripts/build-atlas.py +332 -0
- package/project-template/skills/playable-art/scripts/chroma-key.py +50 -0
- package/project-template/skills/playable-art/scripts/extract-alpha-split.py +65 -0
- package/project-template/skills/playable-art/scripts/extract-dual-bg-alpha.py +118 -0
- package/project-template/skills/playable-art/scripts/import-gpt-art-sheets-v2.py +403 -0
- package/project-template/skills/playable-art/scripts/import-gpt-art-sheets.py +280 -0
- package/project-template/skills/playable-art/scripts/import-gpt-tile-sheet.py +114 -0
- package/project-template/skills/playable-art/scripts/import_gpt_art_pipeline.py +321 -0
- package/project-template/skills/playable-art/scripts/import_gpt_art_sheets_v2_test.py +126 -0
- package/project-template/skills/playable-art/scripts/placeholder_common.py +98 -0
- package/project-template/skills/playable-art/scripts/remove-bg.py +91 -0
- package/project-template/skills/playable-art/scripts/review-processed-assets.py +468 -0
- package/project-template/skills/playable-art/scripts/review_processed_assets_test.py +116 -0
- package/project-template/skills/playable-art/scripts/verify-alpha-clean.py +105 -0
- package/project-template/skills/playable-debug/SKILL.md +116 -0
- package/project-template/skills/playable-debug/agents/openai.yaml +4 -0
- package/project-template/skills/playable-debug/references/debug-config.md +40 -0
- package/project-template/skills/playable-focus/SKILL.md +148 -0
- package/project-template/skills/playable-focus/scripts/bootstrap-playground.mjs +84 -0
- package/project-template/skills/playable-focus/scripts/extract-focus-frames.mjs +87 -0
- package/project-template/skills/playable-focus/scripts/generate-focus-reports.mjs +121 -0
- package/project-template/skills/playable-focus/scripts/playground.mjs +390 -0
- package/project-template/skills/playable-focus/templates/focus-lab/frame.html +39 -0
- package/project-template/skills/playable-focus/templates/focus-lab/harness/clean-stage.js +114 -0
- package/project-template/skills/playable-focus/templates/focus-lab/harness/frame-lab-scene.js +94 -0
- package/project-template/skills/playable-focus/templates/focus-lab/harness/particle-lab-scene.js +224 -0
- package/project-template/skills/playable-focus/templates/focus-lab/model.html +16 -0
- package/project-template/skills/playable-focus/templates/focus-lab/particle.html +38 -0
- package/project-template/skills/playable-focus/templates/focus-lab/shatter.html +47 -0
- package/project-template/skills/playable-focus/templates/playground/registry.template.json +55 -0
- package/project-template/skills/playable-focus/templates/playground/vfx-catalog.template.json +280 -0
- package/project-template/skills/playable-fx-decompose/SKILL.md +212 -0
- package/project-template/skills/playable-fx-decompose/examples.md +89 -0
- package/project-template/skills/playable-fx-decompose/reference.md +201 -0
- package/project-template/skills/playable-fx-decompose/requirements.txt +2 -0
- package/project-template/skills/playable-fx-decompose/scripts/build-blank-tile-crack.py +192 -0
- package/project-template/skills/playable-fx-decompose/scripts/fix-shard-debris-frames.py +60 -0
- package/project-template/skills/playable-fx-decompose/scripts/generate-shard-debris.py +276 -0
- package/project-template/skills/playable-fx-peak/SKILL.md +237 -0
- package/project-template/skills/playable-fx-peak/requirements.txt +2 -0
- package/project-template/skills/playable-fx-peak/scripts/fix-frame-edges.py +70 -0
- package/project-template/skills/playable-fx-peak/scripts/repack-frame-sequence.py +526 -0
- package/project-template/skills/playable-fx-peak/scripts/validate-frame-anchors.py +130 -0
- package/project-template/skills/playable-placeholder/SKILL.md +239 -0
- package/project-template/skills/playable-record/SKILL.md +166 -0
- package/project-template/skills/playable-record/scripts/lib/build-artifact.mjs +92 -0
- package/project-template/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
- package/project-template/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
- package/project-template/skills/playable-record/scripts/lib/slice-structure-verify.mjs +199 -0
- package/project-template/skills/playable-record/scripts/record-playable.mjs +583 -0
- package/project-template/skills/playable-record/scripts/verify-build.mjs +185 -0
- package/project-template/skills/playable-record/scripts/verify-contract.mjs +261 -0
- package/project-template/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
- package/project-template/skills/playable-record/scripts/verify-fusion.mjs +320 -0
- package/project-template/skills/playable-record/scripts/verify-lifecycle.mjs +78 -0
- package/project-template/skills/playable-record/scripts/verify-slice-artist.mjs +53 -0
- package/project-template/skills/playable-record/scripts/verify-slice-ta.mjs +53 -0
- package/project-template/skills/playable-record/scripts/verify-slice.mjs +142 -0
- package/project-template/skills/playable-record/scripts/verify-visual-ring.mjs +250 -0
- package/project-template/skills/playable-record/scripts/verify-visual-ring1.mjs +190 -0
- package/project-template/skills/playable-record/scripts/verify-vlm-video.mjs +227 -0
- package/project-template/skills/playable-validate/SKILL.md +260 -0
- package/project-template/skills/playable-validate/references/checklist-detail.md +36 -0
- package/project-template/skills/playable-validate/references/single-html-bundle.md +76 -0
- package/project-template/skills/playable-validate/validation-rules.md +200 -0
- package/project-template/skills/playable-verify-ui/SKILL.md +295 -0
- package/project-template/skills/playable-verify-ui/examples/asset-manifest.example.json +36 -0
- package/project-template/skills/playable-verify-ui/examples/mahjong-match.profile.yaml +334 -0
- package/project-template/skills/playable-verify-ui/profiles/template.profile.yaml +84 -0
- package/project-template/skills/playable-verify-ui/reference.md +165 -0
- package/project-template/skills/playable-verify-ui/references/phaser-patterns.md +67 -0
- package/project-template/skills/playable-verify-ui/references/scaling-decision-tree.md +51 -0
- package/project-template/skills/playable-verify-ui/requirements.txt +7 -0
- package/project-template/skills/playable-verify-ui/schema/asset-manifest.schema.json +68 -0
- package/project-template/skills/playable-verify-ui/schema/playable-ui-profile.schema.json +171 -0
- package/project-template/skills/playable-verify-ui/scripts/asset_manifest.py +231 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/report.py +106 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
- package/project-template/skills/playable-verify-ui/scripts/measure_frame_content.py +77 -0
- package/project-template/skills/playable-verify-ui/scripts/run_all.py +265 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_asset_sizes.py +77 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_assets_present.py +62 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_atlas_budget.py +84 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_atlas_frames.py +79 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_bg_clean.py +365 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_doc_asset_sync.py +90 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_game_config_load.js +54 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_layout_regions.js +110 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_profile_schema.py +37 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_ring1_visual.py +211 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_script_load_order.js +73 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_slice_plan.py +238 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_slice_plan_test.py +125 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_tile_consistency.py +323 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_vision_evidence.py +894 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_vision_evidence_test.py +122 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_visual.py +422 -0
- package/project-template/templates/{designer-log.template.md → artist-log.template.md} +26 -31
- package/project-template/templates/atom-tree.template.json +133 -0
- package/project-template/templates/design-brief.template.md +59 -162
- package/project-template/templates/design-lens-checklist.reference.md +14 -14
- package/project-template/templates/design-methodology.md +25 -25
- package/project-template/templates/design.template.md +50 -0
- package/project-template/templates/developer-log.template.md +187 -63
- package/project-template/templates/five-axis-framework.md +89 -44
- package/project-template/templates/gen-placeholder-audio.template.mjs +63 -0
- package/project-template/templates/gen-placeholders.template.mjs +81 -0
- package/project-template/templates/intent-clarifications.template.md +7 -7
- package/project-template/templates/layout-spec.template.md +32 -20
- package/project-template/templates/plan.template.md +80 -0
- package/project-template/templates/project-state.template.md +90 -191
- package/project-template/templates/review-report.template.md +208 -24
- package/project-template/templates/style-exploration.template.md +8 -8
- package/project-template/templates/ta-log.template.md +58 -35
- package/project-template/tsconfig.json +20 -0
- package/project-template/vite.config.ts +27 -0
- package/project-templates/phaser/.claude/agents/artist.md +101 -0
- package/project-templates/phaser/.claude/agents/developer.md +123 -0
- package/project-templates/phaser/.claude/agents/game-designer.md +192 -0
- package/project-templates/phaser/.claude/agents/refs/README.md +77 -0
- package/project-templates/phaser/.claude/agents/refs/artist-art-style-catalog.md +533 -0
- package/project-templates/phaser/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
- package/project-templates/phaser/.claude/agents/refs/artist-deliverable-spec.md +230 -0
- package/project-templates/phaser/.claude/agents/refs/artist-dimension-axis.md +27 -0
- package/project-templates/phaser/.claude/agents/refs/artist-handoff-v2-checklist.md +76 -0
- package/project-templates/phaser/.claude/agents/refs/artist-legacy-fallback.md +14 -0
- package/project-templates/phaser/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
- package/project-templates/phaser/.claude/agents/refs/artist-style-exploration-flow.md +55 -0
- package/project-templates/phaser/.claude/agents/refs/developer-dev-handoff.md +152 -0
- package/project-templates/phaser/.claude/agents/refs/developer-impl-cookbook.md +432 -0
- package/project-templates/phaser/.claude/agents/refs/developer-legacy-fallback.md +15 -0
- package/project-templates/phaser/.claude/agents/refs/developer-phase1-flow.md +404 -0
- package/project-templates/phaser/.claude/agents/refs/framework-5-component-filter.md +252 -0
- package/project-templates/phaser/.claude/agents/refs/framework-game-feel-juice.md +266 -0
- package/project-templates/phaser/.claude/agents/refs/framework-mda.md +147 -0
- package/project-templates/phaser/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
- package/project-templates/phaser/.claude/agents/refs/game-designer-legacy-fallback.md +15 -0
- package/project-templates/phaser/.claude/agents/refs/game-designer-workflow-detail.md +69 -0
- package/project-templates/phaser/.claude/agents/refs/implementation-plan-guide.md +309 -0
- package/project-templates/phaser/.claude/agents/refs/reviewer-convergence-eval.md +350 -0
- package/project-templates/phaser/.claude/agents/refs/reviewer-legacy-fallback.md +14 -0
- package/project-templates/phaser/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-templates/phaser/.claude/agents/refs/skill-selector-guide.md +465 -0
- package/project-templates/phaser/.claude/agents/refs/skill-value-layers.md +145 -0
- package/project-templates/phaser/.claude/agents/refs/storyboard-generation-guide.md +110 -0
- package/project-templates/phaser/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
- package/project-templates/phaser/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-templates/phaser/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-templates/phaser/.claude/agents/refs/ta-image-generation-detail.md +300 -0
- package/project-templates/phaser/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-templates/phaser/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
- package/project-templates/phaser/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-templates/phaser/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-templates/phaser/.claude/agents/refs/technical-artist-legacy-fallback.md +14 -0
- package/project-templates/phaser/.claude/agents/reviewer.md +116 -0
- package/project-templates/phaser/.claude/agents/technical-artist.md +100 -0
- package/project-templates/phaser/.claude/hooks/README.md +120 -0
- package/project-templates/phaser/.claude/hooks/asr-coverage-validate.mjs +381 -0
- package/project-templates/phaser/.claude/hooks/block-developer-preflight.mjs +185 -0
- package/project-templates/phaser/.claude/hooks/block-ring1-tasklist.mjs +95 -0
- package/project-templates/phaser/.claude/hooks/gate-dispatcher.mjs +78 -0
- package/project-templates/phaser/.claude/hooks/gate-runner.mjs +557 -0
- package/project-templates/phaser/.claude/hooks/gate.mjs +171 -0
- package/project-templates/phaser/.claude/hooks/snapshot-milestone.mjs +247 -0
- package/project-templates/phaser/.claude/hooks/user-prompt.mjs +194 -0
- package/project-templates/phaser/.claude/hooks/validate-atom-tree-selection.mjs +281 -0
- package/project-templates/phaser/.claude/hooks/validate-workflow-stop.mjs +1889 -0
- package/project-templates/phaser/.claude/settings.json +81 -0
- package/project-templates/phaser/.claude/skills/brainstorming/SKILL.md +161 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/helper.js +177 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/server.cjs +354 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
- package/project-templates/phaser/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/project-templates/phaser/.claude/skills/brainstorming/visual-companion.md +309 -0
- package/project-templates/phaser/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-templates/phaser/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-templates/phaser/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
- package/project-templates/phaser/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-templates/phaser/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-templates/phaser/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
- package/project-templates/phaser/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-templates/phaser/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
- package/project-templates/phaser/.claude/skills/playcraft-research/SKILL.md +215 -0
- package/project-templates/phaser/.claude/skills/playcraft-skill-recommender/SKILL.md +331 -0
- package/project-templates/phaser/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-templates/phaser/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
- package/project-templates/phaser/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
- package/project-templates/phaser/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-templates/phaser/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-templates/phaser/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-templates/phaser/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/test-generation.md +134 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/video-recording.md +153 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/SKILL.md +386 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/resolve-session.mjs +103 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
- package/project-templates/phaser/.claude/snapshot.mjs +257 -0
- package/project-templates/phaser/.cursor/hooks.json +17 -0
- package/project-templates/phaser/.cursor/rules/playcraft-orchestrator.mdc +142 -0
- package/project-templates/phaser/.cursor/rules/playcraft-subagent-boundary.mdc +29 -0
- package/project-templates/phaser/.playcraft-engine +1 -0
- package/project-templates/phaser/CHANGELOG.md +105 -0
- package/project-templates/phaser/CLAUDE.md +84 -0
- package/project-templates/phaser/assets/audio/bgm/.gitkeep +0 -0
- package/project-templates/phaser/assets/audio/sfx/.gitkeep +0 -0
- package/project-templates/phaser/assets/bundles/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/bg/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/reference/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/storyboard/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/tiles/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/ui/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/vfx/.gitkeep +0 -0
- package/project-templates/phaser/assets/models/.gitkeep +0 -0
- package/project-templates/phaser/docs/DESIGN.md +65 -0
- package/project-templates/phaser/docs/intent-clarifications.md +58 -0
- package/project-templates/phaser/docs/pipeline-overview.md +69 -0
- package/project-templates/phaser/docs/project-state.md +211 -0
- package/project-templates/phaser/docs/scaffold-manifest.md +10 -0
- package/project-templates/phaser/docs/team/agent-conduct.md +67 -0
- package/project-templates/phaser/docs/team/agent-runtime-matrix.md +80 -0
- package/project-templates/phaser/docs/team/atom-tree-format.md +114 -0
- package/project-templates/phaser/docs/team/collaboration.md +391 -0
- package/project-templates/phaser/docs/team/core-model.md +85 -0
- package/project-templates/phaser/docs/team/game-designer-migration-todo.md +8 -0
- package/project-templates/phaser/docs/team/harness-legacy-deprecation.md +23 -0
- package/project-templates/phaser/docs/team/platform-capabilities.md +18 -0
- package/project-templates/phaser/docs/team/workflow-changelog.md +137 -0
- package/project-templates/phaser/docs/team/workflow-consistency-checklist.md +240 -0
- package/project-templates/phaser/focus-lab/.gitkeep +0 -0
- package/project-templates/phaser/game/adapters/phaser.ts +52 -0
- package/project-templates/phaser/game/config/.gitkeep +0 -0
- package/project-templates/phaser/game/config/game-config.ts +46 -0
- package/project-templates/phaser/game/contract/publish.ts +141 -0
- package/project-templates/phaser/game/contract/types.ts +34 -0
- package/project-templates/phaser/game/gameplay/.gitkeep +0 -0
- package/project-templates/phaser/game/index.ts +81 -0
- package/project-templates/phaser/game/runtime-contract.ts +28 -0
- package/project-templates/phaser/game/scenes/.gitkeep +0 -0
- package/project-templates/phaser/globals.d.ts +51 -0
- package/project-templates/phaser/index.css +34 -0
- package/project-templates/phaser/index.html +18 -0
- package/project-templates/phaser/main.ts +9 -0
- package/project-templates/phaser/package.json +79 -0
- package/project-templates/phaser/skills/README.md +52 -0
- package/project-templates/phaser/skills/_shared/agent-prep.md +136 -0
- package/project-templates/phaser/skills/_shared/requirements.txt +1 -0
- package/project-templates/phaser/skills/_shared/scripts/build-evidence-gate.mjs +87 -0
- package/project-templates/phaser/skills/_shared/scripts/context-budget.mjs +215 -0
- package/project-templates/phaser/skills/_shared/scripts/create-playable.mjs +140 -0
- package/project-templates/phaser/skills/_shared/scripts/dev-start.mjs +151 -0
- package/project-templates/phaser/skills/_shared/scripts/disclosure-config.mjs +480 -0
- package/project-templates/phaser/skills/_shared/scripts/ensure-project.mjs +532 -0
- package/project-templates/phaser/skills/_shared/scripts/gen-placeholder-audio.py +345 -0
- package/project-templates/phaser/skills/_shared/scripts/gen-placeholder.py +244 -0
- package/project-templates/phaser/skills/_shared/scripts/harness-smoke.mjs +257 -0
- package/project-templates/phaser/skills/_shared/scripts/lib/validator-artifacts.mjs +129 -0
- package/project-templates/phaser/skills/_shared/scripts/placeholder-pack-sheet.mjs +67 -0
- package/project-templates/phaser/skills/_shared/scripts/placeholder_audio_lib.py +142 -0
- package/project-templates/phaser/skills/_shared/scripts/placeholder_lib.py +993 -0
- package/project-templates/phaser/skills/_shared/scripts/render-project-state.mjs +278 -0
- package/project-templates/phaser/skills/_shared/scripts/ring-config.mjs +252 -0
- package/project-templates/phaser/skills/_shared/scripts/skills-check.mjs +176 -0
- package/project-templates/phaser/skills/_shared/scripts/slice-set.mjs +77 -0
- package/project-templates/phaser/skills/_shared/scripts/state-advance-ring.mjs +63 -0
- package/project-templates/phaser/skills/_shared/scripts/state-get.mjs +215 -0
- package/project-templates/phaser/skills/_shared/scripts/state-handoff.mjs +120 -0
- package/project-templates/phaser/skills/_shared/scripts/state-set.mjs +113 -0
- package/project-templates/phaser/skills/_shared/scripts/state-store.mjs +893 -0
- package/project-templates/phaser/skills/_shared/scripts/sync-template-skills.mjs +112 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-asset-code-sync.mjs +265 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-atom-conformance.mjs +181 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-env.mjs +285 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-placeholders.mjs +161 -0
- package/project-templates/phaser/skills/_shared/scripts/workflow-doctor.mjs +348 -0
- package/project-templates/phaser/skills/playable-animate/SKILL.md +52 -0
- package/project-templates/phaser/skills/playable-animate/agents/openai.yaml +4 -0
- package/project-templates/phaser/skills/playable-animate/references/board-refresh.md +30 -0
- package/project-templates/phaser/skills/playable-animate/references/diagnosis-checklist.md +25 -0
- package/project-templates/phaser/skills/playable-animate/references/entrance-sequencing.md +33 -0
- package/project-templates/phaser/skills/playable-animate/references/interaction-timing.md +23 -0
- package/project-templates/phaser/skills/playable-art/SKILL.md +203 -0
- package/project-templates/phaser/skills/playable-art/agents/openai.yaml +4 -0
- package/project-templates/phaser/skills/playable-art/references/alpha-postprocess.md +46 -0
- package/project-templates/phaser/skills/playable-art/references/cta-art-spec.md +59 -0
- package/project-templates/phaser/skills/playable-art/references/layout-proportions.md +30 -0
- package/project-templates/phaser/skills/playable-art/references/prompt-patterns.md +83 -0
- package/project-templates/phaser/skills/playable-art/references/reference-comparison.md +30 -0
- package/project-templates/phaser/skills/playable-art/references/sheet-import-v2.md +91 -0
- package/project-templates/phaser/skills/playable-art/scripts/build-atlas.py +332 -0
- package/project-templates/phaser/skills/playable-art/scripts/chroma-key.py +50 -0
- package/project-templates/phaser/skills/playable-art/scripts/extract-alpha-split.py +65 -0
- package/project-templates/phaser/skills/playable-art/scripts/extract-dual-bg-alpha.py +118 -0
- package/project-templates/phaser/skills/playable-art/scripts/import-gpt-art-sheets-v2.py +403 -0
- package/project-templates/phaser/skills/playable-art/scripts/import-gpt-art-sheets.py +280 -0
- package/project-templates/phaser/skills/playable-art/scripts/import-gpt-tile-sheet.py +114 -0
- package/project-templates/phaser/skills/playable-art/scripts/import_gpt_art_pipeline.py +321 -0
- package/project-templates/phaser/skills/playable-art/scripts/import_gpt_art_sheets_v2_test.py +126 -0
- package/project-templates/phaser/skills/playable-art/scripts/placeholder_common.py +98 -0
- package/project-templates/phaser/skills/playable-art/scripts/remove-bg.py +91 -0
- package/project-templates/phaser/skills/playable-art/scripts/review-processed-assets.py +468 -0
- package/project-templates/phaser/skills/playable-art/scripts/review_processed_assets_test.py +116 -0
- package/project-templates/phaser/skills/playable-art/scripts/verify-alpha-clean.py +105 -0
- package/project-templates/phaser/skills/playable-debug/SKILL.md +116 -0
- package/project-templates/phaser/skills/playable-debug/agents/openai.yaml +4 -0
- package/project-templates/phaser/skills/playable-debug/references/debug-config.md +40 -0
- package/project-templates/phaser/skills/playable-focus/SKILL.md +148 -0
- package/project-templates/phaser/skills/playable-focus/scripts/bootstrap-playground.mjs +84 -0
- package/project-templates/phaser/skills/playable-focus/scripts/extract-focus-frames.mjs +87 -0
- package/project-templates/phaser/skills/playable-focus/scripts/generate-focus-reports.mjs +121 -0
- package/project-templates/phaser/skills/playable-focus/scripts/playground.mjs +390 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/frame.html +39 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/harness/clean-stage.js +114 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/harness/frame-lab-scene.js +94 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/harness/particle-lab-scene.js +224 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/model.html +16 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/particle.html +38 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/shatter.html +47 -0
- package/project-templates/phaser/skills/playable-fx-decompose/SKILL.md +212 -0
- package/project-templates/phaser/skills/playable-fx-decompose/examples.md +89 -0
- package/project-templates/phaser/skills/playable-fx-decompose/reference.md +201 -0
- package/project-templates/phaser/skills/playable-fx-decompose/requirements.txt +2 -0
- package/project-templates/phaser/skills/playable-fx-decompose/scripts/build-blank-tile-crack.py +192 -0
- package/project-templates/phaser/skills/playable-fx-decompose/scripts/fix-shard-debris-frames.py +60 -0
- package/project-templates/phaser/skills/playable-fx-decompose/scripts/generate-shard-debris.py +276 -0
- package/project-templates/phaser/skills/playable-fx-peak/SKILL.md +237 -0
- package/project-templates/phaser/skills/playable-fx-peak/requirements.txt +2 -0
- package/project-templates/phaser/skills/playable-fx-peak/scripts/fix-frame-edges.py +70 -0
- package/project-templates/phaser/skills/playable-fx-peak/scripts/repack-frame-sequence.py +526 -0
- package/project-templates/phaser/skills/playable-fx-peak/scripts/validate-frame-anchors.py +130 -0
- package/project-templates/phaser/skills/playable-placeholder/SKILL.md +239 -0
- package/project-templates/phaser/skills/playable-record/SKILL.md +166 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/build-artifact.mjs +92 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/slice-structure-verify.mjs +199 -0
- package/project-templates/phaser/skills/playable-record/scripts/record-playable.mjs +583 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-build.mjs +185 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-contract.mjs +261 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-fusion.mjs +320 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-lifecycle.mjs +78 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice-artist.mjs +53 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice-ta.mjs +53 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice.mjs +142 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-visual-ring.mjs +250 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-visual-ring1.mjs +190 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-vlm-video.mjs +227 -0
- package/project-templates/phaser/skills/playable-validate/SKILL.md +260 -0
- package/project-templates/phaser/skills/playable-validate/references/checklist-detail.md +36 -0
- package/project-templates/phaser/skills/playable-validate/references/single-html-bundle.md +76 -0
- package/project-templates/phaser/skills/playable-validate/validation-rules.md +200 -0
- package/project-templates/phaser/skills/playable-verify-ui/SKILL.md +295 -0
- package/project-templates/phaser/skills/playable-verify-ui/examples/asset-manifest.example.json +36 -0
- package/project-templates/phaser/skills/playable-verify-ui/examples/mahjong-match.profile.yaml +334 -0
- package/project-templates/phaser/skills/playable-verify-ui/profiles/template.profile.yaml +84 -0
- package/project-templates/phaser/skills/playable-verify-ui/reference.md +165 -0
- package/project-templates/phaser/skills/playable-verify-ui/references/phaser-patterns.md +67 -0
- package/project-templates/phaser/skills/playable-verify-ui/references/scaling-decision-tree.md +51 -0
- package/project-templates/phaser/skills/playable-verify-ui/requirements.txt +7 -0
- package/project-templates/phaser/skills/playable-verify-ui/schema/asset-manifest.schema.json +68 -0
- package/project-templates/phaser/skills/playable-verify-ui/schema/playable-ui-profile.schema.json +171 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/asset_manifest.py +231 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/report.py +106 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/measure_frame_content.py +77 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/run_all.py +265 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_asset_sizes.py +77 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_assets_present.py +62 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_atlas_budget.py +84 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_atlas_frames.py +79 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_bg_clean.py +365 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_doc_asset_sync.py +90 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_game_config_load.js +54 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_layout_regions.js +110 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_profile_schema.py +37 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_ring1_visual.py +211 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_script_load_order.js +73 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_slice_plan.py +238 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_slice_plan_test.py +125 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_tile_consistency.py +323 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_vision_evidence.py +894 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_vision_evidence_test.py +122 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_visual.py +422 -0
- package/project-templates/phaser/ta-workspace/scripts/.gitkeep +0 -0
- package/project-templates/phaser/templates/artist-log.template.md +182 -0
- package/project-templates/phaser/templates/atom-tree.template.json +133 -0
- package/project-templates/phaser/templates/design-brief.template.md +92 -0
- package/project-templates/phaser/templates/design-lens-checklist.reference.md +117 -0
- package/project-templates/phaser/templates/design-methodology.md +99 -0
- package/project-templates/phaser/templates/design.template.md +50 -0
- package/project-templates/phaser/templates/developer-log.template.md +258 -0
- package/project-templates/phaser/templates/five-axis-framework.md +194 -0
- package/project-templates/phaser/templates/gen-placeholder-audio.template.mjs +63 -0
- package/project-templates/phaser/templates/gen-placeholders.template.mjs +81 -0
- package/project-templates/phaser/templates/intent-clarifications.template.md +58 -0
- package/project-templates/phaser/templates/layout-spec.template.md +198 -0
- package/project-templates/phaser/templates/plan.template.md +80 -0
- package/project-templates/phaser/templates/project-state.template.md +136 -0
- package/project-templates/phaser/templates/review-report.template.md +275 -0
- package/project-templates/phaser/templates/style-exploration.template.md +93 -0
- package/project-templates/phaser/templates/ta-log.template.md +394 -0
- package/project-templates/phaser/tsconfig.json +20 -0
- package/project-templates/phaser/vite.config.ts +27 -0
- package/project-templates/threejs/.claude/agents/artist.md +101 -0
- package/project-templates/threejs/.claude/agents/developer.md +123 -0
- package/project-templates/threejs/.claude/agents/game-designer.md +192 -0
- package/project-templates/threejs/.claude/agents/refs/README.md +77 -0
- package/project-templates/threejs/.claude/agents/refs/artist-art-style-catalog.md +533 -0
- package/project-templates/threejs/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
- package/project-templates/threejs/.claude/agents/refs/artist-deliverable-spec.md +230 -0
- package/project-templates/threejs/.claude/agents/refs/artist-dimension-axis.md +27 -0
- package/project-templates/threejs/.claude/agents/refs/artist-handoff-v2-checklist.md +76 -0
- package/project-templates/threejs/.claude/agents/refs/artist-legacy-fallback.md +14 -0
- package/project-templates/threejs/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
- package/project-templates/threejs/.claude/agents/refs/artist-style-exploration-flow.md +55 -0
- package/project-templates/threejs/.claude/agents/refs/developer-dev-handoff.md +152 -0
- package/project-templates/threejs/.claude/agents/refs/developer-impl-cookbook.md +432 -0
- package/project-templates/threejs/.claude/agents/refs/developer-legacy-fallback.md +15 -0
- package/project-templates/threejs/.claude/agents/refs/developer-phase1-flow.md +404 -0
- package/project-templates/threejs/.claude/agents/refs/framework-5-component-filter.md +252 -0
- package/project-templates/threejs/.claude/agents/refs/framework-game-feel-juice.md +266 -0
- package/project-templates/threejs/.claude/agents/refs/framework-mda.md +147 -0
- package/project-templates/threejs/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
- package/project-templates/threejs/.claude/agents/refs/game-designer-legacy-fallback.md +15 -0
- package/project-templates/threejs/.claude/agents/refs/game-designer-workflow-detail.md +69 -0
- package/project-templates/threejs/.claude/agents/refs/implementation-plan-guide.md +309 -0
- package/project-templates/threejs/.claude/agents/refs/reviewer-convergence-eval.md +350 -0
- package/project-templates/threejs/.claude/agents/refs/reviewer-legacy-fallback.md +14 -0
- package/project-templates/threejs/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-templates/threejs/.claude/agents/refs/skill-selector-guide.md +465 -0
- package/project-templates/threejs/.claude/agents/refs/skill-value-layers.md +145 -0
- package/project-templates/threejs/.claude/agents/refs/storyboard-generation-guide.md +110 -0
- package/project-templates/threejs/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
- package/project-templates/threejs/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-templates/threejs/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-templates/threejs/.claude/agents/refs/ta-image-generation-detail.md +300 -0
- package/project-templates/threejs/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-templates/threejs/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
- package/project-templates/threejs/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-templates/threejs/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-templates/threejs/.claude/agents/refs/technical-artist-legacy-fallback.md +14 -0
- package/project-templates/threejs/.claude/agents/reviewer.md +116 -0
- package/project-templates/threejs/.claude/agents/technical-artist.md +100 -0
- package/project-templates/threejs/.claude/hooks/README.md +120 -0
- package/project-templates/threejs/.claude/hooks/asr-coverage-validate.mjs +381 -0
- package/project-templates/threejs/.claude/hooks/block-developer-preflight.mjs +185 -0
- package/project-templates/threejs/.claude/hooks/block-ring1-tasklist.mjs +95 -0
- package/project-templates/threejs/.claude/hooks/gate-dispatcher.mjs +78 -0
- package/project-templates/threejs/.claude/hooks/gate-runner.mjs +557 -0
- package/project-templates/threejs/.claude/hooks/gate.mjs +171 -0
- package/project-templates/threejs/.claude/hooks/snapshot-milestone.mjs +247 -0
- package/project-templates/threejs/.claude/hooks/user-prompt.mjs +194 -0
- package/project-templates/threejs/.claude/hooks/validate-atom-tree-selection.mjs +281 -0
- package/project-templates/threejs/.claude/hooks/validate-workflow-stop.mjs +1889 -0
- package/project-templates/threejs/.claude/settings.json +81 -0
- package/project-templates/threejs/.claude/skills/brainstorming/SKILL.md +161 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/helper.js +177 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/server.cjs +354 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
- package/project-templates/threejs/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/project-templates/threejs/.claude/skills/brainstorming/visual-companion.md +309 -0
- package/project-templates/threejs/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-templates/threejs/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-templates/threejs/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
- package/project-templates/threejs/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-templates/threejs/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-templates/threejs/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
- package/project-templates/threejs/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-templates/threejs/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
- package/project-templates/threejs/.claude/skills/playcraft-research/SKILL.md +215 -0
- package/project-templates/threejs/.claude/skills/playcraft-skill-recommender/SKILL.md +331 -0
- package/project-templates/threejs/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-templates/threejs/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
- package/project-templates/threejs/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
- package/project-templates/threejs/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-templates/threejs/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-templates/threejs/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-templates/threejs/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/test-generation.md +134 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/video-recording.md +153 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/SKILL.md +386 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/resolve-session.mjs +103 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
- package/project-templates/threejs/.claude/snapshot.mjs +257 -0
- package/project-templates/threejs/.cursor/hooks.json +17 -0
- package/project-templates/threejs/.cursor/rules/playcraft-orchestrator.mdc +142 -0
- package/project-templates/threejs/.cursor/rules/playcraft-subagent-boundary.mdc +29 -0
- package/project-templates/threejs/.playcraft-engine +1 -0
- package/project-templates/threejs/CHANGELOG.md +105 -0
- package/project-templates/threejs/CLAUDE.md +84 -0
- package/project-templates/threejs/assets/audio/bgm/.gitkeep +0 -0
- package/project-templates/threejs/assets/audio/sfx/.gitkeep +0 -0
- package/project-templates/threejs/assets/bundles/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/bg/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/reference/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/storyboard/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/tiles/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/ui/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/vfx/.gitkeep +0 -0
- package/project-templates/threejs/assets/models/.gitkeep +0 -0
- package/project-templates/threejs/docs/DESIGN.md +65 -0
- package/project-templates/threejs/docs/intent-clarifications.md +58 -0
- package/project-templates/threejs/docs/pipeline-overview.md +69 -0
- package/project-templates/threejs/docs/project-state.md +211 -0
- package/project-templates/threejs/docs/scaffold-manifest.md +10 -0
- package/project-templates/threejs/docs/team/agent-conduct.md +67 -0
- package/project-templates/threejs/docs/team/agent-runtime-matrix.md +80 -0
- package/project-templates/threejs/docs/team/atom-tree-format.md +114 -0
- package/project-templates/threejs/docs/team/collaboration.md +391 -0
- package/project-templates/threejs/docs/team/core-model.md +85 -0
- package/project-templates/threejs/docs/team/game-designer-migration-todo.md +8 -0
- package/project-templates/threejs/docs/team/harness-legacy-deprecation.md +23 -0
- package/project-templates/threejs/docs/team/platform-capabilities.md +18 -0
- package/project-templates/threejs/docs/team/workflow-changelog.md +137 -0
- package/project-templates/threejs/docs/team/workflow-consistency-checklist.md +240 -0
- package/project-templates/threejs/focus-lab/.gitkeep +0 -0
- package/project-templates/threejs/game/config/.gitkeep +0 -0
- package/project-templates/threejs/game/config/game-config.ts +46 -0
- package/project-templates/threejs/game/contract/publish.ts +141 -0
- package/project-templates/threejs/game/contract/types.ts +34 -0
- package/project-templates/threejs/game/gameplay/.gitkeep +0 -0
- package/project-templates/threejs/game/index.ts +76 -0
- package/project-templates/threejs/game/runtime-contract.ts +15 -0
- package/project-templates/threejs/game/scenes/.gitkeep +0 -0
- package/project-templates/threejs/globals.d.ts +51 -0
- package/project-templates/threejs/index.css +34 -0
- package/project-templates/threejs/index.html +18 -0
- package/project-templates/threejs/main.ts +9 -0
- package/project-templates/threejs/package.json +79 -0
- package/project-templates/threejs/skills/README.md +52 -0
- package/project-templates/threejs/skills/_shared/agent-prep.md +136 -0
- package/project-templates/threejs/skills/_shared/requirements.txt +1 -0
- package/project-templates/threejs/skills/_shared/scripts/build-evidence-gate.mjs +87 -0
- package/project-templates/threejs/skills/_shared/scripts/context-budget.mjs +215 -0
- package/project-templates/threejs/skills/_shared/scripts/create-playable.mjs +140 -0
- package/project-templates/threejs/skills/_shared/scripts/dev-start.mjs +151 -0
- package/project-templates/threejs/skills/_shared/scripts/disclosure-config.mjs +480 -0
- package/project-templates/threejs/skills/_shared/scripts/ensure-project.mjs +532 -0
- package/project-templates/threejs/skills/_shared/scripts/gen-placeholder-audio.py +345 -0
- package/project-templates/threejs/skills/_shared/scripts/gen-placeholder.py +244 -0
- package/project-templates/threejs/skills/_shared/scripts/harness-smoke.mjs +257 -0
- package/project-templates/threejs/skills/_shared/scripts/lib/validator-artifacts.mjs +129 -0
- package/project-templates/threejs/skills/_shared/scripts/placeholder-pack-sheet.mjs +67 -0
- package/project-templates/threejs/skills/_shared/scripts/placeholder_audio_lib.py +142 -0
- package/project-templates/threejs/skills/_shared/scripts/placeholder_lib.py +993 -0
- package/project-templates/threejs/skills/_shared/scripts/render-project-state.mjs +278 -0
- package/project-templates/threejs/skills/_shared/scripts/ring-config.mjs +252 -0
- package/project-templates/threejs/skills/_shared/scripts/skills-check.mjs +176 -0
- package/project-templates/threejs/skills/_shared/scripts/slice-set.mjs +77 -0
- package/project-templates/threejs/skills/_shared/scripts/state-advance-ring.mjs +63 -0
- package/project-templates/threejs/skills/_shared/scripts/state-get.mjs +215 -0
- package/project-templates/threejs/skills/_shared/scripts/state-handoff.mjs +120 -0
- package/project-templates/threejs/skills/_shared/scripts/state-set.mjs +113 -0
- package/project-templates/threejs/skills/_shared/scripts/state-store.mjs +893 -0
- package/project-templates/threejs/skills/_shared/scripts/sync-template-skills.mjs +112 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-asset-code-sync.mjs +265 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-atom-conformance.mjs +181 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-env.mjs +285 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-placeholders.mjs +161 -0
- package/project-templates/threejs/skills/_shared/scripts/workflow-doctor.mjs +348 -0
- package/project-templates/threejs/skills/playable-animate/SKILL.md +52 -0
- package/project-templates/threejs/skills/playable-animate/agents/openai.yaml +4 -0
- package/project-templates/threejs/skills/playable-animate/references/board-refresh.md +30 -0
- package/project-templates/threejs/skills/playable-animate/references/diagnosis-checklist.md +25 -0
- package/project-templates/threejs/skills/playable-animate/references/entrance-sequencing.md +33 -0
- package/project-templates/threejs/skills/playable-animate/references/interaction-timing.md +23 -0
- package/project-templates/threejs/skills/playable-art/SKILL.md +203 -0
- package/project-templates/threejs/skills/playable-art/agents/openai.yaml +4 -0
- package/project-templates/threejs/skills/playable-art/references/alpha-postprocess.md +46 -0
- package/project-templates/threejs/skills/playable-art/references/cta-art-spec.md +59 -0
- package/project-templates/threejs/skills/playable-art/references/layout-proportions.md +30 -0
- package/project-templates/threejs/skills/playable-art/references/prompt-patterns.md +83 -0
- package/project-templates/threejs/skills/playable-art/references/reference-comparison.md +30 -0
- package/project-templates/threejs/skills/playable-art/references/sheet-import-v2.md +91 -0
- package/project-templates/threejs/skills/playable-art/scripts/build-atlas.py +332 -0
- package/project-templates/threejs/skills/playable-art/scripts/chroma-key.py +50 -0
- package/project-templates/threejs/skills/playable-art/scripts/extract-alpha-split.py +65 -0
- package/project-templates/threejs/skills/playable-art/scripts/extract-dual-bg-alpha.py +118 -0
- package/project-templates/threejs/skills/playable-art/scripts/import-gpt-art-sheets-v2.py +403 -0
- package/project-templates/threejs/skills/playable-art/scripts/import-gpt-art-sheets.py +280 -0
- package/project-templates/threejs/skills/playable-art/scripts/import-gpt-tile-sheet.py +114 -0
- package/project-templates/threejs/skills/playable-art/scripts/import_gpt_art_pipeline.py +321 -0
- package/project-templates/threejs/skills/playable-art/scripts/import_gpt_art_sheets_v2_test.py +126 -0
- package/project-templates/threejs/skills/playable-art/scripts/placeholder_common.py +98 -0
- package/project-templates/threejs/skills/playable-art/scripts/remove-bg.py +91 -0
- package/project-templates/threejs/skills/playable-art/scripts/review-processed-assets.py +468 -0
- package/project-templates/threejs/skills/playable-art/scripts/review_processed_assets_test.py +116 -0
- package/project-templates/threejs/skills/playable-art/scripts/verify-alpha-clean.py +105 -0
- package/project-templates/threejs/skills/playable-debug/SKILL.md +116 -0
- package/project-templates/threejs/skills/playable-debug/agents/openai.yaml +4 -0
- package/project-templates/threejs/skills/playable-debug/references/debug-config.md +40 -0
- package/project-templates/threejs/skills/playable-focus/SKILL.md +148 -0
- package/project-templates/threejs/skills/playable-focus/scripts/bootstrap-playground.mjs +84 -0
- package/project-templates/threejs/skills/playable-focus/scripts/extract-focus-frames.mjs +87 -0
- package/project-templates/threejs/skills/playable-focus/scripts/generate-focus-reports.mjs +121 -0
- package/project-templates/threejs/skills/playable-focus/scripts/playground.mjs +390 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/frame.html +39 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/harness/clean-stage.js +114 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/harness/frame-lab-scene.js +94 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/harness/particle-lab-scene.js +224 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/model.html +16 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/particle.html +38 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/shatter.html +47 -0
- package/project-templates/threejs/skills/playable-fx-decompose/SKILL.md +212 -0
- package/project-templates/threejs/skills/playable-fx-decompose/examples.md +89 -0
- package/project-templates/threejs/skills/playable-fx-decompose/reference.md +201 -0
- package/project-templates/threejs/skills/playable-fx-decompose/requirements.txt +2 -0
- package/project-templates/threejs/skills/playable-fx-decompose/scripts/build-blank-tile-crack.py +192 -0
- package/project-templates/threejs/skills/playable-fx-decompose/scripts/fix-shard-debris-frames.py +60 -0
- package/project-templates/threejs/skills/playable-fx-decompose/scripts/generate-shard-debris.py +276 -0
- package/project-templates/threejs/skills/playable-fx-peak/SKILL.md +237 -0
- package/project-templates/threejs/skills/playable-fx-peak/requirements.txt +2 -0
- package/project-templates/threejs/skills/playable-fx-peak/scripts/fix-frame-edges.py +70 -0
- package/project-templates/threejs/skills/playable-fx-peak/scripts/repack-frame-sequence.py +526 -0
- package/project-templates/threejs/skills/playable-fx-peak/scripts/validate-frame-anchors.py +130 -0
- package/project-templates/threejs/skills/playable-placeholder/SKILL.md +239 -0
- package/project-templates/threejs/skills/playable-record/SKILL.md +166 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/build-artifact.mjs +92 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/slice-structure-verify.mjs +199 -0
- package/project-templates/threejs/skills/playable-record/scripts/record-playable.mjs +583 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-build.mjs +185 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-contract.mjs +261 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-fusion.mjs +320 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-lifecycle.mjs +78 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice-artist.mjs +53 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice-ta.mjs +53 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice.mjs +142 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-visual-ring.mjs +250 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-visual-ring1.mjs +190 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-vlm-video.mjs +227 -0
- package/project-templates/threejs/skills/playable-validate/SKILL.md +260 -0
- package/project-templates/threejs/skills/playable-validate/references/checklist-detail.md +36 -0
- package/project-templates/threejs/skills/playable-validate/references/single-html-bundle.md +76 -0
- package/project-templates/threejs/skills/playable-validate/validation-rules.md +200 -0
- package/project-templates/threejs/skills/playable-verify-ui/SKILL.md +295 -0
- package/project-templates/threejs/skills/playable-verify-ui/examples/asset-manifest.example.json +36 -0
- package/project-templates/threejs/skills/playable-verify-ui/examples/mahjong-match.profile.yaml +334 -0
- package/project-templates/threejs/skills/playable-verify-ui/profiles/template.profile.yaml +84 -0
- package/project-templates/threejs/skills/playable-verify-ui/reference.md +165 -0
- package/project-templates/threejs/skills/playable-verify-ui/references/phaser-patterns.md +67 -0
- package/project-templates/threejs/skills/playable-verify-ui/references/scaling-decision-tree.md +51 -0
- package/project-templates/threejs/skills/playable-verify-ui/requirements.txt +7 -0
- package/project-templates/threejs/skills/playable-verify-ui/schema/asset-manifest.schema.json +68 -0
- package/project-templates/threejs/skills/playable-verify-ui/schema/playable-ui-profile.schema.json +171 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/asset_manifest.py +231 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/report.py +106 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/measure_frame_content.py +77 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/run_all.py +265 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_asset_sizes.py +77 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_assets_present.py +62 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_atlas_budget.py +84 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_atlas_frames.py +79 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_bg_clean.py +365 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_doc_asset_sync.py +90 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_game_config_load.js +54 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_layout_regions.js +110 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_profile_schema.py +37 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_ring1_visual.py +211 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_script_load_order.js +73 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_slice_plan.py +238 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_slice_plan_test.py +125 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_tile_consistency.py +323 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_vision_evidence.py +894 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_vision_evidence_test.py +122 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_visual.py +422 -0
- package/project-templates/threejs/ta-workspace/scripts/.gitkeep +0 -0
- package/project-templates/threejs/templates/artist-log.template.md +182 -0
- package/project-templates/threejs/templates/atom-tree.template.json +133 -0
- package/project-templates/threejs/templates/design-brief.template.md +92 -0
- package/project-templates/threejs/templates/design-lens-checklist.reference.md +117 -0
- package/project-templates/threejs/templates/design-methodology.md +99 -0
- package/project-templates/threejs/templates/design.template.md +50 -0
- package/project-templates/threejs/templates/developer-log.template.md +258 -0
- package/project-templates/threejs/templates/five-axis-framework.md +194 -0
- package/project-templates/threejs/templates/gen-placeholder-audio.template.mjs +63 -0
- package/project-templates/threejs/templates/gen-placeholders.template.mjs +81 -0
- package/project-templates/threejs/templates/intent-clarifications.template.md +58 -0
- package/project-templates/threejs/templates/layout-spec.template.md +198 -0
- package/project-templates/threejs/templates/plan.template.md +80 -0
- package/project-templates/threejs/templates/project-state.template.md +136 -0
- package/project-templates/threejs/templates/review-report.template.md +275 -0
- package/project-templates/threejs/templates/style-exploration.template.md +93 -0
- package/project-templates/threejs/templates/ta-log.template.md +394 -0
- package/project-templates/threejs/tsconfig.json +20 -0
- package/project-templates/threejs/vite.config.ts +27 -0
- package/dist/atom-plan/validate-atom-plan.js +0 -298
- package/dist/playable/base-builder.js +0 -265
- package/dist/playable/builder.js +0 -1462
- package/dist/playable/converter.js +0 -150
- package/dist/playable/index.js +0 -3
- package/dist/playable/platforms/base.js +0 -12
- package/dist/playable/platforms/facebook.js +0 -37
- package/dist/playable/platforms/index.js +0 -24
- package/dist/playable/platforms/snapchat.js +0 -59
- package/dist/playable/playable-builder.js +0 -521
- package/dist/playable/types.js +0 -1
- package/dist/playable/vite/config-builder.js +0 -136
- package/dist/playable/vite/platform-configs.js +0 -102
- package/dist/playable/vite/plugin-model-compression.js +0 -63
- package/dist/playable/vite/plugin-platform.js +0 -65
- package/dist/playable/vite/plugin-playcanvas.js +0 -454
- package/dist/playable/vite-builder.js +0 -125
- package/project-template/.claude/agents/designer.md +0 -124
- package/project-template/.claude/agents/pm.md +0 -166
- package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +0 -67
- package/project-template/.claude/agents/refs/pm-workflow-detail.md +0 -567
- package/project-template/.claude/hooks/validate-atom-plan.mjs +0 -224
- package/project-template/.claude/settings.local.json +0 -4
- package/project-template/.claude/skills/playcraft-workflow/SKILL.md +0 -485
- package/project-template/docs/team/atom-plan-format.md +0 -173
- package/project-template/templates/atom-plan.template.json +0 -44
- package/project-template/templates/atom-plan.template.md +0 -108
- /package/dist/{atom-plan → asr}/validate-asr-coverage.js +0 -0
- /package/{project-template → engine-packs/phaser}/game/config/.gitkeep +0 -0
- /package/{project-template → engine-packs/phaser}/game/gameplay/.gitkeep +0 -0
- /package/{project-template → engine-packs/phaser}/game/scenes/.gitkeep +0 -0
- /package/{project-template/logs → engine-packs/threejs/game/config}/.gitkeep +0 -0
- /package/{project-template/ta-workspace/logs → engine-packs/threejs/game/gameplay}/.gitkeep +0 -0
- /package/{project-template/ta-workspace/tmp → engine-packs/threejs/game/scenes}/.gitkeep +0 -0
- /package/project-template/.claude/agents/refs/{designer-art-style-catalog.md → artist-art-style-catalog.md} +0 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Game Feel & Game Juice 框架
|
|
2
|
+
|
|
3
|
+
## 原始来源
|
|
4
|
+
|
|
5
|
+
### 理论基石
|
|
6
|
+
|
|
7
|
+
- **书籍**:Steve Swink (2008). _Game Feel: A Game Designer's Guide to Virtual Sensation_. Morgan Kaufmann.
|
|
8
|
+
- 详细解读:https://www.gamejuice.co.uk/articles/swink-6-components-game-feel
|
|
9
|
+
|
|
10
|
+
### 经典演讲
|
|
11
|
+
|
|
12
|
+
- **Juice it or Lose it** (2012) — Martin Jonasson & Petri Purho,Nordic Game Indie Night
|
|
13
|
+
- 解读:https://www.gamejuice.co.uk/articles/juice-it-or-lose-it-lessons
|
|
14
|
+
- **The Art of Screenshake** (2013) — Jan Willem Nijman (Vlambeer), INDIGO Classes
|
|
15
|
+
- 中文解读:https://blog.chosenconcept.dev/tw/posts/2022/11/0012-the-art-of-screenshake/
|
|
16
|
+
|
|
17
|
+
### 综合参考
|
|
18
|
+
|
|
19
|
+
- Making Games 'Juicy':https://abagames.github.io/joys-of-small-game-development-en/make_game_juicy.html
|
|
20
|
+
- Game Feel 资源汇总:https://marcosecchi.github.io/resources/pages/gamedesign_game-feel.html
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 一、什么是 Game Feel?
|
|
25
|
+
|
|
26
|
+
Game Feel(游戏手感)是指**玩家在操控游戏时感受到的无形触感**——为什么同样是"跳跃",《超级马里奥》的跳跃就是比其他游戏"更舒服"?Game Feel 就是对这种差异的系统性解释。
|
|
27
|
+
|
|
28
|
+
Steve Swink 在 2008 年的同名著作中首次将 Game Feel 系统化为 **6 个组件**,为"什么让游戏玩起来感觉好"提供了可分析、可诊断的结构框架。
|
|
29
|
+
|
|
30
|
+
> **Game Feel 不是一个配方,而是一把测量工具和一套诊断语言。**
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 二、Steve Swink 的 6 个 Game Feel 组件
|
|
35
|
+
|
|
36
|
+
### 组件 1:Real-Time Control(实时控制)
|
|
37
|
+
|
|
38
|
+
**定义**:玩家必须能**直接**操控虚拟对象,且输入获得**即时**响应。
|
|
39
|
+
|
|
40
|
+
**关键阈值**:
|
|
41
|
+
|
|
42
|
+
- **100ms**:超过此延迟,大脑不再认为这是"直接控制",而像是在"下达命令等执行"
|
|
43
|
+
- **一致性 > 速度**:不稳定的 80ms 延迟比稳定的 100ms 感觉更糟
|
|
44
|
+
|
|
45
|
+
**常见问题及修复**:
|
|
46
|
+
| 问题 | 原因 | 修复方式 |
|
|
47
|
+
|------|------|---------|
|
|
48
|
+
| 操控迟钝 | 输入延迟过高 | 减少帧延迟,优化输入管线 |
|
|
49
|
+
| 动作"卡住" | 必须等动画播完才能响应 | 输入缓存、动画取消、设置可打断帧 |
|
|
50
|
+
| 感觉不灵敏 | 帧率不稳定 | 固定物理步长,与渲染帧率解耦 |
|
|
51
|
+
|
|
52
|
+
### 组件 2:Simulated Space(空间模拟)
|
|
53
|
+
|
|
54
|
+
**定义**:游戏世界必须遵循**内部一致**的物理规则(重量、动量、碰撞、重力)。
|
|
55
|
+
|
|
56
|
+
物理可以夸张,**但必须可预测**。
|
|
57
|
+
|
|
58
|
+
**核心原则**:
|
|
59
|
+
|
|
60
|
+
- 不可预测的物理让人愤怒——不是因为"不真实",而是因为"无法建立心理模型"
|
|
61
|
+
- 模拟必须延伸到玩家能互动的所有事物
|
|
62
|
+
|
|
63
|
+
**经典案例**:
|
|
64
|
+
|
|
65
|
+
- **《蔚蓝》(Celeste)**:物理完全不真实(空中冲刺违反物理定律),但内部绝对一致,玩家能精准预测落点
|
|
66
|
+
- **反例**:角色有时被击退 3 格有时 5 格,没有可见原因 → 玩家困惑
|
|
67
|
+
|
|
68
|
+
### 组件 3:Polish(润色)
|
|
69
|
+
|
|
70
|
+
**定义**:游戏性非严格必需、但能让体验更丰富的修饰层——粒子、屏幕震动、音效、动画细节、拖尾等。
|
|
71
|
+
|
|
72
|
+
这就是大众常说的 **"Juice"**。
|
|
73
|
+
|
|
74
|
+
**⚠️ 关键顺序**:
|
|
75
|
+
|
|
76
|
+
> **润色排在第三位,不是第一位。** 它是**放大器**——放大已经感觉良好的空间模拟。如果底层模拟很弱,润色只会让弱点更刺眼。
|
|
77
|
+
|
|
78
|
+
**一致性要求**:
|
|
79
|
+
|
|
80
|
+
- 特效必须形成一种"语言"——屏幕震动在不同语境下不能意思矛盾
|
|
81
|
+
- 润色层应是有统一语法的系统,而非随意堆砌
|
|
82
|
+
|
|
83
|
+
### 组件 4:Metaphor(隐喻)
|
|
84
|
+
|
|
85
|
+
**定义**:虚拟对象与玩家**现实物理理解**之间的连接。
|
|
86
|
+
|
|
87
|
+
玩家带着一生的物理体验来玩游戏。当虚拟互动与真实物理感觉共鸣时,会产生近乎潜意识的"正确感"。
|
|
88
|
+
|
|
89
|
+
**示例**:
|
|
90
|
+
| 隐喻匹配 | 效果 |
|
|
91
|
+
|---------|------|
|
|
92
|
+
| 重物落地→低沉轰鸣+屏幕微震 | ✅ 符合物理直觉,感觉"对" |
|
|
93
|
+
| 爆头→清脆尖锐声+短衰减 | ✅ 高冲击碰撞的真实声学特征 |
|
|
94
|
+
| 仙女魔杖→榴弹发射器声效 | ❌ 隐喻破裂,反馈与世界矛盾 |
|
|
95
|
+
|
|
96
|
+
### 组件 5:Juiciness(多汁性)
|
|
97
|
+
|
|
98
|
+
**定义**:**最小输入产生最大输出**的特质。游戏对每个动作给予不成比例的丰厚反馈。
|
|
99
|
+
|
|
100
|
+
**核心理念**:让玩家每一个微小操作都感到"有力量、有效果"。
|
|
101
|
+
|
|
102
|
+
**⚠️ 需要层级**:
|
|
103
|
+
|
|
104
|
+
- 每次操作都全屏爆炸 → 反而削弱了真正重大事件的冲击力
|
|
105
|
+
- 正确做法:**小动作小奖励,大动作大奖励**,建立清晰的反馈层级
|
|
106
|
+
|
|
107
|
+
**玩具测试**(源自马里奥 64 团队):
|
|
108
|
+
|
|
109
|
+
> 在没有关卡、没有敌人的空房间里,光是跑、跳、操作,是否就已经令人满足?如果是,你就拥有了 Juiciness。
|
|
110
|
+
|
|
111
|
+
### 组件 6:Mastery(学习与精通)
|
|
112
|
+
|
|
113
|
+
**定义**:随着玩家内化操控、开始流畅行动,手感随时间**不断加深**的掌控感。
|
|
114
|
+
|
|
115
|
+
**深度 vs 天花板**:
|
|
116
|
+
|
|
117
|
+
- 操控系统必须足够深,让精通能持续产生新能力
|
|
118
|
+
- 操控太浅 → 很快触及天花板 → 玩家失去兴趣
|
|
119
|
+
- 精通创造**心流**——这是长期留存的核心
|
|
120
|
+
|
|
121
|
+
> **对 Playable Ad 的特殊考量**:15 秒内无法实现深度精通,但可以设计"可感知的操控深度"——让玩家觉得"如果我再玩一会儿,我能做得更好",这正是转化的驱动力。
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 三、Game Feel 诊断工具
|
|
126
|
+
|
|
127
|
+
当游戏"感觉不对"时,按组件逐一排查:
|
|
128
|
+
|
|
129
|
+
| 症状 | 对应组件 | 诊断方向 |
|
|
130
|
+
| --------------------- | ---------- | -------------------------------------- |
|
|
131
|
+
| 操控迟钝、无响应 | ① 实时控制 | 查输入延迟、动画打断帧、响应时机 |
|
|
132
|
+
| 移动不可预测、轻飘 | ② 空间模拟 | 查物理一致性、重力曲线、动量传递 |
|
|
133
|
+
| 有特效但仍觉无力 | ③ 润色 | 查反馈通道是否同步、反馈语言是否一致 |
|
|
134
|
+
| 技术正确但情感平淡 | ④ 隐喻 | 查反馈是否匹配世界逻辑和玩家物理直觉 |
|
|
135
|
+
| 动作缺乏震撼力 | ⑤ 多汁性 | 查反馈的规模和种类与动作重要性是否匹配 |
|
|
136
|
+
| 老手停止进步/失去兴趣 | ⑥ 精通 | 控制系统有天花板,阻碍了技巧表达 |
|
|
137
|
+
|
|
138
|
+
**组件间的依赖关系**:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
① 实时控制 ← 基础。没有它,⑥精通不可能
|
|
142
|
+
② 空间模拟 ← ③润色的基座。模拟弱则润色制造混乱
|
|
143
|
+
④ 隐喻 ← 绑定整个系统。没有它,所有反馈情感空洞
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 四、Game Juice 实操清单
|
|
149
|
+
|
|
150
|
+
Juice 是 Game Feel 中"润色"和"多汁性"组件的具体实现手段。以下综合了 **Juice it or Lose it** 演讲和 **The Art of Screenshake** 演讲中的所有技术:
|
|
151
|
+
|
|
152
|
+
### 4.1 视觉反馈
|
|
153
|
+
|
|
154
|
+
| # | 技术 | 描述 | 示例 |
|
|
155
|
+
| --- | -------------------------------- | ------------------------- | --------------------- |
|
|
156
|
+
| 1 | **Squash & Stretch(挤压拉伸)** | 物体弹跳/碰撞时的形变动画 | 球落地时压扁再弹起 |
|
|
157
|
+
| 2 | **Screen Shake(屏幕震动)** | 碰撞/消除时的短暂画面抖动 | 消除方块时轻震 0.1 秒 |
|
|
158
|
+
| 3 | **Particles(粒子特效)** | 碰撞/消除时喷射的粒子 | 方块消除时碎片飞溅 |
|
|
159
|
+
| 4 | **Flash/Blink(闪白/闪烁)** | 受击/激活时的短暂颜色变化 | 敌人被打中闪白 1 帧 |
|
|
160
|
+
| 5 | **Color Change(颜色变化)** | 根据状态变化调整颜色 | HP 低时角色变红 |
|
|
161
|
+
| 6 | **Trail(拖尾)** | 移动物体留下的轨迹 | 子弹拖出光轨 |
|
|
162
|
+
| 7 | **Muzzle Flash(枪口焰)** | 发射/释放时的源头特效 | 射击时枪口闪火 |
|
|
163
|
+
| 8 | **Impact VFX(命中特效)** | 击中目标时的视觉标记 | 命中时溅射火花 |
|
|
164
|
+
| 9 | **Permanence(永久痕迹)** | 保留战斗/操作的视觉痕迹 | 地上留有碎片 |
|
|
165
|
+
|
|
166
|
+
### 4.2 动画与运动
|
|
167
|
+
|
|
168
|
+
| # | 技术 | 描述 | 示例 |
|
|
169
|
+
| --- | -------------------------------------- | --------------------- | ------------------------ |
|
|
170
|
+
| 10 | **Tweening/Easing(缓动)** | 所有运动使用缓动曲线 | 方块落下用 easeOutBounce |
|
|
171
|
+
| 11 | **Anticipation(预备动作)** | 大动作前的蓄力姿势 | 跳跃前先蹲下 |
|
|
172
|
+
| 12 | **Follow-through(随动)** | 动作完成后的惯性延续 | 挥剑后手臂的回摆 |
|
|
173
|
+
| 13 | **Knockback(击退)** | 碰撞后的位移反应 | 敌人被击中后弹飞 |
|
|
174
|
+
| 14 | **Recoil(后坐力)** | 施力者自身的反作用 | 射击时枪向上弹跳 |
|
|
175
|
+
| 15 | **Bigger Projectiles(更大的投射物)** | 弹药/投射物比实际更大 | 子弹放大到清晰可见 |
|
|
176
|
+
|
|
177
|
+
### 4.3 时间操控
|
|
178
|
+
|
|
179
|
+
| # | 技术 | 描述 | 示例 |
|
|
180
|
+
| --- | ------------------------------------- | ---------------------- | ---------------------- |
|
|
181
|
+
| 16 | **Hit Stop/Freeze Frame(打击暂停)** | 命中瞬间的极短暂冻结 | 打击时停顿 2-3 帧 |
|
|
182
|
+
| 17 | **Slow Motion(慢动作)** | 关键时刻降低时间流速 | 最后一击进入 0.3x 慢放 |
|
|
183
|
+
| 18 | **Speed Up(加速)** | 常规行为加速以保持节奏 | 子弹速度翻倍 |
|
|
184
|
+
|
|
185
|
+
### 4.4 镜头
|
|
186
|
+
|
|
187
|
+
| # | 技术 | 描述 | 示例 |
|
|
188
|
+
| --- | ------------------------------- | ---------------------- | ---------------------------- |
|
|
189
|
+
| 19 | **Camera Lerp(镜头平滑跟随)** | 镜头像弹簧一样柔和追踪 | 角色移动时镜头延迟 0.1s 跟随 |
|
|
190
|
+
| 20 | **Camera Kick(镜头推动)** | 有方向性的镜头偏移 | 射击时镜头向射击反方向微推 |
|
|
191
|
+
| 21 | **Zoom(缩放)** | 关键时刻拉近/推远 | 大规模消除时镜头微微拉远 |
|
|
192
|
+
|
|
193
|
+
### 4.5 音效
|
|
194
|
+
|
|
195
|
+
| # | 技术 | 描述 | 示例 |
|
|
196
|
+
| --- | ------------------------------- | ---------------------- | --------------------------- |
|
|
197
|
+
| 22 | **Impact SFX(打击音效)** | 碰撞/消除时的声音 | 清脆的"啪"声 |
|
|
198
|
+
| 23 | **Pitch Variation(音高变化)** | 连续操作的音高递增 | 连续消除从低音到高音 |
|
|
199
|
+
| 24 | **Layered SFX(分层音效)** | 多个声音叠加成丰满效果 | 爆炸 = 低频轰+中频碎+高频嘶 |
|
|
200
|
+
| 25 | **BGM Reactive(音乐响应)** | 背景音乐响应游戏事件 | 连击时 BGM 加鼓点 |
|
|
201
|
+
|
|
202
|
+
### 4.6 情感反馈
|
|
203
|
+
|
|
204
|
+
| # | 技术 | 描述 | 示例 |
|
|
205
|
+
| --- | -------------------------------- | ----------------------- | ------------------------------ |
|
|
206
|
+
| 26 | **Floating Text(飘字)** | 动作结果的数字/文字弹出 | "+100" 向上飘出 |
|
|
207
|
+
| 27 | **Celebration(庆祝演出)** | 达成成就时的夸张表演 | 全消时烟花+欢呼声 |
|
|
208
|
+
| 28 | **Expressions(表情)** | 角色/物体显示情感反应 | 被选中的方块"瞪大眼睛" |
|
|
209
|
+
| 29 | **Combo Escalation(连击升级)** | 连续成功的反馈逐级增强 | Normal → Great → Amazing → MAX |
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 五、Juice 实施优先级
|
|
214
|
+
|
|
215
|
+
根据 "Juice it or Lose it" 的核心建议:
|
|
216
|
+
|
|
217
|
+
### 第一步:音效(成本最低、见效最快)
|
|
218
|
+
|
|
219
|
+
一个好的打击/消除音效就能让操作感提升 50%。
|
|
220
|
+
|
|
221
|
+
### 第二步:缓动动画
|
|
222
|
+
|
|
223
|
+
将所有 `linear` 运动替换为 `easeOut` / `easeInOut`,瞬间提升品质感。
|
|
224
|
+
|
|
225
|
+
### 第三步:层层叠加
|
|
226
|
+
|
|
227
|
+
依次加入粒子 → 屏幕震动 → 慢动作 → 颜色变化……
|
|
228
|
+
|
|
229
|
+
### 核心法则
|
|
230
|
+
|
|
231
|
+
> **"More is more. Add more juice, then add more."**(多就是多。加更多 Juice,然后再加更多。)
|
|
232
|
+
|
|
233
|
+
但要记住 Steve Swink 的警告:
|
|
234
|
+
|
|
235
|
+
> **Juice 是放大器,不是遮瑕膏。** 底层 Game Feel(实时控制+空间模拟)必须先到位。
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 六、累积效应
|
|
240
|
+
|
|
241
|
+
Juice 技术单独使用效果有限,但**累积叠加**产生质变:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
裸机制 → 🫤 能玩但乏味
|
|
245
|
+
+ 音效 → 😐 稍好
|
|
246
|
+
+ 音效 + 粒子 → 🙂 开始有感觉
|
|
247
|
+
+ 音效 + 粒子 + 屏幕震动 → 😀 体验明显提升
|
|
248
|
+
+ 音效 + 粒子 + 屏幕震动 + 慢动作 → 😆 开始上瘾
|
|
249
|
+
+ 以上全部 + 连击升级 + 飘字 → 🤩 停不下来
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**整体远大于部分之和。**
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 七、参考资源汇总
|
|
257
|
+
|
|
258
|
+
| 类型 | 名称 | 链接 |
|
|
259
|
+
| ------- | ----------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
260
|
+
| 📕 书籍 | Game Feel (Steve Swink, 2008) | [Taylor & Francis](https://www.taylorfrancis.com/books/mono/10.1201/9781482267334/game-feel-steve-swink) |
|
|
261
|
+
| 🎤 演讲 | Juice it or Lose it (2012) | [GameJuice 解读](https://www.gamejuice.co.uk/articles/juice-it-or-lose-it-lessons) |
|
|
262
|
+
| 🎤 演讲 | The Art of Screenshake (2013) | [中文解读](https://blog.chosenconcept.dev/tw/posts/2022/11/0012-the-art-of-screenshake/) |
|
|
263
|
+
| 📝 文章 | 6 Components of Game Feel | [GameJuice](https://www.gamejuice.co.uk/articles/swink-6-components-game-feel) |
|
|
264
|
+
| 📝 文章 | Making Games 'Juicy' | [abagames](https://abagames.github.io/joys-of-small-game-development-en/make_game_juicy.html) |
|
|
265
|
+
| 🔗 汇总 | Game Feel Resources | [marcosecchi](https://marcosecchi.github.io/resources/pages/gamedesign_game-feel.html) |
|
|
266
|
+
| 🎮 案例 | Celeste & Forgiveness | Celeste 如何用宽容度提升 Game Feel |
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# MDA 框架 — Mechanics, Dynamics, Aesthetics
|
|
2
|
+
|
|
3
|
+
## 原始来源
|
|
4
|
+
|
|
5
|
+
- **论文**:Hunicke, R., LeBlanc, M., & Zubek, R. (2004). _MDA: A Formal Approach to Game Design and Game Research_. AAAI Workshop – Technical Report.
|
|
6
|
+
- **原文 PDF**:https://www.researchgate.net/publication/228884866_MDA_A_Formal_Approach_to_Game_Design_and_Game_Research
|
|
7
|
+
- **Semantic Scholar**:https://www.semanticscholar.org/paper/MDA-%3A-A-Formal-Approach-to-Game-Design-and-Game-Hunicke-Leblanc/2b134e5c46eec50f69c702c0b4aa29687d5d8fba
|
|
8
|
+
- **解读**:https://educationalgamedesign.com/mechanics-dynamics-and-aesthetics-mda-framework-by-hunicke-leblanc-and-zubek.html
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 一、核心思想
|
|
13
|
+
|
|
14
|
+
MDA 框架将游戏拆解为三个相互关联的层次,提供了一种**形式化的语言**来分析和设计游戏。其最核心的洞察是:
|
|
15
|
+
|
|
16
|
+
> **设计者自下而上(规则 → 行为 → 情感),玩家自上而下(情感 → 行为 → 规则)。**
|
|
17
|
+
|
|
18
|
+
设计者编写规则(Mechanics),规则在运行时产生动态行为(Dynamics),动态行为引发玩家的情感体验(Aesthetics)。但玩家的感知方向正好相反——他们首先感受到"好不好玩"(Aesthetics),然后才注意到行为模式和底层规则。
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
设计者视角: Mechanics → Dynamics → Aesthetics
|
|
22
|
+
↑ 你直接控制 ↑ 你间接影响 ↑ 你的最终目标
|
|
23
|
+
|
|
24
|
+
玩家视角: Aesthetics → Dynamics → Mechanics
|
|
25
|
+
↑ 首先感受到 ↑ 然后注意到 ↑ 最后才理解
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 二、三层详解
|
|
31
|
+
|
|
32
|
+
### 层次 1:Mechanics(机制)
|
|
33
|
+
|
|
34
|
+
**定义**:游戏的组件、规则、算法和数据结构。
|
|
35
|
+
|
|
36
|
+
这是设计者能**直接控制**的部分。包括:
|
|
37
|
+
|
|
38
|
+
- 玩家可以执行的**动作/动词**(点击、滑动、放置、交换……)
|
|
39
|
+
- 游戏运行的**规则和算法**(匹配判定、分数计算、消除逻辑……)
|
|
40
|
+
- 底层的**数据结构**(棋盘矩阵、牌组列表、状态机……)
|
|
41
|
+
|
|
42
|
+
**示例**(三消游戏):
|
|
43
|
+
| 机制要素 | 具体内容 |
|
|
44
|
+
|---------|---------|
|
|
45
|
+
| 动作 | 交换两个相邻方块 |
|
|
46
|
+
| 匹配规则 | ≥3 个同色方块连成一线即消除 |
|
|
47
|
+
| 重力 | 消除后上方方块下落填补空位 |
|
|
48
|
+
| 分数算法 | 基础分 × 连击倍率 |
|
|
49
|
+
|
|
50
|
+
### 层次 2:Dynamics(动态)
|
|
51
|
+
|
|
52
|
+
**定义**:当机制被执行、玩家开始游戏后**涌现**的运行时行为。
|
|
53
|
+
|
|
54
|
+
这是设计者只能**间接影响**的部分。Dynamics 是 Mechanics 的"运行时行为"——你设计了规则,但规则在实际游戏中会产生你未必预料到的交互模式和策略。
|
|
55
|
+
|
|
56
|
+
**示例**(三消游戏):
|
|
57
|
+
| 动态行为 | 来源机制 |
|
|
58
|
+
|---------|---------|
|
|
59
|
+
| 连锁消除(一次消除引发新的匹配) | 重力 + 匹配规则的组合 |
|
|
60
|
+
| 玩家优先寻找大规模消除而非小匹配 | 分数算法的倍率激励 |
|
|
61
|
+
| 在有限步数下出现的紧迫感 | 步数限制 + 分数目标 |
|
|
62
|
+
| 特殊方块的策略性保留 | 特殊方块生成规则 + 其清除范围 |
|
|
63
|
+
|
|
64
|
+
### 层次 3:Aesthetics(美学/情感)
|
|
65
|
+
|
|
66
|
+
**定义**:游戏旨在引发的**情感体验**。
|
|
67
|
+
|
|
68
|
+
这是设计者的**最终目标**——让玩家"感觉好"。MDA 框架给出了一个经典的 **8 种乐趣分类法**,不是说游戏必须包含所有类型,而是帮助设计者明确自己的游戏主要瞄准哪几种情感。
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 三、8 种乐趣分类(Aesthetics Taxonomy)
|
|
73
|
+
|
|
74
|
+
| # | 类型 | 英文 | 关键词 | 描述 |
|
|
75
|
+
| --- | -------- | ---------- | -------------------- | ------------------------------------------------------------------------ |
|
|
76
|
+
| 1 | **感官** | Sensation | 视听冲击、特效满足 | 通过视觉、听觉等感官刺激获得的愉悦。华丽的特效、悦耳的音效、流畅的动画。 |
|
|
77
|
+
| 2 | **幻想** | Fantasy | 代入、扮演、想象 | 让玩家代入一个虚构角色或世界,体验日常不可能的事情。 |
|
|
78
|
+
| 3 | **叙事** | Narrative | 故事推进、情节展开 | 通过故事的展开和发展,给玩家"追剧"般的参与感。 |
|
|
79
|
+
| 4 | **挑战** | Challenge | 克服困难、成就感 | 面对障碍、克服困难后获得的成就感。难度曲线和技巧门槛是关键。 |
|
|
80
|
+
| 5 | **社交** | Fellowship | 合作、竞争、社区 | 与他人互动、合作或竞争带来的社交愉悦。 |
|
|
81
|
+
| 6 | **探索** | Discovery | 发现、惊喜、揭秘 | 发现新区域、新道具、隐藏内容时的惊喜和好奇心满足。 |
|
|
82
|
+
| 7 | **表达** | Expression | 自我展现、创造 | 玩家通过游戏系统表达自我的自由度(如捏脸、建筑、选择路线)。 |
|
|
83
|
+
| 8 | **消遣** | Submission | 放空、无脑、消磨时间 | "关掉脑子"的轻松愉悦,让玩家放松地消磨时间。 |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 四、在 Playable Ad 中的适用度评估
|
|
88
|
+
|
|
89
|
+
Playable Ad 的典型场景是 **15-30 秒**、**单人**、**即点即玩**、**以转化为目标**。基于这些约束:
|
|
90
|
+
|
|
91
|
+
| 乐趣类型 | 适用度 | 原因 |
|
|
92
|
+
| ---------------------- | ---------- | ------------------------------------------------ |
|
|
93
|
+
| **Sensation(感官)** | ⭐⭐⭐⭐⭐ | 核心。视听反馈是 15 秒内让玩家"爽"的最快途径。 |
|
|
94
|
+
| **Challenge(挑战)** | ⭐⭐⭐⭐⭐ | 核心。"差一点就赢了"的挫折感是转化的最大驱动力。 |
|
|
95
|
+
| **Submission(消遣)** | ⭐⭐⭐⭐ | 非常适合休闲消除类。"无脑但上瘾"的循环。 |
|
|
96
|
+
| **Discovery(探索)** | ⭐⭐⭐ | 适合翻转、解谜类。发现匹配/路径的"啊哈"时刻。 |
|
|
97
|
+
| **Fantasy(幻想)** | ⭐⭐ | 时间太短难以建立深度代入,但简单的主题包装可以。 |
|
|
98
|
+
| **Expression(表达)** | ⭐⭐ | 时间太短难以展开,但简单的选择(如选角色)可以。 |
|
|
99
|
+
| **Narrative(叙事)** | ⭐ | 几乎不适用。15 秒无法讲好一个故事。 |
|
|
100
|
+
| **Fellowship(社交)** | ⭐ | 几乎不适用。Playable Ad 是单人体验。 |
|
|
101
|
+
|
|
102
|
+
### 设计启发问题
|
|
103
|
+
|
|
104
|
+
在 Brainstorm 阶段,可以用以下问题引导设计方向:
|
|
105
|
+
|
|
106
|
+
1. **"这个游戏主要打哪 2-3 种乐趣?"** — 确定主攻方向
|
|
107
|
+
2. **"玩家在第 5 秒会感受到什么情感?"** — 确保开头有足够的 hook
|
|
108
|
+
3. **"15 秒内能体验到至少一次完整的情感循环吗?"** — 确保时长内有完整体验
|
|
109
|
+
4. **"失败时玩家会觉得'差一点就行了'还是'完全没懂'?"** — 诊断挑战性设计是否到位
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 五、MDA 的设计方法论
|
|
114
|
+
|
|
115
|
+
### 从 Aesthetics 出发倒推设计
|
|
116
|
+
|
|
117
|
+
MDA 框架最有价值的用法不是从 M 推到 A,而是**从 A 反推到 M**:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
1. 确定目标情感(Aesthetics)
|
|
121
|
+
→ "我希望玩家感到满足感 + 轻度挑战"
|
|
122
|
+
|
|
123
|
+
2. 设想需要的动态行为(Dynamics)
|
|
124
|
+
→ "连锁消除带来满足感,有限步数带来挑战"
|
|
125
|
+
|
|
126
|
+
3. 设计支撑这些行为的规则(Mechanics)
|
|
127
|
+
→ "重力填充 + 匹配规则产生连锁;步数限制产生紧迫"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 用 MDA 诊断问题
|
|
131
|
+
|
|
132
|
+
当游戏"感觉不对"时,MDA 提供了诊断路径:
|
|
133
|
+
|
|
134
|
+
| 症状 | 可能的问题层 | 诊断方向 |
|
|
135
|
+
| ---------------------- | --------------- | --------------------------------------------------- |
|
|
136
|
+
| "好看但无聊" | Aesthetics 缺失 | 你瞄准了什么情感?Sensation 有了但 Challenge 没有? |
|
|
137
|
+
| "有策略深度但没人想玩" | Dynamics 问题 | 涌现行为是否有趣?玩家能发现策略吗? |
|
|
138
|
+
| "概念好但执行差" | Mechanics 问题 | 规则是否能产生你想要的 Dynamics? |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 六、参考资源
|
|
143
|
+
|
|
144
|
+
- 📄 **原始论文** (2004):[ResearchGate](https://www.researchgate.net/publication/228884866_MDA_A_Formal_Approach_to_Game_Design_and_Game_Research)
|
|
145
|
+
- 📖 **知乎中文翻译**:[MDA 框架详解](https://zhuanlan.zhihu.com/p/402577913)
|
|
146
|
+
- 🎓 **教育版解读**:[Educational Game Design](https://educationalgamedesign.com/mechanics-dynamics-and-aesthetics-mda-framework-by-hunicke-leblanc-and-zubek.html)
|
|
147
|
+
- 🛠️ **设计工具箱**:[Game Design Toolkit - MDA Framework](https://tkdev.dss.cloud/gamedesign/toolkit/mda-framework/)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Gameplay Sufficiency Self-Check
|
|
2
|
+
|
|
3
|
+
> **When to read**: Game Designer reads this at Step 2, after brainstorm is complete and the living brief is structurally complete. This is a **blocking gate** — do not proceed to Five-Axis Evaluation (Step 3) until all angles pass.
|
|
4
|
+
>
|
|
5
|
+
> **Pattern**: Modeled on Flow B's "玩法核心充分性 Review" — 8 angles covering MDA, Game Feel, visual readability, and Playable Ad flow completeness.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Verify that the design-brief contains enough gameplay depth to support module selection, five-axis evaluation, and downstream production. This check prevents the common failure mode of "proceeding with a technically complete but experientially shallow brief."
|
|
12
|
+
|
|
13
|
+
**Why before Five-Axis**: Five-Axis evaluation and Style Direction must serve the core gameplay. If the gameplay itself is underspecified, five-axis choices become disconnected from player experience.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 8-Angle Review Table
|
|
18
|
+
|
|
19
|
+
For each angle, answer the core question. If the answer is unclear or only partially addressed in design-brief → mark ❌ and return to Step 1 brainstorm for targeted clarification.
|
|
20
|
+
|
|
21
|
+
| # | Angle | Core Question | ✅ Pass Signal | ❌ Fail Signal |
|
|
22
|
+
| --- | ---------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
23
|
+
| 1 | **MDA / Mechanics** | Core rules, player operations, legal/illegal actions — are they explicit? | Can state: "player does X → system checks Y → result Z" with no ambiguity | Only describes features/functions, never states rules |
|
|
24
|
+
| 2 | **MDA / Dynamics** | What strategy, rhythm, risk, or feedback loop emerges from consecutive play? | Can describe: "after 3-5 operations, player experiences {tension/flow/escalation} because {mechanism}" | Single operation is clear but no loop or decision pressure described |
|
|
25
|
+
| 3 | **MDA / Aesthetics** | Which 2-3 emotion types does this game primarily deliver? | Specific emotions named with source (e.g., "Sensation from cascade VFX + Challenge from near-win") | Only "fun" / "exciting" / "engaging" without identifying emotion source |
|
|
26
|
+
| 4 | **Game Feel / Juice** | Is the input → response → satisfaction chain planned? | Each core interaction has: what feedback (visual + audio), when it fires, how it escalates on combo/streak | "Click something → something happens" — no feedback specifics |
|
|
27
|
+
| 5 | **Visual Readability** | Can player instantly distinguish: clickable / unclickable / target / risk / progress? | Design-brief describes HOW each gameplay state is visually communicated to the player | Only describes art style or tech stack, not how visuals serve gameplay understanding |
|
|
28
|
+
| 6 | **Level Progression** | Do levels serve gameplay teaching and challenge escalation, or are they just data files? | Each level/stage has stated intent: "level 1 teaches X, level 2 tests Y, level 3 introduces Z" | Only lists level count or says "difficulty increases" without per-level purpose |
|
|
29
|
+
| 7 | **Playable Ad Flow** | Does Hook → Tutorial → Gameplay → EndCard form a 15-30s emotional closed loop? | All four stages named with emotional beat, timing, and transition triggers | Only describes the gameplay loop, no ad-specific rhythm (hook, CTA, sequel feeling) |
|
|
30
|
+
| 8 | **Data Derivation** | Are data structures derived FROM gameplay rules, or do they drive/constrain gameplay? | Rules/player-experience described first; data representation follows naturally | JSON schema / config format / solver algorithm appears before "how to play" |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Output Format
|
|
35
|
+
|
|
36
|
+
Write self-check results in internal notes or briefly in design-brief appendix:
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
### Gameplay Sufficiency Self-Check
|
|
40
|
+
|
|
41
|
+
| Angle | Result | Notes |
|
|
42
|
+
| ------------------ | ------ | ----------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| MDA / Mechanics | ✅ | Tap to unscrew → color-match to hole → gravity release when all screws removed |
|
|
44
|
+
| MDA / Dynamics | ✅ | Buffer management creates "which screw to remove first" strategy |
|
|
45
|
+
| MDA / Aesthetics | ✅ | Sensation (satisfying unscrew SFX + gravity cascade) + Challenge (buffer full = lose) |
|
|
46
|
+
| Game Feel / Juice | ❌ | Success cascade feedback not specified — need to define what happens on multi-release |
|
|
47
|
+
| Visual Readability | ✅ | Color = screw-hole match affordance; glow = removable; grey = blocked |
|
|
48
|
+
| Level Progression | ✅ | L1: single color; L2: two colors; L3: introduce blocking order |
|
|
49
|
+
| Playable Ad Flow | ✅ | Hook: show stuck board → Tutorial: guided first screw → Gameplay: 3-level cascade → EndCard: "more puzzles" |
|
|
50
|
+
| Data Derivation | ✅ | Rules defined first; level JSON is just instantiation of rule parameters |
|
|
51
|
+
|
|
52
|
+
**Result**: 7/8 pass. ❌ Game Feel → return to Step 1 for targeted clarification on cascade feedback design.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Decision
|
|
58
|
+
|
|
59
|
+
- **All 8 ✅** → Proceed to Step 3 (Five-Axis Evaluation)
|
|
60
|
+
- **Any ❌** → Return to Step 1 with specific angle as the brainstorm target. Ask user only about the gap (not re-do entire brainstorm).
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Reference Frameworks (Condensed for Playable Ads)
|
|
65
|
+
|
|
66
|
+
### MDA — 8 Aesthetics Taxonomy (Playable Ad Relevance)
|
|
67
|
+
|
|
68
|
+
| # | Type | Relevance | Role in Playable Ads |
|
|
69
|
+
| --- | -------------- | ---------- | ----------------------------------------------------------------- |
|
|
70
|
+
| 1 | **Sensation** | ⭐⭐⭐⭐⭐ | Core — visual juice + audio feedback is the baseline for every ad |
|
|
71
|
+
| 2 | **Challenge** | ⭐⭐⭐⭐⭐ | Core — "one more try" / near-win is the #1 conversion driver |
|
|
72
|
+
| 3 | **Submission** | ⭐⭐⭐⭐ | Casual/relaxing ads — low-pressure flow, "mindless but addictive" |
|
|
73
|
+
| 4 | **Discovery** | ⭐⭐⭐ | Puzzle/reveal ads — "aha, that's how it works!" moment |
|
|
74
|
+
| 5 | **Fantasy** | ⭐⭐ | Theme wrapping only — 15s too short for deep immersion |
|
|
75
|
+
| 6 | **Expression** | ⭐⭐ | Dress-up/customization ads — niche |
|
|
76
|
+
| 7 | **Narrative** | ⭐ | Almost never fits in 30s |
|
|
77
|
+
| 8 | **Fellowship** | ⭐ | Playable ads are single-player |
|
|
78
|
+
|
|
79
|
+
**Design questions:**
|
|
80
|
+
|
|
81
|
+
1. "Which 2-3 aesthetics does this game primarily deliver?"
|
|
82
|
+
2. "What does the player feel at second 5? At second 15? At second 25?"
|
|
83
|
+
3. "Can the player experience one complete emotional cycle in 15-30s?"
|
|
84
|
+
|
|
85
|
+
### 5-Component Filter (Quick Scoring)
|
|
86
|
+
|
|
87
|
+
Evaluate each core mechanic against 5 components:
|
|
88
|
+
|
|
89
|
+
| Component | Core Question | ⭐⭐⭐ (Excellent) | ❌ (Fail) |
|
|
90
|
+
| ---------------- | -------------------------------- | ------------------------------ | ----------------------- |
|
|
91
|
+
| **Clarity** | Can player understand in 3s? | Zero-tutorial comprehension | 5s+ still confused |
|
|
92
|
+
| **Motivation** | Why does player want to act? | Can't stop, intrinsic drive | "Why should I do this?" |
|
|
93
|
+
| **Response** | Feedback within 100ms? | Multi-channel instant feedback | Action → silence |
|
|
94
|
+
| **Satisfaction** | Does success feel "juicy"? | Want "one more time" | Success feels empty |
|
|
95
|
+
| **Fit** | Mechanic matches theme/audience? | Inseparable from the game | Feels "bolted on" |
|
|
96
|
+
|
|
97
|
+
**Minimum bar for Playable Ads**: All 5 components ≥ ⭐⭐. Any ❌ = redesign needed.
|
|
98
|
+
|
|
99
|
+
### Game Feel — 6-Component Diagnostic
|
|
100
|
+
|
|
101
|
+
When something "feels off" but can't be named, check:
|
|
102
|
+
|
|
103
|
+
| Component | Symptom | Fix Direction |
|
|
104
|
+
| ----------------- | ------------------------------------ | ------------------------------------------------------------------------------- |
|
|
105
|
+
| Real-Time Control | Sluggish, unresponsive | Reduce input delay; enable animation interrupts |
|
|
106
|
+
| Simulated Space | Floaty, unpredictable movement | Make physics internally consistent (can be unrealistic but MUST be predictable) |
|
|
107
|
+
| Polish (Juice) | Technically correct but lifeless | Add particles, screen shake, squash/stretch, sound layers |
|
|
108
|
+
| Metaphor | Feedback feels "wrong" for the world | Align audio/visual feedback with what real-world physics would suggest |
|
|
109
|
+
| Juiciness | Actions feel powerless | Amplify output-to-input ratio; small tap → big response |
|
|
110
|
+
| Mastery | Gets boring fast | Ensure control depth allows skill expression over time |
|
|
111
|
+
|
|
112
|
+
**Playable Ad note**: In 15-30s, focus on components 1-5. Component 6 (Mastery) manifests as "perceived depth" — player should feel "I could get better at this" which drives install.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Common Failure Patterns
|
|
117
|
+
|
|
118
|
+
| Pattern | Example | How to Fix |
|
|
119
|
+
| ------------------------ | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
120
|
+
| **Feature-list design** | "Has scoring, timer, 3 levels, power-ups" — no rules/emotions | Ask: "When player does X, what happens and how does it FEEL?" |
|
|
121
|
+
| **Tech-first design** | "Uses physics engine with rigid bodies and constraints" — no player perspective | Ask: "What does the PLAYER see and do? Forget the implementation." |
|
|
122
|
+
| **Single-moment design** | "Player taps tiles to match" — no loop/escalation/arc | Ask: "After the 5th successful match, what's different? What pressure builds?" |
|
|
123
|
+
| **Borrowed assumption** | "It's like Candy Crush" without specifying which aspects | Ask: "WHICH aspects of Candy Crush? Swap mechanic? Cascade? Level goals? Visual juice?" |
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Game Designer Legacy Fallback
|
|
2
|
+
|
|
3
|
+
Use this reference only when `dispatchPacket` is null and `sliceState` is empty.
|
|
4
|
+
|
|
5
|
+
This preserves the older growth-ring clarify path for existing projects. It is not part of slice-axis dispatch.
|
|
6
|
+
|
|
7
|
+
Legacy behavior:
|
|
8
|
+
|
|
9
|
+
- Read `npm run state:get -- --json` and follow the disclosed current action.
|
|
10
|
+
- Produce the design document requested by the legacy orchestrator path.
|
|
11
|
+
- Keep early work focused on core gameplay, player action, feedback, progress, and first success.
|
|
12
|
+
- Do not implement runtime code or mark downstream work complete.
|
|
13
|
+
- Write handoff context through `npm run state:set`.
|
|
14
|
+
|
|
15
|
+
When `sliceState` exists, return to the main Game Designer role contract.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Game Designer Workflow Detail
|
|
2
|
+
|
|
3
|
+
> Design execution workflow for `growth-rings-v1` clarify loops.
|
|
4
|
+
>
|
|
5
|
+
> **Slice-axis (primary)**: seed or deepen `sliceState` per §0 in `game-designer.md`. Ring numbers are outer budget only.
|
|
6
|
+
>
|
|
7
|
+
> Ring 1 is a playable seed pass, not a full game design pass. Ring 2 deepens **periphery slices**, not a full layout/production package.
|
|
8
|
+
|
|
9
|
+
## Ring 1 Scope (slice-axis)
|
|
10
|
+
|
|
11
|
+
Ring 1 clarify produces `docs/design-brief.md` (discovery), concise `docs/DESIGN.md`, and a minimal developer `sliceState` queue (1–3 slices).
|
|
12
|
+
|
|
13
|
+
Do not create or read `docs/layout-spec.md`, full `docs/implementation-plan.md`, `docs/style-exploration.md`, MC (Master Composite, 主合成图), ASR (Asset State Reference, 资产状态参考表), or production logs in Ring 1.
|
|
14
|
+
|
|
15
|
+
## Ring 1 Steps (slice-axis)
|
|
16
|
+
|
|
17
|
+
1. Run `npm run state:get -- --json dispatchPacket sliceState`.
|
|
18
|
+
2. Progressive discovery → `docs/design-brief.md`.
|
|
19
|
+
3. Lock playable seed → `docs/DESIGN.md`.
|
|
20
|
+
4. Seed `sliceState` (1–3 developer slices) + optional `meta.activatedSlices[]`.
|
|
21
|
+
5. STOP with handoffContext via `state:set`.
|
|
22
|
+
|
|
23
|
+
## Ring 2 Scope (slice-axis deepening)
|
|
24
|
+
|
|
25
|
+
Ring 2 clarify **extends the slice queue** with 2–4 developer **periphery** slices (HUD, flow skeleton, tutorial hints, peripheral feedback — one slice = one verifiable outcome).
|
|
26
|
+
|
|
27
|
+
| Do | Do not |
|
|
28
|
+
| ----------------------------------------------------- | -------------------------------- |
|
|
29
|
+
| Append `design-brief.md` with periphery discovery | Invoke Artist / TA |
|
|
30
|
+
| Replace/extend `sliceState` with 2–4 developer slices | Lock production `assetMapping` |
|
|
31
|
+
| Optional `layout-spec.md` — zones/screen intent only | Full atom graph expansion |
|
|
32
|
+
| Optional `implementation-plan.md` explain view | `style-exploration` / CTA polish |
|
|
33
|
+
| Patch `atom-tree.meta.activatedSlices[]` | Full feature backlog |
|
|
34
|
+
|
|
35
|
+
Legacy fallback (empty `sliceState`): ring 2 may still require layout-spec + atom-tree per `DESIGNER_REQUIRED_DOCS_BY_RING[2]` — orchestrator discloses via `state:get`.
|
|
36
|
+
|
|
37
|
+
## Ring 1 STOP Context (legacy — empty sliceState)
|
|
38
|
+
|
|
39
|
+
Use this pattern only when no `sliceState` is seeded:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm run state:set -- \
|
|
43
|
+
subagent_stop=true \
|
|
44
|
+
waiting_for=orchestrator \
|
|
45
|
+
last_completed_by=game-designer \
|
|
46
|
+
contextRole=game-designer \
|
|
47
|
+
contextSummary="Playable seed locked: <player action> -> <feedback> -> first win" \
|
|
48
|
+
contextNextRole=ref-flow \
|
|
49
|
+
contextArtifactRefs=docs/DESIGN.md \
|
|
50
|
+
contextCoreAction="<player action>" \
|
|
51
|
+
contextSemanticPlaceholders="player;target;feedback;reward" \
|
|
52
|
+
contextMustKnow="Use DESIGN.md as playable seed only; select engine + compact gameplay trunk; do not build full product tree" \
|
|
53
|
+
contextRequiredFiles="docs/DESIGN.md" \
|
|
54
|
+
next_orchestrator_action="Spawn temporary ref-flow atom-selection subagent for ring 1 atom-tree selection, then scaffold and invoke @developer"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Later Rings (legacy deepening notes)
|
|
58
|
+
|
|
59
|
+
Ring 3 clarify defines Hook / CTA (Call To Action, 行动号召) intent and style constraints for storyboard / Artist work. It does not produce production assets.
|
|
60
|
+
|
|
61
|
+
Ring 4 clarify is spec-gap arbitration only. Answer routed contract ambiguity, then STOP with updated `handoffContext`; do not produce assets, code, or implementation plans.
|
|
62
|
+
|
|
63
|
+
## Anti-Patterns
|
|
64
|
+
|
|
65
|
+
- Treating Ring 1 `DESIGN.md` as a full player-experience contract.
|
|
66
|
+
- Ring 2 "big bag" clarify: layout-spec + full plan + atom graph in one STOP instead of slice queue.
|
|
67
|
+
- Asking many speculative style or progression questions before the playable seed exists.
|
|
68
|
+
- Encoding atom selection, implementation status, asset paths, or production progress in `DESIGN.md`.
|
|
69
|
+
- Using documents as handoff memory. The next agent reads `state:get` context first; documents are artifact refs for traceability.
|