/* * ==================== * 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); } }
/* ==================== 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); } }
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); } }