tutorial renpy
2 participantes
Magic rol yuri :: Off-Rol :: spam zone
Página 1 de 1.
tutorial renpy
Este tutorial está orientado desde el principio sin que sepas nada acerca de Ren'py hasta el lanzamiento de una novela gráfica completa. Una novela gráfica sin muchos adornos y efectos visuales, pero completa.
Sólo hay 2 requerimientos para comenzar con este tutorial:
1. Tienes que descargar Ren'Py desde la Página Oficial de Descarga mostrada mal finald e este tutorial e instalarlo.
2. Tener al menos una idea de lo que quieres contar. No hace falta que tengas un esquema completo, o que tengas todos los personajes hechos. Pero al menos deberías tener una idea básica de al menos dos personajes, un escenario y algo con que comenzar la trama.
Eso es. Ahora estás listo para comenzar.
Una vez hayas instalado la última versión de Ren'Py, ejecuta el lanzador de Ren'Py. En Wndows, se trata de renpy.exe. En Linux, ejecutas el script renpy.sh en el directorio instalado de Ren'Py.
Haz Click en el botón "New Project". Haz click en el botón "template". El lanzador te preguntará por un nombre. Pon un nombre simple de una palabra para tu proyecto. Si no se te ocurre ninguno, "renai1" servirá. Luego presiona Enter.
Te llevará de nuevo al menú principal de lanzador, exceptuando que ahora mostrará el nombre de tu proyecto en la esquina superior izquierda. Haz click en el botón "Edit Script". Esto ejecutará el editor de texto SciTE con el script del nuevo proyecto de Ren'Py (que realmente es el mismo que el script de Template). Si no estás situado en la pestaña "script.rpy", cambia hacia esa pestaña.
Ahora podemos continuar.
Ren'Py Es Fácil
Ren'Py es probablemente el método más sencillo para escribir una novela gráfica que existe. Aún así, mucha gente tiene miedo cuando mira el script de Ren'Py por primera vez. ¿Cómo es posible?
La respuesta es simple: Ren'Py está diseñado para crear novelas gráficas completas lo más sencillo posible. No está diseñado para crear novelas gráficas iniciales lo más sencillo posible. ¿Cuál es la diferencia? Una novela gráfica es una larga y compleja historia. Una herramienta sencilla para proyectos pequeños se interpone a la hora de hacer proyectos más grandes. Piensa en una paleta de mano y en una pala: Si quieres plantar una petunia en una maceta, la paleta de mano servirá para el propósito. Pero si tú quieres plantar un árbol en un agujero en el jardín, con la pala terminarás mucho antes que con una paleta de mano. No es que uno de ellos sea más útil que el otro: Son útiles para los problemas a los que se enfrentan cada uno.
Y no nos engañemos: escribir una novela gráfica es como plantar un árbol. Una novela gráfica que transcurre en media hora puede contener sin problemas unas 10.000 palabras y varias ramas. Escribir una historia con 10.000 palabras y con múltiples ramas y que se recombinen es todo un trabajo. Muchos juegos hechos con Ren'Py tiene como 30.000 palabras. Novelas gráficas hechas por profesionales tienen más de 100.000 palabras. Eso sí que es trabajo de verdad.
El objetivo de Ren'Py es que se requiera el menor trabajo extra que sea posible. Por eso Ren'Py puede parecer complicado al principio. Las características de Ren'Py de poder encargarse sin dificultad de una novela gráfica de 50.000 palabras puede parecerte inútil cuando solamente llegues a las 50. Pero si continúas, verás que tarde o temprano te resultará incluso necesario.
Así que, a pesar de que Ren'Py pueda parecer complicado al principio, confía en que Ren'Py es la herramienta más sencilla para escribir una novela gráfica. Principalmente porque cuando comiences, vas a estar batallando con la trama, los personajes, las elecciones y sus ramas. Entonces es cuando te acostumbrarás al script de Ren'Py, tanto que ni siquiera lo notarás.
Programando
No es necesario que sepas programar para usar Ren'Py. Sin embargo, es cierto que necesitarás al menos saber algunas declaraciones de programación en pyton. No te preocupes, en este tutorial te enseñaremos todas las declaraciones que necesitas para el juego. Luego podrás copiarlo o modificarlo. Te explicaremos cómo hacerlo.
No es necesario que entiendas todoel código pyton para escribir una novela gráfica; puedes elegir solamente copiar y pegar.
Si eres programador, o tienes uno en tu equipo, puedes ir directamente a aprender el código pyton que necesites, aunque no ganarás mucho con ello. Por otro lado si quieres usar pyton para crear algo novedoso y original, te mostraremos enlaces en el manual de referencia.
Espacios y bloques
El mayor problema con los ordenadores y por consiguiente con Ren'Py, es que no son inteligentes. Los ordenadores no pueden comprender la comunicación humana, así que tenemos que hacer que el ordenador nos entienda. Sabemos que no es justo, pero en cualquier relación, el que menos tiene que perder, gana. Y como el ordenador es un objeto inanimado, no tiene nada que perder.
Así que tendremos que averiguar otros métodos para comunicarnos con el ordenador y que nos entienda. Realmente no es tan difícil. Por ejemplo, usaremos variables para mantener valores. Además estamos acostumbrados a darle nombres a cualquier cosa, así que no nos va a complicar mucho la tarea. Escribiendo algo así:
es un poco raro, pero es una manera formalizada de lo que vamos a hacer. En este caso, es como decir "Voy a regalarle un traje de baño a mi novia" exceptuando que más que español o inglés, es "ordenadorés".
Hasta ahí bien, pero el principal problema de comunicarnos con el ordenador es el contexto. Estamos tan acostumbrado a ello que casi ni le damos importancia. Es como cuando dices "Me he comido un dulce" y "Es una persona muy dulce", sabes que en el primer caso, con dulce, se refiere a un postre y en el segundo caso se refiere a que es una persona amable y cariñosa por ejemplo. Lo conoces gracias al contexto: Normalmente un Dulce te lo comes, y no es que comas amabilidad o cariño, mientras que en el segundo caso una persona no puede ser un postre. Los ordenadores no entienden de contexto, así que tendremos que buscar maneras de engañarle.
Ren'Py usa espacios para solucionar este problema. Estos espacios se colocan al principio de la frase. Por ejemplo:
En Ren'Py, usamos esto para darle contexto al motor Ren'Py, y así puede saber a qué nos referimos. Todas las declaraciones dentro de un mismo (o mayor) número de espacios están en el mismo contexto. Nosotros le llamamos a esto "bloques". Por ejemplo, ahora hablaremos sobre el "bloque initi". Esto indica las líneas que están incluídas en la declaración init:
También es posible hacer nidos con los bloques como esas muñecas rusas que se abren para mostrar una similar más pequeña:
No te preocupes si no has entendido perfectamente el sistema de espacios y bloques. Terminará por tener sentido una vez sigas leyendo el tutorial y veas verdaderos ejemplos en Ren'Py.
Bloques Init
Cada script de Ren'Py tiene información sobre personajes, imágenes, y músicas que necesitan declaración fuera de la historia. Esto se consigue con los bloques init. Y cada bloque init será algo así:
Más tarde comentaremos qué podrían ir tras los bloques initi, pero por ahora sólo estamos viendo cómo podrían ser. Pueden estar en cualquier lugar del archivo, pero siempre es mejor colocarlos arriba del todo. Los bloques init no tienen espacios y las declaraciones que continúan el bloque init deben tener espacios, por lo que están incluidas en ese bloque init, tengan espacios o no. Cuando escribes una declaración (normalmente una label o etiqueta) que no tenga espacio, el bloque init ha acabado. Puedes tener cualquier número de declaraciones en un bloque init.
Y eso es todo lo que necesitas saber por ahora.
Labels o etiquetas
Los Labels o etiquetas te permiten darle nombres a puntos clave en tu historia. Usarlos para cambiar el flujo de la historia está mejor descrita en Crear Ramas y Recombinar la Historia. Ahora mismo necesitas saber que cada script de Ren'Py debe tener un label llamado "start". Así es como Ren'Py comienza a ejecutar tu historia. Es algo como esto:
Generalmente, el comienzo de un script sencillo de Ren'Py podría ser:
Comentarios
Con frecuencia verás comentarios en un script de Ren'Py explicando para qué sirve una línea del script. Los comentarios son algo así:
Cuando se juega a un juego hecho con Ren'Py, no se ven estos comentarios. Solamente aquellos que colaboran en la elaboración del juego y en el sistema de script. Ren'Py ignora los comentarios, con lo que puedes poner lo que quieras en ellos. También son útiles para quitar líneas que no quieres usar, pero que no quieras que se pierdan para siempre:
Definir Personajes
Los personajes en Ren'Py son objetos muy poderosos. Y aún así, son muy sencillos de dominar. (Si quieres ver más sobre todo lo que puede ofrecer un personaje, echa un vistazo al capítulo Definir Personajes en el Manual de Referencia). (Date cuenta de que todos los ejemplos sobre personajes deben estar definidos dentro del bloque init).
La forma más básica de definir un persnaje es:
En la práctica, es extremadamente simple. Por eso deberías elegir un color para el nombre del personaje. Lo puedes conseguir con el típico color hexadecimal: #rrggbb. Para hacer que el nombre de Jane aparezca en verde, haremos esto:
Puedes encontrar una útil guía de colores .aquí. Aunque no es tan común, también puedes poner una imagen en vez del nombre. Para hacerlo, en vez de darle a Jane un nombre, le damos el nombre de la imagen (que se ha de colocar en el directorio de nuestro proyecto de Ren'Py) y decirle a Ren'Py que su nombre en realidad es una imagen:
Otra cosa común es que quizás quieras que lo que digan en el texto también aparezca con otro color. Esto hace que tanto su etiqueta como lo que dice Jane aparezca en verde:
Cuando tengamos que definiri personajes con más de una línea, es buena idea hacer que el nombre del personaje sea lo más corto posible. Así que en vez de:
Sería mejor poner:
Te ahorrará tiempo a la hora de escribir, y seguirá siendo legible a la hora de editar tu historia.
Cuando vayas a definir a más de un personaje, no olvides que sólo pueden estar en el bloque init, así que no hace falta que hagas un bloque init por cada personaje:
Tu Primera Conversación
Conversación Básica
Una conversación en Ren'Py es extremadamente sencillo. Una vez hayas definido los personajes, solamente pones el prefijo antes del diálogo:
Para personajes que no van a aparecer mucho en la historia, no es necesario que crees un personaje si no te molesta que aparezcan hablando en el estilo por defecto:
Narración
La narración es simplemente el diálogo en que nadie habla:
Adornando el Texto
Puedes añadir adornos al texto usando etiquetas de texto:
Las etiquetas de texto te permiten hacer muchas cosas. Para más información, échale un vistazo al manual de referencia en el apartado de etiquetas de texto.
Un sabio consejo: Las etiquetas de texto son efectivas si se usan con moderación. Un abuso de éstas puede complicar mucho la lectura.
Añadir Gráficos a tu Historia
Inicializar los Gráficos
El primer paso para usar imágenes es decirle a Ren'Py que quieres incluir image statement en el bloque init. Puedes crear una imagen en Ren'Py a partir de un color sólido o una imagen. (realmente, cualquier objeto desplegable):
Como puedes observar, los nombres de las imágenes pueden ser varias palabras. Ya hablaremos de por qué es tan útil cuando lleguemos a la sección de esconder imágenes. Los nombres de las imágenes y los personajes no tienen nada que ver, así que puedes reutilizar los nombres de los personajes como imágenes.
Fondos con Scene
El comando scene statement quita en la pantalla de lo que hay y opcionalmente coloca un nuevo fondo en la pantalla:
(Ten en cuenta que "bg parque" es el nombre de la imagen; bg no s una palabra clave.)
Gráficos de Personajes
Los gráficos de los personajes y otros objetos se muestran con show statement:
La declaración show sin ningún modificador coloca la imagen en el centro. También puedes mostrar imágenes en los lados:
Ocultar Gráficos
Para ocultar los gráficos que se muestran con la declaración show, se puede conseguir de tres maneras:
Explícito
Primero, puedes ocultar explícitamente un gráfico con la declaración hide statement:
Si una imagen consiste en más de una palabra, sólo necesitas usar la declaración hide en la primera palabra (la "etiqueta de imagen". Esto quiere decir que no es necesario que te compliques para saber qué versión del personaje está en la pantalla y quieras ocultar.
Implícitamente con show
La declaración show reemplazará automáticamente la imagen con la misma etiqueta de la que se muestra (aunque no del mismo modo que la declaración hide). Por ejemplo:
hace lo que debe hacer — no tendrás dos copias de Eileen en la pantalla.
mplícitamente con scene
La declaración scene limpia todas las imágenes de la pantalla, así que si estás cambiando de escena, no necesitas ocultar nada.
Efectos Especiales
Todas las declaraciones con show y hide pueden ser modificados añadiendo un with clause (Ver: with statement):
Hay más efectos especiales disponibles, pero esos dos son los más usados. (Parece que sólo George Lucas es capaz de utilizar cosas como el desplazaminto lateral, pero si quieres intentarlo, puedes mirar la lista completa de Transiciones Predefinidas.)
Cómo conseguir hacer lo que quieras, y que suceda
Ni la declaración scene ni la declaración show, en sí mismas, muestran inmediatamente las imágenes en la pantalla. Más bien hacen cola, así que si las combinas:
Ren'Py mostrará primero el fondo con atenuación, luego muestra a Eileen con disolución en la pantalla y por último a Ted. Para hacer una atenuación con Eileen y Ted en él, usa la declaración de "with" después de que le indiques a Ren'Py cómo quieres que se muestre la pantalla:
(Nota: Por razones históricas, no es lo mismo que:
Que hará que el fondo y Eileen se muestren sin transición y luego mostrar a Ted con la transición de Disolución. Por lo general, si estás usando más de una declaración, solamente usa with con su propia línea.)
Como resultado de la cola de la declaración show, esto tampoco funcionará:
el lector solamente verá el último. Si quieres mostrar varias versiones del personaje sin interactuar con el lector, necesitarás usar with con cada una de ellas:
Dar Elecciones a los Usuarios con los Menús
Los menús se implementan con menu statement, que se explican mejor con este ejemplo:
Ten en cuenta que cada opción debe tener al menos una declaración, así que si no quieres que se realice una acción, usa pass statement.
Recordar las Elecciones de los Usuarios
Cambiar el Flujo del Juego con Elecciones Anteriores
Se puede recordar las elecciones de los usuarios asignando variables. Por ejemplo:
menu:
"Comprar una Iguana":
$ regalo = "iguana"
b "¡Me llevaré una iguana!"
"Comprar una Serpiente Cascabel":
$ regalo = "serpiente cascabel"
b "Me llevaré una Serpiente Cascabel!"
"Comprar una Tortuga":
$ regalo = "tortuga"
b "¡Déjeme la tortuga más lenta que tenga, por favor!"
Fíjate en que solamente hay un "=" para asignar una variable.
Más tarde en el juego, puedes usar if statement para cambiar el guión basado en la elección anterior:
b "Ábrelo, Mary."
if regalo == "iguana":
m "¡Oh Bob, siempre he querido una iguana!"
if regalo == "serpiente cascabel":
m "¡Oh Bob, siempre me han encantado las serpientes cascabeles! ¡Muchísimas gracias!"
if regalo == "tortuga"
m "¡Bob! ¡Es tan lenta...! ¡Te quiero!"
Ahora fíjate que se usa "==" para reflejar igualdad.
Puedes llamar como quieras a las variables, siempre y cuando no creen conflicto con alguna palabra clave o con un personaje. La única regla es que debes asignar primero la variable antes de usarla en una condicional.
Implementar un Juego Basado en Puntos
Un juego basado en puntos es aquella en que las elecciones que hace el usuario se acumulan durante la historia en forma de variables.
Primero, necesitas saber qué puntos quieres que dependan de los finales. Por ejemplo, quieres que el uuario sea capaz de ganar puntos por (1) ganando musculatura (fuerza) (2) haciendo malabares (destreza) y (3) desarrollando experimentos de química y desarrollar nuevas formas de vida avanzadas (ciencia demente).
Luego, necesitas iniciar las variables que vas a usar para los puntos. Hazlo en el label start:
label start:
$ puntos_fuerza = 0
$ puntos_destreza = 0
$ puntos_ciencia_demente = 0
Durante el juego, le darás la posibilidad al usuario de que sume puntos con sus elecciones. Para incrementar puntos, usa:
$ variable += 1
Puedes usar cualquier número. No tiene por qué ser # (es más seguido de un igual.) Para reducir puntos, usa:
$ variable -= 1
Donde puedes usar un número cualquiera. (Menos seguido de un igual.)
Por ejemplo:
menu:
"Ir al gimnasio":
$ puntos_fuerza += 1
"El gimnasio era duro y agotador."
"He cogido objetos pesados y las he levantado una y otra vez."
"Siempre me preguntaba por qué me molestaba en hacer eso,
ya que puedo hacer lo mismo sin cogerlo en primer lugar."
"Practicar malabarismos":
$ puntos_destreza += 1
"Practiqué malabares con siete bolas."
"Era muy difícil, pero conseguí al menos mantener un poco el ritmo."
"Practicar malabares con erizos enfadados":
$ puntos_destreza += 3
$ puntos_fuerza -= 1
"Practicar con erizos enfadados ha incrementado mis reflejos.
Pero por otro lado, me siento débil por la pérdida de sangre."
"Crear un erizo alegre":
$ puntos_ciencia_demente += 1
"Desgraciadamente solamente pude crear un equidna depresivo,
pero aprendí mucho y seguro que la próxima vez me sale bien."
(Por supuesto puedes cambiar las respuestas basándote en los puntos que tengas, usando las técnicas descritas en la sección anterior sobre variables.)
Finalmente, te queda crear los finales usando las variables:
if puntos_fuerza > max(puntos_destreza, puntos_ciencia_demente):
"Coges una vaca y saltas sobre la luna."
elif puntos_destreza > max(puntos_fuerza, puntos_ciencia_demente):
"Haces malabares con 215 bolas y bates un nuevo récord mundial."
else:
"Creas a tu pareja perfecta y te retiras hacia un castillo
construida por un ejército de hombres gorila de ocho brazos
que creastes momentos antes."
return
El último código desempata a favor de la última opción (ciencia demente). Si quieres ser más explícito acerca de los empates, es más complicado, porque hay siete posibles combinaciones. Pero es realizable. Quedaría algo así:
if puntos_fuerza > max(puntos_destreza, puntos_ciencia_demente):
"Coges una vaca y saltas sobre la luna."
elif puntos_destreza > max(puntos_fuerza, puntos_ciencia_demente):
"Haces malabares con 215 bolas y bates un nuevo récord mundial."
elif puntos_ciencia_demente > max(puntos_fuerza, puntos_destreza):
"Creas a tu pareja perfecta y te retiras hacia un castillo
construida por un ejército de hombres gorila de ocho brazos
que creastes momentos antes."
elif puntos_fuerza == puntos_destreza == puntos_ciencia_demente:
"Tu ejército de hombres gorila gigantes serviciales de diecisiete
brazos te construyen tres castillos, con los que haces malabares
para impresionar a tu pareja perfecta que creastes momentos antes."
elif puntos_fuerza == puntos_destreza:
"Haces malabares con tres rocas enormes con varias personas
atractivas del sexo opuesto."
elif puntos_destreza == puntos_ciencia_demente:
"Creas una nueva raza de colibríes con los que consigues hacer
malabares con 5.000 de ellos a la vez."
elif puntos_fuerza == puntos_ciencia_demente:
"Creas un hombre gorila de 30 toneladas con 24 brazos y lo
usas para pintar el techo de tu casa que te está construyendo
para ti."
return
El orden de las condiciones es importante, porque las últimas alternativas asumen que las primeras alternativas son falsas. En general, prueba si una variable individual se cumple, y luego comprueba si son iguales. Luego prueba con las variables que empatan. Este truco evita posibles errores de lógica del juego.
Crear Ramas y Recombinar la Historia
Las ramas cortas se pueden realizar con la declaración de menú incluyendo la rama entera después de cada elección. Pero para ramas más largas, se hace demasiado engorroso. La solución es usar labels y jump statement o bien call statement.
Lo primero que tienes de decidir es dónde vas a usar call o jump. Jump cambia el script que se está ejecutando en Ren'Py. El nuevo sitio al que se ejecute el script siempre avanza; no existe método para volver al lugar desde un jump, aunque siempre puedes usar el jump hacia un label después del salto. Por consiguiente,no puedes volver a reusar el jump desde distintos puntos del script. Para una novela gráfica, jump será más que suficiente.
Call guarda la información donde quieras que vayas, así que la rama que use call siempre podrá volver a ser reutilizada, ya que siempre puede volver al lugar donde proviene. Para un simulador de citas, probablemente uses call.
Por supuesto, puedes usar ambos en la misma novela gráfica (o simulador de citas). Mezclarlos y unirlos está bien, siempre y cuando cada rama sea de call o de jump.
Crear Ramas con Jump
El primer paso para crear ramas con jump es crear un label statement en tu script:
label joyería:
b "Vamos a la joyería. Me gustaría comprarte algo."
s "¡Eres tan dulce!"
Luego añade jump a la rama:
s "¿Qué quieres hacer?"
menu:
"Ir a la joyería":
jump joyería
#No volveremos a pasar por aquí, ya que al usar jump no se puede regresar.
"No hacer nada":
s "Me estoy aburriendo."
¡Felicidades, has creadouna rama con jump!
A menos que esta rama se ejecute al final del juego, posiblemente quieras crear la rama en cualquier otro lugar del script. Se hace de la misma manera; las ramas no son nada en especial y puedes usar jump en calquier lugar aunque estés en una rama. Por ejemplo, supongamos que el ejemplo anterior quieras que vuelva al menú desde esa rama. Primero, añade un label antes del menú para que tengas algún lugar donde usar jump:
s "¿Qué quieres hacer?"
menu:
"Ir a la joyería":
jump joyería
#No volveremos a pasar por aquí, ya que al usar jump no se puede regresar.
"No hacer nada":
s "Me estoy aburriendo."
label qué_hacer:
b "Bueno ¿Y ahora qué?"
Luego añades un jump al fnal de la rama:
label joyería:
b "Vamos a la joyería. Me gustaría comprarte algo."
s "¡Eres tan dulce!"
b "Lo sé."
s "Bueno, es suficiente. Volvamos.
jump qué_hacer
Ten en cuenta que los labels deben ser únicos en todo el script de Ren'Py.
Crear Ramas con Call
El primer paso para crear ramas con call es crear un label statement y tambien return statement:
label joyería:
b "Vamos a la joyería. Me gustaría comprarte algo."
s "¡Eres tan dulce!"
etc.
return
(NOTA: Es MUY importante que una rama con Call nunca debe volver con jump o por el flujo normal del script. Si ése es el caso, el juego terminará inmediatamente gracias a return. a declaración return fuera de un call es la manera ideal para finalizar el juego: El asunto es que el juego empezó desde el menú inicial. Un return en la historia principal hace que vuelva al menú inicial del juego.)
Luego, añade el call en la rama:
s "¿Qué quiers hacer?"
menu:
"Ir a la joyería":
call joyería
s "Eso ha sido entretenido"
"No hacer nada":
pass
¡Felicidades, has creado una rama con call! Pero por desgracia, aún no hemos acabado.
No necesitas hacer nada mientras sigas escribindo el juego, pero cuando estés listo para el lanzamiento de tu juego, necesitarás ejecutar el (Nota del traductor: Falta poner el programa aquí) desde el lanzador de Ren'Py para añadir labels bajo cada declaración de call.
Nota Sobre Organización
No hay ningún sistema programado para organizar todas las ramas de un juego. Sin embargo, se recomienda que tengas claro cómo vas a organizar tus ramas.
Si usas múltiples archivos para organizar tu script, ten en cuenta que los labels son visibles ante cualquier archivo, así que saltar de un label en un archivo diferente es lo mismo que saltar a un label en el mismo archivo. Ya que los labels deben de ser único en cada script de Ren'Py, esto quiere decir que no puedes reutilizar los labels en diferentes archivos del mismo juego de Ren'Py.
Añadir Música y Efectos de Sonido
Música
Para reproducir música de fondo (que se reproduce indefinidamente hasta que lo detienes), usa renpy.music.play:
$ renpy.music.play("ominoso.ogg")
Para usar fade-in oo fade-out (en segundos):
$ renpy.music.play("ominoso.ogg", fadein=2, fadeout=2)
Para detener la música de fondo, usa renpy.music.stop:
$ renpy.music.stop()
Efectos de Sonido
Para reproducir un efecto de sonido renpy.sound.play:
$ renpy.sound.play("bang.ogg")
También hay una función para parar el sonido, pero normalmente no hay razón para usarlo.
Voces (Doblaje)
Si quieres añadir voces a tu novela gráfica, necesitas poner cada línea del diálogo en un archivo separado y llamarlo de alguna manera en que identifiques con qué línea va la voz. Luego, después de cada línea de diálogo, pon un voice statement:
voice "bob203.ogg"
bob "Me encanta el helado."
voice "nancy218.ogg"
nancy "A mí también."
voice "bob204.ogg"
bob "También me gustan las galletas."
Bien podeis descargaros este programa desde aqui:
http://www.renpy.org/wiki/renpy/Home_Page
tutorial tradudico de la misma pagina oficial.
Antes de Empezar
Sólo hay 2 requerimientos para comenzar con este tutorial:
1. Tienes que descargar Ren'Py desde la Página Oficial de Descarga mostrada mal finald e este tutorial e instalarlo.
2. Tener al menos una idea de lo que quieres contar. No hace falta que tengas un esquema completo, o que tengas todos los personajes hechos. Pero al menos deberías tener una idea básica de al menos dos personajes, un escenario y algo con que comenzar la trama.
Eso es. Ahora estás listo para comenzar.
Comenzar con Ren'Py
Una vez hayas instalado la última versión de Ren'Py, ejecuta el lanzador de Ren'Py. En Wndows, se trata de renpy.exe. En Linux, ejecutas el script renpy.sh en el directorio instalado de Ren'Py.
Haz Click en el botón "New Project". Haz click en el botón "template". El lanzador te preguntará por un nombre. Pon un nombre simple de una palabra para tu proyecto. Si no se te ocurre ninguno, "renai1" servirá. Luego presiona Enter.
Te llevará de nuevo al menú principal de lanzador, exceptuando que ahora mostrará el nombre de tu proyecto en la esquina superior izquierda. Haz click en el botón "Edit Script". Esto ejecutará el editor de texto SciTE con el script del nuevo proyecto de Ren'Py (que realmente es el mismo que el script de Template). Si no estás situado en la pestaña "script.rpy", cambia hacia esa pestaña.
Ahora podemos continuar.
Pensando en Ren'Py
Ren'Py Es Fácil
Ren'Py es probablemente el método más sencillo para escribir una novela gráfica que existe. Aún así, mucha gente tiene miedo cuando mira el script de Ren'Py por primera vez. ¿Cómo es posible?
La respuesta es simple: Ren'Py está diseñado para crear novelas gráficas completas lo más sencillo posible. No está diseñado para crear novelas gráficas iniciales lo más sencillo posible. ¿Cuál es la diferencia? Una novela gráfica es una larga y compleja historia. Una herramienta sencilla para proyectos pequeños se interpone a la hora de hacer proyectos más grandes. Piensa en una paleta de mano y en una pala: Si quieres plantar una petunia en una maceta, la paleta de mano servirá para el propósito. Pero si tú quieres plantar un árbol en un agujero en el jardín, con la pala terminarás mucho antes que con una paleta de mano. No es que uno de ellos sea más útil que el otro: Son útiles para los problemas a los que se enfrentan cada uno.
Y no nos engañemos: escribir una novela gráfica es como plantar un árbol. Una novela gráfica que transcurre en media hora puede contener sin problemas unas 10.000 palabras y varias ramas. Escribir una historia con 10.000 palabras y con múltiples ramas y que se recombinen es todo un trabajo. Muchos juegos hechos con Ren'Py tiene como 30.000 palabras. Novelas gráficas hechas por profesionales tienen más de 100.000 palabras. Eso sí que es trabajo de verdad.
El objetivo de Ren'Py es que se requiera el menor trabajo extra que sea posible. Por eso Ren'Py puede parecer complicado al principio. Las características de Ren'Py de poder encargarse sin dificultad de una novela gráfica de 50.000 palabras puede parecerte inútil cuando solamente llegues a las 50. Pero si continúas, verás que tarde o temprano te resultará incluso necesario.
Así que, a pesar de que Ren'Py pueda parecer complicado al principio, confía en que Ren'Py es la herramienta más sencilla para escribir una novela gráfica. Principalmente porque cuando comiences, vas a estar batallando con la trama, los personajes, las elecciones y sus ramas. Entonces es cuando te acostumbrarás al script de Ren'Py, tanto que ni siquiera lo notarás.
Programando
No es necesario que sepas programar para usar Ren'Py. Sin embargo, es cierto que necesitarás al menos saber algunas declaraciones de programación en pyton. No te preocupes, en este tutorial te enseñaremos todas las declaraciones que necesitas para el juego. Luego podrás copiarlo o modificarlo. Te explicaremos cómo hacerlo.
No es necesario que entiendas todoel código pyton para escribir una novela gráfica; puedes elegir solamente copiar y pegar.
Si eres programador, o tienes uno en tu equipo, puedes ir directamente a aprender el código pyton que necesites, aunque no ganarás mucho con ello. Por otro lado si quieres usar pyton para crear algo novedoso y original, te mostraremos enlaces en el manual de referencia.
Espacios y bloques
El mayor problema con los ordenadores y por consiguiente con Ren'Py, es que no son inteligentes. Los ordenadores no pueden comprender la comunicación humana, así que tenemos que hacer que el ordenador nos entienda. Sabemos que no es justo, pero en cualquier relación, el que menos tiene que perder, gana. Y como el ordenador es un objeto inanimado, no tiene nada que perder.
Así que tendremos que averiguar otros métodos para comunicarnos con el ordenador y que nos entienda. Realmente no es tan difícil. Por ejemplo, usaremos variables para mantener valores. Además estamos acostumbrados a darle nombres a cualquier cosa, así que no nos va a complicar mucho la tarea. Escribiendo algo así:
- Código:
$ regalo = "traje de baño"
es un poco raro, pero es una manera formalizada de lo que vamos a hacer. En este caso, es como decir "Voy a regalarle un traje de baño a mi novia" exceptuando que más que español o inglés, es "ordenadorés".
Hasta ahí bien, pero el principal problema de comunicarnos con el ordenador es el contexto. Estamos tan acostumbrado a ello que casi ni le damos importancia. Es como cuando dices "Me he comido un dulce" y "Es una persona muy dulce", sabes que en el primer caso, con dulce, se refiere a un postre y en el segundo caso se refiere a que es una persona amable y cariñosa por ejemplo. Lo conoces gracias al contexto: Normalmente un Dulce te lo comes, y no es que comas amabilidad o cariño, mientras que en el segundo caso una persona no puede ser un postre. Los ordenadores no entienden de contexto, así que tendremos que buscar maneras de engañarle.
Ren'Py usa espacios para solucionar este problema. Estos espacios se colocan al principio de la frase. Por ejemplo:
- Código:
"Esta línea no tiene espacios."
"Esta línea tiene 4 espacios."
"Esta línea tiene 8 espacios."
"Esta línea tiene también 4 espacios."
"Y Esta línea tiene 12 espacios."
"Finalmente esta línea no tiene espacios."
En Ren'Py, usamos esto para darle contexto al motor Ren'Py, y así puede saber a qué nos referimos. Todas las declaraciones dentro de un mismo (o mayor) número de espacios están en el mismo contexto. Nosotros le llamamos a esto "bloques". Por ejemplo, ahora hablaremos sobre el "bloque initi". Esto indica las líneas que están incluídas en la declaración init:
- Código:
nit:
# Esta línea está en el bloque init
# Esta línea también está en el bloque init
# Pero esta línea NO está en el bloque init
También es posible hacer nidos con los bloques como esas muñecas rusas que se abren para mostrar una similar más pequeña:
- Código:
init:
# Esta línea está en el bloque init
# Esta línea también está en el bloque init
python:
# Esta línea está tanto en el bloque python como en el bloque init
# como está escrito aquí, es imposible estar en el bloque python
# pero no estar en el bloque init.
# Esta línea aún sigue en el init block, pero no en el bloque python,
# así que ahora decimos que el bloque python está "cerrado", ya que
# no hay más declaraciones en el bloque python, pero podemos seguir
# en el bloque init de esta manera.
# Esta línea NO está en el bloque init
No te preocupes si no has entendido perfectamente el sistema de espacios y bloques. Terminará por tener sentido una vez sigas leyendo el tutorial y veas verdaderos ejemplos en Ren'Py.
Estructura del Script de Ren'Py
Bloques Init
Cada script de Ren'Py tiene información sobre personajes, imágenes, y músicas que necesitan declaración fuera de la historia. Esto se consigue con los bloques init. Y cada bloque init será algo así:
- Código:
init:
$ john = Character("John Smith")
$ percy = Character("Sir Percival Blakely")
image black = "#000000
Más tarde comentaremos qué podrían ir tras los bloques initi, pero por ahora sólo estamos viendo cómo podrían ser. Pueden estar en cualquier lugar del archivo, pero siempre es mejor colocarlos arriba del todo. Los bloques init no tienen espacios y las declaraciones que continúan el bloque init deben tener espacios, por lo que están incluidas en ese bloque init, tengan espacios o no. Cuando escribes una declaración (normalmente una label o etiqueta) que no tenga espacio, el bloque init ha acabado. Puedes tener cualquier número de declaraciones en un bloque init.
Y eso es todo lo que necesitas saber por ahora.
Labels o etiquetas
Los Labels o etiquetas te permiten darle nombres a puntos clave en tu historia. Usarlos para cambiar el flujo de la historia está mejor descrita en Crear Ramas y Recombinar la Historia. Ahora mismo necesitas saber que cada script de Ren'Py debe tener un label llamado "start". Así es como Ren'Py comienza a ejecutar tu historia. Es algo como esto:
- Código:
label start:
Generalmente, el comienzo de un script sencillo de Ren'Py podría ser:
- Código:
init:
$ j = Character("John")
label start:
j "¡Hola mundo!"
Comentarios
Con frecuencia verás comentarios en un script de Ren'Py explicando para qué sirve una línea del script. Los comentarios son algo así:
- Código:
# Líneas que empiezan por esta almohadilla (#) son comentarios.
Cuando se juega a un juego hecho con Ren'Py, no se ven estos comentarios. Solamente aquellos que colaboran en la elaboración del juego y en el sistema de script. Ren'Py ignora los comentarios, con lo que puedes poner lo que quieras en ellos. También son útiles para quitar líneas que no quieres usar, pero que no quieras que se pierdan para siempre:
- Código:
# j "Bonitos zapatos, Jen."
Definir Personajes
Los personajes en Ren'Py son objetos muy poderosos. Y aún así, son muy sencillos de dominar. (Si quieres ver más sobre todo lo que puede ofrecer un personaje, echa un vistazo al capítulo Definir Personajes en el Manual de Referencia). (Date cuenta de que todos los ejemplos sobre personajes deben estar definidos dentro del bloque init).
La forma más básica de definir un persnaje es:
- Código:
init:
$ jane = Character("Jane")
En la práctica, es extremadamente simple. Por eso deberías elegir un color para el nombre del personaje. Lo puedes conseguir con el típico color hexadecimal: #rrggbb. Para hacer que el nombre de Jane aparezca en verde, haremos esto:
- Código:
init:
$ jane = Character("Jane", color="#009900")
Puedes encontrar una útil guía de colores .aquí. Aunque no es tan común, también puedes poner una imagen en vez del nombre. Para hacerlo, en vez de darle a Jane un nombre, le damos el nombre de la imagen (que se ha de colocar en el directorio de nuestro proyecto de Ren'Py) y decirle a Ren'Py que su nombre en realidad es una imagen:
- Código:
init:
$ jane = Character("jane_label.png", image=True)
Otra cosa común es que quizás quieras que lo que digan en el texto también aparezca con otro color. Esto hace que tanto su etiqueta como lo que dice Jane aparezca en verde:
- Código:
init:
$ jane = Character("Jane", color="#009900", what_color="#009900")
Cuando tengamos que definiri personajes con más de una línea, es buena idea hacer que el nombre del personaje sea lo más corto posible. Así que en vez de:
- Código:
init:
$ jane = Character("Jane")
Sería mejor poner:
- Código:
init:
$ j = Character("Jane")
Te ahorrará tiempo a la hora de escribir, y seguirá siendo legible a la hora de editar tu historia.
Cuando vayas a definir a más de un personaje, no olvides que sólo pueden estar en el bloque init, así que no hace falta que hagas un bloque init por cada personaje:
- Código:
init:
$ j = Character("Jane")
$ a = Character("Adam")
$ s = Character("Sara")
Tu Primera Conversación
Conversación Básica
Una conversación en Ren'Py es extremadamente sencillo. Una vez hayas definido los personajes, solamente pones el prefijo antes del diálogo:
- Código:
bob "¡Hola Alice!"
alice "¡Hola Bob!"
Para personajes que no van a aparecer mucho en la historia, no es necesario que crees un personaje si no te molesta que aparezcan hablando en el estilo por defecto:
- Código:
bob "Me pregunto quién es ese hombre que se aproxima a nosotros."
alice "No lo sé, pero parece ser una persona fuerte."
"Tipo Duro" "Ey ¿Qué pasa?"
bob "Hola."
"Tipo Duro" "Me las piro."
bob "Esto ha sido verdaderamente extraño."
Narración
La narración es simplemente el diálogo en que nadie habla:
- Código:
"La aparición breve de ese tipo duro me ha dejado inquieto.
¿Es posible que sea de la compañía de fideos rival que trata de intimidarme?"
Adornando el Texto
Puedes añadir adornos al texto usando etiquetas de texto:
- Código:
"Las etiquetas de texto te permiten añadir un efecto al texto, como
{i}cursiva{/i} o {b}negrita{/b}."
Las etiquetas de texto te permiten hacer muchas cosas. Para más información, échale un vistazo al manual de referencia en el apartado de etiquetas de texto.
Un sabio consejo: Las etiquetas de texto son efectivas si se usan con moderación. Un abuso de éstas puede complicar mucho la lectura.
Añadir Gráficos a tu Historia
Inicializar los Gráficos
El primer paso para usar imágenes es decirle a Ren'Py que quieres incluir image statement en el bloque init. Puedes crear una imagen en Ren'Py a partir de un color sólido o una imagen. (realmente, cualquier objeto desplegable):
- Código:
init:
image negro = "#000000"
image bg parque = "parque.jpg"
image eileen alegre = "eileen1.png"
image eileen triste = "eileen2.png"
image eileen sorprendida = "eileen3.png"
Como puedes observar, los nombres de las imágenes pueden ser varias palabras. Ya hablaremos de por qué es tan útil cuando lleguemos a la sección de esconder imágenes. Los nombres de las imágenes y los personajes no tienen nada que ver, así que puedes reutilizar los nombres de los personajes como imágenes.
Fondos con Scene
El comando scene statement quita en la pantalla de lo que hay y opcionalmente coloca un nuevo fondo en la pantalla:
- Código:
scene bg parque
(Ten en cuenta que "bg parque" es el nombre de la imagen; bg no s una palabra clave.)
Gráficos de Personajes
Los gráficos de los personajes y otros objetos se muestran con show statement:
- Código:
show eileen alegre
La declaración show sin ningún modificador coloca la imagen en el centro. También puedes mostrar imágenes en los lados:
- Código:
show eileen alegre at right
- Código:
show eileen alegre at left
Ocultar Gráficos
Para ocultar los gráficos que se muestran con la declaración show, se puede conseguir de tres maneras:
Explícito
Primero, puedes ocultar explícitamente un gráfico con la declaración hide statement:
- Código:
hide eileen
Si una imagen consiste en más de una palabra, sólo necesitas usar la declaración hide en la primera palabra (la "etiqueta de imagen". Esto quiere decir que no es necesario que te compliques para saber qué versión del personaje está en la pantalla y quieras ocultar.
Implícitamente con show
La declaración show reemplazará automáticamente la imagen con la misma etiqueta de la que se muestra (aunque no del mismo modo que la declaración hide). Por ejemplo:
- Código:
e "¡Estoy contenta!"
show eileen alegre
e "Ahora estoy triste."
show eileen triste
hace lo que debe hacer — no tendrás dos copias de Eileen en la pantalla.
mplícitamente con scene
La declaración scene limpia todas las imágenes de la pantalla, así que si estás cambiando de escena, no necesitas ocultar nada.
Efectos Especiales
Todas las declaraciones con show y hide pueden ser modificados añadiendo un with clause (Ver: with statement):
- Código:
scene bg parque with fade
- Código:
show eileen alegre with dissolve
Hay más efectos especiales disponibles, pero esos dos son los más usados. (Parece que sólo George Lucas es capaz de utilizar cosas como el desplazaminto lateral, pero si quieres intentarlo, puedes mirar la lista completa de Transiciones Predefinidas.)
Cómo conseguir hacer lo que quieras, y que suceda
Ni la declaración scene ni la declaración show, en sí mismas, muestran inmediatamente las imágenes en la pantalla. Más bien hacen cola, así que si las combinas:
- Código:
scene bg parque
show eileen alegre
show ted alegre at left
- Código:
scene bg parque with fade
show eileen alegre with dissolve
show ted alegre at left with dissolve
Ren'Py mostrará primero el fondo con atenuación, luego muestra a Eileen con disolución en la pantalla y por último a Ted. Para hacer una atenuación con Eileen y Ted en él, usa la declaración de "with" después de que le indiques a Ren'Py cómo quieres que se muestre la pantalla:
- Código:
show bg parque
show eileen alegre
show ted alegre
with dissolve
(Nota: Por razones históricas, no es lo mismo que:
- Código:
show bg park
show eileen happy
show ted happy with dissolve
Que hará que el fondo y Eileen se muestren sin transición y luego mostrar a Ted con la transición de Disolución. Por lo general, si estás usando más de una declaración, solamente usa with con su propia línea.)
Como resultado de la cola de la declaración show, esto tampoco funcionará:
- Código:
show eileen alegre
show eileen triste
show eileen enfadada
show eileen eufórica
el lector solamente verá el último. Si quieres mostrar varias versiones del personaje sin interactuar con el lector, necesitarás usar with con cada una de ellas:
- Código:
show eileen alegre with dissolve
show eileen tistre with dissolve
show eileen enfadada with dissolve
show eileen eufórica with dissolve
Dar Elecciones a los Usuarios con los Menús
Los menús se implementan con menu statement, que se explican mejor con este ejemplo:
- Código:
menu:
"Elección 1":
"Éste es el resultado de escoger la Elección 1"
bob "Hola Sarah."
sarah "Hola Bob."
"Segnda elección":
"Éste es el resultado de escoger la segunda elección."
"La tercera opción":
"Este es el resultado de escoger la tercera elección"
bob "¿Qué pasa, Sarah?"
sarah "Yo yo yo."
"La cuarta opción no hace nada si la escoges":
pass
"La quinta opción es un poco diferente":
bob "Hola Sarah. ¿Podrías dejarme el número de teléfono de tu hermana?"
sarah "Mmm, ella no tiene teléfono."
Ten en cuenta que cada opción debe tener al menos una declaración, así que si no quieres que se realice una acción, usa pass statement.
Recordar las Elecciones de los Usuarios
Cambiar el Flujo del Juego con Elecciones Anteriores
Se puede recordar las elecciones de los usuarios asignando variables. Por ejemplo:
menu:
"Comprar una Iguana":
$ regalo = "iguana"
b "¡Me llevaré una iguana!"
"Comprar una Serpiente Cascabel":
$ regalo = "serpiente cascabel"
b "Me llevaré una Serpiente Cascabel!"
"Comprar una Tortuga":
$ regalo = "tortuga"
b "¡Déjeme la tortuga más lenta que tenga, por favor!"
Fíjate en que solamente hay un "=" para asignar una variable.
Más tarde en el juego, puedes usar if statement para cambiar el guión basado en la elección anterior:
b "Ábrelo, Mary."
if regalo == "iguana":
m "¡Oh Bob, siempre he querido una iguana!"
if regalo == "serpiente cascabel":
m "¡Oh Bob, siempre me han encantado las serpientes cascabeles! ¡Muchísimas gracias!"
if regalo == "tortuga"
m "¡Bob! ¡Es tan lenta...! ¡Te quiero!"
Ahora fíjate que se usa "==" para reflejar igualdad.
Puedes llamar como quieras a las variables, siempre y cuando no creen conflicto con alguna palabra clave o con un personaje. La única regla es que debes asignar primero la variable antes de usarla en una condicional.
Implementar un Juego Basado en Puntos
Un juego basado en puntos es aquella en que las elecciones que hace el usuario se acumulan durante la historia en forma de variables.
Primero, necesitas saber qué puntos quieres que dependan de los finales. Por ejemplo, quieres que el uuario sea capaz de ganar puntos por (1) ganando musculatura (fuerza) (2) haciendo malabares (destreza) y (3) desarrollando experimentos de química y desarrollar nuevas formas de vida avanzadas (ciencia demente).
Luego, necesitas iniciar las variables que vas a usar para los puntos. Hazlo en el label start:
label start:
$ puntos_fuerza = 0
$ puntos_destreza = 0
$ puntos_ciencia_demente = 0
Durante el juego, le darás la posibilidad al usuario de que sume puntos con sus elecciones. Para incrementar puntos, usa:
$ variable += 1
Puedes usar cualquier número. No tiene por qué ser # (es más seguido de un igual.) Para reducir puntos, usa:
$ variable -= 1
Donde puedes usar un número cualquiera. (Menos seguido de un igual.)
Por ejemplo:
menu:
"Ir al gimnasio":
$ puntos_fuerza += 1
"El gimnasio era duro y agotador."
"He cogido objetos pesados y las he levantado una y otra vez."
"Siempre me preguntaba por qué me molestaba en hacer eso,
ya que puedo hacer lo mismo sin cogerlo en primer lugar."
"Practicar malabarismos":
$ puntos_destreza += 1
"Practiqué malabares con siete bolas."
"Era muy difícil, pero conseguí al menos mantener un poco el ritmo."
"Practicar malabares con erizos enfadados":
$ puntos_destreza += 3
$ puntos_fuerza -= 1
"Practicar con erizos enfadados ha incrementado mis reflejos.
Pero por otro lado, me siento débil por la pérdida de sangre."
"Crear un erizo alegre":
$ puntos_ciencia_demente += 1
"Desgraciadamente solamente pude crear un equidna depresivo,
pero aprendí mucho y seguro que la próxima vez me sale bien."
(Por supuesto puedes cambiar las respuestas basándote en los puntos que tengas, usando las técnicas descritas en la sección anterior sobre variables.)
Finalmente, te queda crear los finales usando las variables:
if puntos_fuerza > max(puntos_destreza, puntos_ciencia_demente):
"Coges una vaca y saltas sobre la luna."
elif puntos_destreza > max(puntos_fuerza, puntos_ciencia_demente):
"Haces malabares con 215 bolas y bates un nuevo récord mundial."
else:
"Creas a tu pareja perfecta y te retiras hacia un castillo
construida por un ejército de hombres gorila de ocho brazos
que creastes momentos antes."
return
El último código desempata a favor de la última opción (ciencia demente). Si quieres ser más explícito acerca de los empates, es más complicado, porque hay siete posibles combinaciones. Pero es realizable. Quedaría algo así:
if puntos_fuerza > max(puntos_destreza, puntos_ciencia_demente):
"Coges una vaca y saltas sobre la luna."
elif puntos_destreza > max(puntos_fuerza, puntos_ciencia_demente):
"Haces malabares con 215 bolas y bates un nuevo récord mundial."
elif puntos_ciencia_demente > max(puntos_fuerza, puntos_destreza):
"Creas a tu pareja perfecta y te retiras hacia un castillo
construida por un ejército de hombres gorila de ocho brazos
que creastes momentos antes."
elif puntos_fuerza == puntos_destreza == puntos_ciencia_demente:
"Tu ejército de hombres gorila gigantes serviciales de diecisiete
brazos te construyen tres castillos, con los que haces malabares
para impresionar a tu pareja perfecta que creastes momentos antes."
elif puntos_fuerza == puntos_destreza:
"Haces malabares con tres rocas enormes con varias personas
atractivas del sexo opuesto."
elif puntos_destreza == puntos_ciencia_demente:
"Creas una nueva raza de colibríes con los que consigues hacer
malabares con 5.000 de ellos a la vez."
elif puntos_fuerza == puntos_ciencia_demente:
"Creas un hombre gorila de 30 toneladas con 24 brazos y lo
usas para pintar el techo de tu casa que te está construyendo
para ti."
return
El orden de las condiciones es importante, porque las últimas alternativas asumen que las primeras alternativas son falsas. En general, prueba si una variable individual se cumple, y luego comprueba si son iguales. Luego prueba con las variables que empatan. Este truco evita posibles errores de lógica del juego.
Crear Ramas y Recombinar la Historia
Las ramas cortas se pueden realizar con la declaración de menú incluyendo la rama entera después de cada elección. Pero para ramas más largas, se hace demasiado engorroso. La solución es usar labels y jump statement o bien call statement.
Lo primero que tienes de decidir es dónde vas a usar call o jump. Jump cambia el script que se está ejecutando en Ren'Py. El nuevo sitio al que se ejecute el script siempre avanza; no existe método para volver al lugar desde un jump, aunque siempre puedes usar el jump hacia un label después del salto. Por consiguiente,no puedes volver a reusar el jump desde distintos puntos del script. Para una novela gráfica, jump será más que suficiente.
Call guarda la información donde quieras que vayas, así que la rama que use call siempre podrá volver a ser reutilizada, ya que siempre puede volver al lugar donde proviene. Para un simulador de citas, probablemente uses call.
Por supuesto, puedes usar ambos en la misma novela gráfica (o simulador de citas). Mezclarlos y unirlos está bien, siempre y cuando cada rama sea de call o de jump.
Crear Ramas con Jump
El primer paso para crear ramas con jump es crear un label statement en tu script:
label joyería:
b "Vamos a la joyería. Me gustaría comprarte algo."
s "¡Eres tan dulce!"
Luego añade jump a la rama:
s "¿Qué quieres hacer?"
menu:
"Ir a la joyería":
jump joyería
#No volveremos a pasar por aquí, ya que al usar jump no se puede regresar.
"No hacer nada":
s "Me estoy aburriendo."
¡Felicidades, has creadouna rama con jump!
A menos que esta rama se ejecute al final del juego, posiblemente quieras crear la rama en cualquier otro lugar del script. Se hace de la misma manera; las ramas no son nada en especial y puedes usar jump en calquier lugar aunque estés en una rama. Por ejemplo, supongamos que el ejemplo anterior quieras que vuelva al menú desde esa rama. Primero, añade un label antes del menú para que tengas algún lugar donde usar jump:
s "¿Qué quieres hacer?"
menu:
"Ir a la joyería":
jump joyería
#No volveremos a pasar por aquí, ya que al usar jump no se puede regresar.
"No hacer nada":
s "Me estoy aburriendo."
label qué_hacer:
b "Bueno ¿Y ahora qué?"
Luego añades un jump al fnal de la rama:
label joyería:
b "Vamos a la joyería. Me gustaría comprarte algo."
s "¡Eres tan dulce!"
b "Lo sé."
s "Bueno, es suficiente. Volvamos.
jump qué_hacer
Ten en cuenta que los labels deben ser únicos en todo el script de Ren'Py.
Crear Ramas con Call
El primer paso para crear ramas con call es crear un label statement y tambien return statement:
label joyería:
b "Vamos a la joyería. Me gustaría comprarte algo."
s "¡Eres tan dulce!"
etc.
return
(NOTA: Es MUY importante que una rama con Call nunca debe volver con jump o por el flujo normal del script. Si ése es el caso, el juego terminará inmediatamente gracias a return. a declaración return fuera de un call es la manera ideal para finalizar el juego: El asunto es que el juego empezó desde el menú inicial. Un return en la historia principal hace que vuelva al menú inicial del juego.)
Luego, añade el call en la rama:
s "¿Qué quiers hacer?"
menu:
"Ir a la joyería":
call joyería
s "Eso ha sido entretenido"
"No hacer nada":
pass
¡Felicidades, has creado una rama con call! Pero por desgracia, aún no hemos acabado.
No necesitas hacer nada mientras sigas escribindo el juego, pero cuando estés listo para el lanzamiento de tu juego, necesitarás ejecutar el (Nota del traductor: Falta poner el programa aquí) desde el lanzador de Ren'Py para añadir labels bajo cada declaración de call.
Nota Sobre Organización
No hay ningún sistema programado para organizar todas las ramas de un juego. Sin embargo, se recomienda que tengas claro cómo vas a organizar tus ramas.
Si usas múltiples archivos para organizar tu script, ten en cuenta que los labels son visibles ante cualquier archivo, así que saltar de un label en un archivo diferente es lo mismo que saltar a un label en el mismo archivo. Ya que los labels deben de ser único en cada script de Ren'Py, esto quiere decir que no puedes reutilizar los labels en diferentes archivos del mismo juego de Ren'Py.
Añadir Música y Efectos de Sonido
Música
Para reproducir música de fondo (que se reproduce indefinidamente hasta que lo detienes), usa renpy.music.play:
$ renpy.music.play("ominoso.ogg")
Para usar fade-in oo fade-out (en segundos):
$ renpy.music.play("ominoso.ogg", fadein=2, fadeout=2)
Para detener la música de fondo, usa renpy.music.stop:
$ renpy.music.stop()
Efectos de Sonido
Para reproducir un efecto de sonido renpy.sound.play:
$ renpy.sound.play("bang.ogg")
También hay una función para parar el sonido, pero normalmente no hay razón para usarlo.
Voces (Doblaje)
Si quieres añadir voces a tu novela gráfica, necesitas poner cada línea del diálogo en un archivo separado y llamarlo de alguna manera en que identifiques con qué línea va la voz. Luego, después de cada línea de diálogo, pon un voice statement:
voice "bob203.ogg"
bob "Me encanta el helado."
voice "nancy218.ogg"
nancy "A mí también."
voice "bob204.ogg"
bob "También me gustan las galletas."
Bien podeis descargaros este programa desde aqui:
http://www.renpy.org/wiki/renpy/Home_Page
tutorial tradudico de la misma pagina oficial.
Re: tutorial renpy
Muchas gracias| por el tutorial buscaba un tutorial de renpy pues quiero hacer una visual novel sencilla muchisimas gracias por todo
darkhinablade- Mensajes : 1
Fecha de inscripción : 17/01/2013
Magic rol yuri :: Off-Rol :: spam zone
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.