Files
infinitefusion-e18/Data/Scripts/018_Alternate battle modes/001_Battle Frontier/005_UI_BattleSwap.rb

247 lines
7.5 KiB
Ruby

#===============================================================================
#
#===============================================================================
class BattleSwapScene
RED_TEXT_BASE = Color.new(232, 32, 16)
RED_TEXT_SHADOW = Color.new(248, 168, 184)
def pbStartRentScene(rentals)
@rentals = rentals
@mode = 0 # rental (pick 3 out of 6 initial Pokémon)
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999
@sprites = {}
addBackgroundPlane(@sprites, "bg", "rentbg", @viewport)
@sprites["title"] = Window_UnformattedTextPokemon.newWithSize(
_INTL("RENTAL POKéMON"), 0, 0, Graphics.width, 64, @viewport
)
@sprites["list"] = Window_AdvancedCommandPokemonEx.newWithSize(
[], 0, 64, Graphics.width, Graphics.height - 128, @viewport
)
@sprites["help"] = Window_UnformattedTextPokemon.newWithSize(
"", 0, Graphics.height - 64, Graphics.width, 64, @viewport
)
@sprites["msgwindow"] = Window_AdvancedTextPokemon.newWithSize(
"", 0, Graphics.height - 64, Graphics.height, 64, @viewport
)
@sprites["msgwindow"].visible = false
pbUpdateChoices([])
pbDeactivateWindows(@sprites)
pbFadeInAndShow(@sprites) { pbUpdate }
end
def pbStartSwapScene(currentPokemon, newPokemon)
@currentPokemon = currentPokemon
@newPokemon = newPokemon
@mode = 1 # swap (pick 1 out of 3 opponent's Pokémon to take)
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999
@sprites = {}
addBackgroundPlane(@sprites, "bg", "swapbg", @viewport)
@sprites["title"] = Window_UnformattedTextPokemon.newWithSize(
_INTL("POKéMON SWAP"), 0, 0, Graphics.width, 64, @viewport
)
@sprites["list"] = Window_AdvancedCommandPokemonEx.newWithSize(
[], 0, 64, Graphics.width, Graphics.height - 128, @viewport
)
@sprites["help"] = Window_UnformattedTextPokemon.newWithSize(
"", 0, Graphics.height - 64, Graphics.width, 64, @viewport
)
@sprites["msgwindow"] = Window_AdvancedTextPokemon.newWithSize(
"", 0, Graphics.height - 64, Graphics.width, 64, @viewport
)
@sprites["msgwindow"].visible = false
pbInitSwapScreen
pbDeactivateWindows(@sprites)
pbFadeInAndShow(@sprites) { pbUpdate }
end
def pbInitSwapScreen
commands = pbGetCommands(@currentPokemon, [])
commands.push(_INTL("CANCEL"))
@sprites["help"].text = _INTL("Select Pokémon to swap.")
@sprites["list"].commands = commands
@sprites["list"].index = 0
@mode = 1
end
# End the scene here.
def pbEndScene
pbFadeOutAndHide(@sprites) { pbUpdate }
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end
def pbShowCommands(commands)
UIHelper.pbShowCommands(@sprites["msgwindow"], nil, commands) { pbUpdate }
end
def pbConfirm(message)
UIHelper.pbConfirm(@sprites["msgwindow"], message) { pbUpdate }
end
def pbGetCommands(list, choices)
red_text_tag = shadowc3tag(RED_TEXT_BASE, RED_TEXT_SHADOW)
commands = []
list.length.times do |i|
pkmn = list[i]
category = pkmn.species_data.category
cmd = _INTL("{1} - {2} Pokémon", pkmn.speciesName, category)
cmd = red_text_tag + cmd if choices.include?(i) # Red text
commands.push(cmd)
end
return commands
end
# Processes the scene.
def pbChoosePokemon(canCancel)
pbActivateWindow(@sprites, "list") do
loop do
Graphics.update
Input.update
pbUpdate
if Input.trigger?(Input::BACK) && canCancel
return -1
elsif Input.trigger?(Input::USE)
index = @sprites["list"].index
if index == @sprites["list"].commands.length - 1 && canCancel
return -1
elsif index == @sprites["list"].commands.length - 2 && canCancel && @mode == 2
return -2
else
return index
end
end
end
end
end
def pbUpdateChoices(choices)
commands = pbGetCommands(@rentals, choices)
@choices = choices
case choices.length
when 0
@sprites["help"].text = _INTL("Choose the first Pokémon.")
when 1
@sprites["help"].text = _INTL("Choose the second Pokémon.")
else
@sprites["help"].text = _INTL("Choose the third Pokémon.")
end
@sprites["list"].commands = commands
end
def pbSwapChosen(_pkmnindex)
commands = pbGetCommands(@newPokemon, [])
commands.push(_INTL("PKMN FOR SWAP"))
commands.push(_INTL("CANCEL"))
@sprites["help"].text = _INTL("Select Pokémon to accept.")
@sprites["list"].commands = commands
@sprites["list"].index = 0
@mode = 2
end
def pbSwapCanceled
pbInitSwapScreen
end
def pbSummary(list, index)
visibleSprites = pbFadeOutAndHide(@sprites) { pbUpdate }
screen = UI::PokemonSummary.new(list, index).main
@sprites["list"].index = screen.result
pbFadeInAndShow(@sprites, visibleSprites) { pbUpdate }
end
def pbUpdate
pbUpdateSpriteHash(@sprites)
end
end
#===============================================================================
#
#===============================================================================
class BattleSwapScreen
def initialize(scene)
@scene = scene
end
def pbStartRent(rentals)
@scene.pbStartRentScene(rentals)
chosen = []
loop do
index = @scene.pbChoosePokemon(false)
commands = []
commands.push(_INTL("SUMMARY"))
if chosen.include?(index)
commands.push(_INTL("DESELECT"))
else
commands.push(_INTL("RENT"))
end
commands.push(_INTL("OTHERS"))
command = @scene.pbShowCommands(commands)
case command
when 0
@scene.pbSummary(rentals, index)
when 1
if chosen.include?(index)
chosen.delete(index)
@scene.pbUpdateChoices(chosen.clone)
else
chosen.push(index)
@scene.pbUpdateChoices(chosen.clone)
if chosen.length == 3
if @scene.pbConfirm(_INTL("Are these three Pokémon OK?"))
retval = []
chosen.each { |i| retval.push(rentals[i]) }
@scene.pbEndScene
return retval
else
chosen.delete(index)
@scene.pbUpdateChoices(chosen.clone)
end
end
end
end
end
end
def pbStartSwap(currentPokemon, newPokemon)
@scene.pbStartSwapScene(currentPokemon, newPokemon)
loop do
pkmn = @scene.pbChoosePokemon(true)
if pkmn >= 0
commands = [_INTL("SUMMARY"), _INTL("SWAP"), _INTL("RECHOOSE")]
command = @scene.pbShowCommands(commands)
case command
when 0
@scene.pbSummary(currentPokemon, pkmn)
when 1
@scene.pbSwapChosen(pkmn)
yourPkmn = pkmn
loop do
pkmn = @scene.pbChoosePokemon(true)
if pkmn >= 0
if @scene.pbConfirm(_INTL("Accept this Pokémon?"))
@scene.pbEndScene
currentPokemon[yourPkmn] = newPokemon[pkmn]
return true
end
elsif pkmn == -2
@scene.pbSwapCanceled
break # Back to first screen
elsif pkmn == -1
if @scene.pbConfirm(_INTL("Quit swapping?"))
@scene.pbEndScene
return false
end
end
end
end
elsif @scene.pbConfirm(_INTL("Quit swapping?"))
# Canceled
@scene.pbEndScene
return false
end
end
end
end