feat: Act 1 正式剧本灌装进章节 JSON(43/53/53 节点,含剧本超母本设计:C2-03 第三选项、C3-06 子分支、沉默签名变体)

This commit is contained in:
Jayway Liu
2026-10-03 17:14:23 +08:00
parent 024121deba
commit e6a5ee9d62
3 changed files with 978 additions and 123 deletions
+262 -35
View File
@@ -2,21 +2,45 @@
"id": "chapter1",
"act": 1,
"title": "第 1 章 · 登记",
"startNodeId": "c1-d1",
"startNodeId": "c1-open1",
"nodes": [
{
"id": "c1-open1",
"type": "dialogue",
"speaker": "旁白",
"text": "雨下了三天。你把《苍梧遗址勘探报告(第七次)》的最后一页校完,已经是凌晨一点。这座城你在图上走了七年——城墙的弧度、水门的朝向、西北角那片始终不敢下铲的宫墟,你闭着眼都能画出它的等高线。但它仍然是哑的。没有墓葬被盗扰,没有地层被翻乱,整座城像一颗含了一千年的核桃,完整,沉默,拒绝开口。",
"sprite": "scene",
"next": "c1-open2"
},
{
"id": "c1-open2",
"type": "dialogue",
"speaker": "旁白",
"text": "显示器右下角,弹出一封没有发件人的邮件。只有一行字:「你想不想听听它自己怎么说?——时空档案馆」。你盯着那行字看了很久。窗外雨声很大,像很多人在很远的地方说话。(点击确认即视为知晓:剧情选择将用于为你推荐伴侣。按本心选,没有对错——此提示全剧只出现这一次。)",
"sprite": "scene",
"next": "c1-d1"
},
{
"id": "c1-d1",
"type": "dialogue",
"speaker": "馆长",
"text": "欢迎来到时空档案馆。登记前按例告知一次:你在剧情中的选择将用于为你推荐伴侣。按本心选,没有对错——这句话我只说一遍。",
"text": "欢迎。我是档案馆的……你可以理解为,馆员,或者馆长,称呼不重要。",
"sprite": "curator",
"next": "c1-d2"
"next": "c1-d1a"
},
{
"id": "c1-d2",
"id": "c1-d1a",
"type": "dialogue",
"speaker": "馆长",
"text": "苍梧国,消亡于千年前,只余一座未被盗扰的城墟。你是省考古所研究苍梧的研究员——也是我们选中的口述历史采集员。先登记你的穿越者身份。",
"text": "我们不收藏器物。器物会腐烂,会碎,会被误读。我们收藏的是人怎么活过——一座城消亡前,城里的人吃什么、怕什么、爱什么、最后那几天在做什么。这些东西,仪器采不到,只有人能采集。所以我们需要的采集员,必须自己也是「活过的」。穿越要烧燃料,而燃料只有一种——你的真实人生。烧掉的记忆不会消失,它们会存在档案馆的展厅里,这是后话。",
"sprite": "curator",
"next": "c1-d1b"
},
{
"id": "c1-d1b",
"type": "dialogue",
"speaker": "馆长",
"text": "在点燃第一段燃料之前,先做登记。不是审查,是锚定。穿越者需要一个「回来的坐标」——你是谁,从哪里出发。登记得越实,锚就越稳。",
"sprite": "curator",
"next": "c1-01"
},
@@ -24,15 +48,39 @@
"id": "c1-01",
"type": "identity",
"pointId": "C1-01",
"prompt": "登记之前,先认识一下你。用一两句话介绍自己:称呼、年龄、城市、职业、学历——想到哪说到哪,没有格式。",
"prompt": "登记界面浮现,五项字段以档案卡形式呈现:城市、年龄、性别、职业、学历。用一两句话介绍自己,想到哪说到哪,没有格式——不是审查,是锚定。(性别一栏可以选「不便透露」——无妨,锚不必每个刻度都示人。)",
"dimensions": [],
"next": "c1-d2"
},
{
"id": "c1-d2",
"type": "dialogue",
"speaker": "馆长",
"text": "好了。从现在起,档案编号 C-2049 就是你。这是你的第一枚锚。",
"sprite": "curator",
"next": "c1-d3"
},
{
"id": "c1-d3",
"type": "dialogue",
"speaker": "馆长",
"text": "登记完成。穿越舱前有一扇门——离别之门。它不收钥匙,只收一段真实的离别作祭。",
"text": "档案馆的穿越不是技术,是仪式。门认得的不是脸,是分量。",
"sprite": "curator",
"next": "c1-d3a"
},
{
"id": "c1-d3a",
"type": "dialogue",
"speaker": "馆长",
"text": "这扇叫离别之门。每个采集员的第一次穿越,都从它开始。它不开锁,不收凭证——它要一件祭品:一段真实的离别。",
"sprite": "curator",
"next": "c1-d3b"
},
{
"id": "c1-d3b",
"type": "dialogue",
"speaker": "馆长",
"text": "你生命里那次真正的告别。一个人,一个地方,或者一个再也回不去的自己。讲给它听。讲多少,由你定;不讲,门也理解——只是它不开。",
"sprite": "curator",
"next": "c1-02"
},
@@ -41,25 +89,26 @@
"type": "narration",
"pointId": "C1-02",
"mechanism": "记忆钥匙",
"prompt": "讲一段你真实经历过的离别。是谁都可以,是哪一年都可以。门只听真的。",
"prompt": "请讲述一段你真实经历过的离别。可以是一个人、一个地方、一段关系、一个阶段。说什么、说多少、怎么说,都由你。沉默也是回答。",
"dimensions": ["attachment", "self_disclosure"],
"followUp": {
"maxQuestions": 1,
"strategy": "Jev 六维缺失检测(五感/人物/时空/情绪),按幻境渲染价值取最高缺口,馆长口吻模板追问一句;记不清了合法"
"strategy": "Jev 六维缺失检测(五感/人物/时空/情绪),按幻境渲染价值取最高缺口,馆长口吻模板追问一句;「记不清了」为合法回答,馆长回应:记不清本身,档案馆也会收好。"
},
"followUps": {
"visual": "闭上眼再想一想——那个画面里,最显眼的是什么颜色,或者什么物件?",
"person": "这段离别里,你最想再见到的那个人,是谁?",
"time_place": "那是哪一年的事?在什么地方?",
"emotion": "现在回想起来,心里最先浮上来的,是什么感觉?",
"auditory": "那段记忆里有没有声音?一句话,或是一种声响。",
"olfactory_gustatory": "那天有没有什么气味或味道,你到现在还记得?"
"emotion": "后来很多年,你再想起这件事的时候,心里最先浮上来的是什么?",
"auditory": "那天有什么气味或者声音吗?——不用准确,你记得的那一点就好。",
"olfactory_gustatory": "那天的空气里,有没有一种味道留到了现在?——不用准确,你记得的那一点就好。"
},
"variants": [
{ "signature": "温暖×永失", "variantId": "sealed_love_tomb", "label": "「爱被封存」墓室", "tint": "#d4a96a" },
{ "signature": "悲恸", "variantId": "war_graves", "label": "「战乱乱冢」", "tint": "#5a5a72" },
{ "signature": "释然", "variantId": "empty_post_station", "label": "「远行者的空驿」", "tint": "#7ba7a0" },
{ "signature": "怨怼", "variantId": "desecrated_niche", "label": "「被凿毁的合葬龛」", "tint": "#8a4b4b" }
{ "signature": "温暖×永失", "variantId": "sealed_love_tomb", "label": "「爱被封存」墓室——门后是墓道尽头一方石室,四壁绘着双人同耕、同炊、同观星的壁画,色彩温暖如新。石室中央两座并排的陶棺,棺盖上落满花瓣状的朱砂。空气是静的,静得像有人刚刚还在这里说话。基调:珍重,不是悲伤——有人把最好的东西封存了起来。", "tint": "#d4a96a" },
{ "signature": "悲恸", "variantId": "war_graves", "label": "「战乱乱冢」——门后是荒野,低低的土丘一座挨一座,没有碑,只有削尖的木桩。风把灰白的纸钱碎屑贴在脚踝上,远处有乌鸦起落,天色是黄昏将尽的那种灰蓝。基调:来不及告别——所有话都没说出口,所有名字都没来得及刻上。", "tint": "#5a5a72" },
{ "signature": "释然", "variantId": "empty_post_station", "label": "「远行者的空驿」——门后是一座山间驿站,晨光,桌椅收拾得干干净净,灶膛里的灰还是温的,人已经走了。墙上挂着一件没带走的旧斗篷,桌上压着半张写了又划掉的字条。基调:告别已经完成——走得干净,留得体面,剩下的路各走各的。", "tint": "#7ba7a0" },
{ "signature": "怨怼", "variantId": "desecrated_niche", "label": "「被凿毁的合葬龛」——门后是崖壁上的佛龛式墓龛,本该并坐的两尊石像,其中一尊被凿去了面目,凿痕新鲜得刺眼。香烛还燃着,蜡泪流到龛外。基调:被亏欠——有人毁了约,而另一个人连讨说法的对象都没有。", "tint": "#8a4b4b" },
{ "signature": "沉默", "variantId": "generic_fog", "label": "【沉默分支】馆长:「门不开。但门记住了你站在它面前。这也是档案。」木门以通用的方式无声开启,门后是朦胧的星光与风声,不对应任何一段具体记忆。", "tint": "#4a4a56" }
],
"next": "c1-d4"
},
@@ -67,7 +116,23 @@
"id": "c1-d4",
"type": "dialogue",
"speaker": "馆长",
"text": "门开了。你讲的那段离别,会在这座城的某个角落里等你——别问是哪,到了就知道。",
"text": "门开了。你看——它要的不是故事讲得好不好,是故事真不真。你的记忆已经收进档案馆展厅,编号 C-2049-壹。它现在是你的了:随时可以回看,永远不会被任何人看见,除非你亲手授权。",
"sprite": "curator",
"next": "c1-d4a"
},
{
"id": "c1-d4a",
"type": "dialogue",
"speaker": "旁白",
"text": "木门无声地开了。门后不是房间,是星光和风声。穿门而入是一间圆形简报室,四壁挂满苍梧遗址的复原图与勘测照片——比你桌上那些更全、更新,有些角度现实中根本不存在。",
"sprite": "scene",
"next": "c1-d4b"
},
{
"id": "c1-d4b",
"type": "dialogue",
"speaker": "馆长",
"text": "这是苍梧。一千年前,这座城在三十天里消失了。不是战火——没有焚烧层;不是瘟疫——没有丛葬坑;不是迁徙——府库是满的,水井是活的,有一家的灶上还坐着一锅煮到一半的羹。人,不见了。你的专业是苍梧。现实里你再研究二十年,能摸到的东西也不会比图上这些更多。但三十天后的苍梧,是活的。档案馆给你一张单程票去它的最后三十天——回来靠锚,锚就是你刚才登记的那个自己。",
"sprite": "curator",
"next": "c1-03"
},
@@ -75,21 +140,69 @@
"id": "c1-03",
"type": "choice",
"pointId": "C1-03",
"prompt": "馆长最后问一句:你为什么接这个任务?",
"prompt": "馆长:出发前我要问一个问题,这个问题没有标准答案,档案馆只是需要知道怎么给你派活——你为什么愿意去?",
"dimensions": ["values"],
"options": [
{ "id": "curiosity", "label": "求知——苍梧是我研究了五年的谜", "next": "c1-d5" },
{ "id": "adventure", "label": "冒险——这辈子总得疯一次", "next": "c1-d5" },
{ "id": "escape", "label": "逃避——现实里有些事先放一放", "next": "c1-d5" },
{ "id": "entrusted", "label": "有人托付——我答应过一个人", "next": "c1-d5" }
{ "id": "a_truth", "label": "「我想知道它发生了什么。」一座完整的城在你面前,不挖开看看,这辈子都不甘心。", "next": "c1-d4c" },
{ "id": "b_thrill", "label": "「听起来,这比坐在资料室里有意思多了。」说白了,谁不想真的走进自己研究的东西里去。", "next": "c1-d4c" },
{ "id": "c_escape", "label": "「最近的日子……换个地方待三十天,挺好。」现实里有些事情,正好可以放一放。", "next": "c1-d4c" },
{ "id": "d_trust", "label": "「有人希望我去。」这件事不完全是为自己做的。", "next": "c1-d4c" }
]
},
{
"id": "c1-d4c",
"type": "dialogue",
"speaker": "馆长",
"text": "记下了。动机不问对错,只问真假——虚的动机撑不过三十天,真的那个会把你带回来。",
"sprite": "curator",
"next": "c1-d5"
},
{
"id": "c1-d5",
"type": "dialogue",
"speaker": "阿棠",
"text": "(集结甲板,她第一个冲过来)来了来了!第五个人!哎你就是那个研究苍梧七年的?那你得给我们讲讲,那城底下到底是不是真的有——",
"sprite": "atang",
"next": "c1-d5a"
},
{
"id": "c1-d5a",
"type": "dialogue",
"speaker": "沈铎",
"text": "(头也不抬)阿棠。规程第三条,出发前不讨论未经证实的传闻。",
"sprite": "shenduo",
"next": "c1-d5b"
},
{
"id": "c1-d5b",
"type": "dialogue",
"speaker": "阿棠",
"text": "行行行,规程哥。",
"sprite": "atang",
"next": "c1-d5c"
},
{
"id": "c1-d5c",
"type": "dialogue",
"speaker": "温简",
"text": "(对你点点头,声音不高)温简。记录的。路上你说什么,我都尽量记下来——记不全的,回头你得给我补。",
"sprite": "wenjian",
"next": "c1-d5d"
},
{
"id": "c1-d5d",
"type": "dialogue",
"speaker": "老鬼",
"text": "穿越舱外,资源官老鬼叼着草根凑过来:「我说,到了那边顺手带点『纪念品』回来,苍梧的玉,一块够吃三年。怎么样?」队里没人表态,都看着你。",
"text": "(踱过来,压低声音,笑容不变)新人,第一次见面,老鬼我送你句话。咱们这趟,公是公,私是私——采集归档案馆,可要是顺手带回点小纪念品,一两件,不值钱的,留个念想,你说是不是人之常情?",
"sprite": "laogui",
"next": "c1-d5e"
},
{
"id": "c1-d5e",
"type": "dialogue",
"speaker": "旁白",
"text": "沈铎核对清单的手停了半拍。阿棠翻了个白眼但没说话。温简看向别处。没人接话。所有人的余光都在你身上。",
"sprite": "scene",
"next": "c1-04"
},
{
@@ -99,16 +212,65 @@
"prompt": "老鬼的提议悬在空气里,你接不接话?",
"dimensions": ["values", "conflict_style"],
"options": [
{ "id": "refuse", "label": "「我们是去记录的,不是去拿的。」当场回绝", "next": "c1-d6" },
{ "id": "joke", "label": "「先想想怎么活着回来吧。」打个岔混过去", "next": "c1-d6" },
{ "id": "silent", "label": "不接话,登舱", "next": "c1-d6" }
{ "id": "a_confront", "label": "「东西留在原地,才叫历史。带回来,就只是赃物。」(当着所有人,把话说死)", "next": "c1-04-ra" },
{ "id": "b_deflect", "label": "「鬼哥这话说的——先看有什么,再说带不带呗。」(打个哈哈,不接也不顶)", "next": "c1-04-rb" },
{ "id": "c_redirect", "label": "(不接话,转向沈铎)「队长,落点方案定了么?」(用正事把这个话题盖过去)", "next": "c1-04-rc" },
{ "id": "d_play_along", "label": "(笑)「行啊,回头鬼哥带我见识见识行情。」(顺着他说,看看他到底想干什么)", "next": "c1-04-rd" }
]
},
{
"id": "c1-04-ra",
"type": "dialogue",
"speaker": "老鬼",
"text": "哟,较真的。好,好,较真好,队里就缺个较真的。(他笑呵呵退开,不再提。不远处,沈铎核对清单的手,稳了稳。)",
"sprite": "laogui",
"next": "c1-d6"
},
{
"id": "c1-04-rb",
"type": "dialogue",
"speaker": "老鬼",
"text": "哈哈,对嘛——先看看,先看看。(他笑眯眯地踱开,这个话题像没发生过。没人记下什么,也没人忘掉什么。)",
"sprite": "laogui",
"next": "c1-d6"
},
{
"id": "c1-04-rc",
"type": "dialogue",
"speaker": "沈铎",
"text": "(第一次抬头看你)定了。两份方案,等下让你选。(顿了顿)谢谢。",
"sprite": "shenduo",
"next": "c1-d6"
},
{
"id": "c1-04-rd",
"type": "dialogue",
"speaker": "老鬼",
"text": "(眼睛一亮,拍你肩膀)上道!回头细聊,细聊。(不远处,沈铎的眉头皱了一下。)",
"sprite": "laogui",
"next": "c1-d6"
},
{
"id": "c1-d6",
"type": "dialogue",
"speaker": "沈铎",
"text": "队长沈铎递来一块残碑拓片:「穿越落点要靠碑文校准。你是研究苍梧的,这几个字,认一认。」",
"text": "(校准室,残碑复制品旁)队里规矩。进遗址前,每人过一遍手。不是考你——是让你知道,下去之后,你的专业就是全队的眼睛。",
"sprite": "shenduo",
"next": "c1-d6a"
},
{
"id": "c1-d6a",
"type": "dialogue",
"speaker": "阿棠",
"text": "(小声)别紧张,我上次就没过,他不也带我去了。",
"sprite": "atang",
"next": "c1-d6b"
},
{
"id": "c1-d6b",
"type": "dialogue",
"speaker": "沈铎",
"text": "碑额这一个字,小篆之前的写法,比小篆老。认出它,知道它在说什么,就算过。",
"sprite": "shenduo",
"next": "c1-05"
},
@@ -116,20 +278,85 @@
"id": "c1-05",
"type": "choice",
"pointId": "C1-05",
"prompt": "残碑上刻着「惟苍之梧,□祀于□」。两个缺字怎么补?",
"prompt": "碑额拓片特写:上方是屋顶(宀),屋顶之下一个安坐的人形,膝前有衣袂垂落之态——宀下一个女子安坐的形象。这是什么字?它刻在碑额上,意味着这是什么碑?(可主动求提示,每用一档降一档解谜评分,不设失败:一档拆字、二档给构件含义、三档给答案范围。)",
"dimensions": ["culture"],
"options": [
{ "id": "easy", "label": "补「燎 / 河」——祭祀常见搭配,稳妥(低难度)", "next": "c1-d7" },
{ "id": "medium", "label": "补「禘 / 丘」——苍梧多丘陵,禘祭合礼制(中难度)", "next": "c1-d7" },
{ "id": "hard", "label": "存疑不补——缺字处留白才是考古的态度(高难度)", "next": "c1-d7" }
{ "id": "stele_guardian", "label": "「安」。室中有女,安坐不惊——这是镇城安民碑,碑额朝向即古城安门所在。", "next": "c1-05-ok" },
{ "id": "stele_tomb", "label": "「安」。安魂之意——这是墓碑,镇的是墓主的安宁。", "next": "c1-05-miss" },
{ "id": "stele_merit", "label": "「宁」。定鼎纪功——这是记功碑,记的是立碑人的功业。", "next": "c1-05-miss" },
{ "id": "stele_boundary", "label": "「定」。划定疆界——这是界碑,标的是城的四至。", "next": "c1-05-miss" }
]
},
{
"id": "c1-05-ok",
"type": "dialogue",
"speaker": "沈铎",
"text": "(点头)碑额朝向安门,碑身镇的是城的安危。西北角那片宫墟,勘探七年没动过——如果苍梧人有「安放」什么的地方,就在那里。",
"sprite": "shenduo",
"next": "c1-d6c"
},
{
"id": "c1-05-miss",
"type": "dialogue",
"speaker": "沈铎",
"text": "(不贬不褒)字认不全不要紧,方向对就行。(指着碑额)这个字是「安」。记住它,下去之后你会再见到它。",
"sprite": "shenduo",
"next": "c1-d6c"
},
{
"id": "c1-d6c",
"type": "dialogue",
"speaker": "阿棠",
"text": "哎,你发现没有,这碑立得跟许愿似的。结果许愿的人全没了。(没人接她的话。)",
"sprite": "atang",
"next": "c1-d7"
},
{
"id": "c1-d7",
"type": "dialogue",
"speaker": "沈铎",
"text": "「最后一个参数:落点。稳妥落点在城外五里,走官道进城与接头人遇合;精确落点直接落在城内——省时,但那片城区的记录是空白,风险未知。」",
"text": "(穿越舱前)两份落点方案,规程要求由采集员本人选定,责任自负。我只陈述,不建议。",
"sprite": "shenduo",
"next": "c1-d7a"
},
{
"id": "c1-d7a",
"type": "dialogue",
"speaker": "沈铎",
"text": "方案一,稳妥落点。城外三十里,官道驿站。落点误差容限大,我们有一整天时间徒步接近城邑,沿途观察,先接触城外的人。坏处——城外的消息比城里慢三天,我们能采集的时间少一天。",
"sprite": "shenduo",
"next": "c1-d7b"
},
{
"id": "c1-d7b",
"type": "dialogue",
"speaker": "沈铎",
"text": "方案二,精确落点。直接进城,西市附近。时间一分钟不浪费。坏处——精确落点的误差容限是零,而苍梧最后一个月的城里,我们没有一份可靠的街区图。落在哪条巷子,巷子里有什么,没人能保证。",
"sprite": "shenduo",
"next": "c1-d7c"
},
{
"id": "c1-d7c",
"type": "dialogue",
"speaker": "阿棠",
"text": "(小声,但人人都听得见)反正我喜欢第二个。来都来了。",
"sprite": "atang",
"next": "c1-d7d"
},
{
"id": "c1-d7d",
"type": "dialogue",
"speaker": "老鬼",
"text": "(笑眯眯)稳妥稳妥,人活着才能谈采集嘛。当然,你定,你定。",
"sprite": "laogui",
"next": "c1-d7e"
},
{
"id": "c1-d7e",
"type": "dialogue",
"speaker": "温简",
"text": "(看了你一眼,没说话。)",
"sprite": "wenjian",
"next": "c1-06"
},
{
@@ -139,15 +366,15 @@
"prompt": "穿越落点,选哪个?",
"dimensions": ["risk"],
"options": [
{ "id": "safe", "label": "稳妥落点:城外遇合,按规程来", "next": "c1-cutscene" },
{ "id": "precise", "label": "精确落点:直接进城,赌一把", "next": "c1-cutscene" }
{ "id": "a_safe", "label": "稳妥落点:城外驿站,走一天官道进城。", "next": "c1-cutscene" },
{ "id": "b_precise", "label": "精确落点:直接落在苍梧城内,西市。", "next": "c1-cutscene" }
]
},
{
"id": "c1-cutscene",
"type": "cutscene",
"video": "cutscene-crossing",
"caption": "【预生成视频占位】穿越:光带收束,千年在一秒内倒退。",
"caption": "舱门合拢。倒计时的最后十秒,馆长的声音最后一次响起,很近,像贴着耳朵:「C-2049,最后嘱咐一句。那边的三十天里,你会看到很多想不明白的事。别急着明白。先记住。」然后,光灭下去,风声起来。",
"next": "c1-end"
},
{