マリオオデッセイジャンプロープチャレンジのMacGyvering

スーパーマリオオデッセイは、おそらく私のお気に入りのマリオゲームです。あまりにも多くのことで、最後のすべてのチャレンジを完了するために自分の邪魔にならないようにしました。しかし、そのうちの1つは、他のすべてのものを組み合わせた場合よりも多くのトラブルを引き起こしました。メトロキングダムの縄跳びの天才。

移動する必要さえありません。連続して100回ジャンプする必要があります。しかし、トリックは5回ジャンプするごとに50秒まで加速し、1秒に2回ジャンプするまでです。ジャンプを早すぎると失敗します。ジャンプを遅すぎると失敗します。ジャンプを長押しして…そして、あなたはそれを推測した、あなたは失敗する。

数十回の試みが失敗した後、私はそれを打ち負かすために何かを構築するだけだと冗談を言い始めました...そして日が経ち、チャレンジを完了していなかったので、冗談はより深刻になり、どのようにやる

私の最初の考えは、スイッチコントローラーのジャンプボタンのコネクターをブリッジするためにArduinoを単純にプログラムすることでしたが、ありがたいことに最初にiFixitの分解を確認しました。 (楽しみながら読むには、長年にわたる任天堂のコントローラーの進化をご覧ください)。

Joy-Conコントローラーの切り替え

ハッキングしやすい古いゲームキューブコントローラー(アダプター付き)を購入するか、スイッチコントローラーのボタンを物理的に押すためにソレノイドを使用するか、どちらも実行可能な解決策のように思えましたが、最初のいくつかのeBayで販売しているGameCubeコントローラーは、ソレノイドルートに決めました。

マリオでの836のユニークなチャレンジのうち835を完了した後、私は最後の月にすべての注意を向けました。それを打ち負かすために何かをプログラムするには、まずタイミングを測定する必要があるので、画面を記録してからフレームを数えることが意図されていました。カメラをセットアップする前に、いくつかの練習ラウンドを行いました。そして、恐ろしいことに、私は実際に合法的にそれを打ちました。

2週間かけて、私はそれを打つために何かをプログラムしようとしていることを知っていたので、ほとんどの人がそれをする言い訳を失いました。

しかし、大人であるため、時間とお金を無駄にする口実は本当に必要ないことに気づきました(それで私たちはほとんどすべてです)。

最初のステップは、Arduinoの使用方法を理解することでした。実際には非常に簡単でした。オンラインエディターとチュートリアルは非常に簡単で、いくつかの点滅するLEDをプログラミングした後、準備ができたと感じました。最大のハードルは実際にUSB-Bケーブルを見つけることでした。正直に言うと、誰がまだUSB-Bケーブルを使用しているのでしょうか?

2番目のステップは、タイミングを把握することでした。私は自分でそれを非常に難しくしました。私は頭上から記録することで賢く、女性の足を使ってフレームを揃えることができると思った、彼女の手が彼女の足に触れたとき、私はそれを革命と呼び、矢印キーを押してQuickTimeを苦労して踏み込んだ一度に1つ、2つ、3つ…68、69、70を数えます。

中央のフレームは、彼女の手を足に合わせて示しています

2番目の半分のステップは、ジャンプカウントがより信頼性の高い測定値であり、Final Cut Proが時間とフレームカウントを表示して、ビデオをすばやくスクラブできるようにすることでした。

Final Cut Pro

これを50回行い、すべての結果をスプレッドシートに入れてください。ジャンプロープを成功させる秘secretがあります。最後の50回のジャンプは? 0.58秒ごとに1つ実行する必要があります。

マリオジャンプロープチャレンジの計測タイミング

タイミングが完了したら、問題の電子的な半分に注意を向けました。幸運なことに、電子機器を理解している人(私は間違いなく)は、Arduinoでソレノイドを制御する方法を既に共有していました。

知らない人にとって、ソレノイドは実際には単なる円筒状のコイルであり、電流を流すと磁場が発生します。この名前は、ソレノイド(コイル部分)を使用してより複雑なことを行ういくつかのこと(この場合は小さな金属棒を押す)と交換可能です。電源をオンにすると、ロッドが押し出され、オフになり、スプリングが戻ります。

完成した回路

簡単なスイッチとソレノイドで回路を配線し、ループしてトリガーするプログラムを作成し、進行するタイミングを徐々に短くしました。スイッチを反転するとループが開始し、オフにするとリセットされます。

これにより、マリオを手動で所定の位置に動かし、スイッチを切り替えて開始できるようになり、また、めちゃくちゃになった場合に再試行する簡単な方法が得られます(これはよくあることです)。数時間後(そして弟からのヒントもあります)、私は正常に動作する回路ができました!

この時点で、私は基本的に成功を想定し、その後、現実が作動しました(むしろ、作動しました)。私の初歩では、ソレノイドはスイッチボタンを簡単に押すことができると思っていましたが、私が買ったのは3mmを動かして80グラムの力をかけることができる5Vソレノイドでした。ニュートン)。

私はコントローラーに対してそれを保持しました...そして何も。動きはなく、ボタンは動きを拒否しました。スイッチコントローラーを押すのにどれだけの力が必要かをグーグルで調べても結果は得られず、私の家の周りにはそれを測定するための優れたツールがありませんでした。

だから、良いツールは何もないので、悪いものを探しに行きました。

料理対策はどうですか?カップの3分の1を水で満たし、ボタンの上で動かないようにバランスを取りました。カップの半分に水を入れて、それが落ち込んだ。答えは、Joy-Conボタンには3〜0.5杯の水が必要だということです。

