Tutorial de Ren'Py

Bienvenid@ al Tutorial de Ren'Py. Ren'Py (Renobe Python) es un lenguaje de programacion muy parecido a Python, especialmente concebido para la creacion de novelas visuales. Estas son historias computarizadas con dialogos, imagenes y sonidos, que pueden contar con interactividad por parte del lector, constituyendo en aventuras con multiples hilos argumentales.

El proposito de este tutorial es demostrar como hacer un juego en Ren'py en unos pocos pasos.

Preparar Ren'Py

Instalar

Para empezar tendras que instalar el ambiente Ren'Py en tu sistema.

Lanzador Ren'py

El ambiente de programacion gira alrededor de un programa llamado Lanzador de Ren'Py ("Ren'Py Laucher"). Este te permitira crear, gestionar, editar, ejecutar y depurar distintos proyectos de Ren'Py.

Puesto que el lanzador esta traducido a varios idiomas, lo primero que deberas hacer es elegir un idioma. Tambien puedes escoger un idioma haciendo clic en Preferencias en la esquina inferior derecha, y eligiendo Espanol.

Elegir y lanzar un Proyecto

Primero revisemos que apariencia tiene la novela visual "The Question". Para reproducirla, en el panel izquierdo selecciona "The Question", y despues apreta Lanzar Proyecto para reproducir The Question.

Podes volver a la demo de Ren'Py de la misma forma, pero eligiendo "Tutorial" en lugar de "The Question".

Programar en Ren'Py

Vamos a crear un nuevo nuevo proyecto de Ren'Py.

Para ello tendremos siguiendo la sintaxis de Ren'Py. Esta funciona mayormente con palabras en ingles, y utilizan una sintaxis sencilla.

Crea un nuevo proyecto

En el Lanzador de Ren'Py elegi "Crear Nuevo Proyecto".

Si esta esa tu primera vez creando un proyecto, Ren'Py te pedira que elijas un Directorio de proyectos; este consiste en un directorio (tambien llamado carpeta) donde se almacenaran los nuevos proyectos que vayas creando. En la parte inferior del Lanzador de Ren'Py puede aparecer el Selector de Directorios; asegurate de revisarlo por si esta alli.

Se te solicitara que indiques un nombre de proyecto. Como nuestra novela visual estara en castellano, por ahora pongamosle algo como "Mi pregunta", y apretamos la tecla Intro para confirmar.

El Lanzador Ren'Py te solicitara que indiques la resolucion de pantalla del proyecto. 1280x720 es un buen compromiso entre tamano de juego y calidad de imagen. Para el proposito de este tutorial, elegi 1280x720 (ya que coincidira con el arte grafico de la novela visual de demostracion "The Question"), y apreta Continuar.

El Lanzador Ren'Py te pedira luego que escojas un esquema cromatico (un color de fondo y de acentos para la interfaz de usuario). En este momento no importa demasiado, elegi algun color lindo, y dale "Continuar".

Llegado este momento, el Lanzador Ren'Py procesara lo escogido, y creara por ti una plantilla simple para tu juego. Por ahora la plantilla usa arte y texto "generico", pero funcionara. Ademas, te creara automaticamente los botones tipicos de retroceder, cargar y guardar jugadas, etcetera.

Para ejecutar la plantilla de tu prototipo de novela visual, apreta "Lanzar proyecto".

Un juego simple para aprender

Para empezar a crear nuestra novela visual, haremos una version traducida al castellano de The Question (puesto que esto facilitara aun mas el aprendizaje).

¡Manos a la obra!

Para empezar, desde la parte superior del panel izquierdo del Lanzador Ren'Py selecciona "My Question", y luego desde el sector Editar Archivo, elegi el fichero que contiene el guion de la obra: "script.rpy".

Si es tu primera vez, Ren'Py pedira que elijas un Editor para trabajar - para los creativos novatos recomendamos Editra, pero podes usar tu editor de texto favorito. El Lanzador Ren'Py recurrira el editor que elijas, y abrira el fichero de guion de la obra con el editor que pediste.

Ahora bien, una vez que se abra el editor, borra todo el contenido de script.rpy: como empezaremos desde cero, no necesitaremos nada del guion anterior. Pega el siguiente contenido en script.rpy, y guardalo.

