FCBConverter

FCBConverter is a tool for modifying mainly FC5 and New Dawn, but can be used also for older FC games.
It contains also original Gibbed code for converting FCB format, but it's heavily modified and was added compression.
It also contains unpacker and packer of DAT / FAT files. It can convert also many other formats.
==Changing values in converted file==
FCBConverter uses special detecting types of values (int32, int64, float), but sometimes it can detect the type incorrectly, so output file isn't using decoded types and values directly, but rather they are in separate attribute and they are ignored during converting back to binary.
To change a value you can use directly BinHex or use detected type and put typed value (rather than BinHex 15020000 you can write int 533). Look below for more.
This is converted line from binary:
<field hash="ABDC41FE" name="fMaxHealth" value-Float32="1000" type="BinHex">00007A44</field>
* hash="ABDC41FE" - this is Hash32 of name attribute
* name="fMaxHealth" - this is readable format of hash attribute
For converting back to binary, one of name or hash is required.
* value-Float32="1000" - ignored during converting to binary!, it's detected type and value from binary data, may not be correct, but in almost all cases it's correct
* type="BinHex" - type of the value, default is always BinHex, can be changed by you, it's required when converting back to binary, look below what types are possible
* 00007A44 - the value of name or hash, it can be different, depends on type attribute
==How to use my value==
To make you work easier, you don't have to convert your values to BinHex, but rather you can use types (more below).
So change the default line:
<field hash="ABDC41FE" name="fMaxHealth" value-Float32="1000" type="BinHex">00007A44</field>
To:
<field hash="ABDC41FE" name="fMaxHealth" type="Float32">1000</field>
As you can see, type is now Float32 and value is 1000, value-Float32="1000" attribute you can delete.
==Types==
* Int16, Int32, Int64 - classical number type like 4, 8, 15, 16, 23, 42
* UInt16, UInt32, UInt64 - same as Int, but unsigned (can't be negative)
* Float32, Float64 - values with decimal points
* Vector2, Vector3, Vector4 - basically "array" of floats, like: Vector2 5.5,4.8 | Vector3 6.8,4.2,0.2 | Vector4 8.8,4.3,4.0,7.3
* String - just string, what else?
* Enum - enum, looks like Int
* Hash32, Hash64 - hash value
* Id32, Id64 - long IDs like: Id64 9015342852088885
* ComputeHash32, ComputeHash64 - this will make hash of value
* Boolean - just True or False, you thought something else?
* BinHex - default type, contains binary data
==Usage==
FCBConverter is primary command line program, but release contains GUI program that makes using of FCBConverter easier.
Simple usage:
﻿FCBConverter.exe <file>
file - path to supported binary file that will be converted
Example:
FCBConverter.exe D:\patch.dbt.fcb
==Batch converting==
FCBConverter can convert many files at once, just specify a folder that contains files that's need to be converted.
﻿FCBConverter.exe <folder> <search pattern> <allow subfolders>
folder - path for folder, use \ to run it in the same directory where are you running the exe
search pattern - *.fcb for example convert all FCB files, separated by comma (,)
allow subfolders - if you set "-subfolders", batch convert will process all found subfolders
==Examples==
This will convert all *.fcb files in the "editing" directory:
﻿FCBConverter.exe "d:\unpacked\editing" *.fcb
This will convert all converted *.fcb files back to binary form in the "editing" directory:
﻿FCBConverter.exe "d:\unpacked\editing" *.fcb.converted.xml
This will convert all *.xbt and *.bin files in the "editing" directory and all subfolders:
﻿FCBConverter.exe "d:\unpacked\editing" *.xbt,*.bin -subfolders
This will convert all *.fcb files starting with "character_" in the "editing" directory:
﻿FCBConverter.exe "d:\unpacked\editing" character_*.fcb
It doesn't support regular expressions, but you can use wildcard specifies:
? (question mark) - Zero or one character in that position.
* (asterisk) - Zero or more characters in that position.
When you use the asterisk wildcard character in a search pattern such as "*.txt", the number of characters in the specified extension affects the search as follows:
* If the specified extension is exactly three characters long, the method returns files with extensions that begin with the specified extension. For example, "*.xls" returns both "book.xls" and "book.xlsx".
* In all other cases, the method returns files that exactly match the specified extension. For example, "*.ai" returns "file.ai" but not "file.aif".
When you use the question mark wildcard character, this method returns only files that match the specified file extension. For example, given two files, "file1.txt" and "file1.txtother", in a directory, a search pattern of "file?.txt" returns just the first file, whereas a search pattern of "file*.txt" returns both files.
==Usage for unpacking DAT / FAT==
Usage:
FCBConverter.exe <fat file> <output dir> <desired file>
fat file - path to fat file
output dir - output folder path, file will extracted to this folder
desired file - file path inside the FAT file
==Usage for packing DAT / FAT==
Usage:
FCBConverter.exe <input folder> <fat file> <FAT version>
input folder - input folder path with files
fat file - path to the new fat file
FAT version - can be -v9 (FC4, FC3, FC3BD) or -v5 (FC2), default version is 10 (FC5, FCND), note that older FAT versions can't be compressed
==FC5 and New Dawn Oasis strings file==
Oasis strings file from FC5 and New Dawn has same file names, but different format, so it needs to edit the file name before converting (FCBConverter then know what format the file has).
So, for converting oasis from New Dawn, rename the oasis to:
﻿oasisstrings_nd.oasis.bin
==Known file names list==
Because DAT / FAT doesn't contain filenames, but they are rather saved as hash, there must be a list with all file names. If you find a file that isn't in the list, but is in the DAT / FAT, then you can add to the FCBConverterFileNames.list
==Known config entry names list==
Same as file names, config entry names are also saved as hash, so there also need to be a list with known names. New names can be added to FCBConverterStrings.list
==FCB format compression==
If you look to files from Ubisoft, most of FCB files are compressed, but not using any known compression method, but rather custom Ubisoft compress method (I can describe it to you if you want).
Typical example of the compression is on file named as nomadobjecttemplates_rt.fcb, if you edit it and convert it back to FCB, it will be 32MB, but original file size is 2MB, that's big reduce in size.
Compressing big FCB files can take much time, so it maybe can't be used for hot-swap editing.
For disabling compression file named as FCBConverterNoCompress.txt must exist in the same dir as FCBConverter.exe file.
==Compression of DAT / FAT files==
Compression can be used also on these files (only for FC5 and ND). If you need to exclude any file extension from compressing, add it to the file FCBConverterCompressExclude.txt
For disabling compression file named as FCBConverterNoCompress.txt must exist in the same dir as FCBConverter.exe file.
==Wwise SoundBank file==
I added support for converting bnk files to xml. This page helped me a lot, but there is problem that the page was edited last in 2012, so it's very old and some bytes are different. That means not all objects from bnk are converted into readable format, but rather stay in binary hex format. Finding their structure requires weeks of trying different functions in Wwise. Maybe I add them in future.
There is also problem that bnk has different versions, FC5 has 120, New Dawn has 128. For example the game World of Warships has 135. Versions are mostly the same, but there are some small changes I found, for example uint32 is replaced with ubyte.
There also can be some files which can produce error during converting, in this case please tell me which files they are.
==Supported file formats==
* Far Cry Binary file (*.fcb)
* Database file (*.ndb)
* Dependency loader file (*_depload.dat)
* Sound info file (soundinfo.bin)
* Animation markup file (*.markup.bin)
* Far Cry 5 Strings file (oasisstrings.oasis.bin)
* Far Cry New Dawn Strings file (oasisstrings_nd.oasis.bin)
* Far Cry 4 Strings file (oasisstrings_compressed.bin)
* Lua file (adds LUAC header) (*.lua)
* Material file (*.material.bin)
* Texture file (*.xbt)
* Terrain texture file (*.xbts)
* Animation move file (*.move.bin)
* Combined Move File (CombinedMoveFile.bin)
* Sequence file (*.cseq)
* Flash UI file (*.feu)
* Bundle file (*.bdl)
* Wwise SoundBank file (*.bnk)
* Wwise Encoded Media (*.wem)
* File allocation table (DAT header file) (*.fat)
* Far Cry Mesh file (*.xbg)
==Support development==
I spent many hours with searching binary structures of unknown files, so if you want to support me and next development of this program, I'll be glad.
==Credits==
As I wrote it contains original FCB converter from Gibbed and it was heavily modified and edited for using in FC5 and New Dawn.
It also contains 3rd party software for converting wem to ogg called ww2ogg and revorb.
There is also library for uncompressing lzo.
==Dev note==
Source code is available at GitHub.
Inspiration for this program was ffmpeg - many functions in one exe file.
Category:Far Cry 2 mods
Category:Far Cry 3 mods
Category:Far Cry 3: Blood Dragon mods
Category:Far Cry 4 mods
Category:Far Cry Primal mods
Category:Far Cry 5 mods
Category:Far Cry New Dawn mods
Category:Far Cry 6 mods