4b825dc642cb6eb9a060e54bf8d69288fbee4904ebd360ec63ec976c05699f3180e866b3f69e5472
 
 
1
#include "system.h"
 
 
2
#include "stratdef.h"
 
 
3
#include "bh_types.h"
 
 
4
#include "npc_marine.h"
 
 
5
#include "npc_alien.h"
 
 
6
#include "corpse.h"
 
 
7
#include "debris.h"
 
 
8
#include "weaponbehaviour.h"
 
 
9
#include "pldghost.h"
 
 
10
#include "userprofile.h"
 
 
11
#include <assert.h>
 
 
12
 
 
 
13
extern void RenderHUDString(const char *stringPtr, int x, int y, int colour);
 
 
14
extern void RenderStringCentred(const char *stringPtr, int centreX, int y, int colour);
 
 
15
extern void FadeDownScreen(int brightness, int colour);
 
 
16
 
 
 
17
#define TABPOINT1    (ScreenDescriptorBlock.SDB_Width/10)
 
 
18
#define TABPOINT2    (ScreenDescriptorBlock.SDB_CentreX)
 
 
19
#define TABPOINT3    ((ScreenDescriptorBlock.SDB_Width/6)+(ScreenDescriptorBlock.SDB_CentreX))
 
 
20
#define TABPOINT4    (((ScreenDescriptorBlock.SDB_Width/6)*2)+(ScreenDescriptorBlock.SDB_CentreX))
 
 
21
 
 
 
22
#define NotCheating (CHEATMODE_NONACTIVE == UserProfile.active_bonus)
 
 
23
 
 
 
24
AvP_GameStats CurrentGameStatistics;
 
 
25
extern SCREENDESCRIPTORBLOCK ScreenDescriptorBlock;
 
 
26
 
 
 
27
#define COLOUR_WHITE    (0xffffffff)
 
 
28
#define COLOUR_RED    (0xffff0000)
 
 
29
#define COLOUR_GREEN    (0xff00ff00)
 
 
30
 
 
 
31
#define NEWLINE_SPACING    ((ScreenDescriptorBlock.SDB_Height < 400) ? 12:15)
 
 
32
 
 
 
33
static struct
 
 
34
{
 
 
35
    AvP_GameStats_Stored StatTargets;
 
 
36
    enum CHEATMODE_ID CheatModeToActivate;
 
 
37
}
 
 
38
 
 
 
