Registrarse

[Essentials] TODO sobre las Etiquetas de Terreno (o Terrain Tags) [16.X y 17.X]

Rivi

It was me, Rivi!
¡Muy buenas, gentecilla!
He visto varios tutoriales en el foro sobre las Etiquetas de Terreno (o también conocidas como Terrain Tags), pero en cada uno se explica una cosa, está desactualizado o las imágenes están caídas. Por eso me he propuesto hacer un tutorial completo explicando estos puntos:

- Terrain Tags, ¿qué son y para que sirven?
- ¿Qué función tiene cada una?
- Cómo asignar Terrain Tags a un Tileset.
- Cómo crear una Terrain Tag básica.
- Cómo crear una Terrain Tag avanzada.

NOTA: En este tutorial se hablará de las versiones 16.X y 17.X.

¿Estáis listos? ¡¡SÍ CAPITÁN!! ¡Pues allá vamos!

Terrain Tags, ¿qué son y para qué sirven?
Empecemos explicando qué son las Etiquetas de Terreno...

Rivi, ¿qué son las...? Ah, vale...

Las Etiquetas de Terreno o "Terrain Tags" son unas características que se le pueden agregar a un tile. Estas características son representadas por números, por lo tanto, dependiendo del tile que sea, deberíamos darle un valor u otro; más adelante vamos a ver esto.

Dependiendo de la versión de Essentials que utilices encontraremos varias por defecto:

- En Essentials 16.X encontraremos números del 0 al 15.
- En la base de Pira (16.3) creo que podemos encontrar 2 Terrain Tags más.​

- En Essentials 17.X encontraremos números del 0 al 16.

¿Qué función tiene cada una?

Ahora veremos las características que corresponden a cada etiqueta y en la versión que aparece. También podemos consultar la tabla aquí.

Etiqueta de TerrenoVersión de EssentialsEfecto
0. Default
16.X / 17.X​
Esta etiqueta será la que viene por defecto en cada tile al crear por primera vez un Tileset. La usaremos para las zonas donde el personaje puede caminar.​

1. Ledge
16.X / 17.X​
Esta etiqueta se la asignaremos a los bloques que queremos saltar, como por ejemplo los barrancos de Pokémon. El personaje saltará 2 bloques hacia la dirección deseada.​

2. Grass
16.X / 17.X​
Esta etiqueta contiene toda la información sobre la hierba alta, incluidas las animaciones. Se la tenemos que agregar a los tiles de hierba para que aparezcan Pokémon Salvajes.​

3. Sand
16.X / 17.X​
Esta etiqueta se la tenemos que agregar a la arena o caminos arenosos. Podemos agregarle un script de "footprints" para que quede más realista.​

4. Rock
16.X / 17.X​
Es como la etiqueta 2,
pero se usa en cuevas.​

5. Deepwater
16.X / 17.X​
Usada en zonas de agua, donde se puede usar
la MO Buceo. Recomendable usarla
en mares con zonas profundas.​

6. Stillwater
16.X / 17.X​
Usada en zonas de agua, donde el personaje se verá reflejado en el agua. Recomendable usarla en lagos y estanques (donde el agua está tranquila).​

7. Water
16.X / 17.X​
Usada en zonas de agua. A diferencia de las otras el personaje no se verá reflejado ni podrá bucear.​

8. Waterfall
16.X / 17.X​
Etiqueta usada para el cuerpo de una cascada. Si está frente a una y usa la MO Cascada, el personaje ascenderá automáticamente por esta.​

9. Waterfall
Crest
16.X / 17.X​
Etiqueta usada para la parte superior de una cascada. Si el personaje se acerca a ella, éste descendera por la cascada automáticamente.​

10. TallGrass
16.X / 17.X​
Correspondiente a la hierba muy alta de la 3ra Gen.

Para configurar las prioridades de
esta hierba, échale un ojo a la Wiki
de Pokémon Essentials
| Terrain Tags

11. Underwater
Grass
16.X / 17.X​
Lo mismo que la etiqueta 2, pero bajo el agua.​

12. Ice
16.X / 17.X​
Usada para los bloques deslizantes, como el hielo.​

13. Neutral
16.X / 17.X​
No tienen ningún efecto, pero podemos usarlos para configurar uno (lo veremos más adelante...).​

14. SootGrass
16.X / 17.X​
Es como la zona de hierba con ceniza de la 3ra Gen. Si tenemos el Saco Hollín, se añadirá +1 a la variable "$PokemonGlobal.sootsack".​

15. Bridge
16.X / 17.X​
Usado para los puentes. Hay un vídeo de Fastbit que explica muy bien cómo hacer funcionar un puente.
--- Zelda ---

16. Puddle
16.3 / 17.X​
Usada para Charcos. Para que funcione esta etiqueta de terreno tenemos que usar 2 capas.

En la Capa 1 colocamos un par de tiles con transparencia por dentro, como por ejemplo:



En la Capa 2 colocamos el tile donde el personaje se reflejará (este llevará la etiqueta 16 mientras que el otro lleva la etiqueta de terreno 0).​
17. Desert
16.3​
No he investigado mucho sobre este terreno, pero puede que sea para un tipo de tierra desértica, posiblemente con encuentros de Pokémon salvajes.​

Con esto ya deberíamos saber qué etiqueta ponerle a cada tile. Se pueden crear más etiquetas y añadirles efectos, pero esto lo veremos más adelante. Pasemos al siguiente apartado.

Cómo asignar Terrain Tags en un Tileset

No voy a explicar lo que es un Tileset, todo el mundo aquí debería saberlo.

Rivi, ¿qué es u...? UN TILESET ES UN CONJUNTO DE TILES. CÁLLATE YA, POR FAVOR.
Lo siento, son las voces de mi cabeza...

Hay 2 maneras de asignar una etiqueta a un Tile:

- Desde el propio RPG Maker: Con esta opción es muy fácil agregar etiquetas, pero sólo podremos hacerlo de la 0 a la 7.

- Desde el Editor.exe / Menú de Debug: Con esta opción es más complicado agregar etiquetas, pero podemos agregarlas todas (de la 0 hasta las que tengamos).

Voy a explicar las 2 maneras.

Abrimos RPG Maker XP con nuestro Proyecto y vamos a la Base de Datos (o pulsamos F9). En la pestaña Tilesets tendremos un panel a la
derecha con un botón llamado Elegir Terreno.

Haciendo clic en las casillas aumentaremos +1 el número dentro de ellas hasta llegar a 7. Si le sumamos un clic al 7, éste volverá a 0.



Esto sería todo desde el programa.

En la 16.X tendremos un archivo en la carpeta del proyecto llamado Editor.exe. Desde ahí podremos entrar directamente.



En la 17.X tendremos que acceder desde Probar Juego en RPG Maker (F12). Posteriormente, en la pantalla donde aparece la partida guardada o Nueva Partida, nos dirigimos hacia abajo y seleccionamos Debug.



Los controles del menú de Debug son iguales que los del juego | C = Aceptar; X = Cancelar.

Cuando ya estamos en el menú de Debug, nos dirigimos al apartado Editor de información y, posteriormente, a Editar etiquetas de terreno. (Puede que esto último en la 16.X sea diferente, pero igualmente está por ahí...)



Nos aparecerá un mensaje, le diremos que y cuando nos aparezca el primer Tileset que tenemos en nuestro proyecto podremos empezar. Para cambiar a otro Tileset tendremos que pulsar la Z y luego en Cambiar Tileset.



Para asignar etiquetas de terreno nos colocaremos encima de un Tile y apretaremos la C. A continuación podremos asignarle el número que queramos.



IMPORTANTE:
Para guardar los cambios desde el Debug guardaremos al salir del editor y deberemos cerrar el RPG Maker SIN GUARDAR. Al entrar de nuevo en RPG Maker y abrir el apartado de los tileset, las etiquetas de terreno superiores a 7 deberían aparecer sin número, así:



