Está en la página 1de 24

Tutorial para aprender a crear

scripts en RGSS by MakerJ

Obra bajo licencia Creative Commons 3.0, totalmente prohibida su distribucin sin reconocer
al autor del mismo (MakerJ).
Queda totalmente prohibida su edicin sin permiso expreso del autor. Prohibido su uso con fines comerciales.

Creado por MakerJ para la comunidad de Cedexia

Breve Introduccin y Agradecimientos:


Este manual fue creado por mi(MakerJ) para la gran comunidad de creacin de videojuegos Cedexia.
Para crear este manual tom como referencia la gua de Necrozard, algunos apuntes de Dublebeax y la gua de
DonBarksGueist, adems de mis propios conocimientos a lo largo de todos estos aos como maker.
Este gua a sido creada sin nimo de lucro y se puede distribuir siempre y cuando se indique el autor o un enlace a la
web del mismo (Cedexia).
Espero que con esta gua el que la lea aprenda a programar en RGSS aunque sean las nociones bsicas.

QUE ES RGSS?
RGSS son las siglas de Ruby Scripting System o lo que es lo mismo: Sistema de Scripting para juegos con Ruby.
No voy a explicar que es un lenguaje de programacin porque parto de la base de que sabeis que es, pasemos a
explicar que es el lenguaje de programacin Ruby.
-Ruby es un lenguaje multiplataforma, interpretado y orientado a objetos. Fue creado por Yukihiro
Matsumoto en 1993, como un lenguaje facilitador de trabajo, que divirtiera al programador a la
hora de hacer su trabajo.

PROGRAMACIN ORIENTADA A OBJETOS? EN ESPAOL, POR FAVOR.


La programacin orientada a objetos POO (OOP en ingls) es un paradigma de programacin que usan los
principales lenguajes de programacin, en este paradigma se usan objetos y sus relaciones para programar lo que
ser la aplicacin final.
Los objetos son entidades que combinan estado (atributo), comportamiento (mtodo) e identidad, esto lo
aprenderemos mas adelante en la gua.

Y ESTO DE QUE ME SIRVE?


Principalmente para crear tu propio juego totalmente personalizado, un juego de Rpg Maker XP sin scripts no es
nada, cuando creas un nuevo proyecto este ya viene preparado con sus scripts bsicos, si los borras el proyecto no
funcionar.

Y QUE PUEDO HACER CON RGSS?


TODO, respuesta simple y rpida.
Con RGSS puedes programar scripts que te permitan hacer todo lo que quieras siempre que sea posible que el Rpg
Maker lo haga funcionar con fluidez y que tu PC tenga los medios para hacerlo posible.

ESTS SEGURO QUE UN TONTO COMO YO PUEDE APRENDER ESTO?


Por supuesto, programar RGSS es una de las cosas ms fciles que puedes hacer en informtica, en cuanto aprendas
lo bsico y practiques un poco podrs dominarlo sin problemas.
Pasemos ya a la parte de programacin.

VEO COLORES EN EL EDITOR


El editor de scripts lleva incorporada la funcin de colorear los diferentes tipos de elementos del script.
Aprenderse estos colores es muy til para programar con mayor rapidez:
Azul:

Representa las palabras reservadas de la sintaxis.


Ejemplos: def, class, if, break
Marrn-rojizo:

Representa los nmeros en el cdigo.


Ejemplos: 1, 20, 35, 120
Celeste:

Representa los operadores.


Ejemplos: =, *, +, /
Verde:

Representa los comentarios. stos son ignorados por Ruby. Solo sirven de gua al
programador.
Ejemplos: # Comentario, =begin Comentario de muchas lneas =end
Violeta:

Representa una cadena de texto (String)


Ejemplos: Hola Mundo, Enseando Ruby

ELEMENTOS DE PROGRAMACIN.

-VARIABLES:
En el editor del Rpg Maker es posible insertar variables en un evento y aunque son un poco limitadas el concepto es
ms o menos el mismo que en programacin:
Las variables son estructuras de datos que, como su nombre indica, pueden cambiar el contenido a lo largo de la
ejecucin de un programa. Como ya sabemos, las variables almacenan y devuelven valores. Es posible (o no)
modificar su valor, pero nunca el tipo de variable.
Pasemos a ver los diferentes tipos:
Globales: Una variable global en Ruby (y en la totalidad de los lenguajes de programacin),
significa que tiene un alcance total en el programa. Una variable global puede ser modificada
desde cualquier parte del programa.
Las variables globales se diferencian de las dems porque comienzan con el smbolo del dlar
($) antes del nombre original.
Ejemplos: $game_system, $game_party, $variable_global
De clase: Las variables de clase en Ruby, significa que tiene un alcance solo dentro de la clase
donde fue asignada. Una variable de clase puede ser modificada dentro de cualquier metodo de
la misma clase, pero no desde otra clase.
Se diferencian porque comienzan con el smbolo arroba (@) antes del nombre original.
Ejemplos: @window_gold, @actor, @variable_de_clase
Locales/De mtodo: Las variables locales o de mtodo, en Ruby (y en la totalidad de los
lenguajes de programacin), significa que tiene un alcance solo dentro del mtodo en que fue
asignada. No puedes acceder a ella ni por diferentes mtodos ni por diferentes clases, solo
dentro de su mtodo.
Se usa sobre todo para contadores y variables que sabemos que nunca las vamos a usar fuera de
ese mtodo.
Se diferencian porque NO comienzan con ningn smbolo, como si fuera una palabra normal.
Ejemplos: contador, var_local
Instanciables: se pueden acceder a ellas en cualquier lugar de la clase (hablaremos ms delante de ello). Declaracin
en RGSS: @variable_instanciable=1
Arrays: este tipo de variable almacena muchos valores en una cadena. Por supuesto, los arrays pueden ser de los 4
tipos de variable citados anteriormente. Declaracin en RGSS: array=[hola,titis,mundo]
Acceso de variable: array[0] acceder al valor hola, array[1] a titis y array[2] a mundo, mucho ojo porque, en
primer lugar, las cadenas se cuentan desde 0 (0 es el primer valor del array y asi) y acceder a un valor del array
inexistente puede generar un error de excepcin al ejecutar.

