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
カレンダー
カテゴリー
最新記事
アーカイブ
プロフィール
HN:
ISMin(いずみん)
性別:
男性
自己紹介:
別名ISMさん。なぜHPのタイトルといっしょになったのだろうか。荒島博久さんは旅に出ました。
ブログ内検索
最新トラックバック
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"