Files
infinitefusion-e18/Data/Scripts/053_PIF_Hoenn/Contests/Pokemon Contests/014_Summary.rb
T
2026-07-10 15:42:06 -04:00

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