← 返回

应用详情

📦

原神·白夜烬歌

版本 v1 · 11.9 KB
ID: white_night_ashes
⬇ 下载 CIP 🔍 返回列表
📝 应用描述
以旅行者身份深入层岩巨渊,揭开白夜之塔的秘密,在命运岔路做出抉择。多分支冒险视觉小说。
📋 详细信息
应用ID white_night_ashes
名称 原神·白夜烬歌
版本 v1
文件大小 11.9 KB
上传时间 2026-07-29 20:50:06
状态 ✅ 已启用
权限 storage
💡 界面预览 (main.lua)
📄 Lua 源码
-- ============================================
-- 原神 · 白夜烬歌 — CIP 视觉小说
-- ============================================

local scenes = {

-- ==================== PROLOGUE ====================
prologue = {
title = "序幕 · 地底之眼",
body = [[你刚从璃月港赶来,派蒙正拿着一份地图在耳边扇风。远处,矿工们正围着一块巨大的黑曜石碎片议论纷纷。你走过去,一位年迈的矿工抬头看到你,露出敬畏的表情。

老矿工:"哦!您就是那位旅行者大人吧!太好了……我正愁没人能听我说这事。三天前,我在最深的矿洞尽头凿开了一面岩壁,您猜我看见了什么?——一座白色的城!悬在半空中,发着蓝光,像月亮一样漂亮,又像鬼火一样瘆人。"

派蒙(好奇地凑过来):"白色的城?在层岩巨渊底下?那里不是只有石头和黑泥吗?"

老矿工:"错不了!我干这一行四十年,从没见过那种石头。它不像是璃月的,倒像是……像是什么古老的东西,被封印了很久很久。"

这时,你的口袋传来一阵温热——那是你身上携带的一枚坎瑞亚遗物「星盘」在微微颤动。派蒙惊叫一声。

派蒙:"星盘在发光!难道它和那座遗迹有什么关系?"

你抬头望向层岩巨渊深处,那里一片漆黑,但在极远处,似乎有一点微弱的白光在闪烁。你心中升起一种熟悉又陌生的预感。

你正准备动身,两道人影从不同方向走来。一位是迪卢克,他风尘仆仆,显然刚从蒙德赶过来;另一位是魈,他无声无息地出现在岩石上方,手中握着和璞鸢,眼神锐利。

迪卢克(微微点头):"旅行者,好久不见。璃月七星联系了我,说层岩巨渊发现了异常遗迹,可能与深渊教团有关。我正好在调查一件关于「倒悬之塔」的传闻,所以顺路过来看看。"

魈(声音清冷):"我察觉到地底有一股「非人之物」的气息。与魔神残渣不同,更加……古老。我建议你谨慎行事,旅行者。"

派蒙左右看看,然后转向你。

派蒙:"哇!这下我们的队伍一下子壮大了!那……我们要不要先下去看看,还是再做点准备?"

【第一次抉择:组建探索队伍】
]],
choices = {
{ label = "A", text = "全员同行 — 三位一体,无论遇到深渊教团还是遗迹机关都能互相照应", next = "act1_together" },
{ label = "B", text = "分头行动 — 迪卢克去营地收集情报,魈和你先下到遗迹外围", next = "act1_split" },
{ label = "C", text = "精锐突入 — 魈夜战主攻,迪卢克后方戒备,你独自潜入遗迹核心", next = "act1_solo" },
}
},

-- ==================== ACT 1: TOGETHER ====================
act1_together = {
title = "第一幕 · 白夜之门",
body = [[你、迪卢克、魈沿着矿工开辟的狭窄通道向下走了将近两小时,空气变得越来越冷,石壁上开始出现银白色的结晶,发出微弱的荧光。终于,通道豁然开朗——一座巨大的、完全由白色石材构筑的浮空平台出现在你们面前,悬浮在一条深不见底的地底裂谷上空。无数蓝白色的光带从平台边缘垂下,如同凝固的瀑布。

派蒙(压低声音):"哇……这看起来完全不像是璃月或蒙德的建筑风格啊……那些纹路,我好像在哪儿见过……"

迪卢克(缓步上前,观察地面):"这些纹路与坎瑞亚遗迹的特征吻合度超过七成。而且……深渊教团的标记出现在那边的柱基上。他们已经来过了。"

魈(握着和璞鸢,目光扫视四周):"不止是来过。他们还在附近,我闻到了「扭曲」的气味。"

你拿出星盘,它正发出持续的白光,并且指向平台中央的一座高耸的、如同日晷般的装置。装置顶端悬浮着一颗拳头大小的球形结晶,内部仿佛封存着一片燃烧的星空。

就在你们靠近装置时,一道身影从平台另一侧的阴影中走出。那是一个穿着白色长裙的少女,有着淡金色的头发和异色的瞳孔。她看起来不过十五六岁,但神情中却带着一种超越年龄的平静。

神秘少女(声音轻柔,却响彻整个空间):"你们终于来了……我是「器灵」,这座「白夜之塔」的守护者。我等了你们很久,旅行者。"

派蒙(震惊):"器……灵?等等!你认识我们吗?"

神秘少女(微微摇头):"我不认识你们,但我认识你身上的「星盘」。那是坎瑞亚最后一位「炼金术士」的手信。而这座塔,是坎瑞亚为了「对抗天理」而建造的「因果兵器」的预演原型。"

她抬起手,那颗结晶缓缓飘落到她掌心。整个平台开始震动,蓝色的光带加速流动。

神秘少女:"深渊教团想要利用它来撕裂提瓦特的「边界」,让「漆黑的侵蚀」再次降临。而我——我需要你们的帮助,来决定它的最终命运。"

【第二次抉择:信任或怀疑】
]],
choices = {
{ label = "A", text = "选择信任 — 相信她,这座塔的力量不应被深渊或天理任意利用", next = "act2_trust" },
{ label = "B", text = "保持警惕 — 坎瑞亚的遗产常伴随代价,先检查周围是否有埋伏", next = "act2_caution" },
{ label = "C", text = "直接质问 — 要求她证明自己不是深渊教团的傀儡", next = "act2_question" },
}
},

-- ==================== ACT 1: SPLIT ====================
act1_split = {
title = "第一幕 · 分兵探路",
body = [[你将队伍分为两组。迪卢克前往矿工营地,他敏锐的情报嗅觉能从碎片中拼出真相;魈和你先下到遗迹外围,用信号弹保持联络。

下降的途中,魈一直沉默。通道里只剩下水滴的回声和你们两人的脚步。他忽然停下脚步。

魈:"旅行者,前方两百步有「魔神残渣」的气息。但……不纯粹。像是被人刻意引导过的。"

你握紧武器。果然,转过一个弯道后,你们遭遇了深渊教团的先遣队——三只深渊法师和一群丘丘暴徒。它们似乎正在搬运某种黑色晶体。

魈(长枪一振):"让开,我来。"

风元素在狭窄的通道中卷起风暴。魈的身影如同一道金色的闪电,和璞鸢所到之处,深渊法师的护盾如纸般破碎。三分钟内,敌人全部倒下。但最后一只深渊法师临死前,引爆了那批黑色晶体。

爆炸的冲击波让你后退几步,但魈一把握住你的手臂,将你护在身后。他的背影在烟尘中纹丝不动。

魈(回头看向你,语气难得柔和):"……小心。"

就在这时,你的信号弹升空。几分钟后,迪卢克从上方通道赶来,手中拿着几页从深渊法师身上搜出的密信。

迪卢克(递给你密信):"营地那边也有线索。这些密信提到「倒悬之塔」和「因果观测」。看来这座遗迹远比我们想象的危险——它的本质不是武器,而是某种「窥探命运」的装置。"

你们三人重新汇合,继续向下。终于,通道尽头,一座白色的浮空平台出现在眼前。神秘少女已在等候。]],
next = "act1_together_meet"
},

act1_together_meet = {
title = "第一幕 · 白夜之门",
body = [[你、迪卢克、魈终于抵达平台。少女已等候多时。

神秘少女:"你们终于来了……我是「器灵」,这座「白夜之塔」的守护者。我等了你们很久,旅行者。"

她解释了塔的来历——坎瑞亚为对抗天理而建的「因果兵器」原型。深渊教团想用它撕裂提瓦特的边界。

迪卢克(低声对你说):"之前在营地发现的密信印证了她的说法。至少,关于深渊教团的目标,她没有说谎。"

魈:"但她的来历仍有疑问。旅行者,你如何判断?"

【第二次抉择:信任或怀疑】
]],
choices = {
{ label = "A", text = "选择信任 — 迪卢克的情报佐证了她的话,相信她", next = "act2_trust" },
{ label = "B", text = "保持警惕 — 即便情报吻合,仍要先检查周围", next = "act2_caution" },
{ label = "C", text = "直接质问 — 要求她证明自己不是深渊教团的傀儡", next = "act2_question" },
}
},

-- ==================== ACT 1: SOLO ====================
act1_solo = {
title = "第一幕 · 孤身入塔",
body = [[你决定独自潜入。魈在上方岩壁守望,迪卢克在营地外围策应。你只身一人,沿着狭窄的白色通道深入塔的内部。

塔内寂静得能听见自己的心跳。墙壁上的纹路随着你的触碰微微发光,仿佛在回应星盘的共鸣。你避开了一处深渊法师的巡逻队,又破解了两道元素机关——你对元素的敏感让你比任何人都更适合这条路径。

但当你抵达塔的核心观测室时,你看到了一座巨大的环形镜面。镜中映出的不是你的倒影,而是无数分裂的影像——提瓦特的过去、现在,以及……未来。

你看到了蒙德被黑火笼罩,璃月港沉入海底,须弥雨林干涸成沙。你看到了深渊从地底涌出,七国化为战场。

就在你震惊之际,身后传来轻柔的声音。

神秘少女:"你比预想中来得更早,旅行者。我是「器灵」,这座塔的守护者。"

你转身,看到一个白裙少女静静站在阴影中,异色瞳孔倒映着镜面的光。

神秘少女:"不要紧张。如果我想伤害你,在你踏入第一道机关时就可以动手。我等了你很久——等一个能理解这座塔真正用途的人。"

她伸出手,掌心悬浮着那颗封存星空的结晶。

神秘少女:"深渊教团想用这座塔锁定一个「最糟糕的未来」并强行实现它。而我,需要你的帮助来决定它的命运。"

【第二次抉择:信任或怀疑】
]],
choices = {
{ label = "A", text = "选择信任 — 她本可加害却没有,相信她", next = "act2_trust" },
{ label = "B", text = "保持警惕 — 独自一人更要小心,先确认环境", next = "act2_caution" },
{ label = "C", text = "直接质问 — 要求她证明自己不是深渊的傀儡", next = "act2_question" },
}
},

-- ==================== ACT 2: TRUST ====================
act2_trust = {
title = "第二幕 · 信任之光",
body = [[你走上前,放下武器,与少女平视。她微微一怔,眼中闪过一抹难以置信的光泽。

神秘少女(声音微微颤动):"……你愿意相信我?即使我来自那个被覆灭的国度,即使是「兵器」的一部分?"

旅行者:"我见过太多被历史误解的人和物。重要的是现在你站在哪里,以及你想做什么。"

少女闭上眼睛,嘴角浮现出一丝久违的笑意。她将结晶举向天空,整个白夜之塔爆发出耀眼的光芒,无数光影在你们周围流转,构成了一幅幅幻象——坎瑞亚的街道、工厂、图书馆,以及最后的一幕:天理的「四影」降临,将一切化为灰烬。

神秘少女(声音带着哽咽):"这是塔的记忆。我见证了灭亡,也见证了牺牲。这座塔的真正用途,不是杀戮,而是「观测」——它可以窥见未来命运的无数分支。深渊教团想用它来锁定一个「最糟糕的未来」并强行将其实现。"

魈(握紧武器):"什么未来?"

神秘少女(目光沉痛):"一个所有魔神残渣重新苏醒、七国化为战场的未来。"

信任已经建立。少女引领你们前往塔顶的观测核心。]],
next = "act3_fork"
},

-- ==================== ACT 2: CAUTION ====================
act2_caution = {
title = "第二幕 · 谨慎之眼",
body = [[你没有立刻回应,而是示意迪卢克和魈检查四周。

迪卢克(片刻后回报):"平台周围没有埋伏,但北面通道有深渊教团近期的活动痕迹。他们至少派了一支小队,但目前似乎撤走了。"

魈:"少女身上没有魔神残渣的气息,也没有深渊的扭曲感。她的力量……很古老,但不邪恶。"

你这才转向少女。

旅行者:"我需要更多证据才能完全信任你。但如果你说的是真的,请继续。"

神秘少女(微微低头):"……谨慎是对的。坎瑞亚的遗产确实常伴随代价。"

她展示塔的记忆——坎瑞亚的繁华,以及天理覆灭它的那一幕。

神秘少女:"这座塔的真正用途是「观测」未来命运的无数分支。深渊教团想锁定一个最黑暗的未来并强行实现它——一个所有魔神残渣苏醒、七国化为战场的未来。"

迪卢克:"和我们在营地截获的密信内容吻合。看来她没有说谎。"

信任虽然来得慢,但最终建立。少女引领你们前往观测核心。]],
next = "act3_fork"
},

-- ==================== ACT 2: QUESTION ====================
act2_question = {
title = "第二幕 · 试炼之火",
body = [[你直视少女的眼睛。

旅行者:"你说你是「守护者」,但你怎么证明你不是深渊教团的傀儡?或者——你本身就是在引导我们走向陷阱?"

少女没有生气,反而露出一丝苦涩的笑。

神秘少女:"合理的质疑。那么,就让塔来证明吧。"

她抬手一挥,塔的核心骤然亮起。你们脚下的地面崩裂,三道由纯粹元素之力凝聚的幻影从地底升起——它们模仿着深渊使徒的形态,却拥有更纯粹的力量。

魈(长枪横扫):"来了!"

战斗爆发。魈的风元素与幻影激烈碰撞,迪卢克的重剑点燃烈焰。你也在战斗中使出全力。三道幻影虽然强大,但你们配合默契,最终将它们一一击破。

战斗结束后,少女静静地站在原地,纹丝未动。如果她是敌人,刚才完全可以从背后偷袭。

神秘少女(平静地):"现在你相信了吗?这座塔的真正用途是「观测」未来。深渊教团想锁定一个最黑暗的未来——七国化为战场。而我,需要你的帮助来决定它的命运。"

你收起武器,点了点头。信任以另一种方式建立——通过战斗的证明。]],
next = "act3_fork"
},

-- ==================== ACT 3: THE FORK ====================
act3_fork = {
title = "第三幕 · 命运的岔路",
body = [[少女将你们带到塔顶,那里有一面巨大的环形镜面,镜中映照出无数分裂的影像——每一个都是提瓦特未来的可能性。有的和平,有的战乱;有的天理重现,有的深渊吞噬万物。你们看到了蒙德被黑火笼罩,璃月港沉入海底,须弥雨林干涸成沙。

迪卢克(眉头紧锁):"这就是深渊教团想要的力量?他们想强行实现其中一个未来?"

神秘少女:"是的。他们已经锁定了「暗影未来」——那个最黑暗的可能性。但这座塔的核心权限还在这里,我可以改写锁定的目标。问题是,改写需要消耗我的「存在」作为代价。"

她平静地看向你,仿佛早已做好了觉悟。

神秘少女:"我可以将「暗影未来」替换成一个相对平衡的未来——代价是,我会彻底消失,被塔的力量吞噬。或者……你们也可以选择「关闭」塔,彻底毁灭它,但那样会让深渊教团失去目标,也可能让这些未来观测的知识永久失落。"

她等待着你的决定。

【第三次抉择:塔的终局】
]],
choices = {
{ label = "A", text = "牺牲塔灵,改写未来 — 不能让深渊得逞,这是拯救所有人的方式", next = "ending_sacrifice" },
{ label = "B", text = "彻底摧毁白夜之塔 — 任何决定未来的力量都是危险的,交给凡人", next = "ending_destroy" },
{ label = "C", text = "寻找第三条路 — 一定有不牺牲你也能达成目的的方法", next = "ending_thirdway" },
}
},

-- ==================== ENDINGS: TOWER FATE ====================
ending_sacrifice = {
title = "结局 · 烬歌",
body = [[你握住了少女的手,她微笑着,身体开始化作光点,融入塔的核心。镜面上的暗影未来逐渐褪色,取而代之的是一幅幅温和的画面——七国的人们在废墟上重建,天理沉默,深渊退缩。

神秘少女(最后的声音,如同风铃):"谢谢你……愿意相信我。我存在了千年,只为等待这一刻。不要为我的消逝难过,我只是……回到了我本该属于的「观测」之中。"

光芒散尽,白夜之塔恢复了平静。星盘在你的掌心化为温热的光,仿佛承载了她所有的记忆。

魈(沉默片刻,难得地放轻了语气):"……她的意志,已经留在了你的命运之中。"

迪卢克(缓缓点头):"我们回去吧。璃月七星和蒙德都需要知道真相。"

你们转身离开,身后,白夜之塔的光芒渐渐隐入黑暗,如同从未存在过。但你知道——你带着一个文明的意志,继续走在提瓦特的大地上。]],
next = "act4_finale"
},

ending_destroy = {
title = "结局 · 断塔",
body = [[你闭上眼睛,然后睁开,目光坚定。

旅行者:"任何试图「决定」未来的力量都是危险的。让提瓦特的命运,由生活在其中的人自己书写吧。"

少女沉默了很久,然后缓缓点头。

神秘少女:"……你说得对。即使出于善意,篡改命运本身就是一种傲慢。这座塔不该存在。"

你举起武器,星盘与你的元素之力共鸣。一道纯净的光柱直冲塔顶,环形镜面出现无数裂痕。那些未来的影像——和平的、战乱的、光明的、黑暗的——全部化为碎片,消散在空气中。

塔崩塌了。巨大的白色石块如陨星般坠入地底裂谷。在最后一刻,少女的身影也变得透明。

神秘少女(最后的微笑):"谢谢你给了我解脱。我原本以为自己的使命是「守护塔」,但你让我明白——真正的守护,是让未来自由。"

她的身影化为光点,融入风中。当尘埃落定,你们面前只剩下一个巨大的空洞,和一片寂静的星空。

迪卢克:"深渊教团失去了目标。他们会愤怒,但短期内无法再行动。"

魈:"……走吧。这里已经没有什么可守护的了。"

你们转身离开。身后没有塔,没有光,只有提瓦特自己的天空。]],
next = "act4_finale"
},

ending_thirdway = {
title = "结局 · 星盘之约",
body = [[你紧握星盘,看向少女。

旅行者:"既然你能观测未来,那一定有办法在不牺牲你的前提下达成目的。告诉我——塔的力量可以被转移或封印吗?"

少女愣住了。她从未想过这个可能。

神秘少女:"转移……理论上,如果有一个足够纯净的「容器」,塔的核心权限可以被封印其中,塔本身则会休眠。但那样的容器……"

你举起手中的星盘。它正发出温热的光,与塔的频率完全共鸣。

旅行者:"这个呢?它也是坎瑞亚的遗物。"

少女的眼睛渐渐亮了起来。她小心翼翼地触碰星盘,光芒瞬间连接了塔的核心。

神秘少女:"……可以。星盘可以承载塔的权限。但这样做的代价是——你会背负起观测未来的能力,那是一种沉重的负担。你确定吗?"

旅行者:"我一路走来,本就是为了寻找真相。多一份真相,我愿意承担。"

仪式开始。少女将塔的核心权限缓缓注入星盘。塔的光芒逐渐黯淡,进入休眠。而星盘却越来越亮,最后化作一颗小小的、温热的星辰,沉入你的掌心。

少女的身体没有消失——她只是变得虚弱,跪坐在地上。

神秘少女(虚弱地微笑):"谢谢你……我第一次觉得,活着,是一件好事。"

魈走上前,默默将她扶起。

魈:"走吧。塔休眠了,但你可以和我们一起走。"

少女抬头看向你们,泪水从异色的瞳孔中滑落,但嘴角带着笑意。]],
next = "act4_finale"
},

-- ==================== ACT 4: FINALE CHOICE ====================
act4_finale = {
title = "第四幕 · 余烬与新生",
body = [[经历了白夜之塔的一切,你对旅途有了新的感悟。层岩巨渊的出口处,晨光正从地平线升起,将你们的影子拉得很长。

派蒙飞到你身边,打了个哈欠。

派蒙:"终于出来了!派蒙饿得能吃下一整头野猪!旅行者,接下来我们去哪?"

你望向远方。提瓦特的大地在你眼前铺展开来——蒙德的风、璃月的岩、稻妻的雷、须弥的草……每一处都有故事在等待。

【终局之选:旅者的道路】
]],
choices = {
{ label = "A", text = "守护者 — 更加努力地保护每个人的可能性,站在弱者前方", next = "end_guardian" },
{ label = "B", text = "探寻者 — 继续旅行,寻找更多失落的记忆", next = "end_seeker" },
{ label = "C", text = "同行者 — 只要和伙伴们一起,就没有跨不过的坎", next = "end_companion" },
}
},

-- ==================== FINAL ENDINGS ====================
end_guardian = {
title = "真结局 · 守护者之路",
body = [[你选择了守护。回到璃月港后,你将白夜之塔的真相告知了璃月七星。凝光听完后沉默良久,最终下令加强对层岩巨渊的监控,并秘密组建了一支应对深渊教团的联合防线。

你收到了来自蒙德、璃月、稻妻、须弥四国的联合邀请——成立「提瓦特守护同盟」,你被邀请担任特别顾问。

迪卢克(通讯):"旅行者,蒙德这边一切平稳。如果你需要情报支援,暗夜英雄随时待命。"

魈(出现在你身后):"璃月的地脉稳定。若有异动,我会第一时间通知你。"

派蒙:"哇,旅行者现在是大人物了!那……大人物能不能先请派蒙吃顿烤鱼?"

你笑了。你不需要什么头衔或荣耀。你只是想,在未来的每一次危机中,都能站在最前面,守护这片大地上每一个微笑。

层岩巨渊的方向,一缕淡蓝色的晨光缓缓升起。那是白夜之塔留下的最后回响——一个文明的意志,化作守护的力量,永远伴随着你。]]
},

end_seeker = {
title = "孤高结局 · 探寻者之路",
body = [[你选择了探寻。白夜之塔只是坎瑞亚遗产的冰山一角。你告别了迪卢克和魈,带上星盘,独自踏上了寻找其他遗迹的旅途。

迪卢克(临别时):"保重。如果发现什么关于坎瑞亚的线索,记得通知我。我父亲……他生前也在追寻这些。"

魈(沉默片刻):"旅行者,你和我有些相似。都是背着过去往前走的人。若有一天累了,璃月的绝云间,永远为你留着一盏灯。"

你点头,然后转身。派蒙虽然嘴上抱怨"又要走好远",但依然紧紧跟在你身边。

此后的日子里,你的足迹遍布提瓦特。在雪山深处,你找到了第二座坎瑞亚遗迹;在沙漠之下,你发现了一段被封印的炼金术手稿;在稻妻的海底,你触碰到了一块与星盘共鸣的神秘晶体。

每一次发现,都让你离真相更近一步。而星盘中沉睡的塔灵意识,偶尔会在梦境中与你低语,指引方向。

派蒙:"旅行者,你说……坎瑞亚的那些人,如果知道有人在替他们记住一切,会不会很高兴?"

你望向星空,没有回答。但你知道——只要还有失落的记忆存在,你的旅途就不会结束。]]
},

end_companion = {
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 = "#D4A843", 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 }),
  }
})
⬇ 下载 CIP 文件 🔍 返回列表