おおきさくらべ

*こういう計算をしたことがないので間違いがある可能性がおおいにあります。
 もし間違いを見つけたら、BBSなどにお願いします。

ポケットモンスター情報センター 2号館(http://no2.pic.bz/)では次のように説明されています。

____(引用はじめ)______________________________________
HPの個体値の下位4ビット→A
攻撃の個体値の下位4ビット→B
防御の個体値の下位4ビット→C
素早さの個体値の下位4ビット→D
特攻の個体値の下位4ビット→E
特防の個体値の下位4ビット→F
性格値の下位1バイト→G
性格値の下位2バイト目→H    としたとき
 ・下位4ビット:
個体値を00〜1Fのように16進数表記した時に1の位になる数0〜F
・下位1バイト:
性格値を16進数表記した時の下2桁
・下位2バイト目:
性格値を16進数表記した時の下3桁目と4桁目
 

S = (( ((BxorC)*A )xorG)*256)+( (ExorF)*D )xorH

このときのSを右の表と見比べていってSがZ以下でZが最大(つまりはじめてS<Zとなるものの1つ上)のX・Y・Zを使います。

M=ポケモンのたかさ(m)*10  とすると
のおおきさ=(( (S-Z)/Y )+X)*M/10
となります。ちなみに、↑ででる数の単位はmmなので10でわってcmにする必要があります。  
____(引用おわり、表は省略)_______________________________

まず、Sについて考えると式は
 (( ((BxorC)*A )xorG)*256)
 ( (ExorF)*D )xorH
と分けられます。
A,B,C,D,E,F:16進数の1桁の数
G,H:16進数2桁の数
ということより
 (( ((BxorC)*A )xorG)*256) = 0〜65280(255*256)
 ( (ExorF)*D )xorH = 0〜255
となるので、
 S = 0〜65535 (65280+255)

次にポケモン本来のたかさをMcm(引用文中の”M”とは異なる)とおくと
 おおきさ(cm)=((S−Z)/Y)+X)*M/1000
となります。(小数第2位以下を切り捨て)
式を並びかえると
 おおきさ(cm)=M×((S−Z)/Y)+X)/1000
となり、((S−Z)/Y)+X)/1000を求めれば各ポケモンのおおきさの範囲がわかります。
今回は、この求めるべき((S−Z)/Y)+X)/1000をRとおきます。
*/1000では小数点以下の切捨てをしない


n番めのセットを使うこととして、(S−Z)の範囲を求めます。
Sの範囲が、Z 〜 ((n+1番めのZ)−1)  なので
 (S−Z)= 0 〜 (((n+1番めのZ)−1)−Z)
よって、(S−Z)の最大値は(((n+1番めのZ)−1)−Z)で、これをZ’とおくことにします。

 * * *
セットの選び方が
「SがZ以下でZが最大」:S<ZとなるもののうちZが最大のもの
「はじめてS<Zとなるものの1つ上」:S≧ZとなるもののうちZが最大のもの(一部例外あり)
と異なってしまっています。
前者ではRがマイナスの値になってしまうため、ここでは後者の計算方法をとりました。
「SがZ以下でZが最大」というのは「ZがS以下でZが最大」の誤植であったのでしょう。
 * * *

そしてZの代わりにZ’を組ませ、10進数にした表が次のものです。

X	Y	Z’
290	1	9
300	1	99
400	2	199
500	4	399
600	20	1999
700	50	4999
800	100	9999
900	150	33175
1000	150	6823(このセットのZ’=(((n+2番めのZ)−1)−Z)となる)
1100	100	9999(このセットが選ばれることはない)
1200	50	4999
1300	20	1999
1400	5	499
1500	2	199
1600	1	99
1700	1	25(このセットのZ’=Sの最大値(FFFF)−Z)


このとき各セットでの最大のR、最小のRは

最大	最小
0.299	0.29
0.399	0.3
0.499	0.4
0.599	0.5
0.699	0.6
0.799	0.7
0.899	0.8
1.121	0.9
1.045	1
1.199	1.1(選ばれないセット)
1.299	1.2
1.399	1.3
1.499	1.4
1.599	1.5
1.699	1.6
1.725	1.7
*小数第3位まで

となり、Rの範囲は
 0.29〜1.121、1.2〜1.725
です。
よっておおきさは、元のたかさの約0.3〜1.7倍ということになります。

具体的には、
キノココ、ドジョッチ(40)	: 11.6〜 69.0(除:44.9〜47.9)
コイキング(90)		: 26.1〜155.2(除:100.9〜107.9)
ヘラクロス(150)		: 43.5〜258.7(除:168.2〜179.9)
ハスボー、タネボー(50)	: 14.5〜 86.2(除:56.1〜59.9)
*小数第1位まで
*()内は元のたかさ


 ___ ___ ___

Rの範囲が一部抜けてしまっているのが気になります。
厳密にいけばSがFFE6〜FFFFまでは測定不能(該当するZが無い)で最大が元の1.699倍ともなりますし。

セットの選び方を「表の下から見比べていってはじめてS<Zにならないもの」とすれば、
選ばれないセットが今より1つ上のセットとなり、
2つ上のセットのZ’も29999、Rにして0.9〜1.099となって万事解決するのですが…。

 ___ ___ ___


・検証
30匹のハスボー@エメラルド

46.8
69.4
41.6
48.6
39.9
59.1

37.3
51.9
35.0
56.7
52.5
50.3

51.5
54.1
42.7
50.8
37.9
44.3

49.2
61.4
41.4
49.0
46.3
49.5

54.9
46.9
57.5
51.1
50.3
60.7

*50.3が2匹いるが、個体値・性格値ループしたわけではない(個体値・性格・特性が別であった)

以上のように引用元の処理では起こりえない数値59.1、56.7、57.5が実際に出てきました。
よって実際の処理では「表の下から見比べていってはじめてS<ZにならないX・Y・Z」を使って計算しているものと推測されます。
そのため除外されていた範囲が消えて具体的な範囲は次のようになります。

キノココ、ドジョッチ(40)	: 11.6〜 69.0
コイキング(90)		: 26.1〜155.2
ヘラクロス(150)		: 43.5〜258.7
ハスボー、タネボー(50)	: 14.5〜 86.2
*小数第1位まで
*()内は元のたかさ


余談ですが、バッグがいっぱいだとお礼のアイテムがもらえませんでした。。
どのみちリセット前提の検証ですが。


・検証その2
30匹のコイキング@リーフグリーン


96.9
102.9
68.4
87.3
97.5
54.7

66.8
60.1
72.1
64.5
82.0
92.7

36.0
107.5
97.9
101.9
94.0
86.5

48.7
112.5
75.5
86.2
88.5
95.3

111.5
69.3
77.3
83.6
95.4
88.0


102.9、107.9、101.9があるのでリーフグリーンでもバグではなさそうです。



・検証その3
30匹のドジョッチ@ルビー


40.7
40.1
35.0
41.3
51.8
39.2

53.5
43.8
28.2
36.4
41.2
37.6

39.1
36.5
38.6
44.8
43.5
44.6

24.3
43.0
39.3
46.5
50.7
38.6

54.4
41.4
38.7
36.3
31.7
24.1


46.5があるのでルビーでもバグではなさそうです。
		
※過去に掲載していたテキストファイル
<<戻るHOME