a tecnologia por trás de Minecraft

Eu conheci o jogo indie Minecraft em dezembro de 2010. Na época, seu desenvolvimento tinha passado da fase alpha para a fase beta. Duas coisas me deixaram muito curioso: (1) era um jogo que dependia da criatividade do jogador, lembrava Lego, e também tinha monstros que apareciam a noite e em cavernas que o jogador poderia explorar; e (2) o seu modelo de comercialização, onde o jogo era vendido inacabado durante sua fase de produção.

Um começo com pé direito

O desenvolvimento de Minecraft foi iniciado oficialmente em 10 de maio de 2009, por Markus “Notch” Persson. Notch largou seu emprego de desenvolvedor de jogos para tornar-se um desenvolvedor independente, já que acreditava muito na sua ideia. Desde o seu início, o jogo foi oferecido como uma prévia para ser jogado no navegador ou uma versão para jogar no computador com mais algumas coisas, e essa versão era paga. Mas como assim, comprar por um jogo que ainda estava em desenvolvimento?

Markus "Notch" Persson

Em um primeiro momento achei estranho, quem compraria um jogo em fase alpha, com poucas features e com risco de não ser finalizado? Bom, eu como muitas outras pessoas acreditas no jogo por que achamos divertido, e também havia a promessa de que quem comprasse antes teria acesso a todos updates do jogo e pagaria menos pela sua cópia. Durante a fase alpha o jogo foi comercializado a €10, depois na fase beta por €15, e agora está sendo vendido a €20.

Em pouco tempo o jogo de Notch ficou famoso, chegando a impressionantes 4 milhões de unidades vendidas antes do seu lançamento na sexta-feira passada durante a MineCon. E, junto com o sucesso do jogo, nasceu uma cultura relacionada a marca Minecraft, que começou com camisetas e papercrafts, até um documentário e seu próprio evento de dois dias realizado em Las Vegas. Notch conseguiu dinheiro mais do que suficiente para aumentar seu studio, Mojang, terminar Minecraft e poder produzir tranquilamente o jogo que quiser pelos próximos anos sem se preocupar com investidores.

Agora que eu falei um pouco do fenômeno Minecraft, vou analisar mais de perto alguns de seus aspectos técnicos. Pensei em dividir minha análise em duas partes, como um documento de post mortem: “O que deu certo?” e “O que deu errado?”. Como falar que algo deu errado em Minecraft não é algo muito lógico, vou chamar essa parte de “O que não deu tão certo?”.  Meu objetivo não é analisar o Game Design do jogo, mas sim toda sua parte técnica, como programação e distribuição.

O que deu certo?

Notch desenvolveu seu jogo indie utilizando a linguagem de programação Java, pois ele queria que seu jogo fosse acessível para todos. Nisso ele conseguiu se dar bem, por que graças à JVM (Java Virtual Machine) Minecraft pode rodar em Windows, MacOS, Linux, Solaris, e qualquer outro sistema operacional com suporte a JVM. Para a programação foi utilizado também o LWJGL (Lightweight Java Game Library), um framework gratuito para desenvolvimento de jogos com Java, além do JOrbis (Ogg decoder) e 3D Sound System (som para ambientes tridimensionais).

Minecraft - Pokect Edition para Android

Minecraft possui um modo de jogo Cliente-Servidor, onde os jogadores podem participar da mesma sessão no mesmo mundo, onde juntos podem construir mais coisas e mais rápido. Este modo multiplayer também foi desenvolvido utilizando Java e alguns pacotes nativos da linguagem com suporte  a rede. Embora seja uma linguagem de programação não muito utilizada para jogos, ainda assim ela possui muitos pacotes e frameworks gratuitos úteis para dar suporte ao desenvolvimento.