Cómo crear una Terrain Tag básica
En este punto del tutorial la cosa ya se empieza a poner seria, ya que nos pondremos a tocar la sección de scripts. Intentaré hacerlo lo más fácil posible, pero os recomiendo que leáis detenidamente el tutorial y, por si acaso, hagáis una COPIA DE RESPALDO de vuestro proyecto, por si la cosa se os complica.

Como antes he dicho, voy a explicar cómo hacerlo tanto para la versión 16.X como para la versión 17.X, a si que estad atentos por si aviso, ya que entre distintas versiones algunos de los scripts suelen cambiar ligeramente.

La Terrain Tag que vamos a crear ahora no tendrá nada configurado, a si que va a ser igual para ambas versiones. Empecemos...

Abrimos el editor de scripts en RPG Maker (o F11) y buscamos en el panel izquierdo la sección PBTerrain. Para crear una etiqueta de terreno vamos a necesitar añadir 2 cosas en esta sección:

- La primera es una etiqueta con un número asignado. En este caso he creado una etiqueta llamada WaH, y le he asignado el número 18. De este manera, cuando coloque el número 18 a un tile en el editor, estaré pisando la etiqueta de terreno WaH.


- La segunda cosa que haremos será copiar un par de líneas más abajo y pegarlas. Luego sustituiremos el nombre de las etiquetas copiadas en las líneas nuevas.


Con esto ya tendríamos una Terrain Tag básica, sin efectos visuales. En el siguiente punto empezaremos a ponerle ✨ cositas ✨.

Cómo crear una Terrain Tag Avanzada

Como ya sabemos, algunas Terrain Tags tienen efectos y características, como por ejemplo la 2: Animación de la hierba y encuentros salvajes. Lo que vamos a hacer en nuestra etiqueta de terreno nueva es agregarle un par de cosas.

Digamos que a nuestra etiqueta WaH vamos a agregarle la posibilidad de encuentros salvajes y que ese tile en especial refleje su imagen, como un charco.

En la sección PBTerrain, tenemos un par de características y entre ellas podemos encontrar def PBTerrain.hasReflections?(tag). Con este método podemos hacer que el evento que esté encima del tile con una etiqueta específica se refleje. Para añadir el reflejo a nuestra Terrain Tag tenemos que colocarla dentro de esta función, mirad como debería quedar el código:


Con esto tendríamos el reflejo añadido. Ahora toca configurar los encuentros con Pokémon salvajes.

Cambiamos de sección a PField_Encounters, que está un poco más abajo.


Primero debemos crear una nueva entrada en el módulo EncounterTypes, que aparece en las primeras líneas de esta sección. Vamos a crear uno llamado WaH para poder diferenciarlo.


Justo debajo de la imagen anterior tenemos el apartado EnctypeChances, EnctypeDensities y EnctypeCompileDens. Os explicaré para qué sirve cada uno:

- EnctypeChances es usado para la probabilidad (en %) de aparición de cada Pokémon que escribiremos en el archivo encounters.txt, de nuestra carpeta PBS. Como podéis ver hay 12 números, por lo tanto puede haber 12 Pokémon. Depende del orden que escribamos los Pokémon, tendrán un ratio de aparición distinto. También fijaos en que si sumamos los números de cada línea siempre van a dar 100%.​


- EnctypeDensities es usado para la densidad de encuentros. Cuanta menos densidad, menos Pokémon aparecerán. A mayor densidad, más encuentros salvajes habrán. Es como cuando entras a una cueva plagada de Zubats, que a cada paso te atacan 20.​


- EnctypeCompileDens es un número usado a la hora de editar el PBS para editar las densidades manualmente, porque si no, no serviría de nada la anterior. Estos dos últimos os podrán resultar algo confusos, pero más adelante lo veréis.​


Es hora de agregar a WaH cada uno de estos valores.

