# Top Speed Remake：官方玩家与服务器指南

## 目录

- 1. 欢迎
- 2. 关于本次发布
- 3. 许可证与第三方组件
- 4. 支持的平台
  - 4.1 核心游戏组件
- 5. 安装、更新与卸载
- 6. 文件、文件夹，以及哪些内容必须保持在一起
- 7. 首次启动与设置向导
- 8. 菜单导航与屏幕阅读器行为
  - 8.1 滑块
  - 8.2 开关、复选框和单选按钮
  - 8.3 操作
- 9. 主菜单与游戏模式
- 10. 驾驶基础
  - 10.1 道路位置与车辆控制
  - 10.2 自动挡、手动挡与引擎行为
  - 10.3 弯道、路面与领航提示时机
  - 10.4 实用驾驶方法与恢复
  - 10.5 在 Android 上如何握持手机
- 11. 完整设置指南
  - 11.1 游戏设置
  - 11.2 语音
  - 11.3 音频
  - 11.4 音量设置
  - 11.5 控制
  - 11.6 比赛设置
  - 11.7 服务器设置（客户端侧多人默认值）
  - 11.8 默认值概览
- 12. 多人客户端指南
- 13. 通讯器（多人语音与串流）
  - 13.1 通讯器如何工作
  - 13.2 打开并使用它
  - 13.3 音量
  - 13.4 麦克风设置
  - 13.5 通过通讯器串流媒体
  - 13.6 语音聊天故障排查
- 14. 专用服务器指南
- 15. 面板与车载收音机
- 16. 自定义赛道与自定义车辆
- 17. 更新器在桌面端与 Android 上的行为
- 18. 详细驾驶教程
- 19. 多人设置示例流程
- 20. 设置调校方案
- 21. 给测试者和发布准备的补充说明
- 22. 故障排除
- 23. 常见问题
- 24. 控制参考
  - 24.1 菜单导航
  - 24.2 主菜单与启动
  - 24.3 驾驶核心操作
  - 24.4 驾驶信息查询
  - 24.5 比赛中直接查询玩家编号与位置的按键
  - 24.6 面板与收音机控制
  - 24.7 多人菜单触控布局（Android）
  - 24.8 多人比赛覆盖层控制
  - 24.9 通讯器控制
- 25. 鸣谢与致谢
- 26. 联系我

## 1. 欢迎

欢迎。我是 Diamond Star，这个项目背后的人。为了让这款游戏重获新生，并尽可能把它做得更好，我和 AI 一起投入了数月时间进行开发与打磨。

Top Speed Remake 是对旧版 Top Speed 的一次重写。它是一款拥有多种模式与选项的音频赛车游戏。

如果没有贡献者、测试者、翻译者，以及那些通过捐助帮助项目持续推进的人，这个项目根本不可能存在。

请认真阅读这份指南。这个项目已经成长了很多，维护它需要我投入大量时间与精力。如果你觉得它有价值，无论你是开发者还是玩家，只要你有能力，请考虑向我捐助。我会非常感激，这也能实实在在地帮助我继续做下去。

我想感谢所有为这个项目做出贡献的人。虽然我会收到一些小型贡献，但这个项目仍然几乎完全由我一人管理，社区只能提供少量帮助。因此，如果你希望我新增功能或修复 bug，请多给我一点耐心。

这份指南是写给玩家和服务器管理员的。它会说明安装、首次启动、设置、比赛模式、多人联机、触控操作以及常见故障排查方法。

如果你是第一次接触这款游戏，建议先阅读第 7 到第 11 节，然后在游玩时把第 23 节当作控制参考。

## 2. 关于本次发布

Top Speed 最初是一个诞生于 2008 到 2013 年间的开源 C++ 项目。当前这款游戏则是用 C# 完整重写而成。

本项目中使用的所有素材，均直接取自旧版游戏；旧版项目也以开源形式托管在 GitHub 上，点此查看。

## 3. 许可证与第三方组件

Top Speed Remake 的项目代码以 GNU GPL v3 协议发布。

构建产物中还包含若干拥有各自许可证的第三方组件。如果你要再分发这款游戏，请务必将这些第三方许可证声明一并保留。

这里涉及的主要第三方许可证组包括 SoundFlow 相关声明、SteamAudio.NET（MIT）、Steam Audio 原生库许可证文本（Apache 2.0），以及项目中随附分发的其他依赖项许可证。

## 4. 支持的平台

Top Speed 支持多个桌面操作系统以及移动端。移动端目前仅支持 Android，未来希望能加入 iOS。

桌面版可用于 Windows、Linux 和 macOS。Android 支持目前主要面向 ARM64 设备，并要求 Android 11 或更高版本。

请不要再提交希望支持更低版本 Android 的 issue。由于部分库的要求，这件事做不到，例如 Prism 的最低 API 要求就是 30（Android 11）。

专用服务器程序与游戏客户端是分开的。即使你自己不运行本地服务器，也仍然可以游玩游戏并使用全部在线功能，只要你加入的是别人托管的现有服务器。请注意，本游戏没有官方服务器，但有一些社区成员维护着可用的公共服务器，其列表见第 12 节。

### 4.1 核心游戏组件

游戏体验由几个相互配合的主要系统构成。

输入系统负责处理键盘、控制器、触控手势，以及 Android 上的体感转向选项。

音频系统负责菜单音效、比赛音效，以及用于帮助定位的空间提示音。

语音系统负责菜单、提示和比赛播报中使用的屏幕阅读器与 TTS 输出。

网络系统负责服务器连接、多人比赛同步，以及其他在线功能。

本地化系统负责翻译后的菜单文本和语音字符串。

### 4.2 系统要求

#### 4.2.1 桌面端要求

在 Windows 上，游戏仅支持 64 位版本。

如果你在启动游戏时遇到问题或报错，请下载 Visual C++ Redistributable bundle。这个链接会打开一个第三方网站，你可以在那里下载。

在 macOS 上，游戏需要 Mac OS 12.1 或更高版本。

在 Linux 上，如需让语音正常工作，你需要安装 Orca 49 或更高版本。

#### 4.2.2 移动端要求

在 Android 上，游戏需要 Android 11 或更高版本，目前只支持 64 位架构。建议设备拥有相对较好的处理器，尤其是在启用 HRTF 音频时，否则可能会出现卡顿。

## 5. 安装、更新与卸载

### 在桌面端安装

桌面版是便携式的。请将压缩包解压到同一个文件夹中，并确保所有附带文件夹都与可执行文件放在一起。

不要只把可执行文件单独移动到别的地方。游戏依赖其内容文件夹保持在同一位置。如果你只是想更方便地启动游戏，可以在 Windows 上给可执行文件创建一个快捷方式并放到桌面等位置。

在 macOS 上，游戏下载后可能无法直接正常运行，因为 macOS 可能会给下载的应用打上隔离属性。把 `.app` 文件复制到“应用程序”文件夹后，在 Finder 中选中该应用并按 `Command+C`。然后打开“终端”，输入 `xattr -c`，再按 `Command+V` 将应用路径粘贴到命令后面，最后按回车执行。完成后，再从“应用程序”文件夹启动游戏。

### 在 Android 上安装

通过 Android 的安装包安装程序安装 APK。

如果安装被阻止，请为当前执行安装的安装器应用授予安装权限，然后重试。

Android 上首次启动可能会比之后更久，因为初次运行时会进行内容准备。

### 内置更新

Top Speed Remake 支持从主菜单手动检查更新，也支持在启动时自动检查更新。

桌面端更新包为 zip 文件，由更新器程序完成安装。

Android 更新包为 APK 文件，通过 Android 安装流程进行安装。

### 卸载游戏

在桌面端，直接删除游戏文件夹即可。

在 Android 上，请在系统应用设置或启动器菜单中卸载。

## 6. 文件、文件夹，以及哪些内容必须保持在一起

Top Speed Remake 依赖其内容文件夹存在。如果缺少必要文件夹，游戏的某些部分将无法加载，或者会在缺失内容的情况下加载。

重要文件夹包括 `Sounds`、`Tracks`、`Vehicles` 和 `languages`。

在桌面端，`settings.json` 保存在可执行文件旁边。在 Android 上，对应数据会在启动期间存放于应用存储中。

添加自定义赛道、自定义车辆或语言文件时，必须严格保持文件夹结构正确。放错位置，是自定义内容不出现在菜单中的最常见原因。

## 7. 首次启动与设置向导

当你第一次启动 Top Speed Remake 时，游戏会检查是否已经存在设置文件。如果这是一次全新安装，常规主菜单出现之前会自动打开设置向导。这是正常行为，并不是错误。

如果启用了 logo 播放，logo 会先播放。在桌面端可按 Enter 跳过，在移动端可向上滑动跳过。

### 设置向导的作用

设置向导会先让你选择语言，再校准语音时序，为正式游玩做好准备。如果跳过这两个步骤，游戏依然能运行，但菜单提示和语音时机可能会不准确。

### 第一步：选择语言

欢迎界面之后会进入语言选择。请选择你希望用于菜单文本和游戏语音字符串的语言。确认后，游戏会立刻保存该选择。

如果你之后又加入了新的翻译文件，可以回到设置中再次切换语言。如果切换后仍有部分文本显示为英文，请重启一次游戏，让所有菜单重新从所选语言文件中加载。

### 第二步：屏幕阅读器校准

校准会测量你当前设备和当前后端下屏幕阅读器的朗读速度。游戏会播放一段较长的示例文本，等屏幕阅读器读完后，你再进行确认。

简单来说，校准就是一次时序检查。它不会改变语音音色，也不会改变比赛物理。它只是帮助游戏在合适的时间播放延迟帮助文本和语音提示，以匹配你当前的朗读速度。

之所以必须有校准，是因为并不存在一种可靠、而且能在所有屏幕阅读器和后端上通用的方法，来判断“屏幕阅读器此刻是否还在讲话”。因此，当前做法是：你一听到示例文本，游戏就开始计时；等你确认后，再用总时间除以该示例中的单词数，从而估算出你的屏幕阅读器读一个单词平均需要多久。请记住这一点，因为某些使用提示或延迟描述不一定每次都绝对精准，但通常会非常接近，甚至就是正确的。

如果没有正确校准，延迟提示可能会过早触发，打断你正在听的内容；也可能过晚触发，以至于你已经移动到别的项目。正确校准会给游戏一个可靠的时间值，让提示在仍然有用的时候出现。

### 何时需要重新校准

当以下情况发生时，请重新校准：你切换了语音后端、显著调整了语速、换了设备，或者你感觉提示时机偏早或偏晚。你可以随时在语音设置中重新校准。

## 8. 菜单导航与屏幕阅读器行为

Top Speed Remake 的菜单设计目标，是让同一套逻辑同时适用于桌面端和 Android，尽管二者的物理输入方式完全不同。每个菜单都有一个当前焦点项，所有导航操作都会以可预测的方式移动或修改这个焦点。

一个菜单项可以是任意类型的控件，并不一定只是你通常所理解的“可激活项目”。目前常见控件包括单选按钮、滑块、开关以及普通项目。

要激活普通项目，在键盘上按 Enter，或在移动端单指向上滑动。

对于其他控件，当焦点落到它们上面时，你会听到控件类型提示，例如在选项菜单中就是如此。

使用提示是针对当前项目的延迟帮助信息。如果启用了提示，游戏会稍等片刻，然后朗读该项目的帮助文本。你也可以随时主动请求提示：桌面端按 Space，移动端长按。

循环导航决定当你到达列表边缘时会发生什么。如果开启循环，当你在最后一个项目继续向前移动时，焦点会跳到第一个项目；如果关闭循环，焦点会停留在最后一个项目，直到你往相反方向移动。

有些菜单在同一菜单上下文中包含多个页面。桌面端使用 Tab 和 Shift+Tab 切换。如果你听到桌面端和移动端的操作说明不同，那是有意设计的，因为每个平台都要获得符合自身输入方式的指导。

