Registrarse

[Essentials] Efectos en TerrainTags

Jessie

What goes around, comes around




Efectos en TerrainTags






Introducción






Una de las cosas que tiene en contra el Pokémon Essentials, es que si agregas demasiados eventos en un mapa, el desempeño del juego se reduce, a lo que se le conoce como "lag".
Sabiendo esto, pensé en una buena manera de deshacerse de eventos repetitivos, como el de Headbutt o el de Honeytree al colocar estos eventos en scripts que se activan al seleccionar un tile con un TerrainTag especifico.

Estoy seguro que existirán maneras más sencillas de hacerlo, pero para mí, de esta manera ha funcionado sin problemas.



Proceso






Como ejemplo usaré el tile de una basurero, que cada vez que lo seleccionas tendrás una probabilidad de 1/50 de encontrar "Restos/Leftovers".



Ahora tenemos que buscar un ID disponible para nuestro TerrainTag y agregarlo al tile seleccionado. Para este ejemplo usare el TerrainTag número 30, pero pueden usar el que deseen o más bien el que tengan disponible, es importante verificar que no este en uso, ya que de ser así el efecto que se tenía se podría ver modificado.

Dentro de una nueva sección en el editor de Scripts, definiremos nuestro nuevo TerrainTag.

Código:
module PBTerrain
  Basura = 30
end


Así de simple ya tenemos a nuestro nuevo TerrainTag definido con su propio ID.

Luego de esto, lo que sigue es entrar al modo debug en el juego y entrar al editor de TerrainTags, estando ahí seleccionamos el tileset y el tile que usaremos para el efecto, y le agregamos el ID que definimos antes.




Muy bien, ya tenemos nuestro TerrainTag y nuestro tile en orden, ahora lo que sigue es asegurarnos que al interactuar con ese tile suceda el efecto que deseamos, para esto necesitaremos hacer una pequeña edición a la instancia Scene_Map.

En nuestra misma sección nueva, debajo de donde definimos el ID de nuestro terrainTag nuevo, colocaremos las siguientes líneas de código para asegurarnos que nuestro TerrainTag sea capaz de interactuar con el jugador.

Código:
module PBTerrain
  Basura = 30
end

class Scene_Map

  alias update_2 update
  def update
    update_2
    if Input.trigger?(Input::C)
      case Kernel.pbFacingTerrainTag
      when PBTerrain::Basura; efecto_basura
      # when ID;
      end
    end
  end
 
end

def efecto_basura
  print "¡Soy un basurero!"
end


Bueno, quizás parezca algo confuso, pero en realidad es algo sencillo, hasta ahora nuestro script se divide en tres partes, el module PBTerrain para definir el ID de nuestro nuevo TerrainTag, La edición hecha al Scene_Map para asegurarnos que nuestro tile sea interactivo, y de último nuestra función, la cual será la encargada de crear el efecto deseado.

En Scene_Map, lo único que hicimos fue editar el método update, para esto usamos el comando alias el cual guarda la información previa de este método en una función nueva, en el ejemplo anterior, se guardo toda la información previa del método update dentro de una función llamada update_2 (puede ser cualquier nombre, siempre y cuando no exista), primero para asegurar que el contenido anterior del update se conserve, llamamos al update_2 desde el inicio y luego hacemos los cambios que necesitamos.
Primero se usa una condición para verificar que el jugador a oprimido la tecla C, o sea interactuar con el tile, si este es el caso, se verificará cual es el TerrainTag definido para el tile que el jugador tiene enfrente, para esto se usa la función Kernel.pbFacingTerrainTag, la cual es una función exclusiva de Pokémon Essentials y regresa el valor del ID del TerrainTag del tile enfrente del jugador.
Así que se hará una comprobación para verificar si el tile que está enfrente del jugador es el que tiene el ID 30.
Si se cumple esto último nuestro efecto ocurrirá. El efecto estará definido en la función efecto_basura (puede ser cualquier nombre), en el ejemplo hace algo simple, solo muestra un mensaje de alerta con un saludo.



Pero bueno, ese no es el efecto que deseamos, así que es hora de crear ese efecto. Para esto, primero pensamos en que es lo que queremos que suceda y asegurarnos que suceda.
En este ejemplo haremos que cada vez que se interactue con el tile, exista una probabilidad de 1/50 de obtener el objeto Restos/Leftovers, así que esto lo haremos de la siguiente manera.


Código:
def efecto_basura
  azar = rand(50)
   if azar == 1
      Kernel.pbItemBall(:LEFTOVER)
  end
end


Ahora, nuestra función generará un número al azar entre el 0 y 50 sin incluir el 50, y si ese número es igual a 1, entonces el jugador recibirá el objeto Restos/Leftovers.

Pero, que tal si queremos que se cree un mensaje cada vez que no se obtenga el objeto. Entonces crearemos un condicional adicional para este caso.


Código:
def efecto_basura
  azar = rand(50)
   if azar == 1
      Kernel.pbItemBall(:LEFTOVERS)
   else
    Kernel.pbMessage("Mmm, está vacío")
   end
end


En este caso, se producirá el mensaje al no tener suerte obteniendo el objeto.



Pero luego de varios intentos, finalmente obtienes lo que tanto buscabamos.




Conclusión





Como ya se han dado cuenta, no es algo demasiado complicado de hacer, es solo cuestión de saber que efecto o efectos se desea tener al momento de interactuar con el tile.

De igual manera, se puede agregar otros TerrainTag y agregarle el efecto que deseen, solo que tenga en cuenta que para efectos como el de HeadButt, no es solamente copiar y pegar el código que ya existe, porque eso solo causara errores.

Espero que les sirva para sus proyecto y eviten el uso excesivo de eventos por cada mapa >.<

Saludos.

 
Última edición:

Pistis

Profesional de WaH
Respuesta: Scripts en Tileset/Terrain(tag)

GUAU, esto es muy util, lo voy a insertar ya xD, yo que tengo miles de arboles de headbutt xD gracias a esto se va a reducir un poquillo mi lag, BUENISIMO APORTE

EDIT: Podrias poner un ejemplo del script de headbutt, es que no se que poner xD

Saludos y a darle caña ;D
 

Jessie

What goes around, comes around
Respuesta: Scripts en Tileset/Terrain(tag)

GUAU, esto es muy util, lo voy a insertar ya xD, yo que tengo miles de arboles de headbutt xD gracias a esto se va a reducir un poquillo mi lag, BUENISIMO APORTE

EDIT: Podrias poner un ejemplo del script de headbutt, es que no se que poner xD

Saludos y a darle caña ;D
Por supuesto, haré un script básico para headbutt y lo subire, aunque creo que podrías usar el ya existente.

Edito : para llamar el evento que trae essentials lo puedes hacer de esta manera pbHeadbutt, este scritp lo que hace es calcular la probabilidad de encuentro dependiendo de la posición del personaje con respecto a su ID num.
De esta manera la probabilidad de encuentro cambia de lugar a lugar, lo cual es algo bueno, pero si quieres puedo editar este script para que la probabilidad de encuentro sea igual para todos.
 
Última edición:

Jessie

What goes around, comes around
He actualizado este viejo tutorial.
Agregué nuevas imágenes y ahora se explica de una manera más sencilla como agregar efectos en los TerrainTags.

Saluods.
 
Arriba