第四代存档数据结构
Love Poke,Wiki Poke
跳到导航跳到搜索
| 这篇文章属于半成品,目前尚未完成。你可以帮助我们扩充完善它。 |
DS系列的存档通常被存储为.SAV文件,并且其中包括两组数据。每一组数据包括一个小数据块和一个大数据块。精灵宝可梦 白金与精灵宝可梦 钻石·珍珠的偏移量都有所差别,请勿混用。
在钻石·珍珠版本中,第一组小数据块起始于0x00000,结束于0x0C0FF,第一组大数据块起始于0x0C100,结束于0x1E2DF。在白金版本中,第一组小数据块起始于0x00000,结束于0x0CF2B,第一组大数据块起始于0x0CF2C,结束于0x1F10F。第二组数据则是第一组数据再偏移0x40000,三部游戏皆如此。两组数据互为备份关系。
小数据块
小数据块包括如下的数据:
| 偏移量 | 解释 |
|---|---|
| 0x68 - 0x77 | 训练家名字 |
| 0x78 - 0x79 | 训练家ID |
| 0x7A - 0x7B | 隐藏ID |
| 0x7C - 0x7F | 金钱 |
| 0x80 | 性别 |
| 0x81 | 来自 |
| 0x82 | 徽章 |
| 0x83 | 头像 |
| 0x9C | 队伍中精灵数量 |
| 0xA0 - 0x627 | 队伍精灵数据块 |
| 0x630 - 0x8C3 | 普通道具数据占位 |
| 0x8C4 - 0x98B | 重要道具数据占位 |
| 0x98C - 0xB4B | 技能机器数据占位 |
| 0xB4C - 0xBEB | 药品数据占位 |
| 0xBDC - 0xCEB | 树果数据占位 |
| 0xCEC - 0xD27 | 精灵球数据占位 |
| 0xD28 - 0xD5B | 战斗用品数据位 |
| 0xD5C - 0xD8B | 邮件数据占位 |
| 0xCF18 - 0xCF2B | 数据尾 |
数据占位
In these placeholders, each item takes 4 bytes with the following structure: 在这些数据占位中,每个道具占用4个字节,呈以下结构:
| 偏移量 | 解释 |
|---|---|
| 0x00 - 0x01 | 道具ID |
| 0x02 - 0x03 | 道具数量 |
数据尾
每个数据块(包括大小两种数据块)的最后0x14个字节作为数据尾,呈以下结构:
| 偏移量 | 解释 |
|---|---|
| 0x00 - 0x03 | 用来连接大小数据块 |
| 0x04 - 0x07 | 存档编号 |
| 0x08 - 0x0B | 数据块大小 |
| 0x0C - 0x0F | K |
| 0x10 - 0x11 | T |
| 0x12 - 0x13 | 数据块校验 |
校验
游戏采用CRC-16-CCITT算法进行校验,进行计算的数据为整个数据块但不包括数据尾。
实例
小数据块1 D1 01 00 00 | 42 04 00 00 | 00 C1 00 00 | 23 06 06 20 | 00 00 | 7E 7A 大数据块1 D0 01 00 00 | F1 02 00 00 | E0 21 01 00 | 23 06 06 20 | 01 00 | 0D 39
小数据块2 D0 01 00 00 | 41 04 00 00 | 00 C1 00 00 | 23 06 06 20 | 00 00 | 0C 7F 大数据块2 D1 01 00 00 | F2 02 00 00 | E0 21 01 00 | 23 06 06 20 | 01 00 | F6 8A
由于小数据块1中0x04 - 0x07处数据的值较大(42 04 00 00 > 41 04 00 00),因此为当前小数据块。然后通过0x00 - 0x03处的值(D1 01 00 00)寻找到大数据块。此处意味着当前大数据块其实是大数据块2(如果大数据块的校验是正确的)。
参考资料
| |||||||||||||||||
