Forums » RPG MAKER 2K e 2003

Aula 1 - Estrutura dos Códigos / Tipos de Variáveis

    • 683 posts
    14 de maio de 2015 23:04:50 ART

    Destiny Script
    :zuado: Aula 1: :zuado:
    Estrutura dos Códigos
    Tipos de Variáveis
     

    Introdução:

     

    E aí, galera?
    Depois de mais de um mês devido à manutenção programada do fórum, estamos de volta com as nossas aulas de Destiny Script. Nesta aula será um pouco mais prática em relação à aula 0, que foi uma breve introdução explicando como se utiliza este patch ao RPG Maker 2000, e tivemos pouco movimento no sentido de trabalhar com a ferramenta.
    Vamos aprender um pouco mais sobre as estruturas dos códigos, ou seja, saber a diferença entre operações e comandos e como fazê-los. Também vamos começar a falar sobre os tipos de variáveis que são utilizadas nesta linguagem: Integer, que são as variáveis de número inteiros; Float, que aceitam números decimais; Strings, que são variáveis que aceitam letras e símbolos além dos números, apresentados em forma de texto; e outros como Byte, Word e Dword, que geralmente são usados em manipulação de arquivos.

    Vamos então ao início da aula!


    :mrm=linha:

    Estrutura dos Códigos

     

    É muito importante você saber como usar os comandos e associá-los ao script. No DestinyScript nós temos duas maneiras de aplicações ao código no qual o interpretador vai ler e executá-lo no seu jogo. Queria deixar bem clara a diferença entre operação e comando para que vocês possam ter uma concepção lógica em torno disso tudo.

    Operação: quando você deseja acionar um cálculo ou então para atribuir valores.

     

    $
    v[1] = 8;
    v[1] += 2;      // 8+2 = 10
    v[2] = v[1]-5// 10-5 = 5

     

    Podemos perceber que as variáveis no Destiny Script são objetos e ainda são trabalhadas como Array, que possuem vários valores num mesmo objeto. Dentro destes colchetes também podemos colocar variáveis e equações. Veja:

     

    $
    v[1] = 1;
    v[v[1]+1] = 20// v[1] = 1 ; 1+1 = 2 ; v[2] = 20

     

    Comandos: chama uma determinada ação do Destiny para executar o código. Os comandos costumam ser divididos da seguinte forma.

     

    $
    Objeto.Método(Parâmetro);
    Objeto.Método(Parâmetro1,Parâmetro2);
    Objeto.Método();

    Objeto.Propriedade;
    Objeto[Index].Propriedade;

     

    Podemos perceber que não há um comando sem um objeto. Neste caso, o objeto representa algum dado no qual receberá um comando, e nesses comandos nós usamos métodos e propriedades, ou seja, o método ele vai causar uma ação a esse objeto e a propriedade é para representar um valor armazenado nesse objeto. Há também objetos que possuem arrays, onde nós envolvemos a ID desse tal objeto, representado como "Index" no exemplo acima.
    Quando acionamos um método, nós precisamos de parâmetros para que possamos realizar esta ação. Também temos métodos que não cobram parâmetros, mas mesmo assim ainda precisam dos parênteses, mesmo vazios, para que possa ser compreendido como um método. Lembre-se que cada objeto tem seus métodos e propriedades e cada método tem seus parâmetros, e não se esqueça de separá-los com um ponto (.) de acordo com o exemplo.

    Count

    Tipo: Dword
    Esta prioridade não pode ser alterada

    :mrm=linha:

    $
    v[1] = Actor.Count;

    Se no seu Database tem 10 heróis na lista, a variável 1 terá o valor de 10. Se tiver 8, terá o valor 8.



    Objeto Actor
     

    Para que você possa entender melhor essa estrutura, vamos conhecer o nosso primeiro objeto não só da lista da biblioteca do Destiny, mas o primeiro a ser compreendido: o objeto Actor.
    Este objeto é nada mais do que todos os heróis que têm na lista do Database do seu jogo. No Destiny podemos realizar ações com os dados dos heróis ou utilizá-los em alguma operação. Portanto este objeto é um array, ou seja, nós temos vários heróis no Database, e o Destiny precisa armazenar um de cada vez.
    Todos os objetos que possuem arrays (dizendo de grosso modo, no qual envolvem colchetes []), possui uma propriedade chamada "Count", que serve para mostrar o valor máximo da array. No caso do objeto Actor, represente o número de heróis na lista do Database de seu projeto. Veja ao lado como aplicar o comando de acordo com o exemplo acima.

     



    Imagem PostadaMãos à Obra

    Muito bem, vamos à nossa primeira e pequena atividade.
    Com a propriedade que aprendemos agora, eu quero que vocês façam uma string onde apareça os nomes de todos os heróis que tem no Database do seu jogo. Por enquanto, não se preocupe com o objeto Destiny. O loop "for" você pode ler a revisão que escrevi no fórum sobre o Destiny Patcher onde explica tudo isso e muito mais.
    No entanto aí está o código para fazer isso, se for possível, não apenas copie e cole, tente entender como tudo funciona:

    $
    Destiny.Debugger.Output.Clear();

    for(v[1] = 1; v[1] < Actor.Count; v[1]++)
      Destiny.Debugger.Output.Print(Actor[v[1]].Name);
    next;

    Destiny.Debugger.Output.Show();

    Não se esqueça de realizar os procedimentos explanados na aula 0 para ativar o Destiny no seu projeto.
    Você pode colocar esse comando num NPC, Auto Start ou Processo Paralelo; escolha da maneira que você desejar.



    Vamos conhecer mais algumas das propriedades utilizadas ao objeto "Actor". Este objeto não possui métodos pois este é um objeto que serve para utilizar e/ou manipular dados do herói. Há outros objetos que terão outra função e outras formas de serem trabalhadas.
    As demais propriedades apresentadas você terá que especificar qual herói você deseja manipular, portanto, precisaremos colocar colchetes e dentro o número da Id do herói de acordo com a lista que está no Database. Todas essas que vou colocar agora são strings e podem ser alteradas, e depois colocarei as propriedades que são lidas como Dwords, no caso são armazenadas em variáveis.



    Strings

    Name: Aparece o nome do herói selecionado na array do objeto;
    Degree: Cargo do herói;
    Charset: Mostra o nome do gráfico atual do herói;
    Faceset: Nome do gráfico atual do Faceset;

    $
    a[1] = Actor[1].Name; // a[1] = "Alex"
    Actor[1].Name = "Joãozinho";

    a[2] = Actor[1].Degree; // a[2] = "Soldier"
    Actor[1].Degree = "Pedreiro";

    a[3] = Actor[1].Charset; // Chara1
    a[4] = Actor[1].Faceset; // Chara1



    Dwords

    HP: HP atual do herói;
    MP: MP atual do herói;
    HPDiff: Subtrai o HP máximo pelo HP atual do herói;
    MPDiff: Subtrai MP máximo pelo atual;
    Level: Nível atual do herói;
    EXP: Pontos de experiência atual do herói.


    $
    v[1] = Actor[1].Level; // v[1] = 1
    Actor[1].Level++; // Subiu para o nível 2

    v[2] = Actor[1].EXP;
    v[3] = Actor[1].HP;
    v[4] = Actor[1].HPDiff; // v[4] = HP Máximo - HP Atual



    Se você ativou o MessageLink no Destiny Patcher do seu projeto, você pode colocar estes objetos direto na mensagem do jogo. Da mesma forma que você altera a cor da letra, a velocidade da rolagem, o tempo de espera... você pode fazer o mesmo com as propriedades dos objetos. Para fazer isso, coloque a contrabarra (\) para indicar que você está fazendo um comando de mensagem e, em seguida, você vai escrever o objeto seguido de sua propriedade entre parênteses:



    Nome: \(Actor[1].Name)
    Função: \(Actor[1].Degree)
    Nível \(Actor[1].Level)
    HP \(Actor[1].HP)  MP \(Actor[1].MP)



    Por enquanto teremos apenas esses. Para finalizar esta etapa da aula, gostaria que vocês procurassem no arquivo de ajuda do Destiny (mesmo que esteja em alemão) os seguintes objetos, analisarem e falar um pouco deles aqui no tópico. Também queria que olhasse as demais propriedades que tem no objeto "Actor" e observassem o que cada um faz. São todos atributos do herói, inclusive os mesmos que você encontra no Database do seu projeto.
    Depois disso procure estes objetos na lista abaixo:



    a
    d
    f
    Faceset
    Game
    Panorama
    String
    Time
    v


     

    Tipos de Variáveis

     

    Bom, resolvi falar sobre duas coisas em uma aula porque eu acredito que certas operações neste tópico pode ter deixado um pouco de dúvidas, até porque eu falei bastante sobre comandos, objetos e prioridades... acho que é bom deixar um pouco mais claro sobre os tipos de variáveis e seus tipos de dados antes de seguirmos a próxima aula.

    Vamos começar lembrando que variáveis são dados alocados na memória para ser utilizada em alguma função do programa. No RPG Maker 2000 não é diferente, sem o Destiny, tem 2 tipos de dados: Switches e Variáveis, sendo que a switch possui apenas dois valores: Off e On, respectivamente, 0 e 1. As variáveis no RPG Maker 2000 são do tipo Integer (números inteiros) e possuem um limite de -999999 até 999999.
    Já o DestinyScript lhe permite trabalhar, além de Switches e Variáveis, podemos usar Dwords, Floats (no Destiny 1.0 eram Doubles) e Strings. Sem falar que em Variáveis e Dwords, podemos usar mais alguns tipos de dados usados na programação que possuem suas diferenças, funções e seus limites:



    Tipo

    Tamanho

    Limite

    Descrição

    Dword

    4 Bytes (32 bits)

    -2147483648 ... 2147483647

    Como você pode perceber, Dwords têm mais espaço do que as variáveis do RPG Maker. Podem ser usados da mesma forma, apenas números inteiros.

    Word

    2 Bytes (16 bits)

    -32768 ... 32767

    Também com números inteiros porém com um limite até menor que as próprias variáveis. Geralmente eles são utilizados em alguns métodos, sem falar que consome metade memória do que os Dwords. Na programação, inclusive C++/C#, são variáveis do tipo short.

    Byte

    1 Byte (8 bits)

    0 ... 255

    Também com apenas números inteiros, porém com um intervalo menor ainda e com um consumo de memória ainda menor. Normalmente ele é usado para os pixels das imagens usadas no RPG Maker e, também pode ser facilmente trabalhado com paleta de cores.

    Float

    8 Bytes (64 bits)

    Float: -1.7E+308 ... +1.7E+308;
    Double: -5.0E-324 ... 5.0E-324

    Este tipo de variável já aceita números quebrados. No Destiny 1.0 ele foi chamado de Double, mas pelo visto apenas mudou o nome no 2.0 pois ele ainda continua como Double. Na programação, Floats são números quebrados que têm um intervalo menor e consomem 32 bits, diferente dos Doubles. Portanto são Doubles, mas no Destiny 2.0 estão sendo chamados de Floats.

    Bool

    1 Byte (8 bits)

    0 e 1

    É um tipo que possui apenas dois valores, estes têm uma constante: false (0) ou true (1). Em outras palavras, switches são variáveis do tipo bool no RPG Maker.

    String

    4 Bytes por caractere

    0 até 2147483647 caracteres

    Este já é um caso especial. Strings são usadas para textos, onde você pode armazenar nomes, frases e outros tipos de dados em forma de texto para uma variável.

    Handle

    N/A

    N/A

    É um meio que o Destiny encontrou de armazenar uma imagem para uma variável. Muito útil para armazenar gráficos de pictures, charsets, chipsets, facesets, e panoramas com a ajuda da propriedade "AuroraSheet".

     

    Essa tabela é muito importante saber o que voce vai trabalhar em cada método até porque sempre que eu apresentar um propriedade nova nas aulas eu vou dizer também qual é o tipo que ela recebe, como por exemplo, "Actor[1].Name" é uma String e "Actor[1].HP" é um Dword. Mais tarde vamos conhecer propriedades que mexem com Floats, Words e até mesmo Bytes.
    Enquanto isso, podemos armazenar estes tipos de dados em variáveis ou Dwords. No Destiny nós temos objetos que representam Dwords, Floats, Strings, Variáveis e Switches:

    a - Strings (ANSI-String, por isso a letra "a");
    d - Dwords;
    f - Floats (no Destiny 1.0, era o mesmo nome porém era chamado de Double);
    s - Switches;
    v - Variáveis.

    Todos estes objetos são arrays, se a gente lembrar do que eu falei anteriormente, objetos arrays têm a propriedade "Count", que serve para retornar a quantidade de uma delas. O mais interessante é que pelo Destiny você pode alterar o limite desses 5 objetos dentro do jogo com um Método chamado "ReAlloc".
    Com os métodos, a interpretação é diferente da propriedade, que retorna determinado valor; aqui já é uma ação que vai alterar alguma coisa, mas para alterar precisamos apresentar algum parâmetro para que o método possa ser realizado. Veja a estrutura deste método:



    $
    v.ReAlloc(Novo Valor);



    O local que está destacado de roxo é o parâmetro. Já que o método "ReAlloc" serve para alterar o valor de variáveis, segundo o código, então o parâmetro servirá para determinar o valor que este método vai usar para alterar a quantidade de variáveis no jogo.



    $
    v.ReAlloc(100); // Agora o limite de variáveis é 100
    a.ReAlloc(v.Count+15); // Mudou o limite de String para 115



    Muito cuidado ao alterar esse valor para um número menor que o limite anterior, pois ele irá apagar tudo, correndo riscos de causar um erro. Por exemplo, você tinha 50 variáveis, sendo que a variável 24 e 49 estão em uso, você usou o "ReAlloc" e mudou a quantidade de variáveis para 25. A variável 24 continuará operando normalmente, mas quando operar a variável 49, o jogo causará um erro fechando seu projeto.


     
    Agora o bicho vai pegar!

    Muito bem! Finalmente chegou a hora de colocarmos em prática tudo aquilo que aprendemos neste tópico. Vocês farão uma atividade que eu vou explicar logo e terão uma semana para me entregar. Não há necessidade de enviar o link do projeto via MP, pode postar aqui mesmo, é bom até que ajuda a me organizar, sabendo de qual aula é aquele projeto. Combinado?

    A proposta é a seguinte: vocês vão montar um mini-jogo, onde vocês terão que usar todas propriedades do objeto Actor que estudamos aqui neste tópico. Assim, eu não quero que vocês coloquem tudo assim numa vez em apenas um NPC, gostaria que esses valores aparecessem no decorrer do jogo, espalhados a ponto de me dar trabalho de achar todos. Não tem problema se fizer um jogo sem história, se tiver melhor ainda. Vamos lá, sejam criativos! Esse é o objetivo dessas aulas, porque só ficar programando o tempo todo é chato, a gente tem que tentar aprender de uma forma diferente e dinâmica.
    Então eu vou repetir o que vocês precisam me entregar para semana que vem:



    • Usar todas as propriedades do objeto "Actor" estudadas aqui;
    • Cada uma dessas propriedades devem ficar espalhadas no jogo, e não tudo em um único evento;
    • Pode fazer isso em puzzle ou em um RPG comum, com batalhas e tudo que for necessário;
    • Não há necessidade de roteiro;
    • Fique à vontade quanto aos gráficos, não se preocupe em usar gráficos próprios, de terceiros ou até mesmo o RTP;
    • Vocês podem postar o link do seu projeto aqui neste tópico mesmo;
    • Usem e abusem da criatividade! A imaginação é muito importante nessas horas.

     

    Então é isso!
    Vimos que nesta aula foi um pouco mais puxada, mas falamos do básico e tudo que é necessário para entender a linguagem do DestinyScript. Acredito que na próxima aula seja um pouco mais profundo em relação a esse assunto e vamos mexer com alguns gráficos do jogo através do DestinyScript.

    Qualquer dúvida é só me perguntar aqui no tópico mesmo.
    Até a próxima aula. Aguardem e estudem!