mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +00:00
Rewrote party screen, implemented redesign of it
This commit is contained in:
@@ -104,6 +104,10 @@ class HandlerHash
|
||||
return nil
|
||||
end
|
||||
|
||||
def keys
|
||||
return @hash.keys
|
||||
end
|
||||
|
||||
def add(id, handler = nil, &handlerBlock)
|
||||
if ![Proc, Hash].include?(handler.class) && !block_given?
|
||||
raise ArgumentError, "#{self.class.name} for #{id.inspect} has no valid handler (#{handler.inspect} was given)"
|
||||
@@ -160,6 +164,10 @@ class HandlerHashSymbol
|
||||
return nil
|
||||
end
|
||||
|
||||
def keys
|
||||
return @hash.keys
|
||||
end
|
||||
|
||||
def add(sym, handler = nil, &handlerBlock)
|
||||
if ![Proc, Hash].include?(handler.class) && !block_given?
|
||||
raise ArgumentError, "#{self.class.name} for #{sym.inspect} has no valid handler (#{handler.inspect} was given)"
|
||||
@@ -225,6 +233,10 @@ class HandlerHashEnum
|
||||
return ret
|
||||
end
|
||||
|
||||
def keys
|
||||
return @hash.keys
|
||||
end
|
||||
|
||||
def fromSymbol(sym)
|
||||
return sym unless sym.is_a?(Symbol) || sym.is_a?(String)
|
||||
mod = Object.const_get(@mod) rescue nil
|
||||
|
||||
@@ -114,6 +114,17 @@ module MenuHandlers
|
||||
sorted_keys.each do |option|
|
||||
hash = options[option]
|
||||
next if hash["condition"] && !hash["condition"].call(*args)
|
||||
if hash["multi_options"]
|
||||
extra_options = hash["multi_options"].call(*args)
|
||||
if extra_options && extra_options.length > 0
|
||||
if extra_options[0].is_a?(Array)
|
||||
extra_options.each { |opt| yield *opt }
|
||||
else
|
||||
yield *extra_options
|
||||
end
|
||||
end
|
||||
next
|
||||
end
|
||||
if hash["name"].is_a?(Proc)
|
||||
name = hash["name"].call
|
||||
else
|
||||
|
||||
@@ -13,6 +13,8 @@ class Game_Temp
|
||||
attr_accessor :battle_abort # battle flag: interrupt (unused)
|
||||
attr_accessor :title_screen_calling # return to title screen flag
|
||||
attr_accessor :common_event_id # common event ID to start
|
||||
attr_accessor :field_move_to_use
|
||||
attr_accessor :field_move_user
|
||||
# Flags indicating something is happening
|
||||
attr_accessor :in_menu # menu is open
|
||||
attr_accessor :in_storage # in-Pokémon storage flag
|
||||
|
||||
@@ -491,7 +491,7 @@ def using(window)
|
||||
end
|
||||
|
||||
def pbUpdateSpriteHash(windows)
|
||||
windows.each do |i|
|
||||
windows&.each do |i|
|
||||
window = i[1]
|
||||
if window
|
||||
if window.is_a?(Sprite) || window.is_a?(Window)
|
||||
@@ -591,7 +591,7 @@ def pbFadeOutIn(z = 99999, nofadeout = false)
|
||||
end
|
||||
end
|
||||
|
||||
def pbFadeOutInWithUpdate(z, sprites, nofadeout = false)
|
||||
def pbFadeOutInWithUpdate(sprites, z = 99999, nofadeout = false)
|
||||
duration = 0.4 # In seconds
|
||||
col = Color.new(0, 0, 0, 0)
|
||||
viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
|
||||
@@ -1243,19 +1243,6 @@ end
|
||||
class Window_AdvancedCommandPokemon < Window_DrawableCommand
|
||||
attr_reader :commands
|
||||
|
||||
def textWidth(bitmap, text)
|
||||
dims = [nil, 0]
|
||||
chars = getFormattedText(bitmap, 0, 0,
|
||||
Graphics.width - self.borderX - SpriteWindow_Base::TEXT_PADDING - 16,
|
||||
-1, text, self.rowHeight, true, true)
|
||||
chars.each do |ch|
|
||||
dims[0] = dims[0] ? [dims[0], ch[1]].min : ch[1]
|
||||
dims[1] = [dims[1], ch[1] + ch[3]].max
|
||||
end
|
||||
dims[0] = 0 if !dims[0]
|
||||
return dims[1] - dims[0]
|
||||
end
|
||||
|
||||
def initialize(commands, width = nil)
|
||||
@starting = true
|
||||
@commands = []
|
||||
@@ -1321,6 +1308,42 @@ class Window_AdvancedCommandPokemon < Window_DrawableCommand
|
||||
end
|
||||
end
|
||||
|
||||
def textWidth(bitmap, text)
|
||||
dims = [nil, 0]
|
||||
chars = getFormattedText(bitmap, 0, 0,
|
||||
Graphics.width - self.borderX - SpriteWindow_Base::TEXT_PADDING - 16,
|
||||
-1, text, self.rowHeight, true, true)
|
||||
chars.each do |ch|
|
||||
dims[0] = dims[0] ? [dims[0], ch[1]].min : ch[1]
|
||||
dims[1] = [dims[1], ch[1] + ch[3]].max
|
||||
end
|
||||
dims[0] = 0 if !dims[0]
|
||||
return dims[1] - dims[0]
|
||||
end
|
||||
|
||||
def getAutoDims(commands, dims, width = nil)
|
||||
rowMax = ((commands.length + self.columns - 1) / self.columns).to_i
|
||||
windowheight = (rowMax * self.rowHeight)
|
||||
windowheight += self.borderY
|
||||
if !width || width < 0
|
||||
width = 0
|
||||
tmpbitmap = Bitmap.new(1, 1)
|
||||
pbSetSystemFont(tmpbitmap)
|
||||
commands.each do |i|
|
||||
txt = toUnformattedText(i).gsub(/\n/, "")
|
||||
width = [width, tmpbitmap.text_size(txt).width].max
|
||||
end
|
||||
# one 16 to allow cursor
|
||||
width += 16 + 16 + SpriteWindow_Base::TEXT_PADDING
|
||||
tmpbitmap.dispose
|
||||
end
|
||||
# Store suggested width and height of window
|
||||
dims[0] = [self.borderX + 1,
|
||||
(width * self.columns) + self.borderX + ((self.columns - 1) * self.columnSpacing)].max
|
||||
dims[1] = [self.borderY + 1, windowheight].max
|
||||
dims[1] = [dims[1], Graphics.height].min
|
||||
end
|
||||
|
||||
def resizeToFit(commands, width = nil)
|
||||
dims = []
|
||||
getAutoDims(commands, dims, width)
|
||||
@@ -1340,7 +1363,7 @@ class Window_AdvancedCommandPokemon < Window_DrawableCommand
|
||||
pbDrawShadowText(self.contents, rect.x, rect.y + (self.contents.text_offset_y || 0),
|
||||
rect.width, rect.height, @commands[index], self.baseColor, self.shadowColor)
|
||||
else
|
||||
chars = getFormattedText(self.contents, rect.x, rect.y + (self.contents.text_offset_y || 0),
|
||||
chars = getFormattedText(self.contents, rect.x, rect.y + (self.contents.text_offset_y || 0) + 2, # TEXT OFFSET
|
||||
rect.width, rect.height, @commands[index], rect.height, true, true)
|
||||
drawFormattedChars(self.contents, chars)
|
||||
end
|
||||
|
||||
@@ -152,46 +152,33 @@ class Battle::Scene
|
||||
partyStart, _partyEnd = @battle.pbTeamIndexRangeFromBattlerIndex(idxBattler)
|
||||
modParty = @battle.pbPlayerDisplayParty(idxBattler)
|
||||
# Start party screen
|
||||
scene = PokemonParty_Scene.new
|
||||
switchScreen = PokemonPartyScreen.new(scene, modParty)
|
||||
msg = _INTL("Choose a Pokémon.")
|
||||
msg = _INTL("Send which Pokémon to Boxes?") if mode == 1
|
||||
switchScreen.pbStartScene(msg, @battle.pbNumPositions(0, 0))
|
||||
# Loop while in party screen
|
||||
loop do
|
||||
# Select a Pokémon
|
||||
scene.pbSetHelpText(msg)
|
||||
idxParty = switchScreen.pbChoosePokemon
|
||||
if idxParty < 0
|
||||
next if !canCancel
|
||||
break
|
||||
end
|
||||
party_mode = (mode == 1) ? :battle_choose_to_box : :battle_choose_pokemon
|
||||
screen = UI::Party.new(modParty, mode: party_mode)
|
||||
screen.choose_pokemon do |pkmn, party_index|
|
||||
next canCancel if party_index < 0
|
||||
# Choose a command for the selected Pokémon
|
||||
cmdSwitch = -1
|
||||
cmdBoxes = -1
|
||||
cmdSummary = -1
|
||||
commands = []
|
||||
commands[cmdSwitch = commands.length] = _INTL("Switch In") if mode == 0 && modParty[idxParty].able? &&
|
||||
(@battle.canSwitch || !canCancel)
|
||||
commands[cmdBoxes = commands.length] = _INTL("Send to Boxes") if mode == 1
|
||||
commands[cmdSummary = commands.length] = _INTL("Summary")
|
||||
commands[commands.length] = _INTL("Cancel")
|
||||
command = scene.pbShowCommands(_INTL("Do what with {1}?", modParty[idxParty].name), commands)
|
||||
if (cmdSwitch >= 0 && command == cmdSwitch) || # Switch In
|
||||
(cmdBoxes >= 0 && command == cmdBoxes) # Send to Boxes
|
||||
idxPartyRet = -1
|
||||
commands = {}
|
||||
commands[:switch_in] = _INTL("Switch In") if mode == 0 && pkmn.able? &&
|
||||
(@battle.canSwitch || !canCancel)
|
||||
commands[:send_to_boxes] = _INTL("Send to Boxes") if mode == 1
|
||||
commands[:summary] = _INTL("Summary")
|
||||
commands[:cancel] = _INTL("Cancel")
|
||||
choice = screen.show_choice_message(_INTL("Do what with {1}?", pkmn.name), commands)
|
||||
next canCancel if choice.nil?
|
||||
case choice
|
||||
when :switch_in, :send_to_boxes
|
||||
real_party_index = -1
|
||||
partyPos.each_with_index do |pos, i|
|
||||
next if pos != idxParty + partyStart
|
||||
idxPartyRet = i
|
||||
next if pos != party_index + partyStart
|
||||
real_party_index = i
|
||||
break
|
||||
end
|
||||
break if yield idxPartyRet, switchScreen
|
||||
elsif cmdSummary >= 0 && command == cmdSummary # Summary
|
||||
scene.pbSummary(idxParty, true)
|
||||
next true if yield real_party_index, screen
|
||||
when :summary
|
||||
screen.perform_action(:summary)
|
||||
end
|
||||
next false
|
||||
end
|
||||
# Close party screen
|
||||
switchScreen.pbEndScene
|
||||
# Fade back into battle screen
|
||||
pbFadeInAndShow(@sprites, visibleSprites)
|
||||
end
|
||||
@@ -272,34 +259,29 @@ class Battle::Scene
|
||||
partyStart, _partyEnd = @battle.pbTeamIndexRangeFromBattlerIndex(idxBattler)
|
||||
modParty = @battle.pbPlayerDisplayParty(idxBattler)
|
||||
# Start party screen
|
||||
pkmnScene = PokemonParty_Scene.new
|
||||
pkmnScreen = PokemonPartyScreen.new(pkmnScene, modParty)
|
||||
pkmnScreen.pbStartScene(_INTL("Use on which Pokémon?"), @battle.pbNumPositions(0, 0))
|
||||
idxParty = -1
|
||||
# Loop while in party screen
|
||||
loop do
|
||||
# Select a Pokémon
|
||||
pkmnScene.pbSetHelpText(_INTL("Use on which Pokémon?"))
|
||||
idxParty = pkmnScreen.pbChoosePokemon
|
||||
break if idxParty < 0
|
||||
idxPartyRet = -1
|
||||
party_idx = -1
|
||||
party_screen = UI::Party.new(modParty, mode: :battle_use_item)
|
||||
party_screen.choose_pokemon do |pkmn, party_index|
|
||||
party_idx = party_index
|
||||
next true if party_index < 0
|
||||
# Use the item on the selected Pokémon
|
||||
real_party_index = -1
|
||||
partyPos.each_with_index do |pos, i|
|
||||
next if pos != idxParty + partyStart
|
||||
idxPartyRet = i
|
||||
next if pos != party_index + partyStart
|
||||
real_party_index = i
|
||||
break
|
||||
end
|
||||
next if idxPartyRet < 0
|
||||
pkmn = party[idxPartyRet]
|
||||
next if !pkmn || pkmn.egg?
|
||||
idxMove = -1
|
||||
next false if real_party_index < 0
|
||||
next false if !pkmn || pkmn.egg?
|
||||
move_index = -1
|
||||
if useType == 2 # Use on Pokémon's move
|
||||
idxMove = pkmnScreen.pbChooseMove(pkmn, _INTL("Restore which move?"))
|
||||
next if idxMove < 0
|
||||
move_index = party_screen.choose_move(pkmn, _INTL("Restore which move?"))
|
||||
next false if move_index < 0
|
||||
end
|
||||
break if yield item.id, useType, idxPartyRet, idxMove, pkmnScene
|
||||
next true if yield item.id, useType, real_party_index, move_index, party_screen
|
||||
next false
|
||||
end
|
||||
pkmnScene.pbEndScene
|
||||
break if idxParty >= 0
|
||||
break if party_idx >= 0 # Item was used; close the Bag screen
|
||||
# Cancelled choosing a Pokémon; show the Bag screen again
|
||||
itemScene.pbFadeInScene
|
||||
when 4 # Use on opposing battler (Poké Balls)
|
||||
|
||||
@@ -14,6 +14,11 @@ module HiddenMoveHandlers
|
||||
return !CanUseMove[item].nil? && !UseMove[item].nil?
|
||||
end
|
||||
|
||||
def self.eachHandler
|
||||
ret = CanUseMove.keys & UseMove.keys
|
||||
ret.each { |key| yield key }
|
||||
end
|
||||
|
||||
# Returns whether move can be used
|
||||
def self.triggerCanUseMove(item, pokemon, showmsg)
|
||||
return false if !CanUseMove[item]
|
||||
|
||||
@@ -134,8 +134,8 @@ end
|
||||
def pbChangeLevel(pkmn, new_level, scene)
|
||||
new_level = new_level.clamp(1, GameData::GrowthRate.max_level)
|
||||
if pkmn.level == new_level
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1}'s level remained unchanged.", pkmn.name))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1}'s level remained unchanged.", pkmn.name))
|
||||
else
|
||||
pbMessage(_INTL("{1}'s level remained unchanged.", pkmn.name))
|
||||
end
|
||||
@@ -153,8 +153,8 @@ def pbChangeLevel(pkmn, new_level, scene)
|
||||
pkmn.hp = 1 if new_level > old_level && pkmn.species_data.base_stats[:HP] == 1
|
||||
scene.pbRefresh
|
||||
if old_level > new_level
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
else
|
||||
pbMessage(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
end
|
||||
@@ -170,8 +170,8 @@ def pbChangeLevel(pkmn, new_level, scene)
|
||||
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
|
||||
else
|
||||
pkmn.changeHappiness("vitamin")
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
else
|
||||
pbMessage(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
end
|
||||
@@ -199,7 +199,7 @@ def pbChangeLevel(pkmn, new_level, scene)
|
||||
evo.pbStartScreen(pkmn, new_species)
|
||||
evo.pbEvolution
|
||||
evo.pbEndScreen
|
||||
scene.pbRefresh if scene.is_a?(PokemonPartyScreen)
|
||||
scene.refresh if scene.is_a?(UI::Party)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -225,8 +225,8 @@ end
|
||||
def pbChangeExp(pkmn, new_exp, scene)
|
||||
new_exp = new_exp.clamp(0, pkmn.growth_rate.maximum_exp)
|
||||
if pkmn.exp == new_exp
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1}'s Exp. Points remained unchanged.", pkmn.name))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1}'s Exp. Points remained unchanged.", pkmn.name))
|
||||
else
|
||||
pbMessage(_INTL("{1}'s Exp. Points remained unchanged.", pkmn.name))
|
||||
end
|
||||
@@ -241,8 +241,8 @@ def pbChangeExp(pkmn, new_exp, scene)
|
||||
old_speed = pkmn.speed
|
||||
if pkmn.exp > new_exp # Loses Exp
|
||||
difference = pkmn.exp - new_exp
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} lost {2} Exp. Points!", pkmn.name, difference))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1} lost {2} Exp. Points!", pkmn.name, difference))
|
||||
else
|
||||
pbMessage(_INTL("{1} lost {2} Exp. Points!", pkmn.name, difference))
|
||||
end
|
||||
@@ -251,8 +251,8 @@ def pbChangeExp(pkmn, new_exp, scene)
|
||||
scene.pbRefresh
|
||||
return if pkmn.level == old_level
|
||||
# Level changed
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
else
|
||||
pbMessage(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
end
|
||||
@@ -268,8 +268,8 @@ def pbChangeExp(pkmn, new_exp, scene)
|
||||
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
|
||||
else # Gains Exp
|
||||
difference = new_exp - pkmn.exp
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} gained {2} Exp. Points!", pkmn.name, difference))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1} gained {2} Exp. Points!", pkmn.name, difference))
|
||||
else
|
||||
pbMessage(_INTL("{1} gained {2} Exp. Points!", pkmn.name, difference))
|
||||
end
|
||||
@@ -279,8 +279,8 @@ def pbChangeExp(pkmn, new_exp, scene)
|
||||
scene.pbRefresh
|
||||
return if pkmn.level == old_level
|
||||
# Level changed
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.show_message(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
else
|
||||
pbMessage(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
end
|
||||
@@ -308,7 +308,7 @@ def pbChangeExp(pkmn, new_exp, scene)
|
||||
evo.pbStartScreen(pkmn, new_species)
|
||||
evo.pbEvolution
|
||||
evo.pbEndScreen
|
||||
scene.pbRefresh if scene.is_a?(PokemonPartyScreen)
|
||||
scene.refresh if scene.is_a?(UI::Party)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -320,7 +320,7 @@ def pbGainExpFromExpCandy(pkmn, base_amt, qty, scene)
|
||||
return false
|
||||
end
|
||||
pbSEPlay("Pkmn level up")
|
||||
scene.scene.pbSetHelpText("") if scene.is_a?(PokemonPartyScreen)
|
||||
scene.set_help_text("") if scene.is_a?(UI::Party)
|
||||
if qty > 1
|
||||
(qty - 1).times { pkmn.changeHappiness("vitamin") }
|
||||
end
|
||||
@@ -581,9 +581,12 @@ end
|
||||
#===============================================================================
|
||||
# Teach and forget a move.
|
||||
#===============================================================================
|
||||
def pbLearnMove(pkmn, move, ignore_if_known = false, by_machine = false, &block)
|
||||
def pbLearnMove(pkmn, move, ignore_if_known = false, by_machine = false, screen = nil, &block)
|
||||
return false if !pkmn
|
||||
pkmn_name = pkmn.name
|
||||
move = GameData::Move.get(move).id
|
||||
move_name = GameData::Move.get(move).name
|
||||
# Check if Pokémon is unable to learn any moves
|
||||
if pkmn.egg? && !$DEBUG
|
||||
pbMessage(_INTL("Eggs can't be taught any moves."), &block)
|
||||
return false
|
||||
@@ -591,27 +594,29 @@ def pbLearnMove(pkmn, move, ignore_if_known = false, by_machine = false, &block)
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves."), &block)
|
||||
return false
|
||||
end
|
||||
pkmn_name = pkmn.name
|
||||
move_name = GameData::Move.get(move).name
|
||||
# Check if Pokémon can learn this move
|
||||
if pkmn.hasMove?(move)
|
||||
pbMessage(_INTL("{1} already knows {2}.", pkmn_name, move_name), &block) if !ignore_if_known
|
||||
if !ignore_if_known
|
||||
pbMessage(_INTL("{1} already knows {2}.", pkmn_name, move_name), &block)
|
||||
end
|
||||
return false
|
||||
elsif pkmn.numMoves < Pokemon::MAX_MOVES
|
||||
pkmn.learn_move(move)
|
||||
pbMessage("\\se[]" + _INTL("{1} learned {2}!", pkmn_name, move_name) + "\\se[Pkmn move learnt]", &block)
|
||||
return true
|
||||
end
|
||||
# Pokémon needs to forget a move to learn this one
|
||||
pbMessage(_INTL("{1} wants to learn {2}, but it already knows {3} moves.",
|
||||
pkmn_name, move_name, pkmn.numMoves.to_word) + "\1", &block)
|
||||
if pbConfirmMessage(_INTL("Should {1} forget a move to learn {2}?", pkmn_name, move_name), &block)
|
||||
loop do
|
||||
move_index = pbForgetMove(pkmn, move)
|
||||
move_index = pbForgetMove(pkmn, move, screen)
|
||||
if move_index >= 0
|
||||
old_move_name = pkmn.moves[move_index].name
|
||||
oldmovepp = pkmn.moves[move_index].pp
|
||||
old_move_pp = pkmn.moves[move_index].pp
|
||||
pkmn.moves[move_index] = Pokemon::Move.new(move) # Replaces current/total PP
|
||||
if by_machine && Settings::TAUGHT_MACHINES_KEEP_OLD_PP
|
||||
pkmn.moves[move_index].pp = [oldmovepp, pkmn.moves[move_index].total_pp].min
|
||||
pkmn.moves[move_index].pp = [old_move_pp, pkmn.moves[move_index].total_pp].min
|
||||
end
|
||||
pbMessage(_INTL("1, 2, and...\\wt[16] ...\\wt[16] ...\\wt[16] Ta-da!") + "\\se[Battle ball drop]\1", &block)
|
||||
pbMessage(_INTL("{1} forgot how to use {2}.\nAnd..." + "\1", pkmn_name, old_move_name), &block)
|
||||
@@ -629,11 +634,11 @@ def pbLearnMove(pkmn, move, ignore_if_known = false, by_machine = false, &block)
|
||||
return false
|
||||
end
|
||||
|
||||
def pbForgetMove(pkmn, moveToLearn)
|
||||
def pbForgetMove(pkmn, move_to_learn, screen = nil)
|
||||
ret = -1
|
||||
pbFadeOutIn do
|
||||
screen = UI::PokemonSummary.new([pkmn], 0, mode: :choose_move, new_move: moveToLearn)
|
||||
ret = screen.choose_move
|
||||
pbFadeOutInWithUpdate(screen&.sprites) do
|
||||
summary_screen = UI::PokemonSummary.new([pkmn], 0, mode: :choose_move, new_move: move_to_learn)
|
||||
ret = summary_screen.choose_move
|
||||
end
|
||||
return ret
|
||||
end
|
||||
@@ -642,7 +647,7 @@ end
|
||||
# Use an item from the Bag and/or on a Pokémon.
|
||||
#===============================================================================
|
||||
# @return [Integer] 0 = item wasn't used; 1 = item used; 2 = close Bag to use in field
|
||||
def pbUseItem(bag, item, bagscene = nil)
|
||||
def pbUseItem(bag, item, bag_scene = nil)
|
||||
itm = GameData::Item.get(item)
|
||||
useType = itm.field_use
|
||||
if useType == 1 # Item is usable on a Pokémon
|
||||
@@ -660,37 +665,35 @@ def pbUseItem(bag, item, bagscene = nil)
|
||||
end
|
||||
end
|
||||
pbFadeOutIn do
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene, $player.party)
|
||||
screen.pbStartScene(_INTL("Use on which Pokémon?"), false, annot)
|
||||
loop do
|
||||
scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
|
||||
chosen = screen.pbChoosePokemon
|
||||
if chosen < 0
|
||||
ret = false
|
||||
break
|
||||
end
|
||||
pkmn = $player.party[chosen]
|
||||
next if !pbCheckUseOnPokemon(item, pkmn, screen)
|
||||
screen = UI::Party.new($player.party, mode: :use_item)
|
||||
if itm.is_evolution_stone?
|
||||
screen.set_able_annotation_proc(proc { |pkmn| next pkmn.check_evolution_on_use_item(item) })
|
||||
end
|
||||
screen.choose_pokemon do |pkmn, party_index|
|
||||
next true if party_index < 0
|
||||
next false if !pbCheckUseOnPokemon(item, pkmn, screen)
|
||||
qty = 1
|
||||
max_at_once = ItemHandlers.triggerUseOnPokemonMaximum(item, pkmn)
|
||||
max_at_once = [max_at_once, $bag.quantity(item)].min
|
||||
max_at_once = [max_at_once, bag.quantity(item)].min
|
||||
if max_at_once > 1
|
||||
qty = screen.scene.pbChooseNumber(
|
||||
pbPlayDecisionSE
|
||||
qty = screen.choose_number(
|
||||
_INTL("How many {1} do you want to use?", GameData::Item.get(item).portion_name_plural), max_at_once
|
||||
)
|
||||
screen.scene.pbSetHelpText("") if screen.is_a?(PokemonPartyScreen)
|
||||
screen.set_help_text("")
|
||||
end
|
||||
next if qty <= 0
|
||||
next false if qty <= 0
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item, qty, pkmn, screen)
|
||||
next unless ret && itm.consumed_after_use?
|
||||
bag.remove(item, qty)
|
||||
next if bag.has?(item)
|
||||
pbMessage(_INTL("You used your last {1}.", itm.portion_name)) { screen.pbUpdate }
|
||||
break
|
||||
if ret && itm.consumed_after_use?
|
||||
bag.remove(item, qty)
|
||||
if !bag.has?(item)
|
||||
screen.show_message(_INTL("You used your last {1}.", itm.portion_name))
|
||||
next true
|
||||
end
|
||||
end
|
||||
next false
|
||||
end
|
||||
screen.pbEndScene
|
||||
bagscene&.pbRefresh
|
||||
bag_scene&.pbRefresh
|
||||
end
|
||||
return (ret) ? 1 : 0
|
||||
elsif useType == 2 || itm.is_machine? # Item is usable from Bag or teaches a move
|
||||
@@ -708,6 +711,7 @@ end
|
||||
|
||||
# Only called when in the party screen and having chosen an item to be used on
|
||||
# the selected Pokémon.
|
||||
# TODO: Replace all pbMessage and so on in here. scene is the party screen.
|
||||
def pbUseItemOnPokemon(item, pkmn, scene)
|
||||
itm = GameData::Item.get(item)
|
||||
# TM or HM
|
||||
@@ -738,12 +742,12 @@ def pbUseItemOnPokemon(item, pkmn, scene)
|
||||
qty = scene.scene.pbChooseNumber(
|
||||
_INTL("How many {1} do you want to use?", itm.portion_name_plural), max_at_once
|
||||
)
|
||||
scene.scene.pbSetHelpText("") if scene.is_a?(PokemonPartyScreen)
|
||||
scene.set_help_text("") if scene.is_a?(UI::Party)
|
||||
end
|
||||
return false if qty <= 0
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item, qty, pkmn, scene)
|
||||
scene.pbClearAnnotations
|
||||
scene.pbHardRefresh
|
||||
scene.clear_annotations
|
||||
scene.refresh
|
||||
if ret && itm.consumed_after_use?
|
||||
$bag.remove(item, qty)
|
||||
if !$bag.has?(item)
|
||||
@@ -779,6 +783,7 @@ end
|
||||
#===============================================================================
|
||||
# Give an item to a Pokémon to hold, and take a held item from a Pokémon.
|
||||
#===============================================================================
|
||||
# TODO: Replace all pbDisplay and so on in here.
|
||||
def pbGiveItemToPokemon(item, pkmn, scene, pkmnid = 0)
|
||||
return false if item.nil?
|
||||
newitemname = GameData::Item.get(item).portion_name
|
||||
@@ -824,6 +829,7 @@ def pbGiveItemToPokemon(item, pkmn, scene, pkmnid = 0)
|
||||
return false
|
||||
end
|
||||
|
||||
# TODO: Replace all pbDisplay and so on in here.
|
||||
def pbTakeItemFromPokemon(pkmn, scene)
|
||||
ret = false
|
||||
if !pkmn.hasItem?
|
||||
@@ -833,23 +839,25 @@ def pbTakeItemFromPokemon(pkmn, scene)
|
||||
elsif pkmn.mail
|
||||
if scene.pbConfirm(_INTL("Save the removed mail in your PC?"))
|
||||
if pbMoveToMailbox(pkmn)
|
||||
scene.pbDisplay(_INTL("The mail was saved in your PC."))
|
||||
pkmn.item = nil
|
||||
scene.pbDisplay(_INTL("The mail was saved in your PC."))
|
||||
ret = true
|
||||
else
|
||||
scene.pbDisplay(_INTL("Your PC's Mailbox is full."))
|
||||
end
|
||||
elsif scene.pbConfirm(_INTL("If the mail is removed, its message will be lost. OK?"))
|
||||
item_name = pkmn.item.portion_name
|
||||
$bag.add(pkmn.item)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.", pkmn.item.portion_name, pkmn.name))
|
||||
pkmn.item = nil
|
||||
pkmn.mail = nil
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.", item_name, pkmn.name))
|
||||
ret = true
|
||||
end
|
||||
else
|
||||
item_name = pkmn.item.portion_name
|
||||
$bag.add(pkmn.item)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.", pkmn.item.portion_name, pkmn.name))
|
||||
pkmn.item = nil
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.", item_name, pkmn.name))
|
||||
ret = true
|
||||
end
|
||||
return ret
|
||||
|
||||
@@ -243,19 +243,19 @@ ItemHandlers::UseInField.add(:SACREDASH, proc { |item|
|
||||
end
|
||||
revived = 0
|
||||
pbFadeOutIn do
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene, $player.party)
|
||||
screen.pbStartScene(_INTL("Using item..."), false)
|
||||
pbSEPlay("Use item in party")
|
||||
$player.party.each_with_index do |pkmn, i|
|
||||
next if !pkmn.fainted?
|
||||
revived += 1
|
||||
pkmn.heal
|
||||
screen.pbRefreshSingle(i)
|
||||
screen.pbDisplay(_INTL("{1}'s HP was restored.", pkmn.name))
|
||||
screen = UI::Party.new($player.party, mode: :choose_pokemon)
|
||||
screen.set_help_text(_INTL("Using item..."))
|
||||
screen.show_and_hide do
|
||||
$player.party.each_with_index do |pkmn, i|
|
||||
next if !pkmn.fainted?
|
||||
revived += 1
|
||||
pkmn.heal
|
||||
screen.refresh
|
||||
pbSEPlay("Use item in party")
|
||||
screen.show_message(_INTL("{1}'s HP was restored.", pkmn.name))
|
||||
end
|
||||
screen.show_message(_INTL("It won't have any effect.")) if revived == 0
|
||||
end
|
||||
screen.pbDisplay(_INTL("It won't have any effect.")) if revived == 0
|
||||
screen.pbEndScene
|
||||
end
|
||||
next (revived > 0)
|
||||
})
|
||||
@@ -391,16 +391,16 @@ ItemHandlers::UseOnPokemon.addIf(:evolution_stones,
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
end
|
||||
newspecies = pkmn.check_evolution_on_use_item(item)
|
||||
if newspecies
|
||||
new_species = pkmn.check_evolution_on_use_item(item)
|
||||
if new_species
|
||||
pbFadeOutInWithMusic do
|
||||
evo = PokemonEvolutionScene.new
|
||||
evo.pbStartScreen(pkmn, newspecies)
|
||||
evo.pbStartScreen(pkmn, new_species)
|
||||
evo.pbEvolution(false)
|
||||
evo.pbEndScreen
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbRefreshAnnotations(proc { |p| !p.check_evolution_on_use_item(item).nil? })
|
||||
scene.pbRefresh
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.set_able_annotation_proc(proc { |pkmn| !pkmn.check_evolution_on_use_item(item).nil? })
|
||||
scene.refresh
|
||||
end
|
||||
end
|
||||
next true
|
||||
@@ -415,17 +415,17 @@ ItemHandlers::UseOnPokemon.add(:SCROLLOFWATERS, proc { |item, qty, pkmn, scene|
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
end
|
||||
newspecies = pkmn.check_evolution_on_use_item(item)
|
||||
if newspecies
|
||||
new_species = pkmn.check_evolution_on_use_item(item)
|
||||
if new_species
|
||||
pkmn.form = 1 # NOTE: This is the only difference to the generic evolution stone code.
|
||||
pbFadeOutInWithMusic do
|
||||
evo = PokemonEvolutionScene.new
|
||||
evo.pbStartScreen(pkmn, newspecies)
|
||||
evo.pbStartScreen(pkmn, new_species)
|
||||
evo.pbEvolution(false)
|
||||
evo.pbEndScreen
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbRefreshAnnotations(proc { |p| !p.check_evolution_on_use_item(item).nil? })
|
||||
scene.pbRefresh
|
||||
if scene.is_a?(UI::Party)
|
||||
scene.set_able_annotation_proc(proc { |p| !p.check_evolution_on_use_item(item).nil? })
|
||||
scene.refresh
|
||||
end
|
||||
end
|
||||
next true
|
||||
@@ -995,7 +995,7 @@ ItemHandlers::UseOnPokemon.add(:RARECANDY, proc { |item, qty, pkmn, scene|
|
||||
evo.pbStartScreen(pkmn, new_species)
|
||||
evo.pbEvolution
|
||||
evo.pbEndScreen
|
||||
scene.pbRefresh if scene.is_a?(PokemonPartyScreen)
|
||||
scene.refresh if scene.is_a?(UI::Party)
|
||||
end
|
||||
next true
|
||||
end
|
||||
|
||||
@@ -101,7 +101,7 @@ def pbWriteMail(item, pkmn, pkmnid, scene)
|
||||
message = ""
|
||||
loop do
|
||||
message = pbMessageFreeText(_INTL("Please enter a message (max. 250 characters)."),
|
||||
"", false, 250, Graphics.width) { scene.pbUpdate }
|
||||
"", false, 250, Graphics.width) { scene.update }
|
||||
if message != ""
|
||||
# Store mail if a message was written
|
||||
poke1 = poke2 = nil
|
||||
@@ -120,6 +120,6 @@ def pbWriteMail(item, pkmn, pkmnid, scene)
|
||||
pbStoreMail(pkmn, item, message, poke1, poke2, poke3)
|
||||
return true
|
||||
end
|
||||
return false if scene.pbConfirm(_INTL("Stop giving the Pokémon Mail?"))
|
||||
return false if scene.show_confirm_message(_INTL("Stop giving the Pokémon Mail?"))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -120,7 +120,7 @@ class HeldItemIconSprite < Sprite
|
||||
self.y = y
|
||||
@pokemon = pokemon
|
||||
@item = nil
|
||||
self.item = @pokemon.item_id
|
||||
self.item = @pokemon&.item_id
|
||||
end
|
||||
|
||||
def dispose
|
||||
@@ -130,7 +130,7 @@ class HeldItemIconSprite < Sprite
|
||||
|
||||
def pokemon=(value)
|
||||
@pokemon = value
|
||||
self.item = @pokemon.item_id
|
||||
self.item = @pokemon&.item_id
|
||||
end
|
||||
|
||||
def item=(value)
|
||||
@@ -148,7 +148,7 @@ class HeldItemIconSprite < Sprite
|
||||
|
||||
def update
|
||||
super
|
||||
self.item = @pokemon.item_id
|
||||
self.item = @pokemon&.item_id
|
||||
if @animbitmap
|
||||
@animbitmap.update
|
||||
self.bitmap = @animbitmap.bitmap
|
||||
|
||||
@@ -686,10 +686,7 @@ class PokemonParty_Scene
|
||||
self.update
|
||||
break if oldsprite.x == old_start_x - (old_mult * Graphics.width / 2)
|
||||
end
|
||||
Settings::MAX_PARTY_SIZE.times do |i|
|
||||
@sprites["pokemon#{i}"].preselected = false
|
||||
@sprites["pokemon#{i}"].switching = false
|
||||
end
|
||||
pbClearSwitching
|
||||
pbRefresh
|
||||
end
|
||||
|
||||
@@ -914,43 +911,6 @@ class PokemonPartyScreen
|
||||
@scene.pbStartScene(@party, helptext, annotations)
|
||||
end
|
||||
|
||||
def pbChoosePokemon(helptext = nil)
|
||||
@scene.pbSetHelpText(helptext) if helptext
|
||||
return @scene.pbChoosePokemon
|
||||
end
|
||||
|
||||
def pbPokemonGiveScreen(item)
|
||||
@scene.pbStartScene(@party, _INTL("Give to which Pokémon?"))
|
||||
pkmnid = @scene.pbChoosePokemon
|
||||
ret = false
|
||||
if pkmnid >= 0
|
||||
ret = pbGiveItemToPokemon(item, @party[pkmnid], self, pkmnid)
|
||||
end
|
||||
pbRefreshSingle(pkmnid)
|
||||
@scene.pbEndScene
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbPokemonGiveMailScreen(mailIndex)
|
||||
@scene.pbStartScene(@party, _INTL("Give to which Pokémon?"))
|
||||
pkmnid = @scene.pbChoosePokemon
|
||||
if pkmnid >= 0
|
||||
pkmn = @party[pkmnid]
|
||||
if pkmn.hasItem? || pkmn.mail
|
||||
pbDisplay(_INTL("This Pokémon is holding an item. It can't hold mail."))
|
||||
elsif pkmn.egg?
|
||||
pbDisplay(_INTL("Eggs can't hold mail."))
|
||||
else
|
||||
pbDisplay(_INTL("Mail was transferred from the Mailbox."))
|
||||
pkmn.mail = $PokemonGlobal.mailbox[mailIndex]
|
||||
pkmn.item = pkmn.mail.item
|
||||
$PokemonGlobal.mailbox.delete_at(mailIndex)
|
||||
pbRefreshSingle(pkmnid)
|
||||
end
|
||||
end
|
||||
@scene.pbEndScene
|
||||
end
|
||||
|
||||
def pbEndScene
|
||||
@scene.pbEndScene
|
||||
end
|
||||
@@ -1006,6 +966,53 @@ class PokemonPartyScreen
|
||||
return true
|
||||
end
|
||||
|
||||
# For after using an evolution stone.
|
||||
def pbRefreshAnnotations(ableProc)
|
||||
return if !@scene.pbHasAnnotations?
|
||||
annot = []
|
||||
@party.each do |pkmn|
|
||||
elig = ableProc.call(pkmn)
|
||||
annot.push((elig) ? _INTL("ABLE") : _INTL("NOT ABLE"))
|
||||
end
|
||||
@scene.pbAnnotate(annot)
|
||||
end
|
||||
|
||||
def pbClearAnnotations
|
||||
@scene.pbAnnotate(nil)
|
||||
end
|
||||
|
||||
def pbPokemonGiveScreen(item)
|
||||
@scene.pbStartScene(@party, _INTL("Give to which Pokémon?"))
|
||||
pkmnid = @scene.pbChoosePokemon
|
||||
ret = false
|
||||
if pkmnid >= 0
|
||||
ret = pbGiveItemToPokemon(item, @party[pkmnid], self, pkmnid)
|
||||
end
|
||||
pbRefreshSingle(pkmnid)
|
||||
@scene.pbEndScene
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbPokemonGiveMailScreen(mailIndex)
|
||||
@scene.pbStartScene(@party, _INTL("Give to which Pokémon?"))
|
||||
pkmnid = @scene.pbChoosePokemon
|
||||
if pkmnid >= 0
|
||||
pkmn = @party[pkmnid]
|
||||
if pkmn.hasItem? || pkmn.mail
|
||||
pbDisplay(_INTL("This Pokémon is holding an item. It can't hold mail."))
|
||||
elsif pkmn.egg?
|
||||
pbDisplay(_INTL("Eggs can't hold mail."))
|
||||
else
|
||||
pbDisplay(_INTL("Mail was transferred from the Mailbox."))
|
||||
pkmn.mail = $PokemonGlobal.mailbox[mailIndex]
|
||||
pkmn.item = pkmn.mail.item
|
||||
$PokemonGlobal.mailbox.delete_at(mailIndex)
|
||||
pbRefreshSingle(pkmnid)
|
||||
end
|
||||
end
|
||||
@scene.pbEndScene
|
||||
end
|
||||
|
||||
def pbSwitch(oldid, newid)
|
||||
if oldid != newid
|
||||
@scene.pbSwitchBegin(oldid, newid)
|
||||
@@ -1029,21 +1036,6 @@ class PokemonPartyScreen
|
||||
return @scene.pbShowCommands(helptext, movenames, index)
|
||||
end
|
||||
|
||||
# For after using an evolution stone.
|
||||
def pbRefreshAnnotations(ableProc)
|
||||
return if !@scene.pbHasAnnotations?
|
||||
annot = []
|
||||
@party.each do |pkmn|
|
||||
elig = ableProc.call(pkmn)
|
||||
annot.push((elig) ? _INTL("ABLE") : _INTL("NOT ABLE"))
|
||||
end
|
||||
@scene.pbAnnotate(annot)
|
||||
end
|
||||
|
||||
def pbClearAnnotations
|
||||
@scene.pbAnnotate(nil)
|
||||
end
|
||||
|
||||
def pbPokemonMultipleEntryScreenEx(ruleset)
|
||||
annot = []
|
||||
statuses = []
|
||||
@@ -1134,6 +1126,11 @@ class PokemonPartyScreen
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbChoosePokemon(helptext = nil)
|
||||
@scene.pbSetHelpText(helptext) if helptext
|
||||
return @scene.pbChoosePokemon
|
||||
end
|
||||
|
||||
def pbChooseAblePokemon(ableProc, allowIneligible = false)
|
||||
annot = []
|
||||
eligibility = []
|
||||
@@ -1480,78 +1477,3 @@ MenuHandlers.add(:party_menu_item, :move, {
|
||||
screen.scene.pbSelect(old_party_idx) if !moved
|
||||
}
|
||||
})
|
||||
|
||||
#===============================================================================
|
||||
# Open the party screen.
|
||||
#===============================================================================
|
||||
def pbPokemonScreen
|
||||
pbFadeOutIn do
|
||||
sscene = PokemonParty_Scene.new
|
||||
sscreen = PokemonPartyScreen.new(sscene, $player.party)
|
||||
sscreen.pbPokemonScreen
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Choose a Pokémon in the party.
|
||||
#===============================================================================
|
||||
# Choose a Pokémon/egg from the party.
|
||||
# Stores result in variable _variableNumber_ and the chosen Pokémon's name in
|
||||
# variable _nameVarNumber_; result is -1 if no Pokémon was chosen
|
||||
def pbChoosePokemon(variableNumber, nameVarNumber, ableProc = nil, allowIneligible = false)
|
||||
chosen = 0
|
||||
pbFadeOutIn do
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene, $player.party)
|
||||
if ableProc
|
||||
chosen = screen.pbChooseAblePokemon(ableProc, allowIneligible)
|
||||
else
|
||||
screen.pbStartScene(_INTL("Choose a Pokémon."), false)
|
||||
chosen = screen.pbChoosePokemon
|
||||
screen.pbEndScene
|
||||
end
|
||||
end
|
||||
pbSet(variableNumber, chosen)
|
||||
if chosen >= 0
|
||||
pbSet(nameVarNumber, $player.party[chosen].name)
|
||||
else
|
||||
pbSet(nameVarNumber, "")
|
||||
end
|
||||
end
|
||||
|
||||
def pbChooseNonEggPokemon(variableNumber, nameVarNumber)
|
||||
pbChoosePokemon(variableNumber, nameVarNumber, proc { |pkmn| !pkmn.egg? })
|
||||
end
|
||||
|
||||
def pbChooseAblePokemon(variableNumber, nameVarNumber)
|
||||
pbChoosePokemon(variableNumber, nameVarNumber, proc { |pkmn| !pkmn.egg? && pkmn.hp > 0 })
|
||||
end
|
||||
|
||||
# Same as pbChoosePokemon, but prevents choosing an egg or a Shadow Pokémon.
|
||||
def pbChooseTradablePokemon(variableNumber, nameVarNumber, ableProc = nil, allowIneligible = false)
|
||||
chosen = 0
|
||||
pbFadeOutIn do
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene, $player.party)
|
||||
if ableProc
|
||||
chosen = screen.pbChooseTradablePokemon(ableProc, allowIneligible)
|
||||
else
|
||||
screen.pbStartScene(_INTL("Choose a Pokémon."), false)
|
||||
chosen = screen.pbChoosePokemon
|
||||
screen.pbEndScene
|
||||
end
|
||||
end
|
||||
pbSet(variableNumber, chosen)
|
||||
if chosen >= 0
|
||||
pbSet(nameVarNumber, $player.party[chosen].name)
|
||||
else
|
||||
pbSet(nameVarNumber, "")
|
||||
end
|
||||
end
|
||||
|
||||
def pbChoosePokemonForTrade(variableNumber, nameVarNumber, wanted)
|
||||
wanted = GameData::Species.get(wanted).species
|
||||
pbChooseTradablePokemon(variableNumber, nameVarNumber, proc { |pkmn|
|
||||
next pkmn.species == wanted
|
||||
})
|
||||
end
|
||||
|
||||
@@ -513,10 +513,11 @@ class PokemonBagScreen
|
||||
@scene.pbDisplay(_INTL("The {1} can't be held.", itm.portion_name))
|
||||
else
|
||||
pbFadeOutIn do
|
||||
sscene = PokemonParty_Scene.new
|
||||
sscreen = PokemonPartyScreen.new(sscene, $player.party)
|
||||
sscreen.pbPokemonGiveScreen(item)
|
||||
@scene.pbRefresh
|
||||
screen = UI::Party.new($player.party, mode: :choose_pokemon)
|
||||
screen.choose_pokemon do |pkmn, party_index|
|
||||
pbGiveItemToPokemon(item, screen.pokemon, screen, chosen) if party_index >= 0
|
||||
next true
|
||||
end
|
||||
end
|
||||
end
|
||||
elsif cmdToss >= 0 && command == cmdToss # Toss item
|
||||
|
||||
@@ -261,7 +261,7 @@ class PokemonReadyMenu
|
||||
user = $player.party[commands[0][command[1]][3]]
|
||||
if move == :FLY
|
||||
ret = nil
|
||||
pbFadeOutInWithUpdate(99999, @scene.sprites) do
|
||||
pbFadeOutInWithUpdate(@scene.sprites) do
|
||||
pbHideMenu
|
||||
scene = PokemonRegionMap_Scene.new(-1, false)
|
||||
screen = PokemonRegionMapScreen.new(scene)
|
||||
|
||||
@@ -1576,7 +1576,7 @@ class PokemonStorageScreen
|
||||
elsif cmdRelease >= 0 && command == cmdRelease # Release
|
||||
pbRelease(selected, @heldpkmn)
|
||||
elsif cmdDebug >= 0 && command == cmdDebug # Debug
|
||||
pbPokemonDebug((@heldpkmn) ? @heldpkmn : pokemon, selected, heldpoke)
|
||||
pokemon_debug_menu((@heldpkmn) ? @heldpkmn : pokemon, selected, heldpoke)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -68,9 +68,9 @@ def pbPCMailbox
|
||||
commands.push(_INTL("Cancel"))
|
||||
command = pbShowCommands(nil, commands, -1, command)
|
||||
if command >= 0 && command < $PokemonGlobal.mailbox.length
|
||||
mailIndex = command
|
||||
mail_index = command
|
||||
commandMail = pbMessage(
|
||||
_INTL("What do you want to do with {1}'s Mail?", $PokemonGlobal.mailbox[mailIndex].sender),
|
||||
_INTL("What do you want to do with {1}'s Mail?", $PokemonGlobal.mailbox[mail_index].sender),
|
||||
[_INTL("Read"),
|
||||
_INTL("Move to Bag"),
|
||||
_INTL("Give"),
|
||||
@@ -79,22 +79,36 @@ def pbPCMailbox
|
||||
case commandMail
|
||||
when 0 # Read
|
||||
pbFadeOutIn do
|
||||
pbDisplayMail($PokemonGlobal.mailbox[mailIndex])
|
||||
pbDisplayMail($PokemonGlobal.mailbox[mail_index])
|
||||
end
|
||||
when 1 # Move to Bag
|
||||
if pbConfirmMessage(_INTL("The message will be lost. Is that OK?"))
|
||||
if $bag.add($PokemonGlobal.mailbox[mailIndex].item)
|
||||
if $bag.add($PokemonGlobal.mailbox[mail_index].item)
|
||||
pbMessage(_INTL("The Mail was returned to the Bag with its message erased."))
|
||||
$PokemonGlobal.mailbox.delete_at(mailIndex)
|
||||
$PokemonGlobal.mailbox.delete_at(mail_index)
|
||||
else
|
||||
pbMessage(_INTL("The Bag is full."))
|
||||
end
|
||||
end
|
||||
when 2 # Give
|
||||
pbFadeOutIn do
|
||||
sscene = PokemonParty_Scene.new
|
||||
sscreen = PokemonPartyScreen.new(sscene, $player.party)
|
||||
sscreen.pbPokemonGiveMailScreen(mailIndex)
|
||||
screen = UI::Party.new($player.party, mode: :choose_pokemon)
|
||||
screen.choose_pokemon do |pkmn, party_index|
|
||||
next true if party_index < 0
|
||||
if pkmn.egg?
|
||||
screen.show_message(_INTL("Eggs can't hold mail."))
|
||||
elsif pkmn.hasItem? || pkmn.mail
|
||||
screen.show_message(_INTL("This Pokémon is holding an item. It can't hold mail."))
|
||||
else
|
||||
pkmn.mail = $PokemonGlobal.mailbox[mail_index]
|
||||
pkmn.item = pkmn.mail.item
|
||||
$PokemonGlobal.mailbox.delete_at(mail_index)
|
||||
screen.refresh
|
||||
screen.show_message(_INTL("Mail was transferred from the Mailbox."))
|
||||
next true
|
||||
end
|
||||
next false
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
|
||||
@@ -2,60 +2,17 @@ module UI
|
||||
#=============================================================================
|
||||
# The visuals class.
|
||||
#=============================================================================
|
||||
class BaseVisuals
|
||||
UI_FOLDER = "Graphics/UI/"
|
||||
GRAPHICS_FOLDER = "" # Subfolder in UI_FOLDER
|
||||
BACKGROUND_FILENAME = "bg"
|
||||
TEXT_COLOR_THEMES = { # These color themes are added to @sprites[:overlay]
|
||||
module SpriteContainerMixin
|
||||
UI_FOLDER = "Graphics/UI/"
|
||||
GRAPHICS_FOLDER = "" # Subfolder in UI_FOLDER
|
||||
TEXT_COLOR_THEMES = { # These color themes are added to @sprites[:overlay]
|
||||
:default => [Color.new(72, 72, 72), Color.new(160, 160, 160)] # Base and shadow colour
|
||||
}
|
||||
|
||||
def initialize
|
||||
@bitmaps = {}
|
||||
@sprites = {}
|
||||
initialize_viewport
|
||||
initialize_bitmaps
|
||||
initialize_background
|
||||
initialize_overlay
|
||||
initialize_message_box
|
||||
# TODO: Initialize dialogue box for messages to use.
|
||||
initialize_sprites
|
||||
refresh
|
||||
end
|
||||
|
||||
def initialize_viewport
|
||||
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@viewport.z = 99999
|
||||
end
|
||||
|
||||
def initialize_bitmaps
|
||||
end
|
||||
|
||||
def initialize_background
|
||||
addBackgroundPlane(@sprites, :background, self.class::GRAPHICS_FOLDER + background_filename, @viewport)
|
||||
@sprites[:background].z = -1000
|
||||
end
|
||||
|
||||
def initialize_overlay
|
||||
add_overlay(:overlay)
|
||||
end
|
||||
|
||||
def initialize_message_box
|
||||
@sprites[:message_box] = Window_AdvancedTextPokemon.new("")
|
||||
@sprites[:message_box].viewport = @viewport
|
||||
@sprites[:message_box].z = 2000
|
||||
@sprites[:message_box].visible = false
|
||||
@sprites[:message_box].letterbyletter = true
|
||||
pbBottomLeftLines(@sprites[:message_box], 2)
|
||||
end
|
||||
|
||||
def initialize_sprites
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def add_overlay(overlay)
|
||||
@sprites[overlay] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
|
||||
def add_overlay(overlay, overlay_width = -1, overlay_height = -1)
|
||||
overlay_width = Graphics.width if overlay_width < 0
|
||||
overlay_height = Graphics.height if overlay_height < 0
|
||||
@sprites[overlay] = BitmapSprite.new(overlay_width, overlay_height, @viewport)
|
||||
@sprites[overlay].z = 1000
|
||||
self.class::TEXT_COLOR_THEMES.each_pair { |key, values| @sprites[overlay].add_text_theme(key, *values) }
|
||||
pbSetSystemFont(@sprites[overlay].bitmap)
|
||||
@@ -85,20 +42,16 @@ module UI
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def fade_in
|
||||
pbFadeInAndShow(@sprites) { update_visuals }
|
||||
end
|
||||
|
||||
def fade_out
|
||||
pbFadeOutAndHide(@sprites) { update_visuals }
|
||||
end
|
||||
|
||||
def dispose
|
||||
@sprites.each_value { |s| s.dispose if s && !s.disposed? }
|
||||
@sprites.clear
|
||||
@bitmaps.each_value { |b| b.dispose if b && !b.disposed? }
|
||||
@bitmaps.clear
|
||||
@viewport.dispose
|
||||
@disposed = true
|
||||
end
|
||||
|
||||
def disposed?
|
||||
return !!@disposed
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -126,123 +79,6 @@ module UI
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def show_message(text)
|
||||
@sprites[:message_box].text = text
|
||||
@sprites[:message_box].visible = true
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
if @sprites[:message_box].busy?
|
||||
if Input.trigger?(Input::USE)
|
||||
pbPlayDecisionSE if @sprites[:message_box].pausing?
|
||||
@sprites[:message_box].resume
|
||||
end
|
||||
elsif Input.trigger?(Input::USE) || Input.trigger?(Input::BACK)
|
||||
break
|
||||
end
|
||||
end
|
||||
@sprites[:message_box].visible = false
|
||||
end
|
||||
|
||||
def show_confirm_message(text)
|
||||
ret = false
|
||||
@sprites[:message_box].text = text
|
||||
@sprites[:message_box].visible = true
|
||||
using(cmd_window = Window_CommandPokemon.new([_INTL("Yes"), _INTL("No")])) do
|
||||
cmd_window.z = @viewport.z + 1
|
||||
cmd_window.visible = false
|
||||
pbBottomRight(cmd_window)
|
||||
cmd_window.y -= @sprites[:message_box].height
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
cmd_window.visible = true if !@sprites[:message_box].busy?
|
||||
cmd_window.update
|
||||
if !@sprites[:message_box].busy?
|
||||
if Input.trigger?(Input::BACK)
|
||||
pbPlayCancelSE
|
||||
ret = false
|
||||
break
|
||||
elsif Input.trigger?(Input::USE) && @sprites[:message_box].resume
|
||||
pbPlayDecisionSE
|
||||
ret = (cmd_window.index == 0)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@sprites[:message_box].visible = false
|
||||
return ret
|
||||
end
|
||||
|
||||
def show_choice_message(text, options, index = 0)
|
||||
ret = -1
|
||||
commands = options
|
||||
commands = options.values if options.is_a?(Hash)
|
||||
@sprites[:message_box].text = text
|
||||
@sprites[:message_box].visible = true
|
||||
using(cmd_window = Window_CommandPokemon.new(commands)) do
|
||||
cmd_window.z = @viewport.z + 1
|
||||
cmd_window.visible = false
|
||||
cmd_window.index = index
|
||||
pbBottomRight(cmd_window)
|
||||
cmd_window.y -= @sprites[:message_box].height
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
cmd_window.visible = true if !@sprites[:message_box].busy?
|
||||
cmd_window.update
|
||||
if !@sprites[:message_box].busy?
|
||||
if Input.trigger?(Input::BACK)
|
||||
pbPlayCancelSE
|
||||
ret = -1
|
||||
break
|
||||
elsif Input.trigger?(Input::USE) && @sprites[:message_box].resume
|
||||
pbPlayDecisionSE
|
||||
ret = cmd_window.index
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@sprites[:message_box].visible = false
|
||||
ret = options.keys[ret] if options.is_a?(Hash)
|
||||
return ret
|
||||
end
|
||||
|
||||
def show_choice(options, index = 0)
|
||||
ret = -1
|
||||
commands = options
|
||||
commands = options.values if options.is_a?(Hash)
|
||||
using(cmd_window = Window_CommandPokemon.new(commands)) do
|
||||
cmd_window.z = @viewport.z + 1
|
||||
cmd_window.index = index
|
||||
pbBottomRight(cmd_window)
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
cmd_window.update
|
||||
if Input.trigger?(Input::BACK)
|
||||
pbPlayCancelSE
|
||||
ret = -1
|
||||
break
|
||||
elsif Input.trigger?(Input::USE)
|
||||
pbPlayDecisionSE
|
||||
ret = cmd_window.index
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
ret = options.keys[ret] if options.is_a?(Hash)
|
||||
return ret
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# NOTE: max_width should include the width of the text shadow at the end of
|
||||
# the string (because characters in the font have a blank 2 pixels
|
||||
# after them for the shadow to occupy).
|
||||
@@ -267,7 +103,7 @@ module UI
|
||||
|
||||
def draw_paragraph_text(string, text_x, text_y, text_width, num_lines, theme: :default, overlay: :overlay)
|
||||
drawTextEx(@sprites[overlay].bitmap, text_x, text_y, text_width, num_lines,
|
||||
string, *self.class::TEXT_COLOR_THEMES[theme])
|
||||
string, *self.class::TEXT_COLOR_THEMES[theme])
|
||||
end
|
||||
|
||||
# NOTE: This also draws string in a paragraph, but with no limit on the
|
||||
@@ -295,7 +131,7 @@ module UI
|
||||
index = (char == "/") ? 10 : char.to_i
|
||||
char_x = (align == :right) ? text_x - ((i + 1) * char_width) : text_x + (i * char_width)
|
||||
draw_image(bitmap, char_x, text_y,
|
||||
index * char_width, 0, char_width, char_height, overlay: overlay)
|
||||
index * char_width, 0, char_width, char_height, overlay: overlay)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -316,6 +152,311 @@ module UI
|
||||
pbUpdateSpriteHash(@sprites)
|
||||
end
|
||||
|
||||
def update
|
||||
update_visuals
|
||||
end
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
# The visuals class.
|
||||
#=============================================================================
|
||||
class SpriteContainer
|
||||
attr_reader :x, :y, :z, :visible, :color
|
||||
|
||||
include SpriteContainerMixin
|
||||
|
||||
def initialize(viewport)
|
||||
@viewport = viewport
|
||||
@x ||= 0
|
||||
@y ||= 0
|
||||
@z ||= 0
|
||||
@visible = true
|
||||
@color = Color.new(0, 0, 0, 0)
|
||||
@bitmaps = {}
|
||||
@sprites = {}
|
||||
@sprites_values = {}
|
||||
initialize_bitmaps
|
||||
initialize_sprites
|
||||
refresh_sprites_values
|
||||
end
|
||||
|
||||
def initialize_bitmaps
|
||||
end
|
||||
|
||||
def initialize_sprites
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# x, y, z, visible, opacity, color
|
||||
def x=(value)
|
||||
@x = value
|
||||
@sprites.each_pair do |key, sprite|
|
||||
sprite.x = @x + @sprites_values[key][:x]
|
||||
end
|
||||
end
|
||||
|
||||
def y=(value)
|
||||
@y = value
|
||||
@sprites.each_pair do |key, sprite|
|
||||
sprite.y = @y + @sprites_values[key][:y]
|
||||
end
|
||||
end
|
||||
|
||||
def z=(value)
|
||||
@z = value
|
||||
@sprites.each_pair do |key, sprite|
|
||||
sprite.z = @z + @sprites_values[key][:z]
|
||||
end
|
||||
end
|
||||
|
||||
def visible=(value)
|
||||
@visible = value
|
||||
@sprites.each_pair do |key, sprite|
|
||||
sprite.visible = @visible && @sprites_values[key][:visible]
|
||||
end
|
||||
end
|
||||
|
||||
def color=(value)
|
||||
@color = value
|
||||
@sprites.each_pair do |key, sprite|
|
||||
sprite.color = @color
|
||||
end
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def record_values(key)
|
||||
@sprites_values[key] ||= {}
|
||||
@sprites_values[key][:x] = @sprites[key].x
|
||||
@sprites_values[key][:y] = @sprites[key].y
|
||||
@sprites_values[key][:z] = @sprites[key].z
|
||||
@sprites_values[key][:visible] = @sprites[key].visible
|
||||
end
|
||||
|
||||
def refresh_sprites_values
|
||||
self.x = @x
|
||||
self.y = @y
|
||||
self.z = @z
|
||||
self.visible = @visible
|
||||
end
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
# The visuals class.
|
||||
#=============================================================================
|
||||
class BaseVisuals
|
||||
BACKGROUND_FILENAME = "bg"
|
||||
|
||||
include SpriteContainerMixin
|
||||
|
||||
def initialize
|
||||
@bitmaps = {}
|
||||
@sprites = {}
|
||||
initialize_viewport
|
||||
initialize_bitmaps
|
||||
initialize_background
|
||||
initialize_overlay
|
||||
initialize_message_box
|
||||
initialize_sprites
|
||||
refresh
|
||||
end
|
||||
|
||||
def initialize_viewport
|
||||
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@viewport.z = 99999
|
||||
end
|
||||
|
||||
def initialize_bitmaps
|
||||
end
|
||||
|
||||
def initialize_background
|
||||
addBackgroundPlane(@sprites, :background, self.class::GRAPHICS_FOLDER + background_filename, @viewport)
|
||||
@sprites[:background].z = -1000
|
||||
end
|
||||
|
||||
def initialize_overlay
|
||||
add_overlay(:overlay)
|
||||
end
|
||||
|
||||
def initialize_message_box
|
||||
@sprites[:message_box] = Window_AdvancedTextPokemon.new("")
|
||||
@sprites[:message_box].viewport = @viewport
|
||||
@sprites[:message_box].z = 2000
|
||||
@sprites[:message_box].visible = false
|
||||
@sprites[:message_box].letterbyletter = true
|
||||
pbBottomLeftLines(@sprites[:message_box], 2)
|
||||
@sprites[:speech_box] = Window_AdvancedTextPokemon.new("")
|
||||
@sprites[:speech_box].viewport = @viewport
|
||||
@sprites[:speech_box].z = 2001
|
||||
@sprites[:speech_box].visible = false
|
||||
@sprites[:speech_box].letterbyletter = true
|
||||
@sprites[:speech_box].setSkin(MessageConfig.pbGetSpeechFrame)
|
||||
pbBottomLeftLines(@sprites[:speech_box], 2)
|
||||
end
|
||||
|
||||
def initialize_sprites
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def fade_in
|
||||
pbFadeInAndShow(@sprites)# { update_visuals }
|
||||
end
|
||||
|
||||
def fade_out
|
||||
pbFadeOutAndHide(@sprites)# { update_visuals }
|
||||
end
|
||||
|
||||
def dispose
|
||||
super
|
||||
@viewport.dispose
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def show_message(text)
|
||||
@sprites[:speech_box].visible = true
|
||||
@sprites[:speech_box].text = text
|
||||
pbBottomLeftLines(@sprites[:speech_box], 2)
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
if @sprites[:speech_box].busy?
|
||||
if Input.trigger?(Input::USE)
|
||||
pbPlayDecisionSE if @sprites[:speech_box].pausing?
|
||||
@sprites[:speech_box].resume
|
||||
end
|
||||
elsif Input.trigger?(Input::USE) || Input.trigger?(Input::BACK)
|
||||
break
|
||||
end
|
||||
end
|
||||
@sprites[:speech_box].visible = false
|
||||
end
|
||||
|
||||
def show_confirm_message(text)
|
||||
ret = false
|
||||
@sprites[:speech_box].visible = true
|
||||
@sprites[:speech_box].text = text
|
||||
pbBottomLeftLines(@sprites[:speech_box], 2)
|
||||
using(cmd_window = Window_CommandPokemon.new([_INTL("Yes"), _INTL("No")])) do
|
||||
cmd_window.z = @viewport.z + 1
|
||||
cmd_window.visible = false
|
||||
pbBottomRight(cmd_window)
|
||||
cmd_window.y -= @sprites[:speech_box].height
|
||||
cmd_window.visible = true if !@sprites[:speech_box].busy?
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
cmd_window.visible = true if !@sprites[:speech_box].busy?
|
||||
cmd_window.update
|
||||
if !@sprites[:speech_box].busy?
|
||||
if Input.trigger?(Input::BACK)
|
||||
pbPlayCancelSE
|
||||
ret = false
|
||||
break
|
||||
elsif Input.trigger?(Input::USE) && @sprites[:speech_box].resume
|
||||
pbPlayDecisionSE
|
||||
ret = (cmd_window.index == 0)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@sprites[:speech_box].visible = false
|
||||
return ret
|
||||
end
|
||||
|
||||
# align: Where the command window is in relation to the message window.
|
||||
# :horizontal is side by side, :vertical is command window above.
|
||||
def show_choice_message(text, options, index = 0, align: :horizontal, cmd_side: :right)
|
||||
ret = -1
|
||||
commands = options
|
||||
commands = options.values if options.is_a?(Hash)
|
||||
@sprites[:speech_box].visible = true
|
||||
@sprites[:speech_box].text = text
|
||||
using(cmd_window = Window_AdvancedCommandPokemon.new(commands)) do
|
||||
if align == :vertical
|
||||
@sprites[:speech_box].resizeHeightToFit(text, Graphics.width)
|
||||
else
|
||||
@sprites[:speech_box].resizeHeightToFit(text, Graphics.width - cmd_window.width)
|
||||
end
|
||||
cmd_window.z = @viewport.z + 1
|
||||
cmd_window.visible = false
|
||||
cmd_window.index = index
|
||||
if cmd_side == :right
|
||||
pbBottomLeft(@sprites[:speech_box])
|
||||
pbBottomRight(cmd_window)
|
||||
else
|
||||
pbBottomRight(@sprites[:speech_box])
|
||||
pbBottomLeft(cmd_window)
|
||||
end
|
||||
if align == :vertical
|
||||
cmd_window.height = [cmd_window.height, Graphics.height - @sprites[:speech_box].height].min
|
||||
cmd_window.y = Graphics.height - @sprites[:speech_box].height - cmd_window.height
|
||||
end
|
||||
cmd_window.visible = true if !@sprites[:speech_box].busy?
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
cmd_window.visible = true if !@sprites[:speech_box].busy?
|
||||
cmd_window.update
|
||||
if !@sprites[:speech_box].busy?
|
||||
if Input.trigger?(Input::BACK)
|
||||
pbPlayCancelSE
|
||||
ret = -1
|
||||
break
|
||||
elsif Input.trigger?(Input::USE) && @sprites[:speech_box].resume
|
||||
pbPlayDecisionSE
|
||||
ret = cmd_window.index
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@sprites[:speech_box].visible = false
|
||||
ret = options.keys[ret] if options.is_a?(Hash)
|
||||
return ret
|
||||
end
|
||||
|
||||
def show_choice(options, index = 0)
|
||||
ret = -1
|
||||
commands = options
|
||||
commands = options.values if options.is_a?(Hash)
|
||||
using(cmd_window = Window_AdvancedCommandPokemon.new(commands)) do
|
||||
cmd_window.z = @viewport.z + 1
|
||||
cmd_window.index = index
|
||||
pbBottomRight(cmd_window)
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
update_visuals
|
||||
cmd_window.update
|
||||
if Input.trigger?(Input::BACK)
|
||||
pbPlayCancelSE
|
||||
ret = -1
|
||||
break
|
||||
elsif Input.trigger?(Input::USE)
|
||||
pbPlayDecisionSE
|
||||
ret = cmd_window.index
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
ret = options.keys[ret] if options.is_a?(Hash)
|
||||
return ret
|
||||
end
|
||||
|
||||
# TODO: Rewrite this.
|
||||
def choose_number(help_text, maximum, init_num = 1)
|
||||
return UIHelper.pbChooseNumber(@sprites[:speech_box], help_text, maximum, init_num) { update_visuals }
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def update_input
|
||||
if Input.trigger?(Input::BACK)
|
||||
return :quit
|
||||
@@ -323,11 +464,6 @@ module UI
|
||||
return nil
|
||||
end
|
||||
|
||||
# def update
|
||||
# update_visuals
|
||||
# return update_input
|
||||
# end
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def navigate
|
||||
@@ -395,46 +531,72 @@ module UI
|
||||
return @visuals.show_choice_message(text, options, initial_index)
|
||||
end
|
||||
|
||||
alias pbShowCommands show_choice_message
|
||||
|
||||
def show_choice(options, initial_index = 0)
|
||||
return @visuals.show_choice(options, initial_index)
|
||||
end
|
||||
|
||||
alias pbShowCommands show_choice
|
||||
|
||||
def show_choice_from_menu_handler(menu_handler_id)
|
||||
def show_choice_from_menu_handler(menu_handler_id, message = nil)
|
||||
commands = {}
|
||||
MenuHandlers.each_available(menu_handler_id, self) do |option, hash, name|
|
||||
MenuHandlers.each_available(menu_handler_id, self) do |option, _hash, name|
|
||||
commands[option] = name
|
||||
end
|
||||
return show_choice_message(message, commands) if message
|
||||
return show_choice(commands)
|
||||
end
|
||||
|
||||
def choose_number(help_text, maximum, init_num = 1)
|
||||
return @visuals.choose_number(help_text, maximum, init_num)
|
||||
end
|
||||
|
||||
alias pbChooseNumber choose_number
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
def refresh
|
||||
@visuals.refresh
|
||||
end
|
||||
|
||||
alias pbRefresh refresh
|
||||
|
||||
def update
|
||||
@visuals.update
|
||||
end
|
||||
|
||||
alias pbUpdate update
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
def show_and_hide
|
||||
start_screen
|
||||
yield if block_given?
|
||||
end_screen
|
||||
end
|
||||
|
||||
def main
|
||||
start_screen
|
||||
loop do
|
||||
on_start_main_loop
|
||||
command = @visuals.navigate
|
||||
break if command == :quit
|
||||
command = perform_action(command)
|
||||
break if command == :quit
|
||||
break if @disposed
|
||||
end
|
||||
end_screen
|
||||
end
|
||||
|
||||
def on_start_main_loop
|
||||
end
|
||||
|
||||
def perform_action(command)
|
||||
return nil if !self.class::SCREEN_ID
|
||||
action_hash = UIActionHandlers.get(self.class::SCREEN_ID, command)
|
||||
return nil if !action_hash
|
||||
return nil if action_hash[:condition] && !action_hash[:condition].call(self)
|
||||
if action_hash[:menu]
|
||||
choice = show_choice_from_menu_handler(action_hash[:menu])
|
||||
choice = show_choice_from_menu_handler(action_hash[:menu], action_hash[:menu_message]&.call(self))
|
||||
perform_action(choice) if choice
|
||||
elsif action_hash[:effect]
|
||||
return perform_action_effect(action_hash)
|
||||
|
||||
@@ -200,16 +200,15 @@ MenuHandlers.add(:pause_menu, :party, {
|
||||
"condition" => proc { next $player.party_count > 0 },
|
||||
"effect" => proc { |menu|
|
||||
pbPlayDecisionSE
|
||||
hidden_move = nil
|
||||
pbFadeOutIn do
|
||||
sscene = PokemonParty_Scene.new
|
||||
sscreen = PokemonPartyScreen.new(sscene, $player.party)
|
||||
hidden_move = sscreen.pbPokemonScreen
|
||||
(hidden_move) ? menu.silent_end_screen : menu.refresh
|
||||
UI::Party.new($player.party).main
|
||||
($game_temp.field_move_to_use) ? menu.silent_end_screen : menu.refresh
|
||||
end
|
||||
next false if !hidden_move
|
||||
next false if !$game_temp.field_move_to_use
|
||||
$game_temp.in_menu = false
|
||||
pbUseHiddenMove(hidden_move[0], hidden_move[1])
|
||||
pbUseHiddenMove($game_temp.field_move_user, $game_temp.field_move_to_use)
|
||||
$game_temp.field_move_user = nil
|
||||
$game_temp.field_move_to_use = nil
|
||||
next true
|
||||
}
|
||||
})
|
||||
|
||||
1532
Data/Scripts/016b_UI redesign/005_UI_Party.rb
Normal file
1532
Data/Scripts/016b_UI redesign/005_UI_Party.rb
Normal file
File diff suppressed because it is too large
Load Diff
@@ -218,6 +218,7 @@ class UI::PokemonSummaryVisuals < UI::BaseVisuals
|
||||
@page = (@mode == :choose_move) ? :moves : all_pages[0]
|
||||
@move_index = (@mode == :choose_move) ? 0 : nil
|
||||
super()
|
||||
refresh_move_cursor if @move_index
|
||||
end
|
||||
|
||||
def initialize_bitmaps
|
||||
@@ -974,9 +975,9 @@ class UI::PokemonSummaryVisuals < UI::BaseVisuals
|
||||
def refresh_move_cursor
|
||||
# Update cursor positions
|
||||
@sprites[:move_cursor].index = @move_index
|
||||
@sprites[:selected_move_cursor].index = @swap_move_index
|
||||
@sprites[:selected_move_cursor].index = @swap_move_index || -1
|
||||
# Update cursor z values
|
||||
if @swap_move_index >= 0
|
||||
if @swap_move_index && @swap_move_index >= 0
|
||||
@sprites[:selected_move_cursor].z = @sprites[:move_cursor].z + 1
|
||||
@sprites[:selected_move_cursor].z -= 2 if @move_index != @swap_move_index
|
||||
end
|
||||
@@ -1417,7 +1418,7 @@ end
|
||||
#===============================================================================
|
||||
# Actions that can be triggered in the Pokémon summary screen.
|
||||
#===============================================================================
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :go_to_previous_pokemon,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :go_to_previous_pokemon, {
|
||||
:effect => proc { |screen|
|
||||
if screen.party_index > 0
|
||||
new_index = screen.party_index
|
||||
@@ -1434,9 +1435,9 @@ UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :go_to_previous_pokemon,
|
||||
end
|
||||
end
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :go_to_next_pokemon,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :go_to_next_pokemon, {
|
||||
:effect => proc { |screen|
|
||||
if screen.party_index < screen.party.length - 1
|
||||
new_index = screen.party_index
|
||||
@@ -1453,9 +1454,9 @@ UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :go_to_next_pokemon,
|
||||
end
|
||||
end
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :navigate_moves,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :navigate_moves, {
|
||||
:returns_value => true,
|
||||
:effect => proc { |screen|
|
||||
move_index = screen.visuals.navigate_moves
|
||||
@@ -1463,29 +1464,29 @@ UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :navigate_moves,
|
||||
screen.refresh
|
||||
next nil
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :navigate_ribbons,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :navigate_ribbons, {
|
||||
:effect => proc { |screen|
|
||||
screen.visuals.navigate_ribbons
|
||||
screen.refresh
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :marking,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :marking, {
|
||||
:effect => proc { |screen|
|
||||
screen.visuals.navigate_markings
|
||||
screen.refresh
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
# Shows a choice menu using the MenuHandlers options below.
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :interact_menu,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :interact_menu, {
|
||||
:menu => :summary_screen_interact,
|
||||
:condition => proc { |screen| next screen.mode != :in_battle }
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :give_item,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :give_item, {
|
||||
:effect => proc { |screen|
|
||||
item = nil
|
||||
pbFadeOutIn do
|
||||
@@ -1495,15 +1496,15 @@ UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :give_item,
|
||||
end
|
||||
screen.refresh if pbGiveItemToPokemon(item, screen.pokemon, screen, screen.party_index)
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :take_item,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :take_item, {
|
||||
:effect => proc { |screen|
|
||||
screen.refresh if pbTakeItemFromPokemon(screen.pokemon, screen)
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :pokedex,
|
||||
UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :pokedex, {
|
||||
:effect => proc { |screen|
|
||||
$player.pokedex.register_last_seen(screen.pokemon)
|
||||
pbFadeOutIn do
|
||||
@@ -1512,7 +1513,7 @@ UIActionHandlers.add(UI::PokemonSummary::SCREEN_ID, :pokedex,
|
||||
dex_screen.pbStartSceneSingle(screen.pokemon.species)
|
||||
end
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
#===============================================================================
|
||||
# Menu options for choice menus that exist in the Pokémon summary screen.
|
||||
|
||||
@@ -36,17 +36,16 @@ end
|
||||
#
|
||||
#===============================================================================
|
||||
def pbEntryScreen(*arg)
|
||||
retval = false
|
||||
ret_val = false
|
||||
pbFadeOutIn do
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene, $player.party)
|
||||
ret = screen.pbPokemonMultipleEntryScreenEx(pbBattleChallenge.rules.ruleset)
|
||||
screen = UI::Party.new($player.party, mode: :choose_entry_order)
|
||||
ret = screen.choose_pokemon_entry_order(pbBattleChallenge.rules.ruleset)
|
||||
# Set party
|
||||
pbBattleChallenge.setParty(ret) if ret
|
||||
# Continue (return true) if Pokémon were chosen
|
||||
retval = (ret && ret.length > 0)
|
||||
ret_val = (ret && ret.length > 0)
|
||||
end
|
||||
return retval
|
||||
return ret_val
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
|
||||
@@ -445,39 +445,35 @@ def pbMoveTutorAnnotations(move, movelist = nil)
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbMoveTutorChoose(move, movelist = nil, bymachine = false, oneusemachine = false)
|
||||
def pbMoveTutorChoose(move, movelist = nil, by_machine = false, one_use_machine = false)
|
||||
ret = false
|
||||
move = GameData::Move.get(move).id
|
||||
if movelist.is_a?(Array)
|
||||
movelist.map! { |m| GameData::Move.get(m).id }
|
||||
end
|
||||
pbFadeOutIn do
|
||||
movename = GameData::Move.get(move).name
|
||||
move_name = GameData::Move.get(move).name
|
||||
screen = UI::Party.new($player.party, mode: :teach_pokemon)
|
||||
annot = pbMoveTutorAnnotations(move, movelist)
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene, $player.party)
|
||||
screen.pbStartScene(_INTL("Teach which Pokémon?"), false, annot)
|
||||
loop do
|
||||
chosen = screen.pbChoosePokemon
|
||||
break if chosen < 0
|
||||
pokemon = $player.party[chosen]
|
||||
if pokemon.egg?
|
||||
pbMessage(_INTL("Eggs can't be taught any moves.")) { screen.pbUpdate }
|
||||
elsif pokemon.shadowPokemon?
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves.")) { screen.pbUpdate }
|
||||
elsif movelist && movelist.none? { |j| j == pokemon.species }
|
||||
pbMessage(_INTL("{1} can't learn {2}.", pokemon.name, movename)) { screen.pbUpdate }
|
||||
elsif !pokemon.compatible_with_move?(move)
|
||||
pbMessage(_INTL("{1} can't learn {2}.", pokemon.name, movename)) { screen.pbUpdate }
|
||||
elsif pbLearnMove(pokemon, move, false, bymachine) { screen.pbUpdate }
|
||||
$stats.moves_taught_by_item += 1 if bymachine
|
||||
$stats.moves_taught_by_tutor += 1 if !bymachine
|
||||
pokemon.add_first_move(move) if oneusemachine
|
||||
ret = true
|
||||
break
|
||||
screen.set_annotations(annot)
|
||||
screen.choose_pokemon do |pkmn, party_index|
|
||||
next true if party_index < 0
|
||||
if pkmn.egg?
|
||||
screen.show_message(_INTL("Eggs can't be taught any moves."))
|
||||
elsif pkmn.shadowPokemon?
|
||||
screen.show_message(_INTL("Shadow Pokémon can't be taught any moves."))
|
||||
elsif movelist && movelist.none? { |j| j == pkmn.species }
|
||||
screen.show_message(_INTL("{1} can't learn {2}.", pkmn.name, move_name))
|
||||
elsif !pkmn.compatible_with_move?(move)
|
||||
screen.show_message(_INTL("{1} can't learn {2}.", pkmn.name, move_name))
|
||||
elsif pbLearnMove(pkmn, move, false, by_machine, screen) { screen.update }
|
||||
$stats.moves_taught_by_item += 1 if by_machine
|
||||
$stats.moves_taught_by_tutor += 1 if !by_machine
|
||||
pkmn.add_first_move(move) if one_use_machine
|
||||
next true
|
||||
end
|
||||
next false
|
||||
end
|
||||
screen.pbEndScene
|
||||
end
|
||||
return ret # Returns whether the move was learned by a Pokemon
|
||||
end
|
||||
|
||||
@@ -149,7 +149,7 @@ end
|
||||
#
|
||||
#===============================================================================
|
||||
module PokemonDebugMixin
|
||||
def pbPokemonDebug(pkmn, pkmnid, heldpoke = nil, settingUpBattle = false)
|
||||
def pokemon_debug_menu(pkmn, pkmnid, heldpoke = nil, settingUpBattle = false)
|
||||
# Get all commands
|
||||
commands = CommandMenuList.new
|
||||
MenuHandlers.each_available(:pokemon_debug_menu) do |option, hash, name|
|
||||
@@ -408,7 +408,7 @@ end
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class PokemonPartyScreen
|
||||
class UI::Party
|
||||
include PokemonDebugMixin
|
||||
end
|
||||
|
||||
|
||||
@@ -355,7 +355,7 @@ MenuHandlers.add(:debug_menu, :test_wild_battle_advanced, {
|
||||
else # Edit a Pokémon
|
||||
if pbConfirmMessage(_INTL("Change this Pokémon?"))
|
||||
scr = PokemonDebugPartyScreen.new
|
||||
scr.pbPokemonDebug(pkmn[pkmnCmd], -1, nil, true)
|
||||
scr.pokemon_debug_menu(pkmn[pkmnCmd], -1, nil, true)
|
||||
scr.pbEndScreen
|
||||
elsif pbConfirmMessage(_INTL("Delete this Pokémon?"))
|
||||
pkmn.delete_at(pkmnCmd)
|
||||
|
||||
@@ -738,6 +738,7 @@ end
|
||||
|
||||
#===============================================================================
|
||||
# Pseudo-party screen for editing Pokémon being set up for a wild battle.
|
||||
# TODO: Rewrite this with the new UI code.
|
||||
#===============================================================================
|
||||
class PokemonDebugPartyScreen
|
||||
def initialize
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# TODO: Rewrite all code in here to replace pbDisplay and whatnot, once storage
|
||||
# screen and PokemonDebugPartyScreen have been rewritten.
|
||||
#===============================================================================
|
||||
# HP/Status options.
|
||||
#===============================================================================
|
||||
@@ -90,8 +92,8 @@ MenuHandlers.add(:pokemon_debug_menu, :full_heal, {
|
||||
screen.pbDisplay(_INTL("{1} is an egg.", pkmn.name))
|
||||
else
|
||||
pkmn.heal
|
||||
screen.pbDisplay(_INTL("{1} was fully healed.", pkmn.name))
|
||||
screen.pbRefreshSingle(pkmnid)
|
||||
screen.pbDisplay(_INTL("{1} was fully healed.", pkmn.name))
|
||||
end
|
||||
next false
|
||||
}
|
||||
@@ -1018,7 +1020,7 @@ MenuHandlers.add(:pokemon_debug_menu, :set_egg, {
|
||||
"effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen|
|
||||
cmd = 0
|
||||
loop do
|
||||
msg = [_INTL("Not an egg"),
|
||||
msg = [_INTL("Not an egg."),
|
||||
_INTL("Egg (hatches in {1} steps).", pkmn.steps_to_hatch)][pkmn.egg? ? 1 : 0]
|
||||
cmd = screen.pbShowCommands(msg,
|
||||
[_INTL("Make egg"),
|
||||
@@ -1113,9 +1115,10 @@ MenuHandlers.add(:pokemon_debug_menu, :duplicate, {
|
||||
next false if !screen.pbConfirm(_INTL("Are you sure you want to copy this Pokémon?"))
|
||||
clonedpkmn = pkmn.clone
|
||||
case screen
|
||||
when PokemonPartyScreen
|
||||
when UI::Party
|
||||
pbStorePokemon(clonedpkmn)
|
||||
screen.pbHardRefresh
|
||||
screen.refresh_party
|
||||
screen.refresh
|
||||
screen.pbDisplay(_INTL("The Pokémon was duplicated."))
|
||||
when PokemonStorageScreen
|
||||
if screen.storage.pbMoveCaughtToParty(clonedpkmn)
|
||||
@@ -1145,9 +1148,10 @@ MenuHandlers.add(:pokemon_debug_menu, :delete, {
|
||||
"effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen|
|
||||
next false if !screen.pbConfirm(_INTL("Are you sure you want to delete this Pokémon?"))
|
||||
case screen
|
||||
when PokemonPartyScreen
|
||||
when UI::Party
|
||||
screen.party.delete_at(pkmnid)
|
||||
screen.pbHardRefresh
|
||||
screen.refresh_party
|
||||
screen.refresh
|
||||
when PokemonStorageScreen
|
||||
screen.scene.pbRelease(pkmnid, heldpoke)
|
||||
(heldpoke) ? screen.heldpkmn = nil : screen.storage.pbDelete(pkmnid[0], pkmnid[1])
|
||||
|
||||
Reference in New Issue
Block a user