• This is a reminder of 3 IMPORTANT RULES:

    1- External self-promotion websites or apps are NOT allowed here, like Discord/Twitter/Patreon/etc.

    2- Do NOT post in other languages. English-only.

    3- Crack/Warez/Piracy talk is NOT allowed.

    Breaking any of the above rules will result in your messages being deleted and you will be banned upon repetition.

    Please, stop by this thread SoccerGaming Forum Rules And Guidelines and make sure you read and understand our policies.

    Thank you!

FIFA 11 (PC) file formats resarch - RenderWare 4.5 assets

Zenpi1997

Club Supporter
hello tokke001, I am playing FIFA ONLINE 3 CHINA, I want to make PATCH new engine version using Quickbms "FIFA Online 3 / FIFA Online 4 - File extracting" but I cannot know the file name (as shown in the picture) So I hope you help me how to know the file name. If possible, can you help me with a new FIFA ONLINE 3 CHINA unpacks? thanks in advance <3
***data_0.big: https://drive.google.com/file/d/13hWcv5G1-Qz-qSJg5YJaAGixAXG4iTcx/view?usp=sharing
***data_1.big:https://drive.google.com/file/d/1l4AAO6aDxvzFUBJemWxI4P-95CvdxRTk/view?usp=sharing
***data_2.big: https://drive.google.com/file/d/1qjR3RRg5EK9-HFdfoxH1CDGC3bd_Ys4s/view?usp=sharing
***data_3.big:https://drive.google.com/file/d/1RNbTnHUlcU7XD30YlYQ-fQ6QYdDpaID7/view?usp=sharing
***data_4.big:https://drive.google.com/file/d/1MirIQFH83ySz5uDegXwSf_ug4C1vzsui/view?usp=sharing
***data_5.big:https://drive.google.com/file/d/1fw7XaUs4R5NuDEv34gUrLJOJ83Ex5Jde/view?usp=sharing
***data_6.big:https://drive.google.com/file/d/14cXjHMVsIZbyxgIijcWvxLSqAwgfVDKJ/view?usp=sharing
***data_7.big:
https://drive.google.com/file/d/1w9P5ZQ1X1lFHtxn2u40fGHkzsNlwgwhs/view?usp=sharing
If you are busy, please extract the data_0.big only!
I use Google translate :)
 

tokke001

Senior Squad
hey,
there are multiple vertex sizes,

@Beedy
u know for a 32 (size) format (example head models),
what s I0 and w0, what format are they?
Code:
p0:00:00:0001:3f32
n0:0C:00:0001:3s10n
g0:10:00:0001:3s10n
t0:14:00:0001:2f16
i0:18:00:0001:4u8
w0:1C:00:0001:4u8n
 

Beedy

Club Supporter
hey,
there are multiple vertex sizes,

@Beedy
u know for a 32 (size) format (example head models),
what s I0 and w0, what format are they?
Code:
p0:00:00:0001:3f32
n0:0C:00:0001:3s10n
g0:10:00:0001:3s10n
t0:14:00:0001:2f16
i0:18:00:0001:4u8
w0:1C:00:0001:4u8n
I don't know what they are. I tried to found it in Fifa 15 3d importer/exporter code but still not sure what it means. Maybe bones?
Code:
  def read_test(self, f, opts, count):
        uvcount = 0
        colcount = 0
        verts = []
        uvs = []
        cols = []
        cols_0 = []
        cols_1 = []
        cols_2 = []
        uvs_0, uvs_1, uvs_2, uvs_3, uvs_4, uvs_5, uvs_6, uvs_7 = ([], [], [], [], [], [], [], [])
        bones_i0 = []
        bones_i1 = []
        bones_w = []
        bones_c = []
        for i in range(count):
            uvcount = 0
            colcount = 0
            for j in opts:
                if j[0][0] == 'p':
                    if j[4] == '3f32':
                        verts.append(gh.read_vertices_1(f))
                    elif j[4] == '4f16':
                        verts.append(gh.read_vertices_0(f))
                elif j[0][0] == 't':
                    if j[4] == '2f32':
                        eval('uvs_' + str(j[0][1]) + '.append(gh.read_uvs_1(f))')
                    elif j[4] == '2f16':
                        eval('uvs_' + str(j[0][1]) + '.append(gh.read_uvs_0(f))')
                    else:
                        uvcount += 1

                elif j[0][0] == 'n':
                    colcount += 1
                    cols_0.append(gh.read_cols(f))
                elif j[0][0] == 'b':
                    colcount += 1
                    cols_2.append(gh.read_cols(f))
                elif j[0][0] == 'g':
                    colcount += 1
                    cols_1.append(gh.read_cols(f))
                elif j[0][0] == 'i':
                    if j[4] == '4u8':
                        eval('bones_i' + str(j[0][1]) + ".append(struct.unpack('<4B',f.read(4)))")
                    elif j[4] == '4u16':
                        eval('bones_i' + str(j[0][1]) + ".append(struct.unpack('<4H',f.read(8)))")
                elif j[0][0] == 'w':
                    bones_w.append(struct.unpack('<4B', f.read(4)))
                elif j[0][0] == 'c':
                    bones_c.append(struct.unpack('<4B', f.read(4)))
                    continue

        for j in range(uvcount):
            eval('uvs.append(uvs_' + str(j) + ')')

        for j in range(colcount):
            eval('cols.append(cols_' + str(j) + ')')

        return (
         verts, cols, uvs, bones_i0, bones_w)
 

