一部公平的推理小说同时以两种顺序讲述。一种是事情发生的顺序:星期二买下毒药,九点在白兰地里做手脚,黎明时发现尸体。另一种是读者得知这些事的顺序,而那是你刻意安排的。公平推理就藏在这两者之间的缝隙里。侦探用到的每一条线索,都必须在谜底之前送到读者面前;嫌疑人说的每一个谎,都必须能被读者已经亲眼见过的证据拆穿。
大多数作者把这两种顺序记在脑子里,或者记在一张表格里,而到了第三稿,表格早已和稿件对不上。Lokee 把它们作为同一批角色身上两条独立的轴来保存。于是你可以提出精确的问题。读到第 9 章时,读者认为死者的死因是什么?到真相揭晓时,哪些不在场证明还没被推翻?督察引用药剂师的账簿之前,这本账簿真的在书页上出现过吗?
本指南会搭建一桩小型的虚构案件,完整走一遍工作流程,然后列出常见的错误,以及这款应用帮不上忙的地方。如果“不同的何时”这个概念对你来说还很陌生,请先阅读三种“何时”;本指南是把那个想法应用到一种具体的类型小说上。
本指南追踪的案件
一个星期六的早晨,Lord Edmund Ashby 被发现死在 Greyfold House(他的庄园)的书房里。验尸结论是心脏衰竭。Inspector Maud Rennick(负责此案的督察)却另有怀疑。真相要到第 18 章读者才会知道:家庭医生 Dr Hollis 在星期五晚上九点往那瓶白兰地里下了毒。他的不在场证明是整晚都在牧师寓所下国际象棋,而牧师也为他作证。
稿件中的顺序是:
- 第 1 章:发现尸体。
- 第 2 章:验尸结论说是心脏衰竭。
- 第 3 章:Hollis 随口提到自己去过一趟药剂师那里。
- 第 4 章:Hollis 的证词。牧师寓所,八点到十点。
- 第 14 章:牧师寓所里停摆的时钟。
- 第 18 章:真相揭晓。
世界中的顺序则不同:星期二去药剂师那里,星期五八点晚餐结束,八点四十五分 Hollis 离开牧师寓所,九点白兰地被下毒,十点 Ashby 喝下它,星期六七点发现尸体。其中有两个时刻在书里从未被直接写出来。这在推理小说里再正常不过,而这正是 Lokee 设计来容纳的东西。
先按世界顺序搭建罪案
从真相开始,因为其他一切都要拿它来衡量。在侧边栏中打开时间线。顶部的面板是世界年表,提示写着“重要的是顺序,日期可填可不填。”为谜底所依赖的每个时刻各添加一个时间点:Hollis 购买洋地黄、晚餐结束、Hollis 离开牧师寓所、白兰地被下毒、Ashby 喝下白兰地、发现尸体。
用 ↑ 和 ↓ 按钮(向前移动、向后移动)把它们排成实际发生的顺序。没有拖放,就是这两个箭头。对推理小说来说,日期值得填写,因为不在场证明说到底就是关于钟点的。在每个时间点的日期(可选)控件中选择现实日期,填入日期,再填写时间(可选):星期五的 20:45、21:00、22:00。如果你的推理故事发生在虚构世界里,可以改用你自己的历法;为虚构世界构建历法与时间线介绍了如何设置。
如果你输入的日期早于你排在它前面的某个时间点,这个时间点会显示一条琥珀色提示,“此日期早于上一个时间点的日期。已保留你设定的顺序。”,而且不会移动任何内容。在推理小说里,这有时正是计划的一部分:一封落款日期在案发之后的伪造信件,可以放在它真正被写下的位置上。
接下来记录世界当时的样子。在 Ashby 的卡片上添加一个字段,例如 死因,把它的“当前”值设为 洋地黄中毒。“当前”就是你此刻所知的真相。对于那些在当晚发生变化的字段,使用旁边的记录一次变化…,并在什么时候中选择一个世界时间点。记录变化,而不是覆盖详细介绍了这个对话框。
逐章标记读者被告知了什么
第二条轴存在于稿件之中。在写作台中打开一章,选择视图 → 叙事顺序。面板上的提示说明了它的用途:“按读者了解事件的先后排列,而非事件发生的时间。”为每一个改变读者认知的情节点添加一个节点:第 2 章的 验尸结论、第 3 章的 提及药剂师、第 4 章的 Hollis 的证词。每个节点都关联位置到整章或本章的某个标题。整章是更经得起折腾的选择:如果你之后重命名了某个节点所关联的标题,这个节点会退回到章节级别,并明确告诉你,而不会去猜测。
现在记录稿件在这些节点上呈现了什么。打开 Ashby,使用 死因 旁边的记录一次变化…。什么时候列表会同时提供两类时刻(“可以选择世界年表中的时刻,也可以选择稿件中的叙事节点。”)。选择 验尸结论,把值设为 心脏衰竭。或者,打开卡片的历史标签页,使用记录一项变化表单,把轴设为叙事顺序。
卡片上什么都不会变。“当前”仍然是 洋地黄中毒。你添加的是一条关于这本书的陈述,而不是关于这个世界的陈述。要回看它,把条目页面顶部的查看设为稿件中下的某个节点。提示会显示“正在查看读者读到……时已知的信息”,卡片则显示读者在那个位置所相信的内容。
有一个习惯能让这件事变得很省力:写完场景的同一次坐下来,就把叙事节点加上。一章告诉了读者某件假话,就是一章多了一条记录。拖到一个月之后再做,就得重读整章才能想起自己暗示了什么。边写边构建世界观讲的是世界那一侧的同一种习惯。
可以审计的误导:“读者还不知道”
所谓红鲱鱼,就是稿件告诉读者的某件事与真相相矛盾的地方。Lokee 会把它们列出来。打开一致性检查,运行运行规则检查(免费)。在仅供参考下,你会看到名为读者还不知道的发现,例如“读者知道 Lord Edmund Ashby 的“死因”是 心脏衰竭”。打开其中一条,会显示对应的叙事节点、稿件在那里呈现的内容,以及卡片当前的值,并附上一句“这项变化可以稍后再向读者揭示。”
这一组永远只是信息,绝不是错误。在推理小说里,它就是书页上每一处误导的工作台账。每次改稿前读一遍,并对其中每一行问两个问题。这是刻意的欺骗吗?我兑现了吗?如果某一行是无意中出现的,比如你在第 2 章写了心脏衰竭,却从没打算让验尸出错,那你发现的是一处连贯性疏漏,而不是一条线索。
关于这份列表还有一点要知道:你记录了揭晓之后,它并不会自己清空。这条发现针对的是第 2 章的叙事节点,稿件在那里呈现的是心脏衰竭,而这一点在第 18 章说出真相之后依然成立。把这份列表读作“书中误导读者的每一处”,而不是“尚未收回的误导”。每一处是否得到了兑现,要看你对结局的判断,这仍然是一项手工活。
什么算作“尚未记录”,由你决定。设置 → 写作 → 尚未记录读者所知内容时决定了在某个叙事节点上、你对某个字段什么都没记录时它显示什么:显示正史值(“在你另行记录之前,默认读者看到的就是真实情况。”)或不显示值(“在你记录稿件呈现的内容之前,不显示任何内容。”)。无论哪种,这个字段都会被标为“尚未记录”。对推理小说来说,不显示值通常是更诚实的选择。推理小说的读者不该被默认为知道真相。
每次动笔前做一次一致性检查解释了其他各类发现,以及如何单独关闭某项检查。
每条线索都在揭晓前埋好了吗?
公平推理最古老的规则是:侦探用到的每一条线索,都必须展示给读者。这一点可以机械地检验。
在设置 → 结构 → 条目类型中为线索建一个条目类型。命名为 线索,并添加一个文本字段 读者看到的内容。为谜底所依赖的每一件证据各建一条线索:药剂师的账簿、停摆的牧师寓所时钟、第二只白兰地酒杯。把“当前”值写成这条线索的完整含义,也就是侦探在第 18 章所做的解释。
然后,每当某条线索出现在书页上,就在那个叙事节点上沿叙事轴记录一次变化:读者在那里实际看到的内容。以账簿为例,在第 3 章的 提及药剂师 处记录:Hollis 说他星期二去过药剂师那里。读者得到的只有这么多,但这已足够公平。
现在把查看设为揭晓前的最后一个叙事节点,逐一打开每条线索。读者已经见过的线索会显示你记录的值。从没写上书页的线索则显示“尚未记录”。在这个位置上,每一条“尚未记录”的线索都是一次公平性失败:侦探即将使用一件读者从未见过的证据。
如果想按角色来看,打开某个嫌疑人的历史标签页,使用呈现于。选择稿件中的一个位置,Lokee 会列出截至那里稿件对每个字段的呈现(“读者读到这里时已知的信息,与正史中的实际情况分别记录。”),并标出每个值来自哪个叙事节点,旁边附上正史值。在第 17 章把 Hollis 的这份列表从头看到尾,你就能确切知道读者手里握有哪些对他不利的东西。
“查看”控件中的**对比…**会把两个时刻并排放在一起,并高亮有差异的行:在 Hollis 的卡片上拿第 4 章对比第 17 章,整个调查过程一眼便知。
一致性检查能拆穿的不在场证明
不在场证明,就是声称某人在某个特定时刻身处别处。Lokee 的一致性检查里恰好有一项发现是为这种结构准备的:同时在两处。这是一个“问题”级别的发现,当两条记录在同一个世界时间点把同一个人放在两个不同的地方时就会触发。
它需要知道你的哪个字段表示某人在哪里。在设置 → 结构 → 条目类型中,给你的角色类型添加一个地点类型的字段,或者一个勾选了表示某人所在的位置的文本字段。地点字段总会被计入。除此之外,Lokee 没有别的办法知道你的哪个字段代表位置。
然后在同一个时间点 白兰地被下毒 上,把当晚的两个版本都记录下来:
- 真相:
行踪→ Greyfold House,原因写实际发生的事; - 说辞:
行踪→ 牧师寓所,原因写Hollis 的证词,第 4 章。
运行检查,“问题”中会列出“Dr Hollis 在白兰地被下毒同时出现在两处”。这条发现,就是你的督察必须拆穿的那个不在场证明,只不过是用 Lokee 的语言写出来的。在任何同时画出了这两个地点的地图上,也会显示同样的冲突:侧边面板会把他列在同时位于两个地方之下,而不是替你二选一。
从这项检查的工作方式,可以得出三条实用规则:
- **把不在场证明钉在同一个时刻上。**检查比较的是同一个时间点上的记录。如果说辞记录在 21:00,真相记录在 21:05,就什么也不会被标出。先决定这个不在场证明针对的是哪个时刻,再把两个版本都记录在那里。
- **旁证不会被检查。**牧师说 Hollis 和他在一起,这是牧师卡片上的另一条记录。Lokee 不会注意到两个说谎者口径一致,它只会注意到一个人同时身处两地。
- 记录不变,发现就一直在。点接受或驳回只会在本次会话中忽略一条发现。这正适合推理小说:当情节不再需要那条说辞时,删掉那条记录,发现也就随之消失。
从现有草稿中提取不在场证明
如果这些证词已经写在你的草稿里,提取功能可以为你建议相应的记录。在写作台中运行从本章提取设定(或对证词本身使用从选中内容提取设定),并勾选查找事件、地点和日期(较慢)。这样,提取会建议角色在哪里、发生了什么以及何时发生。日期只会来自文本本身,要么是文中写明的日期,要么是从文中某个明确日期推算出的“第二天”之类的说法;新的地点和事件只有在你接受之后才会创建。
证词恰恰是这一点最值回票价的地方。如果文本只是转述某人的行踪(“Hollis 说他当时在牧师寓所”),这条建议会被标为转述而非陈述,显示为转述,未经证实;如果文本点明了说话人,则显示为由(说话人)转述,未经证实。接受后,这一标记会作为备注保留下来。每条建议还带有读者在哪里得知,即稿件呈现它的那一章。你可以选择或新建一个世界时间点,或者选择暂不确定。
这是 AI 提取,所以会产生费用:云端世界库使用 Lokee 点数,桌面应用中的本地世界库可以使用你自己的服务商密钥或本地模型。所有内容都要经过审校;在你接受之前,什么都不会被写入。把现有草稿变成故事设定集完整介绍了提取与审校。
当你改变凶手时
推理情节往往是从结尾倒着改的。如果你在第三稿决定下毒的是 Clara 而不是 Hollis,这是你改变了主意,而不是你的世界里发生了什么事,Lokee 会区别对待这两者。
你对“当前”值所做的修改,比如 Hollis 的 在罪案中的角色、Clara 的动机,都会被记作修订。修订页面会逐条列出每次修改:原来是什么、现在是什么、在哪里改的,并让你补充一个原因(“为什么?(可选)”)。在云端世界库中,它位于侧边栏;在本地世界库中,按 Ctrl+K 并选择前往修订打开。给重要的修改写一句简短的原因(“谜底改为 Clara,第三稿”),几个月后再看,这部情节的演变史依然清晰可读。
当晚发生的事本身是已记录的历史,所以要在历史里修正。把查看设为 白兰地被下毒,打开 Clara,编辑她的 行踪。Lokee 会问“如何记录这次修改?”,并提供在(该时刻)记录一项变化或编辑设定此值的记录两个选项。纠正一条你录错的记录,选第二项;为那个时刻补充新的内容,选第一项。如果 Hollis 不再需要不在场证明,就在他的历史标签页中删除相关记录。删除一条已记录的变化时,会留下一条修订,说明删掉了什么。
如果你还没拿定主意,那就干脆不要覆盖原来的案件。在两种谜底分道扬镳的时刻创建一条时间线分支,在那里把另一种可能推演出来;架空历史与分支时间线介绍了具体做法,那篇文章最后一条做法就是专为推理小说写的。
常见错误,以及各自的修正
**把谎言当成真相记录。**你把 Ashby 的“当前”死因 设成了 心脏衰竭,因为第 2 章是这么写的。于是揭晓时无可揭晓,检查也无从比较。“当前”永远是真相;第 2 章是叙事轴上的一条记录。
**两个版本记在两个不同的时刻。**说辞记在 晚餐结束,真相记在 白兰地被下毒。没有任何发现,你便断定检查坏了。两条记录都要放在不在场证明所覆盖的那个时刻。
**线索没有自己的条目。**账簿只是 Hollis 描述里的一句话,所以你没法在某个叙事节点上查看它,也看不出它埋没埋。凡是谜底所依赖的东西,都给它一张 线索 卡片。
驳回了发现,然后忘了它。点接受和驳回只在本次会话中有效,所以星期一挥手打发掉的发现,星期二又回来了。这是设计如此。如果一条发现应该永久消失,就改掉或删掉它背后的记录。
让正史值漏了出来。开着显示正史值时,一条你忘了记录的线索在每个叙事节点上看起来都像埋好了,因为字段会回退到真相。对推理小说来说,运行公平性测试之前先切换到不显示值。
Lokee 为推理小说做不到的事
它不会告诉你谜题是否可解,读者会不会在第 9 章就猜到 Hollis,或者牧师的证词可不可信。检查比较的是记录;它们不读这本书。本指南里的公平性测试,只取决于你花心思建模的那些线索,而一条你从未创建的线索,没有任何东西会提醒你。
还有一个较小的空白:检查只在一个共同的时间点上比较地点,所以一段跨越两小时的不在场证明,是你选定的一个时间点,而不是它能理解的一个时间段。决定哪个时刻要紧,在那里记录两个版本。
五分钟过一遍整个案件
如果你想先在自己的案件上试试这套流程,再决定要不要认真投入,最短的路径是这样:
- 时间线:按顺序添加谜底所依赖的三个时刻。如果不在场证明关乎钟点,就标上日期。
- 在死者的卡片上,把真正的死因设为“当前”值。在稿件说法不同的那一章添加一个叙事节点,在那里记录假的值。
- 给你的角色类型一个地点字段。在案发那一刻,记录凶手真正在哪里,以及他声称自己在哪里。
- 运行运行规则检查(免费)。你应该会看到一条同时在两处和一条读者还不知道。
- 把查看设为那一章,看着卡片对你撒谎。
揭晓前的检查清单
在动笔写侦探解释一切的那一章之前:
- 运行规则检查。每一条同时在两处的发现,都应该是你打算在书中拆穿的不在场证明;其他的都是错误。
- 阅读读者还不知道。每一行都应该是你会在揭晓时兑现的误导。
- 把查看设为揭晓前的最后一个叙事节点,逐一打开每条线索。任何显示“尚未记录”的线索,都还没有埋下。
- 在这个位置上,对真凶的历史标签页使用呈现于。读者应当能仅凭其中列出的内容给他定罪。
- 在死者的卡片上对比第一章和揭晓前的那一章,看清读者被告知内容的完整弧线。
一致性检查、叙事节点和“查看”控件在桌面应用和浏览器中都可以使用;Android 应用不包含一致性检查,而且这一切都不需要 AI,也不消耗点数。互动演示里有一个小型世界库,你可以先在那里试试“查看”和时间线,再搭建自己的案件。各项功能的参考说明,请参阅帮助中的时间、一致性检查和文档导入。