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:

Kinect MAME: Gladiator (Taito, 1986) by muriloq

34 Responses to “Kinect MAME: Gladiator (Taito, 1986)”

  1. girino Says:

    Murilo, mas uma vez, eu vou ter de te lembrar que O KINECT É DO MAX!!!! NÃO QUEBRA O BRINQUEDO DO MENINO!!!

  2. Carlos Bragatto Says:

    DUCARALHO !!!!

  3. Agripino Says:

    Nó! Do cacete, velho! O legal é ver você coçando o nariz antes de iniciar o jogo :-)

  4. Vinicius Says:

    Vou brincar com isso aqui em casa tambem! :D
    Por mais insano que pareça quero testar com Mario !
    Belissimo Murilo!

  5. Saulo Santiago Says:

    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.

  6. Isaias Oliveira Says:

    Parabéns pelo trabalho! Nunca imaginei que seria tão rápido!

    Ah, e novamente, valeu pela referência!

  7. muriloq Says:

    @Saulo O Samba de Amigo é uma excelente sugestão. Vou fazer uns mais simples antes (Punch Out!) mas já vou correr atrás dele!

  8. Marison Says:

    Ficou muito legal. Realmente o jogo é facilmente mapeável.

  9. brunobelo Says:

    Eu reforço o comentário do girino, O KINECT É DO MAX! :P

    Mas kudos pra vc, mandou muito bem!

  10. Betine Mendes Says:

    Muito legal !!!!!

  11. Mauricio "Malegra" Alegretti Says:

    Hahahaha, animal Murilo, parabéns!!!

  12. Agnoldo Says:

    Pô, Muriloq, não funcionou 100%: quando o bonequinho caiu você não caiu também… :)

    Parabéns, ficou show!

  13. Rei Says:

    Muito bacana! Quero ver Sonic! :P

  14. Rogério Says:

    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?

  15. muriloq Says:

    @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.

  16. Bruno Says:

    Que perda de tempo…não tem mais o que fazer não ?

  17. Carlos Bragatto Says:

    Que coisa horrorosa. Para com isso.

  18. Ricardão Says:

    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.”

  19. Alex Says:

    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… !

  20. muriloq Says:

    @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.

  21. Cyryx Says:

    Show..!!isso abre idéias para outro jogos!!Parabéns colega!!

  22. carlos Says:

    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 !!!!!!!!!!!!!!!!!

  23. muriloq Says:

    @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

  24. Ferberti Says:

    Grande Murilo!… Qdo vc vai montar um F1. RFACTOR PRA GENTE VER rsrsss. abrços.

  25. muriloq Says:

    @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!

  26. miguel Says:

    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

  27. muriloq Says:

    @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

  28. Mara Says:

    É 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.

  29. Mara Says:

    caramba, sou afoita e vou enviando depois leio e vejo “vc a de convir”, ai ai ai. leia-se: vc há de convir. Bjs

  30. Ewerton Says:

    Pq não usou o SDK oficial do Kinect for Windows? ele já havia sido lançado quando desenvolveu esta integração?

  31. muriloq Says:

    @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).

  32. Renan Says:

    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

  33. muriloq Says:

    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.

  34. Renan Says:

    Valew Murilo, percebi também que tinha muita versão nova, porém eram incompatíveis, valew pela força.

Leave a Reply