39
const LevelStatsTargets[3][MAX_NO_OF_MARINE_EPISODES] =
 
 
40
{
 
 
41
{
 
 
42
    {
 
 
43
        {    /* Temple */
 
 
44
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
45
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
46
            {-1,-1,-1,-1,-1,-1,-1,-1,10,-1,},    /* Trophies / Live Head Bites */
 
 
47
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
48
            -1,        /* Shots Fired */
 
 
49
            -1,        /* Accuracy */
 
 
50
            -1,        /* Spotted */
 
 
51
            0,        /* Total Seconds (unsigned!) */
 
 
52
            0,        /* Total Minutes (unsigned!) */
 
 
53
            -1,        /* Total Hours */
 
 
54
            0,        /* Cloaked Seconds */
 
 
55
            0,        /* Cloaked Minutes */
 
 
56
            -1,        /* Cloaked Hours */
 
 
57
            -1,        /* Health Damage */
 
 
58
            -1,        /* Armour Damage */
 
 
59
            -1,        /* Average Speed */
 
 
60
            -1,        /* Field Charge Used */
 
 
61
            -1        /* Head Shot Percentage */
 
 
62
        },
 
 
63
        CHEATMODE_SNIPERMUNCH,    /* Cheat to activate */
 
 
64
    },
 
 
65
    {
 
 
66
        {    /* Escape */
 
 
67
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
68
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
69
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
70
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
71
            -1,        /* Shots Fired */
 
 
72
            -1,        /* Accuracy */
 
 
73
            -1,        /* Spotted */
 
 
74
            0,        /* Total Seconds (unsigned!) */
 
 
75
            2,        /* Total Minutes (unsigned!) */
 
 
76
            0,        /* Total Hours */
 
 
77
            0,        /* Cloaked Seconds */
 
 
78
            0,        /* Cloaked Minutes */
 
 
79
            -1,        /* Cloaked Hours */
 
 
80
            -1,        /* Health Damage */
 
 
81
            -1,        /* Armour Damage */
 
 
82
            -1,        /* Average Speed */
 
 
83
            -1,        /* Field Charge Used */
 
 
84
            -1        /* Head Shot Percentage */
 
 
85
        },
 
 
86
        CHEATMODE_NAUSEA,    /* Cheat to activate */
 
 
87
    },
 
 
88
    {
 
 
89
        {    /* Feraco */
 
 
90
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
91
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
92
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
93
            {-1,-1,-1,-1,-1,-1,-1,-1,15,-1,},    /* Dead Head Bites */
 
 
94
            -1,        /* Shots Fired */
 
 
95
            -1,        /* Accuracy */
 
 
96
            -1,        /* Spotted */
 
 
97
            0,        /* Total Seconds (unsigned!) */
 
 
98
            0,        /* Total Minutes (unsigned!) */
 
 
99
            -1,        /* Total Hours */
 
 
100
            0,        /* Cloaked Seconds */
 
 
101
            0,        /* Cloaked Minutes */
 
 
102
            -1,        /* Cloaked Hours */
 
 
103
            -1,        /* Health Damage */
 
 
104
            -1,        /* Armour Damage */
 
 
105
            -1,        /* Average Speed */
 
 
106
            -1,        /* Field Charge Used */
 
 
107
            -1        /* Head Shot Percentage */
 
 
108
        },
 
 
109
        CHEATMODE_PIPECLEANER,    /* Cheat to activate */
 
 
110
    },
 
 
111
    {
 
 
112
        {    /* Gateway */
 
 
113
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
114
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
115
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
116
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
117
            -1,        /* Shots Fired */
 
 
118
            -1,        /* Accuracy */
 
 
119
            -1,        /* Spotted */
 
 
120
            (30*ONE_FIXED),    /* Total Seconds (unsigned!) */
 
 
121
            4,        /* Total Minutes (unsigned!) */
 
 
122
            0,        /* Total Hours */
 
 
123
            0,        /* Cloaked Seconds */
 
 
124
            0,        /* Cloaked Minutes */
 
 
125
            -1,        /* Cloaked Hours */
 
 
126
            -1,        /* Health Damage */
 
 
127
            -1,        /* Armour Damage */
 
 
128
            9000,    /* Average Speed */
 
 
129
            -1,        /* Field Charge Used */
 
 
130
            -1        /* Head Shot Percentage */
 
 
131
        },
 
 
132
        CHEATMODE_MOTIONBLUR,    /* Cheat to activate */
 
 
133
    },
 
 
134
    {
 
 
135
        {    /* Earthbound */
 
 
136
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
137
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
138
            {-1,-1,-1,-1,-1,-1, 1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
139
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
140
            -1,        /* Shots Fired */
 
 
141
            -1,        /* Accuracy */
 
 
142
            -1,        /* Spotted */
 
 
143
            0,        /* Total Seconds (unsigned!) */
 
 
144
            0,        /* Total Minutes (unsigned!) */
 
 
145
            -1,        /* Total Hours */
 
 
146
            0,        /* Cloaked Seconds */
 
 
147
            0,        /* Cloaked Minutes */
 
 
148
            -1,        /* Cloaked Hours */
 
 
149
            -1,        /* Health Damage */
 
 
150
            -1,        /* Armour Damage */
 
 
151
            -1,        /* Average Speed */
 
 
152
            -1,        /* Field Charge Used */
 
 
153
            -1        /* Head Shot Percentage */
 
 
154
        },
 
 
155
        CHEATMODE_MIRROR,    /* Cheat to activate */
 
 
156
    },
 
 
157
    {
 
 
158
        {    /* Invasion_A */
 
 
159
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
160
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
161
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
162
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
163
            -1,        /* Shots Fired */
 
 
164
            -1,        /* Accuracy */
 
 
165
            -1,        /* Spotted */
 
 
166
            0,        /* Total Seconds (unsigned!) */
 
 
167
            0,        /* Total Minutes (unsigned!) */
 
 
168
            -1,        /* Total Hours */
 
 
169
            0,        /* Cloaked Seconds */
 
 
170
            0,        /* Cloaked Minutes */
 
 
171
            -1,        /* Cloaked Hours */
 
 
172
            -1,        /* Health Damage */
 
 
173
            -1,        /* Armour Damage */
 
 
174
            -1,        /* Average Speed */
 
 
175
            -1,        /* Field Charge Used */
 
 
176
            -1        /* Head Shot Percentage */
 
 
177
        },
 
 
178
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
179
    },
 
 
180
    {
 
 
181
        {    /* Derelict_A */
 
 
182
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
183
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
184
            {-1,-1,-1,-1,-1,-1,-1,20,-1,-1,},    /* Trophies / Live Head Bites */
 
 
185
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
186
            -1,        /* Shots Fired */
 
 
187
            -1,        /* Accuracy */
 
 
188
            -1,        /* Spotted */
 
 
189
            0,        /* Total Seconds (unsigned!) */
 
 
190
            0,        /* Total Minutes (unsigned!) */
 
 
191
            -1,        /* Total Hours */
 
 
192
            0,        /* Cloaked Seconds */
 
 
193
            0,        /* Cloaked Minutes */
 
 
194
            -1,        /* Cloaked Hours */
 
 
195
            -1,        /* Health Damage */
 
 
196
            -1,        /* Armour Damage */
 
 
197
            -1,        /* Average Speed */
 
 
198
            -1,        /* Field Charge Used */
 
 
199
            -1        /* Head Shot Percentage */
 
 
200
        },
 
 
201
        CHEATMODE_RANDOMTEXTURES,    /* Cheat to activate */
 
 
202
    },
 
 
203
    {
 
 
204
        {    /* Tyrago_A */
 
 
205
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
206
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
207
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
208
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
209
            -1,        /* Shots Fired */
 
 
210
            -1,        /* Accuracy */
 
 
211
            -1,        /* Spotted */
 
 
212
            0,        /* Total Seconds (unsigned!) */
 
 
213
            0,        /* Total Minutes (unsigned!) */
 
 
214
            -1,        /* Total Hours */
 
 
215
            0,        /* Cloaked Seconds */
 
 
216
            0,        /* Cloaked Minutes */
 
 
217
            -1,        /* Cloaked Hours */
 
 
218
            -1,        /* Health Damage */
 
 
219
            -1,        /* Armour Damage */
 
 
220
            -1,        /* Average Speed */
 
 
221
            -1,        /* Field Charge Used */
 
 
222
            -1        /* Head Shot Percentage */
 
 
223
        },
 
 
224
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
225
    },
 
 
226
    {
 
 
227
        {    /* Caverns_A */
 
 
228
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
229
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
230
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
231
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
232
            -1,        /* Shots Fired */
 
 
233
            -1,        /* Accuracy */
 
 
234
            -1,        /* Spotted */
 
 
235
            0,        /* Total Seconds (unsigned!) */
 
 
236
            0,        /* Total Minutes (unsigned!) */
 
 
237
            -1,        /* Total Hours */
 
 
238
            0,        /* Cloaked Seconds */
 
 
239
            0,        /* Cloaked Minutes */
 
 
240
            -1,        /* Cloaked Hours */
 
 
241
            -1,        /* Health Damage */
 
 
242
            -1,        /* Armour Damage */
 
 
243
            -1,        /* Average Speed */
 
 
244
            -1,        /* Field Charge Used */
 
 
245
            -1        /* Head Shot Percentage */
 
 
246
        },
 
 
247
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
248
    },
 
 
249
    {
 
 
250
        {    /* Fury161_A */
 
 
251
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
252
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
253
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
254
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
255
            -1,        /* Shots Fired */
 
 
256
            -1,        /* Accuracy */
 
 
257
            -1,        /* Spotted */
 
 
258
            0,        /* Total Seconds (unsigned!) */
 
 
259
            0,        /* Total Minutes (unsigned!) */
 
 
260
            -1,        /* Total Hours */
 
 
261
            0,        /* Cloaked Seconds */
 
 
262
            0,        /* Cloaked Minutes */
 
 
263
            -1,        /* Cloaked Hours */
 
 
264
            -1,        /* Health Damage */
 
 
265
            -1,        /* Armour Damage */
 
 
266
            -1,        /* Average Speed */
 
 
267
            -1,        /* Field Charge Used */
 
 
268
            -1        /* Head Shot Percentage */
 
 
269
        },
 
 
270
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
271
    },
 
 
272
},
 
 
273
{
 
 
274
    {
 
 
275
        {    /* Derelict */
 
 
276
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
277
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
278
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
279
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
280
            -1,        /* Shots Fired */
 
 
281
            -1,        /* Accuracy */
 
 
282
            -1,        /* Spotted */
 
 
283
            0,        /* Total Seconds (unsigned!) */
 
 
284
            0,        /* Total Minutes (unsigned!) */
 
 
285
            -1,        /* Total Hours */
 
 
286
            0,        /* Cloaked Seconds */
 
 
287
            0,        /* Cloaked Minutes */
 
 
288
            -1,        /* Cloaked Hours */
 
 
289
            -1,        /* Health Damage */
 
 
290
            -1,        /* Armour Damage */
 
 
291
            -1,        /* Average Speed */
 
 
292
            -1,        /* Field Charge Used */
 
 
293
            80        /* Head Shot Percentage */
 
 
294
        },
 
 
295
        CHEATMODE_JOHNWOO,    /* Cheat to activate */
 
 
296
    },
 
 
297
    {
 
 
298
        {    /* Colony */
 
 
299
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
300
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
301
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
302
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
303
            -1,        /* Shots Fired */
 
 
304
            40,        /* Accuracy */
 
 
305
            -1,        /* Spotted */
 
 
306
            0,        /* Total Seconds (unsigned!) */
 
 
307
            0,        /* Total Minutes (unsigned!) */
 
 
308
            -1,        /* Total Hours */
 
 
309
            0,        /* Cloaked Seconds */
 
 
310
            0,        /* Cloaked Minutes */
 
 
311
            -1,        /* Cloaked Hours */
 
 
312
            -1,        /* Health Damage */
 
 
313
            -1,        /* Armour Damage */
 
 
314
            -1,        /* Average Speed */
 
 
315
            -1,        /* Field Charge Used */
 
 
316
            -1        /* Head Shot Percentage */
 
 
317
        },
 
 
318
        CHEATMODE_GRENADE,    /* Cheat to activate */
 
 
319
    },
 
 
320
    {
 
 
321
        {    /* Invasion */
 
 
322
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
323
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
324
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
325
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
326
            -1,        /* Shots Fired */
 
 
327
            -1,        /* Accuracy */
 
 
328
            -1,        /* Spotted */
 
 
329
            0,        /* Total Seconds (unsigned!) */
 
 
330
            4,        /* Total Minutes (unsigned!) */
 
 
331
            0,        /* Total Hours */
 
 
332
            0,        /* Cloaked Seconds */
 
 
333
            0,        /* Cloaked Minutes */
 
 
334
            -1,        /* Cloaked Hours */
 
 
335
            -1,        /* Health Damage */
 
 
336
            -1,        /* Armour Damage */
 
 
337
            -1,        /* Average Speed */
 
 
338
            -1,        /* Field Charge Used */
 
 
339
            -1        /* Head Shot Percentage */
 
 
340
        },
 
 
341
        CHEATMODE_WARPSPEED,    /* Cheat to activate */
 
 
342
    },
 
 
343
    {
 
 
344
        {    /* Orbital */
 
 
345
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
346
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
347
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
348
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
349
            20,        /* Shots Fired */
 
 
350
            -1,        /* Accuracy */
 
 
351
            -1,        /* Spotted */
 
 
352
            0,        /* Total Seconds (unsigned!) */
 
 
353
            0,        /* Total Minutes (unsigned!) */
 
 
354
            -1,        /* Total Hours */
 
 
355
            0,        /* Cloaked Seconds */
 
 
356
            0,        /* Cloaked Minutes */
 
 
357
            -1,        /* Cloaked Hours */
 
 
358
            -1,        /* Health Damage */
 
 
359
            -1,        /* Armour Damage */
 
 
360
            -1,        /* Average Speed */
 
 
361
            -1,        /* Field Charge Used */
 
 
362
            -1        /* Head Shot Percentage */
 
 
363
        },
 
 
364
        CHEATMODE_LANDOFTHEGIANTS,    /* Cheat to activate */
 
 
365
    },
 
 
366
    {
 
 
367
        {    /* Tyrago */
 
 
368
            {-1,32,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
369
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
370
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
371
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
372
            -1,        /* Shots Fired */
 
 
373
            -1,        /* Accuracy */
 
 
374
            -1,        /* Spotted */
 
 
375
            0,        /* Total Seconds (unsigned!) */
 
 
376
            0,        /* Total Minutes (unsigned!) */
 
 
377
            -1,        /* Total Hours */
 
 
378
            0,        /* Cloaked Seconds */
 
 
379
            0,        /* Cloaked Minutes */
 
 
380
            -1,        /* Cloaked Hours */
 
 
381
            -1,        /* Health Damage */
 
 
382
            -1,        /* Armour Damage */
 
 
383
            -1,        /* Average Speed */
 
 
384
            -1,        /* Field Charge Used */
 
 
385
            -1        /* Head Shot Percentage */
 
 
386
        },
 
 
387
        CHEATMODE_SLUGTRAIL,    /* Cheat to activate */
 
 
388
    },
 
 
389
    {
 
 
390
        {    /* Tyrago Hangar */
 
 
391
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
392
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
393
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
394
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
395
            -1,        /* Shots Fired */
 
 
396
            -1,        /* Accuracy */
 
 
397
            -1,        /* Spotted */
 
 
398
            0,        /* Total Seconds (unsigned!) */
 
 
399
            0,        /* Total Minutes (unsigned!) */
 
 
400
            -1,        /* Total Hours */
 
 
401
            0,        /* Cloaked Seconds */
 
 
402
            0,        /* Cloaked Minutes */
 
 
403
            -1,        /* Cloaked Hours */
 
 
404
            -1,        /* Health Damage */
 
 
405
            -1,        /* Armour Damage */
 
 
406
            -1,        /* Average Speed */
 
 
407
            -1,        /* Field Charge Used */
 
 
408
            -1        /* Head Shot Percentage */
 
 
409
        },
 
 
410
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
411
    },
 
 
412
    {
 
 
413
        {    /* Temple_M */
 
 
414
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
415
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
416
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
417
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
418
            -1,        /* Shots Fired */
 
 
419
            -1,        /* Accuracy */
 
 
420
            -1,        /* Spotted */
 
 
421
            0,        /* Total Seconds (unsigned!) */
 
 
422
            0,        /* Total Minutes (unsigned!) */
 
 
423
            -1,        /* Total Hours */
 
 
424
            0,        /* Cloaked Seconds */
 
 
425
            0,        /* Cloaked Minutes */
 
 
426
            -1,        /* Cloaked Hours */
 
 
427
            100,        /* Health Damage */
 
 
428
            -1,        /* Armour Damage */
 
 
429
            -1,        /* Average Speed */
 
 
430
            -1,        /* Field Charge Used */
 
 
431
            -1        /* Head Shot Percentage */
 
 
432
        },
 
 
433
        CHEATMODE_FREEFALL,    /* Cheat to activate */
 
 
434
    },
 
 
435
    {
 
 
436
        {    /* Vaults_M */
 
 
437
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
438
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
439
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
440
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
441
            -1,        /* Shots Fired */
 
 
442
            -1,        /* Accuracy */
 
 
443
            -1,        /* Spotted */
 
 
444
            0,        /* Total Seconds (unsigned!) */
 
 
445
            0,        /* Total Minutes (unsigned!) */
 
 
446
            -1,        /* Total Hours */
 
 
447
            0,        /* Cloaked Seconds */
 
 
448
            0,        /* Cloaked Minutes */
 
 
449
            -1,        /* Cloaked Hours */
 
 
450
            60,        /* Health Damage */
 
 
451
            -1,        /* Armour Damage */
 
 
452
            -1,        /* Average Speed */
 
 
453
            -1,        /* Field Charge Used */
 
 
454
            -1        /* Head Shot Percentage */
 
 
455
        },
 
 
456
        CHEATMODE_UNDERWATER,    /* Cheat to activate */
 
 
457
    },
 
 
458
    {
 
 
459
        {    /* Feraco_M */
 
 
460
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
461
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
462
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
463
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
464
            -1,        /* Shots Fired */
 
 
465
            -1,        /* Accuracy */
 
 
466
            -1,        /* Spotted */
 
 
467
            0,        /* Total Seconds (unsigned!) */
 
 
468
            0,        /* Total Minutes (unsigned!) */
 
 
469
            -1,        /* Total Hours */
 
 
470
            0,        /* Cloaked Seconds */
 
 
471
            0,        /* Cloaked Minutes */
 
 
472
            -1,        /* Cloaked Hours */
 
 
473
            -1,        /* Health Damage */
 
 
474
            -1,        /* Armour Damage */
 
 
475
            -1,        /* Average Speed */
 
 
476
            -1,        /* Field Charge Used */
 
 
477
            -1        /* Head Shot Percentage */
 
 
478
        },
 
 
479
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
480
    },
 
 
481
    {
 
 
482
        {    /* Gateway_M */
 
 
483
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
484
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
485
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
486
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
487
            -1,        /* Shots Fired */
 
 
488
            -1,        /* Accuracy */
 
 
489
            -1,        /* Spotted */
 
 
490
            0,        /* Total Seconds (unsigned!) */
 
 
491
            0,        /* Total Minutes (unsigned!) */
 
 
492
            -1,        /* Total Hours */
 
 
493
            0,        /* Cloaked Seconds */
 
 
494
            0,        /* Cloaked Minutes */
 
 
495
            -1,        /* Cloaked Hours */
 
 
496
            -1,        /* Health Damage */
 
 
497
            -1,        /* Armour Damage */
 
 
498
            -1,        /* Average Speed */
 
 
499
            -1,        /* Field Charge Used */
 
 
500
            -1        /* Head Shot Percentage */
 
 
501
        },
 
 
502
        CHEATMODE_DRAWFULLBRIGHT,    /* Cheat to activate */
 
 
503
    },
 
 
504
    {
 
 
505
        {    /* Waterfall_M */
 
 
506
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
507
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
508
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
509
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
510
            -1,        /* Shots Fired */
 
 
511
            -1,        /* Accuracy */
 
 
512
            -1,        /* Spotted */
 
 
513
            0,        /* Total Seconds (unsigned!) */
 
 
514
            0,        /* Total Minutes (unsigned!) */
 
 
515
            -1,        /* Total Hours */
 
 
516
            0,        /* Cloaked Seconds */
 
 
517
            0,        /* Cloaked Minutes */
 
 
518
            -1,        /* Cloaked Hours */
 
 
519
            -1,        /* Health Damage */
 
 
520
            -1,        /* Armour Damage */
 
 
521
            -1,        /* Average Speed */
 
 
522
            -1,        /* Field Charge Used */
 
 
523
            -1        /* Head Shot Percentage */
 
 
524
        },
 
 
525
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
526
    },
 
 
527
},
 
 
528
{
 
 
529
    {
 
 
530
        {    /* Waterfall */
 
 
531
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
532
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
533
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
534
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
535
            -1,        /* Shots Fired */
 
 
536
            80,        /* Accuracy */
 
 
537
            -1,        /* Spotted */
 
 
538
            0,        /* Total Seconds (unsigned!) */
 
 
539
            0,        /* Total Minutes (unsigned!) */
 
 
540
            -1,        /* Total Hours */
 
 
541
            0,        /* Cloaked Seconds */
 
 
542
            0,        /* Cloaked Minutes */
 
 
543
            -1,        /* Cloaked Hours */
 
 
544
            -1,        /* Health Damage */
 
 
545
            -1,        /* Armour Damage */
 
 
546
            -1,        /* Average Speed */
 
 
547
            -1,        /* Field Charge Used */
 
 
548
            -1        /* Head Shot Percentage */
 
 
549
        },
 
 
550
        CHEATMODE_PIGSTICKING,    /* Cheat to activate */
 
 
551
    },
 
 
552
    {
 
 
553
        {    /* Area52 */
 
 
554
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
555
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
556
            {-1,-1,-1,-1,-1,-1,-1,25,-1,-1,},    /* Trophies / Live Head Bites */
 
 
557
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
558
            -1,        /* Shots Fired */
 
 
559
            -1,        /* Accuracy */
 
 
560
            -1,        /* Spotted */
 
 
561
            0,        /* Total Seconds (unsigned!) */
 
 
562
            0,        /* Total Minutes (unsigned!) */
 
 
563
            -1,        /* Total Hours */
 
 
564
            0,        /* Cloaked Seconds */
 
 
565
            0,        /* Cloaked Minutes */
 
 
566
            -1,        /* Cloaked Hours */
 
 
567
            -1,        /* Health Damage */
 
 
568
            -1,        /* Armour Damage */
 
 
569
            -1,        /* Average Speed */
 
 
570
            -1,        /* Field Charge Used */
 
 
571
            -1        /* Head Shot Percentage */
 
 
572
        },
 
 
573
        CHEATMODE_SUPERGORE,    /* Cheat to activate */
 
 
574
    },
 
 
575
    {
 
 
576
        {    /* Vaults */
 
 
577
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
578
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
579
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
580
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
581
            -1,        /* Shots Fired */
 
 
582
            -1,        /* Accuracy */
 
 
583
            -1,        /* Spotted */
 
 
584
            0,        /* Total Seconds (unsigned!) */
 
 
585
            0,        /* Total Minutes (unsigned!) */
 
 
586
            -1,        /* Total Hours */
 
 
587
            0,        /* Cloaked Seconds */
 
 
588
            0,        /* Cloaked Minutes */
 
 
589
            -1,        /* Cloaked Hours */
 
 
590
            100,        /* Health Damage */
 
 
591
            -1,        /* Armour Damage */
 
 
592
            -1,        /* Average Speed */
 
 
593
            -1,        /* Field Charge Used */
 
 
594
            -1        /* Head Shot Percentage */
 
 
595
        },
 
 
596
        CHEATMODE_DISCOINFERNO,    /* Cheat to activate */
 
 
597
    },
 
 
598
    {
 
 
599
        {    /* Fury161 */
 
 
600
            {-1,40,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
601
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
602
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
603
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
604
            -1,        /* Shots Fired */
 
 
605
            -1,        /* Accuracy */
 
 
606
            -1,        /* Spotted */
 
 
607
            0,        /* Total Seconds (unsigned!) */
 
 
608
            0,        /* Total Minutes (unsigned!) */
 
 
609
            -1,        /* Total Hours */
 
 
610
            0,        /* Cloaked Seconds */
 
 
611
            0,        /* Cloaked Minutes */
 
 
612
            -1,        /* Cloaked Hours */
 
 
613
            -1,        /* Health Damage */
 
 
614
            -1,        /* Armour Damage */
 
 
615
            -1,        /* Average Speed */
 
 
616
            -1,        /* Field Charge Used */
 
 
617
            -1        /* Head Shot Percentage */
 
 
618
        },
 
 
619
        CHEATMODE_BALLSOFFIRE,    /* Cheat to activate */
 
 
620
    },
 
 
621
    {
 
 
622
        {    /* Caverns */
 
 
623
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
624
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
625
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
626
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
627
            -1,        /* Shots Fired */
 
 
628
            -1,        /* Accuracy */
 
 
629
            15,        /* Spotted */
 
 
630
            0,        /* Total Seconds (unsigned!) */
 
 
631
            0,        /* Total Minutes (unsigned!) */
 
 
632
            -1,        /* Total Hours */
 
 
633
            0,        /* Cloaked Seconds */
 
 
634
            0,        /* Cloaked Minutes */
 
 
635
            -1,        /* Cloaked Hours */
 
 
636
            -1,        /* Health Damage */
 
 
637
            -1,        /* Armour Damage */
 
 
638
            -1,        /* Average Speed */
 
 
639
            -1,        /* Field Charge Used */
 
 
640
            -1        /* Head Shot Percentage */
 
 
641
        },
 
 
642
        CHEATMODE_RAINBOWBLOOD,    /* Cheat to activate */
 
 
643
    },
 
 
644
    {
 
 
645
        {    /* CavernsEnd */
 
 
646
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
647
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
648
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
649
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
650
            -1,        /* Shots Fired */
 
 
651
            -1,        /* Accuracy */
 
 
652
            -1,        /* Spotted */
 
 
653
            0,        /* Total Seconds (unsigned!) */
 
 
654
            0,        /* Total Minutes (unsigned!) */
 
 
655
            -1,        /* Total Hours */
 
 
656
            0,        /* Cloaked Seconds */
 
 
657
            0,        /* Cloaked Minutes */
 
 
658
            -1,        /* Cloaked Hours */
 
 
659
            -1,        /* Health Damage */
 
 
660
            -1,        /* Armour Damage */
 
 
661
            -1,        /* Average Speed */
 
 
662
            -1,        /* Field Charge Used */
 
 
663
            -1        /* Head Shot Percentage */
 
 
664
        },
 
 
665
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
666
    },
 
 
667
    {
 
 
668
        {    /* Invasion_P */
 
 
669
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
670
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
671
            {-1,15,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
672
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
673
            -1,        /* Shots Fired */
 
 
674
            -1,        /* Accuracy */
 
 
675
            -1,        /* Spotted */
 
 
676
            0,        /* Total Seconds (unsigned!) */
 
 
677
            0,        /* Total Minutes (unsigned!) */
 
 
678
            -1,        /* Total Hours */
 
 
679
            0,        /* Cloaked Seconds */
 
 
680
            0,        /* Cloaked Minutes */
 
 
681
            -1,        /* Cloaked Hours */
 
 
682
            -1,        /* Health Damage */
 
 
683
            -1,        /* Armour Damage */
 
 
684
            -1,        /* Average Speed */
 
 
685
            -1,        /* Field Charge Used */
 
 
686
            -1        /* Head Shot Percentage */
 
 
687
        },
 
 
688
        CHEATMODE_TICKERTAPE,    /* Cheat to activate */
 
 
689
    },
 
 
690
    {
 
 
691
        {    /* Escape_P */
 
 
692
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
693
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
694
            {-1,-1,-1,-1,-1,-1,-1,-1,10,-1,},    /* Trophies / Live Head Bites */
 
 
695
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
696
            -1,        /* Shots Fired */
 
 
697
            -1,        /* Accuracy */
 
 
698
            -1,        /* Spotted */
 
 
699
            0,        /* Total Seconds (unsigned!) */
 
 
700
            0,        /* Total Minutes (unsigned!) */
 
 
701
            -1,        /* Total Hours */
 
 
702
            0,        /* Cloaked Seconds */
 
 
703
            0,        /* Cloaked Minutes */
 
 
704
            -1,        /* Cloaked Hours */
 
 
705
            -1,        /* Health Damage */
 
 
706
            -1,        /* Armour Damage */
 
 
707
            -1,        /* Average Speed */
 
 
708
            -1,        /* Field Charge Used */
 
 
709
            -1        /* Head Shot Percentage */
 
 
710
        },
 
 
711
        CHEATMODE_TRIPTASTIC,    /* Cheat to activate */
 
 
712
    },
 
 
713
    {
 
 
714
        {    /* Temple_P */
 
 
715
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
716
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
717
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
718
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
719
            -1,        /* Shots Fired */
 
 
720
            -1,        /* Accuracy */
 
 
721
            -1,        /* Spotted */
 
 
722
            0,        /* Total Seconds (unsigned!) */
 
 
723
            0,        /* Total Minutes (unsigned!) */
 
 
724
            -1,        /* Total Hours */
 
 
725
            0,        /* Cloaked Seconds */
 
 
726
            0,        /* Cloaked Minutes */
 
 
727
            -1,        /* Cloaked Hours */
 
 
728
            -1,        /* Health Damage */
 
 
729
            -1,        /* Armour Damage */
 
 
730
            -1,        /* Average Speed */
 
 
731
            -1,        /* Field Charge Used */
 
 
732
            -1        /* Head Shot Percentage */
 
 
733
        },
 
 
734
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
735
    },
 
 
736
    {
 
 
737
        {    /* Earthbound_P */
 
 
738
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
739
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
740
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
741
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
742
            -1,        /* Shots Fired */
 
 
743
            -1,        /* Accuracy */
 
 
744
            -1,        /* Spotted */
 
 
745
            0,        /* Total Seconds (unsigned!) */
 
 
746
            0,        /* Total Minutes (unsigned!) */
 
 
747
            -1,        /* Total Hours */
 
 
748
            0,        /* Cloaked Seconds */
 
 
749
            0,        /* Cloaked Minutes */
 
 
750
            -1,        /* Cloaked Hours */
 
 
751
            -1,        /* Health Damage */
 
 
752
            -1,        /* Armour Damage */
 
 
753
            -1,        /* Average Speed */
 
 
754
            -1,        /* Field Charge Used */
 
 
755
            -1        /* Head Shot Percentage */
 
 
756
        },
 
 
757
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
758
    },
 
 
759
    {
 
 
760
        {    /* Tyrago_P */
 
 
761
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures Killed */
 
 
762
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Creatures decapitated*/
 
 
763
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Trophies / Live Head Bites */
 
 
764
            {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},    /* Dead Head Bites */
 
 
765
            -1,        /* Shots Fired */
 
 
766
            -1,        /* Accuracy */
 
 
767
            -1,        /* Spotted */
 
 
768
            0,        /* Total Seconds (unsigned!) */
 
 
769
            0,        /* Total Minutes (unsigned!) */
 
 
770
            -1,        /* Total Hours */
 
 
771
            0,        /* Cloaked Seconds */
 
 
772
            0,        /* Cloaked Minutes */
 
 
773
            -1,        /* Cloaked Hours */
 
 
774
            -1,        /* Health Damage */
 
 
775
            -1,        /* Armour Damage */
 
 
776
            -1,        /* Average Speed */
 
 
777
            -1,        /* Field Charge Used */
 
 
778
            -1        /* Head Shot Percentage */
 
 
779
        },
 
 
780
        CHEATMODE_NONACTIVE,    /* Cheat to activate */
 
 
781
    }
 
 
782
}
 
 
783
};
 
 
784
 
 
 
785
void CurrentGameStats_Initialise()
 
 
786
{
 
 
787
    int i;
 
 
788
    for (i=0; i < STATS_VICTIM_MAXIMUM; i++)
 
 
789
    {
 
 
790
        CurrentGameStatistics.Killed[i] = 0;
 
 
791
        CurrentGameStatistics.Decapitated[i] = 0;
 
 
792
        CurrentGameStatistics.Trophies[i] = 0;
 
 
793
        CurrentGameStatistics.LiveHeadBites[i] = 0;
 
 
794
        CurrentGameStatistics.DeadHeadBites[i] = 0;
 
 
795
    }
 
 
796
 
 
 
797
    for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
798
    {
 
 
799
        CurrentGameStatistics.WeaponTimes[i] = 0;
 
 
800
        CurrentGameStatistics.ShotsFired[i] = 0;
 
 
801
        CurrentGameStatistics.ShotsHit[i] = 0;
 
 
802
    }
 
 
803
 
 
 
804
    for (i=0; i < NUMBER_OF_VISION_MODES; i++)
 
 
805
        CurrentGameStatistics.VisionModeTimes[i] = 0;
 
 
806
 
 
 
807
    CurrentGameStatistics.Spotted = 0;
 
 
808
 
 
 
809
    CurrentGameStatistics.Cloak_ElapsedSeconds = 0;
 
 
810
    CurrentGameStatistics.Cloak_ElapsedMinutes = 0;
 
 
811
    CurrentGameStatistics.Cloak_ElapsedHours = 0;
 
 
812
    CurrentGameStatistics.FieldChargeUsed = 0;
 
 
813
 
 
 
814
    CurrentGameStatistics.HealthDamage = 0;
 
 
815
    CurrentGameStatistics.ArmourDamage = 0;
 
 
816
    CurrentGameStatistics.IntegralSpeed = 0;
 
 
817
 
 
 
818
    AvP.ElapsedSeconds = 0;
 
 
819
    AvP.ElapsedMinutes = 0;
 
 
820
    AvP.ElapsedHours = 0;
 
 
821
}
 
 
822
 
 
 
823
void CurrentGameStats_SpeedSample(unsigned int speed,unsigned int time)
 
 
824
{
 
 
825
    CurrentGameStatistics.IntegralSpeed += MUL_FIXED(speed, time);
 
 
826
}
 
 
827
 
 
 
828
void CurrentGameStats_DamageTaken(unsigned int health,unsigned int armour)
 
 
829
{
 
 
830
    CurrentGameStatistics.HealthDamage += health;
 
 
831
    CurrentGameStatistics.ArmourDamage += armour;
 
 
832
}
 
 
833
 
 
 
834
void CurrentGameStats_ChargeUsed(unsigned int charge)
 
 
835
{
 
 
836
    if (PlayerStatus.Alive)
 
 
837
    CurrentGameStatistics.FieldChargeUsed += charge;
 
 
838
}
 
 
839
 
 
 
840
void CurrentGameStats_VisionMode(enum VISION_MODE_ID mode)
 
 
841
{
 
 
842
    CurrentGameStatistics.VisionModeTimes[mode] += NormalFrameTime;
 
 
843
}
 
 
844
 
 
 
845
void CurrentGameStats_CloakOn()
 
 
846
{
 
 
847
    CurrentGameStatistics.Cloak_ElapsedSeconds += NormalFrameTime;
 
 
848
 
 
 
849
    if(CurrentGameStatistics.Cloak_ElapsedSeconds  >= FIXED_MINUTE)
 
 
850
    {
 
 
851
        CurrentGameStatistics.Cloak_ElapsedSeconds -= FIXED_MINUTE;
 
 
852
        CurrentGameStatistics.Cloak_ElapsedMinutes ++;
 
 
853
    }
 
 
854
 
 
 
855
    if(CurrentGameStatistics.Cloak_ElapsedMinutes >= 60)
 
 
856
    {
 
 
857
        CurrentGameStatistics.Cloak_ElapsedMinutes -= 60;
 
 
858
        CurrentGameStatistics.Cloak_ElapsedHours ++;
 
 
859
    }        
 
 
860
}
 
 
861
 
 
 
862
void CurrentGameStats_WeaponFired(enum WEAPON_SLOT slot,unsigned int rounds)
 
 
863
{
 
 
864
    CurrentGameStatistics.ShotsFired[slot] += rounds;
 
 
865
}
 
 
866
 
 
 
867
void CurrentGameStats_WeaponHit(enum WEAPON_SLOT slot, unsigned int rounds)
 
 
868
{
 
 
869
    CurrentGameStatistics.ShotsHit[slot] += rounds;
 
 
870
}
 
 
871
 
 
 
872
void CurrentGameStats_UsingWeapon(enum WEAPON_SLOT slot)
 
 
873
{
 
 
874
    CurrentGameStatistics.WeaponTimes[slot]+=NormalFrameTime;
 
 
875
}
 
 
876
 
 
 
877
void CurrentGameStats_Spotted()
 
 
878
{
 
 
879
    if (PlayerStatus.Alive)
 
 
880
    CurrentGameStatistics.Spotted++;
 
 
881
}
 
 
882
 
 
 
883
void CurrentGameStats_HeadBitten(STRATEGYBLOCK *sbPtr)
 
 
884
{
 
 
885
    switch (sbPtr->type)
 
 
886
    {
 
 
887
        case I_BehaviourMarine:
 
 
888
        {
 
 
889
            assert(sbPtr);
 
 
890
            assert(sbPtr->containingModule); 
 
 
891
            MARINE_STATUS_BLOCK *marineStatusPointer = (MARINE_STATUS_BLOCK *)(sbPtr->dataptr);    
 
 
892
 
 
 
893
            if (marineStatusPointer->My_Weapon->Android)
 
 
894
            {
 
 
895
                CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_ANDROID]++;
 
 
896
            }
 
 
897
            else if (marineStatusPointer->My_Weapon->ARealMarine)
 
 
898
            {
 
 
899
                CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_MARINE]++;
 
 
900
            }
 
 
901
            else
 
 
902
            {
 
 
903
                CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_CIVILIAN]++;
 
 
904
            }
 
 
905
        }
 
 
906
        break;
 
 
907
        case I_BehaviourXenoborg:
 
 
908
        {
 
 
909
            CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_XENOBORG]++;
 
 
910
            break;
 
 
911
        }
 
 
912
        case I_BehaviourPredator:
 
 
913
        {
 
 
914
            CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_PREDATOR]++;
 
 
915
            break;
 
 
916
        }
 
 
917
        case I_BehaviourCorpse:
 
 
918
        {
 
 
919
            CORPSEDATABLOCK *corpseDataPtr = (CORPSEDATABLOCK *)sbPtr->dataptr;
 
 
920
 
 
 
921
            switch (corpseDataPtr->Type)
 
 
922
            {
 
 
923
                case I_BehaviourAlien:
 
 
924
                {
 
 
925
                    switch (corpseDataPtr->subtype)
 
 
926
                    {
 
 
927
                        case 0:
 
 
928
                        default:
 
 
929
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_XENOMORPH]++;
 
 
930
                            break;
 
 
931
                        case 1:
 
 
932
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_PREDALIEN]++;
 
 
933
                            break;
 
 
934
                        case 2:
 
 
935
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_PRAETORIAN]++;
 
 
936
                    }
 
 
937
                }
 
 