Si queremos hacerlo de manera fácil podemos copiar y pegar cada valor, pero vamos a hacerlo por nosotros mismos para que veáis a lo que me refiero.

Vamos con los EnctypeChances:​


La cantidad de Pokémon que podrán aparecer en nuestra etiqueta de terreno serán 7 con esas probabilidades.

Ahora es el turno de los EnctypeDensities:​




En realidad este número da igual, se podrá editar manualmente más adelante, puedes escribir el que quieras.

Por último, acabamos con EnctypeCompileDens.




Este último es importante, ya que nos servirá para editar el EnctypeDensities más adelante. Siempre tendremos que poner un número más alto para usarlo más tarde. Como aquí el número más alto era un 3, he puesto un 4.

También fijaos en que he puesto todas esas líneas en la última parte de cada sección. Esto es porque he escrito WaH como último EncounterType. Cada posición hace referencia a uno, según el número que tengan.

Okey, queda muy poquito para acabar. Ahora prestad atención porque se viene lo más complicado, aunque yo lo explicaré bien porque soy el puto amo.

Primero vamos a crear una función para los encuentros. Nos dirigimos a la línea 73 aprox y copiamos el contenido que sería este. Lo editamos como lo hicimos antes, pero esta vez colocaremos el tipo de encuentro que hemos creado.





Ahora tenemos que encontrar el método def pbEncounterType, que estará por la línea 100 aprox.



Vamos a escribir esta línea debajo de return EncounterTypes::Cave y encima de elsif self.isGrass?. Atención aquí, eh.

Enriquecido (Código BB):
  def pbEncounterType
    if $PokemonGlobal && $PokemonGlobal.surfing
      return EncounterTypes::Water
    elsif self.isCave?
      return EncounterTypes::Cave
    elsif PBTerrain.isTU ETIQUETA DE TERRENO?(pbGetTerrainTag($game_player))
      return EncounterTypes::TU ENCOUNTERTYPE
    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
TU ETIQUETA DE TERRENO es la que creamos arriba del todo, en la sección PBTerrain.

TU ENCOUNTERTYPE es la que creamos arriba del todo, en la sección PField_Encounters.

En mi caso las 2 se llamaban WaH, a si que me resulta fácil escribirlas.

Enriquecido (Código BB):
  def pbEncounterType
    if $PokemonGlobal && $PokemonGlobal.surfing
      return EncounterTypes::Water
    elsif self.isCave?
      return EncounterTypes::Cave
    elsif PBTerrain.isWaH?(pbGetTerrainTag($game_player))
      return EncounterTypes::WaH
    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
Esto era lo más difícil. Si has conseguido hacerlo, las dos cosas siguientes serán pan comido.

Justo debajo del método anterior, encontramos otro método llamado def isEncounterPossibleHere?, que aproximadamente estará por la línea 126.


Vamos a copiar las líneas 129 y 130 y luego las pegamos debajo, así:

Enriquecido (Código BB):
  def isEncounterPossibleHere?
    if $PokemonGlobal && $PokemonGlobal.surfing
      return true
    elsif PBTerrain.isIce?(pbGetTerrainTag($game_player))
      return false
    elsif self.isCave?
      return true
    elsif self.isGrass?
      return PBTerrain.isGrass?($game_map.terrain_tag($game_player.x,$game_player.y))
    end
    return false
  end
Enriquecido (Código BB):
  def isEncounterPossibleHere?
    if $PokemonGlobal && $PokemonGlobal.surfing
      return true
    elsif PBTerrain.isIce?(pbGetTerrainTag($game_player))
      return false
    elsif PBTerrain.isIce?(pbGetTerrainTag($game_player))
      return false
    elsif self.isCave?
      return true
    elsif self.isGrass?
      return PBTerrain.isGrass?($game_map.terrain_tag($game_player.x,$game_player.y))
    end
    return false
  end

Con esto copiado sólo falta editar 2 valores. Sustituimos PBTerrain.isIce? por PBTerrain.isTU ETIQUETA DE TERRENO? y return false por return true, así:

