FANDOM


Esta página explica cómo crear un método de encuentro con un Pokémon salvaje nuevo.

Hay dos pasos para agregar un método de encuentro nuevo:

  1. Definirlo (hacer que el juego reconozca que es un método de encuentro)
  2. Hacerlo funcionar (cambiar la lista de encuentros salvajes para incluir el método nuevo)

En esta página se agregará LandAfternoon como un ejemplo. El código adicional necesario para esta método de encuentra estará resaltado.

Ver también Editar

Encuentros con salvajes Sobre cómo configurar los encuentros con Pokémon salvajes.

Definir un método de encuentro Editar

Todos los métodos de encuentro están definidos en la parte superior del script PField_Encounters, en el module EncounterTypes. Se necesita agregar información en este módulo para definir un método de encuentro nuevo.

Cada parte del módulo lista todos los métodos de encuentro, en la que se asocian distintos valores a cada método. Los métodos deben estar listados en el mismo orden todas las veces.

La primera parte es sencilla. Se trata de una lista de los métodos existentes, cada uno con su número de identificación único. Las palabras usadas aquí son usadas para las referencias en los scripts, generalmente como EncounterTypes::RockSmash.

Land         = 0
Cave         = 1
Water        = 2
RockSmash    = 3
OldRod       = 4
GoodRod      = 5
SuperRod     = 6
HeadbuttLow  = 7
HeadbuttHigh = 8
LandMorning  = 9
LandDay      = 10
LandNight    = 11
BugContest   = 12
LandAfternoon = 13

La segunfa parte también es sencilla. Éstos son los nombres de los métodos de encuentro como deben estar escritos en el archivo PBS "encounters.txt". Estos nombres suelen ser exactamente los mismos que los de la parte anterior.

Names=[
   "Land",
   "Cave",
   "Water",
   "RockSmash",
   "OldRod",
   "GoodRod",
   "SuperRod",
   "HeadbuttLow",
   "HeadbuttHigh",
   "LandMorning",
   "LandDay",
   "LandNight",
   "BugContest",
   "LandAfternoon"
]

La siguiente parte es la definición de la cantidad de lugares disponibles para cada método de encuentro, así como las probabilidades relativas de cada lugar. La cantidad de lugares de encuentro indica la cantidad de números que se ingresan en la línea, siendo cada número la probabilidad de ser elegido ese lugar.

Por ejemplo, la primera entrada de este arreglo es para el método de encuentro "Land". Éste contiene 12 números, lo que significa que deben haber exactamente 12 lugares de encuentros cada vez que se lo utilice. El primer número es 20 y el último es 1; esto significa que el encuentro del primer lugar es 20 veces más probable de ser elegido que el último lugar.

Por conveniencia, todos los métodos de encuentro existentes tienen un juego de números que suman siempre 100. Por esta razón, los números utilizados pueden verse como la probabilidad de que dicho puesto sea elegido. Sin embardo, no necesariamente deben sumar 100. Puedes tener un método de encuentro con que utilice [1,1,1], donde tendrás 3 lugares con el 33,3% de probabilidades de ser elegigo cada uno.

EnctypeChances=[
   [20,20,10,10,10,10,5,5,4,4,1,1],
   [20,20,10,10,10,10,5,5,4,4,1,1],
   [60,30,5,4,1],
   [60,30,5,4,1],
   [70,30],
   [60,20,20],
   [40,40,15,4,1],
   [30,25,20,10,5,5,4,1],
   [30,25,20,10,5,5,4,1],
   [20,20,10,10,10,10,5,5,4,4,1,1],
   [20,20,10,10,10,10,5,5,4,4,1,1],
   [20,20,10,10,10,10,5,5,4,4,1,1],
   [20,20,10,10,10,10,5,5,4,4,1,1],
   [20,20,10,10,10,10,5,5,4,4,1,1]
]

La siguiente parte establece las densidades de encuentro por defecto para cada método. Estos valores serán usados si un mapa no tiene definido sus propias densidades en el archivo PBS "encounters.txt".

