JMcKiern/warhawk-reversing

GitHub: JMcKiern/warhawk-reversing

针对《战鹰》游戏文件格式的逆向与转换工具集合。

Stars: 9 | Forks: 0

# WarHawk 逆向工程 一些用于逆向 WarHawk(《战鹰》)所使用的文件格式的脚本。 该项目的最终目标是开发出一套能够将自定义文件格式转换为通用格式(例如 .obj、.dds)的脚本集合。不过,重点主要集中在纹理与模型格式(.rtt 与 .ngp)上。目前,几乎所有的 .rtt 文件都可以被转换为 .dds,而 ngp_models.py 提供了一个粗糙但可用的方法来提取大部分模型。 ## 文件格式 在 psarc 归档中,使用的文件格式如下: - [.rtt](docs/RTT.md) - 本质上是带有自定义头部的 DDS - .vram - 多重纹理 - [.ngp](docs/NGP.md) - 存储部分纹理数据、模型数据以及可能的其他信息(动画、法线贴图、UV 贴图等) - .ptr - 包含各类模型头部与纹理的位置列表 - .dat - content.dat 或 external_paths.dat - .loc - 本地化文件(这些文件似乎是 UTF-16 大端编码) - .fbin - 编译后的片段着色器 - .vbin - 编译后的顶点着色器 - .twk - 配置(微调)文件(例如吉普机枪的重新装填时间) - .tvm3 - 似乎用于定义特定地图的游戏模式 ## 使用方法 ### rtt2dds .rtt 文件可以通过 rtt2dds.py 转换为 .dds 文件。只需传入 .rtt 文件的路径即可: ``` ./rtt2dds.py /path/to/sample_texture.rtt ``` 这将在 .rtt 文件所在目录中创建一个名为 sample_texture.dds 的文件。 .rtt 文件也可以直接拖放到 rtt2dds.py 脚本上。 还提供了一个 `--permissive` 模式,可用于绕过对 .rtt 文件的校验。 ``` ./rtt2dds.py --permissive /path/to/sample_texture1.rtt ``` ### ngp_models .ngp 文件中的模型可以使用 ngp_models.py 提取: ``` ./ngp_models.py sample_ngp.ngp ``` 该脚本会在 .ngp 文件中搜索模型头部信息。每个模型将被导出一个独立的 .obj 文件。如果模型关联了纹理,纹理将被输出为 .dds 文件,并附带一个 .mtl(材质)文件以便加载到模型上。 ## 贡献 欢迎贡献。 请随时提交问题或拉取请求(pr)。
标签:.dat, DDS, dds 转换, .fbin, .loc, mtl 材质, .ngp, NGP, OBJ, permissive 模式, PSARC, .ptr, .rtt, RTT, .tvm3, .twk, .vbin, .vram, WarHawk, 二进制发布, 二进制解析, 开源工具, 文件头解析, 文件逆向, 格式转换, 模型, 模型提取, 游戏开发, 游戏文件格式, 游戏逆向工程, 纹理, 纹理提取, 脚本工具, 逆向工具