Do you want to host an ArmA 3 server, but there is simply no space available on the server for all your favourite addons? Despair not!
pbo_minify v1.0 is here for you!
This application will take any number of PBOs and simply make them smaller, without impairing any functionality when loaded on a server. It has been tested on a multitude of PBOs of varying kinds: compressed, obfuscated, and the like, and all of them were successfully processed and loaded on the server.
Example results
CUP Terrains - Core: 10.9 GB → 1.72 GB (decreased by 84 %)
CUP Terrains - CWA: 3.21 GB → 272 MB (decreased by 92 %)
CUP Terrains - Maps: 3.18 GB → 627 MB (decreased by 81 %)
RHSAFRF: 7 GB → 1.95 GB (decreased by 72 %)
RHSUSAF: 7.4 GB → 2.45 GB (decreased by 67 %)
How to use
Simply launch the application and follow through the instructions. You will need an input directory from which to take the PBOs, and an output directory where they will be copied and minified. The directory structure will be kept the same, so it is safe to overwrite the input with the output once the process is done.
The program is a console application, able to run on every platform (requires .NET 4.5 on Windows and Mono on Linux). By default it uses the standard input to read the paths, but you can also run it with command-line arguments (e.g. execute pbo_minify input output) and it will work as well. Instead of text input, you can also press Ctrl-A and Enter to use a standard system dialog.
How does it work?
The process is rather simple: the vast majority of files in large PBOs are textures and sounds, which are usually not used in any way when loaded by the server. Removing them completely would likely break the addon that relies on them, but replacing them with a small but valid placeholder file makes the server think the file is still there, when required.
The program has a few built-in placeholder files, for .paa, .ogg, and .wav files, but you can also choose to use only some of them, or provide your own replacements (based on the file extension).
Thanks to
SwiftPbo, used by this tool.
HellixSuper, for feedback and extensive testing.