SFC版DQ1 状況再現について

最終更新日:2017/02/06 シドー戦に加筆。
2011/09/17 3.乱数とフレーム乱数計算式へのリンクを追加。
2011/09/07 4c:冒険の書選択に解説動画をつけました。

目次

  1. 前書き
  2. 状況再現
  3. 長押しとニュートラル
    1. 長押し
    2. ニュートラル
    3. 特定タイミングでのニュートラルによる乱数操作
  4. 乱数とフレーム
    1. 乱数操作
    2. 壁にぶつかる
    3. 町などに出入りする時の方向
    4. 溜め
    5. 打撃回避
  5. 仕様による制約と対処
    1. 対処可能な乱数分岐
    2. 意図しない乱数分岐
    3. 冒険の書選択
    4. 「話す・調べる」などの回数制限

0.前書き

本ページの内容は元々「DQ1RTA 0:45:05(状況再現使用)レポート」に記載していたものですが、
加筆するに従い記述量が増えてきてしまったため、独立致しました。
DQ1プレイヤーの視点で書いてはありますが、2も大差はないと思います。
(2の方がボリュームがあるため、説明不足にはなると思いますが。)

DQ1,2の状況再現で現在用いられている手法や知識をまとめた物であるため、
私自身の調査していないものも多く含まれます。
状況再現手法の確立・発展に携わった全てのプレイヤー様に感謝申し上げます。

1.状況再現

SFC版DQ1は、電源投入もしくはリセットをすることによって乱数を初期化することが出来ます。
(DQ2では更に、冒険再開時に乱数初期化があります。)
リセット以降、長押しを利用して1フレームの誤差もなく同じ入力を行うことで状況再現を可能にします。
これは、「長押し中は一定タイミングごとにしかキー入力を受け付けない」仕様を利用しています。

お勧めの連射機などを聞かれることがありますが、必要なのは長押しであって連射はむしろ邪魔です。
もちろん、非再現パートではあった方が楽ですが。
(最近は純正コンを使用してますが、連射機能付きコントローラーを使っていた頃は
再現時に連射が誤爆して悲しくなったりしたものです。)
なお、以下の内容は「メッセージスピード1」の場合での記述となります。

2.長押しとニュートラル

2a. 長押し

再現中は基本的には「長押し」し続ける必要があります。
ひとつのキーで難しい場合は、複数キーを重複させることでも問題なく継続できます。
十字キーよりB/A/X/L/Rキーの方が優先されるため、十字キーを押しっぱなしにするのもありです。
また、戦闘中はYキーに役割は無いものの「長押し効果」には有効のため、
Yキーを押すことでも長押しを継続させることが出来ます。

2b. ニュートラル

一方で、一部のタイミングでは全てのキーを離す(=ニュートラル)をしても問題がないことがあります。
乱数に影響を与えない主なニュートラル可能タイミングは以下の通りです。

  1. 暗転などの画面切り替え時
  2. エンカウント発生〜戦闘開始前
  3. 移動中の、キーを離しても影響のないタイミング
    (半マスを移動し終わるまでの数フレーム間)

再現を続けていると、特に左手親指が痛くなって操作精度に影響が出るので、
このような間は非常に重要だったりします。

2c. 特定タイミングでのニュートラルによる乱数操作

不用意なニュートラルは乱数のまわり方が予測不能になってしまいますが、
特定のタイミングにおいては、乱数操作に利用可能です。
また、このタイミングでのニュートラルは、直後の文字送りを速くする効果もあります。

  1. 戦闘中の、コマンド選択後〜ターン終了前まで
    (1ターン撃破の場合、選択後〜「やっつけた!」の効果音中)
  2. レベルアップのファンファーレ中
  3. 逃げ出した時〜戦闘画面が閉じる前まで
  4. 会話などのメッセージ出力中(1ページごと)
  5. レベルアップ時のステータス上昇や戦闘終了時のメッセージ出力中(1行ごと)

※4,5は言い換えると、メッセージ中に表示される▽印ごと

3.乱数とフレーム

前述のとおり、リセット時(DQ2は冒険再開時)に乱数が初期化されます。
その後、戦闘・フィールドエンカウント・NPCの動きなど、
DQ1,2ではとにかくすべての場面で同一の乱数を使用しており、
立ち止まっているだけでも乱数は回ってしまうため、
再現続行中はいかなる時でも気は抜けません。

