public virtual void palettes_processing(byte _ver, platform_data.EPlatformType _prj_platform, bool _convert_colors, data_sets_manager _data_mngr, int[] _plt_main) { int i; int plt_n; int data_n; tiles_data data; List <int[]> palettes = null; int plt_clrs_cnt = platform_data.get_main_palette_colors_cnt(); for (data_n = 0; data_n < _data_mngr.tiles_data_cnt; data_n++) { data = _data_mngr.get_tiles_data(data_n); for (plt_n = 0; plt_n < data.palettes_arr.Count; plt_n++) { palettes = data.palettes_arr[plt_n].subpalettes; for (i = 0; i < utils.CONST_NUM_SMALL_PALETTES * utils.CONST_PALETTE_SMALL_NUM_COLORS; i++) { if (_convert_colors) { palettes[i >> 2][i & 0x03] = utils.find_nearest_color_ind(_plt_main[palettes[i >> 2][i & 0x03]]); } else { palettes[i >> 2][i & 0x03] = palettes[i >> 2][i & 0x03] & (plt_clrs_cnt - 1); } } } } }
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 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; } }
public virtual void load_palettes(BinaryReader _br, byte _ver, platform_data.EPlatformType _prj_platform, string _file_ext, tiles_data _data) { int i; #if DEF_NES bool nes_file = (_file_ext == platform_data.CONST_NES_FILE_EXT); #endif int palettes_cnt = (_ver == 1) ? 1: _br.ReadInt32(); if (m_palettes == null) { m_palettes = new List <palette16_data>(16); } palette16_data plt16 = null; for (i = 0; i < palettes_cnt; i++) { plt16 = new palette16_data(); if (_ver <= 2) { plt16.m_palette0 = utils.read_byte_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); plt16.m_palette1 = utils.read_byte_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); plt16.m_palette2 = utils.read_byte_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); plt16.m_palette3 = utils.read_byte_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); } else { plt16.m_palette0 = utils.read_int_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); plt16.m_palette1 = utils.read_int_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); plt16.m_palette2 = utils.read_int_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); plt16.m_palette3 = utils.read_int_arr(_br, utils.CONST_PALETTE_SMALL_NUM_COLORS); } m_palettes.Add(plt16.copy()); #if DEF_NES if (!nes_file) { plt16.m_palette1[0] = plt16.m_palette2[0] = plt16.m_palette3[0] = plt16.m_palette0[0]; } #endif #if DEF_FIXED_LEN_PALETTE16_ARR if (i >= platform_data.get_fixed_palette16_cnt()) { continue; } #endif _data.palettes_arr.Add(plt16); } }
protected void load_CHR_data(BinaryReader _br, byte _ver, platform_data.EPlatformType _prj_platform, ref byte[] _CHR_bank, Func <byte, byte> _func) { int app_data_len = platform_data.get_CHR_bank_pages_cnt() * utils.CONST_CHR_BANK_PAGE_SIZE; int prj_data_len = platform_data.get_CHR_bank_pages_cnt(_prj_platform) * utils.CONST_CHR_BANK_PAGE_SIZE; int load_data_len = Math.Min(app_data_len, prj_data_len); for (int i = 0; i < load_data_len; i++) { _CHR_bank[i] = _func(_br.ReadByte()); } if (prj_data_len > load_data_len) { // skip the rest data _br.ReadBytes(prj_data_len - load_data_len); } }
public virtual void load_CHR_bank(BinaryReader _br, byte _ver, platform_data.EPlatformType _prj_platform, ref byte[] _CHR_bank) { load_CHR_data(_br, _ver, _prj_platform, ref _CHR_bank, delegate(byte _val) { return(_val); }); }
public override void load_CHR_bank(BinaryReader _br, byte _ver, platform_data.EPlatformType _prj_platform, ref byte[] _CHR_bank) { load_CHR_data(_br, _ver, _prj_platform, ref _CHR_bank, delegate(byte _val) { return(( byte )(_val & 0x03)); }); }
public static map_data_config_base config_app(platform_data.EPlatformType _platform) { return(m_map_data_app_dict[_platform]); }