タイトルのとおりです。
地形生成メカニズム
- 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:
コメント
「7個目で幸せオタマ判定、0.1?以下で出現」
は再現性が無いような気がします。
23:36:10→7番目0.016433900268786834
に近い条件として、
16:26:9→8番目(1回オート命名で消費)0.016427660024266943
などを試しましたがチャンとは出会えませんでした。
なお、オート命名時の名前と遷移先のマップはそれぞれ乱数観測器とこのページの表と一致していましたので乱数調整のミスはないと思われます。
穴の隣かつ体力満タン、アイテム満タンで試していますがほかに何か条件があるのでしょうか?