RX3 file format research thread

Dmitri

Youth Team
A little update: I added a definition for RX3_SECTION_HOTSPOT section. I still don't know if it's same for FIFA16. I use FIFA20 Switch rx3 files as a reference.

Can you research about wipes from nintendo in fifa 14
What exactly?

here is a person who has worked with rx2 and rx3, and has been able to use fifa11 balls in 12 using the hexadecimal editor,
The fact that you can convert models just with hex editor is just another confirmation that file format layout is very similar in all FIFA games.
 

*aLe

Youth Team
could someone upload FIFA12/13/14/15/16 .rx3 texture/model files (from original PC version)? This will help me a lot.
I have all of them (not all are installed, but I could do so if needed).
What would you like to see? Kits? Kitnumbers? Boots?
 

Dmitri

Youth Team
For me the best option will be to have all .big files from each game. Then I could launch tests on all files and find all dependencies in each game version.
But I will be also happy just with with head/stadium/kit examples.
 

Dmitri

Youth Team
I just installed FIFA14 on my machine. I remember I had many problems with it last time (many years ago), but now it runs pretty well.
I'm going to check and analyze all available .rx3 files there.

Some update on FIFA14 files:
FIFA14 .rx3 files are very similar with FIFA20 Switch .rx3 files.
The difference is:
-FIFA20 Switch use more UV layers
-FIFA14 models are limited with 64 bones per mesh
The latter is the reason why FIFA20 Switch models cause a crash in FIFA14 - they exceed this limit.
 
Last edited:

tokke001

Senior Squad
fifa online 3 (fifa 11 engine, 15-16 season)

the FO3 game uses the fifa 11 engine (FIFA 11 rx3 format)
but the faces are from season 15-16, and look identical to fifa 15 faces

so,
the FO3 faces looks same as fifa 15 faces, only the rx3 structures are different (FIFA 11 rx3 vs FIFA 15 rx3)

maybe this interests you for your project,
for comparing the 2 file formats
ea actually did a conversion from FIFA 15 into FIFA 11 formats here...


example files :
FIFA online 3 (chunkzip compressed) : https://mega.nz/#!t80BEYJJ!fWVYA-hlC2hrKd0naESiF6FArCdBPeknagHjNQXhj3s
FIFA 15 : https://mega.nz/#!Rp8lBIaQ!Q7PhJumLSGML2cG9ML8i0iPoRSv77EUIFxuEITtFOl4
 
Last edited:

Jorge Pizzati

Club Supporter
Hello, sorry to barge in here, I was wondering if anyone here has ever tried converting shoe models for example FIFA 15 --> FIFA 16 format, I am able to import them in the game through CM16 but they morphed and out of place. I'm not looking to spam this thread just figured that somebody here could point me in the right direction.

Here's a screenshot for reference:

1.png 2.png
 

pao4ever

Starting XI
Hello, sorry to barge in here, I was wondering if anyone here has ever tried converting shoe models for example FIFA 15 --> FIFA 16 format, I am able to import them in the game through CM16 but they morphed and out of place. I'm not looking to spam this thread just figured that somebody here could point me in the right direction.

Here's a screenshot for reference:

View attachment 37268 View attachment 37269
Yeah, not possible mate
 

Re_coded

Youth Team
For me the best option will be to have all .big files from each game. Then I could launch tests on all files and find all dependencies in each game version.
But I will be also happy just with with head/stadium/kit examples.

I have the .big files for FIFA Street and 2014 FIFA World Cup which were only available on console (The PS3 versions, to be precise), I can upload them for you if you're interested.
 

Dmitri

Youth Team
I checked stadium files.
Stadium files are different from ball and head files - they contain nodes, props ("empties"), materials and collision shapes.
All these things are now documented. I will get more information after detailed analyzis of all available files.
I still need to document info on index/vertex data and skeleton, will do this later.

@Re_coded if you can - please unpack all files from .big, decompress them (if needed), pack them into .tar and upload to MEGA.
 

tokke001

Senior Squad
for the texture formats ,
here s small update i found,
but most common used are maybe 0,1,2,7:

Code:
DXT1 = 0
DXT3 = 1
DXT5 = 2
A8R8G8B8 = 3            'ARGB
GREY8 = 4               'Luminence Map
GREY8ALFA8 = 5
RGBA = 6              
DC_XY_NORMAL_MAP = 7    'NVTT
A4R4G4B4 = 109
R5G6B5 = 120
X1R5G5B5 = 126
BIT8 = 123
R8G8B8 = 127
 
