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