3 个稳定版本
1.1.0 | 2023 年 3 月 25 日 |
---|---|
1.0.1 | 2022 年 9 月 1 日 |
1.0.0 | 2022 年 8 月 30 日 |
#2324 在 命令行工具 中
每月 21 次下载
180KB
3.5K SLoC
bfstool
bfstool 是一个用于 BFS (Bugbear 文件系统) 归档创建、提取等工具。BFS 归档存在于大多数由 BugBear 开发的游戏中。
有关已知官方 BFS 归档的完整列表,请参阅 bfs_file_dat.md。
非官方归档的支持基于最佳努力原则,并不保证其工作。
文件格式兼容性列表
游戏 | 提取 | 归档 | 备注 |
---|---|---|---|
Rally Trophy | ❌ | ❌ | |
Tough Trucks | ❌ | ❌ | |
Bugbear Retro Demo 2002 | ❌ | ❌ | |
FlatOut | ✔ | ? | 使用 bfstool 创建的文件运行未进行充分测试 |
Glimmerati | N/A | N/A | 文件打包在标准的 ZIP 文件中 |
FlatOut 2 | ✔ | ? | 使用 bfstool 创建的文件运行未进行充分测试 |
FlatOut: Ultimate Carnage | ✔ | ? | 使用 bfstool 创建的文件运行未进行充分测试 |
FlatOut: Head On | ✔ | ? | 使用 bfstool 创建的文件运行未进行充分测试 |
Sega Rally Revo | ✔ | ? | 使用 bfstool 创建的文件运行未进行充分测试 |
Ridge Racer Unbounded | ✔ | ❌ | BFS 文件被加密。不支持加密。尚未提供从游戏中提取加密密钥的指南 |
Ridge Racer Driftopia | ❌ | ❌ | BFS 文件被加密。不支持加密/解密 |
Next Car Game Free Technology Demo | ❌ | ❌ | BFS 文件被加密。不支持加密/解密 |
Next Car Game Technology Sneak Peek 2.0 | ❌ | ❌ | BFS 文件被加密。不支持加密/解密 |
Wreckfest | ❌ | ❌ | BFS 文件被加密。不支持加密/解密 |
示例
列出 FlatOut europe.bfs 中的文件
$ bfstool list --format v1 europe.bfs
Listing archive: europe.bfs
Physical size: 4531
Headers size: 4058
File count: 1
| Method | Size | Compressed | Copies | Offset | File Name |
|--------|------|------------|--------|----------|---------------------------|
| zlib | 1103 | 471 | 0+0 | 00000fdc | data/language/version.ini |
从 FlatOut 2 fo2b.bfs 提取所有文件到目录 fo2b
$ bfstool extract fo2b.bfs fo2b --format v2
Extracted 14 files.
从 FlatOut common1.bfs 提取所有 tga 文件到目录 common1
$ bfstool extract -f v1 common1.bfs common1 "**/*.tga" -v
"data/menu/bg/longjump.tga" 1228844 bytes
"data/menu/bg-mainmenu.tga" 1281282 -> 2359340 bytes
"data/menu/bg/bowling.tga" 1228844 bytes
...
"data/menu/bg/class_a_finish.tga" 1228844 bytes
Extracted 111 files.
识别未知文件(仅适用于 bfs_file_dat.md 中列出的文件)
$ bfstool identify unknown.bfs
Identifying archive: unknown.bfs
File name: FLATOUT.BFS
Game: FlatOut
Platform: PlayStation 2
Format: v1
Filter: fo1
Copy filter: fo1-ps2-usa
Source:
- Redump (USA)
- Non-Redump (Beta) (2005.03.23)
CRC32: CBB29ACA
MD5: 8b7c307a1ad5483b0bee958687d6d94e
SHA1: c02f2111a97d9b24f6be2db433d25eee97bb890a
$ bfstool id ZMenuFO2BFS.bfs
Identifying archive: ZMenuFO2BFS.bfs
File not found in the BFS file database.
Perhaps it's a modded file or not yet supported by bfstool.
快速识别 - 文件名需要是它的 CRC32,并将用于识别
$ bfstool id --fast-identify E2FA4AFC.bfs
Identifying archive: E2FA4AFC.bfs
File name: common1.bfs
Game: FlatOut
Platform: PC
Format: v1
Copy filter: fo1-pc
Filter: fo1
Source:
- All full PC releases
CRC32: E2FA4AFC
MD5: 95a606038261bfd36c6e48874e644c44
SHA1: 51b6671ab55665521a29b010b86d53fb8d324967
$ bfstool id --fast-identify common1.bfs
Identifying archive: common1.bfs
File not found in the BFS file database.
Perhaps it's a modded file or not yet supported by bfstool.
Try removing --fast-identify and running again.
如果文件在 bfs_file_dat.md 中,则不需要为读取它的子命令(如列表或提取)指定格式
$ bfstool list europe.bfs
Identifying archive: europe.bfs
Listing archive: europe.bfs
Physical size: 4531
Headers size: 4058
File count: 1
| Method | Size | Compressed | Copies | Offset | File Name |
|--------|------|------------|--------|----------|---------------------------|
| zlib | 1103 | 471 | 0+0 | 00000fdc | data/language/version.ini |
过滤
模式匹配 glob 语法描述 此处
要使用过滤器,将其作为 --filter-file <FILTER_FILE>
传递给 archive
子命令。有几个预配置的过滤器可以与 --filter <FILTER>
一起使用。
示例
# Compress all files
+ **
# Do not compress any files in data/menu/bg/
- data/menu/bg/*
# Compress data/menu/bg/town2.tga and data/menu/bg/town3.tga
+ data/menu/bg/town2.tga
+ data/menu/bg/town3.tga
这将导致
data/cars/car_1/skin1.dds
被压缩,因为它与+ **
匹配data/menu/bg/town1.tga
未被压缩,因为它与- data/menu/bg/*
data/menu/bg/town2.tga
被压缩,因为它与+ data/menu/bg/town2.tga
依赖关系
约 12-22MB
约 298K SLoC