de Antin Harasymiv

MacGyvering Mario Odyssey Jump-Rope Challenge

Super Mario Odyssey este posibil jocul meu preferat de Mario. Atât de mult încât m-am străduit să îndeplinesc fiecare ultimă provocare. Dar unul dintre ei mi-a dat mai multe probleme decât toate celelalte combinate: Jump-Rope Genius în Regatul Metro.

Nici nu trebuie să te miști. Trebuie doar să sari cu succes de 100 de ori succesiv. Dar trucul este că la fiecare cinci salturi se accelerează până la 50, până când sari aproape de două ori pe secundă. Apăsați salt prea devreme și nu reușiți. Apăsați salt prea târziu și nu reușiți. Apăsați pe Salt pentru prea mult timp și … ați ghicit, eșuați.

După câteva zeci de încercări nereușite, am început să glumesc că aș construi ceva pentru mine … și, pe măsură ce treceau zilele și încă nu terminasem provocarea, gluma mea a devenit mai serioasă și am început să mă întreb cum să Fă-o.

Primul meu gând a fost să programez pur și simplu un Arduino pentru a conecta conectorii pentru butonul de salt de pe un controler Switch, dar din fericire am verificat iFixit demolare mai întâi, deoarece controlerele Nintendo, de când Wii folosesc comutatoare dom în locul tampoanelor de cauciuc conductive, ceea ce face acest lucru imposibil (pentru o lectură distractivă, consultați evoluţie de controlere Nintendo de-a lungul anilor).

MacGyvering Mario Odyssey Jump Rope Challenge
Comutați controlerul Joy-Con

Răsturnam mental între cumpărarea unui controler GameCube mai vechi (cu adaptor) care ar fi ușor de spart sau folosind un solenoid pentru a apăsa fizic un buton pe un controler Switch, ambele păreau soluții viabile, dar după ce am obținut primele câteva Controlere GameCube care vând pe eBay M-am stabilit pe ruta solenoidului.

După ce am finalizat 835 din cele 836 de provocări unice din Mario, mi-am îndreptat toată atenția înapoi pe luna finală. Pentru a programa ceva care să-l învingă, mai întâi ar trebui să măsoar timpul, așa că intenția mea a fost să înregistrez ecranul și apoi să număr numarul de cadre. Înainte de a configura o cameră, am introdus câteva runde de antrenament și, spre groaza mea, am învins lucrul în mod legitim.

1611922090 225 MacGyvering Mario Odyssey Jump Rope Challenge
1611922090 570 MacGyvering Mario Odyssey Jump Rope Challenge

După ce am petrecut două săptămâni spunându-le tuturor că știam că voi programa ceva pentru a-l învinge (și ca majoritatea să-și bată joc), pierzând scuza pentru a face acest lucru a fost destul de dezamăgitor.

Cu toate acestea, fiind adult, mi-am dat seama că nu aveam nevoie de o scuză pentru a-mi pierde timpul și banii (cam atât facem asta), așa că express a comandat un Arduino și componentele necesare pentru a-mi începe proiectul.

1611922091 562 MacGyvering Mario Odyssey Jump Rope Challenge
1611922092 995 MacGyvering Mario Odyssey Jump Rope Challenge

Primul pas a fost să îmi dau seama cum să folosesc un Arduino, care … a fost destul de simplu, editorul online și tutorialele sunt foarte ușoare și, după ce am programat câteva LED-uri intermitente, m-am simțit gata să plec. Cel mai mare obstacol a fost de fapt găsirea unui cablu USB-B pentru că sincer cine le mai folosește?

Al doilea pas a fost să-mi dau seama de momentul și am făcut-o impresionant de dificilă pentru mine. Am crezut că sunt deștept înregistrând din imaginea de sus și că aș putea folosi piciorul femeii pentru a alinia cadrele, când mâna ei i-a atins piciorul Aș numi asta o revoluție și am trecut cu grijă prin QuickTime apăsând tastele săgeată pentru a trece un cadru la un moment dat și numărând unu, doi, trei … șaizeci și opt, șaizeci și nouă, șaptezeci.

MacGyvering Mario Odyssey Jump Rope Challenge
Cadrul din mijloc arată mâna aliniată cu piciorul

Al doilea pas și jumătate a fost să-mi dau seama că numărul de salturi era o măsură mai fiabilă și că Final Cut Pro îmi arăta timpul și numărul de cadre, permițându-mi să scobesc rapid filmul.

1611922093 109 MacGyvering Mario Odyssey Jump Rope Challenge
Final Cut Pro

Faceți acest lucru de 50 de ori … și puneți toate rezultatele într-o foaie de calcul și aveți secretul succesului Jump-Rope. Ultimele 50 de salturi? Trebuie să faceți una la fiecare 0,58 secunde.

