Difference between revisions of "Magic The Gathering CAT"
From XentaxWiki
(→Compatible Programs: site moved) |
(→Notes and Comments: cleanup code) |
||
Line 26: | Line 26: | ||
* Hash routine in C++ code for Magic: The Gathering: | * Hash routine in C++ code for Magic: The Gathering: | ||
− | <pre>unsigned int mtg_hash(char *s){ | + | <pre>unsigned int mtg_hash(char *s) { |
− | unsigned int hash | + | unsigned int i, hash, part[2]; |
− | |||
− | |||
hash = (s[0] ^ s[1]) << 24; | hash = (s[0] ^ s[1]) << 24; | ||
part[0] = 0; | part[0] = 0; | ||
part[1] = 0; | part[1] = 0; | ||
− | + | for (i = 0; i < strlen(s); i++) { | |
− | + | part[i&1] += tolower(s[i]) * (i + 3); | |
− | part[ | ||
− | |||
− | |||
} | } | ||
− | hash = | + | hash |= (part[0] * part[1]) & 0xffffff; |
return(hash); | return(hash); | ||
}</pre> | }</pre> |
Revision as of 06:13, 26 June 2014
Choose archive extension:
Contents
CAT
- Format Type : Archive
- Endian Order : Little Endian
Format Specifications
// Archive Header
- uint32 {4} - Number Of Files
- // for each file
- uint32 {4} - File Hash
- uint32 {4} - File Offset
- uint32 {4} - File Length
Notes and Comments
- The files in the directory are NOT in the same order as the files in the archive. ie. file 1 in the directory may actually be file 3827 in the archive, etc. Actually, all records sorted in ascending order of File Hash value.
- Hash routine in C++ code for Magic: The Gathering:
unsigned int mtg_hash(char *s) { unsigned int i, hash, part[2]; hash = (s[0] ^ s[1]) << 24; part[0] = 0; part[1] = 0; for (i = 0; i < strlen(s); i++) { part[i&1] += tolower(s[i]) * (i + 3); } hash |= (part[0] * part[1]) & 0xffffff; return(hash); }
Note that names inside CAT from MtG can be brute forced by template:
yyyyz.wvl
where:
yyyy - number from 0000 till 9999
z - one of the character from list: 'abcdeftx'
This last character (z) may or may not exists, so first you should try all names from '0000.wvl' till '9999.wvl' and only if none of them match try '0000a.wvl' - '9999a.wvl', '0000b.wvl' - '9999b.wvl' and so on.
MultiEx BMS Script
ImpType Standard ; Get FN Long 0 ; For T = 1 To FN ; Get FID Long 0 ; SavePos FOO 0 ; Get FO Long 0 ; SavePos FSO 0 ; Get FS Long 0 ; Log "" FO FS FOO FSO ; Next T ;
Extended version:
# QucikBMS script for unpacking .CAT files ImpType Standard Get FileCount Long For I = 1 To FileCount Get FileHash Long Get FileOffs Long Get FileSize Long SavePos TOC String FileName p= "%08X" FileHash # read signature GoTo FileOffs Get FileHash Long # .PCX files (Gunship!) If FileHash = 0x0801050A Then String FileName += ".PCX" EndIf # .WVL files (Magic: The Gathering) If FileHash = 0x00000100 Then String FileName += ".WVL" EndIf Log FileName FileOffs FileSize GoTo TOC Next I
Compatible Programs
- Game Extractor
- MultiEx Commander
- Magic: The Gathering image decoding tools (with Delphi source codes)
Other Games
These games also use this file format
- Gunship!
- Magic: The Gathering