Escolher Java também ajudou muito na conversão do jogo para smarthphones e tablets com o sistema operacional Android. Como o Android tem suporte a JVM, provavelmente foram necessários apenas ajustes relacionados ao hardware dos aparelhos, como optimizar consumo de memória e modificar os controles do jogo para touchscreen, por exemplo. O Java também permitiu a publicação de uma versão web do jogo, disponível para jogar no site utilizando o mesmo save game que a versão desktop.

O que não deu tão certo?

Se por um lado Java foi muito bom para tornar o jogo acessível para todos, ele limitou um pouco as plataformas em que o jogo poderia ser distribuído. C/C++ é a tecnologia mais utilizada hoje para desenvolvimento de jogos, e um dos grandes benefícios é ser multiplataforma e não depender de uma máquina virtual, pois roda nativamente em qualquer sistema operacional, de qualquer plataforma.

Minecraft - Pocket Edition no iOS

Com C/C++, Minecraft poderia ter sido distribuído na App Store da Apple há algum tempo, pois poderia ser facilmente convertido de uma versão desktop para iOS, da mesma maneira que foi feita a conversão da versão Java para Android. E, graças ao NDK, o mesmo código nativo também funcionaria no Android. C/C++ daria mais flexibilidade ao código, podendo ser convertido para distribuição nas redes de consoles Xbox Live, Playstation Network e Wii Ware.

Como o jogo foi lançado para iOS recentemente, e logo será lançado para Xbox Live, provavelmente houve uma conversão do código Java para C/C++. O tempo e o custo desta conversão poderia ter sido utilizados para melhorar ainda mais o jogo caso tivessem escolhido C/C++ desde o início, ao invés do Java. Mas, Notch teve um bom motivo para utilizar Java, provavelmente ela tinha um bom conhecimento prévio para começar um jogo indie utilizando Java ao invés de C/C++. Na minha opinião estes são pequenos detalhes que poderiam ser pensados desde o início do projeto.

Ao infinito e além

Notch pode não ter sido feliz na escolha da sua tecnologia para criar Minecraft, mas isso não importa muito, pois o jogo é um sucesso. Apensar de que as versões mobile são bem limitadas, a versão de desktop melhorou muito e está muito divertida, vale a pena conferir. Alias, diversão é algo que sempre preocupou Notch, e ele garante que se uma feature não é divertida, ele não incluirá no jogo.

Minecraft para PC

Agora que a versão de desktop finalmente atingiu seu status Gold, a Mojang provavelmente irá focar no desenvolvimento de conteúdos extras para o Minecraft, conquistar novas plataformas e trabalhar em novos jogos, como o Scrolls, que foi anunciado este ano. E sabe qual é a parte mais legal disso tudo? Notch disse que no futuro, quando as vendas do Minecraft estiverem baixas, ele tornará o código fonte do jogo público para que todos possam ver como o jogo foi feito. Porém, do jeito que este jogo está vendendo, talvez isso demore um pouco.

Conclusão

Através desta análise técnica eu tentei contar detalhes interessantes sobre o desenvolvimento do jogo indie milionário Minecraft, bem como analisar um pouco do que sei sobre as tecnologias e escolhas do seu desenvolvimento. Escrevi muita coisa baseada na minha opinião e experiência com desenvolvimento de jogos, espero que tenham gostado.

Esta foi uma análise mais técnica, porém existem diversos ângulos que podemos analisar Minecraft, como seu Game Design, seu impacto cultural, seu modelo de negócios, suas mecânicas, usabilidade, interface, entre vários outros. Este jogo é um ótimo caso para ser estudado em diversas áreas relacionadas ao desenvolvimento e a indústria de jogos, e podem ficar horas falando sobre seus detalhes.

