aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/libmagic/magic/Magdir/games
blob: 0ccb4acff517acf1632c6d443753e78b51726bbc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
#------------------------------------------------------------------------------
# $File: games,v 1.31 2023/03/29 22:57:27 christos Exp $
# games:  file(1) for games

# Fabio Bonelli <fabiobonelli@libero.it>
# Quake II - III data files
0       string  IDP2        	Quake II 3D Model file,
>20     long    x               %u skin(s),
>8      long    x               (%u x
>12     long    x 		%u),
>40     long    x               %u frame(s),
>16     long    x               Frame size %u bytes,
>24     long  	x               %u vertices/frame,
>28     long    x            	%u texture coordinates,
>32     long    x               %u triangles/frame

0       string  IBSP            Quake
>4      long    0x26            II Map file (BSP)
>4      long    0x2E      	III Map file (BSP)

0       string  IDS2            Quake II SP2 sprite file

#---------------------------------------------------------------------------
# Doom and Quake
# submitted by Nicolas Patrois

0       string  \xcb\x1dBoom\xe6\xff\x03\x01    Boom or linuxdoom demo
# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01

24      string  LxD\ 203        Linuxdoom save
>0      string  x       , name=%s
>44     string  x       , world=%s

# Quake

# Update: Joerg Jenderek
# URL: http://fileformats.archiveteam.org/wiki/PAK
# reference: https://quakewiki.org/wiki/.pak
# GRR: line below is too general as it matches also Acorn PackDir compressed Archive
# and Git pack ./revision
0       string  PACK    
# real Quake examples like pak0.pak have only some hundreds like 150 files
# So test for few files
>8	ulelong <0x01000000	
# in file version 5.32 test for null terminator is only true for
# offset ~< FILE_BYTES_MAX = 1 MB defined in ../../src/file.h 
# look for null terminator of 1st entry name
>>(4.l+55)	ubyte	0	Quake I or II world or extension
!:mime	application/x-dzip
!:ext	pak
#>>>8	ulelong	x	\b, table size %u
# dividing this by entry size (64) gives number of files
>>>8	ulelong/64 x	\b, %u files
# offset to the beginning of the file table
>>>4	ulelong	x	\b, offset %#x
# 1st file entry
>>>(4.l)	use	pak-entry
# 2nd file entry
#>>>4	ulelong+64	x	\b, offset %#x
#>>>(4.l+64)	use	pak-entry
#
#	display file table entry of Quake PAK archive
0	name		pak-entry
# normally entry start after header which implies offset 12 or higher
>56	ulelong	>11	
# the offset from the beginning of pak to beginning of this entry file contents
>>56	ulelong	x	at %#x
# the size of file for this entry 
>>60	ulelong	x	%u bytes
# 56 byte null-terminated entry name string includes path like maps/e1m1.bsp
>>0	string	x	'%-.56s'
# inspect entry content by jumping to entry offset
>>(56)	indirect x	\b: 

#0       string  -1\x0a  Quake I demo
#>30     string  x        version %.4s
#>61     string  x        level %s

#0       string  5\x0a   Quake I save

# The levels

# Quake 1

