private void validate_screens(data_sets_manager.EScreenDataType _scr_type,
                                      tiles_data _data)
        {
            int         scr_n;
            int         tile_n;
            ushort      tile_val;
            screen_data scr;

            int blocks_cnt = _data.blocks.Length >> 2;

            for (scr_n = 0; scr_n < _data.screen_data_cnt(); scr_n++)
            {
                scr = _data.get_screen_data(scr_n);

                for (tile_n = 0; tile_n < scr.m_arr.Length; tile_n++)
                {
                    tile_val = scr.m_arr[tile_n];

                    if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
                    {
                        if (tile_val >= _data.tiles.Length)
                        {
                            scr.m_arr[tile_n] = 0;
                        }
                    }
                    else
                    {
                        if (tile_val >= blocks_cnt)
                        {
                            scr.m_arr[tile_n] = 0;
                        }
                    }
                }
            }
        }
Exemple #2
0
        int Screens_optimization(tiles_data _data, bool _check)
        {
            int deleted_screens_cnt = 0;

            int bank_id = Convert.ToInt32(_data.name);

            int size = _data.screen_data_cnt();

            for (int scr_n = 0; scr_n < size; scr_n++)
            {
                if (check_layouts_screen(scr_n, _data) == false)
                {
                    ++deleted_screens_cnt;

                    if (_check == true)
                    {
                        continue;
                    }

                    _data.delete_screen(scr_n);

                    m_data_sets.remove_screen_from_layouts(bank_id, scr_n);

                    --scr_n;
                    --size;
                }
            }

            return(deleted_screens_cnt);
        }
Exemple #3
0
        private void update_bank_GFX()
        {
            tiles_data data = m_data_manager.get_tiles_data(ListBoxCHRBanks.SelectedIndex);

            int img_size      = utils.CONST_BLOCKS_IMG_SIZE;
            int half_img_size = img_size >> 1;
            int side          = 5;
            int size          = side * side;

            Bitmap   bmp = new Bitmap(img_size, img_size);
            Graphics gfx = Graphics.FromImage(bmp);

            gfx.SmoothingMode     = SmoothingMode.HighSpeed;
            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
//			gfx.PixelOffsetMode		= PixelOffsetMode.HighQuality;

            for (int i = 0; i < size; i++)
            {
                utils.update_block_gfx(i, data, gfx, half_img_size, half_img_size, 0, 0, 0);

                m_blocks_preview.update(bmp, img_size, img_size, (i % side) * img_size, (i / side) * img_size, i == (size - 1), i == 0);
            }

            gfx.Dispose();
            bmp.Dispose();

            // update info
            {
                LabelCHRs.Text      = data.get_first_free_spr8x8_id(false).ToString();
                LabelBlocks2x2.Text = data.get_first_free_block_id(false).ToString();
                LabelTiles4x4.Text  = data.get_first_free_tile_id(false).ToString();
                LabelScreens.Text   = data.screen_data_cnt().ToString();
                LabelPalettes.Text  = data.palettes_arr.Count.ToString();
            }
        }
