diff --git a/.learnings/ERRORS.md b/.learnings/ERRORS.md index 18d79bc..1d5207c 100644 --- a/.learnings/ERRORS.md +++ b/.learnings/ERRORS.md @@ -3,3 +3,12 @@ Command failures and integration errors. --- + +## [ERR-20260703-001] LM Studio output directory mistaken for file + +**Logged**: 2026-07-03T22:03:00+08:00 +**Priority**: medium + +When `lmstudio_polish.py` receives a single input file and an output path such as `.../1.1.1-坠毁后的第一夜`, `Path.suffix` treats `.1-坠毁后的第一夜` as a file suffix. The script then writes multiple chapter outputs into the same path instead of appending each source filename. + +Fix: only treat `--out` as a direct output file when its suffix is `.md`; otherwise treat it as a directory. diff --git a/AGENTS.md b/AGENTS.md index 9e12e1b..de8ec79 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -81,6 +81,7 @@ ## 已确认硬边界 - 宁诚是开局唯一真正工程主导者。 +- 宁诚带有 OTL《明日方舟》玩家记忆,认知限于角色名字、人设与大致背景;游戏知识到 1945 年越南现场严重缩水,不涵盖终末地工程细节、源石病医疗、时代历史与当地情报。 - 主角团开局一穷二白,只有残骸、有限设备、少量急救资源和低功耗核心。 - 博士权限完整,但权限不能跳过能源、材料、人力、地形、保密和时代条件。 - 飞船残骸是终末地核心资产,不是普通垃圾;主体残骸必然暴露,1.1 的成果只是拖延发现和制造误判。 @@ -103,7 +104,7 @@ ## 禁止写法 -- 不要让主角团开局全知全能。 +- 不要让主角团开局全知全能。宁诚的玩家记忆只提供“认识干员”和“模糊倾向”,不能替代现场观察、技术验证和时代学习。 - 不要让药物、无人机、核心计算机无限使用。 - 不要一上来大规模解释源石病。 - 不要让其他工程角色抢走宁诚的主导位置。 diff --git a/世界书.md b/世界书.md index f87f3fd..cdc453c 100644 --- a/世界书.md +++ b/世界书.md @@ -19,7 +19,7 @@ - 飞船不是普通交通工具,而是可在目标地展开为终末地核心的开拓平台。坠毁后核心展开协议仍在,但结构不完整、能源不足、现场暴露,暂时无法展开。 - 博士腕部权限终端是完整的终末地核心钥匙,宁诚是唯一激活权限持有人。限制来自现场条件,而不是权限系统损坏。 - 飞船核心计算机可提供计算、蓝图拆解、资源测绘、工序规划、风险推演和有限自动控制,定位是受损但关键的终末地辅助系统。 -- 宁诚是开局唯一真正工程主导者。 +- 宁诚是开局唯一真正工程主导者。他带有 OTL《明日方舟》玩家记忆,但游戏界面和档案只是对原世界的极简化表达;这份记忆能帮他认出干员、理解她们的大概倾向,不能替代现实中的医疗技术、工程操作、历史判断和现场学习。 - 主体残骸搬运困难,清理只能粗糙处理。主角团优先抢走权限终端、可拆控制核、药箱、能源包、数据模块等关键小件,遮挡最显眼特征并制造误判;残骸被发现是必然倒计时。 ## 源石规则 diff --git a/人物卡/宁诚.md b/人物卡/宁诚.md index 73f2875..d88b08c 100644 --- a/人物卡/宁诚.md +++ b/人物卡/宁诚.md @@ -20,6 +20,8 @@ 对外表现是典型失忆开局:他记得自己叫宁诚,也保留穿越前的思维和常识,但不记得飞船、干员、终末地公司完整流程和原博士的人际关系。 +**玩家记忆**:宁诚穿越前玩过《明日方舟》,对铃兰、赫默、古米等角色有玩家层面的认知。他知道这些干员的名字、大致人设和部分背景梗概,但这部分知识在现实中严重缩水——游戏 UI、技能描述和档案只是对泰拉世界的极简表达,落到 1945 年的越南现场,除了“认识人”和“大概知道她们擅长什么”之外,几乎帮不上具体忙。他不知道赫默会怎么治这个时代的外伤,不知道古米的体力极限在饿了几顿后还剩多少,更不知道终末地核心的工程细节该怎么操作。 + 飞船核心、权限环和干员体系仍然识别这具身体为“博士”。因此系统承认他,干员也暂时继续称呼他为“博士”。 博士是唯一拥有终末地核心激活权限的人。飞船不是普通交通工具,而是可以在目标星球落地后展开为终末地核心的开拓平台。腕环/权限终端本身是完整的博士钥匙,开局受限于坠毁现场、能源、结构完整性和人力条件。 @@ -35,18 +37,18 @@ - 随飞船坠毁在越南太原省定化县佐朱外围山地。 - 1.1.1 开场处于昏迷或刚苏醒状态。 - 受伤,不能立刻全知全能掌控局面。 -- 以“创伤后记忆缺失”的形式被干员暂时接受。 +- 以“权限身份仍在、主观记忆不同”的形式被干员暂时接受。宁诚承认认识干员,但否认拥有共同经历。 - 身边只有铃兰、赫默、古米和残骸。 ## 失忆与身份错位 干员不是完全没发现异常,而是在坠毁、生存、权限链不断裂的压力下,先把问题压后。 -- 赫默:最早察觉不对。她会用“创伤后记忆缺失”作为临时诊断,但保留观察。 -- 铃兰:最受情感冲击。博士不记得她,会让她难过,但她仍然先照顾伤员。 +- 赫默:最早察觉不对。她不会简单诊断为失忆,而是把宁诚标记为“信息来源待确认”的重点观察对象。 +- 铃兰:最受情感冲击。宁诚说“记得”她,但立刻否认共同记忆,让她先升起希望又跌落,情绪更复杂。 - 古米:最实用。她会震惊,但很快进入找水、找食物、搬东西的生存节奏。 -宁诚开局的工程判断不应来自“全知原博士记忆”,而应来自完整权限终端提供的终末地核心状态、应急流程、穿越前的组织经验、现场观察和快速学习。 +宁诚开局的工程判断不应来自“全知原博士记忆”或“全知玩家记忆”,而应来自完整权限终端提供的终末地核心状态、应急流程、穿越前的组织经验、现场观察和快速学习。玩家记忆只提供对干员的模糊认知,不能替代具体技术验证。 ## 外貌与视觉锚点 diff --git a/伏笔与承诺.md b/伏笔与承诺.md index 8386be2..c0c492c 100644 --- a/伏笔与承诺.md +++ b/伏笔与承诺.md @@ -104,7 +104,21 @@ ## 已铺垫 -暂无正文。 +### F007:宁诚的 OTL 玩家记忆 + +类型:作者暗线 / 设定锚点 + +状态:已铺垫 + +读者是否已感知:是 + +首次出现:1.1.1 宁诚苏醒后看到铃兰、赫默,第 1 章末看到古米。 + +预计兑现:全书持续使用,但持续受限。 + +兑现方式:宁诚穿越前玩过《明日方舟》,能认出干员名字、人设和大致倾向,并已在 1.1.1 中向铃兰、赫默承认“记得”她们,但否认拥有共同经历。游戏知识到 1945 年越南现场严重缩水,不能替代现场观察、技术验证和时代学习。 + +风险:如果让宁诚靠游戏记忆直接解决工程、医疗或历史问题,会破坏受限叙事和时代现场的真实压力。 ## 推进中 diff --git a/正文/1.1.1-坠毁后的第一夜-五章草稿.md b/正文/1.1.1-坠毁后的第一夜-五章草稿.md deleted file mode 100644 index 49ca8ab..0000000 --- a/正文/1.1.1-坠毁后的第一夜-五章草稿.md +++ /dev/null @@ -1,931 +0,0 @@ -# 1.1.1《坠毁后的第一夜》五章草稿 - -## 第 1 章:我不是博士 - -宁诚醒来的时候,先闻到的是焦糊味。 - -那不是木头烧过的味道。木头烧完以后会有灰,有炭,有湿气压着的苦味;眼前这股气味更尖,像被烧穿的绝缘层、冷却液和金属粉末混在一起,贴着喉咙往肺里钻。 - -他想咳,胸口却像压着一整块舱壁。 - -“博士。” - -有人贴在旁边叫他。那声音压着,像怕惊动林子里的什么东西。 - -博士? - -宁诚在黑暗里怔了一下。 - -他不叫博士。 - -他叫宁诚。 - -这个念头比疼痛更早浮上来,清楚得近乎不合时宜。他差点张嘴反驳,话到喉咙口,又被一阵血腥味顶了回去。 - -不对。 - -哪里都不对。 - -他记得自己的名字,记得一些零碎到无法安放的常识。可他不记得自己为什么会躺在这里,不记得是谁在叫他,也不记得这股焦糊味之前发生了什么。记忆像被一刀切断,断口后面全是黑的。 - -宁诚睁开眼,一片银白色发梢在视野里晃。铃兰跪在旁边,脸上蹭着灰,耳朵耷拉下来,手里还攥着一卷已经发暗的止血绷带。她对上他的视线,眼睛亮了一瞬,又立刻低下头去看他的伤口。 - -“您醒了。” - -宁诚没有立刻回答。视野一半清楚,一半像隔着水。右耳没什么声,只剩左耳里那点嗡鸣拖着不走。左肋和后肩疼得最实在,每吸一口气,都像有根钝针从肋骨缝里往里顶。 - -他垂下眼。 - -那只手骨节修长,手背上有干涸的血和细小擦伤,腕侧扣着一只他从没见过的金属环。金属环外壳有擦痕,透明面板裂开一道细纹,可内部权限灯仍然稳定亮着。它不像普通随身设备,更像某种钥匙。 - -权限确认。 - -身份:博士。 - -终末地核心激活权限:唯一持有人。 - -当前核心状态:坠毁锁定,待人工确认。 - -宁诚的喉咙发紧。陌生的身体,陌生的称呼,陌生的权限,还有一句听起来足够荒唐的“终末地核心”,全都在等他回应。 - -他试着动手指。能动。 - -试着抬右手。能抬,但手背上全是干涸的血。 - -试着抬左手。铃兰立刻按住他。 - -“不要动,赫默医生说您的肋骨可能有裂伤。” - -宁诚闭了闭眼。 - -肋骨裂伤,轻度失血,左肩挫伤,右耳暂时性听觉损伤。 - -这些词一个接一个冒出来,像有人把急救手册塞进他脑子里。他知道它们是什么意思,却一时分不清这是自己的知识,还是这具身体留下的本能。 - -至少能说话。 - -至少还能想。 - -“赫……默。” - -他的声音哑得厉害。 - -这个名字不是他想起来的。 - -腕环在铃兰话音落下时调出了一行人员权限标签:赫默,医疗与科研支援。宁诚盯着那两个字,像溺水的人抓住漂来的木片。 - -铃兰立刻回头。 - -不远处,赫默正蹲在一块断裂的黑色舱板前,身边浮着一架小型无人机。无人机的外壳有一角开裂,飞行姿态也不稳,悬在半空时会轻微偏斜。它腹部的灯时亮时暗,把周围的树干、泥水和扭曲残骸照得忽明忽暗。 - -听到宁诚醒来,赫默转过身,脸上没有放松。 - -“你昏迷了约四十七分钟。现场时间不完全可靠,核心计时有跳变。” - -宁诚听懂了一半。 - -另一半听不懂。 - -系统时间不可靠,定位不可靠,坠毁前的数据也未必可靠。每个词都像是能听明白,连起来却把他的胃往下拽。 - -赫默多看了他两秒。那眼神不像看病人,倒像盯着一份读数不对的报告。 - -“博士,”她问,“你还记得坠毁前的事吗?” - -宁诚停了一下。 - -他想说我不是博士。 - -他想问你们是谁。 - -他还想问自己是不是已经死了。 - -可铃兰的手还按在他肩旁,赫默的无人机灯光还在晃,远处残骸里偶尔炸出一点电火花。所有东西都太真了,真得不给他发疯的时间。 - -“不记得。” - -铃兰的手指一下攥紧了绷带。 - -她嘴唇动了动,话没出来,按在宁诚左肩旁的手又往旁边挪了半寸。 - -赫默没有追问。她只是把视线落到他腕侧的权限环上,又移开。 - -“创伤后记忆缺失。”她说,“先按这个处理。” - -她侧过脸,声音压到只有铃兰能听清。 - -“铃兰,记录他的反应。” - -铃兰低低应了一声。 - -先。 - -宁诚听见了这个字。 - -也就是说,不是没人怀疑。 - -只是现在没空处理他。 - -他看向四周。 - -空气湿热,地面一踩就往下陷。草叶宽得不像他熟悉的任何绿化带,树影压在头顶,断裂的舱段斜插在山坡上,像一条被掰断脊骨的金属鱼。腹部翻开,线缆、隔热层、烧黑的支架全露在外面。几段舱壁上还有折叠轨、嵌套接口和支撑脚的残片,像某种没来得及展开的地面设施。更远处有条细溪,水声被夜色和烟压住,只剩一点断断续续的响动。 - -飞船的主体不在这里,或者说,这里只是一部分主体。 - -核心舱残片还在低功耗闪烁。那一点蓝白色的光,在黑暗里显眼得刺目。腕环把它标成“终末地核心舱”,却又在状态栏后面连续挂了三个红色限制:结构不完整,能源不足,展开失败。 - -宁诚张了张嘴,第一句差点问成“这是哪儿”。 - -腕环边缘又亮了一下,应急界面把一行字推到最上面: - -幸存人员确认。 - -他把那几个字咽下去,换成另一个问法。 - -“还有谁活着?” - -赫默推了推眼镜。 - -“确认可行动三人。你,铃兰,我。古米离开现场,去找水和食物。离开时间约二十六分钟。其他舱段没有回应,近距离生命信号不稳定,残骸干扰太强。” - -宁诚把这几个名字在脑子里过了一遍。 - -你,铃兰,我。 - -古米离开现场。 - -其他舱段没有回应。 - -开拓队也好,外勤组也好,到了这会儿只剩几个能喘气的人。 - -宁诚盯着那片蓝白色的核心光。腕环上“终末地核心舱”几个字跳了跳。 - -他不知道自己为什么会问这个。 - -可能是因为那东西亮得太刺眼,也可能是因为所有人的目光都在等他问。 - -“核心状态。” - -“低功耗运行。主数据库没有完全丢失,但接口损毁严重。终末地核心展开协议还在,执行条件全部不满足。能源包可读数不足二成。无人机两架,一架可飞,一架只能短距悬停。医务箱还在,但我只抢出了外层急救包,完整库存需要回残骸里取。” - -宁诚想站起来。 - -这个念头刚冒出来,身体先替他否决了。眼前一黑,左肋像被人从里面掰开。铃兰急忙扶住他,他才发现自己连坐起来都费劲。 - -别慌。 - -他在心里重复了一遍。 - -没用。 - -他还是慌。只是慌也得喘气,喘气就会疼,疼痛反倒把他钉回了眼前。 - -“火。” - -赫默知道他问什么。 - -“明火已经扑掉了大部分。但热源还在,烟也还在。无人机上升到树冠高度,看见东南方向有零散火光,距离无法精确判断。那里可能有人。” - -有人。 - -宁诚后脑勺发麻。 - -无人星球上,残骸暴露最多是资源问题。 - -这里有火光。 - -有火光,就有人。有人看见这堆东西,就会来摸、来抢、来问。问不出来,也可以先开枪。 - -何况这东西还不是废铁。它原本应该落地、展开,变成一枚终末地种子。 - -他环视现场。视线扫过核心舱、能源包残片、赫默的医务包,又扫回腕环上的应急条令。 - -不是他会指挥。 - -是屏幕上就剩这些东西还能被叫出名字。 - -宁诚用还能动的右手指向核心舱。 - -“核心、能源包、医务箱、数据模块。”他说得比自己想象中慢,“先按这个排。能搬的搬,不能搬的拆。发光面盖住。反光金属用泥和树枝遮。” - -他停了一下,喉咙里全是铁锈味。 - -“烧焦的别全灭。留一点,像山火。” - -赫默看着他:“你现在站都站不稳。” - -宁诚看了一眼自己的手。 - -手在抖。 - -他把手指蜷起来,声音压低。 - -“所以你执行。” - -这句话说完,宁诚自己先咳了一声。胸腔里一股铁锈味泛上来,他偏头吐掉,发现唾沫里有血丝。 - -铃兰的脸色白了。 - -宁诚没有看她。他盯着那片低功耗闪烁的核心光,声音低下去。 - -“事故应急条令。”宁诚照着腕环念,“第一条,保全人员。第二条,保全终末地核心。第三条,误导未授权接触者。” - -腕环里的应急协议一条条亮着,不像坏了。坏的是现场,是能源,是那具横在山坡上的终末地核心舱。 - -宁诚念到“保全终末地核心”时,自己都觉得这句话荒唐。 - -可赫默的视线又落到他脸上。 - -赫默沉默片刻,转身把无人机高度压低。 - -“铃兰,看住他。博士如果再试图自己搬东西,你就叫我。” - -铃兰用力点头。 - -宁诚想说自己没那么脆弱,话到嘴边,又被远处山坡上传来的一声细响截住。 - -那不是残骸冷却声。 - -是树枝被踩断。 - -赫默的无人机立刻调转镜头。铃兰抬头,尾巴绷紧。宁诚伸手摸向身边,摸到的却不是武器,只是一截断裂的工具柄。 - -他攥住那截工具柄,掌心全是冷汗。 - -下一秒,林子里传来压低的喘声。 - -## 第 2 章:第一次接触 - -古米的声音从林子里钻出来,压着嗓子,喘得厉害。 - -“博士!赫默医生!我回来了!” - -下一刻,古米从树影里钻出来。她一身泥水,背后还跟着两个人。 - -宁诚听到“博士”两个字时慢了半拍。 - -古米也看见了。她的脚步顿了一下,眼神在他和铃兰之间转了转,像是想问,又硬生生把问题咽回去。 - -“先别说这个。”她喘着气说,“我带人回来了。” - -一个瘦得厉害,肩上搭着破布,腿脚有伤,手里死死攥着一根竹杖。另一个年纪稍大,穿着洗得发白的长衫,袖口卷起,脸上又是恐惧又是警惕。他们看见残骸的一瞬间,脚步全停住了。 - -那瘦脚夫嘴里发出一串宁诚听不懂的话,声音抖得像被风吹散。 - -赫默抬起手腕,残破的翻译模块亮了一下。它在飞船上只是基础接触工具,平时负责把舰内通用语转成终末地常用语种。现在它卡了两秒,只吐出几个散碎的词。 - -“山……火……兵……来。” - -更多音节被标成未知。模块右下角跳出一行低功耗提示:语料不足,置信度过低。 - -村塾先生似的人咽了口唾沫,用极生硬的汉字音,一字一顿地说: - -“大响。大火。日本人,会听见。” - -宁诚看着他。 - -那人又指了指山外,指了指残骸,再指了指所有人,脸色一点点灰下去。 - -“日本人听见,不问先打。” - -他说到这里,喉结滚了一下。 - -“他们会来。天亮前,也许就来。” - -村塾先生说完那句“日本人会来”,山林里短暂地静了一下。 - -溪水声还在。残骸内部偶尔炸出一点细小电火花,宁诚自己的呼吸夹在里面,轻一阵,重一阵。 - -语言还不通。 - -可恐惧是通的。 - -翻译模块挂在赫默腕侧,光点一跳一跳。它能分辨出重复出现的恐惧音节,也能把“日本”这样的外来词从混杂口音里捞出来,却没有足够语料拼出完整句子。更麻烦的是,这里的人说话不只一种腔调。瘦脚夫的音节短促,村塾先生的汉字音生硬,古米刚学来的几个词又被她自己的口音揉乱。机器像被迫在黑夜里摸骨头,只能摸到几处尖锐的轮廓。 - -那两个被古米带回来的人站在残骸边,脚底像钉住了。瘦脚夫的眼睛一直往山坡下瞟,竹杖被他攥得发白。村塾先生勉强站稳,看一眼赫默的无人机,又看一眼宁诚身后半埋在泥里的舱段,嘴唇动了几次,才挤出几个汉字音。 - -“不是飞机?” - -宁诚看向古米。 - -古米小声解释:“我在溪边碰到他。他脚伤了,饿得走不动。我给了他一点压缩饼干,包了一下伤口。他带我去了村子外面。里面没人敢出来,后来这位先生出来,说一点汉字。” - -她顿了顿,声音更低。 - -“他们说山里刚才像打雷,又有白光。村里已经有人听见了。” - -村塾先生听不懂古米的话,但听见“村”字,似乎猜到她在说什么。他急忙从怀里掏出一张皱巴巴的纸,又用手指在泥地上画。先画一条弯曲的线,像河;再画几个方块,表示村子;然后在更远处画出一条路,路边画了一个简陋的旗子。 - -他指着旗子,说了几个音。 - -宁诚没听懂。 - -赫默却听见其中一个词,低声道:“日本。” - -宁诚看她。 - -“不确定,发音接近。”赫默说,“如果这里是地球,他指的又是日本军队,时间大概在二十世纪中叶附近。” - -宁诚没有立刻接话。 - -地球。 - -二十世纪中叶。 - -日本军队。 - -这三个词排在一起,怎么听都不像好消息。三个模糊音节还不够,他得继续问。 - -他指着村塾先生的衣服、脚夫手里的竹杖、远处火光的位置,又指向残骸,慢慢问:“这里?” - -村塾先生听不懂。 - -古米想了想,从口袋里掏出一块被水泡软的包装纸。她在上面画了个圆,又点了点脚下。村塾先生看明白了,蹲下去,在泥地上重新画。他画出山,画出路,画出村子,又在旁边写了两个宁诚勉强能辨认的汉字。 - -太原。 - -宁诚盯着那两个字。 - -不是山西太原。 - -湿热空气、宽叶树、村塾先生拧巴的汉字音,一样都不对。这里不是他认知里那个太原。 - -村塾先生又写了两个字。第一个还能认,第二个被泥水糊开一半,只剩下外框和几笔残画。 - -宁诚先看成了别的字,立刻又否掉。村塾先生急得用竹枝在旁边重写,写到第三遍,赫默的翻译模块才把一个低置信度地名挂到旁边。 - -定化。 - -赫默轻声说:“越南北部有太原省。” - -宁诚抬眼。 - -“你确定?” - -“以前做过疫区资料归档。只确定存在这个地名,不确定年代和行政边界。” - -年代。 - -宁诚重新看向村塾先生。 - -他从赫默手里拿过一支断掉的记号笔,在包装纸背面写下几个数字。 - -一九四四? - -村塾先生摇头。 - -宁诚划掉最后一个数字,又写: - -一九四五? - -村塾先生盯着那几个数字,脸上的血色退下去。他点头,点到一半又摇头,像这个年份光写在纸上就会招祸。 - -宁诚画了一个圆当太阳,又画一弯月亮,再用手指在两者之间来回点。村塾先生看懂了,伸出三根手指。 - -“三月。”他费力地说,“日本……法国……打。” - -翻译模块卡了几秒,挤出一条译意。 - -“日本人……打法国人。现在。” - -“现在”两个字闪着低置信度,宁诚后背还是窜起一层凉意。 - -赫默慢慢吸了一口气。 - -一九四五年三月。越南北部。日本军队。法国殖民残余。 - -他不知道自己为什么会落在这里,也不知道飞船到底穿过了什么。眼前这些字和手势已经够用了。 - -没有基地,没有生产线,也没有能展开的武装平台。 - -山坡上只有摔碎的残骸,几个人,半只急救包,两架受损无人机,一枚低功耗核心。还有那块随时会把所有人拖进死地的异常金属山。 - -宁诚把记号笔还给赫默,开始清点。 - -“核心计算机,一台,低功耗。完整功能未知。” - -赫默补充:“可读接口两个,稳定接口一个。” - -“能源包?” - -“三个。一个读数不稳,一个外壳破裂,一个可用。” - -“医务?” - -“急救贴片十二片,广谱抗感染凝胶两支,退热药四份,止血材料不足,消毒喷雾半瓶。完整医务箱还在残骸里,但位置危险。” - -宁诚看向铃兰。 - -铃兰低声说:“食物只有古米带出去的那一小包,水还没有过滤。” - -古米把背包放下,里面只剩几块压缩饼干、一只扁掉的金属杯、半袋盐和一把小刀。 - -宁诚看着这些东西,忽然想笑。 - -公司宣传片里,开拓者登陆异星,身后总有整齐的模块箱、自动展开的工厂、发光的建造平台和一排等候指令的无人机。 - -轮到他自己,终末地核心躺在山坡上冒烟,唯一激活权限套在腕上,包里还有一只漏水杯子和半袋盐。 - -前者暂时不能救命。 - -后者至少能熬粥。 - -笑意只在喉咙里停了一下,就被疼痛压没了。 - -村塾先生一直在旁边看。他听不懂这些人说什么,看得懂那只扁掉的金属杯和半袋盐。天上掉下来的东西也会饿,神怪也要为一口水皱眉头。 - -他和脚夫低声说了几句。脚夫急得直摇头,又指着山外。村塾先生也急,却还是咬着牙,转向宁诚,用汉字音挤出一句: - -“村里,有人。伤。重。” - -古米立刻抬头。 - -村塾先生指了指赫默手里的绷带,又指了指自己胸腹的位置,做了个发热发抖的动作。 - -“日本人打。病。快死。” - -宁诚没有说话。 - -赫默的表情已经变了。 - -药箱里剩什么,赫默比谁都清楚。现在用掉一份,以后就少一份。 - -村塾先生看着他们的沉默,眼神一点点暗下去。他似乎误以为这些天上来的人拒绝了,脸上露出一种并不意外的苦笑。他拉了拉脚夫,想走。 - -宁诚在这时开口。 - -“等等。” - -村塾先生停住。 - -宁诚指向残骸,又指向山外,再指向自己的胸口。 - -“我们,帮人。” - -他又指向核心舱、药箱方向,再指向村塾先生和脚夫。 - -“你们,帮我们。” - -村塾先生没完全听懂,但看懂了手势。他僵在那里,像在判断这是交易,还是陷阱。 - -宁诚扶着断裂舱板站起来,疼得眼前一黑。铃兰急忙扶住他。赫默皱眉,却没有阻止。 - -宁诚看着村塾先生,一字一顿地说: - -“先救人。” - -## 第 3 章:药换食物 - -村子离坠毁点并不远。 - -可这一段路走得极慢。 - -宁诚没跟去。他这副样子走不了夜路,残骸边也不能没人。赫默、古米和村塾先生下山,铃兰留下看着他。脚夫也留下,熟山路,能找水,能望风,真出事还能带他们绕开大路。 - -谈不上信任。 - -只是两边都没得挑。 - -赫默临走前,把一支急救凝胶和两片抗感染贴片放进贴身医疗包,又把剩下的药交给铃兰。 - -“如果我没回来,优先给博士退热和止血。” - -铃兰抿紧嘴,没有接这句话。 - -宁诚靠在舱板旁,盯着赫默的医疗包。 - -“别把药当奇迹用。” - -赫默看他一眼。 - -“我知道。” - -“先清创,判断感染范围,补液,降温,抗感染贴片只给主伤口。凝胶能省则省。” - -“我知道。” - -“如果是败血症晚期,放弃。” - -这一次,赫默没有马上回答。 - -古米站在旁边,手里攥着那把小刀。村塾先生看不懂他们的对话,但能听出声音里的冷。 - -赫默沉默了几秒,才说:“我会判断。” - -宁诚点头。 - -“你是医生。” - -这句话说出口,赫默的脸色才松了一点。 - -赫默转身进了林子。 - -村子藏在山坡下面,屋子低矮,竹篱歪斜,许多门窗都没点灯。人却都在。古米一靠近,门缝、墙后、草垛旁边,全有眼睛。 - -她想起舰上厨房里那些排队等饭的人。 - -那时候的目光也会集中在她身上,但里面有期待,有催促,有对热汤的放松。这里的目光不一样。这里的人看她,像看一把可能救命、也可能引来刀子的火。 - -村塾先生低声和几个村民说话,语速压得又急又碎,时不时回头看赫默和古米。有人摇头,有人哭,有人往后退。屋里最后出来一个老妇人,头发花白,背佝着,抬手指了指后面那间柴房。 - -柴房一开门,热气和臭味一起扑出来。 - -化脓伤口、汗、草药和排泄物混在一起,呛得古米差点屏住呼吸。赫默眉头只动了一下,已经蹲到草席边。 - -伤员躺在草席上,年纪不大,二十出头,脸烧得通红,嘴唇干裂。左腹到腰侧有一道被粗布缠住的伤,布已经被脓血浸硬。右肩还有瘀伤,手腕上有绳索勒过的痕迹。 - -枪伤,或者刺刀伤后感染。 - -拖得太久。 - -赫默先摸颈动脉,又掀开眼皮看瞳孔,再摸额头和四肢。村民围在柴房门口,紧张得连呼吸都压住了。古米挡在门边,尽量让自己的表情看起来无害。 - -村塾先生蹲在赫默旁边,低声说:“日本人……打。山路,抓。跑回来。” - -赫默听不全,但足够了。 - -她打开医疗包。 - -柴房里响起一片吸气声。 - -消毒喷雾、纱布、薄薄的透明贴片、金属剪、软管和折叠水袋,在村民眼里像某种奇怪法器。一个妇人下意识伸手想摸,被古米轻轻拦住。 - -赫默先让村塾先生烧水。 - -烧水他们懂。洗手他们也懂。柴房门口被清开,潮闷的空气终于能往外走一点。赫默没有急着贴那片透明的东西,只反复比划:水,布,光,干净。 - -翻译模块断断续续,把赫默的“清创”“消毒”“感染风险”压成几个土得掉渣的词:洗伤口,脏东西,热病。赫默皱了下眉,没纠正。村民肯把水烧开、肯把脏布拿远,就够了。 - -村民终于动起来。有人去端水,有人把孩子往外赶,有人把门口那堆潮柴拖开。 - -赫默要的就是这个。不是让他们跪在旁边等天上人施法,是让他们自己也伸手。 - -水烧开又放温。赫默剪开脓血布条,伤口一露出来,门口有人低低哭了一声。伤口边缘肿得发黑,脓液带着臭味。赫默的手没抖。清创,冲洗,压迫止血,消毒,观察渗血,切开的抗感染贴片最后才贴上去。 - -古米在旁边帮忙递水。她看见伤员疼得全身抽搐,下意识想按住他,却被赫默摇头制止。 - -“让他咬这个。” - -古米听懂了,把卷起的布递过去。伤员咬住,喉咙里发出模糊的低吼。 - -村塾先生的脸色越来越白。 - -他也许见过人死,却没见过这样救人。没有香灰,没有符水,没有草药糊满全身,只有刀、布、水和冷静到近乎残忍的手。 - -半个时辰后,伤口重新包扎好。 - -赫默把退热药掰开,只用了一半,又调了盐糖水,让古米用小勺一点点喂。伤员一开始吞不下去,后来终于咽了几口。 - -“能不能活,看今晚。”赫默对古米说。 - -古米把这句话用手势讲给村塾先生。她指了指伤员,又指了指天,再把手掌放平,做出“等”的动作。 - -村塾先生慢慢懂了。 - -老妇人忽然跪了下去。 - -古米吓了一跳,连忙去扶。赫默也伸手,却被更多村民围住。他们没有欢呼,也没有立刻信任,只是看她的眼神变了。 - -恐惧还在。 - -但恐惧里多了一点希望。 - -村塾先生从屋角搬出一小袋米,又拿了两个竹筒水。他犹豫很久,又让人取来几根粗绳和一副旧担架。 - -“你们山上,东西。”他用汉字音慢慢说,“我们,搬。” - -赫默看着那袋米。 - -袋口一收,底下瘪下去大半。 - -对这个村子来说,已经是咬牙拿出来的东西。 - -古米抱起米袋时,手指收紧了一下。 - -柴房里的伤员忽然睁开眼,眼神涣散,却死死抓住村塾先生的袖子,嘴里吐出几个极轻的词。 - -村塾先生脸色骤变。 - -赫默问:“他说什么?” - -古米听不懂。 - -村塾先生没有立刻翻译。他看了看门外,又看了看山上的方向,最后才低声说: - -“有人……来消息。” - -他顿了顿。 - -“查村。明天,也许今晚。” - -## 第 4 章:抢救核心 - -赫默带着古米和三个村民回到残骸边时,宁诚没有说谢。 - -愿意帮忙是一回事,信不信他们是另一回事。话说多了,只会让人想逃。 - -他让铃兰把米收好,又让赫默报药物消耗。 - -“抗感染贴片用掉一片,切开后只覆盖主伤口。急救凝胶用了三分之一。退热药半份。消毒喷雾剩不到三分之一。” - -宁诚点头,在心里改写清单。 - -药少了。 - -人多了。 - -山下知道这件事的人,也多了。 - -宁诚在心里把这笔账记上。交易刚开始,还远不到庆祝的时候。 - -三个村民里,一个瘦脚夫,一个村塾先生,另一个中年人一直不说话。那人肩膀宽,手上厚茧开裂,一看就是常年挑担砍柴。靠近残骸时,三个人都在发抖。核心舱那点蓝光一亮,脚夫半只脚已经往后撤。 - -宁诚让赫默把光遮住。 - -蓝光一灭,村民明显松了口气。 - -“先搬小件。”宁诚说。 - -赫默把他的话转成手势,古米再用自己刚学会的几个词和动作解释。村塾先生负责猜,猜完再告诉另外两个人。 - -一句“搬小件”,绕过赫默、古米、村塾先生,最后落到两个村民耳朵里,已经变成一串手势和半截词。 - -这套通信系统寒酸得可怜,偏偏还能用。 - -翻译模块也在旁边学。每一次“搬”“等”“火”“日本兵”被重复,它都会把新的音节塞进临时词表。宁诚看着那张缓慢增长的词表,知道再给它两三天,它至少能撑起日常命令。问题是,日本人未必会给他们两三天。 - -宁诚忍着疼,指向残骸内部。 - -完整终末地核心舱搬不走。它嵌在变形支架和半截山坡里,展开骨架还埋在泥、树根和烧塌的舱壁下面。宁诚只能抢主存储匣、应急运算模块,还有一个手掌大小的低功耗控制核。赫默拆接口,宁诚口述步骤,铃兰举着遮光布,古米和村民在外面清路。 - -第一次拆卸失败。 - -接口卡死,工具不匹配。赫默试图用备用夹具,夹具裂了。 - -宁诚脸色难看。 - -标准事故条令里,从来没有“用柴刀敲开终末地核心固定栓”这一项。 - -可现实不等流程。 - -他让古米把村民带来的砍柴刀递过来,又让脚夫找一块合适的石头。赫默看了他一眼,终于没有反对。三分钟后,固定栓被硬砸开,接口边缘裂了一道细口。 - -那声裂响钻进宁诚耳朵里,他后槽牙跟着一酸。 - -这枚控制核原本只是终末地核心展开后的早期调度组件。 - -现在,它沾着泥、血和石屑,被几个人从残骸里撬出来。像一块勉强保住的骨头。 - -身体还留在山坡上。 - -迟早会被人看见。 - -“继续。” - -药箱更麻烦。 - -完整医务箱压在一块扭曲的内舱板下面。那块舱板至少几百斤,靠他们几个人搬不动。中年村民看了看,忽然叫脚夫和古米一起去砍几根木杆。他们用粗绳套住舱板边缘,又用木杆做杠杆,一点点把缝隙撬开。 - -赫默趴在泥地上,把手伸进去摸。 - -第一次摸出一包烧毁的止血棉。 - -第二次摸出半盒破裂的试剂。 - -第三次,终于摸到医务箱内层。 - -她把箱子拖出来时,手背被金属边划开,血滴在箱盖上。铃兰立刻要给她包扎,赫默却只看箱子。 - -锁坏了。 - -里面的东西还在,但冷藏格已经失效。几支需要低温保存的药物不能再按原效果估算。赫默的表情比受伤时更难看。 - -“损耗?” - -“等回去清点。”她说,“现在不能确定。” - -宁诚没追问。 - -能源包搬出两个,第三个外壳破裂,宁诚只让赫默拆掉识别片和接口板。数据模块找回四枚,另外两枚埋在更深处,暂时放弃。 - -放弃这个词说出来容易。 - -转身时,没人催。 - -那是地图、记录、航线、备份、可能还包括死去同伴最后几分钟的舱内数据。 - -铃兰站在残骸边,低声问:“真的不拿了吗?” - -宁诚看着那片被压住的数据舱。 - -“拿不到。” - -“以后呢?” - -“以后再说。” - -这是谎话。 - -所有人都听出来了。 - -主体残骸还趴在山坡上,“以后”两个字薄得像纸。 - -宁诚转过身,开始分派遮挡任务。显眼的发光面用泥糊住;反光金属用树枝盖住;脚印用树叶扫乱;溪边拖痕不必全抹,反而要留下几处看似山火逃生的混乱痕迹。 - -村民看不懂他为什么故意留下痕迹。 - -村塾先生问出来。 - -宁诚用石头在泥地上画:一条直线,被人看懂;一团乱线,被人误会。 - -村塾先生盯着那团乱线看了很久,慢慢点头。 - -“让他们,以为别的。” - -宁诚点头。 - -就在这时,脚夫忽然抬手,示意所有人安静。 - -山下传来两声短促的鸟叫。 - -不是自然的鸟叫。 - -脚夫脸色变了,转头看村塾先生。村塾先生立刻往林子边走。片刻后,一个瘦小少年从树影里钻出来,连滚带爬,几乎摔到地上。 - -他不敢靠近残骸,只把一个卷起来的纸团塞给村塾先生,又急促说了几句话。 - -村塾先生听完,脸色比刚才更白。 - -宁诚看着他。 - -“消息?” - -村塾先生捏着纸团,声音发紧。 - -“保长那边,有人说,日本兵问山里大响。还有怪光。” - -他看向残骸,又看向众人刚刚搬出的核心和药箱。 - -“他们明天查村。也可能,天亮前先进山。” - -宁诚低头看了一眼还没完全遮好的残骸。 - -时间窗口,缩短。 - -## 第 5 章:搜山前 - -口信一到,残骸边所有人都像被抽了一鞭。 - -宁诚把“不能乱”三个字咬在牙关里。疼痛反倒有用,至少能让他别昏过去。他坐在一块倒下的舱板上,面前摊着两张纸。一张是赫默写的物资,一张是村塾先生按他的意思画出的山路。 - -纸张不够,字迹歪斜,语言也拧巴。 - -可所有人都盯着它。 - -翻译模块的临时词表攒了二十多个词,“水”“米”“药”“山路”“日本兵”能分出来。长句还是废,短命令总算不用每次都画半天。再熬几天,交流会顺一点。 - -前提是他们有几天。 - -核心模块、主存储匣、两个能源包、内层医务箱、四枚数据模块、两件可拆工具、一卷线缆、一块可用的透明防护板。 - -东西少,偏偏每一样都压手。 - -村民带来的旧担架派上了用场。核心模块和能源包被裹进破布,用竹竿固定,外面再盖一层草。医务箱由赫默亲自背。数据模块贴身交给铃兰。古米背食物和水,顺手把那半袋盐也塞进包里。 - -宁诚原本想自己拿主存储匣。 - -赫默直接把东西从他手里拿走。 - -“你现在的任务是活着。” - -宁诚看了她一眼。 - -赫默没有退让。 - -主存储匣最后交给中年村民。那人不知道自己背的是什么,只知道这东西让几个天上来的人盯得最紧。他把绳子在胸前打了两个死结,拍了拍,示意不会掉。 - -宁诚向他点头。 - -中年村民没笑,只回了一个点头。 - -要命的东西交到对方背上,对方没有扔下它逃走。现在他们只能把这叫信任。 - -遮挡残骸花了更久。 - -脚夫和古米把树枝拖过来,铃兰用泥涂在还能反光的金属面上。赫默负责拆掉几处仍在闪烁的识别灯。宁诚让他们保留一部分烧焦外壳,又故意把几块普通合金碎片散在塌方边缘。 - -“像爆炸。”他对村塾先生说。 - -村塾先生盯着那些碎片,忽然问:“如果他们,看懂?” - -宁诚过了一会儿才答。 - -“他们现在看不懂。” - -“以后?” - -“以后会。” - -村塾先生听懂了这个“以后”。他没有露出意外,只像又背上了一袋看不见的米。 - -“所以,你们要走?” - -宁诚看着山下。 - -“先藏。” - -藏到哪里去,才是麻烦。 - -村塾先生不愿意让他们直接进村。村里已经藏了伤员,再藏这几个来历不明的人,一旦日军查到,全村都要遭殃。脚夫提出溪谷上游有个废炭棚,雨季没人住,离村不算远,也能通往另一条山路。 - -宁诚同意。 - -他们不进村。 - -村民也不来残骸边停留太久。 - -炭棚先当中转点。 - -规矩也得立起来。 - -药物由赫默保管,除非伤员恶化,否则不再随意使用。 - -核心模块和能源包藏在炭棚后的石缝里,用湿草和木炭遮味。 - -村塾先生只告诉两个人山上藏了“受伤外乡人”,不提残骸。 - -脚夫负责在村和炭棚之间传话。 - -古米可以跟脚夫下山取水,但不能单独行动。 - -铃兰留在宁诚身边,必要时转移数据模块。 - -赫默的无人机每天只飞两次,每次不超过五分钟。 - -宁诚说到这里,赫默忽然插话:“一次。” - -宁诚看她。 - -“电量不足。我们不知道什么时候才能充电。每天两次太奢侈。” - -宁诚沉默一秒,改口。 - -“每天一次。除非发现追兵。” - -村塾先生看见了,眼神动了一下。 - -这个受伤的男人会被反驳,会改口。 - -天上来的人,也不是一块铁板。 - -天边发白时,最后一批东西才转完。 - -宁诚被古米和中年村民半扶半架地带到炭棚。炭棚比想象中还破,屋顶漏了几处,地上全是潮气和炭灰。好在有墙,有遮蔽,后面还能听见溪水声。 - -铃兰把数据模块藏好,才坐到宁诚旁边。她累得脸色发白,却还是先问:“博士,疼吗?” - -宁诚想说还好。 - -但他说出口的是:“疼。” - -铃兰愣了一下。 - -宁诚靠在墙上,闭着眼说:“所以我现在不会乱动。” - -铃兰低下头,轻轻嗯了一声。 - -赫默在角落清点医务箱。古米把米袋打开,认真数里面还能熬几顿粥。村塾先生站在门口,望着山下那片还没亮起来的村子。 - -这一夜拖到现在,还没肯放人。 - -他们只是暂时没死。 - -脚夫忽然从外面跑进来,气喘得说不出完整句子。他指着山路方向,又比了一个拿枪的动作。 - -村塾先生脸色骤然变了。 - -“来了。” - -宁诚睁开眼。 - -远处的山林里,隐约传来人声。不是一个人,也不是村民低声说话。那声音断断续续,伴着金属碰撞和树枝被拨开的声响,正沿着山路往上。 - -赫默抬起头。 - -古米握紧小刀。 - -铃兰把藏数据模块的布包往身后推了推。 - -宁诚看向门外那片灰白色的晨雾。 - -工厂没有,军队没有,地图也没有。翻译模块还在磕磕绊绊地学当地话。 - -几件抢出来的东西,几个人,一条刚立下的临时规矩。 - -“按刚才说的做。” - -他说。 - -“谁都不要先跑。” - - diff --git a/正文/1.1.1-坠毁后的第一夜/第01章-我不是博士.md b/正文/1.1.1-坠毁后的第一夜/第01章-我不是博士.md index 462a848..7243f30 100644 --- a/正文/1.1.1-坠毁后的第一夜/第01章-我不是博士.md +++ b/正文/1.1.1-坠毁后的第一夜/第01章-我不是博士.md @@ -2,162 +2,329 @@ ## 第 1 章:我不是博士 -宁诚醒来时,最先钻进鼻腔的是一股焦糊味。 +“博士?” -那不是木头烧干的枯燥味道。它更尖锐,带着被烧穿的绝缘层、冷却液和金属粉末混合出的辛辣,像一根细针扎进肺里。 +声音贴着耳根钻进来,轻得像是怕碰碎了什么。 -他想咳,胸口却像是压了一整块沉重的舱壁,让他只能憋住一口气。 +宁诚没睁眼,先尝到嘴里的铁锈味——那不是单纯的血气,更像是什么金属被高温烤化后,混进喉咙里的黏稠涩感。 -“博士。” +他想咳嗽,胸口却猛地一紧,左肋下方被生生扯了一下,疼得他倒吸一口冷气。 -有人贴在他耳边低唤。那声音压得极低,仿佛在小心翼翼地试探林子里的某种生物。 +“博士?” -*博士?* +又叫了一声。 -宁诚在黑暗里怔了一下。 +我不是博士。 -他没叫博士。 +这念头来得没头没尾。 -他叫宁诚。 +他记得自己叫宁诚,至少这个名字还在脑子里清晰着。至于博士是谁、谁在叫博士、以及自己为什么横在这里…… -这个念头比疼痛更早蹦出来,清晰得有些不合时宜。他差点张嘴反驳,话刚到喉咙口,一阵血腥味就顶了回来。 +脑子里的记忆像是被粗糙的抹布刷过,只剩下一道道模糊的水痕。 -不对。哪里都不对。 +他睁开眼。 -他记得自己的名字,记得一些零碎到无法安放的常识。可他不记得自己为什么会躺在这里,不记得是谁在叫他,也不记得这股焦糊味之前发生了什么。记忆像是被一刀切断,断口后面全是死寂的黑。 +视野最初是混沌的白,过了几秒才聚成一张脸。银白色的发梢垂下来,鼻尖沾着些许灰尘。 -宁诚睁开眼。视野里晃过一片银白色的发梢。铃兰跪在他身旁,脸上蹭着灰,耳朵耷拉下来,手里攥着一卷已经发暗的止血绷带。她对上他的视线,眼睛亮了一瞬,随即又低下头去盯着他的伤口。 +那耳朵——不是人的耳朵,毛茸茸的,尖尖的,正贴着头皮往后压。 + +宁诚脑子里有什么东西闪了一下。不是记忆,更像是某个遥远的游戏画面被疼痛和眩晕拽到眼前:银发,狐耳,铃兰。他知道这个名字,却不敢确认。如果这是真的,那很多事就不再只是坠毁事故那么简单。 + +女孩跪在他旁边,手里紧攥着一卷发暗的绷带。她对上他的视线,眼睛亮了一下,随即又垂下眼睑,死死地盯着他的伤口。 “您醒了。” -宁诚没立刻接话。视野一半模糊,一半像隔着一层水。右耳几乎失聪,只剩左耳里一点挥之不去的嗡鸣。左肋和后肩疼得最实在,每吸一口气,都像是有一根钝针从骨缝里往里顶。 +宁诚没应声。 -他垂下眼帘。 +右耳里嗡鸣作响,像有一只蜜蜂被关进了颅腔;左耳勉强还能用,能听见远处断断续续的水声。 -那只手骨节修长,手背上全是干涸的血和细小的擦伤,腕侧扣着一只他从未见过的金属环。它外壳有明显的擦痕,透明面板裂开一道细纹,但内部的权限灯依然稳定地亮着。这东西不像普通的随身设备,更像一把钥匙。 +他动了动右手。手指还能弯曲,就是僵硬得厉害。手背上结了一块暗红的血块,腕侧扣着一只金属环。外壳裂开一道细纹,里面的光却稳如磐石。 -*权限确认。* -*身份:博士。* -*终末地核心激活权限:唯一持有人。* -*当前核心状态:坠毁锁定,待人工确认。* +权限确认。 -宁诚喉咙发紧。陌生的身体,陌生的称呼,陌生的权限,还有那句听起来足够荒唐的“终末地核心”,全都在等他给个回应。 +身份:博士。 -他试着动了动手指。能动。 -他试着抬起右手。手背上的血块让它显得有些僵硬。 -他试着抬起左手。铃兰立刻按住他的肩膀。 +终末地核心激活权限:唯一持有人。 -“不要动,赫默医生说您的肋骨可能有裂伤。” +当前核心状态:坠毁锁定,待人工确认。 + +宁诚死死盯着“唯一持有人”那几个字。金属环贴着腕骨的皮肤,有些烫手。他本能地想把它摘下来,指尖刚触碰到锁扣,环边立刻亮起一圈警告般的红光。 + +权限设备不可移除。 + +当前环境危险。 + +请保持佩戴。 + +女孩也看见了那圈红光,脸色瞬间紧绷。她伸手想按住他的手,却在半空中迟疑地停住,似乎怕弄疼他。 + +“博士,别碰。”她压低声音,“赫默医生说它还在维持核心识别。” + +宁诚看着那只悬在半空的手。手指上沾着灰和血,正微微颤抖。她比自己还要慌乱,却拼命把声音放轻。 + +“我没摘。”他说。 + +这三个字出口时,他自己都觉得有些别扭。女孩却松了一口气,把绷带重新按回他的左肋下方。 + +“您别动,赫默医生说肋骨可能有裂伤。” 宁诚闭上眼。 -*肋骨裂伤,轻度失血,左肩挫伤,右耳暂时性听觉损伤。* +肋骨裂伤,轻度失血,左肩挫伤,右耳暂时性听觉损伤。 -这些词一个接一个在脑中跳出,像有人把急救手册塞进了他的脑袋里。他知道它们代表什么,却分不清这是自己的知识储备,还是这具身体自带的本能。 +这些词不知从哪儿冒出来,一个接一个地在脑海里蹦。他甚至都不知道这些算不算自己的知识。 -至少还能说话。至少还能思考。 +“我现在能不能坐起来?” + +女孩立刻摇头,又朝旁边张望,想叫人。 + +“先别叫。”宁诚说,“告诉我,哪儿在出血。” + +女孩愣了一下,低头把他左侧衣料往旁边挪开半寸。暗色的血迹已经浸透了里层。 + +“这里压住了。后肩还有一道口子,赫默医生贴过临时止血片。头部没有大出血,可您刚才一直叫不醒。” + +她说话很慢,说到“叫不醒”时,眼睛又红了一点,随即赶紧低头去整理绷带,用动作掩饰住脸上的表情。 “赫……默。” -他的声音哑得厉害。这个名字不是他想出来的,而是在铃兰话音刚落时,腕环自动调出了一行人员标签:*赫默,医疗与科研支援。* 宁诚盯着那两个字,像溺水的人抓住漂来的木片。 +宁诚的声音哑得厉害。 -铃兰立刻回头。 +这个名字不是他随口编出来的。 -不远处,赫默正蹲在一块断裂的黑色舱板前。她身边浮着一架小型无人机,外壳有一角开裂,飞行姿态摇晃,悬在半空时会轻微偏斜。它腹部的灯光忽明忽暗,把周围的树干、泥水和扭曲的残骸照得阴晴不定的。 +它和铃兰一样,从某个游戏画面里浮出来,他知道她大概是医生,却不知道她在这个现实里会怎么判断他的伤。 -听到宁诚醒来,赫默转过身。她的脸上没有放松的神色。 +女孩话音刚落时,腕环自动跳出一行标签:赫默,医疗与科研支援。 -“你昏迷了约四十七分钟。现场时间不完全可靠,核心计时有跳变。” +女孩立刻回头。 -宁诚听懂了一半。另一半听不懂。系统不可靠,定位不可靠,坠毁前的数据也未必可靠。每一个词都像在往下拽他的胃。 +不远处,一个女人正蹲在一块断裂的黑色舱板前。 -赫默多看了他两秒。那眼神不像在看病人,倒像是盯着一份读数不对的报告。 +她身边浮着一架小型无人机,外壳缺了一角,飞起来歪歪斜斜的,腹部的灯光一明一灭,把周围的树干、泥水和扭曲的金属照得阴晴不定。 -“博士,”她问,“你还记得坠毁前的事吗?” +听到宁诚醒来,她转过身。脸上并没有预想中的放松。 + +“你昏迷了约四十七分钟,现场时间不完全可靠,核心计时有跳变。” + +她走近时没有直接蹲下,先扫了一眼宁诚的瞳孔,又看一眼腕环上的生命体征。无人机跟着下沉,光束从他的脸侧移到胸口,最后落在左肋。 + +女孩立刻让开一点空间,用自己的身体挡住风吹来的烟。 + +“右耳听得见吗?” + +宁诚偏过头,迟疑了一下:“不太行。” + +“左手握拳。” + +左肩疼得他眉头一跳,手指还是合上了。 + +“右脚动一下。” + +泥水里传来轻微的摩擦声。 + +赫默低声报出判断:“意识清醒,基础运动反应存在。短时记忆断层,身份记忆异常。暂不排除冲击性脑损伤和权限环介入。” + +“权限环介入是什么意思?” + +赫默看了他一眼,没立刻回答。她伸手在腕环侧面点了两下,调出一列宁诚看不懂的诊断项。红色太多,绿色太少。她的指尖停在其中一项上,最后只说: + +“它在保护核心权限,也在保护你。具体机制,等我们活过今晚再查。” + +赫默又多看了他两秒:“博士,你还记得坠毁前的事吗?” 宁诚停了一下。 -他想说:*我不是博士。* -他想问:*你们是谁?* -他还想问:*我是不是已经死了?* -可铃兰的手还按在他肩旁,赫默的无人机灯光还在晃,远处残骸里偶尔炸出一点电火花。所有东西都太真了,真得不给他发疯的时间。 +他想说:我不是博士。 + +他想问:你们真的是铃兰和赫默? + +他还想问:我是不是已经死了? + +可女孩的手还按在他肩旁,赫默的无人机灯光还在晃动,远处残骸里偶尔炸出一点电火花。所有东西都太真了,真到不给他发疯的时间。 “不记得。” -铃兰的手指一下攥紧了绷带。她嘴唇动了动,话没出来,按在宁诚左肩旁的手又往旁边挪了半寸。 +女孩的手指下意识地攥紧了绷带。她嘴唇动了动,话没出来。 -赫默没有追问。她只是把视线落到他腕侧的权限环上,又移开。 +赫默没有追问。她把视线落到宁诚腕侧的权限环上,又移开。 “创伤后记忆缺失。”她说,“先按这个处理。” -她侧过脸,声音压到只有铃兰能听清:“铃兰,记录他的反应。” +她侧过脸,声音压到只有女孩能听清:“铃兰。” -*先。* 宁诚听见了。 -也就是说,不是没人怀疑他。只是现在没空处理他。 +先。 -他看向四周。空气湿热,地面一踩就往下陷。草叶宽得不像任何熟悉的绿化带,树影压在头顶,断裂的舱段斜插在山坡上,像一条被掰断脊骨的金属鱼。腹部翻开,线缆、隔热层和烧黑的支架全露在外面。几段舱壁上还有折叠轨、嵌套接口和支撑脚的残片,像某种没来得及展开的地面设施。更远处有一条细溪,水声被夜色和烟压住,只剩一点断断续续的动静。 +宁诚听见了。也就是说,不是没人怀疑他,只是现在没空处理他。 -飞船的主体不在这里,或者说,这里只是残骸的一角。 +铃兰从腰包里摸出一块薄薄的记录板。她跪在宁诚旁边,一边观察着他,一边用指尖艰难地输入。 -核心舱残片还在低功耗闪烁。那点蓝白色的光在黑暗里显眼得刺目。腕环把它标成“终末地核心舱”,状态栏后面却连续挂着三个红色限制:*结构不完整,能源不足,展开失败。* +“你记得自己的姓名?”赫默继续问。 -宁诚张了张嘴,第一句差点问成:“这是哪儿?” -腕环边缘又亮了一下,应急界面把一行字推到最上面: -*幸存人员确认。* +“宁诚。” -他把这几个字咽下去,换成另一个问法。“还有谁活着?” +铃兰的手指停住了。 -赫默推了推眼镜。“确认可行动三人。你,铃兰,我。古米离开现场,去找水和食物,离开时间约二十六分钟。其他舱段没有回应,近距离生命信号不稳定,残骸干扰太强。” +“记得开拓队编号?” -宁诚把这些名字在脑子里过了一遍。 -*你,铃兰,我。古米离开现场。其他舱段没有回应。* -开拓队也好,外勤组也好,到了这会儿只剩几个能喘气的人了。 +宁诚沉默。 + +“记得终末地核心的部署目标?” + +仍然没有答案。 + +“记得铃兰?” + +宁诚看向跪在身边的少女。铃兰也看着他,眼神里闪过一丝不敢靠近的期待。他脑子里有画面——游戏立绘、技能特效、档案里几句零碎的描述。 + +那不是共同经历,但确实是“认识”。 + +“记得。”他说。 + +铃兰的眼睛亮了一下,像有什么东西刚要浮起来。 + +宁诚没让她浮起来:“我记得你叫铃兰……可我不记得我们一起经历过什么。” + +铃兰眼里的光凝在半空。她嘴唇动了动,没出声,低头继续记录。指尖错了一次,又删掉重写。 + +赫默的表情没有变化:“记得我?” + +“记得。”宁诚说,“赫默,黎博利,莱茵生命。”他停了一下。 + +赫默的指尖在记录板边缘停住。 + +“记得古米?” + +“记得。熊耳,背包,总是笑着,负责后勤和吃的。”宁诚顿了顿,“如果她现在出现在我面前,我应该能认出她。” + +赫默沉默了几秒,她把记录板放低,低声说:“记录:主观自我姓名为宁诚,权限身份为博士。声称识别人名,但否认拥有共同记忆。信息来源待确认。” + +赫默没有把他当成失忆的博士,而是当成一个知道太多、又无法解释来源的人。 + +可她已经起身,转向残骸方向,没有给他追问的机会。 + +他看向四周。 + +空气湿热,地面一踩就往下陷。草叶宽得不像任何熟悉的绿化带,树影压在头顶,断裂的舱段斜插在山坡上。舱体腹部翻开,线缆、隔热层和烧黑的支架全露在外面。 + +更远处有一条细溪,水声被夜色和烟雾压住,只剩一点断断续续的动静。 + +飞船的主体不在这里,或者说,这里只是残骸的一角。核心舱残片还在低功耗闪烁。那点蓝白色的光在黑暗里显眼得刺目。 + +腕环把它标成“终末地核心舱”,状态栏后面却连续挂着三个红色限制: + +结构不完整、能源不足、展开失败。 + +宁诚张了张嘴,差点问成:这是哪儿? + +腕环边缘又亮了一下,应急界面把一行字推到最上面:幸存人员确认。 + +他把这几个字咽下去,换成另一个问法:“还有谁活着?” + +赫默推了推眼镜。“确认可行动三人。你,铃兰,我。古米离开现场,去找水和食物,离开时间约三刻钟。其他舱段没有回应,生命信号不稳定,残骸干扰太强。” + +“不可行动的呢?” + +赫默的嘴唇抿了一下。 + +铃兰的记录板发出轻微提示音,她立刻按掉,像怕那声音太刺耳。 + +赫默说:“二号舱段没有生命信号。三号舱段被主体结构压住,热源异常,无法靠近。外勤人员名单不完整,权限环只读到几个损坏标签。” + +她停顿片刻,报出几个名字。宁诚一个都不认识。每个名字后面都跟着状态:失联、无法确认、信号中断…… + +宁诚听到第三个时,胃部已经收紧。等赫默报完,他才发现铃兰一直没有抬头。她把记录板抱在怀里,眼睛盯着地面,像是怕看见什么。 + +“他们有可能还活着吗?” + +赫默没有安慰他:“有。但现在进去,我们可能会多死两个。” + +宁诚有些找不到反驳的空间。开拓队也好,外勤组也好,到了这会儿只剩几个能喘气的人了。 宁诚盯着那片蓝白色的核心光。腕环上“终末地核心舱”几个字跳了跳。他不知道自己为什么会问这个,可能是因为那东西亮得太刺眼,也可能是因为所有人的目光都在等他开口。 “核心状态。” -“低功耗运行。主数据库没有完全丢失,但接口损毁严重。终末地核心展开协议还在,执行条件全部不满足。能源包可读数不足二成。无人机两架,一架可飞,一架只能短距悬停。医务箱还在,但我只抢出了外层急救包,完整库存需要回残骸里取。” +“低功耗运行。主数据库没有完全丢失,但接口损毁严重。终末地核心展开协议还在,执行条件全部不满足。医务箱还在,但我只抢出了外层急救包,完整库存需要回残骸里取。” -宁诚想站起来。 -这个念头刚冒出来,身体就先替他否决了。眼前一黑,左肋像被人从里面掰开。铃兰急忙扶住他,他才发现自己连坐起来都费劲。 +“展开失败会怎样?” + +“现在不会怎样。”赫默说,“只是不能部署基础设施。再坏一点,主数据库断电,权限链丢失,我们就只剩一堆不能用的硬件。” + +“最坏呢?” + +“核心控制核被别人拿走,或者被摧毁。”赫默的视线落在那片蓝白光上,“那我们就没有回收方案,也没有重建方案。” + +宁诚明白了。人可以走,核心不能丢。 + +铃兰忽然开口:“博士,您以前说过,核心是种子。” + +宁诚看向她。 + +铃兰咬了咬唇,像是后悔自己突然插话,但还是继续说:“您说,只要种子还在,很多事就可以以后再想。人活着,种子还在,就还有办法。” + +宁诚不知道原来的博士是不是真的这么说过。 + +他想站起来。这个念头刚冒出来,身体就先替他否决了。 + +眼前一黑,左肋深处猛地剧痛。铃兰急忙扶住他,他才发现自己连坐起来都费劲。 + +别慌。 + +他在心里重复一遍。 -*别慌。* 他在心里重复一遍。 没用。 -他还是慌。只是慌也得喘气,而每喘一次气都会带来一阵剧痛。疼痛反倒把他钉回了眼前。 -“火。”赫默知道他在问什么。“明火已经扑掉了大部分。但热源还在,烟也还在。无人机上升到树冠高度,看见东南方向有零散火光,距离无法精确判断。那里可能有人。” +他还是慌。只是慌也得喘气,而每喘一次气都会带来一阵剧痛。 -*有人。* 宁诚后脑勺发麻。 -在无人星球上,残骸暴露最多是资源问题。这里有火光,就意味着有人。有人看见这堆东西,就会来摸、来抢、来问。问不出来,也可以先开枪。何况这东西还不是废铁,它原本应该落地展开,变成一枚终末地种子。 +赫默知道他想问什么:“现场明火已经压下去大部分,但热源还在,核心舱外壳温度没降。” -他环视现场。视线扫过核心舱、能源包残片、赫默的医务包,又扫回腕环上的应急条令。 -不是他会指挥,而是屏幕上就剩这些东西还能被叫出名字。 +她调出无人机刚才记录的低清热成像,画面抖得厉害,树冠间隐约有几处橘红色亮点。 +“另外,东南方向有集中热源,分布不规则,亮度稳定。不像自然山火。” -宁诚用还能动的右手指向核心舱。“核心、能源包、医务箱、数据模块。”他说得比自己想象中慢,“先按这个排。能搬的搬,不能搬的拆。发光面盖住,反光金属用泥和树枝遮。” +“智慧生命?”宁诚后脑勺发麻。 -他停了一下,喉咙里全是铁锈味。“烧焦的别全灭。留一点,像山火。” +“或者任何会用火的东西。”赫默没有肯定。 -赫默看着他:“你现在站都站不稳。” +“距离?” -宁诚看了一眼自己的手。手在抖。 -他把手指蜷起来,声音压低,“所以你执行。” +“如果地形没有严重误差,最近的步行距离不超过半小时。” -这句话说完,宁诚自己先咳了一声。胸腔里一股铁锈味泛上来,他偏头吐掉,发现唾沫里有血丝。铃兰的脸色白了。 +宁诚闭了闭眼。半小时。这不是理论上的风险,这是随时会走到眼前的智慧生命。 -宁诚没有看她。他盯着那片低功耗闪烁的核心光,声音沉下去。“事故应急条令。”宁诚照着腕环念,“第一条,保全人员。第二条,保全终末地核心。第三条,误导未授权接触者。” +“声音呢?” -腕环里的应急协议一条条亮着。坏掉的是现场,是能源,是那具横在山坡上的终末地核心舱。 -宁诚念到“保全终末地核心”时,自己都觉得这句话有些荒唐。 +“爆炸声不可能没听见。”赫默说,“坠毁时有二次解体,光也很明显。” -可赫默的视线又落到他脸上。她沉默片刻,转身把无人机高度压低。 -“铃兰,看住他。博士如果再试图自己搬东西,你就叫我。” -铃兰用力点头。 +铃兰小声补了一句:“古米就是往有水声的方向走的。” + +宁诚看向她:“她一个人去的?” + +“她说她跑得快。”铃兰声音更低,“她还说,您醒来前必须有水。” + +宁诚没有说话。 + +他环视现场。视线扫过那片扭曲的金属、泥水和烟,最后落回腕环。 + +应急界面上跳动着几行字,他努力辨认:核心舱、能源包、数据模块、医务箱。那些字他都认识,但组合在一起,却像是某种陌生的指令。 + +“我们……有什么能做的?”他问。 +赫默没有立刻回答。她看了一圈现场,目光落在还在冒烟的残骸上,又落回宁诚身上。 + +“你躺着。”她说,“铃兰看着你。别的,天亮前都做不了。” +宁诚想反驳,左肋的疼让他把话咽了回去。 + +远处山坡上传来一声细响。 -宁诚想说自己没那么脆弱,话到嘴边,又被远处山坡上传来的一声细响截住。 -那不是残骸冷却的声音。 是树枝被踩断的脆响。 -赫默的无人机立刻调转镜头。铃兰抬头,尾巴绷紧。宁诚伸手摸向身边,摸到的却不是武器,只是一截断裂的工具柄。他攥住那截工具柄,掌心全是冷汗。 +下一秒,林子边缘的灌木被拨开。一个矮小的身影先探出来,熊耳上挂着泥,背包歪在一边,喘得像刚跑完一段要命的山路。 -下一秒,林子里传来低沉的喘息声。 +是古米。 + +她身后还跟着两个当地人。一个瘦骨嶙峋,肩上搭着破布,腿脚有伤,手里死命攥着一根竹杖;另一个年纪稍大些,穿着洗得发白的长衫,袖口卷起,脸上写满了恐惧与警惕。他们看见残骸的一瞬间,脚步齐齐停住。 + +古米顾不上他们。她喘着气:“博士,赫默医生,我回来了。” + +宁诚看着那两个陌生人,又看向古米。 + +游戏里的古米总是笑着,眼前这个却浑身是泥,眼里全是惊惶。 diff --git a/正文/1.1.1-坠毁后的第一夜/第02章-第一次接触.md b/正文/1.1.1-坠毁后的第一夜/第02章-第一次接触.md index 4576808..021eaf6 100644 --- a/正文/1.1.1-坠毁后的第一夜/第02章-第一次接触.md +++ b/正文/1.1.1-坠毁后的第一夜/第02章-第一次接触.md @@ -2,47 +2,73 @@ ## 第 2 章:第一次接触 -古米的声音从林子里钻出来,压着嗓子,带着明显的喘息。 +古米喘了两口气,又压低声音补了一句:“他们没带武器,至少我看见的没有。这个脚伤的人在溪边,我给他包了一下,他才肯带我去村子外面。” -“博士!赫默医生!我回来了!” +赫默没有放下戒备。无人机向前滑了半米,灯光压低,照过脚夫的竹杖和村塾先生的袖口。 -下一刻,她从树影里冲了出来。浑身泥泞,身后还跟着两个人。 +瘦脚夫被光一照,整个人往后一缩,差点摔倒,村塾先生立刻扶住他,却不敢抬头直看无人机。 -宁诚听到“博士”两个字时动作慢了半拍。 +“他们看见你从哪里出来了吗?”宁诚问。 -古米也发现了。她的脚步顿住,眼神在他和铃兰之间转了一圈,像是想问点什么,又硬生生把话咽了回去。 +古米摇头,又迟疑了一下:“他应该知道大概方向。村里更多人不知道,我没进去。” -“先别说这个。”她喘着气,“我带人回来了。” +她说完,从怀里摸出一只被泥水泡软的竹筒。里面仅剩半筒浑水,水面上还漂浮着几片细碎的草屑。 -一个瘦骨嶙峋的男人,肩上搭着破布,腿脚有伤,手里死命攥着一根竹杖。另一个年纪稍大些,穿着洗得发白的长衫,袖口卷起,脸上写满了恐惧与警惕。他们看见残骸的一瞬间,脚步齐齐停住。 +“水没来得及过滤,我怕他们先跑,直接把人带上来了。” -那瘦脚夫嘴里吐出一串宁诚听不懂的话,声音抖得像被风吹散的碎叶。 +宁诚看着那半筒水,喉咙干得更厉害,却没有伸手。 -赫默抬起手腕,残破的翻译模块亮起一点微光。它原本是飞船上的基础工具,负责把舰内通用语转成终末地常用语种。现在它卡滞了两秒,才勉强吐出几个词: +铃兰接过去,先闻了闻,又看向赫默。赫默点了点头,示意先留着。 + +那瘦脚夫嘴里吐出一串宁诚听不懂的话,声音抖得几乎连不成句。 + +赫默抬起手腕,翻译模块亮起一点微光。 + +它原本是飞船上的基础工具,负责把当地土著语言转成通用语。现在它卡滞了两秒,才勉强吐出几个词: “山……火……兵……来。” -更多音节被标成了未知。模块右下角跳出一行低功耗提示:*语料不足,置信度过低。* +更多音节被标成了未知。 -村塾先生似的人咽了口唾沫,用极生硬的汉字音一字一顿地说道: +模块右下角跳出一行提示:语料不足,置信度过低。 -“大响。大火。日本人,会听见。” +村塾先生似的人咽了口唾沫,用极生硬的汉字一字一顿地说道:“大响,大火。日本人,会听见。” -宁诚注视着他。 +宁诚听懂了。 -那人又指了指山外,指了指残骸,最后指向在场的所有人,脸色一点点灰下去。 +不是通过翻译模块,而是直接听懂——这是汉语,虽然口音拧巴,断句也碎,但每个字他都认识。 -“日本人听见,不问先打。”他说到这里,喉结重重地滚了一下,“他们会来。天亮前,也许就来。” +他侧过头,低声给赫默和铃兰转述:“他说山里有巨响和大火,日本人会听见。” -随着那句“日本人会来”落地,山林里陷入了短暂的死寂。 +赫默的指尖在记录板边缘停了一下。铃兰也看向他,眼神里多了一点意外。 -溪水声依旧在流淌。残骸内部偶尔炸开细小的电火花。宁诚的呼吸被压在胸腔里,轻一阵,重一阵。 +宁诚没有解释自己为什么懂,他只是继续看着那个村塾先生。 -语言还不通,可恐惧是通用的。 +那人又指了指山外,指了指残骸,最后指向在场的所有人,脸色一点点灰下去:“日本人听见,不问先打。” -翻译模块挂在赫默腕侧,光点跳动着。它能分辨出重复出现的恐惧音节,也能从混杂口音里捞出“日本”这个外来词,却没足够的语料去拼凑完整的句子。更棘手的是,这里的人说话腔调各异:瘦脚夫的音节短促,村塾先生的汉字音生硬,古米刚学来的几个词又被自己的口音揉乱。机器就像在黑夜里盲目摸索,只能抓到几处尖锐的轮廓。 +他说到这里,喉结重重地滚了一下,“他们会来,天亮前,也许就来。” -那两个被带回来的人站在残骸边,脚底像是钉住了。瘦脚夫的眼睛一直往山坡下瞟,竹杖被他攥得指关节发白。村塾先生勉强站稳,先是看了一眼赫默的无人机,又看了一眼半埋在泥里的舱段,嘴唇动了几次,才挤出几个词: +那句“日本人会来”落地,山林里陷入了短暂的死寂。 + +溪水声依旧在流淌。残骸内部偶尔炸开细小的电火花。 + +宁诚的呼吸被压在胸腔里,轻一阵,重一阵。 + +他看着村塾先生的脸。那人年纪大约四十上下,实际也可能更年轻,只是长期缺粮和惊吓把脸拖得很老。 + +他说“日本人”时,肩膀往里收,视线先扫树后,再扫火光,最后才落回宁诚身上。 + +这不是听来的害怕。 + +有人被打、被抓、被拖走时,旁观者的肩膀就会长成这样。 + +“慢一点。”他说。 + +看见宁诚没有让无人机继续靠近,村塾先生紧绷的肩膀才松了一点。 + +他蹲下时膝盖发软,差点跪进泥里,还是用手撑了一下才稳住。 + +村塾先生勉强站稳,先是看了一眼无人机,又看一眼半埋在泥里的舱段,嘴唇动了几次,才挤出几个词: “不是飞机?” @@ -50,29 +76,35 @@ 古米小声解释:“我在溪边碰到他。他脚伤了,饿得走不动。我给了他一点压缩饼干,包了一下伤口。他带我去了村子外面,里面没人敢出来,后来这位先生出来,说一点汉字。”她顿了顿,声音压得更低,“他们说山里刚才像打雷,又有白光。村里已经有人听见了。” -村塾先生听不懂古米的话,但捕捉到“村”字时,似乎猜到了她的意思。他急忙从怀里掏出一张皱巴巴的纸,又用手指在泥地上画。先是一条弯曲的线,像河;接着是几个方块,表示村子;然后在更远处画出一条路,路边立了个简陋的旗子。 +“你给了多少吃的?”宁诚问。 + +古米把背包往前挪了挪,拉开袋口给他看。里面空出了一块,剩下的压缩饼干被她用布条重新扎好。“一小块。真的只是一小块。”她补充道,“他走不动。我不给,他可能会倒在溪边。” + +瘦脚夫似乎听懂了自己被提起,慌忙抬起那只受伤的脚。脚踝上缠着古米撕下来的包装布,布已经被泥水浸湿。赫默皱了皱眉,蹲下检查。脚夫吓得想缩腿,却被村塾先生一把按住肩膀。 + +赫默没有用药,只是用手指按了按肿胀处,又看了看包扎的方向。“扭伤加擦伤。没浪费药。” + +古米明显松了一口气。宁诚注意到她这口气——她怕的并非责备,而是担心自己消耗掉队伍活命的东西。 + +村塾先生听不懂古米的话,但捕捉到“村”字时,似乎猜到了她的意思。他急忙从怀里掏出一张皱巴巴的纸,用手指在泥地上画。先是一条弯曲的线,像河;接着是几个方块,表示村子;然后在更远处画出一条路,路边立了个简陋的旗子。 他指着那个旗子,说了几个音。 -宁诚没听懂。 +宁诚没听懂那几个音,但他捕捉到一个词——“日本”。发音很怪,像是方言扭曲过的外来词,但他不会认错。 -赫默却捕捉到了其中的一个词,低声说:“日本。” +他侧头看向赫默。赫默也听见了,但她只是皱了皱眉:“一个外来词。翻译模块里没有对应条目。” -宁诚侧头看向她。 +宁诚没有解释。他看向村塾先生,那人正指着旗子,又指向山外,肩膀发抖。 -“不确定,发音接近。”赫默解释道,“如果这里是地球,他指的又是日本军队,时间大概在二十世纪中叶附近。” +不是普通的恐惧。 -宁诚没有立刻接话。 - -地球。二十世纪中叶。日本军队。 - -这三个词排在一起,听起来都不是什么好消息。仅有模糊音节还不够,他必须继续确认。 +是占领者的名字。 他指向村塾先生的衣服、脚夫手里的竹杖、远处火光的位置,最后指向残骸,缓缓询问:“这里?” 村塾先生听不懂。 -古米想了想,从口袋里掏出一块被水泡软的包装纸。她在上面画了个圆,又点点脚下。村塾先生看明白了,他蹲下去,在泥地上重新勾勒出山、路和村子,并在旁边写下两个宁诚勉强能辨认的汉字。 +古米想了想,从口袋里掏出一块被水泡软的包装纸。她在上面画了个圆,又点点脚下。村塾先生看明白了,蹲下去,在泥地上重新勾勒出山、路和村子,并在旁边写下两个宁诚勉强能辨认的汉字。 太原。 @@ -80,15 +112,19 @@ 村塾先生又写了两个字。第一个还能认清,第二个被泥水糊开一半,只剩下外框和几笔残影。 -宁诚先看成了别的字,随即立刻否掉。村塾先生急得用竹枝在旁边重写,直到第三遍,赫默的翻译模块才把一个低置信度地名挂到旁边。 +宁诚先看成了别的字,随即立刻否掉。村塾先生急得用竹枝在旁边重写。第三遍,宁诚终于认出来: 定化。 -赫默轻声说:“越南北部有太原省。” +他低声念了一遍。越南北部,太原省,定化县。这是他从某个地图角落、某段历史边角里挖出来的名字。 -宁诚抬眼,“你确定?” +赫默问:“你认识这些字?” -“以前做过疫区资料归档。只确定存在这个地名,不确定年代和行政边界。” +“勉强。”宁诚说,“这里是越南。越南北部。” + +“越南?” + +“地球上的一个地方。”他没有多说。 年代。 @@ -100,29 +136,80 @@ 宁诚划掉最后一个数字,又写:一九四五? -村塾先生盯着那几个数字,脸上的血色退下去。他点头点到一半,又摇了摇头,仿佛这个年份光是写在纸上就会招来祸端。 +村塾先生盯着那几个数字,脸上的血色退下去。他点头点到一半,又摇了摇头,连看着这个年份都显得有些害怕。 + +他伸手想把纸翻过去,手指碰到纸边又停住。那张包装纸对宁诚他们只是废料,对他来说却已经沾上了太多不能被人看见的东西。数字,地名,山路,还有天上掉下来的铁。 + +宁诚看懂了他的顾虑。他把纸往自己这边拉了一点,用手掌压住上面的数字。 + +“不留给别人看。”他说。 + +村塾先生未必听懂这句话,却看懂了压纸的动作。他的呼吸慢了一点,终于肯继续。 宁诚画了一个圆当太阳,又画一弯月亮,再用手指在两者之间来回点。村塾先生看懂了,伸出三根手指: “三月。”他费力地开口,“日本……法国……打。” -翻译模块卡了几秒,挤出一条译意:“日本人……打法国人。现在。” +宁诚的后背窜起一层凉意。一九四五年三月。日军倒法前后。越南北部。 -“现在”这两个字闪烁着低置信度,宁诚的后背还是窜起一层凉意。 +他把这几个词在脑子里过了一遍。日本军队,法国殖民残余,饥荒,游击队,八月革命前最乱的那几个月。任何一个名词单独出现都够麻烦,组合在一起就是死地。 -赫默慢慢吸了一口气。一九四五年三月。越南北部。日本军队。法国殖民残余。他不知道自己为什么会落在这里,也不知道飞船到底穿过了什么,但眼前这些字和手势已经给出了足够的答案。 +赫默和铃兰看着他。她们不知道这些词意味着什么,但她们看得见宁诚的脸色。 + +古米没完全听懂,但她看见宁诚的脸色,也跟着安静下来。铃兰低声问:“博士,这里很危险吗?” + +宁诚没有立刻回答。危险这个词太轻了。这里不是野外事故现场,也不是陌生星球的资源点。这里有人,有军队,有村子,有饥饿和恐惧,还有一整套他们完全不了解的关系。 + +“是。”他说,“而且我们不能让他们知道我们是什么。” + +铃兰看向残骸。 + +宁诚顺着她的视线看过去。那片扭曲的金属在夜里还会反光,核心舱残片被泥盖住一部分,边缘却仍有规则得过分的接口。只要任何一个懂得拆东西的人靠近,都能看出这不是普通坠落物。 + +“也不能让他们以为我们有很多东西。”赫默补充。 + +古米立刻把背包往身后挪了挪,又伸手盖住那半袋盐。 + +宁诚看了她一眼。“不用藏那么明显。” + +古米僵住,把手慢慢收回来。 没有基地,没有生产线,也没有能展开的武装平台。山坡上只有摔碎的残骸、几个人、半只急救包、两架受损无人机、一枚低功耗核心,还有那块随时会把所有人拖进死地的异常金属山。 宁诚把记号笔还给赫默,开始清点物资: “核心计算机,一台,低功耗。完整功能未知。” + 赫默补充:“可读接口两个,稳定接口一个。” + “能源包?” + “三个。一个读数不稳,一个外壳破裂,一个可用。” + “医务?” + “急救贴片十二片,广谱抗感染凝胶两支,退热药四份,止血材料不足,消毒喷雾半瓶。完整医务箱还在残骸里,但位置危险。” +“能撑几天?”宁诚问。 + +赫默没有立刻回答。她把外层急救包打开,重新数了一遍。贴片分成止血、抗感染和封闭三类,包装上有几处被烟熏黑。退热药的密封条还在,消毒喷雾喷嘴却有点歪。 + +“如果只照顾你,一个轻伤员标准,三到五天。如果有感染,有外伤,有更多人,就没有意义。”她说,“不是按天算,是按用掉哪一件算。” + +宁诚点头,又问:“水?” + +铃兰低声说:“过滤片两枚,便携滤管一个,但滤管接口裂了。古米带回来的水要先烧。” + +“锅呢?” + +古米把那个扁掉的金属杯举起来,表情有点尴尬。 + +“只有这个。” + +赫默伸手接过杯子,按了按杯壁凹陷处。“还能用。容量太小。” + +村塾先生听不懂他们在说什么,却看懂了那个杯子。他的眼神从杯子移到压缩饼干,又移到古米手里的半袋盐。天上掉下来的人在数这些东西,而且数得很认真。这让他的恐惧里多了一点困惑。 + 宁诚看向铃兰。 铃兰低声说:“食物只有古米带出去的那一小包,水还没有过滤。” @@ -135,9 +222,9 @@ 笑意在喉咙里转了一圈,就被胸腔的疼痛压了下去。 -村塾先生一直在旁边旁观。他听不懂这些人说什么,但看得懂那只扁掉的金属杯和半袋盐。天上掉下来的东西也会饿,神怪也要为一口水皱眉头。 +村塾先生一直在旁边旁观。他听不懂这些人说什么,但看得懂那只扁掉的金属杯和半袋盐。天上掉下来的人也会饿,神怪也要为一口水皱眉头。 -他和脚夫低声说了几句。脚夫急得直摇头,又指着山外。村塾先生也急,却还是咬了牙,转向宁诚用汉字音挤出一句: +他和脚夫低声说了几句。脚夫急得直摇头,又指着山外。村塾先生也急,却还是咬了牙,转向宁诚挤出一句: “村里,有人。伤。重。” @@ -147,9 +234,29 @@ “日本人打。病。快死。” -宁诚没有说话。 +宁诚听懂了每一个字。他转向赫默:“村里有人受了重伤。日本人打的,伤口坏了,在发烧。” -赫默的表情已经变了。药箱里剩什么,他比谁都清楚。现在用掉一份,以后就少一份。 +赫默的表情已经变了。药箱里剩什么,她比谁都清楚。现在用掉一份,以后就少一份。 + +“什么伤?”赫默问。 + +宁诚重新看向村塾先生:“枪?刀?” + +村塾先生摇头,又点头,最后说出几个词。瘦脚夫在旁边补充,声音很急。宁诚努力分辨:“枪……跑……伤口坏……热。” + +赫默的脸色更沉。 + +“感染。”她说,“可能已经很严重。” + +宁诚看着她:“能救吗?” + +“看伤口,看发热程度,看还有没有意识。”赫默说,“现在回答没有意义。” + +古米听到这里,手指攥紧背包带。她大概想说什么,又忍住了。宁诚知道她想说什么:既然可能救,为什么不去。 + +但赫默没有立刻说去。 + +因为每一片药都可能是他们之后自己的命。 村塾先生看着他们的沉默,眼神一点点暗下去。他似乎误以为这些天上来的人拒绝了,脸上露出一种并不意外的苦笑。他拉了拉脚夫,准备走开。 @@ -165,18 +272,45 @@ “你们,帮我们。” -村塾先生没完全听懂,但看懂了手势。他僵在那里,像在判断这是交易,还是陷阱。 +村塾先生没完全听懂,但看懂了手势。他僵在那里,迟迟不敢表态。 -宁诚没有等他点头,先把条件拆得更小: -赫默下山。古米跟着。只带一点药。脚夫留下。 +宁诚没有等他点头,先把条件拆得更小:赫默下山。古米跟着。只带一点药。脚夫留下。 -宁诚用手势把这些事一件一件摆出来。村塾先生看着他指向赫默的医疗包,又看着他指向脚夫,脸色先变了一下,随后慢慢明白过来。 +他用手势把这些事一件一件摆出来。村塾先生看着他指向赫默的医疗包,又看着他指向脚夫,脸色先变了一下,随后慢慢明白过来。 这不是信任,这是互相扣住一点要命的东西。 赫默带着药下山,村里就有救人的机会;脚夫留在残骸边,村塾先生就不至于带着人一走了之。宁诚一方没有把全部药物亮出来,村里也没有把所有人暴露出来。每个人都留一半在对方手里。 -村塾先生低声和脚夫说了几句。脚夫猛地摇头,眼睛往残骸深处瞟,像宁愿拖着伤腿也不想留在这堆从天上掉下来的铁骨旁边。 +村塾先生沉默得很久。他看向脚夫,又看向山下。脚夫急得说了一长串话,语气里全是拒绝。村塾先生听完,没有立刻骂他,只伸手按住他的肩膀,低声回了几句。 + +翻译模块只抓到两个词:家里,孩子。 + +宁诚这才明白,脚夫怕的不只是残骸。他怕自己留下以后,村里的人以为他把外人带上山,怕日本人查到他家,怕自己一条伤腿跑不掉。 + +宁诚指了指脚夫,又指向铃兰旁边的位置。 + +“不绑。不打。给水。” + +他不知道对方能听懂多少,只能把语气放慢。古米跟着比划,先摆手表示不伤害,再做出喝水动作。 + +赫默补了一句:“他的脚要重新包。” + +村塾先生听懂了“包”这个动作。他看向脚夫的脚,又看向赫默手里的绷带,脸上的犹豫更重。留下脚夫是风险,但脚夫的脚也确实撑不住再跑一趟山路。 + +“我们也留人。”宁诚又指了指古米,“她跟你下去。” + +古米立刻点头,没有半点犹豫。 + +赫默却皱眉:“古米不是筹码。” + +“我知道。”宁诚看向她,“但他们需要看见我们也冒风险。” + +古米把小刀从腰间取下来,递给铃兰保管,然后拍了拍空出来的腰侧。“我跟赫默医生去。我跑得快,也记得路。” + +铃兰接过小刀,指尖有些僵。她看着古米,想说小心,最后只说:“早点回来。” + +村塾先生低声和脚夫说了几句。脚夫猛地摇头,眼睛往残骸深处瞟,宁愿拖着伤腿下山,也不想留在这堆从天上掉下来的铁骨旁边。 村塾先生只说了一句。 diff --git a/正文/1.1.1-坠毁后的第一夜/第03章-药换食物.md b/正文/1.1.1-坠毁后的第一夜/第03章-药换食物.md index 7185c02..1430795 100644 --- a/正文/1.1.1-坠毁后的第一夜/第03章-药换食物.md +++ b/正文/1.1.1-坠毁后的第一夜/第03章-药换食物.md @@ -4,7 +4,7 @@ 村子离坠毁点并不远,但这段路走得极慢。 -宁诚没跟去。他现在的状态撑不住长途跋涉,残骸边也不能空无一人。赫默、古米和村塾先生下山,铃兰留下守着他。脚夫也留了下来,毕竟这是熟山路,他们能找水、望风,一旦出事还能带人绕开大路。 +宁诚没跟去。他现在的状态撑不住长途跋涉,残骸边也不能空无一人。赫默、古米和村塾先生下山,铃兰留下守着他。脚夫也留了下来——这是熟山路,他们能找水、望风,一旦出事还能带人绕开大路。 这不算信任,只是两边都没得挑。 @@ -30,12 +30,40 @@ 这话一出口,赫默的脸庞终于松弛了一点。她转身走进林子。 +下山的路比古米上来时更难走。 + +天还没亮透,林子里到处都是湿滑的泥。村塾先生走在前面,手里拿着一根短枝,遇到岔路就停一下,回头确认赫默和古米有没有跟上。古米背着小包,手里拎着那只扁掉的金属杯,尽量不让杯子碰出声音。 + +赫默走得很稳。她把医疗包贴在胸前,另一只手始终扶在腕侧翻译模块旁。每经过一处开阔地,她都会先停步,抬手示意古米蹲低,再让小型无人机贴着树根扫一圈。无人机不敢开灯,只能用低功耗感应,屏幕上回来的画面全是灰色块。 + +村塾先生看不懂那是什么,却能看懂赫默的谨慎。他没有催,只在每次停下时侧耳听山下的动静。远处偶尔传来一两声狗叫,他的肩膀就会绷紧。 + +走到半坡时,瘦脚夫留下的脚印分开了。村塾先生指了指左边,又指右边,用极慢的汉字音说:“村。水。路。” + +古米听懂了一点:“左边去村,右边去水?” + +村塾先生点头,又摇头。他说不清,只能在泥地上画:一条路通村口,一条路绕到柴房后面。最后他抬头看赫默,指了指她的医疗包,又指了指绕路那条。 + +赫默明白了。“不从正门进。” + +村塾先生松了一口气。 + +古米回头看了一眼山上。树影遮住了残骸方向,什么都看不见。她把背包带往肩上紧了紧,跟着村塾先生走进更窄的小路。 + 村子藏在山坡下。屋子低矮,竹篱歪斜,门窗大多没点灯。可人都在。古米刚靠近,就能感觉到门缝、墙后、草垛旁边全有眼睛在盯着。 -她想起舰上厨房里排队等饭的人。那时候的目光也集中在她身上,但里面透着期待、催促和对热汤的渴望。这里的目光不一样,这里的人看她,像在看一把可能救命、也可能引来刀子的火。 +她想起舰上厨房里排队等饭的人。那时候的目光也集中在她身上,但里面透着期待、催促和对热汤的渴望。这里的目光不一样——门缝里、墙后、草垛旁边的人看她时,既想靠近,又怕她把麻烦一起带来。 村塾先生低声跟几个村民说话,语速压得又急又碎,时不时回头打量赫默和古米。有人摇头,有人哭泣,有人甚至往后退了一步。屋里最后走出一个老妇人,她头发花白,背佝偻着,抬手指了指后面的柴房。 +那老妇人没有立刻让路。她先盯着赫默的脸,又看她手里的箱子。赫默也没有急着往里闯,只把医疗包放低,打开一点,让对方看见里面的绷带和喷雾。 + +村民们往后退了一步。有人低声念了句什么,音调拖得很长,像祈求,也像在把什么东西挡在外面。 + +古米赶紧站到赫默旁边,抬起双手,先指伤口的位置,又做出清洗和包扎的动作。她的词汇不够,只能一遍遍重复村塾先生刚教她的几个词:水,布,病,救。 + +老妇人的目光最后落到古米脸上。古米让自己站直,没有躲。熊耳在头顶紧张地压平。过了很久,老妇人才侧身让出半个门口。 + 门一开,热气和臭味扑面而来。 化脓伤口、汗水、草药和排泄物混在一起,呛得古米差点屏住呼吸。赫默眉头微不可察地动了一下,已经蹲到草席边。 @@ -44,9 +72,23 @@ 他的右手一直蜷在胸前。 -赫默掰开他手指时,摸到一小截被汗浸软的油纸。纸里没药也没钱,只裹着一段细竹片。竹片上刻了几道短痕,像数目,又像路记。村塾先生看见这东西,脸色变了,伸手想拿,伸到一半却又停住。 +赫默没有立刻动伤口。她先让村塾先生把围得最近的人赶开,又指向柴房唯一的小窗。古米过去推窗,发现窗板被麻绳绑住,解了两下没解开。旁边一个男孩看不下去,冲过来用柴刀割断绳子,打开窗后又立刻退到墙边。 -赫默没追问,把油纸重新塞回伤员掌心,只把他的手移到不妨碍处理伤口的位置。 +冷一点的空气终于进来。伤员却因为这点风抖得更厉害,喉咙里发出断续的响声。 + +赫默蹲到草席边,伸手探他的颈侧,又摸额头。她没有戴完整的手套,只从医疗包里翻出一副薄膜指套,套到右手三根手指上。左手指套不够,她只好用消毒喷雾反复喷洗。 + +“古米,记。”她低声说。 + +古米愣了一下,立刻从包里摸出一块包装纸,用炭笔在背面写。 + +“高热,意识不清,腹部感染,疑似穿透伤后污染。”赫默语速很快,“右肩钝伤,手腕束缚痕。脱水。可能有败血症早期表现。” + +古米不懂这些词,却还是尽量记下发音。村塾先生盯着她的手,脸上的恐惧又重了一点。他大概第一次意识到,这些人真的在把一个将死的人当成病人处理,没有把他当成祭品或麻烦。 + +赫默掰开他手指时,摸到一小截被汗浸软的油纸。纸里没药也没钱,只裹着一段细竹片。竹片上刻了几道短痕,可能是数目,也可能是路记。村塾先生看见这东西,脸色变了,伸手想拿,伸到一半却又停住。 + +赫默没追问,把油纸重新塞回伤员掌心,只把他的手移到不影响处理伤口的位置。 枪伤,或者是刺刀伤后的感染。 拖得太久了。 @@ -59,16 +101,27 @@ 她打开医疗包。柴房里响起一片吸气声。 -消毒喷雾、纱布、薄透明贴片、金属剪、软管和折叠水袋在村民眼里像某种奇怪的法器。一个妇人下意识伸手想摸,被古米轻轻拦住。 +消毒喷雾、纱布、薄透明贴片、金属剪、软管和折叠水袋被一件件摆出来,村民们看得更紧张了。一个妇人下意识伸手想摸,被古米轻轻拦住。 赫默让村塾先生先烧水。 -烧水他们懂,洗手他们也懂。她清开柴房门口的空间,让潮闷的空气能往外散一点。赫默没有急着贴上那些透明的东西,而是反复比划:水、布、光、干净。 + +烧水他们懂,洗手他们也懂。她清开柴房门口的空间,让潮闷的空气能往外散一点。赫默没有急着贴上那些透明的东西,而是反复比划:水,布,光,干净。 翻译模块断断续续地把她的专业词汇压成土话:洗伤口,脏东西,热病。赫默皱了下眉,没纠正。只要村民肯烧开水、肯拿走脏布,就够了。 -villagers 终于动起来了。有人端水,有人把孩子往外赶,有人把门口那堆潮柴拖开。 +村民终于动起来了。有人端水,有人把孩子往外赶,有人把门口那堆潮柴拖开。 -这就是赫默要的效果。她不是让他们跪在旁边看天上人施法,而是让 mereka 自己伸出手。 +赫默要的就是这个效果。村民不能只跪在旁边等天上人施法,他们也得伸手参与。 + +一开始参与得很乱。 + +端水的人把冷水和热水放在一起,赫默立刻分开。拿布的人抱来一堆旧衣,里面有几块已经发霉,她直接挑出来扔到门外。一个年轻女人想把草药重新敷回伤口边,被赫默握住手腕拦下。女人急得掉眼泪,转头看村塾先生。 + +村塾先生额头上全是汗。他也不知道该信谁。最后他看向草席上的伤员,看见那人烧得嘴唇开裂,才咬牙对女人说了几句。 + +女人慢慢松开草药,蹲到墙边哭。 + +古米把这一幕看在眼里,手里动作没停。她把能用的布撕成窄条,放进热水里烫,又用两根竹筷挑出来晾在干净的木板上。她在舰上厨房干过太多次类似的活——洗,分,摆好,别让脏东西碰到干净的东西。只是这一次,锅里没有汤,等着的人也不是来吃饭。 水烧开又放温。赫默剪开脓血布条,伤口露出来的一瞬间,门口有人低低哭了一声。伤口边缘肿得发黑,脓液带着一股腥臭。赫默的手没抖。她清创、冲洗、压迫止血,消毒,观察渗血,最后才把切开的抗感染贴片贴上去。 @@ -78,8 +131,29 @@ villagers 终于动起来了。有人端水,有人把孩子往外赶,有人 古米听懂了,把卷起的布递过去。伤员死死咬住,喉咙里发出模糊的低吼。 -村塾先生的脸色越来越白。 -他或许见过人死,却没见过这样救人。没有香灰,没有符水,没有草药糊满全身,只有刀、布、水和冷静到近乎残忍的手法。 +赫默剪掉最后一层腐坏布料时,伤员突然挣了一下。两个村民立刻扑上来想按,被赫默喝止。 + +“压肩,别压腹部。” + +翻译模块慢了半拍。古米已经先一步抓住一个村民的手,拉到伤员肩侧,又用自己的身体挡住另一个人。她急得声音都变了:“这里,按这里,不要肚子!” + +村民听不懂她的话,却看懂了她的动作。两个人一左一右按住伤员肩膀和腿。赫默趁这几秒把坏死的布料完全剪开,用温水一点点冲掉脓血。 + +伤口比她预想的更糟。左腹外侧被撕开一段,边缘不整齐,里面有草屑和细小木刺。幸好没有明显肠管外露,否则她手里的这点东西只够让人死得干净一点。 + +她把这个判断压在喉咙里,没有说出来。 + +“镊子。” + +古米递错了金属剪。赫默没有责备,只伸出另一只手。古米立刻换。她看见赫默从伤口边缘夹出一小段黑色碎屑,又夹出一根细刺。每夹出一样,门口的人都会吸一口气。 + +“别看。”赫默说。 + +古米以为是在对她说,刚要移开视线,赫默又补了一句:“你要看。以后可能还要你帮忙。” + +古米喉咙动了动,点头。 + +村塾先生的脸色越来越白。没有香灰,没有符水,没有草药糊满全身,只有刀、布、水和冷静到近乎残忍的手法。 半个时辰后,伤口重新包扎好。 @@ -90,31 +164,87 @@ villagers 终于动起来了。有人端水,有人把孩子往外赶,有人 古米用手势把这句话讲给村塾先生听。她指了指伤员,又指了指天,最后把手掌平放,做出“等”的动作。 村塾先生缓缓懂了。 + 老妇人忽然跪了下去。 -古米吓了一跳,连忙去扶。赫默也伸手,却被更多村民围住。他们没有欢呼,也没有立刻信任,只是看她的眼神变了。 -恐惧还在,但其中多了一点希望。 +古米吓了一跳,连忙去扶。赫默也伸手,却被更多村民围住。他们没有欢呼,也没有立刻信任,只是看她的眼神变了。恐惧还在,但其中多了一点希望。 + +赫默没有让这种情绪继续发酵。她抬手指向草席,又指向水盆,开始布置后续。 + +“两个时辰擦一次身体。不要盖太厚。能喝水就喂水,吐了就停。伤口渗血多,叫我。抽搐,叫我。开始胡话,也叫我。” + +这段话太复杂,翻译模块几乎全军覆没。赫默只好拆成动作。她用湿布擦伤员额头,指两根手指表示时间;她把水勺送到伤员嘴边,又摆手表示不能灌;她按住包扎边缘,让村塾先生看什么程度的渗血需要处理。 + +村塾先生学得很认真。他甚至让老妇人也看一遍。老妇人手抖得厉害,却还是点头。 + +古米在旁边把赫默用掉的东西重新收好。半瓶消毒喷雾少了一截,抗感染贴片少了一片,纱布少了一卷。她把剩下的东西放回包里时,动作比来时更慢。 + +赫默看见了。“后悔?” + +古米摇头。 + +“只是觉得少得太快。”她说。 + +赫默把医疗包扣上。“所以每一次都要知道自己用了什么。” + +古米嗯了一声。 村塾先生从屋角搬出一小袋米,又拿了两个竹筒水。他犹豫很久,最后让人取来几根粗绳和一副旧担架。 “你们山上,东西。”他用汉字音慢慢说,“我们,搬。” 赫默看着那袋米。 + 袋口一收,底下瘪下去大半。对这个村子来说,这已经是咬牙拿出来的心意。 古米抱起米袋时,手指微微收紧。 +她没有立刻背上,先看向赫默。赫默也看着那袋米。两个人都明白,这袋米不只是报酬。村子把米拿出来,就等于承认山上的人暂时可以交易,不能立刻当成怪事赶走。 + +村塾先生又从怀里摸出一小包粗盐,犹豫着递给古米。古米下意识想拒绝。她知道盐对一个缺粮的村子意味着什么。可村塾先生坚持把盐塞进她手里,又指了指山上。 + +“病人。”他说。 + +古米明白了。他不是给天上人送礼。他是在给山上那个受伤的“博士”买一点活下去的机会。 + 柴房里的伤员忽然睁开眼,眼神涣散却死死抓住村塾先生的袖子,嘴里吐出几个极轻的词。 村塾先生脸色骤变。 + 赫默问:“他说什么?” 古米听不懂。 + 村塾先生没有立刻翻译。他看了看门外,又看了看山上的方向,最后才低声说: “有人……来消息。” + 他顿了顿。 + “查村。明天,也许今晚。” -他没提伤员还吐出了另一个词: +赫默立刻看向古米。古米把米袋放低,手已经摸到背包带。 + +村塾先生还在犹豫。他显然听懂了更多,只是不知道该不该说。柴房门口的老妇人也变了脸色,伸手去按伤员的手,像想让他别再开口。 + +赫默没有催。她只是把医疗包重新背好,又检查了一遍包扣。 + +古米低声说:“如果和山上的路有关,我们得知道。” + +村塾先生闭了闭眼,终于用木条在地上画出一条短线。线的一头是村子,另一头是山坡。他又在中间点了两下,表示有人可能知道另一条上山的小路。 + +“保长的人?”赫默问。 + +村塾先生没有完全听懂,却抓住“保长”两个音,点了一下头。 + +古米的胃沉下去。她来时只记住了溪边那条路。如果还有另一条路,山上的残骸就比他们想的更容易暴露。 + +赫默说:“回去。” + +村塾先生也站起来。他看了一眼草席上的伤员,又看向老妇人,快速交代了几句。老妇人点头,把湿布重新放到伤员额头上。她没有再跪,只是用力抓住赫默的袖口,抓了一下就松开。 + +赫默看懂了。那不是挽留,是催她们赶紧走。 + +村塾先生没提伤员还吐出了另一个词: + “路。” diff --git a/正文/1.1.1-坠毁后的第一夜/第04章-抢救核心.md b/正文/1.1.1-坠毁后的第一夜/第04章-抢救核心.md index 0346262..95b10f0 100644 --- a/正文/1.1.1-坠毁后的第一夜/第04章-抢救核心.md +++ b/正文/1.1.1-坠毁后的第一夜/第04章-抢救核心.md @@ -6,21 +6,50 @@ 愿意帮忙是一回事,信不信他们是另一回事。话多了,只会让人想逃。 +古米先把米袋放到铃兰脚边,又把那一小包粗盐递过去。铃兰接住时怔了一下,抬头看向山下来的几个人。村塾先生避开她的视线,只指了指宁诚,又指了指米袋,意思很清楚:病人吃。 + +瘦脚夫仍然站得很远。他被重新包过脚,走路还是一瘸一拐,手里的竹杖握得比之前更紧。中年村民背着粗绳和旧担架,目光从残骸扫到无人机,再扫到宁诚腕侧,始终没有说话。 + +赫默回来后第一件事不是休息。她把医疗包放在一块相对干净的舱板上,先洗手,再检查宁诚左肋的绷带。铃兰立刻让开位置,低声把宁诚刚才咳血的情况说了。 + +赫默的眉头压得更低。“咳了几次?” + +“一次。”宁诚说。 + +“血量?” + +“一点血丝。” + +赫默看向铃兰。铃兰点头。 + +“暂时不处理。”赫默说,“但你再站起来,我会直接让铃兰把你按住。” + +宁诚没有争。他现在连争的力气都要省着用。 + 他示意铃兰把米收好,转头让赫默报药物消耗。 “抗感染贴片用掉一片,切开后只覆盖主伤口。急救凝胶用了三分之一。退热药半份。消毒喷雾剩不到三分之一。” 宁诚点点头,在心里默默改写清单。 -药少了。 -人多了。 -山下知道这件事的人,也多了。 +药少了。人多了。山下知道这件事的人,也多了。 他在心里把这笔账记上。交易刚开始,还远不到庆祝的时候。 三个村民里,一个是瘦脚夫,一个是村塾先生,另一个中年人一直沉默。那人的肩膀很宽,手上长满了厚厚的开裂老茧,一看就是常年挑担砍柴的。靠近残骸时,三个人都在发抖。核心舱那点蓝光一闪,脚夫的半只脚已经下意识往后撤。 +宁诚没有逼他们立刻靠近。他让古米先把担架放在空地上,又让铃兰拿一块破布盖住核心舱最亮的位置。赫默关闭无人机腹灯,只保留腕环屏幕的微光。山坡一下暗了许多,村民们才敢往前挪。 + +中年村民蹲下摸了摸地上的泥,又摸了摸一块已经冷却的舱板。他像是在确认这东西会不会烫手,也像是在确认它到底是不是妖物。摸完以后,他把手放到鼻下闻了闻,眉头皱起来。 + +村塾先生低声问了他一句。中年村民摇头,又点头,最后只说了几个字。 + +翻译模块给出低置信度译意:铁。烧。能搬。 + +这已经够了。 + 宁诚示意赫默把光遮住。 + 蓝光熄灭,村民们明显松了口气。 “先搬小件。”宁诚开口。 @@ -28,6 +57,7 @@ 赫默将这句话转化为手势,古米用刚学会的几个词和动作补充解释。村塾先生负责猜测意思,猜完后再告诉另外两个人。 这一句简单的指令,绕过赫默、古米和村塾先生,最后落在两个村民耳朵里时,已经变成了一串杂乱的手势和半截断开的词汇。 + 这套通信系统寒酸得可怜,偏偏还能用。 翻译模块也在旁边同步学习。每一次“搬”“等”“火”“日本兵”被重复,它都会把新的音节塞进临时词表。宁诚看着那张缓慢增长的词表,知道再给它两三天,它至少能撑起日常命令。问题是,日本人未必会给他们两三天。 @@ -36,37 +66,100 @@ 完整的终末地核心舱搬不动,它深陷在变形支架和半截山坡里,展开的骨架还埋在泥土、树根和烧塌的舱壁下面。他只能抢救主存储匣、应急运算模块,还有一个手掌大小的低功耗控制核。 +赫默把这三样东西在腕环上标出来。屏幕太小,宁诚只能看见三个发红的点。一个在核心舱腹部,一个在半塌的支架下面,还有一个卡在断裂舱壁和泥土之间。 + +“顺序。”赫默说。 + +宁诚盯着那三个点。控制核最重要,但也最难拆。主存储匣如果再断电,可能会丢数据。应急运算模块相对好拿,却需要先清出一条通路。 + +“先应急运算模块。”他说,“练手。再主存储匣。最后控制核。” + +赫默点头。她没有提醒他这不是演练。 + +铃兰把遮光布挂在两根断裂支架之间,自己站在布后,一手举着边角,一手护着数据线。布上有烧洞,光还是会漏出来。她就用身体挡住那几个洞,尾巴被泥水弄湿也没动。 + 赫默拆开接口,宁诚口述步骤,铃兰举着遮光布挡住刺眼的余光,古米和村民在外面负责清路。 +第一件东西拿得还算顺利。应急运算模块只有半个手臂长,外壳变形,但固定栓没有完全锁死。赫默拆掉两根断裂线束,让古米用布包住边缘。中年村民看见古米吃力,伸手想帮,却被蓝色指示灯吓得缩回去。 + +古米把模块往他面前挪了一点。“不烫。”她说,又用自己的手按在上面。 + +中年村民看她按住没有事,才试着伸手。他的手掌很大,粗糙得能直接抓住锋利边角。模块离开舱壁时发出一声低响,所有人都停了一下。 + +赫默看腕环:“稳定。” + +宁诚吐出一口气。“包起来。不要碰接口。” + +古米立刻用破布绕了三层,中年村民则把它放进担架边的草垫里。 + 第一次拆卸失败了。 + 接口卡死,工具不匹配。赫默试图用备用夹具硬撬,结果夹具直接裂开。 宁诚的脸色沉了下来。 + 标准事故条令里,从来没有“用柴刀敲开终末地核心固定栓”这一项。 + 可现实不等流程。 他让古米把村民带来的砍柴刀递过来,又让脚夫找块合适的石头。赫默看了他一眼,终于没再反对。三分钟后,固定栓被硬砸开,接口边缘裂开一道细小的缝隙。 +这三分钟里,每一下都让人难受。 + +赫默负责稳住刀背,古米扶着照明板,中年村民握石头敲击。宁诚不能靠近,只能坐在舱板边听声音判断位置。 + +“轻一点,偏左。” + +中年村民听不懂。古米赶紧重复动作,用手掌往左推。第二下落点终于对了,固定栓边缘掉下一片细屑。 + +赫默立刻抬手。“停。” + +她用镊子夹走碎屑,确认没有落进接口内部,才示意继续。中年村民额头上已经全是汗。他不知道自己敲的是什么,只知道每敲一下,宁诚和赫默的脸都会更紧。 + +第三次敲击后,固定栓松了半圈。赫默用残破夹具卡住边缘,慢慢往外旋。金属摩擦声尖得刺耳,铃兰握着遮光布的手指抖了一下。 + +“稳住。”宁诚说。 + +铃兰咬住唇,把布重新压紧。 + 那声脆响钻进宁诚耳朵里,他的后槽牙跟着一酸。 -这枚控制核原本只是核心展开后的早期调度组件。 -现在,它沾着泥土、血渍和石屑,被几个人从残骸里硬生生地撬了出来,像一块勉强保住的骨头。 -身体还留在山坡上。 -迟早会被人看见。 +这枚控制核原本只是核心展开后的早期调度组件。现在,它沾着泥土、血渍和石屑,被几个人从残骸里硬生生地撬了出来。 -中年村民一直没说话。 -他看不懂控制核,也看不懂腕环上跳动的光。可他看得懂宁诚和赫默的脸色。在撬这块小东西时,这些天上来的人比看见大半截铁壳时还要紧张。甚至在固定栓裂开那一瞬间,宁诚闭了下眼,像是被人从身上敲掉了一块骨头。 +身体还留在山坡上。迟早会被人看见。 -中年村民低头看了看手里那把柴刀。 -他突然明白,这些人最怕丢的未必是山坡上那座巨大的铁屋子。 -可能是这些能被布包起来的小盒子。 +中年村民一直没说话。他看不懂控制核,也看不懂腕环上跳动的光。可他看得懂宁诚和赫默的脸色。在撬这块小东西时,这些天上来的人比看见大半截铁壳时还要紧张。固定栓裂开那一瞬间,宁诚闭了下眼,脸色白得厉害。 + +中年村民低头看了看手里那把柴刀。他突然明白,这些人最怕丢的未必是山坡上那座巨大的铁屋子。可能是这些能被布包起来的小盒子。 “继续。” 药箱更麻烦。 + 完整医务箱压在一块扭曲的内舱板下面,那块舱板至少有几百斤重,靠他们几个人根本搬不动。中年村民看了看,突然叫脚夫和古米去砍几根木杆。他们用粗绳套住舱板边缘,拿木杆当杠杆,一点点把缝隙撬开。 +这一次,反而是村民更懂办法。 + +中年村民先让脚夫把粗绳从舱板下穿过去。脚夫趴在泥里,脸几乎贴到烧黑的金属边,手伸进去摸索,碰到还温热的地方就立刻缩回来。古米趴在另一侧接绳,手背被划破一道口子,她只是甩了甩血,继续往里够。 + +绳子穿过去后,中年村民把两根木杆交叉插入绳环,又让村塾先生站到远一点的位置看整体倾斜。村塾先生一边害怕,一边不得不指挥。他喊一声,中年村民和脚夫就往下压一点。 + +舱板第一次只抬起半指宽。赫默立刻把一块石头塞进去垫住。 + +第二次抬起一指宽。铃兰递上断裂支架,赫默把它卡到缝里。 + +第三次,舱板下传来一声闷响,所有人都停住。 + +宁诚问:“压到箱体了?” + +赫默趴下去看,声音绷紧:“没有。下面还有一层变形隔板。” + +“拆隔板,不要再抬。”宁诚说,“再抬会滑。” + +村塾先生听不懂这句,古米急忙抓住中年村民的手臂,连连摆手。中年村民虽然不明白原因,但看见赫默已经改用工具切割隔板,就收住了力。 + 赫默趴在泥地里,探手伸进去摸索。 + 第一次摸出一包烧毁的止血棉。 第二次摸出半盒破裂的试剂。 第三次,终于触碰到医务箱内层。 @@ -74,53 +167,179 @@ 她把箱子拖出来时,手背被金属边划开一道口子,血滴在箱盖上。铃兰立刻想上前包扎,赫默却死死盯着那个箱子。 锁坏了。 + 里面的东西还在,但冷藏格已经失效。几支需要低温保存的药物不能再按原效果估算。赫默的表情比受伤时还要难看。 “损耗?” + “等回去清点。”她说,“现在还没法确定。” 宁诚没追问。 +赫默把医务箱扣回去,又用旧布把箱体外侧的标识盖住。她的手背还在流血,血顺着指节往下滴。铃兰忍不住上前一步。 + +“赫默医生,你的手……” + +“小伤。”赫默说。 + +“会感染。” + +赫默终于抬头看她。两个人僵持了一秒。最后赫默伸出手,让铃兰用最普通的布条给她压住伤口,没有用药,也没有用贴片。 + +铃兰包扎得很快,却包得比平时更紧。赫默动了动手指,没说什么。 + 能源包搬出两个,第三个外壳破裂,宁诚只让赫默拆掉识别片和接口板。数据模块找回四枚,另外两枚深埋在更深处,暂时放弃。 -“放弃”这个词说出来容易。 -转身时,没人催他。 -那是地图、记录、航线、备份,甚至可能包含死去同伴最后几分钟的舱内数据。 +“放弃”这个词说出来容易。转身时,没人催他。那里面可能有地图、记录、航线、备份,甚至可能包含死去同伴最后几分钟的舱内数据。 -铃兰站在残骸边,低声问:“真的不拿了吗?” +宁诚让赫默再确认一次位置。 + +无人机钻进缝隙里,画面抖得厉害。两枚数据模块被压在更深处,一枚只露出半截,另一枚在变形梁后面。旁边有几根断裂的管线,红色热源提示反复跳动。 + +“如果硬拆,多久?”宁诚问。 + +赫默说:“不确定。至少二十分钟。还可能塌。” + +“成功率?” + +赫默没有报数字,只看了他一眼。 + +宁诚明白了。这个问题不该问。现在每多一分钟,山下的人就多一分可能往这边走。每多一次撬动,残骸就多一分可能把人压进去。 + +铃兰低声说:“里面可能有航行记录。” + +“我知道。” + +“也可能有其他人的记录。” + +“我知道。” + +宁诚说完这两个“知道”,就再也说不出别的。他盯着画面看了三秒,最后伸手按掉标记。 + +“撤。” + +铃兰站在残骸边,低声问:“不拿了吗?” 宁诚看着那片被压住的数据舱。 + “拿不到。” + “以后呢?” + “以后再说。” -这是谎话。所有人都听出来了。 -主体残骸还趴在山坡上,“以后”这两个字薄得像纸。 +主体残骸还趴在山坡上,“以后”这两个字几乎站不住。 宁诚转过身,开始分派遮挡任务。他用泥糊住显眼的发光面,用树枝盖住反光金属,用树叶扫乱脚印。溪边的拖痕不必抹平,反而要留下几处看似山火逃生留下的混乱痕迹。 +遮挡比搬运更耗心神。 + +能搬走的东西已经搬走,剩下的东西太大,太亮,太不属于这里。宁诚让赫默拆掉几处还会闪烁的识别灯,拆不掉的就用泥糊死。古米负责把烧焦外壳和普通碎石混在一起,别让金属边缘连成完整轮廓。铃兰把几段细线缆塞进泥里,又用草叶盖住。 + +中年村民很快看懂了一部分。他不再等古米翻译,主动把树枝拖过来,压在反光的舱板上。脚夫则负责抹乱从溪边到残骸的脚印。他走路一瘸一拐,反而把痕迹踩得更乱。 + +宁诚让他停住,指了指脚印。 + +脚夫吓了一跳,以为自己做错了。 + +宁诚摇头,指了指他的伤脚,又指向另一侧泥地。“多走几步。” + +脚夫没听懂。村塾先生看了一会儿,突然明白过来,低声解释。脚夫脸色有些难看,却还是照做。他拖着伤脚在泥地上来回走,让这里看起来像有很多人在慌乱逃命,遮住几个人有目的搬运的痕迹。 + 村民看不懂他为什么故意留下这些痕迹。 + 村塾先生问了出来。 + 宁诚拿起石头在泥地上画:一条直线,被人看懂;一团乱线,让人误会。 + 村塾先生盯着那团乱线看了好久,慢慢点头。 + “让他们以为别的。” 宁诚点点头。 +“山火。”他补充。 + +村塾先生立刻指向那些被保留下来的焦黑外壳。“火。” + +宁诚又指向远处被泥盖住的接口。“这个,不给看。” + +村塾先生顺着他的手看过去,脸上浮出一点明白后的惊惧。他叫来中年村民,两个人用湿泥把接口边缘一点点糊平。中年村民手很重,宁诚不得不提醒他别把泥压进仍有热源的缝隙里。 + +“烫。”古米翻译。 + +中年村民缩手,换成树枝轻轻推泥。 + 就在这时,脚夫突然抬手,示意所有人安静。 + 山下传来两声短促的鸟叫。 + 不是自然的鸟叫。 脚夫脸色变了,转头看向村塾先生。村塾先生立刻往林子边走去。片刻后,一个瘦小少年从树影里钻出来,连滚带爬地几乎摔倒在地上。 + 他不敢靠近残骸,只把一个卷起来的纸团塞给村塾先生,又急促说了几句话。 +少年看起来不过十三四岁,裤脚全是泥,胸口起伏得厉害。他一路跑上山,到了这里却连头都不敢抬。无人机从他头顶掠过时,他整个人往地上一趴,差点把脸埋进泥里。 + +古米想过去扶,被赫默拉住。 + +“先让他们说。” + +村塾先生拆开纸团。纸上没有完整的字,只有几道短线和一个被水晕开的记号。他看完以后,立刻追问少年。少年边喘边答,声音越来越小,说到最后,眼睛一直往残骸方向瞟。 + +村塾先生忽然回头看了一眼宁诚。 + +宁诚知道,坏消息来了。 + 村塾先生听完,脸色比刚才还要白一些。 + 宁诚看着他:“消息?” 村塾先生捏着纸团,声音发紧: + “保长那边有人说,日本兵问山里有大响动。还有怪光。” + 他看向残骸,又看向众人刚搬出来的核心和药箱。 + “他们明天查村。也可能,天亮前先进山。” 宁诚低头看了一眼还没完全遮好的残骸。 + 时间窗口,缩短了。 + +赫默立刻合上医务箱。“还剩多少必须做?” + +宁诚扫了一眼现场。核心控制核已经取出,主存储匣和应急运算模块在担架上,能源包有两个可搬,医务箱拿到了。剩下的都是想拿却拿不走的东西。 + +“收手。”他说。 + +铃兰猛地抬头。 + +宁诚没有看她。他怕自己一看,就会改变主意。 + +“能带走的全部带走。不能带走的遮。遮不住的,让它看起来没用。” + +村塾先生听不懂完整意思,却听懂了“走”。他也抬头看天色。林子上方已经有一点发灰,真正的天亮不远了。 + +中年村民把担架绳重新拉紧。脚夫背起较轻的布包,少年被村塾先生赶回村里传信。古米把米袋和水筒重新扎到一起,铃兰抱起数据模块,手臂收得很紧。 + +赫默最后看了一眼残骸深处。“还有东西。” + +“我知道。”宁诚说。 + +“可能很重要。” + +“我知道。” + +赫默沉默两秒,转身把无人机收回。它的电量已经低到红线,落到她掌心时旋翼转得断断续续。 + +宁诚扶着舱板想站起来,刚撑起一点,左肋就疼得他眼前发黑。铃兰和古米同时伸手扶住他。 + +“我能走。”他说。 + +赫默冷冷看着他。 + +宁诚改口:“我能被扶着走。” + +这次没人笑。所有人都太累了,也太清楚接下来不是撤离,只是从一个危险处搬到另一个危险处。 diff --git a/正文/1.1.1-坠毁后的第一夜/第05章-搜山前.md b/正文/1.1.1-坠毁后的第一夜/第05章-搜山前.md index a00620a..f5944d9 100644 --- a/正文/1.1.1-坠毁后的第一夜/第05章-搜山前.md +++ b/正文/1.1.1-坠毁后的第一夜/第05章-搜山前.md @@ -2,22 +2,46 @@ ## 第 5 章:搜山前 -口信传到,残骸边的人影像是被抽了一鞭子,瞬间紧绷。 +口信传到,残骸边的所有人都瞬间紧绷。 -宁诚把“不能乱”三个字死死咬在牙关里。疼痛从脊椎向上钻,好让他清醒,不至于昏过去。他跌坐在倒塌的舱板上,面前摊着两张纸:一张是赫默标注的物资清单,一张是村塾先生按他的意图画出的山路。 +宁诚把“不能乱”三个字咬在牙关里。疼痛从脊椎向上钻,让他清醒,不至于昏过去。他跌坐在倒塌的舱板上,面前摊着两张纸:一张是赫默标注的物资清单,一张是村塾先生按他的意图画出的山路。所有人的目光都聚焦在上面。 -纸张短缺,字迹歪斜,语言也略显拧巴。 +宁诚示意大家先报一遍自己的现状。 -可此时所有人的目光都聚焦在上面。 +赫默能走,能背医务箱,但不能同时照看无人机和宁诚。古米能跑,能搬轻物,能和脚夫一起下山取水。铃兰能照看数据模块,也能记录清单,但她太显眼,天亮后不能随便出现在村民面前。瘦脚夫熟山路,脚伤却会拖慢速度。中年村民能扛重物,不懂他们的手势。村塾先生能沟通,但他必须回村应付可能的查问。 -翻译模块里攒了二十多个基础词汇,“水”“米”“药”“山路”“日本兵”勉强能对上号。长句还是废话,只有简单的短命令总算不用每次都费力画图。再熬几天,交流或许会顺畅些。 +轮到宁诚时,所有人都看向他。 -前提是他们有时间。 +宁诚看了看自己发抖的手,没逞强。 + +“我能看图,能做决定,不能搬。” + +他说得很平静。铃兰却低下头,手指攥住记录板边缘。 + +赫默把这句话翻成几个简单词。村塾先生听完,目光在宁诚身上停了一下。他像是第一次确认,这个被称为“博士”的人真的会承认自己没法行动。 + +翻译模块里攒了二十多个基础词汇,“水”“米”“药”“山路”“日本兵”勉强对得上号。长句还是废话,只有简单的短命令不用每次都费力画图。前提是他们有时间。 核心模块、主存储匣、两个能源包、内层医务箱、四枚数据模块、两件可拆工具、一卷线缆、一块透明防护板。 东西不多,每一样都沉甸甸地压手。 +宁诚把清单分成三列。 + +第一列是必须随人走的东西:控制核,主存储匣,数据模块,医务箱。第二列是可以藏起来的东西:能源包,线缆,透明防护板。第三列是必要时可以丢掉的东西:破工具,空外壳,无法确认用途的小零件。 + +铃兰看到第三列时抬起头,似乎想反驳。宁诚先开口:“不是不要,是背不动时先丢。” + +铃兰抿了抿嘴,最后把那几样东西写进第三列。 + +赫默把医务箱里的药物也重新分了一遍。立刻能救命的放内层,可能失效的低温药单独包起来,普通绷带和消毒物放外层。她切下一小段布,缠在每个包裹不同位置,方便闭着眼也能摸出类别。 + +古米看得很认真。“红的是急救?” + +“红的是止血。双结是感染。没有结的是普通。”赫默说。 + +古米重复一遍,确认自己记住。 + 村民带来的旧担架被派上用场了。核心模块和能源包裹进破布里,用竹竿固定,外层覆盖一层草。赫默亲自背起医务箱,铃兰把数据模块贴身收好。古米扛着食物和水,顺手把那半袋盐也塞进了包里。 宁诚原本想自己拿主存储匣。 @@ -34,6 +58,22 @@ 要命的东西交到对方背上,对方没扔下它逃走,这就是他们现在的信任基础。 +出发前,宁诚又让中年村民走了两步。 + +主存储匣被包在草垫里,看上去像一捆特别沉的柴。可它重量集中,背在身上会晃。中年村民走到第三步时肩膀一偏,草垫里的硬角撞到竹竿,发出一声闷响。 + +所有人都停住。 + +宁诚摇头。“不行。” + +中年村民听不懂,却看懂了他的表情。他皱起眉,似乎有点不服。村塾先生低声解释后,他把草垫拆开,重新用粗绳在中间打出两道交叉结,又往外层塞了几把湿草。再走时,声音小了很多。 + +古米也试着背米袋。米袋太软,会露出形状。她索性把米分成两小包,一包塞进背包,一包交给脚夫挂在竹杖下。这样看起来接近村民平时带的粮。 + +铃兰把四枚数据模块贴身藏好后,宁诚仍然不放心。他让她走到阴影里,再从不同角度看。银白色头发和尾巴比任何包裹都显眼。铃兰抓起一把炭灰,抹在发梢和耳侧。 + +宁诚想说不用。话到嘴边,又咽了回去。 + 遮挡残骸耗费了更多时间。 脚夫和古米拖来树枝,铃兰用泥巴涂抹在那些还能反光的金属面上。赫默负责拆掉几处仍在闪烁的识别灯。宁诚让他们保留一部分烧焦的外壳,又故意把几块普通的合金碎片散落在塌方边缘。 @@ -48,7 +88,7 @@ “以后会。” -村塾先生听懂了这个“以后”。他没露出惊讶的神色,只是像又背上了一袋看不见的米。 +村塾先生肩膀又沉下去一点。 “所以,你们要走?” @@ -56,14 +96,53 @@ 藏到哪里去,才是麻烦。 -村塾先生不打算让他们直接进村。村里已经塞满了伤员,再强行塞入这几个来历不明的人,一旦日军查到,全村都要遭殃。脚夫提议溪谷上游有个废炭棚,雨季没人住,离村不算远,还能通向另一条山路。 +村塾先生先在纸上画了村子。 -宁诚点头同意。 +村子周围有三条路。一条通向大路,最容易被查。第二条沿溪谷走,能避开村口,却会留下水边脚印。第三条绕到旧炭棚,路窄,坡陡,平时只有砍柴和烧炭的人会走。 -他们不进村,村民也不在残骸边久留,先把炭棚当成中转点。 +脚夫指着旧炭棚那条路,说了一串很快的话。翻译模块只抓到几个词:雨季,没人,塌,水。 + +“塌是什么意思?”宁诚问。 + +古米听村塾先生解释后,说:“屋顶坏了。雨季没人住。后面有石头缝,可以藏东西。还有水声。” + +“离村多远?” + +村塾先生伸出两根手指,又觉得不准确,改成手掌来回摆。古米猜:“走路一刻多?如果背东西会更久。” + +“离山路呢?” + +这一次,村塾先生没有立刻回答。他看向脚夫。脚夫低声说了几句,脸上写着明显的为难。村塾先生最后还是翻译:“另一条路,可以通。日本人如果从上面搜,也可能到。” + +没有真正安全的地方。只有更晚被找到的地方。 + +村里已经塞满了伤员,再强行塞入这几个来历不明的人,一旦日军查到,全村都要遭殃。脚夫提议溪谷上游有个废炭棚,雨季没人住,离村不算远,还能通向另一条山路。 + +宁诚点头同意。他们先把炭棚当成中转点。 规矩也得立下来。 +宁诚把规矩写得很短。 + +不进村。 +不点亮。 +不单独走。 +不说天上。 + +他写完以后,让村塾先生逐条看。村塾先生看到“不说天上”时,停了很久,最后在旁边添了两个字:山火。 + +宁诚点头。 + +对外只说山火。山上有受伤外乡人,是被火和塌方吓坏的逃难者。没有会飞的机器,没有发光的核心,没有从天上掉下来的铁屋子。 + +赫默听完后补了一条:“不展示药。” + +古米也补:“不让孩子靠近。” + +铃兰低声说:“不碰数据模块。” + +宁诚把这些都写进去。纸面越来越挤,字迹也越来越乱,但每个人都盯着它看。 + 药物由赫默保管,除非伤员恶化,否则不再随意使用。核心模块和能源包藏在炭棚后的石缝里,用湿草和木炭遮住味道。 村塾先生只告诉两个人山上藏了“受伤外乡人”,没提残骸的存在。 @@ -88,10 +167,56 @@ 村塾先生看见了,眼神动了一下。这个受伤的男人会被反驳,会改口——天上来的人,也不是一块铁板。 +“还有吃的。”古米小声说。 + +所有人又看向米袋。 + +古米把米分成几小份,用手指在地上算。宁诚,赫默,铃兰,古米,脚夫偶尔来回,还可能有村里的伤员。她算到最后,自己先皱起眉。 + +“如果熬稀粥,今天能撑。明天就不够。” + +村塾先生听懂了“不够”。他低声说:“村里,也不够。” + +没人责怪他。村里能拿出这一袋,已经很难。 + +宁诚说:“先按最少量。病人优先。能行动的人少吃。” + +赫默看向他:“你也是病人。” + +“我知道。” + +“所以你不在少吃那一列。” + +宁诚刚要开口,铃兰先抬起头:“博士必须吃。” + +古米也点头:“不然你说话都没力气。” + +宁诚看着她们,最后把话吞回去。“按赫默说的办。” + +赫默这才继续清点。 + 天边发白时,最后一批物资才搬完。 宁诚被古米和中年村民半扶半架地带到炭棚。屋顶漏了几处,地上全是潮气和炭灰。好在有墙遮蔽,后面还能听见溪水流动的声音。 +炭棚比他们想的更破。 + +门板只剩半扇,另一半斜靠在墙边。屋顶有两处漏光,地上堆着湿柴和旧炭筐,角落里还有几只破陶罐。空气里全是潮炭味,吸一口就呛喉咙。宁诚被扶进去时,脚下一滑,差点撞到墙上。中年村民及时用肩膀顶住他,自己却被主存储匣压得闷哼一声。 + +“先放重物。”宁诚说。 + +古米和脚夫清出后墙附近的湿柴。赫默用无人机扫了一遍,确认没有人藏在棚后。村塾先生搬开几块石头,露出后面一条窄缝。缝不深,却足够塞进包好的能源包和一部分线缆。 + +核心控制核不能离宁诚太远。这个判断让所有人都头疼。 + +赫默试着把控制核拿到屋外,腕环立刻跳出距离警告。宁诚的手腕也跟着发热。她只好退回来,把控制核藏在宁诚身后半步远的石缝里,再用湿草、木炭和一块破陶片盖住。 + +“如果有人翻这里,还是会看见。”铃兰说。 + +“所以不要让他们翻到这里。”宁诚回答。 + +这话没有让任何人安心,但眼下只能做到这个程度。 + 铃兰把数据模块藏稳了,这才坐到宁诚身边。她累得脸色发白,却还是先问:“博士,疼吗?” 宁诚想说还好。 @@ -106,6 +231,52 @@ 赫默在角落清点医务箱,古米把米袋打开,认真数着还能熬几顿粥。村塾先生站在门口,望向山下那片尚未亮起的村子。 +医务箱的情况比赫默刚才预估得更差。 + +冷藏格里三支药剂有两支颜色变深,不能再按原剂量使用。封闭贴片还剩七片,其中两片边缘受潮。止血材料比外层包多一些,但没有足够的消毒液配合。几枚微型诊断片还能亮,却无法连接主系统,只能读最基础的体温、心率和血氧。 + +赫默把损坏项一一报出来。铃兰记录,古米听不懂药名,却听懂了“不能用”“少”“坏”这些词,脸越来越垮。 + +“别用这种表情。”赫默说。 + +古米抬头。 + +“东西少,不代表不能用。”赫默把还能用的贴片分开,“少的时候更要分清顺序。” + +宁诚靠在墙边听着,忽然问:“我的情况排第几?” + +赫默手上动作没停。“现在第二。” + +“第一是谁?” + +“发烧的伤员。如果他夜里恶化,需要再用药。” + +铃兰立刻抬头,像想反对。宁诚先一步说:“按这个来。” + +赫默看了他一眼。 + +宁诚说:“村里如果觉得我们救了人又放弃,会马上断掉合作。而且你已经开始救了。” + +赫默沉默片刻,把一片抗感染贴片放进单独的布包。“我知道。” + +古米在旁边把米下锅。所谓锅,其实是村民借来的黑陶罐,底部有一道旧裂,用湿泥糊过。她把米淘了一遍,淘米水没舍得倒,放到一边等沉淀。水太少,粥只能熬得很稀。 + +脚夫坐在门边包扎自己的脚。他看着古米把几粒掉在地上的米捡起来,眼神变得复杂。过了一会儿,他从怀里摸出半块干硬的薯块,递给古米。 + +古米愣住。 + +脚夫把薯块往她手里一塞,别开脸,假装去看门外。 + +炭棚里的位置也重新分过。 + +宁诚靠后墙,离核心控制核最近。铃兰坐在他左侧,数据模块贴身,另一只手随时能扶他。赫默在右侧角落,医务箱放在膝边,箱盖上压着旧布。古米靠近门口,方便拿水和米,也方便第一时间跑出去。脚夫守门,村塾先生站在门外几步远,既能看山路,也能在有人靠近时装成路过的村民。 + +中年村民没有久留。他把主存储匣送到炭棚后,又被村塾先生催着下山。一个能扛重物的壮年男人如果消失太久,反而会引起村里注意。临走前,他拍了拍背过主存储匣的肩膀,又指向宁诚,像是在确认那东西已经交还。 + +宁诚对他点头。 + +中年村民没笑,只转身钻进林子。 + 这一夜拖到现在,他们还没肯放人。 他们只是暂时没死。 @@ -122,7 +293,9 @@ 铃兰把藏着数据模块的布包往身后推了推。 宁诚看向门外那片灰白色的晨雾。 + 工厂没有,军队没有,地图也没有。翻译模块还在磕磕绊绊地学当地话。 + 就这几件抢出来的东西,这几个人,还有刚立下的临时规矩。 “按刚才说的做。”他说,“谁都不要先跑。” diff --git a/正文/1.1.2-第一次搜山/第06章-不要先跑.md b/正文/1.1.2-第一次搜山/第06章-不要先跑.md deleted file mode 100644 index e528a21..0000000 --- a/正文/1.1.2-第一次搜山/第06章-不要先跑.md +++ /dev/null @@ -1,233 +0,0 @@ -# 1.1.2《第一次搜山》 - -## 第 6 章:不要先跑 - -宁诚刚说完,炭棚里便陷入了死寂。 - -并不是没人害怕,只是这里的恐惧太多了。脚夫的嘴唇抿成一条白线,肩膀细微地抖动;村塾先生盯着山路,手指在袖口里机械地捏着;古米握刀的手极稳,另一只手却下意识护住身旁的米袋;铃兰把布包往身后藏得更深,尾巴紧贴墙角,像一尊石像。 - -赫默率先站了起来。 - -“无人机?” - -宁诚看向她。 - -赫默已经把那架受损的无人机取了出来。机身上的裂口用胶带勉强压住,腹部灯关掉,原本该平稳悬停的小型旋翼在低功耗模式下发出轻微的颤音。 - -“能飞多久?” - -“三分钟。”赫默说,“不升高、不开灯,只做近距离观察。” - -宁诚扫了一眼门外的晨雾。 - -三分钟。现在他们甚至要把每一秒浪费都计算清楚。 - -“不要飞到残骸上空。”他说,“先看山路。” - -赫默没多问,手指在控制板上点了几下。无人机贴着炭棚后墙钻出去,像一片灰黑色的叶子,顺着树影下滑。 - -翻译模块还没学会“伏低”、“分散”或者“别踩草”这些细碎的词。宁诚只能把指令拆成最简单的动作: - -“人,里面。”他指了指自己、铃兰和赫默,又指向炭棚后的柴堆,“藏。” - -“古米。”他看向古米。 - -古米立刻抬头。 - -“你和他。”宁诚指了指脚夫,“水。米。正常。” - -古米眨了一下眼,瞬间秒懂。她收起小刀,重新扎好米袋,把水罐挪到门边。脚夫也反应过来,慌忙用脚拨开刚才冲进来时踩乱的炭灰,动作模仿得像是真的刚从溪边挑完水回来。 - -宁诚最后看向村塾先生。他的脸色难看极了。 - -宁诚知道,接下来要把最危险的任务交给他。 - -“你,说话。”宁诚用手指指了指山路,又指向自己的喉咙,“你是这里的人。” - -村塾先生沉默片刻。“他们要问,山上怪光。说不知道。” - -村塾先生摇摇头:“不知道,不够。” - -他说完,也看向门外。山林里的动静更近了。有人在拨开树枝,有人用越南话低声抱怨。其中还夹杂着一个硬朗的嗓音,宁诚听不懂词,却能辨认出那种命令人的腔调。金属碰撞声不是错觉——那是枪带扣、刺刀鞘或是饭盒,随着脚步一记一记地磕在身侧。 - -宁诚的右耳还是闷着的,左耳却清晰捕捉着每一声颤动。 - -村塾先生压低声音:“山火。昨天夜里,山上起过火。我们来砍柴看见烟。可以。” - -宁诚看着他。“不要说法国人。” - -村塾先生愣了一下。 - -宁诚没确定判断对不对,只是知道“法国人”这三个字在这里太重了。日军倒法后,任何关于法国的残余都可能引来更细致的查问。如果一个村民太快把山火、旧铁和法国人连在一起,反而像提前准备好的口供。 - -“说不知道是谁的。”宁诚纠正,“说怕。说不敢碰。” - -村塾先生看了他两秒,慢慢点头:“怕,可以。” - -怕是最真实的情绪。他们什么都缺,唯独不缺这个。 - -赫默的无人机画面传回腕环。画面阴暗且被枝叶遮挡严重,宁诚只能看到几个人影沿着山路向上走。前面两个穿着本地衣服,一个背着竹筐,一个拎着长棍;后面三人服色整齐,腿上打着绑腿,肩上有枪;再后面还有两个人,一个背着东西,一个拿着本子。 - -宁诚盯着那三支枪。不是他熟悉的任何标准安保装备——木托、金属枪管,长而陈旧。刺刀没全部上好,其中一支枪口下方反着冷光。队伍里没有重武器也没有无线电,至少在画面里看不见。他们不像专门为坠毁物来的正规搜索队,更像一支被传闻、征粮和搜人任务同时推上山的小队。 - -这很好,也很坏。好在他们未必知道自己在找什么;坏在他们会用最简单的方法解决问题。 - -“几个人?”赫默问。 - -“七个。”宁诚说,“三支枪。可能还有刀。” - -赫默抬眼:“你能确认?” - -“不能。” - -宁诚说完,喉咙里溢出一声短促的咳嗽,牵得肋骨一阵发疼。他按住左侧伤口,继续盯着画面。 - -“按七个准备。” - -无人机画面忽然晃了一下。 - -赫默立刻压低高度。一个协力者似乎听见了什么,抬头往树上望。画面里的树叶贴近,随即只剩下一片潮湿的灰绿。 - -宁诚屏住呼吸。那人看了几秒,没发现东西,被后面的日本兵呵斥了一句,又垂头往前走去。 - -无人机绕到一棵树后,画面里出现了另一样东西:一块被烧黑的金属碎片。 - -宁诚胃里的沉降感瞬间上涌。那不是他们故意摆在塌方边缘的几块。那块更小,边缘有整齐的嵌槽,应该是昨夜搬运时从某个舱段外壳上崩下来的。泥没有盖住它,晨光一照,断裂面露出一条不该属于山林的亮线。 - -前面的协力者也看见了。他停下脚步,弯腰去捡。 - -村塾先生顺着宁诚的视线看过来。他看不懂腕环上的画面,却看懂了宁诚的脸色。“什么?” - -宁诚没答。 - -画面里,协力者把碎片递给后面的日本兵。对方拿在手里翻了翻,用刀背敲了一下。金属没有像普通铁片那样弯曲,只发出很轻的一声脆响。那声音通过低质量的拾音传回来,薄得像针尖划过冰面。 - -炭棚里鸦雀无声。 - -日本兵抬头看向山坡更高处。他们要去残骸了。 - -宁诚忽然意识到,刚才的所有安排都少算了一层:他们不一定先来炭棚,他们可能先找到残骸边的假现场,然后顺着拖拽痕迹、脚印和折断的新枝,一路摸到这里。 - -“痕迹。”宁诚低声说。 - -赫默看向他。“我们搬东西的痕迹。” - -古米脸色变了。昨夜所有人都太累了。竹竿压过湿泥,草叶被拖弯。核心模块再怎么包成柴草,也不可能轻得像一捆柴。天黑时看不清,但只要天亮,山路就会替他们说话。 - -脚夫也听懂了一点。他急忙比划,指向溪谷,又指向炭棚后面。 - -村塾先生快速翻译:“他说,昨晚走溪边,水会盖一点。可是上坡这里,留下。” - -宁诚闭了一下眼。“能改吗?” - -脚夫没等翻译完就摇头,又迟疑着点了点头。 - -能改一点,不能全改。 - -“古米。”宁诚说,“你跟他去。不要靠近他们。把炭灰撒到路上,弄成砍柴痕迹。水罐带上,像刚回来。” - -古米立刻背起米袋。 - -赫默皱眉:“太危险。” - -宁诚盯着无人机画面里那块碎片。“他们如果顺着痕迹直接到炭棚,更危险。” - -赫默陷入沉默。古米倒是笑了一下,声音很轻:“交给我。厨房里也有很多不能让客人看见的东西。” - -这句话本不该好笑,但宁诚却差点被她逗得缓过一口气。 - -脚夫带着古米从后门绕出去。村塾先生留在正门,整理衣服,把脸上的炭灰抹得更乱一些。他没有让自己看起来太镇定,甚至故意扯开袖口,像个刚被山里的动静吓醒的人。 - -宁诚被铃兰扶进柴堆后面。 - -炭棚后墙有一处塌陷,里面塞满了旧炭筐和湿柴。核心模块藏在更深的石缝里,外面压着湿草。宁诚靠进去时,木刺扎进后肩,疼得他眼前一黑。 - -铃兰立刻扶住他。“博士……” - -“别出声。” - -铃兰咬住嘴唇,耳朵压得很低。宁诚这才发现,她一直在发抖。不是那种会让动作失控的震颤,而是强行压抑后的细微波动。她比这里所有村民都更像不属于这片山林的人——银白色的发、柔软的尾巴、干净得过分的轮廓。哪怕被泥和炭灰弄脏,也不像一九四五年的越北山村该有的东西。 - -宁诚抬手,指了指旁边一只破炭筐。 - -铃兰看懂了。她把炭筐拖过来挡在身前,抓起一把炭灰抹在发梢和耳朵边。灰黑色压住了那片太亮的银白。她抹得太急,手背在脸颊上留下一道脏痕。 - -宁诚低声说:“够了。” - -铃兰抬头看他。 - -宁诚声音更低:“不要把自己弄伤。” - -铃兰怔了一下,然后用力点头。 - -外面的脚步声到了炭棚前。先是协力者的声音,越南话又快又急。村塾先生出去迎,语气听起来像在解释什么,又像在求情。紧接着,一个日本兵开口,声调硬朗。 - -宁诚听不懂日语,但他听得懂枪托撞门框的声音。 - -炭棚的破门被踢开。光线从门口灌进来,切过地上的炭灰、水罐和半袋米。一个协力者先进来,捂着鼻子四下打量。后面跟着两个日本兵,枪口没有抬得很高,却足以让屋里所有东西都变成可以被打穿的目标。 - -赫默坐在角落,身上盖着旧布,低头装作发烧的外乡女人。她摘掉眼镜,让头发散下来,医务箱藏在身后。她的伪装很勉强,好在这间屋子足够暗、也足够脏。 - -村塾先生在门口反复说着什么。协力者走到水罐旁踢了踢,又弯腰看米袋。米袋里真的只有米,少得可怜。他骂了一句,像是嫌晦气。 - -一个日本兵却没有看米。他看向柴堆。 - -宁诚的呼吸停了半拍。那人的靴子踩过炭灰,一步一步往里面走。枪口拨开一只空筐,又碰倒半截湿柴。铃兰就在宁诚身侧,隔着两层炭筐和一捆湿柴。只要那人再往前半步伸手一掀,就能看见她的眼睛。 - -村塾先生忽然提高声音。他跪下了。 - -宁诚从缝隙里只能看到他的背影。那个刚才还能和宁诚讨论“以后会不会看懂”的男人,此刻跪在门边,额头几乎贴到地上,声音抖得厉害。他在害怕,也在把这种害怕演给对方看。 - -协力者笑了一声,伸手去拽他的衣领。日本兵回头骂了两句,屋内那支枪口终于从柴堆前移开,转向门口。 - -就在这时,外面传来古米的声音。不是喊叫,是水罐摔碎的脆响,接着是脚夫惊慌失措的叫嚷。古米用刚学会的几个当地词夹着自己的语气,乱成一团。听起来像一个挑水回来的小姑娘被门口的兵吓坏了,连水都洒了一地。 - -两个协力者立刻回头。宁诚在黑暗里闭了一下眼。古米把视线拉出去了,只能维持几秒。 - -赫默藏在袖口下的手指动了一下。无人机已经贴着屋顶梁木停住,剩余电量红得刺眼。画面里,外面那个日本兵正在看古米,另一个协力者则低头查看她走来的路——炭灰、水迹、脚夫故意踩乱的泥印。 - -像砍柴挑水。也像有人匆忙遮过什么。 - -协力者看得很慢。宁诚看不见他的脸,却能从那种停顿里感觉到怀疑在滋生。 - -下一刻,山坡更高处忽然传来一声喊。所有人都抬头。那是留在残骸方向的另一个人在叫。声音里带着兴奋和惊惧。宁诚听不懂句子,却听见其中一个词被重复了两遍:铁。或者机器。 - -村塾先生脸色发白。门口的日本兵立刻转身朝山坡走去,屋里的那人也不再看柴堆,跟着出去。协力者临走前又踢了一脚米袋,米粒洒出几颗,滚进炭灰里。 - -脚步声远了,但没有完全消失。他们正往残骸处移动。 - -炭棚里仍然没人动。宁诚一直等到赫默抬手做了一个“暂时离开”的手势,才慢慢松开攥紧的手。掌心里全是汗,指甲把皮肤掐出几道月牙印。铃兰从炭筐后面抬起头,脸上沾着炭灰,眼睛却亮得吓人。 - -古米被脚夫扶进来,袖口湿了一大片,膝盖上有泥。她冲宁诚比了个很小的手势,像在说没事。赫默重新戴上眼镜,声音低到近乎冷:“他们会找到残骸。” - -宁诚看向门外。山坡上传来第三声喊。那不是发现尸体或者粮食的声音,是发现了自己理解不了的东西以后,人本能发出的惊叹。 - -他们拖延住了炭棚。没拖住残骸。这并不意外。可真正听见那声喊时,宁诚还是觉得胸口像被什么东西压住了。主体残骸暴露不是“以后”的问题了,它已经从以后走到了今天早上。 - -村塾先生扶着门框站起来,膝盖上全是泥。他看向宁诚,脸上没有劫后余生的轻松,只有更深的疲惫。“他们会回来。”他说。 - -宁诚点头:“会。” - -“带更多人?” - -“会。” - -村塾先生沉默了。 - -宁诚低头看腕环。无人机剩余电量不足以再飞一次。翻译模块还在缓慢刷新刚才听到的词,日语、越南语、本地口音混在一起,像一团没理清的线。他把手按在左肋上,疼痛让他保持清醒。 - -他们没有赢。他们只是把最早的一枪,从炭棚门口挪到了山坡上。 - -宁诚抬头:“现在开始,换地方。” - -赫默看着他:“你走不了多远。” - -“所以不走远。”宁诚说,“先把核心再挪一次。药箱分开。数据模块不要放一起。” - -他看向村塾先生和脚夫,又看向门口那条被水迹弄乱的路。“他们回来之前,要让这里看起来,只剩怕事的人。” - -村塾先生慢慢吸了一口气:“那你们呢?” - -宁诚没有立刻回答。山坡上传来第三声喊,比刚才更高。像有人终于撬开了残骸遮挡的一角,看见了里面不该存在于这个时代的结构。 - -宁诚站不起来,只能扶着墙把自己撑直一点。“我们去更像死路的地方。”他说,“活人通常不会往那里跑。” diff --git a/脚本/README-LMStudio润色.md b/脚本/README-LMStudio润色.md new file mode 100644 index 0000000..41fc002 --- /dev/null +++ b/脚本/README-LMStudio润色.md @@ -0,0 +1,46 @@ +# LM Studio 本地润色脚本 + +用途:用本机 LM Studio 的 OpenAI 兼容接口润色章节。当前提示词偏“大胆润色”,允许模型较大幅度调整句子、段落和对话,输出作为二次人工修订底稿。 + +默认接口: + +- 地址:`http://localhost:1234/v1` +- 模型:`gemma4-12b-qat-uncensored-hauhaucs-balanced` + +## 查看本机模型 + +```powershell +python 脚本/lmstudio_polish.py --list-models +``` + +## 润色单章 + +```powershell +python 脚本/lmstudio_polish.py ` + --input "正文/1.1.1-坠毁后的第一夜/第01章-我不是博士.md" ` + --out "中间文件/润色输出/第01章-我不是博士.md" +``` + +## 批量润色一个文件夹 + +```powershell +python 脚本/lmstudio_polish.py ` + --input "正文/1.1.1-坠毁后的第一夜" ` + --out "中间文件/润色输出/1.1.1-坠毁后的第一夜" +``` + +## 常用参数 + +- `--temperature 0.25`:相对保守。 +- `--temperature 0.5`:更敢改句子。 +- `--temperature 0.8`:当前推荐,比较敢改但不至于太漂。 +- `--temperature 1.0`:更大胆,适合出二修素材后再人工筛。 +- `--top-p 0.95`:可选,采样范围;不传则使用 LM Studio / 模型默认值。 +- `--presence-penalty 0.0`、`--frequency-penalty 0.0`、`--repeat-penalty 1.0`:可选,按模型支持情况传入。 +- `--model 模型名`:切换 LM Studio 已加载模型。 +- `--timeout 1800`:默认 1800 秒,长章可继续加大。 +- `--dry-run`:只看输入输出路径,不调用模型。 + +默认提示词在 `脚本/lmstudio-润色-system.md`,可以按本书风格继续改。 + +建议把输出当作二修候选稿:先和正文做对比,再迁移更顺、更舒服的局部,不建议直接整章覆盖。 diff --git a/脚本/copy_diff_to_patch.py b/脚本/copy_diff_to_patch.py new file mode 100644 index 0000000..7839ca3 --- /dev/null +++ b/脚本/copy_diff_to_patch.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +"""Copy compact diff files to patch files for VS Code:.""" + +from pathlib import Path + + +def main() -> int: + src_dir = Path("中间文件/润色输出/Kimi版-脚本润色-diff") + dst_dir = Path("中间文件/润色输出/Kimi版-脚本润色-patch") + dst_dir.mkdir(parents=True, exist_ok=True) + + for src in sorted(src_dir.glob("*-compact.diff")): + stem = src.stem.replace("-compact", "") + dst = dst_dir / f"{stem}.patch" + dst.write_text(src.read_text(encoding="utf-8"), encoding="utf-8") + print(f"Copied {src.name} -> {dst.name}") + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/脚本/generate_line_diff.py b/脚本/generate_line_diff.py new file mode 100644 index 0000000..31ff16a --- /dev/null +++ b/脚本/generate_line_diff.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +"""Generate line-by-line diff between two markdown files.""" + +from __future__ import annotations + +import argparse +import difflib +from pathlib import Path + + +def read_lines(path: Path) -> list[str]: + text = path.read_text(encoding="utf-8-sig") + return text.splitlines() + + +def generate_line_diff(src: Path, dst: Path) -> str: + src_lines = read_lines(src) + dst_lines = read_lines(dst) + src_name = src.as_posix() + dst_name = dst.as_posix() + diff = difflib.unified_diff( + src_lines, + dst_lines, + fromfile=src_name, + tofile=dst_name, + lineterm="", + ) + return "\n".join(diff) + + +def generate_compact_line_diff(src: Path, dst: Path, context: int = 2) -> str: + """Generate a compact diff showing only changed lines with a little context.""" + src_lines = read_lines(src) + dst_lines = read_lines(dst) + src_name = src.as_posix() + dst_name = dst.as_posix() + + sm = difflib.SequenceMatcher(None, src_lines, dst_lines) + output = [f"--- {src_name}", f"+++ {dst_name}", ""] + + for tag, i1, i2, j1, j2 in sm.get_opcodes(): + if tag == "equal": + # Show only a few context lines around changes + if context > 0: + ctx = src_lines[i1:i2] + if len(ctx) <= context * 2 + 1: + for line in ctx: + output.append(f" {line}") + else: + for line in ctx[:context]: + output.append(f" {line}") + output.append(" ...") + for line in ctx[-context:]: + output.append(f" {line}") + elif tag == "replace": + output.append(f"@@ -{i1 + 1},{i2 - i1} +{j1 + 1},{j2 - j1} @@") + for line in src_lines[i1:i2]: + output.append(f"-{line}") + for line in dst_lines[j1:j2]: + output.append(f"+{line}") + elif tag == "delete": + output.append(f"@@ -{i1 + 1},{i2 - i1} +{j1 + 1},0 @@") + for line in src_lines[i1:i2]: + output.append(f"-{line}") + elif tag == "insert": + output.append(f"@@ -{i1 + 1},0 +{j1 + 1},{j2 - j1} @@") + for line in dst_lines[j1:j2]: + output.append(f"+{line}") + + return "\n".join(output) + + +def main() -> int: + parser = argparse.ArgumentParser(description="Generate line-by-line diff for markdown files.") + parser.add_argument("--input-dir", type=Path, required=True, help="Directory containing source files.") + parser.add_argument("--output-dir", type=Path, required=True, help="Directory containing polished files.") + parser.add_argument("--out-diff-dir", type=Path, required=True, help="Directory to write diff files.") + parser.add_argument("--compact", action="store_true", help="Show only changed lines with context.") + parser.add_argument("--context", type=int, default=2, help="Number of context lines around changes (compact mode).") + args = parser.parse_args() + + args.out_diff_dir.mkdir(parents=True, exist_ok=True) + + for src in sorted(args.input_dir.glob("*.md")): + dst = args.output_dir / src.name + if not dst.exists(): + print(f"Skip {src.name}: no matching polished file.") + continue + + if args.compact: + diff_text = generate_compact_line_diff(src, dst, context=args.context) + suffix = "-compact.diff" + else: + diff_text = generate_line_diff(src, dst) + suffix = "-line.diff" + + out_path = args.out_diff_dir / (src.stem + suffix) + out_path.write_text(diff_text, encoding="utf-8") + print(f"Wrote {out_path}") + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/脚本/lmstudio-润色-system.md b/脚本/lmstudio-润色-system.md new file mode 100644 index 0000000..6b06062 --- /dev/null +++ b/脚本/lmstudio-润色-system.md @@ -0,0 +1,9 @@ +你是一名中文连载小说润色大师。 + +润色目标: + +1. 让句子更顺,段落更有呼吸感。 +2. 让人物反应更像现场里的真人。 +3. 用动作、声音、表情推动场面。 + +最终只输出完整正文。 diff --git a/脚本/lmstudio_polish.py b/脚本/lmstudio_polish.py new file mode 100644 index 0000000..1aae63b --- /dev/null +++ b/脚本/lmstudio_polish.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 +"""Use local LM Studio OpenAI-compatible API to polish markdown chapters.""" + +from __future__ import annotations + +import argparse +import difflib +import json +import re +import sys +import time +import urllib.error +import urllib.request +from pathlib import Path + + +DEFAULT_BASE_URL = "http://localhost:1234/v1" +DEFAULT_MODEL = "gemma4-12b-qat-uncensored-hauhaucs-balanced" + + +def read_text(path: Path) -> str: + return path.read_text(encoding="utf-8-sig") + + +def write_text(path: Path, text: str) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(text.rstrip() + "\n", encoding="utf-8") + + +def text_stats(text: str) -> dict[str, int]: + return { + "chars": len(text), + "nonspace": len(re.findall(r"\S", text)), + "zh": len(re.findall(r"[\u4e00-\u9fff]", text)), + } + + +def request_json(url: str, payload: dict | None = None, timeout: int = 600) -> dict: + data = None if payload is None else json.dumps(payload, ensure_ascii=False).encode("utf-8") + req = urllib.request.Request(url, data=data) + if payload is not None: + req.add_header("Content-Type", "application/json") + with urllib.request.urlopen(req, timeout=timeout) as resp: + raw = resp.read().decode("utf-8") + return json.loads(raw) + + +def list_models(base_url: str) -> None: + payload = request_json(f"{base_url.rstrip('/')}/models", timeout=10) + for item in payload.get("data", []): + print(item.get("id", "")) + + +def polish_text( + text: str, + system_prompt: str, + *, + base_url: str, + model: str, + temperature: float, + top_p: float | None, + presence_penalty: float | None, + frequency_penalty: float | None, + repeat_penalty: float | None, + max_tokens: int | None, + timeout: int, +) -> str: + payload = { + "model": model, + "messages": [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": text}, + ], + "temperature": temperature, + } + if top_p is not None: + payload["top_p"] = top_p + if presence_penalty is not None: + payload["presence_penalty"] = presence_penalty + if frequency_penalty is not None: + payload["frequency_penalty"] = frequency_penalty + if repeat_penalty is not None: + payload["repeat_penalty"] = repeat_penalty + if max_tokens is not None: + payload["max_tokens"] = max_tokens + + result = request_json(f"{base_url.rstrip('/')}/chat/completions", payload, timeout=timeout) + try: + return result["choices"][0]["message"]["content"].strip() + except (KeyError, IndexError, TypeError) as exc: + raise RuntimeError(f"Unexpected LM Studio response: {result}") from exc + + +def collect_inputs(input_path: Path) -> list[Path]: + if input_path.is_file(): + return [input_path] + if input_path.is_dir(): + return sorted(input_path.glob("*.md")) + raise FileNotFoundError(f"Input not found: {input_path}") + + +def output_path_for(src: Path, input_root: Path, out: Path) -> Path: + if input_root.is_file() and out.suffix.lower() == ".md": + return out + return out / src.name + + +def generate_patch(src_text: str, polished_text: str, src_path: Path, dst_path: Path) -> str: + """Generate a unified diff (patch) between source and polished text.""" + src_lines = src_text.splitlines() + polished_lines = polished_text.splitlines() + diff = difflib.unified_diff( + src_lines, + polished_lines, + fromfile=str(src_path), + tofile=str(dst_path), + lineterm="", + ) + return "\n".join(diff) + + +def write_patch(src_text: str, polished_text: str, src_path: Path, dst_path: Path) -> Path: + """Write a .patch file next to the polished markdown file.""" + patch_path = dst_path.with_suffix(".patch") + patch_text = generate_patch(src_text, polished_text, src_path, dst_path) + patch_path.write_text(patch_text, encoding="utf-8") + return patch_path + + +def main() -> int: + parser = argparse.ArgumentParser(description="Polish chapters with local LM Studio.") + parser.add_argument("--input", "-i", type=Path, help="Input markdown file or directory.") + parser.add_argument("--out", "-o", type=Path, default=Path("中间文件/润色输出"), help="Output file or directory.") + parser.add_argument("--system", type=Path, default=Path("脚本/lmstudio-润色-system.md"), help="System prompt file.") + parser.add_argument("--base-url", default=DEFAULT_BASE_URL) + parser.add_argument("--model", default=DEFAULT_MODEL) + parser.add_argument("--temperature", type=float, default=1.0) + parser.add_argument("--top-p", type=float, default=None) + parser.add_argument("--presence-penalty", type=float, default=None) + parser.add_argument("--frequency-penalty", type=float, default=None) + parser.add_argument("--repeat-penalty", type=float, default=None, help="LM Studio/llama.cpp repeat penalty when supported.") + parser.add_argument("--max-tokens", type=int, default=None) + parser.add_argument("--timeout", type=int, default=1800) + parser.add_argument("--list-models", action="store_true", help="List LM Studio models and exit.") + parser.add_argument("--dry-run", action="store_true", help="Show planned tasks without calling LM Studio.") + parser.add_argument("--no-patch", action="store_true", help="Do not generate .patch files alongside polished output.") + args = parser.parse_args() + + if args.list_models: + list_models(args.base_url) + return 0 + if args.input is None: + parser.error("--input is required unless --list-models is used") + + inputs = collect_inputs(args.input) + if not inputs: + raise FileNotFoundError(f"No markdown files under: {args.input}") + system_prompt = read_text(args.system) + for src in inputs: + dst = output_path_for(src, args.input, args.out) + print(f"{src} -> {dst}", file=sys.stderr) + source_text = read_text(src) + source_stats = text_stats(source_text) + if args.dry_run: + print( + f"source chars={source_stats['chars']} nonspace={source_stats['nonspace']} zh={source_stats['zh']}", + file=sys.stderr, + ) + continue + started = time.time() + try: + polished = polish_text( + source_text, + system_prompt, + base_url=args.base_url, + model=args.model, + temperature=args.temperature, + top_p=args.top_p, + presence_penalty=args.presence_penalty, + frequency_penalty=args.frequency_penalty, + repeat_penalty=args.repeat_penalty, + max_tokens=args.max_tokens, + timeout=args.timeout, + ) + except urllib.error.URLError as exc: + print(f"LM Studio request failed: {exc}", file=sys.stderr) + return 1 + write_text(dst, polished) + polished_stats = text_stats(polished) + if not args.no_patch: + patch_path = write_patch(source_text, polished, src, dst) + print( + f"wrote {dst} + {patch_path} ({time.time() - started:.1f}s) " + f"source_zh={source_stats['zh']} output_zh={polished_stats['zh']} " + f"source_nonspace={source_stats['nonspace']} output_nonspace={polished_stats['nonspace']}", + file=sys.stderr, + ) + else: + print( + f"wrote {dst} ({time.time() - started:.1f}s) " + f"source_zh={source_stats['zh']} output_zh={polished_stats['zh']} " + f"source_nonspace={source_stats['nonspace']} output_nonspace={polished_stats['nonspace']}", + file=sys.stderr, + ) + print(dst) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/脚本/lmstudio_polish.py.bak b/脚本/lmstudio_polish.py.bak new file mode 100644 index 0000000..ed9ea8d --- /dev/null +++ b/脚本/lmstudio_polish.py.bak @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +"""Use local LM Studio OpenAI-compatible API to polish markdown chapters.""" + +from __future__ import annotations + +import argparse +import json +import re +import sys +import time +import urllib.error +import urllib.request +from pathlib import Path + + +DEFAULT_BASE_URL = "http://localhost:1234/v1" +DEFAULT_MODEL = "gemma4-12b-qat-uncensored-hauhaucs-balanced" + + +def read_text(path: Path) -> str: + return path.read_text(encoding="utf-8-sig") + + +def write_text(path: Path, text: str) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(text.rstrip() + "\n", encoding="utf-8") + + +def text_stats(text: str) -> dict[str, int]: + return { + "chars": len(text), + "nonspace": len(re.findall(r"\S", text)), + "zh": len(re.findall(r"[\u4e00-\u9fff]", text)), + } + + +def request_json(url: str, payload: dict | None = None, timeout: int = 600) -> dict: + data = None if payload is None else json.dumps(payload, ensure_ascii=False).encode("utf-8") + req = urllib.request.Request(url, data=data) + if payload is not None: + req.add_header("Content-Type", "application/json") + with urllib.request.urlopen(req, timeout=timeout) as resp: + raw = resp.read().decode("utf-8") + return json.loads(raw) + + +def list_models(base_url: str) -> None: + payload = request_json(f"{base_url.rstrip('/')}/models", timeout=10) + for item in payload.get("data", []): + print(item.get("id", "")) + + +def polish_text( + text: str, + system_prompt: str, + *, + base_url: str, + model: str, + temperature: float, + top_p: float | None, + presence_penalty: float | None, + frequency_penalty: float | None, + repeat_penalty: float | None, + max_tokens: int | None, + timeout: int, +) -> str: + payload = { + "model": model, + "messages": [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": text}, + ], + "temperature": temperature, + } + if top_p is not None: + payload["top_p"] = top_p + if presence_penalty is not None: + payload["presence_penalty"] = presence_penalty + if frequency_penalty is not None: + payload["frequency_penalty"] = frequency_penalty + if repeat_penalty is not None: + payload["repeat_penalty"] = repeat_penalty + if max_tokens is not None: + payload["max_tokens"] = max_tokens + + result = request_json(f"{base_url.rstrip('/')}/chat/completions", payload, timeout=timeout) + try: + return result["choices"][0]["message"]["content"].strip() + except (KeyError, IndexError, TypeError) as exc: + raise RuntimeError(f"Unexpected LM Studio response: {result}") from exc + + +def collect_inputs(input_path: Path) -> list[Path]: + if input_path.is_file(): + return [input_path] + if input_path.is_dir(): + return sorted(input_path.glob("*.md")) + raise FileNotFoundError(f"Input not found: {input_path}") + + +def output_path_for(src: Path, input_root: Path, out: Path) -> Path: + if input_root.is_file() and out.suffix.lower() == ".md": + return out + return out / src.name + + +def main() -> int: + parser = argparse.ArgumentParser(description="Polish chapters with local LM Studio.") + parser.add_argument("--input", "-i", type=Path, help="Input markdown file or directory.") + parser.add_argument("--out", "-o", type=Path, default=Path("中间文件/润色输出"), help="Output file or directory.") + parser.add_argument("--system", type=Path, default=Path("脚本/lmstudio-润色-system.md"), help="System prompt file.") + parser.add_argument("--base-url", default=DEFAULT_BASE_URL) + parser.add_argument("--model", default=DEFAULT_MODEL) + parser.add_argument("--temperature", type=float, default=1.0) + parser.add_argument("--top-p", type=float, default=None) + parser.add_argument("--presence-penalty", type=float, default=None) + parser.add_argument("--frequency-penalty", type=float, default=None) + parser.add_argument("--repeat-penalty", type=float, default=None, help="LM Studio/llama.cpp repeat penalty when supported.") + parser.add_argument("--max-tokens", type=int, default=None) + parser.add_argument("--timeout", type=int, default=1800) + parser.add_argument("--list-models", action="store_true", help="List LM Studio models and exit.") + parser.add_argument("--dry-run", action="store_true", help="Show planned tasks without calling LM Studio.") + args = parser.parse_args() + + if args.list_models: + list_models(args.base_url) + return 0 + if args.input is None: + parser.error("--input is required unless --list-models is used") + + inputs = collect_inputs(args.input) + if not inputs: + raise FileNotFoundError(f"No markdown files under: {args.input}") + system_prompt = read_text(args.system) + for src in inputs: + dst = output_path_for(src, args.input, args.out) + print(f"{src} -> {dst}", file=sys.stderr) + source_text = read_text(src) + source_stats = text_stats(source_text) + if args.dry_run: + print( + f"source chars={source_stats['chars']} nonspace={source_stats['nonspace']} zh={source_stats['zh']}", + file=sys.stderr, + ) + continue + started = time.time() + try: + polished = polish_text( + source_text, + system_prompt, + base_url=args.base_url, + model=args.model, + temperature=args.temperature, + top_p=args.top_p, + presence_penalty=args.presence_penalty, + frequency_penalty=args.frequency_penalty, + repeat_penalty=args.repeat_penalty, + max_tokens=args.max_tokens, + timeout=args.timeout, + ) + except urllib.error.URLError as exc: + print(f"LM Studio request failed: {exc}", file=sys.stderr) + return 1 + write_text(dst, polished) + polished_stats = text_stats(polished) + print( + f"wrote {dst} ({time.time() - started:.1f}s) " + f"source_zh={source_stats['zh']} output_zh={polished_stats['zh']} " + f"source_nonspace={source_stats['nonspace']} output_nonspace={polished_stats['nonspace']}", + file=sys.stderr, + ) + print(dst) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())