Se você quiser saber mais sobre Minecraft visite o seu site oficial e o blog do Notch. Existem também uma comunidade muito ativa sobre o jogo, alguns conseguem criar coisas incríveis (e outras nem tanto) com os blocos de Minecraft. Para finalizar, um vídeo que demonstra que podemos até criar músicas dentro do jogo:


  1. bcsanches says:

    Apesar de eu preferir de longe o C++ para desenvolvimento de jogos e não considerar o Java uma ferramenta boa para jogos, o uso do Java foi um dos maiores acertos do Minecraft.

    No meu ver, o que mais popularizou o minecraft é que basta acessar o site, clicar em play e jogar. Isso poderia ser feito em C++ com um plugin para o navegador, mas iria exigir instalação e certamente iria matar uma parcela muito grande de todos que jogaram via web. Esse problema pode vir a ser resolvido com o native client, mas por enquanto, Java é a melhor opção para uma distribuição web, depois do Flash.

    A questão da escolha da linguagem ou das ferramentas no inicio do projeto, ainda mais um indie que começa sem pretensões, como foi o minecraft, tem que considerar mesmo facilidade de desenvolvimento e distribuição, o custo inicial é muito mais impactante no projeto do que o custo para portar ou trocar uma ferramenta depois que o projeto já se solidificou e vendeu milhões.

    Depois que o Notch vendeu suas milhões de cópias, converter o minecraft para C++ para rodar no IOs com certeza foi um problema minimo comparado com a grandiosidade toda que o projeto chegou.

    • Bruno Cicanci says:

      Olá bcsanches, obrigado pelo comentário!
      Com certeza o Java facilitou a distribuição do game, embora também necessite de plugins para rodar no navegador, como o flash. Acredito que um dia, quando o HTML5 estiver mais evoluído e com mais ferramentas, esta talvez se torne a melhor opção para desenvolver jogos para web.
      No caso do Notch não acredito que tenha sido sem pretensões, pois ele saiu de seu trabalho para se dedicar nesse projeto. Converter a base do jogo Java para C++ não deve ter sido complicado, mas existem vários aspectos que deve dar mais trabalho para eles. E esse trabalho seria bem baixo se tivessem começado com C++, ao invés de Java.
      Minecraft é um caso a parte, mesmo se tivessem feito com Visual Basic teria dado certo hahaha
      Abraço!

  2. [...] Link: Tecnologia por trás de Minecraft [...]

  3. Marcelo de Assis says:

    É realmente verídico que um software em C/C++ rode sem precisar de alterações em todos os Sistemas Operacionais?

    Por exemplo, se usasse uma biblioteca gráfica, como OpenGL, iria rodar no Iphone?

    • Olá Marcelo!
      Sim, um código bem feito em C/C++ pode rodar independente do sistema operacional, desde que exista uma interface para o hardware específico. Por exemplo, um mesmo código C/C++ pode rodar em Android e iOS, mas ambos necessitam de uma interface própria para tratar eventos do hardware (um código Objective-C no iOS e Java/NDK no Android). Mas, isolando bem essa camada do resto do código, você pode rodar em qualquer sistema operacional. Inclusive para isso a parte gráfica tem que ser feita com OpenGL, pois DirectX só tem suporte em windows.
      Abraço!

  4. Light Walker says:

    É… Na verdade, eu concordo que eles deveriam ter usado C/C++ des de o início =P

    Java é lerdo de mais! Só pra você ter ideia, mal dá pra jogar Minecraft no meu PC, de tão baixo que é o índice de FPS. E olha que meu PC tem 3GB de RAM! Mas eu tenho jogos aqui feitos em C++ que mesmo que sejam 3D (com gráficos melhores do que os do Minecraft inclusive) e estejam cheios de intâncias e efeitos ao mesmo tempo na tela, isso somado aos sons e tudo mais, ainda sim rodam perfeitamente aqui! =D Até no meu antigo PC que tinha menos que 500 MB de RAM ainda rodavam tranquilamente.

    C++ tem um desempenho rápido de arrasar. Seria bom eles fazerem uma versão em C++ pra Desktop também, ai quem sabe daria pra eu jogar bem. rsrs

Leave a Reply