938
                break;
 
 
939
                case I_BehaviourMarine:
 
 
940
                {
 
 
941
                    switch (corpseDataPtr->subtype)
 
 
942
                    {
 
 
943
                        case -1:
 
 
944
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_ANDROID]++;
 
 
945
                        default:
 
 
946
                            break;
 
 
947
                        case 0:
 
 
948
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_CIVILIAN]++;
 
 
949
                            break;
 
 
950
                        case 1:
 
 
951
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_MARINE]++;
 
 
952
                    }
 
 
953
                }
 
 
954
                break;
 
 
955
                case I_BehaviourXenoborg:
 
 
956
                    CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_XENOBORG]++;
 
 
957
                break;
 
 
958
                case I_BehaviourPredator:
 
 
959
                    CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_PREDATOR]++;
 
 
960
                default:
 
 
961
                    break;
 
 
962
            }
 
 
963
        }
 
 
964
        break;
 
 
965
        case I_BehaviourNetGhost:
 
 
966
        {
 
 
967
            NETGHOSTDATABLOCK *ghostData = (NETGHOSTDATABLOCK *)sbPtr->dataptr;
 
 
968
 
 
 
969
            switch (ghostData->type)
 
 
970
            {
 
 
971
                case I_BehaviourMarinePlayer:
 
 
972
                    CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_MARINE]++;
 
 
973
                break;
 
 
974
                case I_BehaviourAlienPlayer:
 
 
975
                    CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_XENOMORPH]++;
 
 
976
                break;
 
 
977
                case I_BehaviourPredatorPlayer:
 
 
978
                    CurrentGameStatistics.LiveHeadBites[STATS_VICTIM_PREDATOR]++;
 
 
979
                break;
 
 
980
                case I_BehaviourCorpse:
 
 
981
                {
 
 
982
                    switch (ghostData->subtype)
 
 
983
                    {
 
 
984
                        case I_BehaviourAlien:
 
 
985
                        {
 
 
986
                            switch (ghostData->IOType)
 
 
987
                            {
 
 
988
                                /* Hey ho, it was free... */
 
 
989
                                case 0:
 
 
990
                                default:
 
 
991
                                    CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_XENOMORPH]++;
 
 
992
                                break;
 
 
993
                                case 1:
 
 
994
                                    CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_PREDALIEN]++;
 
 
995
                                break;
 
 
996
                                case 2:
 
 
997
                                    CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_PRAETORIAN]++;
 
 
998
                                break;
 
 
999
                            }
 
 
1000
                        }
 
 
1001
                        break;
 
 
1002
                        case I_BehaviourMarinePlayer:
 
 
1003
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_MARINE]++;
 
 
1004
                        break;
 
 
1005
                        case I_BehaviourAlienPlayer:
 
 
1006
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_XENOMORPH]++;
 
 
1007
                        break;
 
 
1008
                        case I_BehaviourPredatorPlayer:
 
 
1009
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_PREDATOR]++;
 
 
1010
                        default:
 
 
1011
                            break;
 
 
1012
                    }
 
 
1013
                }
 
 
1014
                default:
 
 
1015
                    break;
 
 
1016
            }
 
 
1017
        }
 
 
1018
        default:
 
 
1019
            break;
 
 
1020
    }
 
 
1021
}
 
 
1022
 
 
 
