Resident Evil 4 .FCV Animation Format (PC/PS2)

Skeletons, animations, shaders, texturing, converting, fixing and anything else related to read game models
Biohazard4x
Posts: 9
Joined: Fri Jan 01, 2021 12:03 am

Resident Evil 4 .FCV Animation Format (PC/PS2)

Post by Biohazard4x »

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)
Mariokart64n
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.


    Max_Time :2Bytes
    Block_Count:Byte (Specifies how many Bone IDs)
    Bone_Type :Byte (Explained Below)
    Data_type :Byte (Explained Below)
    bone_No :array of bytes
    file_size :Integer
    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
    Tag_Count_X :Byte
    Time_shift_X:array of Bytes
    X_Block_data:Array of bytes(Specifed by Data_type )

    Tag_Count_Y :Byte
    Time_shift_Y:array of Bytes
    Y_Block_data:Array of bytes(Specifed by Data_type )

    Tag_Count_Z :Byte
    Time_shift_Z:array of Bytes
    Z_Block_data:Array of bytes(Specifed by Data_type )


    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"

    Type0x01:
    Type0x02: Rotation (Relative)
    Type0x04: Translation (Relative)
    Type0x08: Scale (Relative)
    Type0x10: Rotation (Absolute) ?
    Type0x20: Translation (Absolute) ?
    Type0x40:
    Type0x80:

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