Enriquecido (Código BB):
  def isEncounterPossibleHere?
    if $PokemonGlobal && $PokemonGlobal.surfing
      return true
    elsif PBTerrain.isIce?(pbGetTerrainTag($game_player))
      return false
    elsif PBTerrain.isWaH?(pbGetTerrainTag($game_player))
      return true
    elsif self.isCave?
      return true
    elsif self.isGrass?
      return PBTerrain.isGrass?($game_map.terrain_tag($game_player.x,$game_player.y))
    end
    return false
  end
ATENCIÓN: Llega el cambio entre las diferentes versiones.

Falta lo último, pero no por ello menos importante. Si os acordáis estuvimos editando una cosa llamada EnctypeCompileDens, ¿no? Pues es hora de introducirlo.

Aquí es donde encontramos las diferencias entre las versiones.

Nos dirigimos a la sección Editor, que estará por abajo, cerca de Main. Tenemos que ir a la línea 2317 aprox. para encontrar este código.

Código:
def pbEncounterEditorDensity(enc)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Land])
  enc[0][EncounterTypes::Land]=Kernel.pbMessageChooseNumber(
     _INTL("Establecer la densidad de Pokémon en tierra (por defecto {1}).",
        EncounterTypes::EnctypeDensities[EncounterTypes::Land]),params)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Cave])
  enc[0][EncounterTypes::Cave]=Kernel.pbMessageChooseNumber(
     _INTL("Establecer la densidad de Pokémon en cuevas (por defecto {1}).",
        EncounterTypes::EnctypeDensities[EncounterTypes::Cave]),params)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Water])
  enc[0][EncounterTypes::Water]=Kernel.pbMessageChooseNumber(
      _INTL("Establecer la densidad de Pokémon en agua (por defecto {1}).",
         EncounterTypes::EnctypeDensities[EncounterTypes::Water]),params)
  for i in 0...EncounterTypes::EnctypeCompileDens.length
    t=EncounterTypes::EnctypeCompileDens[i]
    next if !t || t==0
    enc[0][i]=enc[0][EncounterTypes::Land] if t==1
    enc[0][i]=enc[0][EncounterTypes::Cave] if t==2
    enc[0][i]=enc[0][EncounterTypes::Water] if t==3
  end
end

A continuación mirad lo que añadí. Podéis copiar y pegar si lo deseáis, pero fijaos bien.

Código:
def pbEncounterEditorDensity(enc)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Land])
  enc[0][EncounterTypes::Land]=Kernel.pbMessageChooseNumber(
     _INTL("Establecer la densidad de Pokémon en tierra (por defecto {1}).",
        EncounterTypes::EnctypeDensities[EncounterTypes::Land]),params)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Cave])
  enc[0][EncounterTypes::Cave]=Kernel.pbMessageChooseNumber(
     _INTL("Establecer la densidad de Pokémon en cuevas (por defecto {1}).",
        EncounterTypes::EnctypeDensities[EncounterTypes::Cave]),params)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Water])
  enc[0][EncounterTypes::Water]=Kernel.pbMessageChooseNumber(
      _INTL("Establecer la densidad de Pokémon en agua (por defecto {1}).",
         EncounterTypes::EnctypeDensities[EncounterTypes::Water]),params)
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::WaH])
  enc[0][EncounterTypes::WaH]=Kernel.pbMessageChooseNumber(
     _INTL("Establecer la densidad de Pokémon en WaH (por defecto {1}).",
        EncounterTypes::EnctypeDensities[EncounterTypes::WaH]),params)
  for i in 0...EncounterTypes::EnctypeCompileDens.length
    t=EncounterTypes::EnctypeCompileDens[i]
    next if !t || t==0
    enc[0][i]=enc[0][EncounterTypes::Land] if t==1
    enc[0][i]=enc[0][EncounterTypes::Cave] if t==2
    enc[0][i]=enc[0][EncounterTypes::Water] if t==3
    enc[0][i]=enc[0][EncounterTypes::WaH] if t==4
  end
