🤔 Para Refletir :
"Pare de pensar nos erros do passado e comece a planejar os erros do futuro!"
- Ricky O Bardo

RGSS3 CLI

Brandt Masculino

Assistente
Colaboração
Colaboração
Quod erat demonstrandum
Juntou-se
22 de Junho de 2015
Postagens
336
Bravecoins
1.156
HW2lYbO.png


Script de Extração/Construção de scripts RGSS3 via CLI
por Masked


Veja também: RGSSDoc


[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
 
[member=78]Brandt[/member]

Primeiramente, parabéns!!!

Fico muito feliz em ver novas ferramentas sendo criadas para melhor a utilização do RGSS3, assim como você, eu não troco Ruby por JS HAHA!

Eu sempre tive esse mesmo problema (um ódio do editor padrão do RM), por conta disso, a um tempo atrás desenvolvi um Script bem parecido com o seu (que utilizo muito até hoje).

Basicamente eu faço algo bem parecido com o que você vez, leio os arquivos .rb de uma pasta.

No caso do meu script, eu aproveitei a leitura dos arquivos ao iniciar o game, e criei uma tecla de Reload (F5), onde eu consigo editar os arquivos Ruby (com qualquer editor), salvar e dar um reload na Scene sem sair do game.

Vi que o seu script está bem organizado e estruturado

Como os dois scripts tem propósito bem parecido, caso tenha alguma ideia de unir os scripts para criar algo mais potente para uso da comunidade, estou totalmente disponível!

No vídeo abaixo estou utilizando o Sublime para editar o RGSS e F5 para dar reload no game


[youtube]https://www.youtube.com/watch?v=0U8TE9uoQ1k[/youtube]

Nesse tópico eu explico melhor:

https://www.condadobraveheart.com/forum/index.php?topic=5413.msg41435#msg41435


 
[member=770]Resque[/member] Ah, confesso que tinha esquecido do seu xd

Eu dei mais foco para criar um CLI mesmo porque minha ideia é ter que usar o RPG Maker em si o mínimo possível. Tendo um script que roda sozinho, eu posso só configurar a IDE pra chamar ele usando o ruby da máquina mesmo e tudo acontece sem precisar abrir o RM. No meu caso é ideal, porque eu raramente sequer mexo nos mapas hahahah

Curto a ideia do reload, mas precisaria estudar melhor a possibilidade aqui, visto que o meu script opera direto com o Script.rvdata2. Não sei se pode acontecer algum conflito ou algo do tipo. Sobre o merge dos scripts, seria interessante, mas acho que ia exigir reescrever os dois, porque apesar do propósito similar o funcionamento é bem diferente xd
Pra ser sincero, a vantagem que eu vejo nessa abordagem do compilar/extrair o Scripts.rvdata2 é exatamente alienar por completo essa estrutura de edição do script do RM, e acho que adicionar um script ao projeto para esse propósito iria contra essa premissa.

Enfim, pretendo dar uma tunada nesse CLI aí no futuro quando sobrar um tempinho ou a necessidade surgir, pode contar que vou tentar viabilizar o hot reload de alguma forma. Qualquer coisa dou um toque \o
 
Voltar
Topo Inferior