また、いわゆる「乱数テーブル」と呼ばれるようなものは存在しません。
「直前の乱数値」と「2種類の経過フレーム値」を用い、
フレーム単位、もしくは必要な度に“計算”によって生成しています。
(再現には関係ありませんが、計算式の詳細はこちらです:乱数生成について

DQ1,2の乱数はこのような性質であるため、
カセットごとの個体差や、電源関連の乱数変化等はありません。

3a. 乱数操作

再現で利用される乱数変更の手法は、主に以下のようなものがあります。

移動中

  1. 半歩技(角テク)の使用
  2. 話す・道具使用や足元調べ
  3. 壁にぶつかる(3b)
  4. 町などに出入りする時の方向(3c)

戦闘中

  1. 呪文キャンセルなど(カーソルを移動させてからBキャンセル)
  2. 選択後にキャンセル(攻撃を一度選択してからキャンセルなど)
  3. 無駄なカーソル移動
  4. 溜め(3d)
  5. 特定タイミングでのニュートラル(2c

3b. 壁にぶつかる

壁にぶつかっている時に鳴っている「効果音の数」で調整ができます。
なお、この手法は通常の乱数操作はもちろんのこと、
エンカウントの直前にこれを行うことで「エンカの内容」のみを変更出来ることがあります
これは、壁などにぶつかっている間は乱数を回さずに経過フレーム値のみが進んでいるので、
直後の乱数に与える影響が少ないためです。

3c. 町などに出入りする時の方向

出入りするまでの歩数が違えば当然乱数は変わりますが、
歩数が一緒であっても、「方向」が違うと乱数が変わります。
DQ1で例えると、ラダトーム城から出る時に上に出るか左に出るかだけでも乱数に影響があります。
入る際も同様なので、注意する必要があります。

3d. 溜め

カーソル点滅中でも長押しを継続していれば、キー受付間隔は一定になるので、
それを利用して、敵名選択時などでカーソル点滅を目安にタイミングを計る手法です。
カーソル点滅が1回29フレームなのに対し「溜め」は10フレームごとなので、
1点滅あたり約3回、溜めのタイミングがあります。

また、最終選択直前に「無駄なカーソル移動」や「溜め」を行うと、
特にDQ1においては行動順や敵の行動を変えないまま戦闘結果のみを変えやすいです。
(もちろん敵の行動自体が変わることもありますが。)
なぜなら、これらの操作も乱数を回さず経過フレーム値のみを進めることが出来るので、
コマンド入力直後に判定される「行動順」や「敵の行動決定」に使われる
乱数への影響が少ないからです。

3e. 打撃回避

DQ1,2では、さまざまな判定を乱数で行うことが多いが、
一部の打撃の回避判定は乱数を使用していません。
なお、以下の場合以外の打撃回避の判定はすべて乱数を使用しています。

防御力の高い敵への打撃

メタルスライムなど、防御力の高い敵に対して味方が攻撃する時、
(=物理ダメージ計算式のD<2に該当する敵)
与ダメは0〜1になりますが、これは経過フレーム値の「偶奇」で判定しています。
一時期話題に上った「連射機を利用したメタル系へのダメージ固定」や
特定の条件で打撃の入り方が規則的になることがあるのは、これが原因です。

敵から受ける打撃の通常回避

一方で、味方がダメージを受ける際の通常回避も
経過フレーム値で判定が行われており、64フレームごとに回避判定になります。

これを利用すると、意図的に打撃回避を探せます。
というのも、再現操作中の「コマンド」はそれぞれフレームの進みが一定なので、
各コマンドの経過フレーム数を把握していれば、計算によって回避を探せます。
例えば回避+会心を探したりする際などに、非常に効率的に調査できます。
(もちろん、そのターンでの最初の回避は自力で探す必要がありますし、
先制後攻が変わったり敵の行動が変化したりでフレームが変わってしまう可能性もありますが。)
以下が、DQ1の基本的なコマンドの必要フレーム数です。

溜め 10
カーソル移動(基本) 11
カーソル移動(呪文欄のみ) 12
呪文キャンセル 46
逃げキャンセル 57
道具キャンセル 68
攻撃欄キャンセル 70

4.仕様による制約と対処

4a. 対処可能な乱数分岐

ロード時

冒険の書のロード後、会話の中に「次レベルまでの必要経験値」を読み上げる場面があります。
会話は「1文字表示するのに1フレームを消費」するため、
必要経験値の「桁」が違うと会話終了後からの乱数が変化します。

DQ1ではその「桁」ごとに再現を作成するしかありません。
一方でDQ2では、味方全員の「名前の合計文字数」と「残り経験値の合計桁数」の和が同じであれば
同じ再現を利用することが出来ます。
つまり、経験値の桁数に合わせて「サマル/ムーンの名前を変更」することで、対処できます。
これは、はぐれ狩りでよく用いられる手法です。
(開発:swallowさん)

逃げ確定レベル

逃げる際に「逃げられるか否か」で乱数が消費されます。
しかし、逃げ確定レベルの時に逃げる時は乱数を消費しません
つまり、仮に“1逃げ再現”になっていたとしても、
その再現を使用した時に逃げ確定レベルか否かが違ってしまうと
その敵から逃げた後で乱数が変わってしまいます。
場合によってはレベルに応じて再現を作る必要があるので、
狩り再現などで同じ再現を使いまわす際は、注意が必要です。

アイテムの所持や装備

特定のアイテム所持/不所持や装備などで、再現に影響を与える場合があります。
DQ1では、「ロトの印の所持/不所持」で影響があることを確認しています。
一方でロトの鎧の装備/非装備は影響なし。もちろんダメージ系タイルの通過は論外ですが。
鎧の所持に関しては未検証です。

4b. 意図しない乱数分岐

レベルアップ

再現中、レベルアップによって乱数が分岐することがあります。
1レベルアップで分岐することもあればしないこともあり、またその分岐分布も様々です。
おそらく「サウンドなどの割り込み処理」が原因の一つではないかとも思われますが、
詳しくは分かりません。

ロトの印取得時

ロトの印取得時に、乱数が分岐することがあります。
(取得時にロトの印が回りますが、その停止角度が変わっていることで確認できます。)
詳細は未調査です。

シドー戦

DQ2状況再現での、現在最も重要な未解決事項が
この「シドー戦に状況再現が使えない」ことです。
分岐量が非常に多く、300回以上試しても重複が見られなかったという報告もあるため、
現状でシドーを再現することはまず不可能ではないかと思われます。
シドー戦前の炎などが原因ではないかと思われますが、これも詳しくは不明です。

いわゆる「電源断」によりシドー戦も再現できることがわかりました。
シドー再現前の最終セーブ後に本体の電源を切り、
「数秒〜数十秒」(本体個体差による)の間放置することで
乱数に影響を与える「何か」がリセットされる模様です。
発見自体は2012年頃と記憶してますが書いてませんでしたすいません。
(調査協力:喜三郎さん、夢幻斎さん、bambooさん)

なお、この現象はSFC版DQ3,6でも確認可能です。
電源断後に電源ONから決定ボタンを長押しし、教会内のNPCの動きが固定化されれば成功です。
ただし、DQ2と3,6で電源断に要する秒数が同一かどうかは未確認です。
また、DQ3,6は神父の会話ボックスを長押しで閉じれないため、3,6の実機再現への道は閉ざされたままです。

4c. 冒険の書選択(DQ1のみ)

実機におけるDQ1状況再現での一番の鬼門は、この冒険の書選択です。
実際にやってみると分かりますが、長押しだとなぜかデータ選択欄で停止してしまい、
一度キー入力をOFFにしない限りロードすることが出来ません。

なお、DQ1とは違いDQ2ではデータロード後に
もう一度乱数リセットが入るため、これは問題になりません。

1フレロード

「ぼうけんをする」のとあるタイミングでキーを一瞬離し、
すぐに再入力を行うことで、セーブデータの“選択のされ方”が独特な状態になることがあります。
これが成功した場合は必ず同じ乱数となり、また、
NPCの動きで乱数を見るよりも判断が早くつくため、非常に重要な技となります。
なお、再入力タイミングの猶予は1フレームのため、ある程度運ゲーです。
(開発:まひるさん)

文字だと分かりにくいため、解説動画をUPしました。
動画:再現テク解説:冒険の書選択(ニコニコ動画のアカウントが必要です)

30連射の利用

また、秒間30連射の連射機を使用する時、リセット時から連射をし続けて冒険の書を選ぶ場合は、
「ENIX PRESENTSが表示される」「表示されない」の完全2分岐にすることが出来ます。
これによって、冒険の書の問題を簡単にクリアすることが出来ます。
ただし、筆者はエミュレータの連射機能による連射でしか確認をしていないため、
コントローラ自体の連射機能による30連射の場合にどのような動作になるかは未検証です。

4d. 「話す・調べる」などの回数制限

長押し中、なぜか1回しかメニュー・便利キーを使用できないという仕様があります。
(移動中、方向キーを押したままX/L/Rキーを何度も押してみると分かります。)
その制限を解除するのには、現在2つの方法があります。

ニュートラルを挟む

画面切り替えの暗転中や、移動中立ち止まらないタイミング(半マスの移動間)などで
ニュートラルを入れると、1回制限が解除されます。
(ただ画面が切り替わるだけでは復活しないので、ニュートラル忘れに注意。)

戦闘後の最初の移動を横移動にする(実機のみ)

戦闘後に左右移動をすると、なぜかもう一度使えるようになります。
ただしこれは実機のみ可能であり、エミュレータでは出来ない仕様です。
なぜ横移動だけなのか、なぜ環境に制約があるのかなどは不明です。

また、これを言い換えると、たとえ戦闘前にメニュー等を使用していなくとも、
戦闘終了直後が上下移動だった場合は、ニュートラルを挟むか
次の戦闘後に横移動をしない限り使えない
ので注意が必要です。

文責:Kri (http://com.nicovideo.jp/community/co381358)