これらを実際の単位に戻すと、1カップ= 250 mlになります。メートル法について簡単なことは、重量が水の量から得られることです。 250 mlは250グラムであるため、私のJoy-Conは83グラムから125グラムの間で落ち込む必要がありました。

突然、私の80グラムソレノイドはそれほど電力不足に見えませんでした。私はそれが要求した5ボルトを与えていましたが、9ボルトの電源がありました。ソレノイドの磁力は電圧とともに増加するので(実際には電圧の2乗に比例して上昇します)、9ボルトで私のソレノイドは250グラムに近い値を印加する必要があります。

ステップ4では、ソレノイドをコントローラーに取り付けました。この部分の計画に私があまり考えなかったことを考えると、ソリューションがどれほど洗練されていないかは驚くことではありませんでした。いくつかの木材が他のボタンの上にそれを持ち上げ、いくつかの電気テープが木材を所定の位置に保持し、ゴムバンドがソレノイドを所定の位置に保持しました。

私はついにすべてをテストにかける準備ができました。私はメトロキングダムにワープし、挑戦に駆け寄り、私の独善的な成功の甘い栄光に浸る準備をしました。

そしてほとんどすぐに失敗しました...私のタイミングは間違っていました。コード内のタイミングのいくつかを手動で微調整し、マリオを86にかなり確実に到達するまで、さらに近づき、近づき、近づきました。

その時点で、ランダムに物事を微調整する代わりに、私はそれを再生して記録し、Final Cut Proに戻ってフレームを再カウントしました(今回は、5つのジャンプセグメントごとにロープが近づいている/遠いフレームの数に焦点を当てています)マリオは常に50に達していたため、変更が必要なのは50以上のタイミングだけでした。 35.2フレームごとにジャンプに減らして、再試行しました。

成功! 261ジャンプ。これは大きな勝利のように感じました。ビデオでは、102回のジャンプという私のわずかな人間の努力を簡単に打ち負かしています。私はすぐに妻に目を覚まし、それがいかにクールであるかを説明しようとしました。

しかし、それはロボットです。なぜ261を制限すべきなのですか?なぜ完璧ではないのですか?私は再びフレームを分析し、ロープがマリオに非常にゆっくりと追いついていることに気づきました、彼はより速く行く必要がありました!

ジャンプのタイミング、平均が測定され、実際はコードに含まれるもの

35.2フレームごとのジャンプから35.15フレームごとのジャンプへのタイミングの短縮(わずか0.14%の変更)により、マリオの成功率が大幅に向上しました。

非常に成功したため、失敗するまで35分21秒間、腹立たしいマリオジャンプロープチャレンジをプレイすることができました。3613という新しい高得点(私にとって)を設定しました。

最初はタイミングがいつのまにか外れているため失敗したと思っていましたが、ビデオを詳しく見ると、それが長押しされるまで完全に同期が保たれていました。コンピューターが人間のミスを犯すのは、短いクイックジャンプを行うのではなく、ボタンを長押ししてマリオを高くしすぎたため、適切なタイミングでジャンプしましたが、着陸が遅れました。

実際には、貧弱なソレノイドが過熱していたため、夜の早い時間にプレイを停止していたタイミングで遊んでいたときに、ほぼ2倍の電圧で駆動することが問題だったと思います。ビデオでは、ジャンプ中に正しいタイミングで2回押したことがわかります。

コードについては?それが最も簡単な部分でした。わずか76行のコードで、マリオを私より上手くプレイできます

簡単にするために、ジャンプ間のフレーム数ですべてのタイミングを測定しました。ビデオ内のフレームを簡単にカウントし、60で割ってそれを秒に変えることができました。

コードは、チャレンジが開始された時点から推測航法を使用してすべてを計算しますが、単一のジャンプをトリガーする際の不正確さは平均化されると想定しました。コードはすべてのループで、次のジャンプまでの経過時間をミリ秒単位で計算し、そのしきい値に達するとソレノイドをオンにします。リセットの前にソレノイドをオンに保つ期間が短い(長押しを避けるために短くする必要がある場合があります)。

それだけです...ジャンプの挑戦の性質を考えると、ほぼばかげてシンプルで、ぴったりです。

もう一度試すことはできましたが、1回の試行あたり約40分で十分に興味がありません。また、少し違う方向ではありますが、誰かが私よりも一歩進んだことを発見しました。

コントローラーのボタンを物理的に押す代わりに、ライブラリーを使用して、コントローラーであることをシミュレートして、簡単に信号を送信できるようにします。私と同じタイミングの課題に遭遇したとき(失敗する前に数百回しかジャンプしなかった-最終ジャンプに35.18の定数を使用していた)、ビデオ信号をプログラムで監視し、スコア領域とそれが変化したときをチェックすることでそれを解決しました別のジャンプをします。この方法では、最大スコア99,999に到達できます!

あなたはこのすべてで私がゲームで最高のスコアの1つを持っていると思うだろう...あなたは間違っているだろう!たった1週間前に私はおそらくトップ100にいるだろうが、誰でもこのチャレンジをグリッチできるバグがゲームで発見された。ほとんど努力せずに無制限のジャンプを得ることができ、10,000人以上がそうしている。おそらく、任天堂がこれにパッチを当ててスコアボードをリセットすると、ソレノイドを再び消し去りますが、コントローラー自体だけを使用してゲームをプレイするための何かを構築できると思います。