### 8.1 滑块

滑块用于快速调整数值。例如，选项菜单中的所有音量设置都是滑块。它们的工作方式与普通滑块类似。

要增加 1 个步进值，请按键盘右方向键，或在移动端用两根手指向右滑动。

要减少 1 个步进值，请按键盘左方向键，或在移动端用两根手指向左滑动。

要增加 10 个步进值，请按键盘 Page Up，或在移动端用两根手指向上滑动。

要减少 10 个步进值，请按键盘 Page Down，或在移动端用两根手指向下滑动。

当焦点位于滑块上时，要快速跳到最小值，请按键盘 End，或在移动端用三根手指向下滑动。

要跳到最大值，请按键盘 Home，或在移动端用三根手指向上滑动。

### 8.2 开关、复选框和单选按钮

开关是一种拥有两种状态或两个选项的普通项目。它可以是开/关，也可以是两个自定义值。它适用于只有两个值或两个状态的场景，例如启用或关闭。要切换状态，只需像激活普通项目一样激活它。

复选框与开关类似，但它没有自定义状态，只有“已选中”或“未选中”两种状态。同样通过普通项目激活动作来勾选或取消勾选。

单选按钮则包含两个以上的选项。它有点类似滑块，但它不仅适用于数值，也适用于非数值选项。

操作单选按钮时，可在键盘上使用左右方向键切换不同值，或在移动端用两根手指向左或向右滑动。

### 8.3 操作

一个项目可以不止有“激活”这一种操作。它有点像 iOS 中的项目操作：你聚焦到一个项目时，系统会告诉你该项目有额外操作可用。

目前你只会在服务器管理菜单中看到这种设计，但未来也可能用于其他地方。

如果某个项目有多个操作，屏幕阅读器会朗读类似“可用操作，按右方向键查看”的提示。移动端的提示说法不同，但含义类似。要在不同操作之间切换，请在键盘上使用左右方向键，并按 Enter 执行；在移动端，用两根手指左右滑动切换操作，再单指向上滑动激活当前聚焦的操作。

## 9. 主菜单与游戏模式

主菜单是一切内容的起点。你可以在这里开始比赛、配置设置、加入多人游戏、检查更新、查看版本信息，或退出游戏。

快速开始是测试游戏玩法和音频的最快方式。它会用随机选择快速组建一场比赛，因此非常适合短时间游玩，或在你调整输入/音频设置后快速验证效果。

计时赛是熟悉车辆和赛道的最佳模式，因为没有其他车辆给你施加压力。你将独自驾驶，这样更容易专注于刹车点、换挡时机以及稳定圈速。如果你正在学习手动挡，这通常是培养肌肉记忆最安全的地方。

单场比赛会加入电脑对手和比赛压力，同时所有设置仍然在本地完成。如果你想在加入多人联机之前练习超车、比赛节奏和决策能力，这个模式很适合。

多人游戏会打开在线玩法，包括服务器连接、大厅、房间管理、准备阶段和比赛开始。关于多人联机的行为会在本指南后文详细说明，但所有在线会话都从主菜单中的这个项目开始。

选项 会打开所有游戏设置。检查更新 会立即开始一次手动更新检查。关于 会显示版本和构建信息，这些信息在反馈问题时很有帮助。退出游戏 会干净地关闭游戏。

## 10. 驾驶基础

Top Speed 是一款音频赛车游戏。你需要依靠位置、速度、路面声音和领航提示来驾驶。目标并不是始终强行跑到最高速度，而是保持控制、避免重大失误，并完成稳定干净的圈速。

### 10.1 道路位置与车辆控制

你的引擎声就是车道参考。当车辆位于中间时，引擎会听起来居中；如果车身向左或向右偏移，这种平衡感就会改变。越早做出小幅修正，往往越安全；等到最后时刻再做大动作，通常更危险。

如果你驶离赛道，就会损失时间。在有对手的比赛中，与其他车辆发生接触也会影响时间和方向控制。大多数撞车都源于入弯速度过快，或在弯中修正过猛。

对新手来说，一条简单规则就是：转向要平顺，入弯前先控速，出错后不要惊慌乱打。

### 10.2 自动挡、手动挡与引擎行为

自动变速箱是学习赛道最轻松的方式，因为你可以把注意力集中在转向和刹车上。建议先在计时赛里练到能稳定完圈、且不会频繁重撞，再考虑别的。

手动变速箱能提供更多控制力，但也更讲究节奏。你需要让离合和换挡时机与当前速度和入弯节奏匹配。如果你觉得手动挡一团乱，请先放慢节奏，在同一条赛道上反复练习，而不是来回切不同赛道。

引擎启动和熄火共用同一个操作。在正常情况下，它只是启动或关闭引擎；但在熄火、撞车等异常状态后，这个操作也会成为恢复流程的一部分。请尽早熟悉它，这样你在高压情况下也能下意识完成恢复。

### 10.3 弯道、路面与领航提示时机

赛道中会出现不同强度的弯道和不同类型的路面。在柏油路上感觉轻松的弯，在碎石、沙地、雪地或积水路面上可能就会很难。当抓地力更低时，你需要更早减速，并避免激烈转向。

领航设置决定了会播报多少信息，以及这些信息会提前多久播出。如果你觉得提示相对你的驾驶节奏来说偏晚，就增加提前量；如果提示来得太早、显得嘈杂，就把它调低。建议在计时赛中慢慢调，直到提示时机贴合你的刹车节奏。

一个实用的过弯方法是：入弯前先刹车，在转入弯心时逐步松开重刹，然后在出弯时平顺补油。入弯太快，是反复犯错最常见的原因。

### 10.4 实用驾驶方法与恢复

如果你想跑得稳定，就要在每个主要弯道都采用可重复的固定节奏：提前准备速度、摆正车辆、平顺转入，再逐渐补油。这样车身行为会更可预测，也更不容易突然甩出去。

当失误发生时，恢复顺序很重要。第一步先稳住方向；第二步在需要时重启或恢复引擎状态；第三步再逐步把速度提回来。试图一次性把失去的时间全部抢回来，通常只会导致第二次失误。

如果你的长期目标是多人联机表现，请先在计时赛中练到圈速稳定。稳定性通常比偶尔快一圈、但经常撞车更有价值。

### 10.5 在 Android 上如何握持手机

Android 上的驾驶控制是按横屏设计的。请把手机横着拿，长边朝左右，就像你平时玩赛车游戏时那样。不要把这些操作当成竖屏逻辑来理解。

在这种横屏姿势下，车辆控制区位于屏幕右侧。你会在这里控制油门、刹车、引擎启动、换挡，以及在关闭体感转向时用手势来转向。信息区位于屏幕左侧，负责喇叭、离合、比赛信息、玩家信息、暂停，以及退出多人比赛。

控制参考中所有与驾驶相关的手势，都是以这种横屏视角书写的。如果指南里说“向左拖动”或“向右拖动”，那指的是在横握手机时，手指实际朝手机左侧或右侧移动。尤其是转向时更要注意：左转就是向左拖，右转就是向右拖，而不是按照竖屏时的上下方向来理解。

## 11. 完整设置指南

本节说明每一组设置在正常游玩中会影响什么。如果你觉得哪里不对，请每次只改一个选项、测试一下，并记录结果。一次改太多，只会让问题更难定位。

### 11.1 游戏设置

这一组是你最常用的核心行为设置。

语言会改变菜单文本和语音界面文本。如果游戏已经安装好之后你又加入了新的翻译文件，请切换语言并重启一次，让所有菜单重新载入所选语言。

在随机赛道中包含自定义赛道 会让随机开局时把自定义赛道也纳入候选。如果关闭，随机赛道只会从内置赛道中选择。

在随机车辆中包含自定义车辆 对车辆也是同样的逻辑。如果你希望内容稳定可预期，就保持关闭；如果你平时确实会使用自定义车辆，就把它打开。

单位 会在公制和英制之间切换速度和距离播报。

启用使用提示 控制菜单中的延迟帮助文本。如果你觉得提示太早或太晚，请到语音设置中重新校准语音时序。

自动聚焦第一个菜单项 决定菜单打开后焦点落在哪里。启用后，会立即聚焦到第一个项目；关闭后，焦点会停留在标题处，由你手动移动。

启用菜单循环 控制列表边缘行为。开启后，越过最后一个项目会回到第一个项目，反之亦然；关闭后，焦点会停留在边缘。

菜单声音 用来选择菜单移动时使用的音效风格。

启用菜单导航平移 会为菜单移动音效加入左右声像，这对部分玩家更有助于建立方位感。

启动时播放 logo 用于开启或关闭启动时的 logo 播放。

启动时检查更新 用于在游戏启动后自动检查更新。

### 11.2 语音

语音设置决定游戏消息如何被传达。

语音后端 用来选择优先使用哪种语音引擎。自动模式会让游戏自行选择一个合适且可用的引擎。

打断屏幕阅读器语音 允许新的游戏消息中断当前语音输出。请注意：这个功能并不能保证在所有屏幕阅读器和 TTS 引擎上都生效，尤其是在 Android 上。

语音模式 用于选择只用语音、只用盲文，还是语音与盲文一起使用。

语音 只会在当前语音引擎支持语音选择时出现。它允许你在该引擎支持的前提下，指定具体的声音。

语速 只会在当前语音引擎支持语速控制时出现。它决定 TTS 的说话速度。对于 NVDA 或 JAWS 这类屏幕阅读器，这个设置通常不会出现在游戏中。

重新校准屏幕阅读器语速 会再次执行校准，让延迟提示与当前实际语速保持一致。

### 11.3 音频

音频设置会影响空间定位清晰度以及整体听感。

启用 HRTF 音频 可以为很多玩家带来更清晰的 3D 定位效果。除非你的设备或耳机让它听起来更差，否则建议保持开启。如果你遇到音频爆裂或卡顿，尤其是在 Android 上，请尝试关闭它。虽然一般建议开启 HRTF，因为它能显著提升三维空间感，但一些较旧的 Android 设备并没有足够能力处理 HRTF。修改此选项后请重启游戏以生效。

自有车辆立体声扩展：这是一个为左右分辨能力较弱的玩家准备的无障碍选项。对于一部分听众来说，它能让你自己的车辆更容易定位。

自动音频设备格式 会让游戏自动使用设备的原生音频格式。修改后需要重启才能生效。

### 11.4 音量设置

音量设置允许你在比赛中优先听清自己最关心的内容。

主音量 控制所有声音。

车辆引擎声 控制你自己车辆的引擎声和油门层。

车辆事件音 控制你自己的喇叭、回火以及本地事件音效。

其他车辆引擎声 控制对手车辆的引擎层。

其他车辆事件音 控制对手的喇叭、撞击以及类似事件音效。

路面循环声 控制道路和路面循环音效。

收音机音量 控制其他玩家的收音机串流音量。这并不是唯一影响你听到别人收音机音量的设置。如果某位玩家自己把收音机音量调低，那会影响所有人，不只是你。这里的设置只是一个乘数。

环境音与声源 控制环境循环音和赛道声源。

音乐音量 控制音乐层。

在线服务器事件音 控制多人会话事件音效。

本节中的所有滑块，都使用第 8 节前面介绍的同一套滑块手势和按键。

### 11.5 控制

控制设置决定输入设备的行为方式。

选择设备 用于选择键盘、控制器，或两者同时使用。

力反馈 会在设备支持时启用控制器震动/力反馈。

渐进式键盘输入 控制在按住按键时，转向、油门和刹车增加到全值的速度。如果关闭，这个设置不会生效。

说得更明确一点：键盘是二值输入，不像摇杆或手势那样天然具有渐进变化。这个设置会尝试模拟一种“渐进输入”，让你在 0.25 秒到 1.0 秒之间选择一个时间窗口。在这段时间里，油门、刹车和转向等动作会逐步上升，直到时间结束时达到全值。

