示例#1
0
文件: Poke.cs 项目: tianqihou/tools
        public void Import(ReadAndWrite rw, Bitmap bm, int frame, int pal, bool clear, bool find)
        {
            int gfx_offset = npc.gfx_table + (frame << 3);
            int img_offset;

            try {
                img_offset = rw.ReadPointer(gfx_offset);
                if (clear)
                {
                    rw.FillWith0xFF(img_offset, rw.Br.ReadInt16());
                    goto FIND;
                }
                if (clear || find)
                {
                    goto FIND;
                }
                goto NOT_FIND;
            } catch (NullReferenceException) { }
FIND:
            img_offset = rw.FindFreeOffset0xFF(PokeConfig.ini.start_offset, bm.Width * bm.Height / 2);
NOT_FIND:
            byte[] img = ImgFunction.ConvertNormalImagToGBA(bm, new List <Color>(palletes[pal]), false);
            rw.WriteBytes(img_offset, 0, img);
            rw.Seek(gfx_offset);
            rw.Bw.Write(img_offset + ReadAndWrite.ROM);
            rw.Bw.Write(bm.Width * bm.Height >> 1);
            npc.width  = (short)bm.Width;
            npc.height = (short)bm.Height;
            Save(rw);
        }
示例#2
0
文件: Poke.cs 项目: tianqihou/tools
        public void Resize(ReadAndWrite rw, int old, int new_, bool clear)
        {
            if (new_ < old)
            {
                return;
            }
            int start = rw.FindFreeOffset0xFF(new_ * 8);

            rw.Seek(start);
            for (int i = 0; i < new_; i++)
            {
                rw.Bw.Write(0x1010101010001000);
            }
            byte[] a = rw.ReadAndClear(npc.gfx_table, 8 * old, clear);
            rw.WriteBytes(start, 0, a);
            npc.gfx_table = start + ReadAndWrite.ROM;
            Save(rw);
        }
示例#3
0
文件: Poke.cs 项目: tianqihou/tools
        /// <summary>
        /// 保存任意压缩数据,需要提供原始指针所在地址。
        /// </summary>
        /// <param name="rw"></param>
        /// <param name="data">所需要写入的数据</param>
        /// <param name="offset">指针所在地址</param>
        /// <param name="fill">是否将原来的数据填充为0xFF</param>
        public int Save(ReadAndWrite rw, byte[] data, int offset_to_repoint, bool fill)
        {
            //指针所在地址
            int offset_old = rw.ReadPointer(offset_to_repoint);
            //新地址
            int offset_new = rw.FindFreeOffset(start, data.Length);

            rw.WriteBytes(offset_new, 0, data);
            start = rw.Position;
            rw.Repoint(offset_to_repoint, offset_new);
            int length = ImgFunction.LZUncompress(rw.Br, offset_old).Item2;

            if (fill)
            {
                rw.FillWith0xFF(offset_old, length);
            }
            return(offset_new);
        }