Last edited:

Dmitri

Youth Team
In FIFA 14, trophy models are tri-strips.
upload_2020-5-23_11-31-55.png


As I said earlier, there must be a parameter inside the file which determines the primitive type (lines, tri-strips, tri-lists, etc.). And yes, there it is. A small section at the end of RX3 file, ID 3566041216.
Code:
struct Rx3MeshPrimitiveType { // sizeof() = 16 bytes
    unsigned int primitiveType;
    int unknown[3]; // maybe padding (0, 0, 0)
};
Known primitive types:
Code:
4 - TRIANGLELIST
6 - TRIANGLESTRIP

upload_2020-5-23_11-57-29.png


for the texture formats ,
here s small update i found,
Can you upload files where these types are used?
 
Last edited:

tokke001

Senior Squad
Can you upload files where these types are used?


Texture types
i get those values from Rinaldos FIFAlibrary files,
not for all i could find examples :

* DXT1, DXT5, NVTT

--> NVTT is used since newer games (not fifa 11): for example bump files for shoes, gkgloves, balls
--> gkglove_76_textures (fifa 16 original) has 3 formats (DXT1, DXT5, NVTT)

* DXT3
--> kitnumbers_19_2.rx3 (fifa 16 original) has DXT3 formats

* Grey8
--> pitchcovmap_67_1_textures.rx3 (fifa 11 format)

* A8R8G8B8
--> kit_110_3_0.rx3 (FIFA 11 format, 3th texture only)


----- Special ----
i included an kit from game fifa WC 2010 (console):
it uses known types (DXT1, DXT3, A8R8G8B8), but there s something different because the textures looks bugged
this is common present usually with console game textures....
--> kit_974_0_0.rx3


if u need more info from tools (can be opened with a .net reflector program):
* Filemaster (no NVTT support)
* CG File Explorer 16 (has NVTT support) : Download
credits to those makers ofc...

Section IDs
another thing i found (in Rinaldos FIFAlibrary files),
are unknown section IDs: 3 were present at head files, last one i didnt found in a file yet :
Code:
191347397   'head files
341785025  'head files
899336811  'head files
4185470741
--> i included a sample (FIFA 16 head-model file) in the download...

-----------------------------
Download samples:
https://mega.nz/file/dpcAXYyJ#qkvuyn2NBCILImAHI5gNOmA3o-M_Z9NYtt15VJsJojY
 
Last edited:

V.K

Starting XI
Ever since I started modding football games with fifa 2007 my dream has been to have some mastermind (like RInaldo or Juce or others) come up with a all-in-one convertor for everything :D
One click and you've converted a fifa 16 boot model into fifa 14, another click and you converted a pes face into a fifa face, that would be awesome!
 

Dmitri

Youth Team
I scanned all FIFA 14 .rx3 files and I found 2 new sections.
3247952176 - probably RX3_SECTION_MORPH - used in *_morphtargets files.
2360999927 - unknown, used in stadium_185.rx3, stadium_189.rx3 and stadium_250.rx3. It includes some subsection with name "tree_birdchar_". Maybe it's used for animated birds (particle or animation)?

FIFA 14 uses all sections which are listed in first post, except SKELETON (I can't find the rig file (skeleton_player.rx3) in FIFA 14) and BONE (probably it's not used as a separate section).
 
Last edited:

tokke001

Senior Squad
I scanned all FIFA 14 .rx3 files and I found 2 new sections.
3247952176 - probably RX3_SECTION_MORPH - used in *_morphtargets files.
2360999927 - unknown, used in stadium_185.rx3, stadium_189.rx3 and stadium_250.rx3. It includes some subsection with name "tree_birdchar_". Maybe it's used for animated birds (particle or animation)?

FIFA 14 uses all sections which are listed in first post, except SKELETON (I can't find the rig file (skeleton_player.rx3) in FIFA 14) and BONE (probably it's not used as a separate section).

i included a fifa 16 headfile, wich had 3 new unkown sections :
head_226316_0.rx3
https://mega.nz/file/dpcAXYyJ#qkvuyn2NBCILImAHI5gNOmA3o-M_Z9NYtt15VJsJojY

Code:
191347397
341785025
899336811
 

tokke001

Senior Squad
Yes, FIFA 16 has some new IDs. No idea if I'll have a time to look on it.

ah oke,
could be they are less important

any chance u got more info about :
RX3_SECTION_BONE_MATRICES
RX3_SECTION_PARTIAL_SKELETON

