すぐ近くにはワープしない、かと言って近くにしかワープできなくてもフリーズしない、というあのワープの仕組みを調べてみました。
まず、以下のトライを最大100回繰り返します。 1回目の乱数の下位4ビットと、2回目の乱数を合わせて0000~0FFFの乱数を作り、これを0980未満になるまで繰り返して0000~097Fの乱数を得ます。 これは座標(0,0)~(37,63)に対応するので、対応する座標を調べます。そこが店でない部屋で、尚かつキャラがいなければそこに決定し、そうでない場合はリトライします。 100回繰り返しても店でない部屋に当たらなかった場合(そうなるのは全部通路のシャッフルダンジョンくらいでしょう)はもう少し条件を緩めて、今度は成功するまで何度でも繰り返します。 やはり店には飛ばないようですが、今度はそこにキャラがいなければ通路にも飛ぶようです(隠し部屋・隠し通路の中にも飛ぶようです。私は経験がないので分かりませんが、その後は一体どうなるのでしょうか)。 こうして決まったワープ先とワープ元の、X方向の距離とY方向の距離の和(なぜか単なる距離ではない)を調べて、それが19以下なら今までの処理をもう一度最初からやり直します。次は18以下なら、その次は17以下なら、……と1ずつ条件を緩めていきます。 ワープするキャラがシレンで、尚かつ町の場合、更にワープ先が屋外でなければ最初からやり直す処理も加わります。 ということで、単にワープするだけなのに無駄にトライ回数が多いワープ処理でした。 通常はあり得ませんが、シレンとその隣の2マス以外が全部壁のフロアだと、5秒程かかって隣のマスにワープします。シレンのマス以外が全部壁の場合は、0以下ならやり直し、の次に255以下ならやり直し、となり無限ループ、すなわちフリーズしてしまいます(Windows版は修正されていましたが)。
by oyasen
| 2010-02-21 12:27
| 改造・解析
|
|
ファン申請 |
||