public NativeTable(Stream scriptFile, int position, int length)
        {
            IO.Reader reader = new IO.Reader(scriptFile, true);
            int       count  = 0;
            uint      nat;

            reader.BaseStream.Position = position;
            _natives    = new List <string>();
            _nativehash = new List <uint>();
            while (count < length)
            {
                nat = reader.SReadUInt32();
                _nativehash.Add(nat);
                if (Program.nativefile.ContainsKey(nat))
                {
                    _natives.Add(Program.nativefile[nat]);
                }
                else
                {
                    string temps = nat.ToString("X");
                    while (temps.Length < 8)
                    {
                        temps = "0" + temps;
                    }
                    _natives.Add("unk_0x" + temps);
                }
                count++;
            }
        }
        static ScriptHeader GenerateConsoleHeader(Stream scriptStream)
        {
            ScriptHeader header = new ScriptHeader();

            IO.Reader reader = new IO.Reader(scriptStream);
            scriptStream.Seek(0, SeekOrigin.Begin);
            header.RSC7Offset = (reader.SReadUInt32() == 0x52534337) ? 0x10 : 0x0;
            scriptStream.Seek(header.RSC7Offset, SeekOrigin.Begin);
            header.Magic            = reader.SReadInt32();   //0x0
            header.SubHeader        = reader.SReadPointer(); //0x4
            header.CodeBlocksOffset = reader.SReadPointer(); //0x8
            header.GlobalsVersion   = reader.SReadInt32();   //0x C
            header.CodeLength       = reader.SReadInt32();   //0x10
            header.ParameterCount   = reader.SReadInt32();   //0x14
            header.StaticsCount     = reader.SReadInt32();   //0x18
            header.GlobalsCount     = reader.SReadInt32();   //0x1C
            header.NativesCount     = reader.SReadInt32();   //0x20
            header.StaticsOffset    = reader.SReadPointer(); //0x24
            header.GlobalsOffset    = reader.SReadPointer(); //0x28
            header.NativesOffset    = reader.SReadPointer(); //0x2C
            header.Null1            = reader.SReadInt32();   //0x30
            header.Null2            = reader.SReadInt32();   //0x34
            header.NameHash         = reader.SReadInt32();
            header.Null3            = reader.SReadInt32();   //0x38
            header.ScriptNameOffset = reader.SReadPointer(); //0x40
            header.StringsOffset    = reader.SReadPointer(); //0x44
            header.StringsSize      = reader.SReadInt32();   //0x48
            header.Null4            = reader.ReadInt32();    //0x4C

            header.StringBlocks = (header.StringsSize + 0x3FFF) >> 14;
            header.CodeBlocks   = (header.CodeLength + 0x3FFF) >> 14;

            header.StringTableOffsets = new Int32[header.StringBlocks];
            scriptStream.Seek(header.StringsOffset + header.RSC7Offset, SeekOrigin.Begin);
            for (int i = 0; i < header.StringBlocks; i++)
            {
                header.StringTableOffsets[i] = reader.SReadPointer() + header.RSC7Offset;
            }


            header.CodeTableOffsets = new Int32[header.CodeBlocks];
            scriptStream.Seek(header.CodeBlocksOffset + header.RSC7Offset, SeekOrigin.Begin);
            for (int i = 0; i < header.CodeBlocks; i++)
            {
                header.CodeTableOffsets[i] = reader.SReadPointer() + header.RSC7Offset;
            }
            scriptStream.Position = header.ScriptNameOffset + header.RSC7Offset;
            int data = scriptStream.ReadByte();

            header.ScriptName = "";
            while (data != 0 && data != -1)
            {
                header.ScriptName += (char)data;
                data = scriptStream.ReadByte();
            }
            return(header);
        }