MacGyvering die Mario Odyssey Springseil Challenge

Super Mario Odyssey ist wahrscheinlich mein Lieblingsspiel von Mario. So sehr, dass ich mir alle Mühe gegeben habe, jede letzte Herausforderung zu meistern. Aber einer von ihnen hat mir mehr Probleme bereitet als alle anderen zusammen: Jump-Rope Genius im Metro Kingdom.

Sie müssen sich nicht einmal bewegen. Sie müssen nur 100 Mal hintereinander erfolgreich springen. Aber der Trick ist, dass alle fünf Sprünge bis zu 50 beschleunigt werden, bis Sie fast zweimal pro Sekunde springen. Drücken Sie die Sprungtaste zu früh und Sie scheitern. Drücken Sie die Sprungtaste zu spät und Sie scheitern. Drücken Sie zu lange auf Sprung und ... Sie haben es erraten, Sie scheitern.

Nach ein paar Dutzend fehlgeschlagenen Versuchen fing ich an zu scherzen, dass ich nur etwas bauen würde, um es für mich zu schlagen ... und als die Tage vergingen und ich die Herausforderung immer noch nicht beendet hatte, wurde mein Scherz ernster und ich begann mich zu fragen, wie ich es machen sollte Tu es.

Mein erster Gedanke war, einfach ein Arduino zu programmieren, um die Anschlüsse für die Sprungtaste eines Switch-Controllers zu überbrücken, aber zum Glück habe ich zuerst den iFixit-Teardown überprüft, da Nintendo-Controller seit der Wii Dome-Schalter anstelle der leitfähigen Gummipads verwenden, was dies unmöglich macht (Für ein bisschen Spaß beim Lesen sehen Sie die Entwicklung der Nintendo-Controller im Laufe der Jahre).

Ich habe mich mental zwischen dem Kauf eines älteren GameCube-Controllers (mit Adapter), der leicht zu hacken ist, oder der Verwendung eines Solenoids zum physischen Drücken einer Taste auf einem Switch-Controller geworfen. Beide schienen praktikable Lösungen zu sein, aber nachdem ich bei den ersten überboten worden war GameCube-Controller, die bei eBay verkauft werden Ich habe mich für die Magnetroute entschieden.

Nachdem ich 835 der 836 einzigartigen Herausforderungen in Mario abgeschlossen hatte, wandte ich meine ganze Aufmerksamkeit wieder dem letzten Mond zu. Um etwas zu programmieren, um es zu schlagen, musste ich zuerst das Timing messen, also war meine Absicht, den Bildschirm aufzuzeichnen und dann die Frames zu zählen. Bevor ich eine Kamera aufstellte, legte ich ein paar Übungsrunden ein, und zu meinem Entsetzen schlug ich das Ding tatsächlich legitim.

Nachdem ich zwei Wochen damit verbracht hatte, allen zu sagen, dass ich etwas programmieren würde, um es zu schlagen (und die meisten von ihnen verspotten zu lassen), war es ziemlich enttäuschend, die Ausrede dafür zu verlieren.

Als Erwachsener wurde mir jedoch klar, dass ich keine Entschuldigung brauchte, um meine Zeit und mein Geld zu verschwenden (das ist so ziemlich alles, was wir tun). Deshalb bestellte Express ein Arduino und die notwendigen Komponenten, um mein Projekt zu starten.

Der erste Schritt bestand darin, herauszufinden, wie man ein Arduino benutzt, was eigentlich ziemlich einfach war. Der Online-Editor und die Tutorials sind super einfach, und nachdem ich ein paar blinkende LEDs programmiert hatte, fühlte ich mich bereit zu gehen. Die größte Hürde bestand darin, tatsächlich ein USB-B-Kabel zu finden, denn ehrlich gesagt, wer nutzt diese noch?

Der zweite Schritt bestand darin, das Timing herauszufinden, und ich machte es mir beeindruckend schwer. Ich dachte, ich wäre schlau, wenn ich aus der Draufsicht aufnehme, und könnte den Fuß der Frau verwenden, um Rahmen auszurichten. Wenn ihre Hand ihren Fuß berührte, würde ich das eine Revolution nennen, und ich ging akribisch durch QuickTime und drückte die Pfeiltasten, um Schritt a zu machen Bild zu einer Zeit und zählen eins, zwei, drei ... achtundsechzig, neunundsechzig, siebzig .

Der zweite und halbe Schritt bestand darin, zu erkennen, dass die Sprunganzahl ein zuverlässigeres Maß ist und dass Final Cut Pro mir die Zeit- und Bildanzahl anzeigt, sodass ich das Video sehr schnell durchsuchen kann.

Tun Sie dies 50 Mal… und schreiben Sie alle Ergebnisse in eine Tabelle, und Sie haben das Geheimnis für den Erfolg von Jump-Rope. Diese letzten 50 Sprünge? Sie müssen alle 0,58 Sekunden eine durchführen.

