SFC風来のシレン研究ノート

元々ブロマガでやってたやつ

【朗報】シレンTAS更新の可能性(4/23追記)

----------------------------
(4/23追記2)
色々ガバガバですが、とりあえず2Fからのtestrun


2分以内に乱数調整が済めば更新できると考えると、そこまで無理ではないかな…程度です。
ただ、多分3Fで飛脚かはらへりじじいだけを調整する方がもっと確実でしょうね。
----------------------------

(4/23追記)
luaスクリプト組んでみたんですが、鈍足罠+NPCの確率はかなり低そうです。
ここ調整するくらいなら、3Fまで進んでおばけ大根を引いたほうがきっと早いですね。
一応1Fで保存の壺を拾った状態での2Fクリアは確認したので、その部分だけでも動画にしようかと思います。

↓以下、デバッグ条件・回想バグが起きる条件・必要なNPC等を修正してます
----------------------------

結果から言うと、luaスクリプトで目的の条件さえ引ければ
1階でもクリアできます。
初期乱数調整さえ間に合えば、現行の2分44秒を切る可能性があります。



ただしこの方法、コンドルマークはつかないしEDも見れないので、
TASvideosのクリア条件にはならなそう。


以下、そもそも回想バグは
・鈍足ダッシュ中に隣接したモンスターが行動する
ということだけがコアな条件(プレイと回想で乱数が変わるための)
 だということを踏まえて。


twitterffff氏(@ffff_furai)がツイートしていた内容の抜粋。

中断バグを利用し、プレイ時は攻撃、ロード時は選択肢を一度表示するNPCに話しかけるようにすることで、行動データをずらしデバッグモードの機能を呼び出すことができる。通常のROMではデバッグモードの機能は直接使えないが、行動データは正常に読み込まれる。
4月17日

例としてデバッグモードによるアイテム入手を考える。 18 A0+n E1 05 00 XX YY ZZ という行動データを保存する。

4月17日

18は攻撃(話しかける)、A0+n E1はn番目の壺の2番目の道具を取り出す、05は左下に移動、00は右に移動、XX YY ZZは入手したいアイテムに対応する行動により実現できる。( 参照)
4月17日

ロード時に18が選択肢を表示するNPCに話しかけるようにすることで、A0+nが選んだ選択肢として解釈される。 その後 E1 05 00 XX YY ZZ でデバッグモードによるアイテム入手ができる。 鈍足状態でドレムラス系の横をダッシュするのが手っ取り早いか。

予備知識がたくさんいるので大変なんですが…

噛み砕いて言うと以下の通りです。

・任意のアイテムを入手できるデバッグモードを呼ぶことができる

・行動データは、行動ごとに1バイトだったり2バイトだったりそれ以外だったりするんだけど、
 それは行動の1バイト目によって使うバイト数を判断している。
  [18]これは攻撃。
  [A1 E1]これは「壺1(A1)からアイテム2(E1)を取り出す」
  [E1 05 00 01 02 03]これは「デバッグモードで010203のアイテムを入手」
 って言う感じ。
 00とか01とかは、1バイトだと「右に移動」とかに相当するけど、
 上のように最初がE1だとデバッグの一部として使われることもある。

・プレイデータ(以下α)と回想データ(以下β)をずらすことで行動データの解釈を
 ずらして、E1からのデバッグモードを呼び出してクリアアイテムを入手

という感じ。

今、行動データが
[18] [A1 E1] [05] [00] [01] [02] [03]
 という風に保存されていたとします。
 これは普通
[攻撃][壺1からアイテム2取り出し][左下][右][右上][上][左上]
 と解釈されます。逆に言うと、この通りに行動すれば
 α世界線でこの行動データがセーブできる。当たり前だけどね。

 だけど、β世界線ではNPCの位置が違って、シレンの目の前にいるとしましょう。
 しかもNPCがケチや店主のような、選択肢を要求する会話を起こすとします。
 そうすると先頭2つの解釈が変わって
