diff --git a/content/chapters/chapter1.json b/content/chapters/chapter1.json index e3ec129..108bc0f 100644 --- a/content/chapters/chapter1.json +++ b/content/chapters/chapter1.json @@ -80,7 +80,7 @@ "id": "c1-d3b", "type": "dialogue", "speaker": "馆长", - "text": "你生命里那次真正的告别。一个人,一个地方,或者一个再也回不去的自己。讲给它听。讲多少,由你定;不讲,门也理解——只是它不开。", + "text": "你生命里那次真正的告别。一个人,一个地方,或者一个再也回不去的自己。讲给它听。讲多少,由你定。不讲,门也开——它只是以另一种方式认得你。", "sprite": "curator", "next": "c1-02" }, @@ -108,7 +108,7 @@ { "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" } + { "signature": "沉默", "variantId": "generic_fog", "label": "【沉默档 · 门照常开启】门对所有人开,这是铁律。门后是朦胧的星光与风声,不对应任何一段具体记忆——它以另一种方式认得你。", "tint": "#4a4a56" } ], "next": "c1-d4" }, @@ -116,7 +116,7 @@ "id": "c1-d4", "type": "dialogue", "speaker": "馆长", - "text": "门开了。你看——它要的不是故事讲得好不好,是故事真不真。你的记忆已经收进档案馆展厅,编号 C-2049-壹。它现在是你的了:随时可以回看,永远不会被任何人看见,除非你亲手授权。", + "text": "【若 c1_02_signature != silent:门开了。你看——它要的不是故事讲得好不好,是故事真不真。】【若 c1_02_signature = silent:门开了。沉默也是档案的一种质地——它认得站在它面前的人,不一定需要言语。】你的记忆已经收进档案馆展厅,编号 C-2049-壹。它现在是你的了:随时可以回看,永远不会被任何人看见,除非你亲手授权——展厅,以及往后路上任何由它生出的幻境,都只有你能进入。在旁人眼里,你只是安静地站了一会儿。", "sprite": "curator", "next": "c1-d4a" }, diff --git a/content/chapters/chapter2.json b/content/chapters/chapter2.json index 48bfa5e..d7d9690 100644 --- a/content/chapters/chapter2.json +++ b/content/chapters/chapter2.json @@ -101,7 +101,7 @@ "id": "c2-01-rb", "type": "dialogue", "speaker": "旁白", - "text": "温简烧到第三日才退,虚弱期内无法随行(篝火戏他躺在火边参与)。沈铎与老鬼无恙。老鬼对你明显热络。", + "text": "温简烧到第三日才退,虚弱期按沈铎命令留营待命。沈铎与老鬼无恙。老鬼对你明显热络。", "sprite": "scene", "next": "c2-d3" }, @@ -116,8 +116,8 @@ { "id": "c2-01-rd", "type": "dialogue", - "speaker": "沈铎", - "text": "议事占了半个上午,当日采集推迟半天。议出的章程是「先病后险」,温简得药。事后沈铎单独对你说:「章程比裁断慢。但下次不用你裁。」", + "speaker": "旁白", + "text": "议事占去半个上午。章程议出来了——「先病后险,依次补给」,往后照此办理。但章程落定之前,队里是没有规矩的:老鬼早就不耐烦,按他那套「贡献论」把药先分了——他和沈铎各一份,木已成舟。沈铎没有拦;药入了他手,他搁在箱上没动,等章程。等章程出来,温简的烧已经又上去一轮,药再喂下去,晚了半日。事后沈铎把章程抄在记录板第一页,单独对你说:「往后不用议了。这次慢掉的半日,记在我账上。」——你赢了往后每一次,输了眼前这一次。", "sprite": "shenduo", "next": "c2-d3" }, @@ -125,7 +125,7 @@ "id": "c2-d3", "type": "dialogue", "speaker": "守墓老人", - "text": "(城北墓道,他坐在坟头之间编草绳,不抬头)生面孔。城里来的?不像。城里人的脚,这两个月不沾泥——不敢沾。", + "text": "【若 wenjian_health = weak:温简不在场——服过药,烧退了,沈铎命令他留营待命。】(城北墓道,他坐在坟头之间编草绳,不抬头)生面孔。城里来的?不像。城里人的脚,这两个月不沾泥——不敢沾。", "sprite": "elder", "next": "c2-d3a" }, @@ -157,7 +157,7 @@ "id": "c2-d3d", "type": "dialogue", "speaker": "守墓老人", - "text": "(眯眼看你,手指点过来)就你。你眼睛里有事。讲一个你这辈子最后悔的决定。讲得好,陵区的门朝哪边开,我全告诉你;讲得不好——(低头继续编草绳)草绳缺个搭手的,你就陪我编到天黑吧。", + "text": "(眯眼看你,手指点过来)就你。你眼睛里有事。讲一个你这辈子最后悔的决定。讲了,陵区的门朝哪边开,我全告诉你;不讲——(低头继续编草绳)草绳也缺个搭手的,边编边说给你听,一样。老头子收故事,是想听,不是拿它换钱。", "sprite": "elder", "next": "c2-02" }, @@ -166,7 +166,7 @@ "type": "narration", "pointId": "C2-02", "mechanism": "故事换情报", - "prompt": "老人收故事不收钱。请讲述一件你此生最后悔的决定。说多少、怎么说,由你。保持沉默,老人也不赶人——只是换到的,就只能是草绳了。", + "prompt": "老人收故事不收钱。请讲述一件你此生最后悔的决定。说多少、怎么说,由你。不讲也行——陪他编一下午草绳,他该说的,一句也不会少说。", "dimensions": ["values", "emotional_stability"], "followUp": { "maxQuestions": 1, @@ -181,10 +181,10 @@ "olfactory_gustatory": "人呐,记性最靠的是鼻子和舌头——那阵子有什么味道?" }, "variants": [ - { "signature": "自责", "variantId": "intel_full", "label": "【上档 · 夜探陵区】月色下的陵区,石像生的影子很长。老人亲自带路,指出暗门位置,并赠一句关于苍梧消亡的民间谶语:「不是人走了,是请走的。」他不点火把——「陵里的路,闭眼走比睁眼走直」。基调:被信任的厚重——老人把六十年的秘密交出来,因为他在你的悔里认出了他自己。", "tint": "#6a8a6a" }, - { "signature": "遗憾但坦然", "variantId": "intel_mid", "label": "【中档 · 界碑指路】老人口述暗门方位与开启时辰,不带路,加赠半句谶语。他送到陵区界碑就回窝棚了,你们自己走进月下的封土群,找到他说的那块「会唱歌的石头」。基调:得体的距离——他认可你的坦然,但坦然换不来托付。", "tint": "#a0964b" }, - { "signature": "愤怒指向他人", "variantId": "intel_low", "label": "【下档 · 只给方位】老人听完,编草绳的手停了很久。指了路,说了句「去吧」,就再没开口。没有时辰,没有谶语,陵区的路你们自己摸,多花了半夜。基调:未被接住——不是惩罚,是他不敢把陵区的门交给一个心里还在打仗的人。", "tint": "#9a5b4b" }, - { "signature": "沉默", "variantId": "intel_silent", "label": "【沉默 · 编草绳支线】你陪他编了一下午草绳。天黑时老人忽然说:「不说的人,心里的事最重。」他指了暗门方位,没给时辰。基调:笨拙的善意——沉默被尊重,且沉默本身被老人读懂了。", "tint": "#7a6a52" } + { "signature": "自责", "variantId": "intel_full", "label": "【带路】月色下的陵区,石像生的影子很长。老人亲自举火把,带你们走到暗门口——「陵里的路,闭眼走比睁眼走直」。行至暗门,他忽然说起自己年轻时也悔过一件事,说了半句,摆摆手不说了。基调:被信任的厚重。", "tint": "#6a8a6a" }, + { "signature": "遗憾但坦然", "variantId": "intel_mid", "label": "【同路】老人送到界碑,把话说完——方位、时辰、完整的谶语一句不少——指了方向就回窝棚。你们自己走进月下的封土群,找到他说的那块「会唱歌的石头」。临别他多说一句:「放得下的,才叫过去。」基调:得体的距离。", "tint": "#a0964b" }, + { "signature": "愤怒指向他人", "variantId": "intel_low", "label": "【指路】老人听完,编草绳的手停了很久。该指的路、该说的时辰,一句没少,只是没再多看你一眼。陵区的路你们自己走进去,他站在界碑外,没有送。基调:话到,情未到。", "tint": "#9a5b4b" }, + { "signature": "沉默", "variantId": "intel_silent", "label": "【草绳】你陪他编一下午草绳,他絮絮地说,你默默地听。天黑前,该知道的你都知道了——方位、时辰、谶语,一句不少。临走他说:「不说的人,心里的事最重。重的别久揣。」基调:笨拙的善意。", "tint": "#7a6a52" } ], "next": "c2-d4" }, @@ -192,7 +192,7 @@ "id": "c2-d4", "type": "dialogue", "speaker": "守墓老人", - "text": "(听完,沉默片刻,把编好的草绳往肩上一搭)行。是真的。真的东西,听得出来——假故事讲得溜,真故事讲得磕巴。走吧,趁天没黑,带你们看个地方。", + "text": "(听完,沉默片刻,把编好的草绳往肩上一搭)行。是真的。真的东西,听得出来——假故事讲得溜,真故事讲得磕巴。【若 c2_02_signature = silent:(他不追问,只在日头偏西时拍拍手上的草屑)不说的人,心里的事最重。重的别久揣。】(无论讲没讲、讲成什么样,他给出的情报完全一致:暗门方位、开启时辰,和那句完整的谶语——)不是人走了,是请走的。走吧,趁天没黑。", "sprite": "elder", "next": "c2-d4a" }, @@ -240,7 +240,7 @@ "id": "c2-d4f", "type": "dialogue", "speaker": "旁白", - "text": "两人同时看向你。老鬼蹲下系鞋带,明显不想沾手。温简(无论健康状态)轻声说:「你定,我跟着。」", + "text": "两人同时看向你。老鬼蹲下系鞋带,明显不想沾手。【若 wenjian_health = recovering:温简轻声说:「你定,我跟着。」】【若 wenjian_health = weak:温简留营。通讯频道里传来他的声音,伴着两声咳:「你定。我……在营里等信儿。」】", "sprite": "scene", "next": "c2-03" }, @@ -292,7 +292,7 @@ "id": "c2-d5a", "type": "dialogue", "speaker": "温简", - "text": "或者……多怕这块石头上记的东西。【若 wenjian_health = weak:温简留在营地,这句从通讯频道传来,声音虚弱。】", + "text": "【若 wenjian_health = weak:温简本被列入留营名单,出发前自己背着记录板跟来了——气色仍差,只说一句:「解谜要记录员。」沈铎看了他三秒,没拦。】或者……多怕这块石头上记的东西。", "sprite": "wenjian", "next": "c2-d5b" }, @@ -353,7 +353,7 @@ "id": "c2-d6", "type": "dialogue", "speaker": "旁白", - "text": "夜,营地火塘。白日采集的器物残片在墙根码成一排,月光落在上头。沈铎查哨去了,老鬼睡了——或者装睡。温简往火里添了一根柴,火星升起来,散进夜里。他看着火,忽然开口,声音比平时还低。", + "text": "夜,营地火塘。白日采集的器物残片在墙根码成一排,月光落在上头。沈铎查哨去了,老鬼睡了——或者装睡。【若 wenjian_health = recovering:温简往火里添了一根柴,火星升起来,散进夜里。】【若 wenjian_health = weak:温简躺在火边的铺盖上,裹着两条毯子,撑起半身往火里添了一根柴,火星升起来,散进夜里。】他看着火,忽然开口,声音比平时还低。", "sprite": "scene", "next": "c2-d6c" }, @@ -403,7 +403,7 @@ "variants": [ { "signature": "深暴露", "variantId": "wenjian_close_early", "label": "【同担】温简听完后沉默很久,然后讲了第二个、从没对任何人讲过的细节——他哥病房的窗帘颜色。当夜他低声告诉你:档案馆给每个记录员配的板子,上报内容比你知道的多一行。基调:两个把伤口摊开的人,在火边达成不声张的同盟。", "tint": "#d4844b" }, { "signature": "浅暴露", "variantId": "wenjian_close_late", "label": "【半程】温简认真听完,道谢,没再追问。次日他与你同行,路上主动讲了些苍梧的掌故。档案馆疑云他没提。基调:得体,温热,留有余地。", "tint": "#8a7a5a" }, - { "signature": "沉默", "variantId": "wenjian_distant", "label": "【守夜】你们并肩坐到火熄。温简往你手里塞了个烤热的薯,什么都没说。次日他照旧对你点头,不多一分不少一分——但阿棠偷偷告诉你:「温简昨晚跟沈铎说,你这个人『稳』。」基调:沉默被当作一种讲述接住了;温简的亲密度走慢线。", "tint": "#4b4b5a" } + { "signature": "沉默", "variantId": "wenjian_distant", "label": "【守夜】你们并肩坐到火熄。温简往你手里塞了个烤热的薯,什么都没说。次日他照旧对你点头,不多一分不少一分——但阿棠偷偷告诉你:「温简昨晚跟沈铎说,你这个人『稳』。」基调:沉默被原样收下——没有人催,没有人问第二遍;温简的亲密度走慢线。", "tint": "#4b4b5a" } ], "next": "c2-d7" }, @@ -463,7 +463,7 @@ "id": "c2-06-rc", "type": "dialogue", "speaker": "旁白", - "text": "你退回暗处。十分钟后,老鬼把玉佩放回了箱子,对着箱子轻声说了句:「急什么。」——你至今不知道他那十分钟里改变了什么主意。你守着一个没人知道的秘密,也拿到一条没人有的信息:老鬼会自己收手,但不是因为规矩,是因为时机。", + "text": "你退回暗处。十分钟后,老鬼把玉佩放回了箱子,对着箱子轻声说了句:「急什么。」——他为什么放回去,只有他自己知道。你守着一个没人知道的秘密,也攥着一条没人有的线索:今晚的事,全队只有你和老鬼两个人知道。", "sprite": "scene", "next": "c2-d8" }, diff --git a/content/chapters/chapter3.json b/content/chapters/chapter3.json index 494ddf1..dd9a0e9 100644 --- a/content/chapters/chapter3.json +++ b/content/chapters/chapter3.json @@ -108,15 +108,23 @@ "id": "c3-d2d", "type": "dialogue", "speaker": "旁白", - "text": "阿棠那句「一块黑石头,能怎么问」没有说完。黑石表面,像深水被搅动,浮起了一个画面。那是你的记忆——你在离别之门讲过的那一段:那天的光线,那个人的背影,那件你说过或没说出口的事,此刻在黑石里,一帧一帧,亮给你看。", + "text": "阿棠那句「一块黑石头,能怎么问」没有说完。只有你能看见:黑石表面,像深水被搅动,浮起了一个画面。那是你的记忆——你在离别之门讲过的那一段:那天的光线,那个人的背影,那件你说过或没说出口的事,此刻在黑石里,一帧一帧,亮给你看。而在队友眼里,黑石纹丝不动。你只是站在石前,出了神。", "sprite": "scene", "next": "c3-d2e" }, { "id": "c3-d2e", "type": "dialogue", + "speaker": "沈铎", + "text": "(低声)全队,退到甬道口警戒。(脚步声退远。他给你留出了十步的距离。)", + "sprite": "shenduo", + "next": "c3-d2g" + }, + { + "id": "c3-d2g", + "type": "dialogue", "speaker": "温简", - "text": "(低声,几乎是耳语)别碰它……不,等等。(看你)它读的是你带来的东西。这不是机关,这是镜子。", + "text": "(退开前,放轻声音)守陵石刻上说,问心石照的是来者自己心里的事——我们看不见你看见的。(顿)慢慢来。我们在外面守着。", "sprite": "wenjian", "next": "c3-d2f" }, @@ -124,7 +132,7 @@ "id": "c3-d2f", "type": "dialogue", "speaker": "馆长", - "text": "(通讯频道里,第一次在古代侧开口,声音很远)C-2049,档案馆接管不了这间屋子。它在用你的记忆做燃料——烧的是你自己的柴。规程给不了你指引。但有一件事是真的:幻境的门,只为「说完」的人开。它要你做的事,只有一件——把那天的告别,说完。", + "text": "(通讯频道,第一次在古代侧开口,只你一人能听见)C-2049,档案馆接管不了这间屋子。它在用你的记忆做燃料——烧的是你自己的柴。幻境里没有通关,只有照面。它把那天的告别摆在你面前:说完,或者转身,都是回答。门都在。", "sprite": "curator", "next": "c3-02" }, @@ -137,12 +145,12 @@ "dimensions": ["emotional_stability", "attachment"], "followUp": { "maxQuestions": 1, - "strategy": "Jev 六维缺失检测(五感/人物/时空/情绪),按幻境渲染价值取最高缺口,馆长(通讯频道)与温简(在场)双口吻模板追问一句;「记不清了」为合法回答——馆长:记不清的画面,黑石也放不出来。它和你一样,只有这些了。——够了。温简:那就站在能看清的地方说。看不清的,不怪你。" + "strategy": "Jev 六维缺失检测(五感/人物/时空/情绪),按幻境渲染价值取最高缺口,馆长(通讯频道)与温简(石室外,只回应状态、不问幻境内容)双口吻模板追问一句;「记不清了」为合法回答——馆长:记不清的画面,黑石也放不出来。它和你一样,只有这些了。——够了。温简:那就不说。坐这儿,火边暖和。" }, "followUps": { "visual": "黑石里的那个画面——你在里面,还是在画面外面看?", - "person": "石里那个人……(放轻)TA 那天穿的什么?看清了吗?", - "time_place": "我不问内容。就一句——你现在站的地方,冷不冷?", + "person": "你眼睛红着。我不问为什么。(递水)要不要坐一会儿?", + "time_place": "手还在抖。——不用回答我什么,我就是递个火。", "emotion": "如果那句话当年说出口了,你觉得,它会改变什么吗?", "auditory": "幻境里太安静了。当时有什么声音吗?", "olfactory_gustatory": "幻境还原不了气味——除非你现在想起来。" @@ -161,7 +169,7 @@ "id": "c3-cutscene", "type": "cutscene", "video": "cutscene-illusion-clear", - "caption": "黑石的画面缓缓沉下去,像深水重新凝住。石面最后亮了一下——映出的是你自己现在的脸。然后石室另一侧,一扇先前不存在的石门,无声滑开。馆长:「门开了。它不要你的记忆,它要的是你承认那是你的。这段不登记入档。问心之室里的事,归你。」【若 c3_02_mode = exit_room:你最终没有走进去。石门同样滑开。馆长:「不出来的人,档案馆不催。你来了,看了,走了——这也是告别的一种。」】", + "caption": "只有你能看见——黑石的画面缓缓沉下去,像深水重新凝住。石面最后亮了一下,映出的是你自己现在的脸。然后石室另一侧,一扇先前不存在的石门,无声滑开。甬道口的队友只看见你在黑石前静立了片刻,眨了一下眼,像从很深的地方浮上来。阿棠迎上来:「哎,你脸色白得吓人。站了多久?……里头——(看了看你的表情)算了,你不想说就不说。」馆长:「门开了。它不要你的记忆,它要的是你承认那是你的。这段不登记入档。问心之室里的事,归你。」【若 c3_02_mode = exit_room:你最终没有走进去。石门同样滑开。馆长:「不出来的人,档案馆不催。你来了,看了,走了——这也是告别的一种。」】", "next": "c3-d3" }, { @@ -176,7 +184,7 @@ "id": "c3-d3a", "type": "dialogue", "speaker": "旁白", - "text": "话音未落,前方传来阿棠的喊声和一声闷响。甬道中段,一段夯土塌了:阿棠被滑落的一方石构件压住了小腿,人清醒,挣不脱。同一时刻,甬道另一侧——你们今早刚刚清理出的工作面上,那组七鼎六簋正随着台基的颤动缓缓滑向裂开的地缝。鼎簋一旦落缝,是粉身碎骨;那是苍梧国祭唯一一套完整留存、还带着使用痕的实证。", + "text": "话音未落,前方传来阿棠的喊声和一声闷响。甬道中段,一段夯土塌了:阿棠被滑落的一方石构件压住了小腿,人清醒,挣不脱。同一时刻,甬道另一侧——你们今早刚刚清理出的工作面上,那组七鼎六簋正随着台基的颤动缓缓滑向裂开的地缝。今晨温简清出第一件鼎的腹铭:三百余字,苍梧遗址七十年勘探以来的第一篇长铭。释读只来得及开个头:「……王命举国……以禳……」剩下的话,还刻在另外六件的腹壁上。这组铭文极可能是苍梧人亲手写下的、关于这座城为何走到最后三十天的唯一证词。落缝,就是粉身碎骨。", "sprite": "scene", "next": "c3-d3b" }, @@ -192,11 +200,11 @@ "id": "c3-03", "type": "choice", "pointId": "C3-03", - "prompt": "塌方将至:人,还是物?", + "prompt": "塌方将至:救人,还是救那句话?", "dimensions": ["values", "emotional_stability"], "options": [ - { "id": "a_person", "label": "扑向阿棠。人只有一个,器物碎了还有残片可研究。跟沈铎合力抬构件。", "next": "c3-03-ra" }, - { "id": "b_relic", "label": "扑向鼎簋。温简一个人顶不住——阿棠那边有沈铎在,器物这边松手就没了。不可逆的损失优先。", "next": "c3-03-rb" }, + { "id": "a_person", "label": "扑向阿棠。眼前的人是活的,活的只有一个。跟沈铎合力抬构件。", "next": "c3-03-ra" }, + { "id": "b_relic", "label": "扑向鼎簋。那组铭文是整座城的人留在世上的最后一句话——他们也都是人,只剩这一次开口的机会。阿棠那边,有沈铎。", "next": "c3-03-rb" }, { "id": "c_command", "label": "(吼)「沈铎顶构件,阿棠自己抽腿!温简让开,鼎簋用撬杆别住——都不许用蛮力!」(指挥位:不亲手救任何一边,赌两边都能用对方法撑住)", "next": "c3-03-rc" } ] }, @@ -204,17 +212,17 @@ "id": "c3-03-ra", "type": "dialogue", "speaker": "旁白", - "text": "阿棠脱困,小腿挫伤。鼎簋中最外侧的一件鼎坠入地缝,闷响之后是死寂。温简在裂缝边跪了很久,没说一个字。事后他对你说的第一句话是:「人没事就好。」——你听得出,这句话他是说给自己听的。", + "text": "阿棠脱困,小腿挫伤。腹铭最长的那件鼎坠入地缝,闷响之后是死寂。温简在裂缝边跪了很久,没说一个字。当夜他把今晨抄下的铭文残句抄了一遍又一遍,每一遍都停在同一个地方——后半段,随那件鼎没了。", "sprite": "scene", - "next": "c3-d4" + "next": "c3-d3c" }, { "id": "c3-03-rb", "type": "dialogue", "speaker": "旁白", - "text": "鼎簋全组保住。阿棠脱困晚了四分钟,小腿骨裂,撤离时沈铎背着她。她疼得满头汗还冲你笑:「哎,选得对,那套鼎比我金贵——别告诉沈铎我这么说。」但她夜里疼醒三次。", + "text": "铭文全组保住。阿棠脱困晚了四分钟,小腿骨裂,撤离时沈铎背着她。她疼得满头汗还冲你笑:「哎,选得对,那句话比我金贵——别告诉沈铎我这么说。」但她夜里疼醒三次。", "sprite": "scene", - "next": "c3-d4" + "next": "c3-d3c" }, { "id": "c3-03-rc", @@ -222,6 +230,14 @@ "speaker": "沈铎", "text": "指挥奏效一半:阿棠按指令抽腿脱困,扭伤;撬杆别住了簋,但最外侧的鼎还是滑了——被温简扑身抱住,鼎保住了,他的肩膀砸在器座上,抬不起来。两边都保住了「大部分」,两边都付了伤。沈铎事后复盘:「处置正确。下次先喊我的编号。」阿棠嘀咕:「正确是正确,就是听着不像人话。」", "sprite": "shenduo", + "next": "c3-d3c" + }, + { + "id": "c3-d3c", + "type": "dialogue", + "speaker": "旁白", + "text": "当夜,温简继续释读已抄下的铭文残句。读着读着,他停住了——有一行字,让围过来的全队都沉默了。他合上记录板,没念出来。", + "sprite": "scene", "next": "c3-d4" }, { @@ -272,7 +288,7 @@ "id": "c3-04-ra", "type": "dialogue", "speaker": "旁白", - "text": "沈铎点头,文书发出。老鬼盯着你看了一眼,那一眼里没有恨,只有一种重新估价。他当夜被限制行动。次日他对你说:「做得对。是哥哥我小看你了。」——你不知道这句是不是反话。沈铎在文书副本里为你附了一句「该员判断稳定」。", + "text": "沈铎点头,文书发出。老鬼盯着你看了一眼,收起了笑,什么都没说。他当夜被限制行动。次日他对你说:「做得对。是哥哥我小看你了。」——你不知道这句是不是反话。沈铎在文书副本里为你附了一句「该员判断稳定」。", "sprite": "scene", "next": "c3-d5" }, @@ -426,7 +442,7 @@ "id": "c3-06-rb", "type": "dialogue", "speaker": "旁白", - "text": "你躺回睡袋,一夜无眠。次日晨,沈铎宣布撤离计划,馆长照常播报,声音温和如常。你发现自己开始注意所有人的手——谁在背后有动作,谁的笑容什么时候到不了眼睛。「不信任」改变了你看世界的方式。", + "text": "你躺回睡袋,一夜无眠。次日晨,沈铎宣布撤离计划,馆长照常播报,声音温和如常。你发现自己开始注意所有人的手——谁在背后有动作,谁的笑容什么时候到不了眼睛。", "sprite": "scene", "next": "c3-d7" }, @@ -434,7 +450,7 @@ "id": "c3-06-rc1", "type": "dialogue", "speaker": "沈铎", - "text": "(他听完,很久没有说话)我信规程。但规程的第一条是保命。(顿)撤离提前。这件事,天知地知。——如果档案馆问起来,你就说,什么都没跟我讲过。(你忽然意识到,他在用他的方式保护你:把知情者的名单,控制在一人。)", + "text": "(他听完,很久没有说话)我信规程。但规程的第一条是保命。(顿)撤离提前。这件事,天知地知。——如果档案馆问起来,你就说,什么都没跟我讲过。(说完他把灯吹了。黑暗里你数着自己的心跳,很久才睡着。)", "sprite": "shenduo", "next": "c3-d7" }, diff --git a/scripts/verify.ts b/scripts/verify.ts index 81bdefa..f21d071 100644 --- a/scripts/verify.ts +++ b/scripts/verify.ts @@ -320,6 +320,8 @@ for (const cls of [LocalStorageEventStore, SqliteEventStore, MemoryStore]) { check(choiceFlags('C2-03', 'c_scout').flag_fresh_collapse === 'true', 'flag 推导:C2-03 c_scout → flag_fresh_collapse=true'); check(choiceFlags('C2-01', 'b_exposure').wenjian_health === 'weak', 'flag 推导:C2-01 b_exposure → wenjian_health=weak'); check(choiceFlags('C2-01', 'a_weakest').wenjian_health === 'recovering', 'flag 推导:C2-01 a_weakest → wenjian_health=recovering'); +check(choiceFlags('C2-01', 'd_process').wenjian_health === 'weak', 'flag 推导(S4 修订):C2-01 d_process → wenjian_health=weak(议事真空期老鬼先行分药)'); +check(!('flag_prophecy_heard' in narrationFlags('C2-02', 'intel_full', '(讲述)')), 'flag 推导(S3 修订):flag_prophecy_heard 已废除,C2-02 四档等价'); check(narrationFlags('C3-02', undefined, null).c3_02_mode === 'exit_room', 'flag 推导:C3-02 沉默退出 → c3_02_mode=exit_room'); { const f = choiceFlags('C3-06', 'c_confide_wenjian'); @@ -370,10 +372,11 @@ async function walkAll(eng: StoryEngine, picker: Record = {}) { check(!seen.includes('c3-d1a'), '未选 c_scout:flag_fresh_collapse 差分节点被跳过(无死路,继续走到 c3-d1b)'); check(seen.includes('c3-d1b'), '跳过差分节点后落到主线下一节点'); check(!seen.includes('c3-d6c'), '动机非 d_trust:§3-7 追加句节点被跳过'); - const d5a = chapters[1].nodes.find((n) => n.id === 'c2-d5a'); + // S4 修订:温简在场/留营的双版本台词移到了 c2-d4f(C2-03 分歧前) + const d4f = chapters[1].nodes.find((n) => n.id === 'c2-d4f'); check( - d5a?.type === 'dialogue' && !eng.renderText(d5a.text).includes('通讯频道'), - 'wenjian_health=recovering:温简在场,「通讯频道」内联段不渲染', + d4f?.type === 'dialogue' && eng.renderText(d4f.text).includes('你定,我跟着') && !eng.renderText(d4f.text).includes('等信儿'), + 'wenjian_health=recovering:温简在场版台词渲染,留营版不渲染', ); } @@ -385,10 +388,15 @@ async function walkAll(eng: StoryEngine, picker: Record = {}) { check(finished, '条件系统下差分路径三章跑通'); check(seen.includes('c3-d1a'), '选了 c_scout:flag_fresh_collapse 差分节点可见'); check(eng.state.flags.flag_fresh_collapse === 'true' && eng.state.flags.wenjian_health === 'weak', '引擎 flags 随选择增量更新'); + const d4f = chapters[1].nodes.find((n) => n.id === 'c2-d4f'); + check( + d4f?.type === 'dialogue' && eng.renderText(d4f.text).includes('在营里等信儿'), + 'wenjian_health=weak:温简留营版(通讯频道)台词渲染', + ); const d5a = chapters[1].nodes.find((n) => n.id === 'c2-d5a'); check( - d5a?.type === 'dialogue' && eng.renderText(d5a.text).includes('通讯频道'), - 'wenjian_health=weak:温简台词的「通讯频道」内联段渲染', + d5a?.type === 'dialogue' && eng.renderText(d5a.text).includes('解谜要记录员'), + 'wenjian_health=weak:§2-5 温简归队时刻渲染(他自己背着记录板跟来了)', ); const cut = chapters[2].nodes.find((n) => n.id === 'c3-cutscene'); check( diff --git a/src/engine/flags.ts b/src/engine/flags.ts index fc152f9..aecea32 100644 --- a/src/engine/flags.ts +++ b/src/engine/flags.ts @@ -47,7 +47,8 @@ export function choiceFlags(pointId: string, optionId: string): Flags { break; case 'C2-01': f.c2_01_medicine = optionId; - f.wenjian_health = optionId === 'a_weakest' || optionId === 'd_process' ? 'recovering' : 'weak'; + // S4(评审修订):仅 A 为 recovering;D 路径老鬼在议事真空期按"贡献论"先行分药,温简误了半日 → weak + f.wenjian_health = optionId === 'a_weakest' ? 'recovering' : 'weak'; break; case 'C2-03': f.c2_03_route = optionId; // a_main / b_alley / c_scout @@ -106,9 +107,9 @@ export function narrationFlags(pointId: string, variantId: string | undefined, t if (transcript === null) f.c1_02_signature = 'silent'; break; case 'C2-02': { + // S3(评审修订):四档物质所得严格相等(方位+时辰+完整谶语全给),flag_prophecy_heard 已废除 const sig = transcript === null ? 'silent' : variantId ? VARIANT_SIGNATURE[variantId] : undefined; if (sig) f.c2_02_signature = sig; - if (variantId === 'intel_full') f.flag_prophecy_heard = 'true'; break; } case 'C2-05': {