Exemple #4
0
        bool check_screens_tile(int _tile_id, tiles_data _data)
        {
            int tile_n;
            int scr_n;
            int scr_tile_n;

            screen_data scr;

            // check duplicate(s)
            for (tile_n = 0; tile_n < _tile_id; tile_n++)
            {
                if (_data.tiles[_tile_id] == _data.tiles[tile_n])
                {
                    for (scr_n = 0; scr_n < _data.screen_data_cnt(); scr_n++)
                    {
                        scr = _data.get_screen_data(scr_n);

                        for (scr_tile_n = 0; scr_tile_n < scr.length; scr_tile_n++)
                        {
                            if (scr.get_tile(scr_tile_n) == _tile_id)
                            {
                                // replace _tile_id with tile_n
                                scr.set_tile(scr_tile_n, ( ushort )tile_n);
                            }
                        }
                    }
                }
            }

            for (scr_n = 0; scr_n < _data.screen_data_cnt(); scr_n++)
            {
                scr = _data.get_screen_data(scr_n);

                for (scr_tile_n = 0; scr_tile_n < scr.length; scr_tile_n++)
                {
                    if (scr.get_tile(scr_tile_n) == _tile_id)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemple #5
0
        bool check_screens_block(int _block_id, tiles_data _data)
        {
            int block_n;
            int scr_n;
            int scr_block_n;

            screen_data scr;

            // check duplicate(s)
            for (block_n = 0; block_n < _block_id; block_n++)
            {
                if (_data.cmp_blocks(_block_id, block_n))
                {
                    for (scr_n = 0; scr_n < _data.screen_data_cnt(); scr_n++)
                    {
                        scr = _data.get_screen_data(scr_n);

                        for (scr_block_n = 0; scr_block_n < scr.length; scr_block_n++)
                        {
                            if (scr.get_tile(scr_block_n) == _block_id)
                            {
                                // replace _block_id with block_n
                                scr.set_tile(scr_block_n, ( ushort )block_n);
                            }
                        }
                    }
                }
            }

            for (scr_n = 0; scr_n < _data.screen_data_cnt(); scr_n++)
            {
                scr = _data.get_screen_data(scr_n);

                for (scr_block_n = 0; scr_block_n < scr.length; scr_block_n++)
                {
                    if (scr.get_tile(scr_block_n) == _block_id)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemple #6
0
        public int num_screens(int _bank_ind)
        {
            tiles_data data = m_data_mngr.get_tiles_data(_bank_ind);

            if (data != null)
            {
                return(data.screen_data_cnt());
            }

            return(-1);
        }
Exemple #7
0
        public ushort[] get_screen_data(int _bank_ind, int _scr_ind)
        {
            tiles_data data = m_data_mngr.get_tiles_data(_bank_ind);

            if (data != null)
            {
                if (_scr_ind >= 0 && _scr_ind < data.screen_data_cnt())
                {
                    return(copy_arr <ushort>(data.get_screen_data(_scr_ind).m_arr));
                }
            }

            return(null);
        }
        private void tiles_to_blocks()
        {
            tiles_data data = null;

            screen_data  new_pattern = null;
            pattern_data pattern     = null;

            screen_data new_scr;

            int data_n;
            int ptrn_n;
            int scr_n;
            int tile_n;
            int block_n;
            int x_pos;
            int y_pos;

            for (data_n = 0; data_n < tiles_data_cnt; data_n++)
            {
                data = get_tiles_data(data_n);

                // convert screens
                for (scr_n = 0; scr_n < data.screen_data_cnt(); scr_n++)
                {
                    new_scr = new screen_data(EScreenDataType.sdt_Blocks2x2);

                    for (tile_n = 0; tile_n < platform_data.get_screen_tiles_cnt(); tile_n++)
                    {
                        for (block_n = 0; block_n < utils.CONST_BLOCK_SIZE; block_n++)
                        {
                            x_pos = ((tile_n % platform_data.get_screen_tiles_width()) << 1) + (block_n & 0x01);
                            y_pos = ((tile_n / platform_data.get_screen_tiles_width()) << 1) + ((block_n & 0x02) >> 1);

                            if ((y_pos < platform_data.get_screen_blocks_height()) && (x_pos < platform_data.get_screen_blocks_width()))
                            {
                                new_scr.set_tile((y_pos * platform_data.get_screen_blocks_width()) + x_pos, utils.get_ushort_from_ulong(data.tiles[data.get_screen_tile(scr_n, tile_n)], block_n));
                            }
                        }
                    }

                    data.screen_data_replace(scr_n, new_scr);
                }

                // convert tiles patterns
                foreach (string key in data.patterns_data.Keys)
                {
                    List <pattern_data> pattrn_list = data.patterns_data[key] as List <pattern_data>;

                    for (ptrn_n = 0; ptrn_n < pattrn_list.Count; ptrn_n++)
                    {
                        pattern = pattrn_list[ptrn_n];

                        new_pattern = new screen_data(pattern.width << 1, pattern.height << 1);

                        for (tile_n = 0; tile_n < pattern.data.length; tile_n++)
                        {
                            for (block_n = 0; block_n < utils.CONST_BLOCK_SIZE; block_n++)
                            {
                                new_pattern.set_tile(((((tile_n / pattern.width) << 1) + ((block_n & 0x02) >> 1)) * (pattern.width << 1)) + ((tile_n % pattern.width) << 1) + (block_n & 0x01), utils.get_ushort_from_ulong(data.tiles[pattern.data.get_tile(tile_n)], block_n));
                            }
                        }

                        pattrn_list[ptrn_n] = new pattern_data(pattern.name, new_pattern);
                        pattern.reset();
                    }
                }

                Array.Clear(data.tiles, 0, data.tiles.Length);
            }
        }