Motores de jogo livres e os jogos que eles fazem
Muitos dos jogos da FredyGames não vêm de um CD antigo nem de um disquete empoeirado. Foram feitos nos últimos anos com motores de jogo livres, as ferramentas que amadores, estudantes e estúdios pequenos usam para criar jogos sem começar do zero. Este guia é para quem joga, não para quem programa. Ele explica o que é um motor, como um jogo feito com um acaba dentro de uma página web, por que a primeira carga pode demorar e o que "código aberto" significa para o jogo em que você está prestes a clicar, com um jogo ou dois para cada motor que hospedamos.
O que é um motor de jogo
Todo jogo precisa da mesma maquinaria: desenhar imagens, tocar sons, ler teclado e controle, marcar o tempo, perceber quando duas coisas se tocam. Um motor de jogo é uma versão pronta disso. O autor escreve a parte que torna o jogo dele (fases, regras, arte, piadas) e o motor faz o resto.
Alguns motores têm um editor em que você monta cenas com o mouse; outros são bibliotecas chamadas a partir do código; alguns são especializados, como os de visual novel, que giram em torno de texto, imagens e escolhas.
Um motor livre ou de código aberto é aquele cujo código é publicado sob uma licença que permite a qualquer pessoa usar, estudar, modificar e compartilhar, inclusive em jogos que são vendidos.
Do computador do autor ao seu navegador
Os navegadores falam JavaScript de nascença. Já os motores costumam ser escritos em outras linguagens: C, C++, Rust, Go, Zig, Python. Para rodar numa página web, alguém precisa traduzi-los, e quem faz esse trabalho é o WebAssembly.
O WebAssembly (ou wasm, para encurtar) é um formato compacto de programa que todos os grandes navegadores executam, numa velocidade bem mais próxima de um aplicativo de computador do que a de scripts web comuns. O motor e o jogo são compilados num arquivo wasm, que vai para a página junto com um pouco de JavaScript que o liga à sua tela, às caixas de som e ao teclado. Não se instala nada, e ao fechar a aba tudo some.
Os motores em Python funcionam de outro jeito. O navegador não executa Python, então a página baixa primeiro uma cópia do próprio Python, compilada para WebAssembly, e os arquivos Python do jogo rodam em cima dela. É assim que funcionam os jogos de pygame e de Pyxel mais abaixo.
Por que a primeira carga demora
Antes do primeiro quadro, o navegador precisa baixar o motor (em alguns casos, também uma linguagem inteira) e os dados do jogo, e depois preparar tudo. Os tamanhos citados nas páginas dos jogos mostram a variação: Cube Collection tem cerca de 5 MB, Dodge the Creeps cerca de 9 MB, Pinch Points cerca de 18 MB, SolarWolf cerca de 23 MB (quase tudo é o Python e a biblioteca pygame), AAAAXY cerca de 36 MB e Godot Open RPG cerca de 55 MB.
Se a tela ficou numa barra de carregamento, está funcionando. Nada é baixado antes de você apertar Play, então navegar pelo site não gasta seus dados, e, com os arquivos no cache do navegador, a visita seguinte é mais rápida. A maioria desses jogos pede teclado, e cada página avisa.
O que "código aberto" significa para o jogo que você joga
Duas licenças entram em jogo todas as vezes: a do motor e a do jogo. Elas são separadas. Um jogo pode ter uma licença sobre um motor que tem outra, e as duas precisam permitir que a gente o hospede, inclusive num site que exibe anúncios.
Nas licenças permissivas, como MIT, ISC, Apache-2.0 ou zlib, a condição principal é manter o aviso de direitos autorais e o texto da licença. Nas licenças copyleft, como GPL, LGPL ou AGPL, quem distribui o programa também precisa disponibilizar o código-fonte. Quando um jogo ou motor exige isso, publicamos o fonte exato da versão que você está jogando ao lado dela, e a página do jogo linka para ele. Você não precisa ler nada disso para jogar, mas isso significa que o jogo não é uma caixa-preta: qualquer pessoa pode ver o que ele faz ou montar a própria cópia.
Explicamos como decidimos o que hospedar em como a FredyGames confere a licença de cada jogo, e todas as licenças, avisos e arquivos de fonte estão na página de Licenças. O resto deste guia trata dos motores em si.
Os motores da FredyGames
Godot
O Godot é um motor livre com editor completo, usado em jogos 2D e 3D. Tem licença MIT, e seus jogos costumam ser escritos na linguagem de script própria dele, a GDScript.
- Dodge the Creeps é o jogo Godot completo mais enxuto que existe. É o projeto pronto do tutorial "Your first 2D game", da documentação do Godot. Você conduz um personagem pequeno por uma sala e foge dos bichos que cruzam a tela em linha reta; a pontuação é o número de segundos que você sobrevive. Serve para dois minutos, ou para uma hora se você estiver atrás do seu recorde.
- Godot Open RPG é uma demo curta de RPG por turnos da GDQuest. Você anda por uma floresta e uma vila em pixel art, conversa com todo mundo e enfrenta monstros em batalhas de menu, em que primeiro se escolhem todas as ações e depois a rodada acontece. É um trabalho em andamento, curto como um cafezinho, e um download de 55 MB.
Também é feito em Godot o Librerama, um fliperama de 24 microjogos que duram poucos segundos cada.
LÖVE
O LÖVE é um framework para jogos 2D escritos na linguagem Lua, com licença zlib. Não tem editor: o autor escreve o código e coloca os arquivos numa pasta, que o LÖVE então executa. Na FredyGames, rodamos os jogos de LÖVE com uma cópia do LÖVE compilada para o navegador.
- Neon Phase é um jogo de plataforma e exploração feito em cerca de nove dias para uma game jam. Você é uma funcionária de fábrica, uma cabra, que perdeu as chaves e precisa achá-las antes do fim do turno, conversando com vizinhos peculiares e levando junto um chip de upgrade falante chamado Chip. Dura pouco mais de meia hora, e o código (ISC) e a arte e a música (CC BY-SA 4.0) são livres.
pygame
O pygame é uma biblioteca para fazer jogos em Python. A versão que usamos é o pygame-ce, uma edição da comunidade com licença LGPL 2.1. Para rodar os jogos no navegador usamos o pygbag, que empacota Python, pygame e os arquivos do jogo para WebAssembly. Como o Python precisa carregar primeiro, esses jogos demoram mais para começar.
- SolarWolf é um arcade rápido de coletar e desviar. A nave nunca para: você escolhe uma direção e ela segue, e precisa passar por cima de todos os cubos de energia da tela enquanto os guardiões nas bordas atiram em você. São sessenta fases, e terminar uma antes de o cronômetro vermelho acabar pula a seguinte. Foi feito por Pete Shinners e saiu em 2004.
Há muito mais jogos de pygame na página da plataforma PC.
Pyxel
O Pyxel é um motor para Python, com licença MIT, pensado para jogos de estilo retrô, com pixels grandes e som simples. Como os jogos de pygame, os de Pyxel rodam sobre uma cópia do Python para WebAssembly.
- GO FROG é um joguinho de um sapo nadando contra a correnteza de um rio sob a chuva. Os controles são dois, esquerda e direita, e cada toque faz o sapo pular para a frente e um pouco para o lado, enquanto a correnteza o puxa de volta. Pedras descem o rio, e a pontuação é a distância que você alcança. Foi feito para partidas curtas e funciona com clique do mouse ou toque no dedo, além do teclado.
Ren'Py
O Ren'Py é um motor de visual novel, histórias contadas com texto, imagens, música e escolhas, com licença MIT e algumas partes sob a LGPL. Você lê, clica para continuar e de vez em quando escolhe o que dizer ou fazer.
- The Question é a demo que acompanha o próprio Ren'Py: um estudante universitário que precisa tomar coragem para fazer uma pergunta à amiga de infância. Tem duas escolhas, dois finais e dura uns cinco minutos. Se você nunca jogou o gênero, comece por aqui.
- Learn to Code RPG é um jogo bem mais longo da freeCodeCamp.org. Você é a Lydia, que aprende programação sozinha e quer um emprego de desenvolvedora. A cada dia você decide se vai estudar, trabalhar um turno, ver os amigos ou praticar com perguntas de quiz, e, segundo os autores, a história tem seis finais diferentes. Salve antes das grandes escolhas.
Bevy
O Bevy é um motor de jogos para a linguagem Rust. Os jogos feitos com ele são programas em Rust, escritos em código, não montados num editor visual. Os jogos de Bevy podem ser compilados para WebAssembly e rodam direto numa página web.
- Pinch Points é um quebra-cabeça numa praia: caranguejos andam em linha reta, e você coloca setas na areia para levá-los ao seu castelo de areia antes de a maré voltar. São cem fases na campanha e um modo versus para dois a seis jogadores.
- Cube Collection é um quebra-cabeça tranquilo em que você desliza todos os cubos verdes de uma vez e as cores se comem como em pedra, papel e tesoura. Tem 17 fases e nenhum som.
Ebitengine
O Ebitengine é um motor 2D para a linguagem Go. Os jogos feitos com ele são compilados direto para WebAssembly.
- AAAAXY é um jogo de plataforma em espaços impossíveis: as salas se encadeiam, se sobrepõem e se dobram, e você se orienta lembrando de pontos de referência, não desenhando um mapa. Uma primeira vez leva de quatro a seis horas, mais ou menos.
- Linefire é um tiro com dois direcionais, desenhado em linhas de vetor brilhantes, com rocha que os seus tiros conseguem escavar. O autor diz que ainda está em pré-alfa, então espere arestas.
raylib
A raylib é uma biblioteca pequena para fazer jogos em C, com licença zlib, e tem versões para várias outras linguagens.
- Apple Master Revived é um jogo de pegar maçãs escrito em Zig com raylib. Você desliza uma cesta sob as maçãs que caem: as maduras dão pontos e saúde, as bichadas devem ser deixadas cair, e a barra de saúde diminui sozinha o tempo todo.
- Super Mango é um jogo de plataforma em pixel art escrito em C puro com raylib, com aranhas, serras e machados oscilantes em três fases. O autor também usa o projeto para ensinar C.
Flutter
O Flutter é um kit de ferramentas para criar aplicativos na linguagem Dart, para celular, computador e web. Quem faz jogos o usa com o Flame, uma biblioteca de jogos para Flutter, e o resultado também pode ser compilado para a web.
- Ricochlime é um quebra-cabeça de ricochete. Você mira uma saraivada de balas num campo de monstros-toco que avança e usa as paredes para acertar vários de uma vez. Tem licença AGPL, então o código-fonte completo é publicado com a versão do jogo.
- Xeonjia é um RPG de quebra-cabeças em gelo escorregadio, com 166 mapas: quando você começa a deslizar, só para ao bater em alguma coisa, e cada mapa vira um pequeno enigma sobre de onde partir.
Os jogos antigos também rodam em software livre
Os clássicos do site seguem a mesma ideia. Nossos jogos de DOS rodam no js-dos, que é o DOSBox compilado para o navegador, e as aventuras de apontar e clicar rodam no ScummVM, que troca o motor do jogo original por um moderno e livre. Beneath a Steel Sky é o melhor exemplo: os dados do jogo são os originais, e o ScummVM os executa. Esses emuladores têm licença GPL, então o código-fonte deles também é hospedado. Nossos guias de jogos clássicos de DOS e de como jogar retrô no navegador tratam deles.
Dicas para jogar
Clique uma vez dentro do jogo: muitos precisam disso para receber o teclado, e os navegadores só liberam o som depois que você interage com a página. Confira os controles na página do jogo, porque cada um usa teclas diferentes. E lembre que os saves ficam no navegador, neste computador, até você limpar os dados do site.
Por onde começar
Para algo que abre rápido e rende alguns minutos, jogue Dodge the Creeps ou GO FROG. Para um quebra-cabeça cheio de ideias num pacote pequeno, Pinch Points. Se você tem uma hora e gosta de plataforma, AAAAXY é para passar uma noite, e Neon Phase é uma boa meia hora. Para uma história, leia The Question em cinco minutos e, se pegar, siga para o Learn to Code RPG. E para um arcade rápido com sessenta fases, SolarWolf.