1023
void CurrentGameStats_TrophyCollected(STRATEGYBLOCK *sbPtr)
 
 
1024
{
 
 
1025
    /* It's always going to be a corpse or a ghost, isn't it? */
 
 
1026
 
 
 
1027
    switch (sbPtr->type)
 
 
1028
    {
 
 
1029
        case I_BehaviourCorpse:
 
 
1030
        {
 
 
1031
            CORPSEDATABLOCK *corpseDataPtr = (CORPSEDATABLOCK *)sbPtr->dataptr;
 
 
1032
 
 
 
1033
            switch (corpseDataPtr->Type)
 
 
1034
            {
 
 
1035
                case I_BehaviourAlien:
 
 
1036
                {
 
 
1037
                    switch (corpseDataPtr->subtype)
 
 
1038
                    {
 
 
1039
                        case 0:
 
 
1040
                        default:
 
 
1041
                            CurrentGameStatistics.Trophies[STATS_VICTIM_XENOMORPH]++;
 
 
1042
                        break;
 
 
1043
                        case 1:
 
 
1044
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PREDALIEN]++;
 
 
1045
                        break;
 
 
1046
                        case 2:
 
 
1047
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PRAETORIAN]++;
 
 
1048
                    }
 
 
1049
                }
 
 
1050
                break;
 
 
1051
                case I_BehaviourMarine:
 
 
1052
                {
 
 
1053
                    switch (corpseDataPtr->subtype)
 
 
1054
                    {
 
 
1055
                        case -1:
 
 
1056
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_ANDROID]++;
 
 
1057
                        default:
 
 
1058
                            break;
 
 
1059
                        case 0:
 
 
1060
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_CIVILIAN]++;
 
 
1061
                            break;
 
 
1062
                        case 1:
 
 
1063
                            CurrentGameStatistics.DeadHeadBites[STATS_VICTIM_MARINE]++;
 
 
1064
                    }
 
 
1065
                }
 
 
1066
                break;
 
 
1067
                case I_BehaviourQueenAlien:
 
 
1068
                    CurrentGameStatistics.Trophies[STATS_VICTIM_QUEEN]++;
 
 
1069
                break;
 
 
1070
                case I_BehaviourFaceHugger:
 
 
1071
                    CurrentGameStatistics.Trophies[STATS_VICTIM_FACEHUGGER]++;
 
 
1072
                break;
 
 
1073
                case I_BehaviourXenoborg:
 
 
1074
                    CurrentGameStatistics.Trophies[STATS_VICTIM_XENOBORG]++;
 
 
1075
                break;
 
 
1076
                case I_BehaviourPredator:
 
 
1077
                    CurrentGameStatistics.Trophies[STATS_VICTIM_PREDATOR]++;
 
 
1078
                break;
 
 
1079
                default:
 
 
1080
                    break;
 
 
1081
            }
 
 
1082
        }
 
 
1083
        break;
 
 
1084
        case I_BehaviourNetGhost:
 
 
1085
        {
 
 
1086
            NETGHOSTDATABLOCK *ghostData = (NETGHOSTDATABLOCK *)sbPtr->dataptr;
 
 
1087
 
 
 
1088
            switch (ghostData->type)
 
 
1089
            {
 
 
1090
                case I_BehaviourCorpse:
 
 
1091
                {
 
 
1092
                    switch (ghostData->subtype)
 
 
1093
                    {
 
 
1094
                        case I_BehaviourAlien:
 
 
1095
                        {
 
 
1096
                            switch (ghostData->IOType)
 
 
1097
                            {
 
 
1098
                                /* Hey ho, it was free... */
 
 
1099
                                case 0:
 
 
1100
                                default:
 
 
1101
                                    CurrentGameStatistics.Trophies[STATS_VICTIM_XENOMORPH]++;
 
 
1102
                                    break;
 
 
1103
                                case 1:
 
 
1104
                                    CurrentGameStatistics.Trophies[STATS_VICTIM_PREDALIEN]++;
 
 
1105
                                    break;
 
 
1106
                                case 2:
 
 
1107
                                    CurrentGameStatistics.Trophies[STATS_VICTIM_PRAETORIAN]++;
 
 
1108
                            }
 
 
1109
                        }
 
 
1110
                        break;
 
 
1111
                        case I_BehaviourMarinePlayer:
 
 
1112
                            CurrentGameStatistics.Trophies[STATS_VICTIM_MARINE]++;
 
 
1113
                        break;
 
 
1114
                        case I_BehaviourAlienPlayer:
 
 
1115
                            CurrentGameStatistics.Trophies[STATS_VICTIM_XENOMORPH]++;
 
 
1116
                        break;
 
 
1117
                        case I_BehaviourPredatorPlayer:
 
 
1118
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PREDATOR]++;
 
 
1119
                        default:
 
 
1120
                            break;
 
 
1121
                    }
 
 
1122
                }
 
 
1123
                default:
 
 
1124
                    break;
 
 
1125
            }
 
 
1126
        }
 
 
1127
        break;
 
 
1128
        case I_BehaviourHierarchicalFragment:
 
 
1129
        {
 
 
1130
            HDEBRIS_BEHAV_BLOCK *debrisDataPtr = (HDEBRIS_BEHAV_BLOCK *)sbPtr->dataptr;
 
 
1131
 
 
 
1132
            switch (debrisDataPtr->Type)
 
 
1133
            {
 
 
1134
                case I_BehaviourAlien:
 
 
1135
                {
 
 
1136
                    switch (debrisDataPtr->SubType)
 
 
1137
                    {
 
 
1138
                        case 0:
 
 
1139
                        default:
 
 
1140
                            CurrentGameStatistics.Trophies[STATS_VICTIM_XENOMORPH]++;
 
 
1141
                            break;
 
 
1142
                        case 1:
 
 
1143
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PREDALIEN]++;
 
 
1144
                            break;
 
 
1145
                        case 2:
 
 
1146
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PRAETORIAN]++;
 
 
1147
                    }
 
 
1148
                }
 
 
1149
                break;
 
 
1150
                case I_BehaviourMarine:
 
 
1151
                {
 
 
1152
                    switch (debrisDataPtr->SubType)
 
 
1153
                    {
 
 
1154
                        case -1:
 
 
1155
                            CurrentGameStatistics.Trophies[STATS_VICTIM_ANDROID]++;
 
 
1156
                        break;
 
 
1157
                        default:
 
 
1158
                        case 1:
 
 
1159
                            CurrentGameStatistics.Trophies[STATS_VICTIM_MARINE]++;
 
 
1160
                        break;
 
 
1161
                        case 0:
 
 
1162
                            CurrentGameStatistics.Trophies[STATS_VICTIM_CIVILIAN]++;
 
 
1163
                    }
 
 
1164
                }
 
 
1165
                break;
 
 
1166
                case I_BehaviourQueenAlien:
 
 
1167
                    CurrentGameStatistics.Trophies[STATS_VICTIM_QUEEN]++;
 
 
1168
                break;
 
 
1169
                case I_BehaviourFaceHugger:
 
 
1170
                    CurrentGameStatistics.Trophies[STATS_VICTIM_FACEHUGGER]++;
 
 
1171
                break;
 
 
1172
                case I_BehaviourXenoborg:
 
 
1173
                    CurrentGameStatistics.Trophies[STATS_VICTIM_XENOBORG]++;
 
 
1174
                break;
 
 
1175
                case I_BehaviourPredator:
 
 
1176
                    CurrentGameStatistics.Trophies[STATS_VICTIM_PREDATOR]++;
 
 
1177
                break;
 
 
1178
                default:
 
 
1179
                    break;
 
 
1180
            }
 
 
1181
        }
 
 
1182
        break;
 
 
1183
        case I_BehaviourSpeargunBolt:
 
 
1184
        {
 
 
1185
            SPEAR_BEHAV_BLOCK *spearDataPtr = (SPEAR_BEHAV_BLOCK *)sbPtr->dataptr;
 
 
1186
 
 
 
1187
            switch (spearDataPtr->Type)
 
 
1188
            {
 
 
1189
                case I_BehaviourAlien:
 
 
1190
                {
 
 
1191
                    switch (spearDataPtr->SubType)
 
 
1192
                    {
 
 
1193
                        case 0:
 
 
1194
                        default:
 
 
1195
                            CurrentGameStatistics.Trophies[STATS_VICTIM_XENOMORPH]++;
 
 
1196
                            break;
 
 
1197
                        case 1:
 
 
1198
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PREDALIEN]++;
 
 
1199
                            break;
 
 
1200
                        case 2:
 
 
1201
                            CurrentGameStatistics.Trophies[STATS_VICTIM_PRAETORIAN]++;
 
 
1202
                    }
 
 
1203
                }
 
 
1204
                break;
 
 
1205
                case I_BehaviourMarine:
 
 
1206
                {
 
 
1207
                    if (spearDataPtr->Android)
 
 
1208
                    {
 
 
1209
                        CurrentGameStatistics.Trophies[STATS_VICTIM_ANDROID]++;
 
 
1210
                    }
 
 
1211
                    else if (spearDataPtr->SubType) /* Means ARealMarine for fragments of marines */
 
 
1212
                    {
 
 
1213
                        CurrentGameStatistics.Trophies[STATS_VICTIM_MARINE]++;
 
 
1214
                    }
 
 
1215
                    else
 
 
1216
                    {
 
 
1217
                        CurrentGameStatistics.Trophies[STATS_VICTIM_CIVILIAN]++;
 
 
1218
                    }
 
 
1219
                }
 
 
1220
                break;
 
 
1221
                case I_BehaviourQueenAlien:
 
 
1222
                    CurrentGameStatistics.Trophies[STATS_VICTIM_QUEEN]++;
 
 
1223
                break;
 
 
1224
                case I_BehaviourFaceHugger:
 
 
1225
                    CurrentGameStatistics.Trophies[STATS_VICTIM_FACEHUGGER]++;
 
 
1226
                break;
 
 
1227
                case I_BehaviourXenoborg:
 
 
1228
                    CurrentGameStatistics.Trophies[STATS_VICTIM_XENOBORG]++;
 
 
1229
                break;
 
 
1230
                case I_BehaviourPredator:
 
 
1231
                    CurrentGameStatistics.Trophies[STATS_VICTIM_PREDATOR]++;
 
 
1232
                default:
 
 
1233
                    break;
 
 
1234
            }
 
 
1235
        }
 
 
1236
        default:
 
 
1237
            break;
 
 
1238
    }
 
 
1239
}
 
 
1240
 
 
 
1241
void CurrentGameStats_CreatureKilled(STRATEGYBLOCK *sbPtr,SECTION_DATA *sectionDataPtr)
 
 
1242
{
 
 
1243
    if (!PlayerStatus.Alive)
 
 
1244
        return;
 
 
1245
 
 
 
1246
    switch (sbPtr->type)
 
 
1247
    {
 
 
1248
        case I_BehaviourAlien:
 
 
1249
        {
 
 
1250
            ALIEN_STATUS_BLOCK *alienStatus = (ALIEN_STATUS_BLOCK *)sbPtr->dataptr;
 
 
1251
 
 
 
1252
            switch (alienStatus->Type)
 
 
1253
            {
 
 
1254
                case 0:
 
 
1255
                default:
 
 
1256
                    CurrentGameStatistics.Killed[STATS_VICTIM_XENOMORPH]++;
 
 
1257
                    break;
 
 
1258
                case 1:
 
 
1259
                    CurrentGameStatistics.Killed[STATS_VICTIM_PREDALIEN]++;
 
 
1260
                    break;
 
 
1261
                case 2:
 
 
1262
                    CurrentGameStatistics.Killed[STATS_VICTIM_PRAETORIAN]++;
 
 
1263
                    break;
 
 
1264
            }
 
 
1265
 
 
 
1266
            if (sectionDataPtr && sectionDataPtr->sempai && sectionDataPtr->sempai->Section_Name)
 
 
1267
            {
 
 
1268
                if (!strcasecmp(sectionDataPtr->sempai->Section_Name,"head"))
 
 
1269
                    CurrentGameStatistics.Decapitated[STATS_VICTIM_XENOMORPH]++;
 
 
1270
            }
 
 
1271
        }
 
 
1272
        break;
 
 
1273
        case I_BehaviourMarine:
 
 
1274
        {
 
 
1275
            MARINE_STATUS_BLOCK *marineStatusPointer = (MARINE_STATUS_BLOCK *)(sbPtr->dataptr);    
 
 
1276
 
 
 
1277
            if (marineStatusPointer->My_Weapon->Android)
 
 
1278
            {
 
 
1279
                CurrentGameStatistics.Killed[STATS_VICTIM_ANDROID]++;
 
 
1280
            }
 
 
1281
            else if (marineStatusPointer->My_Weapon->ARealMarine)
 
 
1282
            {
 
 
1283
                CurrentGameStatistics.Killed[STATS_VICTIM_MARINE]++;
 
 
1284
            }
 
 
1285
            else
 
 
1286
            {
 
 
1287
                CurrentGameStatistics.Killed[STATS_VICTIM_CIVILIAN]++;
 
 
1288
            }
 
 
1289
        }
 
 
1290
        break;
 
 
1291
        case I_BehaviourQueenAlien:
 
 
1292
            CurrentGameStatistics.Killed[STATS_VICTIM_QUEEN]++;
 
 
1293
        break;
 
 
1294
        case I_BehaviourFaceHugger:
 
 
1295
            CurrentGameStatistics.Killed[STATS_VICTIM_FACEHUGGER]++;
 
 
1296
        break;
 
 
1297
        case I_BehaviourXenoborg:
 
 
1298
            CurrentGameStatistics.Killed[STATS_VICTIM_XENOBORG]++;
 
 
1299
        break;
 
 
1300
        case I_BehaviourPredator:
 
 
1301
            CurrentGameStatistics.Killed[STATS_VICTIM_PREDATOR]++;
 
 
1302
        default:
 
 
1303
        break;
 
 
1304
    }
 
 
1305
}
 
 
1306
 
 
 
1307
static const char * TemporaryNameStore[] =
 
 
1308
{
 
 
1309
    "Facehuggers",
 
 
1310
    "Xenomorphs",
 
 
1311
    "Praetorians",
 
 
1312
    "Queens",
 
 
1313
    "Xenoborgs",
 
 
1314
    "Predaliens",
 
 
1315
    "Predators",
 
 
1316
    "Marines",
 
 
1317
    "Civilians",
 
 
1318
    "Androids"
 
 
1319
};
 
 
1320
 
 
 
1321
static const char * TemporaryNameStore2[] =
 
 
1322
{
 
 
1323
    "Facehugger",
 
 
1324
    "Xenomorph",
 
 
1325
    "Praetorian",
 
 
1326
    "Queen",
 
 
1327
    "Xenoborg",
 
 
1328
    "Predalien",
 
 
1329
    "Predator",
 
 
1330
    "Marine",
 
 
1331
    "Civilian",
 
 
1332
    "Android"
 
 
1333
};
 
 
1334
 
 
 
1335
static const char * VisionModeNames[] =
 
 
1336
{
 
 
1337
    "Normal",
 
 
1338
    "Navigation Sense",
 
 
1339
    "Image Intensifier",
 
 
1340
    "Thermal",
 
 
1341
    "Electrical",
 
 
1342
    "PredTech"
 
 
1343
};
 
 
1344
 
 
 