label start:

    "Silvana" "¡Como va! ¿Que tal estuvo la clase?"

    "Yo" "Buena..."

    "No puedo admitir que me entro por un oido y me salio por el otro."

    "Yo" "¿Te vas a tu casa ahora? ¿Queres que volvamos juntos?"

    "Silvana" "¡Dale!"

Este primer guion de juego sigue la sintaxis de Ren'Py, y como ves, es sumamente simple. Aun no le pusimos ninguna imagen ni nada de musica, pero al menos presenta una conversacion entre dos personajes, y una de las lineas es una narracion en off.

Ya estamos listos para ejecutar este guion de ejemplo. Volve al Lanzador Ren'Py y apreta "Lanzar Proyecto". Ren'Py lo ejecutara. Fijate como Ren'py pone directamente los menus que te dejan cargar y grabar una partida, asi como los de modificar las preferencias del juego.

Como vemos, este guion minimo ya incluye varias declaraciones muy comunes del lenguaje Ren'Py. Estudiemoslas.

La primer linea es una declaracion label. La declaracion label se usa para etiquetar un lugar en el programa. En este caso, creamos una etiqueta llamada start; esta etiqueta start resulta especial, puesto determina el lugar desde donde comenzara a ejecutarse los guiones de RenPy cuando apretas Empezar Juego en el menu principal.

