МацГиверинг Марио Одиссеи Јумп-Ропе Цхалленге

Супер Марио Одисеја је вероватно моја омиљена Марио игра. Толико да сам се потрудио да завршим сваки последњи изазов. Али један од њих задао ми је више проблема него сви остали заједно: Геније у скоку у Краљевству метроа.

Не треба ни да се крећете. Само треба да успешно скочите 100 пута заредом. Али трик је у томе што сваких пет скокова убрзава до 50, док не скочите скоро два пута у секунди. Притисните прескок прерано и нећете успети. Притисните скок прекасно и нећете успети. Притисните предуго скок и ... погађате, нећете успети.

Након неколико десетака неуспјелих покушаја почео сам се шалити да бих само саградио нешто да то побиједим за мене ... а како су дани пролазили, а још увијек нисам завршио изазов, моје шаљивање постало је озбиљније и почео сам се питати уради то.

Моја прва мисао била је да једноставно програмирам Ардуино за премошћивање конектора за дугме за прелазак на контролору Свитцх, али срећом прво сам проверио иФикит разбијање јер Нинтендо контролери од Вии-а користе куполасте прекидаче уместо проводљивих гумених подлога, што то чини немогућим (за мало забавног читања погледајте еволуцију Нинтендо контролера током година).

Психички сам се премештао између куповине старијег ГамеЦубе контролера (са адаптером) који би било лако хаковати или коришћења соленоида за физичко притискање тастера на контролору Свитцх, и једно и друго изгледало је као одржива решења, али након што је у првих неколико случајева превазиђено ГамеЦубе контролери који продају на еБаи-у, сместио сам се на магистралну руту.

Након што сам обавио 835 од 836 јединствених изазова у Марију, сву своју пажњу вратио сам на последњи месец. Да бих програмирао нешто како бих га победио, прво бих требало да измерим тајминг, па ми је намера била да снимим екран, а затим бројим кадрове. Пре него што сам поставио камеру, убацио сам неколико вежби и, на свој ужас, заправо сам тукао ствар легитимно.

Провевши две недеље говорећи свима да знам да ћу програмирати нешто како бих то победио (и да се већина њих подсмева) губећи изговор за то, било је прилично разочаравајуће.

Иако одрасла особа, схватила сам да ми заправо није потребан изговор да бих трошила време и новац (то је углавном све што радимо), па је Екпресс наручио Ардуино и потребне компоненте за покретање мог пројекта.

Први корак био је схватити како се користи Ардуино, који је ... заправо био прилично отворен, мрежни уређивач и водичи су изузетно једноставни, а након програмирања неколико трепћућих ЛЕД-а осетио сам се спремним за рад. Највећа препрека је заправо било проналажење УСБ-Б кабла, јер искрено ко их још увек користи?

Други корак је био да схватим тајминг, и себи сам то импресивно отежао. Мислио сам да сам паметан снимајући одозго и да бих могао да користим женско стопало за поравнавање оквира, кад би је рука додирнула, назвао бих то револуцијом, и мукотрпно сам прошао кроз КуицкТиме притискајући тастере са стрелицама да бих корак кадрирајте одједном и бројте један, два, три ... шездесет осам, шездесет девет, седамдесет .

Други и по корак био је схватити да је број скокова поузданија мера, а тај Финал Цут Про ће ми показати време и бројање кадрова, омогућавајући ми да стварно брзо прелистам видео.

Урадите то 50 пута ... и ставите све резултате у табелу и имате тајну успеха у скоку. Тих последњих 50 скокова? То треба да урадите на сваких 0,58 секунди.

По завршетку тајминга скренуо сам пажњу на електронску половину проблема, а на срећу неко ко се разуме у електронику (дефинитивно не знам) већ је поделио како управљати соленоидом са Ардуином.

За оне који не знају, соленоид је заправо само цилиндрични намотај жице који када прођете кроз струју ствара магнетно поље. Име је заменљиво са неколико ствари које користе соленоиде (део калема) да би урадили нешто сложеније, у овом случају гурните малу металну шипку. Укључите напајање и штап се истискује, искључује и опруга га помера назад.

Ожичио сам струјни круг једноставним прекидачем и електромагнетом и написао програм који ће се провлачити и покретати, прогресивно скраћујући тајминг како је напредовао. Пребацивањем прекидача покренула би се петља, а искључивањем би се ресетовало.

То би ми омогућило да ручно покренем Марија на позицију и пребацим прекидач за покретање, а такође ће ми пружити једноставан начин за поновни покушај ако забрљам (што сам очекивао да ће бити често). После неколико сати (и неколико савета мог брата) имао сам радни круг!

У овом тренутку сам у основи претпостављао успех, а онда је стварност кренула (или тачније, мене). У својој наивности претпостављао сам да ће соленоид моћи тривијално притиснути прекидач, онај који сам купио био је соленоид од 5 В који је могао да се помери за 3 мм и примени 80 грама силе, што је изгледало пуно (заправо је мање од једног њутн).

Држао сам га против контролера и ... ништа. Нема кретања, дугме је одбило помицање. Гуглајући колико је снаге потребно да се притисне контролер прекидача није дало резултате, а око моје куће нисам имао добре алате за мерење.

Дакле, без добрих алата, отишао сам да тражим неке лоше.

Шта је са мерама за кување? Напунио сам 1/3 шоље водом и уравнотежио изнад дугмета, без кретања. Напунио сам 1/2 шоље водом и депресивно је. Дакле, ту је ваш одговор, дугмету Јои-Цон треба негде између трећине и пола шоље воде.

