Crear rutas alternas con el comando `if` en Ren'Py

¡Hola, creadores de novelas visuales! Bienvenidos a la octava entrada de esta guía de Ren'Py en español. En el [post anterior] aprendimos a usar Lint para detectar errores antes de correr nuestro proyecto. Hoy vamos a explorar cómo crear **rutas alternas** en nuestra historia usando solo el comando `if`. Este método es más simple que usar variables (como lo hicimos hace unos días), pero requiere que planifiquemos cuidadosamente las decisiones del jugador para llevarlo a diferentes finales o rutas. ¡Empecemos!

1. Configurar la escena base
Como siempre, usaremos el fondo de la playa y los personajes Perrito y Gatita. 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. Crear la primera decisión
Vamos a crear una historia corta donde Perrito y Gatita tienen un día en la playa. El jugador tomará dos decisiones clave que determinarán el final de la historia. Usaremos solo `if` para manejar las rutas, sin variables.

1. Añade el primer diálogo y un menú con dos opciones:
   ```
   perrito "¡Hola, Gatita! ¿Quieres explorar la playa o quedarte aquí a descansar?"
   menu:
       "Exploremos la playa juntos.":
           jump explorar
       "Prefiero descansar aquí.":
           jump descansar
   ```
   - `jump` nos lleva a un `label` diferente dependiendo de la elección del jugador.
   - Vamos a crear dos rutas: una donde exploran (`explorar`) y otra donde descansan (`descansar`).

3. Definir las rutas con `label` e `if`
Ahora, definamos las dos rutas. En cada ruta, el jugador tomará una segunda decisión que llevará a un final específico.

1. **Ruta 1: Explorar la playa**
   ```
   label explorar:
       perrito "¡Qué divertido! Mira, encontré una cueva. ¿Entramos o seguimos caminando?"
       menu:
           "Entremos a la cueva.":
               perrito "¡Genial, vamos!"
               gatita "¡Qué emocionante! Mira, hay un tesoro escondido aquí."
               "Final 1: Perrito y Gatita encontraron un tesoro y se hicieron grandes amigos."
               jump fin
           "Sigamos caminando por la playa.":
               perrito "Buena idea, sigamos."
               gatita "Me gusta caminar contigo, Perrito. La playa es hermosa."
               "Final 2: Perrito y Gatita disfrutaron un paseo tranquilo y fortalecieron su amistad."
               jump fin
   ```

2. **Ruta 2: Descansar en la playa**
   ```
   label descansar:
       perrito "Está bien, descansemos aquí. ¿Quieres tomar un helado o solo relajarte?"
       menu:
           "Tomemos un helado juntos.":
               perrito "¡Buena idea! Voy por los helados."
               gatita "Gracias, Perrito. Este helado está delicioso."
               "Final 3: Perrito y Gatita compartieron un helado y pasaron un día relajante."
               jump fin
           "Solo quiero relajarme.":
               perrito "Entiendo, relajémonos entonces."
               gatita "Hmph, eres un poco aburrido, Perrito..."
               "Final 4: Perrito y Gatita descansaron, pero no se divirtieron mucho."
               jump fin
   ```

3. **Finalizar la escena**
   ```
   label fin:
       return
   ```
   - El `label fin` es un punto común para cerrar la escena y regresar al menú principal.

#### 4. Código completo
Aquí está el código completo con las rutas alternas:
```
define perrito = Character("Perrito", color="#00B7EB")
define gatita = Character("Gatita", color="#FF69B4")

label start:
    scene bg playa
    show perrito at left
    show gatita at right

    perrito "¡Hola, Gatita! ¿Quieres explorar la playa o quedarte aquí a descansar?"
    menu:
        "Exploremos la playa juntos.":
            jump explorar
        "Prefiero descansar aquí.":
            jump descansar

label explorar:
    perrito "¡Qué divertido! Mira, encontré una cueva. ¿Entramos o seguimos caminando?"
    menu:
        "Entremos a la cueva.":
            perrito "¡Genial, vamos!"
            gatita "¡Qué emocionante! Mira, hay un tesoro escondido aquí."
            "Final 1: Perrito y Gatita encontraron un tesoro y se hicieron grandes amigos."
            jump fin
        "Sigamos caminando por la playa.":
            perrito "Buena idea, sigamos."
            gatita "Me gusta caminar contigo, Perrito. La playa es hermosa."
            "Final 2: Perrito y Gatita disfrutaron un paseo tranquilo y fortalecieron su amistad."
            jump fin

label descansar:
    perrito "Está bien, descansemos aquí. ¿Quieres tomar un helado o solo relajarte?"
    menu:
        "Tomemos un helado juntos.":
            perrito "¡Buena idea! Voy por los helados."
            gatita "Gracias, Perrito. Este helado está delicioso."
            "Final 3: Perrito y Gatita compartieron un helado y pasaron un día relajante."
            jump fin
        "Solo quiero relajarme.":
            perrito "Entiendo, relajémonos entonces."
            gatita "Hmph, eres un poco aburrido, Perrito..."
            "Final 4: Perrito y Gatita descansaron, pero no se divirtieron mucho."
            jump fin

label fin:
    return
```

#### 5. Ventajas y desventajas de usar solo `if`
Este método es simple, pero tiene sus pros y contras:

**Ventajas**:
- No necesitas variables, lo que hace que el código sea más fácil de entender para principiantes.
- Tienes control directo sobre cada ruta y final.

**Desventajas**:
- El código puede volverse muy largo si tienes muchas decisiones. Por ejemplo, con solo dos decisiones, ya tenemos cuatro finales. Si añades una tercera decisión, podrías tener ocho finales, y el código crecería mucho.
- Necesitas planificar bien tus rutas con un "mapa mental" o un diagrama para no perderte.

**Consejo**: Si tu historia tiene muchas decisiones, considera usar variables (como aprendimos en el post del 5 de abril). Son más eficientes para proyectos grandes.

#### 6. Ejercicios para practicar
Aquí tienes algunos ejercicios para que experimentes con rutas alternas:

1. **Añade una tercera decisión**:
   - En la ruta `explorar`, después de encontrar el tesoro, agrega una nueva decisión (p. ej., "¿Compartimos el tesoro o lo guardamos para nosotros?") que lleve a dos finales diferentes.

2. **Cambia los finales**:
   - Modifica los diálogos de los finales para que sean más emocionantes o tristes, según el contexto.

3. **Crea una nueva ruta**:
   - Añade una tercera opción en el primer menú (p. ej., "Vamos a nadar en el mar") y escribe una nueva ruta con dos finales posibles.

 7. ¡Tu turno!
Copia este código en tu proyecto de Ren'Py y prueba las diferentes rutas. ¿Qué final obtuviste? ¿Lograste seguir el "mapa" de decisiones? Intenta los ejercicios y comparte tus resultados en los comentarios. En la próxima entrada, aprenderemos a posicionar personajes en diferentes lugares de la pantalla. ¡Nos leemos el 8 de abril!

Comentarios

Entradas más populares de este blog

Introducción a Ren'Py - Tu primer paso para crear novelas visuales

Importar un segundo personaje y hacer que interactúen en Ren'Py