1345
void DoStatisticsScreen()
 
 
1346
{
 
 
1347
    int y;
 
 
1348
    char buffer[100];
 
 
1349
    int colour_to_draw,best;
 
 
1350
    int targets = 0;
 
 
1351
    int targetspassed = 0;
 
 
1352
    int unlockable_bonus = 0;
 
 
1353
 
 
 
1354
    sprintf(buffer, "%s", UserProfile.PlayerName);
 
 
1355
    RenderHUDString(buffer, TABPOINT1, 20, COLOUR_WHITE);
 
 
1356
 
 
 
1357
    RenderStringCentred("Level Completed", ScreenDescriptorBlock.SDB_CentreX, 20, COLOUR_GREEN);
 
 
1358
    AvP.LevelCompleted = NotCheating;
 
 
1359
    unlockable_bonus = (AvP.LevelCompleted && (I_Hard == AvP.Difficulty) && (CHEATMODE_NONACTIVE !=
LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate));
 
 
1360
 
 
 
1361
    RenderStringCentred("Current:", TABPOINT2, 40, COLOUR_WHITE);
 
 
1362
    RenderStringCentred("Best:", TABPOINT3, 40, COLOUR_WHITE);
 
 
1363
    RenderStringCentred("Target:", TABPOINT4, 40, COLOUR_WHITE);
 
 
1364
 
 
 
1365
    y = 55;
 
 
1366
 
 
 
1367
    colour_to_draw = COLOUR_WHITE;
 
 
1368
 
 
 
1369
    if (AvP.LevelCompleted)
 
 
1370
    {
 
 
1371
        /* Is it a new best? */
 
 
1372
        best = 0;
 
 
1373
        if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedHours == AvP.ElapsedHours)
 
 
1374
        {
 
 
1375
            if (AvP.ElapsedMinutes < UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedMinutes)
 
 
1376
            {
 
 
1377
                best = 1;
 
 
1378
            }
 
 
1379
            else if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedMinutes == AvP.ElapsedMinutes)
 
 
1380
            {
 
 
1381
                if (AvP.ElapsedSeconds < UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedSeconds)
 
 
1382
                    best = 1;
 
 
1383
            }        
 
 
1384
        }
 
 
1385
        else if (AvP.ElapsedHours < UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedHours)
 
 
1386
        {
 
 
1387
            best = 1;
 
 
1388
        }
 
 
1389
 
 
 
1390
        if (best)
 
 
1391
        {
 
 
1392
            colour_to_draw = COLOUR_GREEN;
 
 
1393
            UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedHours = AvP.ElapsedHours;
 
 
1394
            UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedMinutes = AvP.ElapsedMinutes;
 
 
1395
            UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedSeconds = AvP.ElapsedSeconds;
 
 
1396
        }
 
 
1397
    }
 
 
1398
 
 
 
1399
    RenderHUDString("Time Elapsed:", TABPOINT1, y, colour_to_draw);
 
 
1400
 
 
 
1401
    sprintf(buffer, "%dh %02dm %02ds", AvP.ElapsedHours, AvP.ElapsedMinutes, AvP.ElapsedSeconds/65536);
 
 
1402
 
 
 
1403
    RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw); //y was 50!
 
 
1404
 
 
 
1405
    sprintf(buffer,"%dh %02dm %02ds",
 
 
1406
        UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedHours,
 
 
1407
        UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedMinutes,
 
 
1408
        UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Total_ElapsedSeconds/65536);
 
 
1409
 
 
 
1410
    RenderStringCentred(buffer, TABPOINT3, y, colour_to_draw); //y was 50!
 
 
1411
 
 
 
1412
    colour_to_draw = COLOUR_WHITE;
 
 
1413
 
 
 
1414
    if(unlockable_bonus && (-1 < LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedHours))
 
 
1415
    {
 
 
1416
        if (AvP.LevelCompleted)
 
 
1417
        {
 
 
1418
            /* Is it a completed target? */
 
 
1419
            best = 0;
 
 
1420
 
 
 
1421
            targets++;
 
 
1422
            if (!AvP.ElapsedHours)
 
 
1423
            {
 
 
1424
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedMinutes > AvP.ElapsedMinutes)
 
 
1425
                {
 
 
1426
                    best = 1;
 
 
1427
                }
 
 
1428
                else if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedMinutes == AvP.ElapsedMinutes)
 
 
1429
                {
 
 
1430
                    if (AvP.ElapsedSeconds <= LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedSeconds)
 
 
1431
                        best = 1;
 
 
1432
                }
 
 
1433
            }
 
 
1434
 
 
 
1435
            if (best)
 
 
1436
            {
 
 
1437
                targetspassed++;
 
 
1438
                colour_to_draw = COLOUR_RED;
 
 
1439
            }
 
 
1440
        }
 
 
1441
 
 
 
1442
        if(!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1443
        {
 
 
1444
            sprintf(buffer,"%dh %02dm %02ds",
 
 
1445
                LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedHours,
 
 
1446
                LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedMinutes,
 
 
1447
                LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Total_ElapsedSeconds/65536);
 
 
1448
        }
 
 
1449
        else
 
 
1450
        {
 
 
1451
            colour_to_draw = COLOUR_GREEN;
 
 
1452
            strcpy(buffer, "Completed");
 
 
1453
        }
 
 
1454
    }
 
 
1455
    else
 
 
1456
    {
 
 
1457
        strcpy(buffer, "None");
 
 
1458
    }
 
 
1459
 
 
 
1460
    RenderStringCentred(buffer, TABPOINT4, y, colour_to_draw);
 
 
1461
 
 
 
1462
    y += NEWLINE_SPACING;
 
 
1463
    colour_to_draw = COLOUR_WHITE;
 
 
1464
 
 
 
1465
    switch(AvP.PlayerType)
 
 
1466
    {
 
 
1467
        case I_Predator:
 
 
1468
        {
 
 
1469
            if (AvP.LevelCompleted)
 
 
1470
            {
 
 
1471
                /* Is it a new best? */
 
 
1472
                best = 0;
 
 
1473
 
 
 
1474
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedHours > CurrentGameStatistics.Cloak_ElapsedHours)
 
 
1475
                {
 
 
1476
                    best = 1;
 
 
1477
                }
 
 
1478
                else if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedHours == CurrentGameStatistics.Cloak_ElapsedHours)
 
 
1479
                {
 
 
1480
                    if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedMinutes > CurrentGameStatistics.Cloak_ElapsedMinutes)
 
 
1481
                    {
 
 
1482
                        best = 1;
 
 
1483
                    }
 
 
1484
                    else if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedMinutes == CurrentGameStatistics.Cloak_ElapsedMinutes)
 
 
1485
                    {
 
 
1486
                        if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedSeconds > CurrentGameStatistics.Cloak_ElapsedSeconds)
 
 
1487
                            best = 1;
 
 
1488
                    }
 
 
1489
                }
 
 
1490
 
 
 
1491
                if (best)
 
 
1492
                {
 
 
1493
                    colour_to_draw = COLOUR_GREEN;
 
 
1494
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedHours = CurrentGameStatistics.Cloak_ElapsedHours;
 
 
1495
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedMinutes = CurrentGameStatistics.Cloak_ElapsedMinutes;
 
 
1496
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedSeconds = CurrentGameStatistics.Cloak_ElapsedSeconds;
 
 
1497
                }
 
 
1498
            }
 
 
1499
 
 
 
1500
            RenderHUDString("Time Cloaked:", TABPOINT1, y, colour_to_draw);
 
 
1501
 
 
 
1502
            sprintf(buffer, "%dh %02dm %02ds", CurrentGameStatistics.Cloak_ElapsedHours,
CurrentGameStatistics.Cloak_ElapsedMinutes,CurrentGameStatistics.Cloak_ElapsedSeconds/65536);
 
 
1503
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
1504
 
 
 
1505
            sprintf(buffer,"%dh %02dm %02ds",
 
 
1506
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedHours,
 
 
1507
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedMinutes,
 
 
1508
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Cloak_ElapsedSeconds/65536);
 
 
1509
            RenderStringCentred(buffer, TABPOINT3, y, colour_to_draw); //y was 50!
 
 
1510
 
 
 
1511
            colour_to_draw = COLOUR_WHITE;
 
 
1512
 
 
 
1513
            if(unlockable_bonus && (-1 < LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedHours))
 
 
1514
            {
 
 
1515
                if (AvP.LevelCompleted)
 
 
1516
                {
 
 
1517
                    /* Is it a completed target? */
 
 
1518
                    best = 0;
 
 
1519
                    targets++;
 
 
1520
 
 
 
1521
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedHours > AvP.ElapsedHours)
 
 
1522
                    {
 
 
1523
                        best = 1;
 
 
1524
                    }
 
 
1525
                    else if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedHours == AvP.ElapsedHours)
 
 
1526
                    {
 
 
1527
                        if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedMinutes > AvP.ElapsedMinutes)
 
 
1528
                        {
 
 
1529
                            best = 1;
 
 
1530
                        }
 
 
1531
                        else if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedMinutes == AvP.ElapsedMinutes)
 
 
1532
                        {
 
 
1533
                            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedSeconds > AvP.ElapsedSeconds)
 
 
1534
                            {
 
 
1535
                                best = 1;
 
 
1536
                            }
 
 
1537
                            else if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedSeconds == AvP.ElapsedSeconds)
 
 
1538
                            {
 
 
1539
                                best = 1;
 
 
1540
                            }
 
 
1541
                        }
 
 
1542
                    }
 
 
1543
 
 
 
1544
                    if (best)
 
 
1545
                    {
 
 
1546
                        targetspassed++;
 
 
1547
                        colour_to_draw = COLOUR_RED;
 
 
1548
                    }
 
 
1549
                }
 
 
1550
 
 
 
1551
                if(!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1552
                {
 
 
1553
                    sprintf(buffer,"%dh %02dm %02ds",
 
 
1554
                        LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedHours,
 
 
1555
                        LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedMinutes,
 
 
1556
                        LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Cloak_ElapsedSeconds/65536 );
 
 
1557
                }
 
 
1558
                else
 
 
1559
                {
 
 
1560
                    colour_to_draw = COLOUR_GREEN;
 
 
1561
                    strcpy(buffer, "Completed");
 
 
1562
                }
 
 
1563
            }
 
 
1564
            else
 
 
1565
            {
 
 
1566
                strcpy(buffer, "None");
 
 
1567
            }
 
 
1568
 
 
 
1569
            RenderStringCentred(buffer, TABPOINT4, y, COLOUR_WHITE);
 
 
1570
 
 
 
1571
            y += NEWLINE_SPACING;
 
 
1572
            colour_to_draw = COLOUR_WHITE;
 
 
1573
        }
 
 
1574
        break;
 
 
1575
        case I_Marine:
 
 
1576
        //if(AVP_ENVIRONMENT_GATEWAY_M == AvP.level)
 
 
1577
        {
 
 
1578
            if(20 == PlayerStatus.FlaresLeft)
 
 
1579
            ;//enable cheats
 
 
1580
        }
 
 
1581
        default:
 
 
1582
        break;
 
 
1583
    }
 
 
1584
 
 
 
1585
    {
 
 
1586
        int i;
 
 
1587
        for (i=0; i < STATS_VICTIM_MAXIMUM; i++)
 
 
1588
        {
 
 
1589
            if ((CurrentGameStatistics.Killed[i])
 
 
1590
            || (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Killed[i] > -1)
 
 
1591
            || ((AvP.PlayerType==I_Predator) && (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] > -1))
 
 
1592
            || ((AvP.PlayerType==I_Alien) && (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] > -1))
 
 
1593
            || ((AvP.PlayerType==I_Alien) && (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.DeadHeadBites[i] > -1))
 
 
1594
                )
 
 
1595
            {
 
 
1596
                if (AvP.LevelCompleted)
 
 
1597
                {
 
 
1598
                    /* Is it a new best? */
 
 
1599
                    if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Killed[i] <= CurrentGameStatistics.Killed[i])
 
 
1600
                    {
 
 
1601
                        UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Killed[i]=CurrentGameStatistics.Killed[i];
 
 
1602
                        colour_to_draw = COLOUR_GREEN;
 
 
1603
                    }
 
 
1604
                }
 
 
1605
 
 
 
1606
                sprintf(buffer, "%s %s", TemporaryNameStore[i], "Killed:");
 
 
1607
                RenderHUDString(buffer,TABPOINT1,y,colour_to_draw);
 
 
1608
 
 
 
1609
                sprintf(buffer,"%d",CurrentGameStatistics.Killed[i]);
 
 
1610
                RenderStringCentred(buffer,TABPOINT2,y,colour_to_draw);
 
 
1611
 
 
 
1612
                if (NotCheating)
 
 
1613
                {
 
 
1614
                    sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Killed[i]);
 
 
1615
                    RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
1616
                }
 
 
1617
                else
 
 
1618
                {
 
 
1619
                    RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
1620
                }
 
 
1621
 
 
 
1622
                colour_to_draw = COLOUR_WHITE;
 
 
1623
 
 
 
1624
                if (AvP.LevelCompleted)
 
 
1625
                {
 
 
1626
                    /* Is it a completed target? */
 
 
1627
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Killed[i] > -1)
 
 
1628
                    {
 
 
1629
                        targets++;
 
 
1630
                        if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Killed[i] <= CurrentGameStatistics.Killed[i])
 
 
1631
                        {
 
 
1632
                            colour_to_draw = COLOUR_RED;
 
 
1633
                            targetspassed++;
 
 
1634
                        }
 
 
1635
                    }
 
 
1636
                }
 
 
1637
 
 
 
1638
                if (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate]
 
 
1639
                &&
 
 
1640
                (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Killed[i] > -1))
 
 
1641
                {
 
 
1642
                    sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Killed[i]);
 
 
1643
                    RenderStringCentred(buffer, TABPOINT4, y, colour_to_draw);
 
 
1644
                }
 
 
1645
                else
 
 
1646
                {
 
 
1647
                    RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1648
                }
 
 
1649
 
 
 
1650
                y += NEWLINE_SPACING;
 
 
1651
                colour_to_draw = COLOUR_WHITE;
 
 
1652
 
 
 
1653
                if (AvP.PlayerType == I_Predator)
 
 
1654
                {
 
 
1655
                    if ((i != STATS_VICTIM_XENOBORG) && (i != STATS_VICTIM_QUEEN) && (i != STATS_VICTIM_FACEHUGGER) && (i !=
STATS_VICTIM_PREDATOR))
 
 
1656
                    {
 
 
1657
                        if (AvP.LevelCompleted)
 
 
1658
                        {
 
 
1659
                            /* Is it a new best? */
 
 
1660
                            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].TrophiesOrLiveHeadBites[i] <= CurrentGameStatistics.Trophies[i])
 
 
1661
                            {
 
 
1662
                                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].TrophiesOrLiveHeadBites[i] = CurrentGameStatistics.Trophies[i];
 
 
1663
                                colour_to_draw = COLOUR_GREEN;
 
 
1664
                            }
 
 
1665
                        }
 
 
1666
 
 
 
1667
                        sprintf(buffer, "%s %s", TemporaryNameStore2[i], "Trophies Collected:");
 
 
1668
                        RenderHUDString(buffer, TABPOINT1, y, colour_to_draw);
 
 
1669
 
 
 
1670
                        sprintf(buffer, "%d", CurrentGameStatistics.Trophies[i]);
 
 
1671
                        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
1672
 
 
 
1673
                        if (NotCheating)
 
 
1674
                        {
 
 
1675
                            sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].TrophiesOrLiveHeadBites[i]);
 
 
1676
                            RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
1677
                        }
 
 
1678
                        else
 
 
1679
                        {
 
 
1680
                            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
1681
                        }
 
 
1682
 
 
 
1683
                        colour_to_draw = COLOUR_WHITE;
 
 
1684
 
 
 
1685
                        if (AvP.LevelCompleted)
 
 
1686
                        {
 
 
1687
                            /* Is it a completed target? */
 
 
1688
                            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] > -1)
 
 
