魔力宝贝/石器时代 图档格式压缩算法

2023-05-16

下文分析了CrossGate(魔力宝贝)的文件格式,因为StoneAge(石器时代)和它差不多(最初均为同一小组作品),所以一并介绍。
原文作者为梦见草,由野风信子整理和完善。

一.图片数据图片地址文件CrossGateGraphicInfo*_*.binStoneAgeAdrn_*.bin这个文件存放了图片的地址索引,由若干个大小一样的块组成,每个块长度为40字节(StoneAge为80字节),格式如下:

字段类型

内容

说明

字节

LONG

序号;

图片的编号

4

DWORD

地址;

指明图片在数据文件中的起始位置

4

DWORD

块长度;

图片数据块的大小

4

LONG

偏移量X;

显示图片时,横坐标偏移X

4

LONG

偏移量Y;

显示图片时,纵坐标偏移Y

4

LONG

图片宽度;

...

4

LONG

图片高度;

...

4

BYTE

占地面积-东;

占地面积是物件所占的大小,1就表示占1格

1

BYTE

占地面积-南;

同上

1

BYTE

标志;

用于地图,0表示障碍物,1表示可以走上去

1

BYTE[5]

未知;

在StoneAge中本字段长度为45字节

5

LONG

地图编号;

低16位表示在地图文件里的编号,高16位可能表示版本,非地图单位的此项均为0

4

其中偏移量XY是用于图片定位的,比如X=-18,Y=-19,如果将图片显示在(100,100),那么实际位置应该是(82,81),这样才可以和其它图片协调,在做人物动作gif的时候必须用这个参数来调整每一帧的位置,否则动作是抖动的,做地图也需要,否则会错位。图片数据文件CrossGateGraphic*_*.binStoneAgeReal_*.bin这个文件包含了所有图片的原始数据,每个数据块由数据头+数据组成,每个数据头长度16字节,格式为:

字段类型

内容

说明

字节

BYTE[2]

魔数;

固定为'RD'

2

BYTE

版本;

偶数表示未压缩,按位图存放;奇数则表示压缩过

1

BYTE

未知;

...

1

LONG

宽度;

...

4

LONG

高度;

...

4

LONG

块长度;

数据块的长度,包括数据头本身的长度(16BYTE)

4

后三项和地址文件中的一样,图像数据紧跟在数据头后面。
例如,要解开第100个图片,首先在GraphicInfo_*.bin里定位到第100条记录,即偏移(40*100)字节的位置,根据读出的地址在Graphic_*.bin中找到对应的数据块,就可以读出图片数据了。
绝大部分图片数据都是压缩过的.
二.动画信息动画地址文件CrossGateAnimeInfo*_*.binStoneAgeSpradrn_*.bin存放每个动画在动画序列文件中的地址索引,每个数据块大小12字节

字段类型

内容

说明

字节

DWORD

序号;

动画序号

4

DWORD

地址;

指明在动画信息文件中的地址

4

WORD

动作数目;

表示该角色有多少个完整的动作(包括各个方向)

2

WORD

未知;

 

2

动画信息文件CrossGateAnime*_*.binStoneAgeSpr_*.bin该文件存放了全部动作的图片序列,每个动作由数据头+若干序列号组成,数据头长度12字节

字段类型

内容

说明

字节

WORD

方向号;

0-7分别表示8个方向

2

WORD

动作号;

表示该动作的含义,比如坐下或者走路

2

DWORD

时间;

该动作完成一遍所需时间,单位为毫秒

4

DWORD

帧数;

该动画有多少帧,决定后面数据的大小

4

某些动作号不是所有角色都有,比如跑步前的准备动作。 

有多少帧,后面就跟有多少个序列号,每个序列号长10字节

字段类型

内容

说明

字节

DWORD

图片号;

该帧所使用的图片

4

CHAR[6]

未知;

...

6

图片号就是该帧所用的图片序号,用图片数据里说的方法就可解出每一帧的图片数据。。 

例如要解出340号角色的1方向的第5个动作,先在AnimeInfo_*.bin中定位到第340号数据块,即偏移(12*340)字节的位置,读出地址和动作数,然后根据地址在Anime_*.bin中定位到对应的位置,然后从该位置开始查找方向1动作5的序列,根据帧数读出每一帧的图片号,通过图片号解出对应的图片就行了。 

