Professional Documents
Culture Documents
1
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Consideraes Iniciais
Devido falta de tutoriais a respeito desta ferramenta de criao de jogos, decidi aplicar um
pouco de meu tempo e o meu pequeno conhecimento do assunto para mudar este quadro. Estou
fazendo isso por vontade prpria e com o intuito de ajudar. Espero conseguir neste tutorial...
Este tutorial destinado a quem deseja conhecer um pouco mais sobre os Scripts RGSS do RPG
Maker XP. Este tutorial no um guia para solucionar problemas. Se voc no consegue
executar o aplicativo, procure pela FAQ do RPG Maker XP . L, muitos problemas e erros de
execuo so esclarecidos. Este tutorial de nvel avanado. Um conhecimento bsico
necessrio para utiliza-lo.
O Maker utilizado neste tutorial uma verso em ingls, mas TODOS os nomes em ingls tm
sua traduo entre parnteses. No conheo nem utilizo verses em portugus.
No conheo
quem traduziu outras verses e podem existir diferenas entre as tradues. Fiz curso de "Ingls
Tcnico I" e "Ingls Tcnico II" e acho que a traduo deve estar razovel e coerente com a
realidade, apesar disso, podem ocorrer erros. Por favor, me avisem caso encontrem algum.
importante salientar que alguns exemplos dos captulos iniciais so genricos e utilizam sintaxe
especfica do Ruby e talvez no funcionem no RGSS do RPG Maker XP . Apenas os comandos do
captulo "Sintaxe RGSS" em diante so inteiramente do RPG Maker XP.
No estou aqui querendo afirmar nada sobre nada nem ningum. No quero ofender nenhum
leitor, ou o vizinho, ou o cachorro do vizinho, ou o papagaio de qualquer um que seja. No estou
tentando provar nada. No sou "guru" do RPG Maker XP. Portanto, tenham pacincia...
E me desculpem por qualquer tipo de transtorno e muito obrigado aos que me ajudaram e
incentivaram.
Fora isso, boa leitura...
2
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Cavaco's Creations
Voc pode copiar, distribuir, exibir, executar ou criar obras derivadas sob as seguintes condies:
Atribuio: Voc deve dar crdito ao autor original, da forma especificada pelo
autor ou licenciante.
Uso No-Comercial: Voc no pode utilizar esta obra com finalidades comerciais.
3
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Agradecimentos
Creio que sem ajuda ningum nada... Mesmo os seres mais arrogantes da face da terra, que
negam receber qualquer forma de ajuda, um dia tiveram que receber a ajuda de algum. Mesmo
que esta tenha sido h muito tempo atrs quando o mdico ajudou esta pessoa a nascer... Mas
vamos parar de enrolar e vamos ao que interessa.
Agradeo :
Minha famlia, por me criar e aturar...
Meus amigos de RPG, por jogarem comigo...
Colegas de RPG Maker XP, por tirarem muitas de minhas dvidas...
Se faltar algum, faa o favor de me avisar. A memria s vezes (vrias vezes) falha...
4
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Sumrio
Tutorial RPG Maker XP...............................................................1
Consideraes Iniciais................................................................ 2
Cavaco's Creations..................................................................... 3
Agradecimentos......................................................................... 4
Sumrio................................................................................... 5
ndice de Ilustraes.................................................................. 8
Como Utilizar este Tutorial.......................................................... 9
Comeando............................................................................. 10
Programando com RGSS........................................................... 11
Introduo............................................................................................ 11
O Ruby.................................................................................................12
O RGSS................................................................................................ 12
O Editor de Scripts................................................................................. 13
Teste dos Exemplos............................................................................... 18
Variveis.............................................................................................. 18
Operadores........................................................................................... 19
Operadores de atribuio de valores........................................................................... 19
Operadores de comparao de valores........................................................................ 20
Operadores de validao de comando......................................................................... 20
Expresses Literais................................................................................ 20
Arrays.................................................................................................. 23
Matrizes................................................................................................24
Estruturas de Controle............................................................................25
Indicaes Condicionais IF......................................................................................... 25
Condio CASE........................................................................................................ 30
Comando de repetio (loop) FOR.............................................................................. 35
Comando de repetio (loop) While/Do..While.............................................................. 38
5
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Sintaxe RGSS.......................................................................... 61
Actors ($data_actors).............................................................................62
Actor ($game_actors).............................................................................63
Armor ($data_armors)............................................................................64
Classes ($data_classes)..........................................................................65
Common Events ($data_common_events)................................................ 66
Enemies ($data_enemies).......................................................................67
Item ($data_items)................................................................................68
Skill ($data_skills)................................................................................. 69
States ($data_states).............................................................................70
Wearpon ($data_weapons)..................................................................... 72
6
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Concluso............................................................................... 92
7
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
ndice de Ilustraes
Figura 1: Abrindo a tela do editor de scripts...................................................................................... 13
Figura 2: Tela do editor de scripts................................................................................................... 14
Figura 3: Menu pop up da tela principal do editor de scripts................................................................. 16
Figura 4: Menu pop up da listagem de scripts.................................................................................... 17
Figura 5: Esqueleto de uma janela................................................................................................... 86
Figura 6: Janela preenchida com texto e imagem atravs mtodo Refresh............................................. 88
Figura 7: Evento que chama o script................................................................................................ 91
8
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
9
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Comeando
Como todo programador, chega uma hora onde voc vai quere procurar por algo mais. A
curiosidade algo bom (se for bem administrada). Para sanar esta busca por conhecimento e
curiosidade, vamos nos aprofundar um pouco mais no mundo do RGSS utilizando a Programao
Orientada a Objeto (POO).
O objetivo deste tutorial no explicar conceitos da orientao a objetos. Caso deseje conhecer
mais sobre este assunto procure pelo tutorial "Programao Orientada a Objetos". Apesar disso,
importante conhecer as siglas e sua noo fundamental. No caso do RGSS ele possui bastante
recursos de POO.
claro que tambm vamos fazer uma "reciclagem" no estudo de RGSS. Nos captulos iniciais
desta obra, vamos revisar resumidamente alguns conceitos bsicos que j foram abordados em
outros tutoriais. A primeira coisa que vamos rever a sintaxe bsica, para posteriormente
vermos como que funciona a lgica de orientao a objetos utilizando o RGSS e por ltimo um
exemplo prtico.
10
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
11
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
O RGSS
RGSS significa "Ruby Game Scripting System" que em portugus quer dizer "sistema Ruby de
scripting de jogo".
A diferena entre o Ruby e o RGSS que RGSS deve ser visto como uma linguagem de "Script"
com alguns recursos da linguagem, enquanto que o Ruby uma linguagem de programao
completa. Com o Ruby, se voc quiser mostrar uma figura na tela, voc no pode apenas usar a
mesma sintaxe que voc se usou no RGSS do RPG Maker XP. Voc teria que codificar toda essa
funo.
Exemplo de cdigo em RGSS para mostrar um retrato:
image = Sprite.new
image.bitmap = RPG::Cache.picture(nome da imagem)
S so necessrias 2 linhas para mostrar uma figura na tela. Isso ocorre pois no RMXP usamos
uma classe interna j programado pelo RPG MAKER XP de "Sprite" (nao disponvel no editor do
Script). Alm disso usamos o mdulo "RPG" (tambm no encontrado no editor do script). Estas
classes e cdigos j esto incorporadas nativamente no maker. Por ter vrias classes j prontas,
criar um script no RPG Maker XP fica fcil.
Isto significa que RGSS menos complicado do que o ruby, porque a operao de baixo nvel
escondida pelo RPG MAKER XP (operao de baixo nvel significa codificar uma rotina para ler um
arquivo, iniciar um arquivo, mostrar o arquivo na tela, etc...). No temos que criar classes que
controlas as figuras. Basta usarmos a que j existe.
12
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
13
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
14
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Azul Claro: O azul mais claro representa operadores e operandos em seu cdigo. Como
=,||, + , * , dentre outros. Alm disso, representa operadores condicionais, parnteses e
colchetes.
15
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
16
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Como foi dito anteriormente muitas pessoas conduzem a maior parte do desenvolvimento real do
jogo atravs de scripts, mas estas pessoas no so (na maioria das vezes) programadores
profissionais e no esto familiarizados com tcnicas sofisticadas de programao. Portanto
vamos conhecer um pouco mais sobre lgica de programao antes de continuar.
17
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Variveis
Varivel uma representao de um valor, ou seja, se varivel = 15545545515554658, sempre
que manipularmos o "varivel" o mesmo que operar o numero 15545545515554658.
Existem vrios tipos de variveis. As mais comuns e mais usadas so:
a) String - Comporta letras e nmeros;
b) Integer - Comporta nmeros;
c) Boolean - Comporta 0 e 1, true e false, sim e no;
d) Array - Comporta vrias variveis;
e) Constante - Comporta tudo, porm seu valor fixo.
No Ruby, as variveis possuem escopo. Este escopo muda de acordo com o prefixo utilizado.
Vejamos alguns exemplos:
a) minha_var = varivel local;
b) @minha_var = varivel pblica (de instncia);
c) $minha_var = varivel global;
d) MINHA_VAR = Constante.
18
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Operadores
Os operadores servem tanto para atribuir como para comparar valores em nossos cdigos.
Observe a lista completa dos operadores do RGSS logo abaixo.
19
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Expresses Literais
O valor literal das variveis pode (e deve) ser dividido em tipos. Os tipo mais comuns e usados
so: Primitivos, Compostos e Especiais.
Os tipo primitivos de variveis so: Boolean (true/false), Integer (inteiros i.e. 1234567890), Float
(no inteiros i.e. 1.5 0.3333...), String (em geral so textos que podem conter letras, nmeros
ou caracteres especiais).
Os tipo compostos so: Array (vetores), Objeto (instancias de classes).
Um dos tipos especiais o NULL.
No h mistrios nos tipos de valores primitivos, como Integer e Float, talvez tenha nos Boolean
e nas String, ento vamos revisar este dois ltimos.
20
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Se uma sintaxe determina que o valor a ser inserido deve ser um integer e voc colocar um
literal do tipo string, a operao vai dar erro ou retornar um valor inesperado (possvelmente um
boolean, Nil ou um NULL). Por isso importante conhecer os tipos, e quando usar.
21
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Neste caso, a varivel "nova" ter o mesmo valor que "var" que 10. Note que "nova" ser uma
varivel e "var" ser outra varivel. Tudo que eu fizer em uma no far efeito nenhum na outra.
Essa atribuio pode ser ruim, ou gerar Duplicatas que s aumentam o cdigo ou geram lags no
programa j que "nova" nada mais que um clone de "var". Para resolver isso, podemos usar o
smbolo & (comumente chamado de "i comercial"). Na terceira linha a varivel "nova" no ser
uma duplicada de "var", e sim "nova" ser um 2 nome para "var". A varivel "nova" ser apenas
um ponteiro para a mesma posio de memria da varivel "var". Se eu alterar o valor de "var"
em qualquer parte do script o valor de "nova" ser alterado tambm, e vice-versa. Em POO, a
varivel "nova" pode ser considerada um objeto de "var".
22
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Se quisermos adicionar os valores "a", "b", "c" removendo o segundo e o terceiro valor deste
array, podemos usar a seguinte expresso:
ary[1, 2] = ["a", "b", "c"]
vetor = ary # vetor = [0, "a", "b", "c", 3]
Para adicionarmos o valor 99 removendo o valor "b", podemos usar a seguinte expresso:
ary[2, 1] = 99
vetor = ary # vetor = [0, "a", 99, "c", 3]
Para inserirmos o valor "xyz" depois do zero e antes do "a" sem remover nenhum valor, podemos
usar a seguinte expresso:
ary[1, 0] = ["xyz"]
vetor = ary # vetor = [0, "xyz", "a", 99, "c", 3]
a = [1, 2]
b = [8, 9]
c = a + b # c = [1, 2, 8, 9]
print a
# => [1, 2]
(sem mudanas)
print b
# => [8, 9]
23
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
# forma estendida
# forma simplificada
Os dois exemplos so exatamente iguais, mas recomendvel que use a forma simplificada. A
varivel "usuario" se tornou um array assim que atribumos um ndice ('nome') e para esse ndice
atribumos um valor ('Raven').
# a Sada de "usuario" ser
Array(
'nome' => 'Raven'
)
Observe que usamos o operador '=>'. Esse um indicador de ndice diferente de um operador de
comparao maior igual (>=). Este comando diz que a String antes dele ndice do valor aps
ele. O valor pode ser de qualquer tipo, mas o ndice s pode ser String ou Integer. Isso muito
til, para associar todas as referencias de um nico propsito numa s varivel. Os objetos so
muito parecido com Arrays, diferindo apenas por possurem mtodos e seu indicador de ndice
o '->' ao invs de '=>'. Um objeto um conjunto de funes que o constitui e nele o ndice pode
ser uma varivel ou mesmo uma funo, mas esta uma outra histria que veremos mais tarde.
24
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Indicaes Condicionais IF
Nessa seo vamos ver como usar as indicaes de condies como o "IF". O conceito bsico
igual a qualquer outra linguagem. Sempre que utilizarmos uma condio em RGSS preciso ficar
atento sintaxe. Uma condio sempre construda com dois operadores conforme podemos
observar logo abaixo:
if minha_varivel == 0
if minha_varivel = 0
# Comando Correto
# Comando Errado
O If compara e se a comparao for verdadeira ele executa o seu contedo (no caso do RGSS at
o prximo "end" aparecer). O IF usa os operadores de comparao de valores e comandos para
isso, ele pode vir ou no acompanhado do Else que a parte que ser executada caso a
comparao no seja verdadeira.
bastante comum um cdigo possuir varias comparaes que nem sempre so iguais. Por este
motivo existem algumas outras formas de fazer comparaes sem o If..Else. Normalmente
quando queremos atribuir um valor a uma varivel se o valor de uma outra for X e um outro
valor for Y, podemos fazer a comparao e a atribuio toda numa nica linha.
Geralmente utilizamos este cdigo:
if( var1 == 2)
var2 = " dois";
else
var2 = " algum valor diferente de 2";
end
25
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Os dois cdigos funcionam de forma idntica, a traduo do segundo cdigo seria: "se
comparado" (var1 == 2) se sim var2 "igual" (=) " dois" se no var2 "igual" (=) " algum
valor diferente de 2");
Vamos ver um exemplo mais complexo de condio IF. Volte no script "testes_simples" e digite:
class If_Statement_1
@@a_class_variable=10
def initialize
@@a_class_variable+=1
a_local_variable=13
if @@a_class_variable==a_local_variable
print "Isso, somos iguais!"
else
print "Droga, no igual!"
end
end
end
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
If_Statement_1.new
If_Statement_1.new
If_Statement_1.new
If_Statement_1.new
Se voc instanciar 4 vezes essa classe voc ter a mensagem "Isso, somos iguais!" apenas na
terceira janela. Adicionamos 1 nossa varivel de classe (inicialmente com valor 10) a cada vez
que chamamos a classe, e condicionamos a checar se nossa varivel de classe igual a nossa
varivel local (com valor 13). Ento o processo que o RMXP faz o seguinte:
26
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
a_local_variable=13
Segunda vez
a_local_variable=13
Terceira vez
a_local_variable=13
Quarta vez
a_local_variable=13
Existem outras formas de IF. Veja alguns exemplos destas outras formas:
if @@a_class_variable==a_local_variable then print "Isso" else print "Droga" end
if @@a_class_variable==a_local_variable ? print "Isso": print "Droga" end
print "Isso" if @@a_class_variable==a_local_variable
27
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
If_Statement_2.new
If_Statement_2.new
If_Statement_2.new
If_Statement_2.new
Execute o evento ("evento_script").
Um detalhe importante que "elsif" no um "Else if". usando um "Else IF" voc fora o
programa a tomar somente uma daquelas decises, nunca duas ou mais. No exemplo acima,
usamos "elsif", o que permite a execuo de duas condies. Quando @@a_class_variable for
igual a 12, ns veremos 2 mensagens, que sero: "Somos iguais a 12 !" e "No somos iguais !".
Note que se a condio do IF for verdadeira, a rotina no vai executar nenhuma outra parte do IF
(elsif). Caso deseje executar alguma verificao mesmo quando a condio do IF for verdadeira,
teremos que reescrever nosso comando.
28
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
If_Statement_3.new
If_Statement_3.new
If_Statement_3.new
If_Statement_3.new
Execute o evento ("evento_script").
Perceba que quando @@a_class_variable for igual a 12, duas mensagens iro aparecer "Sou
Igual a 12 !" e seguidamente "Somos Diferentes !". Muitas fezes voc vai precisar de um numero
grande de "else if". Para a maior praticidade existe a condio "case" que veremos a seguir.
29
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
A varivel (var) anunciada no Case vai ser comparada a cada 'When' que ele tiver, se ele
encontrar algo que corresponda ao case em When ele ira executar tudo que tiver na linha abaixo
at o prximo when, o comando Else para que o comando execute tais instrues quando o
valor de var no coincida com nenhum When.
Agora, vamos ver um exemplo completo para testarmos. Volte no script "testes_simples" e
digite:
class Case_Statement_1
@@a_class_variable=0
def initialize
@@a_class_variable+=1
case @@a_class_variable
when 1
print "sou 1"
when 2
print "sou 2"
when 3
print "sou 3"
else
print "Quem eu sou?"
end
end
end
30
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
Case_Statement_2.new
Case_Statement_2.new
Case_Statement_2.new
Case_Statement_2.new
O funcionamento deste cdigo exatamente igual ao anterior.
31
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
Case_Statement_3.new
Case_Statement_3.new
Case_Statement_3.new
Case_Statement_3.new
Execute o evento ("evento_script").
Teste e depois acrescente mais alguns Case_Statement_3.new e faa o teste para verificar seus
efeitos.
32
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Case_Statement_4.new
Execute o evento ("evento_script").
Neste exemplo, o programa checa se o valor encontrado dentro de @@a_class_variable um dos
listados em "when". Portanto, a virgula o mesmo que dizer "OU".
33
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
Case_Statement_5.new
Case_Statement_5.new
Case_Statement_5.new
Case_Statement_5.new
Case_Statement_5.new
Execute o evento ("evento_script").
Neste exemplo, ns usamos o comando ".next", ele usado para incrementar nossa string,
fazendo ela seguir para o prximo caractere lgico, dependendo do caractere encontrado a
extrema direita da string.
Exemplo:
a_string="ab" a_string.next! --> a_string agora "ac"
Outro exemplo:
another_string="name102" another_string.next! --> another_string agora "name103"
34
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
35
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
For_Loop_Sample2.new
Para que este exemplo funcione, preciso que voc defina 4 personagens no DataBase (banco de
dados). Depois de se certificar que existe 4 (quatro) personagens no Database (banco de dados)
execute o evento ("evento_script").
36
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
37
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
38
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Funes
Sem os mtodos no existe POO. Uma funo/mtodo um conjunto de comandos que juntos
geram um retorno. As funo devem funcionar por si s, sem depender de outras funes. Assim
dita o POO, mas nem sempre isso verdade. Alguns objetos servem exatamente para
automatizar outros objetos, ou seja, servem para "modularizar" o cdigo.
Quando criar uma funo e quando apenas escrever cdigo procedural/seqencial? Sempre que
uma parte da sua programao ficou repetitiva demais, e toda hora voc tem que duplicar os
comandos mudando apenas alguns parmetros hora de usar POO (objetos e funes).
A sintaxe de uma funo a seguinte:
executor_da_funcao Nome_da_funo(parmetros), conjunto de rotinas e finalizao do funo.
No RGSS algo assim:
def Nome_da_Funo(parmetros)
# Conjunto de Rotinas e Comandos
end
39
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
print funcao_carrinho_de_compras('bola', 200)
Execute o evento ("evento_script"). Uma tela deve aparecer (comando print) com o seguinte
retorno: "O produto bola custava 200. Com desconto custa 100"
A funo chama-se funcao_carrinho_de_compras, e os parmetros so "produto" e "preo". A
rotina dar um desconto sobre o preo informado de "-100", e exibir o nome do produto com o
preo novo. Note que para que ele faa a conta corretamente o valor de "preo" deve ser um
Integer.
Podemos fazer uma funo auxiliar para checar se o valor informado na varivel "preo" um
Integer. As boas prticas de programao nos diz que sempre bom colocar um comentrio no
inicio da funo, informado quais os parmetros e seus tipos, alguns parmetros podem ser
opcionais.
40
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
print funcao_carrinho_de_compras2('bola', 200, true)
Execute o evento ("evento_script"). Uma tela deve aparecer (comando print) com o seguinte
retorno: "O produto bola custava 200. Com desconto custa 100".
Note no cabealho da funo as linhas de comentrio. L esto todas as informaes relevantes
da funo, incluindo uma descrio de parmetros. Toda vez que um parmetro tive um valor
previamente determinado, ela opcional. Neste exemplo a varivel opcional "checar" que tem
o valor padro definido como True. Quando usarmos esta funo, se atribuirmos um valor ao 3
parmetro que no seja True ele no vai fazer a checagem de tipo. Se no passarmos valor
nenhum, a rotina checar o tipo.
41
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
42
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
Imprimindo_Frase.new
Execute o evento ("evento_script"). Ao testar aparecer uma tela popup dizendo "Ol Mundo!".
Agora vamos explicar o que fizemos:
1
class Imprimindo_Frase
def initialize
4
5
end
end
43
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
pelo
comando
".new".
Ento,
quando
voc
diz
ao
script
comando
Imprimindo_Frase.new, voc diz ao RPG Maker XP criar uma nova instancia desta classe (um
novo objeto). Com a mensagem ".new" voc diz para a classe executar todo o mtodo construtor
da classe chamado "initialize".
Tudo que definimos fechado com a palavra END. Isto aplica-se aos muitos comandos no Ruby.
Por isso sempre indente seu cdigo.
Outra forma de chamarmos nossa classe assim:
meu_objeto = Imprimindo_Frase.new
Isto retorna o mesmo resultado, mas aqui ns criamos uma varivel chamada "meu_objeto" que
equivale classe "Imprimindo_Frase". Este recurso til quando queremos chamar diversos
mtodos da mesma classe em vrias ocasies diferente. Por enquanto este no o nosso caso.
Agora, volte no script "testes_simples" e digite:
class Imprimindo_Frase2
attr_accessor : cumprimento
attr_accessor : nome
def initialize(cumprimento, nome)
@cumprimento=cumprimento
@nome=nome
end
def say
print @cumprimento + " " + @nome
end
end
44
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
print message1.name
print message2.name
message1.say
message2.say
Na linha 1 criamos aqui um novo objeto chamado "message1" que uma instancia de
"Imprimindo_Frase2". Feito isso voc pode executar tudo que estiver dentro da classe
"Imprimindo_Frase2". Uma vez que adicionamos parmetros no "initialize", somos obrigados a
enviar estes argumentos no momento que que criamos a classe ou ocorrer um erro.
Na linha 2 fizemos o mesmo da linha 1 com "message2".
45
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
46
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script" (sem os comentrios):
meu_objeto = Carrinho_de_compras.new
meu_objeto->Meu_carrinho('bola',200)
meu_objeto->desconto(200,100)
Execute o evento ("evento_script"). Observe que aparecer uma janela com o retorno "bola custa
200" e logo depois aparecer outra janela com o retorno "100".
47
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
meu_objeto = Carrinho_de_compras.new
meu_objeto->Meu_carrinho('bola',200)
meu_objeto->desconto(200,100)
Carrinho_de_compras::checar_preco(200)
A 1 linha declara um novo objeto na varivel "meu_objeto". Agora, esta varivel possui todas os
atributos e todos os mtodos (funes) da classe. Este acesso pode ser feito atravs do '->' ou
diretamente pelo '::'. As duas formas funcionam de forma semelhante, mas a 2 s vai funcionar
se o mtodo declarado, no depender de nenhum outro. No exemplo acima, nenhuma
funo/mtodo depende da outra, por isso tanto faz acessar os mtodos via '->' ou '::'. A sintaxe
dos quatro pontos (::) serve para que possamos executar um mtodo de uma classe sem
precisar instanci-la (o que economiza, espao e processamento). A sintaxe simples
NOMEDACLASSE::MTODODACLASSE, assim podemos acessar qualquer mtodo independente
que a classe possui.
A 2 linha, executa o mtodo que d um desconto no preo do produto (resultado da subtrao
dos parmetros).
48
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
um
exemplo.
Volte
no
script
"testes_simples",
exclua
as
linhas
da
classe
Carrinho_de_compras. Esta classe deve ser excluda pois vamos reescrev-la de uma forma
melhorada. Depois de excluir as linhas da classe Carrinho_de_compras comece a digitar
novamente as seguintes linhas:
# Inicio da classe Carrinho_de_compras
class Carrinho_de_compras
@produto = []
def inicialize(produto,preco)
@produto[nome] = produto
@produto[preco] = preco
@produto[desconto] = 0
@produto[preco_desc] = preco
end
def checar_preco(preco)
if(Gettype(preco) != integer)
return false
else
return true
end
end
def desconto(desconto=0)
if(@checar_preco()== true)
@produto[desconto] = desconto
end
def meu_carrinho(produto)
@produto[preco_desc] = @produto[preco] - @produto[desconto]
print "O " + @produto[produto] + " custa " + @produto[preco] + " e com desconto sai por " + @produto[preco_desc]
end
end
# Fim da classe Carrinho_de_compras
Note que agora temos um mtodo conhecido como "construtor". No caso do Ruby, todo
construtor deve se chamar "inicialize".
49
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
50
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
51
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
end
end
end
end
# Fim da classe Carrinho_de_compras
52
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
53
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Agora abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
$teste = Local_Variable.new
$teste.method_1()
$teste.method_2()
Teste o jogo, e v "conversar" com o seu evento, aparecer uma mensagem numa janela popup,
com o resultado do objeto.
Note que, os 2 (dois) mtodos executam operaes com variveis de mesmo nome
(local_variable). O primeiro mtodo retornar o valor 2, que foi o valor que atribumos no
method_1, e assim que voc fechar a janela aparecer o retorno do segundo mtodo que ser o
valor 4, pois no method_2 atribumos 4 varivel.
54
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento "evento_script" e exclua todo o seu contedo para depois digitar as
seguintes linhas no comando de evento "executar script":
$teste = Instance_Variable.new
$teste.method_1()
print $teste.instance_variable
$teste.method_2()
print $teste.instance_variable
$teste.method_3()
print $teste.instance_variable
55
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
56
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento chamado "evento_script" e exclua todo o seu contedo para depois digitar
as seguintes linhas no comando de evento "executar script":
$teste = Class_Variable.new
print $teste.class_variable
Neste exemplo, quando voc acionar o evento ele vai imprimir 1, e cada vez que voc acionar o
evento continuar imprimindo 1. Agora, vamos fazer outro teste. Abra o evento chamado
"evento_script" e exclua todo o seu contedo para depois digitar as seguintes linhas no comando
de evento "executar script":
$teste = Class_Variable.new
print $teste.class_variable
$teste = Class_Variable.new
print $teste.class_variable
Neste exemplo, quando voc acionar o evento ele vai imprimir 1 e logo depois vai imprimir 2.
57
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Depois abra o evento chamado "evento_script" e exclua todo o seu contedo para depois digitar
as seguintes linhas no comando de evento "executar script":
$teste = Global_Variable.new
print $teste.global_variable
Neste exemplo, cada vez que voc acionar seu evento o valor vai aumentar o numero em mais 1.
Isso quer dizer que a varivel se mantm acessvel em qualquer lugar de seu projeto, mas ainda
sim ela deve ser declarada em algum momento para existir.
58
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Primeiro ns criamos uma constante global chamada "UMA_CONSTANTE" onde o valor "100"
armazenado.
Na
primeira
classe
(Constant_Test_1)
criamos
uma
outra
constante
chamada
59
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Constantes e
Locais
Globais
de Instancia
de Classe
Nome de Classes
name
$debug
@name
@@total
PI
fishAndChips
$CUSTOMER
@point_1
@@symtab
FeetPerMile
x_axis
$_
@X
@@N
String
thx1138
$plan9
@_
@@x_pos
MyClass
_26
$Global
@plan9
@@SINGLE
Jazz_Song
60
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Sintaxe RGSS
Agora que j vimos o bsico do RGSS vamos dar uma olhadinha em alguns recursos que foram
criados especificamente para o RPG Maker, ou seja, j existem nos Scripts RGSS.
Os recursos que iremos ver so as seguintes variveis globais: $data_actors, $game_actors,
$data_armors,
$data_classes,
$data_common_events,
$data_enemies,
$data_items,
61
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
62
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
63
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
64
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
65
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
66
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
67
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
68
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
69
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
70
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
71
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
72
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
73
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Construtor
Window.new([viewport])
Cria um objeto da classe window. Voc pode especificar uma janela de visualizao (viewport)
quando necessrio.
Mtodos
viewport
Retorna uma janela de visualizao (viewport) que foi especificada no mtodo construtor.
dispose
Descarrega (remove) a janela. Se ela j foi descarregada, nada acontece.
disposed?
Retorna TRUE se a janela foi descarregada e FALSE se ela ainda existe.
update
Atualiza o cursor e as animaes grficas que esto na janela. Por padro, este mtodo
chamado uma vez por frame (quadro de atualizao de tempo).
74
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
75
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
76
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
77
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Construtor
Bitmap.new(<nomedoarquivo>)
Carrega um arquivo de imagem especificado em <nomedoarquivo> e cria um objeto bitmap. Ele
automaticamente procura arquivos includos no RTP e em arquivos criptografados. A extenso do
arquivo pode ser omitida (no necessria).
Bitmap.new( <largura><, altura> )
Cria um objeto bitmap com o tamanho especificado em largura e altura.
Mtodos
dispose
Descarrega (remove) o bitmap. Se ele j foi descarregado, nada acontece.
disposed?
Retorna TRUE se o bitmap foi descarregado e FALSE se ele ainda existe.
width
Retorna a largura do bitmap.
height
Retorna a altura do bitmap.
rect
Retorna o "retngulo" do bitmap.
78
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Propriedades
font (=nomedafonte)
A fonte usada no desenho do texto.
79
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Construtor
Sprite.new([viewport])
Cria um objeto da classe Sprite. Voc pode especificar uma janela de visualizao (viewport)
quando necessrio.
Mtodos
viewport
Retorna uma janela de visualizao (viewport) que foi especificada no mtodo construtor.
dispose
Descarrega (remove) o Sprite. Se ele j foi descarregado, nada acontece.
disposed?
Retorna TRUE se o Sprite foi descarregado e FALSE se ele ainda existe.
update
Atualiza o flash (efeito de piscamento) dos Sprite's que esto na tela. Por padro, este mtodo
chamado uma vez por frame (quadro de atualizao de tempo). No necessrio chamar este
mtodo se o flash no for utilizado no Sprite.
flash(cor, duracao)
Inicia o "efeito de piscamento" do Sprite. O parmetro durao indica o nmero de frames
(quadros) que ir durar o "piscamento". Se no for especificado uma cor no parmetro "cor", o
sprite ir desaparecer no final.
80
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
81
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
82
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Construtor
Plane.new([viewport])
Cria um objeto da classe Plane. Voc pode especificar uma janela de visualizao (Viewport)
quando necessrio.
Mtodos
viewport
Retorna uma janela de visualizao (Viewport) que foi especificada no mtodo construtor.
dispose
Descarrega (remove) o Plane. Se ele j foi descarregado, nada acontece.
disposed?
Retorna TRUE se o Plane foi descarregado e FALSE se ele ainda existe.
Propriedades
bitmap
Refere-se ao Bitmap usado no Plane.
visible
a visibilidade do Plane. Se for TRUE, o Plane est visvel. Se for FALSE, o Plane est invisvel.
z
Quanto maior o seu valor, mais alto ela est, ou seja, mais acima dos outros Planes estar.
83
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
84
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
85
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
86
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
87
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
O prximo passo adicionar nossa janela na classe Scene_Map. Devemos fazer isso para que
nossa janela aparea toda vez que o nosso heri conseguir um item. A alterao ser no mtodo
main da classe Scene_Map. Este mtodo j existe e j possui cdigo. No devemos excluir
nenhuma linha. Para nossa janela funcionar devemos apenas adicionar os comandos que ir
controlar a nossa janela. As linhas adicionadas esto em vermelho. Observe o cdigo abaixo:
attr_accessor :item_acquired
# --------------------def main
# Comentrio 5
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
@acquire_window = Window_ItemGet.new(1, 0)
# Comentrio 1
@acquire_window.visible = false
# Comentrio 2
@itemdelay = -1
# Comentrio 3
@item_acquired = [0, 0]
# Comentrio 4
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
@message_window.dispose
@acquire_window.dispose
# Comentrio 6
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end
88
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
89
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
# Comentrio 2
if @itemdelay == 0 # Comentrio 3
@itemdelay = -1
@acquire_window.visible = false
@item_acquired[0] = 0
@item_acquired[1] = 0
end
@message_window.update
if @item_acquired[0] != 0 && @item_acquired[1] != 0 && @itemdelay < 0 # Comentrio 1
@acquire_window.type = @item_acquired[0]
@acquire_window.id = @item_acquired[1]
@acquire_window.refresh
@acquire_window.visible = true
@itemdelay = 125
end
[...]
end
90
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
91
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
Concluso
O objetivo deste tutorial apenas mostrar alguns dos recursos dos Scripts RGSS disponveis no
RPG Maker XP.
Este tutorial nos leva a mais um passo em nossa longa caminhada no mundo dos scripts.
Estamos apenas cada vez mais dominando esta maravilhosa ferramenta (Scripts RGSS) do RPG
Maker XP.
O nome do prximo tutorial "Criando um Menu com RGSS". Nele iremos conhecer mais
profundamente alguns dos recursos mais avanados dos scripts e veremos toda a potencialidade
que podemos ter em nossas mos. No final do tutorial teremos um menu novo e totalmente
personalizado.
O autor deste tutorial Marcelo Cavaco, formado em Processamento de Dados pela Faculdade
Rui Barbosa e formado em Engenharia de Produo pela Unibahia. J trabalhou como Analista de
Sistemas e Engenheiro e sempre teve um hobby, o RPG, seja o jogo convencional, ou os RPGs
eletrnicos. Agora, uma pequena parte de todo este conhecimento pde ser conferido neste
material.
Qualquer dvida, crtica, sugesto, reclamao, comentrio ou algo semelhante, favor mandar
um e-mail para marcelocavaco@click21.com.br.
Est na hora de avanar para o tutorial:
"Criando um Menu com RGSS".
92
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)