end

Para quien no lo vea he añadido este código entre EncounterTypes::EnctypeDensities[EncounterTypes::Water]),params) y for i in 0...EncounterTypes::EnctypeCompileDens.length. He cambiado Water por mi EncounterType, que era WaH.

Código:
  params=ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Water])
  enc[0][EncounterTypes::Water]=Kernel.pbMessageChooseNumber(
      _INTL("Establecer la densidad de Pokémon en agua (por defecto {1}).",
         EncounterTypes::EnctypeDensities[EncounterTypes::Water]),params)

Por último, al final de ese método he añadido enc[0][i]=enc[0][EncounterTypes::WaH] if t==4. El 4 hace referencia al número que escribimos en EnctypeCompileDens.

Esto sería todo en la 16.X

Nos dirigimos a la sección Editor_Screens. Nos dirigimos al principio y sobre la línea 9 sustituimos esto...

Código:
    commands.push(_INTL("Density: {1},{2},{3}",
       enc[0][EncounterTypes::Land],
       enc[0][EncounterTypes::Cave],
       enc[0][EncounterTypes::Water]))

...por esto.

Código:
    commands.push(_INTL("Density: {1},{2},{3},{4}",
       enc[0][EncounterTypes::Land],
       enc[0][EncounterTypes::Cave],
       enc[0][EncounterTypes::Water],
       enc[0][EncounterTypes::WaH]))

Ahora bajamos hasta la línea 149 aprox. Encontraremos esto:

Código:
def pbEncounterEditorDensity(enc)
  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Land])
  enc[0][EncounterTypes::Land] = Kernel.pbMessageChooseNumber(
     _INTL("Introduce la densidad en la hierba (default {1}).",
     EncounterTypes::EnctypeDensities[EncounterTypes::Land]),params)

  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Cave])
  enc[0][EncounterTypes::Cave] = Kernel.pbMessageChooseNumber(
     _INTL("Introduce la densidad en cuevas (default {1}).",
     EncounterTypes::EnctypeDensities[EncounterTypes::Cave]),params)

  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Water])
  enc[0][EncounterTypes::Water] = Kernel.pbMessageChooseNumber(
      _INTL("Introduce la densidad en el agua (default {1}).",
      EncounterTypes::EnctypeDensities[EncounterTypes::Water]),params)

  for i in 0...EncounterTypes::EnctypeCompileDens.length
    t = EncounterTypes::EnctypeCompileDens[i]
    next if !t || t==0
    enc[0][i] = enc[0][EncounterTypes::Land] if t==1
    enc[0][i] = enc[0][EncounterTypes::Cave] if t==2
    enc[0][i] = enc[0][EncounterTypes::Water] if t==3
  end
end

Copiamos esto y lo pegamos antes de for i in 0...EncounterTypes::EnctypeCompileDens.length

Código:
  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::TU ENCOUNTERTYPE])
  enc[0][EncounterTypes::TU ENCOUNTERTYPE] = Kernel.pbMessageChooseNumber(
     _INTL("Introduce la densidad en la TU ENCOUNTERTYPE (default {1}).",
     EncounterTypes::EnctypeDensities[EncounterTypes::TU ENCOUNTERTYPE]),params)

Por último, debajo de enc[0][i] = enc[0][EncounterTypes::Water] if t==3 añadimos:

Código:
    enc[0][i] = enc[0][EncounterTypes::TU ENCOUNTERTYPE] if t==4

Sustituimos todos los "TU ENCOUNTERTYPE" por el vuestro, o en mi caso WaH y quedaría así.