1611922094 933 MacGyvering Mario Odyssey Jump Rope Challenge
Timpuri măsurate pentru provocarea Mario Jump-Rope

Odată terminate, mi-am îndreptat atenția asupra jumătății electronice a problemei și, din fericire, cineva care înțelege electronica (cu siguranță nu o fac) a avut deja impartit cum se controlează un solenoid cu un Arduino.

Pentru cei care nu știu, un solenoid este într-adevăr doar o bobină cilindrică de sârmă care, atunci când treceți un curent, produce un câmp magnetic. Numele este interschimbabil cu câteva lucruri care folosesc solenoizi (partea bobinei) pentru a face ceva mai complex, în acest caz împingeți o tijă mică de metal. Porniți alimentarea și tija se împinge, opriți-o și arcul o mută înapoi.

1611922094 771 MacGyvering Mario Odyssey Jump Rope Challenge
1611922095 152 MacGyvering Mario Odyssey Jump Rope Challenge
Circuit finalizat

Am conectat un circuit cu un întrerupător simplu și solenoid și am scris un program care să-l bucle și să-l declanșeze, scurtând progresiv sincronizarea pe măsură ce progresează. Dacă răsuciți comutatorul, veți porni bucla, oprindu-l se va reseta.

Acest lucru mi-ar permite să-l rulez manual pe Mario în poziție și să mișc comutatorul pentru a porni și, de asemenea, mi-ar oferi o modalitate ușoară de a încerca din nou dacă am încurcat (ceea ce am anticipat că ar fi adesea). După câteva ore (și câteva sfaturi de la fratele meu) am avut un circuit de lucru!

În acest moment, în principiu, mi-am asumat succesul, iar apoi realitatea a dat lovitura (sau mai bine zis, m-a lovit). În naivitatea mea, am presupus că solenoidul va fi capabil să apese în mod trivial un buton de comutare, cel pe care eu cumparat a fost un solenoid de 5V capabil să se miște 3 mm și să aplice 80 de grame de forță, ceea ce părea foarte mult (de fapt este mai puțin decât un singur newton).

L-am ținut împotriva controlerului și … nimic. Nicio mișcare, butonul a refuzat mișcarea. Cercetarea cu câtă forță este necesară pentru apăsarea unui controler Switch nu a dat rezultate, iar în jurul casei mele nu am avut instrumente bune pentru a-l măsura.

Deci, fără instrumente bune, am căutat câteva rele.

Dar măsurile de gătit? Am umplut 1/3 dintr-o cană cu apă și am echilibrat cea de deasupra unui buton, fără mișcare. Am umplut 1/2 de cana cu apa si s-a deprins. Deci, iată răspunsul dvs., un buton Joy-Con are nevoie undeva între o treime și o jumătate de cană de apă.

Transformându-le înapoi în unități reale, 1 cană = 250 ml și ceea ce este mai ușor la sistemul metric este că greutatea este derivată din volumul de apă. 250 ml sunt 250 de grame, așa că Joy-Con-ul meu avea nevoie de undeva între 83 de grame și 125 de grame pentru a se deprima.

Dintr-o dată, solenoidul meu de 80 de grame nu mi s-a părut atât de slab, ce-ar fi dacă l-aș … suprasolicita? Îi dădeam cei 5 volți pe care îi cerea, dar aveam o sursă de alimentare de 9 volți. Forța magnetică a unui solenoid crește odată cu tensiunea (de fapt crește cu pătratul tensiunii), astfel încât la 9 volți solenoidul meu ar trebui să se aplice mai aproape de 250 de grame sau, așa cum îmi place să mă gândesc la asta, 1 cană de apă!

Pasul patru a implicat atașarea solenoidului la controler. Având în vedere cât de puțin m-am gândit la planificarea acestei părți, nu a fost de mirare cât de neelegantă s-a dovedit soluția. Câteva bucăți de lemn l-au ridicat deasupra celorlalte butoane, câteva bucăți de bandă electrică au ținut lemnul în poziție și o bandă de cauciuc a menținut solenoidul în poziție.

1611922095 971 MacGyvering Mario Odyssey Jump Rope Challenge
1611922096 393 MacGyvering Mario Odyssey Jump Rope Challenge
1611922096 361 MacGyvering Mario Odyssey Jump Rope Challenge

În sfârșit, am fost gata să pun totul la încercare, m-am îndreptat către Regatul Metro, am alergat la provocare și m-am pregătit să mă bucur de gloria dulce a succesului meu sufocant.

Și aproape imediat a eșuat … Momentul meu a fost greșit. Am modificat manual câteva dintre temporizările din codul meu și l-am adus pe Mario mai aproape, din nou mai aproape și încă mai aproape, până când a putut ajunge destul de fiabil la 86.

