jianzhihuixiang/alacarte-novel-website/chapters/chapter-166.html

984 lines
41 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>圣者之鸣号 - 阿拉德:剑之回响</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: linear-gradient(135deg, #0f0c29 0%, #302b63 50%, #24243e 100%);
--text-primary: #e0e0e0;
--text-secondary: #888;
--accent-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--border-color: rgba(255,255,255,0.1);
--btn-bg: rgba(255,255,255,0.1);
--btn-hover: rgba(255,255,255,0.2);
}
[data-theme="light"] {
--bg-primary: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
--text-primary: #333;
--text-secondary: #666;
--border-color: rgba(0,0,0,0.1);
--btn-bg: rgba(0,0,0,0.05);
--btn-hover: rgba(0,0,0,0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Serif SC', serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.8;
min-height: 100vh;
transition: all 0.3s ease;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
padding-bottom: 120px;
}
/* 顶部导航 */
.top-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
z-index: 1000;
padding: 10px 20px;
}
.top-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-link {
color: var(--text-primary);
text-decoration: none;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
padding: 8px 16px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
transition: all 0.3s ease;
}
.nav-link:hover {
background: var(--btn-hover);
}
.chapter-header {
text-align: center;
padding: 80px 0 40px;
border-bottom: 1px solid var(--border-color);
margin-bottom: 40px;
}
.chapter-number {
font-size: 14px;
color: var(--text-secondary);
letter-spacing: 4px;
text-transform: uppercase;
margin-bottom: 10px;
}
.chapter-title {
font-size: 32px;
font-weight: 700;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 20px;
}
.chapter-meta {
font-size: 14px;
color: var(--text-secondary);
}
.chapter-content {
font-size: 18px;
line-height: 2;
text-align: justify;
}
.chapter-content p {
margin-bottom: 1.5em;
text-indent: 2em;
}
.chapter-content p:first-of-type::first-letter {
font-size: 3em;
float: left;
line-height: 1;
margin-right: 8px;
margin-top: -5px;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
}
/* 固定底部导航 */
.fixed-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-top: 1px solid var(--border-color);
z-index: 1000;
padding: 15px 20px;
}
.fixed-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-btn {
padding: 12px 24px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
color: var(--text-primary);
text-decoration: none;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
cursor: pointer;
}
.nav-btn:hover {
background: var(--btn-hover);
transform: translateY(-2px);
}
.nav-btn.disabled {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
/* 右侧滚动按钮 */
.scroll-buttons {
position: fixed;
right: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1001;
}
.scroll-btn {
width: 40px;
height: 40px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.scroll-btn:hover {
background: var(--btn-hover);
}
/* TTS控制面板 */
.tts-panel {
position: fixed;
left: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1002;
background: rgba(0,0,0,0.6);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
padding: 15px;
min-width: 180px;
}
.tts-title {
font-size: 12px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 5px;
}
.tts-controls {
display: flex;
gap: 8px;
margin-bottom: 10px;
}
.tts-btn {
width: 36px;
height: 36px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.tts-btn:hover {
background: var(--btn-hover);
}
.tts-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
}
.tts-progress {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
}
.tts-progress-bar {
flex: 1;
height: 4px;
background: var(--btn-bg);
border-radius: 2px;
overflow: hidden;
}
.tts-progress-fill {
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
width: 0%;
transition: width 0.1s ease;
}
.tts-time {
font-size: 12px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
min-width: 80px;
}
.tts-speed {
display: flex;
align-items: center;
gap: 8px;
}
.tts-speed-label {
font-size: 12px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-speed-select {
padding: 4px 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 4px;
color: var(--text-primary);
font-size: 12px;
cursor: pointer;
font-family: 'Noto Sans SC', sans-serif;
}
@media (max-width: 600px) {
.tts-panel {
left: 10px;
right: 10px;
bottom: auto;
top: 60px;
min-width: auto;
padding: 12px;
width: auto;
z-index: 1003;
}
.tts-btn {
width: 32px;
height: 32px;
font-size: 12px;
}
.tts-title {
font-size: 11px;
}
.tts-speed-label {
font-size: 11px;
}
.tts-speed-select {
padding: 3px 6px;
font-size: 11px;
}
.tts-time {
font-size: 11px;
min-width: 60px;
}
/* 手机端隐藏滚动按钮给TTS腾空间 */
.scroll-buttons {
display: none;
}
}
@media (max-width: 400px) {
.tts-panel {
top: 55px;
padding: 10px;
}
.tts-controls {
gap: 6px;
}
.tts-btn {
width: 28px;
height: 28px;
font-size: 11px;
}
}
/* 侧边栏 - 标题固定,内容滚动 */
.sidebar {
position: fixed;
right: 20px;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.5);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
width: 200px;
max-height: 70vh;
z-index: 999;
display: flex;
flex-direction: column;
}
.sidebar-title {
font-size: 14px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
padding: 15px 20px;
border-bottom: 1px solid var(--border-color);
flex-shrink: 0;
}
.sidebar-content {
overflow-y: auto;
padding: 10px 20px 20px;
flex: 1;
scrollbar-width: thin;
scrollbar-color: transparent transparent;
transition: scrollbar-color 0.3s ease;
}
.sidebar-content:hover {
scrollbar-color: rgba(255,255,255,0.3) transparent;
}
.sidebar-content::-webkit-scrollbar {
width: 6px;
}
.sidebar-content::-webkit-scrollbar-track {
background: transparent;
}
.sidebar-content::-webkit-scrollbar-thumb {
background: transparent;
border-radius: 3px;
transition: background 0.3s ease;
}
.sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.3);
}
.sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(255,255,255,0.5);
}
[data-theme="light"] .sidebar-content:hover {
scrollbar-color: rgba(0,0,0,0.3) transparent;
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.3);
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(0,0,0,0.5);
}
.sidebar-chapter {
display: block;
padding: 8px 0;
color: #aaa;
text-decoration: none;
font-size: 13px;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: all 0.3s ease;
line-height: 1.5;
}
.sidebar-chapter:hover {
color: #667eea;
}
.sidebar-chapter.current {
color: #667eea;
font-weight: 600;
}
@media (max-width: 1200px) {
.sidebar {
display: none;
}
}
@media (max-width: 600px) {
.chapter-title {
font-size: 24px;
}
.chapter-content {
font-size: 16px;
}
.fixed-nav-content {
gap: 10px;
}
.nav-btn {
padding: 10px 15px;
font-size: 12px;
}
.scroll-buttons {
right: 10px;
bottom: 80px;
}
.scroll-btn {
width: 36px;
height: 36px;
}
}
/* 滚动条样式 */
.sidebar::-webkit-scrollbar {
width: 4px;
}
.sidebar::-webkit-scrollbar-track {
background: transparent;
}
.sidebar::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.2);
border-radius: 2px;
}
</style>
</head>
<body>
<!-- 顶部导航 -->
<nav class="top-nav">
<div class="top-nav-content">
<a href="../index.html" class="nav-link">返回首页</a>
<button class="nav-link" id="themeToggle">切换主题</button>
</div>
</nav>
<div class="container">
<header class="chapter-header">
<div class="chapter-number">Chapter 166</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<p>第二天一早,林克等人离开中央公园,穿过次元通道回到阿拉德大陆。</p>
<p>"圣者之鸣号在西海岸的方向。"艾丽丝说,"那是圣职者教团的圣地,平时不对外开放。"</p>
<p>林克点头,带着三人向西海岸出发。</p>
<p>一路上,艾拉对周围的一切都充满好奇。作为天空族,她大部分时间都在空中飞行,很少有机会这样近距离观察地面。</p>
<p>"那个是什么?"她指着一座山问。</p>
<p>"那是格兰之森。"敏泰回答,"林克哥哥冒险开始的地方,我们第一次相遇就在那里。"</p>
<p>"哦?"艾拉看向林克,"你的故事是从那里开始的吗?"</p>
<p>林克笑了笑:"算是吧。那时候我还是个新手冒险家,什么都不懂。"</p>
<p>"现在你已经是剑神了。"敏泰说,"打败了那么多使徒,拯救了世界。"</p>
<p>"还有很长的路要走。"林克说,"赫尔德的阴谋还没有完全结束。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>经过半天的行程,他们终于来到了西海岸港口。</p>
<p>天空中,一艘巨大的飞艇正静静地漂浮着。</p>
<p>那就是圣者之鸣号。</p>
<p>"好大..."敏泰仰头看着那艘飞艇,"比我想象的还要大!"</p>
<p>艾拉展开翅膀,飞到半空中观察:"上面有很多人,还有教堂和训练场。整个飞艇像一座小城市!"</p>
<p>"那就是圣职者教团的圣地。"艾丽丝说,"所有的圣职者都以能登上圣者之鸣号为荣。"</p>
<p>林克看着圣者之鸣号,感受到了从中传来的神圣气息。</p>
<p>那种气息与圣者之十字上的力量非常相似,都是神圣的力量。</p>
<p>"走吧。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>他们通过港口的传送装置,登上了圣者之鸣号。</p>
<p>甲板上,穿着白色长袍的圣职者们来来往往。有的人在进行祷告,有的人在练习圣光术,有的人在讨论教义。</p>
<p>看到林克等人,他们投来好奇的目光。毕竟,普通人很少能登上这艘飞艇。</p>
<p>"请问,你们是来做什么的?"一个年轻的圣职者走上前问。</p>
<p>"我来寻找米歇尔大人的线索。"林克说。</p>
<p>那个圣职者愣了一下,然后表情变得严肃:"米歇尔大人?你是说圣者米歇尔?"</p>
<p>"是的。"</p>
<p>圣职者犹豫了片刻,然后说:"米歇尔大人行踪不定,我们也不知道他在哪里。但他曾经在这里留下了一些东西,说是给'追寻真相的人'。"</p>
<p>"什么东西?"</p>
<p>"在教堂深处,有一间密室。"圣职者说,"米歇尔大人说过,如果有追寻真相的人来,就让他去那里。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>"能带我们去吗?"林克问。</p>
<p>圣职者点头:"请跟我来。"</p>
<p>他带着林克等人穿过甲板,来到飞艇中央的教堂。</p>
<p>教堂很大,庄严肃穆。彩色玻璃窗将阳光折射成七彩的光芒,洒落在中央的祭坛上。空气中弥漫着淡淡的熏香味道,让人感到心神宁静。</p>
<p>"这里是圣者教堂。"圣职者说,"是整个圣职者教团最神圣的地方。"</p>
<p>林克感受着周围的气息,那是纯净的神圣力量。</p>
<p>"密室在哪里?"</p>
<p>圣职者指向祭坛后方:"在那幅壁画后面。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>林克走近壁画,看到上面画着两个身影。</p>
<p>一个手持十字架,周身散发着金色的光芒,面容温和。</p>
<p>一个被黑暗包裹,只能看到一双闪烁着红光的眼睛,面容扭曲。</p>
<p>两人面对面站着,似乎在对峙,又似乎在对话。</p>
<p>"米歇尔和奥兹玛..."林克轻声说。</p>
<p>"是的。"圣职者说,"这幅壁画描绘的是暗黑圣战之前的场景。米歇尔大人和奥兹玛曾经是朋友,后来..."</p>
<p>他叹了口气:"后来他们成为了敌人。"</p>
<p>林克看着壁画,心中涌起复杂的情绪。</p>
<p>朋友成为敌人...</p>
<p>那是怎样的痛苦。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>"只有得到神之认可的人才能进入密室。"圣职者说,"如果你能打开它,说明米歇尔大人确实为你留下了东西。"</p>
<p>林克点头,伸出手触碰壁画。</p>
<p>刹那间,一股神圣的力量涌来,扫描着他的灵魂。</p>
<p>但很快,那股力量就被他体内的创世之力碎片所接纳。</p>
<p>金色的光芒从他身上散发出来,与壁画上的神圣力量产生共鸣。</p>
<p>"这...这是..."圣职者惊讶地看着林克,"创世之力?!"</p>
<p>壁画缓缓移开,露出一条通往地下的通道。</p>
<p>"你...你得到了神的认可!"圣职者激动地说,"米歇尔大人果然为你留下了东西!"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>林克回头看向艾丽丝、艾拉和敏泰:"你们在这里等我,我独自下去。"</p>
<p>艾丽丝点头:"小心。"</p>
<p>林克走进通道,身后的壁画缓缓关闭。</p>
<p>通道并不长,很快就到了尽头。</p>
<p>那里是一间圆形的密室,墙壁上刻满了古老的文字和图案。</p>
<p>密室中央,有一个悬浮的十字架,散发着淡淡的金色光芒。</p>
<p>林克走近十字架,感受到里面蕴含的力量。</p>
<p>那是...神圣的力量,但也有某种悲伤的气息。</p>
<p>"这是..."</p>
<p>他伸出手,想要触碰十字架。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</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 style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>林克看着米歇尔,等待他继续说下去。</p>
<p>米歇尔走到壁画前,看着上面画着的两个人影。</p>
<p>"在很久以前,我还是人类的时候,我认识奥兹玛和卡赞。"他说,"他们两个人,是佩鲁斯帝国的骄傲。"</p>
<p>"奥兹玛是帝国最强的魔法师,卡赞是帝国最强的战士。他们在一起,几乎没有敌人。"</p>
<p>"我那时候是教会的圣职者,专门对抗恶魔和异端。我们三个人曾经一起战斗过,对抗那些威胁帝国的存在。"</p>
<p>米歇尔的声音变得低沉:"那时候,我们是朋友。生死之交。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>"后来呢?"林克问。</p>
<p>"后来...帝国皇帝恐惧他们的力量。"米歇尔握紧拳头,"皇帝设下了一个阴谋,诬陷卡赞谋反,让奥兹玛去镇压他。"</p>
<p>"奥兹玛不知道真相,带着军队去讨伐卡赞。他们在战场上相遇,展开了激烈的对决。"</p>
<p>"但就在他们交战的时候,帝国军队突然出现,将两人一起逮捕。"</p>
<p>米歇尔的声音变得沙哑:"皇帝为了斩草除根,杀了奥兹玛的家人和他的恋人莉兹。"</p>
<p>"奥兹玛在绝望中,接受了一个'死神'的提议。"</p>
<p>林克握紧拳头:"那个死神就是赫尔德。"</p>
<p>"是的。"米歇尔点头,"赫尔德伪装成死神,诱导奥兹玛堕落。她给了他血之诅咒的力量,让他可以散播伪装者。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>"奥兹玛堕落了。"米歇尔继续说,"他向人类世界散播血之诅咒,引发了暗黑圣战。"</p>
<p>"我不得不站出来对抗他。"</p>
<p>他的眼眶湿润:"我不想杀他,他是我的朋友。所以我只是封印了他,将他关在黑色大地。"</p>
<p>"我一直守在那里,不是因为他威胁我,而是因为...我想赎罪。"</p>
<p>"赎罪?"林克问。</p>
<p>米歇尔转身看向他:"我没有保护好朋友。如果在帝国陷害他们的时候,我能站出来...也许一切都会不同。"</p>
<p>林克沉默地看着他。</p>
<p>那种愧疚,那种自责...他能感受到。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>"赫尔德的阴谋还没有结束。"米歇尔说,"她想要让奥兹玛和我的力量互相碰撞,从而获得创世之力。"</p>
<p>"但现在她已经消散了。"林克说。</p>
<p>"是的,但她的计划还在继续。"米歇尔看向林克,"黑色大地出现了异常能量波动,奥兹玛的力量正在苏醒。"</p>
<p>他伸出手,那个悬浮的十字架缓缓飘向林克:"拿着这个。"</p>
<p>"这是什么?"</p>
<p>"圣者之十字。"米歇尔说,"这是我封印奥兹玛时使用的神器。它可以克制他的血之诅咒,也可以帮助你进入黑色大地。"</p>
<p>林克接过十字架,感受到里面蕴含的强大神圣力量。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>"米歇尔...你会跟我一起去吗?"林克问。</p>
<p>米歇尔摇头:"不。我暂时不能离开。"</p>
<p>"为什么?"</p>
<p>"因为我必须压制奥兹玛的力量,防止他完全觉醒。"米歇尔说,"如果我离开,封印会更快崩塌。"</p>
<p>"那你怎么压制他?"</p>
<p>"我在黑色大地留下了分身。"米歇尔说,"但本体不能离开太远。"</p>
<p>林克点头:"我明白了。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>米歇尔看着他,认真地说:"林克,你的任务不是阻止奥兹玛,而是...拯救他。"</p>
<p>"拯救?"</p>
<p>"奥兹玛已经堕落太久,他的灵魂被黑暗侵蚀。但如果有人能净化他...也许他可以获得安息。"</p>
<p>"你体内有创世之力的碎片,你有这个能力。"</p>
<p>林克握紧圣者之十字。</p>
<p>拯救奥兹玛...</p>
<p>这不是他预想的结果。</p>
<p>"我会尽力。"他说。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>米歇尔露出欣慰的笑容:"谢谢你,林克。"</p>
<p>他转身走向密室出口:"去吧。黑色大地的入口在西北方向,我会为你开启通道。"</p>
<p>林克跟着米歇尔走出密室,回到教堂。</p>
<p>艾丽丝、艾拉和敏泰立刻围了上来。</p>
<p>"林克!"敏泰惊喜地说,"你没事!"</p>
<p>艾丽丝看向米歇尔,目光露出惊讶:"米歇尔大人?"</p>
<p>米歇尔微微点头:"你们好。"</p>
<p>他转向林克:"通道已经打开。西北方向,次元裂缝。"</p>
<p>"谢谢。"林克说。</p>
<p>米歇尔最后看了他一眼:"记住,林克——不要让仇恨蒙蔽了你的心。奥兹玛之所以堕落,是因为他被背叛。"</p>
<p>"如果你能给他希望,也许...一切都会不同。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>林克点头,带着三人离开教堂。</p>
<p>当他们走出圣者之鸣号时,天空中闪过一道紫色的光芒。</p>
<p>那是西北方向——黑色大地的方向。</p>
<p>奥兹玛在召唤。</p>
<p>"走吧。"林克说,"去黑色大地。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0; margin-top: 2em;">(第一百六十六章完)</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0; margin-top: 2em;">(奥兹玛篇·第三章)</p>
</article>
</div>
<!-- 固定底部导航 -->
<nav class="fixed-nav">
<div class="fixed-nav-content">
<a href="chapter-165.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<a href="chapter-167.html" class="nav-btn ">下一章</a>
</div>
</nav>
<!-- 右侧滚动按钮 -->
<div class="scroll-buttons">
<button class="scroll-btn" id="scrollTop" title="回到顶部"></button>
<button class="scroll-btn" id="scrollBottom" title="回到底部"></button>
</div>
<!-- TTS语音朗读面板 -->
<div class="tts-panel" id="ttsPanel">
<div class="tts-title">语音朗读</div>
<div class="tts-controls">
<button class="tts-btn" id="ttsPlay" title="播放"></button>
<button class="tts-btn" id="ttsPause" title="暂停"></button>
<button class="tts-btn" id="ttsStop" title="停止"></button>
</div>
<div class="tts-progress">
<div class="tts-progress-bar">
<div class="tts-progress-fill" id="ttsProgressFill"></div>
</div>
<div class="tts-time" id="ttsTime">0 / 0</div>
</div>
<div class="tts-speed">
<span class="tts-speed-label">速度:</span>
<select class="tts-speed-select" id="ttsSpeed">
<option value="0.5">慢速</option>
<option value="0.75">较慢</option>
<option value="1" selected>正常</option>
<option value="1.25">较快</option>
<option value="1.5">快速</option>
<option value="2">极速</option>
</select>
</div>
</div>
<!-- 侧边栏章节导航 -->
<aside class="sidebar">
<div class="sidebar-title">章节导航</div>
<div class="sidebar-content" id="sidebarContent">
<a href="chapter-136.html" class="sidebar-chapter ">第136章地轨中心</a>
<a href="chapter-137.html" class="sidebar-chapter ">第137章魔剑士阿斯兰</a>
<a href="chapter-138.html" class="sidebar-chapter ">第138章泪目之眼</a>
<a href="chapter-139.html" class="sidebar-chapter ">第139章使徒会晤</a>
<a href="chapter-140.html" class="sidebar-chapter ">第140章复仇之剑</a>
<a href="chapter-141.html" class="sidebar-chapter ">第141章寂静城再访</a>
<a href="chapter-142.html" class="sidebar-chapter ">第142章时间之钥</a>
<a href="chapter-143.html" class="sidebar-chapter ">第143章翡翠梦魇</a>
<a href="chapter-144.html" class="sidebar-chapter ">第144章诅咒的守护者</a>
<a href="chapter-145.html" class="sidebar-chapter ">第145章精灵的誓言</a>
<a href="chapter-146.html" class="sidebar-chapter ">第146章深渊之眼</a>
<a href="chapter-147.html" class="sidebar-chapter ">第147章赫尔德的仪式</a>
<a href="chapter-148.html" class="sidebar-chapter ">第148章战后余晖</a>
<a href="chapter-149.html" class="sidebar-chapter ">第149章泰波尔斯的召唤</a>
<a href="chapter-150.html" class="sidebar-chapter ">第150章天空之城</a>
<a href="chapter-151.html" class="sidebar-chapter ">第151章风暴试炼</a>
<a href="chapter-152.html" class="sidebar-chapter ">第152章光芒与暗影</a>
<a href="chapter-153.html" class="sidebar-chapter ">第153章天空之战</a>
<a href="chapter-154.html" class="sidebar-chapter ">第154章天空之战</a>
<a href="chapter-155.html" class="sidebar-chapter ">第155章天空之战</a>
<a href="chapter-156.html" class="sidebar-chapter ">第156章格兰之森异象</a>
<a href="chapter-157.html" class="sidebar-chapter ">第157章魔界深处</a>
<a href="chapter-158.html" class="sidebar-chapter ">第158章幻象迷宫</a>
<a href="chapter-159.html" class="sidebar-chapter ">第159章无形之战</a>
<a href="chapter-160.html" class="sidebar-chapter ">第160章无形者的秘密</a>
<a href="chapter-161.html" class="sidebar-chapter ">第161章光之试炼</a>
<a href="chapter-162.html" class="sidebar-chapter ">第162章希洛克的陷阱</a>
<a href="chapter-163.html" class="sidebar-chapter ">第163章无形之战</a>
<a href="chapter-164.html" class="sidebar-chapter ">第164章日常的温馨</a>
<a href="chapter-165.html" class="sidebar-chapter ">第165章莎莎的信</a>
<a href="chapter-166.html" class="sidebar-chapter current">第166章圣者之鸣号</a>
<a href="chapter-167.html" class="sidebar-chapter ">第167章黑色大地入口</a>
<a href="chapter-168.html" class="sidebar-chapter ">第168章焦黑之地深入</a>
<a href="chapter-169.html" class="sidebar-chapter ">第169章暗黑骑士团</a>
<a href="chapter-170.html" class="sidebar-chapter ">第170章黑暗中的记忆</a>
<a href="chapter-171.html" class="sidebar-chapter ">第171章混沌王座</a>
<a href="chapter-172.html" class="sidebar-chapter ">第172章混沌之神的力量</a>
<a href="chapter-173.html" class="sidebar-chapter ">第173章米歇尔的羁绊</a>
<a href="chapter-174.html" class="sidebar-chapter ">第174章创世之光的净化</a>
<a href="chapter-175.html" class="sidebar-chapter ">第175章混沌的终结</a>
<a href="chapter-176.html" class="sidebar-chapter ">第176章篇章落幕</a>
<a href="chapter-177.html" class="sidebar-chapter ">第177章番外·米歇尔的最后祝福</a>
<a href="chapter-178.html" class="sidebar-chapter ">第178章番外·奥兹玛的遗言</a>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(166)) {
readChapters.push({{CHAPTER_ID}});
localStorage.setItem('readChapters', JSON.stringify(readChapters));
}
// 主题切换
const themeToggle = document.getElementById('themeToggle');
const savedTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
themeToggle.textContent = savedTheme === 'dark' ? '浅色' : '深色';
themeToggle.addEventListener('click', () => {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
themeToggle.textContent = newTheme === 'dark' ? '浅色' : '深色';
});
// 滚动到顶部
document.getElementById('scrollTop').addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
// 滚动到底部
document.getElementById('scrollBottom').addEventListener('click', () => {
window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
});
// 页面加载时,侧边栏自动滚动到当前章节
window.addEventListener('load', () => {
const sidebarContent = document.getElementById('sidebarContent');
const currentChapter = sidebarContent.querySelector('.current');
if (currentChapter) {
currentChapter.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
// ========== TTS语音朗读功能 ==========
let ttsSynth = window.speechSynthesis;
let ttsUtterance = null;
let ttsText = '';
let ttsSentences = [];
let ttsCurrentIndex = 0;
let ttsIsPlaying = false;
let ttsIsPaused = false;
let ttsSpeed = 1;
// 初始化:提取章节内容
function initTTS() {
const contentEl = document.querySelector('.chapter-content');
if (!contentEl) return;
// 获取所有段落文本清理HTML标签
ttsText = contentEl.innerText || contentEl.textContent;
// 分割成句子(中文按句号、问号、感叹号分割)
ttsSentences = ttsText.match(/[^。!?\n]+[。!?\n]+|[^。!?\n]+$/g) || [ttsText];
ttsSentences = ttsSentences.filter(s => s.trim().length > 0);
updateTTSProgress();
}
// 更新进度显示
function updateTTSProgress() {
const total = ttsSentences.length;
const current = ttsCurrentIndex;
document.getElementById('ttsTime').textContent = `${current} / ${total}`;
const percent = total > 0 ? (current / total * 100) : 0;
document.getElementById('ttsProgressFill').style.width = `${percent}%`;
}
// 播放当前句子
function playCurrentSentence() {
if (ttsCurrentIndex >= ttsSentences.length) {
stopTTS();
return;
}
const text = ttsSentences[ttsCurrentIndex].trim();
ttsUtterance = new SpeechSynthesisUtterance(text);
ttsUtterance.lang = 'zh-CN';
ttsUtterance.rate = ttsSpeed;
// 尝试选择中文语音
const voices = ttsSynth.getVoices();
const zhVoice = voices.find(v => v.lang.includes('zh') || v.lang.includes('CN'));
if (zhVoice) {
ttsUtterance.voice = zhVoice;
}
ttsUtterance.onend = () => {
if (ttsIsPlaying && !ttsIsPaused) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsUtterance.onerror = (e) => {
console.error('TTS error:', e);
if (ttsIsPlaying) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsSynth.speak(ttsUtterance);
}
// 播放
function playTTS() {
if (ttsSentences.length === 0) {
initTTS();
}
if (ttsIsPaused) {
ttsSynth.resume();
ttsIsPaused = false;
} else {
ttsIsPlaying = true;
playCurrentSentence();
}
document.getElementById('ttsPlay').classList.add('active');
document.getElementById('ttsPause').classList.remove('active');
}
// 暂停
function pauseTTS() {
if (ttsIsPlaying) {
ttsSynth.pause();
ttsIsPaused = true;
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.add('active');
}
}
// 停止
function stopTTS() {
ttsSynth.cancel();
ttsIsPlaying = false;
ttsIsPaused = false;
ttsCurrentIndex = 0;
updateTTSProgress();
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.remove('active');
}
// 设置速度
function setTTSSpeed(speed) {
ttsSpeed = parseFloat(speed);
// 如果正在播放,需要重新开始当前句子
if (ttsIsPlaying && !ttsIsPaused) {
ttsSynth.cancel();
playCurrentSentence();
}
}
// 绑定事件
document.getElementById('ttsPlay').addEventListener('click', playTTS);
document.getElementById('ttsPause').addEventListener('click', pauseTTS);
document.getElementById('ttsStop').addEventListener('click', stopTTS);
document.getElementById('ttsSpeed').addEventListener('change', (e) => setTTSSpeed(e.target.value));
// 加载语音列表(某些浏览器需要异步加载)
if (speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = initTTS;
}
// 页面加载时初始化
window.addEventListener('load', () => {
initTTS();
});
// 页面离开时停止播放
window.addEventListener('beforeunload', stopTTS);
</script>
</body>
</html>