mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-07-22 15:47:00 +00:00
517 lines
17 KiB
Ruby
517 lines
17 KiB
Ruby
#====================================================================================
|
|
# DO NOT MAKE EDITS HERE
|
|
#====================================================================================
|
|
|
|
#====================================================================================
|
|
# Summary
|
|
#====================================================================================
|
|
|
|
|
|
|
|
|
|
class PokemonSummary_Scene
|
|
alias tdw_contests_summary_start_scene pbStartScene
|
|
def pbStartScene(party, partyindex, inbattle = false, is_player = true)
|
|
@contestpage = $game_map.map_id == ContestSettings::DEFAULT_LOBBY_MAP_ID
|
|
echoln @contestpage
|
|
tdw_contests_summary_start_scene(party, partyindex, inbattle, is_player)
|
|
end
|
|
|
|
alias tdw_contests_summary_page_three drawPageThree
|
|
def drawPageThree
|
|
if !@contestpage
|
|
tdw_contests_summary_page_three
|
|
else
|
|
simple = PokeblockSettings::SIMPLIFIED_BERRY_BLENDING
|
|
bargraph = (PluginManager.installed?("Better Bitmaps") ? PokeblockSettings::STATS_BAR_GRAPH : true)
|
|
@sprites["background"].setBitmap(sprintf("Graphics/Pictures/Summary/bg_3_contest"))
|
|
pbCreateConditionBars(simple,bargraph)
|
|
end
|
|
end
|
|
|
|
alias tdw_contests_summary_page_four drawPageFour
|
|
def drawPageFour
|
|
if !@contestpage
|
|
tdw_contests_summary_page_four
|
|
else
|
|
overlay = @sprites["overlay"].bitmap
|
|
moveBase = Color.new(64, 64, 64)
|
|
moveShadow = Color.new(176, 176, 176)
|
|
ppBase = [moveBase, # More than 1/2 of total PP
|
|
Color.new(248, 192, 0), # 1/2 of total PP or less
|
|
Color.new(248, 136, 32), # 1/4 of total PP or less
|
|
Color.new(248, 72, 72)] # Zero PP
|
|
ppShadow = [moveShadow, # More than 1/2 of total PP
|
|
Color.new(144, 104, 0), # 1/2 of total PP or less
|
|
Color.new(144, 72, 24), # 1/4 of total PP or less
|
|
Color.new(136, 48, 48)] # Zero PP
|
|
@sprites["pokemon"].visible = true
|
|
@sprites["pokeicon"].visible = false
|
|
@sprites["itemicon"].visible = true
|
|
textpos = []
|
|
imagepos = []
|
|
# Write move names, types and PP amounts for each known move
|
|
xPos = 248
|
|
yPos = 92
|
|
yAdj = 0
|
|
Pokemon::MAX_MOVES.times do |i|
|
|
move = @pokemon.moves[i]
|
|
if move
|
|
type_number = GameData::Move.get(move.id).contest_type_position
|
|
imagepos.push(["Graphics/Pictures/Contest/contesttype", xPos, yPos + yAdj +8, 0, type_number * 28, 64, 28])
|
|
textpos.push([move.name, xPos+68, yPos + yAdj, 0, moveBase, moveShadow])
|
|
if move.total_pp > 0
|
|
textpos.push([_INTL("PP"), xPos+94, yPos + yAdj + 32, 0, moveBase, moveShadow])
|
|
ppfraction = 0
|
|
if move.pp == 0
|
|
ppfraction = 3
|
|
elsif move.pp * 4 <= move.total_pp
|
|
ppfraction = 2
|
|
elsif move.pp * 2 <= move.total_pp
|
|
ppfraction = 1
|
|
end
|
|
textpos.push([sprintf("%d/%d", move.pp, move.total_pp), xPos+212, yPos + yAdj + 32, 1, ppBase[ppfraction], ppShadow[ppfraction]])
|
|
end
|
|
else
|
|
textpos.push(["-", xPos+68, yPos, 0, moveBase, moveShadow])
|
|
textpos.push(["--", xPos+194, yPos + yAdj + 32, 1, moveBase, moveShadow])
|
|
end
|
|
yPos += 64
|
|
end
|
|
# Draw all text and images
|
|
pbDrawTextPositions(overlay, textpos)
|
|
pbDrawImagePositions(overlay, imagepos)
|
|
end
|
|
end
|
|
|
|
def drawPageFourContestSelecting(move_to_learn)
|
|
overlay = @sprites["overlay"].bitmap
|
|
overlay.clear
|
|
|
|
base = Color.new(248, 248, 248)
|
|
shadow = Color.new(104, 104, 104)
|
|
moveBase = Color.new(64, 64, 64)
|
|
moveShadow = Color.new(176, 176, 176)
|
|
ppBase = [moveBase, # More than 1/2 of total PP
|
|
Color.new(248, 192, 0), # 1/2 of total PP or less
|
|
Color.new(248, 136, 32), # 1/4 of total PP or less
|
|
Color.new(248, 72, 72)] # Zero PP
|
|
ppShadow = [moveShadow, # More than 1/2 of total PP
|
|
Color.new(144, 104, 0), # 1/2 of total PP or less
|
|
Color.new(144, 72, 24), # 1/4 of total PP or less
|
|
Color.new(136, 48, 48)] # Zero PP
|
|
|
|
# Set background image
|
|
if move_to_learn
|
|
@sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_learnmove")
|
|
else
|
|
@sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_movedetail")
|
|
end
|
|
# Write various bits of text
|
|
textpos = [
|
|
[_INTL("MOVES"), 26, 10, 0, base, shadow],
|
|
[_INTL("APPEAL"), 20, 116, 0, base, shadow],
|
|
[_INTL("JAMMING"), 20, 148, 0, base, shadow]
|
|
]
|
|
imagepos = []
|
|
# Write move names, types and PP amounts for each known move
|
|
xPos = 248
|
|
yPos = 104
|
|
yAdj = -12
|
|
yPos -= 76 if move_to_learn
|
|
limit = (move_to_learn) ? Pokemon::MAX_MOVES + 1 : Pokemon::MAX_MOVES
|
|
limit.times do |i|
|
|
move = @pokemon.moves[i]
|
|
if i == Pokemon::MAX_MOVES
|
|
move = move_to_learn
|
|
yPos += 20
|
|
end
|
|
if move
|
|
type_number = GameData::Move.get(move.id).contest_type_position
|
|
imagepos.push(["Graphics/Pictures/Contest/contesttype", xPos, yPos + yAdj + 8, 0, type_number * 28, 64, 28])
|
|
textpos.push([move.name, xPos + 68, yPos + yAdj, 0, moveBase, moveShadow])
|
|
if move.total_pp > 0
|
|
textpos.push([_INTL("PP"), xPos + 94, yPos + yAdj + 32, 0, moveBase, moveShadow])
|
|
ppfraction = 0
|
|
if move.pp == 0
|
|
ppfraction = 3
|
|
elsif move.pp * 4 <= move.total_pp
|
|
ppfraction = 2
|
|
elsif move.pp * 2 <= move.total_pp
|
|
ppfraction = 1
|
|
end
|
|
textpos.push([sprintf("%d/%d", move.pp, move.total_pp), xPos + 212, yPos + yAdj + 32, 1, ppBase[ppfraction], ppShadow[ppfraction]])
|
|
end
|
|
else
|
|
textpos.push(["-", xPos + 68, yPos + yAdj, 0, moveBase, moveShadow])
|
|
textpos.push(["--", xPos + 194, yPos + yAdj + 32, 1, moveBase, moveShadow])
|
|
end
|
|
yPos += 64
|
|
end
|
|
# Draw all text and images
|
|
pbDrawTextPositions(overlay, textpos)
|
|
pbDrawImagePositions(overlay, imagepos)
|
|
# Draw Pokémon's type icon(s)
|
|
@pokemon.types.each_with_index do |type, i|
|
|
type_number = GameData::Type.get(type).id_number
|
|
type_rect = Rect.new(0, type_number * 28, 64, 28)
|
|
type_x = (@pokemon.types.length == 1) ? 130 : 96 + (70 * i)
|
|
overlay.blt(type_x, 78, @typebitmap.bitmap, type_rect)
|
|
end
|
|
end
|
|
|
|
def drawSelectedContestMove(move_to_learn, selected_move)
|
|
# Draw all of page four, except selected move's details
|
|
drawPageFourContestSelecting(move_to_learn)
|
|
move = GameData::Move.get(selected_move.id)
|
|
# Set various values
|
|
overlay = @sprites["overlay"].bitmap
|
|
base = Color.new(64, 64, 64)
|
|
shadow = Color.new(176, 176, 176)
|
|
@sprites["pokemon"].visible = false if @sprites["pokemon"]
|
|
@sprites["pokeicon"].pokemon = @pokemon
|
|
@sprites["pokeicon"].visible = true
|
|
@sprites["itemicon"].visible = false if @sprites["itemicon"]
|
|
hearts = !move.contest_can_be_used? ? 0 : move.contest_hearts
|
|
jam = !move.contest_can_be_used? ? 0 : move.contest_jam
|
|
description = move.contest_description
|
|
textpos = []
|
|
imagepos = []
|
|
# Draw all text
|
|
pbDrawTextPositions(overlay, textpos)
|
|
# Draw selected move's information
|
|
imagepos.push(["Graphics/Pictures/Contest/move_heart#{hearts}", 166, 124]) if hearts > 0
|
|
imagepos.push(["Graphics/Pictures/Contest/move_negaheart#{jam}", 166, 156]) if jam > 0
|
|
pbDrawImagePositions(overlay, imagepos)
|
|
# Draw selected move's description
|
|
drawTextEx(overlay, 4, 224, 230, 5, description, base, shadow)
|
|
end
|
|
|
|
def pbScene
|
|
@pokemon.play_cry
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
pbUpdate
|
|
dorefresh = false
|
|
if Input.trigger?(Input::ACTION)
|
|
pbSEStop
|
|
@pokemon.play_cry
|
|
elsif Input.trigger?(Input::BACK)
|
|
pbPlayCloseMenuSE
|
|
break
|
|
elsif Input.trigger?(Input::USE)
|
|
if @page == 4
|
|
pbPlayDecisionSE
|
|
pbMoveSelection
|
|
dorefresh = true
|
|
elsif @page == 5
|
|
pbPlayDecisionSE
|
|
pbRibbonSelection
|
|
dorefresh = true
|
|
elsif !@inbattle
|
|
pbPlayDecisionSE
|
|
dorefresh = pbOptions
|
|
end
|
|
elsif Input.trigger?(Input::SPECIAL)
|
|
if @page == 3 && $game_switches[ContestSettings::CONTEST_INFO_IN_SUMMARY_SWITCH]
|
|
@contestpage = !@contestpage
|
|
pbPlayDecisionSE
|
|
dorefresh = true
|
|
end
|
|
if @page == 4 && $game_switches[ContestSettings::CONTEST_INFO_IN_SUMMARY_SWITCH]
|
|
@contestpage = !@contestpage
|
|
pbPlayDecisionSE
|
|
dorefresh = true
|
|
end
|
|
elsif Input.trigger?(Input::UP) && @partyindex > 0
|
|
oldindex = @partyindex
|
|
pbGoToPrevious
|
|
if @partyindex != oldindex
|
|
pbChangePokemon
|
|
@ribbonOffset = 0
|
|
dorefresh = true
|
|
end
|
|
elsif Input.trigger?(Input::DOWN) && @partyindex < @party.length - 1
|
|
oldindex = @partyindex
|
|
pbGoToNext
|
|
if @partyindex != oldindex
|
|
pbChangePokemon
|
|
@ribbonOffset = 0
|
|
dorefresh = true
|
|
end
|
|
elsif Input.trigger?(Input::LEFT) && !@pokemon.egg?
|
|
oldpage = @page
|
|
@page -= 1
|
|
@page = 1 if @page < 1
|
|
@page = 5 if @page > 5
|
|
if @page != oldpage # Move to next page
|
|
pbSEPlay("GUI summary change page")
|
|
@ribbonOffset = 0
|
|
dorefresh = true
|
|
end
|
|
elsif Input.trigger?(Input::RIGHT) && !@pokemon.egg?
|
|
oldpage = @page
|
|
@page += 1
|
|
@page = 1 if @page < 1
|
|
@page = 5 if @page > 5
|
|
if @page != oldpage # Move to next page
|
|
pbSEPlay("GUI summary change page")
|
|
@ribbonOffset = 0
|
|
dorefresh = true
|
|
end
|
|
end
|
|
if dorefresh
|
|
disposeContestStats
|
|
drawPage(@page)
|
|
end
|
|
end
|
|
return @partyindex
|
|
end
|
|
|
|
alias tdw_contests_summary_move_select drawSelectedMove
|
|
def drawSelectedMove(move_to_learn, selected_move)
|
|
if !@contestpage
|
|
tdw_contests_summary_move_select(move_to_learn, selected_move)
|
|
else
|
|
drawSelectedContestMove(move_to_learn, selected_move)
|
|
end
|
|
end
|
|
|
|
def pbMoveSelection
|
|
@sprites["movesel"].visible = true
|
|
@sprites["movesel"].index = 0
|
|
selmove = 0
|
|
oldselmove = 0
|
|
switching = false
|
|
drawSelectedMove(nil, @pokemon.moves[selmove])
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
pbUpdate
|
|
if @sprites["movepresel"].index == @sprites["movesel"].index
|
|
@sprites["movepresel"].z = @sprites["movesel"].z + 1
|
|
else
|
|
@sprites["movepresel"].z = @sprites["movesel"].z
|
|
end
|
|
if Input.trigger?(Input::BACK)
|
|
(switching) ? pbPlayCancelSE : pbPlayCloseMenuSE
|
|
break if !switching
|
|
@sprites["movepresel"].visible = false
|
|
switching = false
|
|
elsif Input.trigger?(Input::USE)
|
|
pbPlayDecisionSE
|
|
if selmove == Pokemon::MAX_MOVES
|
|
break if !switching
|
|
@sprites["movepresel"].visible = false
|
|
switching = false
|
|
elsif !@pokemon.shadowPokemon?
|
|
if switching
|
|
tmpmove = @pokemon.moves[oldselmove]
|
|
@pokemon.moves[oldselmove] = @pokemon.moves[selmove]
|
|
@pokemon.moves[selmove] = tmpmove
|
|
@sprites["movepresel"].visible = false
|
|
switching = false
|
|
drawSelectedMove(nil, @pokemon.moves[selmove])
|
|
else
|
|
@sprites["movepresel"].index = selmove
|
|
@sprites["movepresel"].visible = true
|
|
oldselmove = selmove
|
|
switching = true
|
|
end
|
|
end
|
|
elsif Input.trigger?(Input::UP)
|
|
selmove -= 1
|
|
if selmove < Pokemon::MAX_MOVES && selmove >= @pokemon.numMoves
|
|
selmove = @pokemon.numMoves - 1
|
|
end
|
|
selmove = 0 if selmove >= Pokemon::MAX_MOVES
|
|
selmove = @pokemon.numMoves - 1 if selmove < 0
|
|
@sprites["movesel"].index = selmove
|
|
pbPlayCursorSE
|
|
drawSelectedMove(nil, @pokemon.moves[selmove])
|
|
elsif Input.trigger?(Input::DOWN)
|
|
selmove += 1
|
|
selmove = 0 if selmove < Pokemon::MAX_MOVES && selmove >= @pokemon.numMoves
|
|
selmove = 0 if selmove >= Pokemon::MAX_MOVES
|
|
selmove = Pokemon::MAX_MOVES if selmove < 0
|
|
@sprites["movesel"].index = selmove
|
|
pbPlayCursorSE
|
|
drawSelectedMove(nil, @pokemon.moves[selmove])
|
|
elsif Input.trigger?(Input::SPECIAL)
|
|
if @page == 3 && $game_switches[ContestSettings::CONTEST_INFO_IN_SUMMARY_SWITCH]
|
|
@contestpage = !@contestpage
|
|
pbPlayDecisionSE
|
|
drawSelectedMove(nil, @pokemon.moves[selmove])
|
|
end
|
|
if @page == 4 && $game_switches[ContestSettings::CONTEST_INFO_IN_SUMMARY_SWITCH]
|
|
@contestpage = !@contestpage
|
|
pbPlayDecisionSE
|
|
drawSelectedMove(nil, @pokemon.moves[selmove])
|
|
end
|
|
end
|
|
end
|
|
@sprites["movesel"].visible = false
|
|
end
|
|
|
|
|
|
def pbChooseMoveToForget(move_to_learn)
|
|
new_move = (move_to_learn) ? Pokemon::Move.new(move_to_learn) : nil
|
|
selmove = 0
|
|
maxmove = (new_move) ? Pokemon::MAX_MOVES : Pokemon::MAX_MOVES - 1
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
pbUpdate
|
|
if Input.trigger?(Input::BACK)
|
|
selmove = Pokemon::MAX_MOVES
|
|
pbPlayCloseMenuSE if new_move
|
|
break
|
|
elsif Input.trigger?(Input::USE)
|
|
pbPlayDecisionSE
|
|
break
|
|
elsif Input.trigger?(Input::UP)
|
|
selmove -= 1
|
|
selmove = maxmove if selmove < 0
|
|
if selmove < Pokemon::MAX_MOVES && selmove >= @pokemon.numMoves
|
|
selmove = @pokemon.numMoves - 1
|
|
end
|
|
@sprites["movesel"].index = selmove
|
|
selected_move = (selmove == Pokemon::MAX_MOVES) ? new_move : @pokemon.moves[selmove]
|
|
drawSelectedMove(new_move, selected_move)
|
|
elsif Input.trigger?(Input::DOWN)
|
|
selmove += 1
|
|
selmove = 0 if selmove > maxmove
|
|
if selmove < Pokemon::MAX_MOVES && selmove >= @pokemon.numMoves
|
|
selmove = (new_move) ? maxmove : 0
|
|
end
|
|
@sprites["movesel"].index = selmove
|
|
selected_move = (selmove == Pokemon::MAX_MOVES) ? new_move : @pokemon.moves[selmove]
|
|
drawSelectedMove(new_move, selected_move)
|
|
elsif Input.trigger?(Input::SPECIAL)
|
|
if $game_switches[ContestSettings::CONTEST_INFO_IN_SUMMARY_SWITCH]
|
|
@contestpage = !@contestpage
|
|
pbPlayDecisionSE
|
|
selected_move = (selmove == Pokemon::MAX_MOVES) ? new_move : @pokemon.moves[selmove]
|
|
drawSelectedMove(new_move, selected_move)
|
|
end
|
|
end
|
|
end
|
|
return (selmove == Pokemon::MAX_MOVES) ? -1 : selmove
|
|
end
|
|
|
|
def disposeContestStats
|
|
@sprites["statsgraphbase"]&.dispose
|
|
@sprites["statsgraph"]&.dispose
|
|
arr = ["Cool", "Beauty", "Cute", "Smart", "Tough", "Sheen"]
|
|
6.times { |i|
|
|
@sprites["#{arr[i]} bar"]&.dispose
|
|
}
|
|
end
|
|
|
|
def pbCreateConditionBars(simple,bargraph)
|
|
pkmn = @pokemon
|
|
arr = ["Cool", "Beauty", "Cute", "Smart", "Tough"]
|
|
fea = [pkmn.cool, pkmn.beauty, pkmn.cute, pkmn.smart, pkmn.tough]
|
|
imagepos = []
|
|
xBase = 236
|
|
xBaseAdj = 0
|
|
xBase += xBaseAdj
|
|
yBase = (simple ? 114 : 104)
|
|
if bargraph
|
|
5.times { |i|
|
|
overlay = @sprites["overlay"].bitmap
|
|
pbSetSmallFont(overlay)
|
|
textpos = []
|
|
barBitmap = AnimatedBitmap.new("Graphics/Pictures/Pokeblock/UI Pokeblock/Bar_#{arr[i]}")
|
|
@sprites["#{arr[i]} bar"] = Sprite.new(@viewport)
|
|
@sprites["#{arr[i]} bar"].bitmap = barBitmap.bitmap
|
|
@sprites["#{arr[i]} bar"].src_rect.width = fea[i]
|
|
@sprites["#{arr[i]} bar"].x = xBase + 4
|
|
@sprites["#{arr[i]} bar"].y = yBase + 48 * i
|
|
@sprites["#{arr[i]} bar"].z = 5
|
|
string = _INTL(arr[i])
|
|
string_width = overlay.text_size(string).width
|
|
textpos.push([string, xBase, yBase - 30 + 48 * i, 0, Color.new(96, 96, 112), Color.new(240, 248, 248)])
|
|
pbDrawTextPositions(overlay, textpos)
|
|
pbSetSystemFont(overlay)
|
|
imagepos.push(["Graphics/Pictures/Pokeblock/UI Pokeblock/Bar_bg", xBase, yBase + 48 * i])
|
|
imagepos.push(["Graphics/Pictures/Pokeblock/UI Pokeblock/max", xBase + string_width + 4, @sprites["#{arr[i]} bar"].y - 20]) if fea[i] >= 255
|
|
}
|
|
else
|
|
pentagon_outline_color = Color.new(165, 83, 147)
|
|
pentagon_back_color = Color.white
|
|
pentagon_stat_color = Color.new(71, 226, 191)
|
|
graphX = xBase + 130
|
|
graphY = (simple ? 120 : 104) + 110
|
|
@sprites["statsgraphbase"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
|
|
pbDrawStatsPentagonBase(@sprites["statsgraphbase"], graphX, graphY, 77, pentagon_outline_color, pentagon_back_color)
|
|
@sprites["statsgraph"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
|
|
@sprites["statsgraph"].opacity = 180
|
|
pbDrawStatsPentagon(@sprites["statsgraph"], [fea[0], fea[1], fea[2], fea[3], fea[4]], graphX, graphY, 77, pentagon_stat_color)
|
|
xPos = [334, 436, 398, 270, 232]
|
|
yPos = [100, 159, 284, 284, 159]
|
|
5.times { |i|
|
|
x = xPos[i]
|
|
x += xBaseAdj
|
|
y = yPos[i]
|
|
y += (simple ? 16 : 0)
|
|
imagepos.push(["Graphics/Pictures/Contest/contesttype", x, y, 0, i * 28, 64, 28])
|
|
if fea[i] >= 255
|
|
x = [400, 420, 464, 336, 298][i]
|
|
x += xBaseAdj
|
|
y = [118, 176, 302, 302, 176][i]
|
|
y -= (simple ? 0 : 16)
|
|
imagepos.push(["Graphics/Pictures/Pokeblock/UI Pokeblock/max", x, y])
|
|
end
|
|
}
|
|
end
|
|
pbDrawImagePositions(@sprites["overlay"].bitmap, imagepos)
|
|
end
|
|
|
|
end
|
|
|
|
#====================================================================================
|
|
# Relearner
|
|
#====================================================================================
|
|
|
|
class MoveRelearner_Scene
|
|
|
|
alias tdw_contests_relearner_start_scene pbStartScene
|
|
def pbStartScene(pokemon, moves)
|
|
@contestinfo = false
|
|
tdw_contests_relearner_start_scene(pokemon, moves)
|
|
end
|
|
|
|
|
|
|
|
# Processes the scene
|
|
def pbChooseMove
|
|
oldcmd = -1
|
|
pbActivateWindow(@sprites, "commands") {
|
|
loop do
|
|
oldcmd = @sprites["commands"].index
|
|
Graphics.update
|
|
Input.update
|
|
pbUpdate
|
|
if @sprites["commands"].index != oldcmd
|
|
@sprites["background"].x = 0
|
|
@sprites["background"].y = 78 + ((@sprites["commands"].index - @sprites["commands"].top_item) * 64)
|
|
pbDrawMoveList
|
|
end
|
|
if Input.trigger?(Input::BACK)
|
|
return nil
|
|
elsif Input.trigger?(Input::USE)
|
|
return @moves[@sprites["commands"].index]
|
|
elsif Input.trigger?(Input::SPECIAL)
|
|
if $game_switches[ContestSettings::CONTEST_INFO_IN_SUMMARY_SWITCH]
|
|
@contestinfo = !@contestinfo
|
|
pbPlayDecisionSE
|
|
pbDrawMoveList
|
|
end
|
|
end
|
|
end
|
|
}
|
|
end
|
|
end
|