Skip to content

CHR File Format

AlexEA edited this page Feb 12, 2017 · 10 revisions

Unofficial CHR File Format description

Date: 2017.01 | Version: 0.5

Glossary

GR - Ghost Recon,
GRE - Ghost Recon engine

-TODO-

Unknown variables annd const.

Table of contents

1. Introduction

2. Overview

3. Sections

3.1 File header

3.2 MaterialList section

3.3 GeometryList section

3.4 Animations data section

Appendix A.

Introduction

This document describes the structure of the CHR file format used by the GRE. The GR game CHR files are stored in "Model" folder and has an extension of ".chr".

Overview

The CHR file contains the information about game characters 3D models. This includes information about materials, textures, 3d geometry and animations data. You can create CHR files with an official developer plugin for 3DS MAX 3..5 version.

Overall file structure

The CHR file format is divided into two major sections and two signatures as shown in the CHR file structure.

Table 1. CHR file structure
Section Description Links
1 File Header File header see Table 2
2 BeginModel Signature - see Table
3 MaterialList Section Materials and textures information see Table 3
4 GeometryList Section Geometry objects data see Table 13
2 EndModel Signature - see Table
5 Bones Section Animations data see Table 27
Notes

The file header has a fixed length; the other three sections are variable in length.

Sections

File Header

The CHR header is 4 bytes long.

Table 2. File header structure
Length Type Description
4 DateTime File modified date.

BeginModel Signature

Table 3. BeginModel Signature structure
Length Type Description Value
4 integer File signature length. 11
11 string File signature string. "BeginModel."
Notes

The file signature is unique file identifier that helps game engine to auto-detect the file type on load. Most of GR game files have there unique signatures.

MaterialList section

The MaterialList section contains information about object's materials and textures.

Table 3. MaterialList section structure
Section Description Links
1 Header see Table 4
2 Materials subsection Object's materials see Table 7
3 Textures subsection Object's textures see Table 9

MaterialList section header

MaterialList section header is 41 bytes long. It is structured as follows:

Table 4. MaterialList header
Length Type Description Value
1 4 integer MaterialList section size. variable
2 4 integer ID 8
3 4 integer "Version." string length. Equal to 8. 8
4 8 string "Version." string. "Version."
5 4 integer Version value. 3
6 4 integer "MaterialList." string length. Equal to 11. 13
7 13 string "MaterialList." string. "MaterialList."

1.1 Materials subsection

Table 5. Materials subsection structure
Length Type Description Links
1 4 integer Materials Count
2 variable array Materials Array see Table 6

Materials Array is an array, repeated for the Object materials count. It is as follows:

Table 6. Materials Array
Section Links
1 Header see Table 7
2 Material properties see Table 8

Materials Array Header is variable in length. It is structured as follows:

Table 7. Header
Length Type Description Value
1 4 integer Section size.
2 4 integer ID value. 8
3 4 integer "Version." string length. Equal to 8. 8
4 8 string "Version." string. "Version."
5 4 integer Version value. 3
6 4 integer Material Name string length.
7 string Material Name string.
Table 8. Material properties
Length Type 3dsMax type Description Value
1 4 float integer Opacity (0-100) 0..1
2 4 integer integer Faceted 0 - on, 3 - unset
Ambient Color Map values 0..1
1 4 float integer Red (0-255) 0..1
2 4 float integer Green (0-255) 0..1
3 4 float integer Blue (0-255) 0..1
4 4 float Unknown constant 1
Diffuse Color Map values 0..1
1 4 float integer Red (0-255) 0..1
2 4 float integer Green (0-255) 0..1
3 4 float integer Blue (0-255) 0..1
4 4 float Unknown constant
Specular Color Map values 0..1
1 4 float integer Red (0-255) 0..1
2 4 float integer Green (0-255) 0..1
3 4 float integer Blue (0-255) 0..1
4 4 float Unknown constant 1
5 4 float integer Specular level 0..1
6 1 integer integer 2-Side 0 - off, 1 - on