În acel moment, în loc să modificăm lucrurile în mod aleatoriu, l-am înregistrat jucând și m-am întors la Final Cut Pro pentru a relata cadre (de data aceasta concentrându-se pe câte cadre mai aproape / mai departe se ridica coarda pe segmentul de 5 salturi) și în timp ce eram puțin câteva locuri, deoarece Mario ajungea mereu la 50 de ani, singurul lucru care necesita schimbarea a fost momentul de peste 50 de ani. L-am redus la un salt la fiecare 35,2 cadre și am încercat din nou.

Succes! 261 sărituri. Acest lucru s-a simțit ca o victorie uriașă, puteți vedea în videoclip că a depășit cu ușurință efortul meu slab uman de 102 sărituri. M-am dus imediat și mi-am trezit soția și am încercat să explic cât de mișto a fost, iar când acest lucru nu a reușit să mă adulte, am recurs la a-i spune fratelui meu care era mult mai impresionat.

Cu toate acestea, este un robot, de ce ar trebui ca 261 să fie o limită? De ce nu poate fi perfect? Am analizat iar cadrele și am observat că frânghia îl prindea pe Mario atât de încet, încât trebuia să meargă mai repede!

1611922097 315 MacGyvering Mario Odyssey Jump Rope Challenge
Timpurile de salt, media a fost măsurată, real este ceea ce este în cod

Reducerea sincronizării dintr-un salt la fiecare 35,2 cadre la una la fiecare 35,15 cadre (o schimbare de doar 0,14%) a dus la un Mario mult mai reușit.

Atât de reușită încât a reușit să joace provocarea furioasă Mario Jump-Rope timp de 35 de minute și 21 de secunde înainte de a eșua … stabilind un nou scor mare (pentru mine) de 3613.

La început, am presupus că nu a reușit, deoarece calendarul meu era încă imperceptibil, dar, la o inspecție mai atentă a videoclipului, a rămas perfect sincronizat până când … a apăsat mult! Ce greșeală umană să facă un computer, în loc să facă un scurt salt rapid, a ținut butonul prea lung și l-a trimis pe Mario prea sus, a sărit la momentul potrivit, dar a aterizat târziu.

În realitate, cred că bietul solenoid se supraîncălzise, ​​mai devreme în timpul nopții, în timp ce mă jucam cu cronometrele, nu mai funcționase, cred că conducerea la aproape de două ori tensiunea era problematică. În videoclip puteți vedea chiar că a apăsat a doua oară în timpul saltului la momentul corect.

Cât despre cod? Aceasta a fost partea cea mai simplă. Doar 76 de linii de cod îl pot juca pe Mario mai bine decât mine

1611922098 203 MacGyvering Mario Odyssey Jump Rope Challenge

Din simplitate, am măsurat toate temporizările în câte cadre între salturi, aș putea număra cadrele cu ușurință în videoclip și apoi doar să împart la 60 pentru a le transforma în secunde.

Codul calculează totul folosind calculul mort din momentul în care a început provocarea, am presupus că impreciziile în declanșarea oricărui singur salt ar ieși în medie. În fiecare buclă, codul calculează câte milisecunde ar fi trebuit să treacă înainte de următoarea săritură și, dacă acest prag este atins, se aprinde solenoidul; există o durată scurtă pe care menține solenoidul pornit înainte de resetare (poate că trebuia să fie mai scurtă pentru a evita apăsarea lungă).

Și atât … aproape stupid de simplu, potrivit, având în vedere natura provocării de sărituri.

Aș putea încerca din nou, dar la aproape 40 de minute pe încercare nu mă interesează suficient. De asemenea, de atunci am descoperit asta cineva Am făcut un pas mai bine decât mine, deși într-o direcție ușor diferită.

În loc să apese fizic un buton de pe controlerul lor, ei folosesc o bibliotecă pentru a simula că sunt un controler care le permite să trimită în mod banal semnale. Când s-au confruntat cu aceeași provocare de sincronizare ca și mine (obținând doar câteva sute de salturi înainte de a eșua – foloseau constanta 35.18 pentru salturile lor finale) au rezolvat acest lucru monitorizând programatic semnalul video, verificând regiunea de scor și când se schimbă mai face un salt. Cu această metodă pot atinge scorul maxim de 99.999!

Ai crede cu toate acestea că aș avea unul dintre cele mai mari scoruri din joc … te-ai înșela! Cu doar o săptămână în urmă aș fi probabil în top 100, dar a fost descoperit un bug în joc care permite oricui să rezolve această provocare, pentru aproape niciun efort, puteți obține salturi nelimitate și peste 10.000 de oameni au făcut-o acum. Poate că dacă Nintendo remediază acest lucru și resetează tabloul de scor, îmi voi îndepărta din nou solenoidul, simt dacă poți construi ceva pentru a juca jocul folosind doar controlerul în sine, atunci este cam legitim.