they are the 2 things important for animations

they look a bit similar, i know the first 4 values
but the data that follows (matrices) i would like to know how to read them (4x4 matrices, ... ?)
it s because i try convert bone matrices for example fifa 14 to fifa 11, but getting errors for having the wrong formats
thanks in advance

Code:
struct BONE_MATRICES {
    unsigned int size; // size of the whole section - with header, data and padding
    unsigned int num; // number of bonematrices
    unsigned int unknown1; // always 0
    unsigned int unknown2; // always 0
    Data  --> unknown formats
};

Code:
struct PARTIAL_SKELETON {
    unsigned int size; // size of the whole section - with header, data and padding
    unsigned int num; // number of partial skeleton parts
    unsigned int unknown1; // always 0
    unsigned int unknown2; // always 0
    Data  --> unknown formats
};
 

Dmitri

Youth Team
Small update on texture format
Code:
struct Rx3TextureLevelHeader { // sizeof() = 16 bytes
   unsigned int pitch;
   unsigned int lines;
   unsigned int levelSize; // size of pixels data (pitch * lines)
   unsigned int unknown1 (0, maybe padding);
};
Pitch can be calculated this way:
C++:
if (format == RX3TEXTUREFORMAT_DXT1 || format == RX3TEXTUREFORMAT_ATI1)
    pitch = max(1u, ((w + 3) / 4)) * 8;
else // DXT3, DXT5, ATI2
    pitch = max(1u, ((w + 3) / 4)) * 16;
where w is a width of current mip level.

Level size can be calculated this way:
C++:
unsigned int GetPixelDataSize(unsigned short width, unsigned short height, unsigned char format) {
    if (width < 4)
        width = 4;
    if (height < 4)
        height = 4;
    switch (format) {
    case RX3TEXTUREFORMAT_DXT1:
    case RX3TEXTUREFORMAT_ATI1:
        return width * height / 2;
    case RX3TEXTUREFORMAT_DXT3:
    case RX3TEXTUREFORMAT_DXT5:
    case RX3TEXTUREFORMAT_ATI2:
        return width * height;
    }
    return 0;
}
 

Dmitri

Youth Team
AnimationSkin contains matrices for all skeleton bones.
There are 255 bones for player model in FIFA 14-PC and FIFA 20-Switch. FIFA 16-PC uses 400 bones.

Code:
struct Rx3SectionAnimationSkin {
   unsigned int totalSize; // total size of this section
   unsigned int numBones; // bone count
   unsigned int unknown1[2]; // { 0, 0 }, maybe padding
   Matrix4x4 matrices[numBones]; // skin-to-bone matrix, for each bone
};

BoneRemap contains 2 tables of indices. These tables contain information on bones which are used on the mesh.
Code:
struct Rx3SectionBoneRemap {
   unsigned int totalSize; // total size of this section
   unsigned char numUsedBones; // number of used bones on the mesh; max 256
   unsigned char padding[11]; // {}, padding
   unsigned char usedBones[256]; // table 1
   char[] align16;
   unsigned char usedBonesPositions[256]; // table 2; shows where bones are placed in table 1
   char[] align16;
};
The order in first table represents the order of bones in the skeleton. This table contains local bone IDs. For example, if mesh is affected only by 2 bones, there will be 2 IDs in this table: 0 and 1. Their placement in the table will tell the "real" bone ID. But I don't know how bones are sorted (i.e. which bone gets 0 and which 1).
Second table contains positions for used bones in table 1.

Skeleton is present in skeleton_player.rx3 and represent skeleton hierarchy (FIFA 20-Switch).
Code:
struct Rx3SectionSkeleton {
   unsigned int totalSize; // total size of this section
   unsigned int numBones; // bone count
   unsigned int unknown1[2]; // { 0, 0 }, maybe padding
   Rx3SkeletonBoneInfo bones[numBones]; // bones table
};
FIFA 14/FIFA 20 Switch are limited with 255 bones, so it uses 1 byte (0-255) for bone index
Code:
struct Rx3SkeletonBoneInfo { // sizeof() = 2 bytes
   unsigned char parent; // 255 for root bone
   unsigned char firstChild; // or sibling?
};
FIFA 16 has 400 bones, so it uses 2 bytes (0-65535) for bone index
Code:
struct Rx3SkeletonBoneInfo { // sizeof() = 4 bytes
   unsigned short parent; // 65535 for root bone
   unsigned short firstChild; // or sibling?
};
 
Last edited:


Top