Rodando o Quake2 do Google para um .Net’r

Fato é que meu tempo livre tem se mostrado cada vez menor, porém, em algum tempo aparecerão novidades para os nerds que costumam visitar este cantinho da internet e que, por algum motivo obscuro, continuam voltando mesmo após tanto tempo de marasmo por aqui. (BTW: tkz 4 that!)

Ainda não consigo ver uma abertura nos meus afazeres atuais que me permita parar para escrever o quanto desejava, porém posso adiantar que estou preparando um conteúdo que deve trazer aquele sorriso feliz para a cara dos que passarem por estas bandas nas próximas semanas.

Este post veio para relatar uma tentativa frustrada de rodar o código do Quake2 escrito recentemente por programadores do Google usando os padrões propostos para HTML5. Mesmo não tendo atingido o resultado esperado de ver o jogo rodando em minha máquina, aprendi algumas coisas no processo que acredito valerem a pena serem compartilhadas.

HTML5

Ok, é de conhecimento público que o Google é de longe o maior suporte para a evolução do HTML para o seu próximo estágio provável, aka: HTML5. Desde o começo a empresa esteve ali, lado a lado com a W3C para definir as diretrizes e possibilidades da próxima “versão” do Markup (dá uma olhada no site oficial da W3C, o nome da empresa do Editor). Existem ainda algumas pessoas que como eu tiveram um contato mais íntimo com esta empolgação toda do Google por meio da utilização do Google Gears que, apesar de suas limitações, serve belamente ao propósito de prover uma idéia do que está por vir.

Venho acompanhando os passos em direção ao lançamento da versão nova do HTML com uma empolgação similar a de uma criança  na noite antes do natal. Assim que soube que alguém no mundo Google teve a paciência de escrever o Quake2 em “HTML5” eu fiquei doido pra ter isto rodando na minha máquina e poder olhar as entranhas da criança (sic).

Down the rabbit role

Verdade é que não sou um nativo em ambiente *Unix. Nada ideológico, simplesmente não é algo que faça parte do meu cotidiano.  É importante dizer isto uma vez que (segundo as instruções dos desenvolvedores do jogo) pra rodar / compilar o código disponibilizado você precisa no mínimo emular este tipo de ambiente.

Windows e cygwin

Bom, minha primeira idéia foi literalmente emular o Linux no meu Windows e conseguir fazer o serviço todo sem precisar mudar / instalar nada na máquina.  Pra isto existe algo chamado cygwin, um simples emulador de ambiente Linux-like para Windows (com algumas limitações).

Optei porém por começar baixando e instalando o Mercurial, o controlador de versão recomendado pelo Google Code (eu poderia ter utilizado meu SVN, mas para evitar dores de cabeça, pensei em ir pelo caminho descrito no fuckn manual).  Nada de complicado nisto.

Pude então dar sequencia ao passo a passo descrito na página do projeto, o qual, já no primeiro item me deixou perdido. O caso é que para o cygwin não existe um correspondente (ao menos que eu saiba) para o comando apt-get (tentei também yum e aptitude com o mesmo resultado) responsável por baixar e instalar um dado pacote.

Apt-Get no cygwin

No cygwin (nominho difícil de lembrar) você deve escolher quais pacotes você quer instalar diretamente no executável de instalação (setup) do programa, o qual eu inicialmente utilizei como um simples “Next, Next, Finish”. Executei-o novamente, procurei pelos pacotes requeridos pelo google e aproveitei para pegar o que parece ser a versão dele do apt-get (detalhes aqui também).

Basicamente, você baixa os pacotes wget e Python diretamente do setup do Cygwin:

Cygwin Setup - Select Packages

E, no Bash você realiza a seguinte sequência (adicionei o que os artigos que citei acima não tinham ou estavam errados):

mount -c /
cd /bin
wget http://www.lilypond.org/~janneke/software/cyg-apt
chmod a+rx cyg-apt
cyg-apt --mirror=http://mirror.mcs.anl.gov/cygwin update

Ok! Agora que eu tenho praticamente tudo o que preciso em mãos, parti para os próximos passos: Baixar o código propriamente dito, subir o servidor e rodar o jogo! Bom, pelo menos era isto o que eu esperava a esta altura do campeonato… No final das contas, mesmo depois de possuir os pacotes localmente não foi possível rodar o jogo pois sempre que eu tentava subir o server o Cygwin simplesmente fechava sozinho!

Apesar deste problema, eu não estava pronto para me dar por vencido e quase imediatamente me vi no site do Ubuntu baixando o pacote mais recente.

Ubuntu

Uma vez baixado, instalado e configurado, o Ubuntu não é lá muito diferente de qualquer Windows. Agora que eu tinha a parafernália “oficial” toda de pé, voltei a tentar seguir os passo descritos no tutorial do Google com a esperança de eventualmente encontrar uma maior facilidade no processo.