0	string	5\x0aIntroduction             Quake I save: start Introduction
0	string	5\x0athe_Slipgate_Complex     Quake I save: e1m1 The slipgate complex
0	string	5\x0aCastle_of_the_Damned     Quake I save: e1m2 Castle of the damned
0	string	5\x0athe_Necropolis           Quake I save: e1m3 The necropolis
0	string	5\x0athe_Grisly_Grotto        Quake I save: e1m4 The grisly grotto
0	string	5\x0aZiggurat_Vertigo         Quake I save: e1m8 Ziggurat vertigo (secret)
0	string	5\x0aGloom_Keep               Quake I save: e1m5 Gloom keep
0	string	5\x0aThe_Door_To_Chthon       Quake I save: e1m6 The door to Chthon
0	string	5\x0aThe_House_of_Chthon      Quake I save: e1m7 The house of Chthon
0	string	5\x0athe_Installation         Quake I save: e2m1 The installation
0	string	5\x0athe_Ogre_Citadel         Quake I save: e2m2 The ogre citadel
0	string	5\x0athe_Crypt_of_Decay       Quake I save: e2m3 The crypt of decay (dopefish lives!)
0	string	5\x0aUnderearth               Quake I save: e2m7 Underearth (secret)
0	string	5\x0athe_Ebon_Fortress        Quake I save: e2m4 The ebon fortress
0	string	5\x0athe_Wizard's_Manse       Quake I save: e2m5 The wizard's manse
0	string	5\x0athe_Dismal_Oubliette     Quake I save: e2m6 The dismal oubliette
0	string	5\x0aTermination_Central      Quake I save: e3m1 Termination central
0	string	5\x0aVaults_of_Zin            Quake I save: e3m2 Vaults of Zin
0	string	5\x0athe_Tomb_of_Terror       Quake I save: e3m3 The tomb of terror
0	string	5\x0aSatan's_Dark_Delight     Quake I save: e3m4 Satan's dark delight
0	string	5\x0athe_Haunted_Halls        Quake I save: e3m7 The haunted halls (secret)
0	string	5\x0aWind_Tunnels             Quake I save: e3m5 Wind tunnels
0	string	5\x0aChambers_of_Torment      Quake I save: e3m6 Chambers of torment
0	string	5\x0athe_Sewage_System        Quake I save: e4m1 The sewage system
0	string	5\x0aThe_Tower_of_Despair     Quake I save: e4m2 The tower of despair
0	string	5\x0aThe_Elder_God_Shrine     Quake I save: e4m3 The elder god shrine
0	string	5\x0athe_Palace_of_Hate       Quake I save: e4m4 The palace of hate
0	string	5\x0aHell's_Atrium            Quake I save: e4m5 Hell's atrium
0	string	5\x0athe_Nameless_City        Quake I save: e4m8 The nameless city (secret)
0	string	5\x0aThe_Pain_Maze            Quake I save: e4m6 The pain maze
0	string	5\x0aAzure_Agony              Quake I save: e4m7 Azure agony
0	string	5\x0aShub-Niggurath's_Pit     Quake I save: end Shub-Niggurath's pit

# Quake DeathMatch levels

0	string	5\x0aPlace_of_Two_Deaths	 Quake I save: dm1 Place of two deaths
0	string	5\x0aClaustrophobopolis		 Quake I save: dm2 Claustrophobopolis
0	string	5\x0aThe_Abandoned_Base		 Quake I save: dm3 The abandoned base
0	string	5\x0aThe_Bad_Place		 Quake I save: dm4 The bad place
0	string	5\x0aThe_Cistern		 Quake I save: dm5 The cistern
0	string	5\x0aThe_Dark_Zone		 Quake I save: dm6 The dark zone

# Scourge of Armagon

0	string	5\x0aCommand_HQ               Quake I save: start Command HQ
0	string	5\x0aThe_Pumping_Station      Quake I save: hip1m1 The pumping station
0	string	5\x0aStorage_Facility         Quake I save: hip1m2 Storage facility
0	string	5\x0aMilitary_Complex         Quake I save: hip1m5 Military complex (secret)
0	string	5\x0athe_Lost_Mine            Quake I save: hip1m3 The lost mine
0	string	5\x0aResearch_Facility        Quake I save: hip1m4 Research facility
0	string	5\x0aAncient_Realms           Quake I save: hip2m1 Ancient realms
0	string	5\x0aThe_Gremlin's_Domain     Quake I save: hip2m6 The gremlin's domain (secret)
0	string	5\x0aThe_Black_Cathedral      Quake I save: hip2m2 The black cathedral
0	string	5\x0aThe_Catacombs            Quake I save: hip2m3 The catacombs
0	string	5\x0athe_Crypt__              Quake I save: hip2m4 The crypt
0	string	5\x0aMortum's_Keep            Quake I save: hip2m5 Mortum's keep
0	string	5\x0aTur_Torment              Quake I save: hip3m1 Tur torment
0	string	5\x0aPandemonium              Quake I save: hip3m2 Pandemonium
0	string	5\x0aLimbo                    Quake I save: hip3m3 Limbo
0	string	5\x0athe_Edge_of_Oblivion     Quake I save: hipdm1 The edge of oblivion (secret)
0	string	5\x0aThe_Gauntlet             Quake I save: hip3m4 The gauntlet
0	string	5\x0aArmagon's_Lair           Quake I save: hipend Armagon's lair

# Malice

0	string	5\x0aThe_Academy      Quake I save: start The academy
0	string	5\x0aThe_Lab          Quake I save: d1 The lab
0	string	5\x0aArea_33          Quake I save: d1b Area 33
0	string	5\x0aSECRET_MISSIONS  Quake I save: d3b Secret missions
0	string	5\x0aThe_Hospital     Quake I save: d10 The hospital (secret)
0	string	5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
0	string	5\x0aBACK_2_MALICE    Quake I save: d4b Back to Malice
0	string	5\x0aArea44           Quake I save: d1c Area 44
0	string	5\x0aTakahiro_Towers  Quake I save: d2 Takahiro towers
0	string	5\x0aA_Rat's_Life     Quake I save: d3 A rat's life
0	string	5\x0aInto_The_Flood   Quake I save: d4 Into the flood
0	string	5\x0aThe_Flood        Quake I save: d5 The flood
0	string	5\x0aNuclear_Plant    Quake I save: d6 Nuclear plant
0	string	5\x0aThe_Incinerator_Plant    Quake I save: d7 The incinerator plant
0	string	5\x0aThe_Foundry              Quake I save: d7b The foundry
0	string	5\x0aThe_Underwater_Base      Quake I save: d8 The underwater base
0	string	5\x0aTakahiro_Base            Quake I save: d9 Takahiro base
0	string	5\x0aTakahiro_Laboratories    Quake I save: d12 Takahiro laboratories
0	string	5\x0aStayin'_Alive    Quake I save: d13 Stayin' alive
0	string	5\x0aB.O.S.S._HQ      Quake I save: d14 B.O.S.S. HQ
0	string	5\x0aSHOWDOWN!        Quake I save: d15 Showdown!

# Malice DeathMatch levels

0	string	5\x0aThe_Seventh_Precinct	 Quake I save: ddm1 The seventh precinct
0	string	5\x0aSub_Station		 Quake I save: ddm2 Sub station
0	string	5\x0aCrazy_Eights!		 Quake I save: ddm3 Crazy eights!
0	string	5\x0aEast_Side_Invertationa	 Quake I save: ddm4 East side invertationa
0	string	5\x0aSlaughterhouse		 Quake I save: ddm5 Slaughterhouse
0	string	5\x0aDOMINO			 Quake I save: ddm6 Domino
0	string	5\x0aSANDRA'S_LADDER		 Quake I save: ddm7 Sandra's ladder


0	string	MComprHD	MAME CHD compressed hard disk image,
>12	belong	x		version %u

# MAME input recordings

0	string	MAMEINP\0		MAME input recording
>8	leqdate	x			at %s,
>16	leshort	x			format version %d.
>18	leshort	x			\b%d,
>20	string	x			%s driver,
>32	string	x			%s

# doom - submitted by Jon Dowland

0	string	=IWAD		doom main IWAD data
>4	lelong	x		containing %d lumps
0	string	=PWAD		doom patch PWAD data
>4	lelong	x		containing %d lumps

# Build engine group files (Duke Nukem, Shadow Warrior, ...)
# Extension: .grp
# Created by: "Ganael Laplanche" <ganael.laplanche@martymac.org>
0	string	KenSilverman	Build engine group file
>12	lelong	x		containing %d files

# Summary: Warcraft 3 save
# Extension: .w3g
# Created by: "Nelson A. de Oliveira" <naoliv@gmail.com>
0	string		Warcraft\ III\ recorded\ game	%s


# Summary: Warcraft 3 map
# Extension: .w3m
# Created by: "Nelson A. de Oliveira" <naoliv@gmail.com>
0	string		HM3W		Warcraft III map file


