@oh-story/dsh 0.1.9 → 0.1.11
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 +14 -14
- package/lib/client.js +209 -73
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +248 -168
- package/lib/drama/skills/short-drama/SKILL.md +16 -4
- package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
- package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
- package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
- package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
- package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
- package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
- package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
- package/lib/drama/skills/short-drama-edit/SKILL.md +65 -44
- package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
- package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +6 -4
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +26 -67
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +31 -56
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +42 -78
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +44 -92
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +14 -16
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1272 -125
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +113 -9
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
- package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
- package/lib/drama/skills/short-drama-review/SKILL.md +4 -5
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
- package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +24 -35
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +23 -11
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +139 -34
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +5 -3
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +15 -12
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +29 -0
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +52 -39
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -21
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +9 -23
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +14 -26
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -2
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
- package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
- package/lib/drama/skills/short-drama-write/SKILL.md +10 -7
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
- package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
- package/lib/index.js +346 -98
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/README.md +299 -59
- package/lib/novel-to-game/README_ZH.md +299 -56
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
- package/lib/novel-to-game/manifest.json +77 -87
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
- package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
- package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
- package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
- package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
- package/lib/oh-story/manifest.json +607 -327
- package/lib/oh-story/roles/chapter-extractor.md +177 -237
- package/lib/oh-story/roles/character-designer.md +1 -2
- package/lib/oh-story/roles/consistency-checker.md +15 -13
- package/lib/oh-story/roles/narrative-writer.md +36 -38
- package/lib/oh-story/roles/story-architect.md +9 -61
- package/lib/oh-story/roles/story-explorer.md +20 -125
- package/lib/oh-story/roles/story-researcher.md +0 -1
- package/lib/oh-story/skills/story/SKILL.md +15 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +59 -73
- package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +22 -5
- package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-import/SKILL.md +64 -584
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
- package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
- package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
- package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
- package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
- package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
- package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
- package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
- package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +98 -92
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
- package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +132 -27
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +81 -270
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +252 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +3 -3
- package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
- package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +138 -64
- package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +55 -128
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +6 -6
- package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1145 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +45 -194
- package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
- package/lib/oh-story/skills/story-long-write/SKILL.md +49 -81
- package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +24 -202
- package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +7 -11
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
- package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +7 -15
- package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
- package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/project-files.md +19 -13
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +13 -5
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +5 -6
- package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +81 -121
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +41 -139
- package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +57 -67
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -253
- package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +19 -65
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +226 -25
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +132 -27
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +7 -4
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +304 -46
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-review/SKILL.md +31 -302
- package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-review/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
- package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-review/references/review-quality.md +6 -11
- package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
- package/lib/oh-story/skills/story-review/references/solo.md +52 -0
- package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-setup/SKILL.md +71 -452
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +22 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
- 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/long-emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
- package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
- 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/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +19 -65
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +56 -110
- package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
- package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
- package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
- package/lib/oh-story/skills/story-short-analyze/references/stage4-6-reversal-summary.md +611 -0
- package/lib/oh-story/skills/story-short-scan/SKILL.md +35 -65
- package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
- package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
- package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
- package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
- package/lib/oh-story/skills/story-short-write/SKILL.md +23 -175
- package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
- package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -47
- package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
- package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +21 -13
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +116 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +99 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/file-activity.d.ts +19 -1
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts +7 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +16 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/client/video-studio.d.ts.map +1 -1
- package/lib/types/drama-adapters.d.ts +5 -3
- package/lib/types/drama-adapters.d.ts.map +1 -1
- package/lib/types/native-hooks.d.ts +53 -1
- package/lib/types/native-hooks.d.ts.map +1 -1
- package/lib/types/role-identity.d.ts +17 -0
- package/lib/types/role-identity.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +60 -1
- package/lib/video-recap/README.en.md +348 -137
- package/lib/video-recap/README.md +340 -136
- package/lib/video-recap/manifest.json +406 -251
- package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
- package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
- package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
- package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
- package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
- package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
- package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
- package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
- package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
- package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
- package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
- package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
- package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
- package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
- package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
- package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
- package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
- package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
- package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
- package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
- package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
- package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
- package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
- package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
- package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
- package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
- package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
- package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
- package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
- package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
- package/lib/video-recap/skills/video-script/SKILL.md +16 -13
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
- package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
- package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
- package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
- package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
- package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
- package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
- package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
- package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
- package/lib/video-recap/skills/{video-script/scripts/agent_brief.py → video-understanding/scripts/briefing/builder.py} +38 -35
- package/lib/video-recap/skills/video-understanding/scripts/{brief_context.py → briefing/context.py} +4 -35
- package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
- package/lib/video-recap/skills/{video-script/scripts/brief_timeline.py → video-understanding/scripts/briefing/timeline.py} +5 -6
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
- package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
- package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
- package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
- package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
- package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
- package/package.json +45 -45
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -530
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -559
- package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +0 -678
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
- package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +0 -348
- package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +0 -399
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +0 -327
- /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
- /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
- /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
export const HEROINE_IDS = Object.freeze(['wu_yueniang', 'pan_jinlian', 'li_pinger', 'meng_yulou', 'sun_xuee']);
|
|
4
4
|
|
|
5
5
|
export const HEROINES = Object.freeze({
|
|
6
|
-
wu_yueniang: { id: 'wu_yueniang', adult: true, short: '月娘', name: '吴月娘', house: '正堂', glyph: '正', portrait: 'heroine/yue', close: 'heroine/yue/close', shape: '方签', want: '
|
|
7
|
-
pan_jinlian: { id: 'pan_jinlian', adult: true, short: '金莲', name: '潘金莲', house: '花园角门', glyph: '扇', portrait: 'heroine/pan', close: 'heroine/pan/close', shape: '斜签', want: '
|
|
8
|
-
li_pinger: { id: 'li_pinger', adult: true, short: '瓶儿', name: '李瓶儿', house: '瓶儿私院', glyph: '匣', portrait: 'heroine/pinger', close: 'heroine/pinger/close', shape: '圆签', want: '
|
|
9
|
-
meng_yulou: { id: 'meng_yulou', adult: true, short: '玉楼', name: '孟玉楼', house: '卷棚后间', glyph: '曲', portrait: 'heroine/meng', close: 'heroine/meng/close', shape: '弧签', want: '
|
|
10
|
-
sun_xuee: { id: 'sun_xuee', adult: true, short: '雪娥', name: '孙雪娥', house: '灶上暖阁', glyph: '灶', portrait: 'heroine/xuee', close: 'heroine/xuee/close', shape: '折签', want: '
|
|
6
|
+
wu_yueniang: { id: 'wu_yueniang', adult: true, short: '月娘', name: '吴月娘', house: '正堂', glyph: '正', portrait: 'heroine/yue', close: 'heroine/yue/close', shape: '方签', want: '她要看真账,也要知道这个家出事时谁来落名。', gives: '钥匙不会白交;你若敢担,她就敢和你一起守正堂。', voice: '月娘用指节压住账角:“别先讲好听的。五十两去了哪里?”', colors: ['#203b3a', '#b6995f'] },
|
|
7
|
+
pan_jinlian: { id: 'pan_jinlian', adult: true, short: '金莲', name: '潘金莲', house: '花园角门', glyph: '扇', portrait: 'heroine/pan', close: 'heroine/pan/close', shape: '斜签', want: '她不怕你偏心,只怕你转身就把话换了。', gives: '一句谎话到她手里,总能顺着来路找到说谎的人。', voice: '金莲把酒杯转了半圈:“你若只打算说今夜,这杯就别接。”', colors: ['#7f231f', '#c88b69'] },
|
|
8
|
+
li_pinger: { id: 'li_pinger', adult: true, short: '瓶儿', name: '李瓶儿', house: '瓶儿私院', glyph: '匣', portrait: 'heroine/pinger', close: 'heroine/pinger/close', shape: '圆签', want: '她先问门窗和去处,再问银箱能不能开。', gives: '她认得每道封绳和货路,也给人留一处不必高声的屋子。', voice: '瓶儿先望了一眼窗缝,才把钥匙放下:“账可以算。你先说,我若不愿意呢?”', colors: ['#8d6a32', '#ead9b4'] },
|
|
9
|
+
meng_yulou: { id: 'meng_yulou', adult: true, short: '玉楼', name: '孟玉楼', house: '卷棚后间', glyph: '曲', portrait: 'heroine/meng', close: 'heroine/meng/close', shape: '弧签', want: '她肯替人留台阶,却不肯永远坐在没人记得的末席。', gives: '一张名帖、一次回礼,她能让僵住的两方重新坐下。', voice: '玉楼把名帖推到桌中间:“用我的名字不难。回礼要叫谁看见?”', colors: ['#4f5140', '#d1b58a'] },
|
|
10
|
+
sun_xuee: { id: 'sun_xuee', adult: true, short: '雪娥', name: '孙雪娥', house: '灶上暖阁', glyph: '灶', portrait: 'heroine/xuee', close: 'heroine/xuee/close', shape: '折签', want: '她要的不是一句“辛苦了”,是柴、工钱和一个能停火的时辰。', gives: '她记得每袋米、每个做事的人;一宅热饭是她真正撑起来的。', voice: '雪娥拍掉手上的面粉:“锅里就剩这点米。你先说,今日谁吃?”', colors: ['#6e422d', '#d39b63'] },
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
export const HOUSEHOLD_IDS = Object.freeze(['li_jiaoer']);
|
|
@@ -30,7 +30,7 @@ export const DAY_DEFS = Object.freeze([
|
|
|
30
30
|
['d12','空船换箱','码头只回一条空船,宅中却多出几只换过封的旧箱;追船会丢掉眼前实物,守箱又会放跑知道谁换绳的人。','证据合流','rope_fiber','船绳纤维','新封绳取自西厢旧货。'],
|
|
31
31
|
['d13','五件急用归名','三日米、药钱、灯油、回礼和跑腿鞋袜都有人先垫;月娘封门半日,要让每一件东西回到真正掏钱、使用和等待归还的人。','证据合流','loan_chain','私借链','五笔私借最终汇到同一柜坊。'],
|
|
32
32
|
['d14','四张空签等银','娇儿愿折价兑票,米、药、工钱与回礼四张待用签却仍空着;一旦落名,谁的箱、粮和退路不入押也必须写清。','证据合流','draft_mark','银票暗记','票号暗记能锁定幕后兑手。'],
|
|
33
|
-
['d15','
|
|
33
|
+
['d15','堂前先摆哪一件','街坊和债主挤满正堂。米斗、账页、名帖、口供都在案上,可第一件递出去的东西,也会决定众人先盯住谁。','证据合流','witness_order','上堂次序','先摆雪娥量过的短米,假账便不能再把亏空说成家里人凭嘴编的。'],
|
|
34
34
|
['d16','热饭草鞋围门','真债主与收过一顿饭、一双草鞋的闲汉混在门外;对方改用饥饿和人声施压,宅内不能把穷人、雇声与真债混成一种敌人。','同灯结盟','crowd_pay','围门花名','围门者多是临时雇来的闲汉。'],
|
|
35
35
|
['d17','夜查柜坊','柜坊只留一盏油灯和一更时间;三份封痕、具名夜牌、守柜人口误或一双错鞋,只能保住你真正查到的那一段。','同灯结盟','vault_slot','柜格编号','旧债本藏在七号夹层。'],
|
|
36
36
|
['d18','最后一口价','娇儿把银堆、车筹、两把空椅和一碗路饭放在同一张桌上;卖哪一程、作哪一段证、坐不坐下,都要由她亲手落字。','同灯结盟','silence_price','封口价','沉默价中藏着债主逃路。'],
|
|
@@ -720,8 +720,8 @@ export const DAY_AGENDAS = Object.freeze([
|
|
|
720
720
|
preparedMove('meng_yulou',DAY14_DRAFT_PREPARATIONS.office),
|
|
721
721
|
preparedMove('pan_jinlian',DAY14_DRAFT_PREPARATIONS.listen),
|
|
722
722
|
preparedMove('wu_yueniang',DAY14_DRAFT_PREPARATIONS.banquet))),
|
|
723
|
-
agenda('d15','
|
|
724
|
-
['sun_xuee','
|
|
723
|
+
agenda('d15','人都到齐了,案上却只能先摆一件。先摆米斗,雪娥和抬米的人就得先挨问;先念本票、名帖或韩道国的改口,街坊又会说五院早把话串好了。',['sun_xuee','wu_yueniang','li_pinger'],pressureMoves(
|
|
724
|
+
['sun_xuee','先把短米摆上堂','米能复称;雪娥和抬米的人也会先被逐个问话','雪娥抱来第一斗短米,把跑腿人补过三次的鞋放在斗边。谁领米、谁抬进灶、哪一日少了工钱,她按工簿一名一名叫。轮到自己,她把手按在斗沿:“先问我称过什么,别等找不到人了才想起这双手。”'],
|
|
725
725
|
['meng_yulou','请三家只认亲见','让公审不能私了;外客也必须承认自己没有看过的部分','玉楼请米铺、药铺与码头三家旁证隔席而坐,先给每人一张可划掉的退席帖。她对五人道:“今日能停;留下的人也只说亲眼见过的物、数和时辰,不替体面补齐故事。”'],
|
|
726
726
|
['pan_jinlian','叫韩道国先念假账','抓住工钱怎样被改成损耗;场面会立刻反咬成逼供','金莲把假账递给韩道国,叫他自己念。念到第三行,他把“添火工钱”改成“灶上损耗”,她没有先骂,只把第五日热汤、盐瓮和破鞋三件旧物推过去:“哪一件是纸自己烧的火、走的路?”'],
|
|
727
727
|
['wu_yueniang','五物各归一只手','花银成堂;总账、口供、货单、名帖与工簿仍由原经手人逐件说','月娘将总账、金莲原话、瓶儿货单、玉楼名帖与雪娥工簿依次排开,旁边各放一件能摸到的物。谁递来的便由谁先说,正堂不替旁院改口;她最后才在“只核次序”旁落自己的印。'])),
|
|
@@ -884,8 +884,8 @@ export const FAVOR_RECKONINGS = Object.freeze({
|
|
|
884
884
|
const route = (id,label,hint,text,effects={},condition=null,locked='') => Object.freeze({ id,label,hint,text,effects,condition,locked });
|
|
885
885
|
const householdChoice = (id,label,hint,text,effects) => Object.freeze({ id,label,hint,text,effects });
|
|
886
886
|
export const OPENING_CHOICES = Object.freeze([
|
|
887
|
-
route('opening_open_ledger','
|
|
888
|
-
route('opening_hear_five','
|
|
887
|
+
route('opening_open_ledger','把真账摊开','五十两空在桌上,谁都看得见','你把真账摊到灯下。月娘按住被风吹起的页角,另外四人各自放下一件能查的东西。',{house:4,bonds:[['wu_yueniang','li_pinger',3],['wu_yueniang','sun_xuee',3]],flags:['opened_true_ledger']}),
|
|
888
|
+
route('opening_hear_five','让她们一个个说','今日先不抢着定谁的罪','你没有先抢答案。金莲划掉一句听来的话,玉楼放下名帖,雪娥把沾着米灰的工账摊在旁边。',{exposure:-2,bonds:[['pan_jinlian','meng_yulou',3],['pan_jinlian','sun_xuee',3]],flags:['heard_all_five']}),
|
|
889
889
|
]);
|
|
890
890
|
|
|
891
891
|
const openingBeat = (title, body, speakers, voices) => Object.freeze({
|
|
@@ -1020,11 +1020,11 @@ export const COALITION_PROOF_META = Object.freeze({
|
|
|
1020
1020
|
sun_xuee:{heroine:'sun_xuee',flag:'xuee_counted',label:'雪娥与你亲手核过米斗'},
|
|
1021
1021
|
});
|
|
1022
1022
|
export const ACCORD_CHOICES = Object.freeze({
|
|
1023
|
-
wu_yueniang:route('accord_order','
|
|
1024
|
-
pan_jinlian:route('accord_truth','
|
|
1025
|
-
li_pinger:route('accord_safety','
|
|
1026
|
-
meng_yulou:route('accord_grace','
|
|
1027
|
-
sun_xuee:route('accord_hearth','
|
|
1023
|
+
wu_yueniang:route('accord_order','公柜只留一本账','各院的小钥匙仍由本人收着','月娘用红线把公柜与私匣分开:“这边的账都能问我。过了线,先去问拿钥匙的人。”',{rel:{qing:12,du:-5},house:5,accord:'order'}),
|
|
1024
|
+
pan_jinlian:route('accord_truth','今夜去哪里就说哪里','可以偏心,别叫门房编第二句','金莲当众撕了那张假话:“偏谁是你的事。让五个人听五种说法,不行。”',{rel:{qing:12,yu:6,du:-6},accord:'truth'}),
|
|
1025
|
+
li_pinger:route('accord_safety','每笔借银都写还日','箱子由她开,钥匙不离手','瓶儿把归期纸压在箱盖上:“日子写实,我来开。谁急,也不许抢钥匙。”',{rel:{qing:13,du:-5},house:3,accord:'safety'}),
|
|
1026
|
+
meng_yulou:route('accord_grace','借了名帖就当面还','她可以圆场,不做被忘掉的垫脚石','玉楼把回帖放在原帖旁边:“借我的名字敲了门,还的时候也请叫我坐在席上。”',{rel:{qing:13,du:-5},repute:1,accord:'grace'}),
|
|
1027
|
+
sun_xuee:route('accord_hearth','每日写下做活的人','先留三日米柴,再说宴席','雪娥把工簿钉在灶门边:“挑水、添柴、守夜,谁做就写谁。没有米,就别先点菜。”',{rel:{qing:13,du:-5},house:5,accord:'hearth'}),
|
|
1028
1028
|
});
|
|
1029
1029
|
|
|
1030
1030
|
export const JOINT_ACTIONS = Object.freeze([
|
|
@@ -1575,13 +1575,11 @@ export const PUBLIC_EVENTS = Object.freeze({
|
|
|
1575
1575
|
route('public_balance_2','五证原页,各归本人','五个人各守原页,只在别人的下一手指出新增字','你让五份原页沿池各走一格,页主始终看得见自己的原字。下一人只能圈新增的一句,不能替前一人润色;五份都回到本人手里,纠错次序也完整留在纸边。',{house:8,flags:['public_vow_2'],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:6,du:-4}]))}),
|
|
1576
1576
|
route('public_10_hide','烧掉错词','证人安全但证链断一环','你烧掉一页错词。瓶儿收好余证,金莲另写一张火盆收讫条,只记你亲手毁了哪句、何时入火;缺掉的原页不准靠众人回忆补抄。',{exposure:-6,power:-1,flags:['burned_lotus_page']})
|
|
1577
1577
|
])},
|
|
1578
|
-
15:{id:'public_day15',title:'
|
|
1579
|
-
route('public_balance_3','
|
|
1580
|
-
route('public_15_scapegoat','
|
|
1578
|
+
15:{id:'public_day15',title:'堂前对账',heading:'先让哪件东西说话',body:'债主催你先押一个人,官差的罪名栏还空着。米斗、总账、门簿和四份说法都摆在眼前;先递哪一件,众人就会先沿哪条路追问。',balanceFlag:'public_vow_3',scene:'public_inquest',choices:Object.freeze([
|
|
1579
|
+
route('public_balance_3','先不填人名','每件东西由经手人亲自递;它能证明到哪里,就只说到哪里','你让书手把罪名栏空着。月娘翻总账,金莲守着自己问来的原话,瓶儿压住货单,玉楼摊开名帖,雪娥扶稳米斗。韩道国仍要回答铺面的流水,却不必在第一件东西上堂以前先背下整案。',{house:8,flags:['public_vow_3'],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:6,du:-4}]))}),
|
|
1580
|
+
route('public_15_scapegoat','先押韩道国','人群会暂时散去,可米、账和门路的缺口全会压到一个伙计身上','韩道国被押到阶前。雪娥当场问:少掉的米还没查到他的手,凭什么先捆人?玉楼也收回那张只肯担保递状时辰的名帖。',{power:1,house:-8,flags:['false_scapegoat']})
|
|
1581
1581
|
])},
|
|
1582
1582
|
});
|
|
1583
|
-
export const BANQUET_CHOICES = PUBLIC_EVENTS[5].choices;
|
|
1584
|
-
|
|
1585
1583
|
// 第五日公开开场决定宅中是在追“每只手怎样把一夜去处扩成办差次序”,
|
|
1586
1584
|
// 还是家主已经先承认偏宠与补工责任。门房抄条、三项追责、三拍归档、
|
|
1587
1585
|
// 第六日假账换幕和第七日夜簿都要继续读取这一区别。
|
|
@@ -1745,16 +1743,16 @@ export const DAY10_PUBLIC_OPENINGS = Object.freeze({
|
|
|
1745
1743
|
export const DAY15_PUBLIC_OPENINGS = Object.freeze({
|
|
1746
1744
|
public_balance_3:Object.freeze({
|
|
1747
1745
|
choice:'public_balance_3',
|
|
1748
|
-
label:'
|
|
1749
|
-
endingText:'
|
|
1746
|
+
label:'人名空着,各自递物',
|
|
1747
|
+
endingText:'到了散局那天,第十五日那张空着人名的纸仍压在米斗、账页、名帖、门簿和口供下面。谁留下、谁回院,都只带走自己的灯和物;哪一段还找不到经手人,就照样空着,不拿最亲近的人补数。',
|
|
1750
1748
|
fateText:'西门家败散以后,后人仍不得把“曾被问过”抄成“已经定罪”;第十五日空白罪名只允许纸、物、时辰与经手逐段填入,宅院的覆灭本身不是把一个名字补进全案的证据。',
|
|
1751
|
-
evidenceText:'
|
|
1752
|
-
followupText:'
|
|
1749
|
+
evidenceText:'你没有先押人。书手把人名栏留空,米斗、账页、门簿和口供只能顺着各自的来路往下查;若三步真能对上,堂上便不必先猜一个犯人。',
|
|
1750
|
+
followupText:'递状人的名字可以落,罪名栏仍须空着。谁来送这份案子,都不能顺手添成“韩道国已经认了”,也不能让一枚总签盖掉五个人原来的落款。',
|
|
1753
1751
|
rebuttalText:'第十六日复案仍从证物本身起问:原审没有预填犯人,三名外部人物只能逐段挑战事实、经手或口供,不能把“尚待复核”偷换成对某人的既定归罪。',
|
|
1754
1752
|
aftermathTexts:Object.freeze([
|
|
1755
|
-
'
|
|
1756
|
-
'
|
|
1757
|
-
'
|
|
1753
|
+
'月娘用铜镇压住人名栏,只让递状者在旁边落款。堂下有人催她写韩道国,她把笔搁回砚边:“先听米斗和账页怎么说。”',
|
|
1754
|
+
'东西重新回到各人手里:雪娥扶米斗,玉楼按名帖,瓶儿守货单,金莲捏住口供边角,月娘只翻账页。韩道国站在案前,只回答自己经手的铺面流水。',
|
|
1755
|
+
'书手另起三栏:先看见什么,再问到谁,还缺哪一样。五件东西按递出次序分别封好,最后的人名仍空着;站得离案桌最近的人,没有因此替所有缺口背名。',
|
|
1758
1756
|
]),
|
|
1759
1757
|
rebuttalChoiceTexts:Object.freeze({
|
|
1760
1758
|
segment:'三栏顶端继续留着空罪名格:玳安、韩道国、应伯爵只为各自反问负责,没有谁因被问得最多便先变成被告。',
|
|
@@ -1841,23 +1839,23 @@ const publicEvidenceOutcome = (id, label, title, body, echo, effects) => Object.
|
|
|
1841
1839
|
// 三名外部人物均取自原作社会网络;此处公审事件与具体反制为原型适配。
|
|
1842
1840
|
export const PUBLIC_EVIDENCE_CHAIN = Object.freeze({
|
|
1843
1841
|
id:'public_day15_evidence_chain',
|
|
1844
|
-
title:'
|
|
1845
|
-
body:'
|
|
1842
|
+
title:'三样东西,按次序上堂',
|
|
1843
|
+
body:'案上有四样东西,你只能依次递三样。第一样先证明米和工钱确实少过,第二样追到哪只手改过账,第三样才拿改口来对。次序颠倒,再真的纸也只会变成各说各话。',
|
|
1846
1844
|
witnesses:Object.freeze([
|
|
1847
1845
|
Object.freeze({id:'dai_an',name:'玳安',role:'门路见证',stance:'只认亲自跑过的时辰,不肯替任何院门补空白'}),
|
|
1848
1846
|
Object.freeze({id:'han_daoguo',name:'韩道国',role:'账路经手',stance:'熟悉铺面流水,也最会把一处差额说成整本账都不可信'}),
|
|
1849
1847
|
Object.freeze({id:'ying_bojue',name:'应伯爵',role:'席间口风',stance:'能替一场公审找来听众,也能把难看的事实改讲成一桩家丑'}),
|
|
1850
1848
|
]),
|
|
1851
1849
|
evidence:Object.freeze([
|
|
1852
|
-
publicEvidence('grain_measure',1,'孙雪娥 · 米斗与工簿','
|
|
1853
|
-
publicEvidence('double_ledger',2,'吴月娘、李瓶儿 · 总账与货签','
|
|
1854
|
-
publicEvidence('gate_route',3,'孟玉楼、玳安 · 名帖与门簿','
|
|
1855
|
-
publicEvidence('cross_words',4,'潘金莲 · 四版口供','
|
|
1850
|
+
publicEvidence('grain_measure',1,'孙雪娥 · 米斗与工簿','先称这斗米','先把短米和欠下的工钱称实;它还说不出是谁改了铺面账','斗里的米可以复称,工簿上的时辰也有人领认。宅里确实少过粮、欠过工,不是谁临到堂前才编出的亏空。','韩道国问得直白:“仓里少米,我认。可你凭什么说是铺面这本账改了?”'),
|
|
1851
|
+
publicEvidence('double_ledger',2,'吴月娘、李瓶儿 · 总账与货签','把两本账摊开对','米斗在前,才能沿缺数查新墨、货签和经手印;若一上来只拿自家账,旁人尽可说是后来补的','月娘把总账压在左边,瓶儿按日期摆开货签。少掉的数从米斗接进两本流水,最后停在同一处新墨和经手印上。','韩道国把账推回半寸:“若没有那斗米在先,正堂今日重抄一本,我也分不出来。”'),
|
|
1852
|
+
publicEvidence('gate_route',3,'孟玉楼、玳安 · 名帖与门簿','按时辰查纸从哪扇门过','前面已有米或账,门簿才能接出原件何时转手;它单独只能证明人来过','玉楼把名帖与角门时辰并排,玳安只认自己送过的一程。纸从铺面进了哪扇门、在谁手里停过,终于有了可问的人。','玳安把空着的一更圈出来:“我只认自己跑过的路。人进过门,不等于我看见他袖里是哪本账。”'),
|
|
1853
|
+
publicEvidence('cross_words',4,'潘金莲 · 四版口供','最后逐句对改口','米、账或门簿已有两样对上,改口才有东西可撞;先逼人说,只会落下串供的话柄','金莲把四版说法逐句念回去。谁把“少米”改成“耗损”,谁又把过门时辰挪了一更,每一句都撞上案上已经摆定的物和数。','应伯爵笑着截话:“前头若什么都没摆实,这不过是五位娘子把一句家话练熟了。”'),
|
|
1856
1854
|
]),
|
|
1857
1855
|
outcomes:Object.freeze({
|
|
1858
|
-
complete:publicEvidenceOutcome('complete','
|
|
1859
|
-
rebuttable:publicEvidenceOutcome('rebuttable','
|
|
1860
|
-
broken:publicEvidenceOutcome('broken','
|
|
1856
|
+
complete:publicEvidenceOutcome('complete','三步对上了','短米、经手与改口接到一起','第一样先称实短米,中间那样接出纸或账走过谁的手,最后才拿改口来对。韩道国不能再用一句账上说法绕开米斗,应伯爵也不能把三处不同来路都说成五院串好的话;每个人只认亲手见过的一段,反倒让那一段更站得住。','第十五日堂上留下三样按次序封好的东西。往后谁不服,可以一件一件重称、重对、重问。',{house:7,power:1,exposure:3,flags:['public_chain_complete'],bonds:[['wu_yueniang','li_pinger',3],['pan_jinlian','sun_xuee',3],['meng_yulou','sun_xuee',3]],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:3,du:-3}]))}),
|
|
1857
|
+
rebuttable:publicEvidenceOutcome('rebuttable','还差一截','三样东西能收案,还有一处对不上','官差收下了三样东西,可其中一样太早替前面的空处下了结论。韩道国指着那一处要求重验,应伯爵已经在门外说“五院自己也讲不清”。案子没有散,下回却得先把这段补实。','第十五日的案子收下了;有一处仍要请真正经手的人回来,把缺的那一段当面说清。',{house:2,exposure:6,flags:['public_chain_rebuttable'],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:1,du:2}]))}),
|
|
1858
|
+
broken:publicEvidenceOutcome('broken','三样各说各话','前一件未站稳,后一件先下了结论','你递出的第一样还没有站稳,下一样便先替它下了结论,第三样只好跟着补理由。玳安不肯替没跑过的路落名,韩道国说账页前后对不上,应伯爵转身就把堂前说成五院围着一个伙计逼供。三样都是真的,摆在这个次序里却谁也托不住谁。','第十五日收下三只封套,却没能把它们的来路接在一起。往后每开一只,都会先遇见今日没答上的反问。',{house:-7,power:-1,exposure:9,flags:['public_chain_broken'],bonds:[['wu_yueniang','pan_jinlian',-2],['li_pinger','sun_xuee',-2]],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{du:5}]))}),
|
|
1861
1859
|
}),
|
|
1862
1860
|
});
|
|
1863
1861
|
|
|
@@ -1867,14 +1865,14 @@ export const PUBLIC_EVIDENCE_CHAIN = Object.freeze({
|
|
|
1867
1865
|
export const DAY15_OPENING_EVIDENCE = Object.freeze({
|
|
1868
1866
|
ledger:Object.freeze({
|
|
1869
1867
|
evidence:'grain_measure',
|
|
1870
|
-
label:'
|
|
1871
|
-
object:'
|
|
1872
|
-
openingText:'
|
|
1873
|
-
followupText:'
|
|
1868
|
+
label:'雪娥先把短米摆上来',
|
|
1869
|
+
object:'一斗可以复称的短米、跑腿人的补丁鞋、逐名写下的抬米工单',
|
|
1870
|
+
openingText:'雪娥白日已经把短米、补丁鞋和工单摆给众人看。第一步不用再选:米确实少过,抬米与跑腿的工钱也确实欠过。至于是谁改了铺面账,还得看下一样东西。',
|
|
1871
|
+
followupText:'这桩事从雪娥亲手称过的米问起。递状的人只能写谁接着查账、谁去认门路,不能因为雪娥和抬米人最先受问,就把整案压到他们头上。',
|
|
1874
1872
|
aftermathTexts:Object.freeze([
|
|
1875
|
-
'
|
|
1876
|
-
'
|
|
1877
|
-
'
|
|
1873
|
+
'米斗还在落款栏旁。它只证明短米与欠工;谁去核账、谁去认门路,须另写清楚,不能顺手把称米的人写成改账的人。',
|
|
1874
|
+
'下一轮问到那双补过三次的鞋。跑腿人只认自己抬过哪一斗、哪天没领到工钱,不替五院猜铺面是谁动了笔。',
|
|
1875
|
+
'收卷时,米斗、破鞋和工单仍排在最前,名字也各归原人。后两样东西照真正递出的次序跟上,没有被一枚总签揉成正堂的一份齐口。',
|
|
1878
1876
|
]),
|
|
1879
1877
|
}),
|
|
1880
1878
|
office:Object.freeze({
|
|
@@ -2030,8 +2028,8 @@ export const PUBLIC_FOLLOWUPS = Object.freeze({
|
|
|
2030
2028
|
route('follow_10_send_bait','让假本先流出去','用一次可控的谎,钓出真正收口供的人','玉楼换掉纸角,瓶儿重封油布,金莲故意保留一个只有造假者认得的错字。假本被重新放回池边;月娘提醒你,这一步能抓人,也会让五个人承担同一场反噬。',{power:2,exposure:9,house:-2,flags:['follow_10_bait_sent'],bonds:[['pan_jinlian','meng_yulou',4],['li_pinger','meng_yulou',4]],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:2,du:2}]))}),
|
|
2031
2029
|
route('follow_10_burn_again','当众烧掉第六份','不给假话第二次伤人,也失去追造假者的线','你先让五个人各自看清被改了什么,再把湿纸投入火盆。金莲记住错字,瓶儿收回真本;火能止住今晚,却不能证明明日是谁又写一份。',{exposure:-8,power:-1,flags:['follow_10_false_burned'],bonds:[['pan_jinlian','li_pinger',-2],['pan_jinlian','sun_xuee',-2]],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:1,du:3}]))}),
|
|
2032
2030
|
]),
|
|
2033
|
-
15: publicFollowup('public_follow_15',15,'
|
|
2034
|
-
route('follow_15_five_seals','
|
|
2031
|
+
15: publicFollowup('public_follow_15',15,'堂前的人还堵着门','官差只肯收一个总落款','三样东西刚按次序封好,官差便把文书推回来:五份可以分开收,递状处却只能写一个名字。应伯爵已经在门外笑说“西门宅到底还得一个人做主”,韩道国也盯着那格,看谁要替整本账作保。只写一人,其余四人的物和话都会被叫作附件;一个都不写,债主明早便会说今日根本没收案。',[...HEROINE_IDS],[
|
|
2032
|
+
route('follow_15_five_seals','请他分开收五枚印','每个人只认自己递出的东西,也各拿一张回执','月娘拿裁纸刀把总落款旁分出五栏。金莲在口供旁签,瓶儿在货单旁签,玉楼只认名帖经过哪扇门,雪娥只认工簿和自己称过的米。官差嫌麻烦,月娘把五样东西往回一收:“不肯分着收,就一件也别带走。”他这才逐栏盖印。',{house:9,power:1,exposure:4,flags:['follow_15_five_seals'],bonds:[['wu_yueniang','pan_jinlian',4],['wu_yueniang','li_pinger',4],['wu_yueniang','meng_yulou',4],['pan_jinlian','sun_xuee',4]],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:5,du:-5}]))}),
|
|
2035
2033
|
route('follow_15_sign_yourself','由你独签担责','五人的证据保留原名,官面后果先落到你身上','你在主签格写下自己的名字,又在附件首行注明五份证据各归原经手人。金莲确认你没替她改口,瓶儿确认私钥没有入押,雪娥确认工簿仍署她名,才准官差收走。',{power:1,house:5,exposure:7,flags:['follow_15_player_signs'],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:4,du:-2}]))}),
|
|
2036
2034
|
route('follow_15_yue_signs','请月娘主签','用正堂身份快速成案,也把最大风险压给她','月娘看完五人一眼,在主签格落名。案子当场成立,官差也当场把追责文书只递给她。金莲问为何秩序总要月娘一个人背,雪娥则把“正堂应当”四字从副本上重重划掉。',{power:2,house:2,flags:['follow_15_yue_signs'],bonds:[['wu_yueniang','pan_jinlian',-4],['wu_yueniang','sun_xuee',-4]],relAll:{wu_yueniang:{qing:8,du:3},pan_jinlian:{du:5},li_pinger:{du:3},meng_yulou:{du:3},sun_xuee:{du:5}}}),
|
|
2037
2035
|
]),
|
|
@@ -2065,8 +2063,8 @@ export const PUBLIC_FOLLOWUP_AFTERMATHS = Object.freeze({
|
|
|
2065
2063
|
publicAftermathBeat('sun_xuee','雪娥听见门外的人照样背出了被烧掉的半句','纸化成灰后,一个送水的却把“雪娥偷粮”四字说得分毫不差。金莲立即追问是谁教的,那人只说池边人人都听过;没有原件可对,改词从一张可拆的假口供变成了几十张长在嘴里的副本。'),
|
|
2066
2064
|
publicAftermathBeat('li_pinger','瓶儿把真本各自收回,五个人也失去共同追纸的线','瓶儿确认真本尚在,月娘让每人另写一份自己记得的错词,至少不让明日全凭传言。可纸脚、油布和经手印已经跟着火一起没了;五院保住今晚不再受伤,却只能各自防守下一份不知道从哪里来的假话。')),
|
|
2067
2065
|
follow_15_five_seals: publicAftermath('wu_yueniang',
|
|
2068
|
-
publicAftermathBeat('sun_xuee','
|
|
2069
|
-
publicAftermathBeat('meng_yulou','
|
|
2066
|
+
publicAftermathBeat('sun_xuee','雪娥按住官差偷添的“正堂总保”','官差收纸前又补了一行,想让月娘替其余四份兜底。雪娥把工簿压在他笔下:“我只认自己称过的米。”瓶儿也抽回货单。若五栏写完还要月娘包圆,不过是把顶罪的人藏进小字。'),
|
|
2067
|
+
publicAftermathBeat('meng_yulou','玉楼当面数回五张收据','玉楼只以名帖证明官差今日收过文书,不替任何人口供作保。她看着他给五枚印各编一号,再把可追问的物件写在收据上。往后传谁、问什么、哪一页可以收回,都须照这五张纸来,不能再只敲正堂一扇门。')),
|
|
2070
2068
|
follow_15_sign_yourself: publicAftermath('pan_jinlian',
|
|
2071
2069
|
publicAftermathBeat('wu_yueniang','月娘先把你的签名与五人的证词切成两层','月娘在副本上添注:你的主签只承担递案与官面后果,不能替五个人承认没说过的话。金莲逐份复读,瓶儿确认货与私钥不入押;这不是一场替她们受罚的表演,而是把你的责任限定在你真正决定过的部分。'),
|
|
2072
2070
|
publicAftermathBeat('sun_xuee','雪娥拿回五张回执,发现追索真的先落到了你名下','官差给五份证据分别盖收讫,却把次日问讯只写给你。雪娥把回执交还各院,提醒任何人都不欠你一份因“代签”换来的顺从;五个人的证词保住原名,你也终于不能把承担官面风险当作替她们拥有答案。')),
|
|
@@ -2834,54 +2832,54 @@ export const JIAOER_RECKONINGS = Object.freeze({
|
|
|
2834
2832
|
const step = (...choices) => Object.freeze(choices);
|
|
2835
2833
|
export const ROUTE_CHOICES = Object.freeze({
|
|
2836
2834
|
wu_yueniang:Object.freeze([
|
|
2837
|
-
step(route('yue_1_true','
|
|
2835
|
+
step(route('yue_1_true','把那本真账给她','让她从第一页查起','月娘没有抬头,只用笔尖点了点第三页:“明日先找写这行字的人。”',{rel:{qing:12},flags:['yue_informed']}),route('yue_1_hide','只告诉她少了多少','名字和来路今夜不提','月娘把笔放回笔山:“一个数自己不会长脚。你想说了,再来。”',{rel:{du:10}})),
|
|
2838
2836
|
step(route('yue_2_cut','撤一桌酒','把节省写入公中','她当众封存省下的银:“这才叫守诺。”',{silver:30,house:5,flags:['kept_yue_word']}),route('yue_2_spend','照摆两席','换脸面伤公账','她收走公钥:“排场由你私付。”',{silver:-35,rel:{du:12},flags:['broken_yue_word']})),
|
|
2839
2837
|
step(route('yue_3_back','请她出面','共同承担官面','月娘带真账入堂,替你挡住第一轮盘问。',{power:1,rel:{qing:14},flags:['yue_backing']},'yue_informed','尚未交真账'),route('yue_3_tea','先递热茶','让争执降温','她接茶坐下:“现在说正事。”',{rel:{qing:8,du:-4}})),
|
|
2840
|
-
step(route('yue_4_seat','
|
|
2838
|
+
step(route('yue_4_seat','请她坐主位开席','座次由她排,出了岔子也由她当面答','月娘没有立刻坐下。她先把五只杯挪开,让每个人自己认领座位,才在主位旁坐定:“今夜我来排。若有人受了慢待,先来问我,不许去骂传菜的人。”',{house:6,rel:{qing:12}}),route('yue_4_private','把账先收进匣里','今夜陪她喝完茶,白日的缺数明早仍要交代','你伸手合账,月娘却先夹了一张纸签在缺数那页。她给你留半盏茶:“可以不说公事。天一亮,这张签还在,你也还得来。”',{rel:{yu:12,du:5},flags:['broken_yue_word']})),
|
|
2841
2839
|
step(route('yue_5_keys','共持公钥','双方互相核验','她分回一半钥匙:“彼此都留证。”',{house:8,rel:{qing:15},flags:['yue_co_rule']},'kept_yue_word','尚未履约'),route('yue_5_lasttea','喝完末茶','今夜不许新愿','她撤去账页,只问你明日几时来。',{rel:{qing:10,yu:8}})),
|
|
2842
|
-
step(route('yue_6_record','
|
|
2840
|
+
step(route('yue_6_record','把昨夜那句话写上日期','叫你们都不能把说过的话赖给醉意','月娘只写日期,不替你润色。她念一遍昨夜的原话,等你亲手落名,才把纸折起:“往后若改,就来这页旁边改。别说自己从未讲过。”',{rel:{qing:16,du:-7},flags:['yue_recorded']}),route('yue_6_wait','坐着等她自己开门','今夜不拿体谅催她立刻回答','月娘从头看到尾,几次抬眼,你都没有去碰门闩。更鼓响过,她亲手把门留开一线:“进来吧。不是你等得久,是我已经想清楚。”',{rel:{qing:9,du:-4}})),
|
|
2843
2841
|
step(route('yue_7_delegate','交她调度权','终局由她排班','月娘分派五院任务,并把自己的责任写在首行。',{house:9,flags:['yue_stewardship'],rel:{qing:16}}),route('yue_7_check','陪她复核','共同查最后一遍','两人核出债主重复计息的一栏。',{silver:20,rel:{qing:11}})),
|
|
2844
|
-
step(route('yue_8_equal','
|
|
2842
|
+
step(route('yue_8_equal','让五把钥匙各有主人','她管总账,也得在别人说停时交手','月娘把总账钥留在正堂,另外四把逐一还到本人掌心。最后她写下自己的交手时辰:“谁拿正堂二字压人,先来收我的钥匙。”',{house:12,flags:['yue_final_pact'],rel:{qing:20,du:-10}}),route('yue_8_rest','替她封好今晚的账','明日仍照旧查,今夜先让她睡一觉','你照她说的顺序锁柜、贴封,把钥匙放回她伸手够得到的地方。月娘逐个看过,终于靠回椅背:“灯别全灭。其余的,天亮再说。”',{rel:{qing:13,yu:8}})),
|
|
2845
2843
|
]),
|
|
2846
2844
|
pan_jinlian:Object.freeze([
|
|
2847
|
-
step(route('pan_1_cup','
|
|
2845
|
+
step(route('pan_1_cup','当着人接她的酒','今夜的偏心,明日也认','金莲却没松手:“明日天亮,你还敢说这杯是我的?”你当席点了头。',{rel:{qing:12,yu:12},flags:['pan_promised']}),route('pan_1_hush','把酒杯轻轻推回去','席上会安静,她却不会忘','金莲仰头喝完,把空杯倒扣在你面前:“好。留着。”',{rel:{du:12}})),
|
|
2848
2846
|
step(route('pan_2_name','听她报人名','线索落到袖口','她说完便让你复述,免得明日装忘。',{secrets:['shop_fraud'],rel:{qing:13},flags:['pan_involved']}),route('pan_2_flirt','只接她的话','今夜热,线索凉','她收扇:“正事错过不补。”',{rel:{yu:13}})),
|
|
2849
2847
|
step(route('pan_3_face','带她对质','让拆谎有见证','她逼掌柜连答三遍,第三遍露馅。',{power:1,rel:{qing:15}},'pan_involved','尚未听人名'),route('pan_3_home','叫她等结果','避开闲话','她留下问题清单:“少问一句都别回来。”',{rel:{qing:6,du:7}})),
|
|
2850
|
-
step(route('pan_4_open','
|
|
2848
|
+
step(route('pan_4_open','把门打开给她看','凉茶、脚印和屋里的人都不藏','你当面推开门。金莲先摸茶壶,又蹲下看窗边的湿鞋印,最后把传话里多出来的那句划掉:“屋里是什么样,我自己看过了。谁再添字,来找我。”',{secrets:['pan_rumor'],rel:{qing:12,du:-8}}),route('pan_4_wait','请她先在门外等','屋里的事暂时保住,明日她会当众再问','门只开了一条缝。金莲没有往里挤,拿扇骨在门上敲了三下:“好,我等。明日人齐了,你别又说今晚没听见。”',{rel:{du:15},flags:['broken_pan_word']})),
|
|
2851
2849
|
step(route('pan_5_repay','补上旧酒','把旧话兑现','你亲手递杯,她先问日期再饮。',{rel:{qing:15},flags:['kept_pan_word']},'pan_promised','尚未接酒'),route('pan_5_bluff','叫她别闹','席面暂稳','她把旧话逐字念给全桌。',{house:-5,rel:{du:18},flags:['broken_pan_word']})),
|
|
2852
|
-
step(route('pan_6_openly','
|
|
2850
|
+
step(route('pan_6_openly','叫门房照实报你的去处','这一夜不让别人替你编借口','你当着金莲的面叫来门房,只说今夜进哪一院、几更离开,不添一句安抚。她听完才拉开门:“这话明早若变,也由你亲口改。”',{exposure:5,rel:{qing:17},flags:['pan_open_choice']},'kept_pan_word','尚未还酒'),route('pan_6_do','先照她的清单做完','不添新誓言,把漏下的三件小事补齐','你没有急着辩。旧杯送回原处,传错的话逐人更正,答应的回帖也亲手交了。金莲把清单翻过来:“行。今晚不用再许。”',{rel:{qing:11,du:-5}})),
|
|
2853
2851
|
step(route('pan_7_cross','让她交叉问证','把锐气变成程序','她与雪娥轮问采买,锁定假日期。',{power:1,flags:['pan_cross_exam'],rel:{qing:16}}),route('pan_7_apology','认一句旧谎','承担而不辩解','她划掉那句:“这次算你自己说破。”',{rel:{qing:11,du:-9}})),
|
|
2854
|
-
step(route('pan_8_truth','
|
|
2852
|
+
step(route('pan_8_truth','把每日原话留一份','偏爱可以变,改口必须由本人来','金莲用裁纸刀剜掉纸上“永远”二字,只留下日期、去处和改口的人。她把扇印压在末尾:“我不争一句一辈子。你今日若变,就今日来告诉我。”',{flags:['pan_final_pact'],rel:{qing:20,du:-10}}),route('pan_8_watch','把原话匣交给她守','她保管每次怎么说,不替任何人添字','金莲把一张张口供按日期重排,错字也原样留着。她扣好匣锁,抱着匣子坐到窗边:“你睡。我守的是话,不是替你守住面子。”',{rel:{qing:13,yu:7}})),
|
|
2855
2853
|
]),
|
|
2856
2854
|
li_pinger:Object.freeze([
|
|
2857
|
-
step(route('pinger_1_room','
|
|
2855
|
+
step(route('pinger_1_room','叫人先把漏窗修好','银箱放一放,今夜先问她住得安不安','瓶儿用手背试了试窗缝的冷风。等工匠把木条钉实,她才把钥匙放回桌上。',{rel:{qing:13},flags:['pinger_route']}),route('pinger_1_money','先问箱里有多少银子','你会得到一个准数,钥匙还在她手里','瓶儿报得分毫不差。说完,她把钥匙在掌心又收紧了一寸。',{silver:40,rel:{du:8}})),
|
|
2858
2856
|
step(route('pinger_2_close','替她关窗','保护账本来源','门窗查清后,她递出货簿。',{secrets:['pinger_funds'],rel:{qing:15}}),route('pinger_2_take','先借急银','解燃眉伤安全','她借银并写下你未报归期。',{silver:70,rel:{du:11},flags:['pinger_exposed']})),
|
|
2859
2857
|
step(route('pinger_3_shield','替她应问','责任写在自己名下','你出堂担责,她把证物交给月娘。',{house:4,flags:['protected_pinger'],rel:{qing:16}},'pinger_route','尚未先问住处'),route('pinger_3_answer','让她自答','公开来路','她答清来路,回房换锁。',{repute:1,rel:{du:10}})),
|
|
2860
|
-
step(route('pinger_4_secret','
|
|
2858
|
+
step(route('pinger_4_secret','请她先验封线','线头没动,她才肯拿出下一张货单','瓶儿举着灯沿箱角照了一周,确认旧线还在,才从夹层抽出一张货单。她把纸递来,钥匙仍系在腕上:“这一路可以查,箱子不跟你走。”',{secrets:['merchant_route'],rel:{qing:13}},'protected_pinger','尚未保护她'),route('pinger_4_tea','陪她把这盏茶喝完','今夜不问箱数,也不碰她腕上的钥匙','你在离箱最远的椅子坐下。瓶儿等了许久,才把点心掰成两半推来一份:“茶喝完再走。今夜不谈那只箱。”',{rel:{qing:10,du:-4}})),
|
|
2861
2859
|
step(route('pinger_5_credit','货单写她名','功劳归原主','她确认署名后才盖箱印。',{repute:1,flags:['pinger_credited'],rel:{qing:15}}),route('pinger_5_spend','挪钱撑场','换场面伤信任','她散席便重新编号封条。',{silver:-25,rel:{du:16},flags:['pinger_exposed']})),
|
|
2862
|
-
step(route('pinger_6_share','
|
|
2860
|
+
step(route('pinger_6_share','把两本亏账并排摊开','好看的、难看的都让她自己看','你把公账和暗账一起放下。瓶儿从最坏的一页看起,没有替你合册,只拿算盘核了三遍:“这笔我能周转。那笔是谁瞒的,仍由谁认。”',{silver:55,flags:['pinger_same_chest'],rel:{qing:17}},'protected_pinger','尚未保护她'),route('pinger_6_return','把那把钥匙还到她手里','今后开不开箱,都由她自己决定','你把钥匙放在桌沿,没有往前推。瓶儿自己取回,系好腕绳,才给空杯续了茶:“钥匙收了。人可以再坐一会儿。”',{rel:{qing:11,du:-6}})),
|
|
2863
2861
|
step(route('pinger_7_reserve','设安全储备','先留三日粮银','她封存储备并把数报给五人。',{house:8,flags:['pinger_reserve'],rel:{qing:16}}),route('pinger_7_receipt','补齐借据','旧借都有归期','你补签欠条,她拆下一把旧锁。',{rel:{qing:12,du:-7}})),
|
|
2864
|
-
step(route('pinger_8_safe','
|
|
2862
|
+
step(route('pinger_8_safe','把借期写在箱盖内侧','钥匙、银子和愿不愿意,三件事不能混说','瓶儿亲手把归期贴进箱盖,合箱前又让你念了一遍。她收好钥匙,把茶席移到外间:“借钱看这张纸。进这扇门,另问我。”',{flags:['pinger_final_pact'],rel:{qing:20,du:-10}}),route('pinger_8_stay','陪她等封泥干透','人在屋里,手不伸向她的箱','封泥一点点失去亮光。你始终坐在桌外,瓶儿才慢慢靠上椅背闭了会儿眼;醒来第一件事,仍是自己摸了摸腕上的钥匙。',{rel:{qing:13,yu:7}})),
|
|
2865
2863
|
]),
|
|
2866
2864
|
meng_yulou:Object.freeze([
|
|
2867
|
-
step(route('meng_1_card','
|
|
2865
|
+
step(route('meng_1_card','问她这张名帖要怎样还','先说定回礼,再拿她的名字去敲门','玉楼把回礼的日子写在帖后,吹干了墨才递给你:“这下可去。别叫我下回当众讨。”',{flags:['meng_terms'],rel:{qing:13}}),route('meng_1_decline','这次不用她的名帖','不欠这份人情,也少一条门路','玉楼把帖子收进匣里:“也好。这回你没白借我的名字。”',{rel:{qing:6}})),
|
|
2868
2866
|
step(route('meng_2_return','亲送回礼','让她被当众看见','你在来客前谢她搭桥,席上无人再抹去她的功。',{repute:1,flags:['meng_repaid'],rel:{qing:15}},'meng_terms','尚未定价'),route('meng_2_private','私下道谢','情意有了,名分未正','她收礼:“这句还欠一个听众。”',{rel:{qing:9,yu:5}})),
|
|
2869
2867
|
step(route('meng_3_seating','请她排座','把转圜权交给她','她让争执双方隔席落座,仍各有台阶。',{house:6,flags:['meng_hosted'],rel:{qing:14}}),route('meng_3_corner','叫她陪末席','避开锋芒','她坐下替你记清谁先失礼。',{rel:{qing:8}})),
|
|
2870
|
-
step(route('meng_4_defend','
|
|
2868
|
+
step(route('meng_4_defend','当席拦下那句轻慢','把药车为何能进门说给所有人听','笑声刚起,你便点明是玉楼的名帖救下那车药。玉楼没有替自己添功,只把回帖放到桌上:“听见便好。往后借名,别只在出事时想起我。”',{power:1,rel:{qing:16},flags:['meng_defended']}),route('meng_4_signal','让她自己接这句话','她能圆回场面,也会记得你没有开口','玉楼笑着把讥讽接成一句席间玩笑,满桌又动了筷子。桌下,她却把原定的回礼单折起收走;散席时只说:“这回我替自己说,不算替你。”',{rel:{du:9},flags:['broken_meng_word']})),
|
|
2871
2869
|
step(route('meng_5_contract','人情逐笔记','让关系可追偿','她把借与还各写一栏。',{house:5,rel:{qing:15},flags:['meng_social_ledger']}),route('meng_5_favor','再借一次笑','先过关后欠债','她替你圆场,回单又添一行。',{repute:1,rel:{du:8},flags:['broken_meng_word']})),
|
|
2872
|
-
step(route('meng_6_dance','
|
|
2870
|
+
step(route('meng_6_dance','请她起身重新排席','让她决定谁先换座、谁先把话说完','玉楼端起自己的杯,先给争执最深的两人各留半步。五个人顺着她的眼色换座,等最后一张椅子落稳,她才坐下:“如今谁有话,慢慢说。”',{house:6,rel:{qing:16,yu:6}}),route('meng_6_listen','请她把散席后的话说完','谁失礼、谁补过,不替你省掉难听处','客人走净,玉楼把每个人何时冷脸、何时让座逐一说完。轮到你时,她没有改轻半句:“这些话只说一次。你若要还人情,记清名字。”',{secrets:['guest_obligations'],rel:{qing:11}})),
|
|
2873
2871
|
step(route('meng_7_witness','让她见证公约','体面成为可执行条款','她逐句确认无人被拿来垫脚。',{flags:['meng_witness'],rel:{qing:17}}),route('meng_7_amend','请她改措辞','让拒绝也留出口','她把命令改成可答应、可拒绝的约定。',{house:4,rel:{qing:13}})),
|
|
2874
|
-
step(route('meng_8_grace','
|
|
2872
|
+
step(route('meng_8_grace','把借名与回礼写成对页','谁借她的名字,谁亲自在人前归还','玉楼把名帖放在左页,回礼写在右页,中间不留替人圆场的空格。曲印落下时她说:“借我的名可以。还的时候,也请叫我坐在席上。”',{flags:['meng_final_pact'],rel:{qing:20,du:-10}}),route('meng_8_lastcup','陪她送完最后一桌客','收席也是一晚的工,不让她独自做完','你同她逐桌送客、收帖、叫车,直到院里只剩两只杯。玉楼把温的那只递给你:“这杯不用还礼。喝完便算今晚散了。”',{rel:{qing:14,yu:8}})),
|
|
2875
2873
|
]),
|
|
2876
2874
|
sun_xuee:Object.freeze([
|
|
2877
|
-
step(route('xuee_1_bag','
|
|
2875
|
+
step(route('xuee_1_bag','接过米袋,跟她去后仓','绳结重绑过,你自己去看','米袋比看着轻。雪娥蹲在仓门前,拨开绳结给你看里面的旧勒痕:“这袋子不是头一回空。”',{secrets:['kitchen_witness'],flags:['xuee_evidence'],rel:{qing:14}}),route('xuee_1_cash','叫她先拿私房钱垫上','今日能开锅,这笔钱却落在她一个人身上','雪娥解下腰间的银剪子,当你的面剪开银包:“好。今日的热水有了。往后你自己烧。”',{silver:35,rel:{du:14}})),
|
|
2878
2876
|
step(route('xuee_2_count','同数米斗','把劳动变证据','你记斗数,她核重量,差额正合假账。',{silver:18,flags:['xuee_counted'],rel:{qing:15}}),route('xuee_2_order','催她开火','先保席面','她开锅却把欠工写在门上。',{house:2,rel:{du:9},flags:['broken_xuee_word']})),
|
|
2879
2877
|
step(route('xuee_3_wage','补发工钱','先付做事的人','她逐人唱名发钱,灶火当场复燃。',{silver:-25,house:7,flags:['xuee_wages'],rel:{qing:16}}),route('xuee_3_praise','只在人前夸','不给实际回报','雪娥把掌声记作零两。',{repute:1,rel:{du:12},flags:['broken_xuee_word']})),
|
|
2880
|
-
step(route('xuee_4_testify','
|
|
2878
|
+
step(route('xuee_4_testify','请她带米斗进堂','让她自己说短了多少、谁碰过袋子','雪娥一手抱工簿,一手提米斗走进正堂。有人叫她把东西留下便回灶上,她把斗往桌上一放:“袋子是我开的,数也该由我说。”',{power:1,flags:['xuee_testified'],rel:{qing:17}},'xuee_evidence','尚未查缺口'),route('xuee_4_copy','只拿一份工簿抄本','她不必露面,但少了一次当面追问的机会','雪娥把抄本交给你,末页另添一行:原簿仍在灶上,今日没有请她到堂。她吹干墨:“拿去。别说成我已经当面认过。”',{secrets:['labor_copy'],rel:{qing:8}})),
|
|
2881
2879
|
step(route('xuee_5_ration','先定三日粮','宴前保住全宅','她封好口粮才批准开席。',{house:8,flags:['xuee_ration'],rel:{qing:15}}),route('xuee_5_feast','先办大席','得名声耗粮火','席面亮,次日灶上只剩稀粥。',{repute:2,house:-8,rel:{du:10}})),
|
|
2882
|
-
step(route('xuee_6_rest','
|
|
2880
|
+
step(route('xuee_6_rest','替她守一更灶火','今夜让她洗手、坐下,把热汤喝完','你挽袖坐到灶前看火。雪娥起初每隔片刻便回头,见锅没有糊,才洗净手坐下,把一碗汤从热喝到温。',{rel:{qing:16,yu:6,du:-6}}),route('xuee_6_audit','请她再把米数核一遍','她仍要多做一轮,名字必须写在头一行','雪娥把米斗重新称过,差数核清后没有立刻合簿。她蘸足了墨,在第一页最上面写下自己姓名:“这遍是谁做的,别又只记一个准数。”',{silver:12,rel:{qing:11}})),
|
|
2883
2881
|
step(route('xuee_7_allocate','让她排配给','按实做事分资源','她依人数与工时发粮,无人能插队。',{house:9,flags:['xuee_allocator'],rel:{qing:17}}),route('xuee_7_sharemeal','同桌吃灶饭','用一餐确认尊重','她把最热的一碗推给你,也给另外四人留足。',{rel:{qing:13}})),
|
|
2884
|
-
step(route('xuee_8_hearth','
|
|
2882
|
+
step(route('xuee_8_hearth','把停火日也写进灶簿','做了多少、歇了多久、粮剩几日都要记','雪娥在每日用粮旁另开一栏,专写谁值火、谁休息。灶印按下去,她先圈出自己的停火日:“往后哪口锅都不靠一个人白守。”',{flags:['xuee_final_pact'],rel:{qing:20,du:-10}}),route('xuee_8_bankfire','陪她把最后一炉炭封好','今日的活到这里,不再临时添一桌饭','你递灰,她压实炉口,确认余火明早还能起。雪娥洗净手,把暖阁门留开半扇:“今晚若有人再要酒席,你去回。”',{rel:{qing:14,yu:7}})),
|
|
2885
2883
|
]),
|
|
2886
2884
|
});
|
|
2887
2885
|
|
|
@@ -3913,14 +3911,14 @@ export const ALLIANCE_NIGHT_COMBINATIONS = Object.freeze({
|
|
|
3913
3911
|
});
|
|
3914
3912
|
|
|
3915
3913
|
export const SHARED_NIGHT_CHOICES = Object.freeze([
|
|
3916
|
-
route('shared_five_roles','
|
|
3917
|
-
route('shared_buy_quiet','
|
|
3918
|
-
route('shared_false_only','
|
|
3914
|
+
route('shared_five_roles','请五个人都坐下','每人只答应自己手里那件事','月娘把总账放到桌中,金莲压住原话,瓶儿把货单与私钥分开,玉楼递帖,雪娥先留粮。五个人一个个说愿意,也都能随时收回自己那一份。',{house:14,silver:30,flags:['harem_coalition'],relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:12,du:-12}]))}),
|
|
3915
|
+
route('shared_buy_quiet','把五袋银分到各院','银子能买一夜安静,买不到她们说同一句话','五只荷包被各自收走。月娘合账,瓶儿锁箱,玉楼收帖,雪娥抱走工簿;金莲留在最后,只问你这钱究竟买的是什么。',{silver:-60,house:-2}),
|
|
3916
|
+
route('shared_false_only','再说每个人都是唯一','金莲手里还留着你昨夜的原话','金莲当着五个人把你的话念了一遍。另外四院各拿出一句同样的话;没有人吵,五把钥匙却同时从桌上收了回去。',{house:-14,exposure:8,relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:-6,du:18}]))}),
|
|
3919
3917
|
]);
|
|
3920
3918
|
export const SHARED_AFTERGLOW_BEATS = Object.freeze([
|
|
3921
|
-
{id:'five_cups',kicker:'外账初定',title:'五杯仍暖',body:'月娘收账,金莲撕假证,瓶儿锁原件,玉楼给雪娥递来热茶;雪娥把最后一碗汤推回桌心。',choices:Object.freeze([route('after_1_names','
|
|
3922
|
-
{id:'five_boundaries',kicker:'更漏过半',title:'五句边界',body:'衣袍都松了些,肩背落在暖灯里;你先问是否继续靠近。五人各自说出愿意与不愿意,没人替别人回答。',choices:Object.freeze([route('after_2_hear','
|
|
3923
|
-
{id:'five_afterglow',kicker:'天色将明',title:'没有谁被落下',body:'金莲把毯角递给瓶儿,瓶儿替雪娥垫好手腕;雪娥催月娘歇息,月娘让玉楼停止替所有人周全。五人相视而笑。',choices:Object.freeze([route('after_3_pact','
|
|
3919
|
+
{id:'five_cups',kicker:'外账初定',title:'五杯仍暖',body:'月娘收账,金莲撕假证,瓶儿锁原件,玉楼给雪娥递来热茶;雪娥把最后一碗汤推回桌心。',choices:Object.freeze([route('after_1_names','把五个人的名字念全','哪件事是谁做的,就当面说给她听','你从总账说到灶火,一个个念出名字。玉楼指出漏掉的守门人,月娘当场补上;雪娥听见自己的工不再写成“灶上自办”,才端起那碗汤。',{house:5,relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:5}]))}),route('after_1_rest','先叫她们把手里的活放下','今夜不再临时添账、添茶或添一桌饭','雪娥封火,瓶儿系回钥匙,月娘合上最后一页。金莲替她拔簪以前先问疼不疼;玉楼只挪近空椅,不替任何人说一定会坐。',{house:4})])},
|
|
3920
|
+
{id:'five_boundaries',kicker:'更漏过半',title:'五句边界',body:'衣袍都松了些,肩背落在暖灯里;你先问是否继续靠近。五人各自说出愿意与不愿意,没人替别人回答。',choices:Object.freeze([route('after_2_hear','听完每个人再靠近','一句愿意只管眼前这一步','你按座次逐句问,谁说慢便慢,谁伸手停便停。瓶儿始终摸得到钥匙和门;金莲改了一次答案,你也照她新说的做。',{house:5,relAll:Object.fromEntries(HEROINE_IDS.map(id=>[id,{qing:4,yu:3,du:-4}]))}),route('after_2_dim','只拨暗一枚灯芯','纱帐留一半,门闩和彼此的脸仍看得见','玉楼先问过每个人,才放下一半纱帐。雪娥把热水和外袍移到桌中,瓶儿亲手走了一遍门边的路;另一枚灯始终亮着。',{house:3})])},
|
|
3921
|
+
{id:'five_afterglow',kicker:'天色将明',title:'没有谁被落下',body:'金莲把毯角递给瓶儿,瓶儿替雪娥垫好手腕;雪娥催月娘歇息,月娘让玉楼停止替所有人周全。五人相视而笑。',choices:Object.freeze([route('after_3_pact','把五件旧物传一周','别人复述过,也仍由本人亲手收回','总账钥、扇骨、私钥、名帖与停灶牌沿圆席慢慢传过。每个人只复述自己听见的那一条,原物随即回到主人手中;你只在见证栏落名。',{flags:['five_accord_sealed'],house:8}),route('after_3_quiet','今夜不再添一句誓言','有人靠近,有人守着门边,都不必解释成永久','最后一更里没有再铺纸。金莲把问题压在扇下,月娘没有排明日清单,雪娥也不再起身收杯;五个人各留一个舒服的位置,安静等天亮。',{house:5})])},
|
|
3924
3922
|
]);
|
|
3925
3923
|
|
|
3926
3924
|
// 五院余夜不是点完按钮便切下一张图。每项安排先让五个人分别回应,确认
|