パワポケ10 バトルディッガー編 次の階の地形を決定する乱数メカニズムについて

タイトルのとおりです。

地形生成メカニズム

  • 2章では全70種類の通常マップに0~69の番号が割り振られていて、階層移動時に7-16個の乱数を消費する
  • 途中の6-9番目の値で階層移動イベント判定を行い、消費乱数のうち最後の値でマップが決定される。0-69番のどれになるかはすべて等確率
  • 1階に突入時は1消費
  • 連続した階で同じマップが選ばれるとダブり防止で次の番号のマップに差し替えられる。その場合の追加の乱数消費は無し

 

乱数消費について

階層移動時に消費する乱数の数は下のとおりです。

アイテム \ 階数 30階未満 30階以上
アイテム空きあり 15 14
アイテム満タン 14 13

 

チャン出現について

6個目でアイテム商人判定、0.05以下で出現

7個目で幸せオタマ判定、0.1?以下で出現(30階以降は出現しない?)

トウコのアイテムイベントについて

30階未満なら9個目が多分0.07以下、30階以上なら8個目が0.05か0.07以下?で出現

もらえるアイテムはその次の乱数で回復スプレー、リペア、燃料、弾薬の順。

 

0.65-0.73なら燃料、0.8以上なら弾薬、0.2以下なら回復スプレー

チャンやトウコイベが発生したら地形生成乱数はイベント発生に必要な乱数の直後のものになるので、7-11消費になる

 

レッドローズを連れていると通常の階層移動時(アイテム空き無し)の消費14-15にさらに+1される

2章でボスマップが出るメカニズム

  • 69番目のマップが連続すると70番目として三頭ドラゴン、永遠なる者、皇帝ライムがいるボスマップが出現
  • 通常プレイだとボスマップ出現確率は約0.02%
  • アイテム空きありなら5:21:00、満タンなら14:00:11起動で遺跡突入、そのまま2階移動で2階に出現。最後の脱出階が69番目のマップだった場合は1階に出現

全地形の情報まとめ

マップ番号、乱数範囲(下限)、敵情報、地形情報、次の階への移動の楽さ、宝箱の数の順に記載。

Sはスタート、Gはゴール。

No. 範囲 地形 移動 宝箱
0 0.00000 赤4青4 7×7 1
1 0.01429 赤3黒1 7×7 やや楽 1
2 0.02857 戦車たくさん 7×7 0
3 0.04286 ドラ4黒2 7×7 やや楽 0
4 0.05714 赤2青2黒2戦車2 蛇型 左下S   5
5 0.07143 敵RW 17×17 3
6 0.08571 赤2青2ライム 17×17 3
7 0.10000   串 一本道、下S上G 宝6土砂3,2 6
8 0.11429 ドラゴン4赤玉 右下動く 当てれば楽 3
9 0.12857   串 一本道、下S上G 宝4土砂8 4
10 0.14286 黒4青2ガマ1 回 左下S   2
11 0.15714 サメ2赤2黒2 グッピー3マップ 左上S下G 4
12 0.17143 ライム赤青黒 田 左上S真ん中G 5
13 0.18571 赤巡回、小部屋スイッチガマ 細道マップ 左S下G 楽(水例外) 6
14 0.20000 グッピー、モグラ 9部屋 真ん中部屋池 右下S やや楽 3
15 0.21429   皇帝ライム部屋 左に細道 5
16 0.22857 土砂に敵 7×7   5
17 0.24286 左右に敵待機 上の敵停止 17×17 やや楽 6
18 0.25714 左右に敵待機、上の敵追跡 17×17   6
19 0.27143 赤玉巡回 木、装甲車   0
20 0.28571 中央サメ 赤玉巡回 周り戦車 回 右S 2
21 0.30000 RW黒玉がスイッチ 田 左上S左下G   2
22 0.31429 赤巡回、小部屋スイッチガマ 細道マップ 右下S下G 4
23 0.32857 ライム、赤玉、木 己 左上S   1
24 0.34286 ライム、黒赤 己 右下S   3
25 0.35714 青玉遠い方正解 初期マップ 上S下G   2
26 0.37143 サメ3 中央に木、ドラ 逆U字の大池 2
27 0.38571 グッピー3 グッピー3マップ 下S中央G   2
28 0.40000 ライム黒玉3戦車 ローズ部屋 5
29 0.41429 黒玉ロボ ローズ部屋 3
30 0.42857 ライム1匹で次の穴 王 上S左下G やや楽 4
31 0.44286 ライム 王 上S左下G   4
32 0.45714 敵RW 田 左下S右上G 3
33 0.47143 スイッチ1個 上正解 ロボ部屋   6
34 0.48571   細道マップ 右下S左上G   4
35 0.50000 サメ、黒玉 池3 下S左上G 3
36 0.51429 ライム細道ロボライム 中央廊下右下細道 左上S   3
37 0.52857 ギズモ、木、戦車 ギズモ   4
38 0.54286 中央青玉2、ドラ 中央青玉2 5
39 0.55714 戦車4ガマ4 戦車4ガマ4 5
40 0.57143 黒4ドラ 逆U やや楽 4
41 0.58571 モグラ4、ドラゴン3 階段モグラ 7
42 0.60000   逆凹 中央池 右下S左上G 4
43 0.61429 ドラ3戦車 赤玉小部屋巡回 スイッチ先ドラゴン3 6
44 0.62857   フロートで宝箱2 やや楽 5
45 0.64286 戦車3、戦ドラ追跡 蛇型 4
46 0.65714 グッピー1サメ2 U字、左池 3
47 0.67143 宝8敵4 8
48 0.68571 細道スイッチ2 赤玉中央上下動 中央廊下右下細道 右S   5
49 0.70000 スイッチ1個 下正解 ロボ部屋   6
50 0.71429 スイッチ2個 上正解 ロボ部屋   6
51 0.72857 スイッチ2個 下正解 ロボ部屋   6
52 0.74286 モグラ、ライム 王 左下S左上G   4
53 0.75714 赤玉スイッチ遠い方正解 初期マップ 下S上中央G   4
54 0.77143  赤玉スイッチ近い方正解 初期マップ 下S一番上G   4
55 0.78571   9部屋 真ん中部屋池 左上S右下G   5
56 0.80000 ドラ、黒 田 右下S上G   3
57 0.81429 青玉2 1つは停滞 細道 左上S右G   3
58 0.82857   細道 左上S右下G   4
59 0.84286 サメ 池3 中央S右下G 2
60 0.85714 グッピー1サメ2 逆U字の大池 2
61 0.87143   細道スイッチ 左上S左下G   7
62 0.88571 池中央戦ドラ 周り赤青黒玉 逆凹 中央池 左下S右下G 6
63 0.90000 ドラゴン4赤玉 左上動く 当てれば楽 3
64 0.91429 サメ大量 サトミ水マップ 8
65 0.92857 ドラゴン4赤玉 左下動く 当てれば楽 3
66 0.94286   サトミ炎 水で敵が窮屈 8
67 0.95714 細道モグラゾンビ 9部屋 真ん中部屋池 上S   8
68 0.97143 ドラゴン大量 逆U 8
69 0.98571 ドラ3戦ドラ1モグラ2ガマ2 7×7 8

 

69が連続で選ばれると、70番目の「ボスマップ」が出現。宝箱8個。黒玉を倒さないと次に進めない

三頭ドラゴンは方向転換あり。皇帝ライムと三頭ドラゴンは水を越えられる

有用な乱数とプログラム

楽なマップが連続する乱数まとめ

階数とアイテムの条件、起動時間、楽な階の連続数、マップ番号のまとめ。

計算機実験上のものです。

1階アイテムフル 13:21:09 8階まで安泰 マップ69 2 29 42 26 9 66
30階未満アイテムフル  3:33:19 7連続、n+7階まで安泰 マップ7 62 15 60 41 12 20
30階以上アイテムフル 20:21:17 8連続、n+8階まで安泰 マップ20 69 59 66 60 64 46 2

プログラム

上を求めるのに使ったプログラムや、他の方法への流用案など。

kは階層移動時の乱数消費回数。

easylistは階層移動が非常に楽なマップ番号のリスト。

赤字や紫は目的によってプログラム書き換えの必要がある部分、青字はプログラムの説明や注釈。

 

