Definir una Cinta
Las cintas (ribbons) son marcas honoríficas que se otorgan a los Pokémon como reconocimiento de logros. Pueden obtenerse al ganar concursos, completar desafíos de batalla, superar ciertas condiciones especiales o como recompensas de eventos. Las cintas se muestran en la pantalla de resumen del Pokémon y no tienen efecto directo en combate, aunque algunas pueden tener funciones especiales (como la Cinta Esfuerzo). Se definen en el archivo PBS ribbons.txt.
Ubicación del archivo
PBS/ribbons.txt
Formato de una entrada de cinta
Cada cinta se define como un bloque con un identificador interno entre corchetes, seguido de sus propiedades:
[HOENNCOOL]
Name = Cinta Cool de Hoenn
IconPosition = 0
Description = Cinta otorgada a un Pokémon genial. Se otorga en concursos de Hoenn.
Propiedades disponibles
| Propiedad | Descripción | Obligatoria |
|---|---|---|
Name | Nombre visible de la cinta que se muestra en la pantalla de resumen. | Sí |
IconPosition | Posición del icono de la cinta en la imagen de iconos (Graphics/UI/ribbons.png). Los iconos se cuentan desde 0. | Sí |
Description | Descripción de la cinta que aparece al seleccionarla en la pantalla de resumen. | Sí |
Flags | Flags opcionales para la cinta (uso interno, rara vez necesario). | No |
Cintas predeterminadas
Pokémon Essentials incluye una amplia colección de cintas predefinidas que replican las de los juegos oficiales. Estas son algunas de las más importantes:
Cintas de concurso (Hoenn)
| ID interno | Nombre | Descripción |
|---|---|---|
| HOENNCOOL | Cinta Cool de Hoenn | Concurso Cool de rango Normal. |
| HOENNCOOLSUPER | Cinta Cool Super de Hoenn | Concurso Cool de rango Super. |
| HOENNCOOLHYPER | Cinta Cool Hyper de Hoenn | Concurso Cool de rango Hyper. |
| HOENNCOOLMASTER | Cinta Cool Master de Hoenn | Concurso Cool de rango Master. |
| HOENNBEAUTY | Cinta Belleza de Hoenn | Concurso de Belleza de rango Normal. |
| HOENNCUTE | Cinta Dulzura de Hoenn | Concurso de Dulzura de rango Normal. |
| HOENNSMART | Cinta Ingenio de Hoenn | Concurso de Ingenio de rango Normal. |
| HOENNTOUGH | Cinta Dureza de Hoenn | Concurso de Dureza de rango Normal. |
Cintas de combate
| ID interno | Nombre | Descripción |
|---|---|---|
| WINNING | Cinta Triunfo | Otorgada por superar la racha de 7 victorias en la Torre Batalla. |
| VICTORY | Cinta Victoria | Otorgada por superar la racha de 49 victorias en la Torre Batalla. |
| ABILITY | Cinta Habilidad | Otorgada al superar la Fábrica Batalla. |
| GREATABILITY | Cinta Gran Habilidad | Otorgada al superar la Fábrica Batalla en nivel superior. |
Cintas especiales
| ID interno | Nombre | Descripción |
|---|---|---|
| CHAMPION | Cinta Campeón | Otorgada al entrar en el Salón de la Fama. |
| EFFORT | Cinta Esfuerzo | Otorgada a un Pokémon que ha alcanzado el máximo de EVs (510). |
| ALERT | Cinta Alerta | Otorgada al Pokémon con gran vivacidad. |
| SHOCK | Cinta Choque | Otorgada al Pokémon que causa gran impresión. |
| DOWNCAST | Cinta Melancolía | Un Pokémon que a veces se pone triste. |
| CARELESS | Cinta Descuido | Un Pokémon algo despistado. |
| RELAX | Cinta Relax | Un Pokémon que sabe relajarse. |
| SNOOZE | Cinta Siesta | Un Pokémon al que le gusta dormir. |
| SMILE | Cinta Sonrisa | Un Pokémon que siempre sonríe. |
| GORGEOUS | Cinta Preciosa | Una cinta lujosa y cara. |
| ROYAL | Cinta Real | Una cinta extremadamente lujosa. |
| GORGEOUSROYAL | Cinta Preciosa Real | La cinta más lujosa que existe. |
| FOOTPRINT | Cinta Huella | Otorgada por el anciano de las huellas al Pokémon con máxima felicidad. |
| BIRTHDAY | Cinta Cumpleaños | Cinta conmemorativa de cumpleaños. |
| SPECIAL | Cinta Especial | Una cinta de evento especial. |
| CLASSIC | Cinta Clásica | Cinta de un evento de distribución especial. |
| PREMIER | Cinta Premier | Cinta de estreno de un evento. |
Otorgar cintas por script
Puedes dar cintas a los Pokémon del jugador usando comandos de script. El método principal es giveRibbon:
Dar una cinta al primer Pokémon del equipo
# Otorgar la Cinta Campeón al primer Pokémon
$player.party[0].giveRibbon(:CHAMPION)
pbMessage(_I("¡Tu Pokémon ha recibido la Cinta Campeón!"))
Dar una cinta a todo el equipo
# Otorgar la Cinta Campeón a todo el equipo (al entrar al Salón de la Fama)
$player.party.each do |pkmn|
pkmn.giveRibbon(:CHAMPION)
end
pbMessage(_I("¡Todos tus Pokémon han recibido la Cinta Campeón!"))
Dar una cinta a un Pokémon elegido por el jugador
# Permitir al jugador elegir a qué Pokémon dar la cinta
pbChoosePokemon(1, 2) # Variable 1 = índice, Variable 2 = validación
pkmn = $player.party[pbGet(1)]
if pkmn
pkmn.giveRibbon(:EFFORT)
pbMessage(_I("¡#{pkmn.name} ha recibido la Cinta Esfuerzo!"))
end
Comprobar si un Pokémon tiene una cinta
# Verificar si el primer Pokémon tiene la Cinta Campeón
if $player.party[0].hasRibbon?(:CHAMPION)
pbMessage(_I("Este Pokémon ya tiene la Cinta Campeón."))
else
pbMessage(_I("Este Pokémon no tiene la Cinta Campeón."))
end
# Contar cintas de un Pokémon
count = $player.party[0].numRibbons
pbMessage(_I("Este Pokémon tiene #{count} cintas."))
# Verificar si algún Pokémon del equipo tiene la cinta
has_it = $player.party.any? { |p| p.hasRibbon?(:CHAMPION) }
Quitar cintas
# Quitar una cinta a un Pokémon
$player.party[0].takeRibbon(:EFFORT)
pbMessage(_I("Se ha retirado la Cinta Esfuerzo."))
Visualización en la pantalla de resumen
Las cintas aparecen en la pantalla de resumen del Pokémon, generalmente en la última pestaña (pestaña de cintas/marcas). Cada cinta se muestra como un icono pequeño. Al seleccionar una cinta, se muestra su nombre y descripción.
Los iconos se cargan desde:
Graphics/UI/ribbons.png
Esta imagen es un sprite sheet donde cada cinta ocupa un espacio fijo. La propiedad IconPosition de cada cinta indica qué posición del sprite sheet usar.
Crear una cinta personalizada
Para añadir una cinta nueva a tu juego, sigue estos pasos:
Paso 1: Añadir la entrada en ribbons.txt
[EXPLORER]
Name = Cinta Explorador
IconPosition = 50
Description = Otorgada al Pokémon que ha acompañado a su entrenador por 100 mapas diferentes.
Paso 2: Crear el icono
Edita Graphics/UI/ribbons.png y añade un icono en la posición 50. El icono debe tener el mismo tamaño que los demás (generalmente 32×32 o 64×64 píxeles, según la configuración de tu proyecto).
Diseña el icono con:
- Un color representativo del logro.
- Un símbolo o dibujo reconocible.
- Bordes claros que destaquen sobre el fondo de la interfaz.
Paso 3: Implementar la lógica de obtención
Crea el código que otorgue la cinta cuando se cumpla la condición. Por ejemplo, para una cinta que se otorga al visitar 100 mapas:
# En un evento Common Event o en un script que se ejecute al cambiar de mapa
$PokemonGlobal.maps_visited ||= []
unless $PokemonGlobal.maps_visited.include?($game_map.map_id)
$PokemonGlobal.maps_visited.push($game_map.map_id)
end
if $PokemonGlobal.maps_visited.length >= 100
pkmn = $player.party[0]
unless pkmn.hasRibbon?(:EXPLORER)
pkmn.giveRibbon(:EXPLORER)
pbMessage(_I("¡#{pkmn.name} ha recibido la Cinta Explorador\\npor acompañarte en más de 100 lugares!"))
end
end
Paso 4: Compilar
Compila el juego desde el menú de depuración para que el nuevo dato se cargue.
Ejemplo: Cinta de evento especial
Las cintas de eventos son perfectas para distribuciones especiales o misiones secundarias:
# Definir en ribbons.txt
[FESTIVAL]
Name = Cinta Festival
IconPosition = 51
Description = Otorgada a los Pokémon que participaron en el Festival Anual de la Ciudad.
# Evento NPC que otorga la cinta
# Condición: Game Switch [FESTIVAL_ACTIVE] = ON
pbMessage(_I("¡Bienvenido al Festival Pokémon!"))
pbMessage(_I("Como recuerdo, tu Pokémon recibirá una cinta especial."))
pbChooseNonEggPokemon(1, 2)
pkmn = $player.party[pbGet(1)]
if pkmn
if pkmn.hasRibbon?(:FESTIVAL)
pbMessage(_I("¡#{pkmn.name} ya tiene la Cinta Festival!"))
else
pkmn.giveRibbon(:FESTIVAL)
pbMessage(_I("¡#{pkmn.name} ha recibido la Cinta Festival!"))
end
end
Cintas con funciones especiales
Aunque la mayoría de las cintas son puramente cosméticas, puedes programar funciones especiales asociadas:
Cinta que permite acceso a un área
# Bloquear acceso a una zona VIP
has_vip = $player.party.any? { |p| p.hasRibbon?(:ROYAL) }
if has_vip
pbMessage(_I("Tienes un Pokémon con la Cinta Real. Puedes pasar."))
# Transferir al jugador a la zona VIP
pbTransferPlayer(MAP_ID, X, Y)
else
pbMessage(_I("Solo los entrenadores con un Pokémon con Cinta Real pueden entrar."))
end
NPC que valora las cintas
# NPC que cuenta las cintas totales del equipo
total = 0
$player.party.each { |p| total += p.numRibbons }
pbMessage(_I("¡Tu equipo tiene un total de #{total} cintas!"))
if total >= 20
pbMessage(_I("¡Impresionante! Eres un verdadero coleccionista de cintas."))
elsif total >= 10
pbMessage(_I("¡Muy bien! Tienes una bonita colección."))
elsif total > 0
pbMessage(_I("Un buen comienzo. ¡Sigue recolectando cintas!"))
else
pbMessage(_I("Vaya, no tienes ninguna cinta. ¡Intenta ganar algunas!"))
end
Cinta Esfuerzo automática
La Cinta Esfuerzo se otorga automáticamente cuando un Pokémon alcanza el máximo de EVs (510 puntos totales). Sin embargo, si deseas otorgarla manualmente vía NPC (como en los juegos oficiales):
# NPC que otorga la Cinta Esfuerzo
pbMessage(_I("Déjame ver a tu Pokémon..."))
pbChooseNonEggPokemon(1, 2)
pkmn = $player.party[pbGet(1)]
if pkmn
total_evs = pkmn.ev.values.sum
if total_evs >= Pokemon::EV_LIMIT
if pkmn.hasRibbon?(:EFFORT)
pbMessage(_I("Este #{pkmn.name} ya tiene la Cinta Esfuerzo."))
else
pkmn.giveRibbon(:EFFORT)
pbMessage(_I("¡Tu #{pkmn.name} se ha esforzado mucho!"))
pbMessage(_I("Le otorgo la Cinta Esfuerzo como reconocimiento."))
end
else
pbMessage(_I("Tu #{pkmn.name} aún puede esforzarse más."))
pbMessage(_I("Vuelve cuando haya alcanzado su máximo potencial."))
end
end
Acceder a datos de cintas por script
# Obtener información de una cinta
ribbon_data = GameData::Ribbon.get(:CHAMPION)
pbMessage("Nombre: #{ribbon_data.name}")
pbMessage("Descripción: #{ribbon_data.description}")
# Verificar si una cinta existe
if GameData::Ribbon.exists?(:EXPLORER)
pbMessage("La Cinta Explorador está definida.")
end
# Iterar sobre todas las cintas
GameData::Ribbon.each do |ribbon|
pbMessage("#{ribbon.id} - #{ribbon.name}")
end
Consejos y buenas prácticas
- Mantén una lista organizada de todas las cintas, con sus IDs internos y las condiciones de obtención.
- No abuses de las cintas — demasiadas cintas sin significado diluyen su valor.
- Diseña los iconos de las cintas con colores y formas que las hagan distinguibles entre sí.
- Usa cintas como recompensa para misiones secundarias y contenido post-game.
- Asegúrate de que la descripción de cada cinta explique claramente cómo se obtiene.
- Siempre verifica con
hasRibbon?antes de dar una cinta para evitar duplicados. - Compila después de cada cambio en
ribbons.txtpara asegurar que no haya errores de formato.