# Summary: SGF Smart Game Format
# Extension: .sgf
# Reference: https://www.red-bean.com/sgf/
# Created by: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>
# Modified by (1): Abel Cheung (regex, more game format)
# FIXME: Some games don't have GM (game type)
0	regex		\\(;.*GM\\[[0-9]{1,2}\\]	Smart Game Format
>2	search/0x200/b	GM[
>>&0	string		1]	(Go)
>>&0	string		2]	(Othello)
>>&0	string		3]	(chess)
>>&0	string		4]	(Gomoku+Renju)
>>&0	string		5]	(Nine Men's Morris)
>>&0	string		6]	(Backgammon)
>>&0	string		7]	(Chinese chess)
>>&0	string		8]	(Shogi)
>>&0	string		9]	(Lines of Action)
>>&0	string		10]	(Ataxx)
>>&0	string		11]	(Hex)
>>&0	string		12]	(Jungle)
>>&0	string		13]	(Neutron)
>>&0	string		14]	(Philosopher's Football)
>>&0	string		15]	(Quadrature)
>>&0	string		16]	(Trax)
>>&0	string		17]	(Tantrix)
>>&0	string		18]	(Amazons)
>>&0	string		19]	(Octi)
>>&0	string		20]	(Gess)
>>&0	string		21]	(Twixt)
>>&0	string		22]	(Zertz)
>>&0	string		23]	(Plateau)
>>&0	string		24]	(Yinsh)
>>&0	string		25]	(Punct)
>>&0	string		26]	(Gobblet)
>>&0	string		27]	(hive)
>>&0	string		28]	(Exxit)
>>&0	string		29]	(Hnefatal)
>>&0	string		30]	(Kuba)
>>&0	string		31]	(Tripples)
>>&0	string		32]	(Chase)
>>&0	string		33]	(Tumbling Down)
>>&0	string		34]	(Sahara)
>>&0	string		35]	(Byte)
>>&0	string		36]	(Focus)
>>&0	string		37]	(Dvonn)
>>&0	string		38]	(Tamsk)
>>&0	string		39]	(Gipf)
>>&0	string		40]	(Kropki)

##############################################
# NetImmerse/Gamebryo game engine entries

# Summary: Gamebryo game engine file
# Extension: .nif, .kf
# Created by: Abel Cheung <abelcheung@gmail.com>
0		string		Gamebryo\ File\ Format,\ Version\ 	Gamebryo game engine file
>&0		regex		[0-9a-z.]+				\b, version %s

# Summary: Gamebryo game engine file
# Extension: .kfm
# Created by: Abel Cheung <abelcheung@gmail.com>
0		string		;Gamebryo\ KFM\ File\ Version\ 		Gamebryo game engine animation File
>&0		regex		[0-9a-z.]+				\b, version %s

# Summary: NetImmerse game engine file
# Extension .nif
# Created by: Abel Cheung <abelcheung@gmail.com>
0		string		NetImmerse\ File\ Format,\ Version
>&0		string		n\ 					NetImmerse game engine file
>>&0		regex		[0-9a-z.]+				\b, version %s

