int CHRs_optimization(tiles_data _data, bool _check) { int deleted_CHRs_cnt = 0; int CHR_data_sum; byte[] img_buff = new byte[utils.CONST_SPR8x8_TOTAL_PIXELS_CNT]; int size_offs; int size = _data.get_first_free_spr8x8_id(false); for (int CHR_n = 0; CHR_n < size; CHR_n++) { if (check_blocks_CHR(CHR_n, _data) == false) { CHR_data_sum = _data.spr8x8_sum(CHR_n); if (CHR_data_sum != 0) { ++deleted_CHRs_cnt; } if (_check == true) { continue; } // delete useless CHR { size_offs = platform_data.get_CHR_bank_max_sprites_cnt() - 1; for (int i = CHR_n; i < size_offs; i++) { _data.from_CHR_bank_to_spr8x8(i + 1, img_buff, 0); _data.from_spr8x8_to_CHR_bank(i, img_buff); } } // the last CHR is an empty space { #if DEF_ZX for (int i = 0; i < img_buff.Length; i++) { img_buff[i] = utils.CONST_ZX_DEFAULT_PAPER_COLOR; } #else Array.Clear(img_buff, 0, utils.CONST_SPR8x8_TOTAL_PIXELS_CNT); #endif _data.from_spr8x8_to_CHR_bank(platform_data.get_CHR_bank_max_sprites_cnt() - 1, img_buff); } shift_CHRs_data(CHR_n, _data); --CHR_n; --size; } } return(deleted_CHRs_cnt); }
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; } } } } }
public uint convert_block_data(byte _ver, platform_data.EPlatformType _prj_platform, int _ind, uint _data) { tiles_data inner_data = get_last_tiles_data(); if (_ver <= 2 && _prj_platform == platform_data.EPlatformType.pt_SMS) { // OLD SMS: [ property_id ](4) [ CHR bank ](2) [ hv_flip ](2) [CHR ind](8) // NEW SMS: [ property_id ](4) [ hv_flip ](2) [ palette ind ](1) [CHR ind](9) // 11-12 (CHR bank) <-> 9-10 (hv_flip) _data = (_data & 0xfffff0ff) | (((_data & 0x00000300) << 2) | ((_data & 0x00000c00) >> 2)); } if (m_dict_CHR_palette_ind != null) { int CHR_id = m_map_data_app_src.unpack_data(map_data_config_base.EData.ed_CHR_id, _data); int palette_ind = m_map_data_app_src.unpack_data(map_data_config_base.EData.ed_Palette, _data); if (!m_dict_CHR_palette_ind.ContainsKey(CHR_id)) { m_dict_CHR_palette_ind.Add(CHR_id, palette_ind); } // reset palette index _data = m_map_data_app_src.pack_data(map_data_config_base.EData.ed_Palette, 0, _data); inner_data.blocks[_ind] = _data; } else { inner_data.blocks[_ind] = _data; } return(m_map_data_app_dst.repack(m_map_data_app_src, _data)); }
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(); }
public void pre_load_block_data(platform_data.EPlatformType _prj_platform) { if (_prj_platform == platform_data.EPlatformType.pt_NES && platform_data.get_platform_type() != platform_data.EPlatformType.pt_NES) { m_dict_CHR_palette_ind = new Dictionary <int, int>(platform_data.get_max_blocks_UINT_cnt()); } m_map_data_app_src = map_data_config_provider.config_app(_prj_platform); m_map_data_app_dst = map_data_config_provider.config_app(platform_data.get_platform_type()); if (m_inner_tiles_data == null) { m_inner_tiles_data = new List <tiles_data>(16); } tiles_data inner_tiles_data = new tiles_data(true); inner_tiles_data.palettes_arr.Clear(); m_inner_tiles_data.Add(inner_tiles_data); if (m_palettes != null) { inner_tiles_data.palettes_arr.AddRange(m_palettes); m_palettes.Clear(); m_palettes = null; } }
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(); } }
public void set_selected_tile(int _tile_id, tiles_data _data) { if (_data != null) { m_selected_tile_id = _tile_id; m_tiles_data = _data; m_selected_quad_ind = 0; update_status_bar(); if (m_locked == false && (UpdateSelectedBlock != null)) { UpdateSelectedBlock(this, new EventArg2Params(m_tiles_data.get_tile_block(m_selected_tile_id, m_selected_quad_ind), m_tiles_data)); } } else { m_selected_tile_id = -1; m_tiles_data = null; } update(); }
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); }
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(); } }
private void new_data_set(object sender, EventArgs e) { data_sets_manager data_mngr = sender as data_sets_manager; tiles_data data = data_mngr.get_tiles_data(data_mngr.tiles_data_pos); m_data = data; m_sel_ind = -1; m_sel_block_CHRs = 0; m_active_page = 0; if (m_data != null) { if (platform_data.get_CHR_bank_pages_cnt() > 1) { update_active_page_text(); } } else { m_CHR_bank_grp_box.Text = "CHR Bank:"; } update(); }
public void set_selected_block(int _block_id, tiles_data _data) { if (_data != null) { m_sel_block_id = _block_id; m_data = _data; m_sel_quad_ind = 0; dispatch_event_data_changed(); update_status_bar(); } else { m_sel_block_id = -1; m_data = null; } set_active_palette(); dispatch_event_quad_selected(); update(); }
bool check_tiles_block(int _block_id, tiles_data _data) { if (m_data_sets.screen_data_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4) { int tile_n; int i; int _block_id_offset = _block_id << 2; int block_n_offset; // check duplicate(s) for (int block_n = 0; block_n < _block_id; block_n++) { block_n_offset = block_n << 2; for (i = 0; i < utils.CONST_BLOCK_SIZE; i++) { if (_data.blocks[block_n_offset + i] != _data.blocks[_block_id_offset + i]) { break; } } if (i == utils.CONST_BLOCK_SIZE) { // duplicate found for (tile_n = 0; tile_n < platform_data.get_max_tiles_cnt(); tile_n++) { for (i = 0; i < utils.CONST_TILE_SIZE; i++) { if (_block_id == _data.get_tile_block(tile_n, i)) { // replace _block_id with block_n _data.set_tile_block(tile_n, i, ( ushort )block_n); } } } } } for (tile_n = 0; tile_n < platform_data.get_max_tiles_cnt(); tile_n++) { for (i = 0; i < utils.CONST_TILE_SIZE; i++) { if (_block_id == _data.get_tile_block(tile_n, i)) { return(true); } } } } else { return(check_screens_block(_block_id, _data)); } return(false); }
private void update_block(object sender, EventArgs e) { EventArg2Params args = (e as EventArg2Params); int block_id = Convert.ToInt32(args.param1); tiles_data data = args.param2 as tiles_data; set_selected_block(block_id, data); }
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); }
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); }
public ulong[] get_tiles(int _bank_ind) { tiles_data data = m_data_mngr.get_tiles_data(_bank_ind); if (data != null) { return(copy_arr <ulong>(data.tiles)); } return(null); }
public uint[] get_blocks(int _bank_ind) { tiles_data data = m_data_mngr.get_tiles_data(_bank_ind); if (data != null) { return(copy_arr <uint>(data.blocks)); } return(null); }
public byte[] get_CHRs_data(int _bank_ind) { tiles_data data = m_data_mngr.get_tiles_data(_bank_ind); if (data != null) { return(copy_arr <byte>(data.CHR_bank)); } return(null); }
public int get_palette_slots(int _bank_ind) { tiles_data data = m_data_mngr.get_tiles_data(_bank_ind); if (data != null) { return(data.palettes_arr.Count); } return(-1); }
public void export(string _filename, tiles_data _data, ImageList _tiles_imgs, ImageList _blocks_imgs) { if (RBtnTiles.Checked) { export_tiles_blocks_data(_data.get_first_free_tile_id(false), 32, _tiles_imgs, _filename); } else { export_tiles_blocks_data(_data.get_first_free_block_id(false), 16, _blocks_imgs, _filename); } }
public int get_CHRs_cnt(int _bank_ind) { tiles_data data = m_data_mngr.get_tiles_data(_bank_ind); if (data != null) { return(data.get_first_free_spr8x8_id(false)); } return(-1); }
public void set_data(tiles_data _data) { m_data = _data; CheckBoxAddPattern.Checked = false; enable(true); update_tree_view(); update(); }
private void update_data(object sender, EventArgs e) { data_sets_manager data_mngr = sender as data_sets_manager; tiles_data data = data_mngr.get_tiles_data(data_mngr.tiles_data_pos); set_palette(data); dispatch_event_update_color(); update(); }
public DialogResult ShowDialog(tiles_data _data) { m_tiles_data = _data; m_color_A = m_color_B = -1; CheckBoxColorA.Checked = CheckBoxColorB.Checked = false; CheckBoxColorA.ForeColor = CheckBoxColorB.ForeColor = utils.CONST_COLOR_PALETTE_SWAP_COLOR_TEXT_DEFAULT; update(); return(ShowDialog()); }
public void set_selected_block(int _block_id, tiles_data _data) { if (m_locked == false && _data != null && m_selected_tile_id >= 0) { _data.set_tile_block(m_selected_tile_id, m_selected_quad_ind, ( ushort )_block_id); dispatch_event_need_gfx_update(); update_status_bar(); update(); } }
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); }
public void post_load_block_data(tiles_data _data) { if (m_dict_CHR_palette_ind != null) { foreach (var obj in m_dict_CHR_palette_ind) { _data.CHR_bank_spr8x8_change_proc(obj.Key, delegate(byte _pix) { return(( byte )(_pix + (obj.Value * utils.CONST_PALETTE_SMALL_NUM_COLORS))); }); } m_dict_CHR_palette_ind.Clear(); m_dict_CHR_palette_ind = null; } }
bool check_blocks_CHR(int _CHR_id, tiles_data _data) { int i; int block_n; uint block_data; byte[] img_buff = new byte[utils.CONST_SPR8x8_TOTAL_PIXELS_CNT]; _data.from_CHR_bank_to_spr8x8(_CHR_id, img_buff, 0); // check duplicate(s) for (int CHR_n = 0; CHR_n < _CHR_id; CHR_n++) { _data.from_CHR_bank_to_spr8x8(CHR_n, utils.tmp_spr8x8_buff, 0); if (System.Linq.Enumerable.SequenceEqual(img_buff, utils.tmp_spr8x8_buff) == true) { // remove duplicate(s) for (block_n = 0; block_n < platform_data.get_max_blocks_UINT_cnt(); block_n += utils.CONST_BLOCK_SIZE) { for (i = 0; i < utils.CONST_BLOCK_SIZE; i++) { block_data = _data.blocks[block_n + i]; if (_CHR_id == tiles_data.get_block_CHR_id(block_data)) { _data.blocks[block_n + i] = tiles_data.set_block_CHR_id(CHR_n, block_data); } } } } } for (block_n = 0; block_n < platform_data.get_max_blocks_UINT_cnt(); block_n += utils.CONST_BLOCK_SIZE) { for (i = 0; i < utils.CONST_BLOCK_SIZE; i++) { if (_CHR_id == tiles_data.get_block_CHR_id(_data.blocks[block_n + i])) { return(true); } } } return(false); }
public long export_CHR_data(int _bank_ind, string _filename) #endif { long data_size = -1; tiles_data data = m_data_mngr.get_tiles_data(_bank_ind); BinaryWriter bw = null; try { if (data != null) { bw = new BinaryWriter(File.Open(_filename, FileMode.Create)); #if DEF_NES data_size = data.export_CHR(bw, _save_padding); #elif DEF_SMS if (_bpp < 1 || _bpp > 4) { throw new Exception("Invalid CHRs bpp value! The valid range is 1-4."); } data_size = data.export_CHR(bw, _bpp); #elif DEF_PCE || DEF_ZX || DEF_SMD data_size = data.export_CHR(bw); #endif } else { throw new Exception("Invalid bank index ( " + _bank_ind + " )! Use " + CONST_PREFIX + "num_banks() to get a valid range!"); } } catch (Exception _err) { throw new Exception(CONST_PREFIX + "export_CHR_data error! Can't save CHR data!\n" + _err.Message); } finally { if (bw != null) { bw.Close(); } } return(data_size); }
public void set_palette(tiles_data _data) { if (_data != null) { m_plt_arr[0].set_color_inds(_data.palette0); m_plt_arr[1].set_color_inds(_data.palette1); m_plt_arr[2].set_color_inds(_data.palette2); m_plt_arr[3].set_color_inds(_data.palette3); } else { m_plt_arr[0].set_color_inds(null); m_plt_arr[1].set_color_inds(null); m_plt_arr[2].set_color_inds(null); m_plt_arr[3].set_color_inds(null); } }