Jessie
What goes around, comes around
Nuevo Encuentro Salvaje
Introducción
Cuando uno comienza a desarrollar un proyecto nuevo usando Pokémon Essentials, una de las primeras cosas que uno suele pensar en agregar son nuevos tipos de encuentros.
Aunque en la misma Wiki existe una explicación de como hacerlo, muchas veces suele ser algo confusa ya que este supone que el usuario ya ha leído otros temas relacionados en lugar de realizar una explicación un poco más detallada.
Así que para poder aprender la manera de agregar un nuevo tipo de encuentro salvaje, he decidido hacer este tutorial.
Proceso
Antes de comenzar hay que tener en cuenta que durante las actualizaciones de Pokémon Essentials, se pueden agregar o reducir el número o tipo de encuentros, así que como consejo, no le den solo copiar y pegar al código, intenten comprender como funciona, así pueden agregar o quitar tipos de encuentros a su antojo.
Para realizar un nuevo encuentro salvaje, se tiene que definir el nombre del encuentro, en este ejemplo usaré encuentro en Nieve.
Primero en la sección PField_Encounters crearemos un nuevo tipo de encuentro.
Código:
module EncounterTypes
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
Nieve = 13 # Agregamos el nuevo encuentro
Names=[
"Land",
"Cave",
"Water",
"RockSmash",
"OldRod",
"GoodRod",
"SuperRod",
"HeadbuttLow",
"HeadbuttHigh",
"LandMorning",
"LandDay",
"LandNight",
"BugContest",
"Nieve" # Agregamos el nombre que tendrá en el PBS
]
Ahora agregaremos el número de entradas que tendrá, por ejemplo para grass/hierba tiene 12 entradas para pokémon, mientras el de oldrod/caña vieja tiene solo 2, para este ejemplo le agregaré solo 5.
También agregaremos la densidad del encuentro, esto quiere decir la probabilidad de que salga un encuentro salvaje, solamente se agrega otro valor junto a los que ya existen.
Código:
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],
[25,25,20,20,10] # Tendrá 5 entradas, cada valor es el %
]
EnctypeDensities=[25,25,10,0,0,0,0,0,0,25,25,25,25 ,25] # al final se agrega un nuevo 25
# Aquí se agrega el tipo de encuentro, Land (1), Cave(2), Water(3), Otros(0)
EnctypeCompileDens=[1,2,3,0,0,0,0,0,0,1,1,1,1 ,1] # Será tipo 1, Land
Mas abajo encontraremos los encuentros definidos por tipo, por ejemplo isGrass? o isCave?, aquí agregaremos el nuestro.
Código:
def isNieve?
return false if @ density==nil
return @enctypes[EncounterTypes::Nieve] ? true : false
end
Ahora en la sección Compiler buscas la parte donde se guardan los tipos de encuentros y agregamos el nuevo tipo.
Lo que sucede en está sección está vinculado a la acción de copilar los datos de los PBS.
Código:
if thisenc && (thisenc[1][EncounterTypes::Land] ||
thisenc[1][EncounterTypes::LandMorning] ||
thisenc[1][EncounterTypes::LandDay] ||
thisenc[1][EncounterTypes::BugContest] ||
thisenc[1][EncounterTypes::LandNight] || # Agregamos un separador
thisenc[1][EncounterTypes::Nieve] ) && # Agregamos el nuevo encuentro
thisenc[1][EncounterTypes::Cave]
Ahora toca agregar la manera en la que sucederá el nuevo encuentro que hemos creado.
Para encuentros en Nieve, este se debe activar al caminar sobre un terreno en particular.
Primero vamos a la sección PField_Encounters y buscamos la siguiente función, para definir cuando sucederá nuestro nuevo tipo de encuentro.
Código:
def pbEncounterType
if $PokemonGlobal && $PokemonGlobal.surfing
return EncounterTypes::Water
elsif self.isCave?
return EncounterTypes::Cave
# Colocamos nuestro nuevo encuentro aquí
elsif self.isNieve? && pbGetTerrainTag($game_player)==PBTerrain::Nieve
return EncounterTypes::Nieve
#
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
Ahora buscaremos el siguiente método para definir bajo que condiciones será posible que suceda una batalla salvaje en cualquier mapa.
Código:
def isEncounterPossibleHere?
if $PokemonGlobal && $PokemonGlobal.surfing
return true
elsif pbGetTerrainTag($game_player)==PBTerrain::Ice
return false
elsif self.isCave?
return true
# Creamos un nuevo condicional para nuestro encuentro
else
if self.isNieve? && pbGetTerrainTag($game_player)==PBTerrain::Nieve
return true
#
elsif self.isGrass?
return pbIsGrassTag?($game_map.terrain_tag($game_player.x,$game_player.y))
end
end
return false
end
Lo que sigue es crear un nuevo terreno, para esto vamos al a sección PBTerrain y lo agregamos, en este ejemplo usaré el número 16 el cual será el Terrain del tile para el encuentro en nieve, pero deben asegurarse que ese número no esta ya en u
Código:
module PBTerrain
Ledge = 1
Grass = 2
Sand = 3
Rock = 4
DeepWater = 5
StillWater = 6
Water = 7
Waterfall = 8
WaterfallCrest = 9
TallGrass = 10
UnderwaterGrass = 11
Ice = 12
Neutral = 13
SootGrass = 14
Bridge = 15
Nieve = 16 # Agregamos nuestro terreno
Mas abajo, en esta misma sección, estará la lista de funciones que ayudan a determinar el tipo de terreno, ahí agregaremos el nuestro(esta parte es opcional, solo para cuando tengas varios terrenos en los que sucede el mismo tipo de encuentro)
Código:
def pbIsNieveTag?(tag)
return tag==PBTerrain::Nieve # Si el terreno es el mismo que el que definimos
end
Solo queda agregar el nuevo tipo de encuentro al archivo dentro de la carpeta PBS, encounters.txt y el número del TerrainTag usado al tile que servirá como tile de nieve para este tipo de encuentro salvaje.
El archivo PBS quedaría algo así :
Código:
#########################
001 # Ruta 001
25,10,10
Nieve
PIDGEY,5
PIDGEY,5
PIDGEY,5
PIDGEY,5
PIDGEY,5
Conclusión
Como pueden ver, quizás parezca un poco confuso, pero si siguen las instrucciones e intentar comprender como funciona en lugar de solo dar copiar y pegar al código, verán que no es tan complicado agregar un nuevo tipo de encuentro.
Adicionalmente, he creado un script que sirve de base para realizar todo esto, pero les suguiero que lean este tutorial para que sea más sencillo entender como funcionan los encuentros salvajes, pero si así lo desean pueden revisar el script desde JessWishesDev en la sección de aprendizaje/Recursos.
Espero que les sirva para sus proyecto.
Saludos.
Última edición: