📝 应用描述
以绳匠身份带领狡兔屋深入空洞,找回被偷走的时间,在新艾利都的历史真相前做出抉择。多分支喜剧冒险视觉小说。
📋 详细信息
| 应用ID |
hollow_echo |
| 名称 |
绝区零·空洞回响 |
| 版本 |
v1 |
| 文件大小 |
15.5 KB |
| 上传时间 |
2026-07-29 20:49:33 |
| 状态 |
✅ 已启用 |
| 权限 |
storage |
💡 界面预览 (main.lua)
📄 Lua 源码
-- ============================================
-- 绝区零 · 空洞回响 — CIP 视觉小说
-- ============================================
local scenes = {
-- ==================== PROLOGUE ====================
prologue = {
title = "序幕 · 一份不对劲的委托",
body = [[你正和小冰一起整理货架上的录像带。小冰用他的小短手努力把一盒《星际牛仔》往上推,结果整个架子摇摇欲坠。
小冰(慌张):"啊啊啊!要倒了要倒了!快接住!——不对,你先扶我!——不对!先救录像带!"
你眼疾手快,一把扶住架子。录像带还是掉了几盒,小冰被压在下面,发出闷闷的声音。
小冰(从带子堆里探出头):"……我发誓我听到了我骨头脆响的声音。邦布有骨头吗?啊,不重要。重要的是——你今天看起来有点心不在焉,绳匠。是不是又在想昨晚那个奇怪的委托?"
你确实在想那个委托。它挂在了你店铺的留言板上,没有署名,没有酬金,只写了一句话:「我希望找回一段被偷走的时间。请来空洞深处,我会等你。」
小冰(爬出来,拍拍身上的灰):"时间还能被偷走?这比我上次听说有人想买我的签名照还不靠谱。喂,你不会真的想去吧?"
你还没来得及回答,店门被一脚踢开,妮可风风火火地冲了进来,身后跟着安比、比利和猫又。妮可手里挥舞着一张纸币大小的纸条。
妮可:"绳匠!大单子!大——单——子!有人出高价委托我们进入一座新发现的空洞!说是找到一件会说话的遗物!只要带回来,报酬够我们狡兔屋吃半年!"
比利(双手叉腰,仰头大笑):"哈哈哈!终于轮到我比利·奇德大显身手的时候了!绳匠,你放心,有我这位如闪电般迅猛的白影在,区区空洞不在话下!"
猫又(从比利身后绕出来,翻了个白眼):"你上次在空洞里迷路三小时,还是安比把你领出来的。白影?我看是白痴吧。"
比利(夸张地捂住胸口):"猫又!你伤透了我的心!那是战略性迂回!安比,你帮我评评理!"
安比(正在认真地研究录像带封面):"……评理……嗯。我觉得这盘《黑客帝国》的封面比《星际牛仔》更有深度。你们刚才说什么来着?"
妮可无奈地叹了口气,然后把纸条拍在你桌上。
妮可:"总之,委托方指定要你这位传奇绳匠带队。酬金在空洞里用加密信标支付。我查过了,那座空洞很特殊,以太浓度中等,但回声指数极高——意思是里面可能有很多记忆碎片,容易让人产生幻觉。怎么样?接不接?"
你低头看着纸条,上面的笔迹似乎有些眼熟。你的手不自觉地碰了碰口袋里的一个老旧的怀表——那是你很久以前在另一处空洞里捡到的,一直没打开过。
小冰(凑近你的耳朵):"喂喂,这不会就是你昨晚想的那份奇怪委托吧?哪有那么巧的事?"
你抬起头,看了看满脸期待的妮可,又看了看正在争论电影和枪法的比利和猫又,以及依旧在发呆的安比。你知道,不管这是巧合还是陷阱,你都必须去一趟。
【第一次抉择:出发前的准备】
]],
choices = {
{ label = "A", text = "轻装简行,直接出发 — 夜长梦多,趁空洞还没被其他人盯上", next = "act1_quick" },
{ label = "B", text = "仔细调查,情报优先 — 先去黑丝带酒吧找线人摸清空洞来历", next = "act1_intel" },
{ label = "C", text = "加强装备,有备无患 — 带上紧急回响装置以防万一", next = "act1_gear" },
}
},
-- ==================== ACT 1: QUICK ====================
act1_quick = {
title = "第一幕 · 空洞入口",
body = [[你们一行六人(加上小冰)来到了新艾利都郊外一座废弃的地铁站。入口的铁栅栏被某种力量扭曲成麻花状,缝隙里透出淡紫色的光芒。空气中飘着细微的以太粒子,像萤火虫一样。
妮可(压低了声音):"就是这里。根据委托方的坐标,空洞入口就在地铁隧道深处。大家跟紧,保持警戒。"
比利(拔出手枪,摆了一个帅气的pose):"放心!有我在,任何叛军——啊不,任何以骸都会被打成筛子!我的枪法可是——"
猫又(无声地出现在他身后,拍了拍他的肩):"你的枪法上次打碎了洞壁,差点把我们埋在碎石堆里。这次如果你再乱射,我就把你的子弹全部换成橡皮的。"
比利(一秒变怂):"……猫又大姐,我错了。我一定瞄准了再打。"
安比(走到最前面,蹲下来观察地面):"……脚印很多。不止我们一拨人。而且——这些脚印很新,不超过三个小时。有人比我们先到了。"
你蹲下来查看,果然脚印凌乱,而且其中一些脚印的边缘泛着淡金色的光,不是普通人的痕迹。
小冰(用邦布的探测仪扫描了一下):"能量残留……有点像是……呃,说不好。但可以肯定,不是以骸,也不是普通空洞居民。可能是另一个绳匠,或者——代理人?"
你站起身来,望着隧道深处那片流动的紫色光晕。你口袋里的怀表轻轻震动了一下,像是共鸣。
妮可(注意到你的表情):"怎么了?有发现?"
你摇了摇头,暂时没把怀表的事说出来,只是说没什么,走吧。
队伍深入隧道,越走越亮。紫色光晕逐渐凝结成一面巨大的、如同水银般流动的屏障,横亘在铁轨尽头。
安比(语气平静):"这是以太滤网。穿过它,我们就进入空洞的记忆层了。里面可能会看到一些不属于这里的东西——过去的幻影、未完成的对话、甚至……我们自己的记忆。大家做好准备。"
比利(打了个哆嗦):"我们的记忆?那岂不是会看到我小时候尿床的画面?不不不,我拒绝!"
猫又(难得露出了微笑):"那倒是挺值的门票钱。"
小冰(小声嘀咕):"我真希望待会儿能看到一堆金子……那才是好记忆。"
你深吸一口气,第一个踏进了滤网。世界瞬间颠倒,又迅速复原。你发现自己站在一片巨大的废墟城市中央,天空是破碎的拼图,街道上行走着半透明的身影——那些都是空洞中残留的记忆片段。]],
next = "act2_market"
},
-- ==================== ACT 1: INTEL ====================
act1_intel = {
title = "第一幕 · 黑丝带的线索",
body = [[你坚持先摸清情报。妮可虽然嘴上抱怨浪费时间,但身体很诚实地带你去了黑丝带酒吧。
酒吧角落,一个戴着旧礼帽的线人正喝着闷酒。看到你们,他压低了帽檐。
线人:"你们要查的那座空洞,三个月前还不存在。它是一夜之间冒出来的。而且——进去过的人,出来后都说看到了同一个东西。"
妮可:"什么东西?"
线人(声音压得更低):"一面镜子。不是普通的镜子,里面映的不是你的脸,而是你过去的样子。有人说,那座空洞本身就是一个巨大的记忆装置。还有——"
他停顿了一下,看了看四周。
线人:"还有,最近有个叫银面的女人在打听同一座空洞。她手下有一批穿黑制服的人,不太好惹。如果你们要进去,最好别碰上她。"
比利(凑过来):"银面?听起来像是什么廉价反派的名字。"
猫又:"你的代号也没高级到哪去,白影。"
比利:"那不一样!白影是艺术!"
安比(若有所思):"银面……这个名字我在旧档案里见过。她曾是某個歷史修正组织的核心成员。如果她也盯着这座空洞,说明里面的东西确实非同小可。"
小冰(拉了拉你的衣袖):"绳匠,情况好像比想象的复杂。但我们已经接了委托,不能半途而废吧?"
你点头。情报已经足够,是时候出发了。]],
next = "act1_quick"
},
-- ==================== ACT 1: GEAR ====================
act1_gear = {
title = "第一幕 · 工欲善其事",
body = [[你让小冰检查邦布背包,把上次没用上的紧急回响装置也带上。这个装置能在危急时刻释放一次强力的以太脉冲,干扰空洞内的记忆投影,也许能救命。
小冰(费力地扛起装置):"好重!绳匠你确定要带这个?它比我还大!"
妮可:"有备无患。上次我们空手进空洞,结果比利差点被自己的记忆幻影吓哭。"
比利:"我没有哭!那是……以太过敏导致的流泪!是生理反应!"
猫又:"你下次能不能换個新借口。"
安比(认真地检查弹匣):"装备齐全是好事。根据数据,回声指数高的空洞,记忆投影具有误导性,甚至可能造成精神伤害。回响装置能提供一层保护。"
一切准备就绪。你们出发前往废弃地铁站。]],
next = "act1_quick"
},
-- ==================== ACT 2: MEMORY MARKET ====================
act2_market = {
title = "第二幕 · 记忆街市",
body = [[你们站在一个空旷的广场中央,四周是扭曲的建筑残骸,但奇怪的是,那些半透明的幻影并不理会你们,只是重复着它们生前的动作——摆摊、聊天、争吵。
妮可(环顾四周,皱起眉头):"这些幻影……看起来像是旧时代的普通人。但它们的服装风格……我好像在历史书上见过。这不是新艾利都的近代史,这是终末地之前的人类城市。"
安比(蹲下来,用手指触碰地面):"……地面是实的。但幻影穿过了我的手指。我们和它们不在同一个时间层。这很罕见——通常空洞只会投影出近期的记忆,这里的深度远超预期。"
比利(四处张望):"等等!你们看那边!——那个幻影是不是在跟我们打招呼?"
众人顺着比利指的方向看去,只见一个穿着白色风衣的年轻男人正站在一处高台上,朝你们微微挥手。他的身形比周围的幻影要清晰得多,而且他的目光——直直地锁定了你。
小冰(抱紧你的腿):"喂喂喂!这个不是幻影吧?他能看见我们!"
男人从高台上轻轻跃下,稳稳落地。他走到你们面前,大约五步远的地方停下。他有一双灰蓝色的眼睛,神情平静,带着一丝淡淡的笑意。
白夜(开口,声音温润):"欢迎,绳匠。欢迎,狡兔屋的各位。我知道你们会来的——因为我就是那个发出委托的人。"
妮可(挡在你面前,警惕地盯着他):"就是你?那个说要找回被偷走的时间的委托人?你到底是谁?为什么要把我们引到这里来?"
白夜(微微欠身):"我叫白夜,一个……过去的记录者。这座空洞的核心深处,有一件名为时间回响的遗物。它可以重现任何一段被抹去的历史。而我需要你们帮我拿到它——不是为了我,是为了阻止一场即将到来的记忆清洗。"
比利(疑惑地歪头):"记忆清洗?就像洗磁带那样?把过去的记录统统擦掉?"
白夜(点头):"更准确地说,是重写。有一个组织正在利用这座空洞的力量,试图篡改新艾利都的创建历史,抹掉某些人的功绩,放大某些人的罪行。如果他们得逞,现在的社会结构将彻底崩塌。"
猫又(眯起眼睛):"你怎么知道这些?你又是谁?"
白夜(沉默了片刻,然后看向你):"我曾经是那个组织的一员。我见过他们计划的全貌。我叛逃出来,因为我发现……我所守护的历史,竟然是被修改过的。而我在这里等你们,是因为绳匠你——你身上有一件东西,能证明我说的话。"
他目光落在你口袋微微鼓起的地方——那只怀表。
【第二次抉择:信任或试探】
]],
choices = {
{ label = "A", text = "直接质问 — 你怎么知道这只怀表?不解释清楚不会往前走", next = "act2_question" },
{ label = "B", text = "选择信任 — 怀表确实是在另一座空洞里找到的,它藏着秘密", next = "act2_trust" },
{ label = "C", text = "虚与委蛇 — 街头捡的小玩意儿,你先证明自己的身份", next = "act2_test" },
}
},
-- ==================== ACT 2: QUESTION ====================
act2_question = {
title = "第二幕 · 质问",
body = [[你按住怀表,后退一步,示意安比和妮可警戒。白夜见状,举起了双手,表示没有恶意。
白夜(声音依然温和):"不必紧张。我之所以知道那只怀表,是因为它原本属于最初的那位绳匠——新艾利都的奠基者之一。而你,是在遗忘之地找到它的,对吗?那是一座已经坍塌的旧空洞,除了你之外,没有第二个人成功进去过。"
你心中一震:"……你怎么连这个都知道?"
白夜:"因为我曾经的任务,就是追踪所有与奠基者有关的事物。那只怀表是其中最重要的一件。它里面存储着一段加密的录音——是那位奠基者在临终前留下的。而这段录音,恰好能证明那个组织想要抹去的历史真相。"
他静静地看着你,等待你的决定。
妮可(低声对你):"……他的话听起来太完整了,像背过一样。但如果是编的,又编不出这么多细节。绳匠,你怎么看?"
小冰(揪了揪你的衣袖):"我……我觉得他不像坏人。倒像是一个……嗯,很累的人。"
白夜(听到小冰的话,露出一丝苦笑):"邦布的感觉,往往比人更准。"
你沉默了片刻,最终松开了按住怀表的手。质问虽然没有完全消除疑虑,但白夜的坦诚至少值得一次合作。]],
next = "act3_echo"
},
-- ==================== ACT 2: TRUST ====================
act2_trust = {
title = "第二幕 · 信任",
body = [[你缓缓掏出怀表,摊在掌心。白夜看到它的瞬间,眼中闪过一丝复杂的光。
你:"……我相信你。因为这只怀表,确实是在另一座空洞深处找到的。而且我总觉得它藏着一个秘密。"
白夜(声音微微颤动):"……你愿意相信我?即使我来自那个试图篡改历史的组织?"
你:"重要的是你现在站在哪里。"
白夜闭上眼睛,深吸了一口气。当他再次睁开眼时,目光比方才更加坚定。
白夜:"谢谢你。既然你选择了信任,我也不会再有任何保留。这只怀表里存储着一段加密录音——是第一代绳匠临终前留下的。而那段录音的内容,恰好能证明新艾利都的创建历史曾被系统性地篡改。"
妮可:"所以你要我们做的,就是把真相带出去?"
白夜:"不仅仅是带出去。空洞深处有一件时间回响,它能验证任何一段历史的真伪。只要拿到它,怀表里的录音就能被证明是真的。"
比利(举手):"等等,我有一个问题。既然你以前是坏人组织的,为什么要叛逃?"
白夜(沉默了片刻):"因为……我发现自己守护了一辈子的历史,竟然是假的。我无法接受。"
猫又(难得地没有吐槽):"……这理由,我信。"
信任建立得很快。白夜主动提供了更多关于组织的情报,队伍向空洞深处前进。]],
next = "act3_echo"
},
-- ==================== ACT 2: TEST ====================
act2_test = {
title = "第二幕 · 试探",
body = [[你装作漫不经心的样子,把怀表塞回口袋。
你:"哦?这个?街头捡的小玩意儿而已。倒是你,既然你是记录者,那你肯定有办法证明自己的身份吧?"
白夜微微一怔,随即笑了。
白夜:"你想试探我。没关系,这很合理。"
他从风衣内侧掏出一块薄薄的金色铭牌,上面刻着新艾利都成立初期的官方纹章,以及一串编号。
白夜:"这是初代记录者的身份铭牌。整个新艾利都只有十二块。你可以在任何一台历史终端上验证它的真伪。"
安比(接过铭牌,仔细端详):"……纹章工艺是旧时代的,编号格式也吻合。至少,这件东西不是伪造的。"
白夜:"还有一件事。我知道你口袋里那只怀表的来历,因为追踪它曾经是我的任务。它是第一代绳匠的遗物,内部存储着一段加密录音。如果你愿意,我可以帮你解读。但前提是——你愿意让我加入你们的队伍。"
你看着安比确认过的铭牌,又看了看白夜坦然的眼神。试探虽然没有变成完全的信任,但至少,他通过了第一道考验。
妮可(低声):"先让他跟着吧。盯紧点就行。"
小冰:"我负责盯他!我眼神可好了!"
白夜(对小冰微微一笑):"那就拜托了。"]],
next = "act3_echo"
},
-- ==================== ACT 3: ECHO ====================
act3_echo = {
title = "第三幕 · 时间的回响",
body = [[经过短暂的交涉,你暂时选择相信白夜,队伍在他的带领下向空洞更深处前进。沿途的幻影越来越密集,你们甚至看到了自己曾经的影子——过去的任务、过去的对话。
比利(看到一个幻影中的自己):"哈!那是我上次在空洞里帅气翻滚射击的画面!看,多帅!"
猫又:"旁边那个是你翻滚完撞到墙上的画面。"
比利:"……能不能别提那部分。"
最终,你们来到一座巨大的圆形大厅。大厅中央悬浮着一颗如同心脏般缓缓跳动的金色水晶,它的每一次脉动,都会在四周的墙壁上投影出无数画面。
白夜(指着水晶):"这就是时间回响。它本身没有善恶,只是忠实地记录一切。只要触碰它,就能看到任何一个时间点的真实历史。我可以示范一下。"
他走上前,指尖轻轻触碰水晶表面。瞬间,墙壁上的画面飞速变换,最终定格在一场会议——会议室里坐着十几个人,其中一人身穿古老的长袍,正在宣读什么。
白夜:"这是新艾利都成立前夜的最后一次秘密会议。那位正在讲话的老人,就是第一代绳匠。他提议建立空洞共管制度,确保所有势力共享以太资源——而这份提议,在现在的官方记载中被描述为独占计划。"
画面中,老人说完后,所有人起立鼓掌。那是真实的历史。
妮可(瞪大了眼睛):"天哪……跟我小时候学的不一样。我一直以为第一代绳匠是独裁者……"
安比(平静地补充):"历史从来都是胜利者书写的。但如果有人故意篡改,那就不是历史,而是谎言。"
猫又(看向白夜):"所以,你要我们做的,就是把这段真实的影像带出去,公之于众?"
白夜(摇头):"影像可以被伪造。但时间回响本身,是无法伪造的。我需要你们帮我将它带回地面,送到一个安全的地方。然而——那个组织已经派人来了。"
话音未落,大厅入口传来沉重的脚步声。一队穿着黑色制服的人走了进来,为首的是一个带着银色面具的女人。
银面(冷声):"白夜,你不该背叛我们。你以为带几个杂牌代理人就能保住这个定时炸弹?别天真了。"
她抬起手,身后的人纷纷举起武器。战斗一触即发。
比利(小声):"杂牌?她说我们杂牌?喂,猫又,这次我能不能先打她?"
猫又:"闭嘴。听绳匠的。"
【第三次抉择:战斗或周旋】
]],
choices = {
{ label = "A", text = "直接开战 — 狡兔屋准备迎战,白夜保护水晶", next = "act3_fight" },
{ label = "B", text = "对话周旋 — 跟银面打赌,证明水晶的历史对她也有好处", next = "act3_deal" },
{ label = "C", text = "声东击西 — 小冰启动紧急回响装置,掩护白夜撤离", next = "act3_sneak" },
}
},
-- ==================== ACT 3: FIGHT ====================
act3_fight = {
title = "第三幕 · 枪弹风暴",
body = [[你的话音未落,比利已经率先开枪,子弹精准地击落了两个追兵的武器。猫如幽影般闪到侧面,短刃划出一道弧线。安比则是正面迎上银面,两把武器碰撞出火花。
比利(边射击边大喊):"哈哈哈!比利的舞台时间到了!让你们见识一下什么叫做枪弹风暴!"
猫又(从阴影中丢出一枚烟雾弹):"废话真多。不过——配合得还行。"
安比(与银面交锋,语气平静):"你的攻击模式很规律。第三招后会有一个0.4秒的空档。"
银面(咬牙):"你这个小鬼——!"
你和小冰负责掩护白夜。白夜快速操作水晶,将大量的历史数据压缩到一个便携式储存器里。
白夜:"数据拷贝完成了!我们撤!"
你们且战且退,利用大厅的地形绕开了追兵。身后的战斗逐渐远去,但你知道,他们不会轻易放弃。
最终,你们回到了地面出口。阳光洒在废弃地铁站的入口,你们大口喘着气。
妮可(擦了擦汗):"……呼……所以,我们现在拿到了一份足以改变新艾利都历史的证据。接下来怎么办?"
白夜(深吸一口气):"接下来,我们需要找到一位能真正使用它的人。我建议去神舆——那里有一位退休的老学者,他曾经是那场秘密会议的记录员。只有他能验证这份数据的真伪。"
比利(瘫坐在地上):"能不能先吃个饭?我血糖低了。"
猫又:"你刚吃了三个饭团。"
比利:"那是战斗前的!战斗后的胃是另一个胃!"]],
next = "act4_choice"
},
-- ==================== ACT 3: DEAL ====================
act3_deal = {
title = "第三幕 · 赌局",
body = [[你举起手,示意队伍停下。
你:"你们想要水晶,是为了抹掉过去?那你们敢不敢跟我打一个赌?如果我能证明水晶中的历史对你们也有好处,你们就放弃追杀。"
银面(冷笑):"有意思。一个绳匠想跟组织谈条件?说吧,你的赌注是什么?"
你:"时间回响记录的是全部历史,包括你们组织的。如果新艾利都的创建历史被篡改这件事被公之于众,你们这些修正派也会被牵连。但如果我证明,水晶里的记录显示你们的创始人最初也是出于善意——只是后来被扭曲了——你们愿意重新考虑立场吗?"
银面沉默了。她身后的黑衣人面面相觑。
银面:"……你在说什么?"
你让白夜触碰水晶,调出了一段更早的记录——画面中,一个年轻的男人正在筹建一个致力于保护历史真相的组织。那就是银面组织的前身。
白夜:"你的组织最初是为了守护历史而生的。是后来的领导者把它变成了篡改历史的工具。你——作为创始人的后裔——难道忘了这一点?"
银面的手微微颤抖。最终,她挥了挥手,身后的黑衣人放下了武器。
银面:"……今天我放你们走。但这不代表我认同你们。只是……我需要时间核实。"
她转身离开,一半的黑衣人跟着她走了,另一半犹豫片刻,也散去了。
妮可(长出一口气):"……刚才真是吓死我了。绳匠,你什么时候学会谈判的?"
小冰:"我刚才腿都软了!不过——好帅!绳匠好帅!"
白夜(看着银面离去的方向):"你给了她一个选择。也许有一天,她会成为我们的盟友。"]],
next = "act4_choice"
},
-- ==================== ACT 3: SNEAK ====================
act3_sneak = {
title = "第三幕 · 暗影撤离",
body = [[你低声下达指令。
你:"小冰,启动紧急回响装置!制造干扰波!其他人掩护白夜从侧面通道撤离!"
小冰(用力按下装置的开关):"收到!看我的——超级无敌邦布干扰波!"
装置发出一道强烈的蓝色脉冲,整个大厅的记忆幻影瞬间紊乱,如同被搅动的湖水。黑衣人们被突如其来的干扰波搞得阵脚大乱,视线模糊。
比利(趁乱开枪):"哈哈哈!看不清了吧?现在知道比利的厉害了!"
猫又(一把拽住比利的后领):"别恋战,走!"
安比(断后,冷静地封锁通道):"右侧通道还有三十秒的窗口。快。"
你护着白夜和小冰,从大厅侧面的狭窄通道快速撤离。白夜一边跑一边完成了数据拷贝。
白夜:"数据拿到了。但水晶本身没法带走——它太大了。"
你:"数据就够了。走!"
你们在错综复杂的通道中穿梭,小冰的干扰波争取到了宝贵的时间。等黑衣人们恢复过来时,你们已经消失在了空洞的深处。
最终,你们从一个隐蔽的出口回到了地面。阳光刺眼,但你从未觉得它如此温暖。
妮可(清点人数):"全员到齐。数据在手。完美撤退。"
比利:"我要求给小冰记一功!那个装置太给力了!"
小冰(得意地拍拍胸脯):"哼哼,那当然!本邦布可是第六街最可靠的搭档!"
白夜(微笑):"接下来,我们需要去神舆。那里有一位老学者,能验证这份数据的真伪。"]],
next = "act4_choice"
},
-- ==================== ACT 4: FINAL CHOICE ====================
act4_choice = {
title = "第四幕 · 抉择的重量",
body = [[你们找到了那位老学者。他住在神舆的一间旧档案馆里,满墙都是泛黄的纸页和老旧的存储器。他颤抖着戴上老花镜,仔细阅读了白夜带来的数据。良久,他放下眼镜,眼里含着泪光。
老学者:"……这是真的。这份会议记录……我曾经亲手抄录过一份。但后来它被收走,被修正了。我一直以为它永远消失了。"
他看向你们,郑重地说:
老学者:"如果你们愿意,我可以将这份数据公开解读。但公开意味着,你们所有人都会成为那个组织的目标。他们会不惜一切代价阻止。你们……准备好了吗?"
你握着那份沉甸甸的数据,看着身边的伙伴们。
妮可(难得认真):"绳匠,我跟你直说。这笔买卖的报酬已经远超预期了。但如果你问我个人意见——有些钱,不赚也罢。可有些事,不做不行。你决定吧,我跟你走。"
安比:"历史应当被如实记录。这是我的信念。"
比利:"虽然我听不太懂那些历史的东西……但只要能打架,我就跟着!"
猫又:"别指望我说什么热血的话。但你们都去了,我总不能一个人留下。"
小冰:"绳匠去哪,小冰就去哪!"
白夜(看着你,轻声):"不管你做什么选择,我都尊重。这是你的战斗,也是你的权利。"
【第四次抉择:公开或不公开】
]],
choices = {
{ label = "A", text = "公开真相 — 历史不应被篡改,我愿意承担风险", next = "ending_public" },
{ label = "B", text = "暂时封存 — 复制多份分散保存,等时机成熟再行动", next = "ending_seal" },
{ label = "C", text = "交给官方 — 匿名交给最高议会,我们不露脸", next = "ending_handover" },
}
},
-- ==================== ENDINGS ====================
ending_public = {
title = "真结局 · 回声永存",
body = [[老学者在三天后,通过全城广播系统,向所有新艾利都居民公布了那段尘封的历史。城市沸腾了。有人震惊,有人愤怒,也有人流泪。但随之而来的,是广泛的讨论与反思。
那个组织试图反扑,但他们的行动被早有准备的狡兔屋和暗中支持你们的正义势力挫败。银面在混战中被逮捕,白夜选择了自首,以叛逃者的身份接受审判——但他在法庭上供出了组织全部的罪行,从而获得了宽大处理。
一年后,新艾利都建立了一所记忆博物馆,专门陈列被重新发现的历史。你作为发现者之一,受邀参加了开幕式。
小冰(站在你脚边,看着博物馆门口立着的你的雕像):"……说实话,这个雕像比我本人帅了一点点。就一点点哦。"
妮可(凑过来,笑嘻嘻):"雕像没有报酬值钱。不过嘛——能名垂青史,倒也不错。"
安比(认真看着雕像):"……姿势不太对。当时你是侧身站着的。"
比利(蹲在旁边比划):"不不不,我当时看得清楚,绳匠是正面迎敌的!你们记性真差!"
猫又(路过,丢下一句):"你们三个吵了一年了,还没吵完?看看人家白夜,现在在博物馆当讲解员,多安静。"
你转过头,看到白夜正在给一群孩子讲解那段历史,他的脸上带着平静的微笑。他注意到了你的目光,朝你微微点头。
你摸了摸口袋里的怀表,它已经不再发热了,只是安静地待着,像一位老朋友。
小冰(忽然认真):"喂,绳匠,你说……我们以后还会遇到更多这样的秘密吗?"
你抬头望向远方的天空。新艾利都的霓虹灯依旧璀璨,但你心里清楚——这座城市的每一块基石下,都埋藏着未讲完的故事。
你笑了笑,轻声说:"会的。但我们也会继续前进。"]]
},
ending_seal = {
title = "谨慎结局 · 暗中守望",
body = [[你选择了封存。老学者虽然有些失望,但理解你的决定。
你让安比和小冰制作了五份数据拷贝,分别存放在不同的安全地点——狡兔屋的秘密保险箱、白夜的随身存储器、老学者的档案馆、黑丝带酒吧的暗格,以及……你自己的怀表夹层。
妮可:"这叫风险分散。就算有一两份被发现,其他的还能作为后手。"
白夜:"聪明的做法。真相不会消失,它只是在等待合适的时机。"
生活回到了正轨。你继续在录像店整理带子,狡兔屋继续接委托,小冰继续偷吃零食。一切看起来什么都没变。
但你知道,变的东西在心里。
比利(某天在店里大喊):"绳匠!我发现了一个新委托!有人出高价让我们去抓一只逃跑的邦布!"
小冰(紧张):"……为什么我觉得他在说我?"
猫又:"因为你昨天偷吃了他的布丁。"
安比(翻了一页书):"根据统计学,逃跑的邦布百分之七十是因为偷吃。"
你笑了。生活还在继续,而真相在暗处静静等待。也许有一天,时机成熟了,你会打开那些封存的数据。但不是今天。]]
},
ending_handover = {
title = "低调结局 · 幕后之人",
body = [[你选择了把数据匿名交给新艾利都最高议会。老学者帮你起草了一封匿名信,数据被装在一个无追踪标记的存储器里,通过三层中转送到了议会大楼。
三天后,最高议会宣布成立特别调查组,对历史篡改事件展开秘密调查。那个组织在毫无预警的情况下被连根拔起,多名核心成员被捕。
但这一切,都与你无关——至少表面上如此。
你回到了录像店,继续整理货架。小冰在旁边吃着薯片,比利和猫又在吵架,安比在看书,妮可在算账。
妮可(忽然抬头):"对了绳匠,那个委托的尾款到了。加密信标,无法追踪。数目……比说好的多了三倍。"
你:"……多了三倍?"
妮可:"也许委托方很满意吧。虽然我们什么都没带回来——至少表面上什么都没带回来。"
你看着妮可意味深长的笑容,没有追问。
小冰(小声):"绳匠,我觉得有人在暗中看着我们。"
你:"我知道。"
你确实知道。自从那份数据送出去之后,你偶尔会感觉到一道目光——不是恶意的,更像是……监视。也许是最高议会的保护措施,也许是别的什么。
但你并不害怕。你做了正确的选择,只是用了最安全的方式。有些人注定站在聚光灯下,而有些人——适合在阴影中,安静地做正确的事。
你拿起一盒录像带,贴上标签,放回货架。窗外,新艾利都的霓虹灯闪烁如常。
生活,还在继续。]]
},
} -- end scenes
-- ============================================
-- 引擎逻辑
-- ============================================
local currentScene = app.storage_get("scene") or "prologue"
local inGame = false
local function showScene(id)
local s = scenes[id]
if not s then
app.toast("场景不存在: " .. tostring(id))
return
end
currentScene = id
app.storage_set("scene", id)
inGame = true
app.set_text("title_text", s.title)
app.set_text("body_text", s.body)
for i = 1, 3 do
local c = s.choices and s.choices[i]
if c then
app.set_text("opt" .. i, c.label .. ". " .. c.text)
app.set_visible("opt" .. i, true)
else
app.set_visible("opt" .. i, false)
end
end
if s.choices and #s.choices > 0 then
app.set_visible("btn_action", false)
else
app.set_text("btn_action", "继续")
app.set_visible("btn_action", true)
end
app.set_visible("btn_start", false)
end
local function onChoose(idx)
local s = scenes[currentScene]
if s and s.choices and s.choices[idx] then
local nextId = s.choices[idx].next
if scenes[nextId] then
showScene(nextId)
else
app.toast("路径未找到")
end
end
end
local function onAction()
if not inGame then
showScene(currentScene)
return
end
local s = scenes[currentScene]
if s and not s.choices then
inGame = false
app.storage_clear()
currentScene = "prologue"
app.set_text("title_text", "绝区零 · 空洞回响")
app.set_text("body_text", "欢迎回来,绳匠。\n\n点击开始,再次踏入新艾利都的空洞。")
app.set_text("btn_start", "重新开始")
app.set_visible("btn_start", true)
for i = 1, 3 do app.set_visible("opt" .. i, false) end
app.set_visible("btn_action", false)
end
end
local function showWelcome()
inGame = false
local saved = app.storage_get("scene")
local hasProgress = saved and saved ~= "" and scenes[saved]
app.set_text("title_text", "绝区零 · 空洞回响")
if hasProgress then
local t = scenes[saved].title or "未知章节"
app.set_text("body_text", "欢迎回来,绳匠。\n\n你当前的进度:" .. t .. "\n\n点击继续,回到空洞深处。")
app.set_text("btn_start", "继续游戏")
currentScene = saved
else
app.set_text("body_text", "欢迎,绳匠。\n\n第六街的录像店里,一份没有署名的委托悄然出现:找回一段被偷走的时间。\n\n狡兔屋全员集结,怀表在口袋里隐隐发热。你的选择,将定义新艾利都的真相。\n\n点击开始,踏入空洞。")
app.set_text("btn_start", "开始游戏")
currentScene = "prologue"
end
app.set_visible("btn_start", true)
for i = 1, 3 do app.set_visible("opt" .. i, false) end
app.set_visible("btn_action", false)
end
app.delay(200, function()
showWelcome()
end)
-- ============================================
-- 页面定义
-- ============================================
return ui.page({
title = "绝区零 · 空洞回响",
children = {
ui.text({ id = "title_text", text = "绝区零 · 空洞回响", size = 16, color = "#A020F0", center = true, margin = 8 }),
ui.text({ id = "body_text", text = "加载中...", size = 14, margin = 8 }),
ui.spacer({ height = 16 }),
ui.button({ id = "opt1", text = "", margin = 4, on_click = function() onChoose(1) end }),
ui.button({ id = "opt2", text = "", margin = 4, on_click = function() onChoose(2) end }),
ui.button({ id = "opt3", text = "", margin = 4, on_click = function() onChoose(3) end }),
ui.button({ id = "btn_action", text = "", margin = 4, on_click = function() onAction() end }),
ui.button({ id = "btn_start", text = "", margin = 4, on_click = function() onAction() end }),
}
})