专为 AYN Thor 打造的 Loki
Loki 是一款专为 AYN Thor 打造的一体化启动器,旨在解决问题而非制造问题。体验的每个部分都基于性能、稳定性和易用性而构建,提供了一个快速、轻量级的界面,充分利用了 Thor 独特的双屏硬件。
与传统前端不同,Loki 远不止于启动游戏。您可以直接在启动器内流媒体播放电影和剧集,通过本地网络连接到您的 PC 或其他设备进行游戏串流,并无缝切换到专用的 Couch Mode,以获得以手柄为核心的客厅体验。所有内容都整合在一个连贯的体验中,因此您无需离开启动器。
Loki 在整个界面中提供完整的手柄支持、广泛的自定义选项、现代双屏布局、内置媒体串流、游戏串流,以及专为 AYN Thor 设计的一系列不断扩展的功能。该启动器旨在极其轻量、高度优化且响应迅速,确保在没有不必要开销的情况下实现流畅的性能。
值得一提的是,Loki 从未打算重现 Nintendo 3DS 的外观或感觉。如果您正在寻找一个与 3DS 界面高度相似的启动器,Cocoon 是一个绝佳的选择。Loki 则拥抱现代设计哲学,拥有自己的身份,专注于可用性、性能和创新,而非复制其他系统的外观。
Loki 的目标很简单:为 AYN Thor 打造最精致、功能丰富且可靠的启动器,同时保持快速、直观,并针对其运行的硬件从头开始构建。
下载 · Android 10+ · GPL-3.0
快速入门
从 Releases 下载 APK,安装它,打开一次,并在 Loki 提示时将其设置为你的主屏幕应用。你的游戏、存档和模拟器不会受到任何影响,你可以随时卸载它而不会丢失任何内容。
首次启动时会播放一段简短的介绍,且仅播放一次,不会在每次重启时重复。随后,Loki 会展示它希望获取的权限,这些权限均非必需:将 Loki 设置为主屏幕应用是使其在按下 Home 键时打开的原因,而授予辅助功能权限则是启用指针并允许 Loki 在其他应用中输入的原因。拒绝其中任何一项,仍会保留一个可正常工作的启动器,只是这两项功能被禁用。
随后,一个操作指南将带你了解启动器的所有功能,并在过程中跨越两个面板——关于某个设置类别的步骤会在信息面板上打开该类别,同时该步骤自身的卡片保留在你旁边的网格面板上。你可以随时从 Settings → About → Replay the walkthrough 重新播放它。之后导入扩展时,会播放一段仅针对你所添加部分的简短操作指南。
双屏,一个启动器
一个面板承载网格:你的图标、你的菜单,以及底部边缘的分区栏,当前所在的分区会以强调色药丸形式填充,并伴随一个逐渐就位而非整体出现的指示器。另一个面板承载信息:当前光标所悬停内容的封面艺术、详情、评分、类型、发行日期、开发商与发行商、截图及游玩时长。哪个面板对应哪个功能由你在 设置 → 系统与辅助功能 → 双屏 中自行选择,交换它们也是快捷面板中的磁贴之一。
启动一款游戏,它会占据网格所在的面板,而另一个面板则保持在启动器界面。触摸任一面板即可为其赋予控制器——随时点击游戏进行游玩,点击启动器进行浏览。按下 Home 键可从任一屏幕将面板交还给 Loki,因为 Loki 在两个显示屏上均注册了主活动,而不仅仅是在默认屏幕上。条目的上下文菜单可以将其发送到另一个面板,从而让网格保持原位,这样你可以在每次启动时决定游戏落在哪个屏幕上——或者从同一菜单中设置 始终在…打开,此后无论该游戏是从网格、搜索、小组件还是沙发模式启动,都将使用你选择的屏幕。
提供五种屏幕模式。自动模式在存在第二块显示屏时使用该显示屏。双屏模式强制启用双屏显示。分屏单显模式将一块屏幕划分为上下两半,当仅存在一块显示屏时作为回退方案。单屏模式仅使用底部表面,并将信息面板转换为覆盖层。沙发模式将所有内容移至顶部屏幕,并保持底部面板处于暗色状态。
两块屏幕均能从睡眠状态正确恢复,且每个表面都基于固定画布而非屏幕的原始密度进行绘制,因此界面在最小宽度、分辨率和密度变化时能保持其比例。
沙发模式
沙发模式适用于将 Thor 放置在底座中,且控制器握在手中而非设备上的场景,它是一种独立的界面,而非重新排列的手持模式。所有内容均移至顶部屏幕,底部面板变黑——并非变暗,也非保留过时的网格,因为 Loki 将该面板保持为黑色,使系统无法使用其自身壁纸点亮它。
仪表盘由水平内容轨道而非网格构成,因此不存在空白单元格:继续播放、收藏夹、所选平台、应用以及您自己的收藏各自拥有一个根据其中卡片大小自动调整尺寸的搁架。LT 和 RT 可就地切换系统,并立即替换游戏搁架,而无需打开生成的平台文件夹。分区沿顶部排列,如同电视机的布局,提供以控制器为主的导航,涵盖主页、电影、剧集、流媒体和设置。
聚焦标题会交叉淡入电影级背景漂移、平台配色的氛围光以及刮擦风格的标志处理,游戏拥有专属的完整页面而非拥挤的页面,长按可唤起一个菜单而非多个。页眉显示已配置的时钟和实时电池状态,且不重复任何轮询逻辑。电影和剧集分为独立的标签页,每个标签页都是带有分类轨道的完整目录,且电影和 PC 流媒体均切换至专用的单屏仪表盘,因此无需使用变暗的手持面板即可完成操作。
八种背景专为隔室相望的电视而非臂距内的面板而设计:山脊(Ridges)、极光(Aurora)、漂移(Drift)、地平线(Horizon)、余烬(Embers)、脉冲(Pulse)、与启动器自身壁纸相匹配的设置,以及纯色。它们全部通过绘制而非解码生成,因此在屏幕保持开启时不占用内存或产生解码开销,且每种背景均根据高亮系统的强调色进行着色,使得当光标从一个控制台移动到另一个控制台时,房间氛围随之变化。
沙发模式(Couch mode)直接从库中构建其轨道并缓存其平台货架,因此切换系统时绝不会遍历手持设备网格,且手持设备的密度绝不会泄漏到电视界面中。同时也没有任何功能被移除——应用抽屉、菜单、键盘、搜索和设置均与手持设备布局中的表现完全一致。沙发 UI 尺寸可通过触摸或控制器在 75% 到 125% 之间调整,因此无需更改手持设备布局,即可针对观看距离优化电视界面。
网格
底部屏幕以两种方式之一绘制 Home,选择由单一设置决定。网格是默认选项,下文所有内容均描述此模式。平台卡片将其替换为系统流——每次填满面板一个系统,以图标包的宽幅横幅作为背景,以其标志作为标题。左键和右键在系统之间切换,并在两端循环,因此最后录入的系统与最先录入的系统仅相隔一次按键,而非二十四次。
每张卡片承载机器信息,以及你对它的操作记录。名称下方是制作者、发布年份及其简称;再下方是来自其内部的至多四张封面,最近游玩的排在最前,因为数量无法区分满是收藏的货架与从未打开过的货架。然后是数字——游戏数量、收藏数量、你游玩该系统的时长,以及你从未开始过的游戏数量——最后是你上次操作它的时间,以文字而非日期形式呈现。当某项信息无内容可显示时,该项即被省略,因此你刚添加的系统显示为“新”,而非“已弃用”。
高亮显示一个系统会将其填满顶部屏幕。 信息面板显示该平台的档案——其图标、制造商、年份和类别、描述、它所包含的游戏、收藏和游玩时长、该硬件的显著特点,以及你最近在该平台上玩过的两款游戏,每款游戏都可以从那里启动。这与平台文件夹在网格中一直显示的面板相同,因此逐步浏览流程是一种全面浏览系统的方式,而不是盲目选择其中一个的方式。
卡片的存在是因为图标包为每个系统提供三张图片——一个图标、一个宽幅主视觉和一个文字标志——而网格恰好只能容纳其中一张,缩小为正方形。另外两张被导入、存储但从未绘制。没有包艺术作品的系统会借用你最近在该系统上玩过的游戏的背景,而完全没有艺术作品的系统则回退到其自身颜色和 Loki 绘制的平台图标。
打开一个系统会直接返回网格,显示该系统的文件夹,因此排序、启动、上下文菜单和信息面板都完全保持原样——卡片替换了顶层,其下方的内容不变。诚实的代价是小部件:小部件由其占据的单元格定义,而全屏卡片的流程没有单元格。它们没有被移动或删除,将主屏幕切换回网格会显示它们每一个都在原来的位置。
每个图标都保留在你放置的位置。空单元格保持为空,且不会重新排列。布局在重新扫描后依然保留,因此移动 ROM 或重新安装应用会保留其单元格。
按住 A 键拾取图标,移动它,然后再次按下 A 键放下。捏合以在八个预设之间更改密度,从三列两行到八列五行,每个预设都有各自的间距和内边距,因此捏合可达到的每种尺寸都是经过设计的,而不仅仅是计算得出的。L2 和 R2 翻页,X 将所选内容设为收藏,Y 调出上下文菜单。
图标采用五种形状之一——方形、圆角、squircle、圆形或六边形——选择光标会描绘其所在单元格所具有的形状。每个图标都放置在由主题自身材质构建的底座上,因此选择 Glass、Raised、Flat 或 Tinted 会改变主屏幕,而不仅仅是设置页面:网格承载着主题所要求的阴影、亮边、边框和高程色调。空单元格真正为空,不绘制任何内容,除非你在整理时,此时它们会勾勒轮廓以显示图标可以放置的位置。标签承载在柔和的阴影上,以便在任何壁纸上保持可读性,且光标下方的标签会随之亮起。
默认库顺序由你从十个选项中进行设置:标题、平台、发行日期、评分、最后游玩时间、游玩时长、游玩次数、添加日期、文件大小,或你手动排列的自定义顺序。
上下文菜单是一个半宽磁贴的网格,因此一个游戏的十一个操作会同时显示在屏幕上,光标所在的磁贴的完整名称和描述会显示在下方的一行中。从中你可以启动、在特定屏幕上启动、收藏、添加到或从网格中移除、归入文件夹或新文件夹、编辑条目、选择不同的模拟器、隐藏它、打开其应用信息、卸载它,或将其删除。
文件夹
文件夹用于存放条目,抓取其自身的艺术资源,并可通过任意条目的菜单创建。扫描到的游戏按系统归档到各自的文件夹中,因此添加一台主机仅占用网格的一个单元格,而非三百个,且之后移出的内容会保留在你放置的位置。包含四十款游戏的文件夹使用与主网格相同的单元格几何结构进行分页,而非发明第二种布局。文件夹以从图标展开的堆叠形式、前四个子项的 2x2 预览,或彩色外壳上的单个字形进行绘制。
小部件
长按任意单元格即可添加小部件,它会落在你按下的单元格上。如果小部件比右侧和下方的空间更宽或更高,它会向左或向上滑动,使其仍然覆盖该单元格,而不是拒绝放置在那里——你按下的单元格是你希望小部件所在的单元格,而不是你希望它悬挂的角落。Loki 通过一个合适的小部件宿主托管普通的 Android 应用小部件,该部分负责在重启后拥有并保留它们的 ID,并在声明了配置屏幕时请求平台的同意对话框并运行提供程序自己的配置屏幕。
除此之外,Loki 还会从你自己的库中绘制八个小部件,应用小部件无法做到这一点,因为启动器之外的任何东西都从未听说过它。继续播放显示你最近玩的几款游戏,随时可以开始。聚光灯以全尺寸显示最后一款游戏的艺术图。收藏显示你已标记的内容。待玩列表显示你拥有但从未开始的游戏。最常玩显示时间实际上花在了哪里。给我惊喜挑选一款游戏来尝试,优先选择未开始的游戏,并在一整天内保持其选择,而不是每次光标经过时都重新随机选择。库统计你拥有多少款游戏以及你玩了多长时间,时钟显示时间和日期。
在编辑模式下,小部件可通过屏幕按钮以及控制器进行缩放和移动,因为其运行的面板是触摸屏。小部件是光标的单个停靠点,并占用其覆盖的所有单元格,且缩放操作可通过 Back 键放弃,而不仅仅是停止在其已达到的尺寸。
控制
A 启动,长按可拾取图标。B 返回。X 收藏。Y 打开上下文菜单。L1 和 R1 切换截图,L2 和 R2 翻页。点击任意摇杆调出快捷面板,Start 打开侧边面板,Select 打开应用抽屉,Guide 返回主页。长按扳机键可加速其他按键的操作。配对的键盘也可使用,采用 WASD、E、F、Tab、Enter 和 Escape。
附带两个控制器配置文件——Loki 默认配置和一个交换了 A 和 B 的配置——两者均可实时生效,无需重启。从 Settings → Controls → Button mapping 复制任意一个,所有命令均可重新绑定:选择一个,按下您想要的按钮,即可完成绑定。绑定机制通过监听下一次物理按键而非提供按键代码列表来实现,因为在特定手柄上,唯一能确定哪个按钮是哪个的方法就是按下它。长按拾取、重复延迟、重复速度和摇杆死区均可按配置文件进行调整,且内置的两个配置文件不可编辑——当自定义映射陷入困境时,它们是回归的途径。摇杆灵敏度是一个滑块,作为反向死区应用,因此更灵敏的摇杆会在较小的偏转时注册方向,并且两端均有限制,确保任何设置都不会使摇杆无法使用。导航可以在边缘处环绕或完全停止,页面边缘可以翻转到下一页,并且可以完全关闭网格上的触摸输入,使其仅由手柄控制。
AYN 按钮的固件不会发送任何应用可读的内容,因此 Loki 无法使用它——摇杆点击执行相同的功能,并在所有地方有效。如果某个按钮似乎失效,Settings → About → Button tester 会准确显示它发送的内容。
快捷面板
点击任意一根摇杆会弹出十二个磁贴:应用抽屉、全库搜索、Loki 的设置、切换屏幕、切换沙发模式、重新扫描库、录制两个面板、录制真实屏幕、Wi-Fi 面板、蓝牙设置、音量面板以及 Android 设置。任何需要特权权限的功能都被刻意排除在外,因为一个静默无反应的磁贴比没有磁贴更糟糕。
指针
指针用于手柄无法操作的一切场景:登录表单、商店页面、模拟器设置。在 Settings → Controls → Pointer 中开启后,同时按住 Start + Select 即可调出或隐藏指针。
左摇杆移动光标,右摇杆滚动,A 点击,X 长按,B 返回,Y 打开键盘,L1 和 R1 整页滚动。所有这些按键绑定均可重新映射,且每个按键也可设置为无操作、向上或向下滚动,或关闭指针。光标速度、加速度和大小均可调整,光标可跨越两个显示屏或停留在其中一个,按键操作可透传给底层应用而非被消耗。
要在 Loki 外部使用指针,请启用 Loki 的辅助功能服务——这是非特权应用获取可在其他应用中工作的光标的唯一途径,因为在另一个应用上方放置窗口并在其中点击需要手势分发,而在该应用拥有焦点时读取手柄按键需要辅助功能按键事件。
在其他应用中输入
在任意应用中点击文本字段,按下 Y,Loki 的键盘将出现在你手持的面板上,同时文本会输入到另一屏幕上的字段中。这需要辅助功能权限,且未使用标准 Android 文本字段的应用将无法接受输入。
键盘
Loki 自带键盘,因为 Android 的键盘在此设备上会显示在错误的屏幕上。方向键在按键间移动,A 按下,B 删除或在字段为空时关闭,X 输入空格,Y 切换大小写,L2 和 R2 在字母和符号之间切换,Start 完成。每个按键同时也是触摸目标。旁边有一个剪贴板面板,因此可以从一个字段复制文本并粘贴到另一个字段。
你的游戏
Loki 识别 47 个系统 并支持 87 款模拟器,每个模拟器都会按照其预期的方式接收 ROM。在 设置 → 游戏与艺术图 → 平台 中添加你拥有的主机,并为每个主机选择一款模拟器。
模拟器是根据其继承来源而非精确的软件包 ID 进行匹配的,因此分支和变体版本会被识别而不是被遗漏。独立模拟器优先于 RetroArch 和 Lemuroid,因此如果你拥有 melonDS 或 DraStic,DS 游戏会分配给它们,只有在你没有这些模拟器时才会分配给多核前端。已知的模拟器包括 Azahar、Citra、Panda3DS、melonDS、DraStic、NooDS、DuckStation、AetherSX2、aPS3e、RPCS3、Dolphin、Cemu、PPSSPP、Vita3K、Flycast、Redream、Yaba Sanshiro、Strato、Eden、Citron、Sudachi、MAME4droid、Mupen64Plus FZ、MasterGear、fMSX、iNES、ColEm、Speccy、ScummVM、John 和 .emu 系列、Pizza Boy、My Boy! 以及用于 Windows 游戏的 Winlator——包括双屏 Winlator 分支,该分支在双屏设备上会被优先提供。模拟器选择是按系统或按游戏进行的,选择器是一个对话框,在其中可以选择任何已安装的应用程序,以覆盖列表永远无法涵盖的情况。
在 Settings → Games & artwork → Extra ROM folders 中指向你的 ROM,或为特定平台指定一个文件夹。Loki 会扫描你授权的目录,通过扩展名匹配文件,并读取 zip、7z、rar 和 chd 归档内部的内容。重复检测和版本分组默认开启,系统应用默认隐藏,除非你明确要求显示,已安装的应用可以添加到网格中,也可以排除在外。缺失的文件会被标记而不是删除,因此未挂载的 SD 卡不会丢失任何内容,隐藏的项目也可以在你需要时随时重新显示。
扫描、抓取和游玩时间跟踪均在后台作为计划任务运行,而不是阻塞启动器。游玩时间按游戏记录并显示在信息面板上,即使 Loki 在游戏过程中被终止,这些数据也会保留,这在内存紧张的设备上是正常现象。
美术资源与细节
五个来源按字段合并,任何手动编辑的内容都不会被覆盖。Wikidata 提供开发者、发行商、日期和系列信息,无需任何额外配置。ScreenScraper 提供标题、演职员表、类型、日期和美术资源,使用它只需一个你自己的账户。IGDB 提供描述、评分和完成时间,通过 Twitch 进行身份验证,无需审批步骤。SteamGridDB 使用你的 API 密钥提供方形网格美术资源。RAWG 使用你的 API 密钥提供描述、评分、截图和完成时间。没有密钥的来源会被跳过而非导致致命错误,每个美术资源槽位都会询问擅长该领域的提供商。
文件通过其本质而非名称来识别:CRC、MD5 和 SHA1 哈希值会被发送到 ScreenScraper,以便命名不当的 ROM 也能匹配。当匹配不确定时,你可以通过一个两阶段对话框手动选择——先选游戏,再选封面——完全由手柄驱动,没有倒计时替你作答。在完整库扫描期间询问默认关闭,以便全库扫描可以无人值守运行,而扫描单个系统时始终会询问。
来自 IGDB 和 RAWG 的完成时间是根据您自己的游玩时间进行衡量,并以进度条的形式显示在信息面板和沙发模式中。每款游戏保留一张封面和最多三张截图,bumpers 会在它们之间切换。还可以从其他启动器的媒体文件夹导入美术资源,Loki 会将其文件匹配回您的游戏库。
平台美术资源可以从图标包、文件夹或 zip 文件中导入,Loki 会绘制一套连贯的平台高亮图标,如果导入的图标包需要接管,则可以将其关闭。如果图标包的文件夹命名方式与模拟器前端使用的命名方式一致,则无需重命名即可被识别,且针对 Loki 尚未建模的系统的美术资源会被保留而非丢弃,因此稍后添加该系统即可使其图标出现。
安装图标包会替换其覆盖的所有系统上已有的内容,包括您手动装饰的系统——一个悄悄跳过这些系统的图标包与一个未安装的图标包无法区分。在此过程中不会丢失任何内容:您自行选择的图像会被搁置,并在您卸载图标包时直接返还;如果安装了两个图标包,移除较新的一个会显示较旧的一个,而不是将系统清空。任何单个游戏或平台的封面艺术和背景艺术也可以手动从文件中选择。
智能文件夹
智能文件夹保存的是符合查询条件的内容,而非你归档到其中的内容,因此它会随着库的变化而自动维护。设置 → 游戏与艺术 → 智能文件夹 可从预设开始创建——继续、待玩、收藏、最佳、新游戏、最常玩、复古或空查询——之后每个字段都由你决定:哪个系统、仅收藏、仅未玩、在多少天内玩过、最低评分、在两个年份之间发行、标题片段、排序方式、方向以及保留数量的上限。文件夹会立即出现在网格中,并从此自动填充。给一个游戏加星,它就会出现在收藏文件夹中,无需请求刷新。
备份
设置 → 系统与辅助功能 → 备份 会将当前登录配置文件所属的所有内容——设置、包含封面艺术和播放时长的媒体库、你的主题以及网格布局——写入到你选择放置位置的单个文件中。你的 ROM 和模拟器不包含在内,也不会被触及。
恢复操作会读取其中一个文件。它首先解包到一个暂存区域,并且只有在整个归档文件读取完成后才会替换文件,因此一个被截断的文件只会保留你现有的配置文件,而不会将其部分替换。之后必须关闭并重新打开启动器,因为在启动器运行期间,媒体库和设置文件都处于打开状态,在重新启动之前不会读取恢复后的文件。
成就
RetroAchievements 已完全集成。请在 Settings → Games & artwork → Achievements 中使用您的用户名和 API key 登录,Loki 将同时显示您在某个成就集中已获得的成就和尚未完成的成就,而不仅仅是已完成的部分。支持仅 Hardcore 模式,成就数据会在后台随库中其他内容一起刷新。
配置文件
多人可以使用该设备。每个配置文件拥有自己的设置文件、自己的媒体库数据库和自己的头像,这些内容存储在一个以生成的 ID 命名的目录中——这就是为什么重命名配置文件是免费的,且两个名为“Guest”的用户不会在磁盘上发生冲突。从 Settings → Profiles 中,可以添加、重命名、更改颜色、设置图片、切换和删除配置文件。最后一个配置文件无法删除,因为启动器必须加载某些内容,而删除当前激活的配置文件将回退到剩余配置文件中最近使用的一个。
Loki 还可以在 Android 设置中授予通知访问权限后,将系统通知栏镜像到其自己的面板中,而任何应用都无法自行授予此权限。
电影与剧集
电影与剧集是一项扩展功能,如以下所述,随 movies.json 添加。从网格底部的栏中打开 Movies,或在沙发模式下从顶栏打开,在那里电影和剧集是位于同一目录之上的两个独立标签页。
浏览无需任何配置。播放需要源,且有两种类型。Loki 支持 Stremio 插件协议,因此粘贴插件的 URL 并按下 Test 即可——安装链接、manifest URL 和 stremio:// 链接均被接受。Loki 还支持 Torznab,Jackett、Prowlarr 和 NZBHydra 均提供此服务,并且 Loki 会自行搜索这些服务,无需中间插件。索引器需要一个您自定义的名称、其 Torznab 端点以及其仪表板中的 API 密钥,按下 Test 会执行一次真实搜索,因此错误的密钥或无法访问的索引器会立即告知您,而不是之后静默地找不到任何内容。您自己网络上的索引器通过纯 HTTP 工作,而所有远程连接均使用 HTTPS。
Real-Debrid 和 TorBox 均受支持,可将 torrent 结果转换为即时流。粘贴令牌并按下 Check。如果没有令牌,源会被列出但无法打开。
源选择可以是自动的,也可以由您决定,支持从 SD 到 4K 的首选分辨率、可选的 HDR 偏好、最大文件大小、仅限缓存的过滤器、首选语言,以及避免配音版本的选项。播放会从您上次停止的位置继续,在倒计时结束后自动播放下一集(倒计时可设置或关闭),按您选择的间隔跳过,并允许您在离开标题页的情况下选择不同的源,同时选择音轨、字幕语言和播放速度。渐进式文件、HLS 和 DASH 均得到支持。
游戏串流
PC 串流是一项扩展功能,随 stream.json 添加,如下所述。从侧边栏打开 Stream,Loki 会查找网络上运行 Sunshine 的 PC,并通过 mDNS 进行广播,因此常见情况下无需任何配置。在 PC 上运行 Sunshine,打开 Stream,PC 会自动出现——或者如果无法通过发现机制找到,则通过地址手动添加。在 Sunshine 中输入 PIN,然后选择要玩的内容。PC 可以重命名和移除,Loki 在 Sunshine 客户端列表中的名称由你自行设置。
串流期间,另一侧面板变为触控板和键盘,这是唯一能在串流桌面中输入文字的方式,因为 Android 自带的键盘无法在其中渲染。通过 Back 退出串流,或同时按住 Start + Select + L1 + R1。
分辨率、帧率和比特率均可配置,默认值为 20 Mbps 的 1080p60,因为比特率对画面是呈现游戏质感还是模糊拖影的影响,远大于分辨率。视频编码器可以保持自动——提供设备硬件可解码的所有格式并让主机选择——或固定为 H.264、HEVC 或 AV1。音频可以是立体声或环绕声,PC 可以保持静音或继续播放声音,并且可以允许或禁止主机重写游戏自身的图形设置。Couch 模式为串流提供了独立的电视界面,包含以卡片形式绘制的屏幕键盘,以及应用内关于所有功能如何工作的说明。
使其成为你的
内置了十四种主题,按照其承诺的色彩而非亮度,陈列在四个架子上。Material、Obsidian、Slate 和 Linen 是中性的,其中灰色即设计,强调色保持低调。Ember、Citrine、Sakura 和 Vapor 是暖色调。Nocturne、Aurora、Orchid 和 Terminal 是冷色调。One Dark 和 Palenight 取自代码编辑器,共享那种使编辑器调色板成为其本身的中性底色,而非其余主题的近乎黑色。
每种主题均可选择浅色或深色,或跟随 Android 自身的设置(包括其日程安排),因为调色板是从配方生成的,而非作为十六进制值表编写——Ember 浅色和 Ember 深色是同一配方在不同底色上的解析结果,因此两者都无需手工绘制,且彼此不会偏离。对比度是一个具有四个位置的真实旋钮,遵循 WCAG 比率而非事后检查,因此提高它仅将文本移动至必要程度,且底色在每个级别都保持其颜色。此外,还可用色彩强度、强调色相移、用于 OLED 面板的纯黑模式、手工挑选的强调色覆盖以及 Android 自身的动态色彩。
面板的构成与其颜色是分开的。表面可以是扁平的、凸起的、着色的或玻璃的,具有各自的深度和颗粒量,且边角可以处处为方形、处处为圆角,或留给每个主题自身的半径。
壁纸按面板设置,可以是您自己的静态图像,也可以是九种绘制效果之一:波浪、网格、极光、散景、粒子、星空、渐变漂移、视差,或一种自适应效果,该效果从所选游戏的平台强调色中获取色调,因此当光标在不同系统间移动时,背景会随之变化。静态设置会关闭效果,调暗滑块控制壁纸被推远的程度,并且所选游戏自身的视频预览可以作为背景播放。
选择光标以圆环、填充、角括号、下划线或聚光灯的形式绘制,并通过呼吸、脉冲、旋转、闪烁或完全不动画的方式动效,同时具备可调节的光晕。文本大小独立于界面进行缩放。刻意不提供字体选择:启动器将所有内容设置为系统无衬线字体,因为该设备在臂长距离和房间另一侧阅读时,唯有这种字体在两种情况下均保持清晰可读——而过去提供的五种选项实为三种真实字体下的五个名称,且可在两个可能不一致的位置进行设置。动效具有四种特征——流畅、平滑、干脆和机械——并在此之上叠加一个独立的过渡速度倍率。时钟可隐藏,支持十二小时制、二十四小时制或模拟显示。状态栏和页面指示器均可单独关闭,文件夹和信息面板各有其独立样式,且信息面板可绘制为具有明确边缘的不透明卡片,或完全无可见边缘地融入艺术作品中。
界面声音是一个主开关,包含独立的导航和启动类别,并拥有独立的音量,其旁侧配有触觉反馈强度滑块。
主题编辑器
如果这十四种都不够理想,那就自己打造一个。设置 → 个性化 → 主题编辑器 会从任意一个内置主题开始,并交出构成该主题的每一个数值——不是叠加在上面的调整,而是配方本身。
顶部有一个预览面板,以小型启动器的形式展示该主题——网格、信息面板、选择光标和分区栏,全部采用你正在构建的调色板。其中的每个值都是真实的,因此如果预览看起来不对,就意味着主题本身有问题。它的存在是因为编辑器已经应用了正在编辑的内容,这使得启动器本身成为最真实的预览,除了那些隐藏在设置页面背后的部分——而这些恰恰是评判调色板的关键所在。
颜色选择器是主要控件:一个你可以用左右方向键或点击来遍历的光谱。该色带是按主题自身的强度绘制的,而非全饱和度,因此你在色条上看到的就是启动器将呈现的样子。在其下方,强度决定了主题的色彩程度——从带有彩色光标的灰色启动器,到以色彩为主导的启动器。然后是面板的构成、圆角程度、背景向颜色渐变的程度、其动态效果,以及与之搭配的壁纸。
这就是整页内容,且是有意为之。一个主题大约包含七项决策;其余一切——第二强调色、渐变的远端、光标的偏移、灰色的着色程度、面板的不透明度与模糊度——都是这些决策的结果,而逐一询问每一项,意味着要在一个足够长的页面上手动完成调色板生成器的工作,以至于你本想修改的颜色已经滚出屏幕顶部。这些值依然存在,依然包含在导出的主题中,并且依然由随机化功能生成,该功能在内置主题实际占据的区间内进行滚动,因此结果始终是一个主题,而非在刺眼强调色下的一片浑浊底色。
**打开一个主题即应用它,**因为调色板是横跨两个面板的整个界面,设置行中的任何色块都无法替代亲眼所见。每个滑块都会移动你正在查看的启动器。你的主题与内置主题出现在同一图库中,并以相同方式选择,每个主题都可以重命名、复制和删除;删除正在使用的主题会回退到其下方的内置主题,而不是让启动器失去调色板。
主题也是一个文件。导出一个,你会得到一份小型可读的 JSON 文档,其中列出了每个参数,任何人都可以从同一页面导入——这与扩展文件是同一个概念,同样不是许可证密钥。导入的主题在到达时总是被赋予一个新的身份,因此文件永远不会悄悄覆盖你自己的主题。
辅助功能
高对比度、大文本和减少动态效果各自拥有独立的开关,此外还有四种色觉模式——红色盲、绿色盲、蓝色盲和灰度——以及针对所有触控目标尺寸的倍率。减少动态效果会将动画背景固定为静态构图,而非将其移除,因此开启后不会有任何内容消失。
性能
如果感觉缓慢,设置 → 系统与辅助功能 → 性能 可通过一个开关同时关闭模糊效果、动态壁纸和视频预览,并且动画和模糊效果各自拥有独立的切换开关。页面预取半径可保持相邻网格页面的组合状态,从而实现即时翻页,并且当启动器位于前台时,顶部屏幕可保持唤醒状态。
当你正在游玩时
开始一局游戏后,你未游玩的那个面板会变成该游戏的面板,而不是回退为网格。此刻的网格是一个用于选择你已选定之物的菜单;这正是第二块屏幕的实际用途。
它显示你在游戏内部看不到的内容。一个记录本次游玩时长的时钟——而非你的总时长,后者回答的是另一个问题;这个时钟回答的是你是否应该停止。你当前的进度,以爬虫返回的完成时间为参照绘制,且仅在有实际返回值时才显示,而非对照一个虚构的数字。你上次写下的内容。你保留的帧。以及三个操作:截图、写笔记,或收回该面板。
它刻意不设计成遥控器。游戏不是 Loki 来操控的,而是一排大多无用的按钮,会比一个承认自身能力边界的按钮更糟糕。
覆盖在顶部的 Loki
在游戏内同时按住 Start 和 R1,Loki 便会覆盖在顶部——一个显示游戏名称及三个图标的悬浮面板:截图、返回主页或关闭。方向键用于导航,A 键确认,B 键关闭,且当面板显示时所有按键均被拦截,因此不会出现方向键在此处移动光标、同时角色在另一处移动的情况。
采用组合键而非长按 Start,因为长按只有在按键已经传递到游戏之后才能被识别——若要识别长按,则需拦截所有 Start 按键并重新注入短按,这相当于一个大多数时候都能工作的暂停键。组合键在其完成的帧上即可判定。选择 R1 而非 Select,因为 Start 和 Select 组合已经用于唤起指针。
仅有三个图标,不再更多。Loki 提供的其他功能都需要 Loki 处于前台——例如编写笔记需要键盘,而键盘无法出现在其他应用的全屏窗口之上——且一个悄悄关闭你的游戏以执行任务的图标,只会是一个更糟糕的主页按钮。该面板由绘制指针的同一服务通过同一权限绘制,因此无需你额外授予任何权限。
备注与截图
每款游戏都可以附带一条备注——你进行到了哪里、接下来该做什么、四个存档文件中哪一个是真正的存档。这是库中唯一一个抓取器没有意见的字段,因此它存储在独立的表中,永远不会被重新抓取覆盖,并且在无法找到 ROM 的重新扫描中也能幸存:文件被移动正是备注作为你所在位置最后记录的情况。从游戏的上下文菜单或游戏旁边的面板中,在 Loki 自己的键盘上编写一条。清空并保存即删除,因此无需寻找第二个命令。
截图是对游戏本身拍摄的——另一个应用,在另一个显示器上,这是应用通常根本无法捕获的内容。Loki 通过指针服务的权限而非屏幕捕获同意对话框来实现这一点,因为该对话框会出现在正在拍摄的对象之上。每一帧都归档到其来源游戏,并显示在该游戏的面板上,而不是落入一个包含一百张无日期图片的文件夹。备注和截图都位于配置文件目录内,因此备份会携带它们,恢复会将它们带回,而这两个功能都不需要知道备份的存在。
录制
共有两种录制方式,它们捕获的内容各不相同,因此是两块独立的磁贴,而非一块带有后台设置的磁贴。
录制启动器会将两个面板绘制到双屏控制台机身内的一个视频中,并保存至 Movies/Loki。它录制的是启动器而非设备,因为 Android 仅允许应用捕获默认显示屏,因此正在运行的游戏不会出现,且没有音频。
录制屏幕会镜像真实显示屏,并持续进行到游戏中。它需要平台的同意对话框,并在前台服务中运行,以便在离开启动器后仍能存活,其通知携带控制项——这是进入游戏后停止你所启动录制的唯一方式。
扩展
电影、剧集和 PC 流媒体均为可选项。它们内置于应用中但默认处于关闭状态,因此如果你只想用它来管理 ROM,界面上就不会出现相关栏目、设置类别或页面。添加扩展只需一个小文件,而非下载:movies.json 用于浏览电影和剧集、查找源并播放,而 stream.json 用于查找网络中的 PC 并从中进行流媒体播放。两者均附带于每个版本,且自 v1.1.0 以来未作更改,因此如果你已经拥有它们,无需重新导入。
将文件保存在设备上的任意位置——下载文件夹即可——然后使用 设置 → 系统和辅助功能 → 扩展 → 导入扩展。该栏目会立即出现,不会获取任何内容,且支持离线使用。从同一页面移除它,其添加的所有内容都会消失,但其设置会保留,以便你日后重新添加。
它不是许可证密钥。任何人都可以在文本编辑器中编写一个;它只是表达你想要启动器中哪些部分的一种方式。extensions/README 中有更多说明。
设置
设置分为两级——一个类别栏,每个类别包含一个足够短、能在一屏内显示的页面列表,因此打开某个类别时会一次性显示全部内容,而不是要求你用方向键浏览三十行。
个人资料涵盖当前登录的用户,以及该用户的姓名、头像和颜色。个性化涵盖主题与颜色、界面表面、主题编辑器、壁纸、界面以及主屏幕网格和选择光标。游戏与艺术资源涵盖平台、额外的 ROM 文件夹、扫描、排序、智能文件夹、元数据与抓取、平台艺术资源和成就。电影与剧集涵盖来源与账户,以及播放。PC 串流涵盖画面、控制和 PC。控制涵盖导航、按键映射、指针和反馈。系统与无障碍涵盖双屏、性能、备份、扩展和无障碍。关于涵盖版本和设备信息、默认启动器提示、重播引导教程、日志记录、按键测试器和重置。
属于你未启用的扩展的类别,连同其下的所有页面,完全不会出现在类别栏中,而不是以灰色显示,并且它们的设置会被保留,以防该扩展重新启用。每一行都支持手柄操作。
尚未构建
桌面模式已列入计划。流媒体期间的鼠标和键盘支持仅部分实现——手柄和触控板可用,但完整的指针和文本路径尚未接入。流媒体期间的 HDR 已被接受但未应用。云同步已建模但背后没有传输机制,尽管本地备份和恢复已构建完成,且这是至关重要的部分。收藏有表格但没有界面。插件和第三方扩展尚未启动。
有两个较小的限制值得精确说明。智能文件夹的类型和标签过滤器未在编辑器中暴露,因为两者都没有固定的词汇表——它们就是刮削器为你的特定库返回的内容,因此针对它们的选取器将是每个安装环境都不同的数百个字符串;目前“标题包含”覆盖了相同的功能。此外,恢复操作会替换你当前登录的配置文件,而不是提供从文件创建新配置文件的选项,因此在设备间迁移配置文件意味着先创建配置文件,然后将其恢复进去。
有两个已完成的功能是被禁用而非缺失。浮动坞——五个可分配槽位、其位置以及整个设置页面——在底部导航栏占据网格面板底部边缘期间,被完整保留在标志位之后。信息面板上的配置文件和通知簇同样被搁置,直到该角落布局确定,尽管沙发模式仍会绘制它,且配置文件本身完全不受影响。
还有一些已知的限制值得明确说明。模拟器包名在不同版本之间会发生变化,因此未知的包名会回退到通用打开方式。需要真实文件路径的模拟器只能访问主存储。并且,一旦应用出现在面板上,Loki 无法判断它是否仍然存在——按 Home 键即可收回面板。
自行构建
./gradlew assembleRelease
./gradlew test
JDK 17,以及用于流媒体核心的 NDK 和 CMake:
sdkmanager "ndk;27.0.12077973" "cmake;3.22.1"
原始设计文档——双屏架构及其背后的规则——保存在 docs/DESIGN.md。它是在旧的 THOR 名称下编写的,此后未再维护,因此请将其视为历史记录,而非对当前代码的描述。
许可证
GPL-3.0 — 参见 LICENSE.
流媒体核心是 Moonlight,它是 GPL 许可,因此 Loki 也是。任何获得构建版本的人都有权获取其源代码。
Loki 与 AYN、Stremio、Real-Debrid、TorBox、RetroAchievements 或任何模拟器或索引器项目均无关联。