Mejorar diálogos con efectos, formatos y línea de tiempo en Ren'Py
¡Hola, creadores de novelas visuales! Bienvenidos a la quinta entrada de esta guía de Ren'Py en español. En el [post anterior] aprendimos a cortar sprite sheets en Photopea para preparar nuestros personajes. Hoy nos enfocaremos en hacer que los diálogos sean más dinámicos y expresivos usando **líneas de tiempo**, **formatos** y **efectos visuales** (como texto que tiembla para reflejar miedo). También te daré consejos para declarar estos efectos sin que Ren'Py falle. ¡Empecemos!
#### 1. Configurar la escena base
Vamos a usar el fondo de la playa y los personajes Perrito y Gatita que ya conocemos. Si no tienes los archivos, revisa los posts anteriores para descargarlos.
1. Abre tu archivo `script.rpy` y asegúrate de tener los personajes declarados:
```
define perrito = Character("Perrito", color="#00B7EB")
define gatita = Character("Gatita", color="#FF69B4")
```
2. Configura la escena inicial:
```
label start:
scene bg playa
show perrito at left
show gatita at right
```
#### 2. Línea de tiempo para diálogos (controlar el ritmo)
En Ren'Py, puedes controlar el ritmo de los diálogos usando pausas y mostrando el texto letra por letra. Esto se hace con las etiquetas `{p}` (pausa) y `{w}` (espera).
1. Añade pausas dentro del diálogo para crear suspenso:
```
perrito "¡Mira, Gatita! {p=1.0} Creo que vi algo en el agua..."
```
- `{p=1.0}` hace una pausa de 1 segundo antes de continuar el diálogo.
2. Controla la velocidad del texto con `{w}`:
```
gatita "Espera... {w=0.5} ¿Eso es un tiburón?!"
```
- `{w=0.5}` espera 0.5 segundos antes de mostrar el resto del texto.
#### 3. Formatos básicos para el texto
Puedes cambiar el estilo del texto dentro de un diálogo usando etiquetas de formato.
1. **Negritas** (para énfasis):
```
perrito "¡{b}Cuidado{/b}, Gatita!"
```
2. **Cursivas** (para pensamientos o tono suave):
```
gatita "{i}No puede ser un tiburón... ¿o sí?{/i}"
```
3. **Color en el texto** (para resaltar palabras):
```
perrito "¡Es un {color=#FF0000}tiburón{/color} de verdad!"
```
- `#FF0000` es rojo. Usa códigos hexadecimales para otros colores.
#### 4. Efectos visuales en el texto
Ren'Py permite añadir efectos al texto para que refleje emociones, como miedo o sorpresa. Uno de los más populares es el efecto de "temblor" (shaking), ideal para escenas de terror.
1. Usa la etiqueta `{shake}` para hacer que el texto tiemble:
```
gatita "{shake=0.5}¡N-no quiero nadar ahora!"
```
- `{shake=0.5}` hace que el texto tiemble durante 0.5 segundos. Puedes ajustar el valor para más o menos intensidad.
Nota: El efecto `shake` no es nativo de Ren'Py, pero puedes implementarlo con un código personalizado. Más adelante te explico cómo declararlo.
2. Otro efecto útil es `{alpha}` para hacer que el texto aparezca o desaparezca gradualmente:
```
perrito "{alpha=0}...{alpha=1}¡Corre, Gatita!"
```
- `{alpha=0}` hace el texto invisible, y `{alpha=1}` lo hace visible. Esto crea un efecto de desvanecimiento.
#### 5. Declarar efectos personalizados (evitar fallas)
Algunos efectos, como `shake`, requieren código adicional para funcionar. Si no lo declaras correctamente, Ren'Py puede dar errores como "tag not found". Vamos a declarar el efecto `shake`.
1. Al inicio de tu `script.rpy`, añade el siguiente código para definir el efecto `shake`:
```
init python:
def shake_function(trans, st, at):
trans.xoffset = int(5 * renpy.random.random() - 2.5)
trans.yoffset = int(5 * renpy.random.random() - 2.5)
return 0.05
renpy.register_shader("shake", vertex_200="""
uniform float u_time;
attribute vec2 a_position;
varying vec2 v_position;
void main() {
gl_Position = vec4(a_position, 0.0, 1.0);
v_position = a_position;
}
""", fragment_200="""
uniform float u_time;
varying vec2 v_position;
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
""")
def shake_tag(tag, argument, contents):
return [(renpy.TEXT_TAG, "shake=" + str(argument))] + contents
config.custom_text_tags["shake"] = shake_tag
```
2. Ahora puedes usar `{shake}` en tus diálogos sin que Ren'Py falle.
**Consejo**: Si el efecto no funciona, verifica que el código esté correctamente indentado (usa 4 espacios, no TAB). También asegúrate de que tu versión de Ren'Py sea reciente (8.2.0 o superior).
#### 6. Código completo de la escena
Aquí está el código completo con todos los efectos que vimos:
```
define perrito = Character("Perrito", color="#00B7EB")
define gatita = Character("Gatita", color="#FF69B4")
init python:
def shake_function(trans, st, at):
trans.xoffset = int(5 * renpy.random.random() - 2.5)
trans.yoffset = int(5 * renpy.random.random() - 2.5)
return 0.05
renpy.register_shader("shake", vertex_200="""
uniform float u_time;
attribute vec2 a_position;
varying vec2 v_position;
void main() {
gl_Position = vec4(a_position, 0.0, 1.0);
v_position = a_position;
}
""", fragment_200="""
uniform float u_time;
varying vec2 v_position;
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
""")
def shake_tag(tag, argument, contents):
return [(renpy.TEXT_TAG, "shake=" + str(argument))] + contents
config.custom_text_tags["shake"] = shake_tag
label start:
scene bg playa
show perrito at left
show gatita at right
perrito "¡Mira, Gatita! {p=1.0} Creo que vi algo en el agua..."
gatita "Espera... {w=0.5} ¿Eso es un {color=#FF0000}tiburón{/color}?!"
perrito "¡{b}Cuidado{/b}, Gatita!"
gatita "{shake=0.5}¡N-no quiero nadar ahora!"
perrito "{alpha=0}...{alpha=1}¡Corre, Gatita!"
gatita "No sé qué hacer..."
return
```
#### 7. ¡Tu turno!
Copia este código en tu proyecto de Ren'Py y prueba los efectos. ¿Lograste que el texto de Gatita tiemble de miedo? ¿Qué otros efectos te gustaría probar? Déjame un comentario con tus resultados. En la próxima entrada, aprenderemos a posicionar personajes en diferentes lugares de la pantalla. ¡Nos leemos el 6 de abril!
Comentarios
Publicar un comentario