Esempio n. 1
0
        // This writes the SIDEDEFS to WAD file
        private void WriteSidedefs(MapSet map, int position, IDictionary maplumps, IDictionary <Sector, int> sectorids)
        {
            MemoryStream mem;
            BinaryWriter writer;
            Lump         lump;
            int          insertpos;

            // Create memory to write to
            mem    = new MemoryStream();
            writer = new BinaryWriter(mem, WAD.ENCODING);

            // Go for all sidedefs
            foreach (Sidedef sd in map.Sidedefs)
            {
                // Write properties to stream
                writer.Write((Int16)sd.OffsetX);
                writer.Write((Int16)sd.OffsetY);
                writer.Write(Lump.MakeFixedName(sd.HighTexture, WAD.ENCODING));
                writer.Write(Lump.MakeFixedName(sd.LowTexture, WAD.ENCODING));
                writer.Write(Lump.MakeFixedName(sd.MiddleTexture, WAD.ENCODING));
                writer.Write((UInt16)sectorids[sd.Sector]);
            }

            // Find insert position and remove old lump
            insertpos = MapManager.RemoveSpecificLump(wad, "SIDEDEFS", position, MapManager.TEMP_MAP_HEADER, maplumps);
            if (insertpos == -1)
            {
                insertpos = position + 1;
            }
            if (insertpos > wad.Lumps.Count)
            {
                insertpos = wad.Lumps.Count;
            }

            // Create the lump from memory
            lump = wad.Insert("SIDEDEFS", insertpos, (int)mem.Length);
            lump.Stream.Seek(0, SeekOrigin.Begin);
            mem.WriteTo(lump.Stream);
            mem.Flush();
        }
Esempio n. 2
0
        // This writes the SECTORS to WAD file
        private void WriteSectors(MapSet map, int position, IDictionary maplumps)
        {
            MemoryStream mem;
            BinaryWriter writer;
            Lump         lump;
            int          insertpos;

            // Create memory to write to
            mem    = new MemoryStream();
            writer = new BinaryWriter(mem, WAD.ENCODING);

            // Go for all sectors
            foreach (Sector s in map.Sectors)
            {
                // Write properties to stream
                writer.Write((Int16)s.FloorHeight);
                writer.Write((Int16)s.CeilHeight);
                writer.Write(Lump.MakeFixedName(s.FloorTexture, WAD.ENCODING));
                writer.Write(Lump.MakeFixedName(s.CeilTexture, WAD.ENCODING));
                writer.Write((Int16)s.Brightness);
                writer.Write((UInt16)s.Effect);
                writer.Write((UInt16)s.Tag);
            }

            // Find insert position and remove old lump
            insertpos = MapManager.RemoveSpecificLump(wad, "SECTORS", position, MapManager.TEMP_MAP_HEADER, maplumps);
            if (insertpos == -1)
            {
                insertpos = position + 1;
            }
            if (insertpos > wad.Lumps.Count)
            {
                insertpos = wad.Lumps.Count;
            }

            // Create the lump from memory
            lump = wad.Insert("SECTORS", insertpos, (int)mem.Length);
            lump.Stream.Seek(0, SeekOrigin.Begin);
            mem.WriteTo(lump.Stream);
        }
Esempio n. 3
0
        // This creates a new lump in the WAD file
        public Lump Insert(string name, int position, int datalength)
        {
            Lump lump;

            // We will be adding a lump
            numlumps++;

            // Extend the file
            file.SetLength(file.Length + datalength + 16);

            // Create the lump
            lump = new Lump(file, this, Lump.MakeFixedName(name, ENCODING), lumpsoffset, datalength);
            lumps.Insert(position, lump);

            // Advance lumps table offset
            lumpsoffset += datalength;

            // Write the new headers
            WriteHeaders();

            // Return the new lump
            return(lump);
        }