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;
                        }
                    }
                }
            }
        }
예제 #2
0
        public void set_screen_data_type(data_sets_manager.EScreenDataType _type)
        {
            m_screen_data_type = _type;

            reset_active_pattern();

            reset_state();
        }
        public virtual void load_screens(BinaryReader _br,
                                         project_data_desc _prj_data,
                                         data_sets_manager.EScreenDataType _scr_type,
                                         tiles_data _data)
        {
            int prj_scr_tiles_width  = (_prj_data.m_scr_blocks_width == 0xff) ? platform_data.get_screen_tiles_width_by_file_ext_uni(_prj_data.m_file_ext, _scr_type, true):(_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4 ? ((_prj_data.m_scr_blocks_width + 1) >> 1):_prj_data.m_scr_blocks_width);
            int prj_scr_tiles_height = (_prj_data.m_scr_blocks_height == 0xff) ? platform_data.get_screen_tiles_height_by_file_ext_uni(_prj_data.m_file_ext, _scr_type, true):(_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4 ? ((_prj_data.m_scr_blocks_height + 1) >> 1):_prj_data.m_scr_blocks_height);

            load_screens(_br, _prj_data.m_ver, _scr_type, _prj_data.m_scr_align, prj_scr_tiles_width, prj_scr_tiles_height, _data);
        }