Претварајући их назад у стварне јединице, 1 шоља = 250 мл, а једноставна ствар у метричком систему је та што се тежина добија из запремине воде. 250 мл је 250 грама, тако да је мом Јои-Цону требало негде између 83 и 125 грама да депресира.

Одједном се мој електромагнет од 80 грама није чинио толико потлаченим, шта ако бих га ... надвладао? Давао сам му 5 волти које је тражио, али имао сам напајање од 9 волти. Магнетна сила соленоида расте са напоном (заправо расте са квадратом напона), тако да би на 9 волти мој соленоид требало да примењује ближе 250 грама, или како ја о томе мислим, 1 шоља воде!

Четврти корак је подразумевао причвршћивање соленоида на контролер. С обзиром на то колико сам мало размишљања уложио у планирање овог дела, није било изненађење колико је решење испало неелегантно. Неколико комада дрвета подигло га је преко осталих дугмади, неколико комада траке држало је дрво на месту, а гумица је задржавала соленоид у положају.

Напокон сам био спреман да све тестирам, превалио сам се у Краљевство метроа, залетео на изазов и припремио се да уживам у слаткој слави свог самозадовољног успеха.

И готово одмах пропао ... Тајминг ми је био погрешан. Ручно сам подесио неколико тајминга у свом коду и приближио Марија, све ближе и још ближе, све док није могао прилично поуздано да дође до 86.

У том тренутку, уместо насумичног дотеривања ствари, снимио сам је како се игра и вратио се у Финал Цут Про да препричава кадрове (овог пута фокусирајући се на то колико оквира је било ближе / даље уже се приближавало по сегменту од 5 скокова), и док сам био мало у на неколико места, пошто је Марио увек долазио на 50, једино што је требало променити било је време 50+. Смањио сам га на скок на сваких 35,2 кадра и покушао поново.

Успех! 261 скок. Ово се осећало као огромна победа, можете видети на видео снимку да је лако узнемирило мој оскудни људски напор од 102 скока. Одмах сам отишао и пробудио моју жену и покушао да јој објасним како је то било цоол, а кад то није успело да ме навуче на велико, прибегао сам да кажем брату који је био много прикладније импресиониран.

Међутим, то је робот, зашто би 261 требало да буде ограничење? Зашто не може бити савршено? Поново сам анализирао оквире и приметио да конопац сустиже Марија тако споро, да мора брже!

Смањивање времена са скока на сваких 35,2 кадра на један на сваких 35,15 кадрова (промена од само 0,14%) резултирало је у много успешнијег Марија.

Толико успешан да је 35 минута и 21 секунду пре него што је пропао успео да игра огорчени изазов Марио Јумп-Ропе ... постављајући нови високи резултат (за мене) од 3613.

Прво сам претпоставио да није успео, јер ми је тајминг још увек био неприметно искључен, али након детаљнијег прегледа видео снимка остао је савршено синхронизован све док… дуго није притиснут! Какву људску грешку је направио рачунар, уместо кратког брзог скока, предуго је држао дугме и слао Марија превисоко, он је скочио у право време, али је каснио.

Заправо мислим да се лоши соленоид прегревао, раније током ноћи док сам се играо с тимингима и он је престао да ради, мислим да је било проблематично возити га при скоро двоструком напону. На видео снимку можете чак видети да је притиснуо други пут током скока у тачном времену.

Што се тиче шифре? То је био најједноставнији део. Само 76 линија кода могу играти Марију боље од мене

Ради једноставности, мерио сам сва тајминга у томе колико оквира између скокова, могао сам лако да пребројим оквире у видео запису, а затим само поделим са 60 да то претворим у секунде.

Код израчунава све користећи мртво рачунање од тренутка када је изазов започео, претпостављао сам да ће непрецизности у покретању било ког појединачног скока у просеку бити веће. Код сваке петље израчунава колико је милисекунди требало да прође пре следећег скока и ако је тај праг задовољен, укључује се соленоид; кратко траје задржавање соленоида пре ресетовања (можда је требало да буде краће да би се избегло дуго притискање).

И то је то ... готово глупо једноставно, прикладно, с обзиром на природу скакачког изазова.

Могао бих да покушам поново, али са скоро 40 минута по покушају једноставно нисам довољно заинтересован. Такође, од тада сам открио да је неко ишао корак боље од мене, мада у мало другом смеру.

Уместо да физички притисну дугме на свом контролеру, они користе библиотеку да би симулирали да је контролер омогућавајући им тривијално слање сигнала. Када су налетели на исти временски изазов као и ја (само неколико стотина скокова пре него што су пропали - користили су константу 35,18 за последње скокове), решили су то програмским надгледањем видео сигнала, провером оцењиване регије и када се она мења уради још један скок. Овом методом могу постићи максимални резултат од 99,999!

Помислили бисте да бих уз све ово имао један од највиших резултата у игри ... погрешили бисте! Пре само недељу дана вероватно бих био међу првих 100, али у игри је откривена грешка која омогућава било коме да исправи овај изазов, готово без икаквог напора не можете неограничено да скочите, а преко 10 000 људи то је сада учинило. Можда ако Нинтендо ово закрпи и ресетује таблу резултата, поново оперем свој соленоид, мислим да ако можете да направите нешто за играње игре само помоћу самог контролера, то је некако легитимно.