yah externally you can have many crc values match but the way the client gets its crc is different. the game.bin crc needs to be 117021CA if you have the correct checksum method.
- - - Updated - - -
This is how you calculate a crc value.
Code:
class CRC
{
long[] pTable = new long[256];
long Poly = 0xEDB88320;
public CRC()
{
long CRC;
int i, j;
for (i = 0; i < 256; i++)
{
CRC = i;
for (j = 0; j < 8; j++)
{
if ((CRC & 0x1) == 1)
{
CRC = (CRC >> 1) ^ Poly;
}
else
{
CRC = (CRC >> 1);
}
}
pTable[i] = CRC;
}
}
public uint GetCRC32(string FileName)
{
long StreamLength, CRC;
int BufferSize;
byte[] Buffer;
//4KB Buffer
BufferSize = 0x1000;
FileStream fs = new FileStream(FileName, FileMode.Open);
StreamLength = fs.Length;
CRC = 0xFFFFFFFF;
while (StreamLength > 0)
{
if (StreamLength < BufferSize)
{
BufferSize = (int)StreamLength;
}
Buffer = new byte[BufferSize];
fs.Read(Buffer, 0, BufferSize);
for (int i = 0; i < BufferSize; i++)
{
CRC = ((CRC & 0xFFFFFF00) / 0x100) & 0xFFFFFF ^ pTable[Buffer[i] ^ CRC & 0xFF];
}
StreamLength = StreamLength - BufferSize;
}
fs.Dispose();
fs.Close();
CRC = (-(CRC)) - 1; // !(CRC)
return (uint)CRC;
}
}
now CRC and Poly can be any value and it will change the value you get, there are standard numbers used generally because they are the most effective methods. you can also have input and output reflections increasing the possibility s more. you could also just make a custom method all together but this is doubtful as generally programmers don't go out to reinvent something that already works really well (atleast not in a professional setting, at home you can get all kinds of crazy ideas ;)