如何构建基于问题的角色通讯录而不泄露隐藏场景
当每个答案都有明确的信息来源、发现条件和可见性规则时,基于问题的通讯录就能发挥作用。对于每个角色,记录他们亲眼目睹的事情、别人告诉他们的事情、他们能合理推断出的事情,以及他们目前还不知道的事情。然后将日常的故事问题转交给其知识支持给出回答的角色。这样既能让通讯录变得实用,又不会在对话中剧透未来的场景和未发现的事实。
从读者可能真正会问的问题开始
选择一组与故事紧密相关的具体日常问题:备用钥匙在谁那里?米拉把速写本忘在哪里了?谁同意带折叠椅来?这些问题比“正在发生什么?”或“给我讲讲这个小镇”等宽泛的提示更容易进行知识路由。一个好问题的答案应当可以追溯到一个事件、一件物品、一段对话或一个明确标注的推论。
在问题分类账中写下每个问题,包含四个字段:答案、源事件、最早可以回答的时间点,以及允许回答的角色。例如,“备用钥匙在谁那里?”可能在乔于开场场景中拿到钥匙后,由乔来回答。在那之前,通讯录应当标注“尚未确定”而不是凭空猜测。这种区分可以防止缺失的事实意外变成设定中的正史。
为每个事实提供来源和知识类型
将故事事实视为证据记录,而不是每个角色都可以随时取用的共享资源池。一个精简的记录可能如下所示:
事实:乔有备用钥匙;来源:乔在第2场戏中从挂钩上取下;知识类型:目睹 / 持有;最早发现时机:第2场戏之后;可见性:乔,以及她告知的任何人
事实:礼堂已预订为周六;来源:公告栏上的确认通知;知识类型:阅读;最早发现时机:某角色看到通知后;可见性:阅读了该通知的角色
事实:椅子能塞进货车里;来源:乔对比了它们的大小;知识类型:推论;最早发现时机:她检查完两者之后;可见性:乔,表述为估算
使用一组少量且一致的知识类型。“目睹”(Observed)意味着角色在场并能感知到该事件。“听说”(Told)意味着另一个角色传达了该信息。“阅读”(Read)意味着他们看到了便条、留言、告示或其他记录。“推论”(Inferred)意味着他们从证据中得出了结论,这应当表述为信念或估算,而不是经证实的事实。“未知”(Unknown)意味着故事尚未为他们提供获取该信息的途径。
这种结构是一种编剧设计规则,而不是任何写作工具本身保证的功能。它源于一种实用的区分:状态追踪可以记录变化,但故事作者仍需决定状态的含义。Ink 的文档描述了灵活的状态追踪,同时也指出它并不提供完整的世界建模系统;Twine 的文档同样区分了全局可用的故事变量与局部临时变量。这些机制有助于呈现故事的状态,但它们都无法自动决定角色应该知道什么。(Ink: Writing With Ink,Twine Cookbook: Variables)
添加发现门槛,而非为了行文方便随意揭露
发现门槛规定了一项事实在变得可用之前必须发生的事情。保持其可观察性和具体性:“在乔看了公告栏之后”、“在李告诉帕特之后”或“在众人打开补给箱之后”。避免使用诸如“一旦故事准备就绪”等难以一致应用的门槛。
将使事实成为真实的事件与让角色获知该事实的事件区分开来。在乔看到确认单之前,礼堂就可以已经被预订。李可以把备用钥匙移走而不告诉任何人。当一道门槛开启时,只更新有途径接触到该信息的角色。如果一个角色错过了某次谈话,不要仅仅因为读者看到了该情节就暗中将信息赋给他们。
对于互动故事,门槛可以通过变量和条件段落来表示。Twine Cookbook 解释了 SugarCube 的 <<if>> 和 <<else>> 选区会根据条件显示内容;Ink 也支持状态更改和分支选择。这些是用于显示或保留台词的实现选项。故事仍然需要明确的规则来设定条件——例如,记录特定角色阅读了通知。(Twine Cookbook: “Conditional Statements”: SugarCube,Ink: Writing With Ink)
追踪共享事实,而不使其普遍可见
一项事实可以与一个群体共享、与两个人共享,或者除了信息源之外不为任何人所知。明确记录受众:“乔和李听到了计划”、“所有三个角色都在场”或“只有帕特看过便条”。除非故事中包含所有人得知该事实的具体时刻,否则不要使用“每个人都知道”作为速记。
一个有用的规则是将每次信息传递都建模为独立的事件。如果李告诉乔椅子在棚子里,乔获得了一条“听说”来源的记录;帕特则没有。如果乔随后给群组发短信,故事可以更新该消息中指明的接收人。如果消息仅写成草稿或仅发送给一个人,它不应被默认为常识。
还要区分共同的事实与共同的解释。几位角色可能都知道礼堂已预订为周六,但对于空间是否足够大却存在分歧。事实记录可以是共通的;估算则属于做出该推论的人。这样既能保持对话的多样性,又不会改变底层的事件。
通过简单的检查来对每个通讯录答案进行知识路由
在角色作答之前,让问题经过以下步骤:
确定问题所请求的具体事实。如果需要,将复合问题拆分为独立的事实。
找到确立每项事实的源事件。如果没有来源,将答案标记为未知或尚未确定。
检查该角色是目睹、听闻、阅读还是推断出该事实。
检查在故事的当前节点,相关的发现门槛是否已经开启。
使措辞与知识类型相匹配:已确认的知识直接回答,道听途说则说明消息来源,推论则使用留有余地的措辞。
删除来自后续场景、私密视角或该角色尚未接触到的来源的细节。
以钥匙为例,乔在拿走备用钥匙后可以说:“备用钥匙在我这儿。”李在那次谈话后可以说:“乔告诉我钥匙在她那儿。”帕特既没有看到也没有听说过钥匙,因此不应确凿地回答。如果帕特根据空着的挂钩进行猜测,回答听起来应该像是一个猜测,并保持这种标记。因此,通讯录可以在不变成全知叙述者的情况下保持灵敏响应。
使用缺失和不完全的知识测试边界
对照几个故事节点测试日常问题:源事件之前、紧随其后、某个角色分享之后,以及更广泛的群体收到之后。只有当相关门槛改变时,答案才应改变。包含一个答案确实未知的问题;一个可靠的通讯录需要一种安全的方式来表达“故事尚未确定此事”。
也要检查不完全的事实。角色可能知道周六要送货,但不知道时间。他们可能在桌子上看到了一本速写本,却不知道是谁留在那里的。保留已知部分,并让其余部分保持悬置,而不是用合理的编造来填补空白。如果故事使用场景标题,请保持源场景可识别;Fountain 的语法指南将场景标题描述为一种独特的剧本元素,可以在剧本工作流中提供便捷的参考标签。(Fountain: Syntax)
当某个回答未通过检查时,修改源记录、发现门槛或答案文本——具体修正实际出错的部分。不要通过让每个角色忘记同一事实来修补泄露。一个简明、明确的知识分类账可以赋予每个联络人可信的认知边界,让读者在不提前获知隐藏场景信息的情况下提出有用的问题。
