slaterain/nv-rs · 上手攻略

  • 仓库:slaterain/nv-rs
  • 链接:https://github.com/slaterain/nv-rs
  • 分类:游戏引擎重实现 / Rust / Bevy
  • 作者:Tom
  • 更新:2026-10-09

是什么

nv-rs 是一个从零重写《辐射:新维加斯》(Fallout: New Vegas)的实验性开源项目,使用 Rust 语言和 Bevy 游戏引擎,目标是在不使用原始引擎的情况下 1:1 再现原版游戏行为。它读取玩家自有副本的 Data 文件夹(插件、模型、纹理、音效等),无需转换或修改游戏安装目录。

项目强调行为精确还原:规则、常量、公式全部来自对原版 FalloutNV.exe 的逆向工程(用 Ghidra 分析),而非人工调参。Rust 实现的游戏规则 crate 没有任何外部依赖,Bevy 只负责渲染、音频和输入——这一分离也为后续 VR 支持奠定了基础。

⚠️ 重要声明:nv-rs 是独立项目,与 Bethesda Softworks、ZeniMax Media、Obsidian Entertainment 或 Microsoft 均无关联或背书。项目不包含任何游戏文件,必须使用自己合法获取的游戏副本。


解决什么问题

原始的 FalloutNV.exe 在现代硬件上运行存在大量兼容性问题(尤其在 Windows 10/11 及 Wine/Crossover 环境),且源代码从未公开。nv-rs 的核心价值在于:

  1. 现代平台支持:用 Rust + Bevy 重写的渲染和输入层,绕过了原始引擎的兼容性问题
  2. 代码可维护性:Rust 的内存安全保证让游戏逻辑层的长期维护成为可能(原版 C++ 引擎充满隐式内存问题)
  3. 可验证的正确性:所有游戏行为都通过 Ghidra 逆向 + Oracle 工具录制 → 对比测试,确保 Rust 实现与原版完全一致
  4. VR 扩展潜力:模拟层与表现层分离,为后续接入 VR 头显提供了架构基础

快速安装

方式一:下载可玩包(推荐,2026-10 当前最新)

  1. 前往 Releases 下载 windows-x64.zip
  2. 解压到任意目录(路径中不要包含中文或特殊字符)
  3. 双击运行 Play.cmd
  4. 程序会提示输入 Fallout New Vegas 安装路径下的 Data 文件夹路径
  5. 选择场景:Doc Mitchell's house(开篇房间)或 Goodsprings(第一章地图)
  6. 游玩

