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; } } } } }
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); }
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(); } }
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); }
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); }
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 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); } }