Valhalla Legends Forums Archive | Battle.net Bot Development | D2GS compression.

AuthorMessageTime
mantralord
I reversed D2GS decompression a long time ago, haven't really cared about D2 for a while.  Here's the code to (re)compress D2GS packets.  I hope someone finds it useful.

[code]
/* Packet compression table */
unsigned int CompTable[] = {
0x80010000, 0x70040000, 0x5C060000, 0x3E070000, 0x40070000, 0x60060000, 0x42070000, 0x44070000,
0x46070000, 0x30080000, 0x48070000, 0x31080000, 0x32080000, 0x4A070000, 0x23080100, 0x33080000,
0x34080000, 0x35080000, 0x4C070000, 0x64060000, 0x68060000, 0x4E070000, 0x36080000, 0x37080000,
0x38080000, 0x23080101, 0x24080100, 0x0D070306, 0x0D070307, 0x39080000, 0x50070000, 0x3A080000,
0x3B080000, 0x0E080200, 0x0E080201, 0x0E080202, 0x0E080203, 0x24080101, 0x0F080200, 0x0F080201,
0x25080100, 0x0F080202, 0x0F080203, 0x10080200, 0x10080201, 0x10080202, 0x10080203, 0x00080300,
0x25080101, 0x26080100, 0x11080200, 0x11080201, 0x11080202, 0x11080203, 0x12080200, 0x12080201,
0x12080202, 0x12080203, 0x13080200, 0x26080101, 0x13080201, 0x13080202, 0x13080203, 0x14080200,
0x27080100, 0x14080201, 0x14080202, 0x27080101, 0x14080203, 0x28080100, 0x15080200, 0x15080201,
0x15080202, 0x15080203, 0x16080200, 0x16080201, 0x28080101, 0x29080100, 0x16080202, 0x00080301,
0x29080101, 0x3C080000, 0x2A080100, 0x16080203, 0x00080302, 0x2A080101, 0x2B080100, 0x17080200,
0x2B080101, 0x17080201, 0x17080202, 0x17080203, 0x00080303, 0x18080200, 0x18080201, 0x18080202,
0x18080203, 0x19080200, 0x2C080100, 0x2C080101, 0x2D080100, 0x19080201, 0x19080202, 0x52070000,
0x54070000, 0x56070000, 0x19080203, 0x2D080101, 0x3D080000, 0x58070000, 0x1A080200, 0x1A080201,
0x1A080202, 0x00080304, 0x1A080203, 0x1B080200, 0x1B080201, 0x1B080202, 0x1B080203, 0x1C080200,
0x1C080201, 0x1C080202, 0x1C080203, 0x00080305, 0x1D080200, 0x1D080201, 0x1D080202, 0x1D080203,
0x5A070000, 0x1E080200, 0x1E080201, 0x1E080202, 0x00080306, 0x00080307, 0x01080300, 0x01080301,
0x01080302, 0x1E080203, 0x1F080200, 0x01080303, 0x01080304, 0x01080305, 0x01080306, 0x1F080201,
0x2E080100, 0x01080307, 0x02080300, 0x1F080202, 0x02080301, 0x2E080101, 0x2F080100, 0x2F080101,
0x1F080203, 0x02080302, 0x02080303, 0x02080304, 0x02080305, 0x02080306, 0x02080307, 0x03080300,
0x20080200, 0x03080301, 0x20080201, 0x03080302, 0x03080303, 0x03080304, 0x03080305, 0x03080306,
0x03080307, 0x04080300, 0x04080301, 0x04080302, 0x04080303, 0x04080304, 0x04080305, 0x04080306,
0x20080202, 0x04080307, 0x05080300, 0x05080301, 0x05080302, 0x05080303, 0x05080304, 0x05080305,
0x20080203, 0x05080306, 0x05080307, 0x06080300, 0x06080301, 0x06080302, 0x06080303, 0x06080304,
0x21080200, 0x06080305, 0x21080201, 0x06080306, 0x06080307, 0x07080300, 0x07080301, 0x07080302,
0x07080303, 0x07080304, 0x07080305, 0x07080306, 0x07080307, 0x08080300, 0x21080202, 0x08080301,
0x08080302, 0x08080303, 0x08080304, 0x08080305, 0x08080306, 0x08080307, 0x09080300, 0x09080301,
0x09080302, 0x09080303, 0x09080304, 0x09080305, 0x09080306, 0x09080307, 0x0A080300, 0x0A080301,
0x21080203, 0x0A080302, 0x22080200, 0x0A080303, 0x0A080304, 0x0A080305, 0x0A080306, 0x0A080307,
0x22080201, 0x0B080300, 0x0B080301, 0x0B080302, 0x0B080303, 0x0B080304, 0x0B080305, 0x0B080306,
0x22080202, 0x0B080307, 0x0C080300, 0x0C080301, 0x0C080302, 0x0C080303, 0x0C080304, 0x0C080305,
0x22080203, 0x0C080306, 0x0C080307, 0x0D080300, 0x0D080301, 0x0D080302, 0x0D080303, 0x6C060000,
};

