As Aventuras das Aventuras de Mumbuquinha

BLOG

Um casal, um adolescente e uma Game Jam

Imagine que você é uma pessoa atarefada, com filhos e ainda resolve participar de uma Game Jam com sua esposa e irmão.

Se não conhece, Game Jams são competições de criação de jogos em tempo recorde. Normalmente, a ideia é entregar um jogo funcional em algumas horas (normalmente, 48 horas) baseado em um tema definido pelos organizadores do evento. Nesse caso, o prazo era bem generoso: 2 meses. Perfeito para eu, minha esposa e meu irmão nos iludirmos de que daria tempo de entregar o jogo que gostaríamos.

Parece loucura? E, admito, foi mesmo. Mas a história vale a pena ser contada.

Uma equipe improvável

Nossa equipe, bastante improvável, formada por: uma mãe excepcional e cansada, um pai que busca o equilíbrio perfeito entre o home office e cuidar da família e, por último, mas não menos importante, um adolescente sem tempo por causa do ensino médio.

Membros do time definido, agora é hora de definir os papeis:

Espera, temos alguém com duas tarefas? Calma, ele está acostumado (eu acho).

O desafio

A Game Jam, organizada pela Codemar, junto a prefeitura de Maricá, propôs que os participantes criassem a versão 2.0 do jogo “As aventuras do Mumbuquinha” (disponível em Google Play).

Mumbuquinha é um estudante residente de Maricá que é sugado para dentro de um videogame. Dentro do jogo, ele explora locais do município de Maricá e enfrenta problemas comuns da região, como queimadas, lixo descartado em lugares inapropriados etc. Em resumo, a jornada de Mumbuquinha é uma saga de conscientização para solucionar os problemas da cidade.

Escopo definido: vamos trabalhar! E que trabalho!

Missão impossível

A minha missão como programador e artista era complexa, eu tenho 2 meses para entregar uma arte finalizada e um jogo funcional.

Então, a divisão das minhas tarefas foi a seguinte: elaborar toda a arte para, em seguida, programar todo o jogo.

Como eu tenho passado algum tempo automatizando operações de clientes, comecei a refletir sobre automatizar a criação das artes:

  1. Desenhar todos os personagens, inimigos, cenários, animações e efeitos em preto e branco;
  2. Inserir todos os desenhos dentro de um programa;
  3. Receber todas as artes finalizadas do programa.

Obviamente, não tínhamos esse “programa mágico”, logo, precisei desenvolver um.

O primeiro mês de projeto se resume em uma corrida contra o tempo para criar um sistema de finalização dos meus desenhos e, claro, fazer os desenhos (!), além de torcer para que tudo funcione como o esperado.

O sistema, basicamente, funciona em três passos:

  1. Um desenho é dado como entrada;
  2. O desenho é convertido em uma imagem colorida;
  3. A imagem colorida é convertida para o estilo “pixel art”.

Sim, o programa usa inteligência artificial, mas não é como abrir o ChatGPT, pedir qualquer coisa e pronto.

Na verdade, é um pouco mais complexo que isso.

Automação para geração de imagens

A automatização foi realizada em Python, usando os modelos ControlNet, Animagine XL 4.0, AziibPixelMix.

Como eu não conhecia nenhuma dessas coisas, as curvas de aprendizado e frustração foram enormes, mas vale explicar que o modelo ControlNet é responsável em receber uma imagem de entrada (que, no caso, é o rascunho em preto e branco) para, em seguida, literalmente, controlar a estrutura da imagem resultante. Dessa maneira, conseguimos um resultado previsível que respeita a nossa concepção inicial. Os modelos seguintes são responsáveis em dar vida ao desenho inicial, aplicando cores e estilos bem definidos.

Você pode entrar mais fundo em como tudo isso funciona visitando os repositórios públicos abaixo que foram desenvolvidos durante a Game Jam:

Segue abaixo um exemplo de pré-processamento das imagens antes de chegarem ao resultado final:

Acredite se quiser, mas o programa lê e executa o diagrama.

Primeiro mês encerrado: 37 rascunhos, 40+ imagens finalizadas.

Agora preciso programar um jogo de 7 fases em um mês, maravilha.

Godot e GDScript

Godot foi a engine que escolhemos e, é claro, eu nunca fiz nada com ela. Além de nunca ter programado em GDScript mas, pelo menos, parece com Python.

A abordagem selecionada para chegar até o fim dessa maratona foi construir todos os sistemas fundamentais de jogabilidade e construção de níveis. Ou seja, até, praticamente, o dia da entrega, passei todo o tempo implementando as mecânicas do jogo e um sistema confiável para construir os níveis com a maior velocidade possível (porque vamos precisar), além de telas de menu, seleção de nível, diálogos etc.

Restando por volta de 4 horas para o término da Game Jam, são 20:00, e não aguento fazer mais nada. Mas, antes de continuar, gostaria de agradecer minha esposa e meu irmão.

Agradecimentos

Minha esposa porque, durante dois meses, passou mais tempo do que o normal sozinha com as crianças e nas tarefas de casa. Uma coisa que não é comum na nossa rotina, porque me esforço, de verdade, para não deixá-la sobrecarregada. Cuidar de duas crianças ao mesmo tempo que cuidar da casa é quase uma missão impossível, sem exageros. Por mais que a gente tente, muitas coisas são imprevisíveis durante o dia que, por consequência, nos cansam e estressam mais que o previsto. Lembrando que ela ainda escreveu o enredo e desenvolvimento da história do jogo.

Muito obrigado, querida! Eu não teria conseguido sem o seu apoio a todo momento.

E, meu irmão, pois demonstrou um talento sem medidas, desenvolvendo a trilha sonora do jogo que, por sinal, ficou impecável. O menino, no primeiro dia da Game Jam, já havia finalizado uma música. Diferente de mim, não atrasou nada.

Muito obrigado, irmão! Você tem um futuro brilhante!

De olho no relógio

Voltando para as últimas e decisivas 4 horas, cheias de adrenalina.

Como todos os sistemas estavam construídos, bastava montar os níveis do jeito que a gente quisesse. Na teoria, deveria ser um processo desenvolvido com calma e muitos testes. Na prática, construímos 18 níveis em 4 horas, distribuídos em 7 fases (onde cada fase é um cenário/tema).

A construção dos níveis foi realizada com o sistema de TileMapLayer do Godot, onde cada nível é dividido em pequenos pedaços de mapa (como chão, árvores, decorações do cenário etc) e elementos interativos (como inimigos, coletáveis e até o próprio player), conforme a imagem a seguir:

O tempo era curto mas, pelo menos, era só selecionar a região do mapa e inserir o elemento desejado.

Alguns níveis ficaram fáceis demais, outros difíceis demais, alguns mais longos e outros mais curtos.

Por fim, restando somente 1 minuto, compilamos o jogo para Android e Windows, submetemos para o GitHub a versão final e enviamos o e-mail formalizando a entrega.

Conclusão

As aventuras de Mumbuquinha foram, sem sombra de dúvidas, uma aventura!

Não ficamos em primeiro, nem em segundo ou terceiro lugar. Mas, apesar do cansaço extremo e vontade de desistir, valeu muitíssimo a pena pela experiência e, também, por acender uma chama esquecida de desenvolvimento de jogos.

Agradeço a Jesus que nos deu força para chegarmos até o final porque, sem Ele, com certeza, teríamos desistido bem cedo.

Conheça os ganhadores e os demais participantes da Game Jam no link abaixo, também é possível baixar e jogar cada jogo desenvolvido!

https://maricagamesjam.codemar-sa.com.br/

Se quiser conhecer o nosso projeto, é só visitar o repositório público abaixo:

https://github.com/codenergy-dev/maricagamesjam2025_codenergy

Fique à vontade para estudar e, até mesmo, customizar, o código é aberto!

Muito obrigado para quem leu até aqui e até mais!