使用体感传感器转向 是 Android 专属选项。开启后，转向将由体感传感器负责，而不再依赖拖动手势。

请注意以下几点：

部分较老的手机可能不支持这个传感器。这里优先使用的具体传感器叫作 Game Rotation Vector。如果你在使用这个选项时遇到问题，建议先确认你的设备是否支持它。

如果找不到这个传感器，游戏会退回到普通的 Rotation Vector 传感器，但它的精度不如 Game Rotation Vector。再不行，最后才会退回到陀螺仪。陀螺仪并不适合拿来转向，因此如果你的手机不支持前面提到的传感器，强烈建议关闭此选项，以获得更好的体验。

映射键盘按键 会打开驾驶操作的键盘重映射。

映射控制器按键 会打开控制器重映射。

油门踏板方向、刹车踏板方向和离合踏板方向可以设置为 自动、正常 或 反向。如果你的摇杆某些控制轴被错误识别或方向颠倒，这些设置可能会有帮助。

转向死区 控制控制器中心附近的微小移动有多少会被忽略。由于方向盘设备通常不会绝对居中，因此这里提供了这个辅助项。

映射菜单快捷键 会打开菜单操作的快捷键重映射。这个功能只针对键盘。

### 11.6 比赛设置

比赛设置决定你的默认比赛行为。

领航 会决定领航播报多少信息：关闭、仅弯道 或 全部。

弯道播报 用于选择固定距离播报，还是基于速度的动态播报。

基于速度的弯道播报提前量 决定这类播报会提前多久发出。

自动比赛信息 控制驾驶过程中自动播报圈数和比赛评论。

圈数 用来设置各比赛模式的默认圈数。

电脑玩家数量 用来设置单场比赛默认的机器人数量。

单场比赛难度 可选 简单、普通 或 困难。

一个适合新手的起始方案是：领航设为 全部、开启基于速度的播报、开启自动比赛信息，并使用适中的圈数。

### 11.7 服务器设置（客户端侧多人默认值）

默认服务器端口 会在你输入主机地址时、但没有手动填写端口时自动使用。

默认昵称 是多人连接对话框中预填入的名称。

### 11.8 默认值概览

在全新安装下，游戏会使用一套对新手较友好的默认值，例如启用菜单提示、启用菜单循环、启用领航，以及启用启动时更新检查。

如果你把设置改乱了，优先只恢复你最近改过的项目，而不是一次性把所有内容全部重置。

## 12. 多人客户端指南

Top Speed Remake 的多人模式与原版 Top Speed 非常不同。你首先需要找到要连接的服务器，或者自己托管一个。由于我无法亲自维护官方服务器，因此本指南中列出了一些由社区成员维护的常见服务器。

开始前有几点要知道：当你连接服务器时，游戏会先要求你输入昵称。这相当于你在服务器上的名字，其他玩家会通过它识别你。

其次，这款游戏中的多人服务器要求你先创建一个房间，或者加入现有房间。它不像原版游戏那样，连上服务器后就能直接和任何人开跑。

### 连接到服务器

你可以通过三种方式连接。

本地网络发现 会搜索同一局域网中的附近服务器。只有当对方服务器确实在局域网内时，这种方式才有效。

要使用它，请打开游戏，进入 多人游戏，选择“加入本地网络中的游戏”。游戏会搜索本地网络中的可用服务器；如果找到，会让你从中选择一个。

值得一提的是，如果你通过某些外部应用接入一个虚拟局域网，例如 Radmin VPN，这个选项通常也能工作。

另一种方式，是把你经常访问的服务器保存下来。如果你知道一些有人长期维护的外部服务器，建议把它们保存起来。

操作方法是：进入 多人游戏，选择“管理已保存的服务器”。这时会出现一个服务器列表菜单。如果里面还没有内容，就点击“添加新服务器”，填好信息并保存。之后你就能再次进入该菜单，直接访问这些服务器，而不必重新手动输入。

第三种方式，则是手动输入服务器。进入 多人游戏 菜单后，选择相应的手动连接选项即可。

请注意以下事项：

如果服务器主机是一个域名，请不要在前面加上 `http://` 或 `https://`。

游戏支持在输入服务器主机时顺带写上端口，格式如下：`host:port`，其中 `host` 是服务器主机名或 IP 地址，`port` 是端口号。只有在你明确知道该服务器使用了不同端口时，才需要这么写。

客户端和服务器默认使用的端口都是 28630。服务器还会额外使用另一个端口（28631）用于本地网络发现。如果你是在 VPS 上运行服务器，通常无需关心这个发现端口，因为它并不是必须的。

### 大厅与房间

连接成功后，你会进入大厅。在这里你可以浏览房间、创建房间、加入房间，或断开连接。

如果你创建房间，你就是房主，可以控制房间级别的操作；如果你加入房间，你可以控制自己的准备状态和比赛设置，但房主专属操作仍然只属于房主。

以下操作仅对房主可用：

“开始游戏”：通知所有玩家房主即将开始游戏，并打开菜单让大家选择自己的车辆。

“更改游戏选项”：设置比赛选项，例如圈数、比赛所用赛道，以及房间允许的最大玩家数。

“添加/移除机器人”：如果房间类型允许，就可以添加或移除机器人。如果房间类型是“无机器人比赛”或“无机器人的 1v1”，这些选项会被隐藏。

### 聊天、历史记录与延迟

新版本游戏加入了文字聊天功能，包括全局聊天和房间聊天；还加入了第 13 节说明的 Communicator 语音聊天，以及快速查看当前延迟的能力。这些功能各自有自己的控制方式，但它们共享同一套多人历史缓冲区：你收到的每条聊天消息、服务器公告和房间事件，都会保存在一个之后可以回看滚动的历史类别中。

