Encuentros de Pesca

Los encuentros de pesca son un método de encuentro salvaje en Pokémon Essentials que permite al jugador encontrar Pokémon acuáticos usando una caña de pescar. Este sistema replica el comportamiento de la pesca en los juegos oficiales de Pokémon, donde existen tres tipos de cañas con diferentes pools de encuentro.

Este artículo explica cómo funciona el sistema de pesca, cómo configurar las tablas de encuentros de pesca en los archivos PBS, cómo definir los objetos de las cañas y cómo personalizar la mecánica de pesca.

Las Tres Cañas de Pescar

Pokémon Essentials incluye tres cañas de pescar por defecto, cada una con su propia tabla de encuentros y dificultad:

Caña Nombre Interno Tipo de Encuentro Descripción
Caña Vieja OLDROD OldRod La caña más básica. Encuentra Pokémon de nivel bajo, generalmente Magikarp.
Caña Buena GOODROD GoodRod Caña intermedia. Encuentra una variedad más amplia de Pokémon acuáticos.
Supercaña SUPERROD SuperRod La mejor caña. Encuentra Pokémon raros y de nivel alto.

Definición de los Objetos de Caña

Las cañas de pescar se definen como objetos en el archivo PBS/items.txt. Cada caña tiene un uso en el campo que activa la mecánica de pesca:

# PBS/items.txt

[OLDROD]
Name = Caña Vieja
NamePlural = Cañas Viejas
Pocket = 8
Price = 0
FieldUse = Direct
Flags = KeyItem
Description = Una caña de pescar vieja y algo endeble. Sirve para pescar Pokémon en el agua.

[GOODROD]
Name = Caña Buena
NamePlural = Cañas Buenas
Pocket = 8
Price = 0
FieldUse = Direct
Flags = KeyItem
Description = Una caña de pescar de calidad decente que permite pescar una mayor variedad de Pokémon.

[SUPERROD]
Name = Supercaña
NamePlural = Supercañas
Pocket = 8
Price = 0
FieldUse = Direct
Flags = KeyItem
Description = La mejor caña de pescar. Permite pescar los Pokémon más raros y poderosos del agua.

Cada caña está marcada como KeyItem (objeto clave) para que no se pueda vender ni descartar. El campo FieldUse = Direct indica que el objeto se usa directamente desde la mochila mientras el jugador está en el campo.

Tablas de Encuentros de Pesca

Las tablas de encuentros de pesca se definen en el archivo PBS/encounters.txt, dentro de la sección del mapa correspondiente. Cada tipo de caña tiene su propia lista de encuentros.

Formato del archivo PBS

# PBS/encounters.txt — Ejemplo para el mapa 005 (Ruta 6)

[005]  # ID del mapa
Land,21
  RATTATA,12,14
  PIDGEY,12,14
  ODDISH,13,15
Water,15
  TENTACOOL,15,25
  WINGULL,15,20
OldRod,2
  MAGIKARP,5,15
  GOLDEEN,5,10
GoodRod,3
  MAGIKARP,10,20
  GOLDEEN,10,20
  POLIWAG,15,25
  SHELLDER,15,20
SuperRod,5
  GYARADOS,25,35
  SEAKING,25,30
  POLIWHIRL,25,30
  CLOYSTER,30,35
  STARYU,25,30

Cada sección de encuentro de pesca sigue este formato:

Distribución de probabilidades

Las probabilidades de encuentro para cada slot varían según el tipo de caña. El sistema de Essentials asigna probabilidades fijas según la cantidad de slots definidos:

Slot OldRod (2 slots) GoodRod (3 slots) SuperRod (5 slots)
1 70% 60% 40%
2 30% 20% 30%
3 20% 15%
4 10%
5 5%

Esto significa que el primer Pokémon de la lista (slot 1) es siempre el más común, y los últimos son los más raros. Diseña tus tablas teniendo esto en cuenta.

La Mecánica de Pesca

Cuando el jugador usa una caña de pescar, se ejecuta la siguiente secuencia:

  1. Verificación de posición: El juego comprueba que el jugador esté mirando hacia un tile de agua. Si no hay agua enfrente, muestra un mensaje de error.
  2. Lanzamiento de la caña: Se muestra una animación del jugador lanzando la caña al agua.
  3. Espera del pique: El juego espera un tiempo aleatorio antes de que un Pokémon muerda el anzuelo. Durante esta espera, pueden ocurrir "falsos piques" que el jugador debe ignorar.
  4. Señal de pique: Cuando un Pokémon muerde, aparece el mensaje "¡Oh! ¡Un pique!" y el jugador debe pulsar el botón de acción rápidamente.
  5. Resultado: Si el jugador pulsa a tiempo, comienza la batalla contra el Pokémon pescado. Si no pulsa o pulsa en un falso pique, el Pokémon escapa.

Falsos piques

Los falsos piques son momentos en los que el texto "..." o "......" aparece pero no hay un pique real. Si el jugador pulsa el botón durante un falso pique, pierde el intento de pesca. La cantidad de falsos piques varía según la caña:

Configurar Eventos de Pesca

Aunque el sistema de pesca se activa automáticamente al usar una caña mirando al agua, en algunos casos querrás crear eventos de pesca especiales:

NPC que da una caña

# Evento de NPC pescador que regala la Caña Vieja
pbMessage("¡Hola! ¿Te gusta pescar?")
pbMessage("¡Toma! ¡Te regalo mi vieja caña de pescar!")
if pbReceiveItem(:OLDROD)
  pbMessage("Para usarla, ábrela desde tu mochila mientras miras al agua.")
  pbMessage("¡Buena suerte pescando!")
  pbSetSelfSwitch(@event_id, "A", true)
end

Zona de pesca especial

Puedes crear zonas de pesca con tablas de encuentro únicas usando eventos que inician la pesca directamente:

# Evento de pesca especial (ej: estanque privado)
pbMessage("Este es un estanque especial de pesca.")
if pbConfirmMessage("¿Quieres pescar aquí?")
  # Inicia pesca con una caña específica sin necesidad de que el jugador la tenga
  pbFishing(true, 2)  # 2 = SuperRod
end

Pesca en Cadena (Chain Fishing)

La pesca en cadena (chain fishing) es una mecánica presente en los juegos de Pokémon de la sexta generación en adelante, que aumenta las probabilidades de encontrar un Pokémon shiny al pescar de forma consecutiva sin fallar ni moverse.

Cómo funciona

  1. El jugador pesca y encuentra un Pokémon (no importa si lo captura, lo derrota o huye).
  2. Sin moverse de la posición actual, el jugador vuelve a pescar.
  3. Cada pesca exitosa consecutiva incrementa un contador de cadena.
  4. A mayor cadena, mayor probabilidad de encontrar un Pokémon shiny.
  5. La cadena se rompe si el jugador se mueve, falla una pesca o cierra el juego.

Implementación

En Pokémon Essentials estándar, la pesca en cadena no está implementada por defecto. Para añadirla, puedes usar el siguiente código como base:

# Sistema de pesca en cadena
# Añadir a los scripts del proyecto

class PokemonGlobalMetadata
  attr_accessor :fishing_chain
end

# Incrementar cadena al pescar exitosamente
Events.onWildBattleEnd += proc { |_sender, e|
  result = e[0]   # Resultado de la batalla
  if $PokemonGlobal.fishing_chain
    if result != 3  # Si no huyó
      $PokemonGlobal.fishing_chain += 1
    end
  end
}

# Resetear cadena al moverse
Events.onStepTaken += proc {
  if $PokemonGlobal.fishing_chain && $PokemonGlobal.fishing_chain > 0
    $PokemonGlobal.fishing_chain = 0
  end
}