# Type:	SGF Smart Game Format
# URL:	https://www.red-bean.com/sgf/
# From:	Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>
2	regex/c	\\(;.*GM\\[[0-9]{1,2}\\]	Smart Game Format
>2	regex/c	GM\\[1\\]			- Go Game
>2	regex/c	GM\\[6\\]			- BackGammon Game
>2	regex/c	GM\\[11\\]			- Hex Game
>2	regex/c	GM\\[18\\]			- Amazons Game
>2	regex/c	GM\\[19\\]			- Octi Game
>2	regex/c	GM\\[20\\]			- Gess Game
>2	regex/c	GM\\[21\\]			- twix Game

# Epic Games/Unreal Engine Package
# URL: https://docs.unrealengine.com/udk/Three/ContentCooking.html
#      https://eliotvu.com/page/unreal-package-file-format
# Little-endian version (such as x86 PC)
0		lelong		0x9E2A83C1	Unreal Engine package (little-endian)
!:ext		xxx/tfc/upk/me1/u
>4		uleshort	!0		\b, version %u
>>6		uleshort	!0		\b/%03u
>>0		use		upk_header
# Big-endian version (such as PS3)
0		belong		0x9E2A83C1	Unreal Engine package (big-endian)
!:ext		xxx/tfc
>6		ubeshort	!0		\b, version %u
>>4		ubeshort	!0		\b/%03u
>>0		use		\^upk_header

0		name		upk_header
# Identify game from version and licensee
>4		ulelong		0x000002b2	(Alice Madness Returns)
>4		ulelong		0x002f0313	(Aliens: Colonial Marines)
>4		ulelong		0x005b021b	(Alpha Protocol)
>4		ulelong		0x0000032c	(AntiChamber)
>4		ulelong		0x00200223	(APB: All Points Bulletin)
>4		ulelong		0x004b02d7	(Bioshock Infinite)
>4		ulelong		0x00380340	(Borderlands 2)
>4		ulelong		0x001d02e6	(Bulletstorm)
>4		ulelong		0x00050240	(CrimeCraft)
>4		ulelong		0x00000356	(Deadlight)
>4		ulelong		0x001e0321	(Dishonored)
>4		ulelong		0x000202a6	(Dungeon Defenders)
>4		ulelong		0x000901ea	(Gears of War)
>4		ulelong		0x0000023f	(Gears of War 2)
>4		ulelong		0x0000033c	(Gears of War 3)
>4		ulelong		0x0000034e	(Gears of War: Judgement)
>4		ulelong		0x0004035c	(Hawken)
>4		ulelong		0x0001034a	(Infinity Blade 2)
>4		ulelong		0x00000350	(InMomentum)
>4		ulelong		0x0015037D	(Life Is Strange)
>4		ulelong		0x000b01a5	(Medal of Honor: Airborne)
>4		ulelong		0x002b0218	(Mirrors Edge)
>4		ulelong		0x0000027e	(Monday Night Combat)
>4		ulelong		0x0000024b	(MoonBase Alpha)
>4		ulelong		0x002e01d8	(Mortal Kombat Komplete Edition 2605)
>4		ulelong		0x0000035c	(Painkiller HD)
>4		ulelong		0x0000034d	(Q.U.B.E)
>4		ulelong		0x80660340	(Quantum Conundrum)
>4		ulelong		0x0000035b	(Ravaged)
>4		ulelong		0x00150340	(Remember Me)
>4		ulelong		0x00060171	(Roboblitz)
>4		ulelong		0x00000325	(Rock of Ages)
>4		ulelong		0x0000032a	(Sanctum)
>4		ulelong		0x00030248	(Saw)
>4		ulelong		0x007e0248	(Singularity)
>4		ulelong		0x00090388	(Soldier Front 2)
>4		ulelong		0x000701e6	(Stargate Worlds)
>4		ulelong		0x00000334	(Super Monday Night Combat)
>4		ulelong		0x000002c2	(The Ball)
>4		ulelong		0x000e0262	(The Exiled Realm of Arborea or TERA)
>4		ulelong		0x0000035b	(The Five Cores)
>4		ulelong		0x00000349	(The Haunted: Hells Reach)
>4		ulelong		0x00000354	(Unmechanical)
>4		ulelong		0x035c0298	(Unreal Development Kit)
>4		ulelong		0x00000200	(Unreal Tournament 3)
>4		ulelong		0x0000032d	(Waves)
>4		ulelong		0x003b034d	(XCOM: Enemy Unknown)
# Newer versions insert more headers
>4		ulelong&0xFFFF	<249
>>12		lelong		!0		\b, names: %d
>>28		lelong		!0		\b, imports: %d
>>20		lelong		!0		\b, exports: %d
>4		ulelong&0xFFFF	>248
>>12		belong&0xFF	!0
>>>12		string		x		\b, folder "%s"
>>>>&5		lelong		!0		\b, names: %d
>>>>&21		lelong		!0		\b, imports: %d
>>>>&13		lelong		!0		\b, exports: %d
>>12		belong&0xFF	0
>>>16		belong&0xFF	!0
>>>>16		string		x		\b, folder "%s"
>>>>>&5		lelong		!0		\b, names: %d
>>>>>&21	lelong		!0		\b, imports: %d
>>>>>&13	lelong		!0		\b, exports: %d
>>>16		belong&0xFF	0
>>>>20		string		x		\b, folder "%s"
>>>>>&5		lelong		!0		\b, names: %d
>>>>>&21	lelong		!0		\b, imports: %d
>>>>>&13	lelong		!0		\b, exports: %d

0	string		ESVG
>4	lelong		0x00160000
>10	string		TOC\020		Empire Deluxe for DOS saved game

# Sid Meier's Civilization V/VI
# From: Benjamin Lowry <ben@ben.gmbh>
0	string	CIV5
>4	byte	0x08		Sid Meier's Civilization V saved game,
>>12	regex	[0-9a-z.]+	saved by game version %s
>4	byte	0x01		Sid Meier's Civilization V replay data,
>>12	regex	[0-9a-z.]+	saved by game version %s

0	string	CIV6		Sid Meier's Civilization VI saved game

# https://syzygy-tables.info/
# From Michel Van den Bergh
0	string	\327f\f\245	Syzygy DTZ tablebase
!:mime	application/syzygy
0	string	q\350#]		Syzygy WDL tablebase
!:mime	application/syzygy

##############################################################################
# Grand Theft Auto (GTA) file formats.
#
# Summary:
# Includes GTA-specific formats used in all games from 1997 to present. Games
# and formats were created by Rockstar North, formerly DMA Design. Magic tests
# were written based on a combination of official and community documentation.
#
# Created by: Oliver Galvin <odg@riseup.net>
#
# References:
# * Classic GTA documentation and research:
#    <https://gitlab.com/classic-gta/gta-data>
# * Official RenderWare documentation available from EA:
#    <https://github.com/electronicarts/RenderWare3Docs>
# * Lots of community research in the GTAMods wiki:
#    <https://gtamods.com/wiki>

# GTA 2D-Era data - 'Classic' top down games (1/L/2)

## GTA text

0	string	\xbf\xf8\xbd\x49\x62\xbe	GTA1 in-game text (FXT),
0	string	GBL	GTA2 in-game text (GXT),
>3	string  	E	English,
>>4	uleshort	x	version %d
>3	string  	F	French,
>>4	uleshort	x	version %d
>3	string  	G	German,
>>4	uleshort	x	version %d
>3	string  	I	Italian,
>>4	uleshort	x	version %d
>3	string  	S	Spanish,
>>4	uleshort	x	version %d
>3	string  	J	Japanese,
>>4	uleshort	x	version %d

## GTA maps

0	ulelong 	331	GTA1 map layout (CMP),
>4	byte    	1	Level 1
>4	byte    	2	Level 2
>4	byte    	3	Level 3
0	string  	GBMP	GTA2/GBH map layout (GMP),
>4	uleshort	x	version %d
0	string/t	[MapFiles]	GTA2 multiplayer map metadata (MMP)
0	string/t	MainOrBonus\ =\ MAIN	GTA2 single player map listing (test1.seq)

## GTA 2D sprites and textures

0	ulelong 	290	GTA1 style data (GRX), 8 bit editor graphics
0	ulelong 	325	GTA1 style data (GRY), 8 bit in-game graphics
0	ulelong 	336	GTA1 style data (G24), 24 bit in-game graphics
0	string  	GBST	GTA2/GBH style data (STY), in-game graphics,
>4	uleshort	x	version %d

## GTA audio index

0	ulelong	0
>4	ulelong	<0x40000
>>8	ulelong	>4500
>>>8	ulelong	<45000	GTA audio index data (SDT)

## GTA scripts

0	ulelong 	0x00080000
>4	uleshort	0x0024    	GTA2 binary main script (SCR)

0	uleshort	0x063c    	GTA2 binary mission script (SCR), Residential area (ste)
0	uleshort	0x055b    	GTA2 binary mission script (SCR), Downtown area (wil)
0	uleshort	0x0469    	GTA2 binary mission script (SCR), Industrial area (bil)

0	string   	v9.6\0\0 	GTA2 replay file (REP),
>8	regex/30c	[a-z0-9:\ ]+\0\0	created on %s

# GTA 3D-Era (III/VC/SA/LCS/VCS) - used by the RenderWare engine by Criterion Games

## GTA 3D models and textures - RenderWare binary streams

8	ulelong	0x00000310	RenderWare data, v3.1.0.0, used in GTA III on PS2,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x0401ffff	RenderWare data, v3.1.0.1, used in GTA III on PC/PS2,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x0800ffff	RenderWare data, v3.2.0.0, used in GTA III on PC,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x0c00ffff	RenderWare data, v3.3.0.0,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x0c02ffff	RenderWare data, v3.3.0.2, used in GTA III PC and GTA VC PS2,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x1000ffff	RenderWare data, v3.4.0.0,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x1003ffff	RenderWare data, v3.4.0.3, used in GTA VC PC,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x1005ffff	RenderWare data, v3.4.0.5, used in GTA III/VC on Android,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x1400ffff	RenderWare data, v3.5.0.0, used in GTA III/VC on Xbox,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)
8	ulelong	0x1803ffff	RenderWare data, v3.6.0.3, used in GTA SA,
>0	ulelong	0x00000016	texture archive (TXD)
>0	ulelong 0x00000010	3D models (DFF)

