Posts: 126
|
Post by LegalSoul on Jul 7, 2024 12:54:43 GMT 10
Hi all! Apologies for being totally inactive - have too many things happening in life and had to abandon this lovely modding forum I was happy to see this thread and to find out that this FCV thing is still live! Even though I can't dedicate time for this research myself, I shared the source code of my SMDtoFCV tool with Mr.Curious . The tool has its own tutorial here - residentevilmodding.boards.net/thread/5156/creating-animation-smdtofcv-converter-tutorialPlease note, as I mentioned in that tutorial of mine and as is said in this thread - my tool creates UNOPTIMIZED large fcv files and writes all keys even if there's no need for those keys. I didn't have enough resources and time to come up with a better tool, unfortunately. I also should note that the code that I shared is pretty bad - it was a long long time ago and was one of my first c++ coding attempts ![:)](//storage.proboards.com/forum/images/smiley/smiley.png) Anyway, please contact Mr.Curious if you wish to contribute to the creation of a proper FCV importer/exporter that we deserve ![:)](//storage.proboards.com/forum/images/smiley/smiley.png) See you!
|
|
|
Post by Biohazard4X on Jul 9, 2024 3:23:03 GMT 10
Nice to see ya around LegalSoul even if its one post for now haha. Thanks to the release of the PS2 debug it was possible to reverse engineer some of the code in the game thanks to zatarita and mariokart64n , we were able to fully document the FCV with everything contained there filling in some blanks while making some new mysteries(I'll get to that in a minute). The analysis below is based on that work and findings. Thanks for paving the way pioneer! Though good news indeed I'm afraid a long war must begin, testing and experimenting with the newly found documentation of the FCV some new nodes have been discovered and theirs still no viable way to really debug this file. You'r tool is kinda locked in place(but having the source code is great), we have Mariokart64n FCV script for 3ds max which is still mainly a debugging tool but CAN be used to create new animations but its need improved on and Mariokart64n doesn't really mess with RE4 anymore, and as a person who lacks any knowledge of programing or even the languages of programs due to not having time anymore but thats not the point, the information is out there. As of 8/21/2024 this is the most up to date information on the formatAnyhow heres the newly documented format of the FCV... ==================== Header ====================
Max Time :Byte int16 // Frame Count of the Entire Animation Node Updates :Byte int8 // Specifies how many Node IDs are used/updated Node Type :Byte int8 // #amount depends on "Node Updates" Data type&IK Pull :Byte int8 // #amount depends on "Node Updates" Node IDs :Byte int8 // #amount depends on "Node Updates" File Size :Byte uint32 // Size of the File, can work nulled Padding :Array of Bytes // Padding, To keep header in 16byte alignment, If needed Block Data_adress :Byte uint32 // Pointers for Nodes in Sequence of Appearance in Header here Block Data : Mix array // Keyframe Data for Nodes
***The Two Bytes that are conjointly are Bone_Type and Data_type. It will be explained below.***
==================== Block data part ====================
Frame Count X :Byte int16 // How many keyframes the node will have Frame Shift X :Byte int16 // Keyframe the Node will update on Frame Data X :Array of bytes // Explained Below, Specified by Data_type
Frame Count Y :Byte int16 // How many keyframes the node will have Frame Shift Y :Byte int16 // Keyframe the Node will update on Frame Data Y :Array of bytes // Explained Below, Specified by Data_type
Frame Count Z :Byte int16 // How many keyframes the node will have Frame Shift Z :Byte int16 // Keyframe the Node will update on Frame Data Z :Array of bytes // Explained Below, Specified by Data_type
==================== Data Type Explained (Refer to examples below for more info) ==================== 0x00: Float ; Float ; Float ; 12byte = 4:4:4 0x10: Float ; 16int ; 16int ; 8byte = 4:2:2 0x20: Float ; 8int ; 8int ; 6byte = 4:1:1 0x40: 16int ; Float ; Float ; 10byte = 2:4:4 0x50: 16int ; 16int ; 16int ; 6byte = 2:2:2 0x60: 16int ; 8int ; 8int ; 4byte = 2:1:1 0x90: 8int ; 16int ; 16int ; 5byte = 1:2:2 0xA0: 8int ; 8int ; 8int ; 3byte = 1:1:1
==================== Examples of IK Pull (Relative/Local) ==================== 0x00 : players Left 0x01 : players Right 0x02 : players Right 0x03 : players Right 0x04 : Players Front 0x05 : players back 0x06 : Camera Type // Not Actually IK Pull; Specifies if the Node ID will be a Camera related node)
==================== Examples of Bone_Type (Bit Flags) ====================
Type0x01: Player Movement (Relative) // Controller node to move the PC/NPC through the scene Type0x02: Rotation (Relative) // FK Node Type0x04: Translation (Relative) // IK Node Type0x08: Scale (Relative) // Scaling Node Type0x10: Rotation (Absolute) ? Type0x20: Translation (Absolute) ? // This would make sense as there is code for world transformations Type0x40: Scale (Absolute) ? // would make sense with the existing pattern Type0x80: Flip Bone // Used for swapping between left and righted handed enemies, needs researched
==================== Camera Nodes ==================== Nodes can be Identified if its specified Data/IK pull ends with a 0x06 The known nodes are...
Node ID 00: Camera Position // Position for Camera Node ID 01: Camera Target // Target Position for Camera Node ID 02: ? ? ? Node ID 03: Camera FOV // Field of Vision Node ID 04: Camera Speed // Camera Speed; Can speed up and slow down camera, unsure how it works Node ID 05: ? ? ?
==================== Examples of Block_data by Data_type ====================
$00: Float ; Float ; Float ;
4 bytes 4 bytes 4 bytes0 0E FD D7 C7 00 00 00 00 FE 53 23 44 = 3 sets of 32Bit Float = 12 bytes Total 79 82 D6 C7 00 FB 05 44 2E 2F A7 43 = 3 sets of 32Bit Float = 12 bytes Total Keyframe Data Spline In Spline Out
$10: Float ; 16int ; 16int ; 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 Keyframe Data Spline In Spline Out
Splines/Curves are used as Hermite splines. ==================== Data Types Explained ====================
0x10: Float ; 16int ; 16int 4bytes 2Bytes 2Bytes IK/RK Anim_Curves Data Data
NOTES: Involving the animation curves these can also be similar to curves involving image animation and ect In 3ds max these are also called, incoming and outgoing tangents @Mariokart64n found out they were Hermite splines.
Also for anyone interested in the 3Ds max Script for the FCV made by Mariokart64n heres the link --> Download FCV Script for 3DsMax (Updated 8/21/2024)
|
|
|
Post by roach on Aug 17, 2024 18:31:56 GMT 10
do you have a direct link to this tool? your link is dead
|
|
|
Post by Biohazard4X on Aug 22, 2024 11:35:36 GMT 10
do you have a direct link to this tool? your link is dead Thanks for bringing to my attention! Updated format a little bit for ease and updated Link with a more permanent link!
|
|