0704
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
## 已确认硬边界
|
||||
|
||||
- 宁诚是开局唯一真正工程主导者。
|
||||
- 宁诚带有 OTL《明日方舟》玩家记忆,认知限于角色名字、人设与大致背景;游戏知识到 1945 年越南现场严重缩水,不涵盖终末地工程细节、源石病医疗、时代历史与当地情报。
|
||||
- 主角团开局一穷二白,只有残骸、有限设备、少量急救资源和低功耗核心。
|
||||
- 博士权限完整,但权限不能跳过能源、材料、人力、地形、保密和时代条件。
|
||||
- 飞船残骸是终末地核心资产,不是普通垃圾;主体残骸必然暴露,1.1 的成果只是拖延发现和制造误判。
|
||||
@@ -103,7 +104,7 @@
|
||||
|
||||
## 禁止写法
|
||||
|
||||
- 不要让主角团开局全知全能。
|
||||
- 不要让主角团开局全知全能。宁诚的玩家记忆只提供“认识干员”和“模糊倾向”,不能替代现场观察、技术验证和时代学习。
|
||||
- 不要让药物、无人机、核心计算机无限使用。
|
||||
- 不要一上来大规模解释源石病。
|
||||
- 不要让其他工程角色抢走宁诚的主导位置。
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
- 飞船不是普通交通工具,而是可在目标地展开为终末地核心的开拓平台。坠毁后核心展开协议仍在,但结构不完整、能源不足、现场暴露,暂时无法展开。
|
||||
- 博士腕部权限终端是完整的终末地核心钥匙,宁诚是唯一激活权限持有人。限制来自现场条件,而不是权限系统损坏。
|
||||
- 飞船核心计算机可提供计算、蓝图拆解、资源测绘、工序规划、风险推演和有限自动控制,定位是受损但关键的终末地辅助系统。
|
||||
- 宁诚是开局唯一真正工程主导者。
|
||||
- 宁诚是开局唯一真正工程主导者。他带有 OTL《明日方舟》玩家记忆,但游戏界面和档案只是对原世界的极简化表达;这份记忆能帮他认出干员、理解她们的大概倾向,不能替代现实中的医疗技术、工程操作、历史判断和现场学习。
|
||||
- 主体残骸搬运困难,清理只能粗糙处理。主角团优先抢走权限终端、可拆控制核、药箱、能源包、数据模块等关键小件,遮挡最显眼特征并制造误判;残骸被发现是必然倒计时。
|
||||
|
||||
## 源石规则
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
对外表现是典型失忆开局:他记得自己叫宁诚,也保留穿越前的思维和常识,但不记得飞船、干员、终末地公司完整流程和原博士的人际关系。
|
||||
|
||||
**玩家记忆**:宁诚穿越前玩过《明日方舟》,对铃兰、赫默、古米等角色有玩家层面的认知。他知道这些干员的名字、大致人设和部分背景梗概,但这部分知识在现实中严重缩水——游戏 UI、技能描述和档案只是对泰拉世界的极简表达,落到 1945 年的越南现场,除了“认识人”和“大概知道她们擅长什么”之外,几乎帮不上具体忙。他不知道赫默会怎么治这个时代的外伤,不知道古米的体力极限在饿了几顿后还剩多少,更不知道终末地核心的工程细节该怎么操作。
|
||||
|
||||
飞船核心、权限环和干员体系仍然识别这具身体为“博士”。因此系统承认他,干员也暂时继续称呼他为“博士”。
|
||||
|
||||
博士是唯一拥有终末地核心激活权限的人。飞船不是普通交通工具,而是可以在目标星球落地后展开为终末地核心的开拓平台。腕环/权限终端本身是完整的博士钥匙,开局受限于坠毁现场、能源、结构完整性和人力条件。
|
||||
@@ -35,18 +37,18 @@
|
||||
- 随飞船坠毁在越南太原省定化县佐朱外围山地。
|
||||
- 1.1.1 开场处于昏迷或刚苏醒状态。
|
||||
- 受伤,不能立刻全知全能掌控局面。
|
||||
- 以“创伤后记忆缺失”的形式被干员暂时接受。
|
||||
- 以“权限身份仍在、主观记忆不同”的形式被干员暂时接受。宁诚承认认识干员,但否认拥有共同经历。
|
||||
- 身边只有铃兰、赫默、古米和残骸。
|
||||
|
||||
## 失忆与身份错位
|
||||
|
||||
干员不是完全没发现异常,而是在坠毁、生存、权限链不断裂的压力下,先把问题压后。
|
||||
|
||||
- 赫默:最早察觉不对。她会用“创伤后记忆缺失”作为临时诊断,但保留观察。
|
||||
- 铃兰:最受情感冲击。博士不记得她,会让她难过,但她仍然先照顾伤员。
|
||||
- 赫默:最早察觉不对。她不会简单诊断为失忆,而是把宁诚标记为“信息来源待确认”的重点观察对象。
|
||||
- 铃兰:最受情感冲击。宁诚说“记得”她,但立刻否认共同记忆,让她先升起希望又跌落,情绪更复杂。
|
||||
- 古米:最实用。她会震惊,但很快进入找水、找食物、搬东西的生存节奏。
|
||||
|
||||
宁诚开局的工程判断不应来自“全知原博士记忆”,而应来自完整权限终端提供的终末地核心状态、应急流程、穿越前的组织经验、现场观察和快速学习。
|
||||
宁诚开局的工程判断不应来自“全知原博士记忆”或“全知玩家记忆”,而应来自完整权限终端提供的终末地核心状态、应急流程、穿越前的组织经验、现场观察和快速学习。玩家记忆只提供对干员的模糊认知,不能替代具体技术验证。
|
||||
|
||||
## 外貌与视觉锚点
|
||||
|
||||
|
||||
@@ -104,7 +104,21 @@
|
||||
|
||||
## 已铺垫
|
||||
|
||||
暂无正文。
|
||||
### F007:宁诚的 OTL 玩家记忆
|
||||
|
||||
类型:作者暗线 / 设定锚点
|
||||
|
||||
状态:已铺垫
|
||||
|
||||
读者是否已感知:是
|
||||
|
||||
首次出现:1.1.1 宁诚苏醒后看到铃兰、赫默,第 1 章末看到古米。
|
||||
|
||||
预计兑现:全书持续使用,但持续受限。
|
||||
|
||||
兑现方式:宁诚穿越前玩过《明日方舟》,能认出干员名字、人设和大致倾向,并已在 1.1.1 中向铃兰、赫默承认“记得”她们,但否认拥有共同经历。游戏知识到 1945 年越南现场严重缩水,不能替代现场观察、技术验证和时代学习。
|
||||
|
||||
风险:如果让宁诚靠游戏记忆直接解决工程、医疗或历史问题,会破坏受限叙事和时代现场的真实压力。
|
||||
|
||||
## 推进中
|
||||
|
||||
|
||||
@@ -1,931 +0,0 @@
|
||||
# 1.1.1《坠毁后的第一夜》五章草稿
|
||||
|
||||
## 第 1 章:我不是博士
|
||||
|
||||
宁诚醒来的时候,先闻到的是焦糊味。
|
||||
|
||||
那不是木头烧过的味道。木头烧完以后会有灰,有炭,有湿气压着的苦味;眼前这股气味更尖,像被烧穿的绝缘层、冷却液和金属粉末混在一起,贴着喉咙往肺里钻。
|
||||
|
||||
他想咳,胸口却像压着一整块舱壁。
|
||||
|
||||
“博士。”
|
||||
|
||||
有人贴在旁边叫他。那声音压着,像怕惊动林子里的什么东西。
|
||||
|
||||
博士?
|
||||
|
||||
宁诚在黑暗里怔了一下。
|
||||
|
||||
他不叫博士。
|
||||
|
||||
他叫宁诚。
|
||||
|
||||
这个念头比疼痛更早浮上来,清楚得近乎不合时宜。他差点张嘴反驳,话到喉咙口,又被一阵血腥味顶了回去。
|
||||
|
||||
不对。
|
||||
|
||||
哪里都不对。
|
||||
|
||||
他记得自己的名字,记得一些零碎到无法安放的常识。可他不记得自己为什么会躺在这里,不记得是谁在叫他,也不记得这股焦糊味之前发生了什么。记忆像被一刀切断,断口后面全是黑的。
|
||||
|
||||
宁诚睁开眼,一片银白色发梢在视野里晃。铃兰跪在旁边,脸上蹭着灰,耳朵耷拉下来,手里还攥着一卷已经发暗的止血绷带。她对上他的视线,眼睛亮了一瞬,又立刻低下头去看他的伤口。
|
||||
|
||||
“您醒了。”
|
||||
|
||||
宁诚没有立刻回答。视野一半清楚,一半像隔着水。右耳没什么声,只剩左耳里那点嗡鸣拖着不走。左肋和后肩疼得最实在,每吸一口气,都像有根钝针从肋骨缝里往里顶。
|
||||
|
||||
他垂下眼。
|
||||
|
||||
那只手骨节修长,手背上有干涸的血和细小擦伤,腕侧扣着一只他从没见过的金属环。金属环外壳有擦痕,透明面板裂开一道细纹,可内部权限灯仍然稳定亮着。它不像普通随身设备,更像某种钥匙。
|
||||
|
||||
权限确认。
|
||||
|
||||
身份:博士。
|
||||
|
||||
终末地核心激活权限:唯一持有人。
|
||||
|
||||
当前核心状态:坠毁锁定,待人工确认。
|
||||
|
||||
宁诚的喉咙发紧。陌生的身体,陌生的称呼,陌生的权限,还有一句听起来足够荒唐的“终末地核心”,全都在等他回应。
|
||||
|
||||
他试着动手指。能动。
|
||||
|
||||
试着抬右手。能抬,但手背上全是干涸的血。
|
||||
|
||||
试着抬左手。铃兰立刻按住他。
|
||||
|
||||
“不要动,赫默医生说您的肋骨可能有裂伤。”
|
||||
|
||||
宁诚闭了闭眼。
|
||||
|
||||
肋骨裂伤,轻度失血,左肩挫伤,右耳暂时性听觉损伤。
|
||||
|
||||
这些词一个接一个冒出来,像有人把急救手册塞进他脑子里。他知道它们是什么意思,却一时分不清这是自己的知识,还是这具身体留下的本能。
|
||||
|
||||
至少能说话。
|
||||
|
||||
至少还能想。
|
||||
|
||||
“赫……默。”
|
||||
|
||||
他的声音哑得厉害。
|
||||
|
||||
这个名字不是他想起来的。
|
||||
|
||||
腕环在铃兰话音落下时调出了一行人员权限标签:赫默,医疗与科研支援。宁诚盯着那两个字,像溺水的人抓住漂来的木片。
|
||||
|
||||
铃兰立刻回头。
|
||||
|
||||
不远处,赫默正蹲在一块断裂的黑色舱板前,身边浮着一架小型无人机。无人机的外壳有一角开裂,飞行姿态也不稳,悬在半空时会轻微偏斜。它腹部的灯时亮时暗,把周围的树干、泥水和扭曲残骸照得忽明忽暗。
|
||||
|
||||
听到宁诚醒来,赫默转过身,脸上没有放松。
|
||||
|
||||
“你昏迷了约四十七分钟。现场时间不完全可靠,核心计时有跳变。”
|
||||
|
||||
宁诚听懂了一半。
|
||||
|
||||
另一半听不懂。
|
||||
|
||||
系统时间不可靠,定位不可靠,坠毁前的数据也未必可靠。每个词都像是能听明白,连起来却把他的胃往下拽。
|
||||
|
||||
赫默多看了他两秒。那眼神不像看病人,倒像盯着一份读数不对的报告。
|
||||
|
||||
“博士,”她问,“你还记得坠毁前的事吗?”
|
||||
|
||||
宁诚停了一下。
|
||||
|
||||
他想说我不是博士。
|
||||
|
||||
他想问你们是谁。
|
||||
|
||||
他还想问自己是不是已经死了。
|
||||
|
||||
可铃兰的手还按在他肩旁,赫默的无人机灯光还在晃,远处残骸里偶尔炸出一点电火花。所有东西都太真了,真得不给他发疯的时间。
|
||||
|
||||
“不记得。”
|
||||
|
||||
铃兰的手指一下攥紧了绷带。
|
||||
|
||||
她嘴唇动了动,话没出来,按在宁诚左肩旁的手又往旁边挪了半寸。
|
||||
|
||||
赫默没有追问。她只是把视线落到他腕侧的权限环上,又移开。
|
||||
|
||||
“创伤后记忆缺失。”她说,“先按这个处理。”
|
||||
|
||||
她侧过脸,声音压到只有铃兰能听清。
|
||||
|
||||
“铃兰,记录他的反应。”
|
||||
|
||||
铃兰低低应了一声。
|
||||
|
||||
先。
|
||||
|
||||
宁诚听见了这个字。
|
||||
|
||||
也就是说,不是没人怀疑。
|
||||
|
||||
只是现在没空处理他。
|
||||
|
||||
他看向四周。
|
||||
|
||||
空气湿热,地面一踩就往下陷。草叶宽得不像他熟悉的任何绿化带,树影压在头顶,断裂的舱段斜插在山坡上,像一条被掰断脊骨的金属鱼。腹部翻开,线缆、隔热层、烧黑的支架全露在外面。几段舱壁上还有折叠轨、嵌套接口和支撑脚的残片,像某种没来得及展开的地面设施。更远处有条细溪,水声被夜色和烟压住,只剩一点断断续续的响动。
|
||||
|
||||
飞船的主体不在这里,或者说,这里只是一部分主体。
|
||||
|
||||
核心舱残片还在低功耗闪烁。那一点蓝白色的光,在黑暗里显眼得刺目。腕环把它标成“终末地核心舱”,却又在状态栏后面连续挂了三个红色限制:结构不完整,能源不足,展开失败。
|
||||
|
||||
宁诚张了张嘴,第一句差点问成“这是哪儿”。
|
||||
|
||||
腕环边缘又亮了一下,应急界面把一行字推到最上面:
|
||||
|
||||
幸存人员确认。
|
||||
|
||||
他把那几个字咽下去,换成另一个问法。
|
||||
|
||||
“还有谁活着?”
|
||||
|
||||
赫默推了推眼镜。
|
||||
|
||||
“确认可行动三人。你,铃兰,我。古米离开现场,去找水和食物。离开时间约二十六分钟。其他舱段没有回应,近距离生命信号不稳定,残骸干扰太强。”
|
||||
|
||||
宁诚把这几个名字在脑子里过了一遍。
|
||||
|
||||
你,铃兰,我。
|
||||
|
||||
古米离开现场。
|
||||
|
||||
其他舱段没有回应。
|
||||
|
||||
开拓队也好,外勤组也好,到了这会儿只剩几个能喘气的人。
|
||||
|
||||
宁诚盯着那片蓝白色的核心光。腕环上“终末地核心舱”几个字跳了跳。
|
||||
|
||||
他不知道自己为什么会问这个。
|
||||
|
||||
可能是因为那东西亮得太刺眼,也可能是因为所有人的目光都在等他问。
|
||||
|
||||
“核心状态。”
|
||||
|
||||
“低功耗运行。主数据库没有完全丢失,但接口损毁严重。终末地核心展开协议还在,执行条件全部不满足。能源包可读数不足二成。无人机两架,一架可飞,一架只能短距悬停。医务箱还在,但我只抢出了外层急救包,完整库存需要回残骸里取。”
|
||||
|
||||
宁诚想站起来。
|
||||
|
||||
这个念头刚冒出来,身体先替他否决了。眼前一黑,左肋像被人从里面掰开。铃兰急忙扶住他,他才发现自己连坐起来都费劲。
|
||||
|
||||
别慌。
|
||||
|
||||
他在心里重复了一遍。
|
||||
|
||||
没用。
|
||||
|
||||
他还是慌。只是慌也得喘气,喘气就会疼,疼痛反倒把他钉回了眼前。
|
||||
|
||||
“火。”
|
||||
|
||||
赫默知道他问什么。
|
||||
|
||||
“明火已经扑掉了大部分。但热源还在,烟也还在。无人机上升到树冠高度,看见东南方向有零散火光,距离无法精确判断。那里可能有人。”
|
||||
|
||||
有人。
|
||||
|
||||
宁诚后脑勺发麻。
|
||||
|
||||
无人星球上,残骸暴露最多是资源问题。
|
||||
|
||||
这里有火光。
|
||||
|
||||
有火光,就有人。有人看见这堆东西,就会来摸、来抢、来问。问不出来,也可以先开枪。
|
||||
|
||||
何况这东西还不是废铁。它原本应该落地、展开,变成一枚终末地种子。
|
||||
|
||||
他环视现场。视线扫过核心舱、能源包残片、赫默的医务包,又扫回腕环上的应急条令。
|
||||
|
||||
不是他会指挥。
|
||||
|
||||
是屏幕上就剩这些东西还能被叫出名字。
|
||||
|
||||
宁诚用还能动的右手指向核心舱。
|
||||
|
||||
“核心、能源包、医务箱、数据模块。”他说得比自己想象中慢,“先按这个排。能搬的搬,不能搬的拆。发光面盖住。反光金属用泥和树枝遮。”
|
||||
|
||||
他停了一下,喉咙里全是铁锈味。
|
||||
|
||||
“烧焦的别全灭。留一点,像山火。”
|
||||
|
||||
赫默看着他:“你现在站都站不稳。”
|
||||
|
||||
宁诚看了一眼自己的手。
|
||||
|
||||
手在抖。
|
||||
|
||||
他把手指蜷起来,声音压低。
|
||||
|
||||
“所以你执行。”
|
||||
|
||||
这句话说完,宁诚自己先咳了一声。胸腔里一股铁锈味泛上来,他偏头吐掉,发现唾沫里有血丝。
|
||||
|
||||
铃兰的脸色白了。
|
||||
|
||||
宁诚没有看她。他盯着那片低功耗闪烁的核心光,声音低下去。
|
||||
|
||||
“事故应急条令。”宁诚照着腕环念,“第一条,保全人员。第二条,保全终末地核心。第三条,误导未授权接触者。”
|
||||
|
||||
腕环里的应急协议一条条亮着,不像坏了。坏的是现场,是能源,是那具横在山坡上的终末地核心舱。
|
||||
|
||||
宁诚念到“保全终末地核心”时,自己都觉得这句话荒唐。
|
||||
|
||||
可赫默的视线又落到他脸上。
|
||||
|
||||
赫默沉默片刻,转身把无人机高度压低。
|
||||
|
||||
“铃兰,看住他。博士如果再试图自己搬东西,你就叫我。”
|
||||
|
||||
铃兰用力点头。
|
||||
|
||||
宁诚想说自己没那么脆弱,话到嘴边,又被远处山坡上传来的一声细响截住。
|
||||
|
||||
那不是残骸冷却声。
|
||||
|
||||
是树枝被踩断。
|
||||
|
||||
赫默的无人机立刻调转镜头。铃兰抬头,尾巴绷紧。宁诚伸手摸向身边,摸到的却不是武器,只是一截断裂的工具柄。
|
||||
|
||||
他攥住那截工具柄,掌心全是冷汗。
|
||||
|
||||
下一秒,林子里传来压低的喘声。
|
||||
|
||||
## 第 2 章:第一次接触
|
||||
|
||||
古米的声音从林子里钻出来,压着嗓子,喘得厉害。
|
||||
|
||||
“博士!赫默医生!我回来了!”
|
||||
|
||||
下一刻,古米从树影里钻出来。她一身泥水,背后还跟着两个人。
|
||||
|
||||
宁诚听到“博士”两个字时慢了半拍。
|
||||
|
||||
古米也看见了。她的脚步顿了一下,眼神在他和铃兰之间转了转,像是想问,又硬生生把问题咽回去。
|
||||
|
||||
“先别说这个。”她喘着气说,“我带人回来了。”
|
||||
|
||||
一个瘦得厉害,肩上搭着破布,腿脚有伤,手里死死攥着一根竹杖。另一个年纪稍大,穿着洗得发白的长衫,袖口卷起,脸上又是恐惧又是警惕。他们看见残骸的一瞬间,脚步全停住了。
|
||||
|
||||
那瘦脚夫嘴里发出一串宁诚听不懂的话,声音抖得像被风吹散。
|
||||
|
||||
赫默抬起手腕,残破的翻译模块亮了一下。它在飞船上只是基础接触工具,平时负责把舰内通用语转成终末地常用语种。现在它卡了两秒,只吐出几个散碎的词。
|
||||
|
||||
“山……火……兵……来。”
|
||||
|
||||
更多音节被标成未知。模块右下角跳出一行低功耗提示:语料不足,置信度过低。
|
||||
|
||||
村塾先生似的人咽了口唾沫,用极生硬的汉字音,一字一顿地说:
|
||||
|
||||
“大响。大火。日本人,会听见。”
|
||||
|
||||
宁诚看着他。
|
||||
|
||||
那人又指了指山外,指了指残骸,再指了指所有人,脸色一点点灰下去。
|
||||
|
||||
“日本人听见,不问先打。”
|
||||
|
||||
他说到这里,喉结滚了一下。
|
||||
|
||||
“他们会来。天亮前,也许就来。”
|
||||
|
||||
村塾先生说完那句“日本人会来”,山林里短暂地静了一下。
|
||||
|
||||
溪水声还在。残骸内部偶尔炸出一点细小电火花,宁诚自己的呼吸夹在里面,轻一阵,重一阵。
|
||||
|
||||
语言还不通。
|
||||
|
||||
可恐惧是通的。
|
||||
|
||||
翻译模块挂在赫默腕侧,光点一跳一跳。它能分辨出重复出现的恐惧音节,也能把“日本”这样的外来词从混杂口音里捞出来,却没有足够语料拼出完整句子。更麻烦的是,这里的人说话不只一种腔调。瘦脚夫的音节短促,村塾先生的汉字音生硬,古米刚学来的几个词又被她自己的口音揉乱。机器像被迫在黑夜里摸骨头,只能摸到几处尖锐的轮廓。
|
||||
|
||||
那两个被古米带回来的人站在残骸边,脚底像钉住了。瘦脚夫的眼睛一直往山坡下瞟,竹杖被他攥得发白。村塾先生勉强站稳,看一眼赫默的无人机,又看一眼宁诚身后半埋在泥里的舱段,嘴唇动了几次,才挤出几个汉字音。
|
||||
|
||||
“不是飞机?”
|
||||
|
||||
宁诚看向古米。
|
||||
|
||||
古米小声解释:“我在溪边碰到他。他脚伤了,饿得走不动。我给了他一点压缩饼干,包了一下伤口。他带我去了村子外面。里面没人敢出来,后来这位先生出来,说一点汉字。”
|
||||
|
||||
她顿了顿,声音更低。
|
||||
|
||||
“他们说山里刚才像打雷,又有白光。村里已经有人听见了。”
|
||||
|
||||
村塾先生听不懂古米的话,但听见“村”字,似乎猜到她在说什么。他急忙从怀里掏出一张皱巴巴的纸,又用手指在泥地上画。先画一条弯曲的线,像河;再画几个方块,表示村子;然后在更远处画出一条路,路边画了一个简陋的旗子。
|
||||
|
||||
他指着旗子,说了几个音。
|
||||
|
||||
宁诚没听懂。
|
||||
|
||||
赫默却听见其中一个词,低声道:“日本。”
|
||||
|
||||
宁诚看她。
|
||||
|
||||
“不确定,发音接近。”赫默说,“如果这里是地球,他指的又是日本军队,时间大概在二十世纪中叶附近。”
|
||||
|
||||
宁诚没有立刻接话。
|
||||
|
||||
地球。
|
||||
|
||||
二十世纪中叶。
|
||||
|
||||
日本军队。
|
||||
|
||||
这三个词排在一起,怎么听都不像好消息。三个模糊音节还不够,他得继续问。
|
||||
|
||||
他指着村塾先生的衣服、脚夫手里的竹杖、远处火光的位置,又指向残骸,慢慢问:“这里?”
|
||||
|
||||
村塾先生听不懂。
|
||||
|
||||
古米想了想,从口袋里掏出一块被水泡软的包装纸。她在上面画了个圆,又点了点脚下。村塾先生看明白了,蹲下去,在泥地上重新画。他画出山,画出路,画出村子,又在旁边写了两个宁诚勉强能辨认的汉字。
|
||||
|
||||
太原。
|
||||
|
||||
宁诚盯着那两个字。
|
||||
|
||||
不是山西太原。
|
||||
|
||||
湿热空气、宽叶树、村塾先生拧巴的汉字音,一样都不对。这里不是他认知里那个太原。
|
||||
|
||||
村塾先生又写了两个字。第一个还能认,第二个被泥水糊开一半,只剩下外框和几笔残画。
|
||||
|
||||
宁诚先看成了别的字,立刻又否掉。村塾先生急得用竹枝在旁边重写,写到第三遍,赫默的翻译模块才把一个低置信度地名挂到旁边。
|
||||
|
||||
定化。
|
||||
|
||||
赫默轻声说:“越南北部有太原省。”
|
||||
|
||||
宁诚抬眼。
|
||||
|
||||
“你确定?”
|
||||
|
||||
“以前做过疫区资料归档。只确定存在这个地名,不确定年代和行政边界。”
|
||||
|
||||
年代。
|
||||
|
||||
宁诚重新看向村塾先生。
|
||||
|
||||
他从赫默手里拿过一支断掉的记号笔,在包装纸背面写下几个数字。
|
||||
|
||||
一九四四?
|
||||
|
||||
村塾先生摇头。
|
||||
|
||||
宁诚划掉最后一个数字,又写:
|
||||
|
||||
一九四五?
|
||||
|
||||
村塾先生盯着那几个数字,脸上的血色退下去。他点头,点到一半又摇头,像这个年份光写在纸上就会招祸。
|
||||
|
||||
宁诚画了一个圆当太阳,又画一弯月亮,再用手指在两者之间来回点。村塾先生看懂了,伸出三根手指。
|
||||
|
||||
“三月。”他费力地说,“日本……法国……打。”
|
||||
|
||||
翻译模块卡了几秒,挤出一条译意。
|
||||
|
||||
“日本人……打法国人。现在。”
|
||||
|
||||
“现在”两个字闪着低置信度,宁诚后背还是窜起一层凉意。
|
||||
|
||||
赫默慢慢吸了一口气。
|
||||
|
||||
一九四五年三月。越南北部。日本军队。法国殖民残余。
|
||||
|
||||
他不知道自己为什么会落在这里,也不知道飞船到底穿过了什么。眼前这些字和手势已经够用了。
|
||||
|
||||
没有基地,没有生产线,也没有能展开的武装平台。
|
||||
|
||||
山坡上只有摔碎的残骸,几个人,半只急救包,两架受损无人机,一枚低功耗核心。还有那块随时会把所有人拖进死地的异常金属山。
|
||||
|
||||
宁诚把记号笔还给赫默,开始清点。
|
||||
|
||||
“核心计算机,一台,低功耗。完整功能未知。”
|
||||
|
||||
赫默补充:“可读接口两个,稳定接口一个。”
|
||||
|
||||
“能源包?”
|
||||
|
||||
“三个。一个读数不稳,一个外壳破裂,一个可用。”
|
||||
|
||||
“医务?”
|
||||
|
||||
“急救贴片十二片,广谱抗感染凝胶两支,退热药四份,止血材料不足,消毒喷雾半瓶。完整医务箱还在残骸里,但位置危险。”
|
||||
|
||||
宁诚看向铃兰。
|
||||
|
||||
铃兰低声说:“食物只有古米带出去的那一小包,水还没有过滤。”
|
||||
|
||||
古米把背包放下,里面只剩几块压缩饼干、一只扁掉的金属杯、半袋盐和一把小刀。
|
||||
|
||||
宁诚看着这些东西,忽然想笑。
|
||||
|
||||
公司宣传片里,开拓者登陆异星,身后总有整齐的模块箱、自动展开的工厂、发光的建造平台和一排等候指令的无人机。
|
||||
|
||||
轮到他自己,终末地核心躺在山坡上冒烟,唯一激活权限套在腕上,包里还有一只漏水杯子和半袋盐。
|
||||
|
||||
前者暂时不能救命。
|
||||
|
||||
后者至少能熬粥。
|
||||
|
||||
笑意只在喉咙里停了一下,就被疼痛压没了。
|
||||
|
||||
村塾先生一直在旁边看。他听不懂这些人说什么,看得懂那只扁掉的金属杯和半袋盐。天上掉下来的东西也会饿,神怪也要为一口水皱眉头。
|
||||
|
||||
他和脚夫低声说了几句。脚夫急得直摇头,又指着山外。村塾先生也急,却还是咬着牙,转向宁诚,用汉字音挤出一句:
|
||||
|
||||
“村里,有人。伤。重。”
|
||||
|
||||
古米立刻抬头。
|
||||
|
||||
村塾先生指了指赫默手里的绷带,又指了指自己胸腹的位置,做了个发热发抖的动作。
|
||||
|
||||
“日本人打。病。快死。”
|
||||
|
||||
宁诚没有说话。
|
||||
|
||||
赫默的表情已经变了。
|
||||
|
||||
药箱里剩什么,赫默比谁都清楚。现在用掉一份,以后就少一份。
|
||||
|
||||
村塾先生看着他们的沉默,眼神一点点暗下去。他似乎误以为这些天上来的人拒绝了,脸上露出一种并不意外的苦笑。他拉了拉脚夫,想走。
|
||||
|
||||
宁诚在这时开口。
|
||||
|
||||
“等等。”
|
||||
|
||||
村塾先生停住。
|
||||
|
||||
宁诚指向残骸,又指向山外,再指向自己的胸口。
|
||||
|
||||
“我们,帮人。”
|
||||
|
||||
他又指向核心舱、药箱方向,再指向村塾先生和脚夫。
|
||||
|
||||
“你们,帮我们。”
|
||||
|
||||
村塾先生没完全听懂,但看懂了手势。他僵在那里,像在判断这是交易,还是陷阱。
|
||||
|
||||
宁诚扶着断裂舱板站起来,疼得眼前一黑。铃兰急忙扶住他。赫默皱眉,却没有阻止。
|
||||
|
||||
宁诚看着村塾先生,一字一顿地说:
|
||||
|
||||
“先救人。”
|
||||
|
||||
## 第 3 章:药换食物
|
||||
|
||||
村子离坠毁点并不远。
|
||||
|
||||
可这一段路走得极慢。
|
||||
|
||||
宁诚没跟去。他这副样子走不了夜路,残骸边也不能没人。赫默、古米和村塾先生下山,铃兰留下看着他。脚夫也留下,熟山路,能找水,能望风,真出事还能带他们绕开大路。
|
||||
|
||||
谈不上信任。
|
||||
|
||||
只是两边都没得挑。
|
||||
|
||||
赫默临走前,把一支急救凝胶和两片抗感染贴片放进贴身医疗包,又把剩下的药交给铃兰。
|
||||
|
||||
“如果我没回来,优先给博士退热和止血。”
|
||||
|
||||
铃兰抿紧嘴,没有接这句话。
|
||||
|
||||
宁诚靠在舱板旁,盯着赫默的医疗包。
|
||||
|
||||
“别把药当奇迹用。”
|
||||
|
||||
赫默看他一眼。
|
||||
|
||||
“我知道。”
|
||||
|
||||
“先清创,判断感染范围,补液,降温,抗感染贴片只给主伤口。凝胶能省则省。”
|
||||
|
||||
“我知道。”
|
||||
|
||||
“如果是败血症晚期,放弃。”
|
||||
|
||||
这一次,赫默没有马上回答。
|
||||
|
||||
古米站在旁边,手里攥着那把小刀。村塾先生看不懂他们的对话,但能听出声音里的冷。
|
||||
|
||||
赫默沉默了几秒,才说:“我会判断。”
|
||||
|
||||
宁诚点头。
|
||||
|
||||
“你是医生。”
|
||||
|
||||
这句话说出口,赫默的脸色才松了一点。
|
||||
|
||||
赫默转身进了林子。
|
||||
|
||||
村子藏在山坡下面,屋子低矮,竹篱歪斜,许多门窗都没点灯。人却都在。古米一靠近,门缝、墙后、草垛旁边,全有眼睛。
|
||||
|
||||
她想起舰上厨房里那些排队等饭的人。
|
||||
|
||||
那时候的目光也会集中在她身上,但里面有期待,有催促,有对热汤的放松。这里的目光不一样。这里的人看她,像看一把可能救命、也可能引来刀子的火。
|
||||
|
||||
村塾先生低声和几个村民说话,语速压得又急又碎,时不时回头看赫默和古米。有人摇头,有人哭,有人往后退。屋里最后出来一个老妇人,头发花白,背佝着,抬手指了指后面那间柴房。
|
||||
|
||||
柴房一开门,热气和臭味一起扑出来。
|
||||
|
||||
化脓伤口、汗、草药和排泄物混在一起,呛得古米差点屏住呼吸。赫默眉头只动了一下,已经蹲到草席边。
|
||||
|
||||
伤员躺在草席上,年纪不大,二十出头,脸烧得通红,嘴唇干裂。左腹到腰侧有一道被粗布缠住的伤,布已经被脓血浸硬。右肩还有瘀伤,手腕上有绳索勒过的痕迹。
|
||||
|
||||
枪伤,或者刺刀伤后感染。
|
||||
|
||||
拖得太久。
|
||||
|
||||
赫默先摸颈动脉,又掀开眼皮看瞳孔,再摸额头和四肢。村民围在柴房门口,紧张得连呼吸都压住了。古米挡在门边,尽量让自己的表情看起来无害。
|
||||
|
||||
村塾先生蹲在赫默旁边,低声说:“日本人……打。山路,抓。跑回来。”
|
||||
|
||||
赫默听不全,但足够了。
|
||||
|
||||
她打开医疗包。
|
||||
|
||||
柴房里响起一片吸气声。
|
||||
|
||||
消毒喷雾、纱布、薄薄的透明贴片、金属剪、软管和折叠水袋,在村民眼里像某种奇怪法器。一个妇人下意识伸手想摸,被古米轻轻拦住。
|
||||
|
||||
赫默先让村塾先生烧水。
|
||||
|
||||
烧水他们懂。洗手他们也懂。柴房门口被清开,潮闷的空气终于能往外走一点。赫默没有急着贴那片透明的东西,只反复比划:水,布,光,干净。
|
||||
|
||||
翻译模块断断续续,把赫默的“清创”“消毒”“感染风险”压成几个土得掉渣的词:洗伤口,脏东西,热病。赫默皱了下眉,没纠正。村民肯把水烧开、肯把脏布拿远,就够了。
|
||||
|
||||
村民终于动起来。有人去端水,有人把孩子往外赶,有人把门口那堆潮柴拖开。
|
||||
|
||||
赫默要的就是这个。不是让他们跪在旁边等天上人施法,是让他们自己也伸手。
|
||||
|
||||
水烧开又放温。赫默剪开脓血布条,伤口一露出来,门口有人低低哭了一声。伤口边缘肿得发黑,脓液带着臭味。赫默的手没抖。清创,冲洗,压迫止血,消毒,观察渗血,切开的抗感染贴片最后才贴上去。
|
||||
|
||||
古米在旁边帮忙递水。她看见伤员疼得全身抽搐,下意识想按住他,却被赫默摇头制止。
|
||||
|
||||
“让他咬这个。”
|
||||
|
||||
古米听懂了,把卷起的布递过去。伤员咬住,喉咙里发出模糊的低吼。
|
||||
|
||||
村塾先生的脸色越来越白。
|
||||
|
||||
他也许见过人死,却没见过这样救人。没有香灰,没有符水,没有草药糊满全身,只有刀、布、水和冷静到近乎残忍的手。
|
||||
|
||||
半个时辰后,伤口重新包扎好。
|
||||
|
||||
赫默把退热药掰开,只用了一半,又调了盐糖水,让古米用小勺一点点喂。伤员一开始吞不下去,后来终于咽了几口。
|
||||
|
||||
“能不能活,看今晚。”赫默对古米说。
|
||||
|
||||
古米把这句话用手势讲给村塾先生。她指了指伤员,又指了指天,再把手掌放平,做出“等”的动作。
|
||||
|
||||
村塾先生慢慢懂了。
|
||||
|
||||
老妇人忽然跪了下去。
|
||||
|
||||
古米吓了一跳,连忙去扶。赫默也伸手,却被更多村民围住。他们没有欢呼,也没有立刻信任,只是看她的眼神变了。
|
||||
|
||||
恐惧还在。
|
||||
|
||||
但恐惧里多了一点希望。
|
||||
|
||||
村塾先生从屋角搬出一小袋米,又拿了两个竹筒水。他犹豫很久,又让人取来几根粗绳和一副旧担架。
|
||||
|
||||
“你们山上,东西。”他用汉字音慢慢说,“我们,搬。”
|
||||
|
||||
赫默看着那袋米。
|
||||
|
||||
袋口一收,底下瘪下去大半。
|
||||
|
||||
对这个村子来说,已经是咬牙拿出来的东西。
|
||||
|
||||
古米抱起米袋时,手指收紧了一下。
|
||||
|
||||
柴房里的伤员忽然睁开眼,眼神涣散,却死死抓住村塾先生的袖子,嘴里吐出几个极轻的词。
|
||||
|
||||
村塾先生脸色骤变。
|
||||
|
||||
赫默问:“他说什么?”
|
||||
|
||||
古米听不懂。
|
||||
|
||||
村塾先生没有立刻翻译。他看了看门外,又看了看山上的方向,最后才低声说:
|
||||
|
||||
“有人……来消息。”
|
||||
|
||||
他顿了顿。
|
||||
|
||||
“查村。明天,也许今晚。”
|
||||
|
||||
## 第 4 章:抢救核心
|
||||
|
||||
赫默带着古米和三个村民回到残骸边时,宁诚没有说谢。
|
||||
|
||||
愿意帮忙是一回事,信不信他们是另一回事。话说多了,只会让人想逃。
|
||||
|
||||
他让铃兰把米收好,又让赫默报药物消耗。
|
||||
|
||||
“抗感染贴片用掉一片,切开后只覆盖主伤口。急救凝胶用了三分之一。退热药半份。消毒喷雾剩不到三分之一。”
|
||||
|
||||
宁诚点头,在心里改写清单。
|
||||
|
||||
药少了。
|
||||
|
||||
人多了。
|
||||
|
||||
山下知道这件事的人,也多了。
|
||||
|
||||
宁诚在心里把这笔账记上。交易刚开始,还远不到庆祝的时候。
|
||||
|
||||
三个村民里,一个瘦脚夫,一个村塾先生,另一个中年人一直不说话。那人肩膀宽,手上厚茧开裂,一看就是常年挑担砍柴。靠近残骸时,三个人都在发抖。核心舱那点蓝光一亮,脚夫半只脚已经往后撤。
|
||||
|
||||
宁诚让赫默把光遮住。
|
||||
|
||||
蓝光一灭,村民明显松了口气。
|
||||
|
||||
“先搬小件。”宁诚说。
|
||||
|
||||
赫默把他的话转成手势,古米再用自己刚学会的几个词和动作解释。村塾先生负责猜,猜完再告诉另外两个人。
|
||||
|
||||
一句“搬小件”,绕过赫默、古米、村塾先生,最后落到两个村民耳朵里,已经变成一串手势和半截词。
|
||||
|
||||
这套通信系统寒酸得可怜,偏偏还能用。
|
||||
|
||||
翻译模块也在旁边学。每一次“搬”“等”“火”“日本兵”被重复,它都会把新的音节塞进临时词表。宁诚看着那张缓慢增长的词表,知道再给它两三天,它至少能撑起日常命令。问题是,日本人未必会给他们两三天。
|
||||
|
||||
宁诚忍着疼,指向残骸内部。
|
||||
|
||||
完整终末地核心舱搬不走。它嵌在变形支架和半截山坡里,展开骨架还埋在泥、树根和烧塌的舱壁下面。宁诚只能抢主存储匣、应急运算模块,还有一个手掌大小的低功耗控制核。赫默拆接口,宁诚口述步骤,铃兰举着遮光布,古米和村民在外面清路。
|
||||
|
||||
第一次拆卸失败。
|
||||
|
||||
接口卡死,工具不匹配。赫默试图用备用夹具,夹具裂了。
|
||||
|
||||
宁诚脸色难看。
|
||||
|
||||
标准事故条令里,从来没有“用柴刀敲开终末地核心固定栓”这一项。
|
||||
|
||||
可现实不等流程。
|
||||
|
||||
他让古米把村民带来的砍柴刀递过来,又让脚夫找一块合适的石头。赫默看了他一眼,终于没有反对。三分钟后,固定栓被硬砸开,接口边缘裂了一道细口。
|
||||
|
||||
那声裂响钻进宁诚耳朵里,他后槽牙跟着一酸。
|
||||
|
||||
这枚控制核原本只是终末地核心展开后的早期调度组件。
|
||||
|
||||
现在,它沾着泥、血和石屑,被几个人从残骸里撬出来。像一块勉强保住的骨头。
|
||||
|
||||
身体还留在山坡上。
|
||||
|
||||
迟早会被人看见。
|
||||
|
||||
“继续。”
|
||||
|
||||
药箱更麻烦。
|
||||
|
||||
完整医务箱压在一块扭曲的内舱板下面。那块舱板至少几百斤,靠他们几个人搬不动。中年村民看了看,忽然叫脚夫和古米一起去砍几根木杆。他们用粗绳套住舱板边缘,又用木杆做杠杆,一点点把缝隙撬开。
|
||||
|
||||
赫默趴在泥地上,把手伸进去摸。
|
||||
|
||||
第一次摸出一包烧毁的止血棉。
|
||||
|
||||
第二次摸出半盒破裂的试剂。
|
||||
|
||||
第三次,终于摸到医务箱内层。
|
||||
|
||||
她把箱子拖出来时,手背被金属边划开,血滴在箱盖上。铃兰立刻要给她包扎,赫默却只看箱子。
|
||||
|
||||
锁坏了。
|
||||
|
||||
里面的东西还在,但冷藏格已经失效。几支需要低温保存的药物不能再按原效果估算。赫默的表情比受伤时更难看。
|
||||
|
||||
“损耗?”
|
||||
|
||||
“等回去清点。”她说,“现在不能确定。”
|
||||
|
||||
宁诚没追问。
|
||||
|
||||
能源包搬出两个,第三个外壳破裂,宁诚只让赫默拆掉识别片和接口板。数据模块找回四枚,另外两枚埋在更深处,暂时放弃。
|
||||
|
||||
放弃这个词说出来容易。
|
||||
|
||||
转身时,没人催。
|
||||
|
||||
那是地图、记录、航线、备份、可能还包括死去同伴最后几分钟的舱内数据。
|
||||
|
||||
铃兰站在残骸边,低声问:“真的不拿了吗?”
|
||||
|
||||
宁诚看着那片被压住的数据舱。
|
||||
|
||||
“拿不到。”
|
||||
|
||||
“以后呢?”
|
||||
|
||||
“以后再说。”
|
||||
|
||||
这是谎话。
|
||||
|
||||
所有人都听出来了。
|
||||
|
||||
主体残骸还趴在山坡上,“以后”两个字薄得像纸。
|
||||
|
||||
宁诚转过身,开始分派遮挡任务。显眼的发光面用泥糊住;反光金属用树枝盖住;脚印用树叶扫乱;溪边拖痕不必全抹,反而要留下几处看似山火逃生的混乱痕迹。
|
||||
|
||||
村民看不懂他为什么故意留下痕迹。
|
||||
|
||||
村塾先生问出来。
|
||||
|
||||
宁诚用石头在泥地上画:一条直线,被人看懂;一团乱线,被人误会。
|
||||
|
||||
村塾先生盯着那团乱线看了很久,慢慢点头。
|
||||
|
||||
“让他们,以为别的。”
|
||||
|
||||
宁诚点头。
|
||||
|
||||
就在这时,脚夫忽然抬手,示意所有人安静。
|
||||
|
||||
山下传来两声短促的鸟叫。
|
||||
|
||||
不是自然的鸟叫。
|
||||
|
||||
脚夫脸色变了,转头看村塾先生。村塾先生立刻往林子边走。片刻后,一个瘦小少年从树影里钻出来,连滚带爬,几乎摔到地上。
|
||||
|
||||
他不敢靠近残骸,只把一个卷起来的纸团塞给村塾先生,又急促说了几句话。
|
||||
|
||||
村塾先生听完,脸色比刚才更白。
|
||||
|
||||
宁诚看着他。
|
||||
|
||||
“消息?”
|
||||
|
||||
村塾先生捏着纸团,声音发紧。
|
||||
|
||||
“保长那边,有人说,日本兵问山里大响。还有怪光。”
|
||||
|
||||
他看向残骸,又看向众人刚刚搬出的核心和药箱。
|
||||
|
||||
“他们明天查村。也可能,天亮前先进山。”
|
||||
|
||||
宁诚低头看了一眼还没完全遮好的残骸。
|
||||
|
||||
时间窗口,缩短。
|
||||
|
||||
## 第 5 章:搜山前
|
||||
|
||||
口信一到,残骸边所有人都像被抽了一鞭。
|
||||
|
||||
宁诚把“不能乱”三个字咬在牙关里。疼痛反倒有用,至少能让他别昏过去。他坐在一块倒下的舱板上,面前摊着两张纸。一张是赫默写的物资,一张是村塾先生按他的意思画出的山路。
|
||||
|
||||
纸张不够,字迹歪斜,语言也拧巴。
|
||||
|
||||
可所有人都盯着它。
|
||||
|
||||
翻译模块的临时词表攒了二十多个词,“水”“米”“药”“山路”“日本兵”能分出来。长句还是废,短命令总算不用每次都画半天。再熬几天,交流会顺一点。
|
||||
|
||||
前提是他们有几天。
|
||||
|
||||
核心模块、主存储匣、两个能源包、内层医务箱、四枚数据模块、两件可拆工具、一卷线缆、一块可用的透明防护板。
|
||||
|
||||
东西少,偏偏每一样都压手。
|
||||
|
||||
村民带来的旧担架派上了用场。核心模块和能源包被裹进破布,用竹竿固定,外面再盖一层草。医务箱由赫默亲自背。数据模块贴身交给铃兰。古米背食物和水,顺手把那半袋盐也塞进包里。
|
||||
|
||||
宁诚原本想自己拿主存储匣。
|
||||
|
||||
赫默直接把东西从他手里拿走。
|
||||
|
||||
“你现在的任务是活着。”
|
||||
|
||||
宁诚看了她一眼。
|
||||
|
||||
赫默没有退让。
|
||||
|
||||
主存储匣最后交给中年村民。那人不知道自己背的是什么,只知道这东西让几个天上来的人盯得最紧。他把绳子在胸前打了两个死结,拍了拍,示意不会掉。
|
||||
|
||||
宁诚向他点头。
|
||||
|
||||
中年村民没笑,只回了一个点头。
|
||||
|
||||
要命的东西交到对方背上,对方没有扔下它逃走。现在他们只能把这叫信任。
|
||||
|
||||
遮挡残骸花了更久。
|
||||
|
||||
脚夫和古米把树枝拖过来,铃兰用泥涂在还能反光的金属面上。赫默负责拆掉几处仍在闪烁的识别灯。宁诚让他们保留一部分烧焦外壳,又故意把几块普通合金碎片散在塌方边缘。
|
||||
|
||||
“像爆炸。”他对村塾先生说。
|
||||
|
||||
村塾先生盯着那些碎片,忽然问:“如果他们,看懂?”
|
||||
|
||||
宁诚过了一会儿才答。
|
||||
|
||||
“他们现在看不懂。”
|
||||
|
||||
“以后?”
|
||||
|
||||
“以后会。”
|
||||
|
||||
村塾先生听懂了这个“以后”。他没有露出意外,只像又背上了一袋看不见的米。
|
||||
|
||||
“所以,你们要走?”
|
||||
|
||||
宁诚看着山下。
|
||||
|
||||
“先藏。”
|
||||
|
||||
藏到哪里去,才是麻烦。
|
||||
|
||||
村塾先生不愿意让他们直接进村。村里已经藏了伤员,再藏这几个来历不明的人,一旦日军查到,全村都要遭殃。脚夫提出溪谷上游有个废炭棚,雨季没人住,离村不算远,也能通往另一条山路。
|
||||
|
||||
宁诚同意。
|
||||
|
||||
他们不进村。
|
||||
|
||||
村民也不来残骸边停留太久。
|
||||
|
||||
炭棚先当中转点。
|
||||
|
||||
规矩也得立起来。
|
||||
|
||||
药物由赫默保管,除非伤员恶化,否则不再随意使用。
|
||||
|
||||
核心模块和能源包藏在炭棚后的石缝里,用湿草和木炭遮味。
|
||||
|
||||
村塾先生只告诉两个人山上藏了“受伤外乡人”,不提残骸。
|
||||
|
||||
脚夫负责在村和炭棚之间传话。
|
||||
|
||||
古米可以跟脚夫下山取水,但不能单独行动。
|
||||
|
||||
铃兰留在宁诚身边,必要时转移数据模块。
|
||||
|
||||
赫默的无人机每天只飞两次,每次不超过五分钟。
|
||||
|
||||
宁诚说到这里,赫默忽然插话:“一次。”
|
||||
|
||||
宁诚看她。
|
||||
|
||||
“电量不足。我们不知道什么时候才能充电。每天两次太奢侈。”
|
||||
|
||||
宁诚沉默一秒,改口。
|
||||
|
||||
“每天一次。除非发现追兵。”
|
||||
|
||||
村塾先生看见了,眼神动了一下。
|
||||
|
||||
这个受伤的男人会被反驳,会改口。
|
||||
|
||||
天上来的人,也不是一块铁板。
|
||||
|
||||
天边发白时,最后一批东西才转完。
|
||||
|
||||
宁诚被古米和中年村民半扶半架地带到炭棚。炭棚比想象中还破,屋顶漏了几处,地上全是潮气和炭灰。好在有墙,有遮蔽,后面还能听见溪水声。
|
||||
|
||||
铃兰把数据模块藏好,才坐到宁诚旁边。她累得脸色发白,却还是先问:“博士,疼吗?”
|
||||
|
||||
宁诚想说还好。
|
||||
|
||||
但他说出口的是:“疼。”
|
||||
|
||||
铃兰愣了一下。
|
||||
|
||||
宁诚靠在墙上,闭着眼说:“所以我现在不会乱动。”
|
||||
|
||||
铃兰低下头,轻轻嗯了一声。
|
||||
|
||||
赫默在角落清点医务箱。古米把米袋打开,认真数里面还能熬几顿粥。村塾先生站在门口,望着山下那片还没亮起来的村子。
|
||||
|
||||
这一夜拖到现在,还没肯放人。
|
||||
|
||||
他们只是暂时没死。
|
||||
|
||||
脚夫忽然从外面跑进来,气喘得说不出完整句子。他指着山路方向,又比了一个拿枪的动作。
|
||||
|
||||
村塾先生脸色骤然变了。
|
||||
|
||||
“来了。”
|
||||
|
||||
宁诚睁开眼。
|
||||
|
||||
远处的山林里,隐约传来人声。不是一个人,也不是村民低声说话。那声音断断续续,伴着金属碰撞和树枝被拨开的声响,正沿着山路往上。
|
||||
|
||||
赫默抬起头。
|
||||
|
||||
古米握紧小刀。
|
||||
|
||||
铃兰把藏数据模块的布包往身后推了推。
|
||||
|
||||
宁诚看向门外那片灰白色的晨雾。
|
||||
|
||||
工厂没有,军队没有,地图也没有。翻译模块还在磕磕绊绊地学当地话。
|
||||
|
||||
几件抢出来的东西,几个人,一条刚立下的临时规矩。
|
||||
|
||||
“按刚才说的做。”
|
||||
|
||||
他说。
|
||||
|
||||
“谁都不要先跑。”
|
||||
|
||||
|
||||
+249
-82
@@ -2,162 +2,329 @@
|
||||
|
||||
## 第 1 章:我不是博士
|
||||
|
||||
宁诚醒来时,最先钻进鼻腔的是一股焦糊味。
|
||||
“博士?”
|
||||
|
||||
那不是木头烧干的枯燥味道。它更尖锐,带着被烧穿的绝缘层、冷却液和金属粉末混合出的辛辣,像一根细针扎进肺里。
|
||||
声音贴着耳根钻进来,轻得像是怕碰碎了什么。
|
||||
|
||||
他想咳,胸口却像是压了一整块沉重的舱壁,让他只能憋住一口气。
|
||||
宁诚没睁眼,先尝到嘴里的铁锈味——那不是单纯的血气,更像是什么金属被高温烤化后,混进喉咙里的黏稠涩感。
|
||||
|
||||
“博士。”
|
||||
他想咳嗽,胸口却猛地一紧,左肋下方被生生扯了一下,疼得他倒吸一口冷气。
|
||||
|
||||
有人贴在他耳边低唤。那声音压得极低,仿佛在小心翼翼地试探林子里的某种生物。
|
||||
“博士?”
|
||||
|
||||
*博士?*
|
||||
又叫了一声。
|
||||
|
||||
宁诚在黑暗里怔了一下。
|
||||
我不是博士。
|
||||
|
||||
他没叫博士。
|
||||
这念头来得没头没尾。
|
||||
|
||||
他叫宁诚。
|
||||
他记得自己叫宁诚,至少这个名字还在脑子里清晰着。至于博士是谁、谁在叫博士、以及自己为什么横在这里……
|
||||
|
||||
这个念头比疼痛更早蹦出来,清晰得有些不合时宜。他差点张嘴反驳,话刚到喉咙口,一阵血腥味就顶了回来。
|
||||
脑子里的记忆像是被粗糙的抹布刷过,只剩下一道道模糊的水痕。
|
||||
|
||||
不对。哪里都不对。
|
||||
他睁开眼。
|
||||
|
||||
他记得自己的名字,记得一些零碎到无法安放的常识。可他不记得自己为什么会躺在这里,不记得是谁在叫他,也不记得这股焦糊味之前发生了什么。记忆像是被一刀切断,断口后面全是死寂的黑。
|
||||
视野最初是混沌的白,过了几秒才聚成一张脸。银白色的发梢垂下来,鼻尖沾着些许灰尘。
|
||||
|
||||
宁诚睁开眼。视野里晃过一片银白色的发梢。铃兰跪在他身旁,脸上蹭着灰,耳朵耷拉下来,手里攥着一卷已经发暗的止血绷带。她对上他的视线,眼睛亮了一瞬,随即又低下头去盯着他的伤口。
|
||||
那耳朵——不是人的耳朵,毛茸茸的,尖尖的,正贴着头皮往后压。
|
||||
|
||||
宁诚脑子里有什么东西闪了一下。不是记忆,更像是某个遥远的游戏画面被疼痛和眩晕拽到眼前:银发,狐耳,铃兰。他知道这个名字,却不敢确认。如果这是真的,那很多事就不再只是坠毁事故那么简单。
|
||||
|
||||
女孩跪在他旁边,手里紧攥着一卷发暗的绷带。她对上他的视线,眼睛亮了一下,随即又垂下眼睑,死死地盯着他的伤口。
|
||||
|
||||
“您醒了。”
|
||||
|
||||
宁诚没立刻接话。视野一半模糊,一半像隔着一层水。右耳几乎失聪,只剩左耳里一点挥之不去的嗡鸣。左肋和后肩疼得最实在,每吸一口气,都像是有一根钝针从骨缝里往里顶。
|
||||
宁诚没应声。
|
||||
|
||||
他垂下眼帘。
|
||||
右耳里嗡鸣作响,像有一只蜜蜂被关进了颅腔;左耳勉强还能用,能听见远处断断续续的水声。
|
||||
|
||||
那只手骨节修长,手背上全是干涸的血和细小的擦伤,腕侧扣着一只他从未见过的金属环。它外壳有明显的擦痕,透明面板裂开一道细纹,但内部的权限灯依然稳定地亮着。这东西不像普通的随身设备,更像一把钥匙。
|
||||
他动了动右手。手指还能弯曲,就是僵硬得厉害。手背上结了一块暗红的血块,腕侧扣着一只金属环。外壳裂开一道细纹,里面的光却稳如磐石。
|
||||
|
||||
*权限确认。*
|
||||
*身份:博士。*
|
||||
*终末地核心激活权限:唯一持有人。*
|
||||
*当前核心状态:坠毁锁定,待人工确认。*
|
||||
权限确认。
|
||||
|
||||
宁诚喉咙发紧。陌生的身体,陌生的称呼,陌生的权限,还有那句听起来足够荒唐的“终末地核心”,全都在等他给个回应。
|
||||
身份:博士。
|
||||
|
||||
他试着动了动手指。能动。
|
||||
他试着抬起右手。手背上的血块让它显得有些僵硬。
|
||||
他试着抬起左手。铃兰立刻按住他的肩膀。
|
||||
终末地核心激活权限:唯一持有人。
|
||||
|
||||
“不要动,赫默医生说您的肋骨可能有裂伤。”
|
||||
当前核心状态:坠毁锁定,待人工确认。
|
||||
|
||||
宁诚死死盯着“唯一持有人”那几个字。金属环贴着腕骨的皮肤,有些烫手。他本能地想把它摘下来,指尖刚触碰到锁扣,环边立刻亮起一圈警告般的红光。
|
||||
|
||||
权限设备不可移除。
|
||||
|
||||
当前环境危险。
|
||||
|
||||
请保持佩戴。
|
||||
|
||||
女孩也看见了那圈红光,脸色瞬间紧绷。她伸手想按住他的手,却在半空中迟疑地停住,似乎怕弄疼他。
|
||||
|
||||
“博士,别碰。”她压低声音,“赫默医生说它还在维持核心识别。”
|
||||
|
||||
宁诚看着那只悬在半空的手。手指上沾着灰和血,正微微颤抖。她比自己还要慌乱,却拼命把声音放轻。
|
||||
|
||||
“我没摘。”他说。
|
||||
|
||||
这三个字出口时,他自己都觉得有些别扭。女孩却松了一口气,把绷带重新按回他的左肋下方。
|
||||
|
||||
“您别动,赫默医生说肋骨可能有裂伤。”
|
||||
|
||||
宁诚闭上眼。
|
||||
|
||||
*肋骨裂伤,轻度失血,左肩挫伤,右耳暂时性听觉损伤。*
|
||||
肋骨裂伤,轻度失血,左肩挫伤,右耳暂时性听觉损伤。
|
||||
|
||||
这些词一个接一个在脑中跳出,像有人把急救手册塞进了他的脑袋里。他知道它们代表什么,却分不清这是自己的知识储备,还是这具身体自带的本能。
|
||||
这些词不知从哪儿冒出来,一个接一个地在脑海里蹦。他甚至都不知道这些算不算自己的知识。
|
||||
|
||||
至少还能说话。至少还能思考。
|
||||
“我现在能不能坐起来?”
|
||||
|
||||
女孩立刻摇头,又朝旁边张望,想叫人。
|
||||
|
||||
“先别叫。”宁诚说,“告诉我,哪儿在出血。”
|
||||
|
||||
女孩愣了一下,低头把他左侧衣料往旁边挪开半寸。暗色的血迹已经浸透了里层。
|
||||
|
||||
“这里压住了。后肩还有一道口子,赫默医生贴过临时止血片。头部没有大出血,可您刚才一直叫不醒。”
|
||||
|
||||
她说话很慢,说到“叫不醒”时,眼睛又红了一点,随即赶紧低头去整理绷带,用动作掩饰住脸上的表情。
|
||||
|
||||
“赫……默。”
|
||||
|
||||
他的声音哑得厉害。这个名字不是他想出来的,而是在铃兰话音刚落时,腕环自动调出了一行人员标签:*赫默,医疗与科研支援。* 宁诚盯着那两个字,像溺水的人抓住漂来的木片。
|
||||
宁诚的声音哑得厉害。
|
||||
|
||||
铃兰立刻回头。
|
||||
这个名字不是他随口编出来的。
|
||||
|
||||
不远处,赫默正蹲在一块断裂的黑色舱板前。她身边浮着一架小型无人机,外壳有一角开裂,飞行姿态摇晃,悬在半空时会轻微偏斜。它腹部的灯光忽明忽暗,把周围的树干、泥水和扭曲的残骸照得阴晴不定的。
|
||||
它和铃兰一样,从某个游戏画面里浮出来,他知道她大概是医生,却不知道她在这个现实里会怎么判断他的伤。
|
||||
|
||||
听到宁诚醒来,赫默转过身。她的脸上没有放松的神色。
|
||||
女孩话音刚落时,腕环自动跳出一行标签:赫默,医疗与科研支援。
|
||||
|
||||
“你昏迷了约四十七分钟。现场时间不完全可靠,核心计时有跳变。”
|
||||
女孩立刻回头。
|
||||
|
||||
宁诚听懂了一半。另一半听不懂。系统不可靠,定位不可靠,坠毁前的数据也未必可靠。每一个词都像在往下拽他的胃。
|
||||
不远处,一个女人正蹲在一块断裂的黑色舱板前。
|
||||
|
||||
赫默多看了他两秒。那眼神不像在看病人,倒像是盯着一份读数不对的报告。
|
||||
她身边浮着一架小型无人机,外壳缺了一角,飞起来歪歪斜斜的,腹部的灯光一明一灭,把周围的树干、泥水和扭曲的金属照得阴晴不定。
|
||||
|
||||
“博士,”她问,“你还记得坠毁前的事吗?”
|
||||
听到宁诚醒来,她转过身。脸上并没有预想中的放松。
|
||||
|
||||
“你昏迷了约四十七分钟,现场时间不完全可靠,核心计时有跳变。”
|
||||
|
||||
她走近时没有直接蹲下,先扫了一眼宁诚的瞳孔,又看一眼腕环上的生命体征。无人机跟着下沉,光束从他的脸侧移到胸口,最后落在左肋。
|
||||
|
||||
女孩立刻让开一点空间,用自己的身体挡住风吹来的烟。
|
||||
|
||||
“右耳听得见吗?”
|
||||
|
||||
宁诚偏过头,迟疑了一下:“不太行。”
|
||||
|
||||
“左手握拳。”
|
||||
|
||||
左肩疼得他眉头一跳,手指还是合上了。
|
||||
|
||||
“右脚动一下。”
|
||||
|
||||
泥水里传来轻微的摩擦声。
|
||||
|
||||
赫默低声报出判断:“意识清醒,基础运动反应存在。短时记忆断层,身份记忆异常。暂不排除冲击性脑损伤和权限环介入。”
|
||||
|
||||
“权限环介入是什么意思?”
|
||||
|
||||
赫默看了他一眼,没立刻回答。她伸手在腕环侧面点了两下,调出一列宁诚看不懂的诊断项。红色太多,绿色太少。她的指尖停在其中一项上,最后只说:
|
||||
|
||||
“它在保护核心权限,也在保护你。具体机制,等我们活过今晚再查。”
|
||||
|
||||
赫默又多看了他两秒:“博士,你还记得坠毁前的事吗?”
|
||||
|
||||
宁诚停了一下。
|
||||
他想说:*我不是博士。*
|
||||
他想问:*你们是谁?*
|
||||
他还想问:*我是不是已经死了?*
|
||||
|
||||
可铃兰的手还按在他肩旁,赫默的无人机灯光还在晃,远处残骸里偶尔炸出一点电火花。所有东西都太真了,真得不给他发疯的时间。
|
||||
他想说:我不是博士。
|
||||
|
||||
他想问:你们真的是铃兰和赫默?
|
||||
|
||||
他还想问:我是不是已经死了?
|
||||
|
||||
可女孩的手还按在他肩旁,赫默的无人机灯光还在晃动,远处残骸里偶尔炸出一点电火花。所有东西都太真了,真到不给他发疯的时间。
|
||||
|
||||
“不记得。”
|
||||
|
||||
铃兰的手指一下攥紧了绷带。她嘴唇动了动,话没出来,按在宁诚左肩旁的手又往旁边挪了半寸。
|
||||
女孩的手指下意识地攥紧了绷带。她嘴唇动了动,话没出来。
|
||||
|
||||
赫默没有追问。她只是把视线落到他腕侧的权限环上,又移开。
|
||||
赫默没有追问。她把视线落到宁诚腕侧的权限环上,又移开。
|
||||
|
||||
“创伤后记忆缺失。”她说,“先按这个处理。”
|
||||
|
||||
她侧过脸,声音压到只有铃兰能听清:“铃兰,记录他的反应。”
|
||||
她侧过脸,声音压到只有女孩能听清:“铃兰。”
|
||||
|
||||
*先。* 宁诚听见了。
|
||||
也就是说,不是没人怀疑他。只是现在没空处理他。
|
||||
先。
|
||||
|
||||
他看向四周。空气湿热,地面一踩就往下陷。草叶宽得不像任何熟悉的绿化带,树影压在头顶,断裂的舱段斜插在山坡上,像一条被掰断脊骨的金属鱼。腹部翻开,线缆、隔热层和烧黑的支架全露在外面。几段舱壁上还有折叠轨、嵌套接口和支撑脚的残片,像某种没来得及展开的地面设施。更远处有一条细溪,水声被夜色和烟压住,只剩一点断断续续的动静。
|
||||
宁诚听见了。也就是说,不是没人怀疑他,只是现在没空处理他。
|
||||
|
||||
飞船的主体不在这里,或者说,这里只是残骸的一角。
|
||||
铃兰从腰包里摸出一块薄薄的记录板。她跪在宁诚旁边,一边观察着他,一边用指尖艰难地输入。
|
||||
|
||||
核心舱残片还在低功耗闪烁。那点蓝白色的光在黑暗里显眼得刺目。腕环把它标成“终末地核心舱”,状态栏后面却连续挂着三个红色限制:*结构不完整,能源不足,展开失败。*
|
||||
“你记得自己的姓名?”赫默继续问。
|
||||
|
||||
宁诚张了张嘴,第一句差点问成:“这是哪儿?”
|
||||
腕环边缘又亮了一下,应急界面把一行字推到最上面:
|
||||
*幸存人员确认。*
|
||||
“宁诚。”
|
||||
|
||||
他把这几个字咽下去,换成另一个问法。“还有谁活着?”
|
||||
铃兰的手指停住了。
|
||||
|
||||
赫默推了推眼镜。“确认可行动三人。你,铃兰,我。古米离开现场,去找水和食物,离开时间约二十六分钟。其他舱段没有回应,近距离生命信号不稳定,残骸干扰太强。”
|
||||
“记得开拓队编号?”
|
||||
|
||||
宁诚把这些名字在脑子里过了一遍。
|
||||
*你,铃兰,我。古米离开现场。其他舱段没有回应。*
|
||||
开拓队也好,外勤组也好,到了这会儿只剩几个能喘气的人了。
|
||||
宁诚沉默。
|
||||
|
||||
“记得终末地核心的部署目标?”
|
||||
|
||||
仍然没有答案。
|
||||
|
||||
“记得铃兰?”
|
||||
|
||||
宁诚看向跪在身边的少女。铃兰也看着他,眼神里闪过一丝不敢靠近的期待。他脑子里有画面——游戏立绘、技能特效、档案里几句零碎的描述。
|
||||
|
||||
那不是共同经历,但确实是“认识”。
|
||||
|
||||
“记得。”他说。
|
||||
|
||||
铃兰的眼睛亮了一下,像有什么东西刚要浮起来。
|
||||
|
||||
宁诚没让她浮起来:“我记得你叫铃兰……可我不记得我们一起经历过什么。”
|
||||
|
||||
铃兰眼里的光凝在半空。她嘴唇动了动,没出声,低头继续记录。指尖错了一次,又删掉重写。
|
||||
|
||||
赫默的表情没有变化:“记得我?”
|
||||
|
||||
“记得。”宁诚说,“赫默,黎博利,莱茵生命。”他停了一下。
|
||||
|
||||
赫默的指尖在记录板边缘停住。
|
||||
|
||||
“记得古米?”
|
||||
|
||||
“记得。熊耳,背包,总是笑着,负责后勤和吃的。”宁诚顿了顿,“如果她现在出现在我面前,我应该能认出她。”
|
||||
|
||||
赫默沉默了几秒,她把记录板放低,低声说:“记录:主观自我姓名为宁诚,权限身份为博士。声称识别人名,但否认拥有共同记忆。信息来源待确认。”
|
||||
|
||||
赫默没有把他当成失忆的博士,而是当成一个知道太多、又无法解释来源的人。
|
||||
|
||||
可她已经起身,转向残骸方向,没有给他追问的机会。
|
||||
|
||||
他看向四周。
|
||||
|
||||
空气湿热,地面一踩就往下陷。草叶宽得不像任何熟悉的绿化带,树影压在头顶,断裂的舱段斜插在山坡上。舱体腹部翻开,线缆、隔热层和烧黑的支架全露在外面。
|
||||
|
||||
更远处有一条细溪,水声被夜色和烟雾压住,只剩一点断断续续的动静。
|
||||
|
||||
飞船的主体不在这里,或者说,这里只是残骸的一角。核心舱残片还在低功耗闪烁。那点蓝白色的光在黑暗里显眼得刺目。
|
||||
|
||||
腕环把它标成“终末地核心舱”,状态栏后面却连续挂着三个红色限制:
|
||||
|
||||
结构不完整、能源不足、展开失败。
|
||||
|
||||
宁诚张了张嘴,差点问成:这是哪儿?
|
||||
|
||||
腕环边缘又亮了一下,应急界面把一行字推到最上面:幸存人员确认。
|
||||
|
||||
他把这几个字咽下去,换成另一个问法:“还有谁活着?”
|
||||
|
||||
赫默推了推眼镜。“确认可行动三人。你,铃兰,我。古米离开现场,去找水和食物,离开时间约三刻钟。其他舱段没有回应,生命信号不稳定,残骸干扰太强。”
|
||||
|
||||
“不可行动的呢?”
|
||||
|
||||
赫默的嘴唇抿了一下。
|
||||
|
||||
铃兰的记录板发出轻微提示音,她立刻按掉,像怕那声音太刺耳。
|
||||
|
||||
赫默说:“二号舱段没有生命信号。三号舱段被主体结构压住,热源异常,无法靠近。外勤人员名单不完整,权限环只读到几个损坏标签。”
|
||||
|
||||
她停顿片刻,报出几个名字。宁诚一个都不认识。每个名字后面都跟着状态:失联、无法确认、信号中断……
|
||||
|
||||
宁诚听到第三个时,胃部已经收紧。等赫默报完,他才发现铃兰一直没有抬头。她把记录板抱在怀里,眼睛盯着地面,像是怕看见什么。
|
||||
|
||||
“他们有可能还活着吗?”
|
||||
|
||||
赫默没有安慰他:“有。但现在进去,我们可能会多死两个。”
|
||||
|
||||
宁诚有些找不到反驳的空间。开拓队也好,外勤组也好,到了这会儿只剩几个能喘气的人了。
|
||||
|
||||
宁诚盯着那片蓝白色的核心光。腕环上“终末地核心舱”几个字跳了跳。他不知道自己为什么会问这个,可能是因为那东西亮得太刺眼,也可能是因为所有人的目光都在等他开口。
|
||||
|
||||
“核心状态。”
|
||||
|
||||
“低功耗运行。主数据库没有完全丢失,但接口损毁严重。终末地核心展开协议还在,执行条件全部不满足。能源包可读数不足二成。无人机两架,一架可飞,一架只能短距悬停。医务箱还在,但我只抢出了外层急救包,完整库存需要回残骸里取。”
|
||||
“低功耗运行。主数据库没有完全丢失,但接口损毁严重。终末地核心展开协议还在,执行条件全部不满足。医务箱还在,但我只抢出了外层急救包,完整库存需要回残骸里取。”
|
||||
|
||||
宁诚想站起来。
|
||||
这个念头刚冒出来,身体就先替他否决了。眼前一黑,左肋像被人从里面掰开。铃兰急忙扶住他,他才发现自己连坐起来都费劲。
|
||||
“展开失败会怎样?”
|
||||
|
||||
“现在不会怎样。”赫默说,“只是不能部署基础设施。再坏一点,主数据库断电,权限链丢失,我们就只剩一堆不能用的硬件。”
|
||||
|
||||
“最坏呢?”
|
||||
|
||||
“核心控制核被别人拿走,或者被摧毁。”赫默的视线落在那片蓝白光上,“那我们就没有回收方案,也没有重建方案。”
|
||||
|
||||
宁诚明白了。人可以走,核心不能丢。
|
||||
|
||||
铃兰忽然开口:“博士,您以前说过,核心是种子。”
|
||||
|
||||
宁诚看向她。
|
||||
|
||||
铃兰咬了咬唇,像是后悔自己突然插话,但还是继续说:“您说,只要种子还在,很多事就可以以后再想。人活着,种子还在,就还有办法。”
|
||||
|
||||
宁诚不知道原来的博士是不是真的这么说过。
|
||||
|
||||
他想站起来。这个念头刚冒出来,身体就先替他否决了。
|
||||
|
||||
眼前一黑,左肋深处猛地剧痛。铃兰急忙扶住他,他才发现自己连坐起来都费劲。
|
||||
|
||||
别慌。
|
||||
|
||||
他在心里重复一遍。
|
||||
|
||||
*别慌。* 他在心里重复一遍。
|
||||
没用。
|
||||
他还是慌。只是慌也得喘气,而每喘一次气都会带来一阵剧痛。疼痛反倒把他钉回了眼前。
|
||||
|
||||
“火。”赫默知道他在问什么。“明火已经扑掉了大部分。但热源还在,烟也还在。无人机上升到树冠高度,看见东南方向有零散火光,距离无法精确判断。那里可能有人。”
|
||||
他还是慌。只是慌也得喘气,而每喘一次气都会带来一阵剧痛。
|
||||
|
||||
*有人。* 宁诚后脑勺发麻。
|
||||
在无人星球上,残骸暴露最多是资源问题。这里有火光,就意味着有人。有人看见这堆东西,就会来摸、来抢、来问。问不出来,也可以先开枪。何况这东西还不是废铁,它原本应该落地展开,变成一枚终末地种子。
|
||||
赫默知道他想问什么:“现场明火已经压下去大部分,但热源还在,核心舱外壳温度没降。”
|
||||
|
||||
他环视现场。视线扫过核心舱、能源包残片、赫默的医务包,又扫回腕环上的应急条令。
|
||||
不是他会指挥,而是屏幕上就剩这些东西还能被叫出名字。
|
||||
她调出无人机刚才记录的低清热成像,画面抖得厉害,树冠间隐约有几处橘红色亮点。
|
||||
“另外,东南方向有集中热源,分布不规则,亮度稳定。不像自然山火。”
|
||||
|
||||
宁诚用还能动的右手指向核心舱。“核心、能源包、医务箱、数据模块。”他说得比自己想象中慢,“先按这个排。能搬的搬,不能搬的拆。发光面盖住,反光金属用泥和树枝遮。”
|
||||
“智慧生命?”宁诚后脑勺发麻。
|
||||
|
||||
他停了一下,喉咙里全是铁锈味。“烧焦的别全灭。留一点,像山火。”
|
||||
“或者任何会用火的东西。”赫默没有肯定。
|
||||
|
||||
赫默看着他:“你现在站都站不稳。”
|
||||
“距离?”
|
||||
|
||||
宁诚看了一眼自己的手。手在抖。
|
||||
他把手指蜷起来,声音压低,“所以你执行。”
|
||||
“如果地形没有严重误差,最近的步行距离不超过半小时。”
|
||||
|
||||
这句话说完,宁诚自己先咳了一声。胸腔里一股铁锈味泛上来,他偏头吐掉,发现唾沫里有血丝。铃兰的脸色白了。
|
||||
宁诚闭了闭眼。半小时。这不是理论上的风险,这是随时会走到眼前的智慧生命。
|
||||
|
||||
宁诚没有看她。他盯着那片低功耗闪烁的核心光,声音沉下去。“事故应急条令。”宁诚照着腕环念,“第一条,保全人员。第二条,保全终末地核心。第三条,误导未授权接触者。”
|
||||
“声音呢?”
|
||||
|
||||
腕环里的应急协议一条条亮着。坏掉的是现场,是能源,是那具横在山坡上的终末地核心舱。
|
||||
宁诚念到“保全终末地核心”时,自己都觉得这句话有些荒唐。
|
||||
“爆炸声不可能没听见。”赫默说,“坠毁时有二次解体,光也很明显。”
|
||||
|
||||
可赫默的视线又落到他脸上。她沉默片刻,转身把无人机高度压低。
|
||||
“铃兰,看住他。博士如果再试图自己搬东西,你就叫我。”
|
||||
铃兰用力点头。
|
||||
铃兰小声补了一句:“古米就是往有水声的方向走的。”
|
||||
|
||||
宁诚看向她:“她一个人去的?”
|
||||
|
||||
“她说她跑得快。”铃兰声音更低,“她还说,您醒来前必须有水。”
|
||||
|
||||
宁诚没有说话。
|
||||
|
||||
他环视现场。视线扫过那片扭曲的金属、泥水和烟,最后落回腕环。
|
||||
|
||||
应急界面上跳动着几行字,他努力辨认:核心舱、能源包、数据模块、医务箱。那些字他都认识,但组合在一起,却像是某种陌生的指令。
|
||||
|
||||
“我们……有什么能做的?”他问。
|
||||
赫默没有立刻回答。她看了一圈现场,目光落在还在冒烟的残骸上,又落回宁诚身上。
|
||||
|
||||
“你躺着。”她说,“铃兰看着你。别的,天亮前都做不了。”
|
||||
宁诚想反驳,左肋的疼让他把话咽了回去。
|
||||
|
||||
远处山坡上传来一声细响。
|
||||
|
||||
宁诚想说自己没那么脆弱,话到嘴边,又被远处山坡上传来的一声细响截住。
|
||||
那不是残骸冷却的声音。
|
||||
是树枝被踩断的脆响。
|
||||
|
||||
赫默的无人机立刻调转镜头。铃兰抬头,尾巴绷紧。宁诚伸手摸向身边,摸到的却不是武器,只是一截断裂的工具柄。他攥住那截工具柄,掌心全是冷汗。
|
||||
下一秒,林子边缘的灌木被拨开。一个矮小的身影先探出来,熊耳上挂着泥,背包歪在一边,喘得像刚跑完一段要命的山路。
|
||||
|
||||
下一秒,林子里传来低沉的喘息声。
|
||||
是古米。
|
||||
|
||||
她身后还跟着两个当地人。一个瘦骨嶙峋,肩上搭着破布,腿脚有伤,手里死命攥着一根竹杖;另一个年纪稍大些,穿着洗得发白的长衫,袖口卷起,脸上写满了恐惧与警惕。他们看见残骸的一瞬间,脚步齐齐停住。
|
||||
|
||||
古米顾不上他们。她喘着气:“博士,赫默医生,我回来了。”
|
||||
|
||||
宁诚看着那两个陌生人,又看向古米。
|
||||
|
||||
游戏里的古米总是笑着,眼前这个却浑身是泥,眼里全是惊惶。
|
||||
|
||||
+182
-48
@@ -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 @@
|
||||
|
||||
“你们,帮我们。”
|
||||
|
||||
村塾先生没完全听懂,但看懂了手势。他僵在那里,像在判断这是交易,还是陷阱。
|
||||
村塾先生没完全听懂,但看懂了手势。他僵在那里,迟迟不敢表态。
|
||||
|
||||
宁诚没有等他点头,先把条件拆得更小:
|
||||
赫默下山。古米跟着。只带一点药。脚夫留下。
|
||||
宁诚没有等他点头,先把条件拆得更小:赫默下山。古米跟着。只带一点药。脚夫留下。
|
||||
|
||||
宁诚用手势把这些事一件一件摆出来。村塾先生看着他指向赫默的医疗包,又看着他指向脚夫,脸色先变了一下,随后慢慢明白过来。
|
||||
他用手势把这些事一件一件摆出来。村塾先生看着他指向赫默的医疗包,又看着他指向脚夫,脸色先变了一下,随后慢慢明白过来。
|
||||
|
||||
这不是信任,这是互相扣住一点要命的东西。
|
||||
|
||||
赫默带着药下山,村里就有救人的机会;脚夫留在残骸边,村塾先生就不至于带着人一走了之。宁诚一方没有把全部药物亮出来,村里也没有把所有人暴露出来。每个人都留一半在对方手里。
|
||||
|
||||
村塾先生低声和脚夫说了几句。脚夫猛地摇头,眼睛往残骸深处瞟,像宁愿拖着伤腿也不想留在这堆从天上掉下来的铁骨旁边。
|
||||
村塾先生沉默得很久。他看向脚夫,又看向山下。脚夫急得说了一长串话,语气里全是拒绝。村塾先生听完,没有立刻骂他,只伸手按住他的肩膀,低声回了几句。
|
||||
|
||||
翻译模块只抓到两个词:家里,孩子。
|
||||
|
||||
宁诚这才明白,脚夫怕的不只是残骸。他怕自己留下以后,村里的人以为他把外人带上山,怕日本人查到他家,怕自己一条伤腿跑不掉。
|
||||
|
||||
宁诚指了指脚夫,又指向铃兰旁边的位置。
|
||||
|
||||
“不绑。不打。给水。”
|
||||
|
||||
他不知道对方能听懂多少,只能把语气放慢。古米跟着比划,先摆手表示不伤害,再做出喝水动作。
|
||||
|
||||
赫默补了一句:“他的脚要重新包。”
|
||||
|
||||
村塾先生听懂了“包”这个动作。他看向脚夫的脚,又看向赫默手里的绷带,脸上的犹豫更重。留下脚夫是风险,但脚夫的脚也确实撑不住再跑一趟山路。
|
||||
|
||||
“我们也留人。”宁诚又指了指古米,“她跟你下去。”
|
||||
|
||||
古米立刻点头,没有半点犹豫。
|
||||
|
||||
赫默却皱眉:“古米不是筹码。”
|
||||
|
||||
“我知道。”宁诚看向她,“但他们需要看见我们也冒风险。”
|
||||
|
||||
古米把小刀从腰间取下来,递给铃兰保管,然后拍了拍空出来的腰侧。“我跟赫默医生去。我跑得快,也记得路。”
|
||||
|
||||
铃兰接过小刀,指尖有些僵。她看着古米,想说小心,最后只说:“早点回来。”
|
||||
|
||||
村塾先生低声和脚夫说了几句。脚夫猛地摇头,眼睛往残骸深处瞟,宁愿拖着伤腿下山,也不想留在这堆从天上掉下来的铁骨旁边。
|
||||
|
||||
村塾先生只说了一句。
|
||||
|
||||
|
||||
+143
-13
@@ -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 终于动起来了。有人端水,有人把孩子往外赶,有人
|
||||
古米用手势把这句话讲给村塾先生听。她指了指伤员,又指了指天,最后把手掌平放,做出“等”的动作。
|
||||
|
||||
村塾先生缓缓懂了。
|
||||
|
||||
老妇人忽然跪了下去。
|
||||
|
||||
古米吓了一跳,连忙去扶。赫默也伸手,却被更多村民围住。他们没有欢呼,也没有立刻信任,只是看她的眼神变了。
|
||||
恐惧还在,但其中多了一点希望。
|
||||
古米吓了一跳,连忙去扶。赫默也伸手,却被更多村民围住。他们没有欢呼,也没有立刻信任,只是看她的眼神变了。恐惧还在,但其中多了一点希望。
|
||||
|
||||
赫默没有让这种情绪继续发酵。她抬手指向草席,又指向水盆,开始布置后续。
|
||||
|
||||
“两个时辰擦一次身体。不要盖太厚。能喝水就喂水,吐了就停。伤口渗血多,叫我。抽搐,叫我。开始胡话,也叫我。”
|
||||
|
||||
这段话太复杂,翻译模块几乎全军覆没。赫默只好拆成动作。她用湿布擦伤员额头,指两根手指表示时间;她把水勺送到伤员嘴边,又摆手表示不能灌;她按住包扎边缘,让村塾先生看什么程度的渗血需要处理。
|
||||
|
||||
村塾先生学得很认真。他甚至让老妇人也看一遍。老妇人手抖得厉害,却还是点头。
|
||||
|
||||
古米在旁边把赫默用掉的东西重新收好。半瓶消毒喷雾少了一截,抗感染贴片少了一片,纱布少了一卷。她把剩下的东西放回包里时,动作比来时更慢。
|
||||
|
||||
赫默看见了。“后悔?”
|
||||
|
||||
古米摇头。
|
||||
|
||||
“只是觉得少得太快。”她说。
|
||||
|
||||
赫默把医疗包扣上。“所以每一次都要知道自己用了什么。”
|
||||
|
||||
古米嗯了一声。
|
||||
|
||||
村塾先生从屋角搬出一小袋米,又拿了两个竹筒水。他犹豫很久,最后让人取来几根粗绳和一副旧担架。
|
||||
|
||||
“你们山上,东西。”他用汉字音慢慢说,“我们,搬。”
|
||||
|
||||
赫默看着那袋米。
|
||||
|
||||
袋口一收,底下瘪下去大半。对这个村子来说,这已经是咬牙拿出来的心意。
|
||||
|
||||
古米抱起米袋时,手指微微收紧。
|
||||
|
||||
她没有立刻背上,先看向赫默。赫默也看着那袋米。两个人都明白,这袋米不只是报酬。村子把米拿出来,就等于承认山上的人暂时可以交易,不能立刻当成怪事赶走。
|
||||
|
||||
村塾先生又从怀里摸出一小包粗盐,犹豫着递给古米。古米下意识想拒绝。她知道盐对一个缺粮的村子意味着什么。可村塾先生坚持把盐塞进她手里,又指了指山上。
|
||||
|
||||
“病人。”他说。
|
||||
|
||||
古米明白了。他不是给天上人送礼。他是在给山上那个受伤的“博士”买一点活下去的机会。
|
||||
|
||||
柴房里的伤员忽然睁开眼,眼神涣散却死死抓住村塾先生的袖子,嘴里吐出几个极轻的词。
|
||||
|
||||
村塾先生脸色骤变。
|
||||
|
||||
赫默问:“他说什么?”
|
||||
|
||||
古米听不懂。
|
||||
|
||||
村塾先生没有立刻翻译。他看了看门外,又看了看山上的方向,最后才低声说:
|
||||
|
||||
“有人……来消息。”
|
||||
|
||||
他顿了顿。
|
||||
|
||||
“查村。明天,也许今晚。”
|
||||
|
||||
他没提伤员还吐出了另一个词:
|
||||
赫默立刻看向古米。古米把米袋放低,手已经摸到背包带。
|
||||
|
||||
村塾先生还在犹豫。他显然听懂了更多,只是不知道该不该说。柴房门口的老妇人也变了脸色,伸手去按伤员的手,像想让他别再开口。
|
||||
|
||||
赫默没有催。她只是把医疗包重新背好,又检查了一遍包扣。
|
||||
|
||||
古米低声说:“如果和山上的路有关,我们得知道。”
|
||||
|
||||
村塾先生闭了闭眼,终于用木条在地上画出一条短线。线的一头是村子,另一头是山坡。他又在中间点了两下,表示有人可能知道另一条上山的小路。
|
||||
|
||||
“保长的人?”赫默问。
|
||||
|
||||
村塾先生没有完全听懂,却抓住“保长”两个音,点了一下头。
|
||||
|
||||
古米的胃沉下去。她来时只记住了溪边那条路。如果还有另一条路,山上的残骸就比他们想的更容易暴露。
|
||||
|
||||
赫默说:“回去。”
|
||||
|
||||
村塾先生也站起来。他看了一眼草席上的伤员,又看向老妇人,快速交代了几句。老妇人点头,把湿布重新放到伤员额头上。她没有再跪,只是用力抓住赫默的袖口,抓了一下就松开。
|
||||
|
||||
赫默看懂了。那不是挽留,是催她们赶紧走。
|
||||
|
||||
村塾先生没提伤员还吐出了另一个词:
|
||||
|
||||
“路。”
|
||||
|
||||
+237
-18
@@ -6,21 +6,50 @@
|
||||
|
||||
愿意帮忙是一回事,信不信他们是另一回事。话多了,只会让人想逃。
|
||||
|
||||
古米先把米袋放到铃兰脚边,又把那一小包粗盐递过去。铃兰接住时怔了一下,抬头看向山下来的几个人。村塾先生避开她的视线,只指了指宁诚,又指了指米袋,意思很清楚:病人吃。
|
||||
|
||||
瘦脚夫仍然站得很远。他被重新包过脚,走路还是一瘸一拐,手里的竹杖握得比之前更紧。中年村民背着粗绳和旧担架,目光从残骸扫到无人机,再扫到宁诚腕侧,始终没有说话。
|
||||
|
||||
赫默回来后第一件事不是休息。她把医疗包放在一块相对干净的舱板上,先洗手,再检查宁诚左肋的绷带。铃兰立刻让开位置,低声把宁诚刚才咳血的情况说了。
|
||||
|
||||
赫默的眉头压得更低。“咳了几次?”
|
||||
|
||||
“一次。”宁诚说。
|
||||
|
||||
“血量?”
|
||||
|
||||
“一点血丝。”
|
||||
|
||||
赫默看向铃兰。铃兰点头。
|
||||
|
||||
“暂时不处理。”赫默说,“但你再站起来,我会直接让铃兰把你按住。”
|
||||
|
||||
宁诚没有争。他现在连争的力气都要省着用。
|
||||
|
||||
他示意铃兰把米收好,转头让赫默报药物消耗。
|
||||
|
||||
“抗感染贴片用掉一片,切开后只覆盖主伤口。急救凝胶用了三分之一。退热药半份。消毒喷雾剩不到三分之一。”
|
||||
|
||||
宁诚点点头,在心里默默改写清单。
|
||||
|
||||
药少了。
|
||||
人多了。
|
||||
山下知道这件事的人,也多了。
|
||||
药少了。人多了。山下知道这件事的人,也多了。
|
||||
|
||||
他在心里把这笔账记上。交易刚开始,还远不到庆祝的时候。
|
||||
|
||||
三个村民里,一个是瘦脚夫,一个是村塾先生,另一个中年人一直沉默。那人的肩膀很宽,手上长满了厚厚的开裂老茧,一看就是常年挑担砍柴的。靠近残骸时,三个人都在发抖。核心舱那点蓝光一闪,脚夫的半只脚已经下意识往后撤。
|
||||
|
||||
宁诚没有逼他们立刻靠近。他让古米先把担架放在空地上,又让铃兰拿一块破布盖住核心舱最亮的位置。赫默关闭无人机腹灯,只保留腕环屏幕的微光。山坡一下暗了许多,村民们才敢往前挪。
|
||||
|
||||
中年村民蹲下摸了摸地上的泥,又摸了摸一块已经冷却的舱板。他像是在确认这东西会不会烫手,也像是在确认它到底是不是妖物。摸完以后,他把手放到鼻下闻了闻,眉头皱起来。
|
||||
|
||||
村塾先生低声问了他一句。中年村民摇头,又点头,最后只说了几个字。
|
||||
|
||||
翻译模块给出低置信度译意:铁。烧。能搬。
|
||||
|
||||
这已经够了。
|
||||
|
||||
宁诚示意赫默把光遮住。
|
||||
|
||||
蓝光熄灭,村民们明显松了口气。
|
||||
|
||||
“先搬小件。”宁诚开口。
|
||||
@@ -28,6 +57,7 @@
|
||||
赫默将这句话转化为手势,古米用刚学会的几个词和动作补充解释。村塾先生负责猜测意思,猜完后再告诉另外两个人。
|
||||
|
||||
这一句简单的指令,绕过赫默、古米和村塾先生,最后落在两个村民耳朵里时,已经变成了一串杂乱的手势和半截断开的词汇。
|
||||
|
||||
这套通信系统寒酸得可怜,偏偏还能用。
|
||||
|
||||
翻译模块也在旁边同步学习。每一次“搬”“等”“火”“日本兵”被重复,它都会把新的音节塞进临时词表。宁诚看着那张缓慢增长的词表,知道再给它两三天,它至少能撑起日常命令。问题是,日本人未必会给他们两三天。
|
||||
@@ -36,37 +66,100 @@
|
||||
|
||||
完整的终末地核心舱搬不动,它深陷在变形支架和半截山坡里,展开的骨架还埋在泥土、树根和烧塌的舱壁下面。他只能抢救主存储匣、应急运算模块,还有一个手掌大小的低功耗控制核。
|
||||
|
||||
赫默把这三样东西在腕环上标出来。屏幕太小,宁诚只能看见三个发红的点。一个在核心舱腹部,一个在半塌的支架下面,还有一个卡在断裂舱壁和泥土之间。
|
||||
|
||||
“顺序。”赫默说。
|
||||
|
||||
宁诚盯着那三个点。控制核最重要,但也最难拆。主存储匣如果再断电,可能会丢数据。应急运算模块相对好拿,却需要先清出一条通路。
|
||||
|
||||
“先应急运算模块。”他说,“练手。再主存储匣。最后控制核。”
|
||||
|
||||
赫默点头。她没有提醒他这不是演练。
|
||||
|
||||
铃兰把遮光布挂在两根断裂支架之间,自己站在布后,一手举着边角,一手护着数据线。布上有烧洞,光还是会漏出来。她就用身体挡住那几个洞,尾巴被泥水弄湿也没动。
|
||||
|
||||
赫默拆开接口,宁诚口述步骤,铃兰举着遮光布挡住刺眼的余光,古米和村民在外面负责清路。
|
||||
|
||||
第一件东西拿得还算顺利。应急运算模块只有半个手臂长,外壳变形,但固定栓没有完全锁死。赫默拆掉两根断裂线束,让古米用布包住边缘。中年村民看见古米吃力,伸手想帮,却被蓝色指示灯吓得缩回去。
|
||||
|
||||
古米把模块往他面前挪了一点。“不烫。”她说,又用自己的手按在上面。
|
||||
|
||||
中年村民看她按住没有事,才试着伸手。他的手掌很大,粗糙得能直接抓住锋利边角。模块离开舱壁时发出一声低响,所有人都停了一下。
|
||||
|
||||
赫默看腕环:“稳定。”
|
||||
|
||||
宁诚吐出一口气。“包起来。不要碰接口。”
|
||||
|
||||
古米立刻用破布绕了三层,中年村民则把它放进担架边的草垫里。
|
||||
|
||||
第一次拆卸失败了。
|
||||
|
||||
接口卡死,工具不匹配。赫默试图用备用夹具硬撬,结果夹具直接裂开。
|
||||
|
||||
宁诚的脸色沉了下来。
|
||||
|
||||
标准事故条令里,从来没有“用柴刀敲开终末地核心固定栓”这一项。
|
||||
|
||||
可现实不等流程。
|
||||
|
||||
他让古米把村民带来的砍柴刀递过来,又让脚夫找块合适的石头。赫默看了他一眼,终于没再反对。三分钟后,固定栓被硬砸开,接口边缘裂开一道细小的缝隙。
|
||||
|
||||
这三分钟里,每一下都让人难受。
|
||||
|
||||
赫默负责稳住刀背,古米扶着照明板,中年村民握石头敲击。宁诚不能靠近,只能坐在舱板边听声音判断位置。
|
||||
|
||||
“轻一点,偏左。”
|
||||
|
||||
中年村民听不懂。古米赶紧重复动作,用手掌往左推。第二下落点终于对了,固定栓边缘掉下一片细屑。
|
||||
|
||||
赫默立刻抬手。“停。”
|
||||
|
||||
她用镊子夹走碎屑,确认没有落进接口内部,才示意继续。中年村民额头上已经全是汗。他不知道自己敲的是什么,只知道每敲一下,宁诚和赫默的脸都会更紧。
|
||||
|
||||
第三次敲击后,固定栓松了半圈。赫默用残破夹具卡住边缘,慢慢往外旋。金属摩擦声尖得刺耳,铃兰握着遮光布的手指抖了一下。
|
||||
|
||||
“稳住。”宁诚说。
|
||||
|
||||
铃兰咬住唇,把布重新压紧。
|
||||
|
||||
那声脆响钻进宁诚耳朵里,他的后槽牙跟着一酸。
|
||||
这枚控制核原本只是核心展开后的早期调度组件。
|
||||
现在,它沾着泥土、血渍和石屑,被几个人从残骸里硬生生地撬了出来,像一块勉强保住的骨头。
|
||||
|
||||
身体还留在山坡上。
|
||||
迟早会被人看见。
|
||||
这枚控制核原本只是核心展开后的早期调度组件。现在,它沾着泥土、血渍和石屑,被几个人从残骸里硬生生地撬了出来。
|
||||
|
||||
中年村民一直没说话。
|
||||
他看不懂控制核,也看不懂腕环上跳动的光。可他看得懂宁诚和赫默的脸色。在撬这块小东西时,这些天上来的人比看见大半截铁壳时还要紧张。甚至在固定栓裂开那一瞬间,宁诚闭了下眼,像是被人从身上敲掉了一块骨头。
|
||||
身体还留在山坡上。迟早会被人看见。
|
||||
|
||||
中年村民低头看了看手里那把柴刀。
|
||||
他突然明白,这些人最怕丢的未必是山坡上那座巨大的铁屋子。
|
||||
可能是这些能被布包起来的小盒子。
|
||||
中年村民一直没说话。他看不懂控制核,也看不懂腕环上跳动的光。可他看得懂宁诚和赫默的脸色。在撬这块小东西时,这些天上来的人比看见大半截铁壳时还要紧张。固定栓裂开那一瞬间,宁诚闭了下眼,脸色白得厉害。
|
||||
|
||||
中年村民低头看了看手里那把柴刀。他突然明白,这些人最怕丢的未必是山坡上那座巨大的铁屋子。可能是这些能被布包起来的小盒子。
|
||||
|
||||
“继续。”
|
||||
|
||||
药箱更麻烦。
|
||||
|
||||
完整医务箱压在一块扭曲的内舱板下面,那块舱板至少有几百斤重,靠他们几个人根本搬不动。中年村民看了看,突然叫脚夫和古米去砍几根木杆。他们用粗绳套住舱板边缘,拿木杆当杠杆,一点点把缝隙撬开。
|
||||
|
||||
这一次,反而是村民更懂办法。
|
||||
|
||||
中年村民先让脚夫把粗绳从舱板下穿过去。脚夫趴在泥里,脸几乎贴到烧黑的金属边,手伸进去摸索,碰到还温热的地方就立刻缩回来。古米趴在另一侧接绳,手背被划破一道口子,她只是甩了甩血,继续往里够。
|
||||
|
||||
绳子穿过去后,中年村民把两根木杆交叉插入绳环,又让村塾先生站到远一点的位置看整体倾斜。村塾先生一边害怕,一边不得不指挥。他喊一声,中年村民和脚夫就往下压一点。
|
||||
|
||||
舱板第一次只抬起半指宽。赫默立刻把一块石头塞进去垫住。
|
||||
|
||||
第二次抬起一指宽。铃兰递上断裂支架,赫默把它卡到缝里。
|
||||
|
||||
第三次,舱板下传来一声闷响,所有人都停住。
|
||||
|
||||
宁诚问:“压到箱体了?”
|
||||
|
||||
赫默趴下去看,声音绷紧:“没有。下面还有一层变形隔板。”
|
||||
|
||||
“拆隔板,不要再抬。”宁诚说,“再抬会滑。”
|
||||
|
||||
村塾先生听不懂这句,古米急忙抓住中年村民的手臂,连连摆手。中年村民虽然不明白原因,但看见赫默已经改用工具切割隔板,就收住了力。
|
||||
|
||||
赫默趴在泥地里,探手伸进去摸索。
|
||||
|
||||
第一次摸出一包烧毁的止血棉。
|
||||
第二次摸出半盒破裂的试剂。
|
||||
第三次,终于触碰到医务箱内层。
|
||||
@@ -74,53 +167,179 @@
|
||||
她把箱子拖出来时,手背被金属边划开一道口子,血滴在箱盖上。铃兰立刻想上前包扎,赫默却死死盯着那个箱子。
|
||||
|
||||
锁坏了。
|
||||
|
||||
里面的东西还在,但冷藏格已经失效。几支需要低温保存的药物不能再按原效果估算。赫默的表情比受伤时还要难看。
|
||||
|
||||
“损耗?”
|
||||
|
||||
“等回去清点。”她说,“现在还没法确定。”
|
||||
|
||||
宁诚没追问。
|
||||
|
||||
赫默把医务箱扣回去,又用旧布把箱体外侧的标识盖住。她的手背还在流血,血顺着指节往下滴。铃兰忍不住上前一步。
|
||||
|
||||
“赫默医生,你的手……”
|
||||
|
||||
“小伤。”赫默说。
|
||||
|
||||
“会感染。”
|
||||
|
||||
赫默终于抬头看她。两个人僵持了一秒。最后赫默伸出手,让铃兰用最普通的布条给她压住伤口,没有用药,也没有用贴片。
|
||||
|
||||
铃兰包扎得很快,却包得比平时更紧。赫默动了动手指,没说什么。
|
||||
|
||||
能源包搬出两个,第三个外壳破裂,宁诚只让赫默拆掉识别片和接口板。数据模块找回四枚,另外两枚深埋在更深处,暂时放弃。
|
||||
|
||||
“放弃”这个词说出来容易。
|
||||
转身时,没人催他。
|
||||
那是地图、记录、航线、备份,甚至可能包含死去同伴最后几分钟的舱内数据。
|
||||
“放弃”这个词说出来容易。转身时,没人催他。那里面可能有地图、记录、航线、备份,甚至可能包含死去同伴最后几分钟的舱内数据。
|
||||
|
||||
铃兰站在残骸边,低声问:“真的不拿了吗?”
|
||||
宁诚让赫默再确认一次位置。
|
||||
|
||||
无人机钻进缝隙里,画面抖得厉害。两枚数据模块被压在更深处,一枚只露出半截,另一枚在变形梁后面。旁边有几根断裂的管线,红色热源提示反复跳动。
|
||||
|
||||
“如果硬拆,多久?”宁诚问。
|
||||
|
||||
赫默说:“不确定。至少二十分钟。还可能塌。”
|
||||
|
||||
“成功率?”
|
||||
|
||||
赫默没有报数字,只看了他一眼。
|
||||
|
||||
宁诚明白了。这个问题不该问。现在每多一分钟,山下的人就多一分可能往这边走。每多一次撬动,残骸就多一分可能把人压进去。
|
||||
|
||||
铃兰低声说:“里面可能有航行记录。”
|
||||
|
||||
“我知道。”
|
||||
|
||||
“也可能有其他人的记录。”
|
||||
|
||||
“我知道。”
|
||||
|
||||
宁诚说完这两个“知道”,就再也说不出别的。他盯着画面看了三秒,最后伸手按掉标记。
|
||||
|
||||
“撤。”
|
||||
|
||||
铃兰站在残骸边,低声问:“不拿了吗?”
|
||||
|
||||
宁诚看着那片被压住的数据舱。
|
||||
|
||||
“拿不到。”
|
||||
|
||||
“以后呢?”
|
||||
|
||||
“以后再说。”
|
||||
|
||||
这是谎话。所有人都听出来了。
|
||||
主体残骸还趴在山坡上,“以后”这两个字薄得像纸。
|
||||
主体残骸还趴在山坡上,“以后”这两个字几乎站不住。
|
||||
|
||||
宁诚转过身,开始分派遮挡任务。他用泥糊住显眼的发光面,用树枝盖住反光金属,用树叶扫乱脚印。溪边的拖痕不必抹平,反而要留下几处看似山火逃生留下的混乱痕迹。
|
||||
|
||||
遮挡比搬运更耗心神。
|
||||
|
||||
能搬走的东西已经搬走,剩下的东西太大,太亮,太不属于这里。宁诚让赫默拆掉几处还会闪烁的识别灯,拆不掉的就用泥糊死。古米负责把烧焦外壳和普通碎石混在一起,别让金属边缘连成完整轮廓。铃兰把几段细线缆塞进泥里,又用草叶盖住。
|
||||
|
||||
中年村民很快看懂了一部分。他不再等古米翻译,主动把树枝拖过来,压在反光的舱板上。脚夫则负责抹乱从溪边到残骸的脚印。他走路一瘸一拐,反而把痕迹踩得更乱。
|
||||
|
||||
宁诚让他停住,指了指脚印。
|
||||
|
||||
脚夫吓了一跳,以为自己做错了。
|
||||
|
||||
宁诚摇头,指了指他的伤脚,又指向另一侧泥地。“多走几步。”
|
||||
|
||||
脚夫没听懂。村塾先生看了一会儿,突然明白过来,低声解释。脚夫脸色有些难看,却还是照做。他拖着伤脚在泥地上来回走,让这里看起来像有很多人在慌乱逃命,遮住几个人有目的搬运的痕迹。
|
||||
|
||||
村民看不懂他为什么故意留下这些痕迹。
|
||||
|
||||
村塾先生问了出来。
|
||||
|
||||
宁诚拿起石头在泥地上画:一条直线,被人看懂;一团乱线,让人误会。
|
||||
|
||||
村塾先生盯着那团乱线看了好久,慢慢点头。
|
||||
|
||||
“让他们以为别的。”
|
||||
|
||||
宁诚点点头。
|
||||
|
||||
“山火。”他补充。
|
||||
|
||||
村塾先生立刻指向那些被保留下来的焦黑外壳。“火。”
|
||||
|
||||
宁诚又指向远处被泥盖住的接口。“这个,不给看。”
|
||||
|
||||
村塾先生顺着他的手看过去,脸上浮出一点明白后的惊惧。他叫来中年村民,两个人用湿泥把接口边缘一点点糊平。中年村民手很重,宁诚不得不提醒他别把泥压进仍有热源的缝隙里。
|
||||
|
||||
“烫。”古米翻译。
|
||||
|
||||
中年村民缩手,换成树枝轻轻推泥。
|
||||
|
||||
就在这时,脚夫突然抬手,示意所有人安静。
|
||||
|
||||
山下传来两声短促的鸟叫。
|
||||
|
||||
不是自然的鸟叫。
|
||||
|
||||
脚夫脸色变了,转头看向村塾先生。村塾先生立刻往林子边走去。片刻后,一个瘦小少年从树影里钻出来,连滚带爬地几乎摔倒在地上。
|
||||
|
||||
他不敢靠近残骸,只把一个卷起来的纸团塞给村塾先生,又急促说了几句话。
|
||||
|
||||
少年看起来不过十三四岁,裤脚全是泥,胸口起伏得厉害。他一路跑上山,到了这里却连头都不敢抬。无人机从他头顶掠过时,他整个人往地上一趴,差点把脸埋进泥里。
|
||||
|
||||
古米想过去扶,被赫默拉住。
|
||||
|
||||
“先让他们说。”
|
||||
|
||||
村塾先生拆开纸团。纸上没有完整的字,只有几道短线和一个被水晕开的记号。他看完以后,立刻追问少年。少年边喘边答,声音越来越小,说到最后,眼睛一直往残骸方向瞟。
|
||||
|
||||
村塾先生忽然回头看了一眼宁诚。
|
||||
|
||||
宁诚知道,坏消息来了。
|
||||
|
||||
村塾先生听完,脸色比刚才还要白一些。
|
||||
|
||||
宁诚看着他:“消息?”
|
||||
|
||||
村塾先生捏着纸团,声音发紧:
|
||||
|
||||
“保长那边有人说,日本兵问山里有大响动。还有怪光。”
|
||||
|
||||
他看向残骸,又看向众人刚搬出来的核心和药箱。
|
||||
|
||||
“他们明天查村。也可能,天亮前先进山。”
|
||||
|
||||
宁诚低头看了一眼还没完全遮好的残骸。
|
||||
|
||||
时间窗口,缩短了。
|
||||
|
||||
赫默立刻合上医务箱。“还剩多少必须做?”
|
||||
|
||||
宁诚扫了一眼现场。核心控制核已经取出,主存储匣和应急运算模块在担架上,能源包有两个可搬,医务箱拿到了。剩下的都是想拿却拿不走的东西。
|
||||
|
||||
“收手。”他说。
|
||||
|
||||
铃兰猛地抬头。
|
||||
|
||||
宁诚没有看她。他怕自己一看,就会改变主意。
|
||||
|
||||
“能带走的全部带走。不能带走的遮。遮不住的,让它看起来没用。”
|
||||
|
||||
村塾先生听不懂完整意思,却听懂了“走”。他也抬头看天色。林子上方已经有一点发灰,真正的天亮不远了。
|
||||
|
||||
中年村民把担架绳重新拉紧。脚夫背起较轻的布包,少年被村塾先生赶回村里传信。古米把米袋和水筒重新扎到一起,铃兰抱起数据模块,手臂收得很紧。
|
||||
|
||||
赫默最后看了一眼残骸深处。“还有东西。”
|
||||
|
||||
“我知道。”宁诚说。
|
||||
|
||||
“可能很重要。”
|
||||
|
||||
“我知道。”
|
||||
|
||||
赫默沉默两秒,转身把无人机收回。它的电量已经低到红线,落到她掌心时旋翼转得断断续续。
|
||||
|
||||
宁诚扶着舱板想站起来,刚撑起一点,左肋就疼得他眼前发黑。铃兰和古米同时伸手扶住他。
|
||||
|
||||
“我能走。”他说。
|
||||
|
||||
赫默冷冷看着他。
|
||||
|
||||
宁诚改口:“我能被扶着走。”
|
||||
|
||||
这次没人笑。所有人都太累了,也太清楚接下来不是撤离,只是从一个危险处搬到另一个危险处。
|
||||
|
||||
+183
-10
@@ -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 @@
|
||||
铃兰把藏着数据模块的布包往身后推了推。
|
||||
|
||||
宁诚看向门外那片灰白色的晨雾。
|
||||
|
||||
工厂没有,军队没有,地图也没有。翻译模块还在磕磕绊绊地学当地话。
|
||||
|
||||
就这几件抢出来的东西,这几个人,还有刚立下的临时规矩。
|
||||
|
||||
“按刚才说的做。”他说,“谁都不要先跑。”
|
||||
|
||||
@@ -1,233 +0,0 @@
|
||||
# 1.1.2《第一次搜山》
|
||||
|
||||
## 第 6 章:不要先跑
|
||||
|
||||
宁诚刚说完,炭棚里便陷入了死寂。
|
||||
|
||||
并不是没人害怕,只是这里的恐惧太多了。脚夫的嘴唇抿成一条白线,肩膀细微地抖动;村塾先生盯着山路,手指在袖口里机械地捏着;古米握刀的手极稳,另一只手却下意识护住身旁的米袋;铃兰把布包往身后藏得更深,尾巴紧贴墙角,像一尊石像。
|
||||
|
||||
赫默率先站了起来。
|
||||
|
||||
“无人机?”
|
||||
|
||||
宁诚看向她。
|
||||
|
||||
赫默已经把那架受损的无人机取了出来。机身上的裂口用胶带勉强压住,腹部灯关掉,原本该平稳悬停的小型旋翼在低功耗模式下发出轻微的颤音。
|
||||
|
||||
“能飞多久?”
|
||||
|
||||
“三分钟。”赫默说,“不升高、不开灯,只做近距离观察。”
|
||||
|
||||
宁诚扫了一眼门外的晨雾。
|
||||
|
||||
三分钟。现在他们甚至要把每一秒浪费都计算清楚。
|
||||
|
||||
“不要飞到残骸上空。”他说,“先看山路。”
|
||||
|
||||
赫默没多问,手指在控制板上点了几下。无人机贴着炭棚后墙钻出去,像一片灰黑色的叶子,顺着树影下滑。
|
||||
|
||||
翻译模块还没学会“伏低”、“分散”或者“别踩草”这些细碎的词。宁诚只能把指令拆成最简单的动作:
|
||||
|
||||
“人,里面。”他指了指自己、铃兰和赫默,又指向炭棚后的柴堆,“藏。”
|
||||
|
||||
“古米。”他看向古米。
|
||||
|
||||
古米立刻抬头。
|
||||
|
||||
“你和他。”宁诚指了指脚夫,“水。米。正常。”
|
||||
|
||||
古米眨了一下眼,瞬间秒懂。她收起小刀,重新扎好米袋,把水罐挪到门边。脚夫也反应过来,慌忙用脚拨开刚才冲进来时踩乱的炭灰,动作模仿得像是真的刚从溪边挑完水回来。
|
||||
|
||||
宁诚最后看向村塾先生。他的脸色难看极了。
|
||||
|
||||
宁诚知道,接下来要把最危险的任务交给他。
|
||||
|
||||
“你,说话。”宁诚用手指指了指山路,又指向自己的喉咙,“你是这里的人。”
|
||||
|
||||
村塾先生沉默片刻。“他们要问,山上怪光。说不知道。”
|
||||
|
||||
村塾先生摇摇头:“不知道,不够。”
|
||||
|
||||
他说完,也看向门外。山林里的动静更近了。有人在拨开树枝,有人用越南话低声抱怨。其中还夹杂着一个硬朗的嗓音,宁诚听不懂词,却能辨认出那种命令人的腔调。金属碰撞声不是错觉——那是枪带扣、刺刀鞘或是饭盒,随着脚步一记一记地磕在身侧。
|
||||
|
||||
宁诚的右耳还是闷着的,左耳却清晰捕捉着每一声颤动。
|
||||
|
||||
村塾先生压低声音:“山火。昨天夜里,山上起过火。我们来砍柴看见烟。可以。”
|
||||
|
||||
宁诚看着他。“不要说法国人。”
|
||||
|
||||
村塾先生愣了一下。
|
||||
|
||||
宁诚没确定判断对不对,只是知道“法国人”这三个字在这里太重了。日军倒法后,任何关于法国的残余都可能引来更细致的查问。如果一个村民太快把山火、旧铁和法国人连在一起,反而像提前准备好的口供。
|
||||
|
||||
“说不知道是谁的。”宁诚纠正,“说怕。说不敢碰。”
|
||||
|
||||
村塾先生看了他两秒,慢慢点头:“怕,可以。”
|
||||
|
||||
怕是最真实的情绪。他们什么都缺,唯独不缺这个。
|
||||
|
||||
赫默的无人机画面传回腕环。画面阴暗且被枝叶遮挡严重,宁诚只能看到几个人影沿着山路向上走。前面两个穿着本地衣服,一个背着竹筐,一个拎着长棍;后面三人服色整齐,腿上打着绑腿,肩上有枪;再后面还有两个人,一个背着东西,一个拿着本子。
|
||||
|
||||
宁诚盯着那三支枪。不是他熟悉的任何标准安保装备——木托、金属枪管,长而陈旧。刺刀没全部上好,其中一支枪口下方反着冷光。队伍里没有重武器也没有无线电,至少在画面里看不见。他们不像专门为坠毁物来的正规搜索队,更像一支被传闻、征粮和搜人任务同时推上山的小队。
|
||||
|
||||
这很好,也很坏。好在他们未必知道自己在找什么;坏在他们会用最简单的方法解决问题。
|
||||
|
||||
“几个人?”赫默问。
|
||||
|
||||
“七个。”宁诚说,“三支枪。可能还有刀。”
|
||||
|
||||
赫默抬眼:“你能确认?”
|
||||
|
||||
“不能。”
|
||||
|
||||
宁诚说完,喉咙里溢出一声短促的咳嗽,牵得肋骨一阵发疼。他按住左侧伤口,继续盯着画面。
|
||||
|
||||
“按七个准备。”
|
||||
|
||||
无人机画面忽然晃了一下。
|
||||
|
||||
赫默立刻压低高度。一个协力者似乎听见了什么,抬头往树上望。画面里的树叶贴近,随即只剩下一片潮湿的灰绿。
|
||||
|
||||
宁诚屏住呼吸。那人看了几秒,没发现东西,被后面的日本兵呵斥了一句,又垂头往前走去。
|
||||
|
||||
无人机绕到一棵树后,画面里出现了另一样东西:一块被烧黑的金属碎片。
|
||||
|
||||
宁诚胃里的沉降感瞬间上涌。那不是他们故意摆在塌方边缘的几块。那块更小,边缘有整齐的嵌槽,应该是昨夜搬运时从某个舱段外壳上崩下来的。泥没有盖住它,晨光一照,断裂面露出一条不该属于山林的亮线。
|
||||
|
||||
前面的协力者也看见了。他停下脚步,弯腰去捡。
|
||||
|
||||
村塾先生顺着宁诚的视线看过来。他看不懂腕环上的画面,却看懂了宁诚的脸色。“什么?”
|
||||
|
||||
宁诚没答。
|
||||
|
||||
画面里,协力者把碎片递给后面的日本兵。对方拿在手里翻了翻,用刀背敲了一下。金属没有像普通铁片那样弯曲,只发出很轻的一声脆响。那声音通过低质量的拾音传回来,薄得像针尖划过冰面。
|
||||
|
||||
炭棚里鸦雀无声。
|
||||
|
||||
日本兵抬头看向山坡更高处。他们要去残骸了。
|
||||
|
||||
宁诚忽然意识到,刚才的所有安排都少算了一层:他们不一定先来炭棚,他们可能先找到残骸边的假现场,然后顺着拖拽痕迹、脚印和折断的新枝,一路摸到这里。
|
||||
|
||||
“痕迹。”宁诚低声说。
|
||||
|
||||
赫默看向他。“我们搬东西的痕迹。”
|
||||
|
||||
古米脸色变了。昨夜所有人都太累了。竹竿压过湿泥,草叶被拖弯。核心模块再怎么包成柴草,也不可能轻得像一捆柴。天黑时看不清,但只要天亮,山路就会替他们说话。
|
||||
|
||||
脚夫也听懂了一点。他急忙比划,指向溪谷,又指向炭棚后面。
|
||||
|
||||
村塾先生快速翻译:“他说,昨晚走溪边,水会盖一点。可是上坡这里,留下。”
|
||||
|
||||
宁诚闭了一下眼。“能改吗?”
|
||||
|
||||
脚夫没等翻译完就摇头,又迟疑着点了点头。
|
||||
|
||||
能改一点,不能全改。
|
||||
|
||||
“古米。”宁诚说,“你跟他去。不要靠近他们。把炭灰撒到路上,弄成砍柴痕迹。水罐带上,像刚回来。”
|
||||
|
||||
古米立刻背起米袋。
|
||||
|
||||
赫默皱眉:“太危险。”
|
||||
|
||||
宁诚盯着无人机画面里那块碎片。“他们如果顺着痕迹直接到炭棚,更危险。”
|
||||
|
||||
赫默陷入沉默。古米倒是笑了一下,声音很轻:“交给我。厨房里也有很多不能让客人看见的东西。”
|
||||
|
||||
这句话本不该好笑,但宁诚却差点被她逗得缓过一口气。
|
||||
|
||||
脚夫带着古米从后门绕出去。村塾先生留在正门,整理衣服,把脸上的炭灰抹得更乱一些。他没有让自己看起来太镇定,甚至故意扯开袖口,像个刚被山里的动静吓醒的人。
|
||||
|
||||
宁诚被铃兰扶进柴堆后面。
|
||||
|
||||
炭棚后墙有一处塌陷,里面塞满了旧炭筐和湿柴。核心模块藏在更深的石缝里,外面压着湿草。宁诚靠进去时,木刺扎进后肩,疼得他眼前一黑。
|
||||
|
||||
铃兰立刻扶住他。“博士……”
|
||||
|
||||
“别出声。”
|
||||
|
||||
铃兰咬住嘴唇,耳朵压得很低。宁诚这才发现,她一直在发抖。不是那种会让动作失控的震颤,而是强行压抑后的细微波动。她比这里所有村民都更像不属于这片山林的人——银白色的发、柔软的尾巴、干净得过分的轮廓。哪怕被泥和炭灰弄脏,也不像一九四五年的越北山村该有的东西。
|
||||
|
||||
宁诚抬手,指了指旁边一只破炭筐。
|
||||
|
||||
铃兰看懂了。她把炭筐拖过来挡在身前,抓起一把炭灰抹在发梢和耳朵边。灰黑色压住了那片太亮的银白。她抹得太急,手背在脸颊上留下一道脏痕。
|
||||
|
||||
宁诚低声说:“够了。”
|
||||
|
||||
铃兰抬头看他。
|
||||
|
||||
宁诚声音更低:“不要把自己弄伤。”
|
||||
|
||||
铃兰怔了一下,然后用力点头。
|
||||
|
||||
外面的脚步声到了炭棚前。先是协力者的声音,越南话又快又急。村塾先生出去迎,语气听起来像在解释什么,又像在求情。紧接着,一个日本兵开口,声调硬朗。
|
||||
|
||||
宁诚听不懂日语,但他听得懂枪托撞门框的声音。
|
||||
|
||||
炭棚的破门被踢开。光线从门口灌进来,切过地上的炭灰、水罐和半袋米。一个协力者先进来,捂着鼻子四下打量。后面跟着两个日本兵,枪口没有抬得很高,却足以让屋里所有东西都变成可以被打穿的目标。
|
||||
|
||||
赫默坐在角落,身上盖着旧布,低头装作发烧的外乡女人。她摘掉眼镜,让头发散下来,医务箱藏在身后。她的伪装很勉强,好在这间屋子足够暗、也足够脏。
|
||||
|
||||
村塾先生在门口反复说着什么。协力者走到水罐旁踢了踢,又弯腰看米袋。米袋里真的只有米,少得可怜。他骂了一句,像是嫌晦气。
|
||||
|
||||
一个日本兵却没有看米。他看向柴堆。
|
||||
|
||||
宁诚的呼吸停了半拍。那人的靴子踩过炭灰,一步一步往里面走。枪口拨开一只空筐,又碰倒半截湿柴。铃兰就在宁诚身侧,隔着两层炭筐和一捆湿柴。只要那人再往前半步伸手一掀,就能看见她的眼睛。
|
||||
|
||||
村塾先生忽然提高声音。他跪下了。
|
||||
|
||||
宁诚从缝隙里只能看到他的背影。那个刚才还能和宁诚讨论“以后会不会看懂”的男人,此刻跪在门边,额头几乎贴到地上,声音抖得厉害。他在害怕,也在把这种害怕演给对方看。
|
||||
|
||||
协力者笑了一声,伸手去拽他的衣领。日本兵回头骂了两句,屋内那支枪口终于从柴堆前移开,转向门口。
|
||||
|
||||
就在这时,外面传来古米的声音。不是喊叫,是水罐摔碎的脆响,接着是脚夫惊慌失措的叫嚷。古米用刚学会的几个当地词夹着自己的语气,乱成一团。听起来像一个挑水回来的小姑娘被门口的兵吓坏了,连水都洒了一地。
|
||||
|
||||
两个协力者立刻回头。宁诚在黑暗里闭了一下眼。古米把视线拉出去了,只能维持几秒。
|
||||
|
||||
赫默藏在袖口下的手指动了一下。无人机已经贴着屋顶梁木停住,剩余电量红得刺眼。画面里,外面那个日本兵正在看古米,另一个协力者则低头查看她走来的路——炭灰、水迹、脚夫故意踩乱的泥印。
|
||||
|
||||
像砍柴挑水。也像有人匆忙遮过什么。
|
||||
|
||||
协力者看得很慢。宁诚看不见他的脸,却能从那种停顿里感觉到怀疑在滋生。
|
||||
|
||||
下一刻,山坡更高处忽然传来一声喊。所有人都抬头。那是留在残骸方向的另一个人在叫。声音里带着兴奋和惊惧。宁诚听不懂句子,却听见其中一个词被重复了两遍:铁。或者机器。
|
||||
|
||||
村塾先生脸色发白。门口的日本兵立刻转身朝山坡走去,屋里的那人也不再看柴堆,跟着出去。协力者临走前又踢了一脚米袋,米粒洒出几颗,滚进炭灰里。
|
||||
|
||||
脚步声远了,但没有完全消失。他们正往残骸处移动。
|
||||
|
||||
炭棚里仍然没人动。宁诚一直等到赫默抬手做了一个“暂时离开”的手势,才慢慢松开攥紧的手。掌心里全是汗,指甲把皮肤掐出几道月牙印。铃兰从炭筐后面抬起头,脸上沾着炭灰,眼睛却亮得吓人。
|
||||
|
||||
古米被脚夫扶进来,袖口湿了一大片,膝盖上有泥。她冲宁诚比了个很小的手势,像在说没事。赫默重新戴上眼镜,声音低到近乎冷:“他们会找到残骸。”
|
||||
|
||||
宁诚看向门外。山坡上传来第三声喊。那不是发现尸体或者粮食的声音,是发现了自己理解不了的东西以后,人本能发出的惊叹。
|
||||
|
||||
他们拖延住了炭棚。没拖住残骸。这并不意外。可真正听见那声喊时,宁诚还是觉得胸口像被什么东西压住了。主体残骸暴露不是“以后”的问题了,它已经从以后走到了今天早上。
|
||||
|
||||
村塾先生扶着门框站起来,膝盖上全是泥。他看向宁诚,脸上没有劫后余生的轻松,只有更深的疲惫。“他们会回来。”他说。
|
||||
|
||||
宁诚点头:“会。”
|
||||
|
||||
“带更多人?”
|
||||
|
||||
“会。”
|
||||
|
||||
村塾先生沉默了。
|
||||
|
||||
宁诚低头看腕环。无人机剩余电量不足以再飞一次。翻译模块还在缓慢刷新刚才听到的词,日语、越南语、本地口音混在一起,像一团没理清的线。他把手按在左肋上,疼痛让他保持清醒。
|
||||
|
||||
他们没有赢。他们只是把最早的一枪,从炭棚门口挪到了山坡上。
|
||||
|
||||
宁诚抬头:“现在开始,换地方。”
|
||||
|
||||
赫默看着他:“你走不了多远。”
|
||||
|
||||
“所以不走远。”宁诚说,“先把核心再挪一次。药箱分开。数据模块不要放一起。”
|
||||
|
||||
他看向村塾先生和脚夫,又看向门口那条被水迹弄乱的路。“他们回来之前,要让这里看起来,只剩怕事的人。”
|
||||
|
||||
村塾先生慢慢吸了一口气:“那你们呢?”
|
||||
|
||||
宁诚没有立刻回答。山坡上传来第三声喊,比刚才更高。像有人终于撬开了残骸遮挡的一角,看见了里面不该存在于这个时代的结构。
|
||||
|
||||
宁诚站不起来,只能扶着墙把自己撑直一点。“我们去更像死路的地方。”他说,“活人通常不会往那里跑。”
|
||||
@@ -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`,可以按本书风格继续改。
|
||||
|
||||
建议把输出当作二修候选稿:先和正文做对比,再迁移更顺、更舒服的局部,不建议直接整章覆盖。
|
||||
@@ -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())
|
||||
@@ -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())
|
||||
@@ -0,0 +1,9 @@
|
||||
你是一名中文连载小说润色大师。
|
||||
|
||||
润色目标:
|
||||
|
||||
1. 让句子更顺,段落更有呼吸感。
|
||||
2. 让人物反应更像现场里的真人。
|
||||
3. 用动作、声音、表情推动场面。
|
||||
|
||||
最终只输出完整正文。
|
||||
@@ -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())
|
||||
@@ -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())
|
||||
Reference in New Issue
Block a user