@oh-story/dsh 0.1.3 → 0.1.5
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 +58 -12
- package/lib/client.js +2970 -537
- package/lib/client.js.map +4 -4
- package/lib/drama/manifest.json +218 -178
- package/lib/drama/skills/short-drama/SKILL.md +110 -117
- package/lib/drama/skills/short-drama/references/audience-reveal.md +14 -67
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +26 -77
- package/lib/drama/skills/short-drama/references/creator-documents.md +204 -0
- package/lib/drama/skills/short-drama/references/creator-workflow.md +73 -63
- package/lib/drama/skills/short-drama/references/knowhow-index.md +5 -0
- package/lib/drama/skills/short-drama/references/look-development.md +2 -3
- package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +14 -48
- package/lib/drama/skills/short-drama/references/production-form-profiles.md +1 -1
- package/lib/drama/skills/short-drama/references/reference-roles.md +32 -135
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +16 -19
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
- package/lib/drama/skills/short-drama-assets/SKILL.md +59 -170
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +18 -25
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +13 -15
- package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +11 -14
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +6 -12
- package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -11
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +21 -2
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +12 -105
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +12 -32
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +45 -155
- package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +12 -13
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +12 -13
- package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +39 -51
- package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +3 -4
- package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +15 -14
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +11 -15
- package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +4 -7
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +23 -23
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +8 -65
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
- package/lib/drama/skills/short-drama-produce/SKILL.md +67 -15
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
- package/lib/drama/skills/short-drama-review/SKILL.md +61 -123
- package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -15
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +15 -16
- package/lib/drama/skills/short-drama-review/references/project-calibration.md +7 -9
- package/lib/drama/skills/short-drama-review/references/review-method.md +8 -9
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +9 -13
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +104 -4
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +27 -19
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +4 -63
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +116 -238
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +9 -34
- package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
- package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +5 -10
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +12 -7
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +27 -62
- package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +16 -25
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +21 -23
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -10
- package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +9 -13
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +16 -71
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +123 -230
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +10 -8
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +24 -6
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +2 -2
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +35 -27
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -11
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +13 -10
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +34 -63
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +17 -73
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
- package/lib/drama/skills/short-drama-write/SKILL.md +74 -268
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +7 -0
- package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +17 -43
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +15 -15
- package/lib/drama/skills/short-drama-write/references/script-craft.md +208 -21
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +11 -70
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
- package/lib/index.js +971 -46
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/LICENSE +21 -0
- package/lib/novel-to-game/README.md +180 -0
- package/lib/novel-to-game/README_ZH.md +178 -0
- package/lib/novel-to-game/VERSION +1 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
- package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
- package/lib/novel-to-game/manifest.json +508 -0
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
- package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
- package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
- package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
- package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
- package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
- package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
- package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
- package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
- package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
- package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
- package/lib/oh-story/manifest.json +419 -309
- package/lib/oh-story/roles/character-designer.md +4 -4
- package/lib/oh-story/roles/consistency-checker.md +1 -1
- package/lib/oh-story/roles/narrative-writer.md +41 -42
- package/lib/oh-story/roles/story-architect.md +19 -23
- package/lib/oh-story/roles/story-explorer.md +8 -5
- package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
- package/lib/oh-story/skills/story/SKILL.md +16 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-import/SKILL.md +21 -8
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
- package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
- package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
- package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/story-long-write/references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/story-long-write/references/{reversal-toolkit.md → long-reversal.md} +18 -32
- package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +5 -4
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +17 -11
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-review/SKILL.md +26 -17
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +85 -41
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
- package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/story-setup/references/agent-references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
- package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-setup/references/agent-references/long-reversal.md} +18 -32
- package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
- package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
- package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → short-reversal.md} +29 -23
- package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
- package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
- package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
- package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
- package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
- package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
- package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
- package/lib/types/client/drama-production-view.d.ts +34 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -0
- package/lib/types/client/drama-production.d.ts +92 -0
- package/lib/types/client/drama-production.d.ts.map +1 -0
- package/lib/types/client/file-activity.d.ts +9 -2
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-intents.d.ts +9 -0
- package/lib/types/client/production-intents.d.ts.map +1 -0
- package/lib/types/client/production-prompts.d.ts +9 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -0
- package/lib/types/client/production-runtime.d.ts +58 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -0
- package/lib/types/client/video-studio.d.ts +41 -0
- package/lib/types/client/video-studio.d.ts.map +1 -0
- package/lib/types/client/workbench-ui.d.ts +5 -0
- package/lib/types/client/workbench-ui.d.ts.map +1 -0
- package/lib/types/game-verification.d.ts +16 -0
- package/lib/types/game-verification.d.ts.map +1 -0
- package/lib/types/index.d.ts +5 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/production-intent.d.ts +21 -0
- package/lib/types/production-intent.d.ts.map +1 -0
- package/lib/types/production-tool.d.ts +5 -0
- package/lib/types/production-tool.d.ts.map +1 -0
- package/lib/types/reference-tool.d.ts +6 -0
- package/lib/types/reference-tool.d.ts.map +1 -0
- package/lib/types/role-provider.d.ts.map +1 -1
- package/lib/types/role-tool.d.ts +3 -1
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts +7 -0
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts +42 -0
- package/lib/types/video-project.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +6 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts +20 -0
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +282 -0
- package/lib/video-recap/LICENSE +21 -0
- package/lib/video-recap/README.en.md +257 -0
- package/lib/video-recap/README.md +255 -0
- package/lib/video-recap/manifest.json +684 -0
- package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
- package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
- package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
- package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
- package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
- package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
- package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
- package/lib/video-recap/skills/video-script/SKILL.md +248 -0
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
- package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
- package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
- package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
- package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
- package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
- package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
- package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
- package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
- package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
- package/package.json +57 -41
- package/lib/drama/skills/short-drama/references/lifecycle-commands.md +0 -130
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
- /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
- /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 概念选择方法
|
|
2
|
+
|
|
3
|
+
## 类型与先例
|
|
4
|
+
|
|
5
|
+
类型由玩家大部分时间用什么能力解决问题决定,不由原作表面上有多少战斗、恋爱或对白决定。范围可以
|
|
6
|
+
缩小,核心循环不能削到只剩一次判断或一个放行按钮。
|
|
7
|
+
|
|
8
|
+
先例按设计问题选择,不按题材相似选择。一个主要玩法先例应能说明核心动词、循环、压力与熟练度;
|
|
9
|
+
辅助先例只补主要先例回答不了的独立问题。记录借什么、明确不借什么和事实来源,不收集与当前决定
|
|
10
|
+
无关的销量或排名。
|
|
11
|
+
|
|
12
|
+
需要玩家操纵空间、视角或地形时使用实时空间;固定镜头和连续场景不必为了“更像游戏”强做三维。
|
|
13
|
+
平台与技术只是实现约束,不替代玩法判断。
|
|
14
|
+
|
|
15
|
+
## 硬否决
|
|
16
|
+
|
|
17
|
+
出现任一情况就重做,不靠评分补偿:
|
|
18
|
+
|
|
19
|
+
- 玩家读完或点完一段只让既定剧情继续,换选择不会改变后续原因、关系、路线或结果;
|
|
20
|
+
- 没有 3–5 个可重复参与手段,或这些动作不产生压力、取舍、状态变化与熟练度差异;
|
|
21
|
+
- 原作中心规则、情感或伦理张力只存在于过场和名词,核心循环与它无关;
|
|
22
|
+
- 删除专有名词后,本作与通用模板没有动作对象、代价或世界回应上的差异;
|
|
23
|
+
- 最小切片依赖开放世界、多人服务、生产级内容量或不可获得资产;
|
|
24
|
+
- 依赖复制其他游戏受保护的角色、地图、UI、文本或素材;
|
|
25
|
+
- 玩法无法用一个主要先例或清楚的循环说明,玩家也无法预判自己反复在做什么;
|
|
26
|
+
- 切片从头到尾只有数值或文本增加,没有新的参与手段、可达空间、可问对象或局面;
|
|
27
|
+
- 玩家介入被兑现成花资源放行既定结果,缺少因果权或结算权。
|
|
28
|
+
|
|
29
|
+
## 玩家能动性
|
|
30
|
+
|
|
31
|
+
- **因果权**:玩家的选择决定事情为什么发生、朝哪里转;选什么都汇入同一原因即不成立。
|
|
32
|
+
- **结算权**:世界会点名玩家做过的事,代价落在他在乎的对象上;只给总分或旁白总结不成立。
|
|
33
|
+
|
|
34
|
+
每个方向用一句话回答:“玩家做了什么,使这件事只能这样发展,而且结果怎样看得出是他造成的?”
|
|
35
|
+
|
|
36
|
+
## 身份专属命令
|
|
37
|
+
|
|
38
|
+
自然语言不是默认输入方式。只有当玩家需要以角色身份组织对象、执行人、条件、期限或知情范围,且措辞
|
|
39
|
+
差异本身值得保留时,才选择一项 `signature_command`;实时瞄准、移动、节奏操作或已有按钮已经完整表达
|
|
40
|
+
核心动词时写 `N/A`。不开放通用“你想做什么”,也不把每个 NPC 都变成聊天入口。
|
|
41
|
+
|
|
42
|
+
五项字段组成一条因果链:`player_job → recurring_job_loop → signature_command → resistance_chain →
|
|
43
|
+
advancement_ladder`。`signature_command` 选中时只先锁 `id`、玩家可见 `label` 和候选 `intents`;具体
|
|
44
|
+
槽位、验证器与提交项由世界设计裁决。意图数量服从最小切片,不设跨项目固定数;玩家表达先编译成
|
|
45
|
+
有限候选动作,世界仍可拒绝、部分执行、走样、泄露或延期追责。若自由表达最后只等价于按一个现成
|
|
46
|
+
按钮,且没有增加身份感、组合空间或可读后果,就不采用。
|
|
47
|
+
|
|
48
|
+
## 体验承载类型
|
|
49
|
+
|
|
50
|
+
- `system-led`:玩家主要操作规则,熟练度来自走位、出招、分配、经营或建造。
|
|
51
|
+
- `narrative-led`:玩家主要读局面、追问、比对信息、表态并承担回响;拿掉数值面板仍知道该争取什么。
|
|
52
|
+
- `hybrid`:两层各自成立且双向影响;一层只是为另一层放行时,按真正承载体验的那层记录。
|
|
53
|
+
|
|
54
|
+
用“拿掉测试”判断:删掉系统层或场景/对白层,哪一边会让体验失去主要决策?两边都塌且彼此读写,
|
|
55
|
+
才是 `hybrid`。
|
|
56
|
+
|
|
57
|
+
## 互动叙事结构
|
|
58
|
+
|
|
59
|
+
互动叙事的可重复循环可以是:读局面 → 追问/调查 → 比对证词与证据 → 表态或行动 → 承受回响。
|
|
60
|
+
熟练度来自知道谁掌握什么、何时施压、什么必须隐瞒,以及先前行为怎样改变当前局面。
|
|
61
|
+
|
|
62
|
+
按内容预算选择结构:
|
|
63
|
+
|
|
64
|
+
| 结构 | 适用情况 | 主要成本 |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| 主干加瓶颈 | 关系与立场变化需要记忆,但关键事件可汇流 | 状态变体 |
|
|
67
|
+
| 任务簇 | 调查、取证、地点顺序可交换 | 节点组合 |
|
|
68
|
+
| 长廊 | 命定主线必须被所有玩家看到 | 分支较浅 |
|
|
69
|
+
| 分院帽 | 前段选择分配到不同后半程 | 多套后半程 |
|
|
70
|
+
| 树洞 | 短小、多周目、分支很少汇流 | 大量内容不可见 |
|
|
71
|
+
|
|
72
|
+
不设汇流时分支不要连续膨胀;用“节点数 × 状态变体 × 关键人物数”估算内容,而不是画一棵无限树。
|
|
73
|
+
|
|
74
|
+
## 三段弧
|
|
75
|
+
|
|
76
|
+
三段弧要求玩家能力或局面发生质变:
|
|
77
|
+
|
|
78
|
+
- 探索期:认识可用动作、对象和第一层风险;
|
|
79
|
+
- 成长期:组合动作、读取先前状态,获得新手没有的选择;
|
|
80
|
+
- 成熟期:在较少提示下利用早先积累,完成代表性结果。
|
|
81
|
+
|
|
82
|
+
系统主导看新动词与新可达空间;叙事主导看新可问对象、质证手段、人物态度和只有知情者可达的场景。
|
|
83
|
+
数字变大、多一段文本或无后果选项都不算弧线。
|
|
84
|
+
|
|
85
|
+
## 比较维度
|
|
86
|
+
|
|
87
|
+
1. 原作规则是否改变动作对象、顺序、代价或世界回应;
|
|
88
|
+
2. 玩家是否亲手 enact 原作的情感或伦理张力;
|
|
89
|
+
3. 玩家能动性是否在切片内被世界回读;
|
|
90
|
+
4. 一张实际画面能否说明身份、动作和独特世界;
|
|
91
|
+
5. 表达是否尊重原作文化,并适合目标界面语言与受众;
|
|
92
|
+
6. 最小原型能否用现有时间、工具与资产证明最大风险。
|
|
93
|
+
|
|
94
|
+
相近方案不做伪精确排序。选择能以最小切片证明核心幻想、且失败条件最清楚的方向。
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-qa
|
|
3
|
+
description: "Verify a game with evidence on its selected target runtime. Launch the actual build and prove real rendering, input, the core loop, at least one designed outcome, restart, and explicit limitations without dressing subjective fun up as a certain verdict. Use for test a generated game, QA a game build, check whether the game is fully playable, or verify the build. 游戏证据化质量验证。在选定的目标运行环境中启动实际构建,证明真实渲染、输入、核心循环、至少一个设计结果、重开和明确限制,不把主观趣味包装成确定性结论。用于测试生成游戏、检查游戏能否完整游玩或验证构建。"
|
|
4
|
+
---
|
|
5
|
+
# 游戏质量验证
|
|
6
|
+
|
|
7
|
+
验证当前候选能否完成最小可玩闭环,不把自动化结果包装成趣味、平衡、权利或发布质量结论。
|
|
8
|
+
|
|
9
|
+
读取 [qa-contract.md](references/qa-contract.md) 定判据,按
|
|
10
|
+
[test-design-method.md](references/test-design-method.md) 设计最少但有区分力的检查。
|
|
11
|
+
|
|
12
|
+
产物语言由 `PRODUCT_BRIEF.md` 锁定;未锁定时跟随对话语言,不默认产出中文。
|
|
13
|
+
|
|
14
|
+
## 唯一必需合同
|
|
15
|
+
|
|
16
|
+
每个候选都必须用真实运行证据覆盖:`launch`、`render`、`input`、`coreLoop`、`outcome`、`restart`。
|
|
17
|
+
`targetFinish` 描述成色,不改变这组六项。`checks` 恰好只含六键;项目回归与诊断只能映射回其中
|
|
18
|
+
一项、写入 `verify.suites` / evidence,或作为 limitation,不得生成第七道门。
|
|
19
|
+
|
|
20
|
+
这是一条自动化或代理可执行的运行验证,不要求真人试玩、主观评分或逐项人工批准。需要真人研究时
|
|
21
|
+
另立产品研究任务,不得把它变成当前候选 PASS 的隐藏前置条件。
|
|
22
|
+
|
|
23
|
+
## 执行
|
|
24
|
+
|
|
25
|
+
1. 读取 `targetRuntime`、`testedRuntime` 和权威 verify;与 PRODUCT_BRIEF/BUILD_BRIEF 冲突时先报错,
|
|
26
|
+
不由 QA 猜值。
|
|
27
|
+
2. 只运行一次权威 verify:它在 testedRuntime 从 clean start → 核心动作 → 设计结果 → restart
|
|
28
|
+
完成整条路径,并记录 command、exit code、环境、六项结果、最小证据和实际失败。
|
|
29
|
+
3. 对照 GAME_DESIGN 中会改变结果的不变量和三段弧结束标记;只验证批准的设计承诺,不遍历所有
|
|
30
|
+
代码路径。
|
|
31
|
+
4. 若候选有可执行模型、事件日志或 patch,由同一权威 verify 内嵌项目回归,不由 QA 另跑第二条命令:
|
|
32
|
+
同版本同初态/seed/输入得到同一终态,非法动作不提交,未选分支不污染,角色与玩家不读取未获知事实;
|
|
33
|
+
patch 只改变声明节点并重放受影响路径。若有 `signature_command`,还验证规范化候选的确定性提交、
|
|
34
|
+
否定/含混/冲突输入不误命中、执行阻力可拒绝或部分完成、实际结果与反馈一致、到期事项准时且只触发
|
|
35
|
+
一次;谈话不得越权提交效果或泄露知识。失败按影响映射到 `coreLoop` / `outcome` / `restart` 或写
|
|
36
|
+
limitation,不新增 checks。
|
|
37
|
+
5. 记录 limitation 和问题的 product/design/art/build 归属。趣味、长期平衡、留存和商业价值只能写成
|
|
38
|
+
未验证风险,不给确定性 PASS。
|
|
39
|
+
|
|
40
|
+
优先使用已有可观察状态;只有无法判断结果时才增加最小测试钩子。不要为了 QA 重构游戏或强制某种
|
|
41
|
+
框架、测试库或调试接口。
|
|
42
|
+
|
|
43
|
+
## 输出
|
|
44
|
+
|
|
45
|
+
- `qa/verification.json`:唯一 QA 事实源,包含三态 status、权威命令、complete run、六项 checks、
|
|
46
|
+
一条证据路径和 limitations。证据文件保留运行细节,不再复制一份 `qa` 结论对象,也不再生成
|
|
47
|
+
重复的人工可读 QA 报告。
|
|
48
|
+
|
|
49
|
+
状态只取 `NOT_RUN` / `FAIL` / `PASS`。缺口写结构化 limitation,不发明 `PASS_WITH_GAPS`;未运行或
|
|
50
|
+
失败的必需项不能满足整体 PASS。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# 质量验证契约
|
|
2
|
+
|
|
3
|
+
本契约只规定什么结论需要什么证据。测试框架、调试接口和实现结构由项目决定。
|
|
4
|
+
|
|
5
|
+
## 状态与事实源
|
|
6
|
+
|
|
7
|
+
状态只取 `NOT_RUN` / `FAIL` / `PASS`。未验证不是通过,安全失败也不是成功降级。
|
|
8
|
+
|
|
9
|
+
`qa/verification.json` schema v3 恰好使用以下顶层字段,`checks` 恰好只含六键:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"schemaVersion": 3,
|
|
14
|
+
"status": "PASS",
|
|
15
|
+
"verify": {"command": "<权威命令>", "exitCode": 0},
|
|
16
|
+
"completeRun": {
|
|
17
|
+
"id": "main-path",
|
|
18
|
+
"cleanContext": true,
|
|
19
|
+
"terminal": "designed-outcome",
|
|
20
|
+
"restart": "initial-state",
|
|
21
|
+
"evidence": "qa/evidence/run.json"
|
|
22
|
+
},
|
|
23
|
+
"checks": {
|
|
24
|
+
"launch": "PASS", "render": "PASS", "input": "PASS",
|
|
25
|
+
"coreLoop": "PASS", "outcome": "PASS", "restart": "PASS"
|
|
26
|
+
},
|
|
27
|
+
"limitations": [
|
|
28
|
+
{"scope": "target device", "reason": "not available"}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`completeRun.evidence` 指向非空的 JSON 观察清单。清单只保存事实,不复制 command、exitCode 或
|
|
34
|
+
六项 PASS/FAIL:`schemaVersion: 1`、与 `completeRun.id` 相同的 `runId`、非空 `environment`、
|
|
35
|
+
非空 `inputTrace`,以及恰好包含六键的 `observations`。每项观察含非空 `id`、实际 `inputs` 和
|
|
36
|
+
`state`;`render.visual` 必须指向工作区内非空画面,`outcome.state` 与 `restart.state` 分别记录
|
|
37
|
+
`completeRun.terminal` 和 `completeRun.restart`。其他观察也可引用同次运行的画面。
|
|
38
|
+
|
|
39
|
+
权威命令无论成功失败都原子重写 `verification.json`,旧 PASS 不得在失败复跑后幸存。项目回归只放
|
|
40
|
+
`verify.suites` 或证据诊断;若其失败破坏六项之一,映射到该键。
|
|
41
|
+
|
|
42
|
+
## 最小可玩闭环
|
|
43
|
+
|
|
44
|
+
一次权威运行至少证明:
|
|
45
|
+
|
|
46
|
+
1. 候选在实际 `testedRuntime` 启动,无阻断错误;
|
|
47
|
+
2. 画面非空且会随时间或操作变化;
|
|
48
|
+
3. 真实输入引起可观察状态变化;
|
|
49
|
+
4. 核心循环完整执行;
|
|
50
|
+
5. 至少一个设计结果可达;
|
|
51
|
+
6. restart 回到定义初态。
|
|
52
|
+
|
|
53
|
+
步骤、状态和画面必须属于同一次 complete run;截图不能证明隐藏状态,状态 dump 不能证明真实画面。
|
|
54
|
+
目标运行环境与实际测试环境不同时,把目标独有输入、打包、性能和设备行为写 limitation;替代版本
|
|
55
|
+
不能证明目标平台已通过。
|
|
56
|
+
|
|
57
|
+
## 条件检查与边界
|
|
58
|
+
|
|
59
|
+
连续 3D、多语言、无障碍、语音、媒体或生成资产只在游戏实际采用时运行诊断。只看玩家能否正确
|
|
60
|
+
看到、听到、操作和完成核心流程;诊断不新增 checks,也不审计供应商请求、营销素材或生产身份。
|
|
61
|
+
|
|
62
|
+
只有 brief/ledger 预先批准的 fallback 才能继续,并证明核心动作、状态、结果、可读反馈和 restart
|
|
63
|
+
仍成立。安全失败仍是 FAIL;测试替身只证明测试层;placeholder 只描述完成度;历史证据只说明旧候选。
|
|
64
|
+
|
|
65
|
+
不要求真人试玩、人工审查或另写 QA 报告。主观趣味、平衡、沉浸、选择重量、权利合规和发布质量
|
|
66
|
+
不由本合同确定性证明;需要这类研究时另立任务,不影响本合同的机器 PASS。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 测试设计方法
|
|
2
|
+
|
|
3
|
+
目标是用最少证据判断候选是否完成可玩闭环,而不是把项目变成测试工程展示。
|
|
4
|
+
|
|
5
|
+
## 一、从六项结果反推
|
|
6
|
+
|
|
7
|
+
为 launch、render、input、coreLoop、outcome、restart 各选择一条最小证据,不为项目自己的回归与诊断复制平行验收矩阵。
|
|
8
|
+
|
|
9
|
+
## 二、从设计承诺写断言
|
|
10
|
+
|
|
11
|
+
读取 GAME_DESIGN 中会改变结果的门槛、结局、失败条件、三段弧结束标记和核心动词,为每项选择一
|
|
12
|
+
个正例和一个有区分力的边界或反例。断言盯住玩家可观察结果,不绑定内部函数名。
|
|
13
|
+
|
|
14
|
+
叙事项目重点检查关键选择、持久状态读取、分支汇流、结局条件和人物知识边界;系统项目重点检查
|
|
15
|
+
状态迁移、门槛、资源、失败和重开。修复缺陷时补能重现原故障的回归,不只验证 happy path。
|
|
16
|
+
|
|
17
|
+
有事件日志时,保存规则版本、初态摘要、seed、输入序列和终态摘要,完整重放一次;随机探索只用于找
|
|
18
|
+
死路和失败 seed,不能代替真实路径。叙事生成存在时增加四类反例:事实冲突、承诺冲突、改写玩家已
|
|
19
|
+
提交行动、向未见证者泄密。模型输出只算候选,断言最终由规则器提交的状态与玩家可见反馈。
|
|
20
|
+
|
|
21
|
+
存在身份专属命令时,正例从固定规范化候选开始证明同状态/seed/版本得到同一执行轨迹与结果;解析层另用
|
|
22
|
+
同义表达、否定、条件、缺槽和互斥要求做契约检查,允许澄清或拒绝,不允许静默误命中。反例覆盖执行人
|
|
23
|
+
不在场、资源不足、空间无权限、人物未知情和承诺冲突,均须无提交;部分执行或泄露时,反馈必须与实际
|
|
24
|
+
证物、见证和知识变化一致。到期事项检查不早触发、到期重新上桌、只结算一次,并在存读/重开后不复活;
|
|
25
|
+
谈话产生的事实、承诺、权限、拒绝和见证也必须先通过规则验证。
|
|
26
|
+
|
|
27
|
+
局部 patch 后先重放原失败路径,再选一条共享上游状态但走相邻分支的反例。文本/资产替换可保持状态
|
|
28
|
+
摘要不变;变量语义、节点 id、动作效果或知识权限改变则要求存档/日志迁移,或明确旧版本拒绝载入。
|
|
29
|
+
|
|
30
|
+
## 三、一条完整路径胜过截图堆
|
|
31
|
+
|
|
32
|
+
从 clean start 走到设计结果再 restart。每个 checkpoint 只保留触发输入、预期变化、状态证据、运行
|
|
33
|
+
环境证据和必要代表帧。只有语义发生变化时留新 checkpoint;不要为每次点击保存一张图。
|
|
34
|
+
|
|
35
|
+
时序、动效、碰撞和连续镜头证据必须在正常速度下采集;慢放只用于定位,不能证明体验正常。
|
|
36
|
+
|
|
37
|
+
文字或叙事主导项目的代表帧同时记录目标视口与主游玩面板的实际溢出。若玩家必须滚动才能看完当前
|
|
38
|
+
正文、选择或必要反馈,先归为设计/构建问题;明确由玩家主动打开的账册、图鉴和长档案不在此限。
|
|
39
|
+
跨视口截图矩阵、raw trace 和溢出遍历可放临时目录做诊断,不要为了证明这一点把重型 QA 工程塞进示例。
|
|
40
|
+
|
|
41
|
+
## 四、证据要求
|
|
42
|
+
证据用工作区相对路径且文件真实存在(不引用临时目录、缓存或个人桌面);状态、runtime 和 visual 各证明自己的层,不互相冒充;其余状态取值与 limitation 按 qa-contract.md 记录。
|
|
43
|
+
|
|
44
|
+
大型录屏、逐点击截图、raw trace 和可重建 contact sheet 不长期进 Git;保留当前声明真正引用的最小
|
|
45
|
+
代表证据。问题按 product/design/art/build 归属,主观体验不计入机器 PASS 数量。
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-world-design
|
|
3
|
+
description: "Design game experience, systems, and levels. Converge the chosen concept into one GAME_DESIGN defining the player promise, core loop, how the world responds, the systems actually needed, level pacing, feedback, failure, and a fully playable prototype. Use for design the game world, deepen the gameplay and levels, write the game design document, design the branching story structure, scenes, dialogue and consequences. 游戏体验、系统与关卡策划。把选定概念收束为一份 GAME_DESIGN,定义玩家承诺、核心循环、世界响应、必要系统、关卡节奏、反馈、失败和可完整游玩的原型。用于设计游戏世界、深化玩法和关卡、设计互动叙事的场景对白与分支因果等需求。"
|
|
4
|
+
---
|
|
5
|
+
# 游戏体验与世界设计
|
|
6
|
+
|
|
7
|
+
把选定概念变成可实现的玩家体验,不写世界观百科、工程方案或美术方向。
|
|
8
|
+
|
|
9
|
+
输入必须包含 `SOURCE_BIBLE.md`、已选择的 `CONCEPT.md` 和 `PRODUCT_BRIEF.md`。读取
|
|
10
|
+
[world-design-method.md](references/world-design-method.md);确有资源、门槛或难度时再读
|
|
11
|
+
[numeric-design-method.md](references/numeric-design-method.md)。
|
|
12
|
+
|
|
13
|
+
`narrative-led` 或 `hybrid` 的叙事层同读
|
|
14
|
+
[narrative-design-method.md](references/narrative-design-method.md) 与
|
|
15
|
+
[dialogue-design-method.md](references/dialogue-design-method.md)。需要玩家可见文案时按
|
|
16
|
+
[game-writing-craft.md](references/game-writing-craft.md) 统一声口,不为所有项目强制写长篇对白。
|
|
17
|
+
|
|
18
|
+
产物语言由 `PRODUCT_BRIEF.md` 锁定;未锁定时跟随对话语言,不默认产出中文。
|
|
19
|
+
|
|
20
|
+
## 设计原则
|
|
21
|
+
|
|
22
|
+
- 保护 CONCEPT 的玩家承诺、`experienceProfile` 和不可妥协项;发现范围冲突时回上游修订。
|
|
23
|
+
- 只保留一个核心系统、最多两个支持系统;删除后不影响核心循环的内容不要升格为系统。
|
|
24
|
+
- 规则写成玩家动作 → 状态变化 → 世界反馈 → 后续选择,不用背景设定代替可玩因果。
|
|
25
|
+
- 用“教会 → 变式 → 组合 → 检验 → 命运回收”组织最小切片;默认 10–30 分钟且不超过 brief 时长。
|
|
26
|
+
- NPC、势力、资源和历史只设计到玩家能感知、利用或改变的深度。
|
|
27
|
+
- 不写文件名、函数、存储键、测试脚本、着色器或资产管线;实现结构由构建阶段决定。
|
|
28
|
+
|
|
29
|
+
## 输出合同
|
|
30
|
+
|
|
31
|
+
生成一个 `design/GAME_DESIGN.md`,保持紧凑并包含:
|
|
32
|
+
|
|
33
|
+
1. **体验合同**:玩家身份、承诺、目标感受、`experienceProfile` 与首分钟目标;
|
|
34
|
+
2. **核心动词与循环**:3–5 个动词、短循环、长循环、主要玩法先例,以及原作如何改变动作对象、
|
|
35
|
+
顺序、代价和世界回应;
|
|
36
|
+
3. **世界规则与必要系统**:玩家可见/隐藏信息、行动顺序、随机性、资源或持久状态及其读取点;
|
|
37
|
+
4. **成长与三段弧**:探索、成长、成熟阶段新增的参与手段、可达空间或局面,以及可观察结束标记;
|
|
38
|
+
5. **代表性决策**:用一个场景证明最优选择会随局面翻转,并写清因果权与结算权;
|
|
39
|
+
6. **空间、镜头与关卡节拍**:路线、地标、压力、教学、组合和检验如何制造选择;
|
|
40
|
+
7. **反馈、失败与重开**:输入反馈、状态变化、失败原因、下次可改之处和定义初态;
|
|
41
|
+
8. **叙事附件**:仅在叙事实际承载体验时写场景脊柱、人物议程、知识/证词边界、持久回响、
|
|
42
|
+
分支汇流和结局回收;否则写 N/A;
|
|
43
|
+
9. **语言、文化与交接边界**:界面语言、术语、阅读顺序、内容尺度,以及交给美术和构建的玩家效果;
|
|
44
|
+
10. **可执行切片合同**:最大设计风险、与风险匹配的原型形态、最小状态面、关键动作的前置/效果/观察者、
|
|
45
|
+
会被后续读取的事件,以及固定初态、seed、输入序列、预期状态与反馈;若概念选择了
|
|
46
|
+
`signature_command`,固定 `id / label / intents / slots / validators / commit` 六组最小结构,再追加
|
|
47
|
+
澄清与拒绝条件、委托执行链、实际结果、证物/知情变化和到期回响;
|
|
48
|
+
11. **验证切片**:范围、明确非目标、完整路径和会触发设计修改的观察结果。
|
|
49
|
+
|
|
50
|
+
只有门槛、结局或张力确实读取数值时才做数值预算;叙事状态同理,写入后没有可见读取点就删除。
|
|
51
|
+
规则优先用短表表达,不复制成平行 JSON、go/no-go 表或第二份验收矩阵。
|
|
52
|
+
|
|
53
|
+
## 完成检查
|
|
54
|
+
|
|
55
|
+
- 玩家能从初态通过真实选择到达至少一个结果并重开;
|
|
56
|
+
- 三段弧改变的是可用动作、空间或局面,不只是数字、文本或收集量增加;
|
|
57
|
+
- 核心状态都在后续被读取,主要选择至少一次被世界明确回响;
|
|
58
|
+
- 同一初态、规则版本、seed 与规范化动作输入序列可重放到同一终态;未见证角色不能读取秘密,未选分支不能污染历史;
|
|
59
|
+
- 专属命令若存在,玩家表述、解析候选、实际执行与反馈彼此可区分;无效或含混输入不得偷偷提交近似动作;
|
|
60
|
+
- 支持系统、分支和角色内容没有静默扩出 brief 范围;
|
|
61
|
+
- 文档没有替实现做技术设计,也没有把趣味或平衡写成确定性 PASS。
|
|
62
|
+
|
|
63
|
+
输出交回总入口,不自行推进美术、构建或 QA。
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# 对白与互动选择设计方法
|
|
2
|
+
|
|
3
|
+
对白承担主要体验时,用本方法把人物目标、信息权限和玩家选择写成可实现的场景。它不规定
|
|
4
|
+
台词长度、选项数量或固定节拍;逐字文案的声口见
|
|
5
|
+
[game-writing-craft.md](game-writing-craft.md)。
|
|
6
|
+
|
|
7
|
+
## 一、先写议程,不先写台词
|
|
8
|
+
|
|
9
|
+
先完成 [narrative-design-method.md](narrative-design-method.md) 的场景脊柱,再为会改变局面的
|
|
10
|
+
参与者记录:当前要求、害怕暴露的事、可用筹码、初始策略、受阻后会换的策略和底线。
|
|
11
|
+
|
|
12
|
+
先写行动链:
|
|
13
|
+
|
|
14
|
+
`A 用策略和筹码行动 → B 回应或拒绝 → 局面变化 → A 换招或退出`
|
|
15
|
+
|
|
16
|
+
每轮应改变信息、关系、权力、物件、站位或下一步可做的事。纯粹重复立场的往返应压缩;一方
|
|
17
|
+
每句都成功会把对话变成演讲。
|
|
18
|
+
|
|
19
|
+
## 二、让台词执行动作
|
|
20
|
+
|
|
21
|
+
关键台词应主要执行一种人物动作,例如试探、交换、划界、推责、威胁、保护、求证、拒绝、
|
|
22
|
+
承诺或撤回。同一句事实可以因目标不同而成为不同动作;先定动作,再写句子。
|
|
23
|
+
|
|
24
|
+
保留能推进局面、增加期待、显露人物或改变权力的台词。物件、站位和反应已经表达的意义不要
|
|
25
|
+
再解释。沉默、打断和长发言只有在改变策略或信息条件时才保留;设定信息随压力和行动进入,
|
|
26
|
+
不要让角色整段科普。
|
|
27
|
+
|
|
28
|
+
## 三、人物声音
|
|
29
|
+
|
|
30
|
+
核心人物只需一张紧凑声音卡:
|
|
31
|
+
|
|
32
|
+
- 他认定什么算证据,又怎样证明;
|
|
33
|
+
- 他如何使用称呼、公开范围和关系控制距离;
|
|
34
|
+
- 他如何隐藏、拒绝或转移;
|
|
35
|
+
- 压力下句式和策略怎样变形;
|
|
36
|
+
- 哪条底线被触碰时会出现可追溯变化。
|
|
37
|
+
|
|
38
|
+
人物辨识度来自目标、知识和关系策略,不靠口头禅。交换两名说话者后若关键台词仍完整成立,
|
|
39
|
+
检查缺少的是目标、证据观、知识边界还是关系位置;不要用固定对白长度推断权力。
|
|
40
|
+
|
|
41
|
+
## 四、信息、潜台词与选项
|
|
42
|
+
|
|
43
|
+
人物只能使用本场已经掌握的信息;推断说出口时要听得出仍是推断。潜台词同时包含字面内容、
|
|
44
|
+
想让对方做的事和不能直说的风险,并通过避词、物件、称呼、证据矛盾或公开范围变化让玩家看见。
|
|
45
|
+
没有秘密、风险或权力差时,直说通常比强造潜台词更真实。
|
|
46
|
+
|
|
47
|
+
互动选项写主角真正会说或会做的内容,不用“安抚她”“施压”“信任他”这类作者摘要。选择后
|
|
48
|
+
先给人物反应,再让后续行动承接;按钮、回应和代价提示各做一件事,不重复解释。
|
|
49
|
+
|
|
50
|
+
## 五、修订与交付
|
|
51
|
+
|
|
52
|
+
逐场检查:是否过度解释或收口;人物是否只会重复同一策略;证据、筹码和信息密度是否变化;
|
|
53
|
+
选择是否总套用同一模板;代价是否被当场结清;巧合或第三人是否反复替人物解决问题。
|
|
54
|
+
|
|
55
|
+
修订优先删解释、合并重复轮次、让反对方使用筹码,并让物件或空间承担意义。保留原作中的方言、
|
|
56
|
+
笨拙、急话、称呼和不整齐句式,不把所有人物润色成同一种标准范文。
|
|
57
|
+
|
|
58
|
+
交付前反向走读分支,确认未选事实没有串入;每场至少留下可见变化和退出压力;玩家作判断所需
|
|
59
|
+
的证据不能在删解释时一并删掉。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# 游戏文案写作规范
|
|
2
|
+
|
|
3
|
+
小说改编游戏的玩家可见文本应继承原著的语言资产,同时适应平台、分级和交互节奏。先确定声口,
|
|
4
|
+
再删解释腔和模板腔;适用于标题、引导、按钮、提示、事件、对白、结算和结局。
|
|
5
|
+
|
|
6
|
+
## 一、确定声口
|
|
7
|
+
|
|
8
|
+
根据 `PRODUCT_BRIEF`、原作语域和目标市场确定整体声口,例如古典白话、现代口语、克制写实、
|
|
9
|
+
喜剧或悬疑。结构可以更短、更适合交互,但用词、称呼、礼制和文化概念仍跟随原作;不要把所有
|
|
10
|
+
题材改成同一种网络腔。
|
|
11
|
+
|
|
12
|
+
核心人物各记一行:说话目的、施压方式、句式节奏、称呼习惯、常落到的实物和绝不会说的话。
|
|
13
|
+
只保留会改变实际台词的差异,不靠口头禅制造辨识度。
|
|
14
|
+
|
|
15
|
+
## 二、视角与信息
|
|
16
|
+
|
|
17
|
+
场景按明确视角人物呈现,只写其此刻能感知、记起或合理推断的内容。视角可以换场切换,但不要
|
|
18
|
+
在同一场景随意滑入他人内心,也不要由旁白提前解释秘密、主题或人物品性。
|
|
19
|
+
|
|
20
|
+
玩家作决定所需的证据要可见;结论尽量交给动作、物件、台词和反应。界面读数只服务确实需要
|
|
21
|
+
量化的系统,不替人物和现场叙事。
|
|
22
|
+
|
|
23
|
+
## 三、删模板腔
|
|
24
|
+
|
|
25
|
+
修订时优先处理这些信号:
|
|
26
|
+
|
|
27
|
+
- 用“不是 A,而是 B”、总结句或主题升华替玩家下结论;
|
|
28
|
+
- 直接命名情绪,却没有身体、动作或关系上的表现;
|
|
29
|
+
- 同一动作重复描写,或用万能副词、套语堆出文学感;
|
|
30
|
+
- 人物用完整书面句科普设定、前因后果和自己的真实动机;
|
|
31
|
+
- 所有句子同样工整,所有人物同一种语法、节奏和证据观;
|
|
32
|
+
- 段尾总靠预告、感叹或抽象悬念收束,而不是未完成的行动或具体变化。
|
|
33
|
+
|
|
34
|
+
这些是修订线索,不是机械词表。方言、口吃、急话、地方称呼和题材需要的停顿不应因“规范化”
|
|
35
|
+
被抹平;判断标准是它是否符合人物、场景和原作语域。
|
|
36
|
+
|
|
37
|
+
## 四、交互文本
|
|
38
|
+
|
|
39
|
+
- **按钮与选项**:写玩家将执行的动作或真正会说的话,不写策划标签;
|
|
40
|
+
- **提示与引导**:说明当前可做什么或可见代价,不一次倾倒术语;
|
|
41
|
+
- **事件标题**:给出具体冲突、人物或物件,不用空泛悬念;
|
|
42
|
+
- **结算反馈**:先让人物和世界回应,数字只补充量,不替代意义;
|
|
43
|
+
- **选择节点**:按钮、代价提示和回应各承担不同信息,避免重复解释。
|
|
44
|
+
|
|
45
|
+
## 五、分级与安全边界
|
|
46
|
+
|
|
47
|
+
内容强度服从 `PRODUCT_BRIEF` 和目标平台。亲密或成人向场景仍需明确视角、人物意志、关系变化
|
|
48
|
+
和后果,不把身体描写当作内容本身;不涉及真实人物,不性化未成年角色。
|
|
49
|
+
|
|
50
|
+
## 六、交付自查
|
|
51
|
+
|
|
52
|
+
逐场确认声口一致但人物可区分;信息没有越过视角;玩家能理解选择依据;UI 没有把世界翻译成
|
|
53
|
+
策划术语;删除一句若不损失信息、人物、情绪或行动,就删除。自然度不以固定词频或字数阈值判定。
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 互动叙事设计方法
|
|
2
|
+
|
|
3
|
+
场景、对白、知识差或关键选择承担主要体验时使用本文。写逐字文案时再读
|
|
4
|
+
[dialogue-design-method.md](dialogue-design-method.md) 与
|
|
5
|
+
[game-writing-craft.md](game-writing-craft.md);系统主导项目使用
|
|
6
|
+
[world-design-method.md](world-design-method.md)。
|
|
7
|
+
|
|
8
|
+
## 一、玩家能动性
|
|
9
|
+
|
|
10
|
+
互动叙事至少让玩家拥有两种权利:
|
|
11
|
+
|
|
12
|
+
- **因果权**:选择改变后续事件为何发生、谁采取行动或什么机会被关闭;
|
|
13
|
+
- **结算权**:人物、局面或结局会具体回应玩家做过的事,而不只改变隐藏总分。
|
|
14
|
+
|
|
15
|
+
资源、卡牌和随机判定可以承载选择,不能替代选择。外部事件可以制造麻烦,但不应替玩家
|
|
16
|
+
解决核心矛盾;误会需要有不解释的理由、改变人物行动,并在澄清后留下关系或机会上的残余。
|
|
17
|
+
|
|
18
|
+
## 二、场景脊柱
|
|
19
|
+
|
|
20
|
+
写场景前记录:
|
|
21
|
+
|
|
22
|
+
| 项目 | 要回答的问题 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| 存在理由 | 删除本场会损失哪项选择、证据、关系变化或不可逆行动 |
|
|
25
|
+
| 时空与视角 | 何时何地发生,玩家通过谁感知现场 |
|
|
26
|
+
| 人物议程 | 每个人想得到、保护、隐瞒或确认什么 |
|
|
27
|
+
| 反制筹码 | 谁用人物、证据、物件、时间或身份挡住谁 |
|
|
28
|
+
| 知识边界 | 世界事实、各人物相信和玩家知道分别是什么 |
|
|
29
|
+
| 方向变化 | 哪句话、证词、物件或行动让原计划失效 |
|
|
30
|
+
| 玩家介入 | 玩家观察、追问、表达或采取什么行动 |
|
|
31
|
+
| 离场状态 | 人物、关系、信息和物件如何变化,下一场为何现在发生 |
|
|
32
|
+
|
|
33
|
+
在压力已开始时进入,在局面改变后离开。相邻场景通过人物行动、未付代价、物件去向或时间
|
|
34
|
+
压力连接;只有时间相邻而没有因果连接的场景应合并或删除。
|
|
35
|
+
|
|
36
|
+
## 三、人物与知识
|
|
37
|
+
|
|
38
|
+
核心人物只记录会驱动场景的内容:当前欲望、害怕失去的东西、掌握与误解的信息、可用筹码、
|
|
39
|
+
对玩家行为的记忆、会主动发起的行动,以及声口和底线。人物变化必须能追溯为
|
|
40
|
+
`压力 → 选择 → 局部结果 → 代价 → 新策略`;拒绝改变也可以是有效结果。
|
|
41
|
+
|
|
42
|
+
关键事实维护三层状态:
|
|
43
|
+
|
|
44
|
+
- **世界事实**:实际发生了什么;
|
|
45
|
+
- **人物相信**:每个人知道、误信、怀疑或隐瞒什么;
|
|
46
|
+
- **玩家知道**:玩家当前看见、听见并能合理推断什么。
|
|
47
|
+
|
|
48
|
+
关键证据再区分可见载体、直接支持的最小结论和仍未确定的解释。人物只能使用自己已经掌握的
|
|
49
|
+
信息;新揭示可以改写旧证据的意义,不能改写已经发生的事实,并应改变某人可采取的行动。
|
|
50
|
+
|
|
51
|
+
## 四、选择与隐藏因果
|
|
52
|
+
|
|
53
|
+
关键选择记录玩家掌握的信息、人物目标、可采取的说法或行动、即时反应、持久状态、最近回响、
|
|
54
|
+
延迟回响和终局影响。选项数量跟随局面,不设机械下限;不用道德标签或结果预告代替角色行动。
|
|
55
|
+
|
|
56
|
+
持久状态保存具体事实,例如答应了谁、支持了谁、看过哪份证词或把物件交给谁。每项状态都要有
|
|
57
|
+
写入点、读取点和玩家可感知的回响;没有读取点就删除。优先让人物称呼、行为、场景顺序、可用
|
|
58
|
+
行动或结局体现历史,不把关系压成一个匿名数字。
|
|
59
|
+
|
|
60
|
+
设计玩家可见的信息节拍时,按“当前局面 → 必要依据 → 选择 → 人物回应”披露,而不是把全部系统
|
|
61
|
+
状态、历史、证据、解锁条件和远期后果一次摊在选择页。旧事只有在它改变当前人物说法、选项可用性
|
|
62
|
+
或代价时才回到正戏,并贴近受影响的那一项;完整关系史与账目属于按需档案。若主要选择需要滚动后
|
|
63
|
+
才能看全,先拆拍、删重复或把细节改为主动揭示,不用更小字号把信息爆炸伪装成高密度玩法。
|
|
64
|
+
|
|
65
|
+
共享场景可以汇流,但要按历史替换人物、对白、物件和可用行动,且不得把未选行动当作已发生。
|
|
66
|
+
首个原型宁可保留少量会被回收的选择,也不要堆积无人记得的分支。
|
|
67
|
+
|
|
68
|
+
## 五、揭示、节奏与前提装置
|
|
69
|
+
|
|
70
|
+
揭示应来自已经出现过的事实或玩家选择,并迫使人物改变行动。检查谁能接触该事实、证据为何
|
|
71
|
+
现在出现、它排除了哪些旧解释,以及得知后谁必须换策略。突然加入更大的秘密不等于反转。
|
|
72
|
+
|
|
73
|
+
场景在行动、对话、观察和恢复段之间切换。当前悬念兑现前可种下下一项压力,但不要让所有场景
|
|
74
|
+
保持同一情绪或同等信息密度,也不要把本场造成的代价立即全部结清。
|
|
75
|
+
|
|
76
|
+
原作含重生、预知、系统或特殊能力时,明确其既有规则、信息边界和可见代价。装置可以提供能力、
|
|
77
|
+
信息或期限,不能临时扩权、替主角决定或反复解决困境;对手应能观察并适应已经暴露的手段。
|
|
78
|
+
|
|
79
|
+
## 六、交付与路径检查
|
|
80
|
+
|
|
81
|
+
交付场景脊柱、人物议程、知识表、关键选择和必要的分支图。沿代表性路径正向与反向走读:确认
|
|
82
|
+
人物只使用已知信息、未选事实没有串线、持久状态被读取、每个结果能回到具体选择和人物目标。
|
|
83
|
+
|
|
84
|
+
自然度、人物魅力、沉浸和选择重量不由自动化确定,也不在本仓库另设人工审批流程。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 数值策划方法
|
|
2
|
+
|
|
3
|
+
只在资源、门槛、结局或张力确实读取数字时使用。数值的任务是把已声明的取舍变成可演算、可推翻的
|
|
4
|
+
规则,不是为设计稿增加精确感。
|
|
5
|
+
|
|
6
|
+
## 先定义资源
|
|
7
|
+
|
|
8
|
+
填数字前回答:
|
|
9
|
+
|
|
10
|
+
1. 它用玩家能感知的词衡量什么;
|
|
11
|
+
2. 从哪里产生、花到哪里;
|
|
12
|
+
3. 哪些规则、事件、选项或结果读取它;
|
|
13
|
+
4. 玩家怎样从界面或世界反馈理解变化原因。
|
|
14
|
+
|
|
15
|
+
只有产出没有投入的资源会通胀,只有投入没有恢复会把玩家逼进死局。没有读取点的数字从 HUD 删除;
|
|
16
|
+
若只是历史记录,就不要把它包装成策略资源。
|
|
17
|
+
|
|
18
|
+
## 预算与可达性
|
|
19
|
+
|
|
20
|
+
对每个会阻断路线或改变结果的门槛,写一行最小预算:
|
|
21
|
+
|
|
22
|
+
`门槛/结果 | 起始值 | 主要增减来源 | 代表路径演算 | 是否可达 | 失败时调整`
|
|
23
|
+
|
|
24
|
+
- 不可达:改门槛、来源或切片范围,不靠好运补洞;
|
|
25
|
+
- 起始就达成:门槛没有制造选择,删除或重设;
|
|
26
|
+
- 只有唯一可达路线:承认它是剧情条件,或补真正可比较的另一条路。
|
|
27
|
+
|
|
28
|
+
预算使用实现将要消费的规则值;设计与实现不同步时逐项裁决,不维护两套“都正确”的数字。
|
|
29
|
+
|
|
30
|
+
## 证明取舍存在
|
|
31
|
+
|
|
32
|
+
先由设计声明什么现象会否决取舍,例如“无视相克与利用相克得到近似代价”。再选择能暴露这个问题
|
|
33
|
+
的代表策略或路径运行比较。随机性会改变结论时固定种子;随机性无关时不为测试仪式强加 RNG。
|
|
34
|
+
|
|
35
|
+
检查三类失败:
|
|
36
|
+
|
|
37
|
+
- 一个动作或策略跨大多数真实局面都通吃;
|
|
38
|
+
- 不同选择长期汇入相同状态和结果;
|
|
39
|
+
- 玩家在选择前看不到足够信息,事后也学不到为什么错。
|
|
40
|
+
|
|
41
|
+
项目自行声明有意义的差距和目标区间;仓库不提供跨类型通用倍率、回合数或胜率阈值。
|
|
42
|
+
|
|
43
|
+
## 隐藏状态同样适用
|
|
44
|
+
|
|
45
|
+
承诺、证词、物件去向、公开立场和关系变化也要有写入与读取。它们优先通过人物措辞、称呼、可选
|
|
46
|
+
行动和场景可达性表现,不默认变成暗条。旗标少而被多次回读,比大量一次性变量更有深度。
|
|
47
|
+
|
|
48
|
+
限制行动广度通常比锁住内容更有意义:代价可以让玩家今天少做一件事,不必让整条剧情永久不可见。
|
|
49
|
+
|
|
50
|
+
## 实现漂移与交接
|
|
51
|
+
|
|
52
|
+
打磨会改变数值。发现设计与实现不同时,逐项决定:采纳有运行依据的实现值并回写、修正文档错误、
|
|
53
|
+
补记新增机制,或让实现补上遗漏承诺;说不清原因的批量同步不算裁决。
|
|
54
|
+
|
|
55
|
+
交接前只确认:关键资源都有读取点,门槛可达,代表路径能暴露设计声明的失败现象,随机系统无死局,
|
|
56
|
+
设计与当前实现没有未裁决漂移。主观平衡与长期经济仍需真实玩家研究,不写成机器 PASS。
|