TAS以外のことも書いていきたい。
Posted by ISMin(いずみん) - 2010.10.20,Wed
TASvideosのフォーラムで話題になっていたテクニック。
さっぱりわからなかったからこの記事を見て誰か解析してくれないかな、なんて思って作成。
説明中◯番のスプライト、ID◯番などの表現が出てきますがこれはこのLuaスプリクトを使うことで表示させることができます。
(追記)誰か解析~なんて書いてたらMr.さん、33953YoShIさんが本当に解析してくれました。感謝!
というわけで全体的に書き直しました。
(追記2)少し書き足し。TASLaboも参照してください。
(追記3)解析が進んで、この記事も情報が古くなっています。俺自身あまり追えていないのでどこかに詳細がまとめられることを期待。
1.無をほおばる方法
方法1.まずブロック増殖やアイテム2個出し等を利用してヨッシーを2匹以上出します。
次にみえてる方のヨッシーにアイテムをほおばらせ、穴に落とします。
すると新たに実体化したヨッシーが無をほおばっています。
パワーアップor被ダメ中に口を閉じたまま舌を出し、アイテムをほおばったら成功。
ほおばる前のアイテムの代わりに無をほおばっている状態になっています。
また、無に変化したスプライトは消滅フラグが立たないのかずっとステージ上に残り続けます。
ちなみに、成功すると口を閉じたまま舌を出したあとに、なぜか勝手に再度舌を出します。
再度舌を出したときにも敵を食べることができますが、このとき頬張れるスプライトを食べてしまうと、無は消滅してしまい、頬張ったスプライトだけが残ります。
2.引き起こされるバグ
このまま無をほおばり続けていれば何も起きないが、無を吐き出すことで
①アドレス0x7E15D3がヨッシーのy座標の上位バイトで上書きされる
②アドレス0x7E15DFがヨッシーのx座標の上位バイトで上書きされる
③アドレス0x7E167Bがヨッシーの向きで上書きされる
④乗ると回転するリフトで吐くと意図しないプログラムが実行される。
⑤アドレス0x7E1725が0で上書きされる
⑥その他
という現象が起きます。
①について、アドレス0x7E15D3は3番のスプライトの頬張りフラグであり、
ここに1以上の値が入ると一部のスプライトとの接触判定がなくなります。
②について、アドレス0x7E15DFは3番のスプライトのブロックすり抜けフラグであり、
ここに1以上の値が入るとブロックとの接触判定がなくなります。
③について、アドレス0x7E167Bは1番のスプライトのパラメータの一部で無を吐くことで、
・マリオが触れたときの効果がアドレス(0x7E1656+スプライトID)の通りになる(キノコ、リフト等に触れるとダメージ)
・ヨッシーが食べてもパワーアップしない
・判定を毎フレーム取得(?)
・持ち物を蹴ると甲羅のように滑っていく、触れるとダメージ
・気絶中甲羅に変わる(?)(持ち物のグラフィックが一部おかしくなる、スイッチを踏んでもなくならない)
・画面外に出ると消える
・スターの無敵、ファイア、マントアタック、ブロック突き上げがすり抜けない(倒せるかどうかは別)。また、触れるとヨッシーが逃げる
・右向きに無を吐くと、スターの無敵で倒したときにグラフィックや接触判定等が変化する。左向きに吐くと変化しない
という変化をします。
④についてはどのプログラムが実行されるかはヨッシーのID、ヨッシーx座標の下位バイト、ヨッシーの向きに依存するようです。
大抵の場合は①~③の変化しか起きないか吐いた瞬間にフリーズしてしまいますが、それ以外にマリオのパワーアップ状態が変わる現象が確認されています。
もしかしたらこれ以外にもフリーズせず、かつ有効なプログラムが実行されるパターンがあるかもしれません。
⑤について、アドレス0x7E1725は7番の拡張スプライト(ブルの野球ボールやポンキーの花粉など)のx座標の下位バイトです。
拡張スプライトのIDは上のLuaスクリプトでは見れませんが、そこまで使えるわけでもないので無視します。
⑥について影響がほとんどないようなものは省略しています。
3.応用テクニック
(1)①、②、③の効果を単純に利用
①では敵に触れてもヨッシーが逃げないようにする、敵を誘導するときに甲羅で倒されたり他の敵にあたって反転することを防ぐ、
②では甲羅や鍵を手元に引き寄せる、壁の向こう側の敵を甲羅で倒す、
③ではPスイッチの無限使用、Pスイッチや鍵を甲羅のように蹴って運ぶ、邪魔なリフトをファイアで倒す。
といった利用方法が考えられます。
(2)ヨッシー床抜け、ジャンプ台床抜け
②の効果をヨッシーに適用すると、ヨッシーから降りた瞬間にヨッシーが壁を抜けるようになります。
これを利用して、ヨッシーが床を少し抜けたときに乗り込むことで床抜けができます。
ジャンプ台でも同様にして床抜け出来ます。
(3)マリオのパワーアップ状態変化
④のマリオのパワーアップ状態の変化は、ヨッシーのIDが4番かつ(ヨッシーのx座標+ヨッシーの向き補正)を256で割った余りが214になる時に無を吐くことで起こります。
ヨッシーの向き補正はヨッシーが右向きなら+16、左向きなら-16です。
条件を満たしたときにはアドレス0x7E0019の値が+1されます。
つまり、チビの時はスーパー、スーパーの時はマント、マントの時はファイアになるというわけです。
そしてファイアの時に④のパワーアップ状態の変化を使うと赤く染まったマリオ(パワーアップ状態4、以下赤マリオ)に変身します。
赤マリオは基本的にはスーパーマリオと同じ動作をしますが、パワーアップアイテムを取ったときの挙動がおかしくなっています。
具体的にはキノコを取るとファイア、フラワーを取るとファイア、羽を取るとマント、スターを取るとマントになり、1UPキノコを取るとフリーズします。
また、甲羅やスイッチを持ってゴールすると持ち物がスターに変化します。
赤マリオの時にパワーアップ状態を変化させるとさらに違った挙動をするマリオに変身させることができます。
パワーアップ状態によって、パワーアップアイテムを取ったときの挙動、パワーアップしたときにストックに入るアイテム、アイテムをもってゴールしたときに出現するアイテムがそれぞれ変化します。
詳細は現在調査中です。
(4)スター錬金術
赤マリオなどでアイテムを持ってゴールしてスターを出現させるとアドレス0x7E13CBの値がスター1つにつき1増加します。
この値はマップ移動(城の前やボス撃破後のデモ画面も含む)をする度に2倍されていき、
値が128以上になると次のマップ開始時にスターの無敵状態になります。
ボス撃破後のデモ画面で無敵になると、効果が切れたあとにボス戦のBGMが鳴り始めます。
どうやら開発中に削除された没仕様のようです。
さっぱりわからなかったからこの記事を見て誰か解析してくれないかな、なんて思って作成。
説明中◯番のスプライト、ID◯番などの表現が出てきますがこれはこのLuaスプリクトを使うことで表示させることができます。
(追記)誰か解析~なんて書いてたらMr.さん、33953YoShIさんが本当に解析してくれました。感謝!
というわけで全体的に書き直しました。
(追記2)少し書き足し。TASLaboも参照してください。
(追記3)解析が進んで、この記事も情報が古くなっています。俺自身あまり追えていないのでどこかに詳細がまとめられることを期待。
1.無をほおばる方法
方法1.まずブロック増殖やアイテム2個出し等を利用してヨッシーを2匹以上出します。
次にみえてる方のヨッシーにアイテムをほおばらせ、穴に落とします。
すると新たに実体化したヨッシーが無をほおばっています。
方法2.ヨッシーとほおばるアイテムとパワーアップorダメージの手段(ストックが最適)を用意します。
ヨッシーに乗って、パワーアップor被ダメをする瞬間に舌を出します。パワーアップor被ダメ中に口を閉じたまま舌を出し、アイテムをほおばったら成功。
ほおばる前のアイテムの代わりに無をほおばっている状態になっています。
また、無に変化したスプライトは消滅フラグが立たないのかずっとステージ上に残り続けます。
ちなみに、成功すると口を閉じたまま舌を出したあとに、なぜか勝手に再度舌を出します。
再度舌を出したときにも敵を食べることができますが、このとき頬張れるスプライトを食べてしまうと、無は消滅してしまい、頬張ったスプライトだけが残ります。
2.引き起こされるバグ
このまま無をほおばり続けていれば何も起きないが、無を吐き出すことで
①アドレス0x7E15D3がヨッシーのy座標の上位バイトで上書きされる
②アドレス0x7E15DFがヨッシーのx座標の上位バイトで上書きされる
③アドレス0x7E167Bがヨッシーの向きで上書きされる
④乗ると回転するリフトで吐くと意図しないプログラムが実行される。
⑤アドレス0x7E1725が0で上書きされる
⑥その他
という現象が起きます。
①について、アドレス0x7E15D3は3番のスプライトの頬張りフラグであり、
ここに1以上の値が入ると一部のスプライトとの接触判定がなくなります。
②について、アドレス0x7E15DFは3番のスプライトのブロックすり抜けフラグであり、
ここに1以上の値が入るとブロックとの接触判定がなくなります。
③について、アドレス0x7E167Bは1番のスプライトのパラメータの一部で無を吐くことで、
・マリオが触れたときの効果がアドレス(0x7E1656+スプライトID)の通りになる(キノコ、リフト等に触れるとダメージ)
・ヨッシーが食べてもパワーアップしない
・判定を毎フレーム取得(?)
・持ち物を蹴ると甲羅のように滑っていく、触れるとダメージ
・気絶中甲羅に変わる(?)(持ち物のグラフィックが一部おかしくなる、スイッチを踏んでもなくならない)
・画面外に出ると消える
・スターの無敵、ファイア、マントアタック、ブロック突き上げがすり抜けない(倒せるかどうかは別)。また、触れるとヨッシーが逃げる
・右向きに無を吐くと、スターの無敵で倒したときにグラフィックや接触判定等が変化する。左向きに吐くと変化しない
という変化をします。
④についてはどのプログラムが実行されるかはヨッシーのID、ヨッシーx座標の下位バイト、ヨッシーの向きに依存するようです。
大抵の場合は①~③の変化しか起きないか吐いた瞬間にフリーズしてしまいますが、それ以外にマリオのパワーアップ状態が変わる現象が確認されています。
もしかしたらこれ以外にもフリーズせず、かつ有効なプログラムが実行されるパターンがあるかもしれません。
⑤について、アドレス0x7E1725は7番の拡張スプライト(ブルの野球ボールやポンキーの花粉など)のx座標の下位バイトです。
拡張スプライトのIDは上のLuaスクリプトでは見れませんが、そこまで使えるわけでもないので無視します。
⑥について影響がほとんどないようなものは省略しています。
3.応用テクニック
(1)①、②、③の効果を単純に利用
①では敵に触れてもヨッシーが逃げないようにする、敵を誘導するときに甲羅で倒されたり他の敵にあたって反転することを防ぐ、
②では甲羅や鍵を手元に引き寄せる、壁の向こう側の敵を甲羅で倒す、
③ではPスイッチの無限使用、Pスイッチや鍵を甲羅のように蹴って運ぶ、邪魔なリフトをファイアで倒す。
といった利用方法が考えられます。
(2)ヨッシー床抜け、ジャンプ台床抜け
②の効果をヨッシーに適用すると、ヨッシーから降りた瞬間にヨッシーが壁を抜けるようになります。
これを利用して、ヨッシーが床を少し抜けたときに乗り込むことで床抜けができます。
ジャンプ台でも同様にして床抜け出来ます。
(3)マリオのパワーアップ状態変化
④のマリオのパワーアップ状態の変化は、ヨッシーのIDが4番かつ(ヨッシーのx座標+ヨッシーの向き補正)を256で割った余りが214になる時に無を吐くことで起こります。
ヨッシーの向き補正はヨッシーが右向きなら+16、左向きなら-16です。
条件を満たしたときにはアドレス0x7E0019の値が+1されます。
つまり、チビの時はスーパー、スーパーの時はマント、マントの時はファイアになるというわけです。
そしてファイアの時に④のパワーアップ状態の変化を使うと赤く染まったマリオ(パワーアップ状態4、以下赤マリオ)に変身します。
赤マリオは基本的にはスーパーマリオと同じ動作をしますが、パワーアップアイテムを取ったときの挙動がおかしくなっています。
具体的にはキノコを取るとファイア、フラワーを取るとファイア、羽を取るとマント、スターを取るとマントになり、1UPキノコを取るとフリーズします。
また、甲羅やスイッチを持ってゴールすると持ち物がスターに変化します。
赤マリオの時にパワーアップ状態を変化させるとさらに違った挙動をするマリオに変身させることができます。
パワーアップ状態によって、パワーアップアイテムを取ったときの挙動、パワーアップしたときにストックに入るアイテム、アイテムをもってゴールしたときに出現するアイテムがそれぞれ変化します。
詳細は現在調査中です。
(4)スター錬金術
赤マリオなどでアイテムを持ってゴールしてスターを出現させるとアドレス0x7E13CBの値がスター1つにつき1増加します。
この値はマップ移動(城の前やボス撃破後のデモ画面も含む)をする度に2倍されていき、
値が128以上になると次のマップ開始時にスターの無敵状態になります。
ボス撃破後のデモ画面で無敵になると、効果が切れたあとにボス戦のBGMが鳴り始めます。
どうやら開発中に削除された没仕様のようです。
PR
Comments
Post a Comment
カレンダー
カテゴリー
最新記事
アーカイブ
プロフィール
HN:
ISMin(いずみん)
性別:
男性
自己紹介:
別名ISMさん。なぜHPのタイトルといっしょになったのだろうか。荒島博久さんは旅に出ました。
ブログ内検索
最新トラックバック
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"