Centro RPG Maker

Centro de Criação => Programação => Programação - Exposição e Avaliação => Tópico iniciado por: Brandt online 16/03/2020 às 00:08

Título: RGSS3 CLI
Enviado por: Brandt online 16/03/2020 às 00:08
(https://i.imgur.com/HW2lYbO.png)

[box class=pagelinks send_topic]
Script de Extração/Construção de scripts RGSS3 via CLI
por Masked


Veja também: RGSSDoc (https://centrorpg.com/index.php?topic=22805.0)
[/box]


[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 (https://ruby-doc.org/core-2.6.3/Marshal.html) do Ruby, e pode ser lido com ele da mesma forma.

Dentro do arquivo, temos serializado um Array com Arrays internos, no formato:

[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 (https://ruby-doc.org/stdlib-2.7.0/libdoc/zlib/rdoc/Zlib.html).

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:

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 é:

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:

ruby rgss3.rb start


[box class=plainbox]O script[/box]


rgss3.rb (Gist) (https://gist.github.com/masked-rpgmaker/235581d6f5ad1ffa6e764697224367f8)

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:





Por hoje é isso, meu povo. Obrigado pela atenção \o
Título: Re:RGSS3 CLI
Enviado por: Ellye online 16/03/2020 às 00:23
Bem útil isso, muito melhor poder trabalhar direto na IDE e testando rapidamente - foi uma das principais melhorias que eu senti quando migrei do VXA pro MV, então muito bom ter um modo de fazer isso no VXA também.