@playcraft/cli 0.0.40 → 0.0.42
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/README.md +66 -3
- package/dist/atom-plan/validate-atom-plan.js +298 -0
- package/dist/cli-root-help.js +1 -1
- package/dist/commands/3d.js +363 -0
- package/dist/commands/create.js +337 -0
- package/dist/commands/image.js +1337 -43
- package/dist/commands/recommend.js +1 -1
- package/dist/commands/remix.js +213 -0
- package/dist/commands/skills.js +1379 -0
- package/dist/commands/tools-3d.js +473 -0
- package/dist/commands/tools-generation.js +452 -0
- package/dist/commands/tools-project.js +400 -0
- package/dist/commands/tools-research.js +37 -0
- package/dist/commands/tools-research.test.js +216 -0
- package/dist/commands/tools-utils.js +183 -0
- package/dist/commands/tools.js +7 -616
- package/dist/config.js +2 -0
- package/dist/index.js +19 -1
- package/dist/utils/version-checker.js +8 -11
- package/package.json +9 -3
- package/project-template/.claude/agents/designer.md +120 -0
- package/project-template/.claude/agents/developer.md +124 -0
- package/project-template/.claude/agents/pm.md +164 -0
- package/project-template/.claude/agents/refs/README.md +73 -0
- package/project-template/.claude/agents/refs/designer-art-style-catalog.md +533 -0
- package/project-template/.claude/agents/refs/designer-color-audio-recipes.md +153 -0
- package/project-template/.claude/agents/refs/designer-deliverable-spec.md +191 -0
- package/project-template/.claude/agents/refs/designer-dimension-axis.md +27 -0
- package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +68 -0
- package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +208 -0
- package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +37 -0
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +109 -0
- package/project-template/.claude/agents/refs/developer-impl-cookbook.md +134 -0
- package/project-template/.claude/agents/refs/developer-phase1-flow.md +136 -0
- package/project-template/.claude/agents/refs/pm-workflow-detail.md +551 -0
- package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +130 -0
- package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-template/.claude/agents/refs/ta-3d-flip-recipe.md +85 -0
- package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-template/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-template/.claude/agents/refs/ta-image-generation-detail.md +356 -0
- package/project-template/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +1108 -0
- package/project-template/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-template/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-template/.claude/agents/reviewer.md +127 -0
- package/project-template/.claude/agents/technical-artist.md +122 -0
- package/project-template/.claude/hooks/README.md +44 -0
- package/project-template/.claude/hooks/validate-atom-plan.mjs +224 -0
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +343 -0
- package/project-template/.claude/settings.json +36 -0
- package/project-template/.claude/settings.local.json +4 -0
- package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +141 -0
- package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-template/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +279 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +235 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-template/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-template/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-template/.claude/skills/playcraft-research/SKILL.md +212 -0
- package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-template/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-template/.claude/skills/playcraft-workflow/SKILL.md +485 -0
- package/project-template/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-template/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-template/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-template/.claude/skills/playwright-cli/references/spec-driven-testing.md +312 -0
- package/project-template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-template/.claude/skills/playwright-cli/references/test-generation.md +138 -0
- package/project-template/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-template/.claude/skills/playwright-cli/references/video-recording.md +157 -0
- package/project-template/.cursor/hooks.json +17 -0
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +137 -0
- package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +18 -0
- package/project-template/CLAUDE.md +280 -0
- package/project-template/assets/audio/bgm/.gitkeep +0 -0
- package/project-template/assets/audio/sfx/.gitkeep +0 -0
- package/project-template/assets/bundles/.gitkeep +0 -0
- package/project-template/assets/images/bg/.gitkeep +0 -0
- package/project-template/assets/images/reference/.gitkeep +0 -0
- package/project-template/assets/images/storyboard/.gitkeep +0 -0
- package/project-template/assets/images/tiles/.gitkeep +0 -0
- package/project-template/assets/images/ui/.gitkeep +0 -0
- package/project-template/assets/images/vfx/.gitkeep +0 -0
- package/project-template/assets/models/.gitkeep +0 -0
- package/project-template/docs/team/agent-conduct.md +121 -0
- package/project-template/docs/team/agent-runtime-matrix.md +62 -0
- package/project-template/docs/team/atom-plan-format.md +105 -0
- package/project-template/docs/team/collaboration.md +297 -0
- package/project-template/docs/team/core-model.md +50 -0
- package/project-template/docs/team/platform-capabilities.md +15 -0
- package/project-template/docs/team/workflow-changelog.md +65 -0
- package/project-template/docs/team/workflow-consistency-checklist.md +140 -0
- package/project-template/game/config/.gitkeep +0 -0
- package/project-template/game/gameplay/.gitkeep +0 -0
- package/project-template/game/scenes/.gitkeep +0 -0
- package/project-template/logs/.gitkeep +0 -0
- package/project-template/ta-workspace/logs/.gitkeep +0 -0
- package/project-template/ta-workspace/scripts/.gitkeep +0 -0
- package/project-template/ta-workspace/tmp/.gitkeep +0 -0
- package/project-template/templates/atom-plan.template.json +26 -0
- package/project-template/templates/atom-plan.template.md +108 -0
- package/project-template/templates/design-brief.template.md +195 -0
- package/project-template/templates/design-lens-checklist.reference.md +117 -0
- package/project-template/templates/design-methodology.md +99 -0
- package/project-template/templates/designer-log.template.md +114 -0
- package/project-template/templates/developer-log.template.md +134 -0
- package/project-template/templates/five-axis-framework.md +186 -0
- package/project-template/templates/intent-clarifications.template.md +58 -0
- package/project-template/templates/layout-spec.template.md +146 -0
- package/project-template/templates/project-state.template.md +237 -0
- package/project-template/templates/review-report.template.md +91 -0
- package/project-template/templates/style-exploration.template.md +93 -0
- package/project-template/templates/ta-log.template.md +343 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Developer Log
|
|
2
|
+
|
|
3
|
+
## Upstream Intake
|
|
4
|
+
|
|
5
|
+
> **Step 0 — mandatory before Spec Quick-Check or any `game/` edit.**
|
|
6
|
+
|
|
7
|
+
| Doc | Read ✓ | One-line takeaway |
|
|
8
|
+
| --------------------------- | ------ | ----------------------------------------- |
|
|
9
|
+
| `docs/project-state.md` | ☐ | {{e.g. ui_pass, Wave 2 done}} |
|
|
10
|
+
| `docs/design-brief.md` | ☐ | {{e.g. flow scenes for navigation}} |
|
|
11
|
+
| `docs/layout-spec.md` | ☐ | {{e.g. zones, assetMapping, atlas paths}} |
|
|
12
|
+
| `docs/atom-plan.json` | ☐ | {{e.g. Developer atoms + skillRefs}} |
|
|
13
|
+
| `docs/atom-plan.md` | ☐ | Impl Skill Context + acceptance |
|
|
14
|
+
| `docs/style-exploration.md` | ☐ | {{e.g. MC panel layout per scene}} |
|
|
15
|
+
| `logs/designer-log.md` | ☐ | {{e.g. palette locked, motion notes}} |
|
|
16
|
+
| `logs/ta-log.md` | ☐ | {{e.g. compliance green, atlas params}} |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Skill Preflight
|
|
21
|
+
|
|
22
|
+
> **Before any `game/` edits (ui_pass).** See `refs/developer-phase1-flow.md` Step 3.
|
|
23
|
+
|
|
24
|
+
| skillRef | access | `ref/` files read (paths) | `scaffold` included |
|
|
25
|
+
| ------------ | --------------------- | ------------------------- | ------------------- |
|
|
26
|
+
| {{skillRef}} | linked / cli-fallback | {{paths}} | yes / no |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## UI Pass Plan
|
|
31
|
+
|
|
32
|
+
> **ui_pass only — mandatory before UI implementation.** Hook enforces on STOP.
|
|
33
|
+
|
|
34
|
+
### Architecture
|
|
35
|
+
|
|
36
|
+
- **Engine**: {{engine}}
|
|
37
|
+
- **Entry**: `game/index.html`
|
|
38
|
+
- **Scene flow**: Hook → Tutorial → EndCard → CTA (navigation only in ui_pass)
|
|
39
|
+
|
|
40
|
+
### Scene-Asset Binding Plan
|
|
41
|
+
|
|
42
|
+
| Scene | Assets (assetMapping) | Atlas/Frame | On disk? |
|
|
43
|
+
| -------- | --------------------- | ----------- | -------- |
|
|
44
|
+
| hook | {{paths}} | {{json}} | {{y/n}} |
|
|
45
|
+
| tutorial | {{paths}} | {{json}} | {{y/n}} |
|
|
46
|
+
| endcard | {{paths}} | {{json}} | {{y/n}} |
|
|
47
|
+
|
|
48
|
+
### Scene navigation (for Reviewer ui_diff)
|
|
49
|
+
|
|
50
|
+
| MC panel | Scene key | How to reach (URL param / button) |
|
|
51
|
+
| ---------- | ----------- | ---------------------------------- |
|
|
52
|
+
| Concept | {{initial}} | {{e.g. ?scene=main or default}} |
|
|
53
|
+
| Hook | hook | {{e.g. ?scene=hook}} |
|
|
54
|
+
| Onboarding | tutorial | {{e.g. button or ?scene=tutorial}} |
|
|
55
|
+
| EndCard | endcard | {{...}} |
|
|
56
|
+
| CTA | cta | {{...}} |
|
|
57
|
+
|
|
58
|
+
### Risk Checklist (ui_pass)
|
|
59
|
+
|
|
60
|
+
- [ ] Every assetMapping path verified on disk
|
|
61
|
+
- [ ] Scene navigation documented for all 5 MC panels
|
|
62
|
+
- [ ] No core gameplay rules in ui_pass scope
|
|
63
|
+
- [ ] No external network dependencies
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Gameplay Pass Plan
|
|
68
|
+
|
|
69
|
+
> **gameplay_pass only — mandatory before PGS / rules implementation.**
|
|
70
|
+
|
|
71
|
+
### PGS Strategy
|
|
72
|
+
|
|
73
|
+
- **Gameplay type**: {{from design-brief}}
|
|
74
|
+
- **Core rules**: {{from Skill recipe}}
|
|
75
|
+
- **First level guarantee**: {{how tutorial ensures win}}
|
|
76
|
+
- **State machine**: {{states and transitions}}
|
|
77
|
+
|
|
78
|
+
### Risk Checklist (gameplay_pass)
|
|
79
|
+
|
|
80
|
+
- [ ] UI shell unchanged unless open UI Diff items
|
|
81
|
+
- [ ] testCases written before rule implementation
|
|
82
|
+
- [ ] First level guarantees player success
|
|
83
|
+
- [ ] CTA handler with platform fallbacks
|
|
84
|
+
- [ ] Zero external network requests
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Experience Flow → Code Mapping
|
|
89
|
+
|
|
90
|
+
| Storyboard Frame | Scene/State | Code Location | Visual Intent |
|
|
91
|
+
| ---------------- | ---------------- | ------------------------- | ------------- |
|
|
92
|
+
| Hook | `scene.hook` | `game/scenes/hook.ts` | {{intent}} |
|
|
93
|
+
| Tutorial | `scene.tutorial` | `game/scenes/tutorial.ts` | {{intent}} |
|
|
94
|
+
| Gameplay | `scene.gameplay` | `game/scenes/gameplay.ts` | {{intent}} |
|
|
95
|
+
| EndCard | `scene.endcard` | `game/scenes/endcard.ts` | {{intent}} |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Dev self-check
|
|
100
|
+
|
|
101
|
+
### ui_pass completion
|
|
102
|
+
|
|
103
|
+
- **devUrl**: {{http://localhost:...}}
|
|
104
|
+
- **devStatus**: ui_ready
|
|
105
|
+
- **UI vs MC + layout-spec**: {{pass/fail — notes}}
|
|
106
|
+
- **Scene navigation works**: {{yes/no}}
|
|
107
|
+
- **Ready for Reviewer ui_diff**: {{yes/no}}
|
|
108
|
+
|
|
109
|
+
### gameplay_pass completion
|
|
110
|
+
|
|
111
|
+
- **devUrl**: {{http://localhost:...}}
|
|
112
|
+
- **devStatus**: ready
|
|
113
|
+
- **Gameplay vs design-brief + PGS**: {{pass/fail — notes}}
|
|
114
|
+
- **Runtime** (CTA, audio, state machine): {{pass/fail — notes}}
|
|
115
|
+
- **Ready for Reviewer load_check**: {{yes/no}}
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Upstream blockers
|
|
120
|
+
|
|
121
|
+
| Path | Issue | Expected | routeTo | Status |
|
|
122
|
+
| -------- | --------- | -------------- | ------------------ | --------------- |
|
|
123
|
+
| {{path}} | {{issue}} | {{acceptance}} | TA / Designer / PM | open / resolved |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Per-Atom Delivery
|
|
128
|
+
|
|
129
|
+
### {{atom_id}} — {{slot_name}}
|
|
130
|
+
|
|
131
|
+
- **Status**: {{status}}
|
|
132
|
+
- **Phase**: ui_pass / gameplay_pass
|
|
133
|
+
- **Output path**: {{file_path}}
|
|
134
|
+
- **Notes**: {{notes}}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Five-Axis Analysis Framework
|
|
2
|
+
|
|
3
|
+
> **When to read**: PM reads this during Step 4 (Five-Axis Evaluation).
|
|
4
|
+
> Every playable ad request must be classified along all five orthogonal axes before generating options.
|
|
5
|
+
|
|
6
|
+
The five axes are **orthogonal** — each is an independent decision. The same Match-3 game can be Flat 2D or 2.5D, Tap-only or Drag, L0 or L1, Competence Arc or Challenge Arc. PM evaluates all five internally, then presents 2-3 complete options (covering all axes) for the user to choose from.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Axis 1 — Mechanic (Gameplay Fusion Types)
|
|
11
|
+
|
|
12
|
+
| Type | Definition | Tutorial Overhead | Risk |
|
|
13
|
+
|------|-----------|-------------------|------|
|
|
14
|
+
| **Single** | One mechanic, no fusion | Baseline | None |
|
|
15
|
+
| **Type A — Visual Fusion** | Mechanics unchanged; elements re-skinned to another game's visual language | None | Very Low |
|
|
16
|
+
| **Type B1 — Passive Borrowing** | Primary mechanic + secondary mechanic auto-triggers (no extra user gesture) | Minimal | Low |
|
|
17
|
+
| **Type B2 — Active Borrowing** | Primary mechanic + secondary mechanic requires user activation (1.5 core gestures) | Slight increase | Medium |
|
|
18
|
+
| **Type C — Sequential Fusion** | Two mechanic sets appear in sequence (includes rotation/alternating mode) | High | High |
|
|
19
|
+
| **Type D — Parallel Fusion** | Two mechanic sets active simultaneously, sharing the screen | Extreme | Extreme (almost never viable for ads) |
|
|
20
|
+
|
|
21
|
+
### Pseudo-Fusion Technique
|
|
22
|
+
|
|
23
|
+
When the user insists on Type C/D, recommend pseudo-fusion: **visually appear as two systems, but the underlying mechanic is single**. Example: Match-3 elimination count drives a monster HP bar — the user only performs match-3 the entire time, but perceives "elimination + combat."
|
|
24
|
+
|
|
25
|
+
### Decision Rules
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
User prompt contains fusion intent?
|
|
29
|
+
YES → Classify A / B1 / B2 / C / D
|
|
30
|
+
Type C/D → Auto-generate downgrade option (pseudo-fusion B1) as recommended
|
|
31
|
+
NO → Single gameplay → PGS priority check:
|
|
32
|
+
1. Implemented PGS (Match-3, Triple Match, Path Elimination, Arrow Pick Match) — lowest risk
|
|
33
|
+
2. Existing Skill (ball_sort, bubble_shooter, etc.) — medium risk
|
|
34
|
+
3. Needs new development — highest risk
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Axis 2 — Dimension (Gameplay Dimension Spectrum)
|
|
40
|
+
|
|
41
|
+
| Dimension | Description | Designer Impact | Developer Impact | Risk Delta |
|
|
42
|
+
|-----------|------------|----------------|-----------------|------------|
|
|
43
|
+
| **Flat 2D** | Pure 2D sprites, no depth | Standard 2D illustration assets | Standard 2D logic | None |
|
|
44
|
+
| **2.5D Visual** | 3D rendered look, but game logic remains 2D grid (depth is decorative) | 3D-feel rendering / model textures, ~3x cost | Logic stays 2D, add depth rendering | +Medium |
|
|
45
|
+
| **Isometric** | Fixed 45° angle, depth is aesthetic not mechanic | Isometric assets, strict pixel alignment required | Isometric coordinate transforms | +Low |
|
|
46
|
+
| **True 3D** | Z-axis is a live mechanic (rotation/depth participates in interaction) | Full 3D models via AI (`generate-3d`) or white model + texture pipeline; 3–5x cost | 3D engine, physics, camera management; all existing PGS invalidated | +High (tool support available, not BLOCKED) |
|
|
47
|
+
|
|
48
|
+
### Key Judgment
|
|
49
|
+
|
|
50
|
+
Is the dimension upgrade "purely visual decoration" (2.5D Visual) or "Z-axis participates in mechanics" (True 3D)? The former only affects Designer asset cost; the latter requires entirely new PGS — fundamentally different risk profiles.
|
|
51
|
+
|
|
52
|
+
### True 3D Tool Support (Available as of 2026-05)
|
|
53
|
+
|
|
54
|
+
True 3D is **High Risk** but no longer blocked. Designer has two asset pipelines:
|
|
55
|
+
|
|
56
|
+
**Pipeline A — AI Generation (best quality, ~1–5 min per model)**
|
|
57
|
+
```bash
|
|
58
|
+
playcraft tools generate-3d --prompt "low-poly wooden crate" --output assets/models/crate.glb
|
|
59
|
+
playcraft 3d optimize --input crate.glb --output crate_opt.glb
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Pipeline B — White Model + Texture (fastest, predictable UV)**
|
|
63
|
+
```bash
|
|
64
|
+
playcraft 3d list-models # sphere, cube, cylinder, cone, torus, plane, capsule
|
|
65
|
+
playcraft tools generate-image --prompt "texture" --output tex.png
|
|
66
|
+
playcraft 3d apply-texture --model cube --texture tex.png --output crate.glb
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Decision Rules
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Z-axis is a live mechanic (rotation/depth affects gameplay)?
|
|
73
|
+
→ True 3D — tool pipeline available (Pipeline A or B above)
|
|
74
|
+
still recommend generating 2.5D Visual option as fallback
|
|
75
|
+
3D visual feel but 2D interaction grid?
|
|
76
|
+
→ 2.5D Visual (Designer cost ~3x, Developer logic unchanged)
|
|
77
|
+
Fixed isometric perspective?
|
|
78
|
+
→ Isometric
|
|
79
|
+
Otherwise → Flat 2D (default, zero additional risk)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Axis 3 — Interaction Modality
|
|
85
|
+
|
|
86
|
+
| Modality | Description | Tutorial Time | Audience Width | Risk Delta |
|
|
87
|
+
|----------|------------|--------------|---------------|------------|
|
|
88
|
+
| **Tap Only** | Single-finger single-tap | ≤1s | Broadest (includes elderly, children) | None |
|
|
89
|
+
| **Tap + Swipe** | Tap + directional swipe | ~3s | Broad | +Low |
|
|
90
|
+
| **Drag** | Press-hold and drag to target | ~5s | Medium | +Low |
|
|
91
|
+
| **Tap + Hold** | Tap + long-press with timing | ~5s | Medium | +Medium |
|
|
92
|
+
| **Multi-touch** | Two or more fingers simultaneously | ≥10s | Very narrow | +Extreme (almost never viable for ads) |
|
|
93
|
+
|
|
94
|
+
### Key Insight
|
|
95
|
+
|
|
96
|
+
The **same mechanic** can have different interaction implementations. Arrow gameplay can be "tap a cell" (Tap Only) or "drag to draw a path" (Drag) — Tutorial time differs by 5x, audience width differs dramatically.
|
|
97
|
+
|
|
98
|
+
### Decision Rules
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
What gesture does the mechanic naturally map to?
|
|
102
|
+
→ Select the most natural modality
|
|
103
|
+
Does a simpler modality (Tap Only) serve the mechanic adequately?
|
|
104
|
+
→ If yes, prefer simpler — wider audience, shorter tutorial
|
|
105
|
+
Multi-touch required?
|
|
106
|
+
→ Flag as high risk for 30s ad; recommend single-touch alternative
|
|
107
|
+
Note tutorial time budget: Tap=1s / Tap+Swipe=3s / Drag=5s / Tap+Hold=5s
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Axis 4 — Narrative Level
|
|
113
|
+
|
|
114
|
+
| Level | Definition | Designer Impact | Tutorial Method | 30s Fitness |
|
|
115
|
+
|-------|-----------|----------------|----------------|------------|
|
|
116
|
+
| **L0 Pure Mechanic** | No character, no story, pure gameplay showcase | No character assets | Highlight hints + text | High (concise) |
|
|
117
|
+
| **L1 Character Present** | Protagonist exists but no plot ("help the kitten match!") | 1 character sprite set needed | Character performs demo action | **Highest (recommended)** |
|
|
118
|
+
| **L2 Scenario Wrapper** | Character + problem scenario ("princess trapped, clear obstacles") | Protagonist + scenario narrative assets | Character dialogue + demo | Medium (must be tight) |
|
|
119
|
+
| **L3 Story-Driven** | Narrative is core, mechanics serve the story | Heavy story assets + storyboards | Cinematic storytelling | Low (almost never fits 30s) |
|
|
120
|
+
|
|
121
|
+
### Key Insights
|
|
122
|
+
|
|
123
|
+
- **L1 is the sweet spot for playable ads** — emotional connection without time overhead.
|
|
124
|
+
- L1+ means Designer needs character assets; PM must define character concept.
|
|
125
|
+
- L3 is **incompatible with 30s format** — auto-downgrade to L2 with explanation.
|
|
126
|
+
|
|
127
|
+
### Decision Rules
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
User mentions character / hero / story? → L1 or L2
|
|
131
|
+
Game genre typically story-heavy (RPG, adventure)? → L2 recommended
|
|
132
|
+
No character signal, generic product? → L0 or L1
|
|
133
|
+
Default for playable ads: L1
|
|
134
|
+
L2+: flag that Designer needs character asset set
|
|
135
|
+
L3: auto-downgrade to L2 — incompatible with 30s format
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Axis 5 — Emotional Arc
|
|
141
|
+
|
|
142
|
+
| Arc Type | Player Journey | Hook Design | Gameplay Feel | EndCard Tone |
|
|
143
|
+
|----------|---------------|-------------|--------------|-------------|
|
|
144
|
+
| **Competence** | Confused → Learned → "I'm smart!" | Show "looks hard but has a pattern" | Generous, guarantee success | "Easy and fun, keep playing" |
|
|
145
|
+
| **Challenge** | Looks hard → All-out effort → Achievement | Create difficult scenario | Difficulty ramp, allow failure | "Think you can beat it?" |
|
|
146
|
+
| **Curiosity** | What is this? → Aha! → Surprise | Show counter-intuitive mechanic | Full of surprises | "More to explore" |
|
|
147
|
+
| **Relaxation** | Enter flow → Enjoy rhythm → Satisfaction | Serene, beautiful imagery | Steady pace, low pressure | "Come relax anytime" |
|
|
148
|
+
| **Urgency** | Crisis → Frantic action → Narrow escape | Emergency scene, countdown | High pressure, fast pace | "One more round!" |
|
|
149
|
+
|
|
150
|
+
### Key Principle
|
|
151
|
+
|
|
152
|
+
The Emotional Arc is the **unified throughline** across Hook → Tutorial → Gameplay → EndCard. If the Hook creates curiosity but Gameplay delivers relaxation, the experience fractures. The arc must be locked at the PM stage; all downstream Agents execute along this arc.
|
|
153
|
+
|
|
154
|
+
### Decision Rules
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
Map user motivation type (JTBD) to arc:
|
|
158
|
+
Stress Relief → Relaxation or Competence Arc
|
|
159
|
+
Challenge/Mastery → Challenge Arc
|
|
160
|
+
Collection/Growth → Competence Arc
|
|
161
|
+
Creativity/Expression or Immersion/Escape → Curiosity Arc
|
|
162
|
+
Time pressure / urgency game → Urgency Arc
|
|
163
|
+
Select ONE arc. Lock it as the throughline for all 4 stages.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Option Generation (After All Five Axes)
|
|
169
|
+
|
|
170
|
+
After completing all five internal classifications, generate 2-3 complete options:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
Each option includes:
|
|
174
|
+
- Mechanic Axis (type + PGS coverage)
|
|
175
|
+
- Dimension Axis (type + Designer impact)
|
|
176
|
+
- Interaction Modality (modality + tutorial time estimate)
|
|
177
|
+
- Narrative Level (level + asset impact)
|
|
178
|
+
- Emotional Arc (arc type + Hook/EndCard tone)
|
|
179
|
+
- Overall Risk Rating (Low / Medium / High / Extreme)
|
|
180
|
+
|
|
181
|
+
Option A (recommended) = lowest-risk viable option, listed first
|
|
182
|
+
Option B = stronger visual/experience but with extra cost
|
|
183
|
+
Option C = user's original request (if extreme risk, mark with warning)
|
|
184
|
+
|
|
185
|
+
User only needs to answer "choose A/B/C" or "agree with recommendation"
|
|
186
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Intent Clarifications
|
|
2
|
+
|
|
3
|
+
> **Living Document**: Agent 间异步澄清的共享空间。
|
|
4
|
+
> 所有 Agent 可读;提问 Agent 和目标 Agent 可写。
|
|
5
|
+
> 不阻塞流水线 — 提问 Agent 先用合理推断继续,回答到达后评估是否调整。
|
|
6
|
+
|
|
7
|
+
## Open Questions
|
|
8
|
+
|
|
9
|
+
| # | From | To | Atom/Topic | Question | Raised At | Status |
|
|
10
|
+
| ----- | -------------- | ---------------- | -------------------- | --------------------- | -------------- | ------ |
|
|
11
|
+
| {{n}} | {{agent_name}} | {{target_agent}} | {{atom_id_or_topic}} | {{specific_question}} | {{stage_name}} | open |
|
|
12
|
+
|
|
13
|
+
<!--
|
|
14
|
+
Status values:
|
|
15
|
+
open — 等待目标 Agent 回答
|
|
16
|
+
pending — 目标 Agent 已看到,正在处理
|
|
17
|
+
answered — 目标 Agent 已回答,提问 Agent 尚未确认
|
|
18
|
+
resolved — 双方达成一致,已移入 Resolved 表
|
|
19
|
+
|
|
20
|
+
Rules:
|
|
21
|
+
- 提问必须具体,不能是"风格不对"这种模糊描述
|
|
22
|
+
- 必须引用具体文件路径或 atomId,方便目标 Agent 定位
|
|
23
|
+
- Confidence = low 的风格解读问题必须写入此表
|
|
24
|
+
- Developer 发现故事板与 layout-spec 坐标不一致时,必须向 PM 提问
|
|
25
|
+
-->
|
|
26
|
+
|
|
27
|
+
## Resolved
|
|
28
|
+
|
|
29
|
+
| # | From | To | Question Summary | Answer | Resolution | Closed By |
|
|
30
|
+
| ----- | -------------- | ---------------- | -------------------- | --------------- | ----------------------- | -------------- |
|
|
31
|
+
| {{n}} | {{agent_name}} | {{target_agent}} | {{one_line_summary}} | {{answer_text}} | {{how_it_was_resolved}} | {{agent_name}} |
|
|
32
|
+
|
|
33
|
+
<!--
|
|
34
|
+
Resolution examples:
|
|
35
|
+
- "已补充到 designer-log.md Style Intent Notes"
|
|
36
|
+
- "已更新 layout-spec.md zones 坐标"
|
|
37
|
+
- "PM 裁决:以故事板为准,layout-spec 将修正"
|
|
38
|
+
- "双方同意保持现状,偏差在可接受范围"
|
|
39
|
+
-->
|
|
40
|
+
|
|
41
|
+
## Metrics
|
|
42
|
+
|
|
43
|
+
| Metric | Value |
|
|
44
|
+
| ---------------------- | --------- |
|
|
45
|
+
| Total questions raised | {{count}} |
|
|
46
|
+
| Unresolved | {{count}} |
|
|
47
|
+
| By Designer | {{count}} |
|
|
48
|
+
| By TA | {{count}} |
|
|
49
|
+
| By Developer | {{count}} |
|
|
50
|
+
| By PM | {{count}} |
|
|
51
|
+
| By Reviewer | {{count}} |
|
|
52
|
+
|
|
53
|
+
<!--
|
|
54
|
+
PM monitors this table:
|
|
55
|
+
- If single Agent receives >3 questions → intent transmission fault, record in DAG Revisions
|
|
56
|
+
- If unresolved >3 at any time → PM must intervene and assign priority
|
|
57
|
+
- If Reviewer finds unresolved questions at review stage → deduct Intent Transmission score
|
|
58
|
+
-->
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Layout Spec
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
PM owns paths + specs (Gate #1 lock). CONTRACT only — zones, palette ids, assetMapping, atlas table, WxH/format.
|
|
5
|
+
Do NOT add: storyboard prose, Style Intent Notes, TA logs (→ designer-log / ta-log).
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
> Shared contract between Designer, TA, and Developer. All MUST follow this document.
|
|
9
|
+
|
|
10
|
+
## Screen
|
|
11
|
+
|
|
12
|
+
- Orientation: {{portrait/landscape}}
|
|
13
|
+
- Resolution: {{width}} x {{height}}
|
|
14
|
+
- Safe area: top {{top_safe}}px, bottom {{bottom_safe}}px
|
|
15
|
+
|
|
16
|
+
## Zones
|
|
17
|
+
|
|
18
|
+
| id | role | rect (x, y, w, h) | owner |
|
|
19
|
+
| ----------- | ------------- | -------------------------- | --------------------------- |
|
|
20
|
+
| {{zone_id}} | {{zone_role}} | {{x}}, {{y}}, {{w}}, {{h}} | {{Designer/Developer/both}} |
|
|
21
|
+
|
|
22
|
+
<!--
|
|
23
|
+
Add one row per zone. Common zones:
|
|
24
|
+
- header: HUD (score/progress), usually at top
|
|
25
|
+
- board: Main game area (grid/play field)
|
|
26
|
+
- footer: Extended background area
|
|
27
|
+
- endcard: CTA region, usually at bottom
|
|
28
|
+
|
|
29
|
+
ASCII diagram (update to match your zones):
|
|
30
|
+
┌─────────────────────────┐ y=0
|
|
31
|
+
│ {{zone_1}} │ {{h1}}px
|
|
32
|
+
├─────────────────────────┤
|
|
33
|
+
│ {{zone_2}} │ {{h2}}px
|
|
34
|
+
├─────────────────────────┤
|
|
35
|
+
│ {{zone_3}} │ {{h3}}px
|
|
36
|
+
└─────────────────────────┘
|
|
37
|
+
-->
|
|
38
|
+
|
|
39
|
+
## Color Palette
|
|
40
|
+
|
|
41
|
+
### Element Colors
|
|
42
|
+
|
|
43
|
+
| id | hex | label |
|
|
44
|
+
| -------------- | ------------- | ---------------- |
|
|
45
|
+
| {{element_id}} | {{hex_color}} | {{display_name}} |
|
|
46
|
+
|
|
47
|
+
<!--
|
|
48
|
+
- Element IDs are used by Developer in PGS config
|
|
49
|
+
- Hex colors guide Designer's generation prompts
|
|
50
|
+
- Labels are human-readable names for the elements
|
|
51
|
+
- Typically 4-6 elements for a playable ad
|
|
52
|
+
-->
|
|
53
|
+
|
|
54
|
+
### Other Colors
|
|
55
|
+
|
|
56
|
+
- Background: primary `{{bg_primary_hex}}`, secondary `{{bg_secondary_hex}}`
|
|
57
|
+
- UI: text `{{ui_text_hex}}`, accent `{{ui_accent_hex}}`
|
|
58
|
+
|
|
59
|
+
## Asset Spec
|
|
60
|
+
|
|
61
|
+
| Type | Dimensions | Format |
|
|
62
|
+
| --------------- | --------------------- | ------ |
|
|
63
|
+
| tileSize | {{tile_w}}x{{tile_h}} | webp |
|
|
64
|
+
| backgroundSize | {{bg_w}}x{{bg_h}} | webp |
|
|
65
|
+
| iconSize | {{icon_w}}x{{icon_h}} | webp |
|
|
66
|
+
| audio (BGM/SFX) | — | mp3 |
|
|
67
|
+
|
|
68
|
+
<!--
|
|
69
|
+
Default runtime formats: images WebP, audio MP3. TA delivers atlas groups as .webp + .json sidecar.
|
|
70
|
+
-->
|
|
71
|
+
|
|
72
|
+
## Atlas grouping (Gate #1 — PM defines)
|
|
73
|
+
|
|
74
|
+
| groupId | elementIds | atlasPath | sidecarPath |
|
|
75
|
+
| ------- | ---------------- | ------------------------------------ | ------------------------------------ |
|
|
76
|
+
| tiles | {{id1}}, {{id2}} | assets/images/tiles/tiles_atlas.webp | assets/images/tiles/tiles_atlas.json |
|
|
77
|
+
| ui | {{id3}}, {{id4}} | assets/images/ui/ui_atlas.webp | assets/images/ui/ui_atlas.json |
|
|
78
|
+
|
|
79
|
+
<!--
|
|
80
|
+
Rules: ≥2 elements in same logical class (tiles / ui / vfx) → ONE webp+json atlas.
|
|
81
|
+
Single large assets (full-screen bg) → one webp path only. Digit strip → separate webp (see Text Assets).
|
|
82
|
+
Each elementId in assetMapping uses atlasPath + frameId OR single visualAsset path.
|
|
83
|
+
-->
|
|
84
|
+
|
|
85
|
+
## Asset Mapping
|
|
86
|
+
|
|
87
|
+
| elementId | visualAsset / atlas | frameId | sfx |
|
|
88
|
+
| -------------- | ------------------------------------- | ------- | ------------------------------------- |
|
|
89
|
+
| {{element_id}} | assets/images/tiles/tiles_atlas.webp | tile_01 | {{sfx_path_or_dash}} |
|
|
90
|
+
| — | assets/images/bg/{{bg_filename}}.webp | — | — |
|
|
91
|
+
| — | assets/images/ui/{{ui_element}}.webp | — | — |
|
|
92
|
+
| — | assets/images/txt/{{text}}.webp | — | — |
|
|
93
|
+
| — | assets/images/vfx/{{vfx}}.webp | — | — |
|
|
94
|
+
| — | — | — | assets/audio/sfx/{{sfx_filename}}.mp3 |
|
|
95
|
+
| — | — | — | assets/audio/bgm/{{bgm_filename}}.mp3 |
|
|
96
|
+
|
|
97
|
+
<!--
|
|
98
|
+
CRITICAL: This mapping is the integration contract!
|
|
99
|
+
- Designer saves files at EXACTLY these paths
|
|
100
|
+
- Developer references EXACTLY these paths in code
|
|
101
|
+
- Path mismatch = integration failure
|
|
102
|
+
- Use "—" for cells that don't apply
|
|
103
|
+
|
|
104
|
+
Transparency convention (TA auto-derives from path — PM does NOT define):
|
|
105
|
+
assets/images/bg/ → opaque, full-screen background (TA verifies edge-to-edge)
|
|
106
|
+
assets/images/ui/ → needs alpha (TA applies chroma key + remove-background)
|
|
107
|
+
assets/images/txt/ → needs alpha (TA applies chroma key + remove-background)
|
|
108
|
+
assets/images/vfx/ → needs alpha (TA applies chroma key + remove-background)
|
|
109
|
+
assets/images/tiles/ → needs alpha by default (except card faces / board pieces)
|
|
110
|
+
assets/audio/ → N/A (not image)
|
|
111
|
+
|
|
112
|
+
TA determines chroma key color (green/blue/magenta) based on element color palette
|
|
113
|
+
and color conflict rules — see ta-pipeline-cookbook.md Step 0e.
|
|
114
|
+
-->
|
|
115
|
+
|
|
116
|
+
## Text Assets
|
|
117
|
+
|
|
118
|
+
All visible text is rendered as image assets — no font files in the final build.
|
|
119
|
+
|
|
120
|
+
### Static Text (baked into Master Composite concept panel)
|
|
121
|
+
|
|
122
|
+
| id | text content | asset path | notes |
|
|
123
|
+
| ----------- | --------------- | --------------------------------------- | ------------------------ |
|
|
124
|
+
| {{text_id}} | {{text_string}} | assets/images/ui/{{text_filename}}.webp | TA extracts from concept |
|
|
125
|
+
|
|
126
|
+
<!--
|
|
127
|
+
Common static text: game title, CTA button label, tutorial instructions, "YOU WIN", stage labels.
|
|
128
|
+
Designer includes all static text in the Master Composite concept panel.
|
|
129
|
+
TA extracts each text element using segment and saves to the specified path.
|
|
130
|
+
-->
|
|
131
|
+
|
|
132
|
+
### Digit Sprite Strip (for dynamic numbers)
|
|
133
|
+
|
|
134
|
+
- **Characters**: `{{digit_characters}}`
|
|
135
|
+
- **Cell size**: {{cell_w}}x{{cell_h}}
|
|
136
|
+
- **Asset path**: `assets/images/ui/digits.webp`
|
|
137
|
+
|
|
138
|
+
<!--
|
|
139
|
+
PM defines the character set based on what dynamic text the game needs.
|
|
140
|
+
Common sets:
|
|
141
|
+
- Score only: "0123456789"
|
|
142
|
+
- Score + timer: "0123456789:."
|
|
143
|
+
- Score + multiplier: "0123456789x+,."
|
|
144
|
+
Designer generates a single horizontal strip image with all characters in order.
|
|
145
|
+
Developer slices by character index at runtime (char_x = index * cell_w).
|
|
146
|
+
-->
|