TAS以外のことも書いていきたい。
Posted by ISMin(いずみん) - 2012.02.22,Wed
無を頬張る
難易度C
以前の記事を修正、追加しつつまとめ直しました。
全体的にMr.さんの調査とyoshiさんの解析結果を参考にしています。TASLaboフォーラム(跡地)も参考。
◯概要
何も無いのに何か頬張ってるテクニック。無といってもアイテム取り寄せ(無を取得)の無とは性質が違います。あっちの無はいわばIDを食べているような状態ですが、こっちは正真正銘何もないものを頬張っています。無いのにいろいろあってややこしい!。スーパーマリオアドバンス2でも一応出来ますが挙動が大きく異なります(その他の項に記述)。
◯使える場所・タイミング
ヨッシーが2匹以上いるか、もしくはヨッシーと時間停止手段(パワーアップorダメージor卵産みorルーム移動)があり、さらに頬張る事のできるスプライト(甲羅、Pスイッチなど)があるとき。
◯方法
やり方は2つあります。
1. 透明ヨッシーを使う。
まずアイテム2個出しやブロック増殖などでヨッシーを2匹以上出します。すると1匹を除いて透明になるので、実体化しているヨッシーに乗ります(同時に透明ヨッシーに乗っていてもいいです)。そして何かを頬張った状態でヨッシーを穴や溶岩に落として消滅させます。すると透明だったヨッシーの1匹が実体化しますが、そのヨッシーが無を頬張っています。ヨッシーを複数出すことさえできれば非常に簡単に出来ます。
2. ヨッシーと時間停止手段を利用する
まずヨッシーに乗った状態で、頬張ることのできるスプライトの近くに移動します。ルーム移動を利用する場合は移動先のスタート地点に頬張るアイテムがなければなりません(アイテム持ち乗りを利用すると楽)。そして時間停止(パワーアップorダメージor卵産みorルーム移動)を行う直前に舌を出します。すると何故か口を閉じた状態で舌を出すので、用意したスプライトを頬張ります。そうするとスプライトを頬張った直後にもう一度舌を出すのでこの時に何も食べなければ、元のスプライトの代わりに無を頬張ります。タイミングがシビアですが、マントマリオ+ファイアストックならチャンスは何度でもあり、汎用性も高いです。
◯効果
ヨッシーが無を頬張ります。これを吐き出しても吐いた音がするだけで何も出て来ませんが、様々な現象が起こります。書き換わるメモリアドレスを表1にまとめました。
またID1のスプライトの特性は表2のようになっています。
つまり発生する挙動は、以下の通りである。
(1) スタックがいろいろ書き換わる。主に応用の項の回転リフトバグに影響。
(2) ID1のスプライトの特性が以下のように変化
・右向きに吐くと倒された時にグラフィック変更する、左向きならしない。
・攻撃はすり抜けない(リフトなども倒せるように)。
・画面外で消える。
・スタンした時に甲羅に変化する(詳細不明)。
・蹴ると甲羅のように滑る。
・判定を2Fに1回取得(リフト等ががたつく)。
・ヨッシーで食べてもパワーアップしない。
・標準判定を使用する。
(3) ID3のスプライトの特性が次のように変化
・x座標上位バイトが0でないときにヨッシーに食べられている状態に(特定のスプライトとの接触判定がなくなる等)、0の時は食べられていない状態に。
・x座標上位バイトが0でないときにオブジェクト(ブロック・壁・地面など)との接触判定がなくなる。0の時はなくならない。
・画面外フラグは瞬時に戻るため変化なし。
(4) ID3のblock bounceスプライトが何かなる(詳細未確認)
(5) ID7のextendedスプライト(ブルの野球ボール等)のx座標下位バイトが0になる。
◯原理
ヨッシーがスプライトを舌で掴むと、アドレス(0x7E160E+ヨッシーID)にスプライトのIDがセットされます。またそのままスプライトを頬張ると、セットされたIDのスプライトの状態(0x7E148C+ID)が7(ヨッシーが頬張っている)になり、飲み込みタイマー(0x7E18AC)が255になります。これらの値は口内のものを吐き出したり飲み込んだり、さらにヨッシーが消滅して同じIDに別のスプライトが出現した時にリセットされますが、スプライトのIDはこれらに加えて舌を出した瞬間にもリセットされます。
本来は頬張った状態から吐き出しも飲み込みも行わず舌を出すことは不可能なので一部だけを初期化することはできないのですが、上記の方法2を用いると頬張った状態で舌を出せるのでIDのみリセットすることができます。
IDがリセットされると値は255になります。これは通常は食べようとしていない状態を表わすのですが、飲み込みタイマーがリセットされていないのでID255のスプライトを頬張っている状態になってしまいます。この状態で頬張っているものを吐き出すと、ID255のスプライトの速度や座標等に該当するメモリアドレスが書き換わります(表1参照)。もちろんこれらアドレスは本来割り当てられているものではないため、異常な現象が起こります。
方法1の場合は実体化してるヨッシーと透明ヨッシーの掴んだスプライトのIDをセットしているアドレスが異なっているので、実体化してるヨッシーが何か頬張っていても透明ヨッシーは何も食べようとしていない状態(255がセット)になっています。しかし全てのヨッシーで飲み込みタイマーは共有されているので透明ヨッシーも頬張っていることになり、結果としてID255のスプライトを頬張っていることになります。
ちなみに最初に頬張ろうとしたスプライトはスプライト状態7のまま放置されます。こうなるともう吐き出せなくなる上、そのIDには別スプライトが出現できなくなるので出現できるスプライト数が1つ減ってしまいます。
◯応用
・回転リフトバグ
乗ると回転するリフトに乗った状態で無を吐き出すと異常なコードが実行されてバグり果てます。どのような現象が起こるかはヨッシーID,x座標を始めとして様々な要因によって変化します。たいていはクラッシュしてしまいますが、上手く制御すればパワーアップ状態を変更したり、果てには即エンディングに突入することさえできてしまいます。これは乗ると回転する回転リフトの処理に用いられるスタックが書き換わることで異常な処理を行なってしまうのが原因のようです。あまりにも激しいバグなので暗黙の了解で禁忌にされているような技です(要出典)。
・アイテム取り寄せ(無を頬張る利用)
当該記事参照
◯その他
・スーパーマリオアドバンス2でも無を頬張ることができますが、吐き出すことができなくなりました。よって回転リフトバグもできません。代わりに無を頬張っていると、青甲羅を頬張った時の効果と黄甲羅を頬張った時の効果が一定時間おきに発生するようになります。無敵甲羅を頬張った時と違い、効果が同時に現れるわけではありません。多分緑甲羅や赤甲羅の効果も発生していますが確認はできません。
・無を取得と違ってネーミングにセンスが感じられない。
難易度C
以前の記事を修正、追加しつつまとめ直しました。
全体的にMr.さんの調査とyoshiさんの解析結果を参考にしています。TASLaboフォーラム(跡地)も参考。
◯概要
何も無いのに何か頬張ってるテクニック。無といってもアイテム取り寄せ(無を取得)の無とは性質が違います。あっちの無はいわばIDを食べているような状態ですが、こっちは正真正銘何もないものを頬張っています。無いのにいろいろあってややこしい!。スーパーマリオアドバンス2でも一応出来ますが挙動が大きく異なります(その他の項に記述)。
◯使える場所・タイミング
ヨッシーが2匹以上いるか、もしくはヨッシーと時間停止手段(パワーアップorダメージor卵産みorルーム移動)があり、さらに頬張る事のできるスプライト(甲羅、Pスイッチなど)があるとき。
◯方法
やり方は2つあります。
1. 透明ヨッシーを使う。
まずアイテム2個出しやブロック増殖などでヨッシーを2匹以上出します。すると1匹を除いて透明になるので、実体化しているヨッシーに乗ります(同時に透明ヨッシーに乗っていてもいいです)。そして何かを頬張った状態でヨッシーを穴や溶岩に落として消滅させます。すると透明だったヨッシーの1匹が実体化しますが、そのヨッシーが無を頬張っています。ヨッシーを複数出すことさえできれば非常に簡単に出来ます。
2. ヨッシーと時間停止手段を利用する
まずヨッシーに乗った状態で、頬張ることのできるスプライトの近くに移動します。ルーム移動を利用する場合は移動先のスタート地点に頬張るアイテムがなければなりません(アイテム持ち乗りを利用すると楽)。そして時間停止(パワーアップorダメージor卵産みorルーム移動)を行う直前に舌を出します。すると何故か口を閉じた状態で舌を出すので、用意したスプライトを頬張ります。そうするとスプライトを頬張った直後にもう一度舌を出すのでこの時に何も食べなければ、元のスプライトの代わりに無を頬張ります。タイミングがシビアですが、マントマリオ+ファイアストックならチャンスは何度でもあり、汎用性も高いです。
◯効果
ヨッシーが無を頬張ります。これを吐き出しても吐いた音がするだけで何も出て来ませんが、様々な現象が起こります。書き換わるメモリアドレスを表1にまとめました。
表1. 頬張った無を吐き出すことで書き換わるメモリアドレス
アドレス | 役割 |
ID255のスプライト としての役割 |
取りうる値 |
0x7E01A9 | スタック | y速度 | 0 |
0x7E01B5 | スタック | x速度 |
16(下キー押しながら吐く), 48(普通に吐く) |
0x7E01C1 | スタック | 一般目的テーブル | 0 |
0x7E01D7 | スタック | y座標下位バイト |
ヨッシーy座標 下位バイト付近 |
0x7E01E3 | スタック | x座標下位バイト |
ヨッシーx座標 下位バイト付近 |
0x7E15C7 |
ID3のスプライトの 画面外フラグ |
スプライト状態 |
9(下キー押しながら吐く), 10(普通に吐く) |
0x7E15D3 |
ID3のスプライトの 食べられてるフラグ |
y座標上位バイト |
ヨッシーy座標 上位バイト付近 |
0x7E15DF |
ID3のスプライトの オブジェクトとの相互作用 |
x座標上位バイト |
ヨッシーy座標 上位バイト付近 |
0x7E167B | ID1のスプライトの特性 | 向き | 0(右向き),1(左向き) |
0x7E16CF |
block bounceスプライト (ID3)存在フラグ |
食べられてるフラグ | 0 |
0x7E1725 |
extended スプライト (ID7)x座標下位バイト |
敵倒した数 | 0 |
またID1のスプライトの特性は表2のようになっています。
表2. ID1のスプライト特性の内訳
bit | 特性 |
0 | 倒された時にグラフィック変更しない |
1 | 攻撃がすり抜ける |
2 | 画面外で消えない |
3 | スタンした時に甲羅に変化しない |
4 | 蹴った時にPスイッチのように止まる |
5 | 判定を毎フレーム取得 |
6 | ヨッシーで食べるとパワーアップ |
7 | 標準判定を使用しない |
つまり発生する挙動は、以下の通りである。
(1) スタックがいろいろ書き換わる。主に応用の項の回転リフトバグに影響。
(2) ID1のスプライトの特性が以下のように変化
・右向きに吐くと倒された時にグラフィック変更する、左向きならしない。
・攻撃はすり抜けない(リフトなども倒せるように)。
・画面外で消える。
・スタンした時に甲羅に変化する(詳細不明)。
・蹴ると甲羅のように滑る。
・判定を2Fに1回取得(リフト等ががたつく)。
・ヨッシーで食べてもパワーアップしない。
・標準判定を使用する。
(3) ID3のスプライトの特性が次のように変化
・x座標上位バイトが0でないときにヨッシーに食べられている状態に(特定のスプライトとの接触判定がなくなる等)、0の時は食べられていない状態に。
・x座標上位バイトが0でないときにオブジェクト(ブロック・壁・地面など)との接触判定がなくなる。0の時はなくならない。
・画面外フラグは瞬時に戻るため変化なし。
(4) ID3のblock bounceスプライトが何かなる(詳細未確認)
(5) ID7のextendedスプライト(ブルの野球ボール等)のx座標下位バイトが0になる。
◯原理
ヨッシーがスプライトを舌で掴むと、アドレス(0x7E160E+ヨッシーID)にスプライトのIDがセットされます。またそのままスプライトを頬張ると、セットされたIDのスプライトの状態(0x7E148C+ID)が7(ヨッシーが頬張っている)になり、飲み込みタイマー(0x7E18AC)が255になります。これらの値は口内のものを吐き出したり飲み込んだり、さらにヨッシーが消滅して同じIDに別のスプライトが出現した時にリセットされますが、スプライトのIDはこれらに加えて舌を出した瞬間にもリセットされます。
本来は頬張った状態から吐き出しも飲み込みも行わず舌を出すことは不可能なので一部だけを初期化することはできないのですが、上記の方法2を用いると頬張った状態で舌を出せるのでIDのみリセットすることができます。
IDがリセットされると値は255になります。これは通常は食べようとしていない状態を表わすのですが、飲み込みタイマーがリセットされていないのでID255のスプライトを頬張っている状態になってしまいます。この状態で頬張っているものを吐き出すと、ID255のスプライトの速度や座標等に該当するメモリアドレスが書き換わります(表1参照)。もちろんこれらアドレスは本来割り当てられているものではないため、異常な現象が起こります。
方法1の場合は実体化してるヨッシーと透明ヨッシーの掴んだスプライトのIDをセットしているアドレスが異なっているので、実体化してるヨッシーが何か頬張っていても透明ヨッシーは何も食べようとしていない状態(255がセット)になっています。しかし全てのヨッシーで飲み込みタイマーは共有されているので透明ヨッシーも頬張っていることになり、結果としてID255のスプライトを頬張っていることになります。
ちなみに最初に頬張ろうとしたスプライトはスプライト状態7のまま放置されます。こうなるともう吐き出せなくなる上、そのIDには別スプライトが出現できなくなるので出現できるスプライト数が1つ減ってしまいます。
◯応用
・回転リフトバグ
乗ると回転するリフトに乗った状態で無を吐き出すと異常なコードが実行されてバグり果てます。どのような現象が起こるかはヨッシーID,x座標を始めとして様々な要因によって変化します。たいていはクラッシュしてしまいますが、上手く制御すればパワーアップ状態を変更したり、果てには即エンディングに突入することさえできてしまいます。これは乗ると回転する回転リフトの処理に用いられるスタックが書き換わることで異常な処理を行なってしまうのが原因のようです。あまりにも激しいバグなので暗黙の了解で禁忌にされているような技です(要出典)。
・アイテム取り寄せ(無を頬張る利用)
当該記事参照
◯その他
・スーパーマリオアドバンス2でも無を頬張ることができますが、吐き出すことができなくなりました。よって回転リフトバグもできません。代わりに無を頬張っていると、青甲羅を頬張った時の効果と黄甲羅を頬張った時の効果が一定時間おきに発生するようになります。無敵甲羅を頬張った時と違い、効果が同時に現れるわけではありません。多分緑甲羅や赤甲羅の効果も発生していますが確認はできません。
・無を取得と違ってネーミングにセンスが感じられない。
PR
Posted by ISMin(いずみん) - 2012.02.22,Wed
アイテム取り寄せ(二度食い利用)
難易度C
◯概要
各種スプライトをヨッシーの舌の上に移動させるテクニック。他にも「上書き利用」、「無を頬張る利用」の方法があります(別の記事で紹介)。他の方法と比べると簡単に実行でき、汎用性も高いですが、口内変化ができないという欠点もあります。スーパーマリオアドバンス2では二度食いができないので使えません。
◯使える場所・タイミング
ヨッシーに乗っていてアイテム二度食いができるスプライト(キノコ、フラワー、羽、1UPキノコ、スター、スプライトコイン、銀コイン、持った後のブルブルブロック)があるとき。
◯方法
アイテム二度食いの要領で舌で掴んだアイテムに直接触れてアイテムを取得します。そして消滅したアイテムをヨッシーが食べてしまう前に元のアイテムと同じIDに新たにスプライトを出現させます。すると新たに出現したスプライトがヨッシーの舌の上にワープします。
ブロックから出現したアイテムやストックアイテムを利用して、普通のスプライトを取り寄せる場合は、ある程度スプライトを出現させて、アイテムが普通のスプライトが出現する枠に出るようにしなければなりません。
◯効果
新たに出現させたスプライトがヨッシーの舌の上にワープします。このスプライトはほおっておくとすぐに飲み込んでしまうので、その前に効果を発動させるか(ゴールバー、鍵穴等)、食べキャンを用いて飲み込まないようにしなければなりませ。やり方を考えればほとんど全てのスプライトを取り寄せることが可能になります。
◯原理
アイテム二度食いの記事で書いたように、舌で掴んだスプライトを消滅させてもヨッシーは依然としてそのIDのスプライトを食べようとします。ここで元のスプライトが消滅=同じIDに新たなスプライトが出現できるので、新たなスプライトを出現させると、ヨッシーはそのスプライトを食べようとしていることになり、出現直後に座標補正を受けて舌の上にワープします。
◯応用
・操作不能バルーン
アイテム取り寄せによりPバルーンを取り寄せて、舌の上に乗っている状態でPバルーンに触って取得すると、マリオはバルーン状態になるのですが、何故か方向キーの操作ができなくなります。
・ブルバグ
アイテム取り寄せにより各種ブルを取り寄せてそのまま食べると、様々な現象が起こります。どんな現象が起こるかは一般にマリオのパワーアップ状態とストックアイテムと食べるブルの種類によって決まり、ゴール玉や鍵をストックに入れることもできます。何故かブルを食べるとパワーアップアイテムするという扱いになっているのが原因のようです。詳しいことは忘れたので一覧表を見つけたら書きます。
◯その他
実はスーパードンキーコング2の無を取得を調査するきっかけのきっかけとなったテクニックです。原理や挙動が非常に似ているのでスーパードンキーコング2の方も一度調べてみるといいでしょう。
難易度C
◯概要
各種スプライトをヨッシーの舌の上に移動させるテクニック。他にも「上書き利用」、「無を頬張る利用」の方法があります(別の記事で紹介)。他の方法と比べると簡単に実行でき、汎用性も高いですが、口内変化ができないという欠点もあります。スーパーマリオアドバンス2では二度食いができないので使えません。
◯使える場所・タイミング
ヨッシーに乗っていてアイテム二度食いができるスプライト(キノコ、フラワー、羽、1UPキノコ、スター、スプライトコイン、銀コイン、持った後のブルブルブロック)があるとき。
◯方法
アイテム二度食いの要領で舌で掴んだアイテムに直接触れてアイテムを取得します。そして消滅したアイテムをヨッシーが食べてしまう前に元のアイテムと同じIDに新たにスプライトを出現させます。すると新たに出現したスプライトがヨッシーの舌の上にワープします。
ブロックから出現したアイテムやストックアイテムを利用して、普通のスプライトを取り寄せる場合は、ある程度スプライトを出現させて、アイテムが普通のスプライトが出現する枠に出るようにしなければなりません。
◯効果
新たに出現させたスプライトがヨッシーの舌の上にワープします。このスプライトはほおっておくとすぐに飲み込んでしまうので、その前に効果を発動させるか(ゴールバー、鍵穴等)、食べキャンを用いて飲み込まないようにしなければなりませ。やり方を考えればほとんど全てのスプライトを取り寄せることが可能になります。
◯原理
アイテム二度食いの記事で書いたように、舌で掴んだスプライトを消滅させてもヨッシーは依然としてそのIDのスプライトを食べようとします。ここで元のスプライトが消滅=同じIDに新たなスプライトが出現できるので、新たなスプライトを出現させると、ヨッシーはそのスプライトを食べようとしていることになり、出現直後に座標補正を受けて舌の上にワープします。
◯応用
・操作不能バルーン
アイテム取り寄せによりPバルーンを取り寄せて、舌の上に乗っている状態でPバルーンに触って取得すると、マリオはバルーン状態になるのですが、何故か方向キーの操作ができなくなります。
・ブルバグ
アイテム取り寄せにより各種ブルを取り寄せてそのまま食べると、様々な現象が起こります。どんな現象が起こるかは一般にマリオのパワーアップ状態とストックアイテムと食べるブルの種類によって決まり、ゴール玉や鍵をストックに入れることもできます。何故かブルを食べるとパワーアップアイテムするという扱いになっているのが原因のようです。詳しいことは忘れたので一覧表を見つけたら書きます。
◯その他
実はスーパードンキーコング2の無を取得を調査するきっかけのきっかけとなったテクニックです。原理や挙動が非常に似ているのでスーパードンキーコング2の方も一度調べてみるといいでしょう。
Posted by ISMin(いずみん) - 2012.02.21,Tue
アイテム二度食い
難易度C
◯概要
一つのアイテムをマリオが取得しつつヨッシーが食べるテクニック。今まではただ二倍お得になるだけのテクニックかと思われていましたが、実は無を取得によるアイテム取り寄せに応用できることが判明し、有効であることが確認されました。スーパーマリオアドバンス2では仕様変更のため使えなくなりました(その他の項に記述)。
◯使える場所・タイミング
ヨッシーに乗っていて何かそれっぽいスプライトがあるとき。
◯方法
このテクニックは各種アイテム(キノコ、フラワー、羽、1UPキノコ、スター)及び、スプライトコイン(ファイアで敵を倒した時や黄ノコノコを踏んだ時に出るコイン)、銀コイン、持った後のブルブルブロックあたりで出来ます。他のスプライトで行うのは別の記事で紹介します。
やり方は2つあります。
1. ヨッシーがアイテムに触れると同時に舌で掴む。
アイテムに突っ込んで取る直前に舌を出す、もしくはアイテムの目の前に立ち、一旦アイテムを掴まないように舌を出し、舌を引っ込めるときにタイミングよく前進すると出来ます。どちらも通常プレイでは難易度が高いですが、1Fずつタイミング調整できるツールアシストではそれほど難しくありません。また、ヨッシーから降りる必要がないため、特に前者は高速で行えます。
2. ヨッシーが舌を出すと同時にヨッシーから降り、舌で掴んだアイテムに触れる。
いろいろ方法はありますが、着地した状態でY+左キー(右向きの時)を押した直後にAを押すと、舌と同じ方向に降りる事ができるので簡単に出来ます。ただしヨッシーから降りなければならないのでタイムロスは大きいです。
◯効果
アイテムに触れた段階でアイテムを取得でき、さらにヨッシーがアイテムを食べた時にもう1度取得できます。ブルブルブロックは触れて破壊した後にヨッシーが食べます。
◯原理
ヨッシーが舌で掴んだスプライトも、普通の状態のスプライトと同様に触れることができ、普通の状態のときと同様の効果を発揮します。もちろんアイテムも普通に取得することができ、取得したアイテムは消滅します。
一方でアドレス(0x7E160E+ヨッシーのID)には舌で掴んだスプライトのIDがセットされますが、この値は上記の手順ではリセットされません。ここで消滅したスプライトでも同じIDに新たにスプライトが出現しない限り、メモリの初期化等は行われないので、ヨッシーは消滅したはずのアイテムを食べたことになり、直接触れた分とあわせて2個分取得したことになります。
◯応用
・踏み食い、Pスイッチリサイクル他
敵を踏みながら食べるテクニックやPスイッチを最利用するテクニックなど無を取得を伴わないものをいつかまとめます。
・アイテム取り寄せ(二度食い利用)
当該記事参照
◯その他
スーパーマリオアドバンス2では舌で掴んだスプライトに触れることができなくなったので、このテクニックは使えません。
難易度C
◯概要
一つのアイテムをマリオが取得しつつヨッシーが食べるテクニック。今まではただ二倍お得になるだけのテクニックかと思われていましたが、実は無を取得によるアイテム取り寄せに応用できることが判明し、有効であることが確認されました。スーパーマリオアドバンス2では仕様変更のため使えなくなりました(その他の項に記述)。
◯使える場所・タイミング
ヨッシーに乗っていて何かそれっぽいスプライトがあるとき。
◯方法
このテクニックは各種アイテム(キノコ、フラワー、羽、1UPキノコ、スター)及び、スプライトコイン(ファイアで敵を倒した時や黄ノコノコを踏んだ時に出るコイン)、銀コイン、持った後のブルブルブロックあたりで出来ます。他のスプライトで行うのは別の記事で紹介します。
やり方は2つあります。
1. ヨッシーがアイテムに触れると同時に舌で掴む。
アイテムに突っ込んで取る直前に舌を出す、もしくはアイテムの目の前に立ち、一旦アイテムを掴まないように舌を出し、舌を引っ込めるときにタイミングよく前進すると出来ます。どちらも通常プレイでは難易度が高いですが、1Fずつタイミング調整できるツールアシストではそれほど難しくありません。また、ヨッシーから降りる必要がないため、特に前者は高速で行えます。
2. ヨッシーが舌を出すと同時にヨッシーから降り、舌で掴んだアイテムに触れる。
いろいろ方法はありますが、着地した状態でY+左キー(右向きの時)を押した直後にAを押すと、舌と同じ方向に降りる事ができるので簡単に出来ます。ただしヨッシーから降りなければならないのでタイムロスは大きいです。
◯効果
アイテムに触れた段階でアイテムを取得でき、さらにヨッシーがアイテムを食べた時にもう1度取得できます。ブルブルブロックは触れて破壊した後にヨッシーが食べます。
◯原理
ヨッシーが舌で掴んだスプライトも、普通の状態のスプライトと同様に触れることができ、普通の状態のときと同様の効果を発揮します。もちろんアイテムも普通に取得することができ、取得したアイテムは消滅します。
一方でアドレス(0x7E160E+ヨッシーのID)には舌で掴んだスプライトのIDがセットされますが、この値は上記の手順ではリセットされません。ここで消滅したスプライトでも同じIDに新たにスプライトが出現しない限り、メモリの初期化等は行われないので、ヨッシーは消滅したはずのアイテムを食べたことになり、直接触れた分とあわせて2個分取得したことになります。
◯応用
・踏み食い、Pスイッチリサイクル他
敵を踏みながら食べるテクニックやPスイッチを最利用するテクニックなど無を取得を伴わないものをいつかまとめます。
・アイテム取り寄せ(二度食い利用)
当該記事参照
◯その他
スーパーマリオアドバンス2では舌で掴んだスプライトに触れることができなくなったので、このテクニックは使えません。
Posted by ISMin(いずみん) - 2012.02.15,Wed
調査しつつ某所で発言してたら一人で情報が交錯してしまったのでまとめます。
ウェンディも似たようなものだと思いますがまだ調査してないので詳細はわからないです。
また、スーパーマリオアドバンス2(以下SMA2)についても同時に記述します。
(追記:結局間違ってたからバレないうちに直しておく。)
◯レミーの特徴(全てSMA2も同じ)
◯最速パターンが出る確率
http://ism.harisen.jp/SMWlemmy.txt
http://ism.harisen.jp/SMA2lemmy.txt
◯現実には
乱数の消費を数十回で抑えることや、数千回回すことはTAS的に現実的でないので、使える乱数値は1~2個となる。最速パターンをタイムロス無しで引くのはたぶん無理です。
現行のWIPで乱数の詳細を知らずに1ヶ月程度で妥協パターンを引いたのは相当運が良かった、そして最速パターンを粘らなくてよかったなあと今になって思うのでした。
ウェンディも似たようなものだと思いますがまだ調査してないので詳細はわからないです。
また、スーパーマリオアドバンス2(以下SMA2)についても同時に記述します。
(追記:結局間違ってたからバレないうちに直しておく。)
◯レミーの特徴(全てSMA2も同じ)
- 本体は7つの土管からランダムに出てくる。出る場所は乱数のみに依存。
- 偽物は本体の2つ右の土管と4つ右の土管から出てくる。ただし7番目の土管の右は1番目の土管とする。
- 土管は1番目、4番目、6番目が1段高く、5段目が2段高くなっている。最後にレミーが高い位置にいるときに倒してしまうと、落下に時間がかかり、1段につき3Fロスしてしまう。
- 本体のポーズは8種類からランダムに選ばれる。ポーズは乱数のみに依存。偽物にはポーズの種類はない。
- ポーズは前向き4種、横向き2種、上向き1種、逆向き1種があり、向きによって出現から攻撃できるまでにかかる時間が異なる。最速は逆向きで出現後64Fで攻撃できる。その後は上向き(72F)、前向き(74F)、横向き(80F)と続く。
- つまり最速で攻撃してるつもりでも乱数によっては最大54Fもの差が生じてしまう。
◯最速パターンが出る確率
-
乱数を無視して求めてみる。
ポーズや土管ごとに起こりやすさに差はないとする。つまりあるポーズが選ばれる確率は1/8、ある土管が選ばれる確率は1/7とする。
すると最速パターンである「3回とも逆向きのポーズで出現し、3回目は一番低い土管から出現する」確率は
(1/8)×(1/8)×(1/8)×(3/7)=3/3584≒0.0837% となる。
また、土管の位置を無視してポーズだけで考えた場合(以下「妥協パターン」と表記)
(1/8)×(1/8)×(1/8)=1/512≒0.1953% となる。
これらはSMA2でも同様である。
-
全ての乱数値におけるレミーの動きを調べて求める。
乱数はアドレス0x7E148B(以下乱数A)とアドレス0x7E148C(以下乱数B)で管理されており、それぞれ256通りの全65536通りのパターンが考えられる(実際にはそうではないがそのあたりは3で記述)。SMA2もアドレスが0x03003f11(乱数A)、0x03003f12(乱数B)となっている以外は同様。
これら全ての乱数値におけるレミーの動きを調べると、最速パターンを取る乱数値は56通り、妥協パターンを含めると128通りある。
つまり、確率は最速パターンが 56/65536≒0.0854%、
妥協パターンを含めると 128/65536≒0.1953% となる。
SMA2では最速パターンを取る乱数値が40通り、妥協パターンを含めると120通りとなり、
確率は最速パターンが 40/65536≒0.0610%、
妥協パターンを含めると 120/65536≒0.1831% となる。
-
取り得ない乱数値を考慮。(実際の確率)
2では256×256=65536通りのパターンがあると記述したが、実際には乱数Aは256個中217個、乱数Bは128個しか使わないため、全パターンは217×128=27776通りとなる。SMA2も同様である。
これを考慮すると、最速パターンは8通り、妥協パターンを含めても32通りしかなくなってしまう。
また、確率は最速パターンが 8/27776≒0.0288%、
妥協パターンを含めると 32/27776≒0.1152% となる。
SMA2では最速パターンが16通り、妥協パターンを含めると56通りとなり、
確率は最速パターンが 16/27776≒0.0576%、
妥協パターンを含めると 56/27776≒0.2016% となる。
-
取り得ない乱数値の組み合わせを考慮
そんなものはない。
http://ism.harisen.jp/SMWlemmy.txt
http://ism.harisen.jp/SMA2lemmy.txt
◯現実には
乱数の消費を数十回で抑えることや、数千回回すことはTAS的に現実的でないので、使える乱数値は1~2個となる。最速パターンをタイムロス無しで引くのはたぶん無理です。
現行のWIPで乱数の詳細を知らずに1ヶ月程度で妥協パターンを引いたのは相当運が良かった、そして最速パターンを粘らなくてよかったなあと今になって思うのでした。
Posted by ISMin(いずみん) - 2012.02.10,Fri
先にスプライトの基本知識についてまとめようと思いましたが全然まとまらないまま数ヶ月経過してしまったので、投げ捨てて先に進みます。スプライトについては改造関連の解説を見ていただくか、TASLabo Forum(跡地)のSMWのトピックにMr.さんがまとめてくださっています。以下で使用している用語やIDの値などはTASvideosのLuaスクリプト及びMr.さんの記述に準じています。
アイテム取り寄せ/無を取得(上書き利用)
難易度B
◯概要
アイテムやゴールなどをヨッシーの口の中や舌の上に移動させるテクニック。現象自体は結構前から確認されていたようですが(ドーナツ平野秘密のコース2のラストでゴールバーが消える&鍵のようなものを吐き出すバグとして紹介されている)、09年前半頃に詳しい条件が解明され、TASで使える技に昇格しました。やり方は大きく分けて「上書き利用」、「二度食い利用」、「無を頬張る利用」の3つあり、それぞれ別の記事で紹介します。
スーパーマリオアドバンス2ではゴールバーを取り寄せることができなくなりました(その他の項に記述)。
◯使える場所・タイミング
ヨッシーが存在して、さらに十分な数のスプライトを同時に出現させることが出来るとき。
◯方法
このテクニックで取り寄せられるスプライトは、通常はブロックから出るアイテム(ヨッシー以外)とストックアイテムとゴールバーのみです。また、方法はゴールバーとそれ以外で若干変わります。ただし、特殊な手順を踏めば全てのスプライトを取り寄せることができます(応用の項に記述)。
1. ゴールバーを取り寄せる場合
まずスプライトを1体以上のヨッシーを含めてたくさん出現させ、ゴールバーの出現しうるID枠(※1)がいっぱいになるようにします。この状態でゴールバーが上書きできないスプライト(※2)でない最もIDが大きいスプライトを頬張るか、舌で掴んだ状態にします。そしてそのままゴールを出現させると、ゴールバーが本来の位置に現れず、食べようとしている(=頬張ってるor舌で掴んでいる)スプライトがゴールバーに変化します。
2. ブロックから出るアイテム、ストックアイテム(以下単にアイテムと表記)を取り寄せる場合
まずは1と同様に1体以上のヨッシーを含めてスプライトをたくさん出現させ、アイテムの出現しうるID枠(=全てのスプライトID枠)がいっぱいになるようにします。その状態でID11 or ID10のスプライト(*3)を頬張るか舌で掴んだ状態にします。そしてそのままアイテムを出現させると、アイテムが本来の位置に現れず、食べようとしているスプライトがアイテムに変化します。
いずれの方法も食べキャンで木の実、ストックアイテム、Pスイッチ等の画面外でも消えないスプライトを利用すると楽になります。
※1 ゴールバーは大抵のステージでは、ID0~ID9に出現しますが、K.K.が出現するステージ(厳密には違いますが)はID0~ID4、乗ると回転するリフトが出現するステージはID0~ID5、ハナチャンが出現するステージはID0~ID8などと一部のステージではより狭いID範囲でしか出現しなくなります。詳細は墓場のカスタムスプライトの解説ページをみればわかりますが、これらのID範囲はゴールバーの他にも大部分のスプライトにも適用されるので 少しステージを進めればすぐに分かると思います。
※2 ゴールバーは画面外でも消えないスプライト及びリフトなどの足場を消すことができません。
いつか一覧を作りたいです。
※3 アイテムによって上書きされるスプライトのIDは最初はID11ですが、一度上書きされると次はID10のスプライトが上書きされます。さらにID10が上書きされたあとはID11、そのあとはID10と交互に上書きされるIDが変化します。
◯効果
食べようとしているスプライトがアイテムやゴールバーに変化します。
頬張っている状態で変化させた場合、厳密には吐き出した瞬間に変化が起こります。またこのときグラフィックや挙動は異なっている場合が多いです。 これもいつか一覧を作りたいです。
舌で掴んでいるときに変化させた場合、変化させたスプライトそのものに変化しますが、ほおっておくとすぐに飲み込んでしまうので、その前に効果を発動させるか(ゴールバー、鍵穴等)、食べキャンを用いて飲み込まないようにしなければなりません。
変化とか来ましたが厳密には元スプライトの消滅+ゴールやアイテムの出現→舌の上や口元に引き寄せ が一瞬で起こっています。詳細は原理の項で説明します
◯原理
ゴールバーやブロックから出るアイテム、ストックアイテムには出現しうるスプライトID枠が全て埋まっていたときに特定のスプライトを消滅させて代わりに出現することができるという仕様があります。
一方、ヨッシーがスプライトを舌で掴むとアドレス(0x7E160E+ヨッシーのID)に掴んだスプライトのIDがセットされます。このアドレスにセットされたIDのスプライトはヨッシーの舌が動いたり、頬張っているものを吐き出したりした時に座標の補正を受けてヨッシーの舌の上や口の近くに移動します。また、この値はヨッシーが舌を出した時、吐き出した時、飲み込んだ時、ヨッシーを消滅させて同じIDに別のスプライトが出現した時にリセットされます。ポイントは食べようとしているスプライトの状態には依存しないことです。
今、ヨッシーが食べようとしているスプライトがゴールバーやアイテムに上書きされると、例に漏れず元のスプライトは消滅しますが、上記メモリアドレスにセットされている値(=掴んだスプライトのID)がリセットされる行動は取っていないので、結果的に同じIDに出現したゴールやアイテムを食べようとしている状態になります。そして吐き出しを行ったりヨッシーの舌が動いたりするとゴールやアイテムは座標の補正を受け、ヨッシーの口付近や舌の上に瞬間移動します。
取り寄せたスプライトを吐き出した時にグラフィックや挙動がおかしくなるのは、スプライトの定常状態と吐き出した後の状態が異なっているためと考えられます。
◯応用
・アイテム複製/別スプライト引き寄せ
スプライトを頬張っている状態で方法2を用いてアイテム取り寄せを行い、吐き出す前に新たに出現したアイテムを取得したり、穴に落としたりして消滅させます。その後口内にあるアイテムを吐き出すと先ほど消滅させたアイテムが口から出てきます。
また、同じように出現したアイテムを消滅させた後、同じIDに別のスプライトを出現させてから吐き出しを行うと、ヨッシーの口から最後に出現させたスプライトが出てきます。
原理の理解のためにはスプライトの状態を示すアドレス(0x7E14C8+ID)を見ると良いです。この値が0の時にスプライトは消滅している、7の時にヨッシーが頬張っている、8の時に定常状態、9の時に置かれている/運ばれている、10の時が滑っている(蹴られている)状態になっています(他の値もありえますが割愛)。
スプライト状態が0のときには同じIDに他のスプライトが出現することができ、この時に速度や座標などの各種パラメータが新しいスプライトのものになります。後者の応用技を使った場合スプライトのパラメータが変わっても、ヨッシーが舌で掴んだスプライトのIDはリセットされないので、結果として最後に出現したスプライトを頬張っていることになり、吐き出した時に座標の補正が起こります。
また、先ほどとは逆にスプライト状態が0のときに同じIDに他のスプライトが出現しなければ、スプライト状態以外のパラメータは元のスプライトのものを保っています。ここで前者の方法を使えば、スプライト状態が0から9または10に書き換わるため元のスプライトが復活します。
ちなみにスプライト状態7のときもスプライトは消滅していますが、新たなスプライトは出現できなくなっています。つまり頬張ったスプライトを吐き出すということは、ある意味毎回アイテム複製を行なっているとも言えます。
・ほぼ全てのスプライトを取り寄せる
手順は結構複雑です。bahamete氏の動画を参考にしました。
1. レイヤーチェンジバグを使う。(参考:レイヤーチェンジバグ)
2. ヨッシーが消滅するスプライトを頬張っている状態で方法1でゴールバーを取り寄せる。
3. ゴールバーにファイアを当てると、レイヤーチェンジバグのおかげでゴールバーをコインに変えれるので変化したコインを消滅させる。
4. ゴールバーと同じIDに取り寄せたいスプライトを出現させてから吐き出しを行うと、最後に出現させたスプライトがヨッシーの口から出てくる。
これは本来消滅させられないゴールバーをレイヤーチェンジバグによって消滅させることで、ゴールバーのIDに別スプライトを出現させられるようにしています。
◯その他
・頬張っている状態で変化させることを特に「口内変化」と呼ぶこともあります。
・スーパーマリオアドバンス2ではゴールバーによる上書きの仕様が以下のように変更されています。
1. 画面外でも消えないスプライトやリフトでも上書きの対象になる。
2. ヨッシーが食べようとしているスプライトは上書きの対象にならない。
2の仕様変更のため、ゴールバーではアイテム取り寄せが成功しなくなりました。
また、1の仕様変更によりマリオが乗っているヨッシーも上書きの対象になり得ます。しかし、マリオが乗っているヨッシーが上書きされるとゴールバーがバグって機能しなくなります。バグったゴールバーも通常のゴールバー同様消滅することが無いので、別ゴールもルーム移動手段もない場合はゴールができなくなってしまいます。
アイテム取り寄せ/無を取得(上書き利用)
難易度B
◯概要
アイテムやゴールなどをヨッシーの口の中や舌の上に移動させるテクニック。現象自体は結構前から確認されていたようですが(ドーナツ平野秘密のコース2のラストでゴールバーが消える&鍵のようなものを吐き出すバグとして紹介されている)、09年前半頃に詳しい条件が解明され、TASで使える技に昇格しました。やり方は大きく分けて「上書き利用」、「二度食い利用」、「無を頬張る利用」の3つあり、それぞれ別の記事で紹介します。
スーパーマリオアドバンス2ではゴールバーを取り寄せることができなくなりました(その他の項に記述)。
◯使える場所・タイミング
ヨッシーが存在して、さらに十分な数のスプライトを同時に出現させることが出来るとき。
◯方法
このテクニックで取り寄せられるスプライトは、通常はブロックから出るアイテム(ヨッシー以外)とストックアイテムとゴールバーのみです。また、方法はゴールバーとそれ以外で若干変わります。ただし、特殊な手順を踏めば全てのスプライトを取り寄せることができます(応用の項に記述)。
1. ゴールバーを取り寄せる場合
まずスプライトを1体以上のヨッシーを含めてたくさん出現させ、ゴールバーの出現しうるID枠(※1)がいっぱいになるようにします。この状態でゴールバーが上書きできないスプライト(※2)でない最もIDが大きいスプライトを頬張るか、舌で掴んだ状態にします。そしてそのままゴールを出現させると、ゴールバーが本来の位置に現れず、食べようとしている(=頬張ってるor舌で掴んでいる)スプライトがゴールバーに変化します。
2. ブロックから出るアイテム、ストックアイテム(以下単にアイテムと表記)を取り寄せる場合
まずは1と同様に1体以上のヨッシーを含めてスプライトをたくさん出現させ、アイテムの出現しうるID枠(=全てのスプライトID枠)がいっぱいになるようにします。その状態でID11 or ID10のスプライト(*3)を頬張るか舌で掴んだ状態にします。そしてそのままアイテムを出現させると、アイテムが本来の位置に現れず、食べようとしているスプライトがアイテムに変化します。
いずれの方法も食べキャンで木の実、ストックアイテム、Pスイッチ等の画面外でも消えないスプライトを利用すると楽になります。
※1 ゴールバーは大抵のステージでは、ID0~ID9に出現しますが、K.K.が出現するステージ(厳密には違いますが)はID0~ID4、乗ると回転するリフトが出現するステージはID0~ID5、ハナチャンが出現するステージはID0~ID8などと一部のステージではより狭いID範囲でしか出現しなくなります。詳細は墓場のカスタムスプライトの解説ページをみればわかりますが、これらのID範囲はゴールバーの他にも大部分のスプライトにも適用されるので 少しステージを進めればすぐに分かると思います。
※2 ゴールバーは画面外でも消えないスプライト及びリフトなどの足場を消すことができません。
いつか一覧を作りたいです。
※3 アイテムによって上書きされるスプライトのIDは最初はID11ですが、一度上書きされると次はID10のスプライトが上書きされます。さらにID10が上書きされたあとはID11、そのあとはID10と交互に上書きされるIDが変化します。
◯効果
食べようとしているスプライトがアイテムやゴールバーに変化します。
頬張っている状態で変化させた場合、厳密には吐き出した瞬間に変化が起こります。またこのときグラフィックや挙動は異なっている場合が多いです。 これもいつか一覧を作りたいです。
舌で掴んでいるときに変化させた場合、変化させたスプライトそのものに変化しますが、ほおっておくとすぐに飲み込んでしまうので、その前に効果を発動させるか(ゴールバー、鍵穴等)、食べキャンを用いて飲み込まないようにしなければなりません。
変化とか来ましたが厳密には元スプライトの消滅+ゴールやアイテムの出現→舌の上や口元に引き寄せ が一瞬で起こっています。詳細は原理の項で説明します
◯原理
ゴールバーやブロックから出るアイテム、ストックアイテムには出現しうるスプライトID枠が全て埋まっていたときに特定のスプライトを消滅させて代わりに出現することができるという仕様があります。
一方、ヨッシーがスプライトを舌で掴むとアドレス(0x7E160E+ヨッシーのID)に掴んだスプライトのIDがセットされます。このアドレスにセットされたIDのスプライトはヨッシーの舌が動いたり、頬張っているものを吐き出したりした時に座標の補正を受けてヨッシーの舌の上や口の近くに移動します。また、この値はヨッシーが舌を出した時、吐き出した時、飲み込んだ時、ヨッシーを消滅させて同じIDに別のスプライトが出現した時にリセットされます。ポイントは食べようとしているスプライトの状態には依存しないことです。
今、ヨッシーが食べようとしているスプライトがゴールバーやアイテムに上書きされると、例に漏れず元のスプライトは消滅しますが、上記メモリアドレスにセットされている値(=掴んだスプライトのID)がリセットされる行動は取っていないので、結果的に同じIDに出現したゴールやアイテムを食べようとしている状態になります。そして吐き出しを行ったりヨッシーの舌が動いたりするとゴールやアイテムは座標の補正を受け、ヨッシーの口付近や舌の上に瞬間移動します。
取り寄せたスプライトを吐き出した時にグラフィックや挙動がおかしくなるのは、スプライトの定常状態と吐き出した後の状態が異なっているためと考えられます。
◯応用
・アイテム複製/別スプライト引き寄せ
スプライトを頬張っている状態で方法2を用いてアイテム取り寄せを行い、吐き出す前に新たに出現したアイテムを取得したり、穴に落としたりして消滅させます。その後口内にあるアイテムを吐き出すと先ほど消滅させたアイテムが口から出てきます。
また、同じように出現したアイテムを消滅させた後、同じIDに別のスプライトを出現させてから吐き出しを行うと、ヨッシーの口から最後に出現させたスプライトが出てきます。
原理の理解のためにはスプライトの状態を示すアドレス(0x7E14C8+ID)を見ると良いです。この値が0の時にスプライトは消滅している、7の時にヨッシーが頬張っている、8の時に定常状態、9の時に置かれている/運ばれている、10の時が滑っている(蹴られている)状態になっています(他の値もありえますが割愛)。
スプライト状態が0のときには同じIDに他のスプライトが出現することができ、この時に速度や座標などの各種パラメータが新しいスプライトのものになります。後者の応用技を使った場合スプライトのパラメータが変わっても、ヨッシーが舌で掴んだスプライトのIDはリセットされないので、結果として最後に出現したスプライトを頬張っていることになり、吐き出した時に座標の補正が起こります。
また、先ほどとは逆にスプライト状態が0のときに同じIDに他のスプライトが出現しなければ、スプライト状態以外のパラメータは元のスプライトのものを保っています。ここで前者の方法を使えば、スプライト状態が0から9または10に書き換わるため元のスプライトが復活します。
ちなみにスプライト状態7のときもスプライトは消滅していますが、新たなスプライトは出現できなくなっています。つまり頬張ったスプライトを吐き出すということは、ある意味毎回アイテム複製を行なっているとも言えます。
・ほぼ全てのスプライトを取り寄せる
手順は結構複雑です。bahamete氏の動画を参考にしました。
1. レイヤーチェンジバグを使う。(参考:レイヤーチェンジバグ)
2. ヨッシーが消滅するスプライトを頬張っている状態で方法1でゴールバーを取り寄せる。
3. ゴールバーにファイアを当てると、レイヤーチェンジバグのおかげでゴールバーをコインに変えれるので変化したコインを消滅させる。
4. ゴールバーと同じIDに取り寄せたいスプライトを出現させてから吐き出しを行うと、最後に出現させたスプライトがヨッシーの口から出てくる。
これは本来消滅させられないゴールバーをレイヤーチェンジバグによって消滅させることで、ゴールバーのIDに別スプライトを出現させられるようにしています。
◯その他
・頬張っている状態で変化させることを特に「口内変化」と呼ぶこともあります。
・スーパーマリオアドバンス2ではゴールバーによる上書きの仕様が以下のように変更されています。
1. 画面外でも消えないスプライトやリフトでも上書きの対象になる。
2. ヨッシーが食べようとしているスプライトは上書きの対象にならない。
2の仕様変更のため、ゴールバーではアイテム取り寄せが成功しなくなりました。
また、1の仕様変更によりマリオが乗っているヨッシーも上書きの対象になり得ます。しかし、マリオが乗っているヨッシーが上書きされるとゴールバーがバグって機能しなくなります。バグったゴールバーも通常のゴールバー同様消滅することが無いので、別ゴールもルーム移動手段もない場合はゴールができなくなってしまいます。
カレンダー
カテゴリー
最新記事
アーカイブ
プロフィール
HN:
ISMin(いずみん)
性別:
男性
自己紹介:
別名ISMさん。なぜHPのタイトルといっしょになったのだろうか。荒島博久さんは旅に出ました。
ブログ内検索
最新トラックバック
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"