阿尔宙斯宝可梦数据解析
在PKHeX更新之前,大家可以先熟悉一下数据结构。
以下都是基于PKHeX.Core的源码和个人研究,可能存在错误,欢迎在评论区讨论。
概述
宝可梦数据从原来的344字节调整成了360字节,加密解密的方式没有发生变化,数据结构与之前类似,但也有一些变化。
加密解密
加密解密方法可以参考https://github.com/kwsch/PKHeX/blob/master/PKHeX.Core/PKM/Util/PokeCrypto.cs 这个文件。总体来看加密方法会对0x08-0x168的数据进行加密,每4个字节作为一个块(block)进行加密和打乱操作。如果在0x00-0x07的数据随意修改都不影响加密/解密结果。
0x00-0x03
这个就是在PKHeX中的加密常数
0x04-0x05
一般都是0
0x06-0x07
checksum,用于校验解密后数据的有效性,算法可以参考 https://github.com/kwsch/PKHeX/blob/master/PKHeX.Core/PKM/G8PKM.cs#L22
0x08-0x09
宝可梦编号
0x0A-0x0B
携带道具编号
0x0C-0x0D
TID,训练家ID,这里注意7代以后显示的TID有变化,具体可见 https://wiki.52poke.com/wiki/ID_No.
0x0E-0x0F
SID,里ID,这里注意7代以后显示的TID有变化,具体可见 https://wiki.52poke.com/wiki/ID_No.
0x10-0x13
经验值
0x14-0x15
特性id
0x16
低3位是特性序号,第4位是否最爱宝可梦,第5位是能否极巨化标记,第6位是头目标记
0x17 对齐字节,未使用
0x18-0x19
标记
0x1A-0x1B 对齐字节,未使用
0x1C-0x1F
PKHeX的PID
0x20
性格
0x21
薄荷性格
0x22
第一位是否命运的相遇,第三位是性别
0x23 对齐标记
0x24-0x25
形态id
0x26-0x2B
努力值,这代没有用到
0x2C-0x31
华丽大赛6维(帅气、美丽、可爱、聪明、强壮和光泽)
0x32
宝可梦病毒相关数据
0x33 对齐字节,未使用
0x34-0x47
奖章相关
0x48-0x4B
宝可梦社交度。表示宝可梦与其它宝可梦的互动程度。在每次煮咖喱饭后,高社交度的宝可梦更容易吸引到野生的宝可梦。其它玩家和NPC的高社交度宝可梦更有可能向主角赠送道具。
0x4C-0x4F 对齐字节,未使用
0x50
宝可梦身高0-255
0x51
宝可梦体重0-255
0x52
这里似乎和0x51一致,不确定
0x53
???
0x54-0x5B
技能,每个技能2字节
0x5C-0x5F
技能PP值,每个技能1字节
0x60-0x79
宝可梦昵称,26个字节。最后两个字节是\0
0x7A-0x91
???
0x92-0x93
当前HP
0x94-0x97
HP ATK DEF SPA SPD SPE六维个体值,每个值占5bit,第31位为是否是蛋标记,第32位是是否起昵称标记
注意这里的个体值与最终的奋斗值有关。其中个体在0-19为0、20-25为1、26-30为2、31为3。定义转换后的值为基础奋斗值。最终显示在游戏的奋斗值为基础奋斗值+用道具加的奋斗值
0x98-0x9B
???
0x9C
当前宝可梦状态(中毒、灼伤、睡眠、麻痹等)
0x9B-0xA3
???
0xA4-0xA9
用道具加的奋斗值,按照HP ATK DEF SPA SPD SPE顺序,每个1字节
0xAA-0xEC
???(感觉应该和宝可梦现在持有者相关)
0xEE
当前版本,固定都为47,其实PKHeX早就预留好了这个值,可以看 https://github.com/kwsch/PKHeX/blob/master/PKHeX.Core/Game/Enums/GameVersion.cs#L207
0xEF-0xF1
???
0xF2
语言
0xF3-0x10F
???
0x110-0x129
宝可梦初始训练家昵称,26个字节。最后两个字节是\0
0x12A
宝可梦初始训练家亲密度
0x12B-0x133
???
0x134
相遇年份,值为当前年份-2000
0x135
相遇月份
0x136
相遇月的第几天
0x137
捕捉的球种编号
0x138-0x13C
???
0x13D
低7位,相遇等级。第8位,宝可梦初始训练家性别
0x13E-0x160
???