在键盘上，打开全局聊天的默认快捷键是斜杠（`/`）。当你在房间内时，房间聊天使用反斜杠（`\`）打开。查看延迟时，请按 F1。

#### 导航历史缓冲区的两种方式

在桌面端，历史缓冲区（全局聊天、房间聊天、服务器消息、房间事件）可以用两种方式回看。选择当下最顺手的一种即可；两种方式访问的是同一批历史内容。

第一种方式是专用历史屏幕。多人大厅和房间内控制在桌面端各有两个屏幕：第一个屏幕包含常规菜单选项，第二个屏幕是历史缓冲区。按 Tab 切到下一个屏幕，按 Shift+Tab 返回上一个屏幕。在历史屏幕中，每条记录都会像普通菜单项一样出现，因此你可以用常规的上方向键和下方向键浏览消息；在移动端，也可以在顶部区域使用菜单导航手势。激活某条记录会把它复制到剪贴板。

第二种方式是内联历史快捷键。它们可在多人菜单中的任何位置使用；多人比赛期间也可用于比赛内覆盖层。你无需切换屏幕，就能快速回看刚才的消息：

- `,`（逗号）：移动到当前类别中的上一条历史记录。
- `.`（句点）：移动到当前类别中的下一条历史记录。
- `Shift+,`：跳到当前类别中的第一条历史记录。
- `Shift+.`：跳到当前类别中的最后一条历史记录。
- `[`：切换到上一个历史类别，例如从全局聊天切到服务器消息。
- `]`：切换到下一个历史类别。
- `Ctrl+Space`：把当前聚焦的历史记录复制到剪贴板。

当你用 `[` 或 `]` 切换类别时，游戏会播放一个短暂的缓冲区切换提示音，并播报新的类别。移动历史记录时，则会播报消息正文。两种方式共享同一个聚焦位置：如果你先在历史屏幕中滚动，然后离开这个屏幕，`,` 和 `.` 会从你刚才停下的位置继续移动。

#### 移动端布局

在移动端，多人菜单被分成两个区域。底部区域用于普通菜单导航，例如移动、激活和返回。顶部区域则保留给历史缓冲区、聊天快捷操作、Communicator 和延迟查询。桌面端用 Tab 在两类屏幕之间切换；移动端则把两个区域同时放在屏幕上。

下面所有手势都默认你是横握手机，并且只有在手势从顶部区域开始时才会触发：

- 单指向上或向下滑动：切换到上一个或下一个历史类别。
- 单指向左或向右滑动：移动到当前类别中的上一条或下一条历史记录。
- 双指向右滑动：打开全局聊天输入框。
- 双指向左滑动：打开房间聊天输入框（仅当你在房间内时可用）。
- 单指双击：检查当前延迟。
- 双指向下滑动：打开或关闭 Communicator（见第 13 节）。
- 双指向上滑动：打开 Communicator 的频率输入。
- 三指轻点：播报当前 Communicator 频率。
- 双指双击：切换 Communicator 的语音激活模式。

多人比赛中的驾驶控制也使用同一套多人顶部区域布局，因此你在大厅中学会的缓冲区和 Communicator 手势，会在比赛开始后继续生效。

### 常见社区服务器列表

这些服务器完全由社区成员自行维护，我本人对其中任何一台都没有任何控制权。它们的存在是为了让大家可以快速连接、和朋友一起玩，而不必自己搭建服务器。

重要警告：服务器具有日志功能，例如会记录全局聊天中发出的消息或其他数据。对于这些数据如何被记录、如何被处理，我不承担责任，也没有控制权。请你务必知悉这一点。

下面是当前服务器列表。如果你希望把自己的服务器也加入其中，请联系我。

如果服务器使用的是默认端口 28630，则列表中会省略端口。

1. Muhammad Gagah：

地址：tt.mgagah.my.id

2. Adriano：

地址：adriano.mlbfan.org

端口：25255

3. Valiant8086：

地址：valiant8086.redirectme.net

4. Christopher Wright：

地址：christopherw.me

5. Boris Churkin：

地址：iks2101.keenetic.pro

端口：25255

## 13. Communicator（多人语音与串流）

Communicator 是一个内置在多人客户端里的虚拟无线电设备。连接到服务器后，你可以把它打开、调到某个频率，然后用麦克风和其他玩家说话，或者把音频文件串流给其他人听。只要别人在同一台服务器上并调到相同频率，他们就能听到你，不管他们在哪个房间，甚至不在房间里也一样。这也是它在比赛前、比赛中和比赛后都很有用的原因：大厅闲聊、房间协作，以及朋友之间的私密频道，实际上都用的是同一个设备。

后面第 15 节提到的“车载收音机”是另一个独立功能，只会在你自己的车里播放。Communicator 则是给其他玩家听的，用来聊天，或者播放其他玩家也能听见的媒体串流。

### 13.1 Communicator 如何工作

Communicator 只有一个频率，范围是 0.0 MHz 到 1000.0 MHz，并且每次以 0.1 为步进调整。所有新玩家默认都会调到公共的 1.0 MHz。把频率设成 0.0 会被视为“没有频道”，此时 Communicator 会保持静音，直到你切到一个真正有效的频率。

传输内容会由服务器转发给每一位已连接玩家，而每个接收端客户端会根据自己当前的频率决定要不要播放。调到别的频率的听众什么都听不到。它没有按房间隔离的作用域；Communicator 在大厅、房间内以及跨房间时都能工作。

Communicator 有两种互斥的发射模式：

- 按住说话（PTT）是默认模式。你按住某个按键或手势说话；一松手，传输就立刻停止。
- 语音激活（VOX）是一个切换模式。只要它被打开，Communicator 就会持续发送麦克风捕获到的内容。VOX 不会依赖语音检测器自动门控；只要你不把它关掉，它就会一直保持打开。

音频会以 48 kHz 单声道 Opus、20 ms 帧长的形式编码。编码器会在 Communicator 被“武装”时立刻启动，也就是它被打开、频率不是 0，并且客户端处于连接状态。因此，操作系统麦克风会在 Communicator 就绪的瞬间被占用，而在 Communicator 关闭的瞬间被释放。Communicator 也会在以下情况自动关闭：你断开与服务器的连接、你按下 Ctrl+Shift+C 把它关闭（同时也会关闭语音激活），或者你把频率设为 0.0；在这些情况下，麦克风都会被释放，不再继续采集任何内容。

当传输打开时，你会听到一个本地短提示；当它关闭时，你也会听到另一个提示。远端听众则会在你松开 PTT 后听到一个单独的结束提示，以便知道你已经说完。打开或关闭 Communicator 本身时，也会播放属于它自己的短提示。所有 Communicator 提示音以及远端语音播放，共用音频设置里的同一个 Communicator volume 滑块。

### 13.2 打开并使用它

在移动端上，所有 Communicator 手势都位于多人菜单的顶部区域，也就是和聊天历史与延迟查询共用的那一块区域。只要当前界面还是多人菜单，这些手势就能工作，包括大厅和房间内。

1. 先连接到服务器。
2. 在桌面端，按 Ctrl+Shift+C 打开或关闭 Communicator；在移动端，在多人顶部区域双指向下滑动。
3. 默认频率是 1.0。要修改它，桌面端按 Ctrl+Shift+F，移动端在多人顶部区域双指向上滑动，然后输入一个介于 0.0 到 1000.0 之间的值。
4. 要播报当前频率，桌面端按 F；移动端在多人顶部区域三指轻点。
5. 要说话，桌面端按住 V。移动端则是在多人顶部区域先单指轻点一次，然后在大约 0.4 秒内继续在同一区域单指按住；只要第二次按住还在持续，Communicator 就会保持发送；一松手，就会停止。
6. 如果你想切换到语音激活模式，桌面端按 Ctrl+Shift+V，移动端在多人顶部区域双指双击。打开之后，Communicator 会持续发送，直到你再次把它关掉。

按住说话模式会显式忽略按住 Ctrl、Shift 或 Alt 时的 V 键输入，因此用 Ctrl+Shift+V 切换 VOX 时不会误触发 PTT。频率播报（F）和 PTT（V）被故意设计成不同按键：点一下 F 只会播报当前频率，而不会发送任何东西；按住 V 才会开始发送，并且不会先播报频率。移动端 PTT 之所以设计成“先点一下、再按住”，也是为了避免单次误触就直接开始发射。同时，在这个手势激活期间，延迟查询手势会被短暂抑制，以免按住动作被误判成三连击查询。

切换频率不会打断正在进行的传输。如果你在说话时修改频率，Communicator 会在新频率上重新开始这次发射，因此旧频率上的听众会听到它结束，而新频率上的听众则会听到它重新开始。

### 13.3 音量

Communicator 有自己独立的音量滑块，和车载收音机不是同一个。它控制的是 Communicator 的激活提示音，以及其他玩家通过 Communicator 说话时你听到的响度。车载收音机音量不会受到影响。

如果语音流量相较于比赛音频太大，就把它调低；如果远端玩家说话太小声，即使他们已经调了自己的麦克风增益，你还是听不清，那就把它调高。

### 13.4 麦克风设置

有两个音频设置会影响你的麦克风是如何被采集、并发送给其他玩家的：

- Voice input device 用来选择 Communicator 要监听哪一个麦克风。默认是系统默认录音设备。如果在 Communicator 关闭时切换设备，那么它会在下次开启 Communicator 时生效；如果在 Communicator 已开启时切换，则设备会被自动重新武装。
- Microphone input gain 是一个 0–400 百分比的滑块，默认值为 200。100 代表 unity gain（不放大），200 代表 2 倍增益，400 代表 4 倍增益。这个增益会先作用于采集到的采样，然后再被编码。如果远端玩家反馈你太小声，就提高它；如果你的声音出现削波或失真，就降低它。

操作系统本身的麦克风电平仍然会先一步生效，然后游戏内增益才会叠加在其上。要获得更好的效果，最好先把系统麦克风调到正常录音电平，再在游戏内细调增益。

### 13.5 通过 Communicator 串流媒体

Communicator 也可以把本地媒体文件串流到同一条频率里。这适合用来和同频率上的玩家共享音乐，或者在不需要把人拉进同一个房间的情况下，验证 Communicator 的链路是否工作正常。

在 Communicator 开启时：

- Ctrl+O：加载单个音频文件。
- Ctrl+F：加载整个文件夹（从中建立播放列表）。
- Ctrl+P：播放或暂停。
- Ctrl+Page Up：上一曲。
- Ctrl+Page Down：下一曲。
- Ctrl+Up Arrow：媒体音量加。
- Ctrl+Down Arrow：媒体音量减。
- Ctrl+L：切换循环。
- Ctrl+S：切换随机播放。

这些媒体内容会通过你当前的 Communicator 频率发送出去。调到同一频率的人都能听到；调到其他频率的人则听不到。和车载收音机一样，文件夹加载也不是递归的：只会把所选文件夹顶层里的受支持媒体文件加入播放列表。

媒体串流和说话可以并行工作。也就是说，当媒体正在播放时，如果你同时按住 PTT（或通过 VOX 持续发射），你的语音会和媒体一起在同一频率上传出，而远端听众会同时听到两者。

### 13.6 语音聊天故障排查

- 我能听见自己本地的开麦提示音，但别人听不到我：先确认双方都真的打开了 Communicator，双方频率一致（可以都按一下 F 听一遍），并且确实在同一台服务器上。最常见的问题就是频率不一致。
- 别人反馈我太小声：提高 Audio 设置里的 Microphone input gain。如果已经到 200% 甚至更高还太小声，先提高操作系统麦克风电平，再回来重新调游戏内增益。
- 别人听到我声音失真或削波：降低 Microphone input gain。大多数失真都来自上游增益过高，而不是编码器本身。
- VOX 已经打开，但仍然完全不发射：确认 Communicator 自己已经打开（Ctrl+Shift+C）、频率不为 0，并且 Voice input device 选对了。VOX 没有语音检测门控，所以如果设备选错了，那你可能只是打开了一个“静音麦克风”。
- 按 V 时连本地开麦提示都没有：说明 Communicator 还没打开，先用 Ctrl+Shift+C 打开它。

## 14. 专用服务器指南

如果你想要一个稳定的多人会话，而不希望它依赖某个玩家始终开着游戏客户端，那么专用服务器就是最佳选择。服务器是一个独立程序。玩家通过它连接、创建房间、加入房间、聊天和比赛，但服务器本身不需要驾驶车辆，也不需要像玩家一样游玩。

如果你只是和一两个人做简单测试，随手临时开一个也没问题。但如果你打算开放公共房间、组织活动，或者希望服务器长期在线，请使用专用服务器。这样可以把托管与游玩彻底分离，更方便安排重启，也能避免整场会话都依赖房主客户端不能关闭的问题。

服务器支持几乎所有主要平台：Windows、macOS、Linux、Linux ARM、Linux ARM64，以及 Linux MUSL 变体。

所有服务器发行版都可以在 GitHub 页面这里找到。你也可以在那里下载各个平台的游戏版本。

请在一个独立文件夹中运行服务器，并保持其文件完整地放在一起。第一次启动时，它会自动创建所需的设置文件。之后你可以关闭服务器、按需修改设置，再重新启动。最重要的设置包括服务器端口、发现端口、最大连接玩家数、语言以及每日消息。

默认比赛端口为 28630。客户端连接服务器时使用的就是这个端口。默认发现端口为 28631，用于本地网络发现，这样同一局域网中的客户端无需手动输入地址就能找到服务器。发现功能适用于家庭或私有网络，但对于互联网服务器来说，它并不是主要连接方式。

在局域网托管时，请在一台机器上启动服务器，然后在客户端里使用“搜索本地网络中的游戏”。如果什么都没搜到，也不代表服务器没工作；本地发现可能会被路由器设置、Wi-Fi 隔离、VPN 行为或防火墙规则拦住。这时可以尝试用该电脑的局域网 IP 地址加服务器端口手动连接。

对于互联网托管，玩家通常通过“已保存服务器”或“手动输入主机”来连接。服务器端口必须能被外网访问。这通常意味着：在路由器上把比赛端口转发到运行服务器的机器，并在操作系统防火墙中放行同一个端口。如果玩家能看到这台机器、却无法加入，请检查主机地址、转发端口、本地防火墙，以及服务器是否真的监听在你预期的端口上。

服务器支持若干常见设置的命令行覆盖。使用 `--port <number>` 可以临时改用别的比赛端口；`--max-players <number>` 可以修改本次运行允许的最大玩家数；`--motd <text>` 可以设置每日消息。使用 `--help` 可打印所有可用命令行选项。

当服务器运行在可交互控制台中时，它还带有命令接口。输入 `help` 可查看可用命令。当前命令包括 `options`、`players`、`version`、`update` 和 `shutdown`。`players` 适合用来确认当前有哪些玩家已连接；`version` 可用于检查客户端和服务器是否来自兼容构建；`shutdown` 会先通知已连接玩家服务器即将关闭，然后再停止进程。

使用 `options` 命令可以查看和修改部分服务器端设置，例如语言、每日消息、服务器端口、发现端口、最大玩家数、更新选择所用的服务器架构、启动时更新检查，以及下面说明的各项功能开关。有些改动可以立刻体现，但与端口相关的改动最好还是重启后再生效，因为已有客户端和路由规则都建立在旧值之上。

### 服务器功能开关

服务器有一小组功能开关，用来为连接到该服务器的所有人打开或关闭主要功能。它们默认全部开启。每个开关都可以通过服务器控制台中的 `options` 命令切换，也可以直接写进服务器设置文件。

- `text_chat` 启用全局聊天和房间聊天。关闭后，客户端上的聊天快捷键不会产生效果；在开关关闭之后发生的聊天内容也不会进入聊天历史。
- `voice_chat` 启用 Communicator 使用的语音转发。关闭后，Communicator 传输会在服务器侧被静默丢弃；客户端仍然可以打开自己的 Communicator，但音频不会到达其他玩家。通过 Communicator 串流的媒体也受这个开关控制。
- `custom_tracks` 启用整个服务器上的自定义赛道功能。关闭后，房主不能启用游戏规则中的“自定义赛道”，服务器的自定义赛道目录也不会提供给客户端。内置赛道不受影响。第 16 节说明了开启此功能后，自定义赛道如何在客户端和服务器之间传递。

功能开关的变化会应用到更改之后到达的新流量和新操作。已经处于发送、聊天或上传过程中的玩家通常会完成当前动作；之后的新动作才会遵守新的开关状态。

### 从服务器托管自定义赛道

专用服务器可以保存一套自定义赛道库。当房主打开自定义赛道目录时，每个客户端都能看到这些赛道。要使用这个功能，请在服务器可执行文件旁边创建名为 `Tracks` 的文件夹，并为每条赛道放入一个完整的赛道包。也就是说，你平时会放进游戏 `Tracks` 目录的整个文件夹都要放进去，其中要包含赛道的 `.tsm` 文件，以及它引用的所有声音或其他资源，并保持这些资源相对于 `.tsm` 的位置不变。只放一个裸 `.tsm` 通常不够；只要赛道引用了外部资源，服务器就需要按 `.tsm` 的相对路径找到它们，因此这些资源必须和赛道一起提供。

`Tracks` 里的子文件夹会被递归扫描，所以类似 `Tracks/<track-name>/track.tsm` 的布局可以正常工作；如果赛道还需要声音子文件夹，也可以一起放在其中。你也可以按类别继续分组。服务器会在扫描时读取每个包里的 `.tsm`，并把它作为一个自包含下载提供给客户端。

服务器会在启动时扫描 `Tracks`，也会在客户端请求自定义赛道目录时再次扫描。新包会在下一次目录请求时出现；不一定需要重启服务器，但大量更新之后，重启是最干净的刷新方式。包含损坏或不受支持 `.tsm` 内容的包会被跳过，并在服务器控制台中显示警告；如果 `.tsm` 引用了不在它旁边的声音文件，也会被视为这类问题。

除了静态的 `Tracks` 文件夹，服务器还接受房主在房间内使用“上传本地赛道”提交的上传。上传后的包会保存在服务器侧，与静态赛道库一起通过同一个目录提供。第 16 节会详细说明客户端侧流程。

`custom_tracks` 开关必须开启，客户端才能看到这些内容。关闭时，即使 `Tracks` 文件夹里已经放满赛道，目录也会保持不可用。

除非万不得已，否则不要在玩家正在准备或比赛时做有破坏性的变更。如果你需要更新服务器或更改网络设置，请先通知大家，等当前比赛结束后，干净地关闭服务器，应用更改，再重新启动。

在更新或配置调整之后，请先自己做一次测试，再邀请玩家回来。用一个客户端连接服务器，创建房间、加入房间、开始一场短赛、完成或退出，再断开并重新连接一次。这套简单流程足以发现最常见的问题：端口错误、防火墙阻挡、内容文件夹缺失、版本不兼容，或者服务器虽然启动了、但实际上无法正常主持房间。

## 15. 面板与车载收音机

比赛中，Top Speed 不止有一个输入面板。正常驾驶面板就是控制面板，负责转向、油门、刹车、离合、换挡、喇叭、引擎启动以及比赛信息按键。收音机面板则是一个独立面板，用于你在驾驶时播放音乐。

当你切换面板时，游戏会播报新面板的名称。这一点很重要，因为同一个物理按键在不同面板下可能有完全不同的含义。例如，在控制面板中，方向键用于驾驶；而在收音机面板中，收音机会用自己的命令来控制音量和曲目切换。

收音机面板既可以加载单个音频文件，也可以加载整个文件夹。支持的文件扩展名包括 `.wav`、`.ogg`、`.mp3`、`.flac`、`.aac` 和 `.m4a`。当你加载文件夹时，游戏只会扫描该文件夹中直接包含的受支持音频文件，并据此建立播放列表；你无需手动创建播放列表文件。

切换到收音机面板后，要播放内容，第一步是先加载一个文件或一个文件夹。你可以这样做：

若要加载单个文件，请按键盘上的字母 o。这会打开文件选择对话框，让你选择一个文件。

若要加载整个文件夹，请按字母 f。它会打开文件夹选择对话框，读取其中所有受支持的媒体文件，并建立播放列表。

目前移动端尚未为收音机提供手势。

加载完成后，要播放文件，请按字母 p。默认情况下，如果你加载的是单个文件，就播放这个文件；如果你加载的是文件夹，就按字母顺序播放其中第一个文件，除非你启用了随机播放。

还要说明一点：加载文件夹这一行为是会跨会话保存的。如果你有一个固定的音乐文件夹，不想每次都重新载入，这会很有用。

下一次你想播放内容时，只需切换到收音机面板并按字母 p。它会立刻播放已加载文件夹中的第一个文件，就像前面提到的那样。

要调整音量，请使用上下方向键。

要切换曲目，请使用 Page Up 或 Page Down。

要暂停当前正在播放的曲目，请在播放时按字母 p。

要切换随机播放，请按字母 s。

要切换单曲循环，请按字母 l。请注意，对于单个文件，循环默认就是开启的。

收音机音量与某些其他游戏音量类别是分开的。调整它，会改变收音机相对于引擎、菜单、语音和多人音效的响度。如果你正在测试多人收音机行为，请记住：其他玩家也可能有他们自己的收音机相关音量设置，因此在你机器上听起来平衡的效果，对别人来说未必完全一样。

如果某个收音机命令看起来没有任何反应，请先确认你当前确实位于收音机面板。如果面板没错，再确认媒体是否已经加载。如果成功加载了文件夹却仍然没有声音，请检查该文件夹中是否直接包含受支持的音频文件。

还请注意，文件夹加载不是递归的。也就是说，它只会扫描该文件夹顶层中的文件，不会进一步扫描其下的所有子文件夹，即使那些子文件夹中也有受支持的媒体文件。

## 16. 自定义赛道与自定义车辆

Top Speed 支持自定义赛道和自定义车辆，但游戏只会加载它能识别的文件，并且只会从预期的文件夹中读取这些内容。

自定义赛道使用 `.tsm` 文件，必须放在 `Tracks` 文件夹中。自定义车辆使用 `.tsv` 文件，必须放在 `Vehicles` 文件夹中。除非对应的创作指南另有说明，否则不要把它们放到 `Sounds`、`languages` 或其他随意的子文件夹里。

如果某个自定义文件没有出现在选择菜单中，请先检查最基础的几点：扩展名是否正确，文件是否放在了正确位置，然后再确认文件本身是否有效。扩展名正确并不代表文件一定可用，如果内容格式不符合游戏预期，它仍然会加载失败。

随机选择功能也有独立设置。如果关闭了自定义随机内容，那么即使你安装了自定义文件，随机赛道或随机车辆也仍然只会使用内置内容。如果你希望随机选择也能抽到自定义内容，请启用对应的自定义随机选项。

如果你想创建新的赛道或车辆，请使用专门的创作指南。本玩家指南只负责说明自定义内容应放在哪里、如何被选择；而创作指南会解释文件结构、支持的字段以及验证规则。

重要说明：原版游戏中的旧赛道和旧车辆全部都与当前版本不兼容，除非你把它们彻底重写，否则不可能变得兼容。也不存在所谓“兼容模式”来支持这些旧文件，因为我的项目目标是加入新功能和更丰富的细节，而这些内容不可能从旧文件中那些根本不存在的值里自动推导出来。

### 多人模式中的自定义赛道

自定义赛道既可用于单人模式，也可用于多人比赛。但多人模式多了几个环节，因为房主选择的赛道必须在比赛开始前对其他每个客户端都可用。游戏会自动处理传输；本节说明它背后发生了什么，方便你在出错时判断问题。

要让自定义赛道出现在多人房间里，必须同时满足三件事：

1. 服务器已经开启 `custom_tracks`。第 14 节说明了这个服务器侧开关。
2. 房主已经在房间选项的游戏规则中启用“自定义赛道”。
3. 所选赛道要么已经在服务器目录中（由服务器托管，或之前由其他房主上传过），要么是房主本地 `Tracks` 文件夹中可以上传的文件。

当这三项都满足时，房间内房主的赛道选择菜单会多出两个入口：

- “自定义”会打开服务器目录。这里包括服务器管理员放进服务器 `Tracks` 文件夹的赛道，也包括之前其他房主上传的赛道。
- “上传本地赛道” 会打开房主自己 `Tracks` 文件夹中的列表。选中其中一条赛道会把它上传到服务器。上传完成后，该赛道会加入服务器目录，并且以后其他房间也能使用。

只有房主能看到这些菜单；加入房间的玩家可以看到当前选中的赛道，但不能上传或更改赛道。

### 客户端如何接收自定义赛道

当房主第一次选择某条自定义赛道，而某个客户端本地还没有它时，该客户端会从服务器接收完整的赛道包。流程如下：

1. 服务器向房间内所有人公告所选赛道。
2. 每个客户端根据内容哈希检查本地缓存。如果已经缓存过相同内容的赛道，客户端会直接使用缓存副本，不再下载。
3. 如果缓存中没有，客户端会分块接收赛道包，并显示一个简短的下载进度对话框，让玩家知道正在处理。
4. 最后一块到达后，客户端会校验哈希，确认传输没有损坏，然后把包存到游戏应用数据文件夹下的 `track_packages/<hash>.tspkg`。包中包含的自定义声音或资源也会解压到同一缓存中，以便比赛加载。
5. 当客户端已经缓存该包并报告准备就绪后，该客户端就可以开始比赛。已经有缓存的玩家会立即就绪；需要下载的玩家则要等传输完成。

客户端第一次拿到某个包之后，后续每次加入都会直接使用缓存；即使跨游戏会话，同一条自定义赛道也不需要重复下载，除非包内容发生变化并产生新的哈希。

如果传输被中断，例如玩家断开连接、房间关闭或服务器重启，未完成的下载会被丢弃，下次尝试会从头开始。上传包在服务器侧有固定大小上限；超过上限的文件会被拒绝，并在服务器控制台和房主客户端上显示消息。

### 在服务器上为所有人托管自定义赛道

如果你运行的是专用服务器，有两种方式可以把自定义赛道加入它的目录：

- 服务器管理员把 `*.tsm` 文件放进服务器可执行文件旁边的 `Tracks` 文件夹。服务器会递归扫描这个文件夹，因此文件可以位于子文件夹中。新文件会在下一次目录请求时出现；大量更新后，重启服务器是最干净的刷新方式。
- 已连接客户端上的房主在房间内使用“上传本地赛道”。该上传会被发送到服务器，经验证后保存，并加入目录供之后的房间使用。

两条路径都会进入同一个服务器目录，并且都受服务器的 `custom_tracks` 开关控制。服务器侧细节见第 14 节。

## 17. 更新器在桌面端与 Android 上的行为

更新器的设计目的，是让玩家无需每次都手动替换文件，也能保持已安装游戏处于最新状态。你可以从菜单手动检查更新，也可以在启用了相应设置后让游戏在启动时自动检查。

整个更新过程分为三个阶段。第一，游戏检查已发布的版本信息；第二，如果发现有更新，它会先征求你的确认再下载；第三，下载完成后，它会执行平台对应的安装步骤。

在桌面端，更新包是 zip 文件。游戏会先下载 zip，然后启动更新器程序，安全地替换已安装文件。如果更新器程序缺失，游戏就无法继续自动安装，并会报告找不到更新器。

在 Android 上，更新包是 APK 文件。游戏绝不能像处理 zip 更新那样去解压 APK。相反，它会把 APK 交给 Android 的安装器，由 Android 接管后续安装流程并显示自己的安装界面。

Android 可能会要求你为当前使用的应用或安装路径授予“安装未知应用”的权限。如果更新下载完成后没有开始安装，请在系统提示时打开 Android 设置，允许该安装权限，然后回到游戏再试一次。

如果下载失败，当前游戏安装不会受到影响。如果下载成功但安装一再失败，请尽可能删除已下载的更新包，重新执行更新检查，并确认设备存储空间足够，以及 Android 没有阻止该来源的安装。

如果你发现更新器有任何异常行为，请务必提交 bug 反馈。

## 18. 详细驾驶教程

这一章的重点是“如何开好车”，而不仅仅是“哪个键对应哪个操作”。Top Speed 是一款音频赛车游戏，因此所谓驾驶得好，意味着你要学会倾听引擎、路面、弯道提示、位置信息，以及自己车辆的行为。

### 自动挡训练

从 计时赛、自动变速箱、一条赛道和一辆车开始。不要一上来就追求极限速度。你的第一个目标，是干净地跑完整圈，并理解这条赛道“听起来是什么样”。

在第一个弯到来之前，平顺地给油，并聆听引擎。引擎音高会告诉你车辆工作得有多吃力。如果你刹车太晚、入弯太快，或者转向过猛，你会从车辆的运动状态中直接听出后果，接着就可能丢线甚至撞车。

弯道提示的作用，是让你在入弯前就开始准备。如果开启了领航播报，请认真听它提示的方向和时机。一条弯道提示应该让你立刻想到三件事：需不需要减速、何时开始转向、何时重新补油。

在自动挡模式下，游戏会替你处理换挡，所以你可以把注意力集中在转向、油门和刹车上。请一直用这个模式练到你能连续完成多圈而不总是失控为止。当你能稳定重复同一圈速之后，再逐步提速。

### 手动挡训练

手动挡增加了离合和换挡操作。最好是在你已经能用自动挡稳定驾驶同一辆车之后，再开始学它。

驾驶手动挡时，你需要自己让引擎保持在合适的工作区间。随着速度上升，你要升挡；在弯前减速或低速恢复时，你要降挡。如果你不正确使用离合就试图换挡，换挡可能失败，车辆也可能出现很糟糕的行为。

先在一段直线路段上练习。加速、踩离合、升挡、松离合、继续前进。然后再减速并练习降挡。先把这些独立动作练熟，再去尝试把手动换挡和复杂弯道结合起来。

如果你熄火了，或者车速掉得很厉害，不要急着同时乱按所有控制。正确顺序是：先把车头摆到安全方向，再在必要时重启或稳定引擎，接着挂入合适挡位，最后再继续加速。

### 使用按需换挡

按需换挡 允许你在整体仍依赖自动驾驶行为的前提下，临时请求换挡控制。如果你大部分时候更喜欢自动挡，但想在特定时刻获得更多控制，它会很有用。

请有目的地使用它。如果你没有明确理由就随手切换，它只会变成比赛中额外需要管理的一件麻烦事。如果你打算围绕某种驾驶风格或某台车来使用它，请在同一条赛道上反复练到它的表现足够可预测。

### 碰撞或漂移后的恢复

发生撞击、擦碰或严重漂移后，不要立刻死死按住全油门。先听清车辆当前朝向，并稳住方向。如果引擎熄火了，或者挡位不对，下一步先处理这些。只有在你确认车头已经朝向合理方向后，才开始重新加速。

恢复中最常见的错误，就是想立刻把损失的时间全部追回来。这通常只会导致第二次撞车。一次干净利落的恢复，往往比一次激进却失败的恢复更快。

### Android 触控驾驶练习流程

在 Android 上，请分阶段学习屏幕分区。第一阶段只练驾驶区：油门、刹车、引擎启动、换挡，以及你所选择的转向方式。在这些基本驾驶操作还没熟之前，不要急着把所有信息手势也一起加入。

之后，再一次加入一个顶部区域的控制。练习在不失去车辆控制的前提下，查询速度、挡位、圈数信息和玩家信息。如果你准备使用体感转向，请尽早判断它在你的手机上是否足够好用。如果传感器表现不稳定或延迟明显，请关闭体感转向，改用触控转向。

在学习触控操作时，请比你在桌面端时开得更慢。先建立可靠的手部动作，再去追求速度。

## 19. 多人设置示例流程

本章给出一些多人会话的实际示例。目标是让每位玩家都清楚同一套流程：连接服务器、进入大厅、创建或加入房间、准备比赛，然后开始。

### 局域网会话

对于局域网会话，请先在一台电脑上启动专用服务器，并保持服务器窗口开启。客户端则优先使用“本地网络发现”。如果服务器出现在列表中，选中它，输入昵称并连接。

如果发现功能没找到它，就改用手动连接。先查出运行服务器那台电脑的局域网 IP 地址，再在需要时加上服务器端口输入。如果手动连接可行，那说明服务器本身没问题，只是发现广播被网络环境拦住了。

连接成功后，由一名玩家创建房间。其他玩家从房间列表中加入该房间。房主设置赛道、圈数和规则等选项。房主开始准备后，每位玩家都选择自己的车辆和变速箱，并标记为已就绪。当达到所需玩家数量后，比赛就会开始。

### 互联网会话

对于互联网会话，如果条件允许，房主最好使用专用服务器。把比赛端口从路由器转发到服务器所在机器，并在防火墙中放行相同端口。然后把公网主机名或 IP 地址以及端口告诉其他玩家。

如果玩家会频繁使用这个服务器，最好把它保存下来。已保存服务器可以减少输入错误，也能顺带保存默认昵称。如果连接失败，请先检查主机和端口是否正确；再确认服务器是否在线，以及路由器是否把流量转发到了正确的本地机器。

### 私人房间流程

私人房间最好在进入准备阶段之前就先约定好。房主创建房间，设置预定赛道和圈数，确认是否允许机器人，并把规则告知房间内的所有人。

玩家在真正决定好要使用的车辆和变速箱之前，不要急着标记为已就绪。如果有人在准备开始后还想改动，房主应在必要时取消准备，等所有人调整完，再重新开始准备。

### 比赛中的协调

与当前房间或当前比赛相关的消息，请使用房间聊天；发给服务器上所有人的消息，则请使用全局聊天。比赛过程中请尽量简短，因为玩家此时已经需要同时听引擎、领航、位置和碰撞信息了。

如果某位玩家掉线、崩溃，或者必须中途停下，房主应根据房间预期来决定是继续还是重开。对于休闲房间，重开也许没问题；对于有组织的活动，最好在比赛开始前就先把规则讲清楚。

## 20. 设置调校方案

不存在放之四海而皆准的“最佳设置”。新玩家通常需要更多引导和语音信息；熟练玩家可能希望尽量减少打断；控制器用户可能需要更细致地调死区；Android 玩家则需要在触控转向和体感转向之间做出选择。

### 新玩家方案

对新玩家来说，请保持启用使用提示。如果循环导航更适合你，就保留它；如果你更喜欢菜单在首尾停住不回绕，也可以关掉。学习赛道时，请保持启用领航和自动比赛信息。

不要太早削减语音信息。刚开始时你可能会觉得信息量很大，但这些信息能帮助你理解菜单和比赛的结构。等你真正熟悉游戏后，再逐步关闭那些你已经不再需要的内容。

### 竞技键盘方案

对于键盘驾驶，重点在于输入一致性。如果启用了渐进式键盘输入，请把它调到一个你能稳定预测的手感；如果你更喜欢按下就立刻全响应，那就把它关闭。

减少非必要比赛播报之前，请先确认自己知道在关掉什么。保留那些能帮助你避免撞车、判断比赛进度的信息。

### 控制器方案

对于控制器、方向盘或踏板，先从死区开始。如果你明明没碰方向盘，转向却还在漂，就略微增加死区；如果中心附近感觉太迟钝，就小心地把死区调低。

然后检查油门、刹车和离合方向。如果踩下踏板时游戏表现得像是你松开了它，就使用踏板方向选项。每次改动都请在同一段直线和同一个弯上测试，这样你才能准确比较。

### Android 触控方案

在 Android 上，请先固定一种转向方式。如果体感转向在你的手机上表现良好，就持续使用它，并练习如何稳定地把手机保持在一个中性姿态；如果体感转向不稳定，就关闭它，改用手势转向。

先学会驾驶区，再去学习所有信息手势。最安全的学习顺序是：油门和刹车，然后转向，再是挡位和引擎，最后才是喇叭、离合和比赛信息手势。

### 翻译测试方案

做翻译测试时，请启用使用提示，并慢慢遍历菜单。记录确切的英文原文、它出现在什么菜单，以及你正在测试哪种语言。不要只笼统地说“有些地方还是英文”，那样不足以定位缺失翻译。

替换语言文件之后，在判断某句是否仍未翻译前，请先重启一次游戏。这样可以避免把旧菜单缓存文本误判成“缺失翻译”。

## 21. 给测试者和发布准备的补充说明

最有价值的测试，是别人能够按你的描述稳定复现的问题报告。请始终写明平台、游戏版本、你在做什么、你原本预期会发生什么，以及实际上发生了什么。

### 最低测试要求

一次基础测试应覆盖：启动语音、首次菜单导航、打开设置、开始一场计时赛、完成或退出比赛、连接多人服务器、加入和离开房间，以及执行一次手动更新检查。

做比赛测试时，不要只是开始比赛后立刻退出。至少要开到能听见弯道提示、圈数信息、车辆声音，以及至少进行一次信息查询。

### Android 测试

在 Android 上，请测试全屏启动、菜单手势、跳过 logo、文本输入、语音输出、比赛触控区域、启用体感转向时的表现、多人连接，以及 APK 更新权限流程。

如果一个新 APK 看起来却表现得像旧版本，请在提交 bug 之前，先完整卸载并重新安装。残留旧安装往往会让测试结果产生误导。

### 高质量 bug 报告标准

高质量报告应该提供足够信息，让别人也能复现问题。请包括设备或操作系统、游戏版本、输入方式、语言、如果涉及语音则写明语音后端，以及问题是每次都会发生，还是只是偶尔出现。

对于多人问题，还请额外写明你是房主还是普通成员、你是通过发现、已保存服务器还是手动输入连接的，以及这个问题发生在局域网、互联网，还是二者都会发生。

### 测试中的常见错误

常见测试错误包括：Android 上残留旧安装、服务器主机或端口输入错误、使用了启用隔离的路由器、测试了损坏的自定义赛道或车辆，以及在复测前一次改了太多设置。

先把这些常见问题排除。如果问题仍然存在，再按准确步骤写出报告，并保留出问题的环境，以便后续需要更多日志时还能继续调查。

## 22. 故障排除

本节会用通俗方式解释常见问题。当某件事出错时，请一次只改一个因素，再重新测试。如果你同时修改了多项设置，后面就很难判断究竟是哪一项修好了问题，或者是哪一项把问题搞出来的。

### 游戏启动了，但没有语音

如果游戏打开了，但你听不到任何语音，请先检查语音模式。如果语音模式被设成了“仅盲文”，那本来就不会有语音输出。请先切回语音输出，或语音加盲文，再继续测试其他内容。

如果语音模式没问题，就打开语音设置，换一个后端再试。换完后端后，移动到一个简单菜单项上，看看它是否会朗读。如果某个后端能工作、另一个不行，那就先继续使用能工作的那个，并准确报告涉及的是哪两个后端。

在 Android 上，后端切换依赖 Prism 语音层以及系统可用的 Android 语音服务。如果你一切换后端语音就立刻没了，请先重启一次游戏，再用同一个后端测试一次。这样可以帮你判断：到底是这个后端本身不可用，还是只是“热切换”失败了。

### 语言切换后，仍有些句子是英文

如果你在测试时安装或替换了语言文件，那么某些菜单可能在新翻译被加载之前就已经构建好了。请切换到目标语言，退出当前菜单，再重新进入同一位置。如果相同内容仍然是英文，请重启一次游戏后再检查。

如果重启后仍然是英文，那么大概率是语言文件里根本没有这些句子，或者它对应的是另一个游戏版本。此时请记录准确的菜单名称和准确的英文原句，以便更新翻译文件。

### 菜单提示不朗读

使用提示可以被开启或关闭。如果自动提示不朗读，请先打开设置，确认已启用使用提示。

然后在当前项目上手动请求一次提示。桌面端使用提示按键，移动端使用提示手势。如果手动提示能工作，但自动提示太早、太晚，或者打断过于激进，请重新执行一次屏幕阅读器校准。校准会帮助游戏估算语音需要多长时间，从而决定下一个延迟提示何时播出。

### 启动 logo 无法跳过

在 logo 音频播放期间，桌面端请按 Enter，移动端请向上滑动。跳过输入是在 logo 界面处理的，也就是主菜单出现之前。

如果移动端上 logo 无法跳过，但进入菜单后手势又正常工作，请先完整重启应用，再从全新启动流程中重新测试一次。如果所有地方的手势都不工作，那问题就不是 logo 跳过本身，而是触控输入整体出了问题。

### 找不到局域网服务器

局域网发现依赖设备能够在本地网络上接收到广播流量。有些路由器会在 AP isolation、client isolation、访客网络隔离或类似选项开启时阻止这类流量。

如果发现功能什么都找不到，请尝试用服务器那台电脑的局域网 IP 地址加 28630 端口手动连接。如果手动连接成功，说明服务器运行正常，只是发现功能被阻断了；如果手动连接也失败，请检查防火墙规则，并确认服务器程序确实已启动。

### 手动输入主机失败，但已保存服务器能连

手动输入主机时，内容必须完全正确。不要在域名前面加 `http://` 或 `https://`。如果服务器使用自定义端口，请按 `host:port` 的形式填写。

