-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCRP(rs).bt
137 lines (116 loc) · 2.92 KB
/
CRP(rs).bt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//------------------------------------------------
//--- 010 Editor v7.0 Binary Template
//
// File: CRP.bt
// Authors: Alexander Evdokimov
// Version: 0.1
// Purpose: Rainbow six CRP files
// File Mask: *.crp
//
// History:
//
// 2017.06 v0.1 initial release
//------------------------------------------------
local uint count;
typedef struct {
UINT Length;
char Text[Length];
} CSTRING;
typedef struct {
UBYTE R;
UBYTE G;
UBYTE B;
UBYTE A;
} VECTOR_4B;
typedef struct {
UINT Red;
UINT Green;
UINT Blue;
UINT Alpha;
} VECTOR_4UI;
typedef struct {
UINT X;
UINT Y;
UINT Z;
} VECTOR_3UI;
typedef struct {
FLOAT X;
FLOAT Y;
FLOAT Z;
} VECTOR_3F;
typedef struct {
FLOAT X;
FLOAT Y;
} VECTOR_2F;
struct {
typedef struct {
UINT VertexCount <name="Vertex count">;
struct {
UINT Index[VertexCount] <name="Index">;
} INDEXES <name="Vertex indexes">;
// ???
struct {
VECTOR_3F Coordinates[VertexCount] <name="Vertex">;
} COORDINATES_ARRAY <name="Vertex cordinates array">;
} BODYP <name="Body part">;
BODYP BodyParts[18] <optimize=false>;
} BODY <name="Weight indexes">;
//-------------------------------------------------
typedef struct {
CSTRING Name;
struct {
VECTOR_4B Ambient;
VECTOR_4B Diffuse;
UINT Unknown; // Transparency type ?
UINT Transparency;
BYTE twoSided; // 1 - yes
} PROPERTIES;
} MATERIAL <name=textureName>;
string textureName(MATERIAL &mat) {
return mat.Name.Text;
};
struct {
FLOAT Version;
CSTRING Name;
} HEADER <name="File header kind of">;
struct {
struct {
UINT Unknown;
UINT Unknown;
UINT Unknown;
UINT Unknown;
UINT Unknown;
UINT Unknown;
} PROPERTIES <name="???">;
//
UINT TextureCount <name="Number of textures">;
MATERIAL Textures[TextureCount] <optimize=false>;
} MATERIALS <name="Materials">;
//-------------------------------------------------
struct {
UINT Count <name="Number of faces">;
typedef struct {
VECTOR_3UI FaceIndexes <name="Vertex indexes">;
VECTOR_3UI UVIndexes <name="Texture coordinates indexes">;
UINT MaterialIndex;
INT Unknown; // color, index ?
} FACE <name="Face">;
FACE Indexes[Count] <optimize=false>;
} INDEXES <name="Face data">;
//-------------------------------------------------
struct {
UINT Count <name="count">;
VECTOR_3F Vertexes[Count] <optimize=false, name="Vertex coordinates">;
} VERTEXES_ <name="Vertexes">;
//-------------------------------------------------
struct {
UINT VertexAttributesCount <name="Number of vertex attributes">;
typedef struct {
VECTOR_2F TexCoordinates <name="UV">;
VECTOR_3F Normal <name="Normal">;
VECTOR_4UI FaceColor;
} VERTEX_ATTRIBUTES <name="Face">;
VERTEX_ATTRIBUTES VertexAttributes[VertexAttributesCount] <optimize=false>;
} POLYGONS <name="Vertex attributes">;
//-------------------------------------------------
UINT Count <name="unknown">;