FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

乱数

ウディタ使いの方々にとっては
かゆいところに手が届きそうで届かないであろう、
ウディタ関連のお話。

もともとこの手の話を上手いことまとめるのは苦手ですし、
今日は長々書いているので、
興味ない人も興味ある人もホントつまらないと思います。
スルー推奨。
あとこの手の話に詳しい方々からすれば
突っ込みどころ成分100%です。

というわけで。
今日のテーマは「乱数

以下メモにも劣る独り言

ウディタでは変数を指定するときに、
「X~Yまでの乱数」を取得できます。
乱数取得 こんなん。

基本システムにおいては「ランダムエンカウント時の敵パターン決定」やら
「スキル効果の振れ幅決定」等々に使用されていますが、
実はウディタの乱数は「疑似乱数」です。

wikipedia「擬似乱数(ぎじらんすう、pseudorandom numbers)とは、乱数列(乱数)のように見えるが、実際には確定的な計算によって求めている数列に含まれる数を指す。擬似乱数を生成する機器を擬似乱数生成器、生成アルゴリズムを擬似乱数生成法と呼ぶ。」

まぁ早い話、コンピュータは自分で考えることが出来ないので、
あるアドレスにある値を乱数生成関数に放り込んで、
取得できた値を「乱数」として返すしかできないということです。

コンシューマーゲームではその「あるアドレス」の値が
1ms程度の周期で変動するものがあり、ランダム性が高まっていますが、
「あるアドレス」が特定の行動で変化するタイプの場合、
何度セーブとロードを繰り返しても、前と全く同じ動きをすると、
前と全く同じ乱数を取得することが出来ます。

これを利用することで、某ポケット怪物や某最後の幻想等々で、
「無駄に1コマ多く歩く」「無駄にアイテムを使う」「無駄にメニューを開く」
などの行動をすることで、乱数の初期値を変動させ、
レアアイテムなどを確実に手に入れることが出来るテクニックがあります。
これが世にいう「乱数調整」です。

さて。
ウディタに話を戻します。

先述したとおり、ウディタの基本システムではスキル効果の振れ幅や
敵のパターン選定などに乱数が使用されています。
しかし、これまた先述したとおり、疑似乱数ですので、
同じ行動をとれば同じ結果になりますし、
ウディタの場合は歩いたりメニュー開いたりするだけでは
初期値は変化しません。(きっと)
ウディタの乱数の初期値はゲーム起動時に決定され、
変動することはありません。(多分ね。経験則。)

つまり、たとえば「後一歩歩くとものすごい強さの敵とエンカウントし、
全力で戦っても敗北する」ような状況でセーブした場合、
ゲームを起動してからメニューを開こうがボタンを連打しようが、
20秒後に一歩動こうが20年後に一歩動こうが、
まったく同じ敵が出現しますし、
敗北した時と同じパターンで攻撃や防御を選択すれば、
敵に与えるダメージも仲間が受けるダメージもまったく同じ値をとるので、
一生勝てないことになります。

ではどうするか。

答えは簡単。

常時乱数を生成し続ける」です(キリッ

常時並列イベントで乱数を出力し続けると、
1秒間に60個のペースで乱数が生成されます。
もちろんこの手段を使っても、得られた乱数の列は
一定のものになりますが、
実際に戦闘や敵パターンの選定の際に同じ値を持ってくるためには、
約0.01667秒のタイミングを見切ってキーを正確に
押さなければなりません。普通にプレイしていたらまず無理です。
したがってこの方法で、
「一定の乱数列の中からランダムで一つの値を取得する」
という乱数の取得方法が可能になるのです。

余談ですが、この方法は
「『あるアドレス』の値を1msごとに変動させる」という
発想に近いです。
あちらは初期値を変動させていますが、
こちらは乱数そのものを変動させています。
1msに挑むため、コマ送りなどが可能なツールを使い、
ランダム乱数を完全に手中に収めたうえで
クリアタイムの理論上の最短値を求めるプレイが、
いわゆる「TAS」と呼ばれるものなんです。
関連記事
スポンサーサイト
[PR]

[PR]

コメントの投稿

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。