La densidad de un encuentro es la probabilidad de que ocurra ese encuentro a cada paso del jugador sobre el mapa. Sin tener en cuenta las situaciones que modifican ese número, la probabilidad es la densidad del encuentro dividida en 180. A valor más alto, mayor será la frecuencia de los encuentros. Los métodos del tipo "Land" tienen mayor densidad que los de tipo "Water" o "Cave", porque los de "Land" pueden ocurrir solamente sobre hierba alta (de la que el jugador puede salir), mientras que los otros tipos pueden suceder en cualquier momento (no hay ningún lugar donde puedas nadar o cruzar una cueva sin que pueda ocurrir un encuentro).

Obviamente, ésto es irrelevante para ciertos métodos, es decir, aquellos que se disparan por otros métodos que no sean moviéndose (romper rocas, pescar, etc.). Para estos métodos, se utiliza el valor 0.

Cada valor puede ser diferente. Sin embargo, si un mapa define sus propias densidades, se usará el mismo valor para todos los métodos de tipo "Land", otro valor para todos los de tipo "Cave" y un tercer valor para todos los de tipo "Water".}

EnctypeDensities=[25,10,10,0,0,0,0,0,0,25,25,25,25,25]

La última parte está relacionada con las densidades definidas en la parte anterior. Este arreglo define los métodos que serán de tipo "Land" (1), "Cave" (2) o "Water" (3). Se usa 0 para los métodos de encuentro que no utilizan densidades.

Por defecto, un mapa puede difinir sus densidades solamente con tres números. Sin embargo, pueden haber más de tres (no pueden haber menos). En ésta última parte, si se define un método como tipo 4 (por ejemplo), y luego se agrega un cuarto número a las densidades definidas para un mapa en el archivo PBS "encounters.txt", solamente los métodos de encuentro de tipo 4 usarán ese cuarto número para su densidad. También se podría usar ésto para, digamos, hacer que el tipo "LandNight" tenga una densidad diferente a "Land", configurando "LandNight" como tipo 4 y estableciendo su densidad de forma separada.

EnctypeCompileDens=[1,2,3,0,0,0,0,0,0,1,1,1,1,1]

Métodos de encuentro exclusivos mutuamente Editar

Algunos métodos de encuentro tienen restricciones sobre cómo y cuándo pueden ser utilizados. El único ejemplo de ésto que está en Essentials es respecto al tipo "Cave" que no puede ser usado en el mismo mapa que tiene el método de encuentro "Land" (o similares); y viceversa.

Es exclusividad mutua está definida en def pbCompileEncounters del script Compiler:

if thisenc && (thisenc[1][EncounterTypes::Land] ||
               thisenc[1][EncounterTypes::LandMorning] ||
               thisenc[1][EncounterTypes::LandDay] ||
               thisenc[1][EncounterTypes::LandNight] ||
               thisenc[1][EncounterTypes::BugContest] ||
               thisenc[1][EncounterTypes::LandEvening]) &&
               thisenc[1][EncounterTypes::Cave]
  raise _INTL("No se pueden definir encuentros en Campo y Cueva en la misma área (mapa ID {1})",mapid)
end

Este código verifica si en un mapa se ha definido tanto el método de encuentro "Cave" como los tipo "Land", en caso afirmativo, se produce un mensaje de error.

Hay un código similar en def pbNewEncounterType del script Editor. Es este caso, se utiliza para evitar que el usuario utilice la opción "Setear Encuentros" del depurador para definir un mapa con ambos métodos de encuentro incompatibles.

En caso que se esté agregando un método de encuentro nuevo y que sea incompatible con uno o más métodos, se deberá agregar las validaciones en estos códigos para evitar que sean utilizados en un mismo mapa.

Haciendo funcionar el método de encuentro Editar

Una vez que el método de encuentro ha sido definido apropiadamente, ahora será necesario modificar algunos script para hacerlo funcionar. Ésto podría no ser muy sencillo de hacer, depende del momento exacto donde se debería utilizar el método.

Hay dos formas posibles de utilizar un método de encuentro para disparar un encuentro salvaje:

  • Dando un paso: El juego decide cuál método de encuentro necesita usarse (a través de def pbEncounterType). Esta decisión puede depender de muchos factores, como el tipo de tile sobre el que el jugador está parado (por ejemplo, un tile de hierba alta), el mapa en el que está (por ejemplo, en cuevas), si está pasando algo en especial (por ejemplo, usando surf, o un Concurso Cazabichos en curso), y/o la hora del día.
  • Disparando un encuentro: La cosa que dispare un encuentro determinará el método que se utilice. Esto puede ser usando un objeto (por ejemplo, las cañas) o por usar un movimiento fuera de la batalla (por ejemplo, Golpe Roca, Golpe Cabeza).

