# DPtポケトレ仕様メモ ### 揺れ位置決定 主人公の位置を中心に、チェビシェフ距離1~4の4周から1箇所ずつ、外周から順に決定される。 一見、変則的に採番されているように見えるが、上一列→下一列→2列目以降の順で左から右に番号が振られている。 #### 1箇所目 `Getrand() / 0x800`を以下と照合。 ``` 00 01 02 03 04 05 06 07 08 18 ** ** ** ** ** ** ** 19 20 ** ** ** ** ** ** ** 21 22 ** ** ** ** ** ** ** 23 24 ** ** ** @@ ** ** ** 25 26 ** ** ** ** ** ** ** 27 28 ** ** ** ** ** ** ** 29 30 ** ** ** ** ** ** ** 31 09 10 11 12 13 14 15 16 17 ``` #### 2箇所目 `Getrand() / 0xAAB`を以下と照合。 ``` 00 01 02 03 04 05 06 14 ** ** ** ** ** 15 16 ** ** ** ** ** 17 18 ** ** @@ ** ** 19 20 ** ** ** ** ** 21 22 ** ** ** ** ** 23 07 08 09 10 11 12 13 ``` #### 3箇所目 `Getrand() / 0x1000`を以下と照合。 ``` 00 01 02 03 04 10 ** ** ** 11 12 ** @@ ** 13 14 ** ** ** 15 05 06 07 08 09 ``` #### 4箇所目 `Getrand() / 0x2000`を以下と照合。 ``` 00 01 02 06 @@ 07 03 04 05 ``` ### 揺れ種類決定 揺れ草のマスに移動する1歩も自然エンカウント判定が行われる。詳細は別のドキュメントにまとめています。https://hackmd.io/@yatsuna827/H1ZOD2QMY 次回の揺れ草の<b>位置</b>は戦闘突入前、個体生成(PID,IVs,持ち物)に続いて行われる。揺れ種類決定は戦闘終了後に行われ、この間、消費が入ることが確認されている。 - DPでは5消費、Ptでは1消費らしい。 - 戦闘中のペラップの鳴き声は戦闘乱数から取得されるようなので、影響はない。 #### 非連鎖時 ```csharp= if(GetRand(100) < thresh || GetRand(100) < 50) return SMALL; else return BIG; ``` threshは揺れ位置の周により異なり、外から順に88,68,48,28。 揺れ位置が草むらでないマスに当たった場合はスキップされる。 #### 連鎖時 事前に決まっていた揺れ位置に対して以下のように判定が行われる。 この時、揺れの大小に連鎖確定揺れと色確定揺れの2種類が加わる。 ```csharp= if (GetRand(100) < thresh) { if (Getrand() < thresh_shiny) return SHINY; else return CONTINUOUS; } if(GetRand(100) < 50) return SMALL; else return BIG; ``` 捕獲ボーナスは閾値が+10される。 thresh_shinyは`0xffff/(8200-200n)+1`らしい... n = 40で打ち止め. 連鎖確定揺れ以外に入った場合でも、同じスロットであれば連鎖が続く可能性があるらしいが、よくわからない。。。 ### その他 - 揺れ草に入った場合はプレッシャー無効らしい。消費すら入らない。