Nachdem das Timing abgeschlossen war, wandte ich mich der elektronischen Hälfte des Problems zu, und glücklicherweise hatte jemand, der die Elektronik versteht (ich definitiv nicht), bereits mitgeteilt, wie man einen Magneten mit einem Arduino steuert.

Für diejenigen, die es nicht wissen, ist ein Magnet eigentlich nur eine zylindrische Drahtspule, die beim Durchlaufen eines Stroms ein Magnetfeld erzeugt. Der Name ist austauschbar mit einigen Dingen, bei denen Magnetspulen (das Spulenteil) verwendet werden, um etwas Komplexeres zu tun. In diesem Fall drücken Sie einen kleinen Metallstab. Schalten Sie die Kraft ein und die Stange drückt heraus, schalten Sie sie aus und die Feder bewegt sie zurück.

Ich verdrahtete eine Schaltung mit einem einfachen Schalter und einem Magneten und schrieb ein Programm, das sie durchlief und auslöste und das Timing im Verlauf schrittweise verkürzte. Durch Umlegen des Schalters wird die Schleife gestartet und durch Ausschalten zurückgesetzt.

Dies würde es mir ermöglichen, Mario manuell in Position zu bringen und den Schalter zu betätigen, um zu starten, und mir auch eine einfache Möglichkeit zu geben, es erneut zu versuchen, wenn ich es vermasselt hätte (was ich oft erwartet hatte). Nach ein paar Stunden (und ein paar Tipps von meinem Bruder) hatte ich einen Arbeitskreis!

Zu diesem Zeitpunkt hatte ich im Grunde genommen Erfolg angenommen, und dann trat die Realität ein (oder besser gesagt, trat mich ein). In meiner Naivität hatte ich angenommen, dass der Magnet einen Schaltknopf trivial drücken könnte. Der von mir gekaufte war ein 5-V-Magnet, der sich 3 mm bewegen und 80 Gramm Kraft aufbringen konnte, was viel zu sein schien (es ist tatsächlich weniger als ein einziger Newton).

Ich hielt es gegen den Controller und ... nichts. Keine Bewegung, der Knopf lehnte die Bewegung ab. Das Googeln, wie viel Kraft zum Drücken eines Switch-Controllers benötigt wird, ergab keine Ergebnisse, und in meinem Haus hatte ich keine guten Werkzeuge, um es zu messen.

Da ich keine guten Werkzeuge hatte, suchte ich nach schlechten.

Was ist mit Kochmaßnahmen? Ich füllte 1/3 einer Tasse mit Wasser und balancierte das über einem Knopf, keine Bewegung. Ich füllte eine halbe Tasse mit Wasser und es drückte. Es gibt also Ihre Antwort: Ein Joy-Con-Knopf benötigt zwischen einer dritten und einer halben Tasse Wasser.

Wenn Sie diese wieder in reale Einheiten umwandeln, ist 1 Tasse = 250 ml. Das einfache am metrischen System ist, dass das Gewicht aus dem Wasservolumen abgeleitet wird. 250 ml sind 250 Gramm, daher brauchte meine Joy-Con zwischen 83 Gramm und 125 Gramm, um sie zu drücken.

Plötzlich schien mein 80-Gramm-Magnet nicht mehr so ​​schwach zu sein. Was wäre, wenn ich ihn überwältigen würde? Ich gab ihm die 5 Volt, die er verlangte, aber ich hatte eine 9 Volt Stromversorgung. Die Magnetkraft eines Solenoids nimmt mit der Spannung zu (tatsächlich steigt sie mit dem Quadrat der Spannung an). Bei 9 Volt sollte mein Solenoid näher an 250 Gramm anliegen, oder, wie ich gerne darüber nachdenke, 1 Tasse Wasser!

Schritt vier umfasste das Anbringen des Magneten an der Steuerung. Angesichts der geringen Überlegungen, die ich zur Planung dieses Teils angestellt hatte, war es keine Überraschung, wie unelegant die Lösung war. Ein paar Holzstücke hoben es über die anderen Knöpfe, ein paar Klebebandstücke hielten das Holz an Ort und Stelle, und ein Gummiband hielt den Magneten in Position.

Ich war endlich bereit, alles auf die Probe zu stellen, machte mich auf den Weg ins Metro Kingdom, stellte mich der Herausforderung und bereitete mich darauf vor, mich in der süßen Pracht meines selbstgefälligen Erfolgs zu aalen.

Und fast sofort gescheitert ... Mein Timing war falsch. Ich habe einige der Timings in meinem Code manuell angepasst und Mario näher, wieder näher und noch näher gebracht, bis er ziemlich zuverlässig auf 86 kommen konnte.

Zu diesem Zeitpunkt habe ich, anstatt die Dinge zufällig zu optimieren, die Wiedergabe aufgezeichnet und bin zu Final Cut Pro zurückgekehrt, um die Bilder zu erzählen (diesmal mit dem Schwerpunkt darauf, wie viele Bilder näher / weiter das Seil pro 5-Sprung-Segment kam), und während ich ein wenig daneben war Ein paar Plätze, da Mario immer 50 wurde, war das einzige, was geändert werden musste, das Timing von 50+. Ich reduzierte es alle 35,2 Frames auf einen Sprung und versuchte es erneut.