tokke001

Senior Squad
I don't know what they are. I tried to found it in Fifa 15 3d importer/exporter code but still not sure what it means. Maybe bones?
Code:
  def read_test(self, f, opts, count):
        uvcount = 0
        colcount = 0
        verts = []
        uvs = []
        cols = []
        cols_0 = []
        cols_1 = []
        cols_2 = []
        uvs_0, uvs_1, uvs_2, uvs_3, uvs_4, uvs_5, uvs_6, uvs_7 = ([], [], [], [], [], [], [], [])
        bones_i0 = []
        bones_i1 = []
        bones_w = []
        bones_c = []
        for i in range(count):
            uvcount = 0
            colcount = 0
            for j in opts:
                if j[0][0] == 'p':
                    if j[4] == '3f32':
                        verts.append(gh.read_vertices_1(f))
                    elif j[4] == '4f16':
                        verts.append(gh.read_vertices_0(f))
                elif j[0][0] == 't':
                    if j[4] == '2f32':
                        eval('uvs_' + str(j[0][1]) + '.append(gh.read_uvs_1(f))')
                    elif j[4] == '2f16':
                        eval('uvs_' + str(j[0][1]) + '.append(gh.read_uvs_0(f))')
                    else:
                        uvcount += 1

                elif j[0][0] == 'n':
                    colcount += 1
                    cols_0.append(gh.read_cols(f))
                elif j[0][0] == 'b':
                    colcount += 1
                    cols_2.append(gh.read_cols(f))
                elif j[0][0] == 'g':
                    colcount += 1
                    cols_1.append(gh.read_cols(f))
                elif j[0][0] == 'i':
                    if j[4] == '4u8':
                        eval('bones_i' + str(j[0][1]) + ".append(struct.unpack('<4B',f.read(4)))")
                    elif j[4] == '4u16':
                        eval('bones_i' + str(j[0][1]) + ".append(struct.unpack('<4H',f.read(8)))")
                elif j[0][0] == 'w':
                    bones_w.append(struct.unpack('<4B', f.read(4)))
                elif j[0][0] == 'c':
                    bones_c.append(struct.unpack('<4B', f.read(4)))
                    continue

        for j in range(uvcount):
            eval('uvs.append(uvs_' + str(j) + ')')

        for j in range(colcount):
            eval('cols.append(cols_' + str(j) + ')')

        return (
         verts, cols, uvs, bones_i0, bones_w)

Ah maybe yes,
bone indices
weights
U know what format they are maybe ? "4u8", "4u8n" (size is 32 bits)

edit:
UBYTE4 and UBYTE4N : i found out ;)

maybe u noticed already,
i think fifa 11 vs newer fifas uses the same vertex layout (when the vertex size is the same) :
 
Last edited:

Dmitri

Reserves
Last edited:

tokke001

Senior Squad
Arena file general structure
Code:
UINT32 - asset id/type
UINT32 - number of entries
UINT32 - number of used entries
UINT32 - alignment (in bytes)
UINT32 - unknown (0 - offset to file start?)
UINT32 - offset to dictionary entries
UINT32 - offset to sections manifest
UINT32 - unknown offset (0)
UINT32 - unknown offset (0)
UINT32 - unknown offset (0)
RESOURCE_DESCRIPTOR[4] - resources
RESOURCE_DESCRIPTOR[4] - used resources
RESOURCE_DESCRIPTOR - unknown (empty)
UINT32 - unknown offset (0)

@Dmitri
question for the RESOURCE_DESCRIPTORs :
there are,
* 4 resources,
* 4 used resources
* 1 unknown

checked the fifa 11 files,
there should be one more i think?
2 unknown maybe

