public bool IsSatisfiedBy(DaxFileBlock block) { var data = block.Data; if (data.Length < 20) { return(false); } int height = data[0]; int width = data[1]; var widthPx = width * 8; var heightPx = height; if (widthPx < 1 || heightPx < 1 || widthPx > 320 || heightPx > 200) { return(false); } var chunkCount = data[6] + (data[7] << 8); var chunkSize = (widthPx * heightPx); if ((chunkCount * chunkSize) > data.Length) { return(false); } int clrBase = data[8]; int clrCount = data[9]; var clrs = EgaVgaPalette.ExtractPalette(data, clrCount, clrBase, 10); return(clrs != null); }
private string GetMapNameFrom(DaxFileBlock block) { var mapname = block.Id.ToString(); var game = FileHelper.DetermineGameFrom(block.File); if (game != FileHelper.GameList.Unknown) { // do we have a map with that id? if (_mapNames.ContainsKey((int)game)) { var names = _mapNames[(int)game]; if (names.ContainsKey(block.Id)) { mapname = names[block.Id]; } } } return(mapname); }
public IRenderBlock CreateUsing(DaxFileBlock block) { if (new EgaSpriteBlockSpecification().IsSatisfiedBy(block)) { return(new EgaSpriteBlock(block)); } if (new VgaStrataBlockSpecification().IsSatisfiedBy(block)) { return(new VgaStrataBlock(block)); } if (new VgaSpriteBlockSpecification().IsSatisfiedBy(block)) { return(new VgaSpriteBlock(block)); } if (new VgaMixedBlockSpecification().IsSatisfiedBy(block)) { return(new VgaMixedBlock(block)); } if (new VgaBlockSpecification().IsSatisfiedBy(block)) { return(new VgaBlock(block)); } if (new EgaBlockSpecification().IsSatisfiedBy(block)) { return(new EgaBlock(block)); } if (new MonoBlockSpecification().IsSatisfiedBy(block)) { return(new MonoBlock(block)); } return(new UnknownBlock()); }
// scan the designated ecl file/block for wallset loading commands, return the first one private void scanECLFileForWallset(DaxFileBlock block, int geoID, int blockID) { // scan for the load pieces command, which consists of the pattern 0x37 a 0x00 b 0x00 c 0x00, where a, b and c are the wallsets to load byte load_pieces = 0x37; for (int i = 0; i < block.Data.Length - 7; i++) { if (block.Data[i] == load_pieces && block.Data[i + 1] == 0 && block.Data[i + 3] == 0 && block.Data[i + 5] == 0) { int a = block.Data[i + 2]; int b = block.Data[i + 4]; int c = block.Data[i + 6]; int[] ws = { a, b, c }; if (isValidWallSetId(a) && isValidWallSetId(b) && isValidWallSetId(c)) { if (!wallsetMapping.ContainsKey(geoID)) { wallsetMapping.Add(geoID, ws); } } } } }