Autores
AlecGW, Xaveriux
Introducción
¡Hola a todos! Como muchos sabréis, en Essentials algunos tiles necesitan un valor para asignarles un efecto en concreto, como la hierba alta para que aparezcan Pokémon, el agua para surfear o para bucear… Esos valores son conocidos como terrain tags.Pues bien, el objeto de este tutorial es añadir dicho valor a una mecánica que, por defecto, en Essentials no existe, como es el uso de Golpe Cabeza, un movimiento que nos permite encontrar Pokémon que habitan en algunos árboles al golpearlos.
Si estás desarrollando un fangame que aprovecha mucho esta posibilidad, pero lo estás haciendo por medio de eventos, esto puede ocasionar problemas de rendimiento y de lag si se sitúan en mapas grandes o con muchos eventos simultáneos.
Por ello, vamos a ver cómo podemos ahorrarnos la tediosa tarea de asignar eventos de Golpe Cabeza a cada tile que corresponda con el árbol que queremos que tenga ese comportamiento.
1º Asignando un terrain tag al movimiento Golpe Cabeza
En primer lugar, abrimos el editor de script pulsando F11 o bien haciendo click en el icono de la hoja en la barra superior y añadimos la siguiente línea al final de la lista que aparece al inicio del script PBTerrain:Headbutt = 17
Por defecto, Essentials trae una lista de 16 terrain tag, por eso el número que utilizo es 17, ya que es el siguiente. Si has añadido otros terrain tag antes que este, usa el número siguiente al último que tengas en la misma.
A continuación, añadimos estas líneas de código antes del último “end” del mismo script PBTerrain:
def PBTerrain.isHeadbutt?(tag)
return tag == PBTerrain::Headbutt
end
Para acabar con este apartado, reemplazamos el código de la sección Headbutt en el script PField_HiddenMoves (si usáis una versión 17.2, el script se llamará PField_FieldMoves) por este:
#===============================================================================
# Headbutt
#===============================================================================
def Kernel.pbHeadbuttEffect(event)
a=((event[1]*event[2]+event[1]*event[2])/5)%10
b=($Trainer.id&0xFFFF)%10
chance=1
if a==b
chance=8
elsif a>b && (a-b).abs<5
chance=5
elsif a<b && (a-b).abs>5
chance=5
end
if rand(10)>=chance
Kernel.pbMessage(_INTL("Nope. Nothing..."))
else
if !pbEncounter(chance==1 ? EncounterTypes::HeadbuttLow : EncounterTypes::HeadbuttHigh)
Kernel.pbMessage(_INTL("Nope. Nothing..."))
end
end
end
def Kernel.pbHeadbutt(event)
movefinder=Kernel.pbCheckMove(:HEADBUTT)
if $DEBUG || movefinder
if Kernel.pbConfirmMessage(_INTL("A Pokémon could be in this tree. Would you like to use Headbutt?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Headbutt!",speciesname))
pbHiddenMoveAnimation(movefinder)
Kernel.pbHeadbuttEffect(event)
end
else
Kernel.pbMessage(_INTL("A Pokémon could be in this tree. Maybe a Pokémon could shake it."))
end
Input.update
return
end
Events.onAction+=proc{|sender,e|
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if PBTerrain.isHeadbutt?(terrain)
Kernel.pbHeadbutt(pbFacingTile)
return
end
}
HiddenMoveHandlers::CanUseMove.add(:HEADBUTT,proc{|move,pkmn|
facingEvent=$game_player.pbFacingEvent
if !facingEvent || facingEvent.name!="HeadbuttTree"
Kernel.pbMessage(_INTL("Can't use that here."))
return false
end
return true
})
HiddenMoveHandlers::UseMove.add(:HEADBUTT,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
facingEvent=$game_player.pbFacingEvent
Kernel.pbHeadbuttEffect(facingEvent)
})
2º Asignando el valor del Terrain Tag al tile
Para que nuestro tile de árbol funcione con el efecto que queremos, debemos asignarle el valor que hemos puesto en la lista del principio del tutorial, esto es, el 17. Para ello, desde el Editor o desde el modo Debug accedemos al tileset utilizando la opción “Edit Terrain Tags”, y nos dirigimos hacia el tile que queremos que tenga el valor de terrain tag Golpe Cabeza, tal que así:3º Determinar encounters y testear
Una vez tengamos nuestro valor de terrain tag correctamente asignado al tile en cuestión, solo queda mapearlo donde queramos, asignar encuentros salvajes al mapa donde se encuentre dicho tile y ya estaría todo, solo testear si funciona. (Para asignar encounters 🡪 https://essentialsdocs.fandom.com/wiki/Wild_encounters)Espero que os sirva de ayuda y que podáis usarlo sin problemas en vuestros fangames ¡Un saludo!
P.D: Esta tutorial ha sido testeado en una versión 17.2 de Essentials. No creo que dé problemas en versiones anteriores salvo que sean muy antiguas. En cualquier caso, podréis reportar los posibles errores que surjan desde el blog o desde el Discord de la comunidad.
Como siempre, enlazaros a nuestro canal de Discord, donde podéis recibir feedback y ayuda en vuestros proyectos de Pokémon Essentials, y a nuestro Twitter donde podéis enteraros de todas nuestras novedades. Tampoco olvidéis suscribiros a nuestro blog para estar pendientes de todo.
Puedes ver otros aportes en:
Comentarios
Publicar un comentario