Ren’py – Motor de Jogo para Visual Novel
Escolhi para este primeiro artigo, falar sobre este Motor de Jogo (game engine) especializado em jogos no estilo Visual Novel, pois ele é um bom começo não só para quem quer iniciar seus trabalhos em programação, como para quem quer aprender a mecênica de programação de games, e por ser baseado em Python também servir como um ponto de aprendizagem da linguagem. O RenPy atualmente está na versão 7.3.5 e suporta para o desenvolvimento o Windows, o Linux e o Mac Os X, e as plataformas alvo além destas incluem HTML5, Android e iOS.
RenPy foi criado em meados de 2005 e apresentado ao publico e totalmente funcional e escrito da maneira que o conhecemos em 2012, totalizando mais de 15 anos de aperfeiçoamento, já como um game engine voltado ao desenvolvimento de romances visuais, e desde lá vem sendo constantemente trabalhado pela comunidade, e diversas funcionalidades vem sendo incorporadas como games multiplataforma, suporte a transações e compras dentro dos jogos, salvamento e jogos online.
Possui suporte a tratamento de imagens de diversos formatos e separação das imagens em camadas, processamento do texto em múltiplos idiomas, com importação de fontes e possibilidade de uso de idiomas de escrita À DIREITA e também À ESQUERDA. Tratamentos de áudio, músicas e efeitos sonoros, controle de vídeos e animações diversas. Sua linguagem de script é simples e fácil de aprender e complexa o suficiente para permitir todo o controle da interface e andamento do jogo. Além de que o uso do Python permite que toda a jogabilidade e complexidade de simulações seja executada pelo motor do jogo, além de permitir uso de bibliotecas que permitem uso e iteração com recursos online de dentro do app.
Com todos os scripts sendo feitos em texto puro, permite que qualquer desenvolvedor use o ambiente que esta acostumado para trabalhar com scripts .rpy desde um simples bloco de notas. Particularmente, uso o VS Code que tem extensões de suporte tanto aos scripts Python como através de extensões o uso de scripts renpy nativos, alem de outros recursos.
Ao criar um projeto, toda uma interface padrão de jogo, com recursos de configuração, idiomas e opções de salvamento e carregamento de jogos já vem previamente configurada polpando horas de trabalho de programação, e permitindo uma customização total da interface, além de permitir um histórico e intercâmbio de informações entre jogos de um mesmo desenvolvedor para a criação de sagas por exemplo.
Onde Obter e Como Instalar?
Obter é muito fácil, basta fazer o download da versão correspondente ao seu sistema diretamente no site oficial, www.renpy.org que mantém o projeto, e pronto. Para instalar, basta descompactar o arquivo para uma pasta de seu computador, e executar o software clicando no executável conforme a versão do seu sistema, e a tela principal do programa já será exibida, permitindo acesso a todas as funcionalidades do programa.
Nesta tela é possível encontrar tudo o que o programa oferece, a direita, na parte inferior é possível acessar o menu de configurações (preferences) e colocar a interface em português, definir o diretório onde os projetos (games) serão iniciados, escolher o editor de scripts padrão, as opções de navegação de arquivos e bibliotecas do Python, as opções do laucher (inicializador) do game e salvar da maneira que melhor se adapta ao seu projeto.
A partir da tela inicial é possível abrir as pastas onde os recursos como imagens, áudio, componentes de interface e códigos são salvos e ficam disponíveis no jogo (Open Diretório / Abrir Diretório). Outra opção são editar os arquivos de script usando o editor configurado (File Edit / Editar Arquivo) onde mais adiante falaremos o que faz cada arquivo e como é feita a edição. Abaixo, temos as ACTIONS que são as funções do enguine, como:
-> Navegar pelos Scripts: que abre uma tela onde é possível encontrar todas as definições de funções como navegar pelos arquivos que compõem o projeto, tanto os do motor como os definidos pelo usuário (criador) do game. Verificar as definições de labels (etiquetas) que são funções dentro do game como definição de personagens, configurações entre outras. Navegar pelas definições, de cada componente (objetos) do game. Abrir os transforms que são os movimentos ou mudanças como animações e outros aspectos. Screens, que são as telas e cenários definidos no game. Callables que são as funções do programa e as do usuário (escritas em Phyton) e por fim o TODOs que serve para você definir em casos de equipes de desenvolvimento o que está para ser feito, é um comentário definido nos arquivos, que veremos em outro artigo.
-> Checar Scripts (lint): serve para fazer uma varredura nos seus scripts para verificar falhas de código como chamar imagens ou recursos indisponíveis, ou esquecer de fechar uma tag, ou deixar uma função vazia, erros de endentação entre outros. Alem de produzir um resumo do game, como idiomas, numero de cenas, diálogos etc.
-> Change/Update GUI: tem a finalidade de recriar o script de interface, e todas as imagens necessárias para o funcionamento dela, como botões, ares de sobreposição, diálogos, molduras, barras de rolagem e outros itens de interface, já nas cores predefinidas pelo programador, e corrigindo ou alterando a interface de volta a uma padrão, útil se durante a edição acabou perdendo alguma imagem ou se o game parou de funcionar por problemas na gui este script resolve, bem como se depois de iniciada a programação você resolver mudar a interface para algo diferente.
-> Eliminar dados persistentes: Tem o objetivo de preparar o jogo para a distribuição, ele elimina dados salvos e dados persistentes (salvos mesmo que o jogo seja reiniciado) para que você possa compilar a versão final que será distribuída, sem que os saves e dados que ficaram residuais dos testes durante o desenvolvimento sejam empacotados junto, deve sempre ser executado antes de gerar uma versão de distribuição.
-> Forçar Recompilação: Ele refaz os arquivos de .rpyc que são as versões que devem ser distribuídas dos seus scripts, ou seja, são uma versão já pré-compilada dos arquivos rpy que não podem ser alteradas e nem editadas pelo jogador, com o avançar dos artigos você vai entender essa função, não se preocupe.
Por fim, temos a área das funções de distribuição e compilação final do game, onde o primeiro link CONSTRUIR DISTRIBUIÇÕES vai dar espaço para a tela abaixo:
Nome do diretório onde será instalado o game por omissão, pois o instalador permite ao usuário escolher o diretório padrão onde será descompactado os arquivos.
Nome do Executável é o nome do arquivo de entrada para iniciar o game no dispositivo do usuário, lembre-se que no windows é gerado um .exe, no Mac Os X .dmg e no linux um script Bash com permissão de execução e um script Phyton.
Ações que são funções úteis antes de compilar, como editar o options que são as opções em tempo de execução e configurações finais e de inicialização. Adicionar das Clausulas da Chamada, que recria as chamadas internas, útil caso você tenha atualizado o renpy após ter compilado, para validar se tudo continua rodando na versão nova. Recarregar ou Recompilar os rpyc, Upload to itch.io que é uma plataforma para distribuições de games independentes, muito similar ao github porém dos games.
Temos também um bloco de CONSTRUIR PACOTES que vai gerar os diversos pacotes para serem distribuídos para cada plataforma, onde:
PC : Windows and Linux – gera um .zip com todo o conteúdo do jogo e o arquivo Python de execução, nesta versão são gerados um .exe e um .bin para abrir o interpretador Phyton que acompanha o engine, já com todas as bibliotecas usadas no projeto e importadas pelo usuário do engine.
Linux X86/X86_64 – Gera somente a versão Linux em um .tar.gz para distribuição, economiza alguns mb no tamanho total ao se criar versão independente. do que usar uma versão multiplataforma como a opção anterior.
Macintosh x86_64 – Gema um DMG próprio para ser executado no MacOs e instalado, como um aplicativo comercial.
Windows x86 – Gera uma versão em .exe do projeto, com um instalador que roda diretamente no windows, similar a versão linux, ele é otimizado para a facilidade de instalação.
Windows, Mac e Linux For Markets – É a versão mais simples, pois gera em um único arquivo zip a cópia do projeto, basta extrair o arquivo para o diretório ou área de trabalho e ele já vai rodar, podendo ser de um pendrive ou CD de autoexecução. Em contrapartida, ele roda via um interpretador Phyton próprio e consome mais recursos que as demais versões independentes de cada plataforma.
WEB – Cria uma versão que roda diretamente em navegadores de internet que aceitem a execução de scripts web assembly que rodam usando uma versão pré compilada do javascript, e roda no servidor, porém todos os recursos de processamento rodam no browser. Em breve vou fazer um artigo somente sobre o web-assembly.
E as opções, ai se ticadas forçam o uso dessas funções em cada módulo de compilação, não só na primeira compilação. Basta escolher e ticar as versões que ficam marcadas e clicar em construir, que os arquivos de distribuição do game serão gerados (demora um pouco, conforme o tamanho do game e da quantidade de distribuições, pode levar algumas horas de processamento).
Por fim, na tela anterior (principal) ainda tem as opções ANDROID que abre uma tela específica de funções de execução e compilação para o Android, que vamos exlicar mais para frente, já que são funções mais avançadas e dependem de softwares de terceiros para funcionar. iOS que é uma forma de gerar (exportar) o projeto XCode com suas propriedades para ser compilado e distribuído através da Apple Store. WEB que vai abrir outra caixa com as opções de distribuição do game como um APP WEB ou os arquivos para serem enviados a um servidor com suporte a Python e os arquivos para uma terceira versão de servidor sem suporte ao Python. Em tempo, as versões ANDROID, iOS e WEB só estarão disponíveis se você instalar os plugins dessas versões junto com o download do SDK mais vamos apresentar essas funcionalidade e como instalar elas na parte correspondente do tutorial.
Finalizando, temos 2 opções voltadas a tradução, a primeira gerar traduções serve para abrir a janela com as funções de exportar, importar e mesclar arquivos contendo as falas, essa função permite uma tradução rápida, dos textos básicos (definidos no game como texto) usando um tradutor como o google translator. Por fim temos o acesso a tela de extração de diálogos, que serve para exportar os arquivos com todos os diálogos existentes no game para uma revisão ortográfica ou apoio numa tradução.
Até a proxima, e deixe seu comentário sobre o conteúdo ou dúvidas que você tenha a respeito do RenPy essa poderosa ferramenta para o desenvolvimento de Visual Novels ou treinamentos e outros que possam ser gamificados com um roteiro. No próximo artigo, vamos falar sobre as definições de personagens e tipificação de dialogos.