edit:
the first RESOURCE_DESCRIPTOR always points to the "rx3b" offset (location),
wich is a bit further in the file

so maybe:
* 1st resource : "rx3b" offset, folowed by allignment ?
* 4 resources
* 4 used resources
* 1 unknown
 
Last edited:

tokke001

Senior Squad
"rx3b" (rx3 header a bit futher in the file)

the Rx3Header is for fifa 11 located a bit further up in the file,

from there on the data & layout is pretty similar to later fifa games:
there s a Rx3SectionHeader ,

* some sections are avaible after the "rx3b" ,
known (used) section ids by fifa 11:
Code:
RX3_SECTION_INDEX_BUFFER = 5798132,
RX3_SECTION_VERTEX_BUFFER = 5798561,
RX3_SECTION_PARTIAL_SKELETON = 255353250,
RX3_SECTION_TEXTURES_HEADER = 1808827868
RX3_SECTION_TEXTURE = 2047566042


* some sections are different,
and appear before the "rx3b",
without section ids (but trough Arena file structures)
confirmed :
Code:
RX3_SECTION_HOTSPOT (kit offsets)
RX3_SECTION_BONE_MATRICES
VERTEX_DECLARATION --> see post by beedy



maybe because fifa 11 is an old game the rx3sectionheader dont recognise some ids,
or maybe the game does and it s possible adding those new ids
--> it would be easier for reading/writing (for converting for example),
if we could put the "RX3_SECTION_BONE_MATRICES" after the "rx3b" (trough the section headers , similar to later fifas)

but no idea if the game would crash that way...
 
Last edited:

tokke001