1689
                            {
 
 
1690
                                targets++;
 
 
1691
                                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i]<=CurrentGameStatistics.Trophies[i])
 
 
1692
                                {
 
 
1693
                                    colour_to_draw = COLOUR_RED;
 
 
1694
                                    targetspassed++;
 
 
1695
                                }
 
 
1696
                            }
 
 
1697
                        }
 
 
1698
 
 
 
1699
                        if (NotCheating
 
 
1700
                        &&
 
 
1701
                        (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1702
                        &&
 
 
1703
                        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] > -1))
 
 
1704
                        {
 
 
1705
                            sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] );
 
 
1706
                            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
1707
                        }
 
 
1708
                        else
 
 
1709
                        {
 
 
1710
                            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1711
                        }
 
 
1712
 
 
 
1713
                        y += NEWLINE_SPACING;
 
 
1714
                        colour_to_draw = COLOUR_WHITE;
 
 
1715
                    }
 
 
1716
                }
 
 
1717
                else if (AvP.PlayerType == I_Alien)
 
 
1718
                {
 
 
1719
                    if ((i != STATS_VICTIM_ANDROID)
 
 
1720
                        &&(i != STATS_VICTIM_XENOMORPH)
 
 
1721
                        &&(i != STATS_VICTIM_PREDALIEN)
 
 
1722
                        &&(i != STATS_VICTIM_PRAETORIAN)
 
 
1723
                        &&(i != STATS_VICTIM_QUEEN)
 
 
1724
                        &&(i != STATS_VICTIM_XENOBORG)
 
 
1725
                        &&(i != STATS_VICTIM_FACEHUGGER))
 
 
1726
                    {
 
 
1727
                        if (AvP.LevelCompleted)
 
 
1728
                        {
 
 
1729
                            /* Is it a new best? */
 
 
1730
                            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].TrophiesOrLiveHeadBites[i] <= CurrentGameStatistics.LiveHeadBites[i])
 
 
1731
                            {
 
 
1732
                                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].TrophiesOrLiveHeadBites[i] = CurrentGameStatistics.LiveHeadBites[i];
 
 
1733
                                colour_to_draw = COLOUR_GREEN;
 
 
1734
                            }
 
 
1735
                        }
 
 
1736
 
 
 
1737
                        sprintf(buffer, "%s %s", TemporaryNameStore2[i], "Live Head Bites:");
 
 
1738
                        RenderHUDString(buffer,TABPOINT1,y,colour_to_draw);
 
 
1739
 
 
 
1740
                        sprintf(buffer,"%d",CurrentGameStatistics.LiveHeadBites[i]);
 
 
1741
                        RenderStringCentred(buffer,TABPOINT2,y,colour_to_draw);
 
 
1742
 
 
 
1743
                        if (NotCheating)
 
 
1744
                        {
 
 
1745
                            sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].TrophiesOrLiveHeadBites[i]);
 
 
1746
                            RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
1747
                        }
 
 
1748
                        else
 
 
1749
                        {
 
 
1750
                            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
1751
                        }
 
 
1752
 
 
 
1753
                        colour_to_draw = COLOUR_WHITE;
 
 
1754
 
 
 
1755
                        if (AvP.LevelCompleted)
 
 
1756
                        {
 
 
1757
                            /* Is it a completed target? */
 
 
1758
                            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] > -1)
 
 
1759
                            {
 
 
1760
                                targets++;
 
 
1761
                                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] <=
CurrentGameStatistics.LiveHeadBites[i])
 
 
1762
                                {
 
 
1763
                                    colour_to_draw = COLOUR_RED;
 
 
1764
                                    targetspassed++;
 
 
1765
                                }
 
 
1766
                            }
 
 
1767
                        }
 
 
1768
 
 
 
1769
                        if (NotCheating
 
 
1770
                        &&
 
 
1771
                        (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1772
                        &&
 
 
1773
                        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i] > -1))
 
 
1774
                        {
 
 
1775
                            sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.TrophiesOrLiveHeadBites[i]);
 
 
1776
                            RenderStringCentred(buffer, TABPOINT4, y, colour_to_draw);
 
 
1777
                        }
 
 
1778
                        else
 
 
1779
                        {
 
 
1780
                            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1781
                        }
 
 
1782
 
 
 
1783
                        y += NEWLINE_SPACING;
 
 
1784
                        colour_to_draw = COLOUR_WHITE;
 
 
1785
 
 
 
1786
                        if (AvP.LevelCompleted)
 
 
1787
                        {
 
 
1788
                            /* Is it a new best? */
 
 
1789
                            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].DeadHeadBites[i] <= CurrentGameStatistics.DeadHeadBites[i])
 
 
1790
                            {
 
 
1791
                                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].DeadHeadBites[i] = CurrentGameStatistics.DeadHeadBites[i];
 
 
1792
                                colour_to_draw = COLOUR_GREEN;
 
 
1793
                            }
 
 
1794
                        }
 
 
1795
 
 
 
1796
                        sprintf(buffer, "%s %s", TemporaryNameStore2[i], "Dead Head Bites:");
 
 
1797
                        RenderHUDString(buffer, TABPOINT1, y, colour_to_draw);
 
 
1798
 
 
 
1799
                        sprintf(buffer, "%d", CurrentGameStatistics.DeadHeadBites[i]);
 
 
1800
                        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
1801
 
 
 
1802
                        if (NotCheating)
 
 
1803
                        {
 
 
1804
                            sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].DeadHeadBites[i] );
 
 
1805
                            RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
1806
                        }
 
 
1807
                        else
 
 
1808
                        {
 
 
1809
                            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
1810
                        }
 
 
1811
 
 
 
1812
                        colour_to_draw = COLOUR_WHITE;
 
 
1813
 
 
 
1814
                        if (AvP.LevelCompleted)
 
 
1815
                        {
 
 
1816
                            /* Is it a completed target? */
 
 
1817
                            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.DeadHeadBites[i] > -1)
 
 
1818
                            {
 
 
1819
                                targets++;
 
 
1820
                                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.DeadHeadBites[i]<=CurrentGameStatistics.DeadHeadBites[i])
 
 
1821
                                {
 
 
1822
                                    colour_to_draw = COLOUR_RED;
 
 
1823
                                    targetspassed++;
 
 
1824
                                }
 
 
1825
                            }
 
 
1826
                        }
 
 
1827
 
 
 
1828
                        if (NotCheating
 
 
1829
                        &&
 
 
1830
                        (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1831
                        &&
 
 
1832
                        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.DeadHeadBites[i] > -1))
 
 
1833
                        {
 
 
1834
                            sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.DeadHeadBites[i]);
 
 
1835
                            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
1836
                        }
 
 
1837
                        else
 
 
1838
                        {
 
 
1839
                            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1840
                        }
 
 
1841
 
 
 
1842
                        y += NEWLINE_SPACING;
 
 
1843
                        colour_to_draw = COLOUR_WHITE;
 
 
1844
                    }
 
 
1845
                }
 
 
1846
            }
 
 
1847
        }
 
 
1848
    }
 
 
1849
 
 
 
1850
    /* Speed? */
 
 
1851
    {
 
 
1852
        float float_speed;
 
 
1853
 
 
 
1854
        unsigned int total_time = (AvP.ElapsedSeconds >> ONE_FIXED_SHIFT);
 
 
1855
        total_time += (AvP.ElapsedMinutes * 60);
 
 
1856
        total_time += ((AvP.ElapsedHours * 60)*60);
 
 
1857
 
 
 
1858
        if (total_time)
 
 
1859
        {
 
 
1860
            int average_speed = CurrentGameStatistics.IntegralSpeed / total_time;
 
 
1861
 
 
 
1862
            if (AvP.LevelCompleted)
 
 
1863
            {
 
 
1864
                /* Is it a new best? */
 
 
1865
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Speed <= average_speed)
 
 
1866
                {
 
 
1867
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Speed = average_speed;
 
 
1868
                    colour_to_draw = COLOUR_GREEN;
 
 
1869
                }
 
 
1870
            }
 
 
1871
 
 
 
1872
            RenderHUDString("Average Speed:", TABPOINT1, y, colour_to_draw);
 
 
1873
 
 
 
1874
            float_speed = (float)average_speed;
 
 
1875
            float_speed /= 1000;
 
 
1876
 
 
 
1877
            sprintf(buffer, "%.1f m/s", float_speed);
 
 
1878
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
1879
 
 
 
1880
            if (NotCheating)
 
 
1881
            {
 
 
1882
                float_speed = (float)UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Speed;
 
 
1883
                float_speed /= 1000;
 
 
1884
 
 
 
1885
                sprintf(buffer,"%.1f m/s",float_speed);
 
 
1886
 
 
 
1887
                RenderStringCentred(buffer, TABPOINT3, y, colour_to_draw);
 
 
1888
            }
 
 
1889
            else
 
 
1890
            {
 
 
1891
                RenderStringCentred("---", TABPOINT3, y, COLOUR_WHITE);
 
 
1892
            }
 
 
1893
 
 
 
1894
            colour_to_draw = COLOUR_WHITE;
 
 
1895
 
 
 
1896
            if (AvP.LevelCompleted)
 
 
1897
            {
 
 
1898
                /* Is it a completed target? */
 
 
1899
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Speed > -1)
 
 
1900
                {
 
 
1901
                    targets++;
 
 
1902
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Speed <= average_speed)
 
 
1903
                    {
 
 
1904
                        colour_to_draw = COLOUR_RED;
 
 
1905
                        targetspassed++;
 
 
1906
                    }
 
 
1907
                }
 
 
1908
            }
 
 
1909
 
 
 
1910
            if (NotCheating
 
 
1911
            &&
 
 
1912
            (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1913
            &&
 
 
1914
            (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Speed > -1))
 
 
1915
            {
 
 
1916
                float_speed = (float)LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Speed;
 
 
1917
                float_speed /= 1000;
 
 
1918
                sprintf(buffer, "%.1f m/s", float_speed);
 
 
1919
                RenderStringCentred(buffer, TABPOINT4, y, colour_to_draw);
 
 
1920
            }
 
 
1921
            else
 
 
1922
            {
 
 
1923
                RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1924
            }
 
 
1925
        }
 
 
1926
        else
 
 
1927
        {
 
 
1928
            RenderHUDString("Average Speed:", TABPOINT1, y, COLOUR_WHITE);
 
 
1929
            RenderStringCentred("0 m/s" , TABPOINT2, y, COLOUR_WHITE);
 
 
1930
            RenderStringCentred("---", TABPOINT3, y, COLOUR_WHITE);
 
 
1931
            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1932
        }
 
 
1933
    }
 
 
1934
 
 
 
1935
    y += NEWLINE_SPACING;
 
 
1936
    colour_to_draw = COLOUR_WHITE;
 
 
1937
 
 
 
1938
    if (PlayerStatus.StartingHealth)
 
 
1939
    {
 
 
1940
        int percentage = ((CurrentGameStatistics.HealthDamage >> ONE_FIXED_SHIFT) * 100) / PlayerStatus.StartingHealth;
 
 
1941
 
 
 
1942
        if (AvP.LevelCompleted)
 
 
1943
        {
 
 
1944
            /* Is it a new best? */
 
 
1945
            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].HealthDamage >= percentage)
 
 
1946
            {
 
 
1947
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].HealthDamage = percentage;
 
 
1948
                colour_to_draw = COLOUR_GREEN;
 
 
1949
            }
 
 
1950
        }
 
 
1951
 
 
 
1952
        RenderHUDString("Health Damage Taken:", TABPOINT1, y, colour_to_draw);
 
 
1953
 
 
 
1954
        sprintf(buffer, "%03d%%", percentage);
 
 
1955
        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
1956
 
 
 
1957
        if (NotCheating)
 
 
1958
        {
 
 
1959
            sprintf(buffer,"%03d%%", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].HealthDamage);
 
 
1960
            RenderStringCentred(buffer, TABPOINT3, y, colour_to_draw);
 
 
1961
        }
 
 
1962
        else
 
 
1963
        {
 
 
1964
            RenderStringCentred("---", TABPOINT3, y, COLOUR_WHITE);
 
 
1965
        }
 
 
1966
 
 
 
1967
        colour_to_draw = COLOUR_WHITE;
 
 
1968
 
 
 
1969
        if (AvP.LevelCompleted)
 
 
1970
        {
 
 
1971
            /* Is it a completed target? */
 
 
1972
            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HealthDamage > -1)
 
 
1973
            {
 
 
1974
                targets++;
 
 
1975
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HealthDamage >= percentage)
 
 
1976
                {
 
 
1977
                    colour_to_draw = COLOUR_RED;
 
 
1978
                    targetspassed++;
 
 
1979
                }
 
 
1980
            }
 
 
1981
        }
 
 
1982
 
 
 
1983
        if (NotCheating
 
 
1984
        &&
 
 
1985
        (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
1986
        &&
 
 
1987
        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HealthDamage > -1))
 
 
1988
        {
 
 
1989
            sprintf(buffer,"%03d%%", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HealthDamage);
 
 
1990
            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
1991
        }
 
 
1992
        else
 
 
1993
        {
 
 
1994
            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
1995
        }
 
 
1996
 
 
 
1997
        y += NEWLINE_SPACING;
 
 
1998
        colour_to_draw = COLOUR_WHITE;
 
 
1999
    }
 
 
2000
 
 
 
2001
    if (PlayerStatus.StartingArmour && (AvP.PlayerType == I_Marine))
 
 
2002
    {
 
 
2003
        int percentage = ((CurrentGameStatistics.ArmourDamage >> ONE_FIXED_SHIFT) * 100) / PlayerStatus.StartingArmour;
 
 
2004
 
 
 
2005
        if (AvP.LevelCompleted)
 
 
2006
        {
 
 
2007
            /* Is it a new best? */
 
 
2008
            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ArmourDamage >= percentage)
 
 
2009
            {
 
 
2010
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ArmourDamage = percentage;
 
 
2011
                colour_to_draw = COLOUR_GREEN;
 
 
2012
            }
 
 
2013
        }
 
 
2014
 
 
 
2015
        RenderHUDString("Armor Damage Taken:", TABPOINT1, y, colour_to_draw);
 
 
2016
 
 
 
2017
        sprintf(buffer, "%03d%%", percentage);
 
 
2018
        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2019
 
 
 
2020
        if (NotCheating)
 
 
2021
        {
 
 
2022
            sprintf(buffer,"%03d%%", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ArmourDamage);
 
 
2023
            RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2024
        }
 
 
2025
        else
 
 
2026
        {
 
 
2027
            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2028
        }
 
 
2029
 
 
 
2030
        colour_to_draw = COLOUR_WHITE;
 
 
2031
 
 
 
2032
        if (AvP.LevelCompleted)
 
 
2033
        {
 
 
2034
            /* Is it a completed target? */
 
 
2035
            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ArmourDamage > -1)
 
 
2036
            {
 
 
2037
                targets++;
 
 
2038
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ArmourDamage >= percentage)
 
 
2039
                {
 
 
2040
                    colour_to_draw = COLOUR_RED;
 
 
2041
                    targetspassed++;
 
 
2042
                }
 
 
2043
            }
 
 
2044
        }
 
 
2045
 
 
 
2046
        if (NotCheating
 
 
2047
        &&
 
 
2048
        (UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate] != 1)
 
 
2049
        &&
 
 
