private DungeonMap ParseMapDefinition(BinaryReader r) { var m = new DungeonMap(); m.GlobalDataOffset = r.ReadUInt16(); r.ReadUInt16(); //dungeon II only r.ReadUInt16(); //unused m.OffsetX = r.ReadByte(); m.OffsetY = r.ReadByte(); ushort dimensionData = r.ReadUInt16(); m.Height = ((dimensionData >> 11) & fiveBitsMask) + 1; m.Width = ((dimensionData >> 6) & fiveBitsMask) + 1; ushort graphicCountData = r.ReadUInt16(); m.FloorDecorationGraphicsCount = (graphicCountData >> 12) & fourBitsMask; m.FloorGraphicsCount = (graphicCountData >> 8) & fourBitsMask; m.WallDecorationGraphicsCount = (graphicCountData >> 4) & fourBitsMask; m.WallGraphicsCount = graphicCountData & fourBitsMask; ushort diffData = r.ReadUInt16(); m.Difficulty = diffData >> 12; m.CreatureTypeCount = (diffData >> 4) & fourBitsMask; m.DoorDecorationCount = diffData & fourBitsMask; ushort doorIndicesData = r.ReadUInt16(); m.DoorType0 = (DoorType)((doorIndicesData >> 12) & fourBitsMask); m.DoorType1 = (DoorType)((doorIndicesData >> 8) & fourBitsMask); m.WallSet = (doorIndicesData >> 4) & fourBitsMask; m.FloorSet = doorIndicesData & fourBitsMask; return(m); }
private static void a(DungeonMap map, DungeonData data) { //from i in map.Tiles.SelectMany(x => x.GetItems(data)) where i.GetType() == typeof(WeaponItem) && ((WeaponItem)i).ItemTypeIndex == 9 select i for (int i = 0; i < map.Tiles.Count; i++) { foreach (var k in map.Tiles[i].GetItems(data)) if (k.GetType() == typeof(WeaponItemData) && ((WeaponItemData)k).ItemTypeIndex == 9) { Console.WriteLine("{0} | {1} {2} ", i, i / map.Height, i % map.Height); break; } } }
public IEnumerable<TileInfo<TileData>> GetNeigbourTiles(Point position, DungeonMap map) { return MapDirection.AllSides.Select(side => { var p = position + side.RelativeShift; return new TileInfo<TileData> { Position = p, Tile = map[p.X, p.Y] }; }); }
private DungeonMap ParseMapDefinition(BinaryReader r) { var m = new DungeonMap(); m.GlobalDataOffset = r.ReadUInt16(); r.ReadUInt16(); //dungeon II only r.ReadUInt16(); //unused m.OffsetX = r.ReadByte(); m.OffsetY = r.ReadByte(); ushort dimensionData = r.ReadUInt16(); m.Height = ((dimensionData >> 11) & fiveBitsMask) + 1; m.Width = ((dimensionData >> 6) & fiveBitsMask) + 1; ushort graphicCountData = r.ReadUInt16(); m.FloorDecorationGraphicsCount = (graphicCountData >> 12) & fourBitsMask; m.FloorGraphicsCount = (graphicCountData >> 8) & fourBitsMask; m.WallDecorationGraphicsCount = (graphicCountData >> 4) & fourBitsMask; m.WallGraphicsCount = graphicCountData & fourBitsMask; ushort diffData = r.ReadUInt16(); m.Difficulty = diffData >> 12; m.CreatureTypeCount = (diffData >> 4) & fourBitsMask; m.DoorDecorationCount = diffData & fourBitsMask; ushort doorIndicesData = r.ReadUInt16(); m.DoorType = (DoorType)((doorIndicesData >> 12) & fourBitsMask); m.DoorType0Index = (doorIndicesData >> 8) & fourBitsMask; //TODO return m; }