Exemplo n.º 1
0
        public static NSD Load(byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (data.Length < 1312)
            {
                ErrorManager.SignalError("NSD: Data is too short");
            }
            int[] unknown1 = new int [256];
            for (int i = 0; i < 256; i++)
            {
                unknown1[i] = BitConv.FromInt32(data, i * 4);
            }
            int chunkcount = BitConv.FromInt32(data, 1024);
            int entrycount = BitConv.FromInt32(data, 1028);

            int[] unknown2 = new int [70];
            for (int i = 0; i < 70; i++)
            {
                unknown2[i] = BitConv.FromInt32(data, 1032 + i * 4);
            }
            if (chunkcount < 0)
            {
                ErrorManager.SignalError("NSD: Chunk count is negative");
            }
            if (entrycount < 0)
            {
                ErrorManager.SignalError("NSD: Entry count is negative");
            }
            if (data.Length < 1312 + 8 * entrycount)
            {
                ErrorManager.SignalError("NSD: Data is too short");
            }
            NSDLink[] index = new NSDLink [entrycount];
            for (int i = 0; i < entrycount; i++)
            {
                int chunkid = BitConv.FromInt32(data, 1312 + 8 * i);
                int entryid = BitConv.FromInt32(data, 1316 + 8 * i);
                index[i] = new NSDLink(chunkid, entryid);
            }
            int extralength = data.Length - (1312 + 8 * entrycount);

            byte[] extradata = new byte [extralength];
            Array.Copy(data, 1312 + 8 * entrycount, extradata, 0, extralength);
            return(new NSD(unknown1, chunkcount, unknown2, index, extradata));
        }
Exemplo n.º 2
0
 public static NSD Load(byte[] data)
 {
     if (data == null)
         throw new ArgumentNullException("data");
     if (data.Length < 1312)
     {
         ErrorManager.SignalError("NSD: Data is too short");
     }
     int[] unknown1 = new int [256];
     for (int i = 0;i < 256;i++)
     {
         unknown1[i] = BitConv.FromInt32(data,i * 4);
     }
     int chunkcount = BitConv.FromInt32(data,1024);
     int entrycount = BitConv.FromInt32(data,1028);
     int[] unknown2 = new int [70];
     for (int i = 0;i < 70;i++)
     {
         unknown2[i] = BitConv.FromInt32(data,1032 + i * 4);
     }
     if (chunkcount < 0)
     {
         ErrorManager.SignalError("NSD: Chunk count is negative");
     }
     if (entrycount < 0)
     {
         ErrorManager.SignalError("NSD: Entry count is negative");
     }
     if (data.Length < 1312 + 8 * entrycount)
     {
         ErrorManager.SignalError("NSD: Data is too short");
     }
     NSDLink[] index = new NSDLink [entrycount];
     for (int i = 0;i < entrycount;i++)
     {
         int chunkid = BitConv.FromInt32(data,1312 + 8 * i);
         int entryid = BitConv.FromInt32(data,1316 + 8 * i);
         index[i] = new NSDLink(chunkid,entryid);
     }
     int extralength = data.Length - (1312 + 8 * entrycount);
     byte[] extradata = new byte [extralength];
     Array.Copy(data,1312 + 8 * entrycount,extradata,0,extralength);
     return new NSD(unknown1,chunkcount,unknown2,index,extradata);
 }