También son posibles otras situaciones, pero las mencionadas son las únicas cosas que importan en los métodos de encuentro de Essentials.

Como siempre, una recomendación para agregar un método de encuentro nuevo es identificar un método existente que funcione de forma similar a la que deseamos agregar y copiarlo.

Métodos tipo "Dando un paso" Editar

El juego determina el método de encuentro que será utilizando en este punto. La decisión se realiza en def pbEncounterType, en el script PField_Encounters.

def pbEncounterType
  if $PokemonGlobal && $PokemonGlobal.surfing
    return EncounterTypes::Water
  elsif self.isCave?
    return EncounterTypes::Cave
  elsif self.isGrass?
    time=pbGetTimeNow
    enctype=EncounterTypes::Land
    enctype=EncounterTypes::LandNight if self.hasEncounter?(EncounterTypes::LandNight) && PBDayNight.isNight?(time)
    enctype=EncounterTypes::LandDay if self.hasEncounter?(EncounterTypes::LandDay) && PBDayNight.isDay?(time)
    enctype=EncounterTypes::LandMorning if self.hasEncounter?(EncounterTypes::LandMorning) && PBDayNight.isMorning?(time)
    if pbInBugContest? && self.hasEncounter?(EncounterTypes::BugContest)
      enctype=EncounterTypes::BugContest
    end
    return enctype
  end
  return -1
end


El objetivo de este método es determinar el método de encuentro a utilizar. El método devuelto por este código es el único encuentro que se probará.

Como se puede observar, hay tres secciones principales, que son:

  • Los encuentros si el jugador está surfeando (de tipo "Water")
  • Los encuentros si el jugador está en un mapa de cueva (de tipo "Cave")
  • Los encuentros si el jugador está sobre un tile de hierba (de tipo "Land")

Como se muestra arriba, los encuentros de tipo "Land" y "Cave" son mutuamente excluyentes. Por definición, los encuentros de tipo "Land" y "Water" también son mutuamente excluyentes, ya que no se puede estar caminando sobre tierra y usando surf al mismo tiempo. Sin embargo, sí se puede estar dentro de una cueva usando surf. Este método le da mayor prioridad a surf. Cuando se esté por agregar un método de encuentro nuevo, se deberá tener en cuenta si éste u otro método podría tomar prioridad en caso que ambos sean posibles en el mismo paso.

Se puede agregar todo el código que se desee aquí, para alterar o ampliar las condiciones en las que se tomará un método u otro. Las posibilidades son infinitas.

Los códigos self.isCave? y self.isGrass? verifican si en un mapa se han definido encuentros de tipo "Cave" o "Land" respectivamente. De forma similar, self.hasEncounter?(EncounterTypes::LandNight) verifica si hay algún encuentro "LandNight" definido. Sin embargo, hasta aquí no se ha asegurado que haya definido algún encuentro para el método de encuentro devuelto; el método de encuentro "Water" es devuelto sin asegurar ésto, por ejemplo.

Tenga en cuenta que ésto no realiza una verificación de si el jugador está sobre un tile de hierba. Esta verificar se realiza luego, mediante def isEncounterPossibleHere?. Este método tampoco depende necesariamente de si hay algún encuentro definido para el tipo de encuentro que usará. Todo lo que hace esta función es indicar si podría ser posible un encuentro en la ubicación actual (por ejemplo, no puedes tener un encuentro mientras te estás deslizando sobre el hielo).

Métodos tipo "Disparo" Editar

Este tipo de método de encuentros con Pokémon salvajes son posibles actualmente solo por el uso de un objeto (una caña) o por el uso de un movimiento fuera de batalla (Golpe Roca o Golpe Cabeza). En todos los casos, se llama a def pbEncounter con un parámetro que es el método de encuentro que se quiere utilizar. Así es como se determina el método de encuentro a utilizar.