# Kinoko：为精确回放幽灵记录而重新实现 Mario Kart Wii 物理引擎

> 以 C++ 将 Mario Kart Wii 的物理引擎重新实现为命令行模拟器，延续 stblr/Hanachan 的目标：完全准确地回放计时赛幽灵记录。每个测试用例让引擎重放一条幽灵记录，并逐帧将赛车的位置、旋转、速度向量、速率和检查点状态与从原版游戏采集的轨迹比较。它只在行为层面重新实现物理部分，并非一致性反编译，也没有图形前端。

- 类型：案例
- 目标：游戏
- 类别：独立重建案例
- 关联：独立重建项目
- 来源复核于：2026-10-19
- 收录于：2026-10-27
- 原始资源：<https://github.com/vabold/Kinoko>
- 一手来源：<https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/kinoko-mkwii-physics-reimplementation-case/>
- 记录 JSON：<https://awesomerea.org/resources/kinoko-mkwii-physics-reimplementation-case/record.json>
- 英文版：[English](https://awesomerea.org/resources/kinoko-mkwii-physics-reimplementation-case/index.md)

## 使用条件与局限

- README 介绍项目是 Mario Kart Wii 物理引擎的 C++ 重新实现，目标是完全准确地回放幽灵记录。所审提交中，STATUS.md 列出 55 个计时赛幽灵测试用例，全部标为逐帧同步；最新 GitHub 发布版 0.6（2025-09-04）附有模拟器的 x86-64 Linux、macOS 和 Windows 二进制文件。源码注释标明了原版游戏中的地址，但项目不会重新构建游戏可执行文件；README 将这一方向指向独立的 riidefi/mkw 一致性反编译项目。
- 运行时需要使用者自备 Mario Kart Wii 光盘中的 Race 文件夹（Common 与赛道归档），并按相对可执行文件的路径放置；仓库不附带任何游戏文件，README 也要求贡献的前端不得分发游戏内素材。仓库中的样例是计时赛幽灵文件（.rkg）及逐帧 .krkg 参照轨迹；README 称后者由运行 PAL 版游戏的定制 vabold/mkw-sp 构建生成。这类轨迹是从游戏中采集的验证数据，在重建项目中很常见。
- README 列出 g++ 13.1（C++23）、ninja 1.3 和 Python 3.6；configure.py 生成 ninja 构建，并把 testCases.json 编译为二进制测试套件文件。CMakeLists.txt 还提供 libkinoko 库目标，可将引擎嵌入其他 C++23 项目。CI 在 Ubuntu 上使用 GCC 14 构建；程序是带测试与回放模式的命令行宿主，README 表示暂无 GUI 计划。
- kinoko test 以精确相等的方式，将位置、旋转、内部与外部速度、速率、加速度、软速度上限、比赛完成度和检查点数值与每一帧 .krkg 数据比较，并报告第一个失去同步的帧；kinoko replay 检查幽灵记录完赛时间是否与 .rkg 文件头中的时间一致。CI 使用从机密配置 URL 获取的运行文件执行测试套件，并检查 STATUS.md 是否为最新。这些都是项目报告的结果。
- LICENSE 对项目采用 MIT（版权归 vabold，2022–2026）；Mario Kart Wii 及其游戏数据仍归 Nintendo 所有，随附的 doxygen-awesome-css 主题另有许可证文件。

## 一手来源

1. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/README.md>
2. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/STATUS.md>
3. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/docs/KRKG.md>
4. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/docs/TestCase.md>
5. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/source/host/KTestSystem.cc>
6. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/source/game/system/ResourceManager.cc>
7. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/configure.py>
8. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/CMakeLists.txt>
9. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/.github/workflows/build.yml>
10. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/tools/status_check.py>
11. <https://github.com/vabold/Kinoko/blob/550c97a299c4de4a9f7cb90bc79cf8c7c768557c/LICENSE>
12. <https://github.com/vabold/Kinoko/releases/tag/0.6>

## 同分区更多条目：游戏

- [LBA2 Remake：以 TypeScript 和 Three.js 重新实现 Little Big Adventure 1 与 2](https://awesomerea.org/zh/resources/lba2remake-little-big-adventure-case/index.md) · 案例
- [Legend of Legaia：Rust 移植与本地读盘的浏览器工具](https://awesomerea.org/zh/resources/legend-of-legaia-rust-port-case/index.md) · 案例
- [libd2：《暗黑破坏神II》1.14d 引擎组件库](https://awesomerea.org/zh/resources/libd2-engine-core-reconstruction-case/index.md) · 案例
- [librw：RenderWare Graphics 引擎的重新实现](https://awesomerea.org/zh/resources/librw-renderware-reimplementation-case/index.md) · 案例
- [MechRewired：基于原版数据重建 MechWarrior 2](https://awesomerea.org/zh/resources/mechrewired-mechwarrior-2-case/index.md) · 案例
- [Nanolathe：附研究文档的 Total Annihilation 引擎重实现](https://awesomerea.org/zh/resources/nanolathe-case/index.md) · 案例

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
