I have Been Studying the FCV format for over a year but didn't actually start diving deeper into the format until late November last Year.
So this is my interpretation of the Format and huge thanks to the following...
CRZOSK (original interpretation)
Infernal (AKA infern4l)
Gustavo 2099 (RE Modding Boards)
LegalSoul (RE Modding Boards)
Before we start I should mention that we do have 1 "tool" that can ONLY
be used to Open and Save the FCV files. This tool was made by CRZOSK but its reads the FCV incorrectly but can be used to edit animations and only Numerically, yes by editing Rotation and IK coordinates only. We can not import or Export using this tool. This tool was made using a different scaling system for the coordinates of bones, They are always Displayed divided by 100.
So I come here in hopes of Working/Helping someone making a viable working Tool or script that allows for a more Efficient Workflow, whether it be only to open FCV and only do edits. It would be amazing to have somekind of program that allows for custom animtion import/export.
Anyhow lets get onto the Format of the FCV.
Block_Count:Byte (Specifies how many Bone IDs)
Bone_Type :Byte (Explained Below)
Data_type :Byte (Explained Below)
bone_No :array of bytes
Block_data_adress:array of integers
Block_Data : Mix Array of bytes (Explained Below)
***The Two Bytes that are conjointly are Bone_Type and Data_type.***
Block data part
Time_shift_X:array of Bytes
X_Block_data:Array of bytes(Specifed by Data_type )
Time_shift_Y:array of Bytes
Y_Block_data:Array of bytes(Specifed by Data_type )
Time_shift_Z:array of Bytes
Z_Block_data:Array of bytes(Specifed by Data_type )
$00: Single ; Single ; Single ; 12byte
$10: Single ; Smallit ; Smallint; 8byte
$20: Single ; Shortint; Shortint; 6byte
$40: Smallint; Single ; Single ; 10byte
$50: Smallint; Smallint; Smallint; 6byte
$60: Smallint; Shortint; Shortint; 4byte
$90: Shortint; Smallint; Smallint; 5byte
$A0: Shortint; Shortint; Shortint; 3byte
There seems to be 3 components really, the key frames, the bones that we are affecting, and data we apply to the bones
The data starts by giving use the total run length in frames, and the amount of bones
Then gives us information for each bone that we are affecting, it supplies 2 things; what type of modification we are doing such as move the bone or rotate it, and how the data is provided (data type)
After that we goto each animation data, and its broken into 3 parts, X data, Y Data, and Z data
we read the X,Y,Z data based on the data type suppled, then we apply it to the bone based on the animation type supplied.
Here is Examples of "Bone_Type"
Type0x02: Rotation (Relative)
Type0x04: Translation (Relative)
Type0x08: Scale (Relative)
Type0x10: Rotation (Absolute) ?
Type0x20: Translation (Absolute) ?
Examples of Block_data as Specified by Data_type
$00: Single ; Single ; Single ;
4 bytes 4 bytes 4 bytes
0E FD D7 C700 00 00 00FE 53 23 44 = 3 sets of 32Bit Float = 12 bytes Total
79 82 D6 C7 00 FB 05 442E 2F A7 43 = 3 sets of 32Bit Float = 12 bytes Total
$10: Single ; Smallit ; Smallint;
4 bytes 2 Bytes 2 Bytes
19 99 14 3F 00 00 E0 D8 = 8 bytes
73 39 C9 3F D6 EB 68 40 = 8 bytes
Mariokart64n made a video Format walkthrough of the FCV. It was unlisted so I made sure to share it and I got the ok for it. https://www.youtube.com/watch?v=dyPiGgh ... riokart64n