Esempio n. 1
0
        /*
         * ====================
         * W_LoadWadFile
         * ====================
         */
        public static void W_LoadWadFile(string filename)
        {
            lumpinfo_t lump_p;
            wadinfo_t  header = new wadinfo_t();
            uint       i;
            int        infotableofs;

            int ofs;
            int kk;

            wad_base = common.COM_LoadHunkFile(filename);
            if (wad_base == null)
            {
                sys_linux.Sys_Error("W_LoadWadFile: couldn't load " + filename);
            }

            ofs = 0;
            header.identification = common.parseString(wad_base, ref ofs, 4);
            header.numlumps       = common.parseInt(wad_base, ref ofs);
            header.infotableofs   = common.parseInt(wad_base, ref ofs);

            if (header.identification != "WAD2")
            {
                sys_linux.Sys_Error("Wad file " + filename + "doesn't have WAD2 id");
            }

            wad_numlumps = header.numlumps;
            infotableofs = header.infotableofs;

            wad_lumps = new lumpinfo_t[wad_numlumps];
            ofs       = infotableofs;
            for (kk = 0; kk < wad_numlumps; kk++)
            {
                wad_lumps[kk]             = new lumpinfo_t();
                wad_lumps[kk].filepos     = common.parseInt(wad_base, ref ofs);
                wad_lumps[kk].disksize    = common.parseInt(wad_base, ref ofs);
                wad_lumps[kk].size        = common.parseInt(wad_base, ref ofs);
                wad_lumps[kk].type        = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].compression = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].pad1        = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].pad2        = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].name        = common.parseString(wad_base, ref ofs, 16);
            }

            for (i = 0; i < wad_numlumps; i++)
            {
                lump_p = wad_lumps[i];
                W_CleanupName(ref lump_p.name);
            }
        }
Esempio n. 2
0
    public static void W_LoadWadFile(string filename)
    {
        wad_base = COM_LoadFile(filename);
        if (wad_base == null)
        {
            Sys_Error("Wad.LoadWadFile: couldn't load {0}", filename);
        }

        if (_Handle.IsAllocated)
        {
            _Handle.Free();
        }
        _Handle  = GCHandle.Alloc(wad_base, GCHandleType.Pinned);
        _DataPtr = _Handle.AddrOfPinnedObject();

        wadinfo_t header = BytesToStructure <wadinfo_t>(wad_base, 0);

        if (header.identification[0] != 'W' || header.identification[1] != 'A' ||
            header.identification[2] != 'D' || header.identification[3] != '2')
        {
            Sys_Error("Wad file {0} doesn't have WAD2 id\n", filename);
        }

        int numlumps     = LittleLong(header.numlumps);
        int infotableofs = LittleLong(header.infotableofs);
        int lumpInfoSize = Marshal.SizeOf(typeof(lumpinfo_t));

        _Lumps = new Dictionary <string, lumpinfo_t>(numlumps);

        for (int i = 0; i < numlumps; i++)
        {
            IntPtr     ptr  = new IntPtr(_DataPtr.ToInt64() + infotableofs + i * lumpInfoSize);
            lumpinfo_t lump = (lumpinfo_t)Marshal.PtrToStructure(ptr, typeof(lumpinfo_t));
            lump.filepos = LittleLong(lump.filepos);
            lump.size    = LittleLong(lump.size);
            if (lump.type == q_shared.TYP_QPIC)
            {
                ptr = new IntPtr(_DataPtr.ToInt64() + lump.filepos);
                dqpicheader_t pic = (dqpicheader_t)Marshal.PtrToStructure(ptr, typeof(dqpicheader_t));
                SwapPic(pic);
                Marshal.StructureToPtr(pic, ptr, true);
            }
            _Lumps.Add(Encoding.ASCII.GetString(lump.name).TrimEnd('\0').ToLower(), lump);
        }
    }
Esempio n. 3
0
        /*
        ====================
        W_LoadWadFile
        ====================
        */
        public static void W_LoadWadFile(string filename)
        {
            lumpinfo_t  lump_p;
            wadinfo_t   header = new wadinfo_t();
            uint        i;
            int         infotableofs;

            int ofs;
            int kk;

            wad_base = common.COM_LoadHunkFile(filename);
            if (wad_base == null)
                sys_linux.Sys_Error("W_LoadWadFile: couldn't load " + filename);

            ofs = 0;
            header.identification = common.parseString(wad_base, ref ofs, 4);
            header.numlumps = common.parseInt(wad_base, ref ofs);
            header.infotableofs = common.parseInt(wad_base, ref ofs);

            if (header.identification != "WAD2")
                sys_linux.Sys_Error("Wad file " + filename + "doesn't have WAD2 id");

            wad_numlumps = header.numlumps;
            infotableofs = header.infotableofs;

            wad_lumps = new lumpinfo_t[wad_numlumps];
            ofs = infotableofs;
            for (kk = 0; kk < wad_numlumps; kk++)
            {
                wad_lumps[kk] = new lumpinfo_t();
                wad_lumps[kk].filepos = common.parseInt(wad_base, ref ofs);
                wad_lumps[kk].disksize = common.parseInt(wad_base, ref ofs);
                wad_lumps[kk].size = common.parseInt(wad_base, ref ofs);
                wad_lumps[kk].type = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].compression = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].pad1 = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].pad2 = common.parseChar(wad_base, ref ofs);
                wad_lumps[kk].name = common.parseString(wad_base, ref ofs, 16);
            }

            for (i = 0; i < wad_numlumps; i++)
            {
                lump_p = wad_lumps[i];
                lump_p.name = W_CleanupName(lump_p.name);
            }
        }