Las demas lineas constituyen lo que se llaman declaraciones say. Existen dos formas de declaracion say:

  • Una forma usada para narracion en off o pensamientos del personaje principal: consiste en una cadena (comienza con comillas ", contiene caracteres, y termina con comillas ", toda en una sola linea.
  • Una forma para dialogos: consiste en dos cadenas; la primer cadena es un nombre de personaje y la segunda cadena es lo que dice tal personaje.

Tene en cuenta que todas las declaraciones say van sangradas a 4 espacios. Esto se debe a que existe un bloque debajo de la declaracion label. En Ren'Py, los bloques necesariamente deben estar sangrados en relacion a la declaracion anterior, y todas las declaraciones en un bloque deben estar sangradas por la misma cantidad de espacios.

En el caso que las cadenas contengan en si caracteres de comillas ("), estas deben ser escapadas con un caracter de barra invertida (\). Por ejemplo:

    "Silvana" "¿Alguna vez oiste la famosa frase de Peron, \"El problema con las citas sacadas de Internet, es que muchas de ellas son truchas.\"?"

Aunque parezca que nuestra novela visual provista de este guion simple no tiene mucho efectismo, resulta un ejemplo que demuestra lo simple que es escribir algo que resulte funcional usando Ren'Py. En breve le agregaremos las imagenes, pero primero veamos como definimos los personajes de nuestra historia.

Personajes

Un problema que tiene este primer ejemplo es que fue necesario ingresar repetidamente el nombre de un personaje toda vez que el mismo habla (tal como si fuese un guion de una obra teatral). Si quisieramos escribir mucho dialogo en nuestra novela, hacer esto se volveria sumamente tedioso. Por suerte tambien podemos indicar los nombres de personaje al iniciar el guion. Para esto tenemos que definir los personajes por adelantado segun la sintaxis de Ren'Py. Gracias a ello, podremos asociar un nombre abreviado al personaje, y cambiar el color del nombre del personaje.

Altera el guion para que quede asi:

define s = Character('Silvana', color="#c8ffc8")
define m = Character('Yo', color="#c8c8ff")

label start:

    s "¡Como va! ¿Que tal estuvo la clase?"

    m "Buena..."

    "No puedo admitir que me entro por un oido y me salio por el otro."

    s "¿Te vas a tu casa ahora? ¿Queres que volvamos juntos?"

    m "¡Dale!"

¡Ahora sera mas facil escribir el dialogo entre los dos personajes!. La primera y segunda linea definen al primero y el segundo personaje. Veamos:

La primer linea define un personaje con el nombre abreviado de "s", y su nombre largo "Silvana", con un color de nombre verdoso (los colores se representan con tripletes hexadecimales rojo-verde-azul, como lo hacen en las paginas web).

La segunda linea crea un personaje con el nombre corto "m" y el nombre largo "Yo". con el color de nombre rojizo. Podes inventar otros personajes copiando una de las lineas de definicion de personaje, y cambiandole su nombre corto, nombre largo y el color.

Tambien modificamos las declaraciones say para hacer uso de los objetos Character en lugar de recurrir a la tediosa cadena de nombre para un personaje.

¡Este pequeno trabajo que nos tomamos, le permitira ahora a Ren'Py usar los personajes que le hemos definido de una forma mas abreviada y facil de escribir!

Ver manual: Defining Character Objects

Imagenes

No obtendremos una novela visual si no recurrimos a presentar imagenes en la pantalla. Aqui hay otra escena de "The Question". Esta tambien incluye declaraciones que muestran imagenes al jugador. Esto puede reemplazar completamente la seccion anterior del guion, si lo deseas probar.

define s = Character('Silvana', color="#c8ffc8")
define m = Character('Yo', color="#c8c8ff")

label start:

    scene bg meadow

    "A poco caminar, alcanzamos los prados justo al lado del vecindario donde vivimos."

    "Es una vista muy linda a la que me fui acostumbrando. El otono es especialmente hermoso por estos lares."

    "Cuando eramos chic@s, jugabamos mucho en estos campitos, estan llenos de recuerdos."

    m "Ey... Umm..."

    show sylvie green smile

    "Gira hacia mi y sonrie. Parece tan a gusto que siento que mis nervios desaparecen."

    "¡Le voy a preguntar...!"

    m "Ummm... ¿Serias..."

    m "¿Serias mi artista para una novela visual?"

    show sylvie green surprised

    "Silencio."

Este segmento de guion introduce dos declaraciones nuevas. La declaracion scene de la linea 6 borra todas las imagenes y presenta solamente una imagen de fondo. Las declaraciones show de las lineas 16 y 26 hacen aparecer en pantalla un sprite (una grafica activable) encima de la imagen de fondo, y modifican este sprite, respectivamente.

En Ren'Py, cada imagen consta de un nombre. El nombre consiste de una etiqueta, y opcionalmente de uno o mas atributos. Tanto la etiqueta como los atributos deben empezar con una letra, y solo pueden contener letras, numeros y guiones bajos. Por ejemplo:

  • En la declaracion scene de la linea 6, la etiqueta es "bg" y el atributo es "meadow". Por convencion, las imagenes de fondo usan la etiqueta "bg" (por "background", o "fondo" en ingles).
  • En la primer declaracion show en la linea 16, la etiqueta es "sylvie", y los atributos son "green" y "smile".
  • En la segunda declaracion show de la linea 26, la etiqueta es "sylvie" y los atributos son "green" y "surprised".

En cada momento dado, solo puede aparecer una imagen con una etiqueta dada. Si se presenta una segunda imagen del mismo nombre, esta reemplazara a la primera (tal como sucede en la linea 26 del guion).

Ren'Py buscara el fichero de imagen en el directorio de imagenes, que puede localizarse seleccionando "Imagenes" en la seccion "Abrir Directorio" del Lanzador de Ren'Py. Ren'Py puede usar arte de personajes que se encuentren en formato PNG, WEBP, o AVIF, mientras que el arte de fondo puede estar en formato JPG, JPEG, PNG, WEBP, o AVIF. Tambien existe siporte para archivos SVG, aunque estos se utilizan fundamentalmente para personalizar la interfaz de usuario. Es muy importante el nombre de archivo - puesto que la extension no se usa, el nombre de archivos se convierte forzadamente a minusculas, y se emplea el resultado como nombre de la imagen.

Por ejemplo, los siguientes archivos - localizados en el directorio de imagenes - definen las siguientes imagenes:

  "bg meadow.jpg" -> bg meadow

  "sylvie green smile.png" -> sylvie green smile

  "sylvie green surprised.png" -> sylvie green surprised

Puesto que los nombres de archivo estan en minuscula, tambien lo siguiente se mantiene:

  "Sylvie Green Surprised.png" -> sylvie green surprised

Las imagenes tambien pueden ser colocadas en subdirectorios (subcarpetas) contenidas en el directorio de imagenes. El nombre de directorio resultara ignorado y solo se usara el nombre de archivo para definir el nombre de imagenes.

Ver manual: Displaying Images

Declaracion Hide

Ren'Py tambien soporta una declaracion hide, que oculta una imagen dada.

label irse:

    s "¡Me voy a encargar ahora mismo!"

    hide sylvie

    "..."

    m "¡No era eso a lo que me referia!"

En realidad es bastante raro usar hide. Podes usar show cuando un personaje cambia de emociones, mientras que scene lo usas para el momento en que todos los personajes se van. Solo es necesario usar hide cuando un personaje abandona la escena, pero el resto de la escena y los demas personajes tienen que quedar igual.

Declaracion Image

A veces, puede que no quieras dejar que Ren'Py defina las imagenes automaticamente por si mismo. Para esto se usa la declaracion image. Deberia estar en el nivel superior del fichero (sin sangrado y antes de label start), y puede usarse para mapear un nombre de imagen a un fichero de imagen especifico. Por ejemplo

image logo = "renpy logo.png"
image eileen happy = "eileen_happy_blue_dress.png"

La declaracion image se ejecuta al tiempo de inicio, antes que label start y el resto del gion del juego que interactua con el jugador.

La declaracion image tambien puede ser utilizada para llevar a cabo tareas mas complejas, pero esto se tratara aparte.

Transiciones

En el guion anterior, las imagenes aparecen y desaparecen de forma instantanea. Ya que cambiar la locacion y hacer que un personaje entre o salga de escena es importante, Ren'Py soporta transiciones, que permiten aplicarse cuando los personajes presentan modificaciones.

Las transiciones modifican lo que se muestra, desde el momento de lo que sucedia al final de la ultima interaccion (dialogo, menu o transicion - entre otras declaraciones) hasta la apariencia luego de que se han ejecutado las declaraciones scene, show y hide.

label start:

    scene bg meadow
    with fade

    "A poco caminar, alcanzamos los prados justo al lado del vecindario donde vivimos."

    "Es una vista muy linda a la que me fui acostumbrando. El otono es especialmente hermoso por estos lares."

    "Cuando eramos chicos, jugabamos mucho en estos campitos, estan llenos de recuerdos."

    m "Ey... Umm..."

    show sylvie green smile
    with dissolve

    "Gira hacia mi y sonrie. Parece tan a gusto que siento que mis nervios desaparecen."

    "¡Le voy a preguntar...!"

    m "Ummm... ¿Serias..."

    m "¿Serias mi artista para una novela visual?"

La declaracion with recibe el nombre de la transicion a emplear. La mas comun es dissolve, que disuelve de una pantalla a la siguiente. Otra transicion util es fade, que desvanece la pantalla a negro, y luego la desvanece a la siguiente pantalla.

Cuando colocas una transicion tras multiples declaraciones scene, show o hide, se aplicara a todas ellas a la vez. Si escribis:

    scene bg meadow
    show sylvie green smile
    with dissolve

Tanto las imagenes "bg meadow" y "sylvie green smile" se disolveran al mismo tiempo. Para disolver una a la vez, es necesario programarlo usando dos declaraciones with:

    scene bg meadow
    with dissolve
    show sylvie green smile
    with dissolve

Esto primero disuelve el fondo del prado, y luego disuelve a Silvana. Si querias mostrar el prado instantaneamente, y luego presentar a Silvana, podias programarlo asi:

    scene bg meadow
    with None
    show sylvie smile
    with dissolve

Aqui se usa None para indicar una transicion especial que actualiza la idea de Ren'Py de que era la pantalla anterior, sin mostrarle nada al jugador.

Ver manual: Transitions

Posiciones

Por defecto, las imagenes se muestran centradas horizontalmente, y con su borde inferior tocando el borde inferior de la pantalla. Esto usualmente esta bien para fondos y personajes unicos, pero cuando se muestra mas de un personaje en la pantalla, probablemente tenga mas sentido hacerlo en otra posicion. Tambien puede tener sentido reposicionar un personaje segun como venga el relato.

     show sylvie green smile at right

Para hacer este reposicionamiento, agrega una clausula at a la declaracion show. La clausula at recibe una posicion, y presenta la imagen en dicha posicion. Ren'Py incluye varias posiciones predefinidas: left para el lado izquierdo de la pantalla, right para el lado derecho, center para centrarlo horizontalmente (el valor por defecto) y truecenter para que la centre horizontalmente y verticalmente.

Los creadores puede incluso definir sus propias posiciones, y hacer eventos con movimientos complejos, pero esto cae por fuera de este tutorial rapido

Ver manual: Transforms

Musica y Sonido

La mayoria de los juegos de Ren'Py tienen musica de fondo. La musica se reproduce con la declaracion play music. La declaracion play music recibe un nombre de archivo que es interpretado como un fichero de audio que debe ejecutarse. Los ficheros de audio se interpretan en relacion al directorio de juego. Los ficheros de audio deben estar en formato opus, ogg vorbis, o mp3.

Por ejemplo:

    play music "audio/illurock.ogg"

Cuando se cambia la musica, uno puede indicar una clausula fadeout o fadein, que se usan para desvanecer el volumen de la antigua musica y aumentar el volumen de la musica nueva (para hacer una transicion suave de musicas).

    play music "audio/illurock.ogg" fadeout 1.0 fadein 1.0

La declaracion queue music reproduce un fichero de audio despues que el fichero de audio actual terminal

    queue music "audio/next_track.opus"

Podes parar la musica con la declaracion stop music, que tambien puede recibir una clausula fadeout opcional.

    stop music

Los efectos de sonido pueden reproducirse con la declaracion play sound. A diferencia de la musica, los efectos de sonido no tienen bucle (no se repiten indefenidamente).

    play sound "audio/effect.ogg"

Cuando pones los archivo de audio en el directorio game/audio, y podes usar el nombre sin extension de archivo, al estilo de una variable de Python (o sea, comienza con una letra, y contiene solo letras, numeros y guiones bajos). En tal caso, te sera posible reproducir dicho fichero sin poner las comillas.

Por ejemplo, si tenes el archivo de audio game/audio/illurock.ogg, podes programar:

    play music illurock

Ver manual: Audio

Declaracion pause

La declaracion pause hace que Ren'Py haga una pausa hasta hacer clic con el mouse.

    pause

Si le indicas un numero, la pausa finalizara sola cuando transcurran dicho numero de segundos.

    pause 3.0

Finalizar el juego

Podes finalizar el juego con la declaracion return, sin tener que llamar a nada. Antes de hacere esto, es mejor poner algo en el juego que indique que el juego termino, y tal vez dando un numero de finalizacion o un nombre de finalizacion al usuario.

    ".:. Final Feliz."

    return

Esto es todo lo que tenes que hacer para hacer una novela cinetica, un juego sin ningun tipo de opcion que seguir en el.

Ahora veremos lo que se necesita para hacer que un juego que presente menues con opciones para que el usuario elija interactivamente. Estas permiten trazar diferentes senderos o caminos, si es que queremos permitir seguir distintos desarrollos arbolados.

La declaracion menu te permite presentar una opcion al jugador:

    s "Seguro, pero ¿que es una \"novela visual?\""

menu:

    "Es un videojuego.":
        jump juego

    "Es un libro interactivo.":
        jump libro

label juego:

    m "Es como un videojuego que jugas en la computadora o en una consola."

    jump casamiento

label libro:

    m "Es como un libro interactivo que lees en una computadora o una consola."

    jump casamiento

label casamiento:

    "Y de esta manera, nos volvimos un duo creador de novelas visuales."

Este ejemplo presenta un menu que puede usarse con Ren'Py. La declaracion menu introduce una seleccion dentro del juego. Requiere un bloque de lineas sangradas, cada una consiste en una cadena seguida por dos puntos (:). Estas seran las opciones del menu, que se le presentaran al jugador. Cada opcion del menu requiere su propio bloque de lineas sangradas, que se ejecutan cuando se eligen dicha opcion del menu.

En este ejemplo, cada una de las dos opciones del menu ejecuta una unica declaracion jump. La declaracion jump transfiere el control a la etiqueta definida a traves de la declaracion label. Luego del salto jump, se ejecutan las declaraciones del guion que siguen a la etiqueta label determinada.

En el ejemplo anterior, luego de que Silvana realiza su pregunta, al jugador se le presentara un menu que contiene dos opciones. Si el jugador elige "Es un videojuego", se ejecuta la primer declaracion jump, y Ren'Py saltara a la etiqueta juego. Esto provocara que el Punto de Vista del personaje diga "Es una historia con imagenes y musica", tras lo cual Ren'Py saltara a la etiqueta casamiento.

Si no hay una declaracion jump al final del bloque asociado con la etiqueta label, Ren'Py continuara a la siguiente declaracion. La ultima declaracion jump aqui es tecnicamente innecesaria, pero se la incluye para hacer mas claro el flujo del juego.

Pueden definirse las etiquetas label en cualquier archivo de juego que este en el directorio game, y termine con extension .rpy. El nombre de archivo no importa en Ren'Py, solamente importan las etiquetas contenidas en el. Podes pensar todos los archivos .rpy como si fuese un unico archivo .rpy enorme, en el cual se usan los saltos para transferir el control. Esto te da flexibilidad en la manera en la cual organizas el guion de un juego muy largo.

Ver manual: In-Game Menus y Labels & Control Flow

Integracion de Python

Si bien podes hacer algunos juegos simples usando las declaraciones ya indicadas, ciertos juegos requieren una programacion mas compleja para almacenar datos para recabarlos luego. Por ejemplo, puede tener sentido que el juego recuerde una opcion escogida por el jugador, volver a una seccion comun del guion, y actuar mas adelante segun la opcion escogida anteriormente. Esta es una de las razones por la cual Ren'Py cuenta con soporte de Python incorporado.

Flags de apoyo usando las declaraciones Default, Python e If

Aprenderas aqui como almacenar un valor en un flag, que contendra informacion sobre una eleccion escogida por el jugador a lo largo de la trama. Para inicializar el flag, se usa la declaracion default, antes de la etiqueta label start, por ejemplo:

# True si el jugador ha decidido comparar las novelas visuales con un libro.
default libro = False

label start:

    s "¡Como van! ¿Que tal estuvo la clase?"

De esta forma, el flag libro comienza inicializado de forma apagada (con al valor especial False, recuerda que como con el resto de Ren'Py, es importante definirlo usando la primer letra en mayuscula). Esto significa que esta desactivada. Si el jugador escoge la senda libro, podemos poner el flag en True recurriendo una declaracion de asignacion de Python, de la siguiente forma:

label libro:

    $ libro = True

    m "Es como un libro interactivo que lees en una computadora o un celular."

    jump casamiento

Fijate que todas las lineas que comienzan con el caracter $ son interpretadas como declaraciones de Python en lugar de declaraciones de Ren'Py. La declaracion de asignacion de Python que utilizamos aqui asigna un valor a una variable.

Ren'Py soporta otras formas para incluir Python, tales como las declaraciones multilineas (tuplas) de Python, que se discuten en otras secciones del manual. Ren'Py soporta Python 2.7, aunque recomendamos escribir Python que corra en Python 2 y Phyton 3.

Para revisar el valor que tiene almacenado el flag, recurrimos la declaracion if:

if libro:

    "Nuestro primer juego se baso en las ideas de Silvana, pero luego se me ocurrieron mis propias historias tambien."

Si la condicion es True (verdadera), se ejecuta el bloque del guion. Si no lo es, se la salteara. La declaracion if puede recibir una clausula else opcional, la cual introduce un bloque de guion alternativo que se ejecuta si la condicion es False (falsa).

if libro:

    "Nuestro primer juego se baso en las ideas de Silvana, pero luego se me ocurrieron mis propias historias tambien."

else:

    "Silvana ayudo con el guion de nuestro primer videojuego."

Las variables de Python no se limitan necesariamente a valores simples True/False. Tambien podes usar variables para almacenar el nombre del jugador, los puntajes, o para cualquier otro proposito que se te ocurra. Ya que Ren'Py incluye la habilidad de usar todo el lenguaje de programacion Python, es posible hacer muchas cosas mas.

Un recurso tipico es el subgenero "simdate" o "juego de conquistas", donde las elecciones del jugador suman o restan puntaje de una o varias variables; de acuerdo al puntaje que vas sumando o restando, podes avanzar en determinadas sendas de la historia.

Ver Manual: Python Statements y Conditional Statements

Guion de La Pregunta

La Pregunta es una version traducida pero tiene los puntos basicos de este tutorial de Ren'Py.

Si queres, podes ver el guion completo de La Pregunta aqui, pegarlo en el editor, y lanzarlo.

Ficheros en Plantilla

En la carpeta game del tus proyectos creados, se incluira las siguientes carpetas y ficheros:

script.rpy Este es el archivo pensado para incluir otros guiones que incluyen un escenario. Tambien podees agregar o borrar cualquier .rpy.
*.rpyc Estos ficheros son resultados de la compilacion de cada fichero .rpy para reducir el tiempo de carga. No necesitas editar estos archivos sin borrar el fichero .rpy correspondiente.
gui.rpy Las variables de GUI se definen aca.
options.rpy Variables Config y Build, una parte de preferencias y una parte de la GUI de definen aca.
screens.rpy Las pantallas se definen en este fichero. Deberias editar esto para customizar la GUI en un sentido mas avanzado.
audio/ Este directorio esta pensado para incluir los ficheros de audio.
cache/ Este directorio incluye los ficheros de cache. No necesitas editar estos ficheros.
gui/ Este directorio incluye imagenes usadas por la GUI.
images/ Esta carpeta esta pensada para incluir ficheros de imagenes.
tl/ Este directorio incluye archivos de traduccion.

Crear tu propio juego

Como ves, el ambiente Ren'Py es lo suficientemente sencillo como para poder recurrir a hacer tus propios personajes, historias, senderos de aventura, retruecanos y relatos.

Dibujar y escanear/fotografiar personajes es una manera sencilla de comenzar. Existen recursos de musica de licencias completamente libres para utilizar.

Gracias a todas las herramientas de software libre, recursos audiovisuales liberados ¡Podrias convertirte en desarrollador@ de juegos amateur!

Una vez que hiciste un juego, existen varias cosas que podes hacer antes de publicarlo:

Revisar tu guion

Desde la primer pagina del Lanzador, elegi "Revisar guion (Lint)". Esto depurara tu juego en busca de errores potenciales. Ya que algunos de estos errores solo afectan a usuarios de otras plataformas, es importante entender y usaurlmente corregir todos estos errores, incluso si no te dan problemas en tu computadora.

Revisar versiones nuevas de Ren'Py

Periodicamente se lanzan nuevas versiones de Ren'Py en base a correcciones de errores y nuevas funcionalidades. Antes de lanzarlas, querrias hacer clic en Actualizar en el lanzador de Ren'py para bajarte la ultima version. Tambien podes bajarte nuevas versiones y ver un listado de cambios en https://www.renpy.org/latest.html.

Raramente los cambios a Ren'Py requieren que hagas cambios en el guion de tu juego. Los cambios incompatibles se listan alli.

Compilar distribuciones

Desde la primer pagina del lanzador, elegi "Compilar Distribuciones". Basado en la informacion indicada en option.rpy, el Lanzador Ren'Py compilara uno o mas ficheros de archivaje que contendran a tu juego.

Probar el juego compilado

Lint no es substituto para las pruebas completas del juego. Es tu responsabilidad revisar tu juego antes de publicarlo. Considera pedirle a tus amig@s que te ayuden a testear la beta de tu juego compilado, puesto que a menudo un probador podra encontrar problemas que vos no viste.

Lanzamiento

Una vez que terminaste el juego y lo probaste, deberias postear el archivo compilado generado en una web donde alguien pueda verlo. Si ocupa poco espacio, ¡nuestra caja de texto-plano.xyz puede servirte!

Tampoco necesitas tener tu propio website, https://itch.io hospeda un monton de novelas visuales)

¡Felicitaciones! ¡Publicaste tu primer novela visual!

Conclusion

Este Tutorial apenas cubre lo basico de lo que es capaz de hacer Ren'Py. Para hacerlo facil y breve, omitimos muchas funcionalidades que soporta Ren'Py y simplificamos otras, enfocandonos en un conjunto minimo de funcionalidades necesarias para emprender una novela visual.

Si te interesa aprender mas, aprovecha para leer el Manual de Ren'Py.

¡Gracias por escoger el motor de novelas visuales Ren'Py!. ¡Queremos ver lo que creas con el!