示例#1
0
        public static TSR_Function Load(TSR_Reader tsrReader, int offset)
        {
            tsrReader.Position = offset;
            TSR_Function function = new TSR_Function()
            {
                Tags = new List <TSR_Tag>(), Sentences = new List <TSR_Sentence>()
            };

            int enc_pos = 4;

            function.Header = tsrReader.ReadInt32();
            function.Name   = tsrReader.DecodeString(ref enc_pos);
            function.Unk    = tsrReader.ReadUInt16();

            //Tags
            int tagCount = tsrReader.ReadUInt16();

            for (int i = 0; i < tagCount; i++)
            {
                function.Tags.Add(TSR_Tag.Load(tsrReader, ref enc_pos));
            }

            //Sentence
            int sentenceCount = tsrReader.ReadUInt16();

            for (int i = 0; i < sentenceCount; i++)
            {
                function.Sentences.Add(TSR_Sentence.Load(tsrReader, ref enc_pos));
            }

            //Lines
            function.Lines = new List <object>();

            for (int i = 0; i < function.Sentences.Count; i++)
            {
                var tag = function.GetTag(i);

                if (tag != null)
                {
                    function.Lines.Add(tag);
                }

                function.Lines.Add(function.Sentences[i]);
            }

            return(function);
        }
示例#2
0
        public static TSR_File Parse(TSR_Reader tsrReader, List <byte> bytes, byte[] rawBytes)
        {
            TSR_File tsrFile = new TSR_File()
            {
                Functions = new List <TSR_Function>()
            };

            int functionCount  = BitConverter.ToUInt16(rawBytes, 0);
            int functionOffset = 2 + (functionCount * 4);

            for (int i = 0; i < functionCount; i++)
            {
                int funcSize = BitConverter.ToInt32(rawBytes, 2 + (4 * i));
                tsrFile.Functions.Add(TSR_Function.Load(tsrReader, functionOffset));
                functionOffset += funcSize;
            }

            return(tsrFile);
        }