0	string	COL	RenderWare collision data (COL),
>3	string	L	version 1, used in GTA III/VC/SA
>3	string	2	version 2, used in GTA SA
>3	string	3	version 3, used in GTA SA
>3	string	4	version 4, used in GTA SA

## GTA items and animations

0	string/c	#\ ipl\ generated\ from\ max\ file	GTA Item Placement data (IPL), used in GTA III/VC
0	string/b	bnry	GTA Item Placement data (IPL), used in GTA SA/IV,
>4	ulelong 	x	%d items

0	string	ANP	GTA animation data (IFP),
>3	string	K	version 1, used in GTA III/VC
>3	string	3	version 2, used in GTA SA

0	string	GtaSA29	GTA Replay data (REP), used in GTA SA

## GTA text

0	string	TKEY	GTA in-game text (GXT), version 2, used in GTA III
0	string	TABL	GTA in-game text (GXT), version 3, used in GTA VC/LS/VCS

## GTA scripts

0	string	\x02\x00\x01	GTA script (SCM), used in GTA III/VC/SA

## GTA archives

0	string	VER2	GTA archive (IMG), version 2, used in GTA SA,
>4	ulelong	x	%d items

# GTA HD-Era (IV/V) - used by the Rockstar Advanced Game Engine (RAGE)

