B2W2ジョインアベニューのくじ引き屋
実践的内容:
定義
次のような定義をしておく。
S_s[0] = s
S_s[n+1] = ((S_s[n] * 0x5d588b656c078965 + 0x269ec3) mod 2^64) (n = 0, 1, 2, ...)
S_s[n, max] = ((S_s[n] >> 32) * max) >> 32
つまり通常の64bitのLCGと同じ数列で初項sを添え字として表している。
くじを引いたときの景品の決まり方
お店ごとに32bitの値sが記録されている。
sの値から次の式で0以上0xfffe以下の値rを得る。
r = S_s[6, 0xffff]
6は固定ではないかも。
rの値と以下の表から景品のアイテムが決定。 たとえばランク1でrが0以上3以下ならマスターボール、rが4以上103以下ならふしぎなアメ...というように。
アイテム | ランク1 | ランク2 | ランク3 | ランク4 | ランク5 | ランク6 | ランク7 | ランク8 | ランク9 | ランク10 |
---|---|---|---|---|---|---|---|---|---|---|
マスターボール | 4 | 8 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 140 |
ふしぎなアメ | 100 | 200 | 400 | 600 | 800 | 1000 | 1500 | 2000 | 2500 | 3000 |
ポイントマックス | 800 | 900 | 1000 | 1100 | 1200 | 1600 | 2000 | 2400 | 2800 | 3200 |
ポイントアップ | 1200 | 1400 | 1600 | 1800 | 2200 | 2600 | 2800 | 3000 | 3200 | 3400 |
げんきのかたまり | 1400 | 1600 | 1800 | 2000 | 2200 | 2400 | 2600 | 2800 | 3000 | 3600 |
ピーピーマックス | 1600 | 1800 | 2000 | 2200 | 2400 | 2600 | 2800 | 3000 | 3200 | 3800 |
ピーピーリカバー | 2600 | 2800 | 3000 | 3200 | 3400 | 3600 | 3800 | 4000 | 4200 | 4400 |
ハイパーボール | 4000 | 5000 | 6000 | 7000 | 8000 | 9000 | 10000 | 11000 | 12000 | 13000 |
なんでもなおし | 6000 | 8000 | 10000 | 12000 | 14000 | 16000 | 18000 | 20000 | 22000 | 24000 |
きのみジュース | 47831 | 43827 | 39725 | 35615 | 31295 | 26675 | 21955 | 17235 | 12515 | 6995 |
sの値の更新
日付が変わったときに次の計算でsが更新される。
第4世代の日替わりseedとは違って、経過した日数分進むのではなく、何日進もうが1度には1回しか進まない。
s = ((s * 0x5d583d6d6c078979 + 0x26a693) mod (2^64)) >> 32
この式は通常のLCGによく似ているが、定数の値が微妙に違うことに注意。また最後にビットシフトがあるのでLCGですらない。
ただしsが0であった場合は性格値乱数を使って次のsが決められる。
sの初期値
ジョインアベニューのマップに入った瞬間、新しく生成されるファン(詳細後述)それぞれについてsの値が性格値乱数で決まる。このファンのsの値が招待したとき店のsの値になる。
マップに入った瞬間の性格値乱数の消費については、このsの決定以外にあることは確認されていない。
ただしストーリーの途中でジョインアベニューに最初に訪れたときのハジメのsについては、秘書の「さっそく「招待する」をしてみましょう」というセリフの直後に決定。
また、すれ違いによる通行人は、すれ違ったときに性格値乱数で決まる。 調整する際は、Cギアを起動した直後に1消費があること、時間経過で自動的に消費されることに注意。
ファンの決定
ファンの決定は各店やファンのsとは別の日替わりseed(ゲーム中に1個で32bit)で決まる。 これの初期値は冒険を始めたときの性格値乱数列のチラチーノの性格値の2つ前が使われる。
この日替わりseedの更新は上述の各店ごとのsの更新と同じ。
現在の日替わりseedをdailyseedと書いておく。
S_dailyseed[22, 100]
の値がある値(アベニューのランクによって決まる?)より小さければジムリーダーが来る。
S_dailyseed[23, 8]
により来るジムリーダーが決まる。
以下iを0から初めて1ずつ増やしていって
S_dailyseed[23+i, 48]
で来るファンを決める。このときスキップされるファンでも、そのファンのsの決定に性格値乱数が消費される。 スキップされるファンは、すでにお店を開いているもの、すでに客であるもの、今回のファン決定処理ですでに採用したものである。
S_dailyseed[23]がジムリーダーの決定と1人目のファンの決定に重なって使用されているではないかと思われるかもしれないがその通りである。
ファンの決定とそれぞれのsの決定は同時に行われる。
ファンの決定タイミング
日替わり処理があった後に以下の操作をしたときに新しいファンは生成される。生成されたことはタウンマップで客の人数が増えていることで確認できる。生成されるというのはそのファンがアベニューマップ内に入ってくる瞬間のことをさしているのではない。
- ジョインアベニューのマップに入る
- ポケモンステータス画面やアイテム画面、ライブキャスターなどを閉じる
- ジョインアベニューのマップ内でセーブデータをロードする
ただしくじを引いたときや客を案内してもファンの生成は起こらない。
ツール類
出現したファン2日分から現在の日替わりseedを特定するツール
現在の日替わりseedから出現するファンのリストを作成するツール
くじ引きで特定の景品が当たる乱数調整のためのプラスルツールプラグイン