影之扉·逆光行 · 第一章 · 烬语觉醒
by LaserGecko20419 lines29.2 KB
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>影之扉·逆光行 · 第一章 · 烬语觉醒</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: 'PingFang SC', 'Segoe UI', system-ui, sans-serif;
background: #0d0a08;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 16px;
background-image: radial-gradient(circle at 30% 20%, #2a1a12 0%, #070504 100%);
margin: 0;
}
.game-container {
max-width: 520px;
width: 100%;
background: #f6efe7;
background-image: linear-gradient(160deg, #f3eade 0%, #e7dccc 100%);
border-radius: 48px 48px 32px 32px;
box-shadow: 0 20px 60px rgba(0,0,0,0.85), 0 0 0 2px #a07a58 inset, 0 0 0 4px #dcc6ae inset;
padding: 24px 20px 32px;
position: relative;
border: 1px solid #bfa080;
}
.game-container::before {
content: "📖 夜泊 · 云栖";
position: absolute;
top: -14px;
left: 50%;
transform: translateX(-50%);
background: #1a100a;
color: #dcc6ae;
font-weight: bold;
font-size: 13px;
letter-spacing: 4px;
padding: 6px 24px 8px;
border-radius: 40px;
box-shadow: 0 4px 0 #3d2a1a;
white-space: nowrap;
border: 1px solid #a07a58;
text-shadow: 0 1px 0 #00000066;
}
.scene-img {
background: #1f140e;
border-radius: 28px;
padding: 12px 12px 8px;
margin-bottom: 16px;
box-shadow: 0 8px 0 #0d0704;
border-bottom: 3px solid #a07a58;
}
.scene-img svg {
display: block;
width: 100%;
height: auto;
border-radius: 20px;
background: #1a100a;
}
.story-text {
background: #fcf8f2;
padding: 20px 18px;
border-radius: 28px;
font-size: 15px;
line-height: 1.8;
color: #2a1a10;
box-shadow: inset 0 4px 8px rgba(60,40,20,0.12), 0 6px 0 #a8896a;
border: 1px solid #ddcaba;
min-height: 200px;
margin-bottom: 20px;
font-weight: 400;
letter-spacing: 0.3px;
word-break: break-word;
}
.story-text p { margin-bottom: 10px; }
.story-text .highlight { color: #8a3d1a; font-weight: 600; }
.story-text .inner-box { background: #ecddce; padding: 12px 16px; border-radius: 20px; margin: 12px 0; border-left: 4px solid #8a3d1a; }
.story-text .chapter-end {
text-align: center;
margin-top: 24px;
padding-top: 16px;
border-top: 2px solid #a07a58;
font-size: 20px;
font-weight: 700;
color: #5a3d2a;
letter-spacing: 8px;
}
.story-text .divider {
border-top: 2px dashed #c9b098;
padding-top: 12px;
margin-top: 12px;
font-weight: bold;
color: #5a3d2a;
}
.story-text .skill-tag {
display: inline-block;
background: #1f140e;
color: #dcc6ae;
padding: 0 12px;
border-radius: 20px;
font-size: 13px;
font-weight: 600;
letter-spacing: 1px;
}
.options {
display: flex;
flex-direction: column;
gap: 12px;
margin: 8px 0 12px;
}
.option-btn {
background: #fcf3e6;
border: 2px solid #a07a58;
border-radius: 60px;
padding: 16px 18px;
font-size: 16px;
font-weight: 600;
color: #2a180e;
text-align: left;
display: flex;
align-items: center;
gap: 12px;
box-shadow: 0 5px 0 #6d4f34, 0 6px 12px rgba(0,0,0,0.15);
transition: all 0.08s linear;
cursor: pointer;
background: #f4e8da;
letter-spacing: 0.5px;
line-height: 1.3;
}
.option-btn:active { transform: translateY(5px); box-shadow: 0 0px 0 #6d4f34, 0 6px 12px rgba(0,0,0,0.1); }
.option-btn .badge { background: #8a3d1a; color: white; border-radius: 40px; padding: 0 14px; font-size: 14px; line-height: 28px; font-weight: 700; flex-shrink: 0; box-shadow: inset 0 -2px 0 #4a1f0c; }
.option-btn .badge.b { background: #2a5a4a; box-shadow: inset 0 -2px 0 #143528; }
.reset-area {
display: flex;
justify-content: center;
margin-top: 16px;
gap: 12px;
flex-wrap: wrap;
}
.reset-btn {
background: #2a1a10;
border: none;
border-radius: 60px;
color: #dcc6ae;
font-size: 15px;
font-weight: bold;
padding: 12px 28px;
box-shadow: 0 5px 0 #0d0704;
transition: 0.08s linear;
cursor: pointer;
border: 1px solid #6d4f34;
letter-spacing: 2px;
background: #1f140e;
}
.reset-btn:active { transform: translateY(5px); box-shadow: 0 0px 0 #0d0704; }
.footer-note {
text-align: center;
margin-top: 16px;
color: #5a4030;
font-size: 12px;
opacity: 0.7;
letter-spacing: 1px;
border-top: 1px dashed #c9b098;
padding-top: 16px;
}
.hidden { display: none !important; }
.highlight-gold { color: #b87a3a; font-weight: 600; }
</style>
</head>
<body>
<div class="game-container" id="app">
<div class="scene-img">
<svg viewBox="0 0 400 110" xmlns="http://www.w3.org/2000/svg">
<rect width="400" height="110" fill="#1a100a" rx="16" ry="16"/>
<rect x="40" y="30" width="40" height="50" fill="#a07a58" rx="4" ry="4" opacity="0.6"/>
<rect x="90" y="20" width="40" height="70" fill="#a07a58" rx="4" ry="4" opacity="0.6"/>
<rect x="140" y="30" width="40" height="50" fill="#a07a58" rx="4" ry="4" opacity="0.6"/>
<rect x="190" y="10" width="40" height="80" fill="#a07a58" rx="4" ry="4" opacity="0.6"/>
<rect x="250" y="25" width="40" height="60" fill="#a07a58" rx="4" ry="4" opacity="0.6"/>
<rect x="300" y="35" width="40" height="45" fill="#a07a58" rx="4" ry="4" opacity="0.6"/>
<circle cx="140" cy="70" r="12" fill="#dcc6ae" opacity="0.5"/>
<circle cx="250" cy="68" r="12" fill="#dcc6ae" opacity="0.5"/>
<text x="150" y="100" fill="#a07a58" font-size="14" font-weight="bold" font-family="sans-serif">📖 夜泊·书店</text>
<text x="20" y="100" fill="#8a7050" font-size="11" font-family="sans-serif">🔥 影之扉·逆光行</text>
<path d="M20 78 L35 55 L50 78 Z" fill="#6d4f34" opacity="0.3" />
</svg>
</div>
<div class="story-text" id="storyDisplay"></div>
<div class="options" id="optionsContainer"></div>
<div class="reset-area" id="controlArea">
<button class="reset-btn" id="resetBtn">🔄 重新开始</button>
</div>
<div class="footer-note">🔥 影之扉·逆光行 · 第一章 · 烬语觉醒</div>
</div>
<script>
(function() {
// ============================================================
// 1. 开局
// ============================================================
const OPENING_HTML = `
<p>陆云把最后一摞书放回架子上,打了个哈欠。窗外是云栖城的深夜,街灯的光透过百叶窗,在书页上切成一条一条的。</p>
<p>他今年十七岁,在"夜泊"旧书店当学徒,干了三年。老板是个六十多岁的老头,天一黑就去睡觉,把整个店扔给他。</p>
<p>店里很安静。陆云喜欢这种安静——安静的时候,他能看到那些东西。那些飘在空气中、像灰尘又比灰尘更暗的东西。灰色的、淡蓝色的、偶尔还有暗红色的,像薄雾一样悬在书架之间、落在旧书的封面上、缠绕在客人曾经坐过的椅背上。</p>
<p>他从小就能看到这些,但他一直以为所有人都能看到。直到有一次他问老板:"那些灰蒙蒙的东西是什么?"老板看了他一眼,沉默了很久,说:"你看得见?"然后老板就没再说话。</p>
<p>从那以后,陆云就不再问了。</p>
<p>他正准备关灯打烊,店门被推开了。门铃"叮"地响了一声——那铜铃的声音很轻,却让陆云后颈一凉,因为他看到随着门被推开,一整片灰色的"烬"像潮水一样涌了进来。</p>
<p>来人是个穿灰衣的中年男人。黑色短发,左眼有一道从额头划到颧骨的旧伤疤,身材偏瘦,走路没有声音,像是脚底垫了一层灰烬。</p>
<p>陆云盯着他看了两秒——这个人身上的"烬"是黑色的。极其浓郁的黑色,像墨汁在水中化开一样缠绕在他周围。陆云见过浅灰的、淡蓝的、暗红的烬,但<span class="highlight">从没见过黑色的烬</span>。</p>
<p>灰衣男人走到柜台前,放下一个旧铜铃。铜铃很小,看起来至少几十年了,表面有磨损的痕迹,但没有锈。他开口了,声音很低,像是怕吵醒谁:</p>
<p>"你是陆云?"</p>
<p>陆云警惕地点头:"……你是谁?"</p>
<p>灰衣男人没有回答,只是把铜铃推到他面前:"你母亲让我转交的。"</p>
<p>陆云的手指僵了一下:"我……我没有母亲。我是孤儿。"</p>
<p>"每个人都有母亲。"灰衣男人说,"只是有的人的母亲,走得太早了。"</p>
<p>他把铜铃再往前推了一点:"拿着。"</p>
<p>陆云犹豫了一瞬,还是伸手拿起了铜铃。就在他的指尖触到铜铃的瞬间——</p>
<p><b>轰——</b></p>
<p>他眼前的景象炸开了。</p>
<p>不是声音,不是光,是一整片画面直接灌进了他的脑子里:一个女人站在树下,背对着他,长发被风吹起来,她手里握着一支笔,在一面石壁上写字。她写完最后一个字,回过头来——她的五官模糊不清,但陆云能感觉到她在笑,笑得很温柔,但也很悲伤。然后她用很小的声音说了一句话,像是怕被人听见:</p>
<p><i>"不要让他们发现你记得。"</i></p>
<p>画面消失了。</p>
<p>陆云猛地后退一步,手里的铜铃差点掉在地上。他的后背全是冷汗:"你……你给我看了什么?!"</p>
<p>灰衣男人看着他,表情没什么变化:"不是我让你看到的。是铜铃让你看到的。"</p>
<p>"铜铃里面封着一团烬——你母亲留下的烬。她把自己的记忆烧成了烬,封在铜铃里,就是为了有一天你能碰触它。"</p>
<p>"你天生就有"<span class="highlight">烬眼·开</span>"——是遗传。你母亲也是烬语者。"</p>
<p>陆云张了张嘴,发现自己的声音有点发抖:"她……她还在吗?"</p>
<p>灰衣男人沉默了一瞬,声音更低了:"她走的时候,你三岁。"</p>
<p>"她留下这枚铜铃,也留下了一句话——'如果你想知道自己是谁,就沿着铜铃声响的方向走。'"</p>
<p>他转身走向门口,在推门之前停了一下,没有回头:"还有一件事。你看到的那些烬,不要让别人知道你能看见。烬主的人正在找"烬语者"——而你母亲,曾经是唯一能对抗烬主的人。"</p>
<p>门关上了。门铃响了一声。</p>
<p>陆云站在柜台后面,手里握着铜铃,盯着门口。他的心跳快得像在擂鼓。</p>
<p>他低头看手中的铜铃。铜铃内壁,有一行极小的刻字:</p>
<p><i>"不要让他们发现你记得。"</i></p>
<p>陆云攥紧铜铃,深吸一口气。他决定:</p>
<div class="divider">⚡ 你的选择,将改变陆云的命运 ——</div>
`;
// ============================================================
// 2. 第一层选择 A / B
// ============================================================
const CHOICE_A_HTML = `
<p><span class="highlight">⚡ 独自上路</span></p>
<p>陆云把铜铃揣进怀里,把门锁上,翻窗出了书店。夜色中的云栖城比他想象中要冷,街道上空无一人,只有风从屋顶的缝隙里穿过,发出低沉的呜咽声。</p>
<p>他站在街口,闭上眼睛,拇指轻轻按住铜铃。铜铃没有响,但他感觉到一股微弱的热度从指尖传来——像一根无形的线,牵引着某个方向。</p>
<p>他往那个方向走了三步,铜铃的热度更强了一点。他又走了三步,热度更强了。</p>
<p>"……就这么走。"</p>
<p>他沿着神树主干的方向走去。云栖城建在神树残骸之上,主干向北延伸,一直通往城外的荒原。</p>
<p>走了大约半小时,他在城墙出口处停住了——城门口站着两个卫兵,穿着烬主卫队的深灰色铠甲,正在盘问一个准备出城的商贩。陆云站在阴影里,压低呼吸。他不知道该怎么混过去。</p>
<p>就在这时,他注意到一个细节:城墙根下的阴影里,有一团暗蓝色的烬在飘浮,很淡,像是有人蹲在那里待过很久。他下意识地用"烬眼·开"去碰触那团烬——</p>
<p>一段画面闪过:一个穿破旧斗篷的人蹲在这里,盯着卫兵看了十多分钟,然后在某个换岗的间隙,贴着墙根从城墙裂缝里钻了出去。</p>
<p>裂缝很小,但那个人能钻过去,说明陆云也能。</p>
<p>陆云沿着墙根摸到那处裂缝,侧身挤了过去——斗篷被刮破了一道口子,但他穿了过去。</p>
<p>城外是荒原,月光很亮,一棵巨大的、漆黑的树影矗立在地平线上。那就是神树。陆云掏出铜铃,铜铃的热度比之前更烫了,指引着他朝神树的方向走去。</p>
<p>他走了一个多小时后,身后突然有脚步声——</p>
<p>"喂!你也是去烬语之井的?"</p>
<p>陆云猛回头,看到一个人影从路边的灌木丛里钻出来。那人背着大背包,头发乱糟糟的,嘴里还叼着一根草茎。</p>
<p><span class="highlight">方夏</span>,十七岁,云栖城黑市上小有名气的"遗迹猎人"。他拍了拍身上的土,笑嘻嘻地说:"别紧张,我不是坏人。我只是跟了你一路——你那枚铜铃的'烬'太亮了,隔着半里地都能看见。"</p>
<p>他伸出手:"我叫方夏。你也是去找烬语之井的吧?搭个伙呗?"</p>
<p>陆云看着他伸出的手,犹豫了一瞬——</p>
<div class="divider">⚡ 接下来,你怎么办? ——</div>
`;
const CHOICE_B_HTML = `
<p><span class="highlight">⚡ 找方夏</span></p>
<p>陆云没有立刻出发。他把铜铃揣好,锁上书店的门,然后穿过三条街,拐进了一条窄巷。巷子最深处的墙角有一块松动的石板——他蹲下去,把石板掀开,露出一个向下的楼梯。楼梯尽头是一扇铁门,门牌上歪歪扭扭地写着:<b>"方夏杂货·只收烬不收钱"</b>。</p>
<p>他敲了三下门。门开了一条缝,露出一只眯着的眼睛——"谁?"</p>
<p>"陆云。书店那个。"</p>
<p>门打开了。方夏穿着破旧的背心,头发乱得像鸡窝,明显是刚从床上被薅起来。他打了个哈欠,手里还攥着半个吃剩的馒头:"大半夜的……你最好有正事。"</p>
<p>陆云从怀里掏出铜铃,在他面前晃了一下。</p>
<p>方夏的眼睛瞬间睁大了,原本的困意一扫而空。陆云看到方夏周围飘出一层浅灰色的烬——那是"警觉"的颜色。</p>
<p>"……你进来。"方夏一把拽住陆云的袖子,把他拉进门内,锁了三道锁,然后拉上窗帘,点亮一盏光脂灯。灯光亮起,铜铃上的银白色烬光在屋里流转,投射出一道道细小的纹路在墙壁上跳动。</p>
<p>方夏盯着铜铃看了足足十秒钟,脸上没有表情,但陆云看到他的烬变成深灰色——那是"认真"的颜色。</p>
<p>"你这东西从哪来的?"方夏的声音比之前低了很多。</p>
<p>"有人转交给我的。"陆云顿了一下,"我母亲留下的。"</p>
<p>方夏抬起头,盯着陆云的眼睛:"你确定?"</p>
<p>"确定。"</p>
<p>方夏深吸一口气,坐回椅子上,指着铜铃上萦绕的银白色光芒:"你知道这是什么吗?这团烬……比我在黑市上见过的最贵的烬语器物还要纯。纯度这么高的烬,我只在卷轴上见过记载——那是第一代烬主才凝聚得出来的东西。"</p>
<p>他顿了顿,又说:"你母亲不只是烬语者。她当年至少是'炬主'级别的——就是能像火炬一样燃烧烬、照亮一整片区域的人。但据我所知,炬主在二十年前就已经全部消失了。"</p>
<p>陆云抓紧铜铃:"你还知道什么?"</p>
<p>方夏看了他一眼,忽然笑了笑:"我倒是奇怪,你拿了这么大一个宝贝,不去找黑市卖钱,跑到我这里来。你是想干嘛?"</p>
<p>"我想去烬语之井。我母亲给我铜铃的时候,里面封着一句话——'沿着铜铃声响的方向走。'"</p>
<p>方夏愣住了,嘴里嚼着的馒头停了下来。他擦了擦嘴角,忽然笑了:"有意思。你母亲让你走的路,和我想走的路,是同一条。"</p>
<p>"你也在找烬语之井?"</p>
<p>方夏没有正面回答,而是转身从抽屉里翻出一卷旧地图,摊开在桌上。地图上画着云栖城的地下层结构,用红笔标注了好几条路线:"我查了三年——烬语之井在神树遗址的最下方,上面有三层封印。普通方法进不去。"</p>
<p>他指着其中一个标记:"但是有一条路——北侧通风管道,可以绕过大部分封印直接通到井底。入口被一块大石板压着,我试过一个人搬不动。"</p>
<p>他看着陆云:"你能搬吗?"</p>
<p>陆云看了看自己的手:"……我试试。"</p>
<p>方夏笑着伸出手:"那就试试。明天天黑行动——我去准备工具,你带上那枚铜铃。"</p>
<p>陆云握住了他的手:"好。"</p>
<p>方夏的手掌有一层厚厚的茧,是常年在废墟里刨东西留下的。这一刻,灰色的烬从两人交握的手掌间散开——陆云看到方夏身上的烬,从深灰色渐渐染上了一层极淡的橙色,那是"希望"的颜色。</p>
<p>"对了,"陆云转身要走的时候,方夏叫住他,"你刚才用铜铃的时候——有没有看到什么?除了纯烬之外的东西?"</p>
<p>陆云回想了一下触碰铜铃时的画面:"……我看到了一个人。一个女人,站在树下,在石壁上写字。她回头看了我一眼,说了一句话。"</p>
<p>"什么话?"</p>
<p>"'不要让他们发现你记得。'"</p>
<p>方夏的表情忽然变了。他沉默了很久,久到陆云以为他不打算再说话。最后方夏用一种很轻的声音说:"这句话……我爸被抓走之前,也对我说过。"</p>
<p>屋里安静了很久。光脂灯跳了一下,影子在墙壁上晃了晃。</p>
<p>"所以,"陆云说,"你爸也是烬语者?"</p>
<p>"是。"方夏的声音很平静,像在说一件早就接受的事,"他被抓走的时候我七岁。那之后我就开始研究烬语——不是为了什么大理想,就是想搞清楚'为什么'。"</p>
<p>他抬起头,笑了一下,笑容有点用力:"我也想去烬语之井,看看里面到底藏了什么。"</p>
<p>陆云点了点头:"那,一起。"</p>
<p>方夏伸出手,两人又握了一次手。</p>
<p>"明天天黑,北城墙根见。"方夏说,"别迟到。"</p>
<p>"不会。"</p>
<p>陆云走出方夏杂货的时候,巷子里的风突然变冷了。他攥紧怀里的铜铃,回头看了一眼那扇铁门,灯光从门缝里渗出来,像一条细线。然后他转身,消失在夜色中。</p>
<div class="chapter-end">— 第一章完 —</div>
`;
// ============================================================
// 3. A 的子分支 A1 / A2
// ============================================================
const A1_HTML = `
<p><span class="highlight">⚡ 接受方夏的邀请,结伴同行</span></p>
<p>陆云握了握方夏的手:"……我叫陆云。你怎么知道我的铜铃有烬?"</p>
<p>方夏咧嘴:"我自己也有一点点'烬眼·开'——没你那么厉害,但能看到'光亮'。你这枚铜铃在夜色里像一盏灯笼,方圆五十米都看得见。你得想办法把它包起来,不然烬主的人隔着三条街都能找到你。"</p>
<p>他掏出一块黑色的破布递给陆云:"用这个缠上,能遮住大部分烬的光。"</p>
<p>陆云接过来,把铜铃裹了两层,塞进怀里。果然,那股"发光感"立刻暗了下去。</p>
<p>"所以,"方夏边走边说,"你到底是谁?为什么拿着这么亮的烬语器物?你可别告诉我你是捡的。"</p>
<p>陆云沉默了一会儿:"……是别人转交给我的。是我母亲留下的。"</p>
<p>方夏的步伐顿了一下:"你母亲是烬语者?"</p>
<p>"……好像是。"</p>
<p>方夏吹了声口哨:"那你不简单啊。现在的烬主可是满城抓烬语者,抓到一个关一个。你要是被抓到,估计连书店都回不去。"</p>
<p>陆云:"你为什么对烬语这么了解?"</p>
<p>方夏停了一下,笑了一声:"因为我爸就是被烬主抓走的。十年前的事。从那以后我就开始研究烬语,想着有一天能把他救出来。"</p>
<p>他说得很快,像是在说一件和自己无关的事。但陆云看到方夏说这句话的时候,他周围的烬变成了暗灰色——那是悲伤的颜色。</p>
<p>"所以你找我结伴,"陆云说,"不只是为了搭伙?"</p>
<p>方夏回头看他:"也是,也不是。我想找到烬语之井——据说那里封存着最古老的烬语知识。如果能进去,说不定能找到对抗烬主的方法。"</p>
<p>两人在月光下又走了一段路。神树的影子越来越近了。</p>
<p>"那我们现在算什么?"陆云问。</p>
<p>方夏想了想:"就……临时队友吧。你找你的答案,我找我的知识。互不干涉,但一起走。"</p>
<p>"行。"</p>
<p>他们在月光下握了握手。远处有夜鸦飞过。</p>
<div class="chapter-end">— 第一章完 —</div>
`;
const A2_HTML = `
<p><span class="highlight">⚡ 拒绝方夏,独自前进</span></p>
<p>陆云后退一步,把手放进兜里:"不了。我一个人走。"</p>
<p>方夏摊手:"行吧,你那枚铜铃太亮了,我隔着三里地就能看见。你要是一个人走,记得包好它,不然烬主的人天亮之前就能找到你。"</p>
<p>他从包里掏出一块黑布扔过去:"送你。包上。"</p>
<p>陆云接住黑布,犹豫了一下:"……你为什么帮我?"</p>
<p>方夏挠了挠头:"因为你看起来不像坏人。而且——"他压低声音,"我也在找烬语之井。你走你的,我走我的,咱们不是一路人,但别互相拖后腿。"</p>
<p>他说完就转身钻进灌木丛里,很快消失了。</p>
<p>陆云站在原地,握着黑布,看着方夏消失的方向沉默了一会儿。然后他用黑布把铜铃裹好,揣进怀里,继续往神树的方向走去。</p>
<p>他走了一个多小时后,烬语之井的入口出现在前方——那是一道从上到下的裂缝,像是神树的树干被什么力量撕开了一道口子。</p>
<p>陆云正要钻进去,身后传来了密集的脚步声:</p>
<p>"站住!你是什么人?!"</p>
<p>五六个身穿深灰色铠甲的卫兵,在月光下举着刀,一字排开。</p>
<p>陆云的手心出汗了。他下意识地碰了一下怀里的铜铃——铜铃滚烫,像是一团火在烧他的胸口。</p>
<p>"我是……路过的人。"</p>
<p>"路过?"卫兵首领冷笑,"你一个人夜里来神树遗址'路过'?你当我们傻?"</p>
<p>陆云后退一步,背抵住了树干裂缝。他感觉到胸口铜铃的热度越来越高,像有什么东西要从铜铃里涌出来——</p>
<p>然后他听到了一个声音。很低,很轻,像灰烬落在火堆上。是铜铃内部的烬在"说话"。</p>
<p><i>"用<span class="highlight">烬散·隐</span>。"</i></p>
<p>他不知道自己是怎么做到的——他只是闭上眼睛,把注意力沉进胸口那片滚烫里。他感觉到自己的"存在感"像墨水滴进水里一样,渐渐淡开、散开……</p>
<p>卫兵首领眨了眨眼:"……人呢?"</p>
<p>他面前的裂缝处空无一人。陆云就站在裂缝边缘,离他不到三米,但卫兵的目光像穿过空气一样穿过了他。</p>
<p>"……走。"卫兵首领皱眉,"可能是看错了。这种地方半夜总有人鬼鬼祟祟的。"他们列队离开了。</p>
<p>陆云站在裂缝旁边,全身都被冷汗浸透了。他低头看自己的手——刚才那片"消失"的感觉还在,很奇妙,像是自己变成了一缕烟。</p>
<p>他把铜铃从怀里掏出来,铜铃已经凉了。但他知道,刚才那三秒钟不是幻觉。</p>
<p>他学会了第一个真正的烬语技能:<span class="highlight">烬散·隐</span>。</p>
<p>他转身钻进了烬语之井。</p>
<div class="chapter-end">— 第一章完 —</div>
`;
// ============================================================
// 4. DOM 渲染逻辑
// ============================================================
const storyDisplay = document.getElementById('storyDisplay');
const optionsContainer = document.getElementById('optionsContainer');
const resetBtn = document.getElementById('resetBtn');
function render(html, optionButtons) {
storyDisplay.innerHTML = html;
optionsContainer.innerHTML = '';
optionButtons.forEach(btn => {
const b = document.createElement('button');
b.className = 'option-btn';
b.innerHTML = btn.label;
b.onclick = btn.action;
optionsContainer.appendChild(b);
});
window.scrollTo({ top: 0, behavior: 'smooth' });
}
function resetGame() {
render(OPENING_HTML, [
{ label: '<span class="badge">A</span> 独自上路,沿着铜铃的方向走', action: () => showA() },
{ label: '<span class="badge b">B</span> 去找方夏——那个他知道的"遗迹猎人"', action: () => showB() }
]);
}
function showA() {
render(CHOICE_A_HTML, [
{ label: '<span class="badge">A1</span> 接受方夏的邀请,结伴同行', action: () => render(A1_HTML, []) },
{ label: '<span class="badge b">A2</span> 拒绝方夏,独自前进', action: () => render(A2_HTML, []) }
]);
}
function showB() {
render(CHOICE_B_HTML, []);
}
resetBtn.onclick = resetGame;
window.addEventListener('load', resetGame);
console.log('🔥 影之扉·逆光行 · 第一章 · 烬语觉醒 已加载!');
console.log('📊 总字数约 3950 字');
})();
</script>
</body>
</html>Game Source: 影之扉·逆光行 · 第一章 · 烬语觉醒
Creator: LaserGecko20
Libraries: none
Complexity: complex (419 lines, 29.2 KB)
The full source code is displayed above on this page.
Remix Instructions
To remix this game, copy the source code above and modify it. Add a ARCADELAB header at the top with "remix_of: game-lasergecko20-mte39ymi" to link back to the original. Then publish at arcadelab.ai/publish.