如果已保存服务器能连，但手动输入不行，请把保存的主机和端口与你手动输入的内容逐一对比。端口错了、地址过期了、多了空格，或者误加了协议前缀，都会导致手动连接失败。

### Android 能打开，但画面空白或没有响应

如果一个 Android 构建看起来安装成功了，但行为完全没变化，首先要怀疑是不是旧安装残留。请先在 Android 设置中完整卸载应用，再重新安装 APK。

如果在干净安装后，应用依旧打开成空白界面或无响应，请在启动期间抓取 Android 日志。启动错误通常会表现为：原生库缺失、托管程序集缺失、SDL 初始化失败、语音初始化失败，或者游戏抛出了未处理异常。

### Android 只有某一台设备网络失败

如果其他设备都能连接，只有一台 Android 设备不行，那么问题大概率出在该设备或其网络配置上。尽可能拿同一个 APK 去另一张网络环境上再测一次。

请检查 VPN、私有 DNS、移动安全过滤、受限 Wi-Fi 网络以及路由器隔离设置。如果本地发现失败，但直接连 IP 能成功，那说明发现流量被拦住了；如果无论本地 IP 还是互联网主机都只在这一台手机上失败，那就应把重点放在这台手机的网络设置上。

### 更新下载成功，但安装失败

在桌面端，更新器必须存在于游戏目录旁边，并且必须有权限写入安装目录。如果游戏被放在受保护文件夹中，更新器可能没有足够权限替换文件。

在 Android 上，下载下来的文件必须是 APK，而且 Android 必须允许这个来源执行安装。请在提示时授予“安装未知应用”权限。如果安装仍然失败，请删除已下载的安装包，再重新下载一次，因为前一次下载可能并不完整。

### 自定义内容没有显示

对于赛道，请确认文件扩展名是 `.tsm`，并且文件位于 `Tracks` 中；对于车辆，请确认扩展名是 `.tsv`，并且文件位于 `Vehicles` 中。

如果文件夹和扩展名都正确，那问题可能就在文件内容本身。请用一个已知可用的自定义文件做对照测试。如果那个可用文件能显示、而你的文件不行，那就说明你的文件内容有问题。

### 控制器输入感觉不对

如果控制器、方向盘或踏板手感不对，请先从死区和踏板方向设置开始。方向盘可能不会完美停在中心点，有些踏板的数值方向也可能是反的。

一次只改一个设置，并在同一段短赛道上测试；只有在确实需要时才继续改下一个。不要一次同时调转向、油门、刹车和离合，否则最终效果根本无从判断。

### 体感转向不稳定

体感转向使用的是手机朝向信息。请按你平时真正游玩的方式握住手机，然后只做小幅转向动作，不要一开始就夸张地大角度倾斜。

如果你感觉手机明明是居中握持，车辆却仍在偏移，请重新校准，或者关闭体感转向，改用手势转向。不同手机的传感器素质差异很大。游戏会优先使用 Game Rotation Vector，如果不可用才逐级退回到更差的传感器。