/* Creates the size header for raw data */
unsigned int GamePacketHeader(unsigned int size, unsigned char* out){
if(size > 238){
size += 2;
size |= 0xF000;
out[0] = (unsigned char) (size >> 8);
out[1] = (unsigned char) (size & 0xFF);
return 2;
} else {
out[0] = (unsigned char) size + 1;
return 1;
}
}

/* D2gs compression routine, by mantralord */
unsigned int GamePacketEncode(unsigned char* indata, unsigned int inlen, unsigned char* outdata) {

unsigned int a, e, buf = 0;
int cnt = 0;
unsigned char* tmp = outdata;

while(inlen--){

a = CompTable[*indata++];
e = (a & 0xFF00) >> 8;

buf |= (a >> 24) << (24 - cnt);
cnt += (a & 0xFF0000) >> 16;

if(e) {
buf |= ((a & 0xFF) << (8 - e)) << (24 - cnt);
cnt += e;
}

while(cnt > 8){
*outdata++ = buf >> 24;
cnt -= 8;
buf <<= 8;
}
}

while(cnt > 0){
*outdata++ = buf >> 24;
buf <<= 8;
cnt -= 8;
}

return (unsigned int) (outdata - tmp);
}

[/code]
January 12, 2006, 1:27 PM
l2k-Shadow
Wow... VERY nice. Thanks much.
January 12, 2006, 2:39 PM
Spilled[DW]
great work....
January 12, 2006, 2:45 PM
Ringo
w00t!
*hugs mantralord*
January 12, 2006, 8:11 PM
Ringo
[quote author=Joe link=topic=13890.msg141597#msg141597 date=1137114579]
Ported some of it to VB:
[/quote]

Heh i just modifyed my post >_<
I'll repost it, please help! :P


[EDIT]
Thanks mantralord!
Im having some problems useing it tho, due to not knowing C++ :(
Is that in C or C++? i cant compile it with dev (nore the decompression code for some reassion)
After tinking around for hours, i decided to try and port it to VB6, but im lost by how it works :(

Can somone who can read C/C++ please explain what the following mean and how the are handled through out the function?
Im right looking faward to useing this :D

While inlen = inlen - 1? :(
[code]
while(inlen--){
[/code]

If indata is a string of the raw data to be compressed, what character in "indata" does *indata++ point to?
[code]
a = CompTable[*indata++];[/code]

If E = 0?
[code]
if(e) {
[/code]

Im lost by how this builds up outdata (which is a null buffer to start with?) and how in/out data is used. :(
[code]
*outdata++ = b >> 24;
[/code]

And is this some how trimming the null buffer to fit the message in?
[code]
return (unsigned int) (outdata - tmp)
[/code]


This is what i have at the moment (Not even tested yet).
Could anyone please help finish it off and/or explain what im not getting?
Thanks in advance!
[code]
Public CompTable() As Long
Public Sub LoadCompTables()
Call FillCompTable(CompTable, &H80010000, &H70040000, &H5C060000, &H3E070000, &H40070000, &H60060000, &H42070000, &H44070000, &H46070000, &H30080000, &H48070000, &H31080000, &H32080000, &H4A070000, &H23080100, &H33080000, _
    &H34080000, &H35080000, &H4C070000, &H64060000, &H68060000, &H4E070000, &H36080000, &H37080000, &H38080000, &H23080101, &H24080100, &HD070306, &HD070307, &H39080000, &H50070000, &H3A080000, _
    &H3B080000, &HE080200, &HE080201, &HE080202, &HE080203, &H24080101, &HF080200, &HF080201, &H25080100, &HF080202, &HF080203, &H10080200, &H10080201, &H10080202, &H10080203, &H80300, _
    &H25080101, &H26080100, &H11080200, &H11080201, &H11080202, &H11080203, &H12080200, &H12080201, &H12080202, &H12080203, &H13080200, &H26080101, &H13080201, &H13080202, &H13080203, &H14080200, _
    &H27080100, &H14080201, &H14080202, &H27080101, &H14080203, &H28080100, &H15080200, &H15080201, &H15080202, &H15080203, &H16080200, &H16080201, &H28080101, &H29080100, &H16080202, &H80301, _
    &H29080101, &H3C080000, &H2A080100, &H16080203, &H80302, &H2A080101, &H2B080100, &H17080200, &H2B080101, &H17080201, &H17080202, &H17080203, &H80303, &H18080200, &H18080201, &H18080202, _
    &H18080203, &H19080200, &H2C080100, &H2C080101, &H2D080100, &H19080201, &H19080202, &H52070000, &H54070000, &H56070000, &H19080203, &H2D080101, &H3D080000, &H58070000, &H1A080200, &H1A080201, _
    &H1A080202, &H80304, &H1A080203, &H1B080200, &H1B080201, &H1B080202, &H1B080203, &H1C080200, &H1C080201, &H1C080202, &H1C080203, &H80305, &H1D080200, &H1D080201, &H1D080202, &H1D080203, _
    &H5A070000, &H1E080200, &H1E080201, &H1E080202, &H80306, &H80307, &H1080300, &H1080301, &H1080302, &H1E080203, &H1F080200, &H1080303, &H1080304, &H1080305, &H1080306, &H1F080201, _
    &H2E080100, &H1080307, &H2080300, &H1F080202, &H2080301, &H2E080101, &H2F080100, &H2F080101, &H1F080203, &H2080302, &H2080303, &H2080304, &H2080305, &H2080306, &H2080307, &H3080300, _
    &H20080200, &H3080301, &H20080201, &H3080302, &H3080303, &H3080304, &H3080305, &H3080306, &H3080307, &H4080300, &H4080301, &H4080302, &H4080303, &H4080304, &H4080305, &H4080306, _
    &H20080202, &H4080307, &H5080300, &H5080301, &H5080302, &H5080303, &H5080304, &H5080305, &H20080203, &H5080306, &H5080307, &H6080300, &H6080301, &H6080302, &H6080303, &H6080304, _
    &H21080200, &H6080305, &H21080201, &H6080306, &H6080307, &H7080300, &H7080301, &H7080302, &H7080303, &H7080304, &H7080305, &H7080306, &H7080307, &H8080300, &H21080202, &H8080301, _
    &H8080302, &H8080303, &H8080304, &H8080305, &H8080306, &H8080307, &H9080300, &H9080301, &H9080302, &H9080303, &H9080304, &H9080305, &H9080306, &H9080307, &HA080300, &HA080301, _
    &H21080203, &HA080302, &H22080200, &HA080303, &HA080304, &HA080305, &HA080306, &HA080307, &H22080201, &HB080300, &HB080301, &HB080302, &HB080303, &HB080304, &HB080305, &HB080306, _
    &H22080202, &HB080307, &HC080300, &HC080301, &HC080302, &HC080303, &HC080304, &HC080305, &H22080203, &HC080306, &HC080307, &HD080300, &HD080301, &HD080302, &HD080303, &H6C060000)
End Sub
Public Sub FillCompTable(RetArray() As Long, ParamArray lng() As Variant)
    Dim i%
    ReDim RetArray(UBound(lng))
    For i = 0 To UBound(lng)
        RetArray(i) = CLng(lng(i))
    Next i
End Sub
Public Function RightShift(ByVal Value As Long, ByVal Shift As Long) As Double
    RightShift = CDbl(Value \ (2 ^ Shift))
End Function
Public Function LeftShift(ByVal Value As Long, ByVal Shift As Long) As Double
    LeftShift = CDbl(Value * (2 ^ Shift))
End Function
Public Function GPHeader&(ByVal s&, ByRef d$)
    '//if(size > 238){
    '//    size += 2;
    '//    size |= 0xF000;
    '//    out[0] = (unsigned char) (size >> 8);
    '//    out[1] = (unsigned char) (size & 0xFF);
    '//    return 2;
    '//} else {
    '//    out[0] = (unsigned char) size + 1;
    '//    return 1;
    '//}
    Dim a%, b&, c$
    b = Size
    If b > 238 Then
        b = b + 2
        b = b Or &HF000
        c = Chr(RightShift(b, 8))
        c = c & Chr(b And &HFF)
        GPHeader = 2
    Else
        c = Chr(Size + 1)
        GPHeader = 1
    End If
    d = c
End Function

Public Function GPEncode&(ByVal InData$, ByVal InSize&, ByRef OutData$)
    '//unsigned int a, e, b = 0;
    '//int cnt = 0;
    '//unsigned char* tmp = outdata;
    '//while(inlen--){
    '//    a = CompTable[*indata++];
    '//    e = (a & 0xFF00) >> 8;
    '//    b |= (a >> 24) << (24 - cnt);
    '//    cnt += (a & 0xFF0000) >> 16;
    '//    if(e) {
    '//        b |= ((a & 0xFF) << (8 - e)) << (24 - cnt);
    '//        cnt += e;
    '//    }
    '//    while(cnt > 8){
    '//        *outdata++ = b >> 24;
    '//        cnt -= 8;
    '//        b <<= 8;
    '//    }
    '//}
    '//while(cnt > 0){
    '//    *outdata++ = b >> 24;
    '//    b <<= 8;
    '//    cnt -= 8;
    '//}
    '//return (unsigned int) (outdata - tmp);
    Dim a&, e&, b&
    Dim cnt%
    Dim tmp$
   
    cnt = 0
    b = 0
    tmp = OutData
   
    While InSize = InSize - 1
        a = CompTable(InData + 1)
        e = RightShift(a And &HFF00, 8)
        b = b Or LeftShift(RightShift(a, 24), 24 - cnt)
        cnt = cnt + RightShift((a And &HFF0000), 16)
        If e Then
            b = b Or LeftShift(LeftShift(a And &HFF, 8 - e), 24 - cnt)
            cnt = cnt + e
        End If
        While cnt > 8
            OutData = OutData & RightShift(b, 24)
            cnt = cnt - 8
            b = LeftShift(b, 8)
        Wend
    Wend
    While cnt > 0
        OutData = OutData & Chr(RightShift(b, 24))
        b = LeftShift(b, 8)
        cnt = cnt - 8
    Wend
End Function


[/code]
January 13, 2006, 1:21 AM
Yegg
His code is in C. I see nothing C++ specific in it.

You guys ported (or began to) it to VB6 and made it look ugly...
January 13, 2006, 2:46 AM
mantralord
I haven't even tested this, but I I've made fixes to the VB code:

[code]
Public CompTable() As Long
Public Sub LoadCompTables()
Call FillCompTable(CompTable, &H80010000, &H70040000, &H5C060000, &H3E070000, &H40070000, &H60060000, &H42070000, &H44070000, &H46070000, &H30080000, &H48070000, &H31080000, &H32080000, &H4A070000, &H23080100, &H33080000, _
    &H34080000, &H35080000, &H4C070000, &H64060000, &H68060000, &H4E070000, &H36080000, &H37080000, &H38080000, &H23080101, &H24080100, &HD070306, &HD070307, &H39080000, &H50070000, &H3A080000, _
    &H3B080000, &HE080200, &HE080201, &HE080202, &HE080203, &H24080101, &HF080200, &HF080201, &H25080100, &HF080202, &HF080203, &H10080200, &H10080201, &H10080202, &H10080203, &H80300, _
    &H25080101, &H26080100, &H11080200, &H11080201, &H11080202, &H11080203, &H12080200, &H12080201, &H12080202, &H12080203, &H13080200, &H26080101, &H13080201, &H13080202, &H13080203, &H14080200, _
    &H27080100, &H14080201, &H14080202, &H27080101, &H14080203, &H28080100, &H15080200, &H15080201, &H15080202, &H15080203, &H16080200, &H16080201, &H28080101, &H29080100, &H16080202, &H80301, _
    &H29080101, &H3C080000, &H2A080100, &H16080203, &H80302, &H2A080101, &H2B080100, &H17080200, &H2B080101, &H17080201, &H17080202, &H17080203, &H80303, &H18080200, &H18080201, &H18080202, _
    &H18080203, &H19080200, &H2C080100, &H2C080101, &H2D080100, &H19080201, &H19080202, &H52070000, &H54070000, &H56070000, &H19080203, &H2D080101, &H3D080000, &H58070000, &H1A080200, &H1A080201, _
    &H1A080202, &H80304, &H1A080203, &H1B080200, &H1B080201, &H1B080202, &H1B080203, &H1C080200, &H1C080201, &H1C080202, &H1C080203, &H80305, &H1D080200, &H1D080201, &H1D080202, &H1D080203, _
    &H5A070000, &H1E080200, &H1E080201, &H1E080202, &H80306, &H80307, &H1080300, &H1080301, &H1080302, &H1E080203, &H1F080200, &H1080303, &H1080304, &H1080305, &H1080306, &H1F080201, _
    &H2E080100, &H1080307, &H2080300, &H1F080202, &H2080301, &H2E080101, &H2F080100, &H2F080101, &H1F080203, &H2080302, &H2080303, &H2080304, &H2080305, &H2080306, &H2080307, &H3080300, _
    &H20080200, &H3080301, &H20080201, &H3080302, &H3080303, &H3080304, &H3080305, &H3080306, &H3080307, &H4080300, &H4080301, &H4080302, &H4080303, &H4080304, &H4080305, &H4080306, _
    &H20080202, &H4080307, &H5080300, &H5080301, &H5080302, &H5080303, &H5080304, &H5080305, &H20080203, &H5080306, &H5080307, &H6080300, &H6080301, &H6080302, &H6080303, &H6080304, _
    &H21080200, &H6080305, &H21080201, &H6080306, &H6080307, &H7080300, &H7080301, &H7080302, &H7080303, &H7080304, &H7080305, &H7080306, &H7080307, &H8080300, &H21080202, &H8080301, _
    &H8080302, &H8080303, &H8080304, &H8080305, &H8080306, &H8080307, &H9080300, &H9080301, &H9080302, &H9080303, &H9080304, &H9080305, &H9080306, &H9080307, &HA080300, &HA080301, _
    &H21080203, &HA080302, &H22080200, &HA080303, &HA080304, &HA080305, &HA080306, &HA080307, &H22080201, &HB080300, &HB080301, &HB080302, &HB080303, &HB080304, &HB080305, &HB080306, _
    &H22080202, &HB080307, &HC080300, &HC080301, &HC080302, &HC080303, &HC080304, &HC080305, &H22080203, &HC080306, &HC080307, &HD080300, &HD080301, &HD080302, &HD080303, &H6C060000)
End Sub
Public Sub FillCompTable(RetArray() As Long, ParamArray lng() As Variant)
    Dim i%
    ReDim RetArray(UBound(lng))
    For i = 0 To UBound(lng)
        RetArray(i) = CLng(lng(i))
    Next i
End Sub
Public Function RightShift(ByVal Value As Long, ByVal Shift As Long) As Double
    RightShift = CDbl(Value \ (2 ^ Shift))
End Function
Public Function LeftShift(ByVal Value As Long, ByVal Shift As Long) As Double
    LeftShift = CDbl(Value * (2 ^ Shift))
End Function


Public Function GPHeader(s as long, ByRef d as string) as long

    Dim b as long: b = s
    If b > 238 Then
        b = b + 2
        b = b Or &HF000
        d = Chr(RightShift(b, 8))
        d = d & Chr(b And &HFF)
        GPHeader = 2
    Else
        d = Chr(Size + 1)
        GPHeader = 1
    End If

    GPHeader = len(d)
End Function

Public Function GPEncode(InData as string,ByRef OutData as String) as long

    dim InSize as long
    dim CurPos as long

    Dim a&, e&, b&
    Dim cnt%
    Dim tmp$
 
    InSize = len(InData)
 
    While InSize <> 0
InSize = InSize - 1

        a = CompTable(asc(mid(InData, len(InData) - InSize, 1)))
        e = RightShift(a And &HFF00, 8)
        b = b Or LeftShift(RightShift(a, 24), 24 - cnt)
        cnt = cnt + RightShift((a And &HFF0000), 16)
        If e <> 0 Then
            b = b Or LeftShift(LeftShift(a And &HFF, 8 - e), 24 - cnt)
            cnt = cnt + e
        End If
        While cnt > 8
            OutData = OutData & RightShift(b, 24)
            cnt = cnt - 8
            b = LeftShift(b, 8)
        Wend
    Wend
    While cnt > 0
        OutData = OutData & Chr(RightShift(b, 24))
        b = LeftShift(b, 8)
        cnt = cnt - 8
    Wend

    GPEncode = len(OutData)
End Function
[/code]
January 13, 2006, 6:02 AM
PaiD
Wow. Nice
January 13, 2006, 7:00 AM
Ringo
[quote author=mantralord link=topic=13890.msg141625#msg141625 date=1137132162]
I haven't even tested this, but I I've made fixes to the VB code:
[/quote]

Awsome, Thanks!

I have put your code into D2GS.dll along with Brand.X's decompression code, if thats alright.

The DLL can be downloaded from Here (D2GS.dll.zip) and comes with a txt with links to the relating topics, the exports and an example of how to use them.

[code]
Declare Sub GamePacketSize Lib "D2GS.dll" (ByVal Data$, ByRef Size&, ByRef OffSet&)
Declare Function GamePacketDecode& Lib "D2GS.dll" (ByVal InData$, ByVal InSize&, ByVal OutData$, ByVal OutMax&, ByRef OutSize&)
Declare Function GamePacketEncode& Lib "D2GS.dll" (ByVal InData$, ByVal InSize&, ByVal OutData$)
Declare Function GamePacketHeader& Lib "D2GS.dll" (ByVal Size&, ByVal Out$)



Public Sub MakePacketHeader(Data$)
    'Adds header to "Data"
    Dim tmpData$, tmpHdl&, InSize&
    tmpData = String(2, 0)
    InSize = Len(Data)
    intHdl = GamePacketHeader(InSize, tmpData)
    Data = Left(tmpData, intHdl) & Data
End Sub

Public Sub EncodePacket(Data$)
    'Converts raw "Data" to compressed "Data"
    Dim OutData$, tmpData$, InSize&, tmpLng&
    OutData = String(1024, 0)
    tmpData = Data
    InSize = Len(tmpData)
    tmpLng = GamePacketEncode(tmpData, InSize, OutData)
    Data = Left(OutData, tmpLng)
End Sub

Public Function GetPacketSize&(Data$)
    'Returns the compressed packet lengh and removes the header from "Data"
    Dim tmpData$, RetSize&, OffSet&
    tmpData = Data
    Call GamePacketSize(tmpData, RetSize, OffSet)
    Data = Mid(Data, 1 + OffSet)'Remove Lengh header
    GetPacketSize = RetSize
End Function

Public Function DecodePacket&(Data$, ByVal pSize&, OutData$)
    'Takes compressed data from "Data" annd returns the decompressed data in "OutData"
    Dim SizeReturn&, OutBuf$, tmpData$
    OutBuf = String(pSize * 3 + 250, 0)
    tmpData = Left(Data, pSize)
    DecodePacket = GamePacketDecode(tmpData, Len(tmpData), OutBuf, Len(OutBuf), SizeReturn)
    OutData = Left(OutBuf, SizeReturn)
End Function
[/code]

Thanks again!
January 13, 2006, 9:18 PM
bethra
I'm totally oblivious to how one goes about reversing something like this.  I'm especially curious as to how one goes about figuring out what each individual value in the compression table is.
January 27, 2006, 3:30 PM
l2k-Shadow
[quote author=Sorc.Polgara link=topic=13890.msg143395#msg143395 date=1138375841]
I'm totally oblivious to how one goes about reversing something like this.  I'm especially curious as to how one goes about figuring out what each individual value in the compression table is.
[/quote]

Disassembling the file
January 27, 2006, 11:05 PM
bethra
[quote author=l2k-Shadow link=topic=13890.msg143451#msg143451 date=1138403147]
[quote author=Sorc.Polgara link=topic=13890.msg143395#msg143395 date=1138375841]
I'm totally oblivious to how one goes about reversing something like this.  I'm especially curious as to how one goes about figuring out what each individual value in the compression table is.
[/quote]

Disassembling the file
[/quote]Aight.

Mind giving me a hint as to what DLL it is found in?

What does the GS in D2GS stand for?  Game Socket?  Game Server?  Because I'm thinking that knowing what the GS stands for might help me narrow down which of the DLLs to look in.

What does MCP stand for?  Multi Connection Protocol?  Multi Character Protocol?
January 29, 2006, 1:17 AM
Topaz
D2GS: Diablo 2 Game Server
MCP: Master Control Protocol(?)

Note that MCP isn't the official name.
January 29, 2006, 5:17 AM
Skywing
MCP officially stands for Master Control Program.
January 29, 2006, 6:00 AM
Infamous
I am having a lot of problems running your code. I can't seem to get the header part working, mind posting an example?

Thanks.
June 5, 2006, 2:41 PM
LordNevar
[quote author=Skywing link=topic=13890.msg143631#msg143631 date=1138514402]
MCP officially stands for Master Control Program.
[/quote]

Got to love how the electornical world revolves around [ TRON ] :)
June 6, 2006, 3:58 PM
Topaz
[quote author=LordNevar link=topic=13890.msg153911#msg153911 date=1149609526]
[quote author=Skywing link=topic=13890.msg143631#msg143631 date=1138514402]
MCP officially stands for Master Control Program.
[/quote]

Got to love how the electornical world revolves around [ TRON ] :)
[/quote]

What?
June 6, 2006, 10:26 PM
K
[quote author=Topaz link=topic=13890.msg153938#msg153938 date=1149632772]
[quote author=LordNevar link=topic=13890.msg153911#msg153911 date=1149609526]
[quote author=Skywing link=topic=13890.msg143631#msg143631 date=1138514402]
MCP officially stands for Master Control Program.
[/quote]

Got to love how the electornical world revolves around [ TRON ] :)
[/quote]

What?
[/quote]

Master Control Program (Tron)
June 7, 2006, 7:24 AM

Search