Logo no primeiro momento fiquei muito feliz em ver que o gerenciador de pacotes estava funcionando adequadamente, pelo menos para realizar o download do Mercurial. Não foi tão simples quando tentei baixar o pacote do JDK.

Não havia santo que fizesse com que a porcaria do apt-get encontrasse o pacote para baixar, foi então que, por sugestão de um amigo do trabalho troquei o comando apt-get pelo aptitude nas instalações e, antes de dar seguimento à instalação dos pacotes seguintes eu executei a linha de comando que certamente me salvou horas de dor de cabeça:

sudo aptitude update

sudo aptitude update

Bom, depois do homérico comando acima, só me restava realizar o download e instalação dos pacotes necessários. Mais uma vez a tarefa foi desempenhada, desta vez porém, de uma forma quase que lusitana. Pacotes baixados e instalados! Próximo passo: Código fonte.

Ao contrário do que você pode estar pensando, não existiu qualquer problema, inconveniente ou gambiarra no processo de get do fonte enquanto utilizando o Ubuntu. Muito pelo contrário, depois de instalar o Mercurial via aptitude, tudo o que precisei fazer foi executar a linha de comando descrita na documentação do google code e esperar que o código todo estivesse disponível localmente.

JAVA_HOME

O único problema com a lista de passos do Google foi que eles não mencionaram nada sobre a possibilidade de, mesmo após a instalação do pacote do JDK utilizando o que imagino ser a forma padrão, a variável JAVA_HOME não ser definida. Bom, nada que ter um amigo que trabalhe com plataforma aberta não resolva. Um detalhe importante é que pode ser que eu faça parte da minoria azarada que teve este problema e que na realidade na maioria das vezes a tal variável é setada corretamente. Para verificar se o seu caso é o mesmo que o meu, execute a seguinte linha:

echo $JAVA_HOME

Se uma linha em branco aparecer, segue a dica do Sr. Open-source para resolver o problema. Na verdade a primeira parte da dica é bem chata, consiste em descobrir onde diabos seu JDK foi instalado. Acontece que por padrão o pacote vai parar dentro de /usr/lib/jvm mas pelo que soube, isto varia de acordo com um fator “X” que é incontrolável.

Bom, uma vez encontrado o diretório de instalação, segue a linha mágica:

export JAVA_HOME=seu_diretorio_aqui

Onde obviamente, todo o conteúdo de seu_diretorio_aqui deve ser substituído pelo seu diretório de instalação. Aspas não são necessárias. (PS: no meu caso, o caminho completo foi: /usr/lib/jvm/java-6-openjdk).

Sem mais delongas

Sem mais nada emocionante a adicionar, me limito a dizer que todos os passos seguintes aconteceram conforme planejado. Servidor buildado (demora muuuuuuuuuuuuuito!!!!), recursos instalados e finalmente servidor iniciado. Um detalhe interessante é que, ao menos no código que eu baixei, independentemente da porta que você pedir pro server subir ele sempre subirá na 8080 portanto é interessante estar atento para evitar conflitos deste serviço com qualquer outra coisa que você possa ter rodando nesta mesma porta. Porém, se você precisa subir em uma porta diferente, existe uma correção disponível neste link. Como não precisei alterar a tal porta, não testei o fix, se você precisou eu ficaria feliz em saber se está funcionando.

Esqueci de mencionar que tive algum problema para baixar o Chromium com suporte para WebGL, uma vez que a versão do Chrome indicada no manual de instalação parece não possuir tal opção. Para facilitar a sua vida caso queira tentar brincar na sua máquina em casa, segue um link alternativo que permite acesso ao tal navegador (versão para Unbutu).

Triste é dizer que depois de tanto trabalho, tudo o que pude ver foi uma tela do Chrome falando que eu não possuía um navegador com suporte ao tal WebGL (sic²) e uma mensagem no prompt dizendo:

WebGraphicsContext3DDefaultImpl: glXChooseFBConfig

WebGraphicsContext3DDefaultImpl: glXChooseFBConfig

Pelo que li nos fóruns este erro acontece por conta de uma incompatibilidade do jogo com minha placa de vídeo.

Resumindo: EPIC FAIL!

Espero que este post ajude alguém em algum momento da vida. Mesmo que a idéia não seja subir o tal Quake2, se este post te ajudar de qualquer forma, mesmo que seja para passar o tempo, já terá valido a pena.

Update: Depois de instalar o Ubuntu em casa, não consigo mais iniciar o Windows! O carregamento é interrompido em um tal de mup.sys Tá bom ou quer mais? Update: Problema solucionado!!!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: