Skip to content

Instantly share code, notes, and snippets.

@oupo
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oupo/73428bd6f71316e1e15b to your computer and use it in GitHub Desktop.
Save oupo/73428bd6f71316e1e15b to your computer and use it in GitHub Desktop.

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から出現するファンのリストを作成するツール

くじ引きで特定の景品が当たる乱数調整のためのプラスルツールプラグイン

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment