まとめの限定公開に「リンク限定」が追加されました。URLを伝えてまとめを共有しよう!
31
AiNI@日曜東タ-57a @aini_bellwood
しずえさん無限アシストフィギュアバグについて考察する。 #スマブラSP #SmashBrosSP しずえさん無限アシストフィギュアバグは、2人のしずえさんが1つのアシストフィギュアに同時に釣り針をひっかけた際に起こるバグ。アシストフィギュアを手にした方のしずえさんがアシストフィギュアを無限に使う。
AiNI@日曜東タ-57a @aini_bellwood
おそらくこれはアイテムの使用フラグに関するバグだ。 「アシストフィギュアを使用しても消滅しない」という挙動がそれを物語っている。 詳しく推察してみよう。具体的には「Aボタンを押した後、実際にアイテムを使用するまで」の挙動だ。
AiNI@日曜東タ-57a @aini_bellwood
スマブラでは実際に効果が現れるまでにダメージを受けたりするとアイテム使用を中断するケースがある。スペシャルフラッグなどがわかりやすい。 アシストフィギュアも、ケースを掲げるまでの間は厳密にはアイテムをまだ使用していない状態になる(はず)。
AiNI@日曜東タ-57a @aini_bellwood
つまり、アイテムを使用したタイミングではアイテムはまだ消滅しておらず、消滅するのはフィギュアを掲げた瞬間ということだ。 しかしバグが発生すると、フィギュアが現れてもケースは消滅しない。しずえさんは再びケースを掲げる…。
AiNI@日曜東タ-57a @aini_bellwood
なぜアイテムが消滅しないのか?これはおそらく、アイテム所有権に関わる問題だろう。アイテム所有権というのは、オンラインゲームではしばしば必要になる制御だ。 これがオフラインのゲームであれば、単に「アイテムを所持する」でいいのだが、複数の筐体で遊ぶゲームの場合はこの概念が必要になる。
AiNI@日曜東タ-57a @aini_bellwood
どういうことかというと、通信ラグに対応するためである。 マルチプレイ中、プレイヤーが2人いる状態で同時に1つのアイテムを拾おうとしたとき。相手は棒立ちなので自分がアイテムを拾うのだが、少し遅れて相手からも「自分がアイテムを拾った」という通知が来る。
AiNI@日曜東タ-57a @aini_bellwood
どちらの画面でも、自分がアイテムを拾ったとき、相手は棒立ちの状態なのだ。では、どちらにアイテムを与えれば良いのか?
AiNI@日曜東タ-57a @aini_bellwood
実際にはどちらが早かったのかは誰にもわからないので、どちらかからアイテムを取り上げることはできない。 ひょっとすると既にそのアイテムは使われているかもしれない(1つのアイテムが2回使用できてしまう!)
AiNI@日曜東タ-57a @aini_bellwood
これを防ぐため、アイテムの所有者はいずれか1つの筐体が決定する(この筐体は俗にホストなどと呼ばれる)。 プレイヤー2人が同時にアイテムを拾った際、どちらもホストに対しアイテムを拾った通知を送る。 ホストは通知を受け取り、どちらか早い方に受理通知を送る。
AiNI@日曜東タ-57a @aini_bellwood
受理通知を受け取った方はアイテムを拾った扱いになり、受け取らなかった方はすんでのところで拾われてしまった扱いになる。 (実際には2人に対して「Aさんが拾ったよ通知」ないし「Bさんが拾ったよ通知」が届く。こうしないと拾えなかった方はいつまで経っても拾えたかどうかがわからないため)
AiNI@日曜東タ-57a @aini_bellwood
(なおこの受理通知を受け取るまでの間、どちらのプレイヤーもアイテムを所持していることになるので、その間はアイテムを使用できないようにする措置が必要になる。具体的にはゲームを一時的にポーズ状態にするとか)
AiNI@日曜東タ-57a @aini_bellwood
ここまでの推察でピンときた人もいるかもしれない。バグ発生時、しずえさんが掲げるアシストフィギュアにもう一方のしずえさんの釣り針がかかっている!つまり、プレイヤー2人が同時に同じアイテムを拾おうとした場合と同じ状況なのではないか?
AiNI@日曜東タ-57a @aini_bellwood
だが少し待ってほしい。しずえさんのつりざおはもう少し複雑な処理を行っている。釣り針にアイテムを引っ掛けてから、自分のもとに釣り針を引き寄せることで、やっと拾った扱いになるのだ。
AiNI@日曜東タ-57a @aini_bellwood
つまり、 1.Bボタンを押し、つりざおを使用する 2.釣り針がアイテムに触れる 3.釣り針を戻す 4.釣り針が全て戻るとアイテムを拾った扱いになる という流れ。 通常はAボタンを押した時点で拾った扱いになる。
AiNI@日曜東タ-57a @aini_bellwood
2人のしずえさんが同時に同じアイテムを釣ろうとすると、おそらくこれが同時に起こるのだ。 つまり、 1.しずえさんAの釣り針がアイテムに触れる 2.しずえさんBの釣り針がアイテムに触れる 3.しずえさんAが釣り針を戻す 4.しずえさんBが釣り針を戻す…という感じ。
AiNI@日曜東タ-57a @aini_bellwood
実際の挙動を見ると、 1.しずえさんAの釣り針がアイテムに触れる 2.しずえさんAが釣り針を戻す 3.しずえさんBの釣り針がアイテムに触れる 4.しずえさんAがアイテムを取得する 5.しずえさんBが釣り針を戻す…という感じっぽい。
AiNI@日曜東タ-57a @aini_bellwood
おそらくこの処理5、しずえさんBが釣り針を戻す際に釣り針が外れ、しずえさんBは所有権を失っているはずだ。だがひょっとすると、ここで所有権をしずえさんAに戻す処理がないのかもしれない。だとすればそれがバグの原因だろう。
AiNI@日曜東タ-57a @aini_bellwood
アイテム所有権とアイテムが消滅しなくなる挙動に一体何の関係があるのか?それは、アイテムを消滅させられるのはアイテムの所有者だけである、とすることが多いからだ。
AiNI@日曜東タ-57a @aini_bellwood
1つのアイテムを同時に所有できるのは1人だけだ。であれば、そのアイテムに対して「アイテムを使ったのでこのアイテムは消滅しましたよ」という通知もまた、その所有者でなければ送れない。 所持したはずのアイテムが急に消えたりしては困るからだ。
AiNI@日曜東タ-57a @aini_bellwood
つまり…実際にアイテムを所持しているのはしずえさんAだが、しずえさんBが所有権を持っている。しずえさんAからホストに対し消滅通知が送られるが、ホストはこの消滅通知を受理せず、アイテムが消えないのではないか?
AiNI@日曜東タ-57a @aini_bellwood
使用したアイテムが消滅しなかった場合に何が起こるかはわからないのだが、少なくとも、再びアイテムを使用できてしまうことは間違いないようだ。さらに、アイテム使用コマンドがリセットされないなら、最短で無限にアイテムを使用し続けることになる。まさに確認された現象そのものだ!
AiNI@日曜東タ-57a @aini_bellwood
だがそれなら、しずえさんの釣り針以外ではこのバグが発生しないのはなぜだ?トレーニングでも発生するというのも不思議だ。所有権に関する問題はマルチプレイでしか発生し得ないのでは?
AiNI@日曜東タ-57a @aini_bellwood
後者の疑問については、おそらく実装上の理由によるものだろう。たしかにトレーニングなどのオフラインでのプレイならばアイテム所有権など気にする必要はないが、わざわざ処理を分離する必要もない。
AiNI@日曜東タ-57a @aini_bellwood
相手の所有権に関する通知を待つ必要などはないのだが、仕組み自体はオンラインのものをそのまま流用してしまって問題ないのだ。つりざおのようにオフラインでも所有権の取り合いになるケースもうまく処理できるはずだし(今回の場合は、できていなかったのだが)。
AiNI@日曜東タ-57a @aini_bellwood
前者の疑問についてはしずえさんの釣り針を使ったアイテム使用が通常のアイテム使用とは異なる処理であることが関係していると思われる。つまり、通常のアイテム取得ではとっくに修正されたバグが、特殊なアイテム取得処理を行うしずえさんのつりざおでのみ生き残っていたのではないだろうか。
残りを読む(6)

コメント

乙弥 誠志 @itsme_sage 12月19日
安楽椅子探偵か。プロしゅごい
しもべ @14Silicon 12月19日
ポケモンかなんかでそういうのみたな
胡上奈生(こがみん) @nowkogami 12月19日
ソーシャルデバッガ有能だわ
こねこのゆっきー @vicy 12月20日
すげー、よくわかるな。
rainy season @jkgkikllh 12月20日
推理小説読んでる気分なんかな、楽しそう。
静岡茶 @shizu_cha 12月20日
14Silicon 通信ケーブル使った増殖バグ?
ログインして広告を非表示にする
ログインして広告を非表示にする