2050
        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ArmourDamage > -1))
 
 
2051
        {
 
 
2052
            sprintf(buffer,"%03d%%", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ArmourDamage);
 
 
2053
            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2054
        }
 
 
2055
        else
 
 
2056
        {
 
 
2057
            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2058
        }
 
 
2059
 
 
 
2060
        y += NEWLINE_SPACING;
 
 
2061
        colour_to_draw = COLOUR_WHITE;
 
 
2062
    }
 
 
2063
 
 
 
2064
    /* Creature specific stats... */
 
 
2065
    if (AvP.PlayerType == I_Marine)
 
 
2066
    {
 
 
2067
        int headshots=0,kills=0,i=0;
 
 
2068
 
 
 
2069
        for (; i < STATS_VICTIM_MAXIMUM; i++)
 
 
2070
        {
 
 
2071
            headshots += CurrentGameStatistics.Decapitated[i];
 
 
2072
            kills += CurrentGameStatistics.Killed[i];
 
 
2073
        }
 
 
2074
 
 
 
2075
        headshots = kills ? (100*headshots)/kills : 0 ;
 
 
2076
 
 
 
2077
        if (AvP.LevelCompleted)
 
 
2078
        {
 
 
2079
            /* Is it a new best? */
 
 
2080
            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].HeadShotPercentage <= headshots)
 
 
2081
            {
 
 
2082
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].HeadShotPercentage = headshots;
 
 
2083
                colour_to_draw = COLOUR_GREEN;
 
 
2084
            }
 
 
2085
        }
 
 
2086
 
 
 
2087
        RenderHUDString("Head Shots:", TABPOINT1, y, colour_to_draw);
 
 
2088
 
 
 
2089
        sprintf(buffer, "%03d%%", headshots);
 
 
2090
        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2091
 
 
 
2092
        if (NotCheating)
 
 
2093
        {
 
 
2094
            sprintf(buffer,"%03d%%", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].HeadShotPercentage);
 
 
2095
            RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2096
        }
 
 
2097
        else
 
 
2098
        {
 
 
2099
            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2100
        }
 
 
2101
 
 
 
2102
        colour_to_draw = COLOUR_WHITE;
 
 
2103
 
 
 
2104
        if (AvP.LevelCompleted)
 
 
2105
        {
 
 
2106
            /* Is it a completed target? */
 
 
2107
            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HeadShotPercentage > -1)
 
 
2108
            {
 
 
2109
                targets++;
 
 
2110
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HeadShotPercentage <= headshots)
 
 
2111
                {
 
 
2112
                    colour_to_draw = COLOUR_RED;
 
 
2113
                    targetspassed++;
 
 
2114
                }
 
 
2115
            }
 
 
2116
        }
 
 
2117
 
 
 
2118
        if (NotCheating
 
 
2119
        &&
 
 
2120
        (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
2121
        &&
 
 
2122
        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HeadShotPercentage > -1))
 
 
2123
        {
 
 
2124
            sprintf(buffer,"%03d%%", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.HeadShotPercentage);
 
 
2125
            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2126
        }
 
 
2127
        else
 
 
2128
        {
 
 
2129
            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2130
        }
 
 
2131
 
 
 
2132
        y += NEWLINE_SPACING;
 
 
2133
        colour_to_draw = COLOUR_WHITE;
 
 
2134
        /* Shots fired... */
 
 
2135
        {
 
 
2136
            int total_shots = 0;
 
 
2137
 
 
 
2138
            for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
2139
            {
 
 
2140
                struct PLAYER_WEAPON_DATA *weaponPtr = &PlayerStatus.WeaponSlot[i];
 
 
2141
                const TEMPLATE_WEAPON_DATA *twPtr = &TemplateWeapon[weaponPtr->WeaponIDNumber];
 
 
2142
 
 
 
2143
                if (twPtr->LogShots)
 
 
2144
                    total_shots += CurrentGameStatistics.ShotsFired[i];
 
 
2145
            }
 
 
2146
 
 
 
2147
            if (AvP.LevelCompleted)
 
 
2148
            {
 
 
2149
                /* Is it a new best? */
 
 
2150
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ShotsFired >= total_shots)
 
 
2151
                {
 
 
2152
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ShotsFired = total_shots;
 
 
2153
                    colour_to_draw = COLOUR_GREEN;
 
 
2154
                }
 
 
2155
            }
 
 
2156
 
 
 
2157
            RenderHUDString("Total Shots Fired:", TABPOINT1, y, colour_to_draw);
 
 
2158
            sprintf(buffer, "%d\n", (total_shots));
 
 
2159
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2160
 
 
 
2161
            if (NotCheating)
 
 
2162
            {
 
 
2163
                sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ShotsFired);
 
 
2164
                RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2165
            }
 
 
2166
            else
 
 
2167
            {
 
 
2168
                RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2169
            }
 
 
2170
 
 
 
2171
            colour_to_draw = COLOUR_WHITE;
 
 
2172
 
 
 
2173
            if (AvP.LevelCompleted)
 
 
2174
            {
 
 
2175
                /* Is it a completed target? */
 
 
2176
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired > -1)
 
 
2177
                {
 
 
2178
                    targets++;
 
 
2179
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired >= total_shots)
 
 
2180
                    {
 
 
2181
                        colour_to_draw = COLOUR_RED;
 
 
2182
                        targetspassed++;
 
 
2183
                    }
 
 
2184
                }
 
 
2185
            }
 
 
2186
 
 
 
2187
            if (NotCheating
 
 
2188
            &&
 
 
2189
            (UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate] != 1)
 
 
2190
            &&
 
 
2191
            (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired > -1))
 
 
2192
            {
 
 
2193
                sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired);
 
 
2194
                RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2195
            }
 
 
2196
            else
 
 
2197
            {
 
 
2198
                RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2199
            }
 
 
2200
 
 
 
2201
            y += NEWLINE_SPACING;
 
 
2202
            colour_to_draw = COLOUR_WHITE;
 
 
2203
        }
 
 
2204
 
 
 
2205
        /* Accuracy... */
 
 
2206
        {
 
 
2207
            int percentage = 0;
 
 
2208
            int total_shots = 0;
 
 
2209
            int total_hits = 0;
 
 
2210
 
 
 
2211
            for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
2212
            {
 
 
2213
                struct PLAYER_WEAPON_DATA *weaponPtr = &PlayerStatus.WeaponSlot[i];
 
 
2214
                const TEMPLATE_WEAPON_DATA *twPtr = &TemplateWeapon[weaponPtr->WeaponIDNumber];
 
 
2215
 
 
 
2216
                if (twPtr->LogAccuracy)
 
 
2217
                {
 
 
2218
                    total_shots += CurrentGameStatistics.ShotsFired[i];
 
 
2219
                    total_hits += CurrentGameStatistics.ShotsHit[i];
 
 
2220
                }
 
 
2221
            }
 
 
2222
 
 
 
2223
            if (total_shots)
 
 
2224
                percentage = (100*total_hits) / total_shots;
 
 
2225
 
 
 
2226
            if (AvP.LevelCompleted)
 
 
2227
            {
 
 
2228
                /* Is it a new best? */
 
 
2229
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Accuracy <= percentage)
 
 
2230
                {
 
 
2231
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Accuracy = percentage;
 
 
2232
                    colour_to_draw = COLOUR_GREEN;
 
 
2233
                }
 
 
2234
            }
 
 
2235
 
 
 
2236
            RenderHUDString("Accuracy:", TABPOINT1, y, colour_to_draw);
 
 
2237
 
 
 
2238
            sprintf(buffer, "%03d%%", percentage);
 
 
2239
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2240
 
 
 
2241
            if (NotCheating)
 
 
2242
            {
 
 
2243
                sprintf(buffer,"%03d%%", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Accuracy);
 
 
2244
                RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2245
            }
 
 
2246
            else
 
 
2247
            {
 
 
2248
                RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2249
            }
 
 
2250
 
 
 
2251
            colour_to_draw = COLOUR_WHITE;
 
 
2252
 
 
 
2253
            if (AvP.LevelCompleted)
 
 
2254
            {
 
 
2255
                /* Is it a completed target? */
 
 
2256
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy > -1)
 
 
2257
                {
 
 
2258
                    targets++;
 
 
2259
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy <= percentage)
 
 
2260
                    {
 
 
2261
                        colour_to_draw = COLOUR_RED;
 
 
2262
                        targetspassed++;
 
 
2263
                    }
 
 
2264
                }
 
 
2265
            }
 
 
2266
 
 
 
2267
            if (NotCheating
 
 
2268
            &&
 
 
2269
            (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
2270
            &&
 
 
2271
            (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy > -1))
 
 
2272
            {
 
 
2273
                sprintf(buffer,"%03d%%", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy);
 
 
2274
                RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2275
            }
 
 
2276
            else
 
 
2277
            {
 
 
2278
                RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2279
            }
 
 
2280
 
 
 
2281
            y += NEWLINE_SPACING;
 
 
2282
            colour_to_draw = COLOUR_WHITE;
 
 
2283
        }
 
 
2284
 
 
 
2285
        /* Preferred weapon... */
 
 
2286
        {
 
 
2287
            unsigned int maxtime = 0;
 
 
2288
            int preferred_slot = -1;
 
 
2289
            const char * weapon_name;
 
 
2290
 
 
 
2291
            struct PLAYER_WEAPON_DATA *weaponPtr;
 
 
2292
 
 
 
2293
            for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
2294
            {
 
 
2295
                if (CurrentGameStatistics.WeaponTimes[i] >= maxtime)
 
 
2296
                {
 
 
2297
                    maxtime = CurrentGameStatistics.WeaponTimes[i];
 
 
2298
                    preferred_slot = i;
 
 
2299
                }
 
 
2300
            }
 
 
2301
 
 
 
2302
            assert(preferred_slot != -1);
 
 
2303
 
 
 
2304
            weaponPtr = &PlayerStatus.WeaponSlot[preferred_slot];
 
 
2305
 
 
 
2306
            RenderHUDString("Preferred Weapon:", TABPOINT1, y, colour_to_draw);
 
 
2307
 
 
 
2308
            switch(weaponPtr->WeaponIDNumber)
 
 
2309
            {
 
 
2310
                case WEAPON_PULSERIFLE:
 
 
2311
                    weapon_name = "Pulse Rifle";
 
 
2312
                break;
 
 
2313
                case WEAPON_SMARTGUN:
 
 
2314
                    weapon_name = "Smartgun";
 
 
2315
                break;
 
 
2316
                case WEAPON_FLAMETHROWER: 
 
 
2317
                    weapon_name = "Flamethrower";
 
 
2318
                break;
 
 
2319
                case WEAPON_SADAR:
 
 
2320
                    weapon_name = "SADAR";
 
 
2321
                break;
 
 
2322
                case WEAPON_GRENADELAUNCHER:
 
 
2323
                    weapon_name = "Grenade Launcher";
 
 
2324
                break;
 
 
2325
                case WEAPON_MINIGUN:
 
 
2326
                    weapon_name = "Minigun";
 
 
2327
                break;
 
 
2328
                case WEAPON_MARINE_PISTOL:
 
 
2329
                    weapon_name = "Pistol";
 
 
2330
                break;
 
 
2331
                case WEAPON_FRISBEE_LAUNCHER:
 
 
2332
                    weapon_name = "Skeeter Launcher";
 
 
2333
                break;
 
 
2334
                case WEAPON_TWO_PISTOLS:
 
 
2335
                    weapon_name =  "Pistols";
 
 
2336
                break;
 
 
2337
                default: 
 
 
2338
                    weapon_name = "dead cow";
 
 
2339
            }
 
 
2340
 
 
 
2341
            RenderStringCentred(weapon_name, TABPOINT2, y, colour_to_draw);
 
 
2342
            RenderStringCentred("---",TABPOINT3,y,colour_to_draw);
 
 
2343
            RenderStringCentred("---",TABPOINT4,y,COLOUR_WHITE);
 
 
2344
 
 
 
2345
            y += NEWLINE_SPACING;
 
 
2346
            colour_to_draw = COLOUR_WHITE;
 
 
2347
        }
 
 
2348
    }
 
 
2349
    else if (AvP.PlayerType == I_Alien)
 
 
2350
    {
 
 
2351
        if (AvP.LevelCompleted)
 
 
2352
        {
 
 
2353
            /* Is it a new best? */
 
 
2354
            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Spotted >= CurrentGameStatistics.Spotted)
 
 
2355
            {
 
 
2356
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Spotted = CurrentGameStatistics.Spotted;
 
 
2357
                colour_to_draw = COLOUR_GREEN;
 
 
2358
            }
 
 
2359
        }
 
 
2360
 
 
 
2361
        RenderHUDString("Spotted:", TABPOINT1, y, colour_to_draw);
 
 
2362
 
 
 
2363
        sprintf(buffer, "%d", CurrentGameStatistics.Spotted);
 
 
2364
        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2365
 
 
 
2366
        if (NotCheating)
 
 
2367
        {
 
 
2368
            sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Spotted);
 
 
2369
            RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2370
        }
 
 
2371
        else
 
 
2372
        {
 
 
2373
            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2374
        }
 
 
2375
 
 
 
2376
        colour_to_draw = COLOUR_WHITE;
 
 
2377
 
 
 
2378
        if (AvP.LevelCompleted)
 
 
2379
        {
 
 
2380
            /* Is it a completed target? */
 
 
2381
            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted > -1)
 
 
2382
            {
 
 
2383
                targets++;
 
 
2384
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted >= CurrentGameStatistics.Spotted)
 
 
2385
                {
 
 
2386
                    colour_to_draw = COLOUR_RED;
 
 
2387
                    targetspassed++;
 
 
2388
                }
 
 
2389
            }
 
 
2390
        }
 
 
2391
 
 
 
2392
        if (NotCheating
 
 
2393
        &&
 
 
2394
        (UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate] != 1)
 
 
2395
        &&
 
 
2396
        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted > -1))
 
 
2397
        {
 
 
2398
            sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted);
 
 
2399
            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2400
        }
 
 
2401
        else
 
 
2402
        {
 
 
2403
            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2404
        }
 
 
2405
 
 
 
2406
        y += NEWLINE_SPACING;
 
 
2407
        colour_to_draw = COLOUR_WHITE;
 
 
2408
    }
 
 
2409
    else if (AvP.PlayerType == I_Predator)
 
 
2410
    {
 
 
2411
        int i;
 
 
2412
 
 
 
2413
        if (AvP.LevelCompleted)
 
 
2414
        {
 
 
2415
            /* Is it a new best? */
 
 
2416
            if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Spotted >= CurrentGameStatistics.Spotted)
 
 
2417
            {
 
 
2418
                UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Spotted = CurrentGameStatistics.Spotted;
 
 
2419
                colour_to_draw = COLOUR_GREEN;
 
 
2420
            }
 
 
2421
        }
 
 
2422
 
 
 
2423
        RenderHUDString("Spotted:", TABPOINT1, y, colour_to_draw);
 
 
2424
 
 
 
2425
        sprintf(buffer, "%d", CurrentGameStatistics.Spotted);
 
 
2426
        RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2427
 
 
 
2428
        if (NotCheating)
 
 
2429
        {
 
 
2430
            sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Spotted);
 
 
