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)); });
 }
示例#8
0
 public static map_data_config_base config_app(platform_data.EPlatformType _platform)
 {
     return(m_map_data_app_dict[_platform]);
 }