1.2 Textures subsection

Table 9. Textures subsection structure
Length Type Description Links
1 4 integer Textures count
2 variable array Textures Array List see Table

Textures Array is an array, repeated for the Object textures count. It is as follows:

Table 10. Textures Array
Section Links
1 Header see Table 11
2 Texture properties see Table 12

Textures Array Header is variable in length. It is structured as follows:

Table 11. Header
Length Type Description Value
1 4 integer Section size.
2 4 integer ID 38
3 4 integer "Version." string length. Equal to 8. 8
4 8 string "Version." string. "Version."
5 4 integer Version value. 2
6 4 integer Texture Name string length.
7 string Texture Name string.
Table 12. Texture properties
Length Type 3Ds Max type Description Value
1 1 byte Unknown constant. 0
2 4 integer The Length of the filename string.
3 string Texture filename.
4 4 integer integer Advanced transparency type. 0 - subtractive, 2 - additive, 3 - filter
5 4 integer integer Tiled 1 - u tiled only, 2 - v tiled only, 3 - none
6 4 float integer Self-illumination (0-100) 0..1

GeometryList section

Table 13. GeometryList section structure
Type Section Links
1 Header see Table 13
2 integer Object Count
3 array Objects array see Table 14

GeometryList section header

GeometryList section header is 41 bytes long.

Table 14. GeometryList section header
Length Type Description Value
4 integer GeometryList section size.
4 integer ID 7
4 integer "Version." string length. Equal to 8. 8
8 string "Version." string. Version.
4 integer Version value. 1
4 integer "GeometryList." string length. Equal to 11. 11
13 string "GeometryList." string. GeometryList.

Objects array is an array, repeated for the Object count. It contains information about verticies coordinates, texture coordinates, face and texture indexes, normals and texture color map. Object itself it is a group of separated 3d models stored in an array.

Table 15. Objects array structure
Length Type Description Links
variable Header see Table 16
2 integer Unknown const 0
4 integer Vertex Count
variable array Vertex array see Table 17
4 integer 3D models count
variable array Models array see Table 18
Table 16. Header
Length Type Description Value
4 integer Section size.
4 integer ID. 4
4 integer "Version." string length. 8
8 string "Version." string. "Version."
4 integer Version value. 8
4 integer Object Name string length.
variable string Object Name string.

Vertex array is an array, repeated for the Vertex Count. It contains information about verticies coordinates. It is as follows:

Table 17. Vertex array structure
Length Type 3ds Max type Description
4 float float X coordinate
4 float float Y coordinate
4 float float Z coordinate

Models array is an array, repeated for the 3D models Count. It contains information about texture coordinates, face and texture indexes, normals and color map. It is as follows:

Table 18. Models array structure
Length Type 3ds Max type Description Value Links
Properties
1 integer Unknown const 1
1 integer integer DetailedDarkmap 0 - off, 1 - on
1 integer integer DetailTexture 0 - off, 1 - on
4 integer integer Index of a material
1 integer isTextured 0 - no, 1 - yes
if isTextured > 0 then there is one more variable
4 integer integer Index of a texture
if isTextured > 0 and DetailTexture > 0 there is one more variable
4 integer integer Index of a DetailTexture
MAPs, If value is 4294967295 then it means empty value
4 integer integer Unknown variable
4 integer integer SelfIlluminationMap Index
4 integer integer SpecularMap Index
4 integer integer BumpMap Index
4 integer integer ReflectionMap Index
4 integer MapCount
4 integer integer Faces Count
array Normals1 see Table 19
array Face indexes see Table 20
array Texture indexes see Table 21
4 integer integer Vertex Count
4 integer integer Texture Count
array Normals2 see Table 22
If Texture Count > 0 then there is an array of the Texture coordinates
array Texture coordinates see Table 23
array Color map see Table 24