## GTA models and textures - RAGE resources
# Note: GTA IV formats not yet documented - WAD, WBD, WBN, WHM, WPL

0	ulelong	0x00695254	GTA Drawable data (WDR), model and weapon data, used in GTA IV
0	ulelong	0x00695238	GTA Windows Frag Type (WFT), vehicle models, used in GTA IV
0	ulelong	0x006953A4	GTA Ped and LOD models (WDD), used in GTA IV
0	ulelong	0x00695384	GTA Windows Texture Dictionary (WTD), used in GTA IV

## GTA text

4	string  	TABL	GTA in-game text (GXT),
>0	uleshort	x	version %d, used in GTA SA/IV
0	string  	2GXT	GTA in-game text (GXT2), used in GTA V

## GTA scripts

0	ulelong	0x0d524353	GTA script (SCO), unencrypted, used in GTA IV,
>4	ulelong	x         	%d code bytes,
>>8	ulelong	x         	%d static variables,
>>>12	ulelong	x         	%d global variables
0	ulelong	0x0e726373	GTA script (SCO), encrypted, used in GTA IV
>4	ulelong	x         	%d code bytes,
>>8	ulelong	x         	%d static variables,
>>>12	ulelong	x         	%d global variables

## GTA archives

0	ulelong	0xa94e2a52	GTA archive (IMG),
>4	ulelong	x        	version %d, used in GTA IV,
>>8	ulelong	x        	%d items

# RPF[0-8]
0	ulelong&0xfffffff0 =0x52504630
>0	ulelong&0xf	<9	RAGE Package Format (RPF), version %d, used in
>>0	ulelong&0xf	=0	Rockstar Table Tennis,
>>0	ulelong&0xf	=1	*unknown*
>>0	ulelong&0xf	=2	GTA IV,
>>0	ulelong&0xf	=3	GTA IV Audio & Midnight Club: LA,
>>0	ulelong&0xf	=4	Max Payne 3,
>>0	ulelong&0xf	=5	*unknown*
>>0	ulelong&0xf	=6	RDR,
>>0	ulelong&0xf	=7	GTA V,
>>0	ulelong&0xf	=8	RDR 2,
>>4	ulelong 	x	%d bytes,
>>>8	ulelong 	x	%d entries

# Blitz3D Model File Format
# From: Alexandre Iooss <erdnaxe@crans.org>
# URL: https://github.com/minetest/B3DExport/blob/master/B3DExport.py
0	string		BB3D
>4	lelong		>0
>>8	lelong		>0	Blitz3D Model
!:ext	b3d
>>>8	lelong		x	\b, version %d