※このプログラムは途中に余計な階層イベントが入って乱数消費回数がずれることを考慮しておりません。

A = 0x5d588b656c078965
C = 0x0000000000269ec3
M = 2 ** 64

b0=0
b1=0
b2=0
b3=0
b4=0
b5=0
b6=0
b7=0
b8=0
b9=0
b10=0

bk=0

#階層移動時の乱数消費k:アイテム空きあり30階未満 15 空き無し14。アイテム空きあり30階以上 14 空き無し13
k=14

for i in range(0,k):
    bk += A**i % M
Ank=A**k% M
Cnk=(C*bk)% M

A=Ank
C=Cnk


An1=A
Cn1=C

An2=A**2%M
Cn2=Cn1*(A+1)%M

for i in range(0,3):
    b3 += A**i % M
An3=A**3% M
Cn3=(C*b3)% M

for i in range(0,4):
    b4 += A**i % M
An4=A**4% M
Cn4=(C*b4)% M

for i in range(0,5):
    b5 += A**i % M
An5=A**5% M
Cn5=(C*b5)% M

for i in range(0,6):
    b6 += A**i % M
An6=A**6% M
Cn6=(C*b6)% M

for i in range(0,7):
    b7 += A**i % M
An7=A**7% M
Cn7=(C*b7)% M

for i in range(0,8):
    b8 += A**i % M
An8=A**8% M
Cn8=(C*b8)% M

for i in range(0,9):
    b9 += A**i % M
An9=A**9% M
Cn9=(C*b9)% M

for i in range(0,10):
    b10 += A**i % M
An10=A**10% M
Cn10=(C*b10)% M


#階層移動が非常に楽なマップ番号のリスト
easylist=[0,2,7,9,11,12,15,20,26,29,35,38,41,42,46,47,59,60,62,64,66,69]

#1階スタート時以外はX = (X * 0x5d588b656c078965 + 0x0000000000269ec3) % Mに#をつける。1階スタート時は外す
for h in range(0,24): #何時から何時を探索するか
    for m in range(0,60):
        for s in range(7, 20):
            X = h * (2 ** 16) + m * (2 ** 8) + s + 1
            #X = (X * 0x5d588b656c078965 + 0x0000000000269ec3) % M
            if int(70*(X/M)) in easylist and int(70*(((An1 * X + Cn1) % M)/M)) in easylist and int(70*(((An2 * X + Cn2) % M)/M)) in easylist and int(70*(((An3 * X + Cn3) % M)/M)) in easylist and int(70*(((An4 * X + Cn4) % M)/M)) in easylist and int(70*(((An5 * X + Cn5) % M)/M)) in easylist and int(70*(((An6 * X + Cn6) % M)/M)) in easylist and int(70*(((An7 * X + Cn7) % M)/M)) in easylist:
                print(10000 * h + 100 * m + s)
                print(int(70*(X/M)),int(70*(((An1 * X + Cn1) % M)/M)),int(70*(((An2 * X + Cn2) % M)/M)),int(70*(((An3 * X + Cn3) % M)/M)),int(70*(((An4 * X + Cn4) % M)/M)),int(70*(((An5 * X + Cn5) % M)/M)),int(70*(((An6 * X + Cn6) % M)/M)),int(70*(((An7 * X + Cn7) % M)/M)))
                print()

出力結果

起動時間、マップ番号が出力されます。1階スタート時以外は、0は除きます。

3:33:19起動では乱数無消費(戦闘、野球人形関連パーツ入手無し)で移動した時マップ番号が7 62 15 60 41 12 20と連続します。

33319
0 7 62 15 60 41 12 20

102716
0 15 35 20 60 64 64 59

214419
0 29 64 2 41 15 29 12

※途中に余計な階層移動時イベントが挟まるとズレます。

特定のマップを粘りたい場合

紫のif部分を下に差し替え、Nに所望のマップ番号を入れてください。

#次の階で特定マップを粘りたい場合、紫のif部分を下に差し替え。Nはマップ番号に書き換えること。またインデントに注意

#1階の場合
if int(70*(X/M))==N:

#2階以降の場合
if int(70*(((An1 * X + Cn1) % M)/M))==N:

 

コメント

タイトルとURLをコピーしました