private void LoadMapCellsv6(byte[] fileBytes) { int offSet = 16; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; offSet = 40; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 20 if ((fileBytes[offSet] & 0x01) != 1) Cells[x, y] = Cell.HighWall; else if ((fileBytes[offSet] & 0x02) != 2) Cells[x, y] = Cell.LowWall; else Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 20; } }
private void LoadMapCellsv7(byte[] fileBytes) { int offSet = 21; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 4; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; offSet = 54; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 15 if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 2; if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 13; } }
private void LoadMapCellsV100(byte[] Bytes) { int offset = 4; if ((Bytes[0] != 1) || (Bytes[1] != 0)) return;//only support version 1 atm Width = BitConverter.ToInt16(Bytes, offset); offset += 2; Height = BitConverter.ToInt16(Bytes, offset); Cells = new Cell[Width, Height]; offset = 8; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) { offset += 2; if ((BitConverter.ToInt32(Bytes, offset) & 0x20000000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offset += 10; if ((BitConverter.ToInt16(Bytes, offset) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offset += 14; } }
private void LoadMapCellsv5(byte[] fileBytes) { int offSet = 22; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; offSet = 28 + (3 * ((Width / 2) + (Width % 2)) * (Height / 2)); for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 14 if ((fileBytes[offSet] & 0x01) != 1) Cells[x, y] = Cell.HighWall; else if ((fileBytes[offSet] & 0x02) != 2) Cells[x, y] = Cell.LowWall; else Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 14; } }
private void LoadMapCellsv0(byte[] fileBytes) { int offSet = 0; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; offSet = 52; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 12 if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 2; if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 9; byte light = fileBytes[offSet++]; if (light >= 100 && light <= 119) Cells[x, y].FishingAttribute = (sbyte)(light - 100); } }
private void LoadMapCellsv1(byte[] fileBytes) { int offSet = 21; int w = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int xor = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int h = BitConverter.ToInt16(fileBytes, offSet); Width = w ^ xor; Height = h ^ xor; Cells = new Cell[Width, Height]; offSet = 54; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) { if (((BitConverter.ToInt32(fileBytes, offSet) ^ 0xAA38AA38) & 0x20000000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 6; if (((BitConverter.ToInt16(fileBytes, offSet) ^ xor) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 9; } }
private void LoadMapCellsv5(byte[] fileBytes) { int offSet = 22; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; DoorIndex = new Door[Width, Height]; offSet = 28 + (3 * ((Width / 2) + (Width % 2)) * (Height / 2)); for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 14 if ((fileBytes[offSet] & 0x01) != 1) Cells[x, y] = Cell.HighWall; else if ((fileBytes[offSet] & 0x02) != 2) Cells[x, y] = Cell.LowWall; else Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 13; byte light = fileBytes[offSet++]; if (light >= 100 && light <= 119) Cells[x, y].FishingAttribute = (sbyte)(light - 100); } }
private void LoadMapCellsv7(byte[] fileBytes) { int offSet = 21; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 4; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; DoorIndex = new Door[Width, Height]; offSet = 54; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 15 if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 6; if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. //offSet += 2; if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 2; if (fileBytes[offSet] > 0) DoorIndex[x, y] = AddDoor(fileBytes[offSet], new Point(x, y)); offSet += 4; byte light = fileBytes[offSet++]; if (light >= 100 && light <= 119) Cells[x, y].FishingAttribute = (sbyte)(light - 100); offSet += 2; } }
private void LoadMapCellsv4(byte[] fileBytes) { int offSet = 31; int w = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int xor = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int h = BitConverter.ToInt16(fileBytes, offSet); Width = w ^ xor; Height = h ^ xor; Cells = new Cell[Width, Height]; DoorIndex = new Door[Width, Height]; offSet = 64; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 12 if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 2; if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 4; if (fileBytes[offSet] > 0) DoorIndex[x, y] = AddDoor(fileBytes[offSet], new Point(x, y)); offSet += 6; } }
private void LoadMapCellsV100(byte[] Bytes) { int offset = 4; if ((Bytes[0] != 1) || (Bytes[1] != 0)) return;//only support version 1 atm Width = BitConverter.ToInt16(Bytes, offset); offset += 2; Height = BitConverter.ToInt16(Bytes, offset); Cells = new Cell[Width, Height]; DoorIndex = new Door[Width, Height]; offset = 8; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) { offset += 2; if ((BitConverter.ToInt32(Bytes, offset) & 0x20000000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offset += 10; if ((BitConverter.ToInt16(Bytes, offset) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offset += 2; if (Bytes[offset] > 0) DoorIndex[x, y] = AddDoor(Bytes[offset], new Point(x, y)); offset += 11; byte light = Bytes[offset++]; if (light >= 100 && light <= 119) Cells[x, y].FishingAttribute = (sbyte)(light - 100); } }
private void LoadMapCellsv1(byte[] fileBytes) { int offSet = 21; int w = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int xor = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int h = BitConverter.ToInt16(fileBytes, offSet); Width = w ^ xor; Height = h ^ xor; Cells = new Cell[Width, Height]; DoorIndex = new Door[Width, Height]; offSet = 54; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) { if (((BitConverter.ToInt32(fileBytes, offSet) ^ 0xAA38AA38) & 0x20000000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 6; if (((BitConverter.ToInt16(fileBytes, offSet) ^ xor) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //No Floor Tile. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 2; if (fileBytes[offSet] > 0) DoorIndex[x, y] = AddDoor(fileBytes[offSet], new Point(x, y)); offSet += 5; byte light = fileBytes[offSet++]; if (light >= 100 && light <= 119) Cells[x, y].FishingAttribute = (sbyte)(light - 100); offSet += 1; } }
public bool Load() { try { string fileName = Path.Combine(Settings.MapPath, Info.FileName + ".map"); if (File.Exists(fileName)) { byte[] fileBytes = File.ReadAllBytes(fileName); int offSet = 21; int w = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int xor = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; int h = BitConverter.ToInt16(fileBytes, offSet); Width = w ^ xor; Height = h ^ xor; Cells = new Cell[Width, Height]; offSet = 54; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) { if (((BitConverter.ToInt32(fileBytes, offSet) ^ 0xAA38AA38) & 0x20000000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 6; if (((BitConverter.ToInt16(fileBytes, offSet) ^ xor) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell {Attribute = CellAttribute.Walk}; offSet += 9; } for (int i = 0; i < Info.Respawns.Count; i++) { MapRespawn info = new MapRespawn(Info.Respawns[i]); if (info.Monster == null) continue; info.Map = this; Respawns.Add(info); } for (int i = 0; i < Info.NPCs.Count; i++) { NPCInfo info = Info.NPCs[i]; if (!ValidPoint(info.Location)) continue; AddObject(new NPCObject(info) {CurrentMap = this}); } for (int i = 0; i < Info.SafeZones.Count; i++) CreateSafeZone(Info.SafeZones[i]); return true; } } catch (Exception ex) { SMain.Enqueue(ex); } SMain.Enqueue("Failed to Load Map: " + Info.FileName); return false; }
private void LoadMapCellsv3(byte[] fileBytes) { int offSet = 0; Width = BitConverter.ToInt16(fileBytes, offSet); offSet += 2; Height = BitConverter.ToInt16(fileBytes, offSet); Cells = new Cell[Width, Height]; offSet = 52; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) {//total 36 if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.HighWall; //Can Fire Over. offSet += 2; if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) Cells[x, y] = Cell.LowWall; //Can't Fire Over. if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; offSet += 16; byte light = fileBytes[offSet++]; if (light == 100 || light == 101) Cells[x, y].FishingAttribute = light == 100 ? FishingAttribute.FreshWater : FishingAttribute.SaltWater; offSet += 17; } }