TAS以外のことも書いていきたい。
Posted by ISMin(いずみん) - 2012.02.27,Mon
きっかけがあって調べたので公開。
・ファイアボールのx速度は3ピクセル毎フレームで固定。これはマリオの速度48に相当する。
・ファイアボールのy速度は発射時は48。また、これが最高速度でもある。
・ファイアボールのy方向の加速度は4。つまり速度が毎フレーム4ずつ上昇していく。
・ファイアボールが地面や坂に当たると跳ねるが、このときのy速度の初速は表1のようになる。x速度は変わらない。
・急な坂(下り)やとても急な坂(下り)は坂の裏からファイアを撃たない限り当たらない。多分。
・ファイアボールのx速度は3ピクセル毎フレームで固定。これはマリオの速度48に相当する。
・ファイアボールのy速度は発射時は48。また、これが最高速度でもある。
・ファイアボールのy方向の加速度は4。つまり速度が毎フレーム4ずつ上昇していく。
・ファイアボールが地面や坂に当たると跳ねるが、このときのy速度の初速は表1のようになる。x速度は変わらない。
表1. ファイアボールが跳ねるときのy速度の初速
地面の種類 | 初速 | 最大高さ(pixel) |
平地・壁 | -48 | 19.5 |
ゆるやかな坂(上り) | -56 | 26.25 |
普通の坂(上り) | -64 | 34 |
急な坂(上り) | -72 | 42.75 |
とても急な坂(上り) | 0 | 0 |
ゆるやかな坂(下り) | -40 | 13.75 |
普通の坂(下り) | -32 | 9 |
急な坂(下り) | -24 | 5.25 |
とても急な坂(下り) | -16 | 2.5 |
・急な坂(下り)やとても急な坂(下り)は坂の裏からファイアを撃たない限り当たらない。多分。
PR
Posted by ISMin(いずみん) - 2012.02.23,Thu
食べキャンセル
難易度C
◯概要
ヨッシーが舌で掴んだスプライトを解放してあげるテクニック。通称食べキャン。現象自体は仕様のような気もするけど意外と不具合が多い。
◯使える場所・タイミング
ヨッシーに乗っていて、ヨッシーを逃がす手段があるとき。
◯方法
舌を出してスプライトを舌で掴んだ後、頬張るor飲み込む前に敵にぶつかってヨッシーを逃がすと、食べる動作がキャンセルされ、敵が解放されます。
◯効果
ヨッシーが逃げた時点で敵がヨッシーの舌から解放されます。このとき敵の座標が元の場所に戻ったりはしないので、動かない敵を無理やり動かしたり敵を壁にめり込ませたりパックンを土管から出したりできます。
また、解放されたスプライトは他のスプライトやオブジェクトとの接触判定がおかしくなります。具体的には以下のようになります。
(1) 解放されたスプライトよりIDの大きいスプライトと接触しない(すり抜ける)。
(2) 乗っているヨッシーと接触しない(ヨッシーが逃げない)。ただし踏むことはできる。ちなみにマリオのみだと普通にダメージを受ける。
(3) マントアタック、ファイア、跳ね上げが効かない。ファイアマリオ+水中でも安心してファイアを打てます。
(4) ブロックによる座標補正を受けなくなる(多分)。ただし壁、地面、天井による跳ね返りの影響は受けます。これによって持ち物が壁にめり込んだり、蹴った甲羅など一部のスプライトは地面に沈んだり、横方向のブロック増殖ができなくなったりします。応用すれば、本来叩けない位置のブロックを叩くこともできます。
これらは一度敵を頬張って吐き出すことで治ります。
◯原理
舌に掴まれたスプライトは、舌が動くとき(多分)に座標補正を受け舌の上に移動しますが、敵にぶつかってヨッシーが逃げると、舌が消えてしまうので座標補正を受けなくなって、解放されると考えられます。
また、接触判定がおかしくなるのはスプライトの食べられているフラグ(アドレス(7E15D0+スプライトのID))がリセットされないためと考えられます。このため本来は食べたスプライトでヨッシーが逃げたり、ブロックの座標補正で位置が狂ってしまうのを防ぐための仕様が、解放されたあとも残ってしまうのでしょう。
◯応用
・甲羅持ち乗り
アイテム持ち乗りによって甲羅、メット、クリボン、ボム兵、メカクッパ、ブルブルブロックを運ぼうとしてもすぐにヨッシーが逃げてしまいますが、食べキャンセルをすることでヨッシーが逃げなくなり、これらのアイテムを運ぶことができます。(参考:アイテム持ち乗り)
・アイテム取り寄せ
食べキャンセルを行うと、ヨッシーが舌で掴んでいるスプライトのIDがリセットされないので、何らかの方法で頬張っている状態に出来れば、食べキャンセルしたスプライトのIDのスプライトを取り寄せることができます。(参考:アイテム取り寄せ(無を頬張る利用))
◯その他
魅力的な効果が多く用途が広そうに思えますが、単体では意外と使う機会が無いです。
難易度C
◯概要
ヨッシーが舌で掴んだスプライトを解放してあげるテクニック。通称食べキャン。現象自体は仕様のような気もするけど意外と不具合が多い。
◯使える場所・タイミング
ヨッシーに乗っていて、ヨッシーを逃がす手段があるとき。
◯方法
舌を出してスプライトを舌で掴んだ後、頬張るor飲み込む前に敵にぶつかってヨッシーを逃がすと、食べる動作がキャンセルされ、敵が解放されます。
◯効果
ヨッシーが逃げた時点で敵がヨッシーの舌から解放されます。このとき敵の座標が元の場所に戻ったりはしないので、動かない敵を無理やり動かしたり敵を壁にめり込ませたりパックンを土管から出したりできます。
また、解放されたスプライトは他のスプライトやオブジェクトとの接触判定がおかしくなります。具体的には以下のようになります。
(1) 解放されたスプライトよりIDの大きいスプライトと接触しない(すり抜ける)。
(2) 乗っているヨッシーと接触しない(ヨッシーが逃げない)。ただし踏むことはできる。ちなみにマリオのみだと普通にダメージを受ける。
(3) マントアタック、ファイア、跳ね上げが効かない。ファイアマリオ+水中でも安心してファイアを打てます。
(4) ブロックによる座標補正を受けなくなる(多分)。ただし壁、地面、天井による跳ね返りの影響は受けます。これによって持ち物が壁にめり込んだり、蹴った甲羅など一部のスプライトは地面に沈んだり、横方向のブロック増殖ができなくなったりします。応用すれば、本来叩けない位置のブロックを叩くこともできます。
これらは一度敵を頬張って吐き出すことで治ります。
◯原理
舌に掴まれたスプライトは、舌が動くとき(多分)に座標補正を受け舌の上に移動しますが、敵にぶつかってヨッシーが逃げると、舌が消えてしまうので座標補正を受けなくなって、解放されると考えられます。
また、接触判定がおかしくなるのはスプライトの食べられているフラグ(アドレス(7E15D0+スプライトのID))がリセットされないためと考えられます。このため本来は食べたスプライトでヨッシーが逃げたり、ブロックの座標補正で位置が狂ってしまうのを防ぐための仕様が、解放されたあとも残ってしまうのでしょう。
◯応用
・甲羅持ち乗り
アイテム持ち乗りによって甲羅、メット、クリボン、ボム兵、メカクッパ、ブルブルブロックを運ぼうとしてもすぐにヨッシーが逃げてしまいますが、食べキャンセルをすることでヨッシーが逃げなくなり、これらのアイテムを運ぶことができます。(参考:アイテム持ち乗り)
・アイテム取り寄せ
食べキャンセルを行うと、ヨッシーが舌で掴んでいるスプライトのIDがリセットされないので、何らかの方法で頬張っている状態に出来れば、食べキャンセルしたスプライトのIDのスプライトを取り寄せることができます。(参考:アイテム取り寄せ(無を頬張る利用))
◯その他
魅力的な効果が多く用途が広そうに思えますが、単体では意外と使う機会が無いです。
Posted by ISMin(いずみん) - 2012.02.23,Thu
プラットフォームブースト
難易度D
◯概要
リフトで加速するテクニック。これだけで全て表している気がしなくもない。場合によっては慣性移動をやめてでも行ったほうがいいこともあります。
◯使える場所・タイミング
進行方向に進むリフトがあるとき。
◯方法
進行方向に進むリフトに乗るだけ。
◯効果
マリオがリフトに乗っている間にリフトが動いた距離分だけ距離を稼げます。乗ってすぐにジャンプしたとしても1F分のリフトの移動距離分は稼げるので慣性移動中でも少しは効果あります。リフトの上を走れば多くの距離を稼げますが、慣性移動ができなくなるので、その分のロスもあわせて考えなければなりません。
◯原理
マリオがリフトに乗っている間にリフトが動くと、マリオも座標補正を受けますが、この補正はマリオの速度に関係なく行われるので、距離が稼げます。
◯その他
逆方向に進むリフトに乗ると、当然マイナス方向の座標補正を受けてロスしてしまいます。
難易度D
◯概要
リフトで加速するテクニック。これだけで全て表している気がしなくもない。場合によっては慣性移動をやめてでも行ったほうがいいこともあります。
◯使える場所・タイミング
進行方向に進むリフトがあるとき。
◯方法
進行方向に進むリフトに乗るだけ。
◯効果
マリオがリフトに乗っている間にリフトが動いた距離分だけ距離を稼げます。乗ってすぐにジャンプしたとしても1F分のリフトの移動距離分は稼げるので慣性移動中でも少しは効果あります。リフトの上を走れば多くの距離を稼げますが、慣性移動ができなくなるので、その分のロスもあわせて考えなければなりません。
◯原理
マリオがリフトに乗っている間にリフトが動くと、マリオも座標補正を受けますが、この補正はマリオの速度に関係なく行われるので、距離が稼げます。
◯その他
逆方向に進むリフトに乗ると、当然マイナス方向の座標補正を受けてロスしてしまいます。
Posted by ISMin(いずみん) - 2012.02.22,Wed
アイテム取り寄せ(無を頬張る利用)
難易度B
◯概要
各種スプライトをヨッシーの口の中に移動させるテクニック。他にも「上書き利用」、「二度食い利用」の方法があります。口内変化しか出来ませんが、汎用性は非常に高いです。スーパーマリオアドバンス2では成功しません。
◯使える場所・タイミング
無を頬張るを使うことができ、さらに頬張るスプライトがもう一つと、ヨッシーを逃がす手段がある場合。
◯方法
まず無を頬張るの時間停止を利用する方法の要領で、口を閉じた状態で舌を出してスプライトを頬張ります。するとスプライトを頬張った直後にもう一度舌を出しますが、このときに別のスプライトを掴み、食べてしまう前に敵にぶつかって食べキャンをします。まだ何かを頬張っている状態になっているので、吐き出しを行うと先程食べようとしたスプライトが口から出てきます。
◯効果
食べようとしたスプライトが口から出てきます。吐き出したスプライトは上書き利用の時と同じく、グラフィックや挙動がおかしくなります。
他のアイテム取り寄せと同じく、消滅させたスプライトを再出現させたり、同じIDに別のスプライトを出現させることで、そのスプライトを取り寄せたりもできます。
◯原理
ヨッシーがスプライトを舌で掴むと、アドレス(0x7E160E+ヨッシーID)にスプライトのIDがセットされます。またそのままスプライトを頬張ると、セットされたIDのスプライトの状態(0x7E148C+ID)が7(ヨッシーが頬張っている)になり、飲み込みタイマー(0x7E18AC)が255になります。
無を頬張るの手順で2回目に舌を出した段階で、頬張り状態はそのままで食べようとしているスプライトのIDが初期化されます。この2回目に出した舌でスプライトを掴むと、そのスプライトのIDが新たにセットされます。このままほおっておくとただそのスプライトを食べてしまうだけですが、食べキャンをすることでセットしたスプライトのIDを維持したまま、食べることを中断できます。
この状態はセットされているスプライトのIDも正常で頬張り状態なので一見普通にスプライトを頬張っているだけに思えますが、スプライト状態が7でないため、画面内にスプライトが残っています。なので口内のものを吐き出すと残ったスプライトが座標補正を受けますし、スプライトを消滅させて他のスプライトを出現させることもできます。
◯応用
・広範囲のスプライトでスプライト産卵(スタンバグ)
スプライト産卵(スタンバグ)の記事にまとめます。いつか。
◯その他
無といってもアイテム取り寄せ(無を取得)の無とは性質が違いますとかいいつつアイテム取り寄せも出来てしまうという。無いのにいろいろあってやっぱり無いとかややこしい!
難易度B
◯概要
各種スプライトをヨッシーの口の中に移動させるテクニック。他にも「上書き利用」、「二度食い利用」の方法があります。口内変化しか出来ませんが、汎用性は非常に高いです。スーパーマリオアドバンス2では成功しません。
◯使える場所・タイミング
無を頬張るを使うことができ、さらに頬張るスプライトがもう一つと、ヨッシーを逃がす手段がある場合。
◯方法
まず無を頬張るの時間停止を利用する方法の要領で、口を閉じた状態で舌を出してスプライトを頬張ります。するとスプライトを頬張った直後にもう一度舌を出しますが、このときに別のスプライトを掴み、食べてしまう前に敵にぶつかって食べキャンをします。まだ何かを頬張っている状態になっているので、吐き出しを行うと先程食べようとしたスプライトが口から出てきます。
◯効果
食べようとしたスプライトが口から出てきます。吐き出したスプライトは上書き利用の時と同じく、グラフィックや挙動がおかしくなります。
他のアイテム取り寄せと同じく、消滅させたスプライトを再出現させたり、同じIDに別のスプライトを出現させることで、そのスプライトを取り寄せたりもできます。
◯原理
ヨッシーがスプライトを舌で掴むと、アドレス(0x7E160E+ヨッシーID)にスプライトのIDがセットされます。またそのままスプライトを頬張ると、セットされたIDのスプライトの状態(0x7E148C+ID)が7(ヨッシーが頬張っている)になり、飲み込みタイマー(0x7E18AC)が255になります。
無を頬張るの手順で2回目に舌を出した段階で、頬張り状態はそのままで食べようとしているスプライトのIDが初期化されます。この2回目に出した舌でスプライトを掴むと、そのスプライトのIDが新たにセットされます。このままほおっておくとただそのスプライトを食べてしまうだけですが、食べキャンをすることでセットしたスプライトのIDを維持したまま、食べることを中断できます。
この状態はセットされているスプライトのIDも正常で頬張り状態なので一見普通にスプライトを頬張っているだけに思えますが、スプライト状態が7でないため、画面内にスプライトが残っています。なので口内のものを吐き出すと残ったスプライトが座標補正を受けますし、スプライトを消滅させて他のスプライトを出現させることもできます。
◯応用
・広範囲のスプライトでスプライト産卵(スタンバグ)
スプライト産卵(スタンバグ)の記事にまとめます。いつか。
◯その他
無といってもアイテム取り寄せ(無を取得)の無とは性質が違いますとかいいつつアイテム取り寄せも出来てしまうという。無いのにいろいろあってやっぱり無いとかややこしい!
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でも無を頬張ることができますが、吐き出すことができなくなりました。よって回転リフトバグもできません。代わりに無を頬張っていると、青甲羅を頬張った時の効果と黄甲羅を頬張った時の効果が一定時間おきに発生するようになります。無敵甲羅を頬張った時と違い、効果が同時に現れるわけではありません。多分緑甲羅や赤甲羅の効果も発生していますが確認はできません。
・無を取得と違ってネーミングにセンスが感じられない。
カレンダー
カテゴリー
最新記事
アーカイブ
プロフィール
HN:
ISMin(いずみん)
性別:
男性
自己紹介:
別名ISMさん。なぜHPのタイトルといっしょになったのだろうか。荒島博久さんは旅に出ました。
ブログ内検索
最新トラックバック
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"