「“壺おじ”の動きがうまく再現できない」と悩むユーザー投稿にまさかの“本人解説”が寄せられ話題に。「ソースコードお披露目」付き丁寧レクチャー

『Getting Over It with Bennett Foddy』の挙動の再現に悩んでいるユーザーのもとに、なんと制作者本人が現れ解説する事態が発生し、話題となっている。

Googleでお気に入り登録

あるユーザーによる「Bennett Foddy氏はどうやって“壺おじ”のハンマーの挙動を作ったのだろう?」と問いかける投稿が話題となっている。なんと開発者であるBennett Foddy氏本人が現れ、自ら解説をおこなったのだ。

『Getting Over It with Bennett Foddy(以下、Getting Over It)は、非常に困難な操作性のキャラクターで山を登っていくゲームである。中間ポイントのようなものはなく、操作を誤って落ちてしまえば同じ場所を登り直さなければならない。プレイヤーが操作するのは下半身が大釜にハマり、両手にハンマーを握りしめた男性だが、語呂の良さからか「壺おじ」と呼ばれ親しまれている。ひとたび落ちたら無情にも戻されてしまうという仕組みは『Jump King』『Only Up!』など多くのゲームに受け継がれ、「苦行系」とも呼ばれるジャンルの元祖としても知られる作品だ。

海外掲示板Redditのユーザーで開発者と思しきDiligent_Ad_6530氏は、そんな「壺おじ」の挙動を再現しようと試みていたようだ。しかし、ハンマーが地面に接している時とそうでない時や、高速で動いているときの勢いや弾み方など、試行錯誤を重ねても思ったような動きにはならなかったという。別のユーザーが実装したものをリバースエンジニアリングで解析しようと試みたものの、うまくいかなかったようだ。

そこで同氏は、Redditのプログラミングについての話題が集まるサブレディット「r/howdidtheycodeit」に先述のような事情を書き込み、助けを求めることにした。すると「全部を思い出すのは難しいけれど」という前置きとともに、長文の返信が寄せられた。ほかでもない、制作者のBennett Foddy氏本人による解説だ。

解説は「IKは見た目だけで、機能的なものではない」と始まる。IK、つまり逆運動学(Inverse Kinematics)は、ロボット工学や3Dアニメーションなどに用いられる技術で、手足などの先端部分が目標の位置に到達するには各関節をどのくらい曲げれば良いかを計算するものである。『Getting Over It』において、壺おじは両腕を曲げ伸ばししてハンマーを動かすが、その腕の曲がり具合は壺おじの挙動には関わっていないというのだ。

壺おじは実際には、基点となる部分(ルートボディ)に見えない物体(ボディ)が角度が変わるつなぎ目(ヒンジジョイント)を介して繋がっているという。そしてボディはハンマーの先端部分と長さの変わるつなぎ目(スライダージョイント)で接続する、という構造になっているようだ。

また、壺そのものも回転範囲が制限されたヒンジジョイントに取り付けられていて、ルートボディにつながっていたとのこと。ただこちらに関しては「たしかそうだったと思う」といったニュアンスである。実際には、以下のような順で接続されているのだという:

[壺]-[回転範囲が制限されたヒンジジョイント]-[壺おじボディ]-[ヒンジジョイント]-[不可視のボディ]-[スライダージョイント]-[ハンマー先端]

各ジョイントのモーターは、ハンマーの先端とマウスカーソルの間の距離や角度に基づいて制御される。制御には単純なPDコントローラー(比例・微分制御器)が用いられている。これはマウスカーソルを素早く離せば一気に加速するが、ジョイントの移動速度に応じて減速処理もおこなわれるというもの。また、カメラが動いたときにマウスカーソルがどのように追従するかというロジックも存在し、カメラの動きによりハンマーが勝手に動いてしまうことを防いでいるという。

そうした一連の構造とは別に、Bennett氏が特に気を配ったのが計算式の「調整」である。何度も調整を変えながら、「ハンマーを横に突き出して引っかかった時に、マウスを動かすのをやめたらそのまま静止する」「ホッピングのように跳ねて一定の高さまで到達する」「バーベキューコンロをスムーズに飛び越せる」「ハンマーを地面に押し付けて、跳ねずにスムーズに身体を持ち上げられる」といったひとつひとつの動作を実現したいと考えていたそうだ。

Bennett氏は実際のソースコードから「fixedupdate」と呼ばれる関数の全体を紹介しており、その中には「0をかける」「数値を何乗かする」といった処理も散見される。これらは、しっくりとする挙動となるまでに何度も数式をいじり回した名残りとのこと。最終的に理想の動作となった時点で書き直すべきだったのかもしれないが、結局やることはなく、正直恥ずかしいくらいだとも述懐している。多くのプレイヤーに親しまれた壺おじの動きは、数え切れぬほどの調整を重ねられてようやく完成した絶妙なバランスだったというわけだ。

まさかの御本人登場に、コメント欄には「what a legend(まさに伝説)」「Fucking based(マジで最高)」のような書き込みが相次ぎ、大盛り上がりとなっている。開発者直々の知見の共有をありがたいとするコメントが多くみられる一方、そうした有名人も試行錯誤し、その“痕跡”も残されている様子には、共感するコメントも散見される。Bennett氏がソースコードの一部をお披露目したことで「安心した」とするユーザーも見られるほか、大ヒットゲーム『Balatro』でif文を多用した“力業”の実装に共感が寄せられるといった例もある(関連記事)。輝かしい成功の裏には、往々にして人間臭い努力があるものなのかもしれない。

何かを作っていて行き詰まってしまった時には、思い切って悩みを共有したり教えを乞うたりすることで解決に近づくこともある。一歩を踏み出して質問したDiligent_Ad_6530氏は、製作者本人からのコメントを受けたことで実装に再挑戦するようだ。同氏の今後の報告にも注目したい。

『Getting Over It with Bennett Foddy』はPC(Steam)/iOS/Android向けに配信中だ。

この記事にはアフィリエイトリンクが含まれる場合があります。

Googleでお気に入り登録
Naoto Morooka
Naoto Morooka

1000時間まではチュートリアルと言われるようなゲームが大好物。言語学や神話も好きで、ゲームに独自の言語や神話が出てくると小躍りします。

記事本文: 417