ゼルダの「赤い月」強制発生はバグではなく仕様?エラーが起こったとき世界観を崩さずリセットをかけているのでは、という話

ティアキン、やること大杉でぜんぜん終わらん
121
Izu@ゲームプログラマが語る @pastel_orbit

某大手ゲーム会社エンジニアマネージャー ゲームプログラマ 趣味はインディーズゲーム制作。クライアント・サーバー全て一人開発 料理とバイクも大好きです 新作「水の星と魔女」 instagram.com/izu_pastelorbit 前作「隣人は魔王」 my-neighbor-lucifer.jimdofree.com

iapp7.blog29.fc2.com

Izu@ゲームプログラマが語る @pastel_orbit

ゼルダ。バグで「赤い月を任意に起こせる」話にどんな実装やん。。。と驚いていたけれど、最近の検証動画で良くわかった error handlerに赤い月仕込むのリードプログラマ天才過ぎるw youtube.com/watch?v=EiTlaD… #ティアキン #ゼルダの伝説

2023-06-20 00:56:31
拡大
Izu@ゲームプログラマが語る @pastel_orbit

もの凄くシンプルに言うと、ゼルダほど物理エンジンをちゃん昇華させたゲームはあんまりなくて(過去ログ参照)、どんな挙動をするか完全に想定出来ない ↓

2023-06-20 00:59:10
Izu@ゲームプログラマが語る @pastel_orbit

イコール、全ての挙動なんてとってもじゃないけれどデバッグ出来ない ↓ それが物理エンジンゲームメカニクスの良い所&悪い所 ↓

2023-06-20 01:00:34
Izu@ゲームプログラマが語る @pastel_orbit

ここで、リードプログラマが仕込む選択肢は二つ エラーを無視して進行させるか、 「想定外のエラーが起きたら、中断」 これは、バグフリーズで「問題が起きました。起動画面に戻ります」と同じ 致命的なエラーが起きた場合こうなります しかしゼルダは凄かった ↓

2023-06-20 01:04:14
Izu@ゲームプログラマが語る @pastel_orbit

置いてはいけないオブジェクトを無限に置けたり色々バグだらけなのだけれど、その結果「問題が起こりました」ではなく「赤い月」へ飛ばしている このイベントを経るとメモリはガベージコレクトどころかアプリ再起動に匹敵する強制エラーハンドラ ↓

2023-06-20 01:07:29
Izu@ゲームプログラマが語る @pastel_orbit

世界感を壊さない素晴らしい実装だと思う 恐らく、エンジニアが提案したのでしょう。普通のディレクターならNGを出すでしょう(めっちゃバグですからね) が、ユーザーの爆発的増加を見越したチームとしての判断なのでしょう すごいゲームですが、すごいすごいチームです

2023-06-20 01:11:50
Izu@ゲームプログラマが語る @pastel_orbit

あ、ちなみに、本投稿は全部僕の妄想です youtuberさんの検証動画を拝見し、勝手に閃いただけです まあ間違い無いでしょうが、一応僕の妄想です

2023-06-20 01:14:32
いしたにまさき / HHKB用ふせんポケット付パームレスト発売中⌨️ @masakiishitani

ゼルダの赤い月って、こういうことだったのか!! 天才すぎるだろ、、、、 twitter.com/pastel_orbit/s…

2023-06-20 09:48:41
🎲 ウェブ屋社長Yoshi 🎲 @hachidaime

これはなるほどと思った。 単なる一つのイベントとしてしかとらえてなかったけど、そうなのかも。 twitter.com/pastel_orbit/s…

2023-06-20 12:33:32
みちばな @mswar777

あ〜、エラー/例外処理でアサート→再起動でなく、赤い月(グレートリセット)に飛ばしてるのか〜!?なるほどな〜 twitter.com/pastel_orbit/s…

2023-06-20 09:22:27
KebDev @kebby_devvy

これは確かにすごい、世界観を崩さないままリセットかけてるのか…(推測ではあるけど)! twitter.com/pastel_orbit/s…

2023-06-20 12:22:19
安納うん(うやむ屋) @Unnouunn

タイトルバック相当の強烈なリセットを世界観に仕込めばエラー画面を出さずにゲーム内で完結できるのかすごいな twitter.com/pastel_orbit/s…

2023-06-20 10:00:31
poipoi @peeping_poipoi

おお、めちゃくちゃ面白いこれ。 エラーハンドリングをどう物語に融合させるか。全部署間でゲームの世界観を担ってる意識が共有できてないと出来ない解決策。 twitter.com/pastel_orbit/s…

2023-06-20 09:11:41
つっきー @geturen565

バグ取り切るの無理だから演出にしちゃったのか これはすごいな twitter.com/pastel_orbit/s…

2023-06-20 18:32:00
かずや18歳💉💉💉💉たけのこ派 @kazuya78

あれがオブジェクトのリセットなのは前作の頃からわかってたけど、何でも出来るゲーム故の回復不可能な問題がゲーム中で発生したときにすべてを無かったことにするためにも呼び出してたのね。 twitter.com/pastel_orbit/s…

2023-06-20 13:23:02
わたなべごう @wtnbgo

あー。なるほどメモリエラーとか問題おきたら全体クリーン化として発動するように仕込んであるのか。バグじゃなくて仕様、と。考えた人たしかにえらい twitter.com/pastel_orbit/s…

2023-06-20 21:11:40
吉田 泰博 @yashyoshida

なるほど。サーバーだけでなくクライアントでも、メモリ増えすぎたら強制リセット的な対処は有効。 twitter.com/pastel_orbit/s…

2023-06-20 07:23:07
Holey@駆け出しエンジニアの残党 @holey_dev

世界観を壊さないエラーハンドリング。 生真面目に「エラーです」って表示するだけが全てじゃないんだなあ。 twitter.com/pastel_orbit/s…

2023-06-20 08:20:28
Junichi Okamura @benzookapi

Unityとか触ってて思うけど、物理エンジンのプログラミングってウェブプログラミングと全く違うアプローチできて面白い。こんなエラーハンドリング、神そのものじゃん😂(もし予想どおりなら) twitter.com/pastel_orbit/s…

2023-06-20 09:13:49
itachi @itachinho

なるほどガベージコレクタか 想定外のオブジェクトやらがあったとしても、世界観を壊さずリセットさせるのは上手いやり方だなー twitter.com/pastel_orbit/s…

2023-06-20 12:47:30
もちぷらす @mochi_plus

これ興味深いよなと。 ガベージコレクトとエラーハンドラを共用するのは、おそらくそれしかないのだろうな、という気もする 天才的な発想、というより、「それはそうよね」感のほうがちょっと強い twitter.com/pastel_orbit/s…

2023-06-20 12:34:13
Munechika Nishida @mnishi41

素晴らしい。見事なゲーム体験最優先実装。 twitter.com/pastel_orbit/s…

2023-06-20 09:51:43
KAA @KAA_4000

@pastel_orbit @maybamu 最悪の最悪を避けるための苦渋の決断だろうね

2023-06-20 11:50:10