Retr? Game Dev, uma experiência Raiz!
TooIzzi Games
Na TooIzzi s?o criados games fáceis de jogar mas difíceis de se dominar.
é comum encontrarmos por aí aqueles memes comparando duas formas distintas de se fazer a mesma coisa, uma sendo a forma “nutella” e outra a “raíz”. No primeiro caso utiliza-se geralmente recursos rebuscados e tecnológicos para resolver um problema, enquanto no segundo a coisa é feita na “ra?a”, sem firulas e facilidades.
N?o é raro eu expor meu fascínio pelos games retr?, aqueles que com poucos recursos conseguem engajar os jogadores deixando-os imersos na “jogatina” por longos períodos, apesar de seus recursos estéticos muitas vezes precários. Como um desenvolvedor de games, eu costumo olhar para esses jogos de uma forma diferente, mais técnica e analítica, para que eu possa usar minhas descobertas e conclus?es no desenvolvimento de meus próprios games. A quest?o que desejo abordar, é que apesar desse amor pelo antigo e de todas as análises e conclus?es que obtenho a partir de minhas avalia??es, no final ligo meu notebook moderno, carrego meu ambiente de desenvolvimento moderno, escolho minha linguagem de programa??o moderna favorita (Python), abro meus softwares de edi??o de imagens e de cria??o de efeitos sonoros modernos para no final criar games com estilo antigo!
N?o há nada de errado em se desenvolver games com estilo retr? utilizando ferramentas modernas, muito pelo contrário, acredito que seja um ótimo caminho. Vou chamar aqui esse caminho como sendo o “desenvolvimento nutella”. Contudo, no meu caso, sempre ficava aquela sensa??o de eu estar trapaceando. No fundo, eu n?o me sentia realmente criando algo verdadeiramente retr?, pois faltava algo muito importante que era eu me sujeitar às limita??es técnicas enfrentadas pelos desenvolvedores da época em que esses games foram criados. Foi ent?o que resolvi recordar meus tempos de garoto, com meu incrível Amiga 1200, e tentar criar um game diretamente nessa plataforma, me sujeitando a todos os tipos de restri??es técnicas inerentes às máquinas das décadas de 1980 e 1990. Chamarei aqui esse caminho de “desenvolvimento raíz”.
O primeiro desafio foi tentar reviver meu antigo computador Amiga e n?o tive sucesso. N?o encontrei a fonte de alimenta??o nem o mouse. Também percebi que eu n?o conseguiria ligá-lo a um monitor com entrada HDMI facilmente, t?o pouco a uma televis?o atual. Meus antigos disquetes com os softwares que seriam utilizados para o desenvolvimento do game provavelmente n?o funcionariam mais e, mesmo que eu tivesse uma solu??o para todos esses problemas, n?o haveriam garantias que o computador propriamente dito ligaria e funcionaria sem problemas. Por conta de todos esses problemas, utilizar um hardware da época estava fora de cogita??o.
Felizmente existem os emuladores, que conseguem nos fornecer todo o ambiente de software da época em máquinas modernas. Eu aproveitei uma plaquinha Raspberry Pi que estava parada comigo e instalei um emulador de Amiga nela com um resultado incrível. Depois de tudo instalado e rodando perfeitamente, minha sensa??o era a de estar com o meu antigo Amiga 1200 ligado na minha frente. A experiência foi idêntica àquela que eu tinha no passado. Depois de explorar o “novo” sistema operacional para relembrar o funcionamento de suas opera??es básicas, chegou o momento de escolher a linguagem de programa??o que eu utilizaria para o desenvolvimento do novo games.
Lembro-me de que no final da década de 1990 eu costumava comprar nas bancas de jornais uma revista sobre computadores Amiga que vinha com disquetes contendo diversos softwares de domínio público. Em uma dessas revistas veio uma vers?o de demonstra??o de um ambiente de desenvolvimento para o Amiga chamado AMOS Pro. Esse ambiente é basicamente a linguagem de programa??o Basic turbinada para o desenvolvimento de games, com muitas rotinas e ferramentas comumente utilizadas pelos desenvolvedores. Eu era uma crian?a na época e a única coisa que consegui fazer com aquilo foi executar os programas de exemplo que vinham junto para demonstrar o potencial da linguagem. Felizmente hoje, já com meus cabelos brancos, o desenvolvimento de softwares n?o é mais um mistério para mim e decidi utilizar a linguagem de programa??o AMOS para minha empreitada. Chegou o momento de eliminar aquela frustra??o de garoto que n?o conseguia entender como aquele monte de código funcionava.
Com meu computador Amiga rodando no emulador instalado no Raspberry e a linguagem de programa??o definida, eu precisava definir que tipo de jogo eu desenvolveria. Resolvi realizar um desejo que era prestar um tributo a um velho amigo, meu c?ozinho Marley, que em 2021 por conta de um erro médico acabou falecendo aos onze anos de idade. O Marley era da ra?a Italian Greyhound, uma vers?o mini daqueles cachorros de corrida. Por conta de sua ra?a, ele era bastante magro e esbelto e essa característica fez com que recebesse o apelido de Magrelo. O Marley adorava ca?ar pela casa meus objetos pessoais para levar para sua casinha antes de dormir, assim passaria a noite sentindo meu cheiro. Era comum eu encontrar meias, cartas, chaves, roupas que ele pegava escondido do varal dentro de sua casinha. Decidi que eu criaria um game chamado Skinny Marley (em português Marley Magrelo) com a premissa de que o game seria baseado nessa característica do magrelo de levar minhas coisas para a casinha dele.
Tendo definido o nome e a premissa do game, era preciso definir como seria sua mecanica. Depois de pesquisar um pouco percebi que a mecanica do jogo Sokoban serviria bem para o meu game. No Sokoban o jogador precisa empurrar blocos até posi??es específicas dentro do mapa do jogo, tomando o cuidado de n?o bloquear seus movimentos. Como é possível apenas empurrar os blocos, todo o cuidado é pouco para n?o empurrá-los para um local onde n?o é mais possível remanejá-los. Pensei em adaptar um pouco essa mecanica para o meu novo game Skinny Marley. Minha ideia era colocar a casinha do Marley em uma posi??o da tela com áreas demarcadas ao seu redor. Espalhados pelo mapa ficariam alguns objetos, tais como cartas, chinelos, meias, etc., que o Marley deveria empurrar até as áreas demarcadas ao lado de sua casinha. Quando todos os objetos da fase estivessem posicionados nas áreas demarcadas o jogador finalizaria a fase, sendo direcionado para a próxima. Evidentemente, o desafio é o mesmo do Sokoban, ou seja, tomar o cuidado de n?o mover os objetos para posi??es que os bloqueariam, for?ando o jogador a reiniciar a fase do zero.
Com o tipo de jogo a ser desenvolvido definido, come?ou o verdadeiro desafio. Primeiramente eu precisaria aprender como a linguagem AMOS Pro funciona, com suas limita??es e potenciais. O grande problema aqui é que por se tratar de uma tecnologia muito antiga, simplesmente n?o se encontram materiais em abundancia na internet. A disponibilidade de conteúdo é extremamente escassa, se limitando a alguns poucos vídeos no Youtube e alguns manuais da linguagem em formato PDF. Felizmente, encontrei alguns códigos fontes de programas feitos em AMOS Pro no passado, bem como alguns exemplos de códigos criados pelos próprios desenvolvedores da linguagem. Eu também encontrei o manual da linguagem em formato PDF, contendo a descri??o de suas principais rotinas e suas características técnicas. Com esse material em m?os já dava para fazer alguma coisa.
Iniciei pelo básico, ou seja, como funcionam os tipos de variáveis da linguagem, como criar estruturas condicionais, como criar estruturas de repeti??o, como criar rotinas, ler dados do usuário, escrever na tela, etc. Apesar de suas particularidades, a linguagem AMOS Pro n?o se mostrou muito diferente das linguagens atuais nesses pontos. O próximo passo foi eu entender como eu desenharia elementos gráficos na tela. Aqui a coisa come?ou a ficar um pouco mais séria, pois eu comecei a ter de me preocupar com paletas de cores mais restritas, resolu??es de tela também mais restritas e com a quantidade de memória utilizada pelos meus elementos gráficos. Cada pixel come?ou a ser importante para n?o se gastar memória em excesso. Precisei também me preocupar com o tamanho do meu código fonte, pois chegou um momento que o ambiente de desenvolvimento simplesmente n?o aceitava mais do que 32 KBytes de código fonte. Até eu descobrir onde eu alterava essa configura??o, precisei ficar lutando para otimizar cada vez mais meus algoritmos.
Uma coisa que quase me enlouqueceu foi a grande escassez de estruturas de dados. Eu n?o conseguia criar Classes, Hash Maps, Structs, etc.. Para um desenvolvedor acostumado ao paradigma Orientado a Objetos, essas coisas fazem muita falta. Precisei me contentar em trabalhar no máximo com Arrays contendo no máximo três dimens?es. Eu também fiquei muito limitado no que diz respeito a manipula??o de Strings, pois a linguagem n?o oferece rotinas prontas para isso e precisei criar “na unha” todas as minhas próprias rotinas.
Apesar das limita??es que apresentei, foi muito prazeroso trabalhar com a linguagem AMOS Pro pois fui for?ado a colocar em prática muitos princípios da Ciência da Computa??o que muitas vezes ficam “perdidos” por conta das grandes facilidades que as tecnologias atuais nos oferecem. Desenvolver com recursos t?o limitados nos for?a a realmente entendermos o que estamos fazendo e a n?o desperdi?ar um byte sequer da memória do sistema. Sem contar o desafio de otimiza??o, pois qualquer “gordurinha” no código come?a a fazer o sistema perder performance, ficando praticamente inutilizável.
Essa experiência serviu para me mostrar que os pioneiros do desenvolvimento de games merecem todo o nosso respeito, pois eles criaram toda uma indústria contando com recursos extremamente escassos. Além disso, deixo aqui minha dica para quem realmente deseja se tornar um bom desenvolvedor de games; se você deseja realmente entender o que está fazendo e mudar para o próximo nível, desenvolva um jogo do zero em um ambiente realmente retr?. Você evoluirá muito tecnicamente e também no design de games, sendo preciso pensar sempre de forma otimizada, de modo que ao voltar para as ferramentas mais modernos tudo parecerá muito mais fácil.
Ah, e antes que eu me esque?a, o game foi publicado no itcho.io e pode ser encontrado no endere?o https://tooizzi.itch.io/skinny-marley
Quer saber como jogar? Comece agora mesmo a entrar na aventura de instalar um emulador de Amiga no seu computador moderno (recomendo o emulador WinUAE) para sentir o gostinho de tudo o que escrevi.