예제 #4
0
 public static int get_screen_tiles_cnt_uni(data_sets_manager.EScreenDataType _type)
 {
     if (_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
     {
         return(get_screen_tiles_cnt(get_platform_type()));
     }
     else
     {
         return(get_screen_blocks_cnt(get_platform_type()));
     }
 }
예제 #5
0
// MISC
        public static int get_screen_tiles_size_uni(data_sets_manager.EScreenDataType _type)
        {
            if (_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                return(utils.CONST_SCREEN_TILES_SIZE);
            }
            else
            {
                return(utils.CONST_SCREEN_BLOCKS_SIZE);
            }
        }
예제 #6
0
 public static screen_editor.EFillMode get_screen_fill_mode_uni(data_sets_manager.EScreenDataType _type)
 {
     if (_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
     {
         return(screen_editor.EFillMode.efm_Tile);
     }
     else
     {
         return(screen_editor.EFillMode.efm_Block);
     }
 }
예제 #7
0
        public void update_screens(List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, bool _update_images, utils.ETileViewType _view_type, int _bank_id = -1)
        {
            m_listview_screens.BeginUpdate();

            m_listview_screens.Items.Clear();

            tiles_data   data;
            ListViewItem lst;

            int img_ind;
            int screens_cnt;
            int screens_ind = 0;
            int banks_cnt   = _tiles_data.Count;

            for (int bank_n = 0; bank_n < banks_cnt; bank_n++)
            {
                data = _tiles_data[bank_n];

                screens_cnt = data.screen_data_cnt();

                if ((_bank_id >= 0 && _bank_id == bank_n) || _bank_id < 0)
                {
                    palette_group.Instance.set_palette(data);

                    for (int screen_n = 0; screen_n < screens_cnt; screen_n++)
                    {
                        img_ind = screens_ind + screen_n;

                        if (_update_images)
                        {
                            m_scr_list.get(img_ind).Dispose();
                            m_scr_list.replace(img_ind, create_screen_image(screen_n, data, _scr_type, _view_type));
                        }

                        lst            = new ListViewItem();
                        lst.Name       = lst.Text = utils.get_screen_id_str(bank_n, screen_n);
                        lst.ImageIndex = img_ind;

                        m_listview_screens.Items.Add(lst);
                    }
                }

                screens_ind += screens_cnt;
            }

            m_listview_screens.EndUpdate();
        }
예제 #8
0
        public void update_all_screens(List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type)
        {
            m_listview_screens.BeginUpdate();

            // clear items
            {
                m_scr_list.clear();
                m_listview_screens.Items.Clear();
            }

            tiles_data   data;
            ListViewItem lst;

            int screens_cnt;
            int img_ind   = 0;
            int banks_cnt = _tiles_data.Count;

            for (int bank_n = 0; bank_n < banks_cnt; bank_n++)
            {
                data = _tiles_data[bank_n];

                palette_group.Instance.set_palette(data);

                screens_cnt = data.screen_data_cnt();

                for (int screen_n = 0; screen_n < screens_cnt; screen_n++)
                {
                    m_scr_list.add(create_screen_image(screen_n, data, _scr_type, _view_type));

                    lst            = new ListViewItem();
                    lst.Name       = lst.Text = utils.get_screen_id_str(bank_n, screen_n);
                    lst.ImageIndex = img_ind;

                    ++img_ind;

                    m_listview_screens.Items.Add(lst);
                }
            }

            m_listview_screens.EndUpdate();
        }
예제 #9
0
        public void load(BinaryReader _br,
                         byte _ver,
                         Func <string, entity_data> _get_ent,
                         data_sets_manager.EScreenDataType _scr_type)
        {
            string base_ent_name;

            base_ent_name = _br.ReadString();
            base_entity   = _get_ent(base_ent_name);

            if (base_entity == null)
            {
                throw new Exception("Can't find base entity: " + base_ent_name + "\n\nEntity instance loading error!");
            }

            properties = _br.ReadString();
            x          = _br.ReadInt32();
            y          = _br.ReadInt32();
            m_uid      = _br.ReadInt32();
            target_uid = _br.ReadInt32();

            {
                int       CHRs_in_tile = (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4) ? 32:16;
                Rectangle prj_scr_rect = project_data_converter_provider.get_converter().get_prj_scr_rect();

                y += prj_scr_rect.Y * CHRs_in_tile;
                x += prj_scr_rect.X * CHRs_in_tile;

                y = y < 0 ? 0:y;
                y = (y >= platform_data.get_screen_height_pixels()) ? (platform_data.get_screen_height_pixels() - 1):y;

                x = x < 0 ? 0:x;
                x = (x >= platform_data.get_screen_width_pixels()) ? (platform_data.get_screen_width_pixels() - 1):x;
            }

            // extra data ( reserved for future purposes )
            int extra_data_size = _br.ReadInt32();
        }
예제 #10
0
        public void set_screen_data_type(data_sets_manager.EScreenDataType _type)
        {
            PanelPaletteTiles.Enabled = (_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4);

            reset();
        }
예제 #11
0
        public void load(BinaryReader _br, byte _ver, Func <string, entity_data> _get_ent, data_sets_manager.EScreenDataType _scr_type)
        {
            int i;
            int j;

            m_start_scr_ind = _br.ReadInt32();

            int width  = _br.ReadInt32();
            int height = _br.ReadInt32();

            m_layout.Clear();

            for (i = 0; i < height; i++)
            {
                m_layout.Add(allocate_row(width));
            }

            for (i = 0; i < height; i++)
            {
                for (j = 0; j < width; j++)
                {
                    m_layout[i][j].load(_br, _ver, _get_ent, _scr_type);
                }
            }
        }
예제 #12
0
 public void set_screen_data_type(data_sets_manager.EScreenDataType _type)
 {
     CheckBoxOptimizeTiles.Enabled = (_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4);
     CheckBoxOptimizeTiles.Checked = (_type == data_sets_manager.EScreenDataType.sdt_Blocks2x2) ? false:CheckBoxOptimizeTiles.Checked;
 }
        protected void load_screens(BinaryReader _br,
                                    byte _ver,
                                    data_sets_manager.EScreenDataType _scr_type,
                                    data_conversion_options_form.EScreensAlignMode _scr_align_mode,
                                    int _prj_scr_tiles_width,
                                    int _prj_scr_tiles_height,
                                    tiles_data _data)
        {
            screen_data scr;

            int tile_x;
            int tile_y;
            int tile_y_offset;

            int scr_data_len            = platform_data.get_screen_tiles_cnt_uni(_scr_type);
            int native_scr_tiles_width  = platform_data.get_screen_tiles_width_uni(_scr_type);
            int native_scr_tiles_height = platform_data.get_screen_tiles_height_uni(_scr_type);

            m_native_scr_rect.X      = 0;
            m_native_scr_rect.Y      = 0;
            m_native_scr_rect.Width  = native_scr_tiles_width;
            m_native_scr_rect.Height = native_scr_tiles_height;

            m_prj_scr_rect.X      = 0;
            m_prj_scr_rect.Y      = 0;
            m_prj_scr_rect.Width  = _prj_scr_tiles_width;
            m_prj_scr_rect.Height = _prj_scr_tiles_height;

            // calc aligned prj screen pos
            {
                int scr_align_data = ( int )_scr_align_mode;

                if ((scr_align_data & data_conversion_options_form.CONST_ALIGN_X_MID) != 0)
                {
                    m_prj_scr_rect.X = (m_native_scr_rect.Width >> 1) - (_prj_scr_tiles_width >> 1);
                }
                else
                if ((scr_align_data & data_conversion_options_form.CONST_ALIGN_X_RIGHT) != 0)
                {
                    m_prj_scr_rect.X = m_native_scr_rect.Width - m_prj_scr_rect.Width;
                }

                if ((scr_align_data & data_conversion_options_form.CONST_ALIGN_Y_MID) != 0)
                {
                    m_prj_scr_rect.Y = (m_native_scr_rect.Height >> 1) - (_prj_scr_tiles_height >> 1);
                }
                else
                if ((scr_align_data & data_conversion_options_form.CONST_ALIGN_Y_BOTTOM) != 0)
                {
                    m_prj_scr_rect.Y = m_native_scr_rect.Height - m_prj_scr_rect.Height;
                }
            }

            bool native_scr_data = ((native_scr_tiles_width == _prj_scr_tiles_width) && (native_scr_tiles_height == _prj_scr_tiles_height));

            int scr_cnt = _br.ReadInt32();

            Action <int> skip_tiles = tiles_cnt => { if (_ver < 5)
                                                     {
                                                         _br.ReadBytes(tiles_cnt);
                                                     }
                                                     else
                                                     {
                                                         _br.ReadBytes(tiles_cnt << 1);
                                                     } };

            for (int i = 0; i < scr_cnt; i++)
            {
                scr = _data.create_screen(_scr_type);

                if (native_scr_data)
                {
                    scr.load(_br, _ver, scr_data_len, -1);
                }
                else
                {
                    for (tile_y = m_prj_scr_rect.Y; tile_y < (m_prj_scr_rect.Y + m_prj_scr_rect.Height); tile_y++)
                    {
                        if (tile_y < 0 || tile_y >= native_scr_tiles_height)
                        {
                            skip_tiles(_prj_scr_tiles_width);
                            continue;
                        }

                        tile_y_offset = native_scr_tiles_width * tile_y;

                        for (tile_x = m_prj_scr_rect.X; tile_x < (m_prj_scr_rect.X + m_prj_scr_rect.Width); tile_x++)
                        {
                            if (tile_x < 0 || tile_x >= native_scr_tiles_width)
                            {
                                skip_tiles(1);
                            }
                            else
                            {
                                scr.load(_br, _ver, 1, tile_y_offset + tile_x);
                            }
                        }
                    }
                }
            }

            validate_screens(_scr_type, _data);
        }
예제 #14
0
        public void update_tiles(utils.ETileViewType _view_type, tiles_data _tiles_data, data_sets_manager.EScreenDataType _scr_type)
        {
            Image    img;
            Graphics gfx;

            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                for (int i = 0; i < platform_data.get_max_tiles_cnt(); i++)
                {
                    img = m_imagelist_tiles.Images[i];

                    gfx = Graphics.FromImage(img);

                    if (_tiles_data != null)
                    {
                        update_tile(i, _view_type, _tiles_data, gfx, img, _scr_type);
                    }
                    else
                    {
                        gfx.Clear(utils.CONST_COLOR_TILE_CLEAR);
                    }

                    m_imagelist_tiles.Images[i] = img;

                    gfx.Dispose();
                }

                m_panel_tiles.Refresh();
            }
        }
예제 #15
0
 public screen_data(data_sets_manager.EScreenDataType _type)
 {
     alloc(platform_data.get_screen_tiles_width_uni(_type), platform_data.get_screen_tiles_height_uni(_type));
 }
예제 #16
0
 public static int get_screen_tiles_height_by_platform_type_uni(EPlatformType _platform_type, data_sets_manager.EScreenDataType _type, bool _native = false)
 {
     if (_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
     {
         return(get_screen_tiles_height(_platform_type, _native));
     }
     else
     {
         return(get_screen_blocks_height(_platform_type, _native));
     }
 }
예제 #17
0
        public void update_tile(int _tile_ind, utils.ETileViewType _view_type, tiles_data _tiles_data, Graphics _gfx, Image _img, data_sets_manager.EScreenDataType _scr_type)
        {
#if DEF_TILE_DRAW_FAST
            Image block_img;
#else
            ushort[] blocks_arr = null;
            byte[]   CHR_data   = null;

            // draw a block from CHR bank sprites
            if (_tiles_data != null)
            {
                blocks_arr = _tiles_data.blocks;
                CHR_data   = _tiles_data.CHR_bank;
            }
#endif //DEF_TILE_DRAW_FAST

            Image img;

            if (_img != null)
            {
                img = _img;
            }
            else
            {
                img = m_imagelist_tiles.Images[_tile_ind];
            }

            Graphics gfx;

            if (_gfx != null)
            {
                gfx = _gfx;
            }
            else
            {
                gfx = Graphics.FromImage(img);
            }

            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
            gfx.PixelOffsetMode   = PixelOffsetMode.None;

#if DEF_TILE_DRAW_FAST
            for (int j = 0; j < utils.CONST_TILE_SIZE; j++)
            {
                block_img = m_imagelist_blocks.Images[_tiles_data.get_tile_block(_tile_ind, j)];

                gfx.DrawImage(block_img, ((j % 2) << 5), ((j >> 1) << 5), block_img.Width, block_img.Height);
            }
#else
            // draw a block from CHR bank sprites
            for (int j = 0; j < utils.CONST_TILE_SIZE; j++)
            {
                utils.update_block_gfx(_tiles_data.get_tile_block(_tile_ind, j), blocks_arr, CHR_data, gfx, utils.CONST_BLOCKS_IMG_SIZE >> 1, utils.CONST_BLOCKS_IMG_SIZE >> 1, ((j % 2) << 5), ((j >> 1) << 5));
            }
#endif //DEF_TILE_DRAW_FAST

            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                if (_view_type == utils.ETileViewType.tvt_Number)                  // tile id
                {
                    draw_tile_info(String.Format("{0:X2}", _tile_ind), gfx);
                }
                else
                if (_view_type == utils.ETileViewType.tvt_TilesUsage)                  // usage
                {
                    draw_tile_info(String.Format("{0}", _tiles_data.get_tile_usage(( ushort )_tile_ind, _scr_type)), gfx);
                }
            }

            if (_img == null)
            {
                m_imagelist_tiles.Images[_tile_ind] = img;
            }

            if (_gfx == null)
            {
                gfx.Dispose();
            }
        }
예제 #18
0
// SCREEN HEIGHT TILES \ BLOCKS
        public static int get_screen_tiles_height_uni(data_sets_manager.EScreenDataType _scr_type)
        {
            return(get_screen_tiles_height_by_platform_type_uni(get_platform_type(), _scr_type));
        }
예제 #19
0
 public static int get_screen_tiles_height_by_file_ext_uni(string _file_ext, data_sets_manager.EScreenDataType _scr_type, bool _native = false)
 {
     return(get_screen_tiles_height_by_platform_type_uni(get_platform_type_by_file_ext(_file_ext), _scr_type, _native));
 }
예제 #20
0
        public void update_blocks(utils.ETileViewType _view_type, tiles_data _tiles_data, bool _prop_per_block, data_sets_manager.EScreenDataType _scr_type)
        {
            Image    img;
            Graphics gfx;

            m_block_rect.Width = m_block_rect.Height = (_view_type == utils.ETileViewType.tvt_ObjectId && !_prop_per_block) ? (utils.CONST_BLOCKS_IMG_SIZE >> 1):utils.CONST_BLOCKS_IMG_SIZE;

            for (int i = 0; i < platform_data.get_max_blocks_cnt(); i++)
            {
                img = m_imagelist_blocks.Images[i];

                gfx = Graphics.FromImage(img);

                if (_tiles_data != null)
                {
                    update_block(i, _view_type, _tiles_data, _prop_per_block, gfx, img, _scr_type);
                }
                else
                {
                    gfx.Clear(utils.CONST_COLOR_BLOCK_CLEAR);
                }

                m_imagelist_blocks.Images[i] = img;

                gfx.Dispose();
            }

            m_panel_blocks.Refresh();
        }
예제 #21
0
        public void load(BinaryReader _br, byte _ver, Func <string, entity_data> _get_ent, data_sets_manager.EScreenDataType _scr_type)
        {
            m_marks = _br.ReadUInt16();

            m_scr_ind = _br.ReadByte();

            int ents_cnt = _br.ReadInt32();

            entity_instance ent_inst;

            for (int ent_n = 0; ent_n < ents_cnt; ent_n++)
            {
                ent_inst = new entity_instance();
                ent_inst.load(_br, _ver, _get_ent, _scr_type);

                m_ents.Add(ent_inst);
            }
        }
예제 #22
0
        public void insert_screen(bool _all_banks_list, int _CHR_bank_ind, int _scr_local_ind, int _scr_global_ind, List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type)
        {
            int i;
            int size;

            m_listview_screens.BeginUpdate();

            Bitmap bmp = create_screen_image(_scr_local_ind, _tiles_data[_CHR_bank_ind], _scr_type, _view_type);

            if (_scr_global_ind == m_scr_list.count())
            {
                // add image
                m_scr_list.add(bmp);
            }
            else
            {
                // insert image
                m_scr_list.add(bmp);

                size = m_scr_list.count();

                for (i = size - 1; i > _scr_global_ind; i--)
                {
                    m_scr_list.replace(i, m_scr_list.get(i - 1));
                }

                m_scr_list.replace(_scr_global_ind, bmp);
            }

            ListViewItem lst = new ListViewItem();

            lst.Name       = lst.Text = utils.get_screen_id_str(_CHR_bank_ind, _scr_local_ind);
            lst.ImageIndex = _scr_global_ind;

            int insert_ind = _all_banks_list ? _scr_global_ind:_scr_local_ind;

            m_listview_screens.Items.Insert(insert_ind, lst);

            size = m_listview_screens.Items.Count;

            for (i = insert_ind + 1; i < size; i++)
            {
                lst = m_listview_screens.Items[i];

                ++lst.ImageIndex;
            }

            m_listview_screens.EndUpdate();
        }
예제 #23
0
        private Bitmap create_screen_image(int _screen_n, tiles_data _data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type)
        {
#if DEF_SCREEN_DRAW_FAST
            Image block_img;
#endif
            int tile_n;
            int block_n;

            ushort tile_id;

            int tile_offs_x;
            int tile_offs_y;

            palette_group.Instance.set_palette(_data);

            Bitmap bmp = new Bitmap(platform_data.get_screen_width_pixels(), platform_data.get_screen_height_pixels(), PixelFormat.Format32bppPArgb);

            Graphics gfx = Graphics.FromImage(bmp);

            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
            gfx.PixelOffsetMode   = PixelOffsetMode.None;

            gfx.Clear(utils.CONST_COLOR_SCREEN_CLEAR);

            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                for (tile_n = 0; tile_n < platform_data.get_screen_tiles_cnt(); tile_n++)
                {
                    tile_id = _data.get_screen_tile(_screen_n, tile_n);

                    tile_offs_x = (tile_n % platform_data.get_screen_tiles_width()) << 5;
                    tile_offs_y = (tile_n / platform_data.get_screen_tiles_width()) << 5;

                    for (block_n = 0; block_n < utils.CONST_BLOCK_SIZE; block_n++)
                    {
#if DEF_SCREEN_DRAW_FAST
                        block_img = m_imagelist_blocks.Images[_data.get_tile_block(tile_id, block_n)];

                        gfx.DrawImage(block_img, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y, block_img.Width >> 1, block_img.Height >> 1);
#else
#if DEF_ZX
                        utils.update_block_gfx(_data.get_tile_block(tile_id, block_n), _data, gfx, 8, 8, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y, utils.get_draw_block_flags_by_view_type(_view_type));
#else
                        utils.update_block_gfx(_data.get_tile_block(tile_id, block_n), _data, gfx, 8, 8, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y);
#endif
#endif
                    }
                }
            }
            else
            {
                for (tile_n = 0; tile_n < platform_data.get_screen_blocks_cnt(); tile_n++)
                {
#if DEF_SCREEN_DRAW_FAST
                    block_img = m_imagelist_blocks.Images[_data.get_screen_tile(_screen_n, tile_n)];

                    gfx.DrawImage(block_img, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4), block_img.Width >> 1, block_img.Height >> 1);
#else
#if DEF_ZX
                    utils.update_block_gfx(_data.get_screen_tile(_screen_n, tile_n), _data, gfx, 8, 8, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4), utils.get_draw_block_flags_by_view_type(_view_type));
#else
                    utils.update_block_gfx(_data.get_screen_tile(_screen_n, tile_n), _data, gfx, 8, 8, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4));
