protected int ConvertMessageToString(byte[] src, byte[] dst, int dstPos)
{
uint num = 0;
uint val;
byte chr;
int dstPosBegin = dstPos;
if (_game.Version >= 7)
{
src = TranslateText(src);
}
while (num < src.Length)
{
chr = src[num++];
if (chr == 0)
break;
if (chr == 0xFF)
{
chr = src[num++];
if (chr == 1 || chr == 2 || chr == 3 || chr == 8)
{
// Simply copy these special codes
dst[dstPos++] = 0xFF;
dst[dstPos++] = chr;
}
else
{
val = (Game.Version == 8) ? BitConverter.ToUInt32(src, (int)num) : BitConverter.ToUInt16(src, (int)num);
switch (chr)
{
case 4:
dstPos += ConvertIntMessage(dst, dstPos, val);
break;
case 5:
dstPos += ConvertVerbMessage(dst, dstPos, val);
break;
case 6:
dstPos += ConvertNameMessage(dst, dstPos, val);
break;
case 7:
dstPos += ConvertStringMessage(dst, dstPos, val);
break;
case 9:
case 10:
case 12:
case 13:
case 14:
// Simply copy these special codes
dst[dstPos++] = 0xFF;
dst[dstPos++] = chr;
dst[dstPos++] = src[num + 0];
dst[dstPos++] = src[num + 1];
break;
default:
throw new NotSupportedException(string.Format("convertMessageToString(): string escape sequence {0} unknown", chr));
}
num += (Game.Version == 8) ? (uint)4 : 2;
}
}
else
{
if (chr != '@')
{
dst[dstPos++] = chr;
}
}
}
dst[dstPos] = 0;
return dstPos - dstPosBegin;
}