Files
infinitefusion-e18/Data/Scripts/016_UI/PokemonStorage/PokemonStorageScene.rb
2025-09-28 15:53:01 -04:00

946 lines
28 KiB
Ruby

#===============================================================================
# Pokémon storage visuals
#===============================================================================
class PokemonStorageScene
attr_reader :quickswap
attr_accessor :sprites
def initialize
@command = 1
end
def pbReleaseInstant(selected, heldpoke)
box = selected[0]
index = selected[1]
if heldpoke
sprite = @sprites["arrow"].heldPokemon
elsif box == -1
sprite = @sprites["boxparty"].getPokemon(index)
else
sprite = @sprites["box"].getPokemon(index)
end
if sprite
sprite.dispose
end
end
def pbStartBox(screen, command, animate=true)
@screen = screen
@storage = screen.storage
@bgviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@bgviewport.z = 99999
@boxviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@boxviewport.z = 99999
@boxsidesviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@boxsidesviewport.z = 99999
@arrowviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@arrowviewport.z = 99999
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999
@selection = 0
@quickswap = false
@sprites = {}
@choseFromParty = false
@command = command
addBackgroundPlane(@sprites, "background", "Storage/bg", @bgviewport)
@sprites["box"] = PokemonBoxSprite.new(@storage, @storage.currentBox, @boxviewport)
@sprites["boxsides"] = IconSprite.new(0, 0, @boxsidesviewport)
@sprites["boxsides"].setBitmap("Graphics/Pictures/Storage/overlay_main")
@sprites["overlay"] = BitmapSprite.new(Graphics.width, Graphics.height, @boxsidesviewport)
pbSetSystemFont(@sprites["overlay"].bitmap)
@sprites["pokemon"] = AutoMosaicPokemonSprite.new(@boxsidesviewport)
@sprites["pokemon"].setOffset(PictureOrigin::Center)
@sprites["pokemon"].x = 90
@sprites["pokemon"].y = 134
@sprites["pokemon"].zoom_y = Settings::FRONTSPRITE_SCALE
@sprites["pokemon"].zoom_x = Settings::FRONTSPRITE_SCALE
@sprites["boxparty"] = PokemonBoxPartySprite.new(@storage.party, @boxsidesviewport)
if command != 2 # Drop down tab only on Deposit
@sprites["boxparty"].x = 182
@sprites["boxparty"].y = Graphics.height
end
@markingbitmap = AnimatedBitmap.new("Graphics/Pictures/Storage/markings")
@sprites["markingbg"] = IconSprite.new(292, 68, @boxsidesviewport)
@sprites["markingbg"].setBitmap("Graphics/Pictures/Storage/overlay_marking")
@sprites["markingbg"].visible = false
@sprites["markingoverlay"] = BitmapSprite.new(Graphics.width, Graphics.height, @boxsidesviewport)
@sprites["markingoverlay"].visible = false
pbSetSystemFont(@sprites["markingoverlay"].bitmap)
@sprites["arrow"] = PokemonBoxArrow.new(@arrowviewport)
@sprites["arrow"].z += 1
if command != 2
pbSetArrow(@sprites["arrow"], @selection)
pbUpdateOverlay(@selection)
pbSetMosaic(@selection)
else
pbPartySetArrow(@sprites["arrow"], @selection)
pbUpdateOverlay(@selection, @storage.party)
pbSetMosaic(@selection)
end
pbSEPlay("PC access") if animate
pbFadeInAndShow(@sprites) if animate
end
def pbCloseBox
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@markingbitmap.dispose if @markingbitmap
@boxviewport.dispose
@boxsidesviewport.dispose
@arrowviewport.dispose
end
def pbDisplay(message)
msgwindow = Window_UnformattedTextPokemon.newWithSize("", 180, 0, Graphics.width - 180, 32)
msgwindow.viewport = @viewport
msgwindow.visible = true
msgwindow.letterbyletter = false
msgwindow.resizeHeightToFit(message, Graphics.width - 180)
msgwindow.text = message
pbBottomRight(msgwindow)
loop do
Graphics.update
Input.update
if Input.trigger?(Input::BACK) || Input.trigger?(Input::USE)
break
end
msgwindow.update
self.update
end
msgwindow.dispose
Input.update
end
def pbShowCommands(message, commands, index = 0)
ret = -1
msgwindow = Window_UnformattedTextPokemon.newWithSize("", 180, 0, Graphics.width - 180, 32)
msgwindow.viewport = @viewport
msgwindow.visible = true
msgwindow.letterbyletter = false
msgwindow.text = message
msgwindow.resizeHeightToFit(message, Graphics.width - 180)
pbBottomRight(msgwindow)
cmdwindow = Window_CommandPokemon.new(commands)
cmdwindow.viewport = @viewport
cmdwindow.visible = true
cmdwindow.resizeToFit(cmdwindow.commands)
cmdwindow.height = Graphics.height - msgwindow.height if cmdwindow.height > Graphics.height - msgwindow.height
pbBottomRight(cmdwindow)
cmdwindow.y -= msgwindow.height
cmdwindow.index = index
loop do
Graphics.update
Input.update
msgwindow.update
cmdwindow.update
if Input.trigger?(Input::BACK)
ret = -1
break
elsif Input.trigger?(Input::USE)
ret = cmdwindow.index
break
end
self.update
end
msgwindow.dispose
cmdwindow.dispose
Input.update
return ret
end
def pbSetArrow(arrow, selection)
case selection
when -1, -4, -5 # Box name, move left, move right
arrow.x = 157 * 2
arrow.y = -12 * 2
when -2 # Party Pokémon
arrow.x = 119 * 2
arrow.y = 139 * 2
when -3 # Close Box
arrow.x = 207 * 2
arrow.y = 139 * 2
else
arrow.x = (97 + 24 * (selection % PokemonBox::BOX_WIDTH)) * 2
arrow.y = (8 + 24 * (selection / PokemonBox::BOX_WIDTH)) * 2
end
end
def pbChangeSelection(key, selection)
case key
when Input::UP
if selection == -1 # Box name
selection = -2
elsif selection == -2 # Party
selection = PokemonBox::BOX_SIZE - 1 - PokemonBox::BOX_WIDTH * 2 / 3 # 25
elsif selection == -3 # Close Box
selection = PokemonBox::BOX_SIZE - PokemonBox::BOX_WIDTH / 3 # 28
else
selection -= PokemonBox::BOX_WIDTH
selection = -1 if selection < 0
end
when Input::DOWN
if selection == -1 # Box name
selection = PokemonBox::BOX_WIDTH / 3 # 2
elsif selection == -2 # Party
selection = -1
elsif selection == -3 # Close Box
selection = -1
else
selection += PokemonBox::BOX_WIDTH
if selection >= PokemonBox::BOX_SIZE
if selection < PokemonBox::BOX_SIZE + PokemonBox::BOX_WIDTH / 2
selection = -2 # Party
else
selection = -3 # Close Box
end
end
end
when Input::LEFT
if selection == -1 # Box name
selection = -4 # Move to previous box
elsif selection == -2
selection = -3
elsif selection == -3
selection = -2
elsif (selection % PokemonBox::BOX_WIDTH) == 0 # Wrap around
selection += PokemonBox::BOX_WIDTH - 1
else
selection -= 1
end
when Input::RIGHT
if selection == -1 # Box name
selection = -5 # Move to next box
elsif selection == -2
selection = -3
elsif selection == -3
selection = -2
elsif (selection % PokemonBox::BOX_WIDTH) == PokemonBox::BOX_WIDTH - 1 # Wrap around
selection -= PokemonBox::BOX_WIDTH - 1
else
selection += 1
end
end
return selection
end
def pbPartySetArrow(arrow, selection)
return if selection < 0
xvalues = [] # [200, 272, 200, 272, 200, 272, 236]
yvalues = [] # [2, 18, 66, 82, 130, 146, 220]
for i in 0...Settings::MAX_PARTY_SIZE
xvalues.push(200 + 72 * (i % 2))
yvalues.push(2 + 16 * (i % 2) + 64 * (i / 2))
end
xvalues.push(236)
yvalues.push(220)
arrow.angle = 0
arrow.mirror = false
arrow.ox = 0
arrow.oy = 0
arrow.x = xvalues[selection]
arrow.y = yvalues[selection]
end
def pbPartyChangeSelection(key, selection)
case key
when Input::LEFT
selection -= 1
selection = Settings::MAX_PARTY_SIZE if selection < 0
when Input::RIGHT
selection += 1
selection = 0 if selection > Settings::MAX_PARTY_SIZE
when Input::UP
if selection == Settings::MAX_PARTY_SIZE
selection = Settings::MAX_PARTY_SIZE - 1
else
selection -= 2
selection = Settings::MAX_PARTY_SIZE if selection < 0
end
when Input::DOWN
if selection == Settings::MAX_PARTY_SIZE
selection = 0
else
selection += 2
selection = Settings::MAX_PARTY_SIZE if selection > Settings::MAX_PARTY_SIZE
end
end
return selection
end
def pbSelectBoxInternal(_party)
selection = @selection
pbSetArrow(@sprites["arrow"], selection)
pbUpdateOverlay(selection)
pbSetMosaic(selection)
loop do
Graphics.update
Input.update
key = -1
key = Input::DOWN if Input.repeat?(Input::DOWN)
key = Input::RIGHT if Input.repeat?(Input::RIGHT)
key = Input::LEFT if Input.repeat?(Input::LEFT)
key = Input::UP if Input.repeat?(Input::UP)
if key >= 0
pbPlayCursorSE
selection = pbChangeSelection(key, selection)
pbSetArrow(@sprites["arrow"], selection)
if selection == -4
nextbox = (@storage.currentBox + @storage.maxBoxes - 1) % @storage.maxBoxes
pbSwitchBoxToLeft(nextbox)
@storage.currentBox = nextbox
elsif selection == -5
nextbox = (@storage.currentBox + 1) % @storage.maxBoxes
pbSwitchBoxToRight(nextbox)
@storage.currentBox = nextbox
end
selection = -1 if selection == -4 || selection == -5
pbUpdateOverlay(selection)
pbSetMosaic(selection)
end
self.update
if Input.trigger?(Input::JUMPUP)
pbPlayCursorSE
nextbox = (@storage.currentBox + @storage.maxBoxes - 1) % @storage.maxBoxes
pbSwitchBoxToLeft(nextbox)
@storage.currentBox = nextbox
pbUpdateOverlay(selection)
pbSetMosaic(selection)
elsif Input.trigger?(Input::JUMPDOWN)
pbPlayCursorSE
nextbox = (@storage.currentBox + 1) % @storage.maxBoxes
pbSwitchBoxToRight(nextbox)
@storage.currentBox = nextbox
pbUpdateOverlay(selection)
pbSetMosaic(selection)
elsif Input.trigger?(Input::SPECIAL) # Jump to box name
if selection != -1
pbPlayCursorSE
selection = -1
pbSetArrow(@sprites["arrow"], selection)
pbUpdateOverlay(selection)
pbSetMosaic(selection)
end
elsif Input.trigger?(Input::ACTION) && @command == 0 # Organize only
pbPlayDecisionSE
pbSetQuickSwap(!@quickswap)
elsif Input.trigger?(Input::BACK)
@selection = selection
return nil
elsif Input.trigger?(Input::USE)
@selection = selection
if selection >= 0
return [@storage.currentBox, selection]
elsif selection == -1 # Box name
return [-4, -1]
elsif selection == -2 # Party Pokémon
return [-2, -1]
elsif selection == -3 # Close Box
return [-3, -1]
end
end
end
end
def pbSelectBox(party)
return pbSelectBoxInternal(party) if @command == 1 # Withdraw
ret = nil
loop do
if !@choseFromParty
ret = pbSelectBoxInternal(party)
end
if @choseFromParty || (ret && ret[0] == -2) # Party Pokémon
if !@choseFromParty
pbShowPartyTab
@selection = 0
end
ret = pbSelectPartyInternal(party, false)
if ret < 0
pbHidePartyTab
@selection = 0
@choseFromParty = false
else
@choseFromParty = true
return [-1, ret]
end
else
@choseFromParty = false
return ret
end
end
end
def pbSelectPartyInternal(party, depositing)
selection = @selection
pbPartySetArrow(@sprites["arrow"], selection)
pbUpdateOverlay(selection, party)
pbSetMosaic(selection)
lastsel = 1
loop do
Graphics.update
Input.update
key = -1
key = Input::DOWN if Input.repeat?(Input::DOWN)
key = Input::RIGHT if Input.repeat?(Input::RIGHT)
key = Input::LEFT if Input.repeat?(Input::LEFT)
key = Input::UP if Input.repeat?(Input::UP)
if key >= 0
pbPlayCursorSE
newselection = pbPartyChangeSelection(key, selection)
if newselection == -1
return -1 if !depositing
elsif newselection == -2
selection = lastsel
else
selection = newselection
end
pbPartySetArrow(@sprites["arrow"], selection)
lastsel = selection if selection > 0
pbUpdateOverlay(selection, party)
pbSetMosaic(selection)
end
self.update
if Input.trigger?(Input::ACTION) && @command == 0 # Organize only
pbPlayDecisionSE
pbSetQuickSwap(!@quickswap)
elsif Input.trigger?(Input::BACK)
@selection = selection
return -1
elsif Input.trigger?(Input::USE)
if selection >= 0 && selection < Settings::MAX_PARTY_SIZE
@selection = selection
return selection
elsif selection == Settings::MAX_PARTY_SIZE # Close Box
@selection = selection
return (depositing) ? -3 : -1
end
end
end
end
def pbSelectParty(party)
return pbSelectPartyInternal(party, true)
end
def pbChangeBackground(wp)
@sprites["box"].refreshSprites = false
alpha = 0
Graphics.update
self.update
timeTaken = Graphics.frame_rate * 4 / 10
alphaDiff = (255.0 / timeTaken).ceil
timeTaken.times do
alpha += alphaDiff
Graphics.update
Input.update
@sprites["box"].color = Color.new(248, 248, 248, alpha)
self.update
end
@sprites["box"].refreshBox = true
@storage[@storage.currentBox].background = wp
(Graphics.frame_rate / 10).times do
Graphics.update
Input.update
self.update
end
timeTaken.times do
alpha -= alphaDiff
Graphics.update
Input.update
@sprites["box"].color = Color.new(248, 248, 248, alpha)
self.update
end
@sprites["box"].refreshSprites = true
end
def pbSwitchBoxToRight(newbox)
newbox = PokemonBoxSprite.new(@storage, newbox, @boxviewport, @sprites["box"].isFusionEnabled)
newbox.x = 520
Graphics.frame_reset
distancePerFrame = 64 * 20 / Graphics.frame_rate
loop do
Graphics.update
Input.update
@sprites["box"].x -= distancePerFrame
newbox.x -= distancePerFrame
self.update
break if newbox.x <= 184
end
diff = newbox.x - 184
newbox.x = 184
@sprites["box"].x -= diff
@sprites["box"].dispose
@sprites["box"] = newbox
newbox.refreshAllBoxSprites
end
def pbSwitchBoxToLeft(newbox)
newbox = PokemonBoxSprite.new(@storage, newbox, @boxviewport, @sprites["box"].isFusionEnabled)
newbox.x = -152
Graphics.frame_reset
distancePerFrame = 64 * 20 / Graphics.frame_rate
loop do
Graphics.update
Input.update
@sprites["box"].x += distancePerFrame
newbox.x += distancePerFrame
self.update
break if newbox.x >= 184
end
diff = newbox.x - 184
newbox.x = 184
@sprites["box"].x -= diff
@sprites["box"].dispose
@sprites["box"] = newbox
newbox.refreshAllBoxSprites
end
def pbJumpToBox(newbox)
if @storage.currentBox != newbox
if newbox > @storage.currentBox
pbSwitchBoxToRight(newbox)
else
pbSwitchBoxToLeft(newbox)
end
@storage.currentBox = newbox
end
end
def pbSetMosaic(selection)
if !@screen.pbHeldPokemon
if @boxForMosaic != @storage.currentBox || @selectionForMosaic != selection
@sprites["pokemon"].mosaic = Graphics.frame_rate / 4
@boxForMosaic = @storage.currentBox
@selectionForMosaic = selection
end
end
end
def pbSetQuickSwap(value)
@quickswap = value
@sprites["arrow"].quickswap = value
end
def pbShowPartyTab
pbSEPlay("GUI storage show party panel")
distancePerFrame = 48 * 20 / Graphics.frame_rate
loop do
Graphics.update
Input.update
@sprites["boxparty"].y -= distancePerFrame
self.update
break if @sprites["boxparty"].y <= Graphics.height - 352
end
@sprites["boxparty"].y = Graphics.height - 352
end
def pbHidePartyTab
pbSEPlay("GUI storage hide party panel")
distancePerFrame = 48 * 20 / Graphics.frame_rate
loop do
Graphics.update
Input.update
@sprites["boxparty"].y += distancePerFrame
self.update
break if @sprites["boxparty"].y >= Graphics.height
end
@sprites["boxparty"].y = Graphics.height
end
def pbHold(selected)
pbSEPlay("GUI storage pick up")
if selected[0] == -1
@sprites["boxparty"].grabPokemon(selected[1], @sprites["arrow"])
else
@sprites["box"].grabPokemon(selected[1], @sprites["arrow"])
end
while @sprites["arrow"].grabbing?
Graphics.update
Input.update
self.update
end
end
def pbSwap(selected, _heldpoke)
pbSEPlay("GUI storage pick up")
heldpokesprite = @sprites["arrow"].heldPokemon
boxpokesprite = nil
if selected[0] == -1
boxpokesprite = @sprites["boxparty"].getPokemon(selected[1])
else
boxpokesprite = @sprites["box"].getPokemon(selected[1])
end
if selected[0] == -1
@sprites["boxparty"].setPokemon(selected[1], heldpokesprite)
else
@sprites["box"].setPokemon(selected[1], heldpokesprite)
end
@sprites["arrow"].setSprite(boxpokesprite)
@sprites["pokemon"].mosaic = 10
@boxForMosaic = @storage.currentBox
@selectionForMosaic = selected[1]
end
def pbPlace(selected, _heldpoke)
pbSEPlay("GUI storage put down")
heldpokesprite = @sprites["arrow"].heldPokemon
@sprites["arrow"].place
while @sprites["arrow"].placing?
Graphics.update
Input.update
self.update
end
if selected[0] == -1
@sprites["boxparty"].setPokemon(selected[1], heldpokesprite)
else
@sprites["box"].setPokemon(selected[1], heldpokesprite)
end
@boxForMosaic = @storage.currentBox
@selectionForMosaic = selected[1]
end
def pbWithdraw(selected, heldpoke, partyindex)
pbHold(selected) if !heldpoke
pbShowPartyTab
pbPartySetArrow(@sprites["arrow"], partyindex)
pbPlace([-1, partyindex], heldpoke)
pbHidePartyTab
end
def pbStore(selected, heldpoke, destbox, firstfree)
if heldpoke
if destbox == @storage.currentBox
heldpokesprite = @sprites["arrow"].heldPokemon
@sprites["box"].setPokemon(firstfree, heldpokesprite)
@sprites["arrow"].setSprite(nil)
else
@sprites["arrow"].deleteSprite
end
else
sprite = @sprites["boxparty"].getPokemon(selected[1])
if destbox == @storage.currentBox
@sprites["box"].setPokemon(firstfree, sprite)
@sprites["boxparty"].setPokemon(selected[1], nil)
else
@sprites["boxparty"].deletePokemon(selected[1])
end
end
end
def pbRelease(selected, heldpoke)
box = selected[0]
index = selected[1]
if heldpoke
sprite = @sprites["arrow"].heldPokemon
elsif box == -1
sprite = @sprites["boxparty"].getPokemon(index)
else
sprite = @sprites["box"].getPokemon(index)
end
if sprite
sprite.release
while sprite.releasing?
Graphics.update
sprite.update
self.update
end
end
end
def pbChooseBox(msg)
commands = []
for i in 0...@storage.maxBoxes
box = @storage[i]
if box
commands.push(_INTL("{1} ({2}/{3})", box.name, box.nitems, box.length))
end
end
return pbShowCommands(msg, commands, @storage.currentBox)
end
def pbBoxName(helptext, minchars, maxchars)
oldsprites = pbFadeOutAndHide(@sprites)
ret = pbEnterBoxName(helptext, minchars, maxchars)
if ret.length > 0
@storage[@storage.currentBox].name = ret
end
@sprites["box"].refreshBox = true
pbRefresh
pbFadeInAndShow(@sprites, oldsprites)
end
def pbChooseItem(bag)
ret = nil
pbFadeOutIn {
scene = PokemonBag_Scene.new
screen = PokemonBagScreen.new(scene, bag)
ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).can_hold? })
}
return ret
end
def pbSummary(selected, heldpoke)
oldsprites = pbFadeOutAndHide(@sprites)
scene = PokemonSummary_Scene.new
screen = PokemonSummaryScreen.new(scene)
if heldpoke
screen.pbStartScreen([heldpoke], 0)
elsif selected[0] == -1
@selection = screen.pbStartScreen(@storage.party, selected[1])
pbPartySetArrow(@sprites["arrow"], @selection)
pbUpdateOverlay(@selection, @storage.party)
else
@selection = screen.pbStartScreen(@storage.boxes[selected[0]], selected[1])
pbSetArrow(@sprites["arrow"], @selection)
pbUpdateOverlay(@selection)
end
pbFadeInAndShow(@sprites, oldsprites)
end
def pbMarkingSetArrow(arrow, selection)
if selection >= 0
xvalues = [162, 191, 220, 162, 191, 220, 184, 184]
yvalues = [24, 24, 24, 49, 49, 49, 77, 109]
arrow.angle = 0
arrow.mirror = false
arrow.ox = 0
arrow.oy = 0
arrow.x = xvalues[selection] * 2
arrow.y = yvalues[selection] * 2
end
end
def pbMarkingChangeSelection(key, selection)
case key
when Input::LEFT
if selection < 6
selection -= 1
selection += 3 if selection % 3 == 2
end
when Input::RIGHT
if selection < 6
selection += 1
selection -= 3 if selection % 3 == 0
end
when Input::UP
if selection == 7;
selection = 6
elsif selection == 6;
selection = 4
elsif selection < 3;
selection = 7
else
; selection -= 3
end
when Input::DOWN
if selection == 7;
selection = 1
elsif selection == 6;
selection = 7
elsif selection >= 3;
selection = 6
else
; selection += 3
end
end
return selection
end
def pbMark(selected, heldpoke)
@sprites["markingbg"].visible = true
@sprites["markingoverlay"].visible = true
msg = _INTL("Mark your Pokémon.")
msgwindow = Window_UnformattedTextPokemon.newWithSize("", 180, 0, Graphics.width - 180, 32)
msgwindow.viewport = @viewport
msgwindow.visible = true
msgwindow.letterbyletter = false
msgwindow.text = msg
msgwindow.resizeHeightToFit(msg, Graphics.width - 180)
pbBottomRight(msgwindow)
base = Color.new(248, 248, 248)
shadow = Color.new(80, 80, 80)
pokemon = heldpoke
if heldpoke
pokemon = heldpoke
elsif selected[0] == -1
pokemon = @storage.party[selected[1]]
else
pokemon = @storage.boxes[selected[0]][selected[1]]
end
markings = pokemon.markings
index = 0
redraw = true
markrect = Rect.new(0, 0, 16, 16)
loop do
# Redraw the markings and text
if redraw
@sprites["markingoverlay"].bitmap.clear
for i in 0...6
markrect.x = i * 16
markrect.y = (markings & (1 << i) != 0) ? 16 : 0
@sprites["markingoverlay"].bitmap.blt(336 + 58 * (i % 3), 106 + 50 * (i / 3), @markingbitmap.bitmap, markrect)
end
textpos = [
[_INTL("OK"), 402, 208, 2, base, shadow, 1],
[_INTL("Cancel"), 402, 272, 2, base, shadow, 1]
]
pbDrawTextPositions(@sprites["markingoverlay"].bitmap, textpos)
pbMarkingSetArrow(@sprites["arrow"], index)
redraw = false
end
Graphics.update
Input.update
key = -1
key = Input::DOWN if Input.repeat?(Input::DOWN)
key = Input::RIGHT if Input.repeat?(Input::RIGHT)
key = Input::LEFT if Input.repeat?(Input::LEFT)
key = Input::UP if Input.repeat?(Input::UP)
if key >= 0
oldindex = index
index = pbMarkingChangeSelection(key, index)
pbPlayCursorSE if index != oldindex
pbMarkingSetArrow(@sprites["arrow"], index)
end
self.update
if Input.trigger?(Input::BACK)
pbPlayCancelSE
break
elsif Input.trigger?(Input::USE)
pbPlayDecisionSE
if index == 6 # OK
pokemon.markings = markings
break
elsif index == 7 # Cancel
break
else
mask = (1 << index)
if (markings & mask) == 0
markings |= mask
else
markings &= ~mask
end
redraw = true
end
end
end
@sprites["markingbg"].visible = false
@sprites["markingoverlay"].visible = false
msgwindow.dispose
end
def pbRefresh
@sprites["box"].refresh
@sprites["boxparty"].refresh
end
def pbHardRefresh
oldPartyY = @sprites["boxparty"].y
@sprites["box"].dispose
@sprites["box"] = PokemonBoxSprite.new(@storage, @storage.currentBox, @boxviewport)
@sprites["boxparty"].dispose
@sprites["boxparty"] = PokemonBoxPartySprite.new(@storage.party, @boxsidesviewport)
@sprites["boxparty"].y = oldPartyY
end
def drawMarkings(bitmap, x, y, _width, _height, markings)
markrect = Rect.new(0, 0, 16, 16)
for i in 0...8
markrect.x = i * 16
markrect.y = (markings & (1 << i) != 0) ? 16 : 0
bitmap.blt(x + i * 16, y, @markingbitmap.bitmap, markrect)
end
end
def pbUpdateOverlay(selection, party = nil)
overlay = @sprites["overlay"].bitmap
overlay.clear
buttonbase = Color.new(248, 248, 248)
buttonshadow = Color.new(80, 80, 80)
pbDrawTextPositions(overlay, [
[_INTL("Party: {1}", (@storage.party.length rescue 0)), 270, 326, 2, buttonbase, buttonshadow, 1],
[_INTL("Exit"), 446, 326, 2, buttonbase, buttonshadow, 1],
])
pokemon = nil
if @screen.pbHeldPokemon && !@screen.fusionMode
pokemon = @screen.pbHeldPokemon
elsif selection >= 0
pokemon = (party) ? party[selection] : @storage[@storage.currentBox, selection]
end
if !pokemon
@sprites["pokemon"].visible = false
return
end
@sprites["pokemon"].visible = true
base = Color.new(88, 88, 80)
shadow = Color.new(168, 184, 184)
nonbase = Color.new(208, 208, 208)
nonshadow = Color.new(224, 224, 224)
pokename = pokemon.name
textstrings = [
[pokename, 10, 2, false, base, shadow]
]
if !pokemon.egg?
imagepos = []
if pokemon.male?
textstrings.push([_INTL(""), 148, 2, false, Color.new(24, 112, 216), Color.new(136, 168, 208)])
elsif pokemon.female?
textstrings.push([_INTL(""), 148, 2, false, Color.new(248, 56, 32), Color.new(224, 152, 144)])
end
imagepos.push(["Graphics/Pictures/Storage/overlay_lv", 6, 246])
textstrings.push([pokemon.level.to_s, 28, 228, false, base, shadow])
if pokemon.ability
textstrings.push([pokemon.ability.name, 86, 300, 2, base, shadow])
else
textstrings.push([_INTL("No ability"), 86, 300, 2, nonbase, nonshadow])
end
if pokemon.item
textstrings.push([pokemon.item.name, 86, 336, 2, base, shadow])
else
textstrings.push([_INTL("No item"), 86, 336, 2, nonbase, nonshadow])
end
if pokemon.shiny?
addShinyStarsToGraphicsArray(imagepos, 156, 198, pokemon.bodyShiny?, pokemon.headShiny?, pokemon.debugShiny?, nil, nil, nil, nil, false, true)
# imagepos.push(["Graphics/Pictures/shiny", 156, 198])
end
typebitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
type1_number = GameData::Type.get(pokemon.type1).id_number
type2_number = GameData::Type.get(pokemon.type2).id_number
type1rect = Rect.new(0, type1_number * 28, 64, 28)
type2rect = Rect.new(0, type2_number * 28, 64, 28)
if pokemon.type1 == pokemon.type2
overlay.blt(52, 272, typebitmap.bitmap, type1rect)
else
overlay.blt(18, 272, typebitmap.bitmap, type1rect)
overlay.blt(88, 272, typebitmap.bitmap, type2rect)
end
drawMarkings(overlay, 70, 240, 128, 20, pokemon.markings)
pbDrawImagePositions(overlay, imagepos)
end
pbDrawTextPositions(overlay, textstrings)
@sprites["pokemon"].setPokemonBitmap(pokemon)
if pokemon.egg?
@sprites["pokemon"].zoom_x = Settings::EGGSPRITE_SCALE
@sprites["pokemon"].zoom_y = Settings::EGGSPRITE_SCALE
else
@sprites["pokemon"].zoom_x = Settings::FRONTSPRITE_SCALE
@sprites["pokemon"].zoom_y = Settings::FRONTSPRITE_SCALE
end
end
def update
pbUpdateSpriteHash(@sprites)
end
def setFusing(fusing, item = 0)
sprite = @sprites["arrow"].setFusing(fusing)
if item == :INFINITESPLICERS
@sprites["arrow"].setSplicerType(2)
elsif item == :SUPERSPLICERS
@sprites["arrow"].setSplicerType(1)
else
@sprites["arrow"].setSplicerType(0)
end
pbRefresh
end
end