TAS以外のことも書いていきたい。
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の仕様変更によりマリオが乗っているヨッシーも上書きの対象になり得ます。しかし、マリオが乗っているヨッシーが上書きされるとゴールバーがバグって機能しなくなります。バグったゴールバーも通常のゴールバー同様消滅することが無いので、別ゴールもルーム移動手段もない場合はゴールができなくなってしまいます。
PR
Comments
Post a Comment
カレンダー
カテゴリー
最新記事
アーカイブ
プロフィール
HN:
ISMin(いずみん)
性別:
男性
自己紹介:
別名ISMさん。なぜHPのタイトルといっしょになったのだろうか。荒島博久さんは旅に出ました。
ブログ内検索
最新トラックバック
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"