其中未知的字段表示我还不知道用处的。 

注意:CrossGate的动画序列地址文件AnimeInfo_*.bin,可能由于开发时的某些原因,造成存放了3遍序列,并且按前两遍解出的动画是错误的,要以第3遍为准,第2375号角色才是第0号,其他的版本没有这问题。 
三.地图格式

地图文件就是map目录下的那些,CrossGate的地图档在最前面有12个字节的文件头,内容为"MAP"(后9字节为0),StoneAge则没有文件头,其它完全一样。地图档格式字段类型说明

字节

DWORD地图长度-东(W)                                                    4

DWORD地图长度-南(H)                                                    4

BYTE[W*H*2]地面的数据,每一个单位2字节,为0表示无地面                N

BYTE[W*H*2]地上的物件等,每一个物体2字节,为0表示该处无物件          N

BYTE[W*H*2]地图标志,每一个单位2字节,具体不清楚,只知道对会引起地图切换的地方有标识                                                                 N

地图是45度视角的四边形,数据的存放顺序是从东到西,由南至北,起点为左边角(东0,南0)。
假设读入的3X3地图数据顺序为123456789,对应的地图显示:

 

 

 

3

 

 

2

 

6

 

1

 

5

 

9

 

4

 

8

 

 

 

7

 

 

 

 

 

 

 

 

 

 

这样读出来的数据是地图编号,在图片数据中说过,图片地址文件的每一条记录的最后一个字段就是地图编号,现在就是根据这个编号反查出对应的图片序号,将它显示出来,由于游戏本身没有地图索引文件(那是在运行游戏的时候生成的),所以要自制一份方便查找,这里要注意的是地图编号并不是连贯的,比如StoneAge最大的编号为41000,实际上用到的只有1万多点,中间有很多编号是未使用的。 
前面说过,每个图片都有偏移量用于对齐,画地图的时候也需要的,不过这里有点问题,若只是将偏移量加上坐标,地面没有问题,而建筑物纵坐标则会错位,我并不知道正确的做法,我是这样处理的:
假设纵坐标偏移量为y,图片高度h,要画的坐标为y0,那么实际的坐标y1就是
y1=y0+h-47+y
47是一个单位地面的高度(所以地面不必这样处理,因为h-47=0),这样做可以基本对齐,希望有朋友提供更标准的方法。 

另外,关于缩略图,就是将每个单位(占地面积1X1)缩成如下的四个点:
   □
□□□
如果一个物件面积为2X1,那么就是
       □
   □□□□
□□□
缩略图中每个图片都只用一种颜色表示,而这个颜色好像也是游戏自动生成的,所以要做缩略图的话,自己要制作一份颜色表。



四.压缩算法
这是JSS自定的一种Run-Length算法,用于StoneAge和CrossGate,下面是说明:

首字节(00)

01

02

03

说明

0n

String

 

 

长度为n的字符串

1n

m

String

 

长度为n*0x100+m的字符串

2x

y

z

String

长度为x*0x10000+y*0x100+z的字符串

8n

X

 

 

填充n个X

9n

X

m

 

填充n*0x100+m个X

Ax

X

y

z

填充x*0x10000+y*0x100+z个X

Cn

 

 

 

填充n个背景色

Dn

m

 

 

填充n*0x100+m个背景色

Ex

y

z

 

填充x*0x10000+y*0x100+z个背景色

比如,C9表示填充9个背景色,D1 10表示填充0x110个背景色,12 50表示后面跟着一个长度为0x250的字符串,91 02 30则表示将0x02重复0x130遍。 
RLE压缩方式,具体的压缩编码如下:
0a xx xx xx
a 个单独的颜色点

1a bb xx xx xx
abb 
个单独的颜色点
2a bb cc xx xx xx 
abbcc
个单独的点

Ca 
a 个透明色

Da bb 
abb 
个透明色
Ea bb cc
abbcc
个透明色
8a xx
个颜色是XX的点
9a xx bb
abb 
个颜色为xx的点
Aa xx bb cc
abbcc 
个颜色为xx的点
以graphics_10.bin(图像压缩数据文件)为例,一幅图像的结构如下:
typedef struct
{
    WORD fmtflag;       //
全部为"RD"
    WORD unknow;        //不知道什么用
    DWORD width;
    DWORD height;
    DWORD size;         // 整个结构大小,就是头+压缩数据
    unsigned char * pdata; // 大小为(size - 16)
}st_RDHeader;

