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);
        }
示例#2
0
        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);
        }
示例#3
0
        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());
        }
示例#4
0
        // 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);
                        }
                    }
                }
            }
        }