Quod erat demonstrandum
[box class=plainbox]Introdução[/box]
TL;DR: Cansei de usar o editor de scripts, então fiz um script Ruby que extrai os scripts do projeto e joga numa pasta, e depois junta todos eles de volta no arquivo Scripts.rvdata2.
Yo o/
Quem faz scripts pro RPG Maker VX Ace sabe que o fluxo (e o ambiente) de desenvolvimento não é lá dos melhores. No geral, você fica limitado a usar o editor de scripts que vem com o RPG Maker, que exceto pelo syntax highlighting e indentação não ajuda em muita coisa.
Por isso, fiz um script Ruby que extrai os scripts do jogo e joga em pastas de forma que é possível juntar eles depois de volta no arquivo Scripts.rvdata2. A implementação ainda está meio simples (fiz só pra ser prático de usar e tomar o mínimo possível do meu tempo xd), mas já quebra um galho se usado em conjunto com uma IDE.
Tenha em mente que é necessário ter Ruby instalado para executar esse script.
[box class=plainbox]Como Funciona?[/box]
O script é dividido em três partes:
1. Extração
O primeiro passo é a extração do scripts: Primeiro, o script carrega o arquivo Scripts.rvdata2 da pasta Data (nota: o script deve ser executado na pasta raíz de um projeto do RMVXAce, i.e. no mesmo nível do arquivo Game.rvproj2). Esse arquivo é salvo pelo RPG Maker usando o módulo Marshal do Ruby, e pode ser lido com ele da mesma forma.
Dentro do arquivo, temos serializado um Array com Arrays internos, no formato:
Código:
[some_number, title, deflated_content]
"some_number" é um valor numérico (imagino que um checksum?), que até onde eu sei é ignorado pelo RPG Maker. Vamos ignorá-lo também, portanto.
"title" é o nome do script no editor de scripts. O script de extração usa isso para determinar o nome do arquivo criado para um script extraíd.
"deflated_content" é o código do script, compactado com o módulo Zlib.
Quando executada, a extração cria uma pasta Scripts no projeto, com uma subpasta para cada seção de script. Uma seção é determinada por um script vazio com nome "? Alguma Coisa", como por exemplo "? Cenas", "? Janelas" e etc.
Dentro de cada uma dessas pastas, o script cria também um arquivo ".list". Esse arquivo determina a ordem de carregamento dos scripts. Note que linhas em branco são consideradas, e adicionam scripts em branco com título em branco no editor de scripts quando o arquivo Scripts.rvdata2 é compilado.
Supondo que o script de extração foi salvo num arquivo "rgss3.rb" na pasta raíz de um projeto do RPG Maker, a extração pode ser executada com o comando:
Código:
ruby rgss3.rb extract
2. Compilação
Da mesma forma que o script é extraído, é possível compilar novamente o arquivo Scripts.rvdata2, aplicando as funções inversas onde devido. O comando para isso é:
Código:
ruby rgss3.rb build
3. Execução
Por conveniência, o script também tem um comando start para executar o Game.exe em modo de depuração:
Código:
ruby rgss3.rb start
[box class=plainbox]O script[/box]
rgss3.rb (Gist)
Salve o arquivo na pasta raíz do projeto e execute pela linha de comando com Ruby, conforme indicado na seção "Como Funciona?".
[box class=plainbox]Considerações[/box]
O script foi feito para ser simples, então talvez falte algum recurso. Para mim, isso já serviu pro que queria, que era editar os scripts usando uma IDE (no meu caso, RubyMine). Estou aberto a sugestões de feature \o
Algumas coisas que vale a pena tomar cuidado:
- O comando extract sobrescreve quaisquer arquivos existentes. Isso quer dizer que extrair os scripts sem compilá-los antes pode apagar o que você fez. Ops.
- O comando build monta o arquivo Scripts.rvdata2, de forma que o Game.exe lê os scripts atualizados quando é executado. Porém, o RPG Maker não carrega esse arquivo exceto quando o projeto é aberto, o que significa que seus scripts não estarão atualizados no editor de scripts interno do RPG Maker, mesmo depois de compilados.
- O item acima implica também que, ao salvar o projeto pelo RPG Maker, o arquivo Scripts.rvdata2 será sobrescrito pelo que existia quando o projeto foi aberto no RPG Maker. Por isso, evite usar o editor de scripts interno, e teste o jogo somente usando o CLI (testar o jogo pelo RPG Maker salva o projeto). Tome cuidado também para não executar o comando extract depois de salvar o projeto no RPG Maker sem rodar antes o comando build.
Por hoje é isso, meu povo. Obrigado pela atenção \o