另外还有一个GraphicInfo_10.bin(图片信息索引数据),具体结构如下:
typedef struct
{
    int idx;            //
索引号,基本上是按照顺序排列的
    DWORD fileptr;      //在数据文件中的偏移量
    DWORD size;         //大小,整个图像结构的大小,同上一个结构的SIZE
    int ofs_x;          //x偏移量
    int ofs_y;          //y偏移量,就是对齐点离坐上角的y 轴距离
    DWORD width;
    DWORD height; 
    DWORD colorkey;     //随便猜得,不一定正确
    DWORD unuse1;
    DWORD unuse2;
}st_GrpInfo;            // 40 bytes

其他情况,没有压缩
所有的a ,b ,c 都是表示单个十六进制数字。基本上超过3个点一样就用8a xx 了。
关于3.0的魔力宝贝添加的图片其实还是8位色的图片。按照8位色的图片解出来就行了,她不过是用了16位色的显示模式(其实是任何显示模式都可以)。另外,调色板前面的16个位置丢掉了,就是说实际上调色板是存储了后236个颜色的数值。
五.调色板
StoneAge的调色板文件是位于data/pal目录下的palet_*.sap,CrossGate的则为bin/pal目录下的palet_*.cgp,每个文件长度均为708字节,每种颜色3字节,所以每个文件都包含了236种颜色,要注意的是它不是从0号颜色开始排列的,而是从16号,即16-252,但实际上是16-240,前16种颜色和后16种颜色都是指定,文件中的240-252号颜色并没有使用,下面是指定的32种颜色: 
0-15号色 颜色号 0 1 2 3 4 5 6 7 
RGB值 (00,00,00) (00,00,80) (00,80,00) (00,80,80) (80,00,00) (80,00,80) (80,80,00) (C0,C0,C0) 
颜色号 8 9 A B C D E F 
RGB值 (C0,DC,C0) (F0,CA,A6) (00,00,DE) (00,5F,FF) (A0,FF,FF) (D2,5F,00) (FF,D2,50) (28,E1,28) 
240-255号色 颜色号 F0 F1 F2 F3 F4 F5 F6 F7 
RGB值 (96,C3,F5) (5F,A0,1E) (46,7D,C3) (1E,55,9B) (37,41,46) (1E,23,28) (F0,FB,FF) (A5,6E,3A) 
颜色号 F8 F9 FA FB FC FD FE FF 
RGB值 (80,80,80) (00,00,FF) (00,FF,00) (00,FF,FF) (FF,00,00) (FF,80,FF) (FF,FF,00) (FF,FF,FF) 
常用的几个调色板:

 

白天

傍晚

黑夜

凌晨

StoneAge

palet_01.sap

palet_02.sap

palet_03.sap

palet_04.sap

CrossGate

palet_00.cgp

palet_01.cgp

palet_02.cgp

palet_03.cgp

六.各版本对应的文件
CrossGate每个大版本都有相对独立的文件,比如最初的版本图片数据文件是Graphic_*.bin等,而龙沙的则是GraphicEx_*.bin,附加上了"Ex",下面是各个版本所使用的附加名。

版本

附加名

龙之沙时计

Ex

乐园之卵(精灵)

V3

乐园之卵

_PUK2

七.后续版本的改动
这里说的是CrossGatePuk2(乐园之卵)的数据格式变动。
乐园之卵中的图片不再使用全局调色板,静态图片都自带调色板,动画则是用隐藏调色板。

首先是自带调色板,图片数据中的文件头被扩充至20字节,且版本字段大于等于2(之前的为0和1)。

字段类型

内容

说明

字节

BYTE[2]

魔数;

固定为'RD'

2

BYTE

版本;

偶数表示未压缩,按位图存放;奇数则表示压缩过

1

BYTE

未知;

...

1

LONG

宽度;

...

4

LONG

高度;

...

4

LONG

块长度;

数据块的长度,包括数据头本身的长度(20BYTE)

4

LONG

调色板长度;

调色板数据所占的长度,通常为0x300,即256*3=768

4

还原后的数据最后那部分则是自带的调色板数据,大小和调色板长度字段的内容相同。

隐藏调色板本身其实是一些4X1的自带调色板的图片,它们的地图编号字段被重新解释了,表示使用这个调色板的动画序号,比如地图编号为0x1B680,那么在还原第0x1B680号动画的时候,就要使用该图片所带的调色板。
隐藏调色板存在于GraphicInfoV3_*.bin中,即使是AnimeInfo_PUK2_*.bin中的动画也是使用这里的调色板,从3840幅图片开始是隐藏调色板,不过并不是全部连续存在的,所以需要判断,除了宽4高1外,普通图片的地图编号高位为0或者3(乐园版本的地图),调色板的则不是,可以依此辨别。 

乐园之卵的动画也有很大改变,同一类型的各种宠物,以前是各自有独立的图片,现在是通过改变调色板来区别的(我认为如果能将玩家角色这样简化就好了,宠物反而不应这样),方向也简化了,右边的三个方向是左边对称过去的,这是一种偷工减料,不过也减少了文件的体积……同时也导致了数据格式的改变。动画信息文件中的数据头结构变化:

字段类型

内容

说明

字节

WORD

方向号;

0-7分别表示8个方向

2

WORD

动作号;

表示该动作的含义,比如坐下或者走路

2

DWORD

时间;

该动作完成一遍所需时间,单位为毫秒

4

DWORD

帧数;

该动画有多少帧,决定后面数据的大小

4

WORD

调色板号;

没完全弄清楚,我不用它来判断

2

WORD

反向;

若为奇数表示该序列的图片左右反向

2

DWORD

未知;

为0xFFFFFFFF,可能是结束符,便于以后再扩充?

4

要提取乐园之卵后的图片和动画,就必须用以上新的格式。地图的格式本身没有变化,不过增加了附属的文件,主要是和图片分割有关……

 

可能由于开发时的某些原因,造成存放了3遍序列,并且按前两遍解出的动画是错误的,要以第3遍为准,第2375号角色才是第0号  经过解析文件,发现其实覆盖了4遍

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

魔力宝贝/石器时代 图档格式压缩算法 的相关文章

  • Transport endpoint is not connected 报错

    在android中做在线升级程序 xff0c 在http请求数据时 xff0c 出现如下错误 xff1a java net SocketTimeoutException Transport endpoint is not connected
  • Ubuntu下Qt自动退出

    一直在使用Qt xff0c 真的被它强大的功能 漂亮的界面深深吸引了 不过最近遇到了一件非常让人不爽的事情 xff0c 就是在Qt下创建文件的时候会自动 xff0c 而且没有代码提示功能 想想吧 xff0c 这是多么令人头痛 xff0c 没
  • 洛谷 P1233 【木棍加工】题解

    算法 xff1a 排序 xff0c DP xff08 最长上升子序列 xff09 前言 xff1a 此题的数据非常水 xff0c 这里给予一组 hack 数据 xff1a 21 96 25 1 9 39 19 87 51 7 61 11 1
  • C# 修改电脑DNS和IP方法

    lt summary gt 将IP xff0c DNS设置为自动获取 lt summary gt private void setDHCP string doscmd 61 34 netsh interface ip set address
  • 使用Java实现串口通信(二)

    1 写在前面 距离上一篇文章 使用Java实现串口通信 已经过去快两年的时间了 xff0c 在此期间收到了很多读者的反馈 xff0c 很高兴可以帮助到这么多人 xff0c 根据收到的反馈 xff0c 我对代码逻辑进行了优化整理 xff0c
  • MSMG ToolKit v11.2 DL

    友情提醒一下 xff0c 建议使用原版 精简操作系统要是被后门 看不懂英文的可以百度翻译 xff0c 时间久了就明白嘛意思了 无非就那几个单词 如真要使用汉化版 xff0c 优化版的 看好你的核心bin文件夹 MSMG ToolKit By
  • Flutter之使用overlay显示悬浮控件

    Overlay与OverlayEntry Overlay是一个Stack的widget xff0c 可以将overlay entry插入到overlay中 xff0c 使独立的child窗口悬浮于其他widget之上 因为Overlay本身
  • 七夕快到了!表白小程序制作详解,撩翻你的女神!

    大家可能都会在抖音上刷过 xff0c 那种表白小程序 xff0c 但在我看来表白还是亲口说出来比较好 xff0c 这类小程序只适合在平常的一些小节日给对方一个惊喜 话不多说 xff0c 现在进入正题 xff1a 首先 xff0c 要在电脑上
  • Android Studio更改项目SDK的版本

    Elipse 中的安卓项目 xff0c 在Android Studio中可以通过File gt new gt Import Project的方法建立起来 但是有时候需要用到更改项目的API Level xff0c 下面的操作步骤为更改方法
  • java使用POI操作XWPFDocument 生成Word实战(一)【比较详细的】

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 注 xff1a 我使用的word 2016 功能简介 xff1a xff08 1 xff09 使用jsoup解析html得到我用来生成word的文本 xff08 这个你们可
  • HTML加载本地图片

    lt DOCTYPE html gt lt html gt lt body gt lt img src 61 34 file C Users Administrator Desktop 1 jpg 34 gt lt body gt lt h
  • navicat mysql 连接本地 忘记密码 查看密码 操作

    https jingyan baidu com article 454316ab4e9e65f7a7c03ad1 html 转载于 https www cnblogs com yzw23333 p 9510990 html
  • 巧用“记事本” 让病毒白白运行

    电脑中毒后 xff0c 许多朋友会打开 进程管理器 xff0c 将几个不太熟悉的程序关闭掉 xff0c 但有时会碰到这种情况 xff1a 关掉一个 xff0c 再去关闭另外一个时 xff0c 刚才关闭的那个马上又运行了 再从注册表里先把启动
  • mmap如何使用?

    蓝森林 http www lslnet com 2006年4月24日 18 41 对Linux内核内存管理搞了好久了 xff0c 其中对于mmap如何使用 xff0c 有很长一段时间存在疑惑 xff0c 后来在看Linux进程间通信机制的时
  • Sliding Window Maximum

    Given an array nums there is a sliding window of size k which is moving from the very left of the array to the very righ
  • 项目供参考Asp.net C# 获取本周上周本月上月本年上年第一天最后一天时间大全...

    查了好多资料 xff0c 发现还是不全 xff0c 干脆自己整理吧 xff0c 至少保证在我的做法正确的 xff0c 以免误导读者 xff0c 也是给自己做个记录吧 xff01 项目顶用到了 xff0c 所以就写全了 xff0c 供参考使用
  • 彻底关闭 Win10安全中心提示

    del reg Windows Registry Editor Version 5 00 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer Shell
  • IdentityServer4之JWT签名(RSA加密证书)及验签

    一 前言 在IdentityServer4中有两种令牌 xff0c 一个是JWT和Reference Token xff0c 在IDS4中默认用的是JWT xff0c 那么这两者有什么区别呢 xff1f 二 JWT与Reference To
  • Sublime激活码

    BEGIN LICENSE riku Single User License EA7E 806996 60C55C64D0195F15A118D93ECE0849B3 30C432F529F7BFAAF6568C6BFDDA1868 D6D
  • HTML5 入门:一个最简单的HTML页面(doctype、meta、Head、标签的使用)

    HTML5的 lt doctype gt 声明怎么写 这是HTML 4 01的doctype xff1a lt DOCTYPE html PUBLIC 34 W3C DTD HTML 4 01 EN 34 34 http www w3 or

随机推荐

  • 终止阻塞的线程

    为什么80 的码农都做不了架构师 xff1f gt gt gt 线程状态 我们知道 xff0c 一个线程可以处于以下四种状态之一 xff1a 1 新建 xff08 New xff09 xff1a 当线程被创建时 xff0c 它只会短暂地处于
  • 【spring data jpa】jpa中使用count计数方法

    spring data jpa中使用count计数方法很简单 直接在dao层写方法即可 int countByUidAndTenementId String parentUid String tenementId 这样即可根据传入的字段查询
  • Intellij 高亮显示与选中字符串相同的内容

    如下图所示 xff0c 我的是 2018 xff0c 不同版本 xff0c Schema 可能要 Save As一下
  • Docker练习例子:基于 VNCServer + noVNC 构建 Docker 桌面系统

    0 安装docker 这一步略 xff0c 网上有好多教程 xff0c 一般出现装不上的原因 xff0c 也就是网速问题了 xff0c 这个我也很难帮你 1 下载指定的镜像images 1 docker pull dorowu ubuntu
  • 服务器开发通信协议设计介绍

    一 选择TCP还是UDP协议 由于我们的即时通讯软件的用户存在用户状态问题 xff0c 即用户登录成功以后可以在他的好友列表中看到哪些好友在线 xff0c 所以客户端和服务器需要保持长连接状态 另外即时通讯软件一般要求信息准确 有序 完整地
  • 神经网络NN算法(理论篇)

    起步 神经网络算法 Neural Network 是机器学习中非常非常重要的算法 这是整个深度学习的核心算法 xff0c 深度学习就是根据神经网络算法进行的一个延伸 理解这个算法的是怎么工作也能为后续的学习打下一个很好的基础 背景 神经网络
  • TiDB 的数据迁移工具现已开源

    TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库 xff0c 支持包括传统 RDBMS 和 NoSQL 的特性 现已将 DM xff08 data migration platform xff0c 该数据迁移工具 xf
  • MSMG ToolKit v11.4 DL

    v11 4 43 Updated the Microsoft Windows PowerShell 7 Pack Windows 7 Windows 8 1 Windows 10 for MSMG ToolKit with PowerShe
  • iOS YYText的使用笔记一(YYTextView图文编辑器)

    YYText是强大的YYKit的一部分可以单独下载 Github地址 https github com ibireme YYText Powerful text framework for iOS to display and edit r
  • sass入门指南

    很详细的sass入门指南 xff0c 学习一下 原文sass入门指南 css预处理器已经算不上一个新鲜的词了 xff0c 当前比较有代表性的css预处理器有sass less stylus 关于三者选择问题一直都是比较受争议的话题 xff0
  • redisTemplate.expire 无效和更新含有生存时间的key

    为什么80 的码农都做不了架构师 xff1f gt gt gt spring中redis 配置的不对 如下配置 xff1a lt redis配置 gt lt bean id 61 34 poolConfig 34 class 61 34 r
  • 测试linux下磁盘的读写速率

    1 xff09 通过df h命令查看磁盘情况 Filesystem Size Used Avail Use Mounted on dev sda4 289G 61G 214G 23 tmpfs 7 8G 0 7 8G 0 dev shm d
  • idea右侧的工具栏不见,包括maven以及其他

    通用 xff0c 设置后右侧工具栏可见 可以通过view gt windows tool看到maven的 转载于 https www cnblogs com czz hl p 9963643 html
  • 一些个人喜欢的博客

    詹兴斌 xff1a http blog zhanxb com category 19 代震 军 xff1a http daizhj cnblogs com 老赵 http blog zhaojie me 张善友 xff1a http www
  • 修改注册表权限

    1 uses aclapi AccCtrl 2 3 var 4 lpObjectName LPTSTR 5 OldDACL NewDACL PACL uses aclapi 6 ObjectType SE OBJECT TYPE uses
  • android socket编程之UDP

    socket是基于tcp和upd的 xff0c 而tcp和udp是基于ip协议 xff0c 客户端 xff1a package com sunfb upd import java io IOException import java net
  • zabbix监控网络的出入口流量

    首先我们登录到zabbix 点击配置 模板 Template OS Linux 下的监控项 点击右上角的添加监控项目 我们的服务器是在Ucloud上的 xff0c 我们的网卡名称为eth0 xff0c 然后配置如下 zabbix自带的监控网
  • WPF特效-实现弧形旋转轮播图

    原文 WPF特效 实现弧形旋转轮播图 项目遇到 xff0c 琢磨并实现了循环算法 xff0c 主要处理循环替换显示问题 xff08 如 xff1a 12张图组成一个圆弧 xff0c 但总共有120张图需要呈现 xff0c 如何在滑动中进行显
  • 数据处理 聚类分析

    参考 xff1a 聚类分析 中大数模的博客 http blog sina com cn s blog 656fe31a0100hqq5 html A 61 1 00 54 89 30 86 448 70 01 1 01 13 50 2 00
  • 魔力宝贝/石器时代 图档格式压缩算法

    下文分析了CrossGate 魔力宝贝 的文件格式 xff0c 因为StoneAge 石器时代 和它差不多 最初均为同一小组作品 xff0c 所以一并介绍 原文作者为梦见草 xff0c 由野风信子整理和完善 一 xff0e 图片数据图片地址