2431
            RenderStringCentred(buffer, TABPOINT3, y, colour_to_draw);
 
 
2432
        }
 
 
2433
        else
 
 
2434
        {
 
 
2435
            RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2436
        }
 
 
2437
 
 
 
2438
        colour_to_draw = COLOUR_WHITE;
 
 
2439
 
 
 
2440
        if (AvP.LevelCompleted)
 
 
2441
        {
 
 
2442
            /* Is it a completed target? */
 
 
2443
            if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted > -1)
 
 
2444
            {
 
 
2445
                targets++;
 
 
2446
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted >= CurrentGameStatistics.Spotted)
 
 
2447
                {
 
 
2448
                    colour_to_draw = COLOUR_RED;
 
 
2449
                    targetspassed++;
 
 
2450
                }
 
 
2451
            }
 
 
2452
        }
 
 
2453
 
 
 
2454
        if (NotCheating
 
 
2455
        &&
 
 
2456
        (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
2457
        &&
 
 
2458
        (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted > -1))
 
 
2459
        {
 
 
2460
            sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Spotted);
 
 
2461
            RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2462
        }
 
 
2463
        else
 
 
2464
        {
 
 
2465
            RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2466
        }
 
 
2467
 
 
 
2468
        y += NEWLINE_SPACING;
 
 
2469
        colour_to_draw = COLOUR_WHITE;
 
 
2470
 
 
 
2471
        /* FieldCharge... */
 
 
2472
        {
 
 
2473
            int percentage = CurrentGameStatistics.FieldChargeUsed / (PLAYERCLOAK_MAXENERGY/100);
 
 
2474
 
 
 
2475
            if (AvP.LevelCompleted)
 
 
2476
            {
 
 
2477
                /* Is it a new best? */
 
 
2478
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].FieldChargeUsed >= percentage)
 
 
2479
                {
 
 
2480
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].FieldChargeUsed = percentage;
 
 
2481
                    colour_to_draw = COLOUR_GREEN;
 
 
2482
                }
 
 
2483
            }
 
 
2484
 
 
 
2485
            RenderHUDString("Field Charge Used:", TABPOINT1, y, colour_to_draw);
 
 
2486
 
 
 
2487
            sprintf(buffer, "%03d%%", percentage);
 
 
2488
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2489
 
 
 
2490
            if (NotCheating)
 
 
2491
            {
 
 
2492
                sprintf(buffer,"%03d%%", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].FieldChargeUsed);
 
 
2493
                RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2494
            }
 
 
2495
            else
 
 
2496
            {
 
 
2497
                RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2498
            }
 
 
2499
 
 
 
2500
            colour_to_draw = COLOUR_WHITE;
 
 
2501
 
 
 
2502
            if (AvP.LevelCompleted)
 
 
2503
            {
 
 
2504
                /* Is it a completed target? */
 
 
2505
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.FieldChargeUsed > -1)
 
 
2506
                {
 
 
2507
                    targets++;
 
 
2508
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.FieldChargeUsed >= percentage)
 
 
2509
                    {
 
 
2510
                        colour_to_draw = COLOUR_RED;
 
 
2511
                        targetspassed++;
 
 
2512
                    }
 
 
2513
                }
 
 
2514
            }
 
 
2515
 
 
 
2516
            if (NotCheating
 
 
2517
            &&
 
 
2518
            (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
2519
            &&
 
 
2520
            (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.FieldChargeUsed > -1))
 
 
2521
            {
 
 
2522
                sprintf(buffer,"%03d%%", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.FieldChargeUsed);
 
 
2523
                RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2524
            }
 
 
2525
            else
 
 
2526
            {
 
 
2527
                RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2528
            }
 
 
2529
 
 
 
2530
            y += NEWLINE_SPACING;
 
 
2531
            colour_to_draw = COLOUR_WHITE;
 
 
2532
        }
 
 
2533
        /* Shots fired... */
 
 
2534
        {
 
 
2535
            int total_shots = 0;
 
 
2536
 
 
 
2537
            for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
2538
            {
 
 
2539
                struct PLAYER_WEAPON_DATA *weaponPtr = &PlayerStatus.WeaponSlot[i];
 
 
2540
                const TEMPLATE_WEAPON_DATA *twPtr = &TemplateWeapon[weaponPtr->WeaponIDNumber];
 
 
2541
 
 
 
2542
                if (twPtr->LogShots)
 
 
2543
                    total_shots += CurrentGameStatistics.ShotsFired[i];
 
 
2544
            }
 
 
2545
 
 
 
2546
            if (AvP.LevelCompleted)
 
 
2547
            {
 
 
2548
                /* Is it a new best? */
 
 
2549
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ShotsFired >= total_shots)
 
 
2550
                {
 
 
2551
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ShotsFired = total_shots;
 
 
2552
                    colour_to_draw = COLOUR_GREEN;
 
 
2553
                }
 
 
2554
            }
 
 
2555
 
 
 
2556
            RenderHUDString("Total Shots Fired:", TABPOINT1, y, colour_to_draw);
 
 
2557
 
 
 
2558
            sprintf(buffer, "%d", (total_shots));
 
 
2559
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2560
 
 
 
2561
            if (NotCheating)
 
 
2562
            {
 
 
2563
                sprintf(buffer,"%d", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].ShotsFired);
 
 
2564
                RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2565
            }
 
 
2566
            else
 
 
2567
            {
 
 
2568
                RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2569
            }
 
 
2570
 
 
 
2571
            colour_to_draw = COLOUR_WHITE;
 
 
2572
 
 
 
2573
            if (AvP.LevelCompleted)
 
 
2574
            {
 
 
2575
                /* Is it a completed target? */
 
 
2576
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired > -1)
 
 
2577
                {
 
 
2578
                    targets++;
 
 
2579
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired >= total_shots)
 
 
2580
                    {
 
 
2581
                        colour_to_draw = COLOUR_RED;
 
 
2582
                        targetspassed++;
 
 
2583
                    }
 
 
2584
                }
 
 
2585
            }
 
 
2586
 
 
 
2587
            if (NotCheating
 
 
2588
            &&
 
 
2589
            (UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate] != 1)
 
 
2590
            &&
 
 
2591
            (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired > -1))
 
 
2592
            {
 
 
2593
                sprintf(buffer,"%d", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.ShotsFired);
 
 
2594
                RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2595
            }
 
 
2596
            else
 
 
2597
            {
 
 
2598
                RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2599
            }
 
 
2600
 
 
 
2601
            y += NEWLINE_SPACING;
 
 
2602
            colour_to_draw = COLOUR_WHITE;
 
 
2603
        }
 
 
2604
 
 
 
2605
        /* Accuracy... */
 
 
2606
        {
 
 
2607
            int percentage = 0;
 
 
2608
            int total_shots = 0;
 
 
2609
            int total_hits = 0;
 
 
2610
 
 
 
2611
            for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
2612
            {
 
 
2613
                struct PLAYER_WEAPON_DATA *weaponPtr = &PlayerStatus.WeaponSlot[i];
 
 
2614
                const TEMPLATE_WEAPON_DATA *twPtr = &TemplateWeapon[weaponPtr->WeaponIDNumber];
 
 
2615
 
 
 
2616
                if (twPtr->LogAccuracy)
 
 
2617
                {
 
 
2618
                    total_shots += CurrentGameStatistics.ShotsFired[i];
 
 
2619
                    total_hits += CurrentGameStatistics.ShotsHit[i];
 
 
2620
                }
 
 
2621
            }
 
 
2622
 
 
 
2623
            if (total_shots)
 
 
2624
                percentage = (100*total_hits) / total_shots;
 
 
2625
 
 
 
2626
            if (AvP.LevelCompleted)
 
 
2627
            {
 
 
2628
                /* Is it a new best? */
 
 
2629
                if (UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Accuracy <= percentage)
 
 
2630
                {
 
 
2631
                    UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Accuracy = percentage;
 
 
2632
                    colour_to_draw = COLOUR_GREEN;
 
 
2633
                }
 
 
2634
            }
 
 
2635
 
 
 
2636
            RenderHUDString("Accuracy:", TABPOINT1, y, colour_to_draw);
 
 
2637
 
 
 
2638
            sprintf(buffer, "%03d%%", percentage);
 
 
2639
            RenderStringCentred(buffer, TABPOINT2, y, colour_to_draw);
 
 
2640
 
 
 
2641
            if (NotCheating)
 
 
2642
            {
 
 
2643
                sprintf(buffer,"%03d%%", UserProfile.PersonalBests[AvP.Difficulty][AvP.level].Accuracy);
 
 
2644
                RenderStringCentred(buffer,TABPOINT3,y,colour_to_draw);
 
 
2645
            }
 
 
2646
            else
 
 
2647
            {
 
 
2648
                RenderStringCentred("---",TABPOINT3,y,COLOUR_WHITE);
 
 
2649
            }
 
 
2650
 
 
 
2651
            colour_to_draw = COLOUR_WHITE;
 
 
2652
 
 
 
2653
            if (AvP.LevelCompleted)
 
 
2654
            {
 
 
2655
                /* Is it a completed target? */
 
 
2656
                if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy > -1)
 
 
2657
                {
 
 
2658
                    targets++;
 
 
2659
                    if (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy <= percentage)
 
 
2660
                    {
 
 
2661
                        colour_to_draw = COLOUR_RED;
 
 
2662
                        targetspassed++;
 
 
2663
                    }
 
 
2664
                }
 
 
2665
            }
 
 
2666
 
 
 
2667
            if (NotCheating
 
 
2668
            &&
 
 
2669
            (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
2670
            &&
 
 
2671
            (LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy > -1))
 
 
2672
            {
 
 
2673
                sprintf(buffer,"%03d%%", LevelStatsTargets[AvP.PlayerType][AvP.level].StatTargets.Accuracy);
 
 
2674
                RenderStringCentred(buffer,TABPOINT4,y,colour_to_draw);
 
 
2675
            }
 
 
2676
            else
 
 
2677
            {
 
 
2678
                RenderStringCentred("---", TABPOINT4, y, COLOUR_WHITE);
 
 
2679
            }
 
 
2680
 
 
 
2681
            y += NEWLINE_SPACING;
 
 
2682
            colour_to_draw = COLOUR_WHITE;
 
 
2683
        }
 
 
2684
 
 
 
2685
        /* Preferred weapon... */
 
 
2686
        {
 
 
2687
            unsigned int maxtime = 0;
 
 
2688
            int preferred_slot = -1;
 
 
2689
            const char * weapon_name;
 
 
2690
            struct PLAYER_WEAPON_DATA *weaponPtr;
 
 
2691
 
 
 
2692
            for (i=0; i < MAX_NO_OF_WEAPON_SLOTS; i++)
 
 
2693
            {
 
 
2694
                if (CurrentGameStatistics.WeaponTimes[i] >= maxtime)
 
 
2695
                {
 
 
2696
                    maxtime=CurrentGameStatistics.WeaponTimes[i];
 
 
2697
                    preferred_slot = i;
 
 
2698
                }
 
 
2699
            }
 
 
2700
 
 
 
2701
            assert(preferred_slot!=-1);
 
 
2702
 
 
 
2703
            weaponPtr = &PlayerStatus.WeaponSlot[preferred_slot];
 
 
2704
 
 
 
2705
            RenderHUDString("Preferred Weapon:", TABPOINT1, y, colour_to_draw);
 
 
2706
 
 
 
2707
            switch(weaponPtr->WeaponIDNumber)
 
 
2708
            {
 
 
2709
                case WEAPON_PRED_WRISTBLADE:
 
 
2710
                    weapon_name = "Wristblade";
 
 
2711
                break;
 
 
2712
                case WEAPON_PRED_PISTOL:
 
 
2713
                    weapon_name = "Pistol";
 
 
2714
                break;
 
 
2715
                case WEAPON_PRED_RIFLE:
 
 
2716
                    weapon_name = "Speargun";
 
 
2717
                break;
 
 
2718
                case WEAPON_PRED_SHOULDERCANNON:
 
 
2719
                    weapon_name = "Shoulder Cannon";
 
 
2720
                break;
 
 
2721
                case WEAPON_PRED_DISC:
 
 
2722
                    weapon_name = "Disc";
 
 
2723
                break;
 
 
2724
                case WEAPON_PRED_MEDICOMP:
 
 
2725
                    weapon_name = "Medicomp";
 
 
2726
                break;
 
 
2727
                default:
 
 
2728
                    weapon_name = "fists of fury";
 
 
2729
            }
 
 
2730
 
 
 
2731
            RenderStringCentred(weapon_name, TABPOINT2, y, colour_to_draw);
 
 
2732
            RenderStringCentred("---",TABPOINT3,y,colour_to_draw);
 
 
2733
            RenderStringCentred("---",TABPOINT4,y,COLOUR_WHITE);
 
 
2734
 
 
 
2735
            y += NEWLINE_SPACING;
 
 
2736
            colour_to_draw = COLOUR_WHITE;
 
 
2737
        }
 
 
2738
    }
 
 
2739
 
 
 
2740
    /* Vision Mode... */
 
 
2741
    {
 
 
2742
        int i;
 
 
2743
        unsigned int maxtime = 0;
 
 
2744
        int preferred_slot = -1;
 
 
2745
 
 
 
2746
        for (i=0; i < NUMBER_OF_VISION_MODES; i++)
 
 
2747
        {
 
 
2748
            if (CurrentGameStatistics.VisionModeTimes[i] >= maxtime)
 
 
2749
            {
 
 
2750
                maxtime=CurrentGameStatistics.VisionModeTimes[i];
 
 
2751
                preferred_slot = i;
 
 
2752
            }
 
 
2753
        }
 
 
2754
 
 
 
2755
        assert(preferred_slot!=-1);
 
 
2756
 
 
 
2757
        RenderHUDString("Preferred Vision Mode:", TABPOINT1, y, colour_to_draw);
 
 
2758
        sprintf(buffer,"%s\n", VisionModeNames[preferred_slot]);
 
 
2759
        RenderStringCentred(buffer,TABPOINT2,y,colour_to_draw);
 
 
2760
 
 
 
2761
        RenderStringCentred("---",TABPOINT3,y,colour_to_draw);
 
 
2762
        RenderStringCentred("---",TABPOINT4,y,COLOUR_WHITE);
 
 
2763
 
 
 
2764
    }
 
 
2765
 
 
 
2766
    y += NEWLINE_SPACING;
 
 
2767
    colour_to_draw = COLOUR_WHITE;
 
 
2768
 
 
 
2769
    /* Unlock a cheat mode? */
 
 
2770
    if(unlockable_bonus)
 
 
2771
    if (NotCheating && targets)
 
 
2772
    {
 
 
2773
        if (targets == targetspassed)
 
 
2774
        {
 
 
2775
            if (LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate != CHEATMODE_NONACTIVE)
 
 
2776
            {
 
 
2777
                if (!UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate])
 
 
2778
                {
 
 
2779
                    UserProfile.CheatMode[LevelStatsTargets[AvP.PlayerType][AvP.level].CheatModeToActivate] = 1;
 
 
2780
                    RenderStringCentred("Bonus Mode Enabled!", ScreenDescriptorBlock.SDB_CentreX, y, COLOUR_GREEN);
 
 
2781
                }
 
 
2782
            }
 
 
2783
        }
 
 
2784
    }
 
 
2785
}