Update available
Changes
- added advanced configuration based plugin support
- added UI mode when xtool.exe is launched with xtoolui.dll present
- added skip verification mode
- xtool now enforces w15 deflate stream detection by default
- fixed oodle scanner exceptions when incomplete stream is detected
- fixed issue with zlib codec not accepting streams from database plugins
- updated command line syntax
Notes
advanced configuration plugin is a way of writing more complex ini files for stream detection without the need of coding skills or the need of creating a library based plugin.
spidey plugin is an example, regular configuration files could not add support for this game however, advanced configuration allows this and here's an example of how that looks like
The user interface mode has been added and it's not meant to compete with tools like DiskSpanGUI or other similar programs but it's meant to help newbies operate the program as everything is made as simple as possible. The program can still be useful for regular users too, you can use the user interface mode to get theoretical outputs without doing actual (pre)compression, if you set output to none (leave blank in cli mode) and enable skip verification then essentially, you are performing a scan on the input (similar to what Drop and Scan for Zlib does) but for all supported codecs.Код:[StreamList1] Name=lz4 Codec=lz4 BigEndian=0 Signature=0x1000352415344 Structure1=Signature(8),Count(4),Unk1(4),Unk2(16) StructureN=DPos(8),CPos(8),DSize(4),CSize(4),Unk3(8) StructureS=Stream CounterStart1=1 CounterEnd1=Count CounterStep1=1 StreamPosition=CPos StreamOffset=0 CompressedSize=CSize DecompressedSize=DSize Condition1=
An example is Cyberpunk 2077 as shown below.
From here, you can find out the output size if you were to do precompression (in about 5 mins or less, all depends on drive speed).
More uses? Well people have a problem deciding how much chunk size to use, you can change the chunk size and see how the stream found or how the size differs to decide what chunk size to use.
The UI is a bit borked at the moment but the next update will improve upon it.
xtool enforces w15 streams because I figured out that this is what causes reflate to produce crc errors because there are more false positives this way. So how does this affect results, it doesn't because 99% of games use w15 anyways except Dishonored 2 and Dishonored Death of the Outsiders (set w10 for them)
Syntax has been updated as per request from Cesar82:
--dedup can also be -dd
--dedup=#, -dd#
--dbase, -db
--diff=#,-df#
--verbose, -v
--skip, -s
Update available
Changes
- fixed oodle scanner exceptions when incorrect library is used
- fixed issues with deduplication feature
Update available
Changes
- fixed issues with exporting precompression database
- fixed issues with deduplication feature consuming a lot of system memory
- fixed oodle codec from auto enabling selkie method
- fixed reflate related checksum issues due to false positives
Update available
Changes
- updated oodle scanner
- remove xdelta support from oodle and lzo codecs (crc mismatch often generates large diff files)
Notes
I've been getting reports of xtool taking a long time to process oodle streams (or getting stuck) so I reworked the scanner. I reverse engineered the code of oo2rec (I lost the source code) and rewrote parts of the code so xtool should produce better results while being faster.
There is a parameter rework as well, some people may know of the "n#" parameter which when set increases the chances of xtool capturing a stream. The default value now is 32, can be increased to 64, 128... Up to you, there is no limit just keep in mind that increasing this value also means longer precompression times.
Results on DOOM Eternal's "gameresources_4_1.streamdb"
oo2reck
xtool 0.4.7-0.6.4Код:Compressed 1 file, 1,353,405,353 => 2,584,084,262 bytes. Ratio 190.93% Compression time: cpu 1.86 sec/real 590.20 sec = 0%. Speed 2.29 mB/s
Rumour has it that it's still processing as we speak (stuck on 5.7%)
xtool 0.6.5 (-mkraken:l6:n128)
Код:Compressed 1 file, 1,353,405,353 => 2,589,860,614 bytes. Ratio 191.36% Compression time: cpu 1.80 sec/real 370.32 sec = 0%. Speed 3.65 mB/s
Update available
Changes
- added universal lz4f scanner
- fixed issues with database feature
- fixed issues with executable plugin support
- updated lzo codecs
Update available
Changes
- added feature to inject libraries to main executable
Notes
You may notice that the libraries folder is getting filled with a lot of dll files which xtool uses so reduce this cumbersomeness you might want to embed all of these dlls within the main executable and placing the dlls near xtool.exe is no longer needed as they will become part of the executable.
This feature is added to promote portable mode where all you have is the files you want to process and xtool.exe with no libraries nearby.
Usage
xtool.exe inject dll_file
More notes
Only inject lz4, zstd and oodle when you are sure that your input will never need library swaps as these libraries depending on version determine precompression ratio. zlib, reflate and some other libraries do not as every version produces the same results.
Update available
Changes
- added fast lzma2 compression for portable mode
- fixed issues with wav stream detection
- fixed minor issue with stream deduplication feature
Notes
I have added fast lzma2 compression for users who would want to use xtool without FA but still want to perform compression immediately after precompressing.
Example
xtool.exe precomp -mzlib -c32mb -t100p --dbase --dedup --compress=l10,t100p - -
Changes
- added wav stream detector
- added flac codec
- added jpg stream detector
- added packjpg, brunsli, jojpeg codec
- added feature that allows input to be a directory
- added feature to extract detected streams
- updated database feature
- updated deduplication feature
- IO function decode updated
Notes
I have added wav audio compression as an alternative of msc for people who has issues with it or don't want to use Freearc's tta codec as it processes wav files individually. One thing to note, it's not as good as tta, tak or even frog as it is based on flac codec (It was the only open source codec I could work with...).
Also added jpg image compression codecs, you can pick between packjpg, brunsli or jojpeg. packjpg seems to have a memory leak, brunsli is fast but cannot deal with large jpg images and jojpeg can be used if you're after ratio as it is paq based (seems to be buggy so stick to packjpg or brunsli for now)
A new parameter is added --extract=[path], this will extract all detected streams to a directory... if you're interested in the streams themselves.
database and deduplication features have been updated and can now be used at all times without worrying about crc collisions.
Special thanks to KaktoR for running several tests and Shelwien for providing compiled libraries for brunsli and jojpeg.
Update available
Changes
- added png stream preprocessor
- removed grittibanzli codec (since nobody uses it)
Notes
Xtool is able to process deflate/zlib streams and png images do contain these streams however, they are split up into several blocks which at times does prevent the program from being able to process them. The png stream preprocessor's job is to concatenate (rejoin all these blocks into a single stream) which can then be processed by xtool, so if you know your input contains these images then it's best to include -mpng into the method chain and use -d1 to first preprocess the streams then process them using zlib, reflate or preflate (preflate is the preferred method to use).
Results
without png preprocessor:
with png preprocessor:Код:Compressed 1 file, 7,232,549 => 8,291,632 bytes. Ratio 114.64% -mreflate Compressed 1 file, 7,232,549 => 7,232,655 bytes. Ratio 100.00% -mpreflate
Код:Compressed 1 file, 7,232,549 => 26,075,119 bytes. Ratio 360.52% -mpng+reflate -d1 Compressed 1 file, 7,232,549 => 25,289,529 bytes. Ratio 349.66% -mpng+preflate -d1
Update available
Changes
- added IO functions (archive, execute)
- fixed issue in patch io function
- removed compression on patch diff files
Notes
More IO functions added. Archive behaves like -m0 but allows you to the archive to stdout and read from stdin when decoding (if you ever need that). Then there is execute which allows you execute several instances of another executable in parallel mode while all their inputs are fed from one source and all their output is fed to one destination.
Archive
There is nothing to add here as I have personal uses for this but the example would beКод:xtool archive files1 files2... archive
ExecuteКод:xtool archive game\* mygame.xtl xtool decode mygame.xtl extracted\*
Too lazy to write description but, here's an exampleКод:xtool execute [parameters] input output [exec_syntax]
The left side of the syntax is to command xtool and after specifying input and output files, the right side begins and here you can write the command line that should be used to perform execution.Код:xtool.exe execute -c64mb -t8 UI.sb UI.bin bcm.exe -b64 [filein] [fileout] xtool.exe decode -t100p UI.bin UI_dec.sb bcm.exe -d [filein] [fileout]
[filein], [fileout], [stdin], [stdout] can be used and denote what IO the program being executed uses.
[] is used to avoid conflicting with Freearc's <>
Freearc example would look like this
and the method would be -mxbcm:c64mb:t75pКод:[External compressor:xbcm] header = 0 packcmd = xtool.exe execute { -option} - - <stdin> <stdout> bcm.exe -b64 [filein] [fileout] unpackcmd = xtool.exe decode -t100p - - <stdin> <stdout> bcm.exe -d [filein] [fileout]