#endif
#endif
                }
            }

            return(bmp);
        }
예제 #24
0
        public void update_block(int _block_ind, utils.ETileViewType _view_type, tiles_data _tiles_data, bool _prop_per_block, Graphics _gfx, Image _img, data_sets_manager.EScreenDataType _scr_type)
        {
            int obj_id;

            Image img;

            if (_img != null)
            {
                img = _img;
            }
            else
            {
                img = m_imagelist_blocks.Images[_block_ind];
            }

            Graphics gfx;

            if (_gfx != null)
            {
                gfx = _gfx;
            }
            else
            {
                gfx = Graphics.FromImage(img);
            }

            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
            gfx.PixelOffsetMode   = PixelOffsetMode.Half;

#if DEF_ZX
            utils.update_block_gfx(_block_ind, _tiles_data, gfx, img.Width >> 1, img.Height >> 1, 0, 0, utils.get_draw_block_flags_by_view_type(_view_type));
#else
            utils.update_block_gfx(_block_ind, _tiles_data, gfx, img.Width >> 1, img.Height >> 1);
#endif
            if (_view_type == utils.ETileViewType.tvt_ObjectId)              // obj id
            {
                if (_prop_per_block)
                {
                    obj_id = tiles_data.get_block_flags_obj_id(_tiles_data.blocks[_block_ind << 2]);

                    utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | m_clrs_arr[obj_id]);

                    draw_block_info(String.Format("{0}", obj_id), gfx);
                }
                else
                {
                    for (int chr_n = 0; chr_n < utils.CONST_BLOCK_SIZE; chr_n++)
                    {
                        obj_id = tiles_data.get_block_flags_obj_id(_tiles_data.blocks[(_block_ind << 2) + chr_n]);

                        utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | m_clrs_arr[obj_id]);

                        m_block_rect.X = ((chr_n & 0x01) == 0x01) ? m_block_rect.Width:0;
                        m_block_rect.Y = ((chr_n & 0x02) == 0x02) ? m_block_rect.Height:0;

                        gfx.FillRectangle(utils.brush, m_block_rect);
                    }
                }
            }
            else
            if (_view_type == utils.ETileViewType.tvt_BlocksUsage)              // usage
            {
                utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | 0x00ffffff);

                draw_block_info(String.Format("{0}", _tiles_data.get_block_usage(( ushort )_block_ind, _scr_type)), gfx);
            }
            else
            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Blocks2x2)
            {
                if (_view_type == utils.ETileViewType.tvt_Number)                  // block id
                {
                    utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | 0x00ffffff);

                    draw_block_info(String.Format("{0:X2}", _block_ind), gfx);
                }
            }

            if (_img == null)
            {
                m_imagelist_blocks.Images[_block_ind] = img;
            }

            if (_gfx == null)
            {
                gfx.Dispose();
            }
        }