Erfolg! 261 Sprünge. Das fühlte sich wie ein großer Sieg an, wie Sie im Video sehen können, hat es meine magere menschliche Anstrengung von 102 Sprüngen leicht übertroffen. Ich ging sofort und weckte meine Frau und versuchte zu erklären, wie cool es war, und als mir das nicht viel Anerkennung einbrachte, griff ich zu meinem Bruder, der viel besser beeindruckt war.

Es ist jedoch ein Roboter, warum sollte 261 eine Grenze sein? Warum kann es nicht perfekt sein? Ich analysierte die Rahmen erneut und bemerkte, dass das Seil Mario so langsam einholte, dass er schneller gehen musste!

Die Reduzierung des Timings von einem Sprung alle 35,2 Frames auf einen alle 35,15 Frames (eine Änderung von nur 0,14%) führte zu einem viel erfolgreicheren Mario.

So erfolgreich, dass es 35 Minuten und 21 Sekunden lang die wütende Mario Jump-Rope-Herausforderung bestehen konnte, bevor es fehlschlug… einen neuen Highscore (für mich) von 3613 zu erzielen.

Zuerst nahm ich an, dass es fehlgeschlagen war, weil mein Timing immer noch nicht unmerklich war, aber bei näherer Betrachtung des Videos blieb es perfekt synchron, bis es… lange gedrückt wurde! Was für ein menschlicher Fehler für einen Computer, anstatt einen kurzen schnellen Sprung zu machen, hielt er den Knopf zu lang und schickte Mario zu hoch. Er sprang zur richtigen Zeit, landete aber spät.

Tatsächlich denke ich, dass es so war, dass der arme Magnet überhitzt war, früher in der Nacht, während ich mit Timings spielte, die ebenfalls nicht mehr liefen. Ich denke, es war problematisch, ihn mit fast der doppelten Spannung zu fahren. Im Video können Sie sogar sehen, dass es während des Sprunges zum richtigen Zeitpunkt ein zweites Mal gedrückt hat.

Wie für den Code? Das war der einfachste Teil. Nur 76 Codezeilen können Mario besser spielen als ich

Der Einfachheit halber habe ich alle Timings in der Anzahl der Bilder zwischen den Sprüngen gemessen. Ich konnte die Bilder im Video leicht zählen und dann einfach durch 60 teilen, um daraus Sekunden zu machen.

Der Code berechnet alles mit Hilfe von Dead Reckoning ab dem Zeitpunkt, an dem die Herausforderung gestartet wurde. Ich ging davon aus, dass Ungenauigkeiten beim Auslösen eines einzelnen Sprungs einen Durchschnitt ergeben würden. In jeder Schleife berechnet der Code, wie viele Millisekunden vor dem nächsten Sprung vergangen sein sollten, und wenn dieser Schwellenwert erreicht ist, wird der Magnet eingeschaltet. Es gibt eine kurze Zeit, in der der Magnet vor dem Zurücksetzen eingeschaltet bleibt (möglicherweise musste er kürzer sein, um ein langes Drücken zu vermeiden).

Und das war's ... fast dumm einfach, passend angesichts der Art der Springherausforderung.

Ich könnte es noch einmal versuchen, aber bei fast 40 Minuten pro Versuch bin ich einfach nicht interessiert genug. Außerdem habe ich seitdem festgestellt, dass jemand einen Schritt besser als ich gegangen ist, wenn auch in eine etwas andere Richtung.

Anstatt eine Taste auf ihrem Controller physisch zu drücken, verwenden sie eine Bibliothek, um zu simulieren, dass sie ein Controller sind, der es ihnen ermöglicht, trivial Signale zu senden. Als sie auf die gleiche Timing-Herausforderung stießen wie ich (nur ein paar hundert Sprünge, bevor sie versagten - sie verwendeten die Konstante 35,18 für ihre letzten Sprünge), lösten sie dies, indem sie das Videosignal programmgesteuert überwachten, den Score-Bereich überprüften und wann er sich änderte mach einen weiteren Sprung. Mit dieser Methode können sie die maximale Punktzahl von 99.999 erreichen!

Sie würden bei all dem denken, dass ich eine der höchsten Punktzahlen im Spiel hätte… Sie würden sich irren! Noch vor einer Woche war ich wahrscheinlich unter den Top 100, aber im Spiel wurde ein Fehler entdeckt, der es jedem ermöglicht, diese Herausforderung zu bewältigen. Fast ohne Anstrengung können Sie unbegrenzte Sprünge erzielen, und über 10.000 Menschen haben dies jetzt getan. Wenn Nintendo dies patcht und die Anzeigetafel zurücksetzt, werde ich meinen Magneten wieder abstauben. Ich denke, wenn Sie etwas bauen können, um das Spiel nur mit dem Controller selbst zu spielen, dann ist das irgendwie legitim.