首页 > [修改必备知识][就当扔了个炸弹好了]性格值与个体值的关系

寵物小精靈性格表,[修改必备知识][就当扔了个炸弹好了]性格值与个体值的关系

互联网 2021-06-15 02:09:14

其实以前有人已经讲过了,可看此帖http://www.pokemon.name/dispbbs.asp?BoardID=75&ID=377957&replyID=&skin=1,偶要做的是简单回顾然后继续讲下去,不过这个理论过于烦琐,而且对绝大多数人来说可能有些符号都不知道什么意义,那么跳过去理论看最后用相对简单的办法得到合法的数据也是可以的,自己决定看不看理论吧

看理论之前先要搞清楚以下这些逻辑运算符>>(右移),& (与),%(模)

右移:将每一位向右移动一位,最后一位自动消失,前面补0

比如

00100100

->00010010

与:两个数上下对齐,上下都是1时为1,否则为0

比如

11100011

01011101

->01000001

模:就是余数

比如

63%19=6

84%21=0

性格值的形成

口袋妖怪DPPT包括宝石版的各个版本性格值的形成都是靠一个叫Pseudo-Random Number Generator (PRNG)的随机数生成系统生成的,PRNG是一个嵌套函数,就是运算过程中调用自己的一类函数,最简单的嵌套函数就是阶乘了

PRNG具体的形式为

X[n+1] = (0x41C64E6D * X[n] + 0x6073) % 0xFFFFFFFF

其中初始值X[0]是给定的,通称为seed也叫种子,所有运算都是16进制下的运算。精灵的性格值就是由X[1],X[2]决定,具体形式为X[2]的前四位X[1]的前四位。

例子:假定给的初始种子为4A9B376E,通过计算可得X[1]=DC0E7E49,前四位为DC0E

X[2]=521C6388,前四位为521C,于是性格值就产生了PID=521CDC0E,转化为10进制数为1377623054,这就是通常在修改器里看到的性格值。

那性格值有啥用呢?用处多了,最重要的是决定性格,性别以及特性

性格:取10进制的性格值最后两位,如果大于24,则减去25,重复直至小于24,这样就得到一个0-24之间的数了,对照下表即可得知性格

0 Hardy 1 Lonely 2 Brave 3 Adamant 4 Naughty 5 Bold 6 Docile 7 Relaxed 8 Impish 9 Lax 10 Timid 11 Hasty 12 Serious 13 Jolly 14 Naive 15 Modest 16 Mild 17 Quiet 18 Bashful 19 Rash 20 Calm 21 Gentle 22 Sassy 23 Careful 24 Quirky

具体中文是什么对照表很多就不写了

上面那个例子性格值为1377623054,取最后两位54减两次得到6,对照表可知性格为Docile

性别:这仅在有性别时有用,如没性别,全公或全母时虽然也能有个结果,但这时不起作用。

将性格值转为16进制取最后两位然后再转为10进制可得到一个0-255之间的数。

1:如果某精灵的生殖比率为1:7,当得到的那个数小于30时,该精灵为雌性

2:如果某精灵的生殖比率为1:3,当得到的那个数小于63时,该精灵为雌性

3:如果某精灵的生殖比率为1:1,当得到的那个数小于126时,该精灵为雌性

4:如果某精灵的生殖比率为3:1,当得到的那个数小于190时,该精灵为雌性

TIP:生殖比率在精灵资料表上应该都有

上面那个例子,取16进制的性格值0E转为10进制为14,因为小于30所以只要是有性别的那肯定是雌的

特性:和性别一样只有有两种特性时才有意义

将性格值转为2进制数看最后一位,0的话则是特性1,1的话则是特性2

上面那个例子里性格值转为2进制的最后一位是0,所以是特性1

————————————————分割线————————————————————

下面讲个体值的产生以及与性格值的关系

首先要说明的是个体值产生有至少8种算法,具体的情况看下表

* Normal NDS or GBA 最常见的遇见精灵的方式

* Wild NDS or GBA 不太常见遇见精灵方式,GBA里的神兽是否属于这种还不确定

* Uncommon GBA GBA游戏中不常见的遇见精灵的方式

* Rare GBA GBA游戏中罕见的遇见精灵的方式

* Very Rare GBA GBA游戏中非常罕见的遇见精灵的方式,遇见几率只有1%

* Ultra Rare GBA GBA游戏中极其罕见的遇见精灵的方式,遇见几率只有0.01%

* Common GBA Event (Restricted) GBA活动的精灵

* Common GBA Event (Unrestricted) GBA活动的精灵

通常情况下都是使用第一种算法

第一种算法时,在计算出性格值后继续叠代2次得到X[3],X[4],6个个体值就从这里得出。由于没有实例的话过于抽象也不容易理解,所以就以上面这个例子作为参考来进行说明

X[2]=521C6388,计算得到X[3]=1F9A315B,X[4]=B7131E32

取X[3]的前四位1F9A转为2进制得到1111110011010在首位前补0补足16位得到0001111110011010,划分成以下形式

0|00111|11100|11010

0|DEFIV|ATKIV|HPSIV

由此得到HPIV=11010=26

ATKIV=11100=28

DEFIV=00111=7

同样取X[4]的前四位B713转为2进制得到1011011100010011,划分成以下形式

1|01101|11000|10011

1|SPDIV|SPAIV|SPEIV

由此得到SPDIV=10011=19

ATKIV=11000=24

DEFIV=01101=13

这样6个个体值都产生了

接下来是性格值与个体值的关系,由于各种个体值算法都是进行叠代,只不过有的取X[3],X[4],有的取X[4],X[5],所以都和最前面产生性格值的X[1],X[2]有一定的关系,所以说个体值和性格值是有关的,只是这种关系比较弱,也无法很直接的看出来。另外个体值和个体不是1对1的关系,都是多对多的关系,所以要找全几乎是不可能的。

下面都是以算法一为算法

由性格值得出个体值

假设已有性格值9E03428B,则根据刚才性格值的产生方法可知X[1]=428BXXXX,X[2]=9E03XXXX。那么假设X[1]=428B0000叠代一次算出X[2]看看X[2]的头四位是不是9E03,是的话则算X[3],X[4]可得个体值,不是的话则说明X[1]不可能是428B0000,那么接下去假设X[1]=428B0001,同样看X[2]的头四位是不是9E03,是的话则算X[3],X[4]可得个体值,不是的话则说明X[1]不可能是428B0001,依次类推一直假设到X[1]=428BFFFF,这样经过65535次运算可以全部得到这个性格值对应的个体值。

由个体值得到性格值

其实从上面的步骤就可以看出这是个逆运算,因为个体值是从X[3],X[4]里得来的,性格值是X[1],X[2]里得来的,个体值得到性格值就是从X[3],X[4]逆推出X[1],X[2],下面是公式

X[n]=(0xEEB9EB65*X[n+1]+0xA3561A1) % 0xFFFFFFFF

假设个体值都是31(修改党的最爱),则X[4]=7FFFXXXX或FFFFXXXX(因为决定个体值时首位是忽略的,所以0111111111111111和1111111111111111都可以产生3个31)。那假设X[4]=7FFFXXXX,取X[4]=7FFF0000,用上面的公式得到X[3],看看X[3]前四位是不是7FFF,是的话可以逆推X[2],X[1]得到性格值,不是的话就假设X[4]=7FFF0001重复直到X[4]=7FFFFFFF,经过65535次后能找到个体全31对应的所有性格值

TIPS:因为7FFF和FFFF都是可能的,所以实际上比性格值得到个体值每一次都要多做至少2次总计至少要多做2^65535次

由上可知手算那肯定不可行,还好白金修改器的v0.06d有了这功能,所以可以大大简化工作量了

————————————————分割线————————————————————

看到这有没有发现什么呢,不错,修改一个DPPT里合法的精灵的所有要素都已经齐了,加上这两帖已经可以任意改出DPPT里的合法精灵了

http://www.pokemon.name/dispbbs.asp?boardID=75&ID=389365&page=2

http://www.pokemon.name/dispbbs.asp?boardID=75&ID=389498&page=1

下面就来实战一下

造出一只白金闪光珍珠兽

打开白金修改器,先把一些没什么影响的信息输入

种类:自然是珍珠兽了

名字:随便取,偷懒的办法就是点旁边的“和精灵种类相同”

遇见的等级:白金里是70级

遇见的场所:やりのはしら,同时会跳出51这个数字

道具:随便

主人的名字:随便

遇到的日期:随便,当然别早于游戏推出的日期

等级:别低于遇见的70级就行了

主人的性别:随便

出身国:没什么关系,和游戏版本相同就行

命运的想遇:别勾

亲密度:一般抓来的都是默认的70好象

捕捉球:随便,高级球也是能抓到的

特性:只有一个压力

获得蛋的地方和日期:保持原样就行了

病毒感染,免疫,文身:随便

技能:正常抓来70级的那四个技能就行了

努力值:总和别超510,单项别超255即可

个体值:自己编吧,别看上去就很假的样子就行了,不如全31,全0,5个31一个0什么的

比如输入29/18/21/29/30/30,特攻,速度比较重要写高点不要紧,HP,两防不要太低就行了,物攻那就无视好了,顺便性格就要减攻加特攻的好了

保存一下,接着点正规值生成,输入的个体值已经在那了,点生成右面会看到给出的性格值,算法1-8,性格,特性和性别(珍珠兽无视),是否闪光这些信息,要注意正常捕捉的珍珠兽用的个体值算法是一所以只能看算法一的那些性格,看了下好象没有减攻加特攻的,这时对个体值进行微调,6个都可以,对于珍珠兽来说物攻反正无视就微调物攻好了,减到17看看,还没有,那就一个个减下去,终于,减到0时出现一个性格值为1007735765的,好,就这个

然后根据闪光判定那帖的算法来决定表ID和隐藏ID

这时一般先确定一个否则范围太大不好弄,比如确定表ID为17904,根据闪光判定可以得到隐藏ID的2进制表示式为1010101000110XXX,最后三位因为判定时是无视的所以可以任意取,比如取000则隐藏ID就是1010101000110000=43568,把这两个数填进表里ID,再点正规性格值生成可以看到在闪光与否那里已经表示是闪光的了

最后根据不明值那帖的说明46h填33,85h填04

这样造出来的闪光珍珠兽拿到随便哪里都是合法的,别人也找不出任何漏洞

[此贴子已经被作者于2009-5-18 23:23:25编辑过]
免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读