### 专用服务器没有命令提示

服务器命令接口依赖标准输入。如果服务器是以后台服务形式运行、处于受限制宿主环境中，或者输入被分离掉了，那么命令功能可能会被禁用。

在无法使用命令的情况下，请通过设置文件、日志以及可控重启来管理服务器。如果你确实需要实时命令，请把服务器运行在一个普通的交互式控制台中。

### 端口检查清单

默认比赛端口是 28630，默认局域网发现端口是 28631。

在本地测试时，请在防火墙中放行服务器程序；在互联网托管时，请把比赛端口转发到服务器机器，并在防火墙中允许这个端口。只有在你明确知道自己需要它的情况下，才去额外转发发现端口。

### 启动时出现设置解析警告

如果游戏在启动时报告了设置警告，说明某个已保存设置缺失、无效，或者超出了允许范围。通常游戏会把这些无效值替换成安全默认值，以确保自己还能继续运行。

请先阅读警告内容，打开相关设置菜单，再重新设置那个选项。如果很多设置都损坏了，就先把设置文件移到一边，让游戏生成一个新的，然后再逐步重新应用你希望保留的设置。

## 23. 常见问题

### Top Speed 只能用键盘玩吗？

不是。桌面端支持键盘和控制器输入。Android 主要围绕触控手势设计，如果设备支持相关传感器，也可以使用体感转向。Android 设备上依然可以接键盘，但 Android 玩法不应依赖键盘快捷键，键盘在 Android 上只是可选项。

### 不自己搭服务器，也能玩多人吗？

可以。如果存在一个社区服务器，而且你的网络能够访问它，你就可以加入。只有在你想搭建私人会话、做本地测试，或者自己维护一个公共服务器时，才需要自己托管服务器。

### 我可以重映射控制吗？

可以。驾驶控制可以针对键盘和控制器进行重映射。菜单快捷键也可以针对键盘重映射。某些平台级或安全相关操作可能仍然保持固定；而 Android 手势是独立于键盘映射体系之外处理的。

在 Android 上实现“手势重映射”非常困难，所以请不要请求添加这个功能。

### 为什么有些手势只能在屏幕特定区域使用？

比赛过程中，触控控制会按区域划分，因此同一个手势从不同起始区域发起时，会有不同含义。这样做是必要的，因为驾驶需要持续控制，而比赛信息查询则需要快速、独立的手势，不能与油门、刹车、转向、离合或喇叭互相冲突。

### 我可以关闭启动 logo 和自动更新检查吗？

可以。启动 logo 行为和自动更新检查都可以在设置中控制。打开 选项 > 游戏设置，就能在那里进行管理。

### 我切换了语言，但有一个菜单还是没翻译。这正常吗？

在测试语言文件时，这种情况是可能发生的，尤其是该菜单在选择新语言之前就已经被打开过。切换语言后请重启一次。如果重启后同一段文本仍然是英文，就说明语言文件还需要补上或更新这些字符串。

### 随机选择会包含自定义内容吗？

会，但前提是你开启了对应的自定义随机选项。否则，即使自定义文件已经存在，随机选择也仍然只会使用内置内容。

### 赛道和车辆创作规则写在哪里？

请查看专门的赛道和车辆创作指南。你可以在游戏附带的 `docs` 文件夹中找到它们。本指南主要面向游玩、安装、托管和故障排除；创作指南则解释文件格式。

## 24. 控制参考

本参考列出了所有受支持的操作，以及它们在键盘上的快捷键，或移动端上的等效手势（如果有）。

### 24.1 菜单导航

移动到上一个菜单项：
桌面端：上方向键。
移动端：单指向左滑动。

移动到下一个菜单项：
桌面端：下方向键。
移动端：单指向右滑动。

激活当前菜单项：
桌面端：Enter 或小键盘 Enter。
移动端：单指向上滑动。

从当前菜单返回：
桌面端：Escape。
移动端：单指向下滑动。

在多人大厅中，这个手势只在屏幕底部区域生效，因为顶部区域保留给聊天和历史记录功能。

在比赛中，返回操作只有从屏幕左上区域向下滑动时才会生效。

除此之外，除非另有明确说明，否则从任意位置向下滑动都可返回。

跳到菜单中的第一个项目：
桌面端：Home。
移动端：当当前项目不是滑块时，双指向上滑动。

跳到菜单中的最后一个项目：
桌面端：End。
移动端：当当前项目不是滑块时，双指向下滑动。

调整单选按钮，或在项目多个操作之间切换：
桌面端：左方向键或右方向键。
移动端：双指向左滑动或双指向右滑动。

滑块减 1：
桌面端：左方向键。
移动端：双指向左滑动。

滑块加 1：
桌面端：右方向键。
移动端：双指向右滑动。

滑块减 10：
桌面端：Page Down。
移动端：双指向下滑动。

滑块加 10：
桌面端：Page Up。
移动端：双指向上滑动。

滑块直接跳到最小值：
桌面端：End。
移动端：三指向下滑动。

滑块直接跳到最大值：
桌面端：Home。
移动端：三指向上滑动。

按需重复当前使用提示：
桌面端：Space。
移动端：长按。

切换到当前菜单中的下一页：
桌面端：Tab。
移动端：此操作没有全局默认手势。

切换到当前菜单中的上一页：
桌面端：Shift+Tab。
移动端：此操作没有全局默认手势。

### 24.2 主菜单与启动

跳过启动 logo：
桌面端：Enter 或小键盘 Enter。
移动端：单指向上滑动。

从根菜单退出游戏：
桌面端：激活 退出游戏 项，或在没有更深层堆栈时从根菜单按 Escape。
移动端：激活 退出游戏 项，或从根菜单返回退出。

### 24.3 驾驶核心操作

关于移动端，有几点需要说明：

1. 在移动端驾驶时，屏幕会被划分为两个主要区域。指南中使用的名称遵循比赛手势分区，但手机本身应当以横屏方式握持。在这种姿势下，这两个区域实际上对应的是手机的左半边和右半边。

底部区域，在横屏状态下会变成右侧区域，用来控制车辆，例如启动引擎、踩油门、刹车、换挡，或者在你没有使用体感转向时执行转向。指南中把它称为车辆控制区。

顶部区域，在横屏状态下会变成左侧区域，负责信息查询和辅助比赛操作。这个区域又被进一步分成左上和右上两个比赛手势区，下面的参考中会说明它们各自包含哪些动作。

本驾驶章节中所有“拖动方向”都以横屏方向为准。向左拖动，指的是在手机横握时手指实际朝手机左边移动；向右拖动，则是手指朝手机右边移动。

向左转向：
桌面端：默认是左方向键。
移动端：如果关闭了体感转向，就在车辆控制区单指向左拖动；如果启用了体感转向，就从校准后的中性姿态向左倾斜手机。

向右转向：
桌面端：默认是右方向键。
移动端：如果关闭了体感转向，就在车辆控制区单指向右拖动；如果启用了体感转向，就从校准后的中性姿态向右倾斜手机。

油门：
桌面端：默认是上方向键。
移动端：在车辆控制区单指向上拖动。

刹车：
桌面端：默认是下方向键。
移动端：在车辆控制区单指向下拖动。

离合：
桌面端：默认是 Shift。
移动端：在左上信息区按住一根手指。只要手指不离开，离合就会保持接合；抬手后则会松开。

升挡：
桌面端：默认是 A（可重映射）。
移动端：在车辆控制区双指向左滑动。

降挡：
桌面端：默认是 Z。
移动端：在车辆控制区双指向右滑动。

喇叭：
桌面端：默认是 Space（可重映射）。
移动端：在右上信息区按住一根手指。手指按住时喇叭持续鸣响，抬起后停止。

启动或关闭引擎：
桌面端：默认是 Enter。
移动端：在车辆控制区单指双击。

暂停或继续比赛：
桌面端：默认是 P。
移动端：在左上信息区三指连点三次。

切换按需换挡：
桌面端：M（固定默认快捷键）。
移动端：没有专用手势。

### 24.4 驾驶信息查询

朗读当前挡位：
桌面端：默认是 Q。
移动端：在右上信息区三指单击一次。

朗读当前圈数：
桌面端：默认是 W。
移动端：在右上信息区单指双击。

朗读当前比赛进度百分比：
桌面端：默认是 E。
移动端：在左上信息区双指双击。

朗读当前圈进度百分比：
桌面端：默认是 R。
移动端：在左上信息区三指双击。

朗读当前比赛时间：
桌面端：默认是 T。
移动端：在左上信息区双指连点三次。

报告已行驶距离：
桌面端：默认是 C。
移动端：在右上信息区双指双击。

报告速度、RPM 和马力：
桌面端：默认是 S。
移动端：在左上信息区单指双击。

报告赛道名称：
桌面端：默认是 F9。
移动端：没有专用手势。

请求位置与玩家信息组合：
桌面端：默认是 Tab。
移动端：在右上信息区三指双击。

选择上一个玩家信息目标：
桌面端：桌面端默认没有按键。
移动端：在右上信息区双指向右滑动。

