Tutorial RPG Maker XP
Por Marcelo Cavaco (marcelocavaco@click21.com.br)
Conhecendo os Scripts
Conhecendo os Scripts
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
1
Conhecendo Os Scripts RGSS
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...
Por favor, me avisem se existirem erros (podem existir erros de portugus, sobre o RPG Maker
XP
1
Consideraes Iniciais 2
Agradecimentos 3
Sumrio 4
Como Utilizar este Tutorial 9
Comeando 10
Introduo 10
O Editor de Scripts 11
Lgica de Programao 16
Introduo 16
Lgica 16
Seqncia Lgica 16
Instrues ou Expresses 17
Algoritimo 18
Diagrama de Bloco 19
Operadores Relacionais 20
Operadores Lgicos 22
Operaes Lgicas 24
SE ... SENO / IF ... ELSE 26
Enquanto ou At que x, Processar (While ou Loop) 27
A Lgica 28
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
4
Conhecendo Os Scripts RGSS
A Sintaxe do Ruby 30
Sintaxe e Expresses 31
Identificadores / Variveis 31
Comentrios 31
Palavras Reservadas 32
Expresses 33
Variveis e Constantes 34
Variveis Globais 34
Variveis de Instncia 35
Variveis Locais 35
Constantes 36
Pseudo Variveis 37
Expresses Literais 38
Nmeros Literais 38
Strings Literais 39
Notaes de barra invertida 39
Expression Substitution 40
Arrays 41
Hash 42
Expresses de Range (Faixa) 42
Symbols 43
Operadores RGSS 44
Operadores de redefinio (mtodos) 45
Operadores sem redefinio (controle de estruturas) 45
And (e) 46
Or (ou) 46
Not (negao) 47
(?) Operador Condicinal 47
Controle Estrutural 48
Condies 48
IF 48
if (Outra opo) 49
unless 50
unless (Outra opo) 50
case 51
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
5
Conhecendo Os Scripts RGSS
Repeties 52
while 52
while (Outra opo) 53
until 53
until (Outra opo) 54
for 54
break 55
next 56
Method Exit (Mtodo de Sada) 57
Return 57
Definindo Classes e Mtodos 58
Definio de Classes (Class) 58
Definio de Mdulos (Module) 60
Definio de Mtodos (Method) 61
Operaes de Definio (Definition Operations) 63
alias (alis) 63
Scripts RGSS Standard 64
Listagem de Scripts RGSS Padro 64
Arrow_Actor 65
Arrow_Base 65
Arrow_Enemy 65
Game_Actor 65
Game_Actors 65
Game_BattleAction 65
Game_Battler 66
Game_Character 66
Game_CommonEvent 66
Game_Enemy 66
Game_Event 66
Game_Map 67
Game_Party 67
Game_Picture 67
Game_Player 67
Game_Screen 67
Game_SelfSwitches 68
Game_Switches 68
Game_System 68
Game_Troop 68
Game_Variables 68
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
6
Conhecendo Os Scripts RGSS
Interpreter 69
Scene_Battle 69
Scene_Debug 69
Scene_End 69
Scene_Equip 69
Scene_File 70
Scene_Gameover 70
Scene_Item 70
Scene_Load 70
Scene_Map 70
Scene_Menu 71
Scene_Name 71
Scene_Save 71
Scene_Shop 71
Scene_Skill 71
Scene_Status 71
Scene_Title 72
Sprite_Battler 72
Sprite_Character 72
Sprite_Picture 72
Sprite_Timer 72
Spriteset_Battle 72
Spriteset_Map 73
Window_Base 73
Window_BattleResult 73
Window_BattleStatus 73
Window_Command 73
Window_DebugLeft 74
Window_DebugRight 74
Window_Gold 74
Window_Help 74
Window_InputNumber 74
Window_Item 75
Window_MenuStatus 75
Window_Message 75
Window_NameEdit 75
Window_NameInput 75
Window_PartyCommand 75
Window_PlayTime 76
Window_SaveFile 76
Window_Selectable 76
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
7
Conhecendo Os Scripts RGSS
Window_ShopBuy 76
Window_ShopCommand 76
Window_ShopNumber 76
Window_ShopSell 77
Window_ShopStatus 77
Window_Skill 77
Window_SkillStatus 77
Window_Status 77
Window_Steps 77
Window_Target 78
Entendendo as Classes e Mtodos 79
Introduo 79
Orientao a Obejtos 79
Criando um Script 84
Introduo 84
Scene_Tutorial 84
O Editor de Scripts 84
Planejando da Cena 87
Entendendo As Classes 88
class Window_TutorialCommand 88
class Window_Tela1 89
class Window_Tela2 90
class Scene_Tutorial 91
O Cdigo do Script 92
Testando o Script 101
Concluso 105
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
8
Conhecendo Os Scripts RGSS
Como Utilizar este Tutorial
Para aproveitar da melhor forma possvel este tutorial, devemos saber para que ele serve. Este
documento onde estaremos vendo diversos recursos dos scripts RGSS do RPG Maker XP
.
Existem imagens de telas onde setas e crculos vermelhos indicam pontos importantes. Estas
setas e crculos vermelhos no so parte da tela e no aparecem no aplicativo. Elas foram
adicionadas neste tutorial apenas com o objetivo de auxiliar o leitor a localizar pontos
importantes na tela.
Este tutorial de nvel avanado. S aconselhvel leitura deste tutorial aps se certificar de
que j conhece completamente os recursos do RPG Maker, alm de noes de lgica de
programao, estruturao de dados e orientao a objetos.
Aps a leitura deste documento, podemos passar para o prximo tutorial da srie chamado
Scripts Avanados no RPG Maker XP
.
Podem vir a surgir novos tutoriais, sendo que a lista pode aumentar... S o tempo dir o que est
por vir...
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
9
Conhecendo Os Scripts RGSS
Comeando
Introduo
Uma pesquisa realizada em setembro de 2003 pela gamedev.net (um importante site para
programadores de jogos) revelou que a grande maioria dos jogos (72%) desenvolvida com o
auxlio de uma linguagem de script.
Embora as linguagens de script no sejam definidas muito precisamente, elas apresentam um
conjunto de caractersticas comuns tpicas. Em geral, as linguagens de script so linguagens
interpretadas, tm tipagem dinmica, gerncia automtica de memria, e fornecem facilidades
para construo de estruturas de dados dinmicas e manipulao de cadeias de caracteres.
Tipicamente, essas linguagens funcionam acopladas a programas hospedeiros implementados em
linguagens compiladas tradicionais como C e C++ (No caso do RPG Maker XP
o Ruby). Uma
outra caracterstica importante de linguagens de script que elas devem ser seguras, no sendo
possvel acessar servios no autorizados do programa hospedeiro. A combinao dessas
caractersticas resulta numa excelente ferramenta para o desenvolvimento de jogos.
Acoplar uma linguagem de script em um jogo traz vrios benefcios. A linguagem de script pode
ser usada para efetivamente implementar o script do jogo, para definir objetos e seus
comportamentos, para gerenciar os algoritimos de inteligncia artificial e controlar os
personagens, e ainda para tratar os eventos de entrada e descrever a interface com o usurio.
Uma linguagem de script tambm desempenha um papel importante nas etapas de prototipao,
teste, depurao e anlise de adequao do jogo. A escolha de uma linguagem de script simples
permite ainda que seja dado a roteiristas e artistas acesso programvel ao jogo, a fim de que
eles que possam experimentar novas idias e variaes. Esses profissionais conduzem a maior
parte do desenvolvimento real do jogo, mas no so em geral programadores profissionais e no
esto familiarizados com tcnicas sofisticadas de programao.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
10
Conhecendo Os Scripts RGSS
O Editor de Scripts
Para comearmos a criar scripts em nosso projeto, devemos conhecer o editor de scripts. Alm
disso, bastante recomendvel um conhecimento bsico de lgica de programao e orientao
a objetos.
Agora, vamos fazer uma rpida anlise da tela do editor de scripts do RPG Maker XP
e logo
depois vamos conhecer um pouco de lgica.
Com o projeto aberto, podemos abrir o editor de scripts de diversas formas. Podemos utilizar a
tecla de atalho F11, ou podemos clicar no cone da barra de ferramentas, ou ir pelo menu
Tools/Script Editor (Ferramentas/Editor de Scripts). Observe a figura 01.
Figura 01
Abrindo a tela do editor de scripts.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
11
Conhecendo Os Scripts RGSS
Na tela que se abrir podemos ver que j existem vrios scripts prontos. Observe a figura 02.
Figura 02
Tela do editor de scripts.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
12
Conhecendo Os Scripts RGSS
Note que na tela do editor de scripts as expresses e cdigos aparecem em diversas cores. Cada
cor representa um tipo de texto. Isso extremamente til para facilitar o entendimento dos
scripts. As cores so:
Azul: O azul utlizado representar as palavras reservadas do RGSS, ou simplesmente
sintaxe do RGSS, como o def, class, end, when, if, case, dentre outros.
Vermelho: O vermelho representa nmeros literais nas expresses e cdigos, como 1, 2,
3, 5, dentre outros.
Azul Claro: O azul mais claro representa operadores e operandos em seu cdigo. Como
=,||, + , * , dentre outros. Alm disso, representa operadores condicionais, parenteses e
colchetes.
Verde: O verde representa os comentrios. Os comentrios no so interpretados pelo
RPG Maker e so ignorados.
Roxo: O roxo representa uma cadeia de caracteres ou elementos do texto (String) em
seu cdigo.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
13
Conhecendo Os Scripts RGSS
O editor de Scripts do RPG maker XP
.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
32
Conhecendo Os Scripts RGSS
Expresses
O termo expresses serve para tudo aquilo formado por variveis e comandos literais (nmeros,
textos, dentre outros) incluindo operaes, controle de estruturas, chamada de mtodos, classes,
clculos, mudana de valor de variveis. Tudo isso considerado como uma expresso.
Uma coleo de expresses considerada como um programa. Expresses podem ser separadas
umas das outras pelo smbolo de ponto e virgula (;) ou por quebras de linha ([Enter]).
Uma expresso pode utilizar vrias linhas, bastando pressionar a tecla [Enter] e continuar na
linha seguinte. As expresses, ainda podem ser agrupadas com parnteses. Expresses
agrupadas so efetuadas antes do resto da expresso.
Exemplos:
true
(1+2)*3
Actor()
if teste then ok else erro end
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
33
Conhecendo Os Scripts RGSS
Variveis e Constantes
Variveis so ponteiros para reas da memria, onde podem ser armazenados valores. Variveis
e constantes so exatamente a mesma coisa dentro do Ruby. Elas tm a mesma caracterstica e
funcionam da mesma forma. A nica diferena que as constantes so como variveis que no
devem ter seu valor modificado. Ento, como saberemos como diferenciar uma varivel de uma
constante, j que elas funcionam de forma igual? Neste caso costuma-se criar variveis apenas
com letras minsculas e as constantes com letras maisculas.
O caractere inicial de uma varivel define o seu tipo (varivel global, varivel de instncia,
varivel local). Normalmente uma varivel um nome alfanumrico, exceto pelo primeiro
caractere que pode ser de outro tipo e ainda pode ter underscore (_).
Muitas variveis built-in comeam com '$' + um caractere (veja Variveis Built-In).
Variveis e constantes apontam para um objeto especfico. Adicionar valor a uma varivel, nada
mais do que criar novos ponteiros para novos objetos. Isso no cria novos objetos.
Em Ruby, tudo so objetos, pois ela uma linguagem orientada a obejtos.
Variveis Globais
Variveis que possuam o prefixo '$' so variveis globais e podem ser referenciadas de qualquer
parte do programa. Este tipo de varivel no necessita ser declarado. Quando referenciado, o
valor das variveis globais no iniciadas equivale a nil.
Exemplo:
$actor
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
34
Conhecendo Os Scripts RGSS
Variveis de Instncia
Variveis que comeam com o prefixo '@' so variveis de instncia. As variveis de instncia
so variveis que podem ser acessadas por qualquer mtodo de sua classe ou sub-classe. Estas
variveis no podem ser acessadas por outras classes diretamente. Quando referenciado, o valor
das variveis de instncia no iniciadas equivale a nil.
Exemplo:
@actor
Variveis Locais
As variveis locais e identificadores comeam com caracteres alfanumricos minsculos ou com o
smbolo '_' (underscore). Este tipo de varivel s pode ser usado ou acessado no mtodo onde foi
criado.
O escopo de variveis locais se estende entre outras estruturas como as classes, modules e
definies de mtodos (def). Neste caso, uma classe, por exemplo, considerada como uma
varivel local. Quando referenciado, o valor das variveis locais no iniciadas equivale a uma
chamada de mtodo sem nenhum argumento. Caso no exista um mtodo de mesmo nome, um
erro gerado.
Exemplo:
actor
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
35
Conhecendo Os Scripts RGSS
Constantes
Identificadores ou variveis com letra maiscula so constantes. A definio e iniciao
dependem da aplicao. Constantes no podem ser definidas como mtodos. Acesso a constantes
no iniciadas gera um erro de exceo conhecido como NameError.
Exemplo:
ACTOR
Uma constante criada numa classe pode ser referenciada por classes e mdulos herdados. Para
acessar as constantes externamente utiliza o operador '::'.
Exemplos:
class Actors
ACTOR1 = 'Arshes'
ACTOR2 = 'Teste de Constante'
end
class Ator < Actors
heroi1 = ACTOR1 # heroi1 = "Arshes"
heroi2 = ACTOR2 # heroi2 = "Teste de Constante"
end
heroi1 = Actors::ACTOR1 # heroi1 = "Arshes"
heroi2 = Actors::ACTOR2 # heroi2 = "Teste de Constante"
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
36
Conhecendo Os Scripts RGSS
Pseudo Variveis
Aparte das variveis comuns existe um tipo especial de varivel que so conhecidas como Pseudo
Variveis. O valor destas variveis no pode ser modificado. Ao tentar adicionar algum valor a
uma varivel deste tipo ocorrer um erro de sintaxe.
As Pseudo Variveis so:
self
Constitudo pelo mtodo ou classe atual.
nil
Instncia do NilClass class. Significa nulo. Quando algo no foi iniciado.
true
Instncia do TrueClass class. Significa verdadeiro.
false
Instncia do FalseClass class. Significa falso.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
37
Conhecendo Os Scripts RGSS
Expresses Literais
Em programas Ruby, os valores podem ser expressos diretamente, seja ele o valor 1 ou a string
Ol mundo!, so conhecidos como expresses literais.
Nmeros Literais
Nmeros literais podem usar o smbolo underscore (_). O interpretador Ruby ignora estes
smbolos. Isso bastante til quando usado como separador em grandes nmeros. Contudo, se
este smbolo for usado aps um nmero literal, vai ocorrer um erro.
1_000_000_000 # => 1000000000
0xffff_ffff # => 0xffffffff
Os tipos de nmeros literais so:
123 ou 0d123 um nmero inteiro decimal.
-123 um nmero inteiro (com sinal).
123.45 um nmero com ponto flutuante.
Nmero com ponto flutuante que iniciem com o ponto no so considerados pelo interpretador do
Ruby. Eles devem ser escritos com 0 (zero) na frente (exemplo : 0.1).
1.2e-3 um nmero com ponto flutuante.
0xffff um nmero inteiro hexadecimal.
0b1011 um nmero binrio inteiro.
0377 ou 0o377 um nmero octogonal inteiro.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
38
Conhecendo Os Scripts RGSS
Strings Literais
Expresses com uma cadeia de caracteres so conhecidas como Strings. Existem duas formas de
se criar uma string (cadeia de caracteres). So elas:
"Esta uma string\n"
'Esta tambm uma string'
Note que podemos utilizar a aspas simples ou aspas dupla. As aspas duplas permitem que sejam
usados comandos extras como notaes de barra invertida e substituio de expresses. As
aspas simples no podem conter nenhuma destas opes (exceto por \' and \\). Strings com um
espao em branco entre si so tratadas como uma nica string.
Exemplo:
texto = "test" "ando" # texto = "testando"
Notaes de barra invertida
\t equivale a um tab (0x09)
\n equivale a um newline (0x0a) (nova linha)
\r equivale a um carriage return (0x0d) (retorno de carro, ou seja, inicio de linha)
\f equivale a um form feed (0x0c)
\s equivale a um whitespace (0x20) (espao em branco)
\nnn equivale a um caractere em valor octogonal nnn (n = 0-7)
\xnn equivale a um caractere em valor hexagonal nn (n = 0-9, a-f)
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
39
Conhecendo Os Scripts RGSS
Expression Substitution
Em strings com aspas dupla e em expresses regulares, o termo "#{expresso}" usado num
contexto de substituio. Em expresses com variveis comeando com $ ou com @ a expreo
substituda pelo valor da varivel.
Se quiser evitar que o Ruby tente efetuar uma substituio, adicione uma barra invertida na
frente da expresso.
Exemplos:
$variavel = "RUBY"
nome = "meu nome #{$variavel}" # nome = "meu nome RUBY"
nome = "meu nome \#{$variavel}" # nome = "meu nome #{$variavel}"
Lembra-se de que as strings com aspas simples no interpretam os comandos extras.
nome = 'meu nome #{$variavel}' # nome = "meu nome #{$variavel}"
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
40
Conhecendo Os Scripts RGSS
Arrays
Objeto que retorna um vetor contendo o resultado de cada expresso. Array uma instncia da
classe Array. O valor inicial de um array em Ruby 0 (zero).
Exemplo: [1, 2, 3]
Syntaxe: '[' expr ',' ... ']'
Suponha que voc tenha o seguinte array:
ary = [0, 1, 2, 3]
Se quisermos adicionar os valores "a", "b", "c" removendo o se gundo e o terceiro valor do 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 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]
p a # => [1, 2] (sem mudanas)
p b # => [8, 9] (sem mudanas aqui tambm)
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
41
Conhecendo Os Scripts RGSS
Hash
Retorna um objeto do tipo Hash que mapeia cada valor resultante em uma chave. Hash uma
instncia da classe Hash. Podemos dizer, de forma muito grosseira, que um Hash um conjunto
de vrios vetores dentro de outro vetor.
Exemplo:
{1=>2, 2=>4, 3=>6}
Syntaxe:
'{' expr '=>' expr ',' ... '}'
'{' expr ',' expr ',' ... '}'
Expresses de Range (Faixa)
Se uma expresso de faixa aparecer numa expresso de condio, retornar o objeto range da
expresso 1 at a expresso 2. Os objetos do tipo range so instncias da classe Range. Objetos
do tipo Range so separados pelo operador ..
Exemplo 1:
1 .. 20
Exemplo 2:
for i in 0...10
#faz qualquer coisa
end
Syntaxe:
expr1 '..' expr2
expr1 '...' expr2
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
42
Conhecendo Os Scripts RGSS
Symbols
Retorna o smbolo correspondente a uma string. Objetos Symbols so instncias da classe
Symbol. Estes so os nicos objetos que retornam o mesmo objeto sempre que so chamados.
Exemplo:
:class
:lvar
:method
:$gvar
:@ivar
:+
Syntaxe:
':' identifier
':' variable name
':' operator
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
43
Conhecendo Os Scripts RGSS
Operadores RGSS
Com os operadores iremos efetuar nossos clculos, operaes de comparao, mudana de
valores, dentre outros... Os operadores podem ser usados em expresses literais e em conjunto
com outros comandos e/ou operadores.
Os operadores tm uma determinada prioridade de execuo. As operaes podem ser
agrupadas com parnteses para mudar a ordem de prioridade de execuo dos operadores
Exemplo:
1+2*3/4
A linguagem de programao Ruby possui os seguintes operadores:
Alto ::
[]
**
-(unary) +(unary) ! ~
* / %
+ -
<< >>
&
| ^
> >= < <=
<=> == === != =~ !~
&&
||
.. ...
?:(conditional operator)
=(+=, -= ... )
not
Baixo and or
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
44
Conhecendo Os Scripts RGSS
O Alto e Baixo define o nvel de prioridade e, conseqentemente, execuo dos operadores.
Por exemplo, "&&" tem prioridade maior que "||", ento ele interpretado da seguinte forma:
a && b || c # => (a && b) || c
a || b && c # => a || (b && c)
Operadores de redefinio (mtodos)
Operadores de redefinio, quando usados, alteram o valor da expresso ou do comando de
comparao em questo. Os valores so modificados e armazenados (temporariamente ou no).
+@ e -@ representa o mesmo que os operadores + and -. Suponha que voc tenha uma varivel
a com o valor 1 e a varivel b com o valor 2. Se voc criar a expresso a = b, a varivel a
ter seu valor redefinido para 2.
Os operadores de redefinio:
| ^ & <=> == === =~ > >= < <= << >>
+ - * / % ** ~ +@ -@ [] []= `
A atribuio de valor pode ser feita diretamente, a si mesmo ou atravs de uma atribuio
mltipla. Veremos vrias expresses com diversas formas de atribuio mais adiante.
Operadores sem redefinio (controle de estruturas)
So os operadores que no alteram os valores das expresses, portanto s servem para serem
usados em determinados tipos de expresses. Combinao de operadores de redefinio com os
operadores sem redefinio criam operadores sem redefinio. Como exemplo, temos: (!=) ou
(!~).
Os operadores sem redefinio:
= ?: .. ... ! not && and || or ::
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
45
Conhecendo Os Scripts RGSS
And (e)
Este operador avalia primeiramente o lado esquerdo da expresso, se o resultado for verdadeiro,
avalia o lado direito. Tem a mesma funo que && e um operador de baixa prioridade.
Exemplo:
teste && set
teste and set
Sintaxe:
expr '&&' expr
expr and expr
Or (ou)
Este operador avalia primeiramente o lado esquerdo da expresso, se o resultado for verdadeiro,
avalia o lado direito. Tem a mesma funo que || e um operador de baixa prioridade.
Exemplo:
vida || morte
vida or morte
Sintaxe:
expr '||' expr
expr or expr
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
46
Conhecendo Os Scripts RGSS
Not (negao)
Se o valor da expresso for True, retorna False, se o valor da expresso for False, retorna
True. Este operador funciona como uma negao comum.
Exemplo:
! teste
not teste
t != teste
Sintaxe:
'!' expr
not expr
(?) Operador Condicinal
Retorna expr2 ou expr3 dependendo do resultado da expr1. O seu funcionamento idntico a:
if expr1 then expr2 else expr3 end
Exemplo:
teste == 1 ? teste1 : teste2
Sintaxe:
expr1 ? expr2 : expr3
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
47
Conhecendo Os Scripts RGSS
Controle Estrutural
Ao contrrio do que acontece na linguagem C, as estruturas do controle no Ruby so expresses
que retornam valor. Expresses de controle estrutural so formadas pelos comandos que definem
o funcionamento bsico de seu cdigo. Estes controles podem conter Ifs, Case, Loops,
Exception, dentre outros...
Condies
IF
if --- then --- elsif --- else --- end
Se uma expresso condicional for avaliada como verdadeira, executa a expresso do then.
Clusulas mltiplas de elsif podem ser especificadas. Quando todas as clausulas If e Elsif forem
falsas, a expresso else, caso exista, executado. If retorna o valor da ltima expresso avaliada
na clusula da expresso condicional (ou na clusula else). Se no houver nenhuma clusula else
e nenhuma expresso condicional for verdadeira, retorna nil. Valores falsos e o nil so false. Tudo
mais, incluindo cadeia de caracteres vazias, verdadeiro.
Exemplo 1:
if age <= 1 then
print "Recem nascido\n"
elsif age <= 12 then
print "Criana\n"
elsif age <= 18 then
print "Adolescente\n"
else
print "Adulto\n"
end
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
48
Conhecendo Os Scripts RGSS
exemplo 2:
sexo = if actor.sexo == "M" then "masculino" else "feminino" end
Sintaxe:
if expr [then]
expr ...
[elsif expr [then]
expr ... ]
...
[else
expr ... ]
end
if (Outra opo)
Avalia e retorna o resultado da expresso esquerda da clausula If se a expresso da direita for
verdadeira. Se a condio no tiver resultado possvel, retorna nil.
Exemplo:
print "debug\n" if $DEBUG
Syntax:
expr if expr
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
49
Conhecendo Os Scripts RGSS
unless
O comando unless funciona de forma contrria ao if, Se a condio for falsa, avalia a expresso
inicial. O comando elsif no pode ser usado com unless.
Exemplo:
unless tem_filho?
compra_cerveja
else
compra_leite
end
Sintaxe:
unless expr [then]
expr ...
[else
expr ... ]
end
unless (Outra opo)
Avalia e retorna o resultado da expresso da esquerda se a condio da direita for falsa. Se a
condio no tiver resultado possvel, retorna nil.
Exemplo:
print "stop\n" unless valid(passwd)
Sintaxe:
expr unless expr
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
50
Conhecendo Os Scripts RGSS
case
A expresso case funciona atravs da comparao das clausulas when com a expresso do case.
Quando a clausula when comparada com a expresso case retorna true, as expresses do when
so executadas.
A expresso case retorna a ltimo valor avaliado na clausula when ou na clausula else. Se a
condio no tiver resultado possvel, retorna nil.
Exemplo:
case $idade
when 0 .. 2
"bbe"
when 3 .. 12
"criana"
when 13 .. 18
"adolescente"
else
"adulto"
end
Sintaxe:
case expr
[when expr [, expr] ... [then]
expr ..]..
[else
expr ..]
end
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
51
Conhecendo Os Scripts RGSS
Repeties
while
Executa repetidamente as instrues at que a condio de parada seja alcanada. A expresso
while retorna nil. Opcionalmente, podemos fazer uma expresso while retornar um valor ligado
expresso break.
Example:
ary = [0,2,4,8,16,32,64,128,256,512,1024]
i = 0
while i < ary.length
print ary[i]
i += 1
end
Syntax:
while expr [do]
...
end
A expresso while afeta o escopo das variveis locais.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
52
Conhecendo Os Scripts RGSS
while (Outra opo)
Em alguns casos desejamos executar algo enquanto esperamos que outra coisa acontea. Neste
caso a expresso executada primeiro e depois verificada a condio.
A expresso while retorna nil. Opcionalmente, podemos fazer uma expresso while retornar um
valor ligado expresso break.
Exemplo:
sleep(60) while io_not_ready?
Sintaxe:
expr while expr
until
Repete vrias vezes as expresses at que a condio de parada seja alcanada. until retorna nil.
Opcionalmente, podemos fazer uma expresso until retornar um valor ligado expresso break.
Exemplo:
until f.eof?
print f.gets
end
Sintaxe:
until expr [do]
...
end
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
53
Conhecendo Os Scripts RGSS
until (Outra opo)
Em alguns casos desejamos executar algo enquanto esperamos que outra coisa acontea. Neste
caso a expresso executada primeiro e depois verificada a condio. A expresso until retorna
nil. Opcionalmente, podemos fazer uma expresso until retornar um valor ligado expresso
break.
Exemplo:
print(f.gets) until f.eof?
Sintaxe:
expr until expr
for
A estrutura de repetio for uma das mais utilizada nos scripts, juntamente com o while. A
expresso for retorna o valor do mtodo each para cada objeto especificado no in.
Exemplo:
for i in [1, 2, 3]
print i*2, "\n"
end
Sintaxe:
for lhs ... in expr [do]
expr ..
end
Podemos repetir a execuo das expresses de cada objeto de forma semelhante a:
(expr).each '{' '|' lhs..'|' expr .. '}'
A expresso for no afeta o escopo das variveis locais.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
54
Conhecendo Os Scripts RGSS
break
Expresso utilizada quando se deseja sair de uma repetio, incluindo while, until, for e a
expresso do tipo iterator. Este comando retorna o valor nil. Se algum argumento for
especificado, o retorno ser o valor deste argumento.
Diferente da linguagem de programao C, a expresso break s pode ser usada em repeties
(em C ele pode ser usado em expresses case).
Exemplo:
i = 0
while i < 3
print i, "\n"
break
end
Sintaxe:
break [expr]
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
55
Conhecendo Os Scripts RGSS
next
A expresso next pula para a prxima iterao dentro da repetio. Em uma expresso do tipo
iterator, o next uma forma de sair ou terminar a chamada.
A expresso next retorna nil. Se algum argumento for especificado, o retorno ser o valor deste
argumento.
Exemplo:
str.each_line do |line|
next if line.empty?
print line
end
Sintaxe:
next [expr]
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
56
Conhecendo Os Scripts RGSS
Method Exit (Mtodo de Sada)
return
Fora a sada de um mtodo retornando o valor especificado. Se dois ou mais valores forem
especificados, o mtodo de retorno considera que o valor retornado um array. Se a expresso
de retorno no existir, o valor retornado nil.
Exemplo:
return 12
return 1,2,3
Sintaxe:
return [expr[',' expr ... ]]
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
57
Conhecendo Os Scripts RGSS
Definindo Classes e Mtodos
Definio de Classes (Class)
Exemplo:
class Teste < Super
def test
:
end
:
end
Sintaxe:
class identificador ['<' classe_me ]
expr ..
end
Este comando define (cria) uma classe. Costuma-se criar nomes de classes com a primeira letra
em maisculo.
A definio de classes ocorre com a associao desta a um identificador que podemos utilizar em
nosso cdigo. Em Ruby, classes e objetos so instncias da classe Class.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
58
Conhecendo Os Scripts RGSS
Quando uma classe j est definida (criada) ainda possvel criar uma classe com o mesmo
nome. Neste caso, a segunda definio de classe ter todo o seu cdigo adicionado na primeira
definio.
Exemplo:
class Teste < Array
def tentando
end
end
class Teste
def outro_teste
end
end
Numa definio de classe, o identificador self refere-se a esta classe.
A definio de classes funciona inteiramente sobre o modelo de orientao a objetos. Isto inclui
relacionamentos do tipo herana.
Exemplo:
class Heroi
class Equipamento
end
end
O retorno de uma classe o resultado da ltima expresso executada. Se esta expresso no
possui valor de retorno, a classe retorna nil.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
59
Conhecendo Os Scripts RGSS
Definio de Mdulos (Module)
Este comando define (cria) um mdulo. Costuma-se criar nomes de mdulos com a primeira letra
em maisculo.
A definio de mdulos ocorre com a associao deste a um identificador que podemos utilizar
em nosso cdigo. Em Ruby, classes e objetos so instncias da classe Class.
Exemplo:
module Teste
def testando
:
end
:
end
Sintaxe:
module identificador
expr ..
end
Quando um mdulo j est definido (criado) ainda possvel criar um mdulo com o mesmo
nome. Neste caso, a segunda definio do mdulo ter todo o seu cdigo adicionado na primeira
definio.
O retorno de um mdulo o resultado da ltima expresso executada. Se esta expresso no
possui valor de retorno, o mdulo retorna nil.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
60
Conhecendo Os Scripts RGSS
Definio de Mtodos (def)
Para criarmos um mtodo usamos a expresso def. Esta expresso cria um mtodo de classe ou
mdulo. Se os mtodos forem definidos na classe me, todos os filhos podero usa-los. O
funcionamento dos mtodos semelhante ao das funes que existem em outras linguagens de
programao.
Nome de mtodos podem possuir caracteres normais ou operadores de redefinio (==, +, -,).
Exemplo:
def fatorial(n)
if n == 1 then
1
else
n * fatorial (n-1)
end
end
Sintaxe:
def nome_do_mtodo ['(' [arg ['=' default]] ... [',' '*' arg] ')']
expr ..
[rescue [error_type,..] [then]
expr ..]..
[ensure
expr ..]
end
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
61
Conhecendo Os Scripts RGSS
Quando uma expresso possui argumentos, na chamada do mtodo temos que passar valores a
estes argumentos. Caso no sejam passados, o valor do argumento omitido recebe o valor
padro. A execuo desta expresso ocorre normalmente utilizando o valor padro.
Argumentos que tenham o smbolo (*) imediatamente antes do nome, ir armazenar todos os
argumentos subseqentes num vetor (array).
Exemplos:
# Mtodo sem argumentos
def teste
end
# Mtodo com argumentos
def teste(arg, arg2)
# Mtodo com argumento de valor padro nil
def teste(arg = nil)
# Todos os exemplos de argumentos incluindo vetor
def teste(arg, arg2 = 10, arg3 = nil, *rest)
# Mtodo do tipo operador
def ==(outro)
def +(outro)
def *(outro)
A ordem de definio dos argumentos dos mtodos deve ser seguida na hora de chamar o
mtodo.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
62
Conhecendo Os Scripts RGSS
Operaes de Definio (Definition Operations)
alias (alis)
S possvel criar sinnimos do tipo alias para mtodos ou variveis globais. Esta expresso cria
um identificador que aponta para o mtodo especificado. Expresses do tipo objeto.mtodo no
so permitidas.
Exemplo:
alias teste testeantigo
alias : teste : testeantigo
Sintaxe:
alias mtodo_novo mtodo_velho
Este comando til para modificar um mtodo antigo ou adicionar novos comandos a ele.
Sempre retorna nil.
Mais exemplos:
# Definindo o mtodo "teste"
def teste
"teste"
end
# Definindo um sinnimo
alias :_novo_teste :teste
# teste redefinido
def teste
_novo_teste * 2
end
p teste # => "testeteste"
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
63
Conhecendo Os Scripts RGSS
Scripts RGSS Standard
Antes de criarmos nossos scripts vamos saber resumidamente para que servem cada um dos
scripts padres no prximo captulo.
Listagem de Scripts RGSS Padro
Vamos ento listagem padro dos scripts RGSS. Estes scripts so essenciais para o bom
funcionamento de qualquer jogo. Mas em muitos casos esta lista pode ser modificada.
Ao instalar o aplicativo, apenas estes scripts estaro disponveis, mas isso no impede que novos
scripts sejam adicionados ou que eles sejam removidos.
A estrutura dos prximos captulos a seguinte:
1. Nome da classe em negrito;
2. Herana em letras pequenas;
3. Descrio em letras normais;
As palavras em itlico sevem para fazer referncia a uma classe, objeto, varivel, indicador, ou
qualquer comando dos scripts RGSS.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
64
Conhecendo Os Scripts RGSS
Arrow_Actor
Herana: Arrow_Base
Descrio: Esta classe serve para definir o comportamento do cursor quando aponta para um
actor durante a batalha.
Arrow_Base
Herana: Sprite
Descrio: Esta classe controla o comportamento do cusror de alvo usado nas batalhas. As
classes Arrow_Actor e Arrow_Enemy herdam todas as funcionalidades desta classe.
Arrow_Enemy
Herana: Arrow_Base
Descrio: Esta classe define o comportamento do cursor ao apontar para um dos inimigos
durante a batalha.
Game_Actor
Herana: Game_Battler
Descrio: Esta classe define um ator, com todos os elementos e dados tpicos tais como o nvel,
o equipamento, e a progresso da habilidade (Database). Esta classe faz referncias s variveis
globais $game_actors e $game_party (variveis do tipo array ou vetores).
Game_Actors
Herana: Nenhuma
Descrio: Esta classe existe meramente para simplificar questes relacionadas manipulao
dos dados da varivel global $game_actors (varivel do tipo array ou vetor).
Game_BattleAction
Herana: Nenhuma
Descrio: Esta classe descreve propriedades de uma ao da batalha e possui mtodos usados
em determinar a validade e o escopo de uma ao da batalha, alm de possuir os mtodos que
decidem qual o ltimo alvo ou qual o alvo aleatrio para aes foradas durante a batalha.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
65
Conhecendo Os Scripts RGSS
Game_Battler
Herana: Nenhuma
Descrio: Esta classe descreve um "battler", isto , uma figura de um ator ou de um monstro, e
tudo que poderia lhe acontecer durante a batalha. Observe que estes objetos do tipo "battler"
so membros distintos e diferentes da classe actors. Isto torna mais fcil a aplicao de efeitos
temporrios.
Game_Character
Herana: Nenhuma
Descrio: Esta classe determina o comportamento dos hero sprite (figuras do heri) e event
sprites (figuras de eventos) no mapa, incluindo o movimento, definindo tipos diferentes de
movimento para eventos, e garantindo o correto funcionamento do movimento para as rotas
criadas com o Define Route (Definio de Rota) e as rotas criadas com o comando Move
Event (Mover Evento).
Game_CommonEvent
Herana: Nenhuma
Descrio: Esta classe possui mtodos e indicadores para trabalharmos com informaes de
eventos comuns, tais como a lista de comandos do evento, seu trigger (gatilho), e seu swtich
(interruptor do gatilho). Esta classe possui tambm o cdigo para manter o funcionamento
eventos comuns que sejam processos paralelos.
Game_Enemy
Herana: Game_Battler
Descrio: Esta classe define um inimigo, contendo seus estados, aes, tesouro e resistncias.
Contem tambm o cdigo para decidir que ao o monster deve fazer.
Game_Event
Herana: Game_Character
Descrio: Esta classe possui informaes sobre um evento do mapa, alm de mtodos para
verificar se um evento foi executado.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
66
Conhecendo Os Scripts RGSS
Game_Map
Herana: Nenhuma
Descrio: Esta classe possui informaes sobre o mapa atual, incluindo seus tileset, a sua
passabilidade, nvoa, panorama, fundo da batalha e eventos.
Game_Party
Herana: Nenhuma
Descrio: Esta classe possui os mtodos que tratam do grupo como um todo, alm de mtodos
para tratar cada membro do grupo individualmente. Estes mtodos incluem aqueles para ganhar
ou perder dinheiro, adicionar e remover membros do grupo, e alguns mtodos teis para
batalhas.
Game_Picture
Herana: Nenhuma
Descrio: Esta classe possui informaes sobre uma imagem qualquer e contem mtodos para
mostrar, mover, girar e apagar imagens.
Game_Player
Herana: Game_Character
Descrio: Esta classe calcula a posio relativa do heri em relao ao centro do mapa, evento
que provoca decises relativas ao jogador, alm de possuir mtodos para tratar a contagem de
passos e a contagem de passos restantes para uma batalha.
Game_Screen
Herana: Nenhuma
Descrio: Esta classe possuiu informaes e mtodos para controle da tela do jogo, e controle
do mapa, tal como o tempo se passa, como a tela pisca e como a tela se movimenta (efeito de
terremoto).
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
67
Conhecendo Os Scripts RGSS
Game_SelfSwitches
Herana: Nenhuma
Descrio: Esta classe controla os Local Switchs (Interruptores Locais) associados aos eventos
alm de possuir os mtodos para ajustar e iniciar os valores dos interruptores locais.
Game_Switches
Herana: Nenhuma
Descrio: Esta classe controla os switchs (interruptores) do jogo e possui mtodos para atribuir
e iniciar os switchs (interruptores).
Game_System
Herana: Nenhuma
Descrio: Esta classe possui informaes sobre o sistema de jogo, tal como battle event
interpreter, informaes sobre o evento de mapa ou de batalha em execuo, a quantidade de
tempo restante no temporizador, se os menus saving (registrar o jogo), main menu (menu
principal) e encounters (encontros) esto desabilitados, etc... A maioria dos mtodos desta
classe tratam do processamento dos sons.
Game_Troop
Herana: Nenhuma
Descrio: Esta classe possui informaes sobre o grupo de monstros que est em batalha, alm
de possuir mtodos para configurar os grupos de monstros e para determinar um alvo aleatrio
para um monstro.
Game_Variables
Herana: Nenhuma
Descrio: Esta classe possui as variveis do jogo alm de ter mtodos para atribuir e iniciar os
dados das variveis.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
68
Conhecendo Os Scripts RGSS
Interpreter
Herana: Nenhuma
Descrio: Esta classe possui mtodos que executam os comandos dos eventos incorporados.
Cada evento executando representa uma instncia desta classe.
Scene_Battle
Herana: Nenhuma
Descrio: Esta a classe principal do sistema da batalha. Para facilitar o entendimento desta
classe, o cdigo do sistema da batalha dividido em Phases (fases). Estas fases so:
Fase 1: Inicio da fase de batalha;
Fase 2: Fase de comandos do grupo de heris;
Fase 3: Fase de comandos individuais;
Fase 4: Fase principal;
Fase 5: Fase da vitria;
Scene_Debug
Herana: Nenhuma
Descrio: Esta classe representa a tela de depurao do jogo que aberta quando se pressiona
a tecla F9 durante um test play (Teste de Jogo).
Scene_End
Herana: Nenhuma
Descrio: Esta classe controla o menu que aparece quando voc seleciona a opo End Game
(Fim de Jogo) do menu principal.
Scene_Equip
Herana: Nenhuma
Descrio: Esta classe controla a tela de equipamentos e todas as janelas contidas nela.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
69
Conhecendo Os Scripts RGSS
Scene_File
Herana: Nenhuma
Descrio: Esta classe controla os elementos da seleo de arquivo utilizados ao se registrar
(save) e carregar (load) um arquivo da memria. Existem duas classes que so heranas desta,
Scene_Save e Scene_Load, que controlam elemetos especficos do registro (save) e
carregamento (load) respectivamente.
Scene_Gameover
Herana: Nenhuma
Descrio: Esta classe controla os elementos da tela de fim de jogo (Gameover Screen).
Scene_Item
Herana: Nenhuma
Descrio: Esta classe controla a seleo dos itens de menu do menu principal. Note que um
processo seperado garante que o menu de itens aparea quando o comando da batalha "item"
selecionado.
Scene_Load
Herana: Scene_File
Descrio: Esta classe garante que o processo de seleo de arquivos inicie apenas uma vez o
arquivo de jogo e da forma correta.
Scene_Map
Herana: Nenhuma
Descrio: Esta classe garante que os elementos relacionados ao mapa como a janela da
mensagem e a chamada dos vrios menus que podem mudar a cena (scene). Alm disso, esta
classe responsvel pelo processamento dos grficos dos eventos do mapa, que so asegurados
pela classe de Game_Map e por seus objetos.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
70
Conhecendo Os Scripts RGSS
Scene_Menu
Herana: Nenhuma
Descrio: Esta classe atualiza o menu principal do jogo, processa as entradas do usurio no
menu de comando e a seleo de personagens do menu de estatsticas.
Scene_Name
Herana: Nenhuma
Descrio: Esta classe controla a tela "Enter Hero Name" (Digitar Nome do Heri). Este tela pode
ser chamada atravs dos comandos de eventos.
Scene_Save
Herana: Scene_File
Descrio: Esta classe controla a forma de seleo dos arquivos a serem gravados garantindo
que seja utilizado apenas um arquivo por vez.
Scene_Shop
Herana: Nenhuma
Descrio: Esta classe controla as telas de lojas e as suas sub-telas, alm de responder s
opes escolhidas pelo usurio.
Scene_Skill
Herana: Nenhuma
Descrio: Esta classe controla as janelas e garante a correta utilizao e seleo das habilidades
dentro do menu principal. Note que a seleo de habilidades na batalha controlada pela classe
Scene_Battle.
Scene_Status
Herana: Nenhuma
Descrio: Esta classe possui as janelas de estatsitcas do heri e podem ser acessadas atravs
do menu principal do jogo.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
71
Conhecendo Os Scripts RGSS
Scene_Title
Herana: Nenhuma
Descrio: Esta classe controla a tela de inicio do jogo.
Sprite_Battler
Herana: Sprite
Descrio: Esta classe proporciona mudanas grficas nas imagens de batalha, tais como
atualizar a tela se a imagem estiver visvel, fazer a tela picar como um flash antes de atacar e
mostrar os danos causados durante a batalha.
Sprite_Character
Herana: Sprite
Descrio: Esta classe proporciona mudanas grficas nas imagens do personagem (character),
tais como atualizar a tela se a imagem estiver visvel, fazer a tela picar como um flash antes de
atacar e mostrar os danos causados durante a batalha.
Sprite_Picture
Herana: Sprite
Descrio: Esta classe controla as alteraes em imagens durante o jogo.
Sprite_Timer
Herana: Sprite
Descrio: Esta classe atualiza o grfico de tempo.
Spriteset_Battle
Herana: Nenhuma
Descrio: Esta classe controla todos os sprites (grupos de imagens) usados na classe de
Scene_Battle, tal como os inimigos, os atores, o fundo da batalha, e todas as imagens que esto
sendo mostradas.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
72
Conhecendo Os Scripts RGSS
Spriteset_Map
Herana: Nenhuma
Descrio: Esta classe contem os sprites (grupo de imagens) usados na classe Scene_Map, tal
como o tileset, o panorama, a nvoa, o tempo e as figuras.
Window_Base
Herana: Window
Descrio: Esta a classe principal das janelas. Todas as outras classes de janela herdam desta
classe. Ela possui mtodos teis que podem ser chamads em diversas janelas. Se voc deseja
adicionar um mtodo que voc ir usar em muitas janelas durante todo o seu jogo, voc deve
adicionr este mtodo nesta classe.
Window_BattleResult
Herana: Window_Base
Descrio: Esta a classe da janela que aparece quando voc vence uma batalha. Ela mostra a
quantidade de experincia e dinheiro adquirido. Em alguns casos itens so deixados pelos
monstros. Estes istens so mostrados nesta tela tambm.
Window_BattleStatus
Herana: Window_Base
Descrio: Esta a classe da janela que mostra os pontos de vida (HP), os pontos de habilidade
(SP) e o estado dos heris durante a batalha.
Window_Command
Herana: Window_Selectable
Descrio: Esta janela mostra uma lista de comandos. Ao contrrio das outras classes que
herdam de Window_Base, esta herda de Window_Selectable e projetada para ser o mais
flexvel possvel, permitindo que uma janela seja construda fcilmente toda vez que voc quiser
que o jogador escolha uma opo entre vrios comandos disponveis.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
73
Conhecendo Os Scripts RGSS
Window_DebugLeft
Herana: Window_Selectable
Descrio: Esta janela mostra grupos de dez swtichs e variables (interruptores e variveis) que o
usurio pode escolher e modificar durante o teste de seu projeto. Quando o usurio escolhe um
grupo do lado esquerdo na tela, o lado direito da tela mostra dez switchs ou variable
(interruptores ou variveis) individuais para serem modificados.
Window_DebugRight
Herana: Window_Selectable
Descrio: Esta janela mostra dez switchs ou variable (interruptores ou variveis) individuais
dependendo do grupo escolhido no lado esquerdo da tela. Pressionando a tecla [Enter] possvel
alterar o valor dos switchs (interruptores), alm de diversas operaes com variable (variveis)
estarem disponveis.
Window_Gold
Herana: Window_Base
Descrio: Esta janela mostra a quantidade ouro disponvel naquele momento. Esta tela
apresentada no menu, nas lojas e quando o comando "\g" utilizado nas mensagens de texto.
Window_Help
Herana: Window_Base
Descrio: Esta tela apresentada em vrias situaoes diferentes, como na tela de itens, na
tela de habilidades, equipamentos, dentre outros. Serve para apresentar um texto descritivo
sobre uma determinada situao. Na batalha serve para mostrar os nomes dos personagens e
dos inimigos.
Window_InputNumber
Herana: Window_Base
Descrio: Esta a janela para entrada de nmeros. Ela apresentada quando o comando de
evento "Input Number" (Entrar/Digitar Nmero) utilizado.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
74
Conhecendo Os Scripts RGSS
Window_Item
Herana: Window_Selectable
Descrio: Esta janela mostra a lista de itens do grupo de personagens. apresentada toda vez
que a opo Item (itens) do menu principal selecionada.
Window_MenuStatus
Herana: Window_Selectable
Descrio: Esta janela mostra o nome, o nvel, os pontos de vida (HP), os pontos de habilidade
(SP), e o estado de cada personagem do grupo. Esta janela herda de Window_Selectable e no
de Window_Base pois determinados comandos de menu requerem que uma opo esteja
selecionada.
Window_Message
Herana: Window_Selectable
Descrio: Esta a janela principal de mensagens mostrada quando o comando de evento "Show
Message" (Mostrar Mensagem) usado.
Window_NameEdit
Herana: Window_Base
Descrio: Esta janela mostra o nome original do jogador, enquanto possibilita a alterao do
nome antigo atravs da escolha de um novo nome. Os novos nomes devem ser predefinidos e o
jogador no pode criar um novo.
Window_NameInput
Herana: Window_Base
Descrio: Esta janela a janela onde o jogador realmente cria um novo nome. No precisa ser
um nome pr-determinado. O jogador escolhe as letras para o nome da maneira que quiser.
Window_PartyCommand
Herana: Window_Selectable
Descrio: Esta janela mostra as opes Fight (Lutar) ou Flee (Fugir) no inicio de cada turno.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
75
Conhecendo Os Scripts RGSS
Window_PlayTime
Herana: Window_Base
Descrio: Esta janela mostra quanto tempo de jogo j se passou no menu principal do jogo.
Window_SaveFile
Herana: Window_Base
Descrio: Esta janela mostra o estado de um arquivo salvo individualmente nas cenas
scene_save ou scene_load.
Window_Selectable
Herana: Window_Base
Descrio: Esta a classe bsica para a maioria das janelas que permitem que voc selecione
alguma opo na tela. bastante flexvel, a ponto de aceitar opes divididas em linhas e/ou em
colunas.
Window_ShopBuy
Herana: Window_Selectable
Descrio: Esta janela mostra os itens disponveis para serem comprados quando selecionada a
opo Buy (compra) na tela principal das lojas, ou seja, na tela Window_ShopCommand.
Window_ShopCommand
Herana: Window_Selectable
Descrio: Esta janela mostra as opes Buy (Comprar), Sell (Vender), and Exit (Sair) quando
uma tela de loja aberta.
Window_ShopNumber
Herana: Window_ShopNumber
Descrio: Esta tela aparece quando um item comprado ou vendido, para que possamos indicar
a quantidade de itens que desejamos.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
76
Conhecendo Os Scripts RGSS
Window_ShopSell
Herana: Window_Selectable
Descrio: Esta tela mostra os itens disponveis que podem ser vendidos quando selecionada a
opo Sell (venda) na tela principal das lojas, ou seja, na tela Window_ShopCommand.
Window_ShopStatus
Herana: Window_Base
Descrio: Quando selecionado um item para comprar numa loja, esta tela mostra a
quantidade disponvel deste mesmo item no inventrio do grupo. Ela mostra tambm a mudana
de poder ou defesa (dependendo do item) para cada personagem que pode utilizar aquele item.
Window_Skill
Herana: Window_Selectable
Descrio: Esta janela mostra a lista de habilidades do personagem e pode ser usado no menu ou
durante uma batalha.
Window_SkillStatus
Herana: Window_Base
Descrio: Esta janela aparece em cima da janela de seleo de habilidades. Ela mostra o nome,
o estado, os pontos de vida (HP) e os ponstos de habilidade SP do personagem usando esta
habilidade.
Window_Status
Herana: Window_Base
Descrio: Esta habilidade mostra o estado do personagem no menu principal.
Window_Steps
Herana: Window_Base
Descrio: Esta janela mostra no menu principal quantos passos foram dados pelos heris.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
77
Conhecendo Os Scripts RGSS
Window_Target
Herana: Window_Selectable
Descrio: Esta tela apresentada quando um item ou habilidade precisa de um alvo. Esta tela
no utilizada durante uma batalha.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
78
Conhecendo Os Scripts RGSS
Entendendo as Classes e Mtodos
Introduo
Muito bem... J vimos muita coisa. Sabemos tudo sobre a sintaxe e os comandos (eu espero),
mas ainda est meio confuso este negcio chamado orienteo a obejtos. Que bixo este? O
que siginifica orientao a objetos? o que veremos agora...
Orientao a Obejtos
Um objeto a instncia de uma classe. Traduzindo isso para portugus, uma classe e um objeto
so exatamente a mesma coisa, mas quando est no papel (ou na tela do computador)
chamado de classe e quando est sendo executado pelo programa objeto.
Vejamos um exemplo de classe:
class Musica
def initialize(nome, artista, duracao)
@nome = nome
@artista = artista
@duracao = duracao
end
end
Aqui, criamos a classe Musica. Note que criamos dentro desta classe um mtodo chamado
initialize. Este um mtodo especial do Ruby. Quando executamos o comando Musica.new para
criarmos o objeto Musica na memria, o Ruby cria um objeto no inicializado e logo depois
chama o mtodo initialize passando os parmetros especificados no new.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
79
Conhecendo Os Scripts RGSS
Na classe msica tmos trs parmetros. Estes parmetros adicionam valores a variveis de
instncia. Estas variveis podem ser acessadas por qualquer mtodo de nossa classe Musica ou
sub-classe.
Vamos voltar nossa classe e criar mais um mtodo. Ela deve ficar assim:
class Musica
def initialize(nome, artista, duracao)
@nome = nome
@artista = artista
@duracao = duracao
end
def to_s
return "Msica: #{@nome}-#{@artista} (#{@duracao})"
end
end
Aqui, estamos pedindo para nosso novo mtodo (chamado to_s) para retornar um valor no
formato String que seja composto pelo nome da msica (nome), nome do artista (artista) e a
durao da msica (duracao).
Agora, nossa classe j faz alguma coisa de til. Vamos ver um cdigo tpico onde utilizarmos a
nossa classe e seus mtodos.
minha_musica = Musica.new(Track01, Fulano, 05:00 minutos)
print minha_musica.to_s
O resultado disso ser:
"Msica: Track01-Fulano (05:00 minutos)".
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
80
Conhecendo Os Scripts RGSS
J criamos a classe Musica, mas que tal criarmos um Karaoke? Esta classe deve ser bastante
semelhante classe Musica, no acha? Precisariamos de apenas uma mudana. Esta mudana
deve possibilitar que a letra da msica aparea. Ento fica fcil criarmos a classe Karaoke. Basta
copiarmos nossa classe e colocarmos outro nome nela. Depois criamos a varivel @letra. Certo?
Errado!
Nunca duplique um cdigo (utilizando os famosos Crtl+C e Ctrl+V) numa linguagem orientada a
obejtos. Para fazermos nossa classe Karaoke do modo correto devemos utilizar as heranas.
Primeiro, ns devemos criar a classe Karaoke herdando as caracteristicas da classe Musica.
class Karaoke < Musica
def initialize(nome, artista, duracao, letra)
super(nome, artista, duracao)
@letra = letra
end
end
Note que na inicializao, temos quatro parametros agora. Numa herana, todas as variveis da
classe me funcionam com se tivessem sido declaradas na classe filha. O mesmo acontece com
os mtodos, portanto j podemos utilizar o mtodo to_s. Qual seria o resultado deste comando?
meu_karaoke = Karaoke.new(Track99, Ciclano, 02:30 minutos, la la la... laa, laa... la, la)
print meu_karaoke.to_s
O resultado disso ser:
"Msica: Track99-Ciclano (02:30 minutos)".
Onde foi parar o valor da varivel letra??? A varivel letra no apreceu, pois numa herana, os
mtodos so herdados exatamente como foram definidos na classe me. Na classe me no
mandamos a varivel letra aparecer, lembra?
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
81
Conhecendo Os Scripts RGSS
Para resolver este problema temos que redefenir o mtodo to_s. Nossa classe deve ficar assim:
class Karaoke < Musica
def initialize(nome, artista, duracao, letra)
super(nome, artista, duracao)
@letra = letra
end
def to_s
return "Karaoke: #{@nome}-#{@artista} (#{@duracao}) [#{@letra}]"
end
end
Pronto! Agora, nosso retorno ser:
"Karaoke: Track99-Ciclano (02:30 minutos) [la la la... laa, laa... la, la]".
Note que os mtodos das classes que criamos foram usadas sem problema nenhum. Isso ocorre,
pois os mtodos criados so pblicos por definio.
Se no indicarmos nada, os mtodos sero pblicos, mas ainda podemos deix-los como
protegidos ou no modo privado. Uma das formas de se fazer isso assim:
class MinhaClasse
public :metodo1, :metodo4
protected :metodo3
private :metodo4
end
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
82
Conhecendo Os Scripts RGSS
Outra forma seria esta:
class MinhaClasse
def metodo1 # o padro 'public'
#...
end
protected # os mtodos subsequentes sero 'protected'
def metodo2 # vai ser 'protected'
#...
end
private # os mtodos subsequentes sero 'private'
def metodo3 # vai ser 'private'
#...
end
public # os mtodos subsequentes sero 'public'
def metodo4 # e este vai ser 'public'
#...
end
end
Os mtodos public (pblicos) podem ser chamados por qualquer um e no existe controle de
acesso. Os mtodos so pblicos por definio ( exceo de inicialize, que sempre private).
Os mtodos protected (protegidos) podem ser chamados somente por objetos da classe atual e
de suas sub-classes. O escopo de utilizao mantido dentro da famlia, ou seja, classe me e
suas classes filhas.
Os mtodos private (confidenciais) no podem ser chamados por outra classe que no seja ela
mesma ou a classe que seja descendente direto desta classe.
Este o bsico da orientao a objetos. Agora, podemos criar nosso primeiro script.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
83
Conhecendo Os Scripts RGSS
Criando um Script
Introduo
Agora ns j conhecemos lgica de programao, a sintaxe bsica dos scripts RGSS, os scripts
RGSS padres e o funcionamento bsico de uma linguagem OOP. Com esta base, temos
conhecimento para criar o nosso primeiro script.
Se voc est lendo este tutorial, com certeza j deve ter uma boa base nos recursos do RPG
Maker XP
. Por causa disso, este captulo ir detalhar apenas os casos referentes aos scripts.
Caso voc no tenha conhecimentos bsicos, este captulo pode parecer complexo e de difcil
entendimento. Portanto, s continue a leitura se voc tem certeza que conhece bem o aplicativo.
Scene_Tutorial
O Editor de Scripts
Aqui, vamos ver como criar uma scene completa, com tela de help (ajuda), tela de comandos,
telas secundrias, dentre outras coisas. E qual o motivo para estudarmos sobre a criao de uma
scene? Bem... Exitem muitas scenes num jogo criado no RPG Maker, portanto, se voc deseja
personalisar seu jogo, inprescendvel ter um conhecimento no funcionamento das scenes.
Primeiro crie um novo projeto. Depois vamos abrir o editor de scripts RGSS. Caso no se lembre
como fazer isso, tente usar a tecla de atalho F11.
No lado esquerdo da tela temos a lista de todos os scripts padres (aqueles que j vimos no
captulo anterior). Desca a tela at encontrar o script com nome de Main (Principal).
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
84
Conhecendo Os Scripts RGSS
Clique com o boto direito do mouse em cima do Main.
Um menu pop up deve aparecer conforme podemos observar na figura 05.
Figura 05
Menu pop up do editor de scripts.
Selecione a opo Insert (Inserir). Uma tela em branco deve aparecer. Selecione a opo criada e
d um nome para ela. Exemplo: Scene_Tutorial_Script.
Agora podemos digitar nossas expresses e cdigos do script. Observe na figura 06 como a tela
deve ficar.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
85
Conhecendo Os Scripts RGSS
Figura 06
Script do tutorial.
Antes de comearmos a encher nossa tela de expresses e cdigos, vamos entender uma scene.
Toda cena com janelas uma scene. As janelas so criadas separadamente, ou seja, cada janela
uma classe diferente. A scene tambm eu uma classe, mas ela fica responsvel apenas por
controlar o que cada janela faz.
Resumindo:
Classe da Scene: Define e controla as janelas.
Classes das Janleas: Define a aparncia das janelas.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
86
Conhecendo Os Scripts RGSS
Planejando da Cena
Antes de chegarmos ao cdigo, vamos pensar em como ser nossa scene. Podemos criar uma
cena onde em cima fica a tela de help (ajuda), depois uma tela de comandos e por ltimo duas
telas diferentes para aprendermos a usar diversos comandos.
Nossas janelas devem ser utilizadas atravs de variveis. Vamos criar uma varivel para cada
janela. A primeira janela ser representada pela varivel @help_window onde mostrarmos
textos descritivos sobre a nossa scene. A segunda janela ser representada pela varivel
@command_window responsvel pelas opes principais de scene, depois termos a terceira
janela representada pela varivel @tela1_window e a quarta janela que ser representada pela
varivel @tela2_window onde irmos testar a iterao entre as janelas.
S com variveis que a nossa scene sonsegue manipular as janelas. Em nosso exemplo, a scene
ir manipular quatro janelas e, portanto, termos que ter quatro variveis deste tipo, sendo uma
varivel para cada janela.
A cena utiliza as variveis para manipular as janelas atrav do mtodo main da classe da scene.
L onde as variveis referentes s janelas so instanciadas e usadas pela primeira vez.
Em outros mtodos da scene, as variveis de janelas so usadas novamente toda vez que
desejamos efetuar alguma operao com janelas.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
87
Conhecendo Os Scripts RGSS
Entendendo As Classes
Agora que j sabemos que nossas classes de janelas sero usadas atravs de variveis, devemos
saber como ser o funcionamento das janelas e da scene. batante simples. A classe scene
possuir mtodos para controlar toda a iterao entre as janelas, cursores, opes e
informaes. A classe scene s no ir controlar o formato das janelas.
Cada janela uma classe que ter dentro de si mtodos para definir como ser o seu formato,
tamanho, cor, estilo, skin, dentre outras coisas.
Agora, vamos ver cada classe resumidamente.
class Window_TutorialCommand
A varivel @command_window deve ser do tipo de nossa janela de comando com as opes
principais de nossa scene. Nome de exemplo para esta janela: Window_TutorialCommand.
# classe Window_TutorialCommand
class Window_TutorialCommand < Window_Selectable
# mtodo initialize
def initialize
... # incializa a classe
end
# mtodo draw_item(index)
def draw_item(index)
... # desenhando o texto na janela
end
# mtodo refresh
def refresh
... # atualizando desenhos e textos da janela
end
# mtodo update_help
def update_help
... # muda o texto do help
end
end # fim da classe
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
88
Conhecendo Os Scripts RGSS
class Window_Tela1
A varivel @tela1_window deve ser do tipo de nossa primeira janela de informaes. Aqui,
podemos criar uma tela onde o jogador ir ver algumas informaes, mas no iteragir. Note que
nesta janela s vamos mostrar dados, ou seja, no vamos selecionar nada. Por causa disso, esta
janela vai herdar de Window_Base ao invs de Window_Selectable.
Nome de exemplo para esta janela: Window_Tela1.
# classe Window_Tela1
class Window_Tela1 < Window_Base
# mtodo initialize
def initialize
... # incializa a classe
end
# mtodo refresh
def refresh
... # atualizando desenhos e textos da janela
end
end # fim da classe
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
89
Conhecendo Os Scripts RGSS
class Window_Tela2
A varivel @tela2_window deve ser do tipo de nossa segunda janela de informaes. Aqui irmos
efetuar operaes, ou seja, ser necessrio selecionar opes. Por causa disso, esta janela vai
herdar de Window_Selectable.
Nome de exemplo para esta janela: Window_Tela2.
# classe Window_Tela2
class Window_Tela2 < Window_Selectable
# mtodo initialize
def initialize
... # incializa a classe
end
# mtodo draw_item(index)
def draw_item(index)
... # desenhando o texto na janela
end
# mtodo refresh
def refresh
... # atualizando desenhos e textos da janela
end
# mtodo update_help
def update_help
... # muda o texto do help
end
end # fim da classe
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
90
Conhecendo Os Scripts RGSS
class Scene_Tutorial
Ainda termos a scene que ser responsvel por controlar todas as nossas janelas. Na classe
Scene_Tutorial onde devem existir as variveis referentes s janelas. No main elas so
instnciadas. Exemplo: @command_window = Window_TutorialCommand.new
Nome de exemplo para esta classe: Scene_Tutorial.
# Scene_Tutorial
class Scene_Tutorial
# mtodo main
def main
... # mtodo com expresses executadas por tempo indefinido at que a scene seja fechada
end
# mtodo update
def update
... # atualiza todas as janelas e verifica o tratamento dos comandos
end
# mtodo update_command
def update_command
... # checa se uma tecla foi pressionada na tela de comando principal
end
# mtodo update
def update_command_tela2
... # checa se uma tecla foi pressionada na tela de comando da janela Window_Tela2
end
end # fim da classe
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
91
Conhecendo Os Scripts RGSS
O Cdigo do Script
Agora, finalmente, vamos ao cdigo!
#------------------------------------------------------------------------------
# Window_TutorialCommand
# * janela de comando que herda de Window_Selectable
#------------------------------------------------------------------------------
class Window_TutorialCommand < Window_Selectable
#------------------------------------------------------------------------------
# mtodo initialize da janela Window_TutorialCommand
#------------------------------------------------------------------------------
def initialize
# incializa a classe me
super(0, 64, 640, 64)
# configura a rea disponvel para uso da janela
self.contents = Bitmap.new(width - 32, height - 32)
# configura a fonte da janela
self.contents.font.name = $fontface
# configura o tamanho da fonte da janela
self.contents.font.size = $fontsize
# vetor com opes de comando da janela
@commands = ["Tela 01", "Tela 02", "Voltar para o Mapa"]
# indicando quantos itens queremos na tela de comando
# itens igual ao total de valores no vetor @commands
@item_max = @commands.size
# indicando quantas colunas queremos na tela de comando
# colunas igual ao nmero de itens
@column_max = @item_max
# redesenhando a janela
refresh
# indicando a posio inicial do cursor ao abrir a janela
self.index = 0
# indicando a posio da janela no eixo Z
self.z=50
end # fim do mtodo initialize da classe Window_TutorialCommand
#------------------------------------------------------------------------------
# mtodo draw_item da janela Window_TutorialCommand
#------------------------------------------------------------------------------
def draw_item(index) # index representa a coluna onde o texto vai ser digitado
# calculando a posio x do texto
x = 4 + index * (640/@column_max)
# calculando o tamanho do texto
w = (640/@column_max)-32
# indicando a cor do texto
self.contents.font.color = normal_color
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
92
Conhecendo Os Scripts RGSS
# desenhando o texto na janela
self.contents.draw_text(x, 0, w, 32, @commands[index])
end # fim do mtodo draw_item(index) da classe Window_TutorialCommand
#------------------------------------------------------------------------------
# mtodo refresh da janela Window_TutorialCommand
#------------------------------------------------------------------------------
def refresh
# limpando toda a janela
self.contents.clear
# indicando a skin da janela
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
# desenhandoa listagem de itens
for i in 0...@item_max
draw_item(i)
end
# atualizando otexto da tela de help (ajuda)
update_help
end # fim do mtodo refresh da classe Window_TutorialCommand
#------------------------------------------------------------------------------
# mtodo update_help da janela Window_TutorialCommand
#------------------------------------------------------------------------------
def update_help
# se a janela ativa no tiver help, retorna sem dar erro
return if @help_window.nil?
# se a janela atual estiver ativa...
if self.active == true
if self.index == 0
# se a posio do cursor for 0 (zero) na janela atual...
# ento muda o texto de help para "Abre a Tela 01."
@help_window.set_text("Abre a Tela 01.")
elsif self.index == 1
# se a posio do cursor for 1 (um) na janela atual...
# ento muda o texto de help para "Abre a Tela 02."
@help_window.set_text("Abre a Tela 02.")
elsif self.index == 2
# se a posio do cursor for 2 (dois) na janela atual...
# ento muda o texto de help para "Fecha a Scene."
@help_window.set_text("Fecha a Scene.")
end # fim do if self.index == xxx
end # fim do if self.active == true
end # fim do mtodo update_help da classe Window_TutorialCommand
end # fim da classe Window_TutorialCommand
#------------------------------------------------------------------------------
# Fim da classe Window_TutorialCommand
#------------------------------------------------------------------------------
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
93
Conhecendo Os Scripts RGSS
#------------------------------------------------------------------------------
# Window_Tela1
# * janela normal que herda de Window_Base
#------------------------------------------------------------------------------
class Window_Tela1 < Window_Base
#------------------------------------------------------------------------------
# mtodo initialize da janela Window_Tela1
#------------------------------------------------------------------------------
def initialize
# incializa a classe me
super(0, 128, 640, 352)
# configura a rea disponvel para uso da janela
self.contents = Bitmap.new(width - 32, height - 32)
# configura a fonte da janela
self.contents.font.name = $fontface
# configura o tamanho da fonte da janela
self.contents.font.size = $fontsize
# redesenhando a janela
refresh
# indicando a posio da janela no eixo Z
self.z=50
end # fim do mtodo initialize da classe Window_Tela1
#------------------------------------------------------------------------------
# mtodo refresh da janela Window_Tela1
#------------------------------------------------------------------------------
def refresh
# limpando toda a janela
self.contents.clear
# indicando a skin da janela
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
# indicando a cor do texto
self.contents.font.color = normal_color
# cria varivel com ponteiro para o primeiro actor (heroi)
actor = $game_party.actors[0]
# desenhando os diversos tipos de textos na janela
self.contents.draw_text(4 , 32 * 0, 640, 32, "Nome: " + actor.name) # desenhando o nome
self.contents.draw_text(4 , 32 * 1, 640, 32, "Classe: " + actor.class_name + " (nvel " + actor.level.to_s + ")") # desenhando a classe e nvel
self.contents.draw_text(4 , 32 * 3, 640, 32, "Opes modificadas na tela 2:") # desenhando texto
self.contents.draw_text(4+32, 32 * 4, 640, 32, "Varivel [0001] : " + $game_variables[1].to_s) # desenhando valor de varivel
self.contents.draw_text(4+32, 32 * 5, 640, 32, "Varivel [0002] : " + $game_variables[2].to_s) # desenhando valor de varivel
self.contents.draw_text(4+32, 32 * 6, 640, 32, "Varivel [0003] : " + $game_variables[3].to_s) # desenhando valor de varivel
self.contents.draw_text(4+32, 32 * 7, 640, 32, "Switches [0001] : " + $game_switches[1].to_s) # desenhando valor de swtich
self.contents.draw_text(4+32, 32 * 8, 640, 32, "Switches [0002] : " + $game_switches[2].to_s) # desenhando valor de swtich
self.contents.draw_text(4+32, 32 * 9, 640, 32, "Switches [0003] : " + $game_switches[3].to_s) # desenhando valor de swtich
# desenhando os diversos tipos de informao sobre o heri
draw_actor_graphic (actor, 364, 32 * 1.6) # desenhando o chaset
draw_actor_hp (actor, 396, 32 * 0, 172) # desenhando o HP
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
94
draw_actor_sp (actor, 396, 32 * 1, 172) # desenhando o SP
Conhecendo Os Scripts RGSS
draw_actor_parameter(actor, 396, 32 * 3, 0) # desenhando atributos
draw_actor_parameter(actor, 396, 32 * 4, 1) # desenhando atributos
draw_actor_parameter(actor, 396, 32 * 5, 2) # desenhando atributos
draw_actor_parameter(actor, 396, 32 * 6, 3) # desenhando atributos
draw_actor_parameter(actor, 396, 32 * 7, 4) # desenhando atributos
draw_actor_parameter(actor, 396, 32 * 8, 5) # desenhando atributos
draw_actor_parameter(actor, 396, 32 * 9, 6) # desenhando atributos
end # fim do mtodo refresh da classe Window_Tela1
end # fim da classe Window_Tela1
#------------------------------------------------------------------------------
# Fim da classe Window_Tela1
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Window_Tela2
# * janela de comando que herda de Window_Selectable
#------------------------------------------------------------------------------
class Window_Tela2 < Window_Selectable
#------------------------------------------------------------------------------
# mtodo initialize da janela Window_Tela2
#------------------------------------------------------------------------------
def initialize
# incializa a classe me
super(0, 128, 640, 352)
# configura a rea disponvel para uso da janela
self.contents = Bitmap.new(width - 32, height - 32)
# configura a fonte da janela
self.contents.font.name = $fontface
# configura o tamanho da fonte da janela
self.contents.font.size = $fontsize
# indicando quantos itens queremos na tela de comando
@item_max = 10
# indicando quantas colunas queremos na tela de comando
@column_max = 1
# variveis temporrias usadas no vetor com opes de comando
s1 = "Variable: [0001] += 1"
s2 = "Variable: [0001] -= 1"
s3 = "Variable: [0002] += 15"
s4 = "Variable: [0002] -= 15"
s5 = "Variable: [0002] *= 2"
s6 = "Switch: [0001] = ON"
s7 = "Switch: [0001] = OFF"
s8 = "Switch: [0002] = ON / OFF"
s9 = "Variable: [0003] = Variable: [0001] * Variable: [0002]"
s10 = "Switch: [0003] = not Switch: [0002]"
# vetor com opes de comando da janela
@commands = [s1,s2,s3,s4,s5,s6,s7,s8,s9,s10]
# redesenhando a janela
refresh
# indicando a posio inicial do cursor ao abrir a janela
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
95
self.index = 0
Conhecendo Os Scripts RGSS
# indicando a posio da janela no eixo Z
self.z=50
end # fim do mtodo initialize da classe Window_Tela2
#------------------------------------------------------------------------------
# mtodo draw_item(index) da janela Window_Tela2
#------------------------------------------------------------------------------
def draw_item(index) # index representa a linha onde o texto vai ser digitado
# calculando a posio y do texto
y = index * 32
# indicando a cor do texto
self.contents.font.color = normal_color
# desenhando o texto na janela
self.contents.draw_text(4, y, 640, 32, @commands[index].to_s)
end # fim do mtodo draw_item(index) da classe Window_Tela2
#------------------------------------------------------------------------------
# mtodo refresh da janela Window_Tela2
#------------------------------------------------------------------------------
def refresh
# limpando toda a janela
self.contents.clear
# indicando a skin da janela
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
# desenhandoa listagem de itens
for i in 0...@item_max
draw_item(i)
end
# atualizando otexto da tela de help (ajuda)
update_help
end # fim do mtodo refresh da classe Window_Tela2
#------------------------------------------------------------------------------
# mtodo update_help da janela Window_Tela2
#------------------------------------------------------------------------------
def update_help
# se a janela ativa no tiver help, retorna sem dar erro
return if @help_window.nil?
if self.active == true
# se a janela atual estiver ativa...
# atualiza o texto da janela de help com a opo selecionada
@help_window.set_text("opo selecionada : " + @commands[index])
end # fim do if self.active == true
end # fim do mtodo update_help da classe Window_Tela2
end # fim da classe Window_Tela2
#------------------------------------------------------------------------------
# Fim da classe Window_Tela2
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
96
#------------------------------------------------------------------------------
Conhecendo Os Scripts RGSS
#------------------------------------------------------------------------------
# Scene_Tutorial
# * Classe que vai controlar nossas janelas
#------------------------------------------------------------------------------
class Scene_Tutorial
#------------------------------------------------------------------------------
# mtodo main executado toda vez que iniciamos o objeto
# (Scene_Tutorial.New)
#------------------------------------------------------------------------------
def main
# definindo uma varivel para nossa janela de help
# no foi necessrio criar esta janela, pois usamos
# a janela de help padro dos Scripts RGSS
@help_window = Window_Help.new
# informando que queremos a janela de help ativada
@help_window.active = true
# informando que queremos a janela de help visvel
@help_window.visible = true
# definindo uma varivel para nossa janela de comandos principais
@command_window = Window_TutorialCommand.new
# associando a janela de help nossa janela de comandos
@command_window.help_window = @help_window
# informando que queremos a janela de comandos ativada
@command_window.active = true
# informando que queremos a janela de comandos visvel
@command_window.visible = true
# definindo uma varivel para nossa janela chamada Tela 01
# a janela "Tela 01" no usa a janela de help
@tela1_window = Window_Tela1.new
# informando que queremos a janela chamada Tela 01 desativada
@tela1_window.active = false
# informando que queremos a janela chamada Tela 01 visvel
@tela1_window.visible = true
# definindo uma varivel para nossa janela chamada Tela 02
@tela2_window = Window_Tela2.new
# associando a janela de help nossa janela "Tela 02"
@tela2_window.help_window = @help_window
# informando que queremos a janela chamada Tela 02 desativada
@tela2_window.active = false
# informando que queremos a janela chamada Tela 02 invisvel
@tela2_window.visible = false
# executa a transio da tela
Graphics.transition
loop do
# atualiza os grficos
Graphics.update
# atualiza as entradas
Input.update
# atualiza scene indefinidamente at que a scene seja fechada
update
if $scene != self
# se sair desta scene,
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
97
# para de executar este cdigo
Conhecendo Os Scripts RGSS
break
end # fim do if $scene != self
end # fim do comando loop do
# finaliza os grficos e imagens
Graphics.freeze
# fecha todas as janelas que criamos nesta scene
@help_window.dispose
@command_window.dispose
@tela1_window.dispose
@tela2_window .dispose
end # fim do mtodo main da classe Scene_Tutorial
#------------------------------------------------------------------------------
# mtodo update da classe Scene_Tutorial
#------------------------------------------------------------------------------
def update
# atualiza todas as janelas que criamos nesta scene
@help_window.update
@command_window.update
@tela1_window.update
@tela2_window .update
if @command_window.active
# se a janela @command_window estiver ativa
# atualiza os comandos da janela @command_window
update_command
elsif @tela2_window.active
# se a janela @tela2_windowestiver ativa
# atualiza os comandos da janela @tela2_window
update_command_tela2
end # fim do if @command_window.active
end # fim do mtodo update da classe Scene_Tutorial
#------------------------------------------------------------------------------
# mtodo update_command da classe Scene_Tutorial
#------------------------------------------------------------------------------
def update_command
#verifica a tecla pressionada
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
# e volta para o mapa de jogo
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
# se a tecla digitada por [enter] ou C
# toca som de deciso
$game_system.se_play($data_system.decision_se)
case @command_window.index
# verifica em que posio esta o cursor
when 0
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
98
# se o cursor estiver na posio 0 (zero)
Conhecendo Os Scripts RGSS
@command_window.active = true # ativa a janela @command_window
@help_window.active = false # desativa a janela @help_window
@help_window.visible = true # torna a janela @help_window visvel
@tela1_window.active = false # desativa a janela @tela1_window
@tela1_window.visible = true # torna a janela @tela1_window visvel
@tela2_window.active = false # desativa a janela @tela2_window
@tela2_window.visible = false # torna a janela @tela2_window invisvel
@tela1_window.refresh # redefine a janela @tela1_window
when 1
# se o cursor estiver na posio 1 (um)
@command_window.active = false # ativa a janela @command_window
@help_window.active = true # ativa a janela @help_window
@help_window.visible = true # torna a janela @help_window visvel
@tela1_window.active = false # desativa a janela @tela1_window
@tela1_window.visible = false # torna a janela @tela1_window invisvel
@tela2_window.active = true # ativa a janela @tela2_window
@tela2_window.visible = true # torna a janela @tela2_window visvel
when 2
# se o cursor estiver na posio 2 (dois)
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
# e volta para o mapa de jogo
$scene = Scene_Map.new
end # fim do case @command_window.index
end # fim do if Input.trigger?
end # fim do mtodo update_command da classe Scene_Tutorial
#------------------------------------------------------------------------------
# mtodo update da classe Scene_Tutorial
#------------------------------------------------------------------------------
def update_command_tela2
#verifica a tecla pressionada
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
@command_window.active = true # ativa a janela @command_window
@help_window.active = true # ativa a janela @command_window
@help_window.visible = true # torna a janela @help_window visvel
@tela1_window.active = false # desativa a janela @command_window
@tela1_window.visible = false # torna a janela @tela1_window invisvel
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
99
@tela2_window.active = false # desativa a janela @command_window
Conhecendo Os Scripts RGSS
@tela2_window.visible = true # torna a janela @tela2_window visvel
elsif Input.trigger?(Input::C)
# se a tecla dgitada por [enter] ou C
# toca som de deciso
$game_system.se_play($data_system.decision_se)
case @tela2_window.index
# verifica em que posio esta o cursor
when 0
# se o cursor estiver na posio 0 (zero)
# varivel 1 recebe +1 em seu valor
$game_variables[1] += 1
when 1
# se o cursor estiver na posio 1 (um)
# varivel 1 recebe -1 em seu valor
$game_variables[1] -= 1
when 2
# se o cursor estiver na posio 2 (dois)
# varivel 2 recebe +15 em seu valor
$game_variables[2] += 15
when 3
# se o cursor estiver na posio 3 (trs)
# varivel 2 recebe -15 em seu valor
$game_variables[2] -= 15
when 4
# se o cursor estiver na posio 4 (quatro)
# varivel 2 recebe *2 em seu valor
$game_variables[2] *= 2
when 5
# se o cursor estiver na posio 5 (cinco)
# switch 1 fica ON
$game_switches[1] = true
when 6
# se o cursor estiver na posio 6 (seis)
# switch 1 fica OFF
$game_switches[1] = false
when 7
# se o cursor estiver na posio 7 (sete)
# switch 2 muda de valor entre ON e OFF
$game_switches[2] = (not $game_switches[2])
when 8
# se o cursor estiver na posio 8 (oito)
# varivel 3 recebe o valor da varivel 1 * varivel 2
$game_variables[3] = $game_variables[1] * $game_variables[2]
when 9
# se o cursor estiver na posio 9 (nove)
# switch 3 fica com valor oposto do Switch 2
$game_switches[3] = (not $game_switches[2])
end # fim do case @tela2_window.index
end # if Input.trigger?
end # fim do mtodo update_command_tela2 da classe Scene_Tutorial
end # fim da classe Scene_Tutorial
#------------------------------------------------------------------------------
# Fim da classe Scene_Tutorial
#------------------------------------------------------------------------------
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
100
Conhecendo Os Scripts RGSS
Testando o Script
Chegou a hora dos testes. Crie um novo evento no mapa. Deixe-o como Action Key (Tecla de
Ao). Escolha uma imagem para este evento, para podermos visualiz-lo no mapa. Abra a
terceira aba de comando e selecione o comando de evento chamado Call Script (Rodar/Chamar
Script). Na tela que ir se abrir digite $scene = Scene_Tutorial.new sem as aspas. A tela deste
comando deve ficar semelhante figura 07.
Figura 07
Evento para chamar o Script.
Com este comando estarmos instanciando a classe Scene_Tutorial na memria, ou seja,
estarmos criando o obejto Scene_Tutorial.
A tela de evento deve ficar semelhante figura 08.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
101
Conhecendo Os Scripts RGSS
Figura 08
Evento para chamar o Script.
Depois de criar o evento, clique em OK e aperte F12 para iniciar o teste de nosso jogo. Se
aproxime do evento que acabamos de criar e pressione a tecla [Enter] ou C. Se tudo estiver
correto, a scene que criamos deve aparecer na tela.
Observe as figuras 09 e 10 para ver nosso script em funcionamento.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
102
Conhecendo Os Scripts RGSS
Figura 09
Testando o Script.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
103
Conhecendo Os Scripts RGSS
Figura 10
Testando o Script.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
104
Conhecendo Os Scripts RGSS
Concluso
O objetivo deste tutorial apenas mostrar alguns dos recursos avanados dos Scripts RGSS
disponveis no RPG Maker XP
.
Este tutorial iniciou nossa caminhada no mundo dos scripts, agora vamos nos aprofundar ainda
mais neste assunto. Estamos apenas comeando a conhecer esta maravilhosa ferramenta do RPG
Maker XP
.
O nome do prximo tutorial Recursos Avanados de Scripts do RPG Maker XP
. Nele iremos
conhecer mais profundamente alguns dos recursos mais avanados do editor de scripts e
veremos toda a potencialidade que podemos ter em nossas mos.
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 6 anos como
analista de sistemas e agora trabalha como engenheiro e responsvel pelo setor de informtica
da Sengin Servios de Engenharia de Instrumentao Ltda (www.sengin.com.br) desde 2004.
Qualquer dvida, crtica, sugesto, reclamao, comentrio ou algo semelhante, favor mandar
um e-mail para marcelocavaco@click21.com.br ou se preferir mande um scrapt (recado) no meu
Orkut.
Est na hora de avanar para o tutorial: Recursos Avanados dos Scripts do RPG Maker XP
.
Tutorial por Marcelo Cavaco (marcelocavaco@click21.com.br)
105