Normals1 array is an array, repeated for the Face Count. It contains information about normals coordinates.

Table 19. Normals1 array
Length 3ds Max type Type Description
4 float float X coordinate
4 float float Y coordinate
4 float float Z coordinate
4 float float Distance from model origin to face, sign defines direction of normal vector

Face indexes array is an array, repeated for the Face Count. It contains information about face indexes of a triangle polygon.

Table 20. Face indexes array
Length 3ds Max type Type Description
2 integer integer First point index
2 integer integer Second point index
2 integer integer Third point index

Texture indexes array is an array, repeated for the Face Count. It contains information about texture indexes of a triangle polygon.

Table 21. Texture indexes array
Length 3ds Max type Type Description
2 integer integer First point index
2 integer integer Second point index
2 integer integer Third point index

??? Normals2 array is an array, repeated for the Vertex Count. It is another array that contains information about normals coordinates.

Table 22. Normals2 array
Length 3ds Max type Type Description
4 float float X
4 float float Y
4 float float Z

Texture coordinates array is an array, repeated for the (Vertex Count)*(TextureCount). It contains information about Texture coordinates.

Table 23. Texture coordinates array
Length 3ds Max type Type Description
4 float float U
4 float float V

Color map array is an array, repeated for the Vertex Count. It contains information about color map, which applied on a faces without a texture assigned.

Table 24. Color map array
Length Type 3Ds Max type Description Value
1 4 float integer Red (0..255) 0..1
2 4 float integer Green (0..255) 0..1
3 4 float integer Blue (0..255) 0..1
4 4 float integer Unknown const 1

The sections is ends with the unknown constant equal 0.

Table 25. Number
Length Type Value
4 UINT Unknown constant

EndModel Signature

EndModel signature is 13 bytes long.

Table 26. Color map array
Length Description
1 4 EndModel signature length. Equal to 9.
2 9 EndModel signature: always equal to 'EndModel'.

Bones section

Table 27. Bones section structure
Section Links
1 Header see Table 28
2 Bones array see Table 30
3 Weight table see Table 30
Table 28. Header
Length Type Description Value
1 4 integer ID 37
2 4 integer Version string length 8
3 string Version string "Version."
4 4 integer Version value 5
5 4 integer Bone name string length
6 string Bone name string see Table 29
Table 29. Default bones names
**№ ** Name
1 SpineRoot
2 SpineLow
3 SpineMid
4 SpineTop
5 Neck2
6 Neck
7 RBicep
8 Head
9 RForearm
10 RHand
11 LBicep
12 LForearm
13 LHand
14 RThigh
15 RCalf
16 RFoot
17 RToe
18 LThigh
19 LCalf
20 LFoot
21 LToe

Bones array is an array, repeated for the Bones count (21). It contains information about animation bones. It is as follows:

Table 30. Bones array structure
Length Type Description Value
Position coordinates (x,y,z)
1 4 float X
2 4 float Y
3 4 float Z
Rotation coordinates (quats)
1 4 float X
2 4 float Y
3 4 float Z
4 4 float Angle
1 4 integer Unknown constant 0
2 4 integer Bone connections 0..3

Weight table contains information about character model vertexes weights. It is as follows:

Table 31. Weight table structure
Length Type Description Links
1 4 Header see Table 32
2 4 integer Vertexes count see Table 33
3 4 array Weights array see Table 33
Table 32. Header
Length Type Description Value
1 4 integer String length
2 string Modifier name string
3 4 integer Unknown constant 1
4 4 integer Body name string length
5 string Body name string

Vertex weights array is an array, repeated for the Vertexes count. It is as follows:

Table 33. Vertex weights array
Length Type Description
1 4 integer Vertex Index
2 4 integer Bones Count
if BonesCount > 0 then there is an array, repeated for the Bones Count
1 4 integer Bone name string length
2 string Bone name string
3 4 float Weight

Table of Contents

Clone this wiki locally