Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-----------------------------------------------------------------------------
- # Script creado por FiaPlay para Pokémon Essentials BW. Créditos si se usa
- # Discord de FP Systems: https://discord.gg/ds8DWB5NSW
- # Si vas reportar algún bug o preguntar algo recomiendo hacerlo en el hilo del server de PokeLiberty o en FP Systems.
- #Changelog:
- # PRIMER LANZAMIENTO DE LA VERSIÓN PARA ESSENTIALS BW (BASADO EN LA 2.3)
- #2.3 Cambio de nombre de las claves por otras más cortas y fáciles de recordar.
- # Añadida la posibilidad de poner un texto cuando se acaba un turno.
- # Ahora es posible definir un diáogo desde la llamada a Script.
- #2.2 Ahora puedes encadenar varios textos colocándolos en una Array. (Se muestran uno detrás de otro)
- # Añadida la posibilidad de poner un texto cuando se unvía un Pokémon Shiny.
- # Añadida la posibilidad de poner un texto cuando el último Pokémon del rival tiene pocos PS.
- # Corrección de errores y refactorización.
- #2.1.1 Solucionado Bug de incompatibilidad con el script de Entrenadores dinámicos.
- #2.1: Añadida la posibilidad de poner un texto cuando el jugador saca un Pokémon oscuro.
- # Añadida la posibilidad de poner un texto cuando el jugador saca su último Pokémon.
- # Añadida la posibilidad de poner un texto cuando un Pokémon recibe un golpe Super-Efectivo.
- # Añadida la posibilidad de poner un texto cuando un Pokémon recibe un golpe Poco-Efectivo.
- # Añadida la posibilidad de poner un texto cuando un Pokémon recibe un Golpe Crítico.
- # Solucionada incompatibilidad con mi script de Megaevolución de Pokémon Salvaje (Coloque este script debajo de ese).
- # Compatibilidad con este sistema de Dynamax: https://www.pokecommunity.com/showthread.php?t=426770
- # Corrección de errores.
- #2.0: Nueva forma de setear los textos (No pienso volver a cambiarla).
- # Eliminada la necesidad de usar variables de evento.
- # Ahora el rival puede decir algo cuando el jugador usa una de las mecánicas de batalla (Megaevolución,Ultraexplosión,etc...)
- # Ahora el rival puede decir algo cuando este saca un Pokémon en específico.
- # Añadida la posibilidad de reproducir un SE junto con los textos.
- #1.4: Eliminados los buffers de texto (Para ser sincero son innecesarios e incompatibles con los cambios de esta versión)
- # Ahora si un diálogo no está definido se omite. (En anteriores versiones se mostraba un texto en blanco.)
- # Ahora los textos se activan desde el mismo método que se setean. Se desactivan automáticamente al terminar la batalla.
- # Compatibilidad con el script de Movimientos Z.
- #1.3: Añadida la posiblidad de usar buffers de texto.
- # Añadido un método para revisar si hay una versión actualizada del script.
- #1.2: Añadida la posiblidad de usar varias músicas de último Pokémon.
- # Añadida la posibilidad de poner un texto cuando el rival usa un objeto.
- # Añadida la posibilidad de poner un texto cuando el rival saca un pokémon oscuro.
- # Añadida la posibilidad de poner un texto cuando capturas pokémon oscuro del rival.
- # Correción de errores (Incluido uno que viene por defecto en essentials).
- #1.1: Añadido un par de métodos para setear textos más facilmente.
- #1.0: Versión inicial.
- #-----------------------------------------------------------------------------
- # Demostración https://youtu.be/lHCQdq62Xh8 (2.0)
- #-----------------------------------------------------------------------------
- # Modo de uso:
- #Para activar los textos solo setealos usando el método fpTTS_set()
- #Entre paréntesis va un Symbol que es el nombre de la constante con los datos.
- =begin Para un ejemplo práctico pegue una de las siguientes líneas en una llamada a script
- fpTTS_set(:TEST_BW)
- fpTTS_set(:CHAMPION_BLUE)
- fpTTS_set(:LEADER_CHEREN)
- =end
- =begin Si lo que quiere es definirlo desde una llamada a Script (Ni idea de por qué) podría:
- dialogue={
- "mega" => "¡Voy con todo!",
- "super_effective_move(player)" => "Sabes lo que haces muchacho."
- }
- fpTTS_set(dialogue)
- =end
- #-----------------------------------------------------------------------------
- # FAQ:
- #*¿Para cuando videotutorial?
- # Para cuando tenga ganas.
- #
- #*Antes de iniciar cada batalla recibo unas alertas de que uso una versión no compatible.
- # Estás en una versión que no es la Essentials BW. Si estás en esta versión y recibes el error avísame por Discord.
- #
- #*¿Es compatible con combates dobles?
- # No deberías recibir mensajes de error, pero no prometo nada.
- #
- #*He recibido x error y me parece que es este script.
- # Avísame por el Discord. (Solo si de verdad crees que fue este script)
- #-----------------------------------------------------------------------------
- # Estas son las opciones cámbialas a como necesites.
- #-----------------------------------------------------------------------------
- TEXTSE = "" #SE que se reproducirá al aparecer el sprite del entrenador
- module MBD_Data
- #-----------------------------------------------------------------------------
- # En la siguiente constante están configurados todos los diálogos posibles.
- #-----------------------------------------------------------------------------
- TEST_BW={
- "last_bgm" => "Boss02",
- "last" => ["¡Ho, no. Es mi último Pokémon!","Pero todavía puedo luchar"],
- "last(player)" => "Te veo en un buen apuro.",
- "end_turn" => [0,["¿Qué haces?","Esto solo está empezando"]],
- "lowhp_last" => ["!No puede ser¡","¡ESTOY AL LÍMITE!"],
- "shiny" => ["¿Cómo ves mi brillo?","¿Es mucho para tí?"],
- "shiny(player)" => "¿De donde sacaste eso?",
- "mega" => "¡Qué importa solo debo usar la poderosa energía ancestral!",
- "mega(player)" => "No podía esperar menos de tí.",
- "send" => [:KYOGRE,"Tan solo admira mi Leviatán",:GROUDON,"Un poderoso Reptil Ígneo."],
- "item" => "No puedo dejar que esto termine tan rápido.",
- "shadow" => "No es inhumano , solo es un viejo truco.",
- "shadow(player)" => "Me sorprende verte usando un poder como ese.",
- "caught_poke" => "¡Cómo te atreves!",
- "critical_move" => "Tengo al universo de mi lado.",
- "critical_move(player)" => "Necesitarás más que suerte para vencerme.",
- "low_effective_move" => "Debo pensar mejor lo que hago.",
- "low_effective_move(player)" => ["Creí tenías más experiencia.","No puedes ganarme cometiendo errores."],
- "super_effective_move" => "Cometiste un greve error al meterte conmigo.",
- "super_effective_move(player)" => "Nada mal niño."
- }
- #-----------------------------------------------------------------------------
- # Esto sería para la batalla contra el campeón por defecto.
- #-----------------------------------------------------------------------------
- CHAMPION_BLUE={
- "last" => "No puedo dejar que me derrotes ahora.",
- "last(player)" => "Luego de tantos combtes por fin podré derotaré.",
- "end_turn" => [0,["Este combate solo está empezando.", "Todavía no te confies."]],
- "lowhp_last" => "Mientras tenga uno mi poder es infinito.",
- "send" => [:BLASTOISE,"Espero que sepas nadar.",:CHARIZARD,"Prepárate para pasar calor."],
- "item" => "Usaré todo lo que tenga a mano para vencerte.",
- "shadow(player)" => ["Veo que caiste en esa tentación.","No mereces nisiquiera retarme."],
- "critical_move(player)" => "Solo con eso no me ganarás.",
- "low_effective_move(player)" => "¿En qué estabas pensando?",
- "super_effective_move" => "Aprendí mucho con mi Pokedex."
- }
- #-----------------------------------------------------------------------------
- # Esto sería para la batalla contra Cheren.
- #-----------------------------------------------------------------------------
- LEADER_CHEREN={
- "last_bgm" => "elite",
- "last" => "Bien, pero si quieres la Medalla Base tendrás que luchar un poco más.",
- "end_turn" => [0,["¿Qué haces?","Esto solo está empezando."]],
- "shiny(player)" => ["Has buscado oro.","Pero su belleza no afecta su fuerza."],
- "send" => [:PATRAT,"Veamos de que estás hecho... Aspirante."],
- "mega(player)" => "Me parece muy temprano para que uses algo así.",
- "item" => "No puedo rendirme tan rápido.",
- "super_effective_move(player)" => "Jamás podrás acabar con mi determinación."
- }
- end
- #--------------------------------------------------------------------------------
- # A patir de aquí no toques nada a no ser que sepas bien lo que estás haciendo.
- #--------------------------------------------------------------------------------
- class PokeBattle_Battle
- #--------------------------------------------------------------------------------
- # Método que muestra los textos
- #--------------------------------------------------------------------------------
- def fpShowText(key="",mbu="",dtext=nil)
- return if !@opponent
- return if key==""
- return if !$tts[key]
- text = dtext ? dtext : $tts[key]
- return if $mbu.include?(mbu)
- @scene.pbShowOpponent(0,true)
- pbSEPlay(TEXTSE) if TEXTSE && TEXTSE!=""
- if text.is_a?(Array)
- for i in text
- pbDisplayPaused(i)
- end
- else
- pbDisplayPaused(text)
- end
- @scene.pbHideOpponent
- PBDebug.log("Díalogo Mostrado: #{text}")
- $mbu.push(mbu) if mbu!=""
- end
- #--------------------------------------------------------------------------------
- #Para el último Pokémon , los Pokémon específicos y los Pokémon Oscuros del jugador.
- #--------------------------------------------------------------------------------
- def pbSendOut(index,pokemon)
- pbSetSeen(pokemon)
- @peer.pbOnEnteringBattle(self,pokemon)
- if pbIsOpposing?(index)
- @scene.pbTrainerSendOut(index,pokemon)
- if (pbPokemonCount(@party2)>=2 || $tts["last"] == nil) && $tts["send"]
- for i in 0...$tts["send"].length/2
- name=pokemon.name
- if isConst?(pokemon.species,PBSpecies,$tts["send"][i*2]) && !$mbu.include?(name)
- fpShowText("send","opp#{name}",$tts["send"][i*2+1])
- end
- end
- end
- pbBGMPlay($tts["last_bgm"],100,100) if $tts["last_bgm"] && pbPokemonCount(@party2)==1
- fpShowText("last") if pbPokemonCount(@party2)==1
- else
- @scene.pbSendOut(index,pokemon)
- fpShowText("last(player)") if pbPokemonCount(@party1)==1
- @battle.fpShowText("shadow(player)","shadow(player)") if pokemon.isShadow?
- end
- @scene.pbResetMoveIndex(index)
- end
- #--------------------------------------------------------------------------------
- #Para la Megaevolución
- #--------------------------------------------------------------------------------
- def pbMegaEvolve(index)
- return if !@battlers[index] || !@battlers[index].pokemon
- return if !(@battlers[index].hasMega? rescue false)
- return if (@battlers[index].isMega? rescue true)
- ownername=pbGetOwner(index).fullname
- ownername=pbGetOwner(index).name if pbBelongsToPlayer?(index)
- fpShowText("mega") if pbIsOpposing?(index)
- pbDisplay(_INTL("¡La {2} de {1} está reaccionando al Mega Aro de {3}!",
- @battlers[index].pbThis,PBItems.getName(@battlers[index].item),
- ownername))
- pbCommonAnimation("MegaEvolution",@battlers[index],nil)
- @battlers[index].pokemon.makeMega
- @battlers[index].form=@battlers[index].pokemon.form
- @battlers[index].pbUpdate(true)
- @scene.pbChangePokemon(@battlers[index],@battlers[index].pokemon)
- meganame=(@battlers[index].pokemon.megaName rescue nil)
- if !meganame || meganame==""
- meganame=_INTL("Mega {1}",PBSpecies.getName(@battlers[index].pokemon.species))
- end
- pbDisplay(_INTL("¡{1} ha Mega Evolucionado en {2}!",@battlers[index].pbThis,meganame))
- fpShowText("mega(player)") if pbBelongsToPlayer?(index)
- PBDebug.log("[Mega Evolución] #{@battlers[index].pbThis} ha Mega Evolucionado")
- side=(pbIsOpposing?(index)) ? 1 : 0
- owner=pbGetOwnerIndex(index)
- @megaEvolution[side][owner]=-2
- end
- #--------------------------------------------------------------------------------
- # Para los objetos
- #--------------------------------------------------------------------------------
- def pbEnemyUseItem(item,battler)
- return 0 if !@internalbattle
- items=pbGetOwnerItems(battler.index)
- return if !items
- opponent=pbGetOwner(battler.index)
- for i in 0...items.length
- if items[i]==item
- items.delete_at(i)
- break
- end
- end
- fpShowText("item","item")
- itemname=PBItems.getName(item)
- pbDisplayBrief(_INTL("{1} used the\r\n{2}!",opponent.fullname,itemname))
- PBDebug.log("[Opponent used #{itemname}]")
- if isConst?(item,PBItems,:POTION)
- battler.pbRecoverHP(20,true)
- pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis))
- elsif isConst?(item,PBItems,:SUPERPOTION)
- battler.pbRecoverHP(50,true)
- pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis))
- elsif isConst?(item,PBItems,:HYPERPOTION)
- battler.pbRecoverHP(200,true)
- pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis))
- elsif isConst?(item,PBItems,:MAXPOTION)
- battler.pbRecoverHP(battler.totalhp-battler.hp,true)
- pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis))
- elsif isConst?(item,PBItems,:FULLRESTORE)
- fullhp=(battler.hp==battler.totalhp)
- battler.pbRecoverHP(battler.totalhp-battler.hp,true)
- battler.status=0; battler.statusCount=0
- battler.effects[PBEffects::Confusion]=0
- if fullhp
- pbDisplay(_INTL("{1} became healthy!",battler.pbThis))
- else
- pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis))
- end
- elsif isConst?(item,PBItems,:FULLHEAL)
- battler.status=0; battler.statusCount=0
- battler.effects[PBEffects::Confusion]=0
- pbDisplay(_INTL("{1} became healthy!",battler.pbThis))
- elsif isConst?(item,PBItems,:XATTACK)
- if battler.pbCanIncreaseStatStage?(PBStats::ATTACK)
- battler.pbIncreaseStat(PBStats::ATTACK,1,true)
- end
- elsif isConst?(item,PBItems,:XDEFEND)
- if battler.pbCanIncreaseStatStage?(PBStats::DEFENSE)
- battler.pbIncreaseStat(PBStats::DEFENSE,1,true)
- end
- elsif isConst?(item,PBItems,:XSPEED)
- if battler.pbCanIncreaseStatStage?(PBStats::SPEED)
- battler.pbIncreaseStat(PBStats::SPEED,1,true)
- end
- elsif isConst?(item,PBItems,:XSPECIAL)
- if battler.pbCanIncreaseStatStage?(PBStats::SPATK)
- battler.pbIncreaseStat(PBStats::SPATK,1,true)
- end
- elsif isConst?(item,PBItems,:XSPDEF)
- if battler.pbCanIncreaseStatStage?(PBStats::SPDEF)
- battler.pbIncreaseStat(PBStats::SPDEF,1,true)
- end
- elsif isConst?(item,PBItems,:XACCURACY)
- if battler.pbCanIncreaseStatStage?(PBStats::ACCURACY)
- battler.pbIncreaseStat(PBStats::ACCURACY,1,true)
- end
- end
- end
- #--------------------------------------------------------------------------------
- # Para los finales de turno y pocos PS en el último Pokémon
- #--------------------------------------------------------------------------------
- alias pbEndOfRoundPhase_fp pbEndOfRoundPhase
- def pbEndOfRoundPhase
- fpShowText("lowhp_last") if pbPokemonCount(@party2)==1 && @battlers[1].totalhp/2 >= @battlers[1].hp
- for i in 0...$tts["end_turn"].length/2
- if @turncount==$tts["end_turn"][i*2]
- fpShowText("end_turn","",$tts["end_turn"][i*2+1])
- end
- end
- pbEndOfRoundPhase_fp
- end
- end
- #--------------------------------------------------------------------------------
- # Para los golpes Super-Efectivos, Poco-Efectivos y Críticos
- #--------------------------------------------------------------------------------
- class PokeBattle_Move
- def pbEffectMessages(attacker,opponent,ignoretype=false)
- if opponent.damagestate.critical
- @battle.pbDisplay(_INTL("A critical hit!"))
- @battle.fpShowText("critical_move","critical_move") if @battle.pbIsOpposing?(attacker.index)
- @battle.fpShowText("critical_move(player)","critical_move(player)") if @battle.pbBelongsToPlayer?(attacker.index)
- end
- if !pbIsMultiHit
- if opponent.damagestate.typemod>4
- @battle.pbDisplay(_INTL("It's super effective!"))
- @battle.fpShowText("super_effective_move","super_effective_move") if @battle.pbIsOpposing?(attacker.index)
- @battle.fpShowText("super_effective_move(player)","super_effective_move(player)") if @battle.pbBelongsToPlayer?(attacker.index)
- elsif opponent.damagestate.typemod>=1 && opponent.damagestate.typemod<4
- @battle.pbDisplay(_INTL("It's not very effective..."))
- @battle.fpShowText("low_effective_move","low_effective_move") if @battle.pbIsOpposing?(attacker.index)
- @battle.fpShowText("low_effective_move(player)","low_effective_move(player)") if @battle.pbBelongsToPlayer?(attacker.index)
- end
- end
- if opponent.damagestate.endured
- @battle.pbDisplay(_INTL("{1} endured the hit!",opponent.pbThis))
- elsif opponent.damagestate.sturdy
- @battle.pbDisplay(_INTL("{1} hung on with Sturdy!",opponent.pbThis))
- elsif opponent.damagestate.focussashused
- @battle.pbDisplay(_INTL("{1} hung on using its Focus Sash!",opponent.pbThis))
- elsif opponent.damagestate.focusbandused
- @battle.pbDisplay(_INTL("{1} hung on using its Focus Band!",opponent.pbThis))
- end
- end
- end
- #--------------------------------------------------------------------------------
- # Para los Pokémon Shiny y Oscuros
- #--------------------------------------------------------------------------------
- class PokeBattle_Scene
- alias pbCommonAnimation_fp pbCommonAnimation
- def pbCommonAnimation(*args)
- pbCommonAnimation_fp(*args)
- name=args[0]
- case name
- when "Shadow"
- @battle.fpShowText("shadow","shadow") if @battle.pbIsOpposing?(attacker.index)
- when "Shiny"
- @battle.fpShowText("shiny","shiny") if @battle.pbIsOpposing?(attacker.index)
- @battle.fpShowText("shiny(player)","shiny(player)") if @battle.pbBelongsToPlayer?(attacker.index)
- end
- end
- end
- #--------------------------------------------------------------------------------
- #Para los Pokémon Oscuros capturados
- #--------------------------------------------------------------------------------
- module PokeBattle_BattleCommon
- alias pbStorePokemon_fp pbStorePokemon
- def pbStorePokemon(poke)
- fpShowText("caught_poke","shadowcaught")
- pbStorePokemon_fp(poke)
- end
- end
- #--------------------------------------------------------------------------------
- #Fix con las HP Bars
- #--------------------------------------------------------------------------------
- class PokeBattle_Scene
- def pbShowOpponent(index,fp=false)
- if @battle.opponent
- if @battle.opponent.is_a?(Array)
- trainerfile=pbTrainerSpriteFile(@battle.opponent[index].trainertype)
- else
- trainerfile=pbTrainerSpriteFile(@battle.opponent.trainertype)
- end
- else
- trainerfile="Graphics/Characters/trfront"
- end
- unless fp
- @sprites["battlebox0"].visible=false if @sprites["battlebox0"]
- @sprites["battlebox1"].visible=false if @sprites["battlebox1"]
- @sprites["battlebox2"].visible=false if @sprites["battlebox2"]
- @sprites["battlebox3"].visible=false if @sprites["battlebox3"]
- end
- @sprites["opponent"]=DynamicTrainerSprite.new(false,-1,@viewport)
- @sprites["opponent"].setTrainerBitmap(trainerfile)
- @sprites["opponent"].toLastFrame
- @sprites["opponent"].lock
- @sprites["opponent"].z=16
- @sprites["opponent"].x=@sprites["enemybase"].x+120
- @sprites["opponent"].y=@sprites["enemybase"].y+30
- @sprites["opponent"].opacity=0
- 20.times do
- moveEntireScene(-3,-2)
- @sprites["opponent"].opacity+=12.8
- @sprites["opponent"].x-=4
- @sprites["opponent"].y-=2
- pbGraphicsUpdate
- pbInputUpdate
- end
- end
- end
- #--------------------------------------------------------------------------------
- # Control de Variables
- #--------------------------------------------------------------------------------
- Events.onStartBattle+=proc {|sender,e|
- $mbu=[]
- $tts={} if !$tts
- #Comprueba que estés en una versión compatible
- unless defined?(SCREENDUALHEIGHT)
- print "Usted está utilizando el sistema de Diálogos de entrenador durante la batalla de FiaPlay (BW)."
- print "En una versión que no parece ser Pokémon Essentials BW."
- print "Por favor elimínelo para evitar inconvenientes."
- end
- }
- Events.onEndBattle+=proc{
- $tts={}; $mbu=[]
- }
- #--------------------------------------------------------------------------------
- # Método que setea los textos
- #--------------------------------------------------------------------------------
- def fpTTS_set(param)
- if param.is_a?(Symbol)
- if hasConst?(MBD_Data,param)
- $tts=getConst(MBD_Data,param)
- else
- raise "Constante de Diálogos no definida."
- end
- elsif param.is_a?(Hash)
- $tts=param
- else
- raise "Parámetro incorrecto, se esperaba un Hash o Symbol."
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement