第一代精灵数据结构
第一代游戏的精灵数据结构储存了关于玩家捕获精灵的大部分数据。队伍中的每只精灵占用44字节,存储在电脑中的精灵则只占用33字节。因此当把一只精灵存储到电脑中时会丢失部分数据,分别是精灵的等级、HP、物攻、物防、特殊和速度。 所以当一只精灵再次从电脑中取出时其丢失的各项能力值会得到重新计算,于是就出现了用来提高精灵能力值的盒子戏法。
数据结构
| 偏移 | 含义 | 大小 |
|---|---|---|
| 0x00 | 精灵种族索引 | 1字节 |
| 0x01 | 剩余HP | 单字 |
| 0x03 | 等级(?) | 1字节 |
| 0x04 | 异常状态 | 1字节 |
| 0x05 | 属性1 | 1字节 |
| 0x06 | 属性2 | 1字节 |
| 0x07 | 捕获率/携带道具 | 1字节 |
| 0x08 | 技能1的编号 | 1字节 |
| 0x09 | 技能2的编号 | 1字节 |
| 0x0A | 技能3的编号 | 1字节 |
| 0x0B | 技能4的编号 | 1字节 |
| 0x0C | 捕获训练家ID | 单字 |
| 0x0E | 经验值 | 3字节 |
| 0x11 | HP努力值 | 单字 |
| 0x13 | 物攻努力值 | 单字 |
| 0x15 | 物防努力值 | 单字 |
| 0x17 | 速度努力值 | 单字 |
| 0x19 | 特殊努力值 | 单字 |
| 0x1B | 个体值 | 单字 |
| 0x1D | 技能1的PP | 1字节 |
| 0x1E | 技能2的PP | 1字节 |
| 0x1F | 技能3的PP | 1字节 |
| 0x20 | 技能4的PP | 1字节 |
| 0x21 | 等级 | 1字节 |
| 0x22 | 最大HP | 单字 |
| 0x24 | 物攻 | 单字 |
| 0x26 | 物防 | 单字 |
| 0x28 | 速度 | 单字 |
| 0x2A | 特殊 | 单字 |
细心的读者会发现,精灵的昵称和捕获训练家的名字并不在其中;它们其实被存放到了其他的地方了。
存放在电脑中的精灵使用了类似的数据结构,只是数据止于技能4的PP,即0x20。
精灵盒子数据只含有当前打开的盒子的数据,这也就解释了为什么换盒子之前需要玩家存档。在《精灵宝可梦 黄》美版中,这些数据起始于动态内存的0xDA95处,共长660字节(20只精灵每只33字节)。
各字段解释
种族
该精灵的种族在第一代游戏中的索引。
剩余HP
该精灵剩下的HP。这个数据不能比最大HP字段的数值大。
等级
这个数据现在只是看上去像是精灵的等级,但是这明显是个冗余:当精灵存放在电脑的盒子中时,它是这个精灵的等级;然而当精灵取出的时候,能力值被重新计算,这个数值就会被覆盖一遍;再将精灵存放回电脑的盒子的时候又会被设成精灵的等级。这个数据的作用目前仍是个谜。
异常状态
该精灵的异常状态,是一个位字段。
| 位 | 值 | 异常状态 |
|---|---|---|
| 3 | 0x04 | 睡眠 |
| 4 | 0x08 | 中毒 |
| 5 | 0x10 | 烧伤 |
| 6 | 0x20 | 冰冻 |
| 7 | 0x40 | 麻痹 |
由于剧毒、混乱仅在对战的情况下才存在,它没有存放在这里。0x00表示这只精灵没有任何异常状态。
属性
该精灵的属性。如果该精灵只有一种属性,那么两个值是一样的。这个数据有些冗余,因为在第一代中除了通过进化以外精灵没有办法改变属性。
捕获率/携带道具
该精灵的捕获率。这个数据不会改变,即使是进化到了一个拥有不同捕获率的精灵。
当与第二代游戏交换精灵时,这个字段会被用来存储精灵的携带道具。
捕获训练家ID
经验值
该精灵积累的经验值。精灵的等级便是由经验值根据该精灵的成长公式计算得到的。
努力值
- 主条目: 努力值
该精灵通过战斗或者使用努力值增加剂分别积累的5种努力值。
PP
- 主条目: PP值
该精灵每个技能拥有的PP值。每个数值的低6位是对应技能的当前PP值,高2位则是对该技能使用的PP上升剂的数量。
这就能解释一些像破坏死光之类的多回合技能bug:游戏从整个字节减去1,导致0x00变成0xFF,这就意味着使用了3个PP上升剂,并且当前PP值到了63。但是,如果1个或多个PP上升剂已经用在这个技能上,这个字节就不会这么变化了,结果PP上升剂就被“移除”了。例如,如果对一个技能已经用了两个PP上升剂,并且该字节是0x80,之后就会变成0x7F,变成了63个PP值和1个PP上升剂。
最大HP
该精灵HP所能达到的上线,即精灵得到恢复后的HP值。
物攻,物防,速度,特殊
精灵的物攻、物防、速度、特殊是根据该种精灵对应的种族值、该精灵对应的个体值、该精灵对应的努力值和经验值计算的。这种计算在精灵等级上升和从电脑中取出精灵时发生。
参考资料
| |||||||||||||||||