-CONSTANTES
Una constante es lo mismo que una variable, con la importante diferencia de que su valor no puede
variar a lo largo de la ejecucin del programa. O sea, que no se puede modificar despus de dado el
valor en el script. Los valores constantes tienen un valor determinado por cdigo. Pueden declararse tanto fuera de
una clase como dentro de ella.
La mayor diferencia es que se escribe en maysculas:
EJEMPLO:
MAX_MAKERS, CONST

-OPERADORES
Son simples smbolos que se usan en programacin para realizar operaciones matemticas, una de las cosas mas
fciles de aprender.
Elementos:

+ Suma
- Resta
* Multiplicacin
/ Divisin
+= sumar variable con valor asignado
-= restar variable con valor asignado
*= multiplicar variable por valor asignado
/= dividir variable por valor asignado
= asignar valor
== equiparar un valor con otro
!= un valor es distinto de otro
> Valor mayor a otro
< Valor menor a otro
>= valor mayor o igual a otro
<= valor menor o igual a otro
! Negar un valor

-ARRAYS
Es un tipo de variables que almacena valores en una misma cadena y estos se pueden leer y escribir.
La ventaja de usar arrays es que puedes tener la cantidad de variables que quieras en un solo
Conjunto.
Ejemplo:
@makers = [MakerJ,Cedexia,Comunidad]
print @makers[0]
print @makers[1]
print @makers[2]
@makers[0] = Administrador_Cedexia
@makers = [MakerJ,Cedexia,Comunidad] : Hemos asignado en una array 3 valores de tipo string
(texto).
Print @makers [0] Con esta line la estamos diciendo al programa que imprima en pantalla un texto
usando la funcin print, el texto que se imprimir ser en este caso el indicado en la lnea, o sea al poner
el nmero 0 no est diciendo que imprima en pantalla el nombre MakerJ, esto pasa porque en
programacin se empieza a contar desde el 0, si entre corchetes hubiramos puesto 1 en pantalla se
mostrara el nombre Cedexia.
@makers[0] = Administrador_Cedexia : Esto lo que hace es simplemente cambiar el valor del primer
nombre, ahora ya no sera MakerJ sin Administrador_Cedexia, entonces al array final quedara as:
@makers = [Administrador_Cedexia,Cedexia,Comunidad]
Esto es una demostracin de como mediante un array podemos dar y modificar valores, creo que lo he
explicado suficientemente para que sea entendible.

TABLA HASH
Los Hashes, tambin conocidos como Arrays asociativos, mapas o diccionarios.
La diferencia entre array y hash, es que, como bien vimos anteriormente, el valor de un dato del
array est en cierta posicin, y ese dato tiene como referencia el valor de la posicin, a diferencia de
los Hashes, estos tienen la caracterstica de tener como referencia cualquier tipo de valor, pasemos a
explicarlo mejor:
@makers = {MakerJ =>Admin,Cedexia=>Web,Albert=>Mod}
print @makers[MakerJ]

@makers = {MakerJ =>Admin,Cedexia=>Web,Albert=>Mod}


Prcticamente igual
que el array, nada mas que le asignamos un valor distinto al ndice de posicin.
Fijate tambin, y ten mucho cuidado cuando vayas a asignar una, que los valores no van entre
corchetes, sino que van entre llaves {}.
print @makers[MakerJ]
Es muy simple, lo que hace es imprimir por pantalla el valor que hemos asignado al nombre MakerJ dentro de la
tabla, en este caso el valor es Admin.
Si pusisemos Cedexia nos devolvera el valor web y con Albert nos dira Mod.
Es fcil y muy simple de entender.

CONDICIONALES
Como su nombre indica son elementos que guardan una condicin y que harn algo si esa condicin se cumple (o si
hay excepciones) de lo contrario se ignorar y se seguir adelante con el siguiente cdigo.

CONDICIONAL IF
Este es probablemente el condicional ms comn y usado en cualquier lenguaje de programacin.
Si se ejecuta su condicin o excepcin se ejecutar lo que haya declarado en dicha condicin o excepcin:
@persona1 = MakerJ
@persona2 = Albert
if @persona1 == @persona2
print Ambas personas son la misma
else
print Personas diferentes
end

Este ejemplo de condicional if lo que nos dice es que hemos declarado el valor persona1 que es igual a MakerJ y
persona 2 que es igual a Albert.
Empezamos el if con la operacin @persona1==@persona2 y debajo la operacin de imprimir en pantalla el texto
Ambas personas son la misma
Este texto se imprimira en pantalla en el caso de que los 2 valores fueran iguales, pero como en este caso son
distintos el programa seguir adelante con el cdigo.
Mas abajo encontramos un else que es la palabra que declara la excepcin, en este caso Personas diferentes.
La excepcin se cumplir en el caso de que la condicin no sea cumplida y como no lo fue, se imprimir en pantalla
el texto Personas diferentes

Acabamos el condicional con la palabra end, todo condicional, mtodo, clase, y ms, deben terminar si o si con un
end, sino no se marca el final y es muy probable que te de errores.

CASE
Parecido a if, pero se puede tener numerosas condiciones, incluida una excepcin. Tambin es posible usar rangos.
case @command_window.index
when 0
command_new_game
when 1
command_continue
when 2
command_shutdown
end
case @command_window.index: Primera lnea del condicional case, all es donde indicas que
variable quieres verificar, o sea en que variable quieres que se verifiquen los valores.
En este caso en una variable de clase llamada @command_window.index, lo que indica es la
posicin dentro de la caja de comandos del Scene_Title.
when 0: When significa en ingls Cuando, por lo tanto Cuando el valor de
@command_window.index es 0, se ejecuten las siguientes instrucciones.
command_new_game: Esta es la instruccin seguida del when 0, por lo tanto esta solo se
ejecutar si y solo si @command_window.index vale 0, Si te preguntas que es esta lnea, pues es
una llamada a otro mtodo dentro de la misma clase, pasar a explicarlo en las prximas lecciones.
Como ves, las siguientes lineas son iguales a las explicadas, pero verificando diferentes valores para
ejecutar diferentes instrucciones.
Dejar claro que los when no terminan con ningn end, pero el cada case siempre debe terminar con
uno.

Condicional unless
Vamos a explicar el ltimo condicional de sta leccin. El condicional unless es lo contrario al if, se
ejecutarn las instrucciones si y solo si la expresin es falsa. Vamos a un ejemplo para explicarlo
mejor:

@nombre = MakerJ
unless @nombre == MakerJ
print Si no eres MakerJ no me hables!
end

@nombre = MakerJ: Asignamos a @nombre, la cadena de texto MakerJ.


unless @nombre == MakerJ: La palabra unless significa A menos que, por lo tanto,
traducido sera A menos que la variable @nombre sea igual a MakerJ no se ejecuten las
instrucciones. Entonces, si el valor de la variable @nombre no es MakerJ, se ejecutar el bloque.
Totalmente lo contrario al IF, si la expresin que le damos despus del unless es falsa, se ejecuta el
bloque de instrucciones.
print Si no eres MakerJ no me hables!: Por lo tanto, si @nombre es igual a MakerJ, es
falso, se imprimir por pantalla Si no eres MakerJ no me hables!. Fcil, verdad?.
end: Por supuesto, como todo condicional, lo terminamos con un end.

BUCLE FOR
Permite repetir una misma instruccin un nmero determinado de veces y desde un punto determinado hasta otro.
Dichos puntos de comienzo y fin del bucle pueden ser nmeros o variables numricas.

for i in 0..10
print i
end

for i in 0..10: El bucle debe comenzar por la palabra reservada for, seguida de la variable, la palabra
reservada in, y el rango de contador.
Hay una pequea diferencia entre 0..10 (dos puntos) y 0...10 (tres puntos), el primero toma un rango
desde el primer nmero hasta el ltimo, o sea un rango total, del 0 al 10, y el segundo (tres puntos),
toma un rango desde el primer numero hasta el penltimo, del 0 al 9.
end: Como todo condicional y bucle, marca el final del mismo.
sto imprimir por pantalla 10 veces la variable i, y como i es el contador, imprimir 1,2,3,4... hasta
llegar al 10.

BUCLE WHILE
ste bucle sirve para repetir continuamente ciertas instrucciones, pero a diferencia de loop do, este
termina cuando la expresin dada sea falsa. Vamos a un ejemplo:

Cdigo Ruby
@num = 10
while @num == 10
print @num sigue siendo igual a 10
end

Cdigo Ruby
Todo bucle while, comienza con la palabra reservada while, seguido de la expresin a verificar. En
este caso verificamos si @num==10. While significa Mientras, por lo tanto mientras @num sea
igual a 10, que las instrucciones se ejecuten. O sea, si @num vale 10 en todo el programa, ser un
bucle infinito, ya que si no cambia de valor, seguir ejecutando sus instrucciones.

Operadores

lgicos

Los operadores lgicos indican el formato de validar cierta expresin en un condicional o bucle. Por
ejemplo este que vimos anteriormente:

Cdigo Ruby
@num = 10
while @num == 10
print @num sigue siendo igual a 10
end

Cdigo Ruby
El operador lgico en este caso es ==, el signo de igual.
Hay una importante diferencia entre = y ==, el primero es ASIGNAR, con l puedes asignarle un
valor a una variable, constante, etc. El otro es IGUAL, para comparar valores en condicionales o
bucles. Pasemos a la lista de los mismos:
Igual: El smbolo de igual para la comparacin en condicionales y bucle es: ==
Sirve para verificar si un valor es igual a otro.
Or: Significa en matemtica. O sea puedes comparar dos valores verificando si uno o el otro
es verdadero. El smbolo es: || or
Not: Significa No es cierto, negacin. Por lo tanto es para verificar que algo no es cierto, el
smbolo es: != !(expresin)
Mayor: El smbolo mayor, para verificar si un dato es mayor que otro, excluyndose. Se expresa
con el smbolo: >
Mayor o igual: Es lo mismo que mayor, pero incluyendo el valor dado. Smbolo: >=
Menor: El smbolo menor para verificar si un dato es menor que otro, excluyndose. Se expresa
con el smbolo: <
Menor o igual: Es lo mismo que menor, pero incluyendo el valor dado. Se expresa de la
siguiente manera: <=

Clases y mtodos
Son el cuerpo y alma del scripting. Las clases son objetos que llamaremos para hacer la magia. Dentro de dicha
clase encontramos los mtodos. Los mtodos contienen las instrucciones que creamos y vamos a mandar al
intrprete. Para que ste las ejecute. Una clase puede tener atributos, al igual que los mtodos. En principio, si
existen atributos stos se deben rellenar con un valor al llamar scripts, de lo contrario, generara un error de
excepcin al ejecutar. Bien antes de nada, nuestra clase (casi siempre) debe tener un mtodo por defecto llamado
initialize. Ah es donde pondremos nuestros atributos de acceso a la clase, y tambin ejecutaremos cdigo una vez
inicializado el script.
class Clase_Marras #he notado que hay que poner en maysculas la primera letra de la
clase para que no de problemas de sintaxis
attr_accessor :greeting
attr_accessor :name
#los atributos en cuestin
def initialize(greeting, name) # el mtodo de inicializacin junto
con sus atributos
@greeting=greeting
@name=name
end
def say
print @greeting + " " + @name
end

# mtodo que se puede llamar

end

Herencia de Clases:
Eres hijo nico, tu padre muere y heredas sus pertenencias. Es una forma simple de explicarlo.
Para que una clase herede de otra, debemos poner esto:
class Clase_Marras < Windows_Base
Este ejemplo te permitira, por ejemplo usar el sistema de ventanas para mostrar textos, ventanas y ms cosas. Ideal
para crear vuestro propio sistema de men personalizado.
Pero todava no hemos terminado. Debemos inicializar la clase padre cuando la necesitemos. Ya que
Windows_Base te permite crear ventanas y tiene ciertas propiedades obligatorias para su creacin (posicin x,
posicin y, ancho, alto).
En el mtodo de inicializar metemos:
super(0, 0, 200, 200)

Aqu es de cuando acabamos con la teora y pasamos a una parte ms prctica , que ya iba siendo hora.

GRFICOS Y IMGENES
Todo juego sea del tipo que sea debe tener grficos, un juego que no los tenga no puede llamarse juego propiamente
dicho.
En esta leccin aprenderemos a insertar grficos y como debemos utilizarlos:

@sprite = Sprite.new
@sprite.bitmap = Cache.picture(nombre_del_archivo)
@sprite = Sprite.new: Primero de todo, para crear un sprite, debes asignarlo a una variable,
para posteriormente poder manipularlo. As que en este caso le asignamos un nuevo
sprite/imagen a la variable @sprite, la variable puede llamarse como quiera, no tiene porque
llamarse as.
Despus, introducimos el signo de asignacin (=), y a continuacin el comando Sprite.new, esto
si es obligatorio escribirlo tal cual est, crea un nuevo sprite/imagen.
@sprite.bitmap

= Cache.picture(nombre_del_archivo): Ahora, para cargar en este sprite,


la imagen, simplemente ponemos el nombre de la variable a la que le asignamos un sprite nuevo
anteriormente, un punto, seguido de bitmap, el signo de asignacin (=), y a continuacin
Cache.picture (para acceder a un directorio se escribe Cache + . + el directorio sin s, o sea que
si es Pictures, va a ser Cache.picture, si hay algn directorio que termine sin s, djalo tal cual,
como System, que queda exactamente igual, Cache.system).
Despus de este comando, entre parntesis, va el nombre del archivo que utilizaremos en el script.

MANIPULAR GRFICOS

Como no siempre quedan las imgenes como queramos o donde queramos, tenemos a nuestra disposicin algunos
cdigos para ayudar. Para utilizar estos mtodos hay que
escribir el nombre de la variable a la que le asignamos un sprite nuevo o una ventana, ms un punto,
ms el mtodo, todo seguido.

Aqu dejo algunos:


x: Con este mtodo indicas la coordenada X para situar a tu gusto la imagen.
.y: Indica la coordenada Y de la imagen.
.z: Indica la coordenada Z de la imagen, la coordenada Z indica la posicin de capa, si por
ejemplo, @sprite1.z = 1 y @sprite2.z = 2, y las dos se encuentran en la misma posicin,
@sprite2 se va a ver y @sprite1 no, porque la prioridad de visin (z) de @sprite2 es mayor.
.opacity: Cambia la opacidad del objeto. 0-255
.visible: Aqu debes indicar con un true o false, si es true el objeto se mostrar, si es false, no lo
har.
.update: Actualiza el objeto.
.dispose: Borra el objeto.

REPRODUCIR AUDIO
Comp un juego sin audio queda sos, aqu os dejo el comando para reproducirlo:

Audio.se_play("Audio/SE/nombre_del_archivo): Con este comando puedes reproducir un


sonido SE. Si quieres reproducir un BGM o otro tipo de sonido, simplemente cambia
Audio.bgm_play, o sea cambia donde dice el tipo de sonido, y pon el que necesites, y despus
(Audio/TIPOSONIDO/nombre_del_archivo).

PULSAR UNA TECLA


Normalmente cualquier script necesita que oprimamos alguna tecla, para ello est este script:
Input.trigger?(Input::LETRA): El Input.trigger? Sirve para asegurarse de una tecla presionada,
se usa mucho en los men y ttulos. Reemplaza LETRA por la letra presionada, en mayscula
(C,X,A, y ms) y no olvides situar los dos puntos (::) despus del Input y antes de la LETRA

VENTANAS
Este tipo de ventanas no tiene nada que ver con las de tu casa.
Estas son bloques en los que se muestra lo que tu elijas desde el propio script.

Y COMO HAGO UNA?


Quieres crear una ventana? No hay problema, vamos a ello.
Abre el RPG Maker VX, y entra al Editor de Scripts (F11).
Crea una nueva pgina encima de Main (Insert), y llamala como quieras.
El nombre de la pgina solo sirve para organizarte.
Bueno, como sabrs, una ventana es una clase, comencemos a crearla:
class Window_Sample < Window_Base
end
Primero de todo comenzamos creando una nueva clase, el nombre no tiene porque comenzar con
Window_, pero es recomendable para que no te confundas. Le pondremos de nombre a la ventana,
Window_Sample, y heredaremos los mtodos de Window_Base, mas tarde explicar porque de
Window_Base.
Posteriormente, vamos a crear un mtodo dentro de la clase. Ese mtodo se va a llamar initialize,
debe ser obligatorio su nombre, as que por normas, le llamaremos al primer mtodo, initialize:
class Window_Sample < Window_Base
def initialize
end
end

A continuacin, dentro del mtodo initialize, vamos a indicar los parmetros de super.
El comando super contiene cuatro parmetros, el primero es X, se debe indicar la coordenada X
donde la ventana se situar, en el segundo la coordenada Y, el tercer parmetro es width, o sea la
base, el largo de la ventana, y el ltimo y cuarto parmetro es height, que es la altura de la ventana.
Con estos parmetros podemos jugar, manipulando las dimensiones y posicin de la ventana.
Por lo tanto, el comando quedara: super(x,y,base,altura)
class Window_Sample < Window_Base
def initialize
super(70,100,400,20)
end
end

Lo que hicimos fue agregar el comando super, con sus respectivos parmetros, lo situamos en las
coordenadas (70,100), con una base de 400 y una altura de 20 pxeles.
Ahora vamos a crear otro mtodo, donde dibujaremos un texto, le llamaremos refresh, no tiene
porque llamarse a si, pero en la mayora de las ventanas se encuentra. As que, vamos a crearlo:

class Window_Sample < Window_Base


def initialize
super(70,100,400,20)
end
def refresh
self.contents.clear
end
end

Bien, ya tenemos el nuevo mtodo creado, e introducimos una nueva linea:


self.contents.clear
Lo que hace esta linea lo podemos traducir perfectamente, ya hablamos antes de self, significaba
YO, PROPIO, MIS, contents, significa contenidos, y clear, limpiar/borrar, entonces,
mis.contenidos.limpiar, por lo tanto lo que hace es limpiar los contenidos de la ventana, te
preguntars porque limpiamos los contenidos si ni siquiera los hemos puesto. El tema est en el
update de la Escena que lo llama, imagina que tu ventana se llama desde Scene_Map, all habr un
bucle (update) que actualizar los datos de tu ventana, por lo tanto, sino est el self.contents.clear,
se escribiran arriba del anterior, y el juego puede desbordarse. Siempre en el mtodo donde
vayamos a dibujar los datos, introducimos un self.contents.clear.
Ahora pasemos al dato final, vamos a introducir un comando para insertar un texto dentro de la
ventana:
class Window_Sample < Window_Base
def initialize
super(70,100,400,20)
end
def refresh
self.contents.clear
self.contents.draw_text(120,0,100,100,"Aprende Ruby",1)
end
end

Bien, simplemente agregamos la siguiente lnea:


self.contents.draw_text(120,0,100,100,"Aprende Ruby",1)
El comando draw_text de self.contents lo que hace es imprimir un texto pero en forma de grfico, o
sea no imprime un texto en una ventana default del sistema operativo como hace print, sino que lo
hace en base a una fuente y lo introduce en los grficos de la escena.
Los parmetros del draw_text son fciles:
self.contents.draw_text(x,y,base,altura,texto,alineacin)
Tan fcil como eso. Indicar la coordenada X, la coordenada Y, la base del texto, o sea, el largo de la
regin del texto, el ancho de la regin, el texto entre comillas () y por ltimo la alineacin, si vale
0 es texto se sita a la izquierda, si vale 1 es centrado, y si vale 2 se sita a la derecha.
Ahora lo que tenemos que hacer, es llamar al mtodo refresh, para que nos introduzca los textos y

nos limpie los contenidos, quedara as:


class Window_Sample < Window_Base
def initialize
super(70,100,400,20)
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(120,0,100,100,"Aprende Ruby",1)
end
end

con esto acabas de crear tu propia ventana, cuando tengas mas conocimientos podrs poner todo lo que desees en
ella.

LLAMAR TU NUEVA Y PRECIADA VENTANA


Existen dos diferentes lugares para llamar a una ventana, puede ser desde una Scene, o desde el
mapa con Llamar Script, pero de las dos formas es igual.
Para llamarla, debes asignarle a una variable, tu ventana. Por ejemplo:
@ventana = Window_Sample.new
Nunca olvides poner .new, ya que le estas indicando una nueva ventana, o sea una nueva
Window_Sample, si no lo pones, te mandar error.
Despus como vimos antes, desde esa variable @ventana, puedes dimensionarla, como por ejemplo
cambiarle sus coordenadas:
@ventana.x =200
@ventana.y = 200
Tienes que poner exactamente lo mismo en Llamar Script, si es que quieres llamar la ventana desde
un evento.

Window_Base
Window_Base, es una clase como cualquier otra, pero tiene los mtodos base para toda ventana,
por eso es que siempre heredan de ella, contiene el initialize con todos los parmetros default,
contiene mtodos muy tiles como dibujar el nombre del hroe, la vida, o la clase:
text_color(n):

Con este mtodo puedes cambiar el color de un texto cualquiera. Indicando en n


el nmero del color.
draw_icon(icon_index, x, y): Este mtodo sirve para dibujar en la ventana un icono cualquiera,
donde icon_index, indica el ID del icono, x e y, las coordenadas para situarlo.
draw_face(face_name, face_index, x, y): Este mtodo sirve para dibujar la Cara (Face) de
cualquier persona o hroe dentro de la ventana, donde face_name va el nombre del archivo de
las faces (Actor1, People1, etc), donde face_index, ahi va el ID de la Face dentro de la imagen
de Faces, y despus x e y como coordenadas para la ubicacin.
draw_character(character_name, character_index, x, y): Dibuja el grfico de un character
(personaje), donde character_name va el nombre del grfico donde esta el character que quieres
poner, donde character_index es el ID del personaje dentro de la imagen, y posteriormente las
coordenadas x e y.
draw_actor_graphic(actor, x, y): Dibuja el grfico de uno de los personajes, donde actor debes
indicar que actor es, pero no su ID, debes indicarlo de una forma de ms compleja. En actor
debes poner: $game_actors[id], ahora si, donde id, va el ID, del personaje, puedes asignarlo a
una variable para no tener que ponerlo cada vez que uses un comando que requiera el ID del
actor.
draw_actor_face(actor, x, y): Dibuja el grfico de la cara de cierto personaje, donde actor, va lo
mismo que dijimos en el mtodo anterior: $game_actors[id], despus las coordenadas x e y para
la posicin.
draw_actor_name(actor, x, y): Dibuja el nombre de cierto hroe, donde actor va lo mismo que
dijimos en el mtodo anterior, despus las coordenadas x e y.
draw_actor_class(actor, x, y): Dibuja la clase de cierto personaje, donde actor va de que hroe
quieres que se sepa la clase, y posteriormente las coordenadas.
draw_actor_level(actor, x, y): Dibuja el nivel de cierto personaje dentro del grupo, donde actor
va de que hroe quieres saber el nivel, y los siguientes las coordenadas.
draw_actor_state(actor, x, y): Dibuja el estado de cierto hroe, donde actor va de que hroe
quieres que se sepa el estado, y despus las coordenadas x e y.
draw_actor_hp(actor, x, y): Dibuja el HP/VIDA, de cierto personaje, donde actor va de que
hroe quieres que se sepa el HP/VIDA, y posteriormente las coordenadas para su posicin.
draw_actor_hp_gauge(actor, x, y): Dibuja la barra de vida de cierto personaje, donde actor va de
que hroe quieres que se sepa la vida, y despus las coordenadas x e y.
draw_actor_mp(actor, x, y): Dibuja el MP/PODER MAGICO, de cierto personaje, donde actor
va de que hroe quieres que se sepa el MP/PODER MAGICO, y posteriormente las coordenadas
para su posicin.
draw_actor_mp_gauge(actor, x, y): Dibuja la barra de poder de cierto personaje, donde actor va
de que hroe quieres que se sepa el poder mgico, y despus las coordenadas x e y.
draw_actor_parameter(actor, x, y, type): Dibuja cierto parametro indicado en type, donde actor
va de que hroe quieres que se sepa el parmetro, x e y las coordenadas, y en type va un numero
del 0 al 3, donde: 0 = ATK; 1 = DFS; 2 = SPI; 3 =AGI
draw_item_name(item, x, y): Dibuja el nombre de cierto item, donde item, se indica el ID del

item, posteriormente las coordenadas x e y.


Hay ciertos mtodos que necesitan un parmetro actor, alli debes indicar lo siguiente:
$game_actors[id]
Donde id, va el ID de la Base de Datos de la seccin Personajes, si es el principal, es 1.
Todos esos mtodos pueden ser aplicados en cualquier ventana solo si la clase est heredada a
Window_Base.
Estos mtodos son bsicos y muy fciles de recordar.

ESCENAS
Las escenas lo son todo tanto en Rpg Maker XP como en VX.
El ttulo es una escnea, el mapa tambin, tambin puede ser un objeto, pero solo puede haber una escena actual.
Para llamar a una escena, hay que asignarle a la variable global $scene, la escena que queremos
ejecutar. Por ejemplo:
$scene = Scene_Title.new
As se llama tambin desde un comando Llamar Script. Recuerda que la variable global a asignar la
nueva escena, siempre debe ser la variable $scene.
Vamos a crear una escena, que salga un cartel en la punta arriba-izquierda que tenga un
acceso rpido para salir del juego. Vamos paso a paso a crearlo:
class Scene_Sample < Scene_Base
end
Primero de todo creamos una clase, llmala como quieras, te recomiendo que el nombre comience
con Scene_, para organizarte mejor. Heredamos los mtodos de Scene_Base. Y seguimos
Empezaremos la scene con un mtodo llamado start:
class Scene_Sample < Scene_Base
def start
op1 = Seguir
op2 = Ir al ttulo
op3 = Salir
@mapa = Spriteset_Map.new
@com = Window_Command.new(172,[op1,op2,op3])
end
end

Bien, vamos a explicarlo paso a paso.


op1 = Seguir: Aqu lo que hicimos fue asignarle una cadena de texto (String) a una variable
de mtodo, ya que no la utilizaremos fuera de start. Estas variables locales/de mtodo las
utilizaremos para crear la ventana de comandos.
= Spriteset_Map.new: Aqu lo que hacemos es llamar a un objeto, que es la funcin
del Scene, juntar sub-objetos. En este caso le asignamos a una variable de clase, ya que la
necesitaremos en los dems mtodos para actualizarla (update), la clase Spriteset_Map, que es
el mapa en general, poniendo esta lnea en cualquier script, muestra el mapa de fondo, si no
hubiramos puesto esta linea, se vera un fondo negro con las opciones, y no las opciones con el
mapa actual de fondo, puedes probar borrar esta linea cuando terminemos esta leccin para ver
el efecto.
@mapa

@com

= Window_Command.new(172,[op1,op2,op3]): Aqu llamamos a otra clase ms,


que es Window_Command, esta clase crea una ventana segn sus parmetros y le agrega un
cursor para poder seleccionar opciones. Necesita parmetros, el primero es el largo de la
ventana de comandos, en este caso le puse 172, me pareca justo. El segundo parmetro, debes
indicar las opciones dentro de corchetes [], y separados por coma.
Bien, hasta aqu tenemos algo importante, pero todava falta, sigamos:
class Scene_Sample < Scene_Base
def start
op1 = Seguir
op2 = Ir al ttulo
op3 = Salir
@mapa = Spriteset_Map.new
@com = Window_Command.new(172,[op1,op2,op3])
end
def update
@mapa.update
@com.update
end
end
Seguir explicndote paso a paso:
def update: Creamos otro mtodo, esta vez se llama update, el mtodo update es muy especial
e importante, ya que est en constante repeticin, por lo que su nombre dice, es sumamente til
para actualizar objetos.
@mapa.update:

Actualizamos @mapa, o sea Spriteset_Map, que es lo que le asignamos. Para


actualizar cualquier objeto, se debe poner la variable en la cual se asigno, seguida de un punto y
update.
@com.update:

Actualizamos @com, o sea la caja de comandos (opciones).


end: Obviamente, como todo mtodo, termina en end.
Tenemos la caja con las opciones, y el mapa de fondo, lo nico que nos queda es programar las
instrucciones segn la opcin elegida, veamos lo que sigue:

class Scene_Sample < Scene_Base


def start
op1 = Seguir
op2 = Ir al ttulo
op3 = Salir
@mapa = Spriteset_Map.new
@com = Window_Command.new(172,[op1,op2,op3])
end
def update
@mapa.update
@com.update
if Input.trigger?(Input::C)
case @com.index
when 0
@com.dispose
$scene = Scene_Map.new
when 1
@com.dispose
$scene = Scene_Title.new
when 2
exit
end
end
end
end
if Input.trigger?(Input::C): Recuerdas esta lnea? Por si no, lo que hace es asegurar una tecla
presionada, y est en un condicional if, por lo tanto, significa si la tecla C, a sido pulsada, que se
ejecute las siguientes lineas.
case @com.index: La siguiente lnea al if anterior es un case, toma para verificar la variable
@com.index, index significa punto de posicin, o sea, en que opcin se encuentra el cursor.
@com.dispose: Est linea lo que hace es borrar el objeto asignado a la variable @com, o sea borra
la caja de opciones.
$scene = Scene_Map.new: Recordemos que $scene significaba la escena actual en que se est,
por lo tanto se reemplaza la escena por el Mapa y se vuelve al juego sin problemas.
exit: Este comando sirve para cerrar el programa terminando todos los procesos.
Como ven, me salt algunas lineas, porque ya me imagino que sabrn, hemos hecho ejemplos de los
mismos anteriormente.
Pues bien, he terminado de explicar lo que es un Scene y un ejemplo completo. Muy bien!
Has creado tu propia ventana y tu propia scene.

RESUMIENDO

Primero de todo creamos la escena escribiendo la palabra reservada class y su nombre,


posteriormente la heredamos a Window_Base para poder usar sus mtodos.
Creamos un mtodo llamado start para crear las opciones del men y llamar a los dems objetos.
Creamos otro mtodo llamado update, este mtodo es especial porque est situado en una repeticin
constante, por lo que es sumamente til para actualizar objetos. En ella, introducimos los mtodos
para actualizar el mapa y la caja de opciones.
Despus creamos un condicinal if para verificar si la tecla C se ah presionado.
Dentro de ese condicional, anidamos un condicional case, para verificar donde estaba el cursor
cuando se presion la tecla C y ejecutar diferentes instrucciones segn su posicin.

CREANDO NUESTRO HOLA CEDDEXIA!

Como en cualquier mtodo de programacin lo primero que se hace es crear un hola mundo nosotros no vamos a ser
menos ^^
Un hola mundo es una ventana que nos muestra un texto con la frase Hola Mundo, pero como eso ya est muy
visto nosotros crearemos nuestro propio Hola Cedexia
Pues vamos a ello, vamos al editor de scripts y creamos un script encima de main donde ponemos lo siguiente:

class Hola_Cedexia < Window_Base


def initialize
super(0, 0, 200, 200)
self.contents = Bitmap.new(width-32, height-32) #creamos un nuevo mapa de bits donde dibujar nuestro texto
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 24
self.contents.draw_text(0, 0, 200, 32, "HOLA CEDEXIA!") end
end

Creamos otro script y lo llamamos Mostrar_cedexia

class Mostrar_Cedexia
def main a

@window_1=Hola_Cedexia.new
Graphics.transition
loop do
Graphics.update
Input.update
@window_1.update
if Input.trigger?(Input::A) #si pulsamos el Z en nuestro teclado, la ventana desaparecer y volveremos a
controlar al personaje
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
break
end
end
Graphics.freeze
@window_1.dispose
end
end

Echo todo esto solamente tendremos que crear un evento en el juego donde llamemos este script:
mostrar=Mostrar_Cedexia.new
mostrar.main
Y asegurarnos de que lo activamos en el juego.
Con esto ya habramos creado nuestro propio Hola Cedexia

YA EST?
Si, con todo lo que te he ensaado en esta gua puedes hacer prcticamente lo que quieras siempre que utilices bien
los cdigos y lo hagas con cabeza.

Ahora mismo eres un erudito del RGSS (si lo has entendido todo) por eso espero que sepas utilizar esos
conocimientos para hacer algn buen proyecto.

YA TENGO MI SUPERPROYECTO LLENO DE SCRIPTS PROPIOS! AHORA QUE?


Pues ahora que ya has conseguido crear tu juego, te recomiendo que vayas por algunos foros y lo ensees a los
dems usuarios para que te comentes sugerencias y fallos que pueda tener, recuerda que el script perfecto no existe,
siempre puede haber algn fallo.
Puedes postearlo en un foro especializado en creacin de videojuegos como por ejemplo Cedexia:
http://cedexia.saapy.com o http://cedexia.saapy.com/foro

FINAL DE LA GUA
Aqu es donde acaba mi gua para aprender RGSS orientado a Rpg Maker XP.
Despus de estar unas cuantas horas pegado a la pantalla escribiendo lo que acabas de leer quiero dar por finalizado
mi trabajo.
Esta gua a sido creada por mi para el foro de Cedexia.
Finalemente me gustara dar las gracias a todos los usuarios de Cedexia por hacer posible este proyecto.
Si quereis ver mas manuales como este, preguntar dudas, hacer sugerencias, postear vuestros juegos o lo que sea os
recomiendo registraros en : http://cedexia.saapy.com
Podeis contactarme en el foro de cedexia o mediante el siguiente mail: makerjworld@hotmail.com
HASTA LA PROXIMA!

Obra bajo licencia Creative Commons 3.0, totalmente prohibida su distribucin sin reconocer
al autor del mismo (MakerJ).Queda totalmente prohibida su edicin sin permiso expreso del autor. Prohibido
su uso con fines comerciales.

También podría gustarte