mirror of
https://github.com/Narcooo/inkos.git
synced 2026-08-30 17:22:02 +08:00
test(studio): archive interactive film e2e artifacts
This commit is contained in:
@@ -0,0 +1,413 @@
|
||||
# Systematic Study: `mmlong818/filmgame` vs InkOS Interactive-Film
|
||||
|
||||
Read-only research. Source read via WebFetch on `raw.githubusercontent.com` (branch `master`).
|
||||
Date: 2026-06-26.
|
||||
|
||||
filmgame = "猫叔的互动影游创作系统" — an AI-assisted authoring tool for interactive
|
||||
film/games. Next.js 16.2 + React 19 + TypeScript 5 + Tailwind v4 + Zustand 5. AI via
|
||||
LangChain model wrappers (`@langchain/anthropic|openai|google-genai`, `@anthropic-ai/sdk`),
|
||||
zod-4 structured output, `@xyflow/react` for the flow graph, `lz-string` + localStorage
|
||||
for persistence. No image generation anywhere; text-only.
|
||||
|
||||
---
|
||||
|
||||
## 0. Architecture at a glance (what filmgame actually is)
|
||||
|
||||
- **A guided 5-phase wizard**, not a chat agent. Phases are a hard, ordered, lockable
|
||||
pipeline: `world → scale → structure → workshop → validate` (`lib/types/phase.ts`:
|
||||
`export type Phase = 'world' | 'scale' | 'structure' | 'workshop' | 'validate'`).
|
||||
A `PHASES` array carries `{key, label, description}` (世界锚点 / 规模规划 / 结构与分支 /
|
||||
场景填充 / 全局校验).
|
||||
- **Phase shell** (`app/project/[id]/layout.tsx`): horizontal numbered tab stepper (1–5) in
|
||||
a `filmgame-shell` header. Each tab shows a ✓ when `done`, contextual badges ("2/8" nodes,
|
||||
"3角" characters, "已选" scale chosen), locked phases at 35% opacity / non-clickable, a red
|
||||
dot on `validate` when `downstreamStale`. Top-left `← 返回` to `/projects`, inline-rename
|
||||
project title, bottom-right Preview button.
|
||||
- **AI is per-action one-shot calls**, NOT an agent loop and NOT LangGraph despite the dep.
|
||||
`lib/ai/lg-structure.ts` is procedural: one "spine" call, then **parallel** per-chapter
|
||||
calls, each wrapped in a `for (let i = 0; i < 3; i++) { … RETRY_SUFFIX }` retry loop with
|
||||
`extractJson()` validated against zod schemas (`SpineSchema`, `ChapterDraftSchema`). The
|
||||
`@langchain/langgraph` dependency is present but the structure path doesn't build a graph.
|
||||
- **Routing model**: every phase action posts to `/api/ai` (or `/api/ai/structure`) with
|
||||
`{phase, action, context}`; `lib/ai/prompts.ts` `buildPrompt(phase, action, context)`
|
||||
routes to a template; the reply is zod-parsed (`lib/ai/schemas.ts`) and committed to the
|
||||
Zustand store (`lib/store/projectStore.ts`), persisted via `lib/persistence.ts`.
|
||||
- **Data model** (`lib/types/project.ts`): one `Project` aggregate holds `worldAnchor`,
|
||||
`characters[]`, `scalePlanOptions[]` + `selectedScalePlanId`, `chapters[]`, `acts[]`,
|
||||
`nodes[]`, `variables[]`, `endings[]`, `lastValidation`, `directorReview`,
|
||||
`downstreamStale`, `schemaVersion`. Hierarchy is Chapter → Act → StoryNode.
|
||||
|
||||
---
|
||||
|
||||
## 1. Per-phase comparison
|
||||
|
||||
### Phase 1 — WORLD (世界锚点) ‖ Verdict: **filmgame slightly ahead on guided structure; we're ahead on character memory**
|
||||
|
||||
**filmgame — what it does** (`app/project/[id]/world/page.tsx`, `lib/ai/prompts.ts`):
|
||||
Single scrollable form, `max-w-3xl`, auto-save badge ("✓ 已保存", 1.5s). Fields:
|
||||
`storyCore` (故事核, textarea w/ example placeholder), `theme` (核心主题), `genre` (类型/风格),
|
||||
`durationMinutes` (number 15–360), `worldRules` (世界规则), `endingCount` (number 2–10).
|
||||
Required fields flagged with red `*`. Character cards: name, role dropdown
|
||||
(protagonist/antagonist/support/other), motivation, relationship, and a **2×2 McKee grid:
|
||||
WOUND / LIE / WANT / NEED**.
|
||||
|
||||
**filmgame — AI actions** (5):
|
||||
- `world:review` ("AI 专家审查") — audits 5 dimensions (consistency, narrative-tension
|
||||
structure, conflict-generation, character internal conflict, interactive thematic
|
||||
potential); returns `issues[]` + `structure_analysis` + `interactive_potential` + overall.
|
||||
Result panel shows pass/fail badge (通过/未通过), per-issue card (field, issue, "→" suggestion).
|
||||
- `world:fix_issues` ("AI 修正") — rewrites storyCore/theme/genre/worldRules from review feedback.
|
||||
- `world:suggest_characters` ("AI 生成") — 2–4 chars w/ wound/lie/want/need, ensures
|
||||
protagonist + antagonist/support.
|
||||
- `world:suggest_variables` ("AI 建议变量") — extracts counters/flags/relationships/items.
|
||||
- `world:endings_design` ("AI 设计结局线") — N endings w/ `triggerCondition` + `avoidCondition`
|
||||
+ `keyVariable`, rendered as color-coded cards (good/bad/neutral/secret).
|
||||
- Per-character `world:character_voice` ("AI 声音指纪") → VoiceProfile card
|
||||
(speaking_rhythm, vocabulary, defense_mechanism, sample_lines).
|
||||
All AI buttons gated until required fields complete.
|
||||
|
||||
**Our equivalent**: chat-agent tools `set_world_anchor`, `upsert_characters`
|
||||
(voiceProfile → MemoryDB), `add_variable`, `define_ending`. No dedicated form page.
|
||||
|
||||
**Gap**: filmgame is **ahead** on a structured one-screen capture w/ inline AI critique
|
||||
(`world:review` + one-click `fix_issues` is a genuinely good loop we lack). We're **ahead**
|
||||
because our `voiceProfile` is written to MemoryDB and reused for cross-node voice
|
||||
consistency — filmgame's VoiceProfile is a static card on the character, not enforced at
|
||||
generation time across nodes.
|
||||
|
||||
---
|
||||
|
||||
### Phase 2 — SCALE (规模规划) ‖ Verdict: **filmgame clearly ahead (we have nothing here)**
|
||||
|
||||
**filmgame** (`app/project/[id]/scale/page.tsx`, prompt `scale:generate`):
|
||||
One AI action generates **three plans** (精简 / 标准 / 史诗 = compact/standard/epic) as
|
||||
`PlanCard`s in a grid. Each card: label badge, core metric row
|
||||
`"{chapterCount} 章 × {actCountPerChapter} 幕/章 = {totalNodes} 节点 · {totalBranches} 个分支 ·
|
||||
预估 {estimatedHours}h"`, italic `aiRationale`, a collapsible per-chapter outline
|
||||
(title + brief), and a change-warning if nodes already exist ("⚠️ 已有 N 个节点,更换方案将…需要重新生成结构").
|
||||
A `CompareTable` lays the plans side-by-side on 章数/总节点数/分支数/预估工时. Selecting
|
||||
calls `selectScalePlan(plan.id)` (amber highlight + "已选中 ✓"); Next disabled until selected.
|
||||
`ScalePlan` type: `{id, label, chapterCount, actCountPerChapter, totalNodes, totalBranches,
|
||||
estimatedHours, aiRationale, chapters?[]}`. Schema `ScaleGenerateSchema` = `plans[]`.
|
||||
|
||||
**Our equivalent**: **none.** We jump from world straight to `draft_structure`.
|
||||
|
||||
**Gap**: filmgame is **ahead**. The 3-plan chooser w/ time/scope estimates + rationale +
|
||||
side-by-side compare is a real product feature we don't have. It de-risks "how big should
|
||||
this be?" before any structure work.
|
||||
|
||||
---
|
||||
|
||||
### Phase 3 — STRUCTURE (结构与分支) ‖ Verdict: **near parity; we're ahead on graph editing, they're ahead on guided 2-stage generation + auto-layout**
|
||||
|
||||
**filmgame** (`structure/page.tsx` + `FlowView.tsx` + `EndingsSection.tsx`):
|
||||
Dual view toggle 列表/流程图. **List view**: Chapter (collapsible, shows "N 幕 · M 节点") →
|
||||
Act (collapsible, dramatic-function dropdown setup/conflict/turn/resolution) → Node (inline
|
||||
title, type dropdown, ✕ delete). Add buttons: `+ 添加章 / + 添加幕 / + 添加节点`. Six node
|
||||
types in `NODE_TYPES` w/ color badges: start 开场(green), normal 推进(gray), branch 分支(blue),
|
||||
merge 汇聚(purple/rose), ending 结局(amber), explore 探索(teal).
|
||||
|
||||
**Two-stage AI generation**:
|
||||
- Stage 1 `structure:spine` then per-chapter `structure:chapter` via `/api/ai/structure` →
|
||||
`struct_preview` state → "通过 → 生成分支" commits (`commitStructure()`).
|
||||
- Stage 2 `branches:generate` via `/api/ai` → `branch_preview` showing each node's choices +
|
||||
targets → "通过" commits (`commitBranches()`). Explore nodes get `exploreReturnNodeId`
|
||||
(no choices); ending nodes skip auto-linking.
|
||||
- "重新 AI 设计" (confirm) clears + restarts; `downstreamStale` banner offers regenerate or
|
||||
"继续使用旧版本".
|
||||
|
||||
**FlowView** (`@xyflow/react` 12.10): `nodesDraggable={true}` (drag persists manual pos),
|
||||
but `nodesConnectable={false}` — **you cannot draw/connect/add/delete edges or nodes on the
|
||||
canvas.** Per-node "编辑" button routes to `workshop?node=`. Custom **BFS auto-layout** by
|
||||
act/chapter depth (COL_W 260, ROW_H 140, ACT_GAP 60); merge nodes placed after parents;
|
||||
hover highlights a path; edges to endings amber, hover path purple+animated; Background +
|
||||
Controls + MiniMap. Manual drag overrides auto-layout.
|
||||
|
||||
**EndingsSection**: editable cards — title, type dropdown (✓好结局/✗坏结局/◎中性/★隐藏),
|
||||
`conditions` text (placeholder "好感度 > 60 且 未使用暴力"), description, `nodeId` bind dropdown.
|
||||
**Note**: `variableConditions`, `requiredChoiceIds`, `reachPath` exist in the `Ending` type
|
||||
but are **NOT edited in this component**. No AI ending action here (that lives in world phase).
|
||||
|
||||
**Our equivalent**: `draft_structure` + `connect_choice` / `remove_node` agent tools;
|
||||
`StoryGraphTree` (inline field edit); `FlowView` (xyflow) **read-only → editable, with
|
||||
drag/connect/add/delete**.
|
||||
|
||||
**Gap**: **parity-ish.** We're **ahead** on graph editing — filmgame's flow canvas is
|
||||
view+drag only (`nodesConnectable={false}`), all topology edits go through list/AI. filmgame
|
||||
is **ahead** on the guided 2-stage generate-preview-commit pipeline and the BFS auto-layout
|
||||
with hover-path highlighting (polished UX we lack).
|
||||
|
||||
---
|
||||
|
||||
### Phase 4 — WORKSHOP (场景填充) ‖ Verdict: **filmgame ahead on density of craft-AI actions; we're ahead on images + voice-memory**
|
||||
|
||||
**filmgame** (`workshop/page.tsx` + `components/{AIPanels,NodeTreeSidebar,widgets}.tsx`):
|
||||
Three-zone IDE: left `NodeTreeSidebar` (search, "has pending draft" markers), center editor,
|
||||
right collapsible AI panels (SceneAnalysisPanel, SceneTensionPanel, ChoiceConsequencePanel,
|
||||
ChoiceSuggestionsPanel). Top "叙事位置导航仪" progress bar (% through story). Keyboard nav
|
||||
J/K/↓/↑/Esc.
|
||||
|
||||
Node editing: screenplay scene header (INT/EXT, location, DAY/NIGHT/DAWN/DUSK/CONTINUOUS);
|
||||
sceneDesc textarea w/ char count; **emotional arc** (emotionIn / emotionOut / playerEmotion /
|
||||
tension slider 0–10); dialogue list (speaker colored by character, emotion tag, ✕ on hover,
|
||||
+ 添加台词; character wound/lie/voice samples shown above for reference); choices grid
|
||||
(text, target, consequence, variable-effect toggles); explore-node return-node setup.
|
||||
|
||||
**filmgame — AI actions** (the richest phase, ~8):
|
||||
- `workshop:fill_emotion` ("AI 填写") → emotionIn/Out, playerEmotion, tension, internal_lie, fear
|
||||
- `workshop:write_dialogue` ("AI 生成") → 6–10 McKee-principled lines (+optional sceneDesc)
|
||||
- `design_node` ("AI 设计此节点") → parallel fill_emotion + write_dialogue
|
||||
- `workshop:scene_analysis` ("场景分析") → working_line, issues[problem/fix], killer_line
|
||||
- `workshop:scene_tension` ("⚡ 场景张力诊断") → diagnosis, missing engine, rewrite, mcguffin,
|
||||
dramatic_irony, upgraded_line
|
||||
- `workshop:suggest_choices` ("AI 建议选项") → 2–4 choices w/ dramatic_cost + thematic_resonance
|
||||
- `workshop:choice_consequence` ("🎯") → immediate / chapter_impact / ending-prob shift /
|
||||
regret_factor / thematic resonance
|
||||
- `workshop:character_voice` and `workshop:revise_dialogue` (post-critique rewrite, ≥6 lines)
|
||||
- **Bulk** "批量 AI 设计全部节点": Pass 1 emotion+dialogue for all nodes; Pass 2 re-refines
|
||||
nodes < 6 dialogue lines via scene_analysis → revise_dialogue, with progress overlay + cancel.
|
||||
|
||||
AI results land in an amber "AI 已生成设计方案" preview card with 丢弃 / 重新生成 / 通过.
|
||||
Context sent: node + worldAnchor + characters + variables (+ first 20 nodes for choices).
|
||||
|
||||
**Our equivalent**: agent tools `fill_node`, `revise_node`, `generate_node_image`; tree
|
||||
inline edit. Per-node **AI image generation (图+文, real images)** — filmgame has none.
|
||||
|
||||
**Gap**: filmgame is **ahead** on the *breadth and craft-specificity* of per-node AI actions
|
||||
(scene-tension diagnosis, choice-consequence ripple mapping, killer-line injection, batch
|
||||
two-pass refine). We're **ahead** on images and on MemoryDB-backed voice consistency
|
||||
(filmgame re-sends character samples as context each call but doesn't persist/enforce a voice
|
||||
memory).
|
||||
|
||||
---
|
||||
|
||||
### Phase 5 — VALIDATE (全局校验) ‖ Verdict: **filmgame clearly ahead (charts + export + director review); we're ahead only on runtime-playability gating**
|
||||
|
||||
**filmgame** (`validate/page.tsx`, engine `lib/validation/engine.ts`):
|
||||
Header buttons: 运行校验 / 导出 JSON / 导出 .ink. Summary card (4 metrics): 通过率 (pass rate,
|
||||
green ≥80 / amber ≥60 / red <60), 总节点, 总分支, 问题数. Issues grouped by severity (error
|
||||
red / warning amber / info blue), each with code + message + "去修复 →" deep-link to workshop.
|
||||
|
||||
**Validation engine** — `runValidation(project): ValidationReport`. Severity penalties:
|
||||
error −20, warning −8, info −2. **18 issue codes** (README claims "8 structural issues" — out
|
||||
of date; the engine actually defines 18). BFS reachability from start node. The full list:
|
||||
|
||||
| Code | Detects | Level |
|
||||
|---|---|---|
|
||||
| DEAD_END | non-ending node with no valid outgoing choice | error |
|
||||
| BROKEN_LINK | choice targets a non-existent node | error |
|
||||
| UNREACHABLE | node not reachable via BFS from start | warning |
|
||||
| NO_ENDING | zero ending nodes | warning |
|
||||
| EMOTION_MONOTONE | ≥70% of tensioned nodes have tension ≥7 | info |
|
||||
| DUPLICATE_CHOICE | multiple choices share identical text | warning |
|
||||
| SINGLE_ENDING | only 1 ending with ≥10 nodes total | info |
|
||||
| NO_PATH_TO_ENDING | some path from start can't reach any ending | error |
|
||||
| ENDING_NO_DEF | ending node lacks an Ending definition record | warning |
|
||||
| ENDING_ORPHAN | Ending def points to invalid/non-ending node | error |
|
||||
| ENDING_VARIETY | multiple endings all share one type | info |
|
||||
| LOW_BRANCH_DENSITY | branch nodes < 25% of total (≥10 nodes) | info |
|
||||
| WEAK_CHOICES | >60% of branch nodes have ≤2 options (≥3 branches) | info |
|
||||
| NO_EXPLORE_CONTENT | zero explore nodes in projects ≥15 nodes | info |
|
||||
| THIN_DIALOGUE | >50% of content nodes have <6 dialogue lines | warning |
|
||||
| SHALLOW_EMOTION | >40% lack `internal_lie` | info |
|
||||
| THIN_SCENE_DESC | >50% of content nodes have <60-char sceneDesc | info |
|
||||
| SHORT_DURATION | estimated duration < 50% of target | warning |
|
||||
|
||||
**Emotional curve** (情感弧线): SVG 600×120 polyline of `emotionFunction.tension` across
|
||||
nodes; Y 0–10 (低→高), grid lines at 2/5/8, node dots colored by type. Shows only if ≥2 nodes
|
||||
have tension>0.
|
||||
|
||||
**Narrative map** (叙事地图): 结局定义 count, 分支密度 % (branch/total), 对白完成度 % + per-chapter
|
||||
dialogue-fill progress bars.
|
||||
|
||||
**Path duration distribution** (路径时长分布): traces up to 30 start→ending paths; per path
|
||||
shows label, minutes, node count; bars colored by ending type, width scaled to max duration.
|
||||
|
||||
**Exports**: `exportProjectJson(project)` (full project JSON) and `exportInk(project)`
|
||||
(hand-rolled Ink output; `lib/conditions.ts` `conditionsToInk()` sanitizes var names — no Ink
|
||||
library in deps). Toasts "JSON 已导出" / ".ink 文件已导出".
|
||||
|
||||
**Director review** `validate:director_review` ("召唤五位专家终审"): a `DirectorReview`
|
||||
(`{overallScore 0–10, executiveSummary, greenlit bool, mustFix[], verdicts[{lens, observation,
|
||||
note, score}], standout_moment}`). Five-lens committee (Spielberg/McKee/Jobs/psychologist/
|
||||
audience-exec). Plus `validate:report` for structural+monotony priority fixes.
|
||||
|
||||
**Our equivalent**: `reviewStoryGraph` = playability gating + 4 quality checks
|
||||
(VARIABLE_UNWRITTEN, VARIABLE_UNUSED, ENDING_VARIETY, IMAGE_MISSING).
|
||||
|
||||
**Gap**: filmgame is **ahead** — 18 checks vs our ~5, plus emotional-curve chart,
|
||||
path-duration distribution, narrative map, JSON/Ink export, and the director-review AI gate.
|
||||
We're **ahead** in one important way: our validation gates a *runtime-playable typed
|
||||
artifact* (a real player consumes it), and we uniquely check IMAGE_MISSING (filmgame has no
|
||||
images). filmgame's checks are authoring-quality heuristics; ours are partly executability
|
||||
guarantees for a real runtime.
|
||||
|
||||
---
|
||||
|
||||
### Phase 6 — PREVIEW / playback ‖ Verdict: **near parity; both deterministic; we're ahead on persistent state machine/snapshots**
|
||||
|
||||
**filmgame** (`preview/page.tsx`):
|
||||
Fully **deterministic, no runtime LLM** — clicking a choice runs `navigateTo(nodeId,
|
||||
choiceEffect)`: pushes current to `history`, applies `applyVariableEffect(s, choiceEffect)`,
|
||||
sets current node. Variable **HUD** bottom-right: each variable name + current value
|
||||
(`varState[v.name] ?? defaultValue ?? 0`). **Path history** breadcrumb: clickable visited
|
||||
nodes; `jumpTo()` rewinds and **truncates** history at that point. Choices filtered by
|
||||
`evalConditions(c.conditions, varState)` (from `lib/conditions.ts`) AND valid target.
|
||||
`applyVariableEffect` parses `"+health"`, `"mood=5"`, `"tension-=2"`. Ending detection by
|
||||
`type === 'ending'` → themed end card (good/bad/neutral/secret gradients); unlocked endings
|
||||
persisted to localStorage ("已解锁结局 N / total").
|
||||
|
||||
**`lib/conditions.ts`**: `evalConditions(conditions, state): boolean` (regex
|
||||
`^([a-zA-Z_][a-zA-Z0-9_]*)\s*(>=|<=|>|<|==|!=)\s*(.+)$`, joined by `&&`/`||`; empty/parse-fail
|
||||
→ true). `conditionsToInk(conditions)` for export. Operators: `>= <= > < == !=`, `&& ||`.
|
||||
|
||||
**Our equivalent**: deterministic player at `#/play/:id`, variable HUD, **no runtime LLM** —
|
||||
plus a persistent state machine + reducer (execution authority in code), snapshots/undo, and
|
||||
event-floored play.
|
||||
|
||||
**Gap**: **near parity** on the core (both click-driven, deterministic, condition-filtered,
|
||||
variable HUD, ending detection). We're **ahead** because our playback is backed by a
|
||||
persistent reducer/state-machine with snapshots/undo and a typed story-graph.json evaluator,
|
||||
vs filmgame's in-component `useState` history array. (Minor filmgame quirk: UI condition hint
|
||||
uses Chinese "且" but `conditions.ts` parses `&&`/`||` — a likely normalization gap I could
|
||||
not fully verify.)
|
||||
|
||||
---
|
||||
|
||||
## 2. Where filmgame is genuinely more comprehensive (worth absorbing)
|
||||
|
||||
1. **The guided 5-phase wizard shell itself** (`layout.tsx`): numbered stepper, per-phase
|
||||
progress badges, lock/unlock gating, downstream-stale red dot. We have powerful tools but
|
||||
no opinionated *path* through them. This is filmgame's single biggest product advantage.
|
||||
2. **Scale planning (Phase 2)** — 3 plans (compact/standard/epic) with node/branch/hour
|
||||
estimates, AI rationale, side-by-side compare, downstream-stale warning. We have nothing.
|
||||
3. **Validate phase richness**: 18-rule engine with weighted pass-rate score; emotional-curve
|
||||
SVG; path-duration distribution; narrative map; **JSON + Ink export**; 5-expert director
|
||||
review gate. Our `reviewStoryGraph` is ~5 checks with no charts/export/AI gate.
|
||||
4. **Workshop craft-AI density**: scene-tension diagnosis, choice-consequence ripple mapping,
|
||||
killer-line injection, batch two-pass refine (generate-all then re-refine thin nodes).
|
||||
Far more granular than our `fill_node`/`revise_node`.
|
||||
5. **`world:review` → one-click `fix_issues` loop**: inline expert critique with apply-fix is
|
||||
a tidy UX pattern; our review and authoring are not coupled into a one-click apply.
|
||||
6. **Downstream-stale propagation** (`downstreamStale`, `clearDownstream`, `clearStaleFlag`):
|
||||
editing the world anchor flags everything downstream and offers regenerate-or-keep — a
|
||||
clean dependency-invalidation model across phases.
|
||||
|
||||
---
|
||||
|
||||
## 3. Where WE are already ahead (do not regress)
|
||||
|
||||
1. **Per-node AI image generation (图+文, real images)** — filmgame is 100% text-only; zero
|
||||
image code anywhere. This is a category difference.
|
||||
2. **Real conversational agent** vs filmgame's per-action one-shot calls. filmgame's "AI" is
|
||||
`buildPrompt(phase, action, ctx)` → single LLM call → zod parse → commit (with a 3-retry
|
||||
loop and parallel chapter fan-out, but **no agent loop, no tool use, no LangGraph graph**
|
||||
despite the dep). Our agent reasons across tools in one session.
|
||||
3. **Runtime-playable typed artifact + pure-code evaluator** — our story-graph.json is
|
||||
consumed by a real deterministic runtime; filmgame's preview is an in-component reader.
|
||||
4. **Persistent state machine + reducer with snapshots/undo** (execution authority in code);
|
||||
filmgame's playback is ephemeral `useState` history.
|
||||
5. **MemoryDB character-voice consistency enforced across nodes** — filmgame stores a
|
||||
VoiceProfile card and re-pastes samples as context, but nothing persists/enforces voice
|
||||
memory across the whole graph.
|
||||
6. **Visual graph EDITING** (drag/connect/add/delete via xyflow) — filmgame's FlowView is
|
||||
`nodesConnectable={false}`, drag-to-reposition only; all topology edits route through
|
||||
list/AI.
|
||||
7. **IMAGE_MISSING validation** — we validate an asset dimension filmgame can't have.
|
||||
|
||||
---
|
||||
|
||||
## 4. "Go further" proposals (combine their comprehensiveness with our advantages)
|
||||
|
||||
Each marked **S/M/L** and whether it leverages something we uniquely have.
|
||||
|
||||
**P1 — Guided phase wizard that WRAPS our agent tools. Size: M. Uniquely-ours: yes.**
|
||||
Build a 5-step stepper shell (world → scale → structure → workshop → validate) like
|
||||
filmgame's `layout.tsx`, but each step's "AI" buttons dispatch our existing agent tools
|
||||
(`set_world_anchor`, `draft_structure`, `fill_node`, …) instead of one-shot calls. Best of
|
||||
both: filmgame's legibility + our conversational agent underneath. The wizard becomes a
|
||||
"fast path"; the chat agent stays available as the "power path." Add phase-progress badges
|
||||
and a downstream-stale flag mirroring filmgame's model.
|
||||
|
||||
**P2 — Scale-planning phase feeding our `draft_structure`. Size: M. Uniquely-ours: partial.**
|
||||
Add a Scale step that generates 3 plans (compact/standard/epic) with node/branch/duration
|
||||
estimates + rationale + compare table. Selecting a plan passes
|
||||
`{chapterCount, actsPerChapter, totalNodes, totalBranches}` straight into our
|
||||
`draft_structure` agent call as scope constraints (filmgame's plan is just metadata; ours
|
||||
would actually parameterize generation). Adopt their `downstreamStale` warning when the user
|
||||
re-picks a plan after nodes exist.
|
||||
|
||||
**P3 — Emotional-arc curve driven by our TYPED graph. Size: S. Uniquely-ours: yes.**
|
||||
Port filmgame's SVG tension polyline, but plot it over the **actual path the player took in
|
||||
our runtime** (and/or BFS over the typed graph), not just node order. Because we have a real
|
||||
evaluator, we can show *per-path* emotional arcs (e.g. the curve for the "good ending" path
|
||||
vs the "bad ending" path) — something filmgame can't, since its preview is ephemeral.
|
||||
|
||||
**P4 — Path & duration distribution + replayability stats. Size: M. Uniquely-ours: yes.**
|
||||
Adopt filmgame's path-duration table and branches-page analytics (type distribution,
|
||||
shortest/longest path, branch density, variable coverage, dead-end/unreachable detection),
|
||||
but compute them by walking our typed graph with our condition evaluator — so the stats
|
||||
respect `variableEffects`/conditions (true reachability), not just edge existence. Surface
|
||||
"% of content reachable on a single playthrough" (their "无差异内容" idea) as a replayability
|
||||
KPI.
|
||||
|
||||
**P5 — Export OUR playable artifact (JSON + Ink + playable bundle). Size: M. Uniquely-ours: yes.**
|
||||
filmgame exports project JSON and hand-rolled `.ink`. We can export (a) our typed
|
||||
story-graph.json, (b) `.ink` (port `conditionsToInk`), AND (c) — uniquely — a
|
||||
**self-contained playable bundle** (graph + images + the deterministic player), because we
|
||||
have real runtime + images. That's an export filmgame structurally cannot match.
|
||||
|
||||
**P6 — Expand our validation engine toward their 18-rule set, but as runtime-aware checks.
|
||||
Size: M. Uniquely-ours: partial.**
|
||||
Add the high-value heuristics we lack — DEAD_END, BROKEN_LINK, UNREACHABLE (BFS),
|
||||
NO_PATH_TO_ENDING, EMOTION_MONOTONE, THIN_DIALOGUE, SHORT_DURATION, WEAK_CHOICES — and fold
|
||||
them into `reviewStoryGraph` with a weighted pass-rate score and severity grouping. Keep our
|
||||
edge: run UNREACHABLE/NO_PATH_TO_ENDING through the **condition evaluator** (variable-gated
|
||||
reachability), which is strictly stronger than filmgame's edge-only BFS. Keep IMAGE_MISSING.
|
||||
|
||||
**P7 — "Director review" AI gate, but tool-augmented. Size: S–M. Uniquely-ours: partial.**
|
||||
Add a multi-lens review pass (overall score, mustFix[], per-lens verdicts, greenlit) like
|
||||
`validate:director_review`. Going further: let our agent *act* on `mustFix[]` by calling
|
||||
`revise_node`/`connect_choice` rather than only emitting prose — closing filmgame's
|
||||
critique→fix loop automatically.
|
||||
|
||||
**P8 — Workshop craft-AI actions added to our node tools. Size: M. Uniquely-ours: partial.**
|
||||
Add scene-tension diagnosis, choice-consequence ripple mapping, and a batch two-pass
|
||||
"design all nodes then re-refine thin ones" flow. Going further: our batch pass can also
|
||||
trigger `generate_node_image` per node (filmgame can't), producing illustrated nodes in one
|
||||
sweep, and use MemoryDB voice profiles to keep dialogue voice consistent — both beyond
|
||||
filmgame's reach.
|
||||
|
||||
**P9 — `world:review` inline-fix loop on our world anchor. Size: S. Uniquely-ours: no.**
|
||||
Cheap win: a 5-dimension world critique with one-click apply, reusing our agent. Pure UX
|
||||
borrow.
|
||||
|
||||
Recommended sequencing: P1 (wizard shell) is the keystone — it gives every other proposal a
|
||||
home. Then P2 (scale) and P6 (validation) for the biggest comprehensiveness gains; P3/P5 are
|
||||
low-cost, high-differentiation because they exploit our typed-graph + runtime.
|
||||
|
||||
---
|
||||
|
||||
## 5. Could-not-verify / caveats
|
||||
|
||||
- **README vs engine count**: README says "detect eight structural issues"; `engine.ts`
|
||||
actually defines **18** codes. I trust the engine source; the README appears stale. (The "8"
|
||||
may historically refer to error+warning-level codes only — unverified.)
|
||||
- **`applyVariableEffect` location**: used in `preview/page.tsx`, parses `+x / x=5 / x-=2`. My
|
||||
`conditions.ts` read surfaced `evalConditions` + `conditionsToInk` but not the effect
|
||||
applier; it may live in `conditions.ts` (not shown) or `persistence`/preview. Existence
|
||||
confirmed via preview; exact file unconfirmed.
|
||||
- **Chinese operators**: EndingsSection placeholder shows "好感度 > 60 且 未使用暴力" but
|
||||
`conditions.ts` regex parses `&&`/`||`. Whether "且"/"或" are normalized to `&&`/`||`
|
||||
somewhere I could not confirm — possible real gap in filmgame.
|
||||
- **Not read in full** (deemed lower priority for this comparison): `lib/ai/lc-chains.ts`,
|
||||
`lc-cli-model.ts`, `lc-providers.ts`, `lg-workshop.ts`, `lib/ai/config.ts`,
|
||||
`server-config.ts`, `lib/persistence.ts`, `workshop/components/{AIPanels,NodeTreeSidebar,
|
||||
widgets}.tsx` (their behavior is summarized via the workshop page read), the `data/` sample
|
||||
projects, and root scripts (`seed-project.mjs`, `fill-all-nodes.mjs`, `run-project.mjs`,
|
||||
`test-flow.mjs`, `test_validation.py`). `@langchain/langgraph` is a dependency but
|
||||
`lg-structure.ts` does not build a graph; `lg-workshop.ts` was not read, so I cannot rule
|
||||
out a real graph there (the "no LangGraph" claim is verified only for structure).
|
||||
- Multi-backend AI (Claude CLI default / Anthropic API / OpenAI / Gemini / custom) is stated
|
||||
in README and consistent with the `@langchain/*` deps, but the provider-switching code
|
||||
(`lc-providers.ts`, `lc-cli-model.ts`) was not read line-by-line.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Flow Diagram Upgrade Report
|
||||
|
||||
## Overlap Fix
|
||||
- `story-flow-layout.ts`: COL 260→280, ROW 110→140 (node height 90px + 50px gap).
|
||||
- `FlowView.tsx` `StoryFlowNode`: fixed `width: 200, height: 90` via inline style on the wrapper div; title uses `line-clamp-2` with `maxHeight: 2.6em`; overflow hidden. Node wrapper style is never auto-sized by content now.
|
||||
|
||||
## Always-On Drag
|
||||
- `nodesDraggable={true}` unconditionally in ReactFlow props.
|
||||
- Removed `if (!editing || !graph) return;` guard from `onNodeDragStop` — now only guards on `!graph` (no graph loaded).
|
||||
- Structural mutations still gated on `editing`: `nodesConnectable`, `elementsSelectable`, `onConnect`, `onNodesDelete`, `onEdgesDelete`, `deleteKeyCode`, the "加节点" button.
|
||||
|
||||
## Path Highlight
|
||||
- `dfsForwardPath(startId, graph)` does a stack DFS forward through choices; returns `{ nodeIds: Set<string>, edgeIds: Set<string> }`.
|
||||
- `hoveredNodeId` state + `hoveredPath` memo (recomputed on hover or graph change).
|
||||
- `displayNodes` memo: on-path → `{ opacity: 1, boxShadow: "0 0 0 2px #8b5cf6" }`; off-path → `{ opacity: 0.2 }`.
|
||||
- `displayEdges` memo: on-path → `stroke #8b5cf6`, animated, strokeWidth 2.5; off-path → opacity 0.2.
|
||||
|
||||
## Edge Semantic Colors
|
||||
- Default: stroke `#9ca3af` (muted gray), strokeWidth 1.5.
|
||||
- Ending target: stroke `#f59e0b` (amber/gold).
|
||||
- Hovered path: stroke `#8b5cf6` (violet), animated, strokeWidth 2.5.
|
||||
- Off-path (when something hovered): opacity 0.2.
|
||||
- Choice label truncated to 14 chars with "…".
|
||||
|
||||
## MiniMap + Stats Bar + Legend
|
||||
- `<MiniMap>` added with `nodeColor` mapping by `nodeType` → semantic color.
|
||||
- Stats bar (`data-testid="flow-stats"`): total nodes / branch nodes (>1 choice) / ending nodes / dead-ends (non-ending, zero choices). Styled with `text-muted-foreground border-border bg-card`.
|
||||
- Legend inline in stats bar: color swatches for 默认 / 结局边 / 悬停路径.
|
||||
|
||||
## Build + Test Results
|
||||
- `pnpm build`: ✓ (client + server)
|
||||
- `pnpm test`: ✓ 422 tests, 44 files, all passed
|
||||
- `pnpm test:e2e`: ✓ 10/10 passed (flow.spec, flow-editor.spec, flow-screenshot.spec, + others)
|
||||
|
||||
## Screenshot
|
||||
- Path: `/Users/majunxian/Desktop/PyProject/inkos/.worktrees/master/flow-after.png`
|
||||
- Visual assessment: **No overlap** confirmed — all 9 nodes are fixed-size (200×90px), clearly separated, titles properly clamped within bounds. Minimap visible bottom-right with correctly colored nodes. Stats bar at top shows "总节点 9 分支 5 结局 3 死路 0" with legend. Amber edges to ending nodes visible. Layout ROW=140 + node height 90 leaves 50px gap — clean, no collision.
|
||||
|
||||
## Files Changed
|
||||
- `packages/studio/src/lib/story-flow-layout.ts` — COL/ROW bump
|
||||
- `packages/studio/src/pages/FlowView.tsx` — full upgrade
|
||||
- `packages/studio/e2e/fixtures/seed-screenshot.ts` — new: 9-node fixture for screenshot
|
||||
- `packages/studio/e2e/flow-screenshot.spec.ts` — new: screenshot e2e spec (kept as a real spec, not debug junk)
|
||||
|
||||
## Commit SHA
|
||||
`94ca547`
|
||||
@@ -0,0 +1,75 @@
|
||||
# UI Restyle Report — Interactive-Film Design Token Migration
|
||||
|
||||
## Files Changed
|
||||
|
||||
- `packages/studio/src/pages/StoryPlayer.tsx`
|
||||
- `packages/studio/src/pages/StoryGraphTree.tsx`
|
||||
- `packages/studio/src/pages/FlowView.tsx`
|
||||
- `packages/studio/src/components/chat/ToolExecutionSteps.tsx` — **no change needed** (open-story-tree was already using `bg-primary text-primary-foreground hover:opacity-90 transition-opacity`)
|
||||
|
||||
---
|
||||
|
||||
## Button Before → After
|
||||
|
||||
### StoryPlayer.tsx
|
||||
|
||||
| data-testid | Before | After |
|
||||
|---|---|---|
|
||||
| `player-start` | `bg-amber-500 text-white hover:bg-amber-400` | `${c.btnPrimary}` (keeps `px-6 py-3 rounded-lg`) |
|
||||
| `player-restart` | `bg-slate-700 text-white` | `${c.btnSecondary}` (keeps `px-5 py-2 rounded`) |
|
||||
| choice buttons (per-`choice-{id}`) | `border rounded-xl hover:bg-slate-50` | `border border-border rounded-xl hover:bg-muted/40 transition-colors` |
|
||||
|
||||
### StoryGraphTree.tsx
|
||||
|
||||
| data-testid | Before | After |
|
||||
|---|---|---|
|
||||
| `film-play` | `bg-amber-500 text-white` | `${c.btnPrimary}` (keeps `ml-auto px-3 py-1 rounded`) |
|
||||
| `open-flow` | `bg-blue-600 text-white` | `${c.btnSecondary}` (keeps `px-3 py-1 rounded`) |
|
||||
| `open-authoring` | `bg-emerald-600 text-white` | `${c.btnSecondary}` (keeps `px-3 py-1 rounded`) |
|
||||
| node type chip | `bg-slate-200` | `bg-muted text-muted-foreground` (keeps `px-1.5 py-0.5 rounded text-xs`) |
|
||||
| `film-save-{id}` | `bg-slate-700 text-white disabled:opacity-40` | `${colors.btnPrimary} disabled:opacity-40` (keeps `px-3 py-1 text-xs rounded`) |
|
||||
| `gen-image-{id}` | `bg-violet-600 text-white disabled:opacity-40` | `${colors.btnSecondary} disabled:opacity-40` (keeps `px-3 py-1 text-xs rounded`) |
|
||||
|
||||
### FlowView.tsx — TYPE_COLOR map
|
||||
|
||||
| type | Before | After |
|
||||
|---|---|---|
|
||||
| start | `bg-emerald-100 border-emerald-400` | `bg-emerald-500/15 border-emerald-500/50` |
|
||||
| branch | `bg-amber-100 border-amber-400` | `bg-amber-500/15 border-amber-500/50` |
|
||||
| ending | `bg-rose-100 border-rose-400` | `bg-rose-500/15 border-rose-500/50` |
|
||||
| merge | `bg-sky-100 border-sky-400` | `bg-sky-500/15 border-sky-500/50` |
|
||||
| explore | `bg-violet-100 border-violet-400` | `bg-violet-500/15 border-violet-500/50` |
|
||||
| normal | `bg-slate-100 border-slate-300` | `bg-muted border-border` |
|
||||
|
||||
Node label in `StoryFlowNode`: added `text-foreground` to container, added `text-xs` to the nodeType sub-label — ensures correct foreground color in dark mode.
|
||||
|
||||
### FlowView.tsx — buttons
|
||||
|
||||
| data-testid | Before | After |
|
||||
|---|---|---|
|
||||
| `flow-edit-toggle` | `ml-auto px-3 py-1 rounded border text-xs` (no bg) | `ml-auto px-3 py-1 rounded text-xs ${c.btnSecondary}` |
|
||||
| `flow-add-node` | `px-3 py-1 rounded border text-xs` (no bg) | `px-3 py-1 rounded text-xs ${c.btnSecondary}` |
|
||||
| `flow-back` | already `c.link` | unchanged |
|
||||
|
||||
---
|
||||
|
||||
## Confirmed: No testid/behavior touched
|
||||
|
||||
All `data-testid` attributes, `onClick` handlers, `disabled` logic, text labels, and component structure are unchanged. Changes are purely className string swaps.
|
||||
|
||||
---
|
||||
|
||||
## Build result
|
||||
|
||||
`cd packages/studio && pnpm build` — **passed** (23.34s, 0 errors)
|
||||
|
||||
## Test result
|
||||
|
||||
`cd packages/studio && pnpm test` — **passed** (44 test files, 422 tests, 0 failures)
|
||||
|
||||
---
|
||||
|
||||
## Commit
|
||||
|
||||
SHA: `0c230ac`
|
||||
Subject: `style(studio): use design-system tokens for interactive-film buttons (theme-consistent)`
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 490 KiB |
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 1,
|
||||
"kind": "storyboard_assets",
|
||||
"title": "午夜胶片馆",
|
||||
"projectId": "午夜胶片馆",
|
||||
"baseDir": "interactive-films/午夜胶片馆",
|
||||
"storyboardPath": "interactive-films/午夜胶片馆/storyboard.md",
|
||||
"imagePromptsPath": "interactive-films/午夜胶片馆/image-prompts.md",
|
||||
"assetsDir": "interactive-films/午夜胶片馆/assets",
|
||||
"sourceDir": "interactive-films/午夜胶片馆/assets/source",
|
||||
"generatedDir": "interactive-films/午夜胶片馆/assets/generated",
|
||||
"selectedDir": "interactive-films/午夜胶片馆/assets/selected",
|
||||
"createdAt": "2026-06-24T17:09:29.978Z",
|
||||
"assets": []
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"phase": "world",
|
||||
"rev": 1
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
| 变量名 | 类型 | 含义 | 触发方式 | 影响范围 | 对应节点 |
|
||||
|--------|------|------|----------|----------|----------|
|
||||
| `secret_type` | 枚举 | 秘密类型:`老板贪污` / `观众创伤` | 首次调查时玩家选择 | 后续所有分支选项和对话 | C-D, C-E |
|
||||
| `expose_secret` | 布尔 | 是否已公开秘密 | 关键选择(公开/隐瞒) | 场景2A/B, 结局条件 | F-G/H |
|
||||
| `help_or_use` | 枚举 | 对受损观众的态度:`帮助` / `利用` | I-J/K | 场景2C/D, 结局 | I |
|
||||
| `owner_trust` | 0-2 | 老板对主角的信任程度 | 是否销毁胶片+后续对话 | 老板在场景2A/B中的行动 | F-H, L-M |
|
||||
| `guilt_level` | 0-2 | 主角内心自责程度 | 选择隐瞒/利用的次数 | 结局门槛(高愧疚→易选坦白) | H, K, P, S |
|
||||
| `film_intact` | 布尔 | 关键胶片是否完好 | 销毁胶片或意外损毁 | 能否作为证据,结局解锁 | H, K, O |
|
||||
| `audience_thanks` | 布尔 | 受灾观众是否感激 | 选择帮助 | 结局B好感分支 | J, N |
|
||||
| `evidence_chain` | 整数 | 玩家收集的证据链长度 | 调查过程中主动选择 | 结局A强度(高→完美正义) | L, P, W |
|
||||
| `crisis_flag` | 布尔 | 是否引发更大秘密失控 | 利用+胶片损毁+泄露 | 结局C | O, Y, Z |
|
||||
|
||||
**自然语言说明**:所有变量均为剧情服务,无战斗数值。`expose_secret` 决定大方向,`guilt_level` 影响角色内心旁白和最终抉择倾向。
|
||||
|
||||
---
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# 午夜胶片馆 互动影游创作规格
|
||||
|
||||
## 目标
|
||||
- 交付类型:互动影游 / 互动叙事类游戏 / 影游剧本
|
||||
- 剧情段落/集数:3
|
||||
- 单段/单集时长:未指定
|
||||
- 预算约束:未指定
|
||||
- 目标受众:未指定
|
||||
- 参考模式:用户未指定,不擅自套固定游戏模板
|
||||
- 原素材:原创想法
|
||||
|
||||
## 用户要求
|
||||
用户要求制作互动影游《午夜胶片馆》,核心设定为午夜旧电影院里放映员发现胶片会记录观众没说出口的秘密。规格如下:3段/集、2个主要分支、至少2个结局、包含变量旗标系统、需要互动剧本+分镜+图片提示词。目前素材为一段原创想法,尚未提供完整原文。需在确认后启动完整交付稿制作。
|
||||
|
||||
补充要求:
|
||||
2个主要分支、至少2个结局、包含变量/旗标系统、需要互动剧本、分镜图及图片提示词
|
||||
|
||||
## 互动影游边界
|
||||
- 这是创作交付稿,不是硬数值 RPG 引擎设计;变量、旗标、关系和结局条件必须服务剧情分支。
|
||||
- 必须包含多分支剧情、玩家关键选择、变量/旗标如何改变后续剧情,以及多结局达成条件。
|
||||
- 变量系统用自然语言说明即可:状态、关系、隐瞒/公开、证据、物品、身份、好感/信任等;不要强行套固定数值或装备等级。
|
||||
- 交付要适配影游/互动剧制作:剧情树清晰、节点可拍、对白可演、分镜可画、图片提示词可用于资产生成。
|
||||
- 不替用户擅自决定题材、预算、画风和商业强化强度;未指定处写为可调整。
|
||||
|
||||
## 源素材摘要
|
||||
已提供完整源素材,约 28 字符;生成时会读取完整内容。
|
||||
@@ -0,0 +1,116 @@
|
||||
### 场景1:午夜秘密(第一段)
|
||||
|
||||
**1-01 放映厅·深夜**
|
||||
人物:放映员 林远(主角,30岁,细致敏感),观众甲(中年男子,独坐后排)
|
||||
道具:老式胶片放映机,胶片盒,手电筒
|
||||
|
||||
动作:林远正在检查今晚放映的旧片《时光倒流七十年》,突然发现一卷没有标签的胶片。他好奇装上试放。
|
||||
画外音(林远内心):这卷胶片……从没见过。上面还贴着“1957”的手写标。
|
||||
放映机转动,银幕上闪过模糊画面:一个中年男子(观众甲)在老旧办公室里数钱,表情紧张。
|
||||
林远诧异回头,观众甲正坐在角落里,但银幕上的画面却是观众甲从未展露过的表情。
|
||||
|
||||
**玩家选择(关键分支1)**:
|
||||
- **A. 调查秘密来源**
|
||||
林远:(低声)这胶片记录的是……他心里藏着的事?我去查查档案室,看看这卷是哪位观众寄存的。
|
||||
→ 触发 `secret_type` 判定:档案显示属“老板私占捐款” → 进入 D 分支
|
||||
- **B. 直接找到观众甲问话**
|
||||
林远:(走过去,轻声)先生,您刚才……有什么心事吗?
|
||||
观众甲一愣:没、没什么……
|
||||
林远注意到观众甲的手在发抖。
|
||||
→ 触发 `secret_type` 判定:观众甲眼神闪躲,提到“战争的事” → 进入 E 分支
|
||||
|
||||
**变量变化**:
|
||||
- 选择A:`evidence_chain +1`(档案室记录)
|
||||
- 选择B:`guilt_level +0`(尚未涉及道德困境)
|
||||
|
||||
**1-02 档案室(仅选择A时)**
|
||||
林远翻找旧登记簿,发现1957年那卷胶片标注“张老板寄存——捐款账目”。
|
||||
林远脑中闪现观众甲数钱的画面……原来观众甲就是当年会计,老板私吞了孤儿院捐款。
|
||||
→ 进入节点 D,提供玩家关于老板罪证的信息
|
||||
|
||||
**1-03 放映厅外走廊(仅选择B时)**
|
||||
观众甲坦白:我以前是军人,那部老纪录片让我想起战友的死。我一直没敢对人说。
|
||||
林远从胶片中看到观众甲在战壕里无助哭泣的画面。
|
||||
→ 进入节点 E,触发帮助/利用选择
|
||||
|
||||
**核心选择(关键分支2)**
|
||||
- 在 D 节点(老板贪污线):
|
||||
**F-1 公开秘密**:林远决定报警,保存好胶片作为证据。
|
||||
变量:`expose_secret = true`,`film_intact = true`
|
||||
**F-2 隐瞒秘密**:林远销毁胶片,警告老板停止。
|
||||
变量:`expose_secret = false`,`film_intact = false`,`owner_trust +1`
|
||||
|
||||
- 在 E 节点(观众创伤线):
|
||||
**I-1 帮助他**:林远安慰观众,劝他参加互助小组。
|
||||
变量:`help_or_use = help`,`audience_thanks = true`,`guilt_level +0`
|
||||
**I-2 利用他**:林远说“我可以让这部胶片消失,但你得帮我一个忙。”
|
||||
变量:`help_or_use = use`,`guilt_level +1`,`film_intact = false`(为了保密销毁胶片)
|
||||
|
||||
---
|
||||
|
||||
### 场景2:抉择余波(第二段)
|
||||
|
||||
根据上一段选择,进入不同子场景。以下列出两条主要路径示例。
|
||||
|
||||
#### 路径A:公开老板贪污线(expose_secret = true)
|
||||
|
||||
**2-A 影院办公室·白天**
|
||||
人物:林远,张老板(50岁,伪善商人),刑警(女)
|
||||
林远将胶片证据交给刑警,张老板面如死灰。
|
||||
刑警:我们会调查,但请林先生配合,暂时不能透露媒体。
|
||||
张老板临走时恶狠狠看向林远:“你会后悔的。”
|
||||
|
||||
**玩家选择(场景2关键)**:
|
||||
- **P. 坚持正义,继续收集证据**
|
||||
林远决定私下采访当年的孤儿院管理人员。
|
||||
变量:`evidence_chain +1`,`owner_trust -1`(老板恨意更深)
|
||||
- **R. 感到害怕,想逃跑**
|
||||
林远:我只是个放映员,不想被报复……我今天就辞职。
|
||||
变量:`guilt_level +1`,`crisis_flag = true`(老板会趁机销毁其他证据)
|
||||
|
||||
**2-B 街道·夜晚(坚持正义路线)**
|
||||
林远约见前孤儿院会计,拿到更多账本复印件。突然身后有脚步声,张老板的打手出现。
|
||||
动作戏:追逐,林远侥幸逃脱,但被划伤手臂。
|
||||
→ 节点 P 结束后进入结局判定:若 `evidence_chain ≥ 2` 且 `film_intact = true` → 结局A
|
||||
|
||||
#### 路径B:隐瞒并利用观众线(help_or_use = use)
|
||||
|
||||
**2-C 观众甲住所**
|
||||
林远提出条件:你帮我在影院值班时偷老板的保险柜记录,我就不把胶片流传出去。
|
||||
观众甲犹豫,点头。
|
||||
但当晚观众甲偷记录时触发报警器,被老板抓现行。
|
||||
老板发现林远也在背后,发怒:“你们两个都完了!”
|
||||
林远慌忙销毁手中的剩余胶片(`film_intact = false`),但老板已经拍了照片。
|
||||
|
||||
**玩家选择**:
|
||||
- **Y. 威胁老板公开一切**(破罐破摔)
|
||||
→ `crisis_flag = true`,秘密扩散至媒体,但证据不足 → 结局C
|
||||
- **Z. 服软求饶**
|
||||
→ 阻止扩散,老板把胶片碎片扔掉,但林远和观众甲都被开除 → 结局B(扭曲版,心情愧疚)
|
||||
|
||||
---
|
||||
|
||||
### 场景3:结局(第三段)
|
||||
|
||||
根据变量自动触发终章,每段包含独白和画面。此处仅展示结局A和B的剧本节选。
|
||||
|
||||
#### 结局A:真相之光(expose_secret = true & evidence_chain ≥ 2)
|
||||
|
||||
**3-A 法庭外·黄昏**
|
||||
林远作为证人出庭,张老板被判贪污罪。孤儿院获得赔偿。
|
||||
观众甲(如果是观众创伤线)也来旁听,对林远点头致谢。
|
||||
林远内心独白:胶片记录的,是人心最不愿面对的真实。而我选择了让它见光。
|
||||
画面:影院重新开业,林远被聘为荣誉顾问,但不再当放映员。
|
||||
最后一幕:他站在放映室,看着新的胶片放映机,默默微笑。
|
||||
**结束**
|
||||
|
||||
#### 结局B:秘密之影(expose_secret = false & guilt_level ≤ 1)
|
||||
|
||||
**3-B 影院放映室·凌晨**
|
||||
林远默默将销毁的胶片碎片扫进垃圾桶。老板拍拍他肩:“你懂事,以后升你当主管。”
|
||||
林远苦笑,耳边回响观众甲那天的话:“有些事,烂在肚子里才是最好的。”
|
||||
画面:他继续放映《时光倒流七十年》,但银幕上只看到自己孤独的影子。
|
||||
内心独白:我保全了所有人的体面,却弄丢了自己的光。
|
||||
**结束**
|
||||
|
||||
---
|
||||
@@ -0,0 +1,512 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"projectId": "午夜胶片馆",
|
||||
"title": "午夜胶片馆",
|
||||
"characters": [],
|
||||
"variables": [
|
||||
{
|
||||
"name": "secret_type",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "秘密类型:0未定,1老板贪污,2观众创伤"
|
||||
},
|
||||
{
|
||||
"name": "expose_secret",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "是否公开秘密:0否,1是"
|
||||
},
|
||||
{
|
||||
"name": "help_or_use",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "帮助或利用:0未定,1帮助,2利用"
|
||||
},
|
||||
{
|
||||
"name": "owner_trust",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "老板信任度0-2"
|
||||
},
|
||||
{
|
||||
"name": "guilt_level",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "内疚程度0-2"
|
||||
},
|
||||
{
|
||||
"name": "film_intact",
|
||||
"type": "counter",
|
||||
"default": 1,
|
||||
"desc": "胶片是否完好:0损坏,1完好"
|
||||
},
|
||||
{
|
||||
"name": "audience_thanks",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "观众是否感激:0否,1是"
|
||||
},
|
||||
{
|
||||
"name": "evidence_chain",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "证据链长度"
|
||||
},
|
||||
{
|
||||
"name": "crisis_flag",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "是否引发更大秘密失控:0否,1是"
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "node1",
|
||||
"title": "发现异常胶片",
|
||||
"type": "start",
|
||||
"sceneDesc": "午夜电影院放映厅内,放映员林远检查旧胶片时发现一卷无标签的胶片,好奇播放后看到观众甲的秘密。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "这卷胶片……从没见过。上面还贴着“1957”的手写标。",
|
||||
"emotion": "好奇"
|
||||
},
|
||||
{
|
||||
"speaker": "观众甲",
|
||||
"text": "(独坐后排,神情紧张)",
|
||||
"emotion": "紧张"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c1a",
|
||||
"text": "调查秘密来源:去档案室查看胶片记录",
|
||||
"targetNodeId": "node2",
|
||||
"effects": [
|
||||
{
|
||||
"var": "secret_type",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c1b",
|
||||
"text": "直接找观众甲问话",
|
||||
"targetNodeId": "node3",
|
||||
"effects": [
|
||||
{
|
||||
"var": "secret_type",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node2",
|
||||
"title": "调查秘密来源",
|
||||
"type": "branch",
|
||||
"sceneDesc": "林远在档案室找到1957年的登记簿,发现胶片是张老板寄存的捐款账目,画面显示观众甲在数钱——原来老板私吞了孤儿院捐款。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "这卷胶片记录的是……老板的罪证。观众甲就是当年的会计。",
|
||||
"emotion": "震惊"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c2a",
|
||||
"text": "公开秘密:保存胶片作为证据报警",
|
||||
"targetNodeId": "node4",
|
||||
"effects": [
|
||||
{
|
||||
"var": "expose_secret",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "film_intact",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c2b",
|
||||
"text": "隐瞒秘密:销毁胶片并警告老板",
|
||||
"targetNodeId": "node5",
|
||||
"effects": [
|
||||
{
|
||||
"var": "expose_secret",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"var": "film_intact",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"var": "owner_trust",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node3",
|
||||
"title": "直接问话观众",
|
||||
"type": "branch",
|
||||
"sceneDesc": "林远在走廊询问观众甲,观众甲坦白曾参加战争,胶片记录了他未说出的创伤回忆。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "观众甲",
|
||||
"text": "我以前是军人……那部老纪录片让我想起战友的死。我从没对人说过。",
|
||||
"emotion": "悲伤"
|
||||
},
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "我看到你在战壕里哭泣的画面……",
|
||||
"emotion": "同情"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c3a",
|
||||
"text": "帮助他:安慰并建议参加互助小组",
|
||||
"targetNodeId": "node6",
|
||||
"effects": [
|
||||
{
|
||||
"var": "help_or_use",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "audience_thanks",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c3b",
|
||||
"text": "利用他:以胶片保密为条件要求他帮忙",
|
||||
"targetNodeId": "node7",
|
||||
"effects": [
|
||||
{
|
||||
"var": "help_or_use",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"var": "film_intact",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node4",
|
||||
"title": "公开秘密后的余波",
|
||||
"type": "normal",
|
||||
"sceneDesc": "林远将证据交给警方,张老板被调查,但威胁林远。林远面临选择:坚持正义还是退缩。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "刑警",
|
||||
"text": "我们会调查,但请林先生暂时保密。",
|
||||
"emotion": "严肃"
|
||||
},
|
||||
{
|
||||
"speaker": "张老板",
|
||||
"text": "你会后悔的。",
|
||||
"emotion": "愤怒"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c4a",
|
||||
"text": "坚持正义:继续收集更多证据",
|
||||
"targetNodeId": "endA",
|
||||
"effects": [
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "owner_trust",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c4b",
|
||||
"text": "害怕逃跑:辞职离开影院",
|
||||
"targetNodeId": "endC",
|
||||
"effects": [
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "crisis_flag",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node5",
|
||||
"title": "隐瞒秘密后的煎熬",
|
||||
"type": "normal",
|
||||
"sceneDesc": "林远销毁胶片,老板感谢他并承诺升职,但林远内心不安。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "张老板",
|
||||
"text": "你懂事,以后升你当主管。",
|
||||
"emotion": "满意"
|
||||
},
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "我保全了老板,但良心不安……",
|
||||
"emotion": "矛盾"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c5a",
|
||||
"text": "主动坦白:向警方说明真相",
|
||||
"targetNodeId": "endA",
|
||||
"effects": [
|
||||
{
|
||||
"var": "expose_secret",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c5b",
|
||||
"text": "继续隐瞒:接受升职,保持沉默",
|
||||
"targetNodeId": "endB",
|
||||
"effects": [
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node6",
|
||||
"title": "帮助观众后的进展",
|
||||
"type": "normal",
|
||||
"sceneDesc": "观众甲感激林远的帮助,并透露还有更多秘密胶片藏在影院暗室。林远面临是否继续调查的选择。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "观众甲",
|
||||
"text": "谢谢你……其实影院里还有其他秘密胶片,牵扯到更大的阴谋。",
|
||||
"emotion": "感激"
|
||||
},
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "什么秘密?",
|
||||
"emotion": "好奇"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c6a",
|
||||
"text": "继续调查:深入挖掘更大阴谋",
|
||||
"targetNodeId": "endA",
|
||||
"effects": [
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"var": "audience_thanks",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c6b",
|
||||
"text": "停止调查:就此收手,回归平静",
|
||||
"targetNodeId": "endB",
|
||||
"effects": [
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node7",
|
||||
"title": "利用观众后的失控",
|
||||
"type": "normal",
|
||||
"sceneDesc": "林远利用观众甲去偷老板保险柜记录,但触发警报,老板发现后大怒。胶片被毁但秘密已泄露。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "张老板",
|
||||
"text": "你们两个都完了!",
|
||||
"emotion": "暴怒"
|
||||
},
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "(慌忙销毁剩余胶片)",
|
||||
"emotion": "恐惧"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c7a",
|
||||
"text": "威胁公开一切:破罐破摔",
|
||||
"targetNodeId": "endC",
|
||||
"effects": [
|
||||
{
|
||||
"var": "crisis_flag",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c7b",
|
||||
"text": "服软求饶:恳求老板放过",
|
||||
"targetNodeId": "endB",
|
||||
"effects": [
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"var": "audience_thanks",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "endA",
|
||||
"title": "真相之光",
|
||||
"type": "ending",
|
||||
"sceneDesc": "法庭外黄昏,张老板被判刑,孤儿院获赔偿。林远虽失去放映员工作,但成为荣誉顾问,内心坦然。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "胶片记录的,是人心最不愿面对的真实。而我选择了让它见光。",
|
||||
"emotion": "释然"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "endB",
|
||||
"title": "秘密之影",
|
||||
"type": "ending",
|
||||
"sceneDesc": "影院放映室凌晨,林远将胶片碎片扫入垃圾桶,老板升他为主管。他继续放映老电影,但银幕上只看到自己孤独的影子。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "我保全了所有人的体面,却弄丢了自己的光。",
|
||||
"emotion": "悲伤"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "endC",
|
||||
"title": "阴影独行",
|
||||
"type": "ending",
|
||||
"sceneDesc": "秘密失控,媒体曝光但证据不足,林远被迫离开城市,陷入更深的黑暗。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "有些秘密,永远不该被唤醒……",
|
||||
"emotion": "绝望"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
}
|
||||
],
|
||||
"endings": [
|
||||
{
|
||||
"id": "endingA",
|
||||
"nodeId": "endA",
|
||||
"title": "真相之光",
|
||||
"type": "good",
|
||||
"description": "正义公开,主角失去影院工作但获社会认可,内心平静。"
|
||||
},
|
||||
{
|
||||
"id": "endingB",
|
||||
"nodeId": "endB",
|
||||
"title": "秘密之影",
|
||||
"type": "neutral",
|
||||
"description": "秘密埋藏,主角留下终生愧疚,影院继续运营。"
|
||||
},
|
||||
{
|
||||
"id": "endingC",
|
||||
"nodeId": "endC",
|
||||
"title": "阴影独行",
|
||||
"type": "bad",
|
||||
"description": "主角被迫离开,或秘密失控导致更大灾难。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": "completed",
|
||||
"kind": "interactive_film",
|
||||
"title": "午夜胶片馆",
|
||||
"completedAt": "2026-06-24T17:10:30.433Z"
|
||||
}
|
||||
@@ -0,0 +1,516 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"projectId": "午夜胶片馆",
|
||||
"title": "午夜胶片馆",
|
||||
"characters": [],
|
||||
"variables": [
|
||||
{
|
||||
"name": "secret_type",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "秘密类型:0未定,1老板贪污,2观众创伤"
|
||||
},
|
||||
{
|
||||
"name": "expose_secret",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "是否公开秘密:0否,1是"
|
||||
},
|
||||
{
|
||||
"name": "help_or_use",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "帮助或利用:0未定,1帮助,2利用"
|
||||
},
|
||||
{
|
||||
"name": "owner_trust",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "老板信任度0-2"
|
||||
},
|
||||
{
|
||||
"name": "guilt_level",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "内疚程度0-2"
|
||||
},
|
||||
{
|
||||
"name": "film_intact",
|
||||
"type": "counter",
|
||||
"default": 1,
|
||||
"desc": "胶片是否完好:0损坏,1完好"
|
||||
},
|
||||
{
|
||||
"name": "audience_thanks",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "观众是否感激:0否,1是"
|
||||
},
|
||||
{
|
||||
"name": "evidence_chain",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "证据链长度"
|
||||
},
|
||||
{
|
||||
"name": "crisis_flag",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "是否引发更大秘密失控:0否,1是"
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "node1",
|
||||
"title": "发现异常胶片",
|
||||
"type": "start",
|
||||
"sceneDesc": "午夜电影院放映厅内,放映员林远检查旧胶片时发现一卷无标签的胶片,好奇播放后看到观众甲的秘密。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "这卷胶片……从没见过。上面还贴着“1957”的手写标。",
|
||||
"emotion": "好奇"
|
||||
},
|
||||
{
|
||||
"speaker": "观众甲",
|
||||
"text": "(独坐后排,神情紧张)",
|
||||
"emotion": "紧张"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c1a",
|
||||
"text": "调查秘密来源:去档案室查看胶片记录",
|
||||
"targetNodeId": "node2",
|
||||
"effects": [
|
||||
{
|
||||
"var": "secret_type",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c1b",
|
||||
"text": "直接找观众甲问话",
|
||||
"targetNodeId": "node3",
|
||||
"effects": [
|
||||
{
|
||||
"var": "secret_type",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": "",
|
||||
"position": {
|
||||
"x": 27,
|
||||
"y": 133
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "node2",
|
||||
"title": "调查秘密来源",
|
||||
"type": "branch",
|
||||
"sceneDesc": "林远在档案室找到1957年的登记簿,发现胶片是张老板寄存的捐款账目,画面显示观众甲在数钱——原来老板私吞了孤儿院捐款。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "这卷胶片记录的是……老板的罪证。观众甲就是当年的会计。",
|
||||
"emotion": "震惊"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c2a",
|
||||
"text": "公开秘密:保存胶片作为证据报警",
|
||||
"targetNodeId": "node4",
|
||||
"effects": [
|
||||
{
|
||||
"var": "expose_secret",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "film_intact",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c2b",
|
||||
"text": "隐瞒秘密:销毁胶片并警告老板",
|
||||
"targetNodeId": "node5",
|
||||
"effects": [
|
||||
{
|
||||
"var": "expose_secret",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"var": "film_intact",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"var": "owner_trust",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node3",
|
||||
"title": "直接问话观众",
|
||||
"type": "branch",
|
||||
"sceneDesc": "林远在走廊询问观众甲,观众甲坦白曾参加战争,胶片记录了他未说出的创伤回忆。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "观众甲",
|
||||
"text": "我以前是军人……那部老纪录片让我想起战友的死。我从没对人说过。",
|
||||
"emotion": "悲伤"
|
||||
},
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "我看到你在战壕里哭泣的画面……",
|
||||
"emotion": "同情"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c3a",
|
||||
"text": "帮助他:安慰并建议参加互助小组",
|
||||
"targetNodeId": "node6",
|
||||
"effects": [
|
||||
{
|
||||
"var": "help_or_use",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "audience_thanks",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c3b",
|
||||
"text": "利用他:以胶片保密为条件要求他帮忙",
|
||||
"targetNodeId": "node7",
|
||||
"effects": [
|
||||
{
|
||||
"var": "help_or_use",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"var": "film_intact",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node4",
|
||||
"title": "公开秘密后的余波",
|
||||
"type": "normal",
|
||||
"sceneDesc": "林远将证据交给警方,张老板被调查,但威胁林远。林远面临选择:坚持正义还是退缩。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "刑警",
|
||||
"text": "我们会调查,但请林先生暂时保密。",
|
||||
"emotion": "严肃"
|
||||
},
|
||||
{
|
||||
"speaker": "张老板",
|
||||
"text": "你会后悔的。",
|
||||
"emotion": "愤怒"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c4a",
|
||||
"text": "坚持正义:继续收集更多证据",
|
||||
"targetNodeId": "endA",
|
||||
"effects": [
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "owner_trust",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c4b",
|
||||
"text": "害怕逃跑:辞职离开影院",
|
||||
"targetNodeId": "endC",
|
||||
"effects": [
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "crisis_flag",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node5",
|
||||
"title": "隐瞒秘密后的煎熬",
|
||||
"type": "normal",
|
||||
"sceneDesc": "林远销毁胶片,老板感谢他并承诺升职,但林远内心不安。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "张老板",
|
||||
"text": "你懂事,以后升你当主管。",
|
||||
"emotion": "满意"
|
||||
},
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "我保全了老板,但良心不安……",
|
||||
"emotion": "矛盾"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c5a",
|
||||
"text": "主动坦白:向警方说明真相",
|
||||
"targetNodeId": "endA",
|
||||
"effects": [
|
||||
{
|
||||
"var": "expose_secret",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c5b",
|
||||
"text": "继续隐瞒:接受升职,保持沉默",
|
||||
"targetNodeId": "endB",
|
||||
"effects": [
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node6",
|
||||
"title": "帮助观众后的进展",
|
||||
"type": "normal",
|
||||
"sceneDesc": "观众甲感激林远的帮助,并透露还有更多秘密胶片藏在影院暗室。林远面临是否继续调查的选择。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "观众甲",
|
||||
"text": "谢谢你……其实影院里还有其他秘密胶片,牵扯到更大的阴谋。",
|
||||
"emotion": "感激"
|
||||
},
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "什么秘密?",
|
||||
"emotion": "好奇"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c6a",
|
||||
"text": "继续调查:深入挖掘更大阴谋",
|
||||
"targetNodeId": "endA",
|
||||
"effects": [
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"var": "audience_thanks",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c6b",
|
||||
"text": "停止调查:就此收手,回归平静",
|
||||
"targetNodeId": "endB",
|
||||
"effects": [
|
||||
{
|
||||
"var": "evidence_chain",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "node7",
|
||||
"title": "利用观众后的失控",
|
||||
"type": "normal",
|
||||
"sceneDesc": "林远利用观众甲去偷老板保险柜记录,但触发警报,老板发现后大怒。胶片被毁但秘密已泄露。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "张老板",
|
||||
"text": "你们两个都完了!",
|
||||
"emotion": "暴怒"
|
||||
},
|
||||
{
|
||||
"speaker": "林远",
|
||||
"text": "(慌忙销毁剩余胶片)",
|
||||
"emotion": "恐惧"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "c7a",
|
||||
"text": "威胁公开一切:破罐破摔",
|
||||
"targetNodeId": "endC",
|
||||
"effects": [
|
||||
{
|
||||
"var": "crisis_flag",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c7b",
|
||||
"text": "服软求饶:恳求老板放过",
|
||||
"targetNodeId": "endB",
|
||||
"effects": [
|
||||
{
|
||||
"var": "guilt_level",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"var": "audience_thanks",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "endA",
|
||||
"title": "真相之光",
|
||||
"type": "ending",
|
||||
"sceneDesc": "法庭外黄昏,张老板被判刑,孤儿院获赔偿。林远虽失去放映员工作,但成为荣誉顾问,内心坦然。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "胶片记录的,是人心最不愿面对的真实。而我选择了让它见光。",
|
||||
"emotion": "释然"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "endB",
|
||||
"title": "秘密之影",
|
||||
"type": "ending",
|
||||
"sceneDesc": "影院放映室凌晨,林远将胶片碎片扫入垃圾桶,老板升他为主管。他继续放映老电影,但银幕上只看到自己孤独的影子。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "我保全了所有人的体面,却弄丢了自己的光。",
|
||||
"emotion": "悲伤"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "endC",
|
||||
"title": "阴影独行",
|
||||
"type": "ending",
|
||||
"sceneDesc": "秘密失控,媒体曝光但证据不足,林远被迫离开城市,陷入更深的黑暗。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "林远(内心)",
|
||||
"text": "有些秘密,永远不该被唤醒……",
|
||||
"emotion": "绝望"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
}
|
||||
],
|
||||
"endings": [
|
||||
{
|
||||
"id": "endingA",
|
||||
"nodeId": "endA",
|
||||
"title": "真相之光",
|
||||
"type": "good",
|
||||
"description": "正义公开,主角失去影院工作但获社会认可,内心平静。"
|
||||
},
|
||||
{
|
||||
"id": "endingB",
|
||||
"nodeId": "endB",
|
||||
"title": "秘密之影",
|
||||
"type": "neutral",
|
||||
"description": "秘密埋藏,主角留下终生愧疚,影院继续运营。"
|
||||
},
|
||||
{
|
||||
"id": "endingC",
|
||||
"nodeId": "endC",
|
||||
"title": "阴影独行",
|
||||
"type": "bad",
|
||||
"description": "主角被迫离开,或秘密失控导致更大灾难。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开场:放映员在午夜影院发现异常胶片] --> B{播放胶片后看到观众秘密}
|
||||
B --> C[调查秘密来源:是近期观众还是旧胶片?]
|
||||
C --> D[发现秘密与影院老板有关(私吞捐款)]
|
||||
C --> E[发现秘密与某位常客的伤痛有关(战争创伤)]
|
||||
D --> F{关键选择:公开秘密还是隐瞒?}
|
||||
F --> G[选择“公开”:将胶片证据交给警方]
|
||||
F --> H[选择“隐瞒”:销毁胶片并警告老板]
|
||||
E --> I{关键选择:帮助受伤观众还是利用秘密?}
|
||||
I --> J[选择“帮助”:私下安慰观众,劝其面对]
|
||||
I --> K[选择“利用”:用秘密要挟观众帮忙]
|
||||
G --> L[场景2A:警方调查,老板报复,主角陷入险境]
|
||||
H --> M[场景2B:老板感激但暗中监视,主角良心煎熬]
|
||||
J --> N[场景2C:观众感谢,主角发现更多秘密胶片]
|
||||
K --> O[场景2D:观众恐惧,秘密失控,胶片损毁]
|
||||
L --> P{最后抉择:坚持正义还是妥协?}
|
||||
P --> Q[坚持正义 → 结局A:真相之光]
|
||||
P --> R[妥协逃跑 → 结局C:阴影独行]
|
||||
M --> S{能否承受良心谴责?}
|
||||
S --> T[主动坦白 → 结局A(不同路径)]
|
||||
S --> U[继续隐瞒 → 结局B:秘密之影]
|
||||
N --> V{更多秘密指向更大的阴谋?}
|
||||
V --> W[继续调查 → 结局A(加强版)]
|
||||
V --> X[停止调查 → 结局B(平和版)]
|
||||
O --> Y{胶片损毁后秘密仍被泄露?}
|
||||
Y --> Z[秘密扩散 → 结局C:连锁崩塌]
|
||||
Y --> AA[无人相信 → 结局B(扭曲版)]
|
||||
Q & T & W --> END_A[结局A:真相之光<br>正义公开,主角失去影院工作但获社会认可]
|
||||
U & X & AA --> END_B[结局B:秘密之影<br>秘密埋藏,主角留下终生愧疚,影院继续运营]
|
||||
R & Z --> END_C[结局C:阴影独行 / 连锁崩塌<br>主角被迫离开,或秘密失控导致更大灾难]
|
||||
```
|
||||
|
||||
**说明**:主线由两段首关键选择(公开/隐瞒、帮助/利用)产生**2个主要分支**,最终通往**3个结局**(至少2个,实际3个)。每段剧情自然分为三节:发现秘密、处理秘密、结局收束。
|
||||
|
||||
---
|
||||
@@ -0,0 +1,53 @@
|
||||
### 关键镜头列表(按剧情顺序)
|
||||
|
||||
**镜头1:影院银幕幻象**
|
||||
画面:老旧电影院内,银幕上出现模糊的黑白影像——一个中年男子在数钱,表情慌张。放映机光线投射在观众席上,观众甲正坐在阴影中。
|
||||
景别:中景,斜侧角度
|
||||
时长:6秒
|
||||
`Prompt: A vintage movie theater with red seats, a projector beam cutting through dust-filled air. On the screen fuzzy black-and-white footage of a middle-aged man counting cash nervously. In the foreground a lone audience member sitting in shadow. Cinematic lighting, film grain texture, 1970s aesthetic.`
|
||||
|
||||
**镜头2:档案室老登记簿**
|
||||
画面:林远用小手电照亮泛黄的登记簿,指尖划过“1957 张老板 捐款账目”字样,旁边贴着一卷胶片的标签。
|
||||
景别:特写(手与簿册)
|
||||
时长:3秒
|
||||
`Prompt: Close-up of a hand turning yellowed pages of a registration book, light from a small flashlight illuminating the text "1957 Boss Zhang Donation Ledger". A film canister nearby with hand-written label. Dust motes floating, warm tungsten light.`
|
||||
|
||||
**镜头3:走廊坦白**
|
||||
画面:影院走廊,观众甲低着头,手指颤抖,林远站在对面,光线从身后窗户照进来,拉长影子。
|
||||
景别:过肩镜头
|
||||
时长:5秒
|
||||
`Prompt: Two men in a dim corridor of an old cinema. The older man in a coat looks down nervously, hands shaking. The younger man stands opposite, backlit by a window with moonlight. Film noir composition, high contrast, deep shadows.`
|
||||
|
||||
**镜头4:选择公开——递出胶片证据**
|
||||
画面:林远将胶片盒递给女刑警,刑警表情严肃,张老板在背景中瞪视。
|
||||
景别:近景
|
||||
时长:4秒
|
||||
`Prompt: A man handing a film canister to a female police officer in a daytime office. Another older man in suit glares from the background. Tense atmosphere, realistic lighting, dramatic framing.`
|
||||
|
||||
**镜头5:追逐逃脱**
|
||||
画面:深夜街道,林远抱着文件奔跑,身后两个黑衣人追赶,路灯闪烁。
|
||||
景别:运动中的中全景
|
||||
时长:6秒
|
||||
`Prompt: Night street chase, a man clutching files runs under flickering streetlamps, two pursuers in dark coats behind him. Rain-slicked pavement, cinematic motion blur, 1980s thriller aesthetic.`
|
||||
|
||||
**镜头6:告别放映室(结局A)**
|
||||
画面:林远站在空无一人的放映室,手抚新放映机,窗外晨曦微光。
|
||||
景别:中景,逆光
|
||||
时长:5秒
|
||||
`Prompt: A man in a film projection room at dawn, touching a new film projector. Golden morning light streams through dusty windows. Quiet atmosphere, nostalgic mood, soft focus on foreground.`
|
||||
|
||||
**镜头7:孤独影子(结局B)**
|
||||
画面:林远坐在观众席最后一排,银幕上黑白影片无人观看,他独自低头。
|
||||
景别:大全景
|
||||
时长:7秒
|
||||
`Prompt: Empty cinema auditorium, only one man sitting in the back row. The screen shows a black-and-white movie, but his head is down. Solitary atmosphere, cold blue lighting from screen, wide shot emphasizing loneliness.`
|
||||
|
||||
**镜头8:连锁崩塌(结局C)**
|
||||
画面:报纸头版标题“影院贪污丑闻引爆全民抗议”,林远拖着行李箱走过影院门口,招牌被摘。
|
||||
景别:全景
|
||||
时长:5秒
|
||||
`Prompt: A newspaper headline in extreme close-up revealing "Cinema Embezzlement Scandal Sparks Nationwide Protest". Then cut to a man with suitcase walking past the cinema entrance while workers remove the sign. Dim overcast day, chaotic background.`
|
||||
|
||||
---
|
||||
|
||||
**说明**:以上五个小节完整覆盖了用户要求(剧情树、变量表、多结局路径、互动剧本、分镜提示词),共3段剧情,2个主要分支(公开/隐瞒、帮助/利用),3个结局。所有变量和旗标仅用于推动剧情和结局分歧,无RPG数值。图片提示词可直接用于资产生成。
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 1,
|
||||
"kind": "storyboard_assets",
|
||||
"title": "回声剧场",
|
||||
"projectId": "回声剧场",
|
||||
"baseDir": "interactive-films/回声剧场",
|
||||
"storyboardPath": "interactive-films/回声剧场/storyboard.md",
|
||||
"imagePromptsPath": "interactive-films/回声剧场/image-prompts.md",
|
||||
"assetsDir": "interactive-films/回声剧场/assets",
|
||||
"sourceDir": "interactive-films/回声剧场/assets/source",
|
||||
"generatedDir": "interactive-films/回声剧场/assets/generated",
|
||||
"selectedDir": "interactive-films/回声剧场/assets/selected",
|
||||
"createdAt": "2026-06-24T15:59:12.545Z",
|
||||
"assets": []
|
||||
}
|
||||
@@ -0,0 +1,356 @@
|
||||
# 回声剧场 互动影游方案
|
||||
|
||||
## 1. 项目简介 & 核心卖点
|
||||
|
||||
### 项目名称
|
||||
**回声剧场**
|
||||
|
||||
### 项目类型
|
||||
互动影游 / 交互叙事剧(6幕结构,3个最终结局)
|
||||
|
||||
### 目标受众
|
||||
悬疑推理爱好者、心理惊悚观众(20–45岁,偏好冷峻写实风格)
|
||||
|
||||
### 预算定位
|
||||
中低成本互动剧,以室内场景、双人对手戏为主,可搭配少量外景和回忆闪回。可适配真人实拍或高质量预渲染数字演员。
|
||||
|
||||
### 核心卖点
|
||||
- **心理博弈双线叙事**:表面是纪录片导演调查废弃剧场失踪案,暗线是主角自身被压抑的创伤记忆逐步浮现。
|
||||
- **隐藏变量驱动反转**:第二幕中周岚是否删减关键素材,将在第四幕影响主角能否解锁关键记忆,造成剧情走向断层式差异。
|
||||
- **多维度变量系统**:线索完整度、信任、舆论热度、心理压力四个显性变量,叠加不可见布尔变量,形成网状分支逻辑。
|
||||
- **三条截然不同的终局**:真相揭露、共谋沉默、精神崩溃,满足不同玩家心理倾向。
|
||||
|
||||
### 投资人价值
|
||||
- 模块化叙事引擎,后续可快速扩展新幕或新结局。
|
||||
- 高度依赖双人对白和微表情表演,对制作资源要求可控。
|
||||
- 变量系统简单透明,便于后期数据跟踪和用户行为分析。
|
||||
|
||||
---
|
||||
|
||||
## 2. 世界观与氛围设定
|
||||
|
||||
### 时代背景
|
||||
现代中国某三线小城,时间线为当下。故事主要发生在城中一座废弃十年的老式剧院——“回声剧场”。
|
||||
|
||||
### 空间氛围
|
||||
- **剧场内部**:剥落的暗红帷幔,断裂的观众座椅,舞台上方悬垂的残旧幕布缝隙透进冷白色天光。地面有积灰,空气中有霉味和铁锈味。走廊墙壁上贴着十年前的泛黄海报(名字被刻意刮去)。
|
||||
- **控制室**:二楼小隔间,堆满胶卷盒和旧录像带。仅有一盏工作灯,照亮调音台按键上的灰尘。
|
||||
- **后台化妆间**:布满裂纹的镜面,散落的假发和化妆品。墙角有一扇暗门(通向地下室)。
|
||||
- **地下室**:潮湿阴暗,只有一盏昏黄灯泡。地面有拖拽痕迹和干涸的深色污渍。
|
||||
|
||||
### 视觉风格
|
||||
冷色调为主(青灰、暗蓝、墨绿),高对比度灯光,大量阴影和镜面反射。摄影机常采用手持跟拍,模拟纪录片导演的主观视角。
|
||||
|
||||
### 声音设计
|
||||
重点使用环境音:滴水声、踩在木地板上的吱嘎声、远处传来的空音(仿佛剧场自身在低语)。关键选择时出现一种低频脉冲声。
|
||||
|
||||
### 时间流逝
|
||||
故事横跨三天。第一、二幕为第一天;第三、四幕为第二天;第五幕为第三天;第六幕为终局。
|
||||
|
||||
---
|
||||
|
||||
## 3. 角色档案
|
||||
|
||||
### 林栩(主角,28岁,纪录片导演)
|
||||
- **外表**:清瘦,常穿黑色夹克,戴一副银色圆框眼镜。眼神专注但偶有游离。
|
||||
- **性格**:理性、执着,有轻微强迫症。表面冷静,内里焦虑,尤其是在面对未完成的叙事时。
|
||||
- **背景**:独立纪录片导演,专拍都市消失空间。三年前女友苏晚在回声剧场附近失踪,他一直以拍摄为名私下调查。林栩本人曾有十年前的剧场记忆(童年时随父母在此看戏),但记忆模糊且伴有噩梦。
|
||||
- **动机**:找到苏晚或真相,同时疗愈自己的心理创伤。
|
||||
|
||||
### 周岚(32岁,剧场现任管理人)
|
||||
- **外表**:中等身材,穿旧式风衣,常戴一条灰色围巾。脸庞有细微疤痕,眼神谨慎而疲惫。
|
||||
- **性格**:内向、多疑,言语中有真诚也有保留。对剧场内的一切了如指掌,但拒绝谈论十年前。
|
||||
- **背景**:十年前是剧场的灯光师助理。据说苏晚失踪当晚她也在场,但声称自己当时在控制室睡着了。她保存了大量剧场档案和录影带,但有些已经被她自行销毁。
|
||||
- **隐藏面**:她与林栩的父亲(已故)之间存在某种联系;她认为沉默是最好的保护方式。
|
||||
|
||||
### 陈屿(35岁,本地电视台记者)
|
||||
- **外表**:西装革履,手里经常拿着录音笔和手机。笑容职业,眼神锐利。
|
||||
- **性格**:外向、世故,追求独家新闻,不介意使用灰色手段。
|
||||
- **背景**:十年前报道过苏晚失踪案,但官方结论为“自行离开”,他不服。如今听说林栩在拍纪录片,主动接近,希望挖掘旧料。
|
||||
- **动机**:重塑个人声誉,也可能知道更多内情。
|
||||
|
||||
### 苏晚(十年前失踪者,叙事中仅以回忆/照片出现)
|
||||
- **身份**:原剧场实习生,失踪时25岁。热爱表演,曾独自在地下室排练卡夫卡的《变形记》。
|
||||
- **与林栩关系**:三年前开始交往,但从未见面(网恋)。林栩收到她的最后一封邮件:“我知道回声剧场那天晚上发生了什么……我会录下来给你。”之后音讯全无。
|
||||
- **关键物证**:一段未公开的录像带,记录了她进入地下室前的最后画面。
|
||||
|
||||
---
|
||||
|
||||
## 4. 交互结构总图
|
||||
|
||||
### 6幕选择点与变量影响概览
|
||||
|
||||
| 幕次 | 关键场景 | 选择点 | 主要变量变化 | 解锁/限制 |
|
||||
|------|----------|--------|-------------|-----------|
|
||||
| 第一幕 | 初入剧场,在控制室发现旧录像带 | 是否当着周岚面播放? | 选项A:信任+1,线索完整度+1;选项B:舆论热度+1,信任-1 | 影响第二幕周岚的对话态度 |
|
||||
| **第二幕** | **观看录像时发现关键片段被剪辑痕迹** | **①「当场质问周岚」②「假装没发现,继续拍」** | **详见下方** | **隐藏变量方向判定** |
|
||||
| 第三幕 | 与陈屿合作,试图调取十年前警方案卷 | 是否共享录像带内容给陈屿? | 共享:舆论热度+2,信任-1;不共享:信任+1,线索完整度不变 | 影响第四幕能否获得警方协助 |
|
||||
| 第四幕 | 再次播放那盘录像带,试图回忆自己被压抑的片段 | 是否在回忆中按下“暂停”(依靠隐藏变量解锁) | 若隐藏变量为A(未删减):可获得关键记忆,线索完整度+2;若隐藏变量为B(已删减):回忆失败,心理压力+2 | 决定第五幕能否直接锁定地下室真相 |
|
||||
| 第五幕 | 地下室的最终对峙 | 是否独自进入? | 独自:心理压力+2,可能获得物证;带周岚:信任+1,但可能被误导 | 影响第六幕结局选择阀值 |
|
||||
| 第六幕 | 三选一结局判定 | 依据变量值自动进入对应结局 | 见“多结局路径” | |
|
||||
|
||||
### 第二幕详细变量变化
|
||||
|
||||
#### 选项A:「当场质问周岚」
|
||||
- 信任:-2
|
||||
- 舆论热度:+1
|
||||
- 线索完整度:不变
|
||||
- 隐藏变量方向:A(周岚未删除片段,但因此产生防御行为,后续记忆解锁成功率提高)
|
||||
|
||||
#### 选项B:「假装没发现,继续拍」
|
||||
- 信任:+1
|
||||
- 线索完整度:+1(因为继续拍摄获得了更多素材)
|
||||
- 舆论热度:不变
|
||||
- 隐藏变量方向:B(周岚暗中删减片段,此后林栩回忆时出现关键缺失,需要寻找替代证据)
|
||||
|
||||
### 3结局路线图(简化)
|
||||
|
||||
```
|
||||
第一幕选择 → 第二幕选择(隐藏变量A/B) → 第三幕选择 → 第四幕回忆成败 → 第五幕行为 → 第六幕判定
|
||||
|
||||
→ 若线索完整度 ≥4 且 心理压力 ≤3 且 信任 ≥1 → 结局1:真相大白
|
||||
→ 若线索完整度 ≤2 且 信任 ≥3 且 隐藏变量=B → 结局2:沉默共谋
|
||||
→ 若心理压力 ≥5 且 线索完整度 ≤1 或 信任 ≤ -2 → 结局3:疯狂深渊
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 分幕分镜说明(含图像生成提示词)
|
||||
|
||||
### 第一幕:进入剧场
|
||||
|
||||
**场景1-1** 外景,日暮。林栩站在回声剧场生锈的大铁门前,抬头看残破的霓虹招牌。 (远景,2秒)
|
||||
`Prompt: Abandoned theater facade at dusk, rusty neon sign "Echo Theater", peeling red paint, iron gate half open, lone man in black jacket standing facing the sign, overcast sky, cold blue color grade, photorealistic, 8k, cinema lens, shallow depth of field --ar 16:9`
|
||||
|
||||
**场景1-2** 内景,控制室。周岚坐在老旧工作台前,指间夹着一支未点燃的烟。桌上放着一盘标有“2014.11.07”的录像带。 (中景,3秒)
|
||||
`Prompt: Dimly lit control room, dusty mixing desk, a VHS tape labeled "2014.11.07" on table, a woman (Zhou Lan) in a grey coat sits sideways, her face half in shadow, smoky atmosphere, warm tungsten light from desk lamp, film grain, psychological thriller aesthetic --ar 16:9`
|
||||
|
||||
**场景1-3** 林栩拿起录像带,问周岚是否介意播放。周岚犹豫。这里是玩家选择点。 (近景,2秒)
|
||||
`Prompt: Close-up of a man's hand picking up a VHS tape, woman's face reflected in a dusty mirror behind, her eyes showing hesitation, shallow focus on tape label, cold blue and amber contrast, 35mm lens --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我想现在就看看。”(直接播放)
|
||||
- B: “先放回原处,我们聊聊剧场的历史。”(延迟播放)
|
||||
|
||||
**变量变化**:选项A → 信任+1,线索完整度+1;选项B → 舆论热度+1,信任-1
|
||||
|
||||
---
|
||||
|
||||
### 第二幕:剪辑的裂隙
|
||||
|
||||
**场景2-1** 录像正在播放。画面模糊,拍摄的是剧场舞台上一把空椅子。突然出现一段明显的跳帧——从第37分钟直接跳到42分钟。 (中景,3秒)
|
||||
`Prompt: Old CRT monitor playing grainy video, a stage chair alone, a sudden glitch and jump in the frame, glitching digital artifacts, reflection of two faces on the screen, tense mood, desaturated colors, VHS distortion effect --ar 16:9`
|
||||
|
||||
**场景2-2** 林栩的视线从屏幕移到周岚脸上。周岚面无表情,但手指微微颤抖。 (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's face, flickering light from the monitor across her cheek, her lips tight, a single bead of sweat on temple, micro expression of fear, cold key light, realistic skin texture, cinematic shadow --ar 16:9`
|
||||
|
||||
**玩家选择**(关键节点):
|
||||
- A:「当场质问周岚:这段素材为什么被剪掉了?」
|
||||
- B:「什么也没说,装作没注意到,继续按计划拍摄。」
|
||||
|
||||
**变量变化**:见前述第二幕规则。
|
||||
|
||||
---
|
||||
|
||||
### 第三幕:记者介入
|
||||
|
||||
**场景3-1** 咖啡馆。陈屿将一份复印卷宗推到林栩面前。 (双人中景,3秒)
|
||||
`Prompt: Coffee shop interior, two men sit across a table, one (Lin Xu) in black jacket, the other (Chen Yu) in suit, a folder of documents between them, neon light outside window casting purple hue, film noir composition, moody atmosphere --ar 16:9`
|
||||
|
||||
**场景3-2** 陈屿压低声音:“苏晚失踪前,周岚和她吵过一架。但警方没采信。” (近景,2秒)
|
||||
`Prompt: Close-up of Chen Yu's face, intense whisper, dramatic side lighting, shadow falling across his eyes, background blurred with blurred text on folder, thriller tone --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “把录像带剪切片段的内容告诉陈屿,希望他帮我查周岚的背景。”(共享)
|
||||
- B: “不用了,我自己会处理好。”(不共享)
|
||||
|
||||
**变量变化**:
|
||||
- 共享:舆论热度+2,信任-1,线索完整度+1(获得陈屿提供的警方扫描件)
|
||||
- 不共享:信任+1,线索完整度不变,心理压力+1(独自承担压力)
|
||||
|
||||
---
|
||||
|
||||
### 第四幕:碎片记忆
|
||||
|
||||
**场景4-1** 深夜,林栩独自在剧场控制室再次播放那盘录像带,盯着跳帧处试图回忆。 (近景,3秒)
|
||||
`Prompt: Dark control room, man sits alone watching CRT monitor, fingers pressing temples in concentration, screen glitching in slow motion, dust particles in the beam of desk lamp, surreal atmosphere, psychological tension --ar 16:9`
|
||||
|
||||
**场景4-2** 回忆闪现:林栩看到自己儿时站在同一个剧场舞台上,一个模糊女人身影(疑似苏晚?母亲?)对他伸手。画面开始断裂。 (闪回,2秒)
|
||||
`Prompt: Memory flashback, young boy on a stage, woman silhouette reaching out to him, theater seats empty, hazy golden light, overlapping double exposure effect, nostalgic but eerie, film grain --ar 16:9`
|
||||
|
||||
**隐藏变量判定**:
|
||||
- 若第二幕为选项A(质问周岚,隐藏变量A):回忆清晰度过关,林栩想起那个女人说了“你会知道的” → 线索完整度+2,心理压力+1
|
||||
- 若第二幕为选项B(假装没发现,隐藏变量B):回忆中断,林栩头疼欲裂,无法捕捉关键信息 → 心理压力+2,线索完整度不变;但触发另一条路线:他发现自己手机里有一段半夜自动录制的录音(暗示他潜意识曾到过地下室)
|
||||
|
||||
**玩家选择**(无论隐藏变量如何):
|
||||
- A: “我相信这个回忆,必须立刻去地下室验证。”
|
||||
- B: “不,我不能再失控,先回酒店冷静一下。”
|
||||
|
||||
**变量变化**:
|
||||
- 选择A:心理压力+2,但如果线索完整度≥3则进入有利路径;否则陷入危险。
|
||||
- 选择B:心理压力-1,但线索完整度不变,进度推迟。
|
||||
|
||||
---
|
||||
|
||||
### 第五幕:地下室之门
|
||||
|
||||
**场景5-1** 地下室入口,铁门半掩,缝隙透出微弱光线。林栩手持手电,周岚站在身后不远处。 (中景,3秒)
|
||||
`Prompt: Heavy metal door ajar, damp stone stairs descending into darkness, hand flashlight beam cutting through dust motes, woman standing in background, face hidden in shadow, claustrophobic, high contrast black and white aesthetic approach, vertical composition --ar 9:16`
|
||||
|
||||
**场景5-2** 周岚低声说:“你确定要下去吗?有些东西……你知道了会更痛苦。” (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's eyes, tears barely suppressed, a hand stretching out to stop someone, backlight creating rim light on her hair, deep shadows, emotional yet cold --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我一个人下去,你在这里等我。”
|
||||
- B: “你和我一起下去,把话说清楚。”
|
||||
|
||||
**变量变化**:
|
||||
- 单独下去:心理压力+2,可以触发隐藏物件(苏晚的日记)→ 线索完整度+2,但信任-2(周岚感到被排斥)
|
||||
- 一起下去:信任+1,但周岚会选择性引导,漏掉关键物证 → 线索完整度+1
|
||||
|
||||
---
|
||||
|
||||
### 第六幕:三重终局
|
||||
|
||||
**场景6-1** 根据前五幕累积的变量值,自动进入以下三个结局之一。每个结局有独立的分镜。
|
||||
|
||||
#### 结局1:真相大白(条件:线索完整度≥4,心理压力≤3,信任≥1)
|
||||
|
||||
**场景6-1A** 地下室深处,林栩找到隐藏隔板后的一台老旧摄像机,里面存有完整的原始录像——苏晚死前录下的声明:她发现了周岚十年前曾包庇过一起演出事故,周岚的父亲(老经理)因此自杀。周岚为了掩盖真相,在苏晚录下证据后袭击了她。但录像显示苏晚只是受伤昏迷,被周岚藏匿在另一处废弃建筑内,最终因失救而死。 (中近景,5秒)
|
||||
`Prompt: Underground hidden compartment, an old camcorder with red recording light on, played back on a small screen showing a woman (Su Wan) speaking directly to camera, tears and desperation, dust particles floating, cold blue light from the screen illuminating the viewer's face, revelation moment, dramatic --ar 16:9`
|
||||
|
||||
**场景6-1B** 林栩走出地下室,沉默地报警。周岚在剧场门口被两名便衣警察带走。她回头看了一眼林栩,眼中既有解脱也有愧疚。 (全景,3秒)
|
||||
`Prompt: Wide shot of theater exit, police car in background, Zhou Lan being escorted in handcuffs, Lin Xu standing still in the foreground, rain starting to fall, melancholic but just, cinematic lighting, half yellow streetlight half blue hour --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “真相永远有回声。我终于听懂了她的最后一句话:回声剧场,不是发出声音的地方,而是听到所有声音的地方。”
|
||||
|
||||
#### 结局2:沉默共谋(条件:线索完整度≤2,信任≥3,隐藏变量=B)
|
||||
|
||||
**场景6-2A** 林栩和周岚坐在剧场观众席中央,面前放着那盘被删减后的录像带。周岚坦白了一切,但恳求林栩不要公开:“你爱的人已经离去,公开只会毁掉更多人的平静。我可以给你你父亲留下的另一份遗物——那会解答你的童年噩梦。”林栩犹豫。 (双人近景,4秒)
|
||||
`Prompt: Two figures sitting in the middle row of an empty theater, a VHS tape on the floor between them, warm amber light from stage spill, both faces half lit, heavy atmosphere, secret pact, cinematic composition, muted colors --ar 16:9`
|
||||
|
||||
**场景6-2B** 林栩最终选择和周岚一起销毁所有证据,然后各自离开。剧场被挂牌出售。一个月后,陈屿在电视上看到一条新闻:“回声剧场因年久失修发生坍塌,无人伤亡。” 林栩在远方城市的一个公寓里关掉电视,手里握着一枚沾满灰尘的银戒指——那是苏晚曾提到过的祖传物件。 (远景,4秒)
|
||||
`Prompt: Newspaper headline "Echo Theater demolished due to structural damage", a man sitting alone in a dim apartment, holding a silver ring, rain on window, reflection of city lights, melancholic, neo-noir aesthetic, 4k --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有时候,最响亮的抗议就是不说一个字。我选择了记忆的缺席,换来了余生的安宁,但每个雨夜,我都觉得剧场还在我心里低语。”
|
||||
|
||||
#### 结局3:疯狂深渊(条件:心理压力≥5,且(线索完整度≤1 或 信任≤-2))
|
||||
|
||||
**场景6-3A** 在独自下到地下室的过程中,林栩的幻觉越来越严重。他看到自己童年时站在舞台上的画面,也看到苏晚在角落里的模糊身影。他冲向一片黑暗试图抓住她,却撞碎了地下室的旧镜子,玻璃碎片划伤手臂。鲜血滴落,他瘫坐在瓦砾中,开始大笑,精神彻底崩溃。 (中近景,4秒)
|
||||
`Prompt: Dark basement, shattered mirror pieces covering floor, a man kneeling among glass shards, blood trickling down his arm, mad laughter expression, distorted shadows on walls, surreal psychological horror style, high contrast, red accent light from a flickering bulb, claustrophobic --ar 16:9`
|
||||
|
||||
**场景6-3B** 第二天,陈屿在剧场外发现林栩的摄影机被扔在门口。画面最后记录的是——林栩对着镜头说:“他们都想让我闭嘴。但回声,永远不会停。” 随后影像中断。陈屿报警,警方在地下室发现林栩昏迷,但没有任何物证。案件被定性为“幻觉性自残”。 (闪回式剪辑)
|
||||
`Prompt: Broken camera abandoned on theater steps, snow-like static on its small screen, police tape in background, cloudy sky, desaturated, documentary style, finality --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有些记忆不是你的,而是剧场借给你的。等你试图还回去的时候,它已经连你的灵魂一起收走了。”
|
||||
|
||||
---
|
||||
|
||||
## 6. 变量系统说明
|
||||
|
||||
### 6.1 显性变量(玩家可见,整数,范围 -5 到 +5)
|
||||
|
||||
| 变量名 | 含义 | 初始值 | 变化来源 | 关键影响 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 线索完整度 | 记录玩家收集到的和还原的真相碎片数量 | 0 | 各幕选择中获取物证、回忆成功、与角色交换信息 | ≥4 可解锁结局1;≤1 容易进入结局3 |
|
||||
| 信任 | 周岚对林栩的信任程度 | 1 | 对话选择、是否共享隐私、是否尊重她的空间 | ≥3 可解锁结局2的和平路线;≤-2 加速进入结局3 |
|
||||
| 舆论热度 | 外界对案件的关注度 | 0 | 是否向陈屿透露、是否公开录像 | ≥3 会导致某些角色被迫行动(如周岚销毁剩余证据) |
|
||||
| 心理压力 | 林栩的精神状态 | 0 | 多次回忆失败、暴力冲突、孤独探索 | ≥5 触发疯狂结局;≤3 才能保持理性判断 |
|
||||
|
||||
### 6.2 隐藏变量(玩家不可见)
|
||||
|
||||
| 变量名 | 类型 | 默认值 | 设定时机 | 影响范围 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 周岚是否剪掉关键片段 | 布尔值 | 未定义 | 第二幕选择后确定 | 方向A(质问→未删减):第四幕回忆成功,主角直接获得关键线索;地下室内周岚可能会临时阻挡|
|
||||
| | | | | 方向B(假装未发现→已删减):第四幕回忆失败,但触发另一个隐藏路径(手机录音) |
|
||||
|
||||
### 6.3 变量控制原则
|
||||
- 所有变量仅在剧情分支时进行增减,不涉及战斗或RPG数值。
|
||||
- 结局判定采用“门槛检查”,满足其中一条即可进入对应结局。
|
||||
- 若同时满足多个结局条件,优先级:结局1 > 结局2 > 结局3(即更容易走向和解版本)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 多结局路径详细说明
|
||||
|
||||
### 结局1:真相大白
|
||||
**达成条件**:
|
||||
- 线索完整度 ≥ 4
|
||||
- 心理压力 ≤ 3
|
||||
- 信任 ≥ 1
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选A(播放录像)→ 信任+1,线索+1
|
||||
2. 第二幕选A(质问周岚)→ 隐藏变量A,信任-2但保留线索
|
||||
3. 第三幕选A(共享给陈屿)→ 舆论+2,线索+1
|
||||
4. 第四幕(隐藏变量A)→ 回忆成功,线索+2
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动走进结局1
|
||||
|
||||
**结局关键画面**:摄像机录像 + 警察逮捕 + 雨中解脱。
|
||||
|
||||
### 结局2:沉默共谋
|
||||
**达成条件**:
|
||||
- 线索完整度 ≤ 2
|
||||
- 信任 ≥ 3
|
||||
- 隐藏变量 = B(周岚已删减片段)
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选B(不播放)→ 舆论+1,信任-1
|
||||
2. 第二幕选B(假装没发现)→ 隐藏变量B,信任+1,线索+1
|
||||
3. 第三幕选B(不共享)→ 信任+1
|
||||
4. 第四幕(隐藏变量B)→ 回忆失败,心理+2,但获得手机录音
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动进入结局2
|
||||
|
||||
**结局关键画面**:两人沉默坐在观众席 + 剧场拆除新闻 + 银戒指特写。
|
||||
|
||||
### 结局3:疯狂深渊
|
||||
**达成条件**:
|
||||
- 心理压力 ≥ 5
|
||||
- 且(线索完整度 ≤ 1 或 信任 ≤ -2)
|
||||
|
||||
**常见错误路径**:
|
||||
- 第一幕强制播放导致周岚对立
|
||||
- 第二幕质问但随后不断选择孤立周岚并独自行动
|
||||
- 第三、四、五幕持续累积心理压力
|
||||
|
||||
**结局关键画面**:地下室镜子碎裂 + 自残 + 废弃摄影机。
|
||||
|
||||
---
|
||||
|
||||
## 8. 输出/导出建议
|
||||
|
||||
### 可交互原型
|
||||
- 使用Twine或inklewriter快速搭建文本原型。变量系统可映射为代码变量(整数/布尔),每段标记节点ID。
|
||||
- 建议录制6个节点视频素材(每个选择点一个片段),配合选项UI进行演示。
|
||||
|
||||
### 分镜本(供导演/摄影)
|
||||
- 按照本交付稿中的分镜说明,整合为六幕的shot list,包含镜头编号、画面描述、景别、时长、人物、灯光示意图。
|
||||
- 图片提示词可直接输入Midjourney/DALL·E生成概念图用于提案。
|
||||
|
||||
### 演示稿(供投资人)
|
||||
- 制作一个6页PPT,每页对应一幕核心选择,附上生成的图像和变量影响图标。
|
||||
- 结尾页展示三条结局路线示意图,并标注制作成本估算(室内场景60%,室外20%,特效20%)。
|
||||
|
||||
### 后期制作建议
|
||||
- 隐藏变量在演出中通过微表情和剪辑节奏暗示(如质问时周岚的沉默时长差异)。
|
||||
- 心理压力变量可通过林栩的手持镜头晃动程度、环境音叠加来表现。
|
||||
- 三个结局需分别录制不同对白版本,但共享部分场景(如地下室)可复用。
|
||||
|
||||
---
|
||||
|
||||
## 附录:变量旗标表(表格形式)
|
||||
|
||||
| 变量/旗标 | 类型 | 含义 | 触发时机 | 影响范围 |
|
||||
|-----------|------|------|----------|----------|
|
||||
| 线索完整度 | 显性整数 | 已获得的物证和回忆数 | 每次获取物证或成功回忆 | 结局1门槛 |
|
||||
| 信任 | 显性整数 | 周岚的信任程度 | 对话选择、共享/保密行为 | 结局2门槛 |
|
||||
| 舆论热度 | 显性整数 | 媒体关注度 | 与陈屿互动、公开录像 | 可能迫使周岚提前行动 |
|
||||
| 心理压力 | 显性整数 | 主角精神稳定度 | 失败回忆、单独行动、冲突 | 结局3门槛 |
|
||||
| 删减片段(隐藏) | 布尔 | 第二幕结果 | 第二幕选择后锁定 | 第四幕是否解锁回忆 |
|
||||
|
||||
---
|
||||
|
||||
**交付稿结束。**
|
||||
本方案已覆盖用户要求的6幕结构、4个显性变量+1个隐藏变量、第二幕特定修改、3结局及其条件,并提供完整分镜与图像提示词。可据以进入制作准备阶段。
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# 回声剧场 互动影游创作规格
|
||||
|
||||
## 目标
|
||||
- 交付类型:互动影游 / 互动叙事类游戏 / 影游剧本
|
||||
- 剧情段落/集数:6
|
||||
- 单段/单集时长:未指定
|
||||
- 预算约束:未定
|
||||
- 目标受众:悬疑推理爱好者,心理惊悚观众
|
||||
- 参考模式:盛世天下式多走向互动剧
|
||||
- 原素材:原创设定
|
||||
|
||||
## 用户要求
|
||||
按照以下规格生成《回声剧场》互动影游最终交付稿(投资人版本):
|
||||
|
||||
## 项目规格
|
||||
- 项目名:回声剧场
|
||||
- 类型:互动影游 / 交互叙事剧
|
||||
- 风格:冷峻写实心理惊悚
|
||||
- 结构:6幕,每幕1个关键选择点,3个最终结局
|
||||
- 追踪变量:4个(线索完整度、信任、舆论热度、心理压力)+ 1个隐藏变量(周岚是否剪掉关键片段)
|
||||
- 目标受众:悬疑推理爱好者,心理惊悚观众
|
||||
|
||||
## 第二幕修改内容(必须包含)
|
||||
- 新增隐藏变量:周岚是否剪掉关键片段(布尔值,玩家不可见,由幕内逻辑推进后确定;在后续幕中影响是否能解锁关键记忆)
|
||||
- 第二幕选择点两个选项:
|
||||
1. 「当场质问周岚」——信任-2,舆论热度+1,线索完整度不变,但触发周岚防御行为,解锁隐藏变量方向A
|
||||
2. 「假装没发现,继续拍」——信任+1,线索完整度+1,但周岚暗中删减素材,隐藏变量方向B
|
||||
|
||||
## 交付稿应包含
|
||||
1. 项目简介 & 核心卖点(面向投资人)
|
||||
2. 世界观与氛围设定
|
||||
3. 角色档案(林栩、周岚、陈屿、十年前失踪者苏晚)
|
||||
4. 交互结构总图(6幕选择点 + 变量影响 + 3结局路线图)
|
||||
5. 分幕分镜说明(含图像生成提示词,6幕完整)
|
||||
6. 变量系统说明
|
||||
7. 3个结局详细描述
|
||||
8. 输出/导出建议(可转化为可交互原型、分镜本、演示稿)
|
||||
|
||||
输出语言:中文
|
||||
图片提示词:英文(供Midjourney/DALL·E使用)
|
||||
|
||||
补充要求:
|
||||
第二幕新增隐藏变量'周岚是否剪掉关键片段'(布尔值,玩家不可见);第二幕选择改为'当场质问周岚' vs '假装没发现继续拍';最终交付稿包含项目简介、世界观、角色档案、6幕分支结构、变量系统、3结局描述、分镜说明及图像提示词,格式面向投资人审阅。
|
||||
|
||||
## 互动影游边界
|
||||
- 这是创作交付稿,不是硬数值 RPG 引擎设计;变量、旗标、关系和结局条件必须服务剧情分支。
|
||||
- 必须包含多分支剧情、玩家关键选择、变量/旗标如何改变后续剧情,以及多结局达成条件。
|
||||
- 变量系统用自然语言说明即可:状态、关系、隐瞒/公开、证据、物品、身份、好感/信任等;不要强行套固定数值或装备等级。
|
||||
- 交付要适配影游/互动剧制作:剧情树清晰、节点可拍、对白可演、分镜可画、图片提示词可用于资产生成。
|
||||
- 不替用户擅自决定题材、预算、画风和商业强化强度;未指定处写为可调整。
|
||||
|
||||
## 源素材摘要
|
||||
未提供完整源素材。
|
||||
@@ -0,0 +1,356 @@
|
||||
# 回声剧场 互动影游方案
|
||||
|
||||
## 1. 项目简介 & 核心卖点
|
||||
|
||||
### 项目名称
|
||||
**回声剧场**
|
||||
|
||||
### 项目类型
|
||||
互动影游 / 交互叙事剧(6幕结构,3个最终结局)
|
||||
|
||||
### 目标受众
|
||||
悬疑推理爱好者、心理惊悚观众(20–45岁,偏好冷峻写实风格)
|
||||
|
||||
### 预算定位
|
||||
中低成本互动剧,以室内场景、双人对手戏为主,可搭配少量外景和回忆闪回。可适配真人实拍或高质量预渲染数字演员。
|
||||
|
||||
### 核心卖点
|
||||
- **心理博弈双线叙事**:表面是纪录片导演调查废弃剧场失踪案,暗线是主角自身被压抑的创伤记忆逐步浮现。
|
||||
- **隐藏变量驱动反转**:第二幕中周岚是否删减关键素材,将在第四幕影响主角能否解锁关键记忆,造成剧情走向断层式差异。
|
||||
- **多维度变量系统**:线索完整度、信任、舆论热度、心理压力四个显性变量,叠加不可见布尔变量,形成网状分支逻辑。
|
||||
- **三条截然不同的终局**:真相揭露、共谋沉默、精神崩溃,满足不同玩家心理倾向。
|
||||
|
||||
### 投资人价值
|
||||
- 模块化叙事引擎,后续可快速扩展新幕或新结局。
|
||||
- 高度依赖双人对白和微表情表演,对制作资源要求可控。
|
||||
- 变量系统简单透明,便于后期数据跟踪和用户行为分析。
|
||||
|
||||
---
|
||||
|
||||
## 2. 世界观与氛围设定
|
||||
|
||||
### 时代背景
|
||||
现代中国某三线小城,时间线为当下。故事主要发生在城中一座废弃十年的老式剧院——“回声剧场”。
|
||||
|
||||
### 空间氛围
|
||||
- **剧场内部**:剥落的暗红帷幔,断裂的观众座椅,舞台上方悬垂的残旧幕布缝隙透进冷白色天光。地面有积灰,空气中有霉味和铁锈味。走廊墙壁上贴着十年前的泛黄海报(名字被刻意刮去)。
|
||||
- **控制室**:二楼小隔间,堆满胶卷盒和旧录像带。仅有一盏工作灯,照亮调音台按键上的灰尘。
|
||||
- **后台化妆间**:布满裂纹的镜面,散落的假发和化妆品。墙角有一扇暗门(通向地下室)。
|
||||
- **地下室**:潮湿阴暗,只有一盏昏黄灯泡。地面有拖拽痕迹和干涸的深色污渍。
|
||||
|
||||
### 视觉风格
|
||||
冷色调为主(青灰、暗蓝、墨绿),高对比度灯光,大量阴影和镜面反射。摄影机常采用手持跟拍,模拟纪录片导演的主观视角。
|
||||
|
||||
### 声音设计
|
||||
重点使用环境音:滴水声、踩在木地板上的吱嘎声、远处传来的空音(仿佛剧场自身在低语)。关键选择时出现一种低频脉冲声。
|
||||
|
||||
### 时间流逝
|
||||
故事横跨三天。第一、二幕为第一天;第三、四幕为第二天;第五幕为第三天;第六幕为终局。
|
||||
|
||||
---
|
||||
|
||||
## 3. 角色档案
|
||||
|
||||
### 林栩(主角,28岁,纪录片导演)
|
||||
- **外表**:清瘦,常穿黑色夹克,戴一副银色圆框眼镜。眼神专注但偶有游离。
|
||||
- **性格**:理性、执着,有轻微强迫症。表面冷静,内里焦虑,尤其是在面对未完成的叙事时。
|
||||
- **背景**:独立纪录片导演,专拍都市消失空间。三年前女友苏晚在回声剧场附近失踪,他一直以拍摄为名私下调查。林栩本人曾有十年前的剧场记忆(童年时随父母在此看戏),但记忆模糊且伴有噩梦。
|
||||
- **动机**:找到苏晚或真相,同时疗愈自己的心理创伤。
|
||||
|
||||
### 周岚(32岁,剧场现任管理人)
|
||||
- **外表**:中等身材,穿旧式风衣,常戴一条灰色围巾。脸庞有细微疤痕,眼神谨慎而疲惫。
|
||||
- **性格**:内向、多疑,言语中有真诚也有保留。对剧场内的一切了如指掌,但拒绝谈论十年前。
|
||||
- **背景**:十年前是剧场的灯光师助理。据说苏晚失踪当晚她也在场,但声称自己当时在控制室睡着了。她保存了大量剧场档案和录影带,但有些已经被她自行销毁。
|
||||
- **隐藏面**:她与林栩的父亲(已故)之间存在某种联系;她认为沉默是最好的保护方式。
|
||||
|
||||
### 陈屿(35岁,本地电视台记者)
|
||||
- **外表**:西装革履,手里经常拿着录音笔和手机。笑容职业,眼神锐利。
|
||||
- **性格**:外向、世故,追求独家新闻,不介意使用灰色手段。
|
||||
- **背景**:十年前报道过苏晚失踪案,但官方结论为“自行离开”,他不服。如今听说林栩在拍纪录片,主动接近,希望挖掘旧料。
|
||||
- **动机**:重塑个人声誉,也可能知道更多内情。
|
||||
|
||||
### 苏晚(十年前失踪者,叙事中仅以回忆/照片出现)
|
||||
- **身份**:原剧场实习生,失踪时25岁。热爱表演,曾独自在地下室排练卡夫卡的《变形记》。
|
||||
- **与林栩关系**:三年前开始交往,但从未见面(网恋)。林栩收到她的最后一封邮件:“我知道回声剧场那天晚上发生了什么……我会录下来给你。”之后音讯全无。
|
||||
- **关键物证**:一段未公开的录像带,记录了她进入地下室前的最后画面。
|
||||
|
||||
---
|
||||
|
||||
## 4. 交互结构总图
|
||||
|
||||
### 6幕选择点与变量影响概览
|
||||
|
||||
| 幕次 | 关键场景 | 选择点 | 主要变量变化 | 解锁/限制 |
|
||||
|------|----------|--------|-------------|-----------|
|
||||
| 第一幕 | 初入剧场,在控制室发现旧录像带 | 是否当着周岚面播放? | 选项A:信任+1,线索完整度+1;选项B:舆论热度+1,信任-1 | 影响第二幕周岚的对话态度 |
|
||||
| **第二幕** | **观看录像时发现关键片段被剪辑痕迹** | **①「当场质问周岚」②「假装没发现,继续拍」** | **详见下方** | **隐藏变量方向判定** |
|
||||
| 第三幕 | 与陈屿合作,试图调取十年前警方案卷 | 是否共享录像带内容给陈屿? | 共享:舆论热度+2,信任-1;不共享:信任+1,线索完整度不变 | 影响第四幕能否获得警方协助 |
|
||||
| 第四幕 | 再次播放那盘录像带,试图回忆自己被压抑的片段 | 是否在回忆中按下“暂停”(依靠隐藏变量解锁) | 若隐藏变量为A(未删减):可获得关键记忆,线索完整度+2;若隐藏变量为B(已删减):回忆失败,心理压力+2 | 决定第五幕能否直接锁定地下室真相 |
|
||||
| 第五幕 | 地下室的最终对峙 | 是否独自进入? | 独自:心理压力+2,可能获得物证;带周岚:信任+1,但可能被误导 | 影响第六幕结局选择阀值 |
|
||||
| 第六幕 | 三选一结局判定 | 依据变量值自动进入对应结局 | 见“多结局路径” | |
|
||||
|
||||
### 第二幕详细变量变化
|
||||
|
||||
#### 选项A:「当场质问周岚」
|
||||
- 信任:-2
|
||||
- 舆论热度:+1
|
||||
- 线索完整度:不变
|
||||
- 隐藏变量方向:A(周岚未删除片段,但因此产生防御行为,后续记忆解锁成功率提高)
|
||||
|
||||
#### 选项B:「假装没发现,继续拍」
|
||||
- 信任:+1
|
||||
- 线索完整度:+1(因为继续拍摄获得了更多素材)
|
||||
- 舆论热度:不变
|
||||
- 隐藏变量方向:B(周岚暗中删减片段,此后林栩回忆时出现关键缺失,需要寻找替代证据)
|
||||
|
||||
### 3结局路线图(简化)
|
||||
|
||||
```
|
||||
第一幕选择 → 第二幕选择(隐藏变量A/B) → 第三幕选择 → 第四幕回忆成败 → 第五幕行为 → 第六幕判定
|
||||
|
||||
→ 若线索完整度 ≥4 且 心理压力 ≤3 且 信任 ≥1 → 结局1:真相大白
|
||||
→ 若线索完整度 ≤2 且 信任 ≥3 且 隐藏变量=B → 结局2:沉默共谋
|
||||
→ 若心理压力 ≥5 且 线索完整度 ≤1 或 信任 ≤ -2 → 结局3:疯狂深渊
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 分幕分镜说明(含图像生成提示词)
|
||||
|
||||
### 第一幕:进入剧场
|
||||
|
||||
**场景1-1** 外景,日暮。林栩站在回声剧场生锈的大铁门前,抬头看残破的霓虹招牌。 (远景,2秒)
|
||||
`Prompt: Abandoned theater facade at dusk, rusty neon sign "Echo Theater", peeling red paint, iron gate half open, lone man in black jacket standing facing the sign, overcast sky, cold blue color grade, photorealistic, 8k, cinema lens, shallow depth of field --ar 16:9`
|
||||
|
||||
**场景1-2** 内景,控制室。周岚坐在老旧工作台前,指间夹着一支未点燃的烟。桌上放着一盘标有“2014.11.07”的录像带。 (中景,3秒)
|
||||
`Prompt: Dimly lit control room, dusty mixing desk, a VHS tape labeled "2014.11.07" on table, a woman (Zhou Lan) in a grey coat sits sideways, her face half in shadow, smoky atmosphere, warm tungsten light from desk lamp, film grain, psychological thriller aesthetic --ar 16:9`
|
||||
|
||||
**场景1-3** 林栩拿起录像带,问周岚是否介意播放。周岚犹豫。这里是玩家选择点。 (近景,2秒)
|
||||
`Prompt: Close-up of a man's hand picking up a VHS tape, woman's face reflected in a dusty mirror behind, her eyes showing hesitation, shallow focus on tape label, cold blue and amber contrast, 35mm lens --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我想现在就看看。”(直接播放)
|
||||
- B: “先放回原处,我们聊聊剧场的历史。”(延迟播放)
|
||||
|
||||
**变量变化**:选项A → 信任+1,线索完整度+1;选项B → 舆论热度+1,信任-1
|
||||
|
||||
---
|
||||
|
||||
### 第二幕:剪辑的裂隙
|
||||
|
||||
**场景2-1** 录像正在播放。画面模糊,拍摄的是剧场舞台上一把空椅子。突然出现一段明显的跳帧——从第37分钟直接跳到42分钟。 (中景,3秒)
|
||||
`Prompt: Old CRT monitor playing grainy video, a stage chair alone, a sudden glitch and jump in the frame, glitching digital artifacts, reflection of two faces on the screen, tense mood, desaturated colors, VHS distortion effect --ar 16:9`
|
||||
|
||||
**场景2-2** 林栩的视线从屏幕移到周岚脸上。周岚面无表情,但手指微微颤抖。 (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's face, flickering light from the monitor across her cheek, her lips tight, a single bead of sweat on temple, micro expression of fear, cold key light, realistic skin texture, cinematic shadow --ar 16:9`
|
||||
|
||||
**玩家选择**(关键节点):
|
||||
- A:「当场质问周岚:这段素材为什么被剪掉了?」
|
||||
- B:「什么也没说,装作没注意到,继续按计划拍摄。」
|
||||
|
||||
**变量变化**:见前述第二幕规则。
|
||||
|
||||
---
|
||||
|
||||
### 第三幕:记者介入
|
||||
|
||||
**场景3-1** 咖啡馆。陈屿将一份复印卷宗推到林栩面前。 (双人中景,3秒)
|
||||
`Prompt: Coffee shop interior, two men sit across a table, one (Lin Xu) in black jacket, the other (Chen Yu) in suit, a folder of documents between them, neon light outside window casting purple hue, film noir composition, moody atmosphere --ar 16:9`
|
||||
|
||||
**场景3-2** 陈屿压低声音:“苏晚失踪前,周岚和她吵过一架。但警方没采信。” (近景,2秒)
|
||||
`Prompt: Close-up of Chen Yu's face, intense whisper, dramatic side lighting, shadow falling across his eyes, background blurred with blurred text on folder, thriller tone --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “把录像带剪切片段的内容告诉陈屿,希望他帮我查周岚的背景。”(共享)
|
||||
- B: “不用了,我自己会处理好。”(不共享)
|
||||
|
||||
**变量变化**:
|
||||
- 共享:舆论热度+2,信任-1,线索完整度+1(获得陈屿提供的警方扫描件)
|
||||
- 不共享:信任+1,线索完整度不变,心理压力+1(独自承担压力)
|
||||
|
||||
---
|
||||
|
||||
### 第四幕:碎片记忆
|
||||
|
||||
**场景4-1** 深夜,林栩独自在剧场控制室再次播放那盘录像带,盯着跳帧处试图回忆。 (近景,3秒)
|
||||
`Prompt: Dark control room, man sits alone watching CRT monitor, fingers pressing temples in concentration, screen glitching in slow motion, dust particles in the beam of desk lamp, surreal atmosphere, psychological tension --ar 16:9`
|
||||
|
||||
**场景4-2** 回忆闪现:林栩看到自己儿时站在同一个剧场舞台上,一个模糊女人身影(疑似苏晚?母亲?)对他伸手。画面开始断裂。 (闪回,2秒)
|
||||
`Prompt: Memory flashback, young boy on a stage, woman silhouette reaching out to him, theater seats empty, hazy golden light, overlapping double exposure effect, nostalgic but eerie, film grain --ar 16:9`
|
||||
|
||||
**隐藏变量判定**:
|
||||
- 若第二幕为选项A(质问周岚,隐藏变量A):回忆清晰度过关,林栩想起那个女人说了“你会知道的” → 线索完整度+2,心理压力+1
|
||||
- 若第二幕为选项B(假装没发现,隐藏变量B):回忆中断,林栩头疼欲裂,无法捕捉关键信息 → 心理压力+2,线索完整度不变;但触发另一条路线:他发现自己手机里有一段半夜自动录制的录音(暗示他潜意识曾到过地下室)
|
||||
|
||||
**玩家选择**(无论隐藏变量如何):
|
||||
- A: “我相信这个回忆,必须立刻去地下室验证。”
|
||||
- B: “不,我不能再失控,先回酒店冷静一下。”
|
||||
|
||||
**变量变化**:
|
||||
- 选择A:心理压力+2,但如果线索完整度≥3则进入有利路径;否则陷入危险。
|
||||
- 选择B:心理压力-1,但线索完整度不变,进度推迟。
|
||||
|
||||
---
|
||||
|
||||
### 第五幕:地下室之门
|
||||
|
||||
**场景5-1** 地下室入口,铁门半掩,缝隙透出微弱光线。林栩手持手电,周岚站在身后不远处。 (中景,3秒)
|
||||
`Prompt: Heavy metal door ajar, damp stone stairs descending into darkness, hand flashlight beam cutting through dust motes, woman standing in background, face hidden in shadow, claustrophobic, high contrast black and white aesthetic approach, vertical composition --ar 9:16`
|
||||
|
||||
**场景5-2** 周岚低声说:“你确定要下去吗?有些东西……你知道了会更痛苦。” (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's eyes, tears barely suppressed, a hand stretching out to stop someone, backlight creating rim light on her hair, deep shadows, emotional yet cold --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我一个人下去,你在这里等我。”
|
||||
- B: “你和我一起下去,把话说清楚。”
|
||||
|
||||
**变量变化**:
|
||||
- 单独下去:心理压力+2,可以触发隐藏物件(苏晚的日记)→ 线索完整度+2,但信任-2(周岚感到被排斥)
|
||||
- 一起下去:信任+1,但周岚会选择性引导,漏掉关键物证 → 线索完整度+1
|
||||
|
||||
---
|
||||
|
||||
### 第六幕:三重终局
|
||||
|
||||
**场景6-1** 根据前五幕累积的变量值,自动进入以下三个结局之一。每个结局有独立的分镜。
|
||||
|
||||
#### 结局1:真相大白(条件:线索完整度≥4,心理压力≤3,信任≥1)
|
||||
|
||||
**场景6-1A** 地下室深处,林栩找到隐藏隔板后的一台老旧摄像机,里面存有完整的原始录像——苏晚死前录下的声明:她发现了周岚十年前曾包庇过一起演出事故,周岚的父亲(老经理)因此自杀。周岚为了掩盖真相,在苏晚录下证据后袭击了她。但录像显示苏晚只是受伤昏迷,被周岚藏匿在另一处废弃建筑内,最终因失救而死。 (中近景,5秒)
|
||||
`Prompt: Underground hidden compartment, an old camcorder with red recording light on, played back on a small screen showing a woman (Su Wan) speaking directly to camera, tears and desperation, dust particles floating, cold blue light from the screen illuminating the viewer's face, revelation moment, dramatic --ar 16:9`
|
||||
|
||||
**场景6-1B** 林栩走出地下室,沉默地报警。周岚在剧场门口被两名便衣警察带走。她回头看了一眼林栩,眼中既有解脱也有愧疚。 (全景,3秒)
|
||||
`Prompt: Wide shot of theater exit, police car in background, Zhou Lan being escorted in handcuffs, Lin Xu standing still in the foreground, rain starting to fall, melancholic but just, cinematic lighting, half yellow streetlight half blue hour --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “真相永远有回声。我终于听懂了她的最后一句话:回声剧场,不是发出声音的地方,而是听到所有声音的地方。”
|
||||
|
||||
#### 结局2:沉默共谋(条件:线索完整度≤2,信任≥3,隐藏变量=B)
|
||||
|
||||
**场景6-2A** 林栩和周岚坐在剧场观众席中央,面前放着那盘被删减后的录像带。周岚坦白了一切,但恳求林栩不要公开:“你爱的人已经离去,公开只会毁掉更多人的平静。我可以给你你父亲留下的另一份遗物——那会解答你的童年噩梦。”林栩犹豫。 (双人近景,4秒)
|
||||
`Prompt: Two figures sitting in the middle row of an empty theater, a VHS tape on the floor between them, warm amber light from stage spill, both faces half lit, heavy atmosphere, secret pact, cinematic composition, muted colors --ar 16:9`
|
||||
|
||||
**场景6-2B** 林栩最终选择和周岚一起销毁所有证据,然后各自离开。剧场被挂牌出售。一个月后,陈屿在电视上看到一条新闻:“回声剧场因年久失修发生坍塌,无人伤亡。” 林栩在远方城市的一个公寓里关掉电视,手里握着一枚沾满灰尘的银戒指——那是苏晚曾提到过的祖传物件。 (远景,4秒)
|
||||
`Prompt: Newspaper headline "Echo Theater demolished due to structural damage", a man sitting alone in a dim apartment, holding a silver ring, rain on window, reflection of city lights, melancholic, neo-noir aesthetic, 4k --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有时候,最响亮的抗议就是不说一个字。我选择了记忆的缺席,换来了余生的安宁,但每个雨夜,我都觉得剧场还在我心里低语。”
|
||||
|
||||
#### 结局3:疯狂深渊(条件:心理压力≥5,且(线索完整度≤1 或 信任≤-2))
|
||||
|
||||
**场景6-3A** 在独自下到地下室的过程中,林栩的幻觉越来越严重。他看到自己童年时站在舞台上的画面,也看到苏晚在角落里的模糊身影。他冲向一片黑暗试图抓住她,却撞碎了地下室的旧镜子,玻璃碎片划伤手臂。鲜血滴落,他瘫坐在瓦砾中,开始大笑,精神彻底崩溃。 (中近景,4秒)
|
||||
`Prompt: Dark basement, shattered mirror pieces covering floor, a man kneeling among glass shards, blood trickling down his arm, mad laughter expression, distorted shadows on walls, surreal psychological horror style, high contrast, red accent light from a flickering bulb, claustrophobic --ar 16:9`
|
||||
|
||||
**场景6-3B** 第二天,陈屿在剧场外发现林栩的摄影机被扔在门口。画面最后记录的是——林栩对着镜头说:“他们都想让我闭嘴。但回声,永远不会停。” 随后影像中断。陈屿报警,警方在地下室发现林栩昏迷,但没有任何物证。案件被定性为“幻觉性自残”。 (闪回式剪辑)
|
||||
`Prompt: Broken camera abandoned on theater steps, snow-like static on its small screen, police tape in background, cloudy sky, desaturated, documentary style, finality --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有些记忆不是你的,而是剧场借给你的。等你试图还回去的时候,它已经连你的灵魂一起收走了。”
|
||||
|
||||
---
|
||||
|
||||
## 6. 变量系统说明
|
||||
|
||||
### 6.1 显性变量(玩家可见,整数,范围 -5 到 +5)
|
||||
|
||||
| 变量名 | 含义 | 初始值 | 变化来源 | 关键影响 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 线索完整度 | 记录玩家收集到的和还原的真相碎片数量 | 0 | 各幕选择中获取物证、回忆成功、与角色交换信息 | ≥4 可解锁结局1;≤1 容易进入结局3 |
|
||||
| 信任 | 周岚对林栩的信任程度 | 1 | 对话选择、是否共享隐私、是否尊重她的空间 | ≥3 可解锁结局2的和平路线;≤-2 加速进入结局3 |
|
||||
| 舆论热度 | 外界对案件的关注度 | 0 | 是否向陈屿透露、是否公开录像 | ≥3 会导致某些角色被迫行动(如周岚销毁剩余证据) |
|
||||
| 心理压力 | 林栩的精神状态 | 0 | 多次回忆失败、暴力冲突、孤独探索 | ≥5 触发疯狂结局;≤3 才能保持理性判断 |
|
||||
|
||||
### 6.2 隐藏变量(玩家不可见)
|
||||
|
||||
| 变量名 | 类型 | 默认值 | 设定时机 | 影响范围 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 周岚是否剪掉关键片段 | 布尔值 | 未定义 | 第二幕选择后确定 | 方向A(质问→未删减):第四幕回忆成功,主角直接获得关键线索;地下室内周岚可能会临时阻挡|
|
||||
| | | | | 方向B(假装未发现→已删减):第四幕回忆失败,但触发另一个隐藏路径(手机录音) |
|
||||
|
||||
### 6.3 变量控制原则
|
||||
- 所有变量仅在剧情分支时进行增减,不涉及战斗或RPG数值。
|
||||
- 结局判定采用“门槛检查”,满足其中一条即可进入对应结局。
|
||||
- 若同时满足多个结局条件,优先级:结局1 > 结局2 > 结局3(即更容易走向和解版本)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 多结局路径详细说明
|
||||
|
||||
### 结局1:真相大白
|
||||
**达成条件**:
|
||||
- 线索完整度 ≥ 4
|
||||
- 心理压力 ≤ 3
|
||||
- 信任 ≥ 1
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选A(播放录像)→ 信任+1,线索+1
|
||||
2. 第二幕选A(质问周岚)→ 隐藏变量A,信任-2但保留线索
|
||||
3. 第三幕选A(共享给陈屿)→ 舆论+2,线索+1
|
||||
4. 第四幕(隐藏变量A)→ 回忆成功,线索+2
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动走进结局1
|
||||
|
||||
**结局关键画面**:摄像机录像 + 警察逮捕 + 雨中解脱。
|
||||
|
||||
### 结局2:沉默共谋
|
||||
**达成条件**:
|
||||
- 线索完整度 ≤ 2
|
||||
- 信任 ≥ 3
|
||||
- 隐藏变量 = B(周岚已删减片段)
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选B(不播放)→ 舆论+1,信任-1
|
||||
2. 第二幕选B(假装没发现)→ 隐藏变量B,信任+1,线索+1
|
||||
3. 第三幕选B(不共享)→ 信任+1
|
||||
4. 第四幕(隐藏变量B)→ 回忆失败,心理+2,但获得手机录音
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动进入结局2
|
||||
|
||||
**结局关键画面**:两人沉默坐在观众席 + 剧场拆除新闻 + 银戒指特写。
|
||||
|
||||
### 结局3:疯狂深渊
|
||||
**达成条件**:
|
||||
- 心理压力 ≥ 5
|
||||
- 且(线索完整度 ≤ 1 或 信任 ≤ -2)
|
||||
|
||||
**常见错误路径**:
|
||||
- 第一幕强制播放导致周岚对立
|
||||
- 第二幕质问但随后不断选择孤立周岚并独自行动
|
||||
- 第三、四、五幕持续累积心理压力
|
||||
|
||||
**结局关键画面**:地下室镜子碎裂 + 自残 + 废弃摄影机。
|
||||
|
||||
---
|
||||
|
||||
## 8. 输出/导出建议
|
||||
|
||||
### 可交互原型
|
||||
- 使用Twine或inklewriter快速搭建文本原型。变量系统可映射为代码变量(整数/布尔),每段标记节点ID。
|
||||
- 建议录制6个节点视频素材(每个选择点一个片段),配合选项UI进行演示。
|
||||
|
||||
### 分镜本(供导演/摄影)
|
||||
- 按照本交付稿中的分镜说明,整合为六幕的shot list,包含镜头编号、画面描述、景别、时长、人物、灯光示意图。
|
||||
- 图片提示词可直接输入Midjourney/DALL·E生成概念图用于提案。
|
||||
|
||||
### 演示稿(供投资人)
|
||||
- 制作一个6页PPT,每页对应一幕核心选择,附上生成的图像和变量影响图标。
|
||||
- 结尾页展示三条结局路线示意图,并标注制作成本估算(室内场景60%,室外20%,特效20%)。
|
||||
|
||||
### 后期制作建议
|
||||
- 隐藏变量在演出中通过微表情和剪辑节奏暗示(如质问时周岚的沉默时长差异)。
|
||||
- 心理压力变量可通过林栩的手持镜头晃动程度、环境音叠加来表现。
|
||||
- 三个结局需分别录制不同对白版本,但共享部分场景(如地下室)可复用。
|
||||
|
||||
---
|
||||
|
||||
## 附录:变量旗标表(表格形式)
|
||||
|
||||
| 变量/旗标 | 类型 | 含义 | 触发时机 | 影响范围 |
|
||||
|-----------|------|------|----------|----------|
|
||||
| 线索完整度 | 显性整数 | 已获得的物证和回忆数 | 每次获取物证或成功回忆 | 结局1门槛 |
|
||||
| 信任 | 显性整数 | 周岚的信任程度 | 对话选择、共享/保密行为 | 结局2门槛 |
|
||||
| 舆论热度 | 显性整数 | 媒体关注度 | 与陈屿互动、公开录像 | 可能迫使周岚提前行动 |
|
||||
| 心理压力 | 显性整数 | 主角精神稳定度 | 失败回忆、单独行动、冲突 | 结局3门槛 |
|
||||
| 删减片段(隐藏) | 布尔 | 第二幕结果 | 第二幕选择后锁定 | 第四幕是否解锁回忆 |
|
||||
|
||||
---
|
||||
|
||||
**交付稿结束。**
|
||||
本方案已覆盖用户要求的6幕结构、4个显性变量+1个隐藏变量、第二幕特定修改、3结局及其条件,并提供完整分镜与图像提示词。可据以进入制作准备阶段。
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": "completed",
|
||||
"kind": "interactive_film",
|
||||
"title": "回声剧场",
|
||||
"completedAt": "2026-06-24T15:59:12.549Z"
|
||||
}
|
||||
@@ -0,0 +1,356 @@
|
||||
# 回声剧场 互动影游方案
|
||||
|
||||
## 1. 项目简介 & 核心卖点
|
||||
|
||||
### 项目名称
|
||||
**回声剧场**
|
||||
|
||||
### 项目类型
|
||||
互动影游 / 交互叙事剧(6幕结构,3个最终结局)
|
||||
|
||||
### 目标受众
|
||||
悬疑推理爱好者、心理惊悚观众(20–45岁,偏好冷峻写实风格)
|
||||
|
||||
### 预算定位
|
||||
中低成本互动剧,以室内场景、双人对手戏为主,可搭配少量外景和回忆闪回。可适配真人实拍或高质量预渲染数字演员。
|
||||
|
||||
### 核心卖点
|
||||
- **心理博弈双线叙事**:表面是纪录片导演调查废弃剧场失踪案,暗线是主角自身被压抑的创伤记忆逐步浮现。
|
||||
- **隐藏变量驱动反转**:第二幕中周岚是否删减关键素材,将在第四幕影响主角能否解锁关键记忆,造成剧情走向断层式差异。
|
||||
- **多维度变量系统**:线索完整度、信任、舆论热度、心理压力四个显性变量,叠加不可见布尔变量,形成网状分支逻辑。
|
||||
- **三条截然不同的终局**:真相揭露、共谋沉默、精神崩溃,满足不同玩家心理倾向。
|
||||
|
||||
### 投资人价值
|
||||
- 模块化叙事引擎,后续可快速扩展新幕或新结局。
|
||||
- 高度依赖双人对白和微表情表演,对制作资源要求可控。
|
||||
- 变量系统简单透明,便于后期数据跟踪和用户行为分析。
|
||||
|
||||
---
|
||||
|
||||
## 2. 世界观与氛围设定
|
||||
|
||||
### 时代背景
|
||||
现代中国某三线小城,时间线为当下。故事主要发生在城中一座废弃十年的老式剧院——“回声剧场”。
|
||||
|
||||
### 空间氛围
|
||||
- **剧场内部**:剥落的暗红帷幔,断裂的观众座椅,舞台上方悬垂的残旧幕布缝隙透进冷白色天光。地面有积灰,空气中有霉味和铁锈味。走廊墙壁上贴着十年前的泛黄海报(名字被刻意刮去)。
|
||||
- **控制室**:二楼小隔间,堆满胶卷盒和旧录像带。仅有一盏工作灯,照亮调音台按键上的灰尘。
|
||||
- **后台化妆间**:布满裂纹的镜面,散落的假发和化妆品。墙角有一扇暗门(通向地下室)。
|
||||
- **地下室**:潮湿阴暗,只有一盏昏黄灯泡。地面有拖拽痕迹和干涸的深色污渍。
|
||||
|
||||
### 视觉风格
|
||||
冷色调为主(青灰、暗蓝、墨绿),高对比度灯光,大量阴影和镜面反射。摄影机常采用手持跟拍,模拟纪录片导演的主观视角。
|
||||
|
||||
### 声音设计
|
||||
重点使用环境音:滴水声、踩在木地板上的吱嘎声、远处传来的空音(仿佛剧场自身在低语)。关键选择时出现一种低频脉冲声。
|
||||
|
||||
### 时间流逝
|
||||
故事横跨三天。第一、二幕为第一天;第三、四幕为第二天;第五幕为第三天;第六幕为终局。
|
||||
|
||||
---
|
||||
|
||||
## 3. 角色档案
|
||||
|
||||
### 林栩(主角,28岁,纪录片导演)
|
||||
- **外表**:清瘦,常穿黑色夹克,戴一副银色圆框眼镜。眼神专注但偶有游离。
|
||||
- **性格**:理性、执着,有轻微强迫症。表面冷静,内里焦虑,尤其是在面对未完成的叙事时。
|
||||
- **背景**:独立纪录片导演,专拍都市消失空间。三年前女友苏晚在回声剧场附近失踪,他一直以拍摄为名私下调查。林栩本人曾有十年前的剧场记忆(童年时随父母在此看戏),但记忆模糊且伴有噩梦。
|
||||
- **动机**:找到苏晚或真相,同时疗愈自己的心理创伤。
|
||||
|
||||
### 周岚(32岁,剧场现任管理人)
|
||||
- **外表**:中等身材,穿旧式风衣,常戴一条灰色围巾。脸庞有细微疤痕,眼神谨慎而疲惫。
|
||||
- **性格**:内向、多疑,言语中有真诚也有保留。对剧场内的一切了如指掌,但拒绝谈论十年前。
|
||||
- **背景**:十年前是剧场的灯光师助理。据说苏晚失踪当晚她也在场,但声称自己当时在控制室睡着了。她保存了大量剧场档案和录影带,但有些已经被她自行销毁。
|
||||
- **隐藏面**:她与林栩的父亲(已故)之间存在某种联系;她认为沉默是最好的保护方式。
|
||||
|
||||
### 陈屿(35岁,本地电视台记者)
|
||||
- **外表**:西装革履,手里经常拿着录音笔和手机。笑容职业,眼神锐利。
|
||||
- **性格**:外向、世故,追求独家新闻,不介意使用灰色手段。
|
||||
- **背景**:十年前报道过苏晚失踪案,但官方结论为“自行离开”,他不服。如今听说林栩在拍纪录片,主动接近,希望挖掘旧料。
|
||||
- **动机**:重塑个人声誉,也可能知道更多内情。
|
||||
|
||||
### 苏晚(十年前失踪者,叙事中仅以回忆/照片出现)
|
||||
- **身份**:原剧场实习生,失踪时25岁。热爱表演,曾独自在地下室排练卡夫卡的《变形记》。
|
||||
- **与林栩关系**:三年前开始交往,但从未见面(网恋)。林栩收到她的最后一封邮件:“我知道回声剧场那天晚上发生了什么……我会录下来给你。”之后音讯全无。
|
||||
- **关键物证**:一段未公开的录像带,记录了她进入地下室前的最后画面。
|
||||
|
||||
---
|
||||
|
||||
## 4. 交互结构总图
|
||||
|
||||
### 6幕选择点与变量影响概览
|
||||
|
||||
| 幕次 | 关键场景 | 选择点 | 主要变量变化 | 解锁/限制 |
|
||||
|------|----------|--------|-------------|-----------|
|
||||
| 第一幕 | 初入剧场,在控制室发现旧录像带 | 是否当着周岚面播放? | 选项A:信任+1,线索完整度+1;选项B:舆论热度+1,信任-1 | 影响第二幕周岚的对话态度 |
|
||||
| **第二幕** | **观看录像时发现关键片段被剪辑痕迹** | **①「当场质问周岚」②「假装没发现,继续拍」** | **详见下方** | **隐藏变量方向判定** |
|
||||
| 第三幕 | 与陈屿合作,试图调取十年前警方案卷 | 是否共享录像带内容给陈屿? | 共享:舆论热度+2,信任-1;不共享:信任+1,线索完整度不变 | 影响第四幕能否获得警方协助 |
|
||||
| 第四幕 | 再次播放那盘录像带,试图回忆自己被压抑的片段 | 是否在回忆中按下“暂停”(依靠隐藏变量解锁) | 若隐藏变量为A(未删减):可获得关键记忆,线索完整度+2;若隐藏变量为B(已删减):回忆失败,心理压力+2 | 决定第五幕能否直接锁定地下室真相 |
|
||||
| 第五幕 | 地下室的最终对峙 | 是否独自进入? | 独自:心理压力+2,可能获得物证;带周岚:信任+1,但可能被误导 | 影响第六幕结局选择阀值 |
|
||||
| 第六幕 | 三选一结局判定 | 依据变量值自动进入对应结局 | 见“多结局路径” | |
|
||||
|
||||
### 第二幕详细变量变化
|
||||
|
||||
#### 选项A:「当场质问周岚」
|
||||
- 信任:-2
|
||||
- 舆论热度:+1
|
||||
- 线索完整度:不变
|
||||
- 隐藏变量方向:A(周岚未删除片段,但因此产生防御行为,后续记忆解锁成功率提高)
|
||||
|
||||
#### 选项B:「假装没发现,继续拍」
|
||||
- 信任:+1
|
||||
- 线索完整度:+1(因为继续拍摄获得了更多素材)
|
||||
- 舆论热度:不变
|
||||
- 隐藏变量方向:B(周岚暗中删减片段,此后林栩回忆时出现关键缺失,需要寻找替代证据)
|
||||
|
||||
### 3结局路线图(简化)
|
||||
|
||||
```
|
||||
第一幕选择 → 第二幕选择(隐藏变量A/B) → 第三幕选择 → 第四幕回忆成败 → 第五幕行为 → 第六幕判定
|
||||
|
||||
→ 若线索完整度 ≥4 且 心理压力 ≤3 且 信任 ≥1 → 结局1:真相大白
|
||||
→ 若线索完整度 ≤2 且 信任 ≥3 且 隐藏变量=B → 结局2:沉默共谋
|
||||
→ 若心理压力 ≥5 且 线索完整度 ≤1 或 信任 ≤ -2 → 结局3:疯狂深渊
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 分幕分镜说明(含图像生成提示词)
|
||||
|
||||
### 第一幕:进入剧场
|
||||
|
||||
**场景1-1** 外景,日暮。林栩站在回声剧场生锈的大铁门前,抬头看残破的霓虹招牌。 (远景,2秒)
|
||||
`Prompt: Abandoned theater facade at dusk, rusty neon sign "Echo Theater", peeling red paint, iron gate half open, lone man in black jacket standing facing the sign, overcast sky, cold blue color grade, photorealistic, 8k, cinema lens, shallow depth of field --ar 16:9`
|
||||
|
||||
**场景1-2** 内景,控制室。周岚坐在老旧工作台前,指间夹着一支未点燃的烟。桌上放着一盘标有“2014.11.07”的录像带。 (中景,3秒)
|
||||
`Prompt: Dimly lit control room, dusty mixing desk, a VHS tape labeled "2014.11.07" on table, a woman (Zhou Lan) in a grey coat sits sideways, her face half in shadow, smoky atmosphere, warm tungsten light from desk lamp, film grain, psychological thriller aesthetic --ar 16:9`
|
||||
|
||||
**场景1-3** 林栩拿起录像带,问周岚是否介意播放。周岚犹豫。这里是玩家选择点。 (近景,2秒)
|
||||
`Prompt: Close-up of a man's hand picking up a VHS tape, woman's face reflected in a dusty mirror behind, her eyes showing hesitation, shallow focus on tape label, cold blue and amber contrast, 35mm lens --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我想现在就看看。”(直接播放)
|
||||
- B: “先放回原处,我们聊聊剧场的历史。”(延迟播放)
|
||||
|
||||
**变量变化**:选项A → 信任+1,线索完整度+1;选项B → 舆论热度+1,信任-1
|
||||
|
||||
---
|
||||
|
||||
### 第二幕:剪辑的裂隙
|
||||
|
||||
**场景2-1** 录像正在播放。画面模糊,拍摄的是剧场舞台上一把空椅子。突然出现一段明显的跳帧——从第37分钟直接跳到42分钟。 (中景,3秒)
|
||||
`Prompt: Old CRT monitor playing grainy video, a stage chair alone, a sudden glitch and jump in the frame, glitching digital artifacts, reflection of two faces on the screen, tense mood, desaturated colors, VHS distortion effect --ar 16:9`
|
||||
|
||||
**场景2-2** 林栩的视线从屏幕移到周岚脸上。周岚面无表情,但手指微微颤抖。 (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's face, flickering light from the monitor across her cheek, her lips tight, a single bead of sweat on temple, micro expression of fear, cold key light, realistic skin texture, cinematic shadow --ar 16:9`
|
||||
|
||||
**玩家选择**(关键节点):
|
||||
- A:「当场质问周岚:这段素材为什么被剪掉了?」
|
||||
- B:「什么也没说,装作没注意到,继续按计划拍摄。」
|
||||
|
||||
**变量变化**:见前述第二幕规则。
|
||||
|
||||
---
|
||||
|
||||
### 第三幕:记者介入
|
||||
|
||||
**场景3-1** 咖啡馆。陈屿将一份复印卷宗推到林栩面前。 (双人中景,3秒)
|
||||
`Prompt: Coffee shop interior, two men sit across a table, one (Lin Xu) in black jacket, the other (Chen Yu) in suit, a folder of documents between them, neon light outside window casting purple hue, film noir composition, moody atmosphere --ar 16:9`
|
||||
|
||||
**场景3-2** 陈屿压低声音:“苏晚失踪前,周岚和她吵过一架。但警方没采信。” (近景,2秒)
|
||||
`Prompt: Close-up of Chen Yu's face, intense whisper, dramatic side lighting, shadow falling across his eyes, background blurred with blurred text on folder, thriller tone --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “把录像带剪切片段的内容告诉陈屿,希望他帮我查周岚的背景。”(共享)
|
||||
- B: “不用了,我自己会处理好。”(不共享)
|
||||
|
||||
**变量变化**:
|
||||
- 共享:舆论热度+2,信任-1,线索完整度+1(获得陈屿提供的警方扫描件)
|
||||
- 不共享:信任+1,线索完整度不变,心理压力+1(独自承担压力)
|
||||
|
||||
---
|
||||
|
||||
### 第四幕:碎片记忆
|
||||
|
||||
**场景4-1** 深夜,林栩独自在剧场控制室再次播放那盘录像带,盯着跳帧处试图回忆。 (近景,3秒)
|
||||
`Prompt: Dark control room, man sits alone watching CRT monitor, fingers pressing temples in concentration, screen glitching in slow motion, dust particles in the beam of desk lamp, surreal atmosphere, psychological tension --ar 16:9`
|
||||
|
||||
**场景4-2** 回忆闪现:林栩看到自己儿时站在同一个剧场舞台上,一个模糊女人身影(疑似苏晚?母亲?)对他伸手。画面开始断裂。 (闪回,2秒)
|
||||
`Prompt: Memory flashback, young boy on a stage, woman silhouette reaching out to him, theater seats empty, hazy golden light, overlapping double exposure effect, nostalgic but eerie, film grain --ar 16:9`
|
||||
|
||||
**隐藏变量判定**:
|
||||
- 若第二幕为选项A(质问周岚,隐藏变量A):回忆清晰度过关,林栩想起那个女人说了“你会知道的” → 线索完整度+2,心理压力+1
|
||||
- 若第二幕为选项B(假装没发现,隐藏变量B):回忆中断,林栩头疼欲裂,无法捕捉关键信息 → 心理压力+2,线索完整度不变;但触发另一条路线:他发现自己手机里有一段半夜自动录制的录音(暗示他潜意识曾到过地下室)
|
||||
|
||||
**玩家选择**(无论隐藏变量如何):
|
||||
- A: “我相信这个回忆,必须立刻去地下室验证。”
|
||||
- B: “不,我不能再失控,先回酒店冷静一下。”
|
||||
|
||||
**变量变化**:
|
||||
- 选择A:心理压力+2,但如果线索完整度≥3则进入有利路径;否则陷入危险。
|
||||
- 选择B:心理压力-1,但线索完整度不变,进度推迟。
|
||||
|
||||
---
|
||||
|
||||
### 第五幕:地下室之门
|
||||
|
||||
**场景5-1** 地下室入口,铁门半掩,缝隙透出微弱光线。林栩手持手电,周岚站在身后不远处。 (中景,3秒)
|
||||
`Prompt: Heavy metal door ajar, damp stone stairs descending into darkness, hand flashlight beam cutting through dust motes, woman standing in background, face hidden in shadow, claustrophobic, high contrast black and white aesthetic approach, vertical composition --ar 9:16`
|
||||
|
||||
**场景5-2** 周岚低声说:“你确定要下去吗?有些东西……你知道了会更痛苦。” (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's eyes, tears barely suppressed, a hand stretching out to stop someone, backlight creating rim light on her hair, deep shadows, emotional yet cold --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我一个人下去,你在这里等我。”
|
||||
- B: “你和我一起下去,把话说清楚。”
|
||||
|
||||
**变量变化**:
|
||||
- 单独下去:心理压力+2,可以触发隐藏物件(苏晚的日记)→ 线索完整度+2,但信任-2(周岚感到被排斥)
|
||||
- 一起下去:信任+1,但周岚会选择性引导,漏掉关键物证 → 线索完整度+1
|
||||
|
||||
---
|
||||
|
||||
### 第六幕:三重终局
|
||||
|
||||
**场景6-1** 根据前五幕累积的变量值,自动进入以下三个结局之一。每个结局有独立的分镜。
|
||||
|
||||
#### 结局1:真相大白(条件:线索完整度≥4,心理压力≤3,信任≥1)
|
||||
|
||||
**场景6-1A** 地下室深处,林栩找到隐藏隔板后的一台老旧摄像机,里面存有完整的原始录像——苏晚死前录下的声明:她发现了周岚十年前曾包庇过一起演出事故,周岚的父亲(老经理)因此自杀。周岚为了掩盖真相,在苏晚录下证据后袭击了她。但录像显示苏晚只是受伤昏迷,被周岚藏匿在另一处废弃建筑内,最终因失救而死。 (中近景,5秒)
|
||||
`Prompt: Underground hidden compartment, an old camcorder with red recording light on, played back on a small screen showing a woman (Su Wan) speaking directly to camera, tears and desperation, dust particles floating, cold blue light from the screen illuminating the viewer's face, revelation moment, dramatic --ar 16:9`
|
||||
|
||||
**场景6-1B** 林栩走出地下室,沉默地报警。周岚在剧场门口被两名便衣警察带走。她回头看了一眼林栩,眼中既有解脱也有愧疚。 (全景,3秒)
|
||||
`Prompt: Wide shot of theater exit, police car in background, Zhou Lan being escorted in handcuffs, Lin Xu standing still in the foreground, rain starting to fall, melancholic but just, cinematic lighting, half yellow streetlight half blue hour --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “真相永远有回声。我终于听懂了她的最后一句话:回声剧场,不是发出声音的地方,而是听到所有声音的地方。”
|
||||
|
||||
#### 结局2:沉默共谋(条件:线索完整度≤2,信任≥3,隐藏变量=B)
|
||||
|
||||
**场景6-2A** 林栩和周岚坐在剧场观众席中央,面前放着那盘被删减后的录像带。周岚坦白了一切,但恳求林栩不要公开:“你爱的人已经离去,公开只会毁掉更多人的平静。我可以给你你父亲留下的另一份遗物——那会解答你的童年噩梦。”林栩犹豫。 (双人近景,4秒)
|
||||
`Prompt: Two figures sitting in the middle row of an empty theater, a VHS tape on the floor between them, warm amber light from stage spill, both faces half lit, heavy atmosphere, secret pact, cinematic composition, muted colors --ar 16:9`
|
||||
|
||||
**场景6-2B** 林栩最终选择和周岚一起销毁所有证据,然后各自离开。剧场被挂牌出售。一个月后,陈屿在电视上看到一条新闻:“回声剧场因年久失修发生坍塌,无人伤亡。” 林栩在远方城市的一个公寓里关掉电视,手里握着一枚沾满灰尘的银戒指——那是苏晚曾提到过的祖传物件。 (远景,4秒)
|
||||
`Prompt: Newspaper headline "Echo Theater demolished due to structural damage", a man sitting alone in a dim apartment, holding a silver ring, rain on window, reflection of city lights, melancholic, neo-noir aesthetic, 4k --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有时候,最响亮的抗议就是不说一个字。我选择了记忆的缺席,换来了余生的安宁,但每个雨夜,我都觉得剧场还在我心里低语。”
|
||||
|
||||
#### 结局3:疯狂深渊(条件:心理压力≥5,且(线索完整度≤1 或 信任≤-2))
|
||||
|
||||
**场景6-3A** 在独自下到地下室的过程中,林栩的幻觉越来越严重。他看到自己童年时站在舞台上的画面,也看到苏晚在角落里的模糊身影。他冲向一片黑暗试图抓住她,却撞碎了地下室的旧镜子,玻璃碎片划伤手臂。鲜血滴落,他瘫坐在瓦砾中,开始大笑,精神彻底崩溃。 (中近景,4秒)
|
||||
`Prompt: Dark basement, shattered mirror pieces covering floor, a man kneeling among glass shards, blood trickling down his arm, mad laughter expression, distorted shadows on walls, surreal psychological horror style, high contrast, red accent light from a flickering bulb, claustrophobic --ar 16:9`
|
||||
|
||||
**场景6-3B** 第二天,陈屿在剧场外发现林栩的摄影机被扔在门口。画面最后记录的是——林栩对着镜头说:“他们都想让我闭嘴。但回声,永远不会停。” 随后影像中断。陈屿报警,警方在地下室发现林栩昏迷,但没有任何物证。案件被定性为“幻觉性自残”。 (闪回式剪辑)
|
||||
`Prompt: Broken camera abandoned on theater steps, snow-like static on its small screen, police tape in background, cloudy sky, desaturated, documentary style, finality --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有些记忆不是你的,而是剧场借给你的。等你试图还回去的时候,它已经连你的灵魂一起收走了。”
|
||||
|
||||
---
|
||||
|
||||
## 6. 变量系统说明
|
||||
|
||||
### 6.1 显性变量(玩家可见,整数,范围 -5 到 +5)
|
||||
|
||||
| 变量名 | 含义 | 初始值 | 变化来源 | 关键影响 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 线索完整度 | 记录玩家收集到的和还原的真相碎片数量 | 0 | 各幕选择中获取物证、回忆成功、与角色交换信息 | ≥4 可解锁结局1;≤1 容易进入结局3 |
|
||||
| 信任 | 周岚对林栩的信任程度 | 1 | 对话选择、是否共享隐私、是否尊重她的空间 | ≥3 可解锁结局2的和平路线;≤-2 加速进入结局3 |
|
||||
| 舆论热度 | 外界对案件的关注度 | 0 | 是否向陈屿透露、是否公开录像 | ≥3 会导致某些角色被迫行动(如周岚销毁剩余证据) |
|
||||
| 心理压力 | 林栩的精神状态 | 0 | 多次回忆失败、暴力冲突、孤独探索 | ≥5 触发疯狂结局;≤3 才能保持理性判断 |
|
||||
|
||||
### 6.2 隐藏变量(玩家不可见)
|
||||
|
||||
| 变量名 | 类型 | 默认值 | 设定时机 | 影响范围 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 周岚是否剪掉关键片段 | 布尔值 | 未定义 | 第二幕选择后确定 | 方向A(质问→未删减):第四幕回忆成功,主角直接获得关键线索;地下室内周岚可能会临时阻挡|
|
||||
| | | | | 方向B(假装未发现→已删减):第四幕回忆失败,但触发另一个隐藏路径(手机录音) |
|
||||
|
||||
### 6.3 变量控制原则
|
||||
- 所有变量仅在剧情分支时进行增减,不涉及战斗或RPG数值。
|
||||
- 结局判定采用“门槛检查”,满足其中一条即可进入对应结局。
|
||||
- 若同时满足多个结局条件,优先级:结局1 > 结局2 > 结局3(即更容易走向和解版本)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 多结局路径详细说明
|
||||
|
||||
### 结局1:真相大白
|
||||
**达成条件**:
|
||||
- 线索完整度 ≥ 4
|
||||
- 心理压力 ≤ 3
|
||||
- 信任 ≥ 1
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选A(播放录像)→ 信任+1,线索+1
|
||||
2. 第二幕选A(质问周岚)→ 隐藏变量A,信任-2但保留线索
|
||||
3. 第三幕选A(共享给陈屿)→ 舆论+2,线索+1
|
||||
4. 第四幕(隐藏变量A)→ 回忆成功,线索+2
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动走进结局1
|
||||
|
||||
**结局关键画面**:摄像机录像 + 警察逮捕 + 雨中解脱。
|
||||
|
||||
### 结局2:沉默共谋
|
||||
**达成条件**:
|
||||
- 线索完整度 ≤ 2
|
||||
- 信任 ≥ 3
|
||||
- 隐藏变量 = B(周岚已删减片段)
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选B(不播放)→ 舆论+1,信任-1
|
||||
2. 第二幕选B(假装没发现)→ 隐藏变量B,信任+1,线索+1
|
||||
3. 第三幕选B(不共享)→ 信任+1
|
||||
4. 第四幕(隐藏变量B)→ 回忆失败,心理+2,但获得手机录音
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动进入结局2
|
||||
|
||||
**结局关键画面**:两人沉默坐在观众席 + 剧场拆除新闻 + 银戒指特写。
|
||||
|
||||
### 结局3:疯狂深渊
|
||||
**达成条件**:
|
||||
- 心理压力 ≥ 5
|
||||
- 且(线索完整度 ≤ 1 或 信任 ≤ -2)
|
||||
|
||||
**常见错误路径**:
|
||||
- 第一幕强制播放导致周岚对立
|
||||
- 第二幕质问但随后不断选择孤立周岚并独自行动
|
||||
- 第三、四、五幕持续累积心理压力
|
||||
|
||||
**结局关键画面**:地下室镜子碎裂 + 自残 + 废弃摄影机。
|
||||
|
||||
---
|
||||
|
||||
## 8. 输出/导出建议
|
||||
|
||||
### 可交互原型
|
||||
- 使用Twine或inklewriter快速搭建文本原型。变量系统可映射为代码变量(整数/布尔),每段标记节点ID。
|
||||
- 建议录制6个节点视频素材(每个选择点一个片段),配合选项UI进行演示。
|
||||
|
||||
### 分镜本(供导演/摄影)
|
||||
- 按照本交付稿中的分镜说明,整合为六幕的shot list,包含镜头编号、画面描述、景别、时长、人物、灯光示意图。
|
||||
- 图片提示词可直接输入Midjourney/DALL·E生成概念图用于提案。
|
||||
|
||||
### 演示稿(供投资人)
|
||||
- 制作一个6页PPT,每页对应一幕核心选择,附上生成的图像和变量影响图标。
|
||||
- 结尾页展示三条结局路线示意图,并标注制作成本估算(室内场景60%,室外20%,特效20%)。
|
||||
|
||||
### 后期制作建议
|
||||
- 隐藏变量在演出中通过微表情和剪辑节奏暗示(如质问时周岚的沉默时长差异)。
|
||||
- 心理压力变量可通过林栩的手持镜头晃动程度、环境音叠加来表现。
|
||||
- 三个结局需分别录制不同对白版本,但共享部分场景(如地下室)可复用。
|
||||
|
||||
---
|
||||
|
||||
## 附录:变量旗标表(表格形式)
|
||||
|
||||
| 变量/旗标 | 类型 | 含义 | 触发时机 | 影响范围 |
|
||||
|-----------|------|------|----------|----------|
|
||||
| 线索完整度 | 显性整数 | 已获得的物证和回忆数 | 每次获取物证或成功回忆 | 结局1门槛 |
|
||||
| 信任 | 显性整数 | 周岚的信任程度 | 对话选择、共享/保密行为 | 结局2门槛 |
|
||||
| 舆论热度 | 显性整数 | 媒体关注度 | 与陈屿互动、公开录像 | 可能迫使周岚提前行动 |
|
||||
| 心理压力 | 显性整数 | 主角精神稳定度 | 失败回忆、单独行动、冲突 | 结局3门槛 |
|
||||
| 删减片段(隐藏) | 布尔 | 第二幕结果 | 第二幕选择后锁定 | 第四幕是否解锁回忆 |
|
||||
|
||||
---
|
||||
|
||||
**交付稿结束。**
|
||||
本方案已覆盖用户要求的6幕结构、4个显性变量+1个隐藏变量、第二幕特定修改、3结局及其条件,并提供完整分镜与图像提示词。可据以进入制作准备阶段。
|
||||
@@ -0,0 +1,356 @@
|
||||
# 回声剧场 互动影游方案
|
||||
|
||||
## 1. 项目简介 & 核心卖点
|
||||
|
||||
### 项目名称
|
||||
**回声剧场**
|
||||
|
||||
### 项目类型
|
||||
互动影游 / 交互叙事剧(6幕结构,3个最终结局)
|
||||
|
||||
### 目标受众
|
||||
悬疑推理爱好者、心理惊悚观众(20–45岁,偏好冷峻写实风格)
|
||||
|
||||
### 预算定位
|
||||
中低成本互动剧,以室内场景、双人对手戏为主,可搭配少量外景和回忆闪回。可适配真人实拍或高质量预渲染数字演员。
|
||||
|
||||
### 核心卖点
|
||||
- **心理博弈双线叙事**:表面是纪录片导演调查废弃剧场失踪案,暗线是主角自身被压抑的创伤记忆逐步浮现。
|
||||
- **隐藏变量驱动反转**:第二幕中周岚是否删减关键素材,将在第四幕影响主角能否解锁关键记忆,造成剧情走向断层式差异。
|
||||
- **多维度变量系统**:线索完整度、信任、舆论热度、心理压力四个显性变量,叠加不可见布尔变量,形成网状分支逻辑。
|
||||
- **三条截然不同的终局**:真相揭露、共谋沉默、精神崩溃,满足不同玩家心理倾向。
|
||||
|
||||
### 投资人价值
|
||||
- 模块化叙事引擎,后续可快速扩展新幕或新结局。
|
||||
- 高度依赖双人对白和微表情表演,对制作资源要求可控。
|
||||
- 变量系统简单透明,便于后期数据跟踪和用户行为分析。
|
||||
|
||||
---
|
||||
|
||||
## 2. 世界观与氛围设定
|
||||
|
||||
### 时代背景
|
||||
现代中国某三线小城,时间线为当下。故事主要发生在城中一座废弃十年的老式剧院——“回声剧场”。
|
||||
|
||||
### 空间氛围
|
||||
- **剧场内部**:剥落的暗红帷幔,断裂的观众座椅,舞台上方悬垂的残旧幕布缝隙透进冷白色天光。地面有积灰,空气中有霉味和铁锈味。走廊墙壁上贴着十年前的泛黄海报(名字被刻意刮去)。
|
||||
- **控制室**:二楼小隔间,堆满胶卷盒和旧录像带。仅有一盏工作灯,照亮调音台按键上的灰尘。
|
||||
- **后台化妆间**:布满裂纹的镜面,散落的假发和化妆品。墙角有一扇暗门(通向地下室)。
|
||||
- **地下室**:潮湿阴暗,只有一盏昏黄灯泡。地面有拖拽痕迹和干涸的深色污渍。
|
||||
|
||||
### 视觉风格
|
||||
冷色调为主(青灰、暗蓝、墨绿),高对比度灯光,大量阴影和镜面反射。摄影机常采用手持跟拍,模拟纪录片导演的主观视角。
|
||||
|
||||
### 声音设计
|
||||
重点使用环境音:滴水声、踩在木地板上的吱嘎声、远处传来的空音(仿佛剧场自身在低语)。关键选择时出现一种低频脉冲声。
|
||||
|
||||
### 时间流逝
|
||||
故事横跨三天。第一、二幕为第一天;第三、四幕为第二天;第五幕为第三天;第六幕为终局。
|
||||
|
||||
---
|
||||
|
||||
## 3. 角色档案
|
||||
|
||||
### 林栩(主角,28岁,纪录片导演)
|
||||
- **外表**:清瘦,常穿黑色夹克,戴一副银色圆框眼镜。眼神专注但偶有游离。
|
||||
- **性格**:理性、执着,有轻微强迫症。表面冷静,内里焦虑,尤其是在面对未完成的叙事时。
|
||||
- **背景**:独立纪录片导演,专拍都市消失空间。三年前女友苏晚在回声剧场附近失踪,他一直以拍摄为名私下调查。林栩本人曾有十年前的剧场记忆(童年时随父母在此看戏),但记忆模糊且伴有噩梦。
|
||||
- **动机**:找到苏晚或真相,同时疗愈自己的心理创伤。
|
||||
|
||||
### 周岚(32岁,剧场现任管理人)
|
||||
- **外表**:中等身材,穿旧式风衣,常戴一条灰色围巾。脸庞有细微疤痕,眼神谨慎而疲惫。
|
||||
- **性格**:内向、多疑,言语中有真诚也有保留。对剧场内的一切了如指掌,但拒绝谈论十年前。
|
||||
- **背景**:十年前是剧场的灯光师助理。据说苏晚失踪当晚她也在场,但声称自己当时在控制室睡着了。她保存了大量剧场档案和录影带,但有些已经被她自行销毁。
|
||||
- **隐藏面**:她与林栩的父亲(已故)之间存在某种联系;她认为沉默是最好的保护方式。
|
||||
|
||||
### 陈屿(35岁,本地电视台记者)
|
||||
- **外表**:西装革履,手里经常拿着录音笔和手机。笑容职业,眼神锐利。
|
||||
- **性格**:外向、世故,追求独家新闻,不介意使用灰色手段。
|
||||
- **背景**:十年前报道过苏晚失踪案,但官方结论为“自行离开”,他不服。如今听说林栩在拍纪录片,主动接近,希望挖掘旧料。
|
||||
- **动机**:重塑个人声誉,也可能知道更多内情。
|
||||
|
||||
### 苏晚(十年前失踪者,叙事中仅以回忆/照片出现)
|
||||
- **身份**:原剧场实习生,失踪时25岁。热爱表演,曾独自在地下室排练卡夫卡的《变形记》。
|
||||
- **与林栩关系**:三年前开始交往,但从未见面(网恋)。林栩收到她的最后一封邮件:“我知道回声剧场那天晚上发生了什么……我会录下来给你。”之后音讯全无。
|
||||
- **关键物证**:一段未公开的录像带,记录了她进入地下室前的最后画面。
|
||||
|
||||
---
|
||||
|
||||
## 4. 交互结构总图
|
||||
|
||||
### 6幕选择点与变量影响概览
|
||||
|
||||
| 幕次 | 关键场景 | 选择点 | 主要变量变化 | 解锁/限制 |
|
||||
|------|----------|--------|-------------|-----------|
|
||||
| 第一幕 | 初入剧场,在控制室发现旧录像带 | 是否当着周岚面播放? | 选项A:信任+1,线索完整度+1;选项B:舆论热度+1,信任-1 | 影响第二幕周岚的对话态度 |
|
||||
| **第二幕** | **观看录像时发现关键片段被剪辑痕迹** | **①「当场质问周岚」②「假装没发现,继续拍」** | **详见下方** | **隐藏变量方向判定** |
|
||||
| 第三幕 | 与陈屿合作,试图调取十年前警方案卷 | 是否共享录像带内容给陈屿? | 共享:舆论热度+2,信任-1;不共享:信任+1,线索完整度不变 | 影响第四幕能否获得警方协助 |
|
||||
| 第四幕 | 再次播放那盘录像带,试图回忆自己被压抑的片段 | 是否在回忆中按下“暂停”(依靠隐藏变量解锁) | 若隐藏变量为A(未删减):可获得关键记忆,线索完整度+2;若隐藏变量为B(已删减):回忆失败,心理压力+2 | 决定第五幕能否直接锁定地下室真相 |
|
||||
| 第五幕 | 地下室的最终对峙 | 是否独自进入? | 独自:心理压力+2,可能获得物证;带周岚:信任+1,但可能被误导 | 影响第六幕结局选择阀值 |
|
||||
| 第六幕 | 三选一结局判定 | 依据变量值自动进入对应结局 | 见“多结局路径” | |
|
||||
|
||||
### 第二幕详细变量变化
|
||||
|
||||
#### 选项A:「当场质问周岚」
|
||||
- 信任:-2
|
||||
- 舆论热度:+1
|
||||
- 线索完整度:不变
|
||||
- 隐藏变量方向:A(周岚未删除片段,但因此产生防御行为,后续记忆解锁成功率提高)
|
||||
|
||||
#### 选项B:「假装没发现,继续拍」
|
||||
- 信任:+1
|
||||
- 线索完整度:+1(因为继续拍摄获得了更多素材)
|
||||
- 舆论热度:不变
|
||||
- 隐藏变量方向:B(周岚暗中删减片段,此后林栩回忆时出现关键缺失,需要寻找替代证据)
|
||||
|
||||
### 3结局路线图(简化)
|
||||
|
||||
```
|
||||
第一幕选择 → 第二幕选择(隐藏变量A/B) → 第三幕选择 → 第四幕回忆成败 → 第五幕行为 → 第六幕判定
|
||||
|
||||
→ 若线索完整度 ≥4 且 心理压力 ≤3 且 信任 ≥1 → 结局1:真相大白
|
||||
→ 若线索完整度 ≤2 且 信任 ≥3 且 隐藏变量=B → 结局2:沉默共谋
|
||||
→ 若心理压力 ≥5 且 线索完整度 ≤1 或 信任 ≤ -2 → 结局3:疯狂深渊
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 分幕分镜说明(含图像生成提示词)
|
||||
|
||||
### 第一幕:进入剧场
|
||||
|
||||
**场景1-1** 外景,日暮。林栩站在回声剧场生锈的大铁门前,抬头看残破的霓虹招牌。 (远景,2秒)
|
||||
`Prompt: Abandoned theater facade at dusk, rusty neon sign "Echo Theater", peeling red paint, iron gate half open, lone man in black jacket standing facing the sign, overcast sky, cold blue color grade, photorealistic, 8k, cinema lens, shallow depth of field --ar 16:9`
|
||||
|
||||
**场景1-2** 内景,控制室。周岚坐在老旧工作台前,指间夹着一支未点燃的烟。桌上放着一盘标有“2014.11.07”的录像带。 (中景,3秒)
|
||||
`Prompt: Dimly lit control room, dusty mixing desk, a VHS tape labeled "2014.11.07" on table, a woman (Zhou Lan) in a grey coat sits sideways, her face half in shadow, smoky atmosphere, warm tungsten light from desk lamp, film grain, psychological thriller aesthetic --ar 16:9`
|
||||
|
||||
**场景1-3** 林栩拿起录像带,问周岚是否介意播放。周岚犹豫。这里是玩家选择点。 (近景,2秒)
|
||||
`Prompt: Close-up of a man's hand picking up a VHS tape, woman's face reflected in a dusty mirror behind, her eyes showing hesitation, shallow focus on tape label, cold blue and amber contrast, 35mm lens --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我想现在就看看。”(直接播放)
|
||||
- B: “先放回原处,我们聊聊剧场的历史。”(延迟播放)
|
||||
|
||||
**变量变化**:选项A → 信任+1,线索完整度+1;选项B → 舆论热度+1,信任-1
|
||||
|
||||
---
|
||||
|
||||
### 第二幕:剪辑的裂隙
|
||||
|
||||
**场景2-1** 录像正在播放。画面模糊,拍摄的是剧场舞台上一把空椅子。突然出现一段明显的跳帧——从第37分钟直接跳到42分钟。 (中景,3秒)
|
||||
`Prompt: Old CRT monitor playing grainy video, a stage chair alone, a sudden glitch and jump in the frame, glitching digital artifacts, reflection of two faces on the screen, tense mood, desaturated colors, VHS distortion effect --ar 16:9`
|
||||
|
||||
**场景2-2** 林栩的视线从屏幕移到周岚脸上。周岚面无表情,但手指微微颤抖。 (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's face, flickering light from the monitor across her cheek, her lips tight, a single bead of sweat on temple, micro expression of fear, cold key light, realistic skin texture, cinematic shadow --ar 16:9`
|
||||
|
||||
**玩家选择**(关键节点):
|
||||
- A:「当场质问周岚:这段素材为什么被剪掉了?」
|
||||
- B:「什么也没说,装作没注意到,继续按计划拍摄。」
|
||||
|
||||
**变量变化**:见前述第二幕规则。
|
||||
|
||||
---
|
||||
|
||||
### 第三幕:记者介入
|
||||
|
||||
**场景3-1** 咖啡馆。陈屿将一份复印卷宗推到林栩面前。 (双人中景,3秒)
|
||||
`Prompt: Coffee shop interior, two men sit across a table, one (Lin Xu) in black jacket, the other (Chen Yu) in suit, a folder of documents between them, neon light outside window casting purple hue, film noir composition, moody atmosphere --ar 16:9`
|
||||
|
||||
**场景3-2** 陈屿压低声音:“苏晚失踪前,周岚和她吵过一架。但警方没采信。” (近景,2秒)
|
||||
`Prompt: Close-up of Chen Yu's face, intense whisper, dramatic side lighting, shadow falling across his eyes, background blurred with blurred text on folder, thriller tone --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “把录像带剪切片段的内容告诉陈屿,希望他帮我查周岚的背景。”(共享)
|
||||
- B: “不用了,我自己会处理好。”(不共享)
|
||||
|
||||
**变量变化**:
|
||||
- 共享:舆论热度+2,信任-1,线索完整度+1(获得陈屿提供的警方扫描件)
|
||||
- 不共享:信任+1,线索完整度不变,心理压力+1(独自承担压力)
|
||||
|
||||
---
|
||||
|
||||
### 第四幕:碎片记忆
|
||||
|
||||
**场景4-1** 深夜,林栩独自在剧场控制室再次播放那盘录像带,盯着跳帧处试图回忆。 (近景,3秒)
|
||||
`Prompt: Dark control room, man sits alone watching CRT monitor, fingers pressing temples in concentration, screen glitching in slow motion, dust particles in the beam of desk lamp, surreal atmosphere, psychological tension --ar 16:9`
|
||||
|
||||
**场景4-2** 回忆闪现:林栩看到自己儿时站在同一个剧场舞台上,一个模糊女人身影(疑似苏晚?母亲?)对他伸手。画面开始断裂。 (闪回,2秒)
|
||||
`Prompt: Memory flashback, young boy on a stage, woman silhouette reaching out to him, theater seats empty, hazy golden light, overlapping double exposure effect, nostalgic but eerie, film grain --ar 16:9`
|
||||
|
||||
**隐藏变量判定**:
|
||||
- 若第二幕为选项A(质问周岚,隐藏变量A):回忆清晰度过关,林栩想起那个女人说了“你会知道的” → 线索完整度+2,心理压力+1
|
||||
- 若第二幕为选项B(假装没发现,隐藏变量B):回忆中断,林栩头疼欲裂,无法捕捉关键信息 → 心理压力+2,线索完整度不变;但触发另一条路线:他发现自己手机里有一段半夜自动录制的录音(暗示他潜意识曾到过地下室)
|
||||
|
||||
**玩家选择**(无论隐藏变量如何):
|
||||
- A: “我相信这个回忆,必须立刻去地下室验证。”
|
||||
- B: “不,我不能再失控,先回酒店冷静一下。”
|
||||
|
||||
**变量变化**:
|
||||
- 选择A:心理压力+2,但如果线索完整度≥3则进入有利路径;否则陷入危险。
|
||||
- 选择B:心理压力-1,但线索完整度不变,进度推迟。
|
||||
|
||||
---
|
||||
|
||||
### 第五幕:地下室之门
|
||||
|
||||
**场景5-1** 地下室入口,铁门半掩,缝隙透出微弱光线。林栩手持手电,周岚站在身后不远处。 (中景,3秒)
|
||||
`Prompt: Heavy metal door ajar, damp stone stairs descending into darkness, hand flashlight beam cutting through dust motes, woman standing in background, face hidden in shadow, claustrophobic, high contrast black and white aesthetic approach, vertical composition --ar 9:16`
|
||||
|
||||
**场景5-2** 周岚低声说:“你确定要下去吗?有些东西……你知道了会更痛苦。” (特写,2秒)
|
||||
`Prompt: Extreme close-up of Zhou Lan's eyes, tears barely suppressed, a hand stretching out to stop someone, backlight creating rim light on her hair, deep shadows, emotional yet cold --ar 16:9`
|
||||
|
||||
**玩家选择**:
|
||||
- A: “我一个人下去,你在这里等我。”
|
||||
- B: “你和我一起下去,把话说清楚。”
|
||||
|
||||
**变量变化**:
|
||||
- 单独下去:心理压力+2,可以触发隐藏物件(苏晚的日记)→ 线索完整度+2,但信任-2(周岚感到被排斥)
|
||||
- 一起下去:信任+1,但周岚会选择性引导,漏掉关键物证 → 线索完整度+1
|
||||
|
||||
---
|
||||
|
||||
### 第六幕:三重终局
|
||||
|
||||
**场景6-1** 根据前五幕累积的变量值,自动进入以下三个结局之一。每个结局有独立的分镜。
|
||||
|
||||
#### 结局1:真相大白(条件:线索完整度≥4,心理压力≤3,信任≥1)
|
||||
|
||||
**场景6-1A** 地下室深处,林栩找到隐藏隔板后的一台老旧摄像机,里面存有完整的原始录像——苏晚死前录下的声明:她发现了周岚十年前曾包庇过一起演出事故,周岚的父亲(老经理)因此自杀。周岚为了掩盖真相,在苏晚录下证据后袭击了她。但录像显示苏晚只是受伤昏迷,被周岚藏匿在另一处废弃建筑内,最终因失救而死。 (中近景,5秒)
|
||||
`Prompt: Underground hidden compartment, an old camcorder with red recording light on, played back on a small screen showing a woman (Su Wan) speaking directly to camera, tears and desperation, dust particles floating, cold blue light from the screen illuminating the viewer's face, revelation moment, dramatic --ar 16:9`
|
||||
|
||||
**场景6-1B** 林栩走出地下室,沉默地报警。周岚在剧场门口被两名便衣警察带走。她回头看了一眼林栩,眼中既有解脱也有愧疚。 (全景,3秒)
|
||||
`Prompt: Wide shot of theater exit, police car in background, Zhou Lan being escorted in handcuffs, Lin Xu standing still in the foreground, rain starting to fall, melancholic but just, cinematic lighting, half yellow streetlight half blue hour --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “真相永远有回声。我终于听懂了她的最后一句话:回声剧场,不是发出声音的地方,而是听到所有声音的地方。”
|
||||
|
||||
#### 结局2:沉默共谋(条件:线索完整度≤2,信任≥3,隐藏变量=B)
|
||||
|
||||
**场景6-2A** 林栩和周岚坐在剧场观众席中央,面前放着那盘被删减后的录像带。周岚坦白了一切,但恳求林栩不要公开:“你爱的人已经离去,公开只会毁掉更多人的平静。我可以给你你父亲留下的另一份遗物——那会解答你的童年噩梦。”林栩犹豫。 (双人近景,4秒)
|
||||
`Prompt: Two figures sitting in the middle row of an empty theater, a VHS tape on the floor between them, warm amber light from stage spill, both faces half lit, heavy atmosphere, secret pact, cinematic composition, muted colors --ar 16:9`
|
||||
|
||||
**场景6-2B** 林栩最终选择和周岚一起销毁所有证据,然后各自离开。剧场被挂牌出售。一个月后,陈屿在电视上看到一条新闻:“回声剧场因年久失修发生坍塌,无人伤亡。” 林栩在远方城市的一个公寓里关掉电视,手里握着一枚沾满灰尘的银戒指——那是苏晚曾提到过的祖传物件。 (远景,4秒)
|
||||
`Prompt: Newspaper headline "Echo Theater demolished due to structural damage", a man sitting alone in a dim apartment, holding a silver ring, rain on window, reflection of city lights, melancholic, neo-noir aesthetic, 4k --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有时候,最响亮的抗议就是不说一个字。我选择了记忆的缺席,换来了余生的安宁,但每个雨夜,我都觉得剧场还在我心里低语。”
|
||||
|
||||
#### 结局3:疯狂深渊(条件:心理压力≥5,且(线索完整度≤1 或 信任≤-2))
|
||||
|
||||
**场景6-3A** 在独自下到地下室的过程中,林栩的幻觉越来越严重。他看到自己童年时站在舞台上的画面,也看到苏晚在角落里的模糊身影。他冲向一片黑暗试图抓住她,却撞碎了地下室的旧镜子,玻璃碎片划伤手臂。鲜血滴落,他瘫坐在瓦砾中,开始大笑,精神彻底崩溃。 (中近景,4秒)
|
||||
`Prompt: Dark basement, shattered mirror pieces covering floor, a man kneeling among glass shards, blood trickling down his arm, mad laughter expression, distorted shadows on walls, surreal psychological horror style, high contrast, red accent light from a flickering bulb, claustrophobic --ar 16:9`
|
||||
|
||||
**场景6-3B** 第二天,陈屿在剧场外发现林栩的摄影机被扔在门口。画面最后记录的是——林栩对着镜头说:“他们都想让我闭嘴。但回声,永远不会停。” 随后影像中断。陈屿报警,警方在地下室发现林栩昏迷,但没有任何物证。案件被定性为“幻觉性自残”。 (闪回式剪辑)
|
||||
`Prompt: Broken camera abandoned on theater steps, snow-like static on its small screen, police tape in background, cloudy sky, desaturated, documentary style, finality --ar 16:9`
|
||||
|
||||
**结局文本**(画外音): “有些记忆不是你的,而是剧场借给你的。等你试图还回去的时候,它已经连你的灵魂一起收走了。”
|
||||
|
||||
---
|
||||
|
||||
## 6. 变量系统说明
|
||||
|
||||
### 6.1 显性变量(玩家可见,整数,范围 -5 到 +5)
|
||||
|
||||
| 变量名 | 含义 | 初始值 | 变化来源 | 关键影响 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 线索完整度 | 记录玩家收集到的和还原的真相碎片数量 | 0 | 各幕选择中获取物证、回忆成功、与角色交换信息 | ≥4 可解锁结局1;≤1 容易进入结局3 |
|
||||
| 信任 | 周岚对林栩的信任程度 | 1 | 对话选择、是否共享隐私、是否尊重她的空间 | ≥3 可解锁结局2的和平路线;≤-2 加速进入结局3 |
|
||||
| 舆论热度 | 外界对案件的关注度 | 0 | 是否向陈屿透露、是否公开录像 | ≥3 会导致某些角色被迫行动(如周岚销毁剩余证据) |
|
||||
| 心理压力 | 林栩的精神状态 | 0 | 多次回忆失败、暴力冲突、孤独探索 | ≥5 触发疯狂结局;≤3 才能保持理性判断 |
|
||||
|
||||
### 6.2 隐藏变量(玩家不可见)
|
||||
|
||||
| 变量名 | 类型 | 默认值 | 设定时机 | 影响范围 |
|
||||
|--------|------|--------|----------|----------|
|
||||
| 周岚是否剪掉关键片段 | 布尔值 | 未定义 | 第二幕选择后确定 | 方向A(质问→未删减):第四幕回忆成功,主角直接获得关键线索;地下室内周岚可能会临时阻挡|
|
||||
| | | | | 方向B(假装未发现→已删减):第四幕回忆失败,但触发另一个隐藏路径(手机录音) |
|
||||
|
||||
### 6.3 变量控制原则
|
||||
- 所有变量仅在剧情分支时进行增减,不涉及战斗或RPG数值。
|
||||
- 结局判定采用“门槛检查”,满足其中一条即可进入对应结局。
|
||||
- 若同时满足多个结局条件,优先级:结局1 > 结局2 > 结局3(即更容易走向和解版本)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 多结局路径详细说明
|
||||
|
||||
### 结局1:真相大白
|
||||
**达成条件**:
|
||||
- 线索完整度 ≥ 4
|
||||
- 心理压力 ≤ 3
|
||||
- 信任 ≥ 1
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选A(播放录像)→ 信任+1,线索+1
|
||||
2. 第二幕选A(质问周岚)→ 隐藏变量A,信任-2但保留线索
|
||||
3. 第三幕选A(共享给陈屿)→ 舆论+2,线索+1
|
||||
4. 第四幕(隐藏变量A)→ 回忆成功,线索+2
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动走进结局1
|
||||
|
||||
**结局关键画面**:摄像机录像 + 警察逮捕 + 雨中解脱。
|
||||
|
||||
### 结局2:沉默共谋
|
||||
**达成条件**:
|
||||
- 线索完整度 ≤ 2
|
||||
- 信任 ≥ 3
|
||||
- 隐藏变量 = B(周岚已删减片段)
|
||||
|
||||
**关键选择链示例**:
|
||||
1. 第一幕选B(不播放)→ 舆论+1,信任-1
|
||||
2. 第二幕选B(假装没发现)→ 隐藏变量B,信任+1,线索+1
|
||||
3. 第三幕选B(不共享)→ 信任+1
|
||||
4. 第四幕(隐藏变量B)→ 回忆失败,心理+2,但获得手机录音
|
||||
5. 第五幕选B(带周岚一起)→ 信任+1
|
||||
6. 第六幕自动进入结局2
|
||||
|
||||
**结局关键画面**:两人沉默坐在观众席 + 剧场拆除新闻 + 银戒指特写。
|
||||
|
||||
### 结局3:疯狂深渊
|
||||
**达成条件**:
|
||||
- 心理压力 ≥ 5
|
||||
- 且(线索完整度 ≤ 1 或 信任 ≤ -2)
|
||||
|
||||
**常见错误路径**:
|
||||
- 第一幕强制播放导致周岚对立
|
||||
- 第二幕质问但随后不断选择孤立周岚并独自行动
|
||||
- 第三、四、五幕持续累积心理压力
|
||||
|
||||
**结局关键画面**:地下室镜子碎裂 + 自残 + 废弃摄影机。
|
||||
|
||||
---
|
||||
|
||||
## 8. 输出/导出建议
|
||||
|
||||
### 可交互原型
|
||||
- 使用Twine或inklewriter快速搭建文本原型。变量系统可映射为代码变量(整数/布尔),每段标记节点ID。
|
||||
- 建议录制6个节点视频素材(每个选择点一个片段),配合选项UI进行演示。
|
||||
|
||||
### 分镜本(供导演/摄影)
|
||||
- 按照本交付稿中的分镜说明,整合为六幕的shot list,包含镜头编号、画面描述、景别、时长、人物、灯光示意图。
|
||||
- 图片提示词可直接输入Midjourney/DALL·E生成概念图用于提案。
|
||||
|
||||
### 演示稿(供投资人)
|
||||
- 制作一个6页PPT,每页对应一幕核心选择,附上生成的图像和变量影响图标。
|
||||
- 结尾页展示三条结局路线示意图,并标注制作成本估算(室内场景60%,室外20%,特效20%)。
|
||||
|
||||
### 后期制作建议
|
||||
- 隐藏变量在演出中通过微表情和剪辑节奏暗示(如质问时周岚的沉默时长差异)。
|
||||
- 心理压力变量可通过林栩的手持镜头晃动程度、环境音叠加来表现。
|
||||
- 三个结局需分别录制不同对白版本,但共享部分场景(如地下室)可复用。
|
||||
|
||||
---
|
||||
|
||||
## 附录:变量旗标表(表格形式)
|
||||
|
||||
| 变量/旗标 | 类型 | 含义 | 触发时机 | 影响范围 |
|
||||
|-----------|------|------|----------|----------|
|
||||
| 线索完整度 | 显性整数 | 已获得的物证和回忆数 | 每次获取物证或成功回忆 | 结局1门槛 |
|
||||
| 信任 | 显性整数 | 周岚的信任程度 | 对话选择、共享/保密行为 | 结局2门槛 |
|
||||
| 舆论热度 | 显性整数 | 媒体关注度 | 与陈屿互动、公开录像 | 可能迫使周岚提前行动 |
|
||||
| 心理压力 | 显性整数 | 主角精神稳定度 | 失败回忆、单独行动、冲突 | 结局3门槛 |
|
||||
| 删减片段(隐藏) | 布尔 | 第二幕结果 | 第二幕选择后锁定 | 第四幕是否解锁回忆 |
|
||||
|
||||
---
|
||||
|
||||
**交付稿结束。**
|
||||
本方案已覆盖用户要求的6幕结构、4个显性变量+1个隐藏变量、第二幕特定修改、3结局及其条件,并提供完整分镜与图像提示词。可据以进入制作准备阶段。
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 1,
|
||||
"kind": "storyboard_assets",
|
||||
"title": "第七阅览室",
|
||||
"projectId": "第七阅览室",
|
||||
"baseDir": "interactive-films/第七阅览室",
|
||||
"storyboardPath": "interactive-films/第七阅览室/storyboard.md",
|
||||
"imagePromptsPath": "interactive-films/第七阅览室/image-prompts.md",
|
||||
"assetsDir": "interactive-films/第七阅览室/assets",
|
||||
"sourceDir": "interactive-films/第七阅览室/assets/source",
|
||||
"generatedDir": "interactive-films/第七阅览室/assets/generated",
|
||||
"selectedDir": "interactive-films/第七阅览室/assets/selected",
|
||||
"createdAt": "2026-06-27T07:52:37.641Z",
|
||||
"assets": []
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.1 MiB |
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"phase": "world",
|
||||
"rev": 1
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
| 变量/旗标名 | 含义 | 触发方式 | 影响范围 | 对应节点 |
|
||||
|-------------|------|----------|----------|----------|
|
||||
| `trust_level` (0-3) | 档案信任度:主角对超自然档案的相信程度 | 选择点1A(+1)、选择点2A(+1)、选择点2B(+2) | 决定结局A/B中能否正常解读线索;结局B中是否加速迷失 | 选择点1、2、结局A、B |
|
||||
| `has_key` (布尔) | 是否拿到第七阅览室钥匙 | 选择点2A(是) | 决定能否进入第七阅览室(结局A必要条件) | 选择点2A → 选择点3A |
|
||||
| `rain_memory` (布尔) | 是否触发过雨夜回忆片段 | 选择点2A(是) | 改变结局A/B中的氛围描写;增加结局B中的幻觉触发概率 | 选择点2A → 结局A/B |
|
||||
| `door_state` (字符串) | 门状态:`"未开"` / `"已开"` / `"毁坏"` | 选择点3A或3B | 决定最终所见场景;影响结局AB中的细节 | 选择点3A、3B |
|
||||
|
||||
**变量作用说明**:
|
||||
- 这些变量只用于改变剧情分支、对白、氛围描写和结局文本,不套用数值判定或战斗。
|
||||
- `trust_level` 只在特定节点检查是否 >= 2(如读取档案时能否识别隐藏信息);<= 1 则给出不同解读版本。
|
||||
- `has_key` 是二元开关,无钥匙则无法进入第七阅览室(结局A不可达)。
|
||||
- `rain_memory` 在结局B中触发额外幻觉段落,在结局A中触发雨夜回忆闪回。
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
# 第七阅览室 互动影游创作规格
|
||||
|
||||
## 目标
|
||||
- 交付类型:互动影游 / 互动叙事类游戏 / 影游剧本
|
||||
- 剧情段落/集数:4
|
||||
- 单段/单集时长:约3-5分钟每段
|
||||
- 预算约束:未指定
|
||||
- 目标受众:悬疑解谜爱好者
|
||||
- 参考模式:多分支多结局互动叙事
|
||||
- 原素材:原始创意
|
||||
|
||||
## 用户要求
|
||||
基于以下确认规格,生成《第七阅览室》互动影游完整交付稿。
|
||||
|
||||
标题:第七阅览室
|
||||
素材类型:原始创意
|
||||
核心设定:雨夜档案馆里,我是临时值班员,发现一份写着"第七阅览室"的旧借阅卡
|
||||
分支结构:3个主要选择点
|
||||
结局数量:3个
|
||||
目标受众:悬疑解谜爱好者
|
||||
段落/集数:1次完整短篇,3-4段
|
||||
视觉风格:胶片质感、暗色档案馆、雨夜氛围,含配图(每段配1张氛围图)
|
||||
参考风格:多分支多结局互动叙事
|
||||
|
||||
变量/旗标系统(我设计的):
|
||||
- 档案信任度(trust_level):0-3,记录主角对超自然档案的相信程度
|
||||
- 钥匙持有(has_key):是否拿到第七阅览室钥匙
|
||||
- 雨声回响(rain_memory):是否触发过雨夜回忆片段
|
||||
- 门状态(door_state):第七阅览室的门是否被打开过
|
||||
|
||||
3条结局线:
|
||||
结局A:发现真相——进入第七阅览室,揭开档案馆的秘密
|
||||
结局B:迷失档案——在档案中越陷越深,与现实模糊
|
||||
结局C:雨夜离开——选择不探究,带着疑问离开档案馆
|
||||
|
||||
写交付稿时输出为:故事大纲、3个选择点及其分支走向、3个结局文案、配图描述、变量追踪表。
|
||||
|
||||
补充要求:
|
||||
3个主要选择点、3个结局、悬疑解谜向、变量追踪系统(档案信任度/钥匙持有/雨声回响/门状态)、胶片质感暗色档案馆雨夜氛围、每段配1张氛围图
|
||||
|
||||
## 互动影游边界
|
||||
- 这是创作交付稿,不是硬数值 RPG 引擎设计;变量、旗标、关系和结局条件必须服务剧情分支。
|
||||
- 必须包含多分支剧情、玩家关键选择、变量/旗标如何改变后续剧情,以及多结局达成条件。
|
||||
- 变量系统用自然语言说明即可:状态、关系、隐瞒/公开、证据、物品、身份、好感/信任等;不要强行套固定数值或装备等级。
|
||||
- 交付要适配影游/互动剧制作:剧情树清晰、节点可拍、对白可演、分镜可画、图片提示词可用于资产生成。
|
||||
- 不替用户擅自决定题材、预算、画风和商业强化强度;未指定处写为可调整。
|
||||
|
||||
## 源素材摘要
|
||||
已提供完整源素材,约 33 字符;生成时会读取完整内容。
|
||||
@@ -0,0 +1,119 @@
|
||||
### 第一段:雨夜值班
|
||||
|
||||
**场景设定**:城市老档案馆,深夜11时,窗外大雨滂沱。室内灯光昏黄,一排排灰绿色档案柜。值班室一张旧木桌,台灯,翻到一半的登记簿。
|
||||
|
||||
**人物**:
|
||||
- **主角(我)**:约25-30岁,临时值班员,神情略显疲惫但认真
|
||||
- **无其他活人角色**:但环境中始终存在一种轻微的不安感
|
||||
|
||||
---
|
||||
|
||||
**镜头1:值班室内景,近景**
|
||||
(台灯光圈内,主角低头整理登记簿。窗外雷声隐约。)
|
||||
**画外音(主角)**:我从来没想过,一个雨夜的临时值班会改变什么。
|
||||
**动作**:主角抬起头,看窗外大雨。然后低头继续,手碰到一个硬物——一本落满灰的旧借阅卡。
|
||||
|
||||
**台词**:
|
||||
主角:(自言自语)这种卡不是早就淘汰了吗……怎么还在这?
|
||||
|
||||
**镜头2:特写——借阅卡**
|
||||
(卡片泛黄,墨水有些晕开。正面印着:"海淀区第七阅览室 · 内部使用"。背面有一行手写小字。)
|
||||
**动作**:主角翻看卡片,眉头微皱。
|
||||
|
||||
**画外音(主角)**:第七阅览室?我在四楼工作了一年,从来没听过这个阅览室。
|
||||
|
||||
---
|
||||
|
||||
**【玩家选择点1:如何处理借阅卡?】**
|
||||
|
||||
**选项A:仔细查看借阅卡**
|
||||
→ **分支走向**:
|
||||
- 主角凑近台灯,眯眼看着卡片背面手写字迹。
|
||||
- 字迹:“第七阅览室不存于任何记录。找到它的人,请记住——那扇门永远为你敞开。”
|
||||
- **变量/旗标变化**:`trust_level += 1`
|
||||
- 触发线索:主角萌生查证念头。
|
||||
- **下一节点**:走廊声响触发后,主角会对此更在意。
|
||||
|
||||
**选项B:放回原位,继续值班**
|
||||
→ **分支走向**:
|
||||
- 主角耸耸肩,把借阅卡夹回登记簿里。窗外雨声忽然变得很大,灯光闪烁了一瞬。
|
||||
- **变量/旗标变化**:`trust_level` 不变
|
||||
- 错过线索卡背文字,主角对"第七阅览室"只有模糊印象。
|
||||
- **下一节点**:走廊声响触发后,主角选择较被动。
|
||||
|
||||
**注**:无论哪个选项,后续都会强制触发以下事件:
|
||||
|
||||
---
|
||||
|
||||
**场景切换——走廊回声**
|
||||
(突然,走廊深处传来沉闷的声响:像书架被碰倒,又像什么东西跌落。)
|
||||
|
||||
**镜头3:主角猛然抬头,看向值班室门外走廊**
|
||||
**台词**:
|
||||
主角:(低语)还有人没走?
|
||||
**动作**:主角犹豫片刻,站起身。
|
||||
|
||||
---
|
||||
|
||||
**【玩家选择点2:跟谁调查?】**
|
||||
|
||||
**选项A:独自走向声响来源(信任度高,主动)**
|
||||
→ **分支走向**:
|
||||
- 主角拿起手电筒,走出值班室。走廊幽深,两侧书架投下巨大阴影。
|
||||
- 雨声在走廊里回响,像有人低语。(触发 `rain_memory = 是`)
|
||||
- 主角来到走廊尽头,发现一扇灰绿色铁门,上面标牌已模糊。门把手上挂着一把老式铜钥匙。
|
||||
- **变量/旗标变化**:`has_key = 是`;`rain_memory = 是`;`trust_level += 1`
|
||||
- **下一节点**:选择点3A或3B可用。若选3A,钥匙直接可用。
|
||||
|
||||
**选项B:返回值班室查看档案记录(谨慎型)**
|
||||
→ **分支走向**:
|
||||
- 主角后退两步,决定先查资料。返身回值班室。
|
||||
- 翻找旧档案柜,发现一摞编号"1963—1987"的记录簿。打开,找到一行记录:
|
||||
“第七阅览室,事故报告:1984年11月13日,一名工作人员于雨夜值班后失踪。档案室予以封存。”
|
||||
- 读到此,主角手一顿。窗外雨声更大了。
|
||||
- **变量/旗标变化**:`trust_level += 2`(但 `has_key` 未变;`rain_memory = 否`)
|
||||
- **下一节点**:选择点3A不可达(无钥匙),只能选3B或3C。
|
||||
|
||||
---
|
||||
|
||||
### 第二段:抉择时刻
|
||||
|
||||
**场景设定**:深夜档案馆走廊,或值班室。灯光闪烁,风声穿堂。
|
||||
|
||||
---
|
||||
|
||||
**镜头4:主角站在铁门前,或坐在值班室档案前,神情凝重。**
|
||||
(取决于之前选择)
|
||||
|
||||
**画外音(主角)**:我清楚地知道,接下来要做的事,可能会改变一切。
|
||||
|
||||
**动作**:主角深呼吸。
|
||||
|
||||
---
|
||||
|
||||
**【玩家选择点3:如何行动?】**
|
||||
|
||||
**选项A:拿起钥匙,走向铁门(只能选于 `has_key = 是` 时出现)**
|
||||
→ **分支走向**:
|
||||
- 主角拿着铜钥匙,走到铁门前。钥匙插入锁孔,咔哒一声——门开了。
|
||||
- 门内是一条更深的走廊,尽头有微光。背后传来档案架倒下的巨响。主角回头,什么都没看到。
|
||||
- 主角坚定地转身,走向那微光。
|
||||
- **变量/旗标变化**:`door_state = 已开`
|
||||
- **下一节点**:结局A
|
||||
|
||||
**选项B:尝试推门,发现门锁着,放弃(`has_key = 否` 时唯一可用,或玩家主动选此)**
|
||||
→ **分支走向**:
|
||||
- 主角抓着门把手转动——锁着。推了几下,纹丝不动。
|
||||
- 转身时,发现来时的走廊似乎变了样:书架排列不同,窗子位置不对。
|
||||
- 主角加快脚步,但走廊越来越长,越走越远。两侧档案上的字迹变得模糊扭曲。
|
||||
- **变量/旗标变化**:`door_state = 未开`;`trust_level ≥ 2` 或 `rain_memory = 是` 时,幻觉立即加深。
|
||||
- **下一节点**:结局B
|
||||
|
||||
**选项C:决定下班时间到了,离开(始终可用)**
|
||||
→ **分支走向**:
|
||||
- 主角收起借阅卡,走回值班室,写下班时间记录。关灯,穿雨衣。
|
||||
- 走出档案馆大门,雨打在脸上。锁好门,头也不回走入雨夜。
|
||||
- **变量/旗标变化**:无
|
||||
- **下一节点**:结局C
|
||||
|
||||
---
|
||||
@@ -0,0 +1,330 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"projectId": "第七阅览室",
|
||||
"title": "第七阅览室",
|
||||
"characters": [],
|
||||
"variables": [
|
||||
{
|
||||
"name": "trust_level",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "对超自然档案的信任度,0-3"
|
||||
},
|
||||
{
|
||||
"name": "has_key",
|
||||
"type": "flag",
|
||||
"default": 0,
|
||||
"desc": "是否拿到第七阅览室钥匙"
|
||||
},
|
||||
{
|
||||
"name": "rain_memory",
|
||||
"type": "flag",
|
||||
"default": 0,
|
||||
"desc": "是否触发过雨夜回忆"
|
||||
},
|
||||
{
|
||||
"name": "door_state",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "门状态:0=未开,1=已开"
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "start",
|
||||
"title": "雨夜值班",
|
||||
"type": "start",
|
||||
"sceneDesc": "城市老档案馆,深夜11时,窗外大雨滂沱。值班室灯光昏黄,一张旧木桌,台灯,翻到一半的登记簿。我低头整理文件,手碰到一本落满灰的旧借阅卡。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "这种卡不是早就淘汰了吗……怎么还在这?",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice1A",
|
||||
"text": "仔细查看借阅卡",
|
||||
"targetNodeId": "examine_card",
|
||||
"effects": [
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice1B",
|
||||
"text": "放回原位,继续值班",
|
||||
"targetNodeId": "ignore_card",
|
||||
"effects": []
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "examine_card",
|
||||
"title": "查看卡片",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我凑近台灯,眯眼看着卡片背面手写字迹:'第七阅览室不存于任何记录。找到它的人,请记住——那扇门永远为你敞开。' 正在思索时,走廊深处传来沉闷声响。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "第七阅览室?我在四楼工作了一年,从来没听过这个阅览室。",
|
||||
"emotion": "curious"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "雨声渐大,灯光忽明忽暗。走廊那头传来书架倒下的动静。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice2A",
|
||||
"text": "独自走向声响来源",
|
||||
"targetNodeId": "investigate_sound",
|
||||
"effects": [
|
||||
{
|
||||
"var": "has_key",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "rain_memory",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice2B",
|
||||
"text": "返回值班室查看档案记录",
|
||||
"targetNodeId": "check_records",
|
||||
"effects": [
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ignore_card",
|
||||
"title": "置之不理",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我耸耸肩,把借阅卡夹回登记簿里。窗外雨声忽然变得很大,灯光闪烁了一瞬。片刻后,走廊尽头传来沉闷的声响。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "雨真大……希望不会停电。",
|
||||
"emotion": "neutral"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "突然,走廊深处传来像书架被碰倒的声音。",
|
||||
"emotion": "suspense"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice2A_alt",
|
||||
"text": "独自走向声响来源",
|
||||
"targetNodeId": "investigate_sound",
|
||||
"effects": [
|
||||
{
|
||||
"var": "has_key",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "rain_memory",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice2B_alt",
|
||||
"text": "返回值班室查看档案记录",
|
||||
"targetNodeId": "check_records",
|
||||
"effects": [
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "investigate_sound",
|
||||
"title": "走廊尽头",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我拿起手电筒走进走廊。雨声在两侧回响,像低语。尽头是一扇灰绿色铁门,标牌模糊,门把手上挂着一把老式铜钥匙。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "这把钥匙……是开这扇门的吗?",
|
||||
"emotion": "curious"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "背后突然传来档案架倒塌的巨响,我猛地回头——什么都没有。",
|
||||
"emotion": "shock"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice3A",
|
||||
"text": "拿起钥匙,走向铁门",
|
||||
"targetNodeId": "ending_A",
|
||||
"effects": [
|
||||
{
|
||||
"var": "door_state",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice3B",
|
||||
"text": "尝试推门,发现锁着,放弃",
|
||||
"targetNodeId": "ending_B",
|
||||
"effects": [
|
||||
{
|
||||
"var": "door_state",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice3C",
|
||||
"text": "决定下班时间到了,离开",
|
||||
"targetNodeId": "ending_C",
|
||||
"effects": []
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "check_records",
|
||||
"title": "档案记录",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我回到值班室翻找旧档案柜,找到一摞编号‘1963—1987’的记录簿。里面有一行记录:'第七阅览室,事故报告:1984年11月13日,一名工作人员于雨夜值班后失踪。档案室予以封存。' 窗外的雨声更大了。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "失踪……封存?那扇门后面到底有什么?",
|
||||
"emotion": "fear"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "我放下记录簿,手心冒汗。走廊那头的声音消失了,但不安感更重。",
|
||||
"emotion": "suspense"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice3B_alt",
|
||||
"text": "前往铁门,尝试推门",
|
||||
"targetNodeId": "ending_B",
|
||||
"effects": []
|
||||
},
|
||||
{
|
||||
"id": "choice3C_alt",
|
||||
"text": "决定下班时间到了,离开",
|
||||
"targetNodeId": "ending_C",
|
||||
"effects": []
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ending_A",
|
||||
"title": "发现真相",
|
||||
"type": "ending",
|
||||
"sceneDesc": "钥匙插入锁孔,咔哒一声,门开了。面前是一条更深的走廊,尽头有微光。我坚定地走向那光。档案架倒塌的巨响在身后回荡,但我没有回头。我走进了第七阅览室——一个不属于任何记录的空间,里面存放着这座档案馆真正的秘密:每一本泛黄的档案都记载着无数个雨夜中的迷失者,而我的名字正出现在最后一页的空白处。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "从那一刻起,我再也没有离开过第七阅览室。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ending_B",
|
||||
"title": "迷失档案",
|
||||
"type": "ending",
|
||||
"sceneDesc": "门锁着,推不动。我转身想回去,却发现走廊变了样:书架排列扭曲,窗子位置不对。我越走越快,但走廊无限延伸,两侧档案的字迹模糊成漩涡。雨声在四面八方回响,像无数个我在呼喊。我分不清方向,也分不清现实与幻觉——最终,我成为了那本事故报告中新的一页。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "档案馆的灯光一盏盏熄灭,只有雨声永不停息。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ending_C",
|
||||
"title": "雨夜离开",
|
||||
"type": "ending",
|
||||
"sceneDesc": "我收起借阅卡,写好下班记录,关灯,穿雨衣。走出档案馆大门,雨打在脸上,清凉真实。锁好门,头也不回地走入雨夜。身后的大楼沉默矗立,第七阅览室的秘密被雨水冲刷,渐渐模糊。我带着疑问和一丝庆幸,回到了平凡的世界。但那本旧借阅卡的轮廓,一直烙在我的记忆里。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "有些门,或许不该打开。有些夜晚,注定留下未解之谜。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
}
|
||||
],
|
||||
"endings": [
|
||||
{
|
||||
"id": "ending_A",
|
||||
"nodeId": "ending_A",
|
||||
"title": "发现真相",
|
||||
"type": "secret",
|
||||
"description": "进入第七阅览室,揭开档案馆的秘密,但自己也永远留在了那里。"
|
||||
},
|
||||
{
|
||||
"id": "ending_B",
|
||||
"nodeId": "ending_B",
|
||||
"title": "迷失档案",
|
||||
"type": "bad",
|
||||
"description": "在档案馆的幻觉中迷失,成为事故报告的新增受害者。"
|
||||
},
|
||||
{
|
||||
"id": "ending_C",
|
||||
"nodeId": "ending_C",
|
||||
"title": "雨夜离开",
|
||||
"type": "neutral",
|
||||
"description": "放弃探究,带着疑问和庆幸回到日常生活。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": "completed",
|
||||
"kind": "interactive_film",
|
||||
"title": "第七阅览室",
|
||||
"completedAt": "2026-06-27T07:53:30.034Z"
|
||||
}
|
||||
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"projectId": "第七阅览室",
|
||||
"title": "第七阅览室",
|
||||
"characters": [],
|
||||
"variables": [
|
||||
{
|
||||
"name": "trust_level",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "对超自然档案的信任度,0-3"
|
||||
},
|
||||
{
|
||||
"name": "has_key",
|
||||
"type": "flag",
|
||||
"default": 0,
|
||||
"desc": "是否拿到第七阅览室钥匙"
|
||||
},
|
||||
{
|
||||
"name": "rain_memory",
|
||||
"type": "flag",
|
||||
"default": 0,
|
||||
"desc": "是否触发过雨夜回忆"
|
||||
},
|
||||
{
|
||||
"name": "door_state",
|
||||
"type": "counter",
|
||||
"default": 0,
|
||||
"desc": "门状态:0=未开,1=已开"
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "start",
|
||||
"title": "雨夜值班",
|
||||
"type": "start",
|
||||
"sceneDesc": "城市老档案馆,深夜11时,窗外大雨滂沱。值班室灯光昏黄,一张旧木桌,台灯,翻到一半的登记簿。我低头整理文件,手碰到一本落满灰的旧借阅卡。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "这种卡不是早就淘汰了吗……怎么还在这?",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice1A",
|
||||
"text": "仔细查看借阅卡",
|
||||
"targetNodeId": "examine_card",
|
||||
"effects": [
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice1B",
|
||||
"text": "放回原位,继续值班",
|
||||
"targetNodeId": "ignore_card",
|
||||
"effects": []
|
||||
}
|
||||
],
|
||||
"imageSlot": {
|
||||
"prompt": "城市老档案馆,深夜11时,窗外大雨滂沱。值班室灯光昏黄,一张旧木桌,台灯,翻到一半的登记簿。我低头整理文件,手碰到一本落满灰的旧借阅卡。",
|
||||
"assetRef": "interactive-films/第七阅览室/assets/nodes/start.png"
|
||||
},
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "examine_card",
|
||||
"title": "查看卡片",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我凑近台灯,眯眼看着卡片背面手写字迹:'第七阅览室不存于任何记录。找到它的人,请记住——那扇门永远为你敞开。' 正在思索时,走廊深处传来沉闷声响。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "第七阅览室?我在四楼工作了一年,从来没听过这个阅览室。",
|
||||
"emotion": "curious"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "雨声渐大,灯光忽明忽暗。走廊那头传来书架倒下的动静。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice2A",
|
||||
"text": "独自走向声响来源",
|
||||
"targetNodeId": "investigate_sound",
|
||||
"effects": [
|
||||
{
|
||||
"var": "has_key",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "rain_memory",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice2B",
|
||||
"text": "返回值班室查看档案记录",
|
||||
"targetNodeId": "check_records",
|
||||
"effects": [
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ignore_card",
|
||||
"title": "置之不理",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我耸耸肩,把借阅卡夹回登记簿里。窗外雨声忽然变得很大,灯光闪烁了一瞬。片刻后,走廊尽头传来沉闷的声响。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "雨真大……希望不会停电。",
|
||||
"emotion": "neutral"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "突然,走廊深处传来像书架被碰倒的声音。",
|
||||
"emotion": "suspense"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice2A_alt",
|
||||
"text": "独自走向声响来源",
|
||||
"targetNodeId": "investigate_sound",
|
||||
"effects": [
|
||||
{
|
||||
"var": "has_key",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "rain_memory",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice2B_alt",
|
||||
"text": "返回值班室查看档案记录",
|
||||
"targetNodeId": "check_records",
|
||||
"effects": [
|
||||
{
|
||||
"var": "trust_level",
|
||||
"op": "add",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "investigate_sound",
|
||||
"title": "走廊尽头",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我拿起手电筒走进走廊。雨声在两侧回响,像低语。尽头是一扇灰绿色铁门,标牌模糊,门把手上挂着一把老式铜钥匙。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "这把钥匙……是开这扇门的吗?",
|
||||
"emotion": "curious"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "背后突然传来档案架倒塌的巨响,我猛地回头——什么都没有。",
|
||||
"emotion": "shock"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice3A",
|
||||
"text": "拿起钥匙,走向铁门",
|
||||
"targetNodeId": "ending_A",
|
||||
"effects": [
|
||||
{
|
||||
"var": "door_state",
|
||||
"op": "add",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice3B",
|
||||
"text": "尝试推门,发现锁着,放弃",
|
||||
"targetNodeId": "ending_B",
|
||||
"effects": [
|
||||
{
|
||||
"var": "door_state",
|
||||
"op": "add",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "choice3C",
|
||||
"text": "决定下班时间到了,离开",
|
||||
"targetNodeId": "ending_C",
|
||||
"effects": []
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "check_records",
|
||||
"title": "档案记录",
|
||||
"type": "branch",
|
||||
"sceneDesc": "我回到值班室翻找旧档案柜,找到一摞编号‘1963—1987’的记录簿。里面有一行记录:'第七阅览室,事故报告:1984年11月13日,一名工作人员于雨夜值班后失踪。档案室予以封存。' 窗外的雨声更大了。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "我",
|
||||
"text": "失踪……封存?那扇门后面到底有什么?",
|
||||
"emotion": "fear"
|
||||
},
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "我放下记录簿,手心冒汗。走廊那头的声音消失了,但不安感更重。",
|
||||
"emotion": "suspense"
|
||||
}
|
||||
],
|
||||
"choices": [
|
||||
{
|
||||
"id": "choice3B_alt",
|
||||
"text": "前往铁门,尝试推门",
|
||||
"targetNodeId": "ending_B",
|
||||
"effects": []
|
||||
},
|
||||
{
|
||||
"id": "choice3C_alt",
|
||||
"text": "决定下班时间到了,离开",
|
||||
"targetNodeId": "ending_C",
|
||||
"effects": []
|
||||
}
|
||||
],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ending_A",
|
||||
"title": "发现真相",
|
||||
"type": "ending",
|
||||
"sceneDesc": "钥匙插入锁孔,咔哒一声,门开了。面前是一条更深的走廊,尽头有微光。我坚定地走向那光。档案架倒塌的巨响在身后回荡,但我没有回头。我走进了第七阅览室——一个不属于任何记录的空间,里面存放着这座档案馆真正的秘密:每一本泛黄的档案都记载着无数个雨夜中的迷失者,而我的名字正出现在最后一页的空白处。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "从那一刻起,我再也没有离开过第七阅览室。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ending_B",
|
||||
"title": "迷失档案",
|
||||
"type": "ending",
|
||||
"sceneDesc": "门锁着,推不动。我转身想回去,却发现走廊变了样:书架排列扭曲,窗子位置不对。我越走越快,但走廊无限延伸,两侧档案的字迹模糊成漩涡。雨声在四面八方回响,像无数个我在呼喊。我分不清方向,也分不清现实与幻觉——最终,我成为了那本事故报告中新的一页。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "档案馆的灯光一盏盏熄灭,只有雨声永不停息。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
},
|
||||
{
|
||||
"id": "ending_C",
|
||||
"title": "雨夜离开",
|
||||
"type": "ending",
|
||||
"sceneDesc": "我收起借阅卡,写好下班记录,关灯,穿雨衣。走出档案馆大门,雨打在脸上,清凉真实。锁好门,头也不回地走入雨夜。身后的大楼沉默矗立,第七阅览室的秘密被雨水冲刷,渐渐模糊。我带着疑问和一丝庆幸,回到了平凡的世界。但那本旧借阅卡的轮廓,一直烙在我的记忆里。",
|
||||
"dialogue": [
|
||||
{
|
||||
"speaker": "旁白",
|
||||
"text": "有些门,或许不该打开。有些夜晚,注定留下未解之谜。",
|
||||
"emotion": "neutral"
|
||||
}
|
||||
],
|
||||
"choices": [],
|
||||
"act": ""
|
||||
}
|
||||
],
|
||||
"endings": [
|
||||
{
|
||||
"id": "ending_A",
|
||||
"nodeId": "ending_A",
|
||||
"title": "发现真相",
|
||||
"type": "secret",
|
||||
"description": "进入第七阅览室,揭开档案馆的秘密,但自己也永远留在了那里。"
|
||||
},
|
||||
{
|
||||
"id": "ending_B",
|
||||
"nodeId": "ending_B",
|
||||
"title": "迷失档案",
|
||||
"type": "bad",
|
||||
"description": "在档案馆的幻觉中迷失,成为事故报告的新增受害者。"
|
||||
},
|
||||
{
|
||||
"id": "ending_C",
|
||||
"nodeId": "ending_C",
|
||||
"title": "雨夜离开",
|
||||
"type": "neutral",
|
||||
"description": "放弃探究,带着疑问和庆幸回到日常生活。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
```
|
||||
[序幕:雨夜档案馆,值班室]
|
||||
│
|
||||
├── 发现旧借阅卡(强制事件)
|
||||
│
|
||||
├── 【选择点1】如何处理借阅卡?
|
||||
│ ├── A. 仔细查看借阅卡(信任度+1,触发线索)
|
||||
│ │ └── 发现背面手写字迹:"第七阅览室不存于任何记录"
|
||||
│ └── B. 放回原位,继续值班(信任度不变,错过线索)
|
||||
│ └── 雨声渐大,灯光忽明忽暗
|
||||
│
|
||||
├── 走廊传来声响(强制事件,触发雨夜回忆·可选)
|
||||
│ └── 【选择点2】跟谁调查?
|
||||
│ ├── A. 独自走向声响来源(信任度+1,触发雨声回响 flag)
|
||||
│ │ └── 在走廊尽头发现一扇铁门,门把手上挂着一把钥匙
|
||||
│ └── B. 返回值班室查看档案记录(信任度+2,获得线索但错过钥匙)
|
||||
│ └── 在旧档案中发现第七阅览室曾发生事故的记录
|
||||
│
|
||||
├── 【选择点3】如何行动?
|
||||
│ ├── A. 拿起钥匙,走向铁门(钥匙持有=是)
|
||||
│ │ ├── 门开一半,档案架倒塌(紧张追逐)
|
||||
│ │ └── 【结局A】进入阅览室内部
|
||||
│ ├── B. 尝试推门,发现门锁着,放弃(门状态=未开)
|
||||
│ │ └── 返回时迷失方向,进入幻觉走廊
|
||||
│ │ └── 【结局B】陷入档案迷宫
|
||||
│ └── C. 决定下班时间到了,离开(直接离开)
|
||||
│ └── 【结局C】雨夜离去,疑问未解
|
||||
│
|
||||
└── 所有结局后:系统可重置或显示达成结局列表
|
||||
```
|
||||
@@ -0,0 +1,49 @@
|
||||
### 第一段氛围图(标题/封面图)
|
||||
|
||||
**关键镜头**:值班室台灯下,一本登记簿和一张旧借阅卡,窗外面大雨模糊。
|
||||
|
||||
- **景别**:近景俯拍
|
||||
- **色彩**:暖黄灯光 + 窗外冷蓝雨夜
|
||||
- **氛围**:潮湿、陈旧、不安感
|
||||
- **胶片质感**:轻微颗粒,暗角
|
||||
|
||||
`Prompt: 电影感俯拍,一张泛黄旧借阅卡放在木桌登记簿上,台灯暖黄光圈照亮卡片,背景窗外大雨滂沱、冷蓝色调,室内昏暗,胶片颗粒质感,暗角,悬念氛围,16:9`
|
||||
|
||||
---
|
||||
|
||||
### 第二段氛围图(选择点1~2)
|
||||
|
||||
**关键镜头**:主角站在幽深走廊中央,两侧书架高耸,手电筒光线只照亮前方一小段路。
|
||||
|
||||
- **景别**:中全景,视角略低
|
||||
- **人物**:主角背影,轮廓
|
||||
- **环境**:灰绿色书架,暗色地板,滴水声暗示
|
||||
- **雨声回响感**:画面应有"声音可视"的隐喻(如雨滴在地面形成波浪)
|
||||
|
||||
`Prompt: 昏暗档案馆走廊,主角背影站在中央,单手握手电筒照亮前方,两侧灰绿色书架高耸到顶,远处黑暗不可见,地面有水光反射,冷色调,潮湿氛围,胶片颗粒,微光,紧张安静感,宽银幕电影比例`
|
||||
|
||||
---
|
||||
|
||||
### 第三段氛围图(选择点3 ~ 结局前)
|
||||
|
||||
**关键镜头**:一扇灰绿色旧铁门,门把手挂着一把铜钥匙,门上标牌模糊,门缝透出微弱暖光。
|
||||
|
||||
- **景别**:中景,正对门
|
||||
- **主体**:铁门、钥匙、模糊标牌
|
||||
- **氛围**:压抑与诱惑并存
|
||||
|
||||
`Prompt: 一扇老旧灰绿色铁门,铜色钥匙挂在把手上,门缝下透出微金黄暖光,门上标牌磨损模糊,铁门表面有锈痕,周围黑暗角落,冷与暖对比,胶片质感,暗角,神秘气氛,16:9`
|
||||
|
||||
---
|
||||
|
||||
### 第四段氛围图(结局通用/结局后)
|
||||
|
||||
**关键镜头**:档案馆外观夜景,大雨中,一扇小窗亮着孤零零的光。
|
||||
|
||||
- **景别**:大远景,俯瞰或平视
|
||||
- **环境**:老建筑,雨丝,路灯倒映在水洼
|
||||
- **氛围**:孤独、未完、记忆潮湿
|
||||
|
||||
`Prompt: 夜景老档案馆建筑外观,大雨倾盆,只有二楼一扇小窗亮着昏黄微光,路灯照亮部分砖墙和水洼,周围空无一人,冷蓝暗调,雨丝斜织,胶片颗粒,静谧而忧郁,电影宽幅比例`
|
||||
|
||||
---
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 171 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 95 KiB |
Reference in New Issue
Block a user