Kinect MAME: Gladiator (Taito, 1986)
Desde a primeira vez em que se falou do Kinect (que na época se chamava “Project Natal”) eu fiquei empolgadíssimo com a possibilidade de ter uma câmera 3D de baixo custo em casa. Quando escrevi o artigo “Um Cientista explica o Kinect” eu não fazia idéia da repercussão que teria, com mais de 20.000 pageviews é de longe o texto mais popular que eu já escrevi (e o que me deixou na maior saia justa, depois que o próprio Alex Kipman, “pai do Kinect”, me apontou um erro grave!)
Nesse Natal tive um presentão: ganhei uma Xbox 360 com Kinect e vários jogos, presentes de um monte de amigos liderados pelo insano Marco Lazzeri que combinaram tudo às escondidas e me fizeram uma surpresa espetacular!
Fiquei doido para dependurar o Kinect no PC e ver o que eu conseguiria fazer, mas faltava uma fonte (o Kinect vendido junto com a Xbox não vem com fonte, porque ela não é necessária para ligá-lo na nova versão do console). Quando comentei isso o Isaías Oliveira me emprestou a dele, e sem mais desculpas fui obrigado a tentar fazer algum hack divertido usando o Kinect!
Escolhi emular um jogo de fliperama antigo, que foi um dos meus preferidos quando era criança: Gladiator, da Taito (1986). A escolha não foi difícil: como vocês vão notar os movimentos do jogo são facilmente mapeáveis para movimentos que você faria com o corpo. detectáveis pelo Kinect.
A única dificuldade séria que tive foi porque eu queria emular o jogo usando o M.A.M.E., mas não conseguia integrá-lo às bibliotecas que usei de jeito nenhum. O problema é que o M.A.M.E. usa uma forma diferente de leitura do teclado, joystick e mouse, que não é compatível. Quem resolveu o problema foi o amigo Vinícius Lopes, que me passou uma versão customizada do M.A.M.E. compilada por ele que funcionou redondinho.
O resultado, obtido depois de umas 4 cervejas e algum malabarismo para conseguir espaço, vocês conferem aqui:
January 5th, 2011 at 9:31 pm
Murilo, mas uma vez, eu vou ter de te lembrar que O KINECT É DO MAX!!!! NÃO QUEBRA O BRINQUEDO DO MENINO!!!
January 5th, 2011 at 9:45 pm
DUCARALHO !!!!
January 5th, 2011 at 10:42 pm
Nó! Do cacete, velho! O legal é ver você coçando o nariz antes de iniciar o jogo
January 5th, 2011 at 11:32 pm
Vou brincar com isso aqui em casa tambem!
Por mais insano que pareça quero testar com Mario !
Belissimo Murilo!
January 6th, 2011 at 3:10 am
Kudos!! Muito bacana a primeira implementação Murilesca no Kinect ser com o MAME e com Gladiator, jogo que marcou a infância de mitos barbados de hoje em dia.
Quer uma sugestão pro futuro? Samba de Amigo do Dreamcast ou do Wii. Ambos possuem bons emuladores pra PC, leves pro hardware de hoje em dia. E o Kinect cai como uma luva nessa jogabilidade.
January 6th, 2011 at 8:02 am
Parabéns pelo trabalho! Nunca imaginei que seria tão rápido!
Ah, e novamente, valeu pela referência!
January 6th, 2011 at 8:14 am
@Saulo O Samba de Amigo é uma excelente sugestão. Vou fazer uns mais simples antes (Punch Out!) mas já vou correr atrás dele!
January 6th, 2011 at 8:39 am
Ficou muito legal. Realmente o jogo é facilmente mapeável.
January 6th, 2011 at 9:23 am
Eu reforço o comentário do girino, O KINECT É DO MAX!
Mas kudos pra vc, mandou muito bem!
January 6th, 2011 at 9:29 am
Muito legal !!!!!
January 6th, 2011 at 9:50 am
Hahahaha, animal Murilo, parabéns!!!
January 6th, 2011 at 10:57 am
Pô, Muriloq, não funcionou 100%: quando o bonequinho caiu você não caiu também…
Parabéns, ficou show!
January 6th, 2011 at 2:06 pm
Muito bacana! Quero ver Sonic!
January 6th, 2011 at 2:38 pm
Usou o libfreenect e OpenCV? Quais foram as dificuldades encontradas ao aprender computer vision? Você pensa em liberar os fontes? Quais pontos na nuvem você mapeou?
January 6th, 2011 at 3:11 pm
@Rogério: não usei libfreenect nem OpenCV, mas sim o FAAST. Eu já trabalhei com projetos de visão computacional, provavelmente vou mexer com o libfreenect e OpenCV com o Kinect, mas nesse caso específico foi algo muito mais simples:
O FAAST usa o OpenNI, da PrimeSense, que já vem com um componente de skeleton tracking, e já detecta vários gestos diferentes e cria eventos de teclado correspondentes a eles.
Não há código fonte, porque eu não precisei escrever nada, já tem tudo pronto no FAAST. Só escrevi o arquivo que mapeia gestos para as teclas do jogo. A única dificuldade foi conseguir um M.A.M.E. que aceite os eventos de teclado gerados pelo FAAST; foi preciso recompilá-lo modificando uma flag.
O FAAST em si ainda não é open-source, mas provavelmente vai ser liberado em breve. O módulo de skeleton tracking do OpenNI também é proprietário, e acho improvável que liberem os fontes, mas pelo menos é gratuito.
January 6th, 2011 at 7:26 pm
Que perda de tempo…não tem mais o que fazer não ?
January 6th, 2011 at 7:28 pm
Que coisa horrorosa. Para com isso.
January 6th, 2011 at 11:45 pm
Parabéns cara, você é muito foda.
E para os babacas que falam que é perca, vão se fuder!!! O cara tem uma puta idéia e vem os imbecis falar o que sabem falar: merda.
Perda de tempo é vir aqui e falar: “Que perda de tempo…não tem mais o que fazer não ?” “Que coisa horrorosa. Para com isso.”
January 7th, 2011 at 6:18 am
Cara… teve a manha…
Quanto tempo levou pra tomar as 4 cervejas? Realmente ficou muito legal.
sabe esses emuladores de SNES e de Arcade? Porque não faz um com opção de usar o kinect como controle?
Ia ser bem legal… e talvez cada movimento mapeando um dos 4 botões, não seja tão complexo de fazer.
Meus parebens… !
January 7th, 2011 at 7:40 am
@Ricardão: Obrigado! Sobre os comentários, o segundo (”Para com isso”) foi enviado para o autor do primeiro, não pra mim!
E, em qualquer caso: don’t feed the trolls!
@Alex: Devem ter sido umas 2-3 horas. Apesar de em princípio dar para adaptar qualquer jogo, existem algumas dificuldades. Gastei um tempão ontem tentando fazer o Super Punch Out funcionar, usando exatamente a mesma técnica usada no Gladiator, e, por alguma razão, não deu certo. Deve ter a ver com a forma com que cada jogo específico lida com os eventos de teclado.
January 8th, 2011 at 10:23 am
Show..!!isso abre idéias para outro jogos!!Parabéns colega!!
January 11th, 2011 at 10:36 pm
olá Murilo, parabéns cara! adorei o que vc fez simplesmente maravilhoso! penso em jogar samba de amigo assim um dia! gostaria de saber como faço pra fazer isso que vc fez, queria muito jogar jogos classicos de mega e super nes com kinnect! se puder me dar umas dicas agradeceria, nao entendo nada de programação! e mais uma vez Parabéns !!!!!!!!!!!!!!!!!
January 12th, 2011 at 6:44 am
@carlos: Muito obrigado! Esse foi só minha primeira experiência com o Kinect, não fiz nada de mais a não ser instalar e configurar as bibliotecas, e conseguir o MAME modificado.
O componente fundamental que usei foi o FAAST, com ele você também consegue fazer:
http://people.ict.usc.edu/~suma/faast
January 17th, 2011 at 8:47 am
Grande Murilo!… Qdo vc vai montar um F1. RFACTOR PRA GENTE VER rsrsss. abrços.
January 17th, 2011 at 8:57 am
@Ferberti: por enquanto ainda não tem detecção de cabeça, mas assim que for possível eu quero usar o Kinect para head tracking no rFactor, sim!
January 17th, 2011 at 10:20 pm
ou cara como vc feiz issu?????w
me manda pelo hotmail ai qq vc feiz pra fazer o M.A.M.E reconhecer os comandos ai fala que um colega seu te passou uma versao modificada do mame mais tipo daria pra vc me passar esse mame modificado e tambem as instruçoes do que eu preciso fazer para ligar ele no meu kinect?????
quero tentar com outro jogo que esqueci o nome soh sei q eh um classico
January 18th, 2011 at 7:46 am
@miguel: Eu descobri qual era o problema do MAME, comentei com o Vinícius que precisaria modificá-lo para que funcionasse, e como ele já tinha feito a exatamente a mesma mudança para colocar o MAME em seu gabinete arcade ele me passou a versão modificada, para poupar tempo.
Depois bastou instalar e configurar o FAAST (Flexible Action and Articulated Skeleton Toolkit), o site tem todas as instruções necessárias:
http://projects.ict.usc.edu/mxr/faast/
As instruções para modificar o MAME estão abaixo. Usando o programa do último link fica bem mais fácil compilar.
O código vai estar em :
src\osd\windows\input.c
E você vai mudar isso:
// For testing purposes: force DirectInput
#define FORCE_DIRECTINPUT 0
Pra isso:
// For testing purposes: force DirectInput
#define FORCE_DIRECTINPUT 1
Aqui é o MAME Compiler:
http://www.headsoft.com.au/index.php?category=mame&page=mc64
January 21st, 2011 at 11:02 am
É o que dá. Misturar cientista maluco com pai amoroso… kkkkkkkkk. Murilo, vc a de convir que o Max teria que ver a vantagem de usar uma nova tecnologia. Ele já domina o mouse e deve pensar: pra que complicar? Tem que ser com jogo que ele nunca usou. Demais amigo, parabéns! Bjs Mara - Avó do Victor, 11 anos autista.
January 21st, 2011 at 11:06 am
caramba, sou afoita e vou enviando depois leio e vejo “vc a de convir”, ai ai ai. leia-se: vc há de convir. Bjs
February 14th, 2012 at 9:40 pm
Pq não usou o SDK oficial do Kinect for Windows? ele já havia sido lançado quando desenvolveu esta integração?
February 15th, 2012 at 8:49 am
@Ewerton: o SDK oficial ainda não estava disponível. Uma vantagem dele em relação ao que usei é que não precisa de pose de calibração (levantar os braços flexionando os bíceps).
January 15th, 2015 at 11:52 pm
Ae Murilo parabéns pelo trabalho, podes me tirar uma dúvida quanto a utilização do FAAST. to com problemas pra iniciar ele. Quando clico no connect,ele da uma mensagem como se não encontrasseo sensor do OPENni, sendo que ja está instalado (OPENni e PRIME sense)
valew
January 16th, 2015 at 8:23 am
Olá Renan, infelizmente vou ficar te devendo essa - tem anos que eu não mexo em nada relacionado a Kinect, e da última vez em que vi muita coisa tinha mudado (inclusive o suporte a OpenNI e FAAST). É possível que você precise usar alguma outra solução mais moderna; vou ver se descubro alguma alternativa ao FAAST e se achar posto aqui.
January 18th, 2015 at 11:53 pm
Valew Murilo, percebi também que tinha muita versão nova, porém eram incompatíveis, valew pela força.