Registrarse

[RPG - Scripting] Elección diferente de los iniciales

dudaro

Pequeño saltamontes
Tengo una idea para variar la elección de los iniciales y que no sea la típica de escoger directamente el que queremos a través de una pokeball. Mi idea es que el profesor nos haga unas preguntas como por ejemplo:
-¿Te sientes atraído por la naturaleza?
-¿Te gusta el calor del verano?
-¿Te relaja el sonido del agua?

Y que por medio de un script se valore la pregunta con una respuesta afirmativa (o que se escoja una al alzar en caso de empate) y a partir de ahí se presenten en el mapa todos los starterts de todas las regiones que tengan ese tipo. Es decir, si nos gusta el sonido del agua, se deberían de presentar todos los overworlds de todos los startes de tipo agua de todas las regiones y ahí nosotros ya escogemos el que prefiramos para añadir a nuestro equipo. Si elegimos el tipo planta, se tienen que presentar todos los startes de tipo plantas de todas las generaciones, y con el tipo fuego se debería hacer lo mismo.

El problema es que no sé cómo hacerlo. Hice este código, pero no me funciona

# Inicializar afinidades
plant_affinity = 0
fire_affinity = 0
water_affinity = 0

# Pregunta 1
pbMessage(_INTL("¿Qué tipo de entorno prefieres?"))
cmd = pbMessage(_INTL("Escoge una opción:"), [
_INTL("Un bosque lleno de árboles y flores."),
_INTL("Una cálida playa con sol brillante."),
_INTL("Un lago tranquilo rodeado de agua.")
])
case cmd
when 0
plant_affinity += 1 # Bosque -> Planta
pbMessage(_INTL("Sientes una conexión con la naturaleza."))
when 1
fire_affinity += 1 # Playa -> Fuego
pbMessage(_INTL("Sientes el calor del sol."))
when 2
water_affinity += 1 # Lago -> Agua
pbMessage(_INTL("Sientes la calma del agua."))
end

# Pregunta 2
pbMessage(_INTL("¿Qué elemento te atrae más?"))
cmd = pbMessage(_INTL("Escoge una opción:"), [
_INTL("La vida que surge de la tierra."),
_INTL("El fuego que arde con intensidad."),
_INTL("El agua que fluye serenamente.")
])
case cmd
when 0
plant_affinity += 1 # Tierra -> Planta
pbMessage(_INTL("Te sientes en armonía con la tierra."))
when 1
fire_affinity += 1 # Fuego -> Fuego
pbMessage(_INTL("El poder del fuego te envuelve."))
when 2
water_affinity += 1 # Agua -> Agua
pbMessage(_INTL("El flujo del agua te trae paz."))
end

# Pregunta 3
pbMessage(_INTL("¿Qué animal te parece más interesante?"))
cmd = pbMessage(_INTL("Escoge una opción:"), [
_INTL("Una criatura que vive entre las plantas."),
_INTL("Un ser que corre veloz entre las llamas."),
_INTL("Un pez que nada ágilmente en el agua.")
])
case cmd
when 0
plant_affinity += 1 # Criatura planta
pbMessage(_INTL("Te atraen las criaturas de la naturaleza."))
when 1
fire_affinity += 1 # Criatura de fuego
pbMessage(_INTL("Sientes la energía de la velocidad."))
when 2
water_affinity += 1 # Criatura de agua
pbMessage(_INTL("La serenidad del agua te calma."))
end