# Minetest Schematic File Format
# From: Alexandre Iooss <erdnaxe@crans.org>
# URL: https://github.com/minetest/minetest/blob/5.6.1/src/mapgen/mg_schematic.h
0	string		MTSM	Minetest Schematic
!:ext	mts
>4	ubeshort	x	\b, version %d
>6	ubeshort	x	\b, size [%d
>8	ubeshort	x	\b, %d
>10	ubeshort	x	\b, %d]

# MagicaVoxel File Format
# From: Alexandre Iooss <erdnaxe@crans.org>
# URL: https://github.com/ephtracy/voxel-model/blob/ee2216c28a78ebb68691dc6cfa9c4ba429117ea2/MagicaVoxel-file-format-vox.txt
# Note: This format is used in Veloren voxel RPG.
0	string		VOX\x20
>4	lelong		>0	MagicaVoxel model
!:ext	vox
>>4	lelong		x	\b, version %d

# Wwise SoundBank
# From: Alexandre Iooss <erdnaxe@crans.org>
# URL: https://wiki.xentax.com/index.php/Wwise_SoundBank_(*.bnk)
0	string	BKHD
# Little-endian version (such as x86 PC)
>4	ulelong	<0x100		Wwise SoundBank (little-endian)
!:ext	bnk
>>0	use	wwise_bkhd
# Big-endian version (such as PS3)
>4	ubelong	<0x100		Wwise SoundBank (big-endian)
!:ext	bnk
>>0	use	\^wwise_bkhd

0	name	wwise_bkhd
>8	ulelong	x		\b, version %d
>12	ulelong	x		\b, id %08X
>16	ulelong	=0x00		\b, SFX
>16	ulelong	=0x01		\b, arabic
>16	ulelong	=0x02		\b, bulgarian
>16	ulelong	=0x03		\b, chinese (HK)
>16	ulelong	=0x04		\b, chinese (PRC)
>16	ulelong	=0x05		\b, chinese (Taiwan)
>16	ulelong	=0x06		\b, czech
>16	ulelong	=0x07		\b, danish
>16	ulelong	=0x08		\b, dutch
>16	ulelong	=0x09		\b, english (Australia)
>16	ulelong	=0x0A		\b, english (India)
>16	ulelong	=0x0B		\b, english (UK)
>16	ulelong	=0x0C		\b, english (US)
>16	ulelong	=0x0D		\b, finnish
>16	ulelong	=0x0E		\b, french (Canada)
>16	ulelong	=0x0F		\b, french (France)
>16	ulelong	=0x10		\b, german
>16	ulelong	=0x11		\b, greek
>16	ulelong	=0x12		\b, hebrew
>16	ulelong	=0x13		\b, hungarian
>16	ulelong	=0x14		\b, indonesian
>16	ulelong	=0x15		\b, italian
>16	ulelong	=0x16		\b, japanese
>16	ulelong	=0x17		\b, korean
>16	ulelong	=0x18		\b, latin
>16	ulelong	=0x19		\b, norwegian
>16	ulelong	=0x1A		\b, polish
>16	ulelong	=0x1B		\b, portuguese (Brazil)
>16	ulelong	=0x1C		\b, portuguese (Portugal)
>16	ulelong	=0x1D		\b, romanian
>16	ulelong	=0x1E		\b, russian
>16	ulelong	=0x1F		\b, slovenian
>16	ulelong	=0x20		\b, spanish (Mexico)
>16	ulelong	=0x21		\b, spanish (Spain)
>16	ulelong	=0x22		\b, spanish (US)
>16	ulelong	=0x23		\b, swedish
>16	ulelong	=0x24		\b, turkish
>16	ulelong	=0x25		\b, ukrainian
>16	ulelong	=0x26		\b, vietnamese

# Wwise Audio Package
# From: Alexandre Iooss <erdnaxe@crans.org>
# URL: https://wiki.xentax.com/index.php/Wwise_Audio_PCK
0	string	AKPK
# Little-endian version (such as x86 PC)
>8	ulelong	<0x100	Wwise Audio Package (little-endian)
!:ext	pck
# Big-endian version (such as PS3)
>8	ubelong	<0x100	Wwise Audio Package (big-endian)
!:ext	pck