# Modificar probabilidad shiny según la cadena
Events.onWildPokemonCreate += proc { |_sender, e|
  pokemon = e[0]
  chain = $PokemonGlobal.fishing_chain || 0
  if chain > 0
    # Cada eslabón de la cadena suma ~1/200 de probabilidad shiny
    shiny_rolls = [chain, 20].min  # Máximo 20 intentos extra
    shiny_rolls.times do
      pokemon.shiny = true if rand(4096) == 0
    end
  end
}

Tabla de probabilidades con cadena

Cadena Probabilidad Shiny Aproximada
0 (sin cadena)1/4096 (~0.024%)
5~1/683
10~1/410
15~1/273
20+~1/205

Personalización del Minijuego de Pesca

Puedes personalizar varios aspectos de la mecánica de pesca:

Tiempo de espera

# Modificar el tiempo máximo de espera antes del pique
# En el script de pesca, busca la sección de timing:
FISHING_WAIT_MIN = 2   # Segundos mínimos de espera
FISHING_WAIT_MAX = 6   # Segundos máximos de espera

Ventana de reacción

# Tiempo que el jugador tiene para pulsar el botón al detectar el pique
FISHING_REACTION_TIME = 60  # Frames (60 = 1 segundo a 60 FPS)

Mensaje de pique personalizado

# Cambiar los mensajes de pesca
def pbFishingMessages
  messages = {
    cast:     "Has lanzado la caña...",
    wait:     "...",
    bite:     "¡Oh! ¡Un pique!",
    miss:     "Se ha escapado...",
    reel_in:  "¡Has pescado un Pokémon!",
    nothing:  "Parece que no pica nada..."
  }
  return messages
end

Habilidades que Afectan la Pesca

Algunas habilidades Pokémon influyen en los encuentros de pesca:

Habilidad Efecto en Pesca
Ventosa (Suction Cups) Aumenta la probabilidad de que un Pokémon muerda el anzuelo si el Pokémon con esta habilidad está primero en el equipo.
Viscosidad (Sticky Hold) Mismo efecto que Ventosa: aumenta los piques.
Intimidación (Intimidate) Reduce los encuentros con Pokémon de nivel bajo.
Presión (Pressure) Aumenta la probabilidad de encontrar Pokémon de nivel alto.

Definir Encuentros de Pesca por Mapa

Cada mapa puede tener sus propias tablas de encuentros de pesca. Es importante diseñar tablas coherentes con el tema del mapa:

Ejemplo: Ruta costera

[032]  # Mapa: Ruta costera
OldRod,5
  MAGIKARP,5,10
  TENTACOOL,5,10
GoodRod,4
  MAGIKARP,10,20
  TENTACOOL,10,15
  HORSEA,15,20
  KRABBY,15,20
SuperRod,3
  GYARADOS,30,40
  TENTACRUEL,30,35
  SEADRA,30,35
  KINGLER,30,35
  STARYU,25,35

Ejemplo: Lago tranquilo

[045]  # Mapa: Lago tranquilo
OldRod,5
  MAGIKARP,5,10
  GOLDEEN,5,10
GoodRod,4
  POLIWAG,15,20
  GOLDEEN,15,20
  PSYDUCK,15,20
SuperRod,3
  POLIWHIRL,30,35
  SEAKING,30,35
  GOLDUCK,30,35
  DRATINI,20,30
  DRAGONAIR,30,40

Ejemplo: Cueva subterránea con agua

[078]  # Mapa: Cueva submarina
OldRod,2
  MAGIKARP,10,15
  BARBOACH,10,15
GoodRod,3
  BARBOACH,15,25
  WHISCASH,20,25
  CORPHISH,15,20
SuperRod,2
  WHISCASH,30,40
  CRAWDAUNT,30,40
  FEEBAS,20,25

Resolución de Problemas

No aparece ningún Pokémon al pescar

Siempre aparece el mismo Pokémon

La caña no funciona desde la mochila

Los niveles de los Pokémon pescados son incorrectos