#bfs #archive #filesystem #file-format #bugbear

应用 bfstool

用于 BFS (Bugbear 文件系统) 归档的工具

3 个稳定版本

1.1.0 2023 年 3 月 25 日
1.0.1 2022 年 9 月 1 日
1.0.0 2022 年 8 月 30 日

#2324命令行工具

每月 21 次下载

MIT/Apache

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