选择下一个玩家信息目标：
桌面端：桌面端默认没有按键。
移动端：在右上信息区双指向左滑动。

重复当前所选玩家的信息：
桌面端：桌面端默认没有按键。
移动端：在右上信息区双指连点三次。

请注意，桌面端对玩家信息还提供固定按键：F1 到 F8 用于报告对应玩家所驾驶的车辆，数字行 1 到 8 用于报告对应玩家的比赛位置。

退出比赛：
桌面端：Escape。
移动端：在左上信息区单指向下滑动。

### 24.5 比赛中直接查询玩家编号与位置的按键

朗读 1 号玩家槽位的车辆名称：
桌面端：F1。
移动端：没有直接对应的手势。

朗读 2 号玩家槽位的车辆名称：
桌面端：F2。
移动端：没有直接对应的手势。

朗读 3 号玩家槽位的车辆名称：
桌面端：F3。
移动端：没有直接对应的手势。

朗读 4 号玩家槽位的车辆名称：
桌面端：F4。
移动端：没有直接对应的手势。

朗读 5 号玩家槽位的车辆名称：
桌面端：F5。
移动端：没有直接对应的手势。

朗读 6 号玩家槽位的车辆名称：
桌面端：F6。
移动端：没有直接对应的手势。

朗读 7 号玩家槽位的车辆名称：
桌面端：F7。
移动端：没有直接对应的手势。

朗读 8 号玩家槽位的车辆名称：
桌面端：F8。
移动端：没有直接对应的手势。

朗读 1 号玩家槽位的比赛进度位置：
桌面端：1。
移动端：没有直接对应的手势。

朗读 2 号玩家槽位的比赛进度位置：
桌面端：2。
移动端：没有直接对应的手势。

朗读 3 号玩家槽位的比赛进度位置：
桌面端：3。
移动端：没有直接对应的手势。

朗读 4 号玩家槽位的比赛进度位置：
桌面端：4。
移动端：没有直接对应的手势。

朗读 5 号玩家槽位的比赛进度位置：
桌面端：5。
移动端：没有直接对应的手势。

朗读 6 号玩家槽位的比赛进度位置：
桌面端：6。
移动端：没有直接对应的手势。

朗读 7 号玩家槽位的比赛进度位置：
桌面端：7。
移动端：没有直接对应的手势。

朗读 8 号玩家槽位的比赛进度位置：
桌面端：8。
移动端：没有直接对应的手势。

朗读你自己的玩家编号：
桌面端：F11。
移动端：没有直接对应的手势。

### 24.6 面板与收音机控制

切换到下一个面板：
桌面端：Ctrl+Tab。
移动端：没有专用触控手势。

切换到上一个面板：
桌面端：Ctrl+Shift+Tab。
移动端：没有专用触控手势。

打开收音机媒体文件选择器：
桌面端：在收音机面板激活时按字母 O。
移动端：没有专用触控手势。

打开收音机文件夹选择器：
桌面端：在收音机面板激活时按 F。
移动端：没有专用触控手势。

切换收音机播放状态：
桌面端：在收音机面板激活时按 P。
移动端：没有专用触控手势。

收音机下一曲：
桌面端：在收音机面板激活时按 Page Down。
移动端：没有专用触控手势。

收音机上一曲：
桌面端：在收音机面板激活时按 Page Up。
移动端：没有专用触控手势。

收音机音量加：
桌面端：在收音机面板激活时按上方向键。
移动端：没有专用触控手势。

收音机音量减：
桌面端：在收音机面板激活时按下方向键。
移动端：没有专用触控手势。

切换收音机随机播放：
桌面端：在收音机面板激活时按 S。
移动端：没有专用触控手势。

切换收音机文件循环：
桌面端：在收音机面板激活时按 L。
移动端：没有专用触控手势。

### 24.7 多人菜单触控布局（Android）

在多人菜单中移动到上一个项目：
桌面端：上方向键。
移动端：在多人底部区域单指向左滑动。

在多人菜单中移动到下一个项目：
桌面端：下方向键。
移动端：在多人底部区域单指向右滑动。

退出多人菜单：
桌面端：Escape。
移动端：在多人底部区域单指向下滑动。

打开历史缓冲区屏幕（聊天、服务器消息、房间事件）： 桌面端：按 Tab 前进到下一个屏幕，按 Shift+Tab 返回。历史缓冲区是多人大厅和房间内控制的第二个屏幕。 移动端：历史缓冲区位于多人菜单顶部区域；没有单独需要切换的屏幕。

切换到下一个历史类别： 桌面端：`]`（右方括号）。 移动端：在多人顶部区域单指向上滑动。

切换到上一个历史类别： 桌面端：`[`（左方括号）。 移动端：在多人顶部区域单指向下滑动。

移动到下一条历史记录： 桌面端：在多人菜单任意位置按 `.`（句点），或在历史缓冲区屏幕按下方向键。 移动端：在多人顶部区域单指向右滑动。

移动到上一条历史记录： 桌面端：在多人菜单任意位置按 `,`（逗号），或在历史缓冲区屏幕按上方向键。 移动端：在多人顶部区域单指向左滑动。

跳到当前类别中的最后一条历史记录： 桌面端：Shift+.（Shift + 句点）。 移动端：没有专用手势；请在历史缓冲区屏幕中使用菜单导航跳到末尾。

跳到当前类别中的第一条历史记录： 桌面端：Shift+,（Shift + 逗号）。 移动端：没有专用手势；请在历史缓冲区屏幕中使用菜单导航跳到开头。

把当前聚焦的历史记录复制到剪贴板： 桌面端：Ctrl+Space，或在历史缓冲区屏幕中激活当前聚焦记录（Enter）。 移动端：在历史缓冲区屏幕中激活当前聚焦记录。

检查延迟：
桌面端：F1。
移动端：在多人顶部区域单指双击。

打开全局聊天输入：
桌面端：斜杠（`/`）快捷键。
移动端：在多人顶部区域双指向右滑动。

打开房间聊天输入：
桌面端：在房间中使用反斜杠（`\`）快捷键。
移动端：在多人顶部区域双指向左滑动。

查看当前房间游戏规则： 桌面端：在房间内按 R。 移动端：没有专用手势。

### 24.8 多人比赛覆盖层控制

在多人比赛中打开全局聊天：
桌面端：斜杠（`/`）。
移动端：没有专用比赛手势。

在多人比赛中打开房间聊天：
桌面端：反斜杠（`\`）。
移动端：没有专用比赛手势。

在多人比赛中打开退出确认：
桌面端：Escape。
移动端：在左上信息区单指向下滑动。这就是比赛中的返回手势。

除了上面这些控制外，内联历史记录快捷键（`,`、`.`、`Shift+,`、`Shift+.`、`[`、`]`、`Ctrl+Space`）以及核心 Communicator 快捷键（Ctrl+Shift+C、Ctrl+Shift+F、F、V、Ctrl+Shift+V）在多人比赛中也仍然可用。你可以用它们在不离开驾驶面板的情况下查看聊天历史，或者和其他玩家通话。媒体串流快捷键（Ctrl+O、Ctrl+F、Ctrl+P、Ctrl+L、Ctrl+S、Ctrl+Page Up / Page Down、Ctrl+Up / Down）只在多人菜单中可用，在比赛中不会响应。

### 24.9 Communicator 控制

这些控制在你位于多人大厅或房间内时都可用。核心的 Communicator 控制（开关、设定频率、播报频率、按住说话、语音激活）在多人比赛中也仍然能工作，因此你不需要离开驾驶面板就能和其他玩家通话。末尾列出的媒体串流控制只在多人菜单中响应，比赛过程中不会响应。关于功能本身的详细说明，请看第 13 节。

打开或关闭 Communicator：
桌面端：Ctrl+Shift+C。
移动端：在多人顶部区域双指向下滑动。

打开频率输入（设定频率）：
桌面端：Ctrl+Shift+F。
移动端：在多人顶部区域双指向上滑动。

播报当前频率：
桌面端：F。
移动端：在多人顶部区域三指轻点。

按住说话（按住期间持续发射）：
桌面端：V。PTT 会显式忽略在按住 Ctrl、Shift 或 Alt 时的按键输入。
移动端：在多人顶部区域先单指轻点一次，然后在约 0.4 秒内继续在同一区域单指按住。只要第二次按住还在持续，Communicator 就会保持发送；一旦松开，就会停止。

打开或关闭语音激活（VOX）：
桌面端：Ctrl+Shift+V。
移动端：在多人顶部区域双指双击。

通过 Communicator 串流单个音频文件：
桌面端：在 Communicator 开启时按 Ctrl+O。
移动端：没有专用手势。

通过 Communicator 串流一个文件夹：
桌面端：在 Communicator 开启时按 Ctrl+F。
移动端：没有专用手势。

播放或暂停 Communicator 串流媒体：
桌面端：在 Communicator 开启时按 Ctrl+P。
移动端：没有专用手势。

Communicator 串流上一曲：
桌面端：在 Communicator 开启时按 Ctrl+Page Up。
移动端：没有专用手势。

Communicator 串流下一曲：
桌面端：在 Communicator 开启时按 Ctrl+Page Down。
移动端：没有专用手势。

Communicator 串流媒体音量加：
桌面端：在 Communicator 开启时按 Ctrl+Up Arrow。
移动端：没有专用手势。

Communicator 串流媒体音量减：
桌面端：在 Communicator 开启时按 Ctrl+Down Arrow。
移动端：没有专用手势。

切换 Communicator 串流媒体循环：
桌面端：在 Communicator 开启时按 Ctrl+L。
移动端：没有专用手势。

切换 Communicator 串流媒体随机播放：
桌面端：在 Communicator 开启时按 Ctrl+S。
移动端：没有专用手势。

桌面端所有 Communicator 快捷键都可以在 设置 → 控制 → 映射菜单快捷键 中重新映射。移动端手势不能重新映射。

## 25. 鸣谢与致谢

Top Speed Remake 在继承原始开源 Top Speed 项目的基础上，用现代 C# 代码库重新构建了整个游戏。

项目代码以 GNU GPL v3 协议分发。第三方组件则继续遵循它们各自原有的上游许可证。

本项目使用了部分来自其他开源项目的素材，下面列出相关来源。

部分菜单音效来自开源游戏 Three-D-Velocity，你可以在这里找到它。项目早期的一些代码也借鉴过它，但并不是直接照搬。

所有声音和赛道都直接复制自原始 Top Speed 项目，并且它们的来源是合法的，因为原始项目本身就公开托管在 GitHub 上，点此查看。

这个项目能够存在，离不开长期的社区投入：玩家、翻译者、服务器管理员、测试者，以及那些愿意提供清晰报告和可复现步骤的贡献者。

感谢所有以任何方式帮助这个项目继续前进的人，无论是经济支持、协助修 bug、提交新功能，还是把游戏分享给朋友。我真的非常感谢这个了不起的社区，是你们让这个项目得以持续。

## 26. 联系我

如果你想报告 bug，请直接到 GitHub 提交新的 issue，这样我们才能持续跟踪。

请确认你使用的是游戏最新版本，并在报告问题时务必附上游戏版本、操作系统，以及其他相关细节。不要通过 issue 提建议新功能；请改用 discussions。

游戏还有一个 Telegram 社区群组。你可以加入群组，和大家讨论游戏、问题或新功能。

如果你想私下联系我，可以通过以下任一方式。

WhatsApp

Telegram

或者直接发邮件给我：ramymaherali55@gmail.com

如果你愿意通过捐助来帮助项目继续运转，请使用这个 PayPal 链接。

最后，如果你已经读到了这里，感谢你愿意花时间看完这份很长的文档。

希望这份指南能帮助你顺利进入游戏、理解它的运作方式，并像社区成员们一起努力让它重获新生那样，也真正享受 Top Speed Remake。