Forums » RGSS

Aula 1 - Programação, Editor de Scripts e Comandos

    • 683 posts
    4 de junho de 2015 13h25min15s ART

    Introdução

     

    Sobre as aulas e sobre mim...

      Olá makers, para quem não me conhece, prazer, sou o Madajuv.

      Comecei a me interessar por scripts pouco depois que conheci o RMXP, em 2006. No começo eu só pegava scripts prontos da net, mas devido a necessidade de scripts diferentes e a falta de internet (eu tinha internet discada e só podia acessar nos fins de semana) comecei a desbravar o editor de scripts e ir aprendendo aos poucos sobre eles. Na base da tentativa e erro, sem medo de errar, fui aos poucos aprendendo, sem ajuda de terceiros, sobre os scripts.
      Descobri minha paixão pela programação graças ao RGSS e espero um dia trabalhar como programador...

      A partir de hoje, gostaria de compartilhar com vocês tudo o que eu aprendi nesses aproximadamente 2 anos e meio de autodidatismo...



      Você deve estar pensando "Mais aulas sobre scripts?!" e eu respondo-lhe que sim. xD
      Contudo, pretendo fazer minhas aulas um pouco diferentes. Depois que tive acesso pleno à uma internet banda larga mesmo com acesso às várias aulas de scripts que têm aqui elas não sanavam minhas dúvidas e tinha que de novo, aprender sozinho algumas coisas ou pedir ajuda para scripters mais experientes.
      Nas aulas pretendo abordar desde o mais básico sobre scripts (a aula de hoje será sobre como usar o editor) até coisas avançadas (ou até onde o meu conhecimento for... xD)...
      E é isso aí. Também tentarei explicar as coisas de forma mais simples. Disse que tentarei, não garanto nada. Como eu aprendi sozinho as coisas irei ensinar as coisas do jeito que fui aprendendo. Para mim funcionou até que bem, espero que para vocês também funcione. =]



    Aula de Hoje

     

    Na aula de hoje eu irei falar um pouco sobre programação. Como funciona a lógica por trás dos scripts e como usar o editor de scripts. Essa aula é só para quem não sabeabsolutamente nada sobre RGSS.



    O que é um script?

     

    (Tópico para quem não sabe nada sobre programação em geral)

      Scripts são códigos, ou seja é um texto que você escreve para fazer determinadas ações. O que você escreve é traduzido por um compilador embutido no RMXP para que o seu computador interprete o que você quer que aconteça no seu jogo. Ou seja, você escreve uma espécie de roteiro lógico para o seu jogo.

    A lógica básica de programação é muito simples:
      Existem condições, blocos, dados e ciclos.

      Basicamente essas quatro coisas fazem você poder programar o que você quiser.
    Condição, como o próprio nome diz é uma condição. =p
    Existem uma infinidade de condições dentro dos scripts. Por exemplo, se X acontece então Z acontece, se X não acontece então Y acontece... Abstrato demais?
    Vamos para um exemplo mais prático:

    Se o jogador estiver no mapa e
      Se o jogador pressionar a tecla para cima e
        Se o tile de cima for passável
          andar para cima.
        Se não
          fazer o personagem olhar para cima

    É claro que aqui, eu simplifiquei monstruosamente um processo extremamente complicado. Porém não se assuste. Graças ao fato do RGSS ser uma programação orientada à objetos programar é bem simples e você não precisa saber como tudo funciona para fazer um script.

    Ciclos, também é óbvio, ciclos são ciclos e vice-versa.  x-D
    Existem muitos ciclos dentro dos scripts do RMXP. De fato, fazer jogos seria uma tarefa inimaginável sem os ciclos. Em qualquer Scene (será explicada em uma futura aula, por ora uma Scene é basicamente uma tela do jogo, por exemplo o Mapa, um Menu, o Título e etc...) existe um ciclo padrão chamado update (explicado em uma aula futura) que realiza as tarefas da sua Scene. Por exemplo, imagine se aquela condição que eu dei de exemplo ali em cima acontecesse só uma vez. Se o jogador não começasse o jogo com o dedo socado na seta para cima o personagem não andaria para cima. Só haveria uma chance para o jogador andar para cima, a não ser que você desse infinitos Ctrl+C/Ctrl+V. Completamente inviável, não?
    Bom, em resumo, ciclos são estruturas em que cabem comandos dentro. Os comandos que você coloca em um ciclo são os comandos que devem acontecer periodicamente (com certa frequência). A frequência padrão do RGSS é de 40 ciclos por segundo.

    Blocos. Blocos são estruturas que guardam mais do que uma ação dentro de uma condição, de um ciclo ou de outro bloco. Imagine que você quer fazer um script simples de correr. Vamos voltar as condições que exemplifiquei ali em cima e pensar em como ficaria isso:

    Se o jogador estiver no mapa e
      Se o jogador pressionar a tecla para cima e
        Se o tile de cima for passável e
          Se a tecla Shift estiver pressionada
            mudar a velocidade para seis.
            andar para cima.
          Se não
            mudar a velocidade para quatro.
            andar para cima.
        Se não
          fazer o personagem olhar para cima

    Veja que dentro da condição eu coloquei duas ações:
    Mudar a velocidade e andar para cima. Aquele conjunto de ações pode ser chamado de bloco.

    Como o script sabe quando é o começo e o fim de um bloco?

    O compilador do RGSS sabe que um bloco começou quando você usa algumas dentre as palavras reservadas, são aquelas palavras que aparecem em azul no script. Não são todas aquelas que começam blocos, em futuras aulas você aprenderá quais são e o que faz cada uma. A mais importante de todas é a end. A palavra end determina o fim de um bloco e sempre que você criar um bloco terá que fechá-lo no final com um end.

    Lembre-se end é a palavra e a palavra é end. Irei repetir a palavra end várias vezes para você memorizar que a palavra end finaliza os blocos. endendend e end. O que o endfaz? O end finaliza um bloco.

    Fixou bem?
    Ótimo. =]

    Fim da explicação sobre blocos:
    end

      Dados, em programação dados são informações que podem ser armazenadas. Dados são extremamente importantes na hora de programar. Pois se não houvessem informações armazenadas como o seu jogo faria alguma coisa se não há nada para comparar ou mostrar na tela (ou outro meio de output)? 
      No RGSS, assim como na maioria das linguagens de programação existem duas formas de você armazenar informação: em estruturas simples e em estruturas indexadas. Uma estrutura simples armazena uma informação somente. Uma estrutura indexada por sua vez pode armazenar várias informações e você acessa determinada informação a partir de um index ou índice (espécie de ID), daí o nome estrutura indexada.
      Em outras linguagens de programação você deve ser cauteloso sobre como armazena as suas estruturas, pois existem dois tipos de memória e elas não podem sobrepor uma à outra por excesso de dados. Felizmente o RGSS controla a memória muito bem e você não precisa se preocupar MUITO com isso.
      E o que exatamente é um dado? Geralmente um dado é um número inteiro ou Integer (Negativos e positivos), um número com ponto flutuante ou Float (Números racionais e irracionais), uma cadeia de caractéres ou String (palavras, frases, textos em geral), uma imagem (ou Bitmap ou Sprite), um arquivo binário ou normal com mais dados dentros, ou um Som ou (BGM, BGS, ME ou SE) ou um booleano (true ou false).
      A constante manipulação destes dados fazem o seu jogo ser o que ele é. =]

     

    RGSS - Ruby Game Scripting System

     

    (Este tópico é para quem é sabe programar em outra linguagem e quer migrar para o RGSS)

      A sigla RGSS como no título deste tópico, significa Ruby Game Scripting System, ou seja é uma linguagem de programação para jogos feitas com base no Ruby. O que isso significa? Que a maioria dos comandos que funcionam no ruby funcionam no seu script de RMXP. 
      E isso é bom? Claro! E não é pouco bom não, é bom pra car@&¨%$#*¨!!!! O Ruby pode ser considerado uma linguagem de altíssimo nível (isso, apesar do que o nome sugere, significa que é uma linguagem mais fácil de programar). Você não precisa declarar que tipo de dado (estrutura simples ou indexada), dentre Integer, Strings, Booleanos ou outros, você está criando, é só criar e boa. O compilador detecta finais de linhas sozinho. As condições podem vir depois da linha de comando. Além disso o Ruby aceita tipos diferentes dentro de uma estrutura indexada. Os ciclos podem ser simplesmente declarados, não precisa necessariamente ter uma condição para o ciclo (e ele detecta se você fizer alguma cagada nisso, não se preocupe com um bug iminente). Você não precisa trabalhar com ponteiros e ele controla sozinho a alocação de memória no heap e no stack.
      Porém, nem tudo é festa, o Ruby não é muito bom com recursão e se você não tomar cuidado pode acabar estourando o heap facilmente...

     

    O Editor de scripts

     

    Aqui veremos com funciona o editor de scripts. Siga as imagens:
    Spoiler 


    Para abrir o seu editor de scripts pressione F11 ou clique no botão em destaque:
    Imagem Postada


    Spoiler 


    Este é o editor de scripts, veja na legenda abaixo o que significa cada um dos espaços:
    Imagem Postada

    Legenda:
    1 - Neste espaço fica o nome do script selecionado, você pode mudá-lo simplesmente apagando e digitando. O nome do script ali não faz nenhuma diferença no resultado do jogo, serve somente para identificação mesmo.
    2 - Botão OK, ele fecha o editor de scripts e salva todas as alterações que você fez.
    3 - Botão Cancelar, ele fecha o editor de scripts SEM salvar as alterações que você fez.
    4 - Botão Aplicar, salva as alterações feitas, mas não fecha o editor de scripts. Acredite em mim, quando você estiver fazendo um script grande, clique nele algumas vezes e as vezes saia do editor e salve seu projeto, porque se houver uma queda de luz por exemplo ou sem querer você clicar em cancelar você perde tudo.
    5 - Botão de Ajuda, ele abre o arquivo de ajuda que está na pasta do seu RPG Maker. O único arquivo de ajuda completo é o japonês, nele vêm vários "scripts ocultos", são scripts que não aparecem ali no editor mas estão inclusos no RTP. A versão inglesa é a mais incompleta e como a versão portuguesa foi traduzida da inglesa ela também é incompleta. Se você baixou o RM 1.03 aqui terá a versão portuguesa. O que não é tão ruim, mas você pode não econtrar tudo que precisar.
    6 - Ali fica a lista dos scripts que estão no seu jogo, além daqueles existem os scripts ocultos, citado em 5. Você pode escolher um deles para mudar ou adicionar um novo script à lista. Geralmente os scripts tem de ficar acima do script Main e como o Ruby lê duas vezes os scripts você não precisa se preocupar muito com a ordem deles... Porém lembre-se: O scripts são lidos de cima para baixo, tanto na lista como no script. Se você colocar um script que reescreve alguma parte de outro em baixo, o conteúdo de um script acima será perdido. O que não necessariamente significa algo ruim. Relaxe, geralmente o scripter que fez o script dá essas instruções.
    7 - Isso mostra as linhas dos scripts, é algo muito importante quando você for tirar uma dúvida ou explicar alguma coisa para alguém ver a linha que tem que ser modificada ou apagada.
    8 - Nesse espaço fica o seu script. Ele funciona como um editor de texto normal. A diferença é que ele avança para a direita quando você abre um bloco e volta para a esquerda quando você fecha um, para facilitar a leitura do script. Se você selecionar um pedaço de script e pressionar TAB o texto será deslocado para a direita, para a posição de um suposto bloco.

    Spoiler 


    As opções que você tem para edição de texto com o clique direito:
    Imagem Postada

    Legenda:
    1 - Desfazer, desfaz a última ação que você fez no editor de scripts, é o famoso Ctrl+Z, também pode ser feita pelo mesmo.
    2 - Refazer, acabou usando o Ctrl+Z sem querer? Selecione essa opção ou pressione Ctrl+Y e o editor desfaz a sua desfazida. xD
    3 - Cortar, assim como em outros editores de texto, ele apaga um pedaço selecionado de texto e coloca na transferência. Se você colar depois o texto colado será o que você recortou. Pode ser acessado pelo Ctrl+X
    4 - Copiar, funciona igual ao Cortar, mas não apaga o texto que você colocar na transferência. Pode ser usado com o Ctrl+C.
    5 - Colar, coloca onde estiver o cursor do editor o que estiver na transferência. O atalho é o Ctrl+V.
    6 - Deletar, apaga o que estiver selecionado. Você também pode pressionar Del ou Bacspace.
    7 - Procurar, abre uma janela com uma caixa de texto, digite na caixa a palavra ou frase que você quer achar no seu script. Um atalho é o Ctrl+F. Essa ferramenta procura só no script selecionado.
    8 - Próximo, eéum atalho, vai para a próxima palavra ou frase que você pesquisou com o Ctrl+F, o atalho é o F3.
    9 - Anterior, funciona igual à opção próximo porém ao invés de ir para a próxima, vai para a anterior. O atalho é Shift+F3
    10 - Substituir, abre uma caixa de texto com dois campos, no primeiro você coloca o que deve ser procurado e no segundo você coloca o que deve ser substituído pelo que você colocou no primeiro campo. Ferramenta poderosa, use com moderação. O atalho é Ctrl+H.
    11 - Ir Para, coloca o cursor do editor de texto na linha que você especificar. O Atalho é Ctrl+G.

    Spoiler 


    As opções que você tem para edição de texto com o clique direito:
    Imagem Postada

    Legenda:
    1 - Inserir, cria um novo script, em branco, acima do que estiver selecionado. Atalho: Insert.
    2 - Cortar, apaga o script e o coloca na transferência. Um posterior Ctrl+V resulta na cola deste script cortado. Atalho: Ctrl+X
    3 - Copiar, copia o script inteiro. Pode ser colado depois. Atalho: Ctrl+C.
    4 - Colar, coloca o script que estiver na transferência acima do script selecionado. O atalho é o Ctrl+V.
    5 - Deletar, apaga o script que estiver selecionado. Você também pode pressionar Del.
    6 - Procurar, este comando procura determinada palavra ou frase dentro de todos os scripts do editor, o resultado é mostrado em uma lista. O atalho é Ctrl+Shif+F.


    Além das funções acima, é possível aumentar ou diminuir o tamanho da fonte do seu editor de scripts. Para isso segure a tecla Ctrl e gire o scroll do mouse.



    Adendos

     

    (Para os curiosos)

    Aqui explicarei alguns termos que apareceram no tópico, alguns são importantes, outros são mera curiosidade, por isso identificarei cada um com Lohans. Fica a legenda:
    ò-Ô? Curiosidade
    :pensa: Importante


    ò-Ô? Stack - Stack é a memória "organizada" do programa. O Stack é uma pilha de dados e ações que cresce conforme dados e ações são utilizados e implode conforme não são utilizados. Se essa pilha se encontar com o Heap, o outro tipo de memória o seu programa fecha.
    ò-Ô? Heap - Heap é a memória "desorganizada" do programa. Ela cresce conforme o programador aloca memória. E só descresce se o programador liberar espaços nela implodindo manualmente alguma estrutura que ele criou. No RGSS o Heap também é controlado pelo compilador e o programador não precisa se preocupar com isso. O mundo não é tão cruel assim afinal...
    ò-Ô? Compilador - Um compilador é um conversor. Ele converte um texto escrito em uma linguagem de programação para linguagem de máquina. Ou seja, ele traduz para o seu computador o script que você escreveu.
    ò-Ô? Ponteiro - Um ponteiro é uma "coisa" que aponta para algum lugar da memória, ele é usado para alocar espaço no heap e criar algum dado com isso. Um ponteiro pode apontar para outro ponteiro, para a memória, para nada ou para lixo (restos de dados). Ponteiros são a causa das dores de cabeça de vários programadores e aqui vai a notícia boa: você não precisa deles no RGSS. \o/ 
    ò-Ô? Input/Output - Inputs são meios pelas quais um jogador pode se expressar. O RGSS aceita o teclado ou um joystick para PC, porém, através de scripts e/ou dlls você pode usar outros Inputs como o mouse. Output são os meios pelas quais um jogo pode se expressar. O RGSS tem como outputs padrões o monitor e as caixas de som/fones de ouvido.
    :pensa: Linguagem orientada à objetos - Isto é um conceito bem abstrato. Portanto em resumo o que eu te digo é que a programação neste tipo de linguagem é dividida em partes. E graças a isso você não precisa entender como funciona uma parte para poder usá-la, basta chamá-la. O RGSS é uma linguagem assim, e seus objetos são: módulos, classes e métodos. Próxima aula prometo que explico o que são essas 3 coisas.
    :pensa: Objeto - Objeto é um tipo de bloco, bem mais tunado... Será um dos assuntos da próxima aula.
    :pensa: CORES - Como você deve ter visto nas screenshots, no editor de scripts algumas palavras ficam com cores diferentes. Veja o que significa cada cor:
    Spoiler 
    Comentários (verde) - Um comentário é ignorado pelo compilador. Ele serve somente para você programador entender melhor os códigos. Eles não fazem diferença nenhuma para o seu jogo.
    Palavras reservadas (azul) - Uma palavra reservada tem alguma função especial dentro do script. Elas serão explicadas em futuras aulas...
    Números (vermelho) - Números aparecem em vermelho
    Sinais (Azul claro) - Os sinais de operações matemáticas e outros tipos de sinais aparecem em azul claro: + - = () [] {} , . : < > etc...
    Textos (Rosa) - Strings aparecem em rosa (textos, palavras...)
    Mais comentários (Cinza) - Comentários também podem aparecer em cinza. Não diferem em nada dos comentários verdes.
    Outros (preto) - São variáveis, comandos... O que não for o que eu disse acima fica em preto. xD

    :pensa: Comentários (Como criá-los) - Em Cores aparece a explicação do que é um comentário. Para você criar um comentário verde adicione o símbolo # (Cerquilha) em uma linha. Tudo o que estiver na frente dela será um comentário.
    Para criar uma área de comentário verde digite:
    =beginBlá blá bláIstoé o meu comentário Ainda estou comentando Eu gosto de comentar bastante...Acho que já está bom...=end
    Para um comentário cinza use dupla cerquilha (##). O que estiver depois dela ficará em cinza e será ignorada pelo compilador.
    :pensa: Booleano - Um valor booleano pode ser verdadeiro (true) ou falso (false). Eles servem para criar condições com mais facilidade. É claro que você poderia usar zero e um por exemplo, mas um booleano ocupa menos memória e é mais fácil de se entender.



    Bom... E é isso aí, espero que tenham gostado e até a próxima aula. o/

    Na próxima aula colocaremos a mão na massa, portanto se prepare.  :ok:

    Postem dicas, comentários, críticas, decepções, dúvidas e etc...