# Evaluar afinidad predominante
if plant_affinity > fire_affinity && plant_affinity > water_affinity
predominant_type = :pLANTA
pbMessage(_INTL("Sientes una fuerte conexión con los Pokémon tipo Planta."))
elsif fire_affinity > plant_affinity && fire_affinity > water_affinity
predominant_type = :FUEGO
pbMessage(_INTL("Sientes una fuerte conexión con los Pokémon tipo Fuego."))
elsif water_affinity > plant_affinity && water_affinity > fire_affinity
predominant_type = :AGUA
pbMessage(_INTL("Sientes una fuerte conexión con los Pokémon tipo Agua."))
else
# Si hay empate entre dos afinidades, se elige una al azar
types = []
types.push:)PLANTA) if plant_affinity == [fire_affinity, water_affinity].max
types.push:)FUEGO) if fire_affinity == [plant_affinity, water_affinity].max
types.push:)AGUA) if water_affinity == [plant_affinity, fire_affinity].max
predominant_type = types.sample
pbMessage(_INTL("Te sientes en sintonía con múltiples elementos..."))
end

# Definir las listas de Pokémon iniciales según el tipo
starter_planta = [:BULBASAUR, :CHIKORITA, :TREECKO, :TURTWIG, :SNIVY, :CHESPIN, :ROWLET, :GROOKEY]
starter_fuego = [:CHARMANDER, :CYNDAQUIL, :TORCHIC, :CHIMCHAR, :TEPIG, :FENNEKIN, :LITTEN, :SCORBUNNY]
starter_agua = [:SQUIRTLE, :TOTODILE, :MUDKIP, :pIPLUP, :OSHAWOTT, :FROAKIE, :pOPPLIO, :SOBBLE]

# Efecto de aparición por afinidad
case predominant_type
when :pLANTA
pbMessage(_INTL("La tierra a tu alrededor comienza a vibrar..."))
pbSEPlay("AnimEarth")
pbWait(20)
pbMessage(_INTL("¡Los Pokémon tipo Planta están emergiendo!"))
starters_to_spawn = starter_planta
appearance_effect = "AnimEarth"

when :FUEGO
pbMessage(_INTL("El aire se calienta, y llamas surgen desde el suelo..."))
pbSEPlay("AnimFire")
pbWait(20)
pbMessage(_INTL("¡Los Pokémon tipo Fuego aparecen entre las llamas!"))
starters_to_spawn = starter_fuego
appearance_effect = "AnimFire"

when :AGUA
pbMessage(_INTL("El aire se vuelve húmedo y una suave bruma aparece..."))
pbSEPlay("AnimRain")
pbWait(20)
pbMessage(_INTL("¡Los Pokémon tipo Agua emergen del agua!"))
starters_to_spawn = starter_agua
appearance_effect = "AnimRain"
end

# Mostrar Pokémon apareciendo de forma impresionante
starter_positions = [[5, 7], [6, 10], [8, 9], [10, 5], [11, 8], [12, 6], [13, 9], [14, 7]]
starters_to_spawn.each_with_index do |pokemon, index|
pbSpawnPokemonWithEffect(pokemon, starter_positions[index], appearance_effect)
end

# Función que maneja la aparición de los Pokémon con efectos
def pbSpawnPokemonWithEffect(pokemon, position, effect)
pbSEPlay("AnimAppear") # Sonido de aparición genérico
case effect
when "AnimEarth"
pbCreateAnimation("AnimEarth", position) # Usa la animación de tierra
when "AnimFire"
pbCreateAnimation("AnimFire", position) # Usa la animación de fuego
when "AnimRain"
pbCreateAnimation("AnimRain", position) # Usa la animación de agua
end
pbShowPokemon(pokemon, position) # Mostrar el Pokémon en esa posición
pbMessage(_INTL("Un {1} ha aparecido.", GameData::Species.get(pokemon).name))
end
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Es una elección más similar a Mundo Misterioso pero yo añadiría un “volver a empezar” o “repetir” si no te gusta la elección para no tener que volver a pasar por cerrar > abrir > nueva partida cada vez que te saliera algo que no tener gustase
 

dudaro

Pequeño saltamontes
Me gusta la idea de "volver a empezar" y la añadiré en el código. ¿Sabrías por qué está fallándome el código? Me funciona bien con las preguntas y con el resultado final de ellas, pero en el momento en el que tienen que mostrarse los pokemon en el mapa, da error y se cierra el juego.
 
Arriba