Senior Squad
any chance in future appear new stadium (help this program ?
i m working on a rx3 read/write program and released a beta version here:
http://www.soccergaming.com/index.php?threads/fifa-model-converter.6468102/

for now, simple models (ball models) can be converted,
more advanced (head) models needs bones data copied (eyes seems missing): still working on that
stadiums are even more advanced: step by step...

best keeps this thread clean a bit for research
 

valambrosio2

Senior Squad
guys, any chance of someone working or having ideas about editing audio files???

would be nice to be able to import new chants

maybe getting sound master 10 works with fifa 11?
 

Beedy

Club Supporter
Fifa 11 rx3 is something hybrid rw4xb2 format. There is rx3b section that doesn't found in rx2 and rx3b section include offsets and buffer sizes for textures, vertices, face indices...

Here is all I know about rx2 format. I extracted rx2 quickbms with rx2.bms found in previous page:
Code:
0xEC0010 = name section
0x10031 = texture / vertex / index buffer
0x20003 = texture
0x20004 = vertex descriptor
0x20005 = vertex
0x20007 = index
0x20009 = mesh (linked to vertex and index *IMG1)
0xEF0004 = shader
0xEF0000 = material descriptor (material group?) (World, WorldViewProjection, ViewInverse, Decal, diffuseTexture, ambientTexture)
0xEF0001 = material descriptor data (matrice that contain values for material)
0xEF0005 = material index (linked to EF0001 *IMG2)
0xEB0003 = group (contain ID's for mesh materials and shaders. Unknown double vertex coordinates found also *IMG3)
0xEB0000 = I don't know, but linked to EB0001, EB0002 and EB0003
0xEB0001 = Index for EB0002
0xEB0002 = 4x4 matrix (don't know what is this)
0xEB0008 = Something group (linked to 0xEB0000 *IMG4)

IMG1:
https://imgur.com/2qxOL4O
IMG2:
https://imgur.com/r07EXp7
IMG3:
https://imgur.com/sHyeugt
IMG4:
https://imgur.com/nWmxs7K
IMG5:
https://imgur.com/BtYpXIU

RX3 example festadium_238_1_container_0.rx3:
Offset and buffer sizes in entries doesn't match. Correct offsets and buffers are in rx3b section:
https://imgur.com/QGXlb4H
https://imgur.com/o7P0Xv7
Code:
RX3 rx3b section:
0x7A0B60DA = texture
0x005878F4 = index
0x00587AA1 = vertex
Rx2 stadium file:
https://www.mediafire.com/file/51ehxc8vd34dh7y/stadium_0_container_0.rx2/file
Extracted rx2 stadium file:
https://www.mediafire.com/file/fw50lymos56aicb/std0.zip/file
 

Beedy

Club Supporter
That's not fully compatible with FIFA 11 and I don't post more offtopic, but here is a short tutorial how I replace meshes to rx2 format. It only replace meshes and it's still minor thing whole format. Samples Content Exporter https://github.com/walbourn/contentexporter I managed to convert .fbx to xbox 360 format .xatg and .pmem. It compress normals to float16_4 by default in current version but older version in xbox 360 sdk support dec3n.
Tutorial image:
https://imgur.com/EemOZ2C
 

tokke001

Senior Squad
Fifa 11 rx3 is something hybrid rw4xb2 format. There is rx3b section that doesn't found in rx2 and rx3b section include offsets and buffer sizes for textures, vertices, face indices...

Here is all I know about rx2 format. I extracted rx2 quickbms with rx2.bms found in previous page:
Code:
0xEC0010 = name section
0x10031 = texture / vertex / index buffer
0x20003 = texture
0x20004 = vertex descriptor
0x20005 = vertex
0x20007 = index
0x20009 = mesh (linked to vertex and index *IMG1)
0xEF0004 = shader
0xEF0000 = material descriptor (material group?) (World, WorldViewProjection, ViewInverse, Decal, diffuseTexture, ambientTexture)
0xEF0001 = material descriptor data (matrice that contain values for material)
0xEF0005 = material index (linked to EF0001 *IMG2)
0xEB0003 = group (contain ID's for mesh materials and shaders. Unknown double vertex coordinates found also *IMG3)
0xEB0000 = I don't know, but linked to EB0001, EB0002 and EB0003
0xEB0001 = Index for EB0002
0xEB0002 = 4x4 matrix (don't know what is this)
0xEB0008 = Something group (linked to 0xEB0000 *IMG4)

IMG1:
https://imgur.com/2qxOL4O
IMG2:
https://imgur.com/r07EXp7
IMG3:
https://imgur.com/sHyeugt
IMG4:
https://imgur.com/nWmxs7K
IMG5:
https://imgur.com/BtYpXIU

RX3 example festadium_238_1_container_0.rx3:
Offset and buffer sizes in entries doesn't match. Correct offsets and buffers are in rx3b section:
https://imgur.com/QGXlb4H
https://imgur.com/o7P0Xv7
Code:
RX3 rx3b section:
0x7A0B60DA = texture
0x005878F4 = index
0x00587AA1 = vertex
Rx2 stadium file:
https://www.mediafire.com/file/51ehxc8vd34dh7y/stadium_0_container_0.rx2/file
Extracted rx2 stadium file:
https://www.mediafire.com/file/fw50lymos56aicb/std0.zip/file

thanks,
to add to your rw4 typecode -list,
i took a look at head models :
i think 0x70003 are the bone matrices (looks similar to the later fifas : RX3_SECTION_BONE_MATRICES = 3751472158

New typecode
Code:
0x70003 = BONE_MATRICES

also these are 2 unknown typecodes i found (used at fifa 11 head models) :
Code:
0X70002
0X7000F



2 questions :
- @Dmitri u know maybe if there s more info on the sections manifest (layout, what data it contains) ?
- at the Rx3SectionHeader ("rx3b", wich is at fifa 11 halfway the file),
there is this data (see code below)
u know maybe what s the value of fileSize (for fifa 11 )?
at later fifas it is the full file size, at fifa 11 this is smaller, but not sure wich value (also smaller then the data size after the rx3b header)

Code:
struct Rx3Header { // sizeof() = 16 bytes
   char signature[3]; // "RX3"
   char endianness; // 'b' - big-endian, 'l' - little-endian
   unsigned int version; // file version? (4)
   unsigned int fileSize; // total file size
   unsigned int sectionsCount; // number of sections
}
 
Last edited:

Beedy

Club Supporter
I modified my Noesis scripts (RX2/RX3) to support vertex colors and 2nd uv's for ambient textures. I think game uses Vertex colors and ambient lightmaps for lightning. NHL script support all rx2 for Xbox 360 version of FIFA 08/FIFA 09 also. There are no dec3n packed normals in Noesis api so the script doesn't support normals. Im not programming expert so backward converter is too hard for me. I have tried to extract meshes with rw4 blender plugin, but packed normals and vertex colors isn't same type in rw4.
NHL Vertex color lightning example:
 

Attachments

  • mdl_FIFA11_stadiums_pc_rx3.py.zip
    3.7 KB · Views: 224
  • mdl_nhl_X360models_1_4_rx2.py.zip
    4.2 KB · Views: 212

tokke001

Senior Squad
PrimitiveType

fifa 11 is a bit different then spore i notice,
sections containing different values, or values in a different order

but i found PrimitiveType in the section 0xEF0004 (shader)

Code:
struct Shader_0XEF0004 { // sizeof() = 140 bytes
    unsigned int Unknown_1; //maybe indexid
    unsigned int Unknown_2;
    unsigned int primitiveType;
    string String_1; // size 64 bytes
    string String_2; // size 64 bytes
};

2 used PrimitiveType i found :
D3DPT_TRIANGLELIST = 4,
D3DPT_TRIANGLEFAN = 6,
https://docs.microsoft.com/en-us/windows/win32/direct3d9/d3dprimitivetype
 
Last edited:

Beedy

Club Supporter
Code:
struct Shader_0XEF0004 { // sizeof() = 140 bytes
    unsigned int Unknown_1; //maybe indexid
    unsigned int Unknown_2;
    unsigned int primitiveType;
    string String_1; // size 64 bytes
    string String_2; // size 64 bytes
};
First 2 Unsigned int values is reference values to section files. Example extracted stadium that I uploaded in post #31.
Part1058_00ef0004_shader0:
Code:
unsigned int  // 0x421 (1057) is reference to part1057 which is part1057_00020009_mesh0
unsigned int  // 0x114 (276) is reference to part276 which is part276_00020004_vertexdescriptor0
unsigned int primitiveType;
string String_1; // maybe shader name (boardconcreteambient)
string String_2; // filename which found in shaders folder (inside big) (env_simplelightmap.FX)
part1057_00020009_mesh0:
Code:
unsigned int  // 0x00180001
unsigned int  // vertex count (9)
unsigned int  // zero
unsigned int  // index count (24)
unsigned int  // 0x118 (280) is reference to part280 which is part280_00020007_face0
unsigned int  // 0x116 (278) is reference to part278 which is part278_00020005_vertex0
 

tokke001

Senior Squad
First 2 Unsigned int values is reference values to section files. Example extracted stadium that I uploaded in post #31.
Part1058_00ef0004_shader0:
Code:
unsigned int  // 0x421 (1057) is reference to part1057 which is part1057_00020009_mesh0
unsigned int  // 0x114 (276) is reference to part276 which is part276_00020004_vertexdescriptor0
unsigned int primitiveType;
string String_1; // maybe shader name (boardconcreteambient)
string String_2; // filename which found in shaders folder (inside big) (env_simplelightmap.FX)
part1057_00020009_mesh0:
Code:
unsigned int  // 0x00180001
unsigned int  // vertex count (9)
unsigned int  // zero
unsigned int  // index count (24)
unsigned int  // 0x118 (280) is reference to part280 which is part280_00020007_face0
unsigned int  // 0x116 (278) is reference to part278 which is part278_00020005_vertex0

Just what i need thanks,
I have a lot of unknown values for my converting tool

The problem with rw4 is there a lot of offsets i think:
If u change the size of 1 upper section, all under sections moves, u need find and change all offsets

Can u help maybe with the other sections ?
0x20004 - VertexDescriptor
0x20005 - VertexBuffer
0x20007 - IndexBuffer

0x70003 - bonematrices
--> There s info from spore game, i think it s similar to fifa 11 if i m right ?
https://github.com/emd4600/SporeMod...sporemodder/file/rw4/RWAnimationSkin.java#L30
But those 3 sections above are different at fifa 11 (compared to spore)
 

Beedy

Club Supporter
There are many unknown values that I don't know yet, but I will try to understand it little bit every day :)
I don't know anything about bone matrices.
Vertex 0x20005:
Code:
Data before 0xFFFF0000 is same all vertices.

/00/00/00/01 /00/00/00/01 /00/00/00/00 /00/00/00/00 /00/00/00/00 /FF/FF/00/00
Unsigned int // Unknown. The value increases to the next vertex for example in first vertex 0xB, 2nd 0x13, 3th 0x1B…
Unsigned short // always 0x1000
Unsigned short // vertex buffer size + 2
Unsigned short // vertex block size
Unsigned short // unknown
Unsigned int // vertex count
Unsigned int // reference to vertex descriptor section part 0x20004

Face 0x20007 :
Code:
Data before 0xFFFF0000 is same all faces.

/20/00/00/02 /00/00/00/01 /00/00/00/00 /00/00/00/00 /00/00/00/00 /FF/FF/00/00
Unsigned int // reference to face buffer section part  0x10031
Unsigned int // face buffer size
Unsigned int // face count

Vertex descriptor 0x20004:
Code:
Unsigned int64 // Unknown.
Unsigned byte // Vertex elements count
Unsigned byte // Vertex block size
0xA to 0xF // unknown
For i = 0; i < Vertex elements count  i++
    Unsigned short // Stream
    Unsigned short // Offset in vertex block
    Unsigned int // Type
    Unsigned byte // Method
    Unsigned byte // Usage
    Unsigned byte // UsageIndex
 


Top