mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +00:00
887 lines
24 KiB
Ruby
887 lines
24 KiB
Ruby
#===============================================================================
|
|
# Pokémon storage mechanics
|
|
#===============================================================================
|
|
class PokemonStorageScreen
|
|
attr_reader :scene
|
|
attr_reader :storage
|
|
attr_accessor :heldpkmn
|
|
attr_accessor :fusionMode
|
|
|
|
def initialize(scene, storage)
|
|
@scene = scene
|
|
@storage = storage
|
|
@pbHeldPokemon = nil
|
|
@command =0
|
|
end
|
|
|
|
def pbStartScreen(command,animate=true)
|
|
@heldpkmn = nil
|
|
@command = command
|
|
if command == 0 # Organise
|
|
@scene.pbStartBox(self, command, animate)
|
|
pcOrganizeCommand
|
|
elsif command == 1 # Withdraw
|
|
@scene.pbStartBox(self, command, animate)
|
|
pcWithdrawCommand
|
|
elsif command == 2 # Deposit
|
|
@scene.pbStartBox(self, command, animate)
|
|
pcDepositCommand
|
|
elsif command == 3
|
|
@scene.pbStartBox(self, command, animate)
|
|
@scene.pbCloseBox
|
|
end
|
|
end
|
|
|
|
def pcOrganizeCommand()
|
|
isTransferBox = @storage[@storage.currentBox].is_a?(StorageTransferBox)
|
|
loop do
|
|
selected = @scene.pbSelectBox(@storage.party)
|
|
if selected == nil
|
|
if pbHeldPokemon
|
|
pbDisplay(_INTL("You're holding a Pokémon!"))
|
|
next
|
|
end
|
|
next if pbConfirm(_INTL("Continue Box operations?"))
|
|
break
|
|
elsif selected[0] == -3 # Close box
|
|
if pbHeldPokemon
|
|
pbDisplay(_INTL("You're holding a Pokémon!"))
|
|
next
|
|
end
|
|
if pbConfirm(_INTL("Exit from the Box?"))
|
|
pbSEPlay("PC close")
|
|
break
|
|
end
|
|
next
|
|
elsif selected[0] == -4 # Box name
|
|
pbBoxCommands
|
|
else
|
|
pokemon = @storage[selected[0], selected[1]]
|
|
heldpoke = pbHeldPokemon
|
|
next if !pokemon && !heldpoke
|
|
if @scene.quickswap
|
|
quickSwap(selected, pokemon)
|
|
else
|
|
if @fusionMode
|
|
pbFusionCommands(selected)
|
|
else
|
|
organizeActions(selected, pokemon, heldpoke, isTransferBox)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
@scene.pbCloseBox
|
|
end
|
|
|
|
def organizeActions(selected, pokemon, heldpoke, isTransferBox)
|
|
commands = []
|
|
cmdMove = -1
|
|
cmdSummary = -1
|
|
cmdWithdraw = -1
|
|
cmdItem = -1
|
|
cmdFuse = -1
|
|
cmdUnfuse = -1
|
|
cmdReverse = -1
|
|
cmdRelease = -1
|
|
cmdDebug = -1
|
|
cmdCancel = -1
|
|
cmdNickname = -1
|
|
|
|
|
|
echoln selected
|
|
if heldpoke
|
|
helptext = _INTL("{1} is selected.", heldpoke.name)
|
|
commands[cmdMove = commands.length] = (pokemon) ? _INTL("Shift") : _INTL("Place")
|
|
elsif pokemon
|
|
helptext = _INTL("{1} is selected.", pokemon.name)
|
|
commands[cmdMove = commands.length] = _INTL("Move")
|
|
end
|
|
commands[cmdSummary = commands.length] = _INTL("Summary")
|
|
if pokemon != nil && !isTransferBox
|
|
if dexNum(pokemon.species) > NB_POKEMON
|
|
commands[cmdUnfuse = commands.length] = _INTL("Unfuse")
|
|
commands[cmdReverse = commands.length] = _INTL("Reverse") if $PokemonBag.pbQuantity(:DNAREVERSER) > 0 || $PokemonBag.pbQuantity(:INFINITEREVERSERS) > 0
|
|
else
|
|
commands[cmdFuse = commands.length] = _INTL("Fuse") if !@heldpkmn
|
|
end
|
|
end
|
|
commands[cmdNickname = commands.length] = _INTL("Nickname") if !@heldpkmn && !isTransferBox
|
|
commands[cmdWithdraw = commands.length] = (selected[0] == -1) ? _INTL("Store") : _INTL("Withdraw")
|
|
commands[cmdItem = commands.length] = _INTL("Item") if !isTransferBox
|
|
|
|
commands[cmdRelease = commands.length] = _INTL("Release") if !isTransferBox
|
|
commands[cmdDebug = commands.length] = _INTL("Debug") if $DEBUG
|
|
commands[cmdCancel = commands.length] = _INTL("Cancel")
|
|
command = pbShowCommands(helptext, commands)
|
|
if cmdMove >= 0 && command == cmdMove # Move/Shift/Place
|
|
#@scene.pbSetCursorMode("default")
|
|
if @heldpkmn
|
|
(pokemon) ? pbSwap(selected) : pbPlace(selected)
|
|
else
|
|
if @scene.cursormode == "multiselect"
|
|
pbHoldMulti(selected[0], selected[1])
|
|
else
|
|
pbHold(selected)
|
|
end
|
|
end
|
|
elsif cmdSummary >= 0 && command == cmdSummary # Summary
|
|
pbSummary(selected, @heldpkmn)
|
|
elsif cmdNickname >= 0 && command == cmdNickname # Summary
|
|
renamePokemon(selected)
|
|
elsif cmdWithdraw >= 0 && command == cmdWithdraw # Store/Withdraw
|
|
(selected[0] == -1) ? pbStore(selected, @heldpkmn) : pbWithdraw(selected, @heldpkmn)
|
|
elsif cmdItem >= 0 && command == cmdItem # Item
|
|
pbItem(selected, @heldpkmn)
|
|
elsif cmdFuse >= 0 && command == cmdFuse # fuse
|
|
pbFuseFromPC(selected, @heldpkmn)
|
|
elsif cmdUnfuse >= 0 && command == cmdUnfuse # unfuse
|
|
pbUnfuseFromPC(selected)
|
|
elsif cmdReverse >= 0 && command == cmdReverse # unfuse
|
|
reverseFromPC(selected)
|
|
elsif cmdRelease >= 0 && command == cmdRelease # Release
|
|
pbRelease(selected, @heldpkmn)
|
|
elsif cmdDebug >= 0 && command == cmdDebug # Debug
|
|
pbPokemonDebug((@heldpkmn) ? @heldpkmn : pokemon, selected, heldpoke)
|
|
end
|
|
end
|
|
|
|
def quickSwap(selected, pokemon)
|
|
if @heldpkmn
|
|
(pokemon) ? pbSwap(selected) : pbPlace(selected)
|
|
else
|
|
pbHold(selected)
|
|
end
|
|
end
|
|
|
|
def pcWithdrawCommand
|
|
isTransferBox = @storage[@storage.currentBox].is_a?(StorageTransferBox)
|
|
loop do
|
|
selected = @scene.pbSelectBox(@storage.party)
|
|
if selected == nil
|
|
next if pbConfirm(_INTL("Continue Box operations?"))
|
|
break
|
|
else
|
|
case selected[0]
|
|
when -2 # Party Pokémon
|
|
pbDisplay(_INTL("Which one will you take?"))
|
|
next
|
|
when -3 # Close box
|
|
if pbConfirm(_INTL("Exit from the Box?"))
|
|
pbSEPlay("PC close")
|
|
break
|
|
end
|
|
next
|
|
when -4 # Box name
|
|
pbBoxCommands
|
|
next
|
|
end
|
|
if @fusionMode
|
|
pbFusionCommands(selected)
|
|
else
|
|
pokemon = @storage[selected[0], selected[1]]
|
|
next if !pokemon
|
|
command = pbShowCommands(_INTL("{1} is selected.", pokemon.name), [
|
|
_INTL("Withdraw"),
|
|
_INTL("Summary"),
|
|
_INTL("Release"),
|
|
_INTL("Cancel")
|
|
])
|
|
case command
|
|
when 0 then
|
|
pbWithdraw(selected, nil)
|
|
when 1 then
|
|
pbSummary(selected, nil)
|
|
# when 2 then pbMark(selected, nil)
|
|
when 2 then
|
|
pbRelease(selected, nil)
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
@scene.pbCloseBox
|
|
end
|
|
|
|
def pcDepositCommand
|
|
isTransferBox = @storage[@storage.currentBox].is_a?(StorageTransferBox)
|
|
loop do
|
|
selected = @scene.pbSelectParty(@storage.party)
|
|
if selected == -3 # Close box
|
|
if pbConfirm(_INTL("Exit from the Box?"))
|
|
pbSEPlay("PC close")
|
|
break
|
|
end
|
|
next
|
|
elsif selected < 0
|
|
next if pbConfirm(_INTL("Continue Box operations?"))
|
|
break
|
|
else
|
|
pokemon = @storage[-1, selected]
|
|
next if !pokemon
|
|
command = pbShowCommands(_INTL("{1} is selected.", pokemon.name), [
|
|
_INTL("Store"),
|
|
_INTL("Summary"),
|
|
_INTL("Mark"),
|
|
_INTL("Release"),
|
|
_INTL("Cancel")
|
|
])
|
|
case command
|
|
when 0 then
|
|
pbStore([-1, selected], nil)
|
|
when 1 then
|
|
pbSummary([-1, selected], nil)
|
|
when 2 then
|
|
pbMark([-1, selected], nil)
|
|
when 3 then
|
|
pbRelease([-1, selected], nil)
|
|
end
|
|
end
|
|
end
|
|
@scene.pbCloseBox
|
|
end
|
|
|
|
def renamePokemon(selected)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
pokemon = @storage[box, index]
|
|
|
|
if pokemon.egg?
|
|
pbDisplay(_INTL("You cannot rename an egg!"))
|
|
return
|
|
end
|
|
|
|
speciesname = PBSpecies.getName(pokemon.species)
|
|
hasNickname = speciesname == pokemon.name
|
|
if hasNickname
|
|
pbDisplay(_INTL("{1} has no nickname.", speciesname))
|
|
else
|
|
pbDisplay(_INTL("{1} has the nickname {2}.", speciesname, pokemon.name))
|
|
end
|
|
commands = [
|
|
_INTL("Rename"),
|
|
_INTL("Quit")
|
|
]
|
|
command = pbShowCommands(
|
|
_INTL("What do you want to do?"), commands)
|
|
case command
|
|
when 0
|
|
newname = pbEnterPokemonName(_INTL("{1}'s nickname?", speciesname), 0, Pokemon::MAX_NAME_SIZE, "", pokemon)
|
|
pokemon.name = (newname == "") ? speciesname : newname
|
|
pbDisplay(_INTL("{1} is now named {2}!", speciesname, pokemon.name))
|
|
when 1
|
|
return
|
|
end
|
|
end
|
|
|
|
def pbUpdate # For debug
|
|
@scene.update
|
|
end
|
|
|
|
def pbHardRefresh # For debug
|
|
@scene.pbHardRefresh
|
|
end
|
|
|
|
def pbRefreshSingle(i)
|
|
# For debug
|
|
@scene.pbUpdateOverlay(i[1], (i[0] == -1) ? @storage.party : nil)
|
|
@scene.pbHardRefresh
|
|
end
|
|
|
|
def pbDisplay(message)
|
|
@scene.pbDisplay(message)
|
|
end
|
|
|
|
def pbConfirm(str)
|
|
return pbShowCommands(str, [_INTL("Yes"), _INTL("No")]) == 0
|
|
end
|
|
|
|
def pbShowCommands(msg, commands, index = 0)
|
|
return @scene.pbShowCommands(msg, commands, index)
|
|
end
|
|
|
|
def pbAble?(pokemon)
|
|
pokemon && !pokemon.egg? && pokemon.hp > 0
|
|
end
|
|
|
|
def pbAbleCount
|
|
count = 0
|
|
for p in @storage.party
|
|
count += 1 if pbAble?(p)
|
|
end
|
|
return count
|
|
end
|
|
|
|
def pbHeldPokemon
|
|
return @heldpkmn
|
|
end
|
|
|
|
def pbWithdraw(selected, heldpoke)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
if box == -1
|
|
raise _INTL("Can't withdraw from party...");
|
|
end
|
|
if @storage.party_full?
|
|
pbDisplay(_INTL("Your party's full!"))
|
|
return false
|
|
end
|
|
|
|
if @storage[box].is_a?(StorageTransferBox)
|
|
unless verifyTransferBoxAutosave
|
|
return
|
|
end
|
|
end
|
|
|
|
@scene.pbWithdraw(selected, heldpoke, @storage.party.length)
|
|
if heldpoke
|
|
@storage.pbMoveCaughtToParty(heldpoke)
|
|
@heldpkmn = nil
|
|
else
|
|
@storage.pbMove(-1, -1, box, index)
|
|
end
|
|
@scene.pbRefresh
|
|
return true
|
|
end
|
|
|
|
def pbStore(selected, heldpoke)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
if box != -1
|
|
raise _INTL("Can't deposit from box...")
|
|
end
|
|
if pbAbleCount <= 1 && pbAble?(@storage[box, index]) && !heldpoke
|
|
pbPlayBuzzerSE
|
|
pbDisplay(_INTL("That's your last Pokémon!"))
|
|
elsif heldpoke && heldpoke.mail
|
|
pbDisplay(_INTL("Please remove the Mail."))
|
|
elsif !heldpoke && @storage[box, index].mail
|
|
pbDisplay(_INTL("Please remove the Mail."))
|
|
else
|
|
loop do
|
|
destbox = @scene.pbChooseBox(_INTL("Deposit in which Box?"))
|
|
if destbox >= 0
|
|
firstfree = @storage.pbFirstFreePos(destbox)
|
|
if firstfree < 0
|
|
pbDisplay(_INTL("The Box is full."))
|
|
next
|
|
end
|
|
if heldpoke || selected[0] == -1
|
|
p = (heldpoke) ? heldpoke : @storage[-1, index]
|
|
p.time_form_set = nil
|
|
# p.form = 0 if p.isSpecies?(:SHAYMIN)
|
|
# p.heal
|
|
end
|
|
@scene.pbStore(selected, heldpoke, destbox, firstfree)
|
|
if heldpoke
|
|
@storage.pbMoveCaughtToBox(heldpoke, destbox)
|
|
@heldpkmn = nil
|
|
else
|
|
@storage.pbMove(destbox, -1, -1, index)
|
|
end
|
|
end
|
|
break
|
|
end
|
|
@scene.pbRefresh
|
|
end
|
|
end
|
|
|
|
def pbHold(selected)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
|
|
if @storage[box].is_a?(StorageTransferBox)
|
|
unless verifyTransferBoxAutosave
|
|
return
|
|
end
|
|
end
|
|
|
|
if box == -1 && pbAble?(@storage[box, index]) && pbAbleCount <= 1
|
|
pbPlayBuzzerSE
|
|
pbDisplay(_INTL("That's your last Pokémon!"))
|
|
return
|
|
end
|
|
@scene.pbHold(selected)
|
|
@heldpkmn = @storage[box, index]
|
|
@storage.pbDelete(box, index)
|
|
@scene.pbRefresh
|
|
end
|
|
|
|
def pbPlace(selected)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
|
|
if @storage[box].is_a?(StorageTransferBox)
|
|
if @heldpkmn.owner.name == "RENTAL"
|
|
pbMessage(_INTL("This Pokémon cannot be transferred."))
|
|
return
|
|
end
|
|
unless verifyTransferBoxAutosave
|
|
return
|
|
end
|
|
end
|
|
|
|
if @storage[box, index]
|
|
pbDisplay(_INTL("Can't place that there."))
|
|
return
|
|
echoln _INTL("Position {1},{2} is not empty...", box, index)
|
|
end
|
|
if box != -1 && index >= @storage.maxPokemon(box)
|
|
pbDisplay(_INTL("Can't place that there."))
|
|
return
|
|
end
|
|
if box != -1 && @heldpkmn.mail
|
|
pbDisplay(_INTL("Please remove the mail."))
|
|
return
|
|
end
|
|
if box >= 0
|
|
@heldpkmn.time_form_set = nil
|
|
@heldpkmn.form = 0 if @heldpkmn.isSpecies?(:SHAYMIN)
|
|
#@heldpkmn.heal
|
|
end
|
|
@scene.pbPlace(selected, @heldpkmn)
|
|
@storage[box, index] = @heldpkmn
|
|
if box == -1
|
|
@storage.party.compact!
|
|
end
|
|
@scene.pbRefresh
|
|
@heldpkmn = nil
|
|
end
|
|
|
|
def pbSwap(selected)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
|
|
if !@storage[box, index]
|
|
raise _INTL("Position {1},{2} is empty...", box, index)
|
|
end
|
|
|
|
if @storage[box].is_a?(StorageTransferBox)
|
|
if @heldpkmn.owner.name == "RENTAL"
|
|
pbMessage(_INTL("This Pokémon cannot be transferred."))
|
|
return
|
|
end
|
|
unless verifyTransferBoxAutosave
|
|
return
|
|
end
|
|
end
|
|
|
|
if box == -1 && pbAble?(@storage[box, index]) && pbAbleCount <= 1 && !pbAble?(@heldpkmn)
|
|
pbPlayBuzzerSE
|
|
pbDisplay(_INTL("That's your last Pokémon!"))
|
|
return false
|
|
end
|
|
if box != -1 && @heldpkmn.mail
|
|
pbDisplay(_INTL("Please remove the mail."))
|
|
return false
|
|
end
|
|
if box >= 0
|
|
@heldpkmn.time_form_set = nil
|
|
@heldpkmn.form = 0 if @heldpkmn.isSpecies?(:SHAYMIN)
|
|
#@heldpkmn.heal
|
|
end
|
|
@scene.pbSwap(selected, @heldpkmn)
|
|
tmp = @storage[box, index]
|
|
@storage[box, index] = @heldpkmn
|
|
@heldpkmn = tmp
|
|
@scene.pbRefresh
|
|
return true
|
|
end
|
|
|
|
def pbRelease(selected, heldpoke)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
pokemon = (heldpoke) ? heldpoke : @storage[box, index]
|
|
return if !pokemon
|
|
if pokemon.egg?
|
|
pbDisplay(_INTL("You can't release an Egg."))
|
|
return false
|
|
elsif pokemon.mail
|
|
pbDisplay(_INTL("Please remove the mail."))
|
|
return false
|
|
end
|
|
if box == -1 && pbAbleCount <= 1 && pbAble?(pokemon) && !heldpoke
|
|
pbPlayBuzzerSE
|
|
pbDisplay(_INTL("That's your last Pokémon!"))
|
|
return
|
|
end
|
|
command = pbShowCommands(_INTL("Release this Pokémon?"), [_INTL("No"), _INTL("Yes")])
|
|
if command == 1
|
|
if pokemon.owner.name == "RENTAL"
|
|
pbDisplay(_INTL("This Pokémon cannot be released"))
|
|
return
|
|
end
|
|
|
|
pkmnname = pokemon.name
|
|
@scene.pbRelease(selected, heldpoke)
|
|
if heldpoke
|
|
@heldpkmn = nil
|
|
else
|
|
@storage.pbDelete(box, index)
|
|
end
|
|
@scene.pbRefresh
|
|
pbDisplay(_INTL("{1} was released.", pkmnname))
|
|
pbDisplay(_INTL("Bye-bye, {1}!", pkmnname))
|
|
@scene.pbRefresh
|
|
end
|
|
return
|
|
end
|
|
|
|
def pbChooseMove(pkmn, helptext, index = 0)
|
|
movenames = []
|
|
for i in pkmn.moves
|
|
if i.total_pp <= 0
|
|
movenames.push(_INTL("{1} (PP: ---)", i.name))
|
|
else
|
|
movenames.push(_INTL("{1} (PP: {2}/{3})", i.name, i.pp, i.total_pp))
|
|
end
|
|
end
|
|
return @scene.pbShowCommands(helptext, movenames, index)
|
|
end
|
|
|
|
def pbSummary(selected, heldpoke)
|
|
@scene.pbSummary(selected, heldpoke)
|
|
end
|
|
|
|
def pbMark(selected, heldpoke)
|
|
@scene.pbMark(selected, heldpoke)
|
|
end
|
|
|
|
def pbItem(selected, heldpoke)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
pokemon = (heldpoke) ? heldpoke : @storage[box, index]
|
|
if pokemon.egg?
|
|
pbDisplay(_INTL("Eggs can't hold items."))
|
|
return
|
|
elsif pokemon.mail
|
|
pbDisplay(_INTL("Please remove the mail."))
|
|
return
|
|
end
|
|
if pokemon.item
|
|
itemname = pokemon.item.name
|
|
if pbConfirm(_INTL("Take this {1}?", itemname))
|
|
if !$PokemonBag.pbStoreItem(pokemon.item)
|
|
pbDisplay(_INTL("Can't store the {1}.", itemname))
|
|
else
|
|
pbDisplay(_INTL("Took the {1}.", itemname))
|
|
pokemon.item = nil
|
|
@scene.pbHardRefresh
|
|
end
|
|
end
|
|
else
|
|
item = scene.pbChooseItem($PokemonBag)
|
|
if item
|
|
itemname = GameData::Item.get(item).name
|
|
pokemon.item = item
|
|
$PokemonBag.pbDeleteItem(item)
|
|
pbDisplay(_INTL("{1} is now being held.", itemname))
|
|
@scene.pbHardRefresh
|
|
end
|
|
end
|
|
end
|
|
|
|
def pbBoxCommands
|
|
cmd_jump = _INTL("Jump")
|
|
cmd_wallpaper = _INTL("Wallpaper")
|
|
cmd_name = _INTL("Name")
|
|
cmd_info = _INTL("Info")
|
|
cmd_cancel = _INTL("Cancel")
|
|
|
|
commands = []
|
|
commands << cmd_jump
|
|
commands << cmd_wallpaper
|
|
commands << cmd_name if !@storage[@storage.currentBox].is_a?(StorageTransferBox)
|
|
commands << cmd_info if @storage[@storage.currentBox].is_a?(StorageTransferBox)
|
|
commands << cmd_cancel
|
|
|
|
command = pbShowCommands(
|
|
_INTL("What do you want to do?"), commands)
|
|
case commands[command]
|
|
when cmd_jump
|
|
boxCommandJump
|
|
when cmd_wallpaper
|
|
boxCommandSetWallpaper
|
|
when cmd_name
|
|
boxCommandName
|
|
when cmd_info
|
|
boxCommandTransferInfo
|
|
end
|
|
end
|
|
|
|
def boxCommandTransferInfo
|
|
pbMessage(_INTL("This is the Transfer Box. It's used to transfer Pokémon between savefiles!"))
|
|
pbMessage(_INTL("Any Pokémon that is placed in this box will be shared between all savefiles of Pokémon Infinite Fusion 1 and Pokémon Infinite Fusion 2."))
|
|
end
|
|
def boxCommandName
|
|
@scene.pbBoxName(_INTL("Box name?"), 0, 20)
|
|
end
|
|
def boxCommandJump
|
|
destbox = @scene.pbChooseBox(_INTL("Jump to which Box?"))
|
|
if destbox >= 0
|
|
@scene.pbJumpToBox(destbox)
|
|
end
|
|
end
|
|
def boxCommandSetWallpaper
|
|
papers = @storage.availableWallpapers
|
|
index = 0
|
|
for i in 0...papers[1].length
|
|
if papers[1][i] == @storage[@storage.currentBox].background
|
|
index = i; break
|
|
end
|
|
end
|
|
wpaper = pbShowCommands(_INTL("Pick the wallpaper."), papers[0], index)
|
|
if wpaper >= 0
|
|
@scene.pbChangeBackground(papers[1][wpaper])
|
|
end
|
|
end
|
|
|
|
def pbChoosePokemon(_party = nil)
|
|
@heldpkmn = nil
|
|
@scene.pbStartBox(self, 1)
|
|
retval = nil
|
|
loop do
|
|
selected = @scene.pbSelectBox(@storage.party)
|
|
if selected && selected[0] == -3 # Close box
|
|
if pbConfirm(_INTL("Exit from the Box?"))
|
|
pbSEPlay("PC close")
|
|
break
|
|
end
|
|
next
|
|
end
|
|
if selected == nil
|
|
next if pbConfirm(_INTL("Continue Box operations?"))
|
|
break
|
|
elsif selected[0] == -4 # Box name
|
|
pbBoxCommands
|
|
else
|
|
pokemon = @storage[selected[0], selected[1]]
|
|
next if !pokemon
|
|
commands = [
|
|
_INTL("Select"),
|
|
_INTL("Summary"),
|
|
_INTL("Withdraw"),
|
|
_INTL("Item"),
|
|
_INTL("Mark")
|
|
]
|
|
commands.push(_INTL("Cancel"))
|
|
commands[2] = _INTL("Store") if selected[0] == -1
|
|
helptext = _INTL("{1} is selected.", pokemon.name)
|
|
command = pbShowCommands(helptext, commands)
|
|
case command
|
|
when 0 # Select
|
|
if pokemon
|
|
retval = selected
|
|
break
|
|
end
|
|
when 1
|
|
pbSummary(selected, nil)
|
|
when 2 # Store/Withdraw
|
|
if selected[0] == -1
|
|
pbStore(selected, nil)
|
|
else
|
|
pbWithdraw(selected, nil)
|
|
end
|
|
when 3
|
|
pbItem(selected, nil)
|
|
when 4
|
|
pbMark(selected, nil)
|
|
end
|
|
end
|
|
end
|
|
@scene.pbCloseBox
|
|
return retval
|
|
end
|
|
|
|
#
|
|
# Fusion stuff
|
|
#
|
|
|
|
def pbFuseFromPC(selected, heldpoke)
|
|
@scene.pbSetCursorMode("default")
|
|
box = selected[0]
|
|
index = selected[1]
|
|
poke_body = @storage[box, index]
|
|
poke_head = heldpoke
|
|
if heldpoke
|
|
if dexNum(heldpoke.species) > NB_POKEMON
|
|
pbDisplay(_INTL("{1} is already fused!", heldpoke.name))
|
|
return
|
|
end
|
|
if (heldpoke.egg?)
|
|
pbDisplay(_INTL("It's impossible to fuse an egg!"))
|
|
return
|
|
end
|
|
end
|
|
|
|
splicerItem = selectSplicer()
|
|
if splicerItem == nil
|
|
cancelFusion()
|
|
return
|
|
end
|
|
|
|
if !heldpoke
|
|
@fusionMode = true
|
|
@fusionItem = splicerItem
|
|
@scene.setFusing(true, @fusionItem)
|
|
pbHold(selected)
|
|
pbDisplay(_INTL("Select a Pokémon to fuse it with"))
|
|
@scene.sprites["box"].disableFusions()
|
|
return
|
|
end
|
|
if !poke_body
|
|
pbDisplay(_INTL("Select a Pokémon to fuse it with"))
|
|
@fusionMode = true
|
|
@fusionItem = splicerItem
|
|
@scene.setFusing(true, @fusionItem)
|
|
return
|
|
end
|
|
end
|
|
|
|
def deleteHeldPokemon(heldpoke, selected)
|
|
@scene.pbReleaseInstant(selected, heldpoke)
|
|
@heldpkmn = nil
|
|
end
|
|
|
|
def deleteSelectedPokemon(heldpoke, selected)
|
|
pbSwap(selected)
|
|
deleteHeldPokemon(heldpoke, selected)
|
|
end
|
|
|
|
def cancelFusion
|
|
@splicerItem = nil
|
|
@scene.setFusing(false)
|
|
@fusionMode = false
|
|
@scene.sprites["box"].enableFusions()
|
|
end
|
|
|
|
def canDeleteItem(item)
|
|
return item == :SUPERSPLICERS || item == :DNASPLICERS
|
|
end
|
|
|
|
def isSuperSplicer?(item)
|
|
return item == :SUPERSPLICERS || item == :INFINITESPLICERS2
|
|
end
|
|
|
|
def pbFusionCommands(selected)
|
|
heldpoke = pbHeldPokemon
|
|
pokemon = @storage[selected[0], selected[1]]
|
|
|
|
if !pokemon
|
|
command = pbShowCommands(_INTL("Select an action"), [_INTL("Continue fusing"), _INTL("Stop fusing")])
|
|
case command
|
|
when 1 # stop
|
|
cancelFusion()
|
|
end
|
|
else
|
|
commands = [
|
|
_INTL("Fuse"),
|
|
_INTL("Swap")
|
|
]
|
|
commands.push(_INTL("Stop fusing"))
|
|
commands.push(_INTL("Continue fusing"))
|
|
|
|
if !heldpoke
|
|
pbPlace(selected)
|
|
@fusionMode = false
|
|
@scene.setFusing(false)
|
|
return
|
|
end
|
|
command = pbShowCommands(_INTL("Select an action"), commands)
|
|
case command
|
|
when 0 # Fuse
|
|
if !pokemon
|
|
pbDisplay(_INTL("No Pokémon selected!"))
|
|
return
|
|
else
|
|
if dexNum(pokemon.species) > NB_POKEMON
|
|
pbDisplay(_INTL("This Pokémon is already fused!"))
|
|
return
|
|
end
|
|
end
|
|
isSuperSplicer = isSuperSplicer?(@fusionItem)
|
|
|
|
selectedHead = selectFusion(pokemon, heldpoke, isSuperSplicer)
|
|
if selectedHead == nil
|
|
pbDisplay(_INTL("It won't have any effect."))
|
|
return false
|
|
end
|
|
if selectedHead == -1 # cancelled out
|
|
return false
|
|
end
|
|
|
|
selectedBase = selectedHead == pokemon ? heldpoke : pokemon
|
|
firstOptionSelected = selectedBase == pokemon
|
|
|
|
if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?")))
|
|
playingBGM = $game_system.getPlayingBGM
|
|
pbFuse(selectedHead, selectedBase, @fusionItem)
|
|
if canDeleteItem(@fusionItem)
|
|
$PokemonBag.pbDeleteItem(@fusionItem)
|
|
end
|
|
if firstOptionSelected
|
|
deleteSelectedPokemon(heldpoke, selected)
|
|
else
|
|
deleteHeldPokemon(heldpoke, selected)
|
|
end
|
|
|
|
@scene.setFusing(false)
|
|
@fusionMode = false
|
|
@scene.sprites["box"].enableFusions()
|
|
pbBGMPlay(playingBGM)
|
|
return
|
|
else
|
|
# print "fusion cancelled"
|
|
# @fusionMode = false
|
|
end
|
|
when 1 # swap
|
|
if pokemon
|
|
if dexNum(pokemon.species) <= NB_POKEMON
|
|
pbSwap(selected)
|
|
else
|
|
pbDisplay(_INTL("This Pokémon is already fused!"))
|
|
end
|
|
else
|
|
pbDisplay(_INTL("Select a Pokémon!"))
|
|
end
|
|
when 2 # cancel
|
|
cancelFusion()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
def reverseFromPC(selected)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
pokemon = @storage[box, index]
|
|
|
|
if !pokemon.isFusion?
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
return
|
|
end
|
|
if Kernel.pbConfirmMessageSerious(_INTL("Should {1} be reversed?", pokemon.name))
|
|
reverseFusion(pokemon)
|
|
$PokemonBag.pbDeleteItem(:DNAREVERSER) if $PokemonBag.pbQuantity(:INFINITEREVERSERS) <= 0
|
|
end
|
|
@scene.pbHardRefresh
|
|
end
|
|
|
|
def pbUnfuseFromPC(selected)
|
|
box = selected[0]
|
|
index = selected[1]
|
|
pokemon = @storage[box, index]
|
|
|
|
if pbConfirm(_INTL("Unfuse {1}?", pokemon.name))
|
|
item = selectSplicer()
|
|
return if item == nil
|
|
isSuperSplicer = isSuperSplicer?(item)
|
|
if pbUnfuse(pokemon, @scene, isSuperSplicer, selected)
|
|
if canDeleteItem(item)
|
|
$PokemonBag.pbDeleteItem(item)
|
|
end
|
|
end
|
|
@scene.pbHardRefresh
|
|
end
|
|
end
|
|
|
|
end |