-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathANM(gr).bt
123 lines (111 loc) · 2.72 KB
/
ANM(gr).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
//------------------------------------------------
//--- 010 Editor v7.0 Binary Template
//
// File: ANM.bt
// Authors: Alexander Evdokimov
// Version: 0.1
// Purpose: Ghost Recon ANM files
// File Mask: *.anm
//
// History:
//
//------------------------------------------------
typedef struct {
UINT Length;
char Text[Length];
} CSTRING;
typedef struct {
UINT SectionSize;
UINT ID;
struct {
CSTRING Name <name="Version">;
UINT Value;
} VERSION;
CSTRING Name <name="Name">;
} SECTION_HEADER <name="Header">;
typedef struct {
FLOAT x;
FLOAT y;
FLOAT z;
} VECTOR3;
typedef struct {
FLOAT x;
FLOAT y;
FLOAT z;
FLOAT w;
} VECTOR4;
//--------------------
// File header
// --------------------
struct {
CSTRING Name <name="BeginModel token">;
FLOAT Version <name="Version">;
time_t ModifiedDate <name="File Modified Date">;
} HEADER <name="File header">;
UINT Count;
typedef struct {
SECTION_HEADER Header;
struct {
UINT Position_OutOfRangeType; // 1 - cycle, 3 - ping-pong
UINT Rotation_OutOfRangeType; // 1 - cycle, 3 - ping-pong
UINT Unknown; // 0
UINT16 Unknown; // 0
UINT16 Unknown; // 65535
UINT16 Unknown; // 32639
UINT16 Unknown; // 128
FLOAT TicksinSecond; // 4800
UINT Unknown; // 0
BYTE Unknown; // 1
BYTE Unknown; // 1
UBYTE Unknown; // ?
} PROPERTIES;
UINT Count<name="Number of position keys">;
typedef struct
{
UINT ControllerType; // 3 - Linear Position, 5 - TCB Position
if (ControllerType == 3)
{
FLOAT Unknown; // 0
FLOAT Time;
VECTOR3 Position;
}
else
{
FLOAT Unknown; // 0
FLOAT Time;
VECTOR3 Position;
FLOAT Tension;
FLOAT Contunioty;
FLOAT Bias;
};
} POSITION_KEY;
typedef struct (int arraySize) {
POSITION_KEY array[arraySize] <optimize=false>;
} POSITION_KEYS;
POSITION_KEYS PositionKeys(Count);
UINT Count <name="Number of rotation keys">;
typedef struct {
UINT ControllerType; // 4 - Linear Rotation
if (ControllerType == 4)
{
UINT Unknown; // 0
FLOAT Time;
UINT Unknown;
UINT Unknown;
UINT Unknown;
VECTOR4 Rotation;
}
} ROTATION_KEY;
typedef struct (int arraySize) {
ROTATION_KEY array[arraySize] <optimize=false>;
} ROTATION_KEYS;
ROTATION_KEYS RotationKey(Count);
} ANIMATION <name=ObjectName>;
string ObjectName (ANIMATION &animation) {
return "Object name: " + animation.Header.Name.Text;
};
typedef struct (int arraySize) {
ANIMATION array[arraySize] <optimize=false>;
} ANIMATIONS;
ANIMATIONS Animations(Count) <name="Animations">;
CSTRING Name <name="EndANM token">;