public TextureAnimation(TextureLookup textures, FlatLookup flats) { try { Console.Write("Load texture animation info: "); var list = new List <TextureAnimationInfo>(); foreach (var animDef in DoomInfo.TextureAnimation) { int picNum; int basePic; if (animDef.IsTexture) { if (textures.GetNumber(animDef.StartName) == -1) { continue; } picNum = textures.GetNumber(animDef.EndName); basePic = textures.GetNumber(animDef.StartName); } else { if (flats.GetNumber(animDef.StartName) == -1) { continue; } picNum = flats.GetNumber(animDef.EndName); basePic = flats.GetNumber(animDef.StartName); } var anim = new TextureAnimationInfo( animDef.IsTexture, picNum, basePic, picNum - basePic + 1, animDef.Speed); if (anim.NumPics < 2) { throw new Exception("Bad animation cycle from " + animDef.StartName + " to " + animDef.EndName + "!"); } list.Add(anim); } animations = list.ToArray(); Console.WriteLine("OK"); } catch (Exception e) { Console.WriteLine("Failed"); ExceptionDispatchInfo.Throw(e); } }
public CommonResource(params string[] wadPaths) { try { wad = new Wad(wadPaths); palette = new Palette(wad); colorMap = new ColorMap(wad); textures = new TextureLookup(wad); flats = new FlatLookup(wad); sprites = new SpriteLookup(wad); } catch (Exception e) { ExceptionDispatchInfo.Capture(e).Throw(); } }
public static SideDef FromData(byte[] data, int offset, TextureLookup textures, Sector[] sectors) { var textureOffset = BitConverter.ToInt16(data, offset); var rowOffset = BitConverter.ToInt16(data, offset + 2); var topTextureName = DoomInterop.ToString(data, offset + 4, 8); var bottomTextureName = DoomInterop.ToString(data, offset + 12, 8); var middleTextureName = DoomInterop.ToString(data, offset + 20, 8); var sectorNum = BitConverter.ToInt16(data, offset + 28); return(new SideDef( Fixed.FromInt(textureOffset), Fixed.FromInt(rowOffset), textures.GetNumber(topTextureName), textures.GetNumber(bottomTextureName), textures.GetNumber(middleTextureName), sectorNum != -1 ? sectors[sectorNum] : null)); }
public static SideDef[] FromWad(Wad wad, int lump, TextureLookup textures, Sector[] sectors) { var length = wad.GetLumpSize(lump); if (length % dataSize != 0) { throw new Exception(); } var data = wad.ReadLump(lump); var count = length / dataSize; var sides = new SideDef[count];; for (var i = 0; i < count; i++) { var offset = dataSize * i; sides[i] = FromData(data, offset, textures, sectors); } return(sides); }
public CommonResource(string[] wadPaths, bool loadDehLump) { try { wad = new Wad(wadPaths); if (loadDehLump) { DeHackEd.ReadDeHackEdLump(wad); } palette = new Palette(wad); colorMap = new ColorMap(wad); textures = new TextureLookup(wad); flats = new FlatLookup(wad); sprites = new SpriteLookup(wad); animation = new TextureAnimation(textures, flats); } catch (Exception e) { ExceptionDispatchInfo.Throw(e); } }
public Map(Wad wad, TextureLookup textures, FlatLookup flats, World world) { this.textures = textures; this.flats = flats; this.world = world; var options = world.Options; string name; if (wad.Names.Contains("doom") || wad.Names.Contains("doom1")) { name = "E" + options.Episode + "M" + options.Map; } else { name = "MAP" + options.Map.ToString("00"); } var map = wad.GetLumpNumber(name); vertices = Vertex.FromWad(wad, map + 4); sectors = Sector.FromWad(wad, map + 8, flats); sides = SideDef.FromWad(wad, map + 3, textures, sectors); lines = LineDef.FromWad(wad, map + 2, vertices, sides); segs = Seg.FromWad(wad, map + 5, vertices, lines); subsectors = Subsector.FromWad(wad, map + 6, segs); nodes = Node.FromWad(wad, map + 7, subsectors); things = MapThing.FromWad(wad, map + 1); blockMap = BlockMap.FromWad(wad, map + 10, lines); reject = Reject.FromWad(wad, map + 9, sectors); GroupLines(); skyTexture = GetSkyTextureByMapName(name); }
public Map(Wad wad, TextureLookup textures, FlatLookup flats, TextureAnimation animation, World world) { try { this.textures = textures; this.flats = flats; this.animation = animation; this.world = world; var options = world.Options; string name; if (wad.GameMode == GameMode.Commercial) { name = "MAP" + options.Map.ToString("00"); } else { name = "E" + options.Episode + "M" + options.Map; } Console.Write("Load map '" + name + "': "); var map = wad.GetLumpNumber(name); if (map == -1) { throw new Exception("Map '" + name + "' was not found!"); } vertices = Vertex.FromWad(wad, map + 4); sectors = Sector.FromWad(wad, map + 8, flats); sides = SideDef.FromWad(wad, map + 3, textures, sectors); lines = LineDef.FromWad(wad, map + 2, vertices, sides); segs = Seg.FromWad(wad, map + 5, vertices, lines); subsectors = Subsector.FromWad(wad, map + 6, segs); nodes = Node.FromWad(wad, map + 7, subsectors); things = MapThing.FromWad(wad, map + 1); blockMap = BlockMap.FromWad(wad, map + 10, lines); reject = Reject.FromWad(wad, map + 9, sectors); GroupLines(); skyTexture = GetSkyTextureByMapName(name); if (options.GameMode == GameMode.Commercial) { switch (options.MissionPack) { case MissionPack.Plutonia: title = DoomInfo.MapTitles.Plutonia[options.Map - 1]; break; case MissionPack.Tnt: title = DoomInfo.MapTitles.Tnt[options.Map - 1]; break; default: title = DoomInfo.MapTitles.Doom2[options.Map - 1]; break; } } else { title = DoomInfo.MapTitles.Doom[options.Episode - 1][options.Map - 1]; } Console.WriteLine("OK"); } catch (Exception e) { Console.WriteLine("Failed"); ExceptionDispatchInfo.Throw(e); } }