NScumm.Scumm.ScummEngine.ConvertMessageToString C# (CSharp) Метод

ConvertMessageToString() защищенный Метод

protected ConvertMessageToString ( byte src, byte dst, int dstPos ) : int
src byte
dst byte
dstPos int
Результат int
        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;
        }
ScummEngine