α: [18:攻撃][A1E1:壺1からアイテム2取り出し]
β: [18:話しかける][A1:NPCとの会話の選択肢に応える]
 となるそうなんです。
αでは2バイト消費する行動を、βでは1バイトだけ消費する、という点がポイントなんですね。

そうすると[A1E1]の後半1バイト[E1]が、β世界線では行動の先頭に変化して…
α: [18] [A1 E1] [05] [00] [01] [02] [03]
β: [18] [A1][E1 05 00 01 02 03]
と、デバッグモードの呼び出しになるわけです。

必要なことは何か?

・回想バグが起こせること
・αでは隣接していないが、βでは隣接するNPCを用意すること
・そのNPCは、選択肢を要求すること
・保存の壺の中にアイテムを2つ用意すること(行動A1E1は必須)

冒頭で書いた通り、回想バグの条件は
・鈍足ダッシュ中に隣接したモンスターが行動する
ことです。


つまり鈍足罠さえあれば1F、アイテム無しで起こせます。
アイテム有りなら混乱の巻物とか身代わりの杖とかを使う手もありそうです。


次にNPCシレンの位置調整ですが、これはたくさん方法があります。
・自然発生するモンスターの差を利用する
・丸太の罠が成功するかどうかの差を利用する
・ワープ罠のワープ先の差を利用する
・アイテムの落下位置(乱数により変わる)の差を利用して、
 ダッシュ後のシレンの位置を変える
・アイテム欄のズレを起こして、一方の世界線のみで場所替えの杖(など)を振る
 (Nanashiさん案)

上で挙げたTASでは、アイテム落下位置を利用しました。
どうも、飛脚の移動には微妙に乱数が絡んでいる?ようなので
もしかしたらアイテム等の準備はいらないかもしれません。

後は前述のとおりデバッグを起こしてクリアアイテムを手に入れて拾うだけです。

Nanashiさんのご報告によると、
デバッグモード用に準備するアドレスはE10500までで良いそうです。
[18] [A1][E1 05 00 01 02 03]
ここの010203をクリアアイテムを意味する内容に設定する必要がありそうなんですが、
E10500まで保存したデータをロードすると、デバッグモードの道具選択肢表示から始まる
ようなので、手動でクリアアイテムを選択した方が早いかもしれません。
(とはいえ、黄金の羽根に該当する行動は移動だけなので、どちらが早いかは微妙ですが)

そういうわけで方法のおさらいです。


1.保存の壺と任意のアイテムを一つ拾い、保存の壺の中身をおにぎりと合わせて2つにする

2.鈍足罠を踏んで、モンスターの隣でダッシュする

3.回想では接するがプレイでは接しないようなNPCを準備する
  ただしNPCはケチ、飛脚などの選択肢を要求するキャラ
  (ナオキは問答無用でブフーを押し付けてくるので駄目
   ※お竜も、初回は選択肢を二回要求してくるので駄目でした

4.攻撃[18]→壺の二つ目のアイテムを取り出す[A1 E1]→左下に移動[05]→右に移動[00]
  としてリセット・再開

5.ロード時点でデバッグの選択肢が出ているはずなので、
  黄金の羽根を手に入れて置いて拾う

6.号外だー

保存の壺はアイテム1個あたり3%ですが、アイテムが5つあれば15%くらいで出ます。
luaスクリプトで流した体感ですが、
鈍足罠の出現、ケチ・飛脚の出現率は共に10%くらいな気がします。
保存の壺だけ1Fで用意して、現象は2Fで起こすみたいな工夫がいるのかも

あと、NPCの位置を調整するよりもKZYさん案のはらへりじじい利用の方が早そうです。
問題はβ世界線でじじいが呼べたことの予測ができないので、
これもスクリプトで成功するまで繰り返すしかないかもですね。

なんにせよ2分40秒は現実的な気がします。
ここまで突き詰めてギリギリとか現行TAS早すぎないですかね…