Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
乱数調整概論
Blastoise_X
本スライドで使用しているフォント
・M+1p
・Consolas
・Segoe UI
・Times New Roman
・Arial Unicode MS
Ⅰ.擬似乱数の種類と性質
擬似乱数とは
乱数列とは
⇒ランダムな数の並び (例:サイコロの出目)
サイコロの目は完全にランダムだけど…
毎回サイコロを振るのは時間がかかる!
⇒計算で乱数(に見えるもの)を作ろう!
この擬似乱数を出力する計算機が擬似乱数生
成器(Pseu...
擬似乱数生成器
乱数の「種」
• 乱数のもとになる
• 実際は何らかの数値
PRNG
• 種に処理を行う
• 足したり掛けたり
擬似乱数
• 出力されたもの
• 何が出力されるか
は一見ランダム
?
→PRNGにはどんな種類があるの?
擬似乱数生成器
第3~5世代のポケモンのゲーム内で使われて
いる擬似乱数生成器は主に以下の2つ
・線形合同法(Linear congruential generator; LCG)
・メルセンヌ・ツイスタ(Mersenne twister; M...
線形合同法(LCG)
線形合同法(LCG)
線形合同法(LCG)
ここで得られた値を並べたものが擬似乱数列
になります
擬似乱数列: 6,4,5,1,3,2,6,4,5,1,3,2,6…
いま、6,4,5,1,3,2という6つの数字の並びが繰
り返されているのがわかります
⇒つまり、この...
6
4
5
1
3
2
線形合同法(LCG)
周期Nを持っている=円周上にN個の点が
あり、ループしている状態
この考えは周期が6でも100でも43億
でも常に成り立つので非常に重要!
線形合同法(LCG)
ポケモンでよく使われているLCG
Rn+1 = Rn * 0x41C64E6D + 0x6073
Rn+1 = Rn * 0x5D588B656C078965 + 0x269EC3
9FF1E41D
98ED56CC
5B...
メルセンヌ・ツイスタ(MT)
 とっても優秀なPRNG
1. 周期が長いヤバい
32bitLCG : 232 (10ケタ)
64bitLCG : 264 (20ケタ)
MT : 219937-1 (6002ケタ)
2. ランダム過ぎヤバい
6...
メルセンヌ・ツイスタ(MT)
3つのステップに分けられる
 初期化
seedを受け取って第0テーブルを作成
 テーブルの更新
n-1番テーブルを使ってn番テーブルを作成
 調律
n番テーブルのm番目の値を“調律“して
擬似乱数を出力
メルセンヌ・ツイスタ(MT)
 初期化
void initialize(unsigned long seed)
{
t[0] = seed;
for(mti = 1; mti<N; mti++) // Nは624
{
t[mti] = ((t...
メルセンヌ・ツイスタ(MT)
 初期化
t[0] t[1] t[2] t[623]
第0テーブル
t[0]は初期seed
t[i] = ((t[i - 1]>>30) ^ t[i - 1]) * 0x6c078965 + i
に従って次のもの...
メルセンヌ・ツイスタ(MT)
 初期化
 テーブルの更新
for(mti = 0; mti < 624; mti++){
a = mti % 624;
b = (mti + 1) % 624;
c = (mti + 397) % 624;
...
メルセンヌ・ツイスタ(MT)
 テーブルの更新
t[0] t[1] t[2] t[623]
第0テーブル
t[0] t[1] t[2]
第1テーブル
第0テーブルのt[0],t[1],t[397]から
第1テーブルのt[0]が計算される
メルセンヌ・ツイスタ(MT)
 初期化
 テーブルの更新
 調律
iv = (t[a]/0x800) ^ t[a];
iv ^= (iv*0x80) & 0x9d2c5680;
iv ^= (iv*0x8000) & 0xefc60000...
メルセンヌ・ツイスタ(MT)
 調律
t[0] t[1] t[2]
第1テーブル
調律
これらがそれぞれ1つ目,2つ目の乱数として使われる
実際に乱数として使われるのは第1テーブルからなので、
第0テーブルは第1テーブルの計算にしか使われない
擬似乱数の種類と性質
ここまでのまとめ
 ポケモンで使われてる擬似乱数は
主にLCGとMTの2種類
 擬似乱数は周期を持つ
Ⅱ.ゲーム内での擬似乱数
の利用方法
ゲーム内での擬似乱数の利用方法
ゲーム内でランダムな要素を引き起こすのに
擬似乱数が使われる
例:
草むらを歩いたときにエンカウントするか
出現するポケモンの種類はなにか
出現したポケモンの個体値はどうする…etc
他にも、さまざまな要素が擬似...
擬似乱数の使い方
どれぐらいの高さ
で鳴こうかな・・・?
?
乱数1個くれ(需要)
乱数1個やる(供給)
PRNG
結
果
ん゛あ゛あ゛あ゛あ゛
あ゛ぁ゛ぁ゛あ゛
あ゛!゛!゛!゛!゛
擬似乱数は必要に応じて使用されている!
擬似乱数の使い方
実際に野生ポケモンとエンカウントしたとき
擬似乱数の使い方
?
種類決めるから乱数くれ
レベル決めるから乱数くれ
性格決めるから乱数くれ
その他諸々の乱数くれ
1個ずつ言って!
同じタイミングで行われている処理でも
実は決定される順番が決まっている!!
一連の処理について、各処理が行わ...
スキーム (BW釣りでの一例)
特性判定
• フィールド上で効果がある特性(シンクロとかその他諸々)
が発動するかどうかの判定を行う
釣り判定
• 釣りが成功するかどうかの判定を行う
スロット
• 現在のフィールドで出現しうるポケモンの中から、...
スキーム
特性判定
釣り判定
スロット
?
乱数くれ
乱数やる
Ⅲ.個体生成の仕組みと
調整方法
個体生成の仕組み
I. 第4世代
i. 徘徊系
ii. 固定シンボル・野生
iii. 孵化
II. 第3世代
i. 固定シンボル
ii. 野生
III. 第5世代
i. 固定シンボル・野生
ii. 孵化
iii. その他
個体生成の仕組み
I. i. 第4世代徘徊系
スキームは
定数消費→性格値下位決定→性格値上位決定
→個体値(H,A,B)決定→個体値(S,C,D)決定
PID mod 25 の値で性格を決定
r(n) 7CF6 LID
PID
r(n+1) ...
個体生成の仕組み
I. ii. 第4世代固定シンボル・野生
諸処理(スロット決定,レベル決定,etc)
→性格決定→性格値探索→個体値決定
r(n) 乱数値 仮PID mod 25 性格
r(1) 8599
AD9E8599 7 のんき
r(2...
調整方法
1.目標となる個体値・性格を実現できる擬似
乱数の並びを検索する
r(n) 7CF6 LID
PID
r(n+1) C5EE HID
r(n+2) FDDF HAB
r(n+3) 7FFF SCD
おるでw
初期seed候補
2.乱数...
調整方法
3.初期seed候補の1つで起動する
r(n) 7CF6 LID
PID
r(n+1) C5EE HID
r(n+2) FDDF HAB
r(n+3) 7FFF SCD
おったわw
初期seed候補
4.目標の並びを達成できるよう
に...
甘い香りの消費…?
第4世代の乱数調整手順を書いたブログ記事
を見てみるとよく出てくる
甘い香りで1消費 とか
徘徊復活で1消費 とか
こんなものありません
スキームをもとに乱数リストを手作業で追っ
てみれば、どの乱数から個体生成に入ればい
い...
個体生成の仕組み
I. iii. 第4世代孵化
2つのステップに分かれる
①性格値生成……タマゴ生成時
②個体値生成……タマゴ受取時
①性格値生成
LCG1つを使用してタマゴ生成判定
→MT1つを使用して性格値決定
調整手順は、目標性格値を実現...
個体生成の仕組み
②個体値生成
基礎個体値(H,A,B)→基礎個体値(S,C,D)
→遺伝箇所→遺伝親
調整手順については、原理的には捕獲と
同じ
第4世代の各種調整については外野席さんの
「4Gen調整基礎.xls」の精読を推奨
個体生成の仕組み
II. i. 第3世代固定シンボル
基本スキームは第4世代徘徊系と一緒!
性格値下位決定→性格値上位決定
→個体値(H,A,B)決定→個体値(S,C,D)決定
調整手順に行く前に…
第3世代には特有の事情の説明を…
第3世代の乱数事情
第3世代のLCGはゲーム起動時からの時間経過
とともに常に更新されている!
実際のゲーム内では1秒間に約60回程度の
LCGの更新が起こっている
⇒目的となる乱数列の実現は「消費」というよ
り「待機」によって達成される!
個体生成の仕組み
II. ii. 第3世代野生
基本スキームは第4世代野生と一緒!
諸処理(スロット決定,レベル決定,etc)
→性格決定→性格値探索→個体値決定
ところが!
LID→HID→H,A,B→S,C,Dの途中が1つ飛ぶこ
とがある!...
ここだけの話 ~メソッドズレ~
スキームは性格値探索→個体値決定
諸処理
r(0) 性格決定
r(1) 仮LID
r(2) 仮HID
・ ・
・ ・
・ ・
・ ・
r(2n+1) LID
r(2n+2) HID
r(2n+3) 個体値
r(2...
個体生成の仕組み
III. i. 第5世代固定シンボル・野生
第5世代の生成は基本的に
個体値⇒MT それ以外⇒LCG
LCGで色々決めた後、個体値だけMTで決めることが多い
スキーム
固定 シンクロ→性格値→性格
野生 シンクロ→スロット→ス...
調整方法
調整の原理は各世代と変わらないが、個体検索
段階が少し異なる
初期seed決定に一方向関数を使っていることに
より、目標個体→初期seed候補の逆算ができな
いので、
初期seedを総当りで計算→目標個体を実現でき
る初期seedを選...
個体生成の仕組み
III. ii. 第5世代孵化
BWとBW2で事情が異なる
BW:受け取り時に性格値・個体値・遺伝箇
所がすべて決定される
BW2:前のタマゴを受け取りもしくは破棄し
た時点で次のタマゴの性格・特性・遺伝箇
所・個体値を決める...
個体生成の仕組み
 BW2孵化の利点って…?
孵化の事象を決める擬似乱数列がMTをもと
にして作られている
⇒NPCなどが消費してしまう通常のLCGとは
独立しているので、人為的なミスがない限り
失敗する可能性が極端に低い
個体生成の仕組み
III. iii. その他
1)徘徊
個体値がHABDSCの順で決定
2)配達員
第5世代では珍しく個体値がLCGで決定
調整に失敗したら…
生成スキームをもとにして乱数調整を行った
のに失敗してしまうことは誰にでもある
失敗したときに重要なことは
1. 実際に出た結果を正確に把握する
2. 結果をもとに、修正すべきズレを補正する
3. なぜズレが生じたのか、その...
Ⅳ.個体生成以外の乱数調整
個体生成以外の乱数調整
個体生成以外の乱数調整の例
 ID調整
 隠し穴
 自販機 …etc
基礎とは言えないものが多い
でも、乱数調整の基礎さえわかっていれば
全て理解できる!
必要なのはそこら辺のブログに書いてある
“やり方” ではな...
情報の探し方
1. 信頼できる人が書いてるものを探す
2. 信頼できる人に聞く
3. 信頼できる人に調べてもらう
4. 自分で調べる
Ⅴ.未開の乱数の調査
※調査を行う前に
ここから先は乱数調整に対する深い理解が必
要になります
特殊な訓練を受けていない人が行うと動悸・
息切れ・めまいなどの諸症状にはじまり、最
悪の場合死に至ることもあります
実際に、「未開の乱数を調査してくる」とだけ
言い残して...
各世代の特徴
PRNGに0-99の評価を要求する場合
第3世代:乱数 mod 100
DPt:乱数 / 656
HGSS:乱数 mod 100
第5世代:乱数 * 100 の上2ケタ
となっていることが多い
調査の基本
調査対象の事象を1回発生させて、
どの乱数が
どれだけ
LCGの進み方を調べるには
HGSS⇒ウツギ電話
BW⇒レポート針
次に、調査数を増やしてスキームを予想しな
がら使われた乱数と結果を見比べる
消費されたかを確認する
おまけ:第7世代の乱数事情
第7世代の乱数事情
有志による血のにじむような調査の結果,第
7世代での乱数調整が可能になりました
せっかくなので第7世代の乱数調整を少しだ
け解説しようと思います
第7世代の乱数事情
 孵化乱数
・TinyMTという最近のMTが使われている
卵の受け取りまたは拒否によって乱数が進む
が,乱数計算のもととなる値(seed)について
は更新されるのみで初期化されない
⇒一度seedを求めてしまえば未来永劫産...
第7世代の乱数事情
 固定乱数
・SFMTという新しいMTが使われている
SFMTはゲームを起動したときに,32bitの初
期seedによって初期化されている
⇒取りうる初期seedはたった43億通りしかな
いので,総当たり計算で現在の乱数列...
終わりに
乱数調整の遊び方はいくらでもあります
先人の知恵を借りるもよし、
自分で調べるもよし
乱数調整の仕組みを知ることの重要性、
基礎の応用で可能性が広がること、
乱数調整の魅力、楽しさが少しでも伝われば
幸いです
第1回 乱数調整概論
おわり
Upcoming SlideShare
Loading in …5
×

乱数調整概論

4,002 views

Published on

乱数調整とは

Published in: Technology
  • Be the first to comment

乱数調整概論

  1. 1. 乱数調整概論 Blastoise_X
  2. 2. 本スライドで使用しているフォント ・M+1p ・Consolas ・Segoe UI ・Times New Roman ・Arial Unicode MS
  3. 3. Ⅰ.擬似乱数の種類と性質
  4. 4. 擬似乱数とは 乱数列とは ⇒ランダムな数の並び (例:サイコロの出目) サイコロの目は完全にランダムだけど… 毎回サイコロを振るのは時間がかかる! ⇒計算で乱数(に見えるもの)を作ろう! この擬似乱数を出力する計算機が擬似乱数生 成器(Pseudo random number generator; PRNG) と呼ばれます。 →PRNGってどんなもの? 乱数 擬似乱数
  5. 5. 擬似乱数生成器 乱数の「種」 • 乱数のもとになる • 実際は何らかの数値 PRNG • 種に処理を行う • 足したり掛けたり 擬似乱数 • 出力されたもの • 何が出力されるか は一見ランダム ? →PRNGにはどんな種類があるの?
  6. 6. 擬似乱数生成器 第3~5世代のポケモンのゲーム内で使われて いる擬似乱数生成器は主に以下の2つ ・線形合同法(Linear congruential generator; LCG) ・メルセンヌ・ツイスタ(Mersenne twister; MT) それぞれが使われている項目 LCG:たくさん MT:第4世代のタマゴ性格値、第5世代の ほとんどの個体値、その他諸々 ⇒ポケモンほとんどLCG!!!
  7. 7. 線形合同法(LCG)
  8. 8. 線形合同法(LCG)
  9. 9. 線形合同法(LCG) ここで得られた値を並べたものが擬似乱数列 になります 擬似乱数列: 6,4,5,1,3,2,6,4,5,1,3,2,6… いま、6,4,5,1,3,2という6つの数字の並びが繰 り返されているのがわかります ⇒つまり、この擬似乱数列は周期性を持ち、 その周期は6である! 同じものが繰り返されることを「ループす る」って言いますよね そこで、このLCGによる擬似乱数列は次のよ うに表せます
  10. 10. 6 4 5 1 3 2 線形合同法(LCG) 周期Nを持っている=円周上にN個の点が あり、ループしている状態 この考えは周期が6でも100でも43億 でも常に成り立つので非常に重要!
  11. 11. 線形合同法(LCG) ポケモンでよく使われているLCG Rn+1 = Rn * 0x41C64E6D + 0x6073 Rn+1 = Rn * 0x5D588B656C078965 + 0x269EC3 9FF1E41D 98ED56CC 5B487D4F EE25CD16 1F9966D1 C84AD570 99856123 0575665A 1BC860C5 BF2B9A54
  12. 12. メルセンヌ・ツイスタ(MT)  とっても優秀なPRNG 1. 周期が長いヤバい 32bitLCG : 232 (10ケタ) 64bitLCG : 264 (20ケタ) MT : 219937-1 (6002ケタ) 2. ランダム過ぎヤバい 623次元超立方体に均等分布 ⇒前後の乱数との相関がほぼない 3. 逆算できないヤバい LCGと違って逆算が困難
  13. 13. メルセンヌ・ツイスタ(MT) 3つのステップに分けられる  初期化 seedを受け取って第0テーブルを作成  テーブルの更新 n-1番テーブルを使ってn番テーブルを作成  調律 n番テーブルのm番目の値を“調律“して 擬似乱数を出力
  14. 14. メルセンヌ・ツイスタ(MT)  初期化 void initialize(unsigned long seed) { t[0] = seed; for(mti = 1; mti<N; mti++) // Nは624 { t[mti] = ((t[mti - 1]>>30) ^ t[mti - 1]) * 0x6c078965 + mti ; } }  テーブルの更新  調律
  15. 15. メルセンヌ・ツイスタ(MT)  初期化 t[0] t[1] t[2] t[623] 第0テーブル t[0]は初期seed t[i] = ((t[i - 1]>>30) ^ t[i - 1]) * 0x6c078965 + i に従って次のものを順次計算していく。 33bit以上は切り捨て、常に下位32bitを使う。 第1テーブルの計算を行うためだけに使われる。
  16. 16. メルセンヌ・ツイスタ(MT)  初期化  テーブルの更新 for(mti = 0; mti < 624; mti++){ a = mti % 624; b = (mti + 1) % 624; c = (mti + 397) % 624; k[0] = (t[a] & 0x80000000) | (t[b] & 0x7fffffff); k[1] = (k[0] / 2) ^ t[c]; if(k[0] % 2 == 1){ t[a] = k[1] ^ 0x9908b0df; } else{ t[a] = k[1]; } }  調律
  17. 17. メルセンヌ・ツイスタ(MT)  テーブルの更新 t[0] t[1] t[2] t[623] 第0テーブル t[0] t[1] t[2] 第1テーブル 第0テーブルのt[0],t[1],t[397]から 第1テーブルのt[0]が計算される
  18. 18. メルセンヌ・ツイスタ(MT)  初期化  テーブルの更新  調律 iv = (t[a]/0x800) ^ t[a]; iv ^= (iv*0x80) & 0x9d2c5680; iv ^= (iv*0x8000) & 0xefc60000; iv ^= iv / 0x40000;
  19. 19. メルセンヌ・ツイスタ(MT)  調律 t[0] t[1] t[2] 第1テーブル 調律 これらがそれぞれ1つ目,2つ目の乱数として使われる 実際に乱数として使われるのは第1テーブルからなので、 第0テーブルは第1テーブルの計算にしか使われない
  20. 20. 擬似乱数の種類と性質 ここまでのまとめ  ポケモンで使われてる擬似乱数は 主にLCGとMTの2種類  擬似乱数は周期を持つ
  21. 21. Ⅱ.ゲーム内での擬似乱数 の利用方法
  22. 22. ゲーム内での擬似乱数の利用方法 ゲーム内でランダムな要素を引き起こすのに 擬似乱数が使われる 例: 草むらを歩いたときにエンカウントするか 出現するポケモンの種類はなにか 出現したポケモンの個体値はどうする…etc 他にも、さまざまな要素が擬似乱数を使って 決定されている! ⇒実際にどうやって決められているの?
  23. 23. 擬似乱数の使い方 どれぐらいの高さ で鳴こうかな・・・? ? 乱数1個くれ(需要) 乱数1個やる(供給) PRNG 結 果 ん゛あ゛あ゛あ゛あ゛ あ゛ぁ゛ぁ゛あ゛ あ゛!゛!゛!゛!゛ 擬似乱数は必要に応じて使用されている!
  24. 24. 擬似乱数の使い方 実際に野生ポケモンとエンカウントしたとき
  25. 25. 擬似乱数の使い方 ? 種類決めるから乱数くれ レベル決めるから乱数くれ 性格決めるから乱数くれ その他諸々の乱数くれ 1個ずつ言って! 同じタイミングで行われている処理でも 実は決定される順番が決まっている!! 一連の処理について、各処理が行われる 順番をあらわしたものがスキーム!
  26. 26. スキーム (BW釣りでの一例) 特性判定 • フィールド上で効果がある特性(シンクロとかその他諸々) が発動するかどうかの判定を行う 釣り判定 • 釣りが成功するかどうかの判定を行う スロット • 現在のフィールドで出現しうるポケモンの中から、どの種 類が出るかの判定を行う レベル • 上で決定されたスロットごとに割り当てられたレベルの範 囲をもとに、何レベルのポケモンが出現するかを決定する 性格値 • 出現するポケモンの性格値を決定する 性格 • 出現するポケモンの性格を決定する
  27. 27. スキーム 特性判定 釣り判定 スロット ? 乱数くれ 乱数やる
  28. 28. Ⅲ.個体生成の仕組みと 調整方法
  29. 29. 個体生成の仕組み I. 第4世代 i. 徘徊系 ii. 固定シンボル・野生 iii. 孵化 II. 第3世代 i. 固定シンボル ii. 野生 III. 第5世代 i. 固定シンボル・野生 ii. 孵化 iii. その他
  30. 30. 個体生成の仕組み I. i. 第4世代徘徊系 スキームは 定数消費→性格値下位決定→性格値上位決定 →個体値(H,A,B)決定→個体値(S,C,D)決定 PID mod 25 の値で性格を決定 r(n) 7CF6 LID PID r(n+1) C5EE HID r(n+2) FDDF HAB r(n+3) 7FFF SCD 基本スキーム LID HID HAB SCD
  31. 31. 個体生成の仕組み I. ii. 第4世代固定シンボル・野生 諸処理(スロット決定,レベル決定,etc) →性格決定→性格値探索→個体値決定 r(n) 乱数値 仮PID mod 25 性格 r(1) 8599 AD9E8599 7 のんき r(2) AD9E r(3) FA53 9A12FA53 20 おだやか r(4) 9A12 r(5) C07F 85E7C07F 23 しんちょう r(6) 85E7 r(7) DFBF 4CA6DFBF 21 おとなしい r(8) 4CA6 r(9) 9C07 2ED69C07 8 わんぱく r(10) 2ED6 r(11) 7CF6 C5EE7CF6 10 おくびょう r(12) C5EE 例:r(0)でシンクロ可判定を受けて 性格が「おくびょう」に決定された
  32. 32. 調整方法 1.目標となる個体値・性格を実現できる擬似 乱数の並びを検索する r(n) 7CF6 LID PID r(n+1) C5EE HID r(n+2) FDDF HAB r(n+3) 7FFF SCD おるでw 初期seed候補 2.乱数の並びから遡ったところ にある初期seed候補を見つける 1.の作業で見つかった並び
  33. 33. 調整方法 3.初期seed候補の1つで起動する r(n) 7CF6 LID PID r(n+1) C5EE HID r(n+2) FDDF HAB r(n+3) 7FFF SCD おったわw 初期seed候補 4.目標の並びを達成できるよう に乱数を消費する 1.の作業で見つかった並び
  34. 34. 甘い香りの消費…? 第4世代の乱数調整手順を書いたブログ記事 を見てみるとよく出てくる 甘い香りで1消費 とか 徘徊復活で1消費 とか こんなものありません スキームをもとに乱数リストを手作業で追っ てみれば、どの乱数から個体生成に入ればい いかが理解しやすいと思います
  35. 35. 個体生成の仕組み I. iii. 第4世代孵化 2つのステップに分かれる ①性格値生成……タマゴ生成時 ②個体値生成……タマゴ受取時 ①性格値生成 LCG1つを使用してタマゴ生成判定 →MT1つを使用して性格値決定 調整手順は、目標性格値を実現できるよ うにMTを調整した後、タマゴ生成判定が 受けられるようLCGを調整
  36. 36. 個体生成の仕組み ②個体値生成 基礎個体値(H,A,B)→基礎個体値(S,C,D) →遺伝箇所→遺伝親 調整手順については、原理的には捕獲と 同じ 第4世代の各種調整については外野席さんの 「4Gen調整基礎.xls」の精読を推奨
  37. 37. 個体生成の仕組み II. i. 第3世代固定シンボル 基本スキームは第4世代徘徊系と一緒! 性格値下位決定→性格値上位決定 →個体値(H,A,B)決定→個体値(S,C,D)決定 調整手順に行く前に… 第3世代には特有の事情の説明を…
  38. 38. 第3世代の乱数事情 第3世代のLCGはゲーム起動時からの時間経過 とともに常に更新されている! 実際のゲーム内では1秒間に約60回程度の LCGの更新が起こっている ⇒目的となる乱数列の実現は「消費」というよ り「待機」によって達成される!
  39. 39. 個体生成の仕組み II. ii. 第3世代野生 基本スキームは第4世代野生と一緒! 諸処理(スロット決定,レベル決定,etc) →性格決定→性格値探索→個体値決定 ところが! LID→HID→H,A,B→S,C,Dの途中が1つ飛ぶこ とがある! 気を付けよう!
  40. 40. ここだけの話 ~メソッドズレ~ スキームは性格値探索→個体値決定 諸処理 r(0) 性格決定 r(1) 仮LID r(2) 仮HID ・ ・ ・ ・ ・ ・ ・ ・ r(2n+1) LID r(2n+2) HID r(2n+3) 個体値 r(2n+4) 個体値 性格値なかなか決まらないねー(*´・ω・)(・ω・`*)ネー けっこう時間かかるねー(*´・ω・)(・ω・`*)ネー VBlank 自分割り込みいいッスかww LID HID ここが長くなると時間がかかる! 個体値を決定する処理の呼び出しは時間が かかるみたいで呼び出してるうちに乱数が 1つ余分に進むことがある! ⇒メソッド2,4の出現!
  41. 41. 個体生成の仕組み III. i. 第5世代固定シンボル・野生 第5世代の生成は基本的に 個体値⇒MT それ以外⇒LCG LCGで色々決めた後、個体値だけMTで決めることが多い スキーム 固定 シンクロ→性格値→性格 野生 シンクロ→スロット→スキップ →性格値→性格 ※性格値と性格に関連なし!
  42. 42. 調整方法 調整の原理は各世代と変わらないが、個体検索 段階が少し異なる 初期seed決定に一方向関数を使っていることに より、目標個体→初期seed候補の逆算ができな いので、 初期seedを総当りで計算→目標個体を実現でき る初期seedを選択する、という手順になる
  43. 43. 個体生成の仕組み III. ii. 第5世代孵化 BWとBW2で事情が異なる BW:受け取り時に性格値・個体値・遺伝箇 所がすべて決定される BW2:前のタマゴを受け取りもしくは破棄し た時点で次のタマゴの性格・特性・遺伝箇 所・個体値を決める擬似乱数列の初期値が決 定される
  44. 44. 個体生成の仕組み  BW2孵化の利点って…? 孵化の事象を決める擬似乱数列がMTをもと にして作られている ⇒NPCなどが消費してしまう通常のLCGとは 独立しているので、人為的なミスがない限り 失敗する可能性が極端に低い
  45. 45. 個体生成の仕組み III. iii. その他 1)徘徊 個体値がHABDSCの順で決定 2)配達員 第5世代では珍しく個体値がLCGで決定
  46. 46. 調整に失敗したら… 生成スキームをもとにして乱数調整を行った のに失敗してしまうことは誰にでもある 失敗したときに重要なことは 1. 実際に出た結果を正確に把握する 2. 結果をもとに、修正すべきズレを補正する 3. なぜズレが生じたのか、その原因を考えて 次の失敗が起こらないようにする
  47. 47. Ⅳ.個体生成以外の乱数調整
  48. 48. 個体生成以外の乱数調整 個体生成以外の乱数調整の例  ID調整  隠し穴  自販機 …etc 基礎とは言えないものが多い でも、乱数調整の基礎さえわかっていれば 全て理解できる! 必要なのはそこら辺のブログに書いてある “やり方” ではなく、 情報元が記載している “原理” !
  49. 49. 情報の探し方 1. 信頼できる人が書いてるものを探す 2. 信頼できる人に聞く 3. 信頼できる人に調べてもらう 4. 自分で調べる
  50. 50. Ⅴ.未開の乱数の調査
  51. 51. ※調査を行う前に ここから先は乱数調整に対する深い理解が必 要になります 特殊な訓練を受けていない人が行うと動悸・ 息切れ・めまいなどの諸症状にはじまり、最 悪の場合死に至ることもあります 実際に、「未開の乱数を調査してくる」とだけ 言い残して行方不明になった友人もいます 乱数調整は用法・用量をまもって正しく遊ん でください
  52. 52. 各世代の特徴 PRNGに0-99の評価を要求する場合 第3世代:乱数 mod 100 DPt:乱数 / 656 HGSS:乱数 mod 100 第5世代:乱数 * 100 の上2ケタ となっていることが多い
  53. 53. 調査の基本 調査対象の事象を1回発生させて、 どの乱数が どれだけ LCGの進み方を調べるには HGSS⇒ウツギ電話 BW⇒レポート針 次に、調査数を増やしてスキームを予想しな がら使われた乱数と結果を見比べる 消費されたかを確認する
  54. 54. おまけ:第7世代の乱数事情
  55. 55. 第7世代の乱数事情 有志による血のにじむような調査の結果,第 7世代での乱数調整が可能になりました せっかくなので第7世代の乱数調整を少しだ け解説しようと思います
  56. 56. 第7世代の乱数事情  孵化乱数 ・TinyMTという最近のMTが使われている 卵の受け取りまたは拒否によって乱数が進む が,乱数計算のもととなる値(seed)について は更新されるのみで初期化されない ⇒一度seedを求めてしまえば未来永劫産まれ てくるタマゴの個体がわかるようになる!
  57. 57. 第7世代の乱数事情  固定乱数 ・SFMTという新しいMTが使われている SFMTはゲームを起動したときに,32bitの初 期seedによって初期化されている ⇒取りうる初期seedはたった43億通りしかな いので,総当たり計算で現在の乱数列のもと となったseedを割り出すことができる!
  58. 58. 終わりに 乱数調整の遊び方はいくらでもあります 先人の知恵を借りるもよし、 自分で調べるもよし 乱数調整の仕組みを知ることの重要性、 基礎の応用で可能性が広がること、 乱数調整の魅力、楽しさが少しでも伝われば 幸いです
  59. 59. 第1回 乱数調整概論 おわり

×