22 julho 2006

Melhorando o MythGame

Como vocês sabem, uma das características do Mythtv que o faz bem diferente de um PVR comercial (como o da SKY ou TVA) é a possibilidade de adicionar funcionalidades de forma praticamente ilimitada. O MythGame é uma dessas funcionalidades. No KnoppMyth, já temos "de fábrica" alguns jogos gratuitos, como o Frozen Bubble e o Tux Racer, além do emulador de arcade xmame (que vem sem os jogos, é claro).

Porém, na hora de jogar, percebemos que todos os jogos estão configurados para usarem o teclado do PC como controle, o que pode ser bem desconfortável quando se pensa em um HTPC na sala de estar ligado a uma TV de 29 polegadas ou a um projetor com um telão.

Uma das formas de melhorar o MythGame seria configurá-lo para usar o controle remoto para controlar os jogos. Há um howto no KnoppMythWiki ensinando como fazer isso, porém não é para qualquer jogo que essa solução é viável. Imaginem jogar um desses jogos que exigem reflexos rápidos pelo controle remoto ou ainda um que exija o uso de duas teclas simultaneamente e entenderão do que estou falando.

Por esse motivo, desde o início do projeto do meu HTPC, sempre quis colocar um par de controladores de PlayStation (conhecidos como joypads) adaptados à porta paralela da máquina (já que nunca vou ligar uma impressora ali). Foi uma das primeiras aquisições que fiz para incrementar o KnoppMyth, porém só agora os coloquei para funcionar.

Graças à internet e essa comunidade maravilhosa de desenvolvedores, usuários e "fuçadores" que existe espalhada pelo mundo, achei alguns tutoriais ensinando a fazer isso. Aí foi só adaptar para o KnoppMyth e pronto. Aqui vai o passo-a-passo (sem muitos detalhes, ok?):

1 - Adquira um joypad e seu adaptador para a porta paralela. Alguns modelos já vêm com o adaptador no próprio cabo. No meu caso, como eu pretendo ter dois joypads, comprei o modelo com conector para Play Station e um adaptador duplo para a porta paralela.

2 - Instale o xjoypad: (como root) apt-get install xjoypad. Este software lê continuamente a porta paralela e emula o pressionamento de uma tecla para cada botão do controle que for apertado, passando essa tecla para o programa que estiver ativo no momento.

3 - Para ativar o xjoypad eu modifiquei o script de um tutorial do Carlos Morimoto (sim, sempre ele...) que foi publicado no Guia do Hardware e republicado em uma dezena de sites. Minha versão é esta:

cd /dev
rm js*
mkdir input
mknod input/js0 c 13 0
mknod input/js1 c 13 1
mknod input/js2 c 13 2
mknod input/js3 c 13 3
ln -s input/js0 js0
ln -s input/js1 js1
ln -s input/js2 js2
ln -s input/js3 js3
mknod input/event0 c 13 64
mknod input/event1 c 13 65
mknod input/event2 c 13 66
mknod input/event3 c 13 67
rmmod lp
modprobe joydev
modprobe parport_serial
modprobe gamecon map=0,7
cd /dev/input
chmod +rw js*
xjoypad -device /dev/js0 &

Copie este script e salve-o em algum lugar seguro com o nome ativar-xjoypad. Eu criei uma pasta em /home/mythtv chamada xjoypad, então o caminho completo para o script ficou /home/mythtv/xjoypad/ativar-xjoypad. É esse caminho que usarei no restante das instruções.

Aqui cabe uma observação: poderíamos colocar a chamada a esse script no arquivo /etc/init.d/bootmisc.sh e ele seria executado a cada boot, deixando o xjoypad sempre ativo, podento até mesmo usar o joypad para navegar nos menus do Mythtv (um controle remoto "com fio"). No entanto, na minha máquina, isso consome muita CPU, deixando o HTPC lento na hora de assistir TV ou ver um filme. Então criei uma forma de ativá-lo quando necessário e desativá-lo quando não for usá-lo. Veja a seguir:

3 - Dê ao usuário Mythtv o direito de executar esse script através do sudo. Para isso, edite o arquivo /etc/sudoers e inclua o caminho completo do script na linha que começa com mythtv. Também será necessário que o Mythtv execute o comando killall. Não se esqueça da vírgula que separa os comandos. Então, coloque no final da linha:

,/usr/bin/killall,/home/mythtv/xjoypad/ativar-xjoypad

4 - Edite o arquivo /usr/share/mythtv/games.xml e acrescente estas linhas no início, após a primeira linha (após <mythmenu name="Games">):

<button>
<type>Ativar joypad</type>
<text>Ativar joypad</text>
<action>EXEC sudo /home/mythtv/xjoypad/ativar-xjoypad</action>
</button>

<button>
<type>Desativar joypad</type>
<text>Desativar joypad</text>
<action>EXEC sudo killall xjoypad</action>
</button>


Se eu não me esqueci de nada, quando você entrar no menu "Jogar" surgirão as opções "Ativar joypad" e "Desativar joypad". Ativando o joypad já será possível utilizá-lo para controlar a navegação no próprio menu. Aí é só escolher um jogo e configurá-lo para responder às teclas que correspondem aos botões do joypad. Ainda será necessário usar o mouse em alguns casos, mas isso basicamente só acontece nas mudanças de fase e em algumas configurações especiais.

Pronto! Agora é controle remoto numa mão, joypad na outra e bom divertimento!