⚠️ 核心测试包不需要游戏文件;运行完整游戏场景(Doc Mitchell's house 及之后)必须提供合法游戏 Data 文件夹。

方式二:源码编译

前提条件:稳定版 Rust(建议 rustup install stable)。

# 克隆
git clone https://github.com/slaterain/nv-rs.git
cd nv-rs

# 编译核心 workspace(无外部依赖)
cargo build --release
cargo test --workspace

# 编译 Bevy 可视化应用(独立 workspace,Bevy 0.16)
cd viewer
cargo run --release -- "D:\Games\Fallout New Vegas\Data" GSDocMitchellHouse

⚠️ viewer 子项目依赖 Bevy 0.16(2025 年早期版本),首次编译需要下载大量图形资源,耗时可能较长。

运行验收测试(Windows PowerShell,需要游戏 Data 文件)

powershell -File scripts/acceptance.ps1 -Data "D:\Games\Fallout New Vegas\Data" -Build

验收测试会自动重放三条游戏路线(Doc Mitchell 房间路线 + Goodsprings 两条任务路线),每次代码变更都会触发 CI 级别的回归检查。


核心用法

项目结构一览

目录/文件 作用
crates/ 核心:esm/bsa/nif/dds 格式解析器 + world/physics/script/ui 等游戏规则
viewer/ Bevy 应用:渲染、音频、输入(独立 workspace,Bevy 0.16)
research/ghidra/ Ghidra 脚本:函数导出、符号导入
research/nv-oracle/ Oracle 工具:录制原版程序实际行为供对比验证
docs/ 里程碑、方法论、各项技术文档
scripts/acceptance.ps1 自动化验收路线回放脚本

nvinspect 工具

命令行格式数据检查工具,无需运行完整游戏即可查看游戏 Data 文件内容:

# 编译
cargo build --release

# 检查某个 .esp 插件的记录
cargo run --release -p nvinspect -- "D:\Games\Fallout New Vegas\Data" record <plugin_name>

# 查看 cell 列表
cargo run --release -p nvinspect -- "D:\Games\Fallout New Vegas\Data" cells

# 查看碰撞覆盖范围
cargo run --release -p nvinspect -- "D:\Games\Fallout New Vegas\Data" collision <cell_id>

开发者工作流

# 1. 认领任务:在 docs/TASKS.md 中找标注 [task] 的 GitHub Issue,评论 "Claiming this"
# 2. 从 main 创建 topic branch
git checkout -b topic/m2-npc-dialogue
# 3. 开发并测试(核心 crate 测试无需游戏文件)
cargo test --workspace
# 4. 运行验收路线
powershell -File scripts/acceptance.ps1 -Data "D:\Games\Fallout New Vegas\Data" -Build
# 5. 提交 PR → main → 维护者审核合并

控制说明(游玩时)

按键 功能
WASD 移动
鼠标右键(按住) 视角旋转
E 交互
Tab Pip-Boy 菜单
F5 / F9 存档 / 读档
F12 提交 Bug 报告
Esc 退出

典型适用场景

  1. 怀旧 + 现代化体验:在现代操作系统上运行 NV,无需折腾兼容性层或老旧驱动
  2. 游戏研究 / 逆向工程学习:完整展示了如何用 Ghidra + Oracle 工具对商业游戏进行行为级逆向并用 Rust 重实现
  3. 贡献开源游戏重实现:项目欢迎 AI agent 辅助贡献(参见 CONTRIBUTING.md + AGENTS.md),有明确的任务认领和验收流程
  4. ECS 架构参考:Bevy ECS 模式在复杂 RPG 游戏逻辑中的应用实战
  5. Rust 游戏开发教学:从零实现一个 AAA 级 RPG 的核心子系统(战斗、AI、对话、存档)

坑与注意

坑点 说明 应对
不支持原生 NVSE 插件 DLL 社区扩展脚本引擎不被模拟 使用官方 DLC 的 .esp 插件
不支持原始存档加载 存档格式尚未完全逆向 每次从 Doc Mitchell 房间重新开始
面部编辑器未实现 角色创建部分功能缺失 当前版本跳过面部编辑
macOS 移植中 Windows 是唯一经过完整测试的平台 macOS 用户可关注社区 fork
游戏 Data 路径不能含中文/空格 PowerShell 脚本路径解析问题 安装路径选纯英文路径
DLC 消息框干扰开篇 启用官方 DLC 时 Intro 动画后可能弹框 直接点击继续,不影响测试
无侧对比验证 项目坦承尚未做完整路线与原版的逐帧对比 不要当作"完整体验"使用
VR 目标未验证 架构上支持但无实际硬件测试 M6 里程碑尚无时间表

与同类对比

项目 语言 成熟度 目标 特点
nv-rs Rust + Bevy 实验性(< M2) 1:1 再现 NV 精确逆向验证、ECS 架构
openmw C++(OpenMW 引擎) 成熟可玩 1:1 再现上古卷轴3 完整游戏可玩、社区活跃
xoreos C++ 早期 重实现多款 BioWare 游戏 跨游戏通用引擎
fallout纯渲染MOD(如TTW) C++ / 脚本 成熟 视觉效果更新 非重实现,是原引擎上的 MOD

nv-rs 与 OpenMW 的最大区别是方法论:OpenMW 是对原版存档格式和游戏逻辑的重新设计,而 nv-rs 追求对原版程序行为的逐字节级验证,通过 Ghidra 逆向 + Oracle 工具链确保每条规则都与原版一致。


一句话推荐结论

nv-rs 是目前最严谨的 Fallout: New Vegas 行为级重实现项目——如果你对 Rust 游戏开发、逆向工程、或 ECS 架构在 RPG 中的实战感兴趣,它是一个不可多得的从零到一的完整案例。

⚠️ 当前为实验性快照(2026-10),不支持完整通关。仅建议对项目技术方向有了解兴趣的开发者试用或参与贡献。