• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Pokemon B2W2 Bag for v16,v17 & v18

Shall I make the scroll bar work with mouse?


  • Total voters
    9
  • Poll closed .
350
Posts
5
Years
  • Pokemon B2W2 Bag (v16-v19)

    B2W2 Bag Stock Essentials Version
    I did small modifications to the PScreen_Bag Script to make it look and function like The BW2 Bag by Erassus. He gets all the credits. I not good at all in scripting, so I did quite a lot of modifications for graphics.

    PFAvP5K.png

    Male Bag


    images

    Female Bag

    First Download the files in attachment.
    Put the Graphics in your Game Folder.
    Put the Audio in your Game Folder.
    Merge when message appears.

    Download the .txt file from the attachment.
    Copy all, then replace the whole PScreen_Bag with it.(You can ofcourse use a text comparer,if you have done any changes)
    I copied the credits from the other thread.
    Graphics: http://www.spriters-resource.com/ds/pokemonblack2white2/sheet/48047/
    Backgrounds: Ripped with Desmume.
    Edit: Erassus
    Graphical changes : CharizardThree3 or LackDejurane
    Sounds: BadSamaritan
    Thanks to Maruno, Marin and Luka S.J for making me understand what to do actually.

    USEARROWS is for using BW Styled Arrows for pocket changing(when true)

    ANIMEBG is for using Animated Background for the bag(when true)

    USETOUCHBAG is for using mouse to click and change pockets(when true)

    Changelog
    Spoiler:


    This script is compatible for both v16 and v17 (there are two scripts respectively)



    View attachment BW 2 Bag(v1.3).zip
    View attachment BW 2 Bag(v1.3 for v16 only).zip
    Personal opinion: v16 bag looks a little better

    Well, you can copy code from here and just download the graphical stuff.
    V17 Code
    Spoiler:
    V16 Code
    Code:
    [SPOILER]
    #==============================================================================
    # PScreen Bag Graphical Overhaul by LackDeJurane or CharizardThree3
    # If used please give credits.(This is for v16)
    #=============================================================================
    USEARROWS = false  # Whether to use BW Styled Arrows for pocket changing 
    ANIMEBG   = true  # Whether to use an Animated Background for the bag
    USETOUCHBAG = true # Whether to use mouse to click and change pockets.
    #DONT USE THE LAST OPTION ABOVE IF YOU DONT HAVE LUKA S.J's Easy Mouse System!
    
    
    class Window_PokemonBag < Window_DrawableCommand
      attr_reader :pocket
      attr_reader :sortIndex
    
      def initialize(bag,pocket,x,y,width,height)
        @bag=bag
        @pocket=pocket
        @sortIndex=-1
        @adapter=PokemonMartAdapter.new
        super(x,y,width,height)
        @selarrow  = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor")
        @swaparrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor_swap")
        self.windowskin=nil
      end
      
      def dispose
        @swaparrow.dispose
        super
      end
      
      def pocket=(value)
        @pocket=value
        [email protected][@pocket]
        @item_max=thispocket.length+1
        [email protected](@pocket)
        refresh
      end
    
      def sortIndex=(value)
        @sortIndex=value
        refresh
      end
    
      def page_row_max; return PokemonBag_Scene::ITEMSVISIBLE; end
      def page_item_max; return PokemonBag_Scene::ITEMSVISIBLE; end
        
      def itemCount
        return (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
      end    
    
      def itemRect(item)
        if item<0 || item>=@item_max || item<self.top_item-1 ||
           item>self.top_item+self.page_item_max
          return Rect.new(0,0,0,0)
        else
          cursor_width = (self.width-self.borderX-(@column_max-1)*@column_spacing) / @column_max
          x = item % @column_max * (cursor_width + @column_spacing)
          y = item / @column_max * @row_height - @virtualOy
          return Rect.new(x, y, cursor_width, @row_height)
        end
      end
    
      def drawCursor(index,rect)
        if self.index==index
          bmp = (@sorting) ? @swaparrow.bitmap : @selarrow.bitmap
          pbCopyBitmap(self.contents,bmp,rect.x,rect.y+14)
        end
        return Rect.new(rect.x+16,rect.y+16,rect.width-16,rect.height)
      end  
      
    def pbCanRegisterItem?(item)
      return ItemHandlers.hasKeyItemHandler(item)
    end
      
      def item
        [email protected][self.pocket]
        item=thispocket[self.index]
        return item ? item[0] : 0
      end
    
      def itemCount
        return @bag.pockets[self.pocket].length+1
      end
    
      def drawItem(index,count,rect)
        textpos=[]
        rect=drawCursor(index,rect)
        ypos=rect.y+4
        if [email protected][self.pocket].length
          textpos.push([_INTL("CLOSE BAG"),rect.x,ypos,false,
             self.baseColor,self.shadowColor])
        else
          [email protected][self.pocket][index][0]
          [email protected](item)
          qty=_ISPRINTF("x{1: 2d}",@bag.pockets[self.pocket][index][1])
          sizeQty=self.contents.text_size(qty).width
          xQty=rect.x+rect.width-sizeQty-16
          baseColor=(index==@sortIndex) ? Color.new(224,0,0) : self.baseColor
          shadowColor=(index==@sortIndex) ? Color.new(248,144,144) : self.shadowColor
          textpos.push([itemname,rect.x,ypos,false,baseColor,shadowColor])     
          if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM)
            textpos.push([qty,xQty,ypos,false,baseColor,shadowColor])
          end
        end
        pbDrawTextPositions(self.contents,textpos)
        if [email protected][self.pocket].length
          if @[email protected][self.pocket][index][0]
            pbDrawImagePositions(self.contents,[
               ["Graphics/Pictures/Bag/bagReg",rect.x+rect.width-72,ypos+4,0,0,-1,-1]
            ])
          elsif pbCanRegisterItem?(item) && pbIsKeyItem?(item)
              pbDrawImagePositions(self.contents,[
                 ["Graphics/Pictures/Bag/bagReg2",rect.x+rect.width-72,ypos+4,0,0,-1,-1]
              ])        
          end
        end
      end
    
      def refresh
        @item_max=itemCount()
        dwidth=self.width-self.borderX
        dheight=self.height-self.borderY
        self.contents=pbDoEnsureBitmap(self.contents,dwidth,dheight)
        self.contents.clear
        for i in 0...@item_max
          if i<self.top_item-1 || i>self.top_item+self.page_item_max
            next
          end
          drawItem(i,@item_max,itemRect(i))
        end
        drawCursor(self.index,itemRect(self.index))
      end
    end
    
    
    
    class PokemonBag_Scene
    ## Configuration
      ITEMLISTBASECOLOR     = Color.new(255,255,255)
      ITEMLISTSHADOWCOLOR   = Color.new(156,156,156)
      ITEMTEXTBASECOLOR     = Color.new(248,248,248)
      ITEMTEXTSHADOWCOLOR   = Color.new(90,90,90)
      POCKETNAMEBASECOLOR   = Color.new(248,248,248)
      POCKETNAMESHADOWCOLOR = Color.new(90,90,90)
      ITEMSVISIBLE          = 7
    
      def update
        pbUpdateSpriteHash(@sprites)
      end
    
      def pbStartScene(bag)
        @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
        @viewport.z=99999
        @bag=bag
        @sprites={}
        [email protected]
        [email protected](lastpocket)
        @sprites["grid"]=AnimatedPlane.new(@viewport) 
      if $Trainer.isFemale?
        @sprites["grid"]=AnimatedPlane.new(@viewport)  
        @sprites["grid"].bitmap = Bitmap.new("Graphics/Pictures/Bag/bg_gridf")
      else
        @sprites["grid"]=AnimatedPlane.new(@viewport)
        @sprites["grid"].bitmap = Bitmap.new("Graphics/Pictures/Bag/bg_grid") 
      end 
        @sprites["bag"]=IconSprite.new(-20,10,@viewport)
        @sprites["background"]=IconSprite.new(0,0,@viewport)
        @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg")) if $Trainer.isMale?
        @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg_f")) if $Trainer.isFemale?
        @sprites["switchL"]=IconSprite.new(0,0,@viewport)
        @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL")
        @sprites["switchL"].x=2
        @sprites["switchL"].y=180
        @sprites["switchR"]=IconSprite.new(0,0,@viewport)
        @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR")
        @sprites["switchR"].x=162
        @sprites["switchR"].y=180
       if USEARROWS
        @sprites["switchR"].visible = true 
        @sprites["switchL"].visible = true
      else
        @sprites["switchR"].visible = false 
        @sprites["switchL"].visible = false
      end   
        @sprites["icon"]=ItemIconSprite.new(48,Graphics.height-48,-1,@viewport)
        @sprites["itemwindow"]=Window_PokemonBag.new(@bag,lastpocket,168,-8,314,40+32+ITEMSVISIBLE*32)
        @sprites["itemwindow"].viewport=@viewport
        @sprites["itemwindow"].pocket=lastpocket
        @sprites["itemwindow"].index=lastitem
        @sprites["itemwindow"].baseColor=ITEMLISTBASECOLOR
        @sprites["itemwindow"].shadowColor=ITEMLISTSHADOWCOLOR
        @sprites["itemwindow"].refresh
        @sprites["slider"]=IconSprite.new(Graphics.width-40,60,@viewport)
        @sprites["slider"].setBitmap(sprintf("Graphics/Pictures/Bag/bagSlider"))
        @sprites["pocketwindow"]=BitmapSprite.new(186,228,@viewport)
        pbSetSystemFont(@sprites["pocketwindow"].bitmap)
        @sprites["itemtextwindow"]=Window_UnformattedTextPokemon.new("")
        @sprites["itemtextwindow"].x=72
        @sprites["itemtextwindow"].y=270
        @sprites["itemtextwindow"].width=Graphics.width-72
        @sprites["itemtextwindow"].height=128
        @sprites["itemtextwindow"].baseColor=ITEMTEXTBASECOLOR
        @sprites["itemtextwindow"].shadowColor=ITEMTEXTSHADOWCOLOR
        @sprites["itemtextwindow"].visible=true
        @sprites["itemtextwindow"].viewport=@viewport
        @sprites["itemtextwindow"].windowskin=nil
        @sprites["helpwindow"]=Window_UnformattedTextPokemon.new("")
        @sprites["helpwindow"].visible=false
        @sprites["helpwindow"].viewport=@viewport
        @sprites["msgwindow"]=Window_AdvancedTextPokemon.new("")
        @sprites["msgwindow"].visible=false
        @sprites["msgwindow"].viewport=@viewport
        pbBottomLeftLines(@sprites["helpwindow"],1)
        pbDeactivateWindows(@sprites)
        pbRefresh
        pbFadeInAndShow(@sprites)
      end
    
      def pbEndScene
        pbFadeOutAndHide(@sprites)
        pbDisposeSpriteHash(@sprites)
        @viewport.dispose
      end
    
      def pbChooseNumber(helptext,maximum)
        return UIHelper.pbChooseNumber(
           @sprites["helpwindow"],helptext,maximum) { update }
      end
    
      def pbDisplay(msg,brief=false)
        UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { update }
      end
    
      def pbConfirm(msg)
        UIHelper.pbConfirm(@sprites["msgwindow"],msg) { update }
      end
    
      def pbShowCommands(helptext,commands)
        return UIHelper.pbShowCommands(
           @sprites["helpwindow"],helptext,commands) { update }
         end
           
         
    def showPocketAnimation
      pockets=pbPocketNames
     for i in 8..pockets.length
      if $Trainer.isFemale?
        @sprites["bag"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_fm")
        pbWait(3) 
        @sprites["bag"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f") 
      else
        @sprites["bag"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}m")
        pbWait(3)
        @sprites["bag"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}") 
        end
      end
    end  
    
      def pbRefresh
        bm=@sprites["pocketwindow"].bitmap
        bm.clear
        # Set the background bitmap for the currently selected pocket
        @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg")) if $Trainer.isMale?
        @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg_f")) if $Trainer.isFemale?
        # Set the bag picture for the currently selected pocket
       fbagexists = pbResolveBitmap(sprintf("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f"))
        if $Trainer.isFemale? && fbagexists
        @sprites["bag"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f")
        else
        @sprites["bag"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}")
      end  
        # Draw the pocket name
        name=PokemonBag.pocketNames()[@bag.lastpocket]
        base=POCKETNAMEBASECOLOR
        shadow=POCKETNAMESHADOWCOLOR
        pbDrawTextPositions(bm,[
           [name,bm.width/2,180,2,base,shadow]
        ])
        # Reset positions of left/right arrows around the bag
       #@sprites["leftarrow"].x=-4
       # @sprites["leftarrow"].y=76
       # @sprites["rightarrow"].x=150
       # @sprites["rightarrow"].y=76
        itemwindow=@sprites["itemwindow"]
        # Draw the slider
        ycoord=60
        if itemwindow.itemCount>1
          ycoord+=116.0 * itemwindow.index/(itemwindow.itemCount-1)
        end
        @sprites["slider"].y=ycoord
        # Set the icon for the currently selected item
        @sprites["icon"].item=itemwindow.item
        # Display the item's description
        @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close bag.") : 
           pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
        # Refresh the item window
        itemwindow.refresh
      end
    
    # Called when the item screen wants an item to be chosen from the screen
      def pbChooseItem(lockpocket=false)
        pbRefresh
        @sprites["helpwindow"].visible=false
        itemwindow=@sprites["itemwindow"]
        itemwindow.refresh
        sorting=false
        sortindex=-1
        pbActivateWindow(@sprites,"itemwindow"){
           loop do
             @sprites["grid"].ox+=1 if ANIMEBG
             Graphics.update
             Input.update
             olditem=itemwindow.item
             oldindex=itemwindow.index
             self.update
             if itemwindow.item!=olditem
               # Update slider position
               ycoord=60
               if itemwindow.itemCount>1
                 ycoord+=116.0 * itemwindow.index/(itemwindow.itemCount-1)
               end
               @sprites["slider"].y=ycoord
               # Update item icon and description
               @sprites["icon"].item=itemwindow.item
               @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close bag.") :
                  pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
             end
             if itemwindow.index!=oldindex
               # Update selected item for current pocket
               @bag.setChoice(itemwindow.pocket,itemwindow.index)
             end
             if !lockpocket
               # Change pockets if Left/Right pressed
               numpockets=PokemonBag.numPockets
               if Input.trigger?(Input::LEFT)
                 if !sorting
                   itemwindow.pocket=(itemwindow.pocket==1) ? numpockets : itemwindow.pocket-1
                   @bag.lastpocket=itemwindow.pocket
                   showPocketAnimation
                   pbSEPlay("BW2BagSound")
                   @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL2") 
                   pbWait(5)
                   @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL")             
                   pbRefresh
                 end
               elsif Input.trigger?(Input::RIGHT)
                 if !sorting
                   itemwindow.pocket=(itemwindow.pocket==numpockets) ? 1 : itemwindow.pocket+1
                   @bag.lastpocket=itemwindow.pocket
                   showPocketAnimation
                   pbSEPlay("BW2BagSound")
                   @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR2") 
                   pbWait(5)
                   @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR")             
                   pbRefresh
                 end
               end
             end
             
             if defined?($mouse) 
               if $mouse.leftClick?(@sprites["switchL"]) && USEARROWS
                 if !sorting
                   itemwindow.pocket=(itemwindow.pocket==1) ? numpockets : itemwindow.pocket-1
                   @bag.lastpocket=itemwindow.pocket
                   showPocketAnimation
                   pbSEPlay("BW2BagSound")
                   @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL2") 
                   pbWait(5)
                   @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL")             
                   pbRefresh
                 end
               elsif $mouse.leftClick?(@sprites["switchR"]) && USEARROWS
                 if !sorting
                   itemwindow.pocket=(itemwindow.pocket==numpockets) ? 1 : itemwindow.pocket+1
                   @bag.lastpocket=itemwindow.pocket
                   showPocketAnimation
                   pbSEPlay("BW2BagSound")
                   @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR2") 
                   pbWait(5)
                   @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR")             
                   pbRefresh
                 end
          elsif $mouse.areaClick?(0,55,86,118) && USETOUCHBAG
              if itemwindow.pocket!=3
                  @bag.lastpocket = 3
                  itemwindow.pocket = 3
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end
            elsif $mouse.areaClick?(0,55,86,118,1) && USETOUCHBAG
              if itemwindow.pocket!=7
                  @bag.lastpocket = 7
                  itemwindow.pocket = 7
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end               
            elsif $mouse.areaClick?(86,23,72,100) && USETOUCHBAG
              if itemwindow.pocket!=1
                  @bag.lastpocket = 1
                  itemwindow.pocket = 1
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end    
            elsif $mouse.areaClick?(86,23,72,100,1) && USETOUCHBAG
              if itemwindow.pocket!=6
                  @bag.lastpocket = 6
                  itemwindow.pocket = 6
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end  
            elsif $mouse.areaClick?(0,209,48,48) && USETOUCHBAG
              if itemwindow.pocket!=2
                  @bag.lastpocket = 2
                  itemwindow.pocket = 2
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end 
            elsif $mouse.areaClick?(48,213,68,64) && USETOUCHBAG
              if itemwindow.pocket!=4
                  @bag.lastpocket = 4
                  itemwindow.pocket = 4
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end  
            elsif $mouse.inAreaLeft?(120,211,65,42) && USETOUCHBAG 
              if itemwindow.pocket!=5
                  @bag.lastpocket = 5
                  itemwindow.pocket = 5
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end  
               elsif $mouse.areaClick?(112,123,73,55) && USETOUCHBAG 
              if itemwindow.pocket!=8
                  @bag.lastpocket = 8
                  itemwindow.pocket = 8
                  showPocketAnimation 
                  pbSEPlay("BW2BagSound")
                  pbRefresh
                end 
               end
             end         
             # Select item for switching if A is pressed
             if Input.trigger?(Input::A)
               [email protected][itemwindow.pocket]
               if itemwindow.index<thispocket.length && thispocket.length>1 &&
                  !POCKETAUTOSORT[itemwindow.pocket]
                 sortindex=itemwindow.index
                 sorting=true
                 @sprites["itemwindow"].sortIndex=sortindex
               else
                 next
               end
             end
             # Cancel switching or cancel the item screen
             if Input.trigger?(Input::B)
               if sorting
                 sorting=false
                 @sprites["itemwindow"].sortIndex=-1
               else
                 return 0
               end
             end
             # Confirm selection or item switch
             if Input.trigger?(Input::C)
               [email protected][itemwindow.pocket]
               if itemwindow.index<thispocket.length
                 if sorting
                   sorting=false
                   tmp=thispocket[itemwindow.index]
                   thispocket[itemwindow.index]=thispocket[sortindex]
                   thispocket[sortindex]=tmp
                   @sprites["itemwindow"].sortIndex=-1
                   pbRefresh
                   next
                 else
                   pbRefresh
                   return thispocket[itemwindow.index][0]
                 end
               else
                 return 0
               end
             end
           end
        }
      end
    end
    
    
    
    class PokemonBagScreen
      def initialize(scene,bag)
        @bag=bag
        @scene=scene
      end
    
      def pbDisplay(text)
        @scene.pbDisplay(text)
      end
    
      def pbConfirm(text)
        return @scene.pbConfirm(text)
      end
    
    # UI logic for the item screen when an item is to be held by a Pokémon.
      def pbGiveItemScreen
        @scene.pbStartScene(@bag)
        item=0
        loop do
          [email protected]
          break if item==0
          itemname=PBItems.getName(item)
          # Key items and hidden machines can't be held
          if pbIsImportantItem?(item)
            @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
            next
          else
            break
          end
        end
        @scene.pbEndScene
        return item
      end
    
    # UI logic for the item screen when an item is used on a Pokémon from the party screen.
      def pbUseItemScreen(pokemon)
        @scene.pbStartScene(@bag)
        item=0
        loop do
          [email protected]
          break if item==0
          itemname=PBItems.getName(item)
          # Can't use certain items on Pokémon
          if !ItemHandlers.hasUseOnPokemon(item) && !pbIsMachine?(item)
            @scene.pbDisplay(_INTL("The {1} can't be used on {2}.",itemname,pokemon.name))
            next
          else
            break
          end
        end
        @scene.pbEndScene
        return item
      end
    
    # UI logic for the item screen for choosing an item
      def pbChooseItemScreen
        [email protected]
        @scene.pbStartScene(@bag)
        [email protected]
        @scene.pbEndScene
        @bag.lastpocket=oldlastpocket
        return item
      end
    
    # UI logic for the item screen for choosing a Berry
      def pbChooseBerryScreen
        [email protected]
        @bag.lastpocket=BERRYPOCKET
        @scene.pbStartScene(@bag)
        item=0
        loop do
          [email protected](true)
          break if item==0
          itemname=PBItems.getName(item)
          if !pbIsBerry?(item)
            @scene.pbDisplay(_INTL("That's not a Berry.",itemname))
            next
          else
            break
          end
        end
        @scene.pbEndScene
        @bag.lastpocket=oldlastpocket
        return item
      end
    
    # UI logic for tossing an item in the item screen.
      def pbTossItemScreen
        if !$PokemonGlobal.pcItemStorage
          $PokemonGlobal.pcItemStorage=PCItemStorage.new
        end
        storage=$PokemonGlobal.pcItemStorage
        @scene.pbStartScene(storage)
        loop do
          [email protected]
          break if item==0
          if pbIsImportantItem?(item)
            @scene.pbDisplay(_INTL("That's too important to toss out!"))
            next
          end
          qty=storage.pbQuantity(item)
          itemname=PBItems.getName(item)
          itemnameplural=PBItems.getNamePlural(item)
          if qty>1
            [email protected](_INTL("Toss out how many {1}?",itemnameplural),qty)
          end
          if qty>0
            itemname=itemnameplural if qty>1
            if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname))
              if !storage.pbDeleteItem(item,qty)
                raise "Can't delete items from storage"
              end
              pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname))
            end
          end
        end
        @scene.pbEndScene
      end
    
    # UI logic for withdrawing an item in the item screen.
      def pbWithdrawItemScreen
        if !$PokemonGlobal.pcItemStorage
          $PokemonGlobal.pcItemStorage=PCItemStorage.new
        end
        storage=$PokemonGlobal.pcItemStorage
        @scene.pbStartScene(storage)
        loop do
          [email protected]
          break if item==0
          commands=[_INTL("Withdraw"),_INTL("Give"),_INTL("Cancel")]
          itemname=PBItems.getName(item)
          
          [email protected](_INTL("{1} is selected.",itemname),commands)
          if command==0
            qty=storage.pbQuantity(item)
            if qty>1 && !pbIsImportantItem?(item)
              [email protected](_INTL("How many do you want to withdraw?"),qty)
            end
            if qty>0
              dispqty=(pbIsImportantItem?(item)) ? 1 : qty
              itemname=PBItems.getNamePlural(item) if dispqty>1
              if [email protected]?(item,qty)
                pbDisplay(_INTL("There's no more room in the Bag."))
              else
                pbDisplay(_INTL("Withdrew {1} {2}.",dispqty,itemname))
                if !storage.pbDeleteItem(item,qty)
                  raise "Can't delete items from storage"
                end
                if [email protected](item,qty)
                  raise "Can't withdraw items from storage"
                end
              end
            end
          elsif command==1 # Give
            if $Trainer.pokemonCount==0
              @scene.pbDisplay(_INTL("There is no Pokémon."))
              return 0
            elsif pbIsImportantItem?(item)
              @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
            else
              pbFadeOutIn(99999){
                 sscene=PokemonScreen_Scene.new
                 sscreen=PokemonScreen.new(sscene,$Trainer.party)
                 if sscreen.pbPokemonGiveScreen(item)
                   # If the item was held, delete the item from storage
                   if !storage.pbDeleteItem(item,1)
                     raise "Can't delete item from storage"
                   end
                 end
                 @scene.pbRefresh
              }
            end
          end
        end
        @scene.pbEndScene
      end
    
    # UI logic for depositing an item in the item screen.
      def pbDepositItemScreen
        @scene.pbStartScene(@bag)
        if !$PokemonGlobal.pcItemStorage
          $PokemonGlobal.pcItemStorage=PCItemStorage.new
        end
        storage=$PokemonGlobal.pcItemStorage
        item=0
        loop do
          [email protected]
          break if item==0
          [email protected](item)
          if qty>1 && !pbIsImportantItem?(item)
            [email protected](_INTL("How many do you want to deposit?"),qty)
          end
          if qty>0
            if !storage.pbCanStore?(item,qty)
              pbDisplay(_INTL("There's no room to store items."))
            else
              dispqty=(pbIsImportantItem?(item)) ? 1 : qty
              itemname=(dispqty>1) ? PBItems.getNamePlural(item) : PBItems.getName(item)
              pbDisplay(_INTL("Deposited {1} {2}.",dispqty,itemname))
              if [email protected](item,qty)
                raise "Can't delete items from bag"
              end
              if !storage.pbStoreItem(item,qty)
                raise "Can't deposit items to storage"
              end
            end
          end
        end
        @scene.pbEndScene
      end
    
      def pbStartScreen
        @scene.pbStartScene(@bag)
        item=0
        loop do
          [email protected]
          break if item==0
          cmdUse         = -1
          cmdRegister    = -1
          cmdGive        = -1
          cmdToss        = -1
          cmdRead        = -1
          cmdMysteryGift = -1
          commands=[]
          # Generate command list
          commands[cmdRead=commands.length]=_INTL("Read") if pbIsMail?(item)
          commands[cmdUse=commands.length]=_INTL("Use") if ItemHandlers.hasOutHandler(item) || (pbIsMachine?(item) && $Trainer.party.length>0)
          commands[cmdGive=commands.length]=_INTL("Give") if $Trainer.pokemonParty.length>0 && !pbIsImportantItem?(item)
          commands[cmdToss=commands.length]=_INTL("Toss") if !pbIsImportantItem?(item) || $DEBUG
          if @bag.registeredItem==item
            commands[cmdRegister=commands.length]=_INTL("Deselect")
          elsif pbIsKeyItem?(item) && ItemHandlers.hasKeyItemHandler(item)
            commands[cmdRegister=commands.length]=_INTL("Register")
          end
          commands[cmdMysteryGift=commands.length]=_INTL("Make Mystery Gift") if $DEBUG
          commands[commands.length]=_INTL("Cancel")
          # Show commands generated above
          itemname=PBItems.getName(item) # Get item name
          [email protected](_INTL("{1} is selected.",itemname),commands)
          if cmdUse>=0 && command==cmdUse # Use item
            ret=pbUseItem(@bag,item,@scene)
            # 0=Item wasn't used; 1=Item used; 2=Close Bag to use in field
            break if ret==2 # End screen
            @scene.pbRefresh
            next
          elsif cmdRead>=0 && command==cmdRead # Read mail
            pbFadeOutIn(99999){
               pbDisplayMail(PokemonMail.new(item,"",""))
            }
          elsif cmdRegister>=0 && command==cmdRegister # Register key item
            @bag.pbRegisterKeyItem(item)
            @scene.pbRefresh
          elsif cmdGive>=0 && command==cmdGive # Give item to Pokémon
            if $Trainer.pokemonCount==0
              @scene.pbDisplay(_INTL("There is no Pokémon."))
            elsif pbIsImportantItem?(item)
              @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
            else
              # Give item to a Pokémon
              pbFadeOutIn(99999){
                 sscene=PokemonScreen_Scene.new
                 sscreen=PokemonScreen.new(sscene,$Trainer.party)
                 sscreen.pbPokemonGiveScreen(item)
                 @scene.pbRefresh
              }
            end
          elsif cmdToss>=0 && command==cmdToss # Toss item
            [email protected](item)
            if qty>1
              helptext=_INTL("Toss out how many {1}?",PBItems.getNamePlural(item))
              [email protected](helptext,qty)
            end
            if qty>0
              itemname=PBItems.getNamePlural(item) if qty>1
              if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname))
                pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname))
                qty.times { @bag.pbDeleteItem(item) }      
              end
            end   
          elsif cmdMysteryGift>=0 && command==cmdMysteryGift   # Export to Mystery Gift
            pbCreateMysteryGift(1,item)
          end
        end
        @scene.pbEndScene
        return item
      end
    end
    
    
    
    #===============================================================================
    # The Bag object, which actually contains all the items
    #===============================================================================
    class PokemonBag
      attr_reader :registeredItem
      attr_accessor :lastpocket
      attr_reader :pockets
    
      def self.pocketNames()
        return pbPocketNames
      end
    
      def self.numPockets()
        return self.pocketNames().length-1
      end
    
      def initialize
        @lastpocket=1
        @pockets=[]
        @choices=[]
        # Initialize each pocket of the array
        for i in 0..PokemonBag.numPockets
          @pockets[i]=[]
          @choices[i]=0
        end
        @registeredItem=0
      end
    
      def pockets
        rearrange
        return @pockets
      end
    
      def rearrange
        if (@pockets.length-1)!=PokemonBag.numPockets
          newpockets=[]
          for i in 0..PokemonBag.numPockets
            newpockets[i]=[]
            @choices[i]=0 if !@choices[i]
          end
          nump=PokemonBag.numPockets
          for i in [email protected]
            for item in @pockets[i]
              p=pbGetPocket(item[0])
              newpockets[p].push(item) if p<=nump
            end
          end
          @pockets=newpockets
        end
      end
    
    # Gets the index of the current selected item in the pocket
      def getChoice(pocket)
        if pocket<=0 || pocket>PokemonBag.numPockets
          raise ArgumentError.new(_INTL("Invalid pocket: {1}",pocket.inspect))
        end
        rearrange
        return [@choices[pocket],@pockets[pocket].length].min || 0
      end
    
    # Clears the entire bag
      def clear
        for pocket in @pockets
          pocket.clear
        end
      end
    
    # Sets the index of the current selected item in the pocket
      def setChoice(pocket,value)
        if pocket<=0 || pocket>PokemonBag.numPockets
          raise ArgumentError.new(_INTL("Invalid pocket: {1}",pocket.inspect))
        end
        rearrange
        @choices[pocket]=value if value<=@pockets[pocket].length
      end
    
    # Registers the item as a key item.  Can be retrieved with $PokemonBag.registeredItem
      def pbRegisterKeyItem(item)
        if item.is_a?(String) || item.is_a?(Symbol)
          item=getID(PBItems,item)
        end
        if !item || item<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return
        end
        @registeredItem=(item!=@registeredItem) ? item : 0
      end
    
      def maxPocketSize(pocket)
        maxsize=MAXPOCKETSIZE[pocket]
        return -1 if !maxsize
        return maxsize
      end
    
      def pbQuantity(item)
        if item.is_a?(String) || item.is_a?(Symbol)
          item=getID(PBItems,item)
        end
        if !item || item<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return 0
        end
        pocket=pbGetPocket(item)
        maxsize=maxPocketSize(pocket)
        maxsize=@pockets[pocket].length if maxsize<0
        return ItemStorageHelper.pbQuantity(@pockets[pocket],maxsize,item)
      end
    
      def pbHasItem?(item)
        return pbQuantity(item)>0
      end
    
      def pbDeleteItem(item,qty=1)
        if item.is_a?(String) || item.is_a?(Symbol)
          item=getID(PBItems,item)
        end
        if !item || item<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return false
        end
        pocket=pbGetPocket(item)
        maxsize=maxPocketSize(pocket)
        maxsize=@pockets[pocket].length if maxsize<0
        ret=ItemStorageHelper.pbDeleteItem(@pockets[pocket],maxsize,item,qty)
        if ret
          @registeredItem=0 if @registeredItem==item && !pbHasItem?(item)
        end
        return ret
      end
    
      def pbCanStore?(item,qty=1)
        if item.is_a?(String) || item.is_a?(Symbol)
          item=getID(PBItems,item)
        end
        if !item || item<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return false
        end
        pocket=pbGetPocket(item)
        maxsize=maxPocketSize(pocket)
        maxsize=@pockets[pocket].length+1 if maxsize<0
        return ItemStorageHelper.pbCanStore?(
           @pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
      end
    
      def pbStoreAllOrNone(item,qty=1)
        if item.is_a?(String) || item.is_a?(Symbol)
          item=getID(PBItems,item)
        end
        if !item || item<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return false
        end
        pocket=pbGetPocket(item)
        maxsize=maxPocketSize(pocket)
        maxsize=@pockets[pocket].length+1 if maxsize<0
        return ItemStorageHelper.pbStoreAllOrNone(
           @pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
      end
    
      def pbStoreItem(item,qty=1)
        if item.is_a?(String) || item.is_a?(Symbol)
          item=getID(PBItems,item)
        end
        if !item || item<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return false
        end
        pocket=pbGetPocket(item)
        maxsize=maxPocketSize(pocket)
        maxsize=@pockets[pocket].length+1 if maxsize<0
        return ItemStorageHelper.pbStoreItem(
           @pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty,true)
      end
    
      def pbChangeItem(olditem,newitem)
        if olditem.is_a?(String) || olditem.is_a?(Symbol)
          olditem=getID(PBItems,olditem)
        end
        if newitem.is_a?(String) || newitem.is_a?(Symbol)
          newitem=getID(PBItems,newitem)
        end
        if !olditem || olditem<1 || !newitem || newitem<1
          raise ArgumentError.new(_INTL("The item number is invalid."))
          return false
        end
        pocket=pbGetPocket(olditem)
        maxsize=maxPocketSize(pocket)
        maxsize=@pockets[pocket].length if maxsize<0
        ret=false
        for i in 0...maxsize
          itemslot=@pockets[pocket][i]
          if itemslot && itemslot[0]==olditem
            itemslot[0]=newitem
            ret=true
          end
        end
        return ret
      end
    end
    
    
    
    #===============================================================================
    # PC item storage screen
    #===============================================================================
    class Window_PokemonItemStorage < Window_DrawableCommand
      attr_reader :bag
      attr_reader :pocket
      attr_reader :sortIndex
    
      def sortIndex=(value)
        @sortIndex=value
        refresh
      end
    
      def initialize(bag,x,y,width,height)
        @bag=bag
        @sortIndex=-1
        @adapter=PokemonMartAdapter.new
        super(x,y,width,height)
        self.windowskin=nil
      end
    
      def item
        item=@bag[self.index]
        return item ? item[0] : 0
      end
    
      def itemCount
        return @bag.length+1
      end
    
      def drawItem(index,count,rect)
        textpos=[]
        rect=drawCursor(index,rect)
        ypos=rect.y
        if [email protected]
          textpos.push([_INTL("CANCEL"),rect.x,ypos,false,
             self.baseColor,self.shadowColor])
        else
          item=@bag[index][0]
          [email protected](item)
          qty=_ISPRINTF("x{1: 2d}",@bag[index][1])
          sizeQty=self.contents.text_size(qty).width
          xQty=rect.x+rect.width-sizeQty-2
          baseColor=(index==@sortIndex) ? Color.new(248,24,24) : self.baseColor
          textpos.push([itemname,rect.x,ypos,false,self.baseColor,self.shadowColor])
          if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM)
            textpos.push([qty,xQty,ypos,false,baseColor,self.shadowColor])
          end
        end
        pbDrawTextPositions(self.contents,textpos)
      end
    end
    
    
    
    class ItemStorageScene
    ## Configuration
      ITEMLISTBASECOLOR   = Color.new(88,88,80)
      ITEMLISTSHADOWCOLOR = Color.new(168,184,184)
      ITEMTEXTBASECOLOR   = Color.new(248,248,248)
      ITEMTEXTSHADOWCOLOR = Color.new(0,0,0)
      TITLEBASECOLOR      = Color.new(248,248,248)
      TITLESHADOWCOLOR    = Color.new(0,0,0)
      ITEMSVISIBLE        = 7
    
      def initialize(title)
        @title=title
      end
    
      def update
        pbUpdateSpriteHash(@sprites)
      end
    
      def pbStartScene(bag)
        @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
        @viewport.z=99999
        @bag=bag
        @sprites={}
        @sprites["background"]=IconSprite.new(0,0,@viewport)
        @sprites["background"].setBitmap("Graphics/Pictures/pcItembg")
        @sprites["icon"]=ItemIconSprite.new(50,334,-1,@viewport)
        # Item list
        @sprites["itemwindow"]=Window_PokemonItemStorage.new(@bag,98,14,334,32+ITEMSVISIBLE*32)
        @sprites["itemwindow"].viewport=@viewport
        @sprites["itemwindow"].index=0
        @sprites["itemwindow"].baseColor=ITEMLISTBASECOLOR
        @sprites["itemwindow"].shadowColor=ITEMLISTSHADOWCOLOR
        @sprites["itemwindow"].refresh
        # Title
        @sprites["pocketwindow"]=BitmapSprite.new(88,64,@viewport)
        @sprites["pocketwindow"].x=14
        @sprites["pocketwindow"].y=16
        pbSetNarrowFont(@sprites["pocketwindow"].bitmap)
        # Item description  
        @sprites["itemtextwindow"]=Window_UnformattedTextPokemon.newWithSize("",84,270,Graphics.width-84,128,@viewport)
        @sprites["itemtextwindow"].baseColor=ITEMTEXTBASECOLOR
        @sprites["itemtextwindow"].shadowColor=ITEMTEXTSHADOWCOLOR
        @sprites["itemtextwindow"].windowskin=nil
        @sprites["helpwindow"]=Window_UnformattedTextPokemon.new("")
        @sprites["helpwindow"].visible=false
        @sprites["helpwindow"].viewport=@viewport
        # Letter-by-letter message window
        @sprites["msgwindow"]=Window_AdvancedTextPokemon.new("")
        @sprites["msgwindow"].visible=false
        @sprites["msgwindow"].viewport=@viewport
        pbBottomLeftLines(@sprites["helpwindow"],1)
        pbDeactivateWindows(@sprites)
        pbRefresh
        pbFadeInAndShow(@sprites)
      end
    
      def pbEndScene
        pbFadeOutAndHide(@sprites)
        pbDisposeSpriteHash(@sprites)
        @viewport.dispose
      end
    
      def pbRefresh
        bm=@sprites["pocketwindow"].bitmap
        # Draw title at upper left corner ("Toss Item/Withdraw Item")
        drawTextEx(bm,0,0,bm.width,2,@title,TITLEBASECOLOR,TITLESHADOWCOLOR)
        itemwindow=@sprites["itemwindow"]
        # Draw item icon
        @sprites["icon"].item=itemwindow.item
        # Get item description
        @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close storage.") : 
           pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
        itemwindow.refresh
      end
    
      def pbChooseItem
        pbRefresh
        @sprites["helpwindow"].visible=false
        itemwindow=@sprites["itemwindow"]
        itemwindow.refresh
        pbActivateWindow(@sprites,"itemwindow"){
           loop do
             Graphics.update
             Input.update
             olditem=itemwindow.item
             self.update
             if itemwindow.item!=olditem
               self.pbRefresh
             end
             if Input.trigger?(Input::B)
               return 0
             end
             if Input.trigger?(Input::C)
               if itemwindow.index<@bag.length
                 pbRefresh
                 return @bag[itemwindow.index][0]
               else
                 return 0
               end
             end
           end
        }
      end
    
      def pbChooseNumber(helptext,maximum)
        return UIHelper.pbChooseNumber(
           @sprites["helpwindow"],helptext,maximum) { update }
      end
    
      def pbDisplay(msg,brief=false)
        UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { update }
      end
    
      def pbConfirm(msg)
        UIHelper.pbConfirm(@sprites["msgwindow"],msg) { update }
      end
    
      def pbShowCommands(helptext,commands)
        return UIHelper.pbShowCommands(
           @sprites["helpwindow"],helptext,commands) { update }
      end
    end
    
    
    
    class WithdrawItemScene < ItemStorageScene
      def initialize
        super(_INTL("Withdraw\nItem"))
      end
    end
    
    
    
    class TossItemScene < ItemStorageScene
      def initialize
        super(_INTL("Toss\nItem"))
      end
    end
    
    
    
    #===============================================================================
    # The PC item storage object, which actually contains all the items
    #===============================================================================
    class PCItemStorage
      MAXSIZE    = 50    # Number of different slots in storage
      MAXPERSLOT = 999   # Max. number of items per slot
    
      def initialize
        @items=[]
        # Start storage with a Potion
        if hasConst?(PBItems,:POTION)
          ItemStorageHelper.pbStoreItem(
             @items,MAXSIZE,MAXPERSLOT,getConst(PBItems,:POTION),1)
        end
      end
    
      def empty?
        return @items.length==0
      end
    
      def length
        @items.length
      end
    
      def [](i)
        @items[i]
      end
    
      def getItem(index)
        if index<0 || index>[email protected]
          return 0
        else
          return @items[index][0]
        end
      end
    
      def getCount(index)
        if index<0 || index>[email protected]
          return 0
        else
          return @items[index][1]
        end
      end
    
      def pbQuantity(item)
        return ItemStorageHelper.pbQuantity(@items,MAXSIZE,item)
      end
    
      def pbDeleteItem(item,qty=1)
        return ItemStorageHelper.pbDeleteItem(@items,MAXSIZE,item,qty)
      end
    
      def pbCanStore?(item,qty=1)
        return ItemStorageHelper.pbCanStore?(@items,MAXSIZE,MAXPERSLOT,item,qty)
      end
    
      def pbStoreItem(item,qty=1)
        return ItemStorageHelper.pbStoreItem(@items,MAXSIZE,MAXPERSLOT,item,qty)
      end
    end
    
    
    
    #===============================================================================
    # Common UI functions used in both the Bag and item storage screens.
    # Allows the user to choose a number.  The window _helpwindow_ will
    # display the _helptext_.
    #===============================================================================
    module UIHelper
      def self.pbChooseNumber(helpwindow,helptext,maximum)
        oldvisible=helpwindow.visible
        helpwindow.visible=true
        helpwindow.text=helptext
        helpwindow.letterbyletter=false
        curnumber=1
        ret=0
        using(numwindow=Window_UnformattedTextPokemon.new("x000")){
           numwindow.viewport=helpwindow.viewport
           numwindow.letterbyletter=false
           numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
           numwindow.resizeToFit(numwindow.text,480)
           pbBottomRight(numwindow) # Move number window to the bottom right
           helpwindow.resizeHeightToFit(helpwindow.text,480-numwindow.width)
           pbBottomLeft(helpwindow) # Move help window to the bottom left
           loop do
             Graphics.update
             Input.update
             numwindow.update
             block_given? ? yield : helpwindow.update
             if Input.repeat?(Input::LEFT)
               curnumber-=10
               curnumber=1 if curnumber<1
               numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
               pbPlayCursorSE()
             elsif Input.repeat?(Input::RIGHT)
               curnumber+=10
               curnumber=maximum if curnumber>maximum
               numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
               pbPlayCursorSE()
             elsif Input.repeat?(Input::UP)
               curnumber+=1
               curnumber=1 if curnumber>maximum
               numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
               pbPlayCursorSE()
             elsif Input.repeat?(Input::DOWN)
               curnumber-=1
               curnumber=maximum if curnumber<1
               numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
               pbPlayCursorSE()
             elsif Input.trigger?(Input::C)
               ret=curnumber
               pbPlayDecisionSE()
               break
             elsif Input.trigger?(Input::B)
               ret=0
               pbPlayCancelSE()
               break
             end
           end
        }
        helpwindow.visible=oldvisible
        return ret
      end
    
      def self.pbDisplayStatic(msgwindow,message)
        oldvisible=msgwindow.visible
        msgwindow.visible=true
        msgwindow.letterbyletter=false
        msgwindow.width=Graphics.width
        msgwindow.resizeHeightToFit(message,Graphics.width)
        msgwindow.text=message
        pbBottomRight(msgwindow)
        loop do
          Graphics.update
          Input.update
          if Input.trigger?(Input::B)
            break
          end
          if Input.trigger?(Input::C)
            break
          end
          block_given? ? yield : msgwindow.update
        end
        msgwindow.visible=oldvisible
        Input.update
      end
    
    # Letter by letter display of the message _msg_ by the window _helpwindow_.
      def self.pbDisplay(helpwindow,msg,brief)
        cw=helpwindow
        cw.letterbyletter=true
        cw.text=msg+"\1"
        pbBottomLeftLines(cw,2)
        oldvisible=cw.visible
        cw.visible=true
        loop do
          Graphics.update
          Input.update
          block_given? ? yield : cw.update
          if brief && !cw.busy?
            cw.visible=oldvisible
            return
          end
          if Input.trigger?(Input::C) && cw.resume && !cw.busy?
            cw.visible=oldvisible
            return
          end
        end
      end
    
    # Letter by letter display of the message _msg_ by the window _helpwindow_,
    # used to ask questions.  Returns true if the user chose yes, false if no.
      def self.pbConfirm(helpwindow,msg)
        dw=helpwindow
        oldvisible=dw.visible
        dw.letterbyletter=true
        dw.text=msg
        dw.visible=true
        pbBottomLeftLines(dw,2)
        commands=[_INTL("Yes"),_INTL("No")]
        cw = Window_CommandPokemon.new(commands)
        cw.viewport=helpwindow.viewport
        pbBottomRight(cw)
        cw.y-=dw.height
        cw.index=0
        loop do
          cw.visible=!dw.busy?
          Graphics.update
          Input.update
          cw.update
          block_given? ? yield : dw.update
          if Input.trigger?(Input::B) && dw.resume && !dw.busy?
            cw.dispose
            dw.visible=oldvisible
            pbPlayCancelSE()
            return false
          end
          if Input.trigger?(Input::C) && dw.resume && !dw.busy?
            cwIndex=cw.index
            cw.dispose
            dw.visible=oldvisible
            pbPlayDecisionSE()
            return (cwIndex==0)?true:false
          end
        end
      end
    
      def self.pbShowCommands(helpwindow,helptext,commands)
        ret=-1
        oldvisible=helpwindow.visible
        helpwindow.visible=helptext ? true : false
        helpwindow.letterbyletter=false
        helpwindow.text=helptext ? helptext : ""
        cmdwindow=Window_CommandPokemon.new(commands)
        begin
          cmdwindow.viewport=helpwindow.viewport
          pbBottomRight(cmdwindow)
          helpwindow.resizeHeightToFit(helpwindow.text,480-cmdwindow.width)
          pbBottomLeft(helpwindow)
          loop do
            Graphics.update
            Input.update
            yield
            cmdwindow.update
            if Input.trigger?(Input::B)
              ret=-1
              pbPlayCancelSE()
              break
            end
            if Input.trigger?(Input::C)
              ret=cmdwindow.index
              pbPlayDecisionSE()
              break
            end
          end
        ensure
          cmdwindow.dispose if cmdwindow
        end
        helpwindow.visible=oldvisible
        return ret
      end
    end
    [/SPOILER]

    For v18 by StCooler, works with the same graphics provided in the 17.2 version
    Spoiler:

    For v19 Works with the same graphics provided in the 17.2 version
    Spoiler:
     
    Last edited:
    50
    Posts
    4
    Years
    • Seen Oct 17, 2023
    It's pretty cool, I've been looking for this working version for a long time.

    The problem I see is that versions 16 seems that the "pbIsRegistered?" Does not exist.
     
    350
    Posts
    5
    Years
  • Next Update's gonna be tomorrow at this time. Removing animated Backgrounds for more smoothness and improved animations.( + new arrows)
    If you don't want to remove animated Backgrounds, and have lag there will be some tweaks
     
    Last edited:
    44
    Posts
    6
    Years
  • Awesome graphic!
    I encountered 2 errors that I resolved (easy things that can happen to anyone):
    • Syntax error: the comment section that starts with "=start" and ends with "=end" MUST be with zero indentation, or it wil return error. It can happen that with copy&paste the indentation gets wrong; (Line 453 and 514)
    • Code:
      $mouse.leftClick?
      is undefined. Probably since it is connected with some scripting mouse utility that I don't have.
      Just substitute line 389 with
      Code:
      if Input.trigger?(Input::LEFT) #|| $mouse.leftClick?(@sprites["switchL"])
      and line 421 with
      Code:
      elsif Input.trigger?(Input::RIGHT) #|| $mouse.leftClick?(@sprites["switchR"])

    Hope it helps :)
     
    350
    Posts
    5
    Years
  • Awesome graphic!
    I encountered 2 errors that I resolved (easy things that can happen to anyone):
    • Syntax error: the comment section that starts with "=start" and ends with "=end" MUST be with zero indentation, or it wil return error. It can happen that with copy&paste the indentation gets wrong; (Line 453 and 514)
    • Code:
      $mouse.leftClick?
      is undefined. Probably since it is connected with some scripting mouse utility that I don't have.
      Just substitute line 389 with
      Code:
      if Input.trigger?(Input::LEFT) #|| $mouse.leftClick?(@sprites["switchL"])
      and line 421 with
      Code:
      elsif Input.trigger?(Input::RIGHT) #|| $mouse.leftClick?(@sprites["switchR"])

    Hope it helps :)
    You shall use Luka's Easy Mouse System.
    I used the old legacy methods to which I am comfortable with. You can hash out the mouse click stuff you don't want!
    Thanks for pointing out those errors!
    I will try updating the post, and removing the errors
     
    195
    Posts
    7
    Years
    • Seen May 4, 2024
    Just thought I'd let you know, there's a check in the code for a ZCube that shouldn't really be there, since not everyone has that item defined.
     
    15
    Posts
    4
    Years
    • Seen Dec 5, 2022
    Hi, i tried to put it in my game, but when i lunch the bag, i can't chose an item nor close the bag. I tried every key on my keyboard. I can change pouch, and i can move the cursor to select the item, but when i hit enter, nothing. Then i try to close the bag and i can't.
     
    350
    Posts
    5
    Years
  • Hi, i tried to put it in my game, but when i lunch the bag, i can't chose an item nor close the bag. I tried every key on my keyboard. I can change pouch, and i can move the cursor to select the item, but when i hit enter, nothing. Then i try to close the bag and i can't.

    I will be fixing that tomorrow, the copying did it. Btw Which bag Script are you using, the one in the post maybe broken. Use the one in the attachment.
    You replaced the Pscreen_Bag or pasted it above main? It replaced PScreen_Bag.
     
    Last edited:
    14
    Posts
    4
    Years
    • Seen Jun 22, 2022
    I'm having the same problem, I used both the script in the download and the script in your post and I cannot close the bag or choose an item, I can only change bags with the arrow keys. The mouse function is also not working.
     
    Back
    Top