Código:
def pbEncounterEditorDensity(enc)
  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Land])
  enc[0][EncounterTypes::Land] = Kernel.pbMessageChooseNumber(
     _INTL("Introduce la densidad en la hierba (default {1}).",
     EncounterTypes::EnctypeDensities[EncounterTypes::Land]),params)

  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Cave])
  enc[0][EncounterTypes::Cave] = Kernel.pbMessageChooseNumber(
     _INTL("Introduce la densidad en cuevas (default {1}).",
     EncounterTypes::EnctypeDensities[EncounterTypes::Cave]),params)

  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::Water])
  enc[0][EncounterTypes::Water] = Kernel.pbMessageChooseNumber(
      _INTL("Introduce la densidad en el agua (default {1}).",
      EncounterTypes::EnctypeDensities[EncounterTypes::Water]),params)

  params = ChooseNumberParams.new
  params.setRange(0,100)
  params.setDefaultValue(enc[0][EncounterTypes::WaH])
  enc[0][EncounterTypes::WaH] = Kernel.pbMessageChooseNumber(
     _INTL("Introduce la densidad en WaH (default {1}).",
     EncounterTypes::EnctypeDensities[EncounterTypes::WaH]),params)

  for i in 0...EncounterTypes::EnctypeCompileDens.length
    t = EncounterTypes::EnctypeCompileDens[i]
    next if !t || t==0
    enc[0][i] = enc[0][EncounterTypes::Land] if t==1
    enc[0][i] = enc[0][EncounterTypes::Cave] if t==2
    enc[0][i] = enc[0][EncounterTypes::Water] if t==3
    enc[0][i] = enc[0][EncounterTypes::WaH] if t==4
  end
end

Esto sería todo en la 17.X

Pues con todo ya cambiado, estará lista nuestra nueva etiqueta de terreno.

Cabe destacar que para esta en especial necesitaréis configurarla como la terrain tag 16 (Puddle). En la Capa 1 ponéis un gráfico con transparencia por dentro y en la Capa 2 el tile donde se reflejará.

Si queremos configurar bien los encuentros, podemos hacerlo a través del Editor / Menú de Debug. Para guardar todos los cambios al editar los encuentros, después de editarlos tenemos que compilar los datos en el editor.


Pues nada, esto ha sido todo el tutorial. Espero haberos ayudado y si tenéis alguna duda podéis dejarla aquí o mandarme un mensaje privado. Incluso podéis hablarme por redes si no respondo.

¡Nos vemos!
 
Última edición:

Tito_Black

I'm just a boy acting like a goof...
Menudo PEDAZO de tutorial, explica perfectamente bien acerca de las terrain tag, algo tan importante en Pokémon Essentials, y a decir verdad, no conocía la forma de crear un terrain tag, lo que me habre un mundo de posibilidades.
Espero que se te cure el brazo amigo mío😘
 

Cheve

MoonLover~
Miembro de honor
¡Tremendo trabajo te mandaste amigo! Muy bien ordenado y con imágenes claras. ¡Gracias!
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Las tags no cambian en ninguna versión de essentials desde la 14, así que técnicamente es aplicable a 18 y 19
 

Rivi

It was me, Rivi!
Las tags no cambian en ninguna versión de essentials desde la 14, así que técnicamente es aplicable a 18 y 19
Las tags no cambian en ninguna versión, pero las secciones de scripts y cómo están escritos sí que cambian. En la 18.X no mucho, exceptuando la última parte de tutorial, pero he podido comprobar que en la 19.X sí que cambia.

Además, creo que hay bastante gente de la scene hispana que está usando la 16.X y/o la 17.X (o al menos es lo que veo).
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Las tags no cambian en ninguna versión, pero las secciones de scripts y cómo están escritos sí que cambian. En la 18.X no mucho, exceptuando la última parte de tutorial, pero he podido comprobar que en la 19.X sí que cambia.

Además, creo que hay bastante gente de la scene hispana que está usando la 16.X y/o la 17.X (o al menos es lo que veo).
Los tags se ampliaron en la 14, así como los métodos y accessors. No soy muy fan del GameData::TerrainTag de la 19 pero tampoco cambia tanto. Quien quiera tocar scripts tendrá que aprender a hacerlo.
 
Arriba