9个版本
| 0.3.0 | 2024年6月28日 |
|---|---|
| 0.2.3 | 2024年5月23日 |
| 0.2.2 | 2024年3月23日 |
| 0.2.1 | 2024年1月31日 |
| 0.1.0 | 2022年9月13日 |
#337 在 解析器实现
570 每月下载量
650KB
10K SLoC
Physis
Physis是一个用于读取和写入FFXIV数据的库。
尽管这个库是为Rust语言编写的,但Physis为其他语言提供了绑定
- PhysisSharp 可以在任何C#应用程序中使用,并且基于libphysis构建。
- libphysis 可以用于任何可以与C FFI接口的事物。例如,Novus和Astra都是基于libphysis构建的。
目标
Physis应该
- ... 让开发者更容易地与游戏数据互动。
- ... 在过程中记录文件格式,以便更容易编写未来的应用程序库。
- ... 使解析数据安全,并在可能的情况下创建自动化测试。
- ... 旨在具有最小的依赖性,并且无论平台如何都易于使用。
特性
以下是支持的格式及其状态列表
| 文件格式 | 读取 | 写入 | 注意 |
|---|---|---|---|
| 配置文件 | ✅ | ✅ | |
| 保存的角色数据 | ✅ | ❌ | 目前仅支持一些版本。 |
| 角色制作参数 | ✅ | ❌ | |
| 字典 | ✅ | ❌ | |
| Excel数据 | ✅ | ❌ | |
| 文件信息 | ✅ | ✅ | |
| 地图层 | ✅ | ❌ | 层支持尚未经过充分测试。 |
| 聊天记录 | ✅ | ❌ | 尚未发现所有聊天类别。 |
| 模型 | ✅ | ✅ | 尚未完全支持添加自定义形状键。 |
| 材质 | ✅ | ❌ | |
| 修补文件 | ✅ | ❌ | |
| 前骨骼变形器 | ✅ | ❌ | |
| 着色器包 | ✅ | ❌ | |
| 骨骼 | ✅ | ❌ | |
| 地形 | ✅ | ❌ | |
| 纹理 | ✅ | ❌ | 仅支持某些格式。 |
Physis还支持进行一些除了读取和写入文件格式之外的有用操作
- 从SqPack文件中提取游戏数据,并从index/index2中列出文件哈希。
- 应用游戏补丁。虽然尚未支持索引ZiPatch。
- Blockfish加密解密SqexArg。
- 提取零售安装程序的文件内容,在Linux上很有用,可以避免运行InstallShield安装程序。
- 构建到装备、物品、面部和其他有用模型的路径。
- 从可执行文件中提取字符串。
支持的游戏版本
| 版本 | 工作 | 注意 |
|---|---|---|
| A Realm Reborn (2.x) | ??? | 尚未测试。 |
| 天际之刃(3.x) | ??? | 尚未测试。 |
| 狂乱之血(4.x) | ??? | 尚未测试。 |
| 暗影之逆(5.x) | ~ | 有一段时间没有测试了,但应该没问题.. |
| 终章(6.x) | ✅ | |
| 曙光之径(7.x) | ~ | 基准测试仅提供有限支持,等待零售版发布。 |
请注意,目前仅支持游戏的Windows版本。
用法
如果您想在Rust项目中使用Physis,您只需将其作为Cargo.toml中的依赖项添加即可。
[dependencies]
physis = "0.2"
文档可在docs.xiv.zone在线获取。它会在主分支推送新提交时自动更新。
C#项目可以使用PhysisSharp,它将Physis暴露在C#中。
C/C++项目(或任何可以与C库交互的项目)可以使用libphysis。
构建
Physis只有几个依赖项,默认情况下几乎不需要开启。您需要设置Rust,然后运行cargo build。
如果您想构建game_install功能,还需要安装unshield。
开发
如果您想更详细地了解这些格式的工作原理,请参阅xiv.dev和docs.xiv.zone。
测试
Physis的主要目标之一是避免意外回归,这在处理可能需要数小时下载的游戏数据时尤为重要。
单元测试
您可以运行一组基本的单元测试,方法是通过cargo test。您还可以在resources/tests中找到相关的测试资源。这些测试不包含受版权保护的材料,而是由physis自己创建的虚构游戏数据。这些测试由CI自动运行。
零售测试
某些测试和基准测试需要设置环境变量FFXIV_GAME_DIR。默认情况下,这些测试是禁用的,因为它们需要一个合法的游戏数据副本。可以通过retail_game_testing功能来启用这些测试。
补丁测试
修补是一个极其敏感的操作,因为一旦出错就很难逆转。修复游戏文件是可行的选项,但在physis中尚未实现。为了防止在修补游戏时出现回归,我已设置了一个测试床,以交叉检查我们的实现与其他实现。目前,这仅限于XIVLauncher的实现,但我最终会采用一种方法来测试零售补丁安装程序。
- 启用
patch_testing功能。 - 设置一些环境变量
FFXIV_PATCH_DIR是安装补丁的目录。它应结构化为$FFXIV_PATCH_DIR/game/D2017.07.11.0000.0001.patch。FFXIV_XIV_LAUNCHER_PATCHER应该是XIVLauncher修补程序的路径。如果您在Linux上运行,我们将为您处理Wine的运行。FFXIV_INSTALLER是安装程序的路径。这将使用physis已包含的常规InstallShield模拟安装。
如您所见,您必须在运行测试之前先下载以前的补丁以及安装程序。这是留给开发者去考虑如何合法下载它们的问题。
注意: 这些测试将在 game_test 和 game_test_xivlauncher 文件夹中创建,位置在 $HOME,并且在退出时不会删除它们,以防您想要检查结果。您可能想删除这些文件夹,因为它们是完整的游戏安装,并且占用相当大的空间。
语义版本和依赖性检查
尽管Rust的包管理更加简单,但这也是一把双刃剑。我试图避免过度包含crates - 但我们确实包含的,需要经常检查。我使用 cargo deny 来检查依赖项的版本不匹配、弃用警告、更新等。这也将在CI上运行!
确保库符合语义版本也很重要,我使用 cargo semver 来执行这项任务。这是为了确保在移动到补丁版本时API不会中断。
贡献 & 支持
您能提供的最好帮助是通过 资助我 或通过提交补丁来帮助修复错误或添加功能。提交问题很受欢迎,但我是在业余时间做的,所以请不要期望专业支持。
致谢 & 感谢
- goatcorp(XIVQuickLauncher,docs.xiv.dev,还有更多)
- Ioncannon(FFXIV 数据浏览器)为首次记录文件格式
- binrw 团队 提供了一个出色的Rust库!
- sha1-smol 提供了一个无依赖的SHA1实现
以及所有其他编写FFXIV工具的人!
许可

本项目采用GNU通用公共许可证第3版授权。代码或资产的部分可能采用不同的许可证,请参阅REUSE元数据。
依赖项
~5.5MB
~79K SLoC