SHARE
TWEET

BW2

a guest Dec 14th, 2015 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #===============================================================================
  2. # BW2 Bag Screen (Stock Essentials)
  3. # Modded by Erassus (Colours & Sounds)
  4. #===============================================================================
  5. class Window_PokemonBag < Window_DrawableCommand
  6.   attr_reader :pocket
  7.   attr_reader :sortIndex
  8.  
  9.   def initialize(bag,pocket,x,y,width,height)
  10.     @bag=bag
  11.     @pocket=pocket
  12.     @sortIndex=-1
  13.     @adapter=PokemonMartAdapter.new
  14.     super(x,y,width,height)
  15.     @selarrow=AnimatedBitmap.new("Graphics/Pictures/BW2 Bag/BagSel")
  16.     self.windowskin=nil
  17.   end
  18.  
  19.   def pocket=(value)
  20.     @pocket=value
  21.     thispocket=@bag.pockets[@pocket]
  22.     @item_max=thispocket.length+1
  23.     self.index=@bag.getChoice(@pocket)
  24.     refresh
  25.   end
  26.  
  27.   def sortIndex=(value)
  28.     @sortIndex=value
  29.     refresh
  30.   end
  31.  
  32.   def page_row_max; return PokemonBag_Scene::ITEMSVISIBLE; end
  33.   def page_item_max; return PokemonBag_Scene::ITEMSVISIBLE; end
  34.  
  35.   def itemRect(item)
  36.     if item<0 || item>=@item_max || item<self.top_item-1 ||
  37.        item>self.top_item+self.page_item_max
  38.       return Rect.new(0,0,0,0)
  39.     else
  40.       cursor_width = (self.width-self.borderX-(@column_max-1)*@column_spacing) / @column_max
  41.       x = item % @column_max * (cursor_width + @column_spacing)
  42.       y = item / @column_max * @row_height - @virtualOy
  43.       return Rect.new(x, y, cursor_width, @row_height)
  44.     end
  45.   end
  46.  
  47.   def drawCursor(index,rect)
  48.     if self.index==index
  49.       pbCopyBitmap(self.contents,@selarrow.bitmap,rect.x,rect.y+14)
  50.     end
  51.     return Rect.new(rect.x+16,rect.y+16,rect.width-16,rect.height)
  52.   end
  53.  
  54.   def item
  55.     thispocket=@bag.pockets[self.pocket]
  56.     item=thispocket[self.index]
  57.     return item ? item[0] : 0
  58.   end
  59.  
  60.   def itemCount
  61.     return @bag.pockets[self.pocket].length+1
  62.   end
  63.  
  64.   def drawItem(index,count,rect)
  65.     textpos=[]
  66.     rect=drawCursor(index,rect)
  67.     ypos=rect.y+4
  68.     if index==@bag.pockets[self.pocket].length
  69.       textpos.push([_INTL("CLOSE BAG"),rect.x,ypos,false,
  70.          self.baseColor,self.shadowColor])
  71.     else
  72.       item=@bag.pockets[self.pocket][index][0]
  73.       itemname=@adapter.getDisplayName(item)
  74.       qty=_ISPRINTF("x{1: 2d}",@bag.pockets[self.pocket][index][1])
  75.       sizeQty=self.contents.text_size(qty).width
  76.       xQty=rect.x+rect.width-sizeQty-16
  77.       baseColor=(index==@sortIndex) ? Color.new(224,0,0) : self.baseColor
  78.       shadowColor=(index==@sortIndex) ? Color.new(248,144,144) : self.shadowColor
  79.       textpos.push([itemname,rect.x,ypos,false,baseColor,shadowColor])
  80.       if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM)
  81.         textpos.push([qty,xQty,ypos,false,baseColor,shadowColor])
  82.       end
  83.     end
  84.     pbDrawTextPositions(self.contents,textpos)
  85.     if index!=@bag.pockets[self.pocket].length
  86.       if @bag.registeredItem==@bag.pockets[self.pocket][index][0]
  87.         pbDrawImagePositions(self.contents,[
  88.            ["Graphics/Pictures/BW2 Bag/BagReg",rect.x+rect.width-58,ypos+4,0,0,-1,-1]
  89.         ])
  90.       end
  91.     end
  92.   end
  93.  
  94.   def refresh
  95.     @item_max=itemCount()
  96.     dwidth=self.width-self.borderX
  97.     dheight=self.height-self.borderY
  98.     self.contents=pbDoEnsureBitmap(self.contents,dwidth,dheight)
  99.     self.contents.clear
  100.     for i in 0...@item_max
  101.       if i<self.top_item-1 || i>self.top_item+self.page_item_max
  102.         next
  103.       end
  104.       drawItem(i,@item_max,itemRect(i))
  105.     end
  106.   end
  107. end
  108.  
  109.  
  110.  
  111. class PokemonBag_Scene
  112. ## Configuration
  113.   ITEMLISTBASECOLOR     = Color.new(248,248,248)
  114.   ITEMLISTSHADOWCOLOR   = Color.new(90,90,90)
  115.   ITEMTEXTBASECOLOR     = Color.new(248,248,248)
  116.   ITEMTEXTSHADOWCOLOR   = Color.new(90,90,90)
  117.   POCKETNAMEBASECOLOR   = Color.new(248,248,248)
  118.   POCKETNAMESHADOWCOLOR = Color.new(90,90,90)
  119.   ITEMSVISIBLE          = 7
  120.  
  121.   def update
  122.     pbUpdateSpriteHash(@sprites)
  123.   end
  124.  
  125.   def pbStartScene(bag)
  126.     @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  127.     @viewport.z=99999
  128.     @bag=bag
  129.     @sprites={}
  130.     lastpocket=@bag.lastpocket
  131.     lastitem=@bag.getChoice(lastpocket)
  132.     @sprites["background"]=IconSprite.new(0,0,@viewport)
  133.     @sprites["leftarrow"]=AnimatedSprite.new("Graphics/Pictures/LeftArrow",8,40,28,2,@viewport)
  134.     @sprites["rightarrow"]=AnimatedSprite.new("Graphics/Pictures/RightArrow",8,40,28,2,@viewport)
  135.     @sprites["leftarrow"].play
  136.     @sprites["rightarrow"].play
  137.     @sprites["bag"]=IconSprite.new(0,0,@viewport)
  138.     @sprites["icon"]=IconSprite.new(24,Graphics.height-72,@viewport)
  139.     @sprites["itemwindow"]=Window_PokemonBag.new(@bag,lastpocket,168,-8,314,40+32+ITEMSVISIBLE*32)
  140.     @sprites["itemwindow"].viewport=@viewport
  141.     @sprites["itemwindow"].pocket=lastpocket
  142.     @sprites["itemwindow"].index=lastitem
  143.     @sprites["itemwindow"].baseColor=ITEMLISTBASECOLOR
  144.     @sprites["itemwindow"].shadowColor=ITEMLISTSHADOWCOLOR
  145.     @sprites["itemwindow"].refresh
  146.     @sprites["slider"]=IconSprite.new(Graphics.width-40,60,@viewport)
  147.     @sprites["slider"].setBitmap(sprintf("Graphics/Pictures/BW2 Bag/BagSlider"))
  148.     @sprites["pocketwindow"]=BitmapSprite.new(186,228,@viewport)
  149.     pbSetSystemFont(@sprites["pocketwindow"].bitmap)
  150.     @sprites["itemtextwindow"]=Window_UnformattedTextPokemon.new("")
  151.     @sprites["itemtextwindow"].x=72
  152.     @sprites["itemtextwindow"].y=270
  153.     @sprites["itemtextwindow"].width=Graphics.width-72
  154.     @sprites["itemtextwindow"].height=128
  155.     @sprites["itemtextwindow"].baseColor=ITEMTEXTBASECOLOR
  156.     @sprites["itemtextwindow"].shadowColor=ITEMTEXTSHADOWCOLOR
  157.     @sprites["itemtextwindow"].visible=true
  158.     @sprites["itemtextwindow"].viewport=@viewport
  159.     @sprites["itemtextwindow"].windowskin=nil
  160.     @sprites["helpwindow"]=Window_UnformattedTextPokemon.new("")
  161.     @sprites["helpwindow"].visible=false
  162.     @sprites["helpwindow"].viewport=@viewport
  163.     @sprites["msgwindow"]=Window_AdvancedTextPokemon.new("")
  164.     @sprites["msgwindow"].visible=false
  165.     @sprites["msgwindow"].viewport=@viewport
  166.     pbBottomLeftLines(@sprites["helpwindow"],1)
  167.     pbDeactivateWindows(@sprites)
  168.     pbRefresh
  169.     pbFadeInAndShow(@sprites)
  170.   end
  171.  
  172.   def pbEndScene
  173.     pbFadeOutAndHide(@sprites)
  174.     pbDisposeSpriteHash(@sprites)
  175.     @viewport.dispose
  176.   end
  177.  
  178.   def pbChooseNumber(helptext,maximum)
  179.     return UIHelper.pbChooseNumber(
  180.        @sprites["helpwindow"],helptext,maximum) { update }
  181.   end
  182.  
  183.   def pbDisplay(msg,brief=false)
  184.     UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { update }
  185.   end
  186.  
  187.   def pbConfirm(msg)
  188.     UIHelper.pbConfirm(@sprites["msgwindow"],msg) { update }
  189.   end
  190.  
  191.   def pbShowCommands(helptext,commands)
  192.     return UIHelper.pbShowCommands(
  193.        @sprites["helpwindow"],helptext,commands) { update }
  194.   end
  195.  
  196.   def pbRefresh
  197.     bm=@sprites["pocketwindow"].bitmap
  198.     bm.clear
  199.     # Set the bag picture for the currently selected pocket
  200.     fbagexists=pbResolveBitmap(sprintf("Graphics/Pictures/BW2 Bag/Bag#{@bag.lastpocket}f"))
  201.     if $Trainer.isFemale? && fbagexists
  202.       @sprites["bag"].setBitmap("Graphics/Pictures/BW2 Bag/Bag#{@bag.lastpocket}f")
  203.     else
  204.       @sprites["bag"].setBitmap("Graphics/Pictures/BW2 Bag/Bag#{@bag.lastpocket}")
  205.     end
  206.     # Draw the pocket name
  207.     name=PokemonBag.pocketNames()[@bag.lastpocket]
  208.     base=POCKETNAMEBASECOLOR
  209.     shadow=POCKETNAMESHADOWCOLOR
  210.     pbDrawTextPositions(bm,[
  211.        [name,bm.width/2,180,2,base,shadow]
  212.     ])
  213.     # Reset positions of left/right arrows around the bag
  214.     @sprites["leftarrow"].x=-4
  215.     @sprites["leftarrow"].y=76
  216.     @sprites["rightarrow"].x=150
  217.     @sprites["rightarrow"].y=76
  218.     itemwindow=@sprites["itemwindow"]
  219.     # Draw the slider
  220.     ycoord=60
  221.     if itemwindow.itemCount>1
  222.       ycoord+=116.0 * itemwindow.index/(itemwindow.itemCount-1)
  223.     end
  224.     @sprites["slider"].y=ycoord
  225.     # Set the icon for the currently selected item
  226.     filename=pbItemIconFile(itemwindow.item)
  227.     @sprites["icon"].setBitmap(filename)
  228.     # Display the item's description
  229.     @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close bag.") :
  230.        pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
  231.     # Refresh the item window
  232.     itemwindow.refresh
  233.   end
  234.  
  235. # Called when the item screen wants an item to be chosen from the screen
  236.   def pbChooseItem
  237.     pbRefresh
  238.     @sprites["helpwindow"].visible=false
  239.     itemwindow=@sprites["itemwindow"]
  240.     itemwindow.refresh
  241.     sorting=false
  242.     sortindex=-1
  243.     pbActivateWindow(@sprites,"itemwindow"){
  244.        loop do
  245.          Graphics.update
  246.          Input.update
  247.          olditem=itemwindow.item
  248.          oldindex=itemwindow.index
  249.          self.update
  250.          if itemwindow.item!=olditem
  251.            # Update slider position
  252.            ycoord=60
  253.            if itemwindow.itemCount>1
  254.              ycoord+=116.0 * itemwindow.index/(itemwindow.itemCount-1)
  255.            end
  256.            @sprites["slider"].y=ycoord
  257.            # Update item icon and description
  258.            filename=pbItemIconFile(itemwindow.item)
  259.            @sprites["icon"].setBitmap(filename)
  260.            @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close bag.") :
  261.               pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
  262.          end
  263.          if itemwindow.index!=oldindex
  264.            # Update selected item for current pocket
  265.            @bag.setChoice(itemwindow.pocket,itemwindow.index)
  266.          end
  267.          # Change pockets if Left/Right pressed
  268.          numpockets=PokemonBag.numPockets
  269.          if Input.trigger?(Input::LEFT)
  270.            pbSEPlay("BW2_BagSound")
  271.            if !sorting
  272.              itemwindow.pocket=(itemwindow.pocket==1) ? numpockets : itemwindow.pocket-1
  273.              @bag.lastpocket=itemwindow.pocket
  274.              pbRefresh
  275.            end
  276.          elsif Input.trigger?(Input::RIGHT)
  277.            pbSEPlay("BW2_BagSound")
  278.            if !sorting
  279.              itemwindow.pocket=(itemwindow.pocket==numpockets) ? 1 : itemwindow.pocket+1
  280.              @bag.lastpocket=itemwindow.pocket
  281.              pbRefresh
  282.            end
  283.          end
  284.          # Select item for switching if A is pressed
  285.          if Input.trigger?(Input::A)
  286.            thispocket=@bag.pockets[itemwindow.pocket]
  287.            if itemwindow.index<thispocket.length && thispocket.length>1 &&
  288.               !POCKETAUTOSORT[itemwindow.pocket]
  289.              sortindex=itemwindow.index
  290.              sorting=true
  291.              @sprites["itemwindow"].sortIndex=sortindex
  292.            else
  293.              next
  294.            end
  295.          end
  296.          # Cancel switching or cancel the item screen
  297.          if Input.trigger?(Input::B)
  298.            pbSEPlay("BW2_Cancel")
  299.            if sorting
  300.              sorting=false
  301.              @sprites["itemwindow"].sortIndex=-1
  302.            else
  303.              return 0
  304.            end
  305.          end
  306.          # Confirm selection or item switch
  307.          if Input.trigger?(Input::C)
  308.            thispocket=@bag.pockets[itemwindow.pocket]
  309.            if itemwindow.index<thispocket.length
  310.              if sorting
  311.                sorting=false
  312.                tmp=thispocket[itemwindow.index]
  313.                thispocket[itemwindow.index]=thispocket[sortindex]
  314.                thispocket[sortindex]=tmp
  315.                @sprites["itemwindow"].sortIndex=-1
  316.                pbRefresh
  317.                next
  318.              else
  319.                pbRefresh
  320.                return thispocket[itemwindow.index][0]
  321.              end
  322.            else
  323.              return 0
  324.            end
  325.          end
  326.        end
  327.     }
  328.   end
  329. end
  330.  
  331.  
  332.  
  333. class PokemonBagScreen
  334.   def initialize(scene,bag)
  335.     @bag=bag
  336.     @scene=scene
  337.   end
  338.  
  339.   def pbDisplay(text)
  340.     @scene.pbDisplay(text)
  341.   end
  342.  
  343.   def pbConfirm(text)
  344.     return @scene.pbConfirm(text)
  345.   end
  346.  
  347. # UI logic for the item screen when an item is to be held by a Pokémon.
  348.   def pbGiveItemScreen
  349.     @scene.pbStartScene(@bag)
  350.     item=0
  351.     loop do
  352.       item=@scene.pbChooseItem
  353.       break if item==0
  354.       itemname=PBItems.getName(item)
  355.       # Key items and hidden machines can't be held
  356.       if pbIsImportantItem?(item)
  357.         @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
  358.         next
  359.       else
  360.         break
  361.       end
  362.     end
  363.     @scene.pbEndScene
  364.     return item
  365.   end
  366.  
  367. #For use on item on Pokémon from Party screen
  368.   def pbUseItemScreen(pokemon)  
  369.     @scene.pbStartScene(@bag)
  370.     item=0
  371.     loop do
  372.       item=@scene.pbChooseItem
  373.       break if item==0
  374.       itemname=PBItems.getName(item)
  375.       # Key items and hidden machines can't be held
  376.       if !ItemHandlers.hasUseOnPokemonHandler(item) && !pbIsMachine?(item)
  377.         @scene.pbDisplay(_INTL("The {1} can't be used on {2}.",itemname, pokemon.name))
  378.         next
  379.       else
  380.         ret=pbCheckUseOnPokemonQuick(item,pokemon,@scene)
  381.         break if ret==true # End screen, not actually used
  382.         @scene.pbRefresh
  383.         next
  384.       end
  385.     end
  386.     @scene.pbEndScene
  387.     return item
  388.   end
  389.  
  390. # UI logic for the item screen for choosing an item
  391.   def pbChooseItemScreen
  392.     oldlastpocket=@bag.lastpocket
  393.     @scene.pbStartScene(@bag)
  394.     item=@scene.pbChooseItem
  395.     @scene.pbEndScene
  396.     @bag.lastpocket=oldlastpocket
  397.     return item
  398.   end
  399.  
  400. # UI logic for the item screen for choosing a Berry
  401.   def pbChooseBerryScreen
  402.     oldlastpocket=@bag.lastpocket
  403.     @bag.lastpocket=BERRYPOCKET
  404.     @scene.pbStartScene(@bag)
  405.     item=0
  406.     loop do
  407.       item=@scene.pbChooseItem
  408.       break if item==0
  409.       itemname=PBItems.getName(item)
  410.       if !pbIsBerry?(item)
  411.         @scene.pbDisplay(_INTL("That's not a Berry.",itemname))
  412.         next
  413.       else
  414.         break
  415.       end
  416.     end
  417.     @scene.pbEndScene
  418.     @bag.lastpocket=oldlastpocket
  419.     return item
  420.   end
  421.  
  422. # UI logic for tossing an item in the item screen.
  423.   def pbTossItemScreen
  424.     if !$PokemonGlobal.pcItemStorage
  425.       $PokemonGlobal.pcItemStorage=PCItemStorage.new
  426.     end
  427.     storage=$PokemonGlobal.pcItemStorage
  428.     @scene.pbStartScene(storage)
  429.     loop do
  430.       item=@scene.pbChooseItem
  431.       break if item==0
  432.       if pbIsImportantItem?(item)
  433.         @scene.pbDisplay(_INTL("That's too important to toss out!"))
  434.         next
  435.       end
  436.       qty=storage.pbQuantity(item)
  437.       itemname=PBItems.getName(item)
  438.       if qty>1
  439.         qty=@scene.pbChooseNumber(_INTL("Toss out how many {1}(s)?",itemname),qty)
  440.       end
  441.       if qty>0
  442.         if pbConfirm(_INTL("Is it OK to throw away {1} {2}(s)?",qty,itemname))
  443.           if !storage.pbDeleteItem(item,qty)
  444.             raise "Can't delete items from storage"
  445.           end
  446.           pbDisplay(_INTL("Threw away {1} {2}(s).",qty,itemname))
  447.         end
  448.       end
  449.     end
  450.     @scene.pbEndScene
  451.   end
  452.  
  453. # UI logic for withdrawing an item in the item screen.
  454.   def pbWithdrawItemScreen
  455.     if !$PokemonGlobal.pcItemStorage
  456.       $PokemonGlobal.pcItemStorage=PCItemStorage.new
  457.     end
  458.     storage=$PokemonGlobal.pcItemStorage
  459.     @scene.pbStartScene(storage)
  460.     loop do
  461.       item=@scene.pbChooseItem
  462.       break if item==0
  463.       commands=[_INTL("Withdraw"),_INTL("Give"),_INTL("Cancel")]
  464.       itemname=PBItems.getName(item)
  465.       command=@scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands)
  466.       if command==0
  467.         qty=storage.pbQuantity(item)
  468.         if qty>1
  469.           qty=@scene.pbChooseNumber(_INTL("How many do you want to withdraw?"),qty)
  470.         end
  471.         if qty>0
  472.           if !@bag.pbCanStore?(item,qty)
  473.             pbDisplay(_INTL("There's no more room in the Bag."))
  474.           else
  475.             pbDisplay(_INTL("Withdrew {1} {2}(s).",qty,itemname))
  476.             if !storage.pbDeleteItem(item,qty)
  477.               raise "Can't delete items from storage"
  478.             end
  479.             if !@bag.pbStoreItem(item,qty)
  480.               raise "Can't withdraw items from storage"
  481.             end
  482.           end
  483.         end
  484.       elsif command==1 # Give
  485.         if $Trainer.pokemonCount==0
  486.           @scene.pbDisplay(_INTL("There is no Pokémon."))
  487.           return 0
  488.         elsif pbIsImportantItem?(item)
  489.           @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
  490.         else
  491.           pbFadeOutIn(99999){
  492.              sscene=PokemonScreen_Scene.new
  493.              sscreen=PokemonScreen.new(sscene,$Trainer.party)
  494.              if sscreen.pbPokemonGiveScreen(item)
  495.                # If the item was held, delete the item from storage
  496.                if !storage.pbDeleteItem(item,1)
  497.                  raise "Can't delete item from storage"
  498.                end
  499.              end
  500.              @scene.pbRefresh
  501.           }
  502.         end
  503.       end
  504.     end
  505.     @scene.pbEndScene
  506.   end
  507.  
  508. # UI logic for depositing an item in the item screen.
  509.   def pbDepositItemScreen
  510.     @scene.pbStartScene(@bag)
  511.     if !$PokemonGlobal.pcItemStorage
  512.       $PokemonGlobal.pcItemStorage=PCItemStorage.new
  513.     end
  514.     storage=$PokemonGlobal.pcItemStorage
  515.     item=0
  516.     loop do
  517.       item=@scene.pbChooseItem
  518.       break if item==0
  519.       qty=@bag.pbQuantity(item)
  520.       if qty>1
  521.         qty=@scene.pbChooseNumber(_INTL("How many do you want to deposit?"),qty)
  522.       end
  523.       if qty>0
  524.         itemname=PBItems.getName(item)
  525.         if !storage.pbCanStore?(item,qty)
  526.           pbDisplay(_INTL("There's no room to store items."))
  527.         else
  528.           pbDisplay(_INTL("Deposited {1} {2}(s).",qty,itemname))
  529.           if !@bag.pbDeleteItem(item,qty)
  530.             raise "Can't delete items from bag"
  531.           end
  532.           if !storage.pbStoreItem(item,qty)
  533.             raise "Can't deposit items to storage"
  534.           end
  535.         end
  536.       end
  537.     end
  538.     @scene.pbEndScene
  539.   end
  540.  
  541.   def pbStartScreen
  542.     @scene.pbStartScene(@bag)
  543.     item=0
  544.     loop do
  545.       item=@scene.pbChooseItem
  546.       break if item==0
  547.       cmdUse=-1
  548.       cmdRegister=-1
  549.       cmdGive=-1
  550.       cmdToss=-1
  551.       cmdRead=-1
  552.       cmdMysteryGift=-1
  553.       commands=[]
  554.       # Generate command list
  555.       commands[cmdRead=commands.length]=_INTL("Read") if pbIsMail?(item)
  556.       commands[cmdUse=commands.length]=_INTL("Use") if ItemHandlers.hasOutHandler(item) || (pbIsMachine?(item) && $Trainer.party.length>0)
  557.       commands[cmdGive=commands.length]=_INTL("Give") if $Trainer.party.length>0 && !pbIsImportantItem?(item)
  558.       commands[cmdToss=commands.length]=_INTL("Toss") if !pbIsImportantItem?(item) || $DEBUG
  559.       if @bag.registeredItem==item
  560.         commands[cmdRegister=commands.length]=_INTL("Deselect")
  561.       elsif pbIsKeyItem?(item) && ItemHandlers.hasKeyItemHandler(item)
  562.         commands[cmdRegister=commands.length]=_INTL("Register")
  563.       end
  564.       commands[cmdMysteryGift=commands.length]=_INTL("Make Mystery Gift") if $DEBUG
  565.       commands[commands.length]=_INTL("Cancel")
  566.       # Show commands generated above
  567.       itemname=PBItems.getName(item) # Get item name
  568.       command=@scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands)
  569.       if cmdUse>=0 && command==cmdUse # Use item
  570.         ret=pbUseItem(@bag,item,@scene)
  571.         # 0=Item wasn't used; 1=Item used; 2=Close Bag to use in field
  572.         break if ret==2 # End screen
  573.         @scene.pbRefresh
  574.         next
  575.       elsif cmdRead>=0 && command==cmdRead # Read mail
  576.         pbFadeOutIn(99999){
  577.            pbDisplayMail(PokemonMail.new(item,"",""))
  578.         }
  579.       elsif cmdRegister>=0 && command==cmdRegister # Register key item
  580.         @bag.pbRegisterKeyItem(item)
  581.         @scene.pbRefresh
  582.       elsif cmdGive>=0 && command==cmdGive # Give item to Pokémon
  583.         if $Trainer.pokemonCount==0
  584.           @scene.pbDisplay(_INTL("There is no Pokémon."))
  585.         elsif pbIsImportantItem?(item)
  586.           @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
  587.         else
  588.           # Give item to a Pokémon
  589.           pbFadeOutIn(99999){
  590.              sscene=PokemonScreen_Scene.new
  591.              sscreen=PokemonScreen.new(sscene,$Trainer.party)
  592.              sscreen.pbPokemonGiveScreen(item)
  593.              @scene.pbRefresh
  594.           }
  595.         end
  596.       elsif cmdToss>=0 && command==cmdToss # Toss item
  597.         qty=@bag.pbQuantity(item)
  598.         helptext=_INTL("Toss out how many {1}(s)?",itemname)
  599.         qty=@scene.pbChooseNumber(helptext,qty)
  600.         if qty>0
  601.           if pbConfirm(_INTL("Is it OK to throw away {1} {2}(s)?",qty,itemname))
  602.             pbDisplay(_INTL("Threw away {1} {2}(s).",qty,itemname))
  603.             qty.times { @bag.pbDeleteItem(item) }      
  604.           end
  605.         end  
  606.       elsif cmdMysteryGift>=0 && command==cmdMysteryGift   # Export to Mystery Gift
  607.         pbCreateMysteryGift(1,item)
  608.       end
  609.     end
  610.     @scene.pbEndScene
  611.     return item
  612.   end
  613. end
  614.  
  615.  
  616.  
  617. #===============================================================================
  618. # The Bag object, which actually contains all the items
  619. #===============================================================================
  620. class PokemonBag
  621.   attr_reader :registeredItem
  622.   attr_accessor :lastpocket
  623.   attr_reader :pockets
  624.  
  625.   def self.pocketNames()
  626.     return pbPocketNames
  627.   end
  628.  
  629.   def self.numPockets()
  630.     return self.pocketNames().length-1
  631.   end
  632.  
  633.   def initialize
  634.     @lastpocket=1
  635.     @pockets=[]
  636.     @choices=[]
  637.     # Initialize each pocket of the array
  638.     for i in 0..PokemonBag.numPockets
  639.       @pockets[i]=[]
  640.       @choices[i]=0
  641.     end
  642.     @registeredItem=0
  643.   end
  644.  
  645.   def pockets
  646.     rearrange
  647.     return @pockets
  648.   end
  649.  
  650.   def rearrange
  651.     if (@pockets.length-1)!=PokemonBag.numPockets
  652.       newpockets=[]
  653.       for i in 0..PokemonBag.numPockets
  654.         newpockets[i]=[]
  655.         @choices[i]=0 if !@choices[i]
  656.       end
  657.       nump=PokemonBag.numPockets
  658.       for i in 0...@pockets.length
  659.         for item in @pockets[i]
  660.           p=pbGetPocket(item[0])
  661.           newpockets[p].push(item) if p<=nump
  662.         end
  663.       end
  664.       @pockets=newpockets
  665.     end
  666.   end
  667.  
  668. # Gets the index of the current selected item in the pocket
  669.   def getChoice(pocket)
  670.     if pocket<=0 || pocket>PokemonBag.numPockets
  671.       raise ArgumentError.new(_INTL("Invalid pocket: {1}",pocket.inspect))
  672.     end
  673.     rearrange
  674.     return [@choices[pocket],@pockets[pocket].length].min || 0
  675.   end
  676.  
  677. # Clears the entire bag
  678.   def clear
  679.     for pocket in @pockets
  680.       pocket.clear
  681.     end
  682.   end
  683.  
  684. # Sets the index of the current selected item in the pocket
  685.   def setChoice(pocket,value)
  686.     if pocket<=0 || pocket>PokemonBag.numPockets
  687.       raise ArgumentError.new(_INTL("Invalid pocket: {1}",pocket.inspect))
  688.     end
  689.     rearrange
  690.     @choices[pocket]=value if value<=@pockets[pocket].length
  691.   end
  692.  
  693. # Registers the item as a key item.  Can be retrieved with $PokemonBag.registeredItem
  694.   def pbRegisterKeyItem(item)
  695.     if item.is_a?(String) || item.is_a?(Symbol)
  696.       item=getID(PBItems,item)
  697.     end
  698.     if !item || item<1
  699.       raise ArgumentError.new(_INTL("The item number is invalid.",item))
  700.       return
  701.     end
  702.     @registeredItem=(item!=@registeredItem) ? item : 0
  703.   end
  704.  
  705.   def maxPocketSize(pocket)
  706.     maxsize=MAXPOCKETSIZE[pocket]
  707.     return -1 if !maxsize
  708.     return maxsize
  709.   end
  710.  
  711.   def pbQuantity(item)
  712.     if item.is_a?(String) || item.is_a?(Symbol)
  713.       item=getID(PBItems,item)
  714.     end
  715.     if !item || item<1
  716.       raise ArgumentError.new(_INTL("The item number is invalid.",item))
  717.       return 0
  718.     end
  719.     pocket=pbGetPocket(item)
  720.     maxsize=maxPocketSize(pocket)
  721.     maxsize=@pockets[pocket].length if maxsize<0
  722.     return ItemStorageHelper.pbQuantity(@pockets[pocket],maxsize,item)
  723.   end
  724.    
  725.   def pbDeleteItem(item,qty=1)
  726.     if item.is_a?(String) || item.is_a?(Symbol)
  727.       item=getID(PBItems,item)
  728.     end
  729.     if !item || item<1
  730.       raise ArgumentError.new(_INTL("The item number is invalid.",item))
  731.       return false
  732.     end
  733.     pocket=pbGetPocket(item)
  734.     maxsize=maxPocketSize(pocket)
  735.     maxsize=@pockets[pocket].length if maxsize<0
  736.     ret=ItemStorageHelper.pbDeleteItem(@pockets[pocket],maxsize,item,qty)
  737.     if ret
  738.       @registeredItem=0 if @registeredItem==item && pbQuantity(item)<=0
  739.     end
  740.     return ret
  741.   end
  742.  
  743.   def pbCanStore?(item,qty=1)
  744.     if item.is_a?(String) || item.is_a?(Symbol)
  745.       item=getID(PBItems,item)
  746.     end
  747.     if !item || item<1
  748.       raise ArgumentError.new(_INTL("The item number is invalid.",item))
  749.       return false
  750.     end
  751.     pocket=pbGetPocket(item)
  752.     maxsize=maxPocketSize(pocket)
  753.     maxsize=@pockets[pocket].length+1 if maxsize<0
  754.     return ItemStorageHelper.pbCanStore?(
  755.        @pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
  756.   end
  757.  
  758.   def pbStoreAllOrNone(item,qty=1)
  759.     if item.is_a?(String) || item.is_a?(Symbol)
  760.       item=getID(PBItems,item)
  761.     end
  762.     if !item || item<1
  763.       raise ArgumentError.new(_INTL("The item number is invalid.",item))
  764.       return false
  765.     end
  766.     pocket=pbGetPocket(item)
  767.     maxsize=maxPocketSize(pocket)
  768.     maxsize=@pockets[pocket].length+1 if maxsize<0
  769.     return ItemStorageHelper.pbStoreAllOrNone(
  770.        @pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
  771.   end
  772.  
  773.   def pbStoreItem(item,qty=1)
  774.     if item.is_a?(String) || item.is_a?(Symbol)
  775.       item=getID(PBItems,item)
  776.     end
  777.     if !item || item<1
  778.       raise ArgumentError.new(_INTL("The item number is invalid.",item))
  779.       return false
  780.     end
  781.     pocket=pbGetPocket(item)
  782.     maxsize=maxPocketSize(pocket)
  783.     maxsize=@pockets[pocket].length+1 if maxsize<0
  784.     return ItemStorageHelper.pbStoreItem(
  785.        @pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty,true)
  786.   end
  787. end
  788.  
  789.  
  790.  
  791. #===============================================================================
  792. # PC item storage screen
  793. #===============================================================================
  794. class Window_PokemonItemStorage < Window_DrawableCommand
  795.   attr_reader :bag
  796.   attr_reader :pocket
  797.   attr_reader :sortIndex
  798.  
  799.   def sortIndex=(value)
  800.     @sortIndex=value
  801.     refresh
  802.   end
  803.  
  804.   def initialize(bag,x,y,width,height)
  805.     @bag=bag
  806.     @sortIndex=-1
  807.     @adapter=PokemonMartAdapter.new
  808.     super(x,y,width,height)
  809.     self.windowskin=nil
  810.   end
  811.  
  812.   def item
  813.     item=@bag[self.index]
  814.     return item ? item[0] : 0
  815.   end
  816.  
  817.   def itemCount
  818.     return @bag.length+1
  819.   end
  820.  
  821.   def drawItem(index,count,rect)
  822.     textpos=[]
  823.     rect=drawCursor(index,rect)
  824.     ypos=rect.y
  825.     if index==@bag.length
  826.       textpos.push([_INTL("CANCEL"),rect.x,ypos,false,
  827.          self.baseColor,self.shadowColor])
  828.     else
  829.       item=@bag[index][0]
  830.       itemname=@adapter.getDisplayName(item)
  831.       qty=_ISPRINTF("x{1: 2d}",@bag[index][1])
  832.       sizeQty=self.contents.text_size(qty).width
  833.       xQty=rect.x+rect.width-sizeQty-2
  834.       baseColor=(index==@sortIndex) ? Color.new(248,24,24) : self.baseColor
  835.       textpos.push([itemname,rect.x,ypos,false,self.baseColor,self.shadowColor])
  836.       if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM)
  837.         textpos.push([qty,xQty,ypos,false,baseColor,self.shadowColor])
  838.       end
  839.     end
  840.     pbDrawTextPositions(self.contents,textpos)
  841.   end
  842. end
  843.  
  844.  
  845.  
  846. class ItemStorageScene
  847. ## Configuration
  848.   ITEMLISTBASECOLOR   = Color.new(248,248,248)
  849.   ITEMLISTSHADOWCOLOR = Color.new(90,90,90)
  850.   ITEMTEXTBASECOLOR   = Color.new(248,248,248)
  851.   ITEMTEXTSHADOWCOLOR = Color.new(90,90,90)
  852.   TITLEBASECOLOR      = Color.new(248,248,248)
  853.   TITLESHADOWCOLOR    = Color.new(90,90,90)
  854.   ITEMSVISIBLE        = 7
  855.  
  856.   def initialize(title)
  857.     @title=title
  858.   end
  859.  
  860.   def update
  861.     pbUpdateSpriteHash(@sprites)
  862.   end
  863.  
  864.   def pbStartScene(bag)
  865.     @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  866.     @viewport.z=99999
  867.     @bag=bag
  868.     @sprites={}
  869.     @sprites["background"]=IconSprite.new(0,0,@viewport)
  870.     @sprites["background"].setBitmap("Graphics/Pictures/BW2 Bag/PCItemBG")
  871.     @sprites["icon"]=IconSprite.new(26,310,@viewport)
  872.     # Item list
  873.     @sprites["itemwindow"]=Window_PokemonItemStorage.new(@bag,98,14,334,32+ITEMSVISIBLE*32)
  874.     @sprites["itemwindow"].viewport=@viewport
  875.     @sprites["itemwindow"].index=0
  876.     @sprites["itemwindow"].baseColor=ITEMLISTBASECOLOR
  877.     @sprites["itemwindow"].shadowColor=ITEMLISTSHADOWCOLOR
  878.     @sprites["itemwindow"].refresh
  879.     # Title
  880.     @sprites["pocketwindow"]=BitmapSprite.new(88,64,@viewport)
  881.     @sprites["pocketwindow"].x=14
  882.     @sprites["pocketwindow"].y=16
  883.     pbSetNarrowFont(@sprites["pocketwindow"].bitmap)
  884.     # Item description  
  885.     @sprites["itemtextwindow"]=Window_UnformattedTextPokemon.newWithSize("",84,270,Graphics.width-84,128,@viewport)
  886.     @sprites["itemtextwindow"].baseColor=ITEMTEXTBASECOLOR
  887.     @sprites["itemtextwindow"].shadowColor=ITEMTEXTSHADOWCOLOR
  888.     @sprites["itemtextwindow"].windowskin=nil
  889.     @sprites["helpwindow"]=Window_UnformattedTextPokemon.new("")
  890.     @sprites["helpwindow"].visible=false
  891.     @sprites["helpwindow"].viewport=@viewport
  892.     # Letter-by-letter message window
  893.     @sprites["msgwindow"]=Window_AdvancedTextPokemon.new("")
  894.     @sprites["msgwindow"].visible=false
  895.     @sprites["msgwindow"].viewport=@viewport
  896.     pbBottomLeftLines(@sprites["helpwindow"],1)
  897.     pbDeactivateWindows(@sprites)
  898.     pbRefresh
  899.     pbFadeInAndShow(@sprites)
  900.   end
  901.  
  902.   def pbEndScene
  903.     pbFadeOutAndHide(@sprites)
  904.     pbDisposeSpriteHash(@sprites)
  905.     @viewport.dispose
  906.   end
  907.  
  908.   def pbRefresh
  909.     bm=@sprites["pocketwindow"].bitmap
  910.     # Draw title at upper left corner ("Toss Item/Withdraw Item")
  911.     drawTextEx(bm,0,0,bm.width,2,@title,TITLEBASECOLOR,TITLESHADOWCOLOR)
  912.     itemwindow=@sprites["itemwindow"]
  913.     # Draw item icon
  914.     filename=pbItemIconFile(itemwindow.item)
  915.     @sprites["icon"].setBitmap(filename)
  916.     # Get item description
  917.     @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close storage.") :
  918.        pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
  919.     itemwindow.refresh
  920.   end
  921.  
  922.   def pbChooseItem
  923.     pbRefresh
  924.     @sprites["helpwindow"].visible=false
  925.     itemwindow=@sprites["itemwindow"]
  926.     itemwindow.refresh
  927.     pbActivateWindow(@sprites,"itemwindow"){
  928.        loop do
  929.          Graphics.update
  930.          Input.update
  931.          olditem=itemwindow.item
  932.          self.update
  933.          if itemwindow.item!=olditem
  934.            self.pbRefresh
  935.          end
  936.          if Input.trigger?(Input::B)
  937.            return 0
  938.          end
  939.          if Input.trigger?(Input::C)
  940.            if itemwindow.index<@bag.length
  941.              pbRefresh
  942.              return @bag[itemwindow.index][0]
  943.            else
  944.              return 0
  945.            end
  946.          end
  947.        end
  948.     }
  949.   end
  950.  
  951.   def pbChooseNumber(helptext,maximum)
  952.     return UIHelper.pbChooseNumber(
  953.        @sprites["helpwindow"],helptext,maximum) { update }
  954.   end
  955.  
  956.   def pbDisplay(msg,brief=false)
  957.     UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { update }
  958.   end
  959.  
  960.   def pbConfirm(msg)
  961.     UIHelper.pbConfirm(@sprites["msgwindow"],msg) { update }
  962.   end
  963.  
  964.   def pbShowCommands(helptext,commands)
  965.     return UIHelper.pbShowCommands(
  966.        @sprites["helpwindow"],helptext,commands) { update }
  967.   end
  968. end
  969.  
  970.  
  971.  
  972. class WithdrawItemScene < ItemStorageScene
  973.   def initialize
  974.     super(_INTL("Withdraw\nItem"))
  975.   end
  976. end
  977.  
  978.  
  979.  
  980. class TossItemScene < ItemStorageScene
  981.   def initialize
  982.     super(_INTL("Toss\nItem"))
  983.   end
  984. end
  985.  
  986.  
  987.  
  988. #===============================================================================
  989. # The PC item storage object, which actually contains all the items
  990. #===============================================================================
  991. class PCItemStorage
  992.   MAXSIZE    = 50    # Number of different slots in storage
  993.   MAXPERSLOT = 999   # Max. number of items per slot
  994.  
  995.   def initialize
  996.     @items=[]
  997.     # Start storage with a Potion
  998.     if hasConst?(PBItems,:POTION)
  999.       ItemStorageHelper.pbStoreItem(
  1000.          @items,MAXSIZE,MAXPERSLOT,getConst(PBItems,:POTION),1)
  1001.     end
  1002.   end
  1003.  
  1004.   def empty?
  1005.     return @items.length==0
  1006.   end
  1007.  
  1008.   def length
  1009.     @items.length
  1010.   end
  1011.  
  1012.   def [](i)
  1013.     @items[i]
  1014.   end
  1015.  
  1016.   def getItem(index)
  1017.     if index<0 || index>=@items.length
  1018.       return 0
  1019.     else
  1020.       return @items[index][0]
  1021.     end
  1022.   end
  1023.  
  1024.   def getCount(index)
  1025.     if index<0 || index>=@items.length
  1026.       return 0
  1027.     else
  1028.       return @items[index][1]
  1029.     end
  1030.   end
  1031.  
  1032.   def pbQuantity(item)
  1033.     return ItemStorageHelper.pbQuantity(@items,MAXSIZE,item)
  1034.   end
  1035.  
  1036.   def pbDeleteItem(item,qty=1)
  1037.     return ItemStorageHelper.pbDeleteItem(@items,MAXSIZE,item,qty)
  1038.   end
  1039.  
  1040.   def pbCanStore?(item,qty=1)
  1041.     return ItemStorageHelper.pbCanStore?(@items,MAXSIZE,MAXPERSLOT,item,qty)
  1042.   end
  1043.  
  1044.   def pbStoreItem(item,qty=1)
  1045.     return ItemStorageHelper.pbStoreItem(@items,MAXSIZE,MAXPERSLOT,item,qty)
  1046.   end
  1047. end
  1048.  
  1049.  
  1050.  
  1051. #===============================================================================
  1052. # Common UI functions used in both the Bag and item storage screens.
  1053. # Allows the user to choose a number.  The window _helpwindow_ will
  1054. # display the _helptext_.
  1055. #===============================================================================
  1056. module UIHelper
  1057.   def self.pbChooseNumber(helpwindow,helptext,maximum)
  1058.     oldvisible=helpwindow.visible
  1059.     helpwindow.visible=true
  1060.     helpwindow.text=helptext
  1061.     helpwindow.letterbyletter=false
  1062.     curnumber=1
  1063.     ret=0
  1064.     using(numwindow=Window_UnformattedTextPokemon.new("x000")){
  1065.        numwindow.viewport=helpwindow.viewport
  1066.        numwindow.letterbyletter=false
  1067.        numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
  1068.        numwindow.resizeToFit(numwindow.text,480)
  1069.        pbBottomRight(numwindow) # Move number window to the bottom right
  1070.        helpwindow.resizeHeightToFit(helpwindow.text,480-numwindow.width)
  1071.        pbBottomLeft(helpwindow) # Move help window to the bottom left
  1072.        loop do
  1073.          Graphics.update
  1074.          Input.update
  1075.          numwindow.update
  1076.          block_given? ? yield : helpwindow.update
  1077.          if Input.repeat?(Input::LEFT)
  1078.            curnumber-=10
  1079.            curnumber=1 if curnumber<1
  1080.            numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
  1081.            pbPlayCursorSE()
  1082.          elsif Input.repeat?(Input::RIGHT)
  1083.            curnumber+=10
  1084.            curnumber=maximum if curnumber>maximum
  1085.            numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
  1086.            pbPlayCursorSE()
  1087.          elsif Input.repeat?(Input::UP)
  1088.            curnumber+=1
  1089.            curnumber=1 if curnumber>maximum
  1090.            numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
  1091.            pbPlayCursorSE()
  1092.          elsif Input.repeat?(Input::DOWN)
  1093.            curnumber-=1
  1094.            curnumber=maximum if curnumber<1
  1095.            numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
  1096.            pbPlayCursorSE()
  1097.          elsif Input.trigger?(Input::C)
  1098.            ret=curnumber
  1099.            pbPlayDecisionSE()
  1100.            break
  1101.          elsif Input.trigger?(Input::B)
  1102.            ret=0
  1103.            pbPlayCancelSE()
  1104.            break
  1105.          end
  1106.        end
  1107.     }
  1108.     helpwindow.visible=oldvisible
  1109.     return ret
  1110.   end
  1111.  
  1112.   def self.pbDisplayStatic(msgwindow,message)
  1113.     oldvisible=msgwindow.visible
  1114.     msgwindow.visible=true
  1115.     msgwindow.letterbyletter=false
  1116.     msgwindow.width=Graphics.width
  1117.     msgwindow.resizeHeightToFit(message,Graphics.width)
  1118.     msgwindow.text=message
  1119.     pbBottomRight(msgwindow)
  1120.     loop do
  1121.       Graphics.update
  1122.       Input.update
  1123.       if Input.trigger?(Input::B)
  1124.         break
  1125.       end
  1126.       if Input.trigger?(Input::C)
  1127.         break
  1128.       end
  1129.       block_given? ? yield : msgwindow.update
  1130.     end
  1131.     msgwindow.visible=oldvisible
  1132.     Input.update
  1133.   end
  1134.  
  1135. # Letter by letter display of the message _msg_ by the window _helpwindow_.
  1136.   def self.pbDisplay(helpwindow,msg,brief)
  1137.     cw=helpwindow
  1138.     cw.letterbyletter=true
  1139.     cw.text=msg+"\1"
  1140.     pbBottomLeftLines(cw,2)
  1141.     oldvisible=cw.visible
  1142.     cw.visible=true
  1143.     loop do
  1144.       Graphics.update
  1145.       Input.update
  1146.       block_given? ? yield : cw.update
  1147.       if brief && !cw.busy?
  1148.         cw.visible=oldvisible
  1149.         return
  1150.       end
  1151.       if Input.trigger?(Input::C) && cw.resume && !cw.busy?
  1152.         cw.visible=oldvisible
  1153.         return
  1154.       end
  1155.     end
  1156.   end
  1157.  
  1158. # Letter by letter display of the message _msg_ by the window _helpwindow_,
  1159. # used to ask questions.  Returns true if the user chose yes, false if no.
  1160.   def self.pbConfirm(helpwindow,msg)
  1161.     dw=helpwindow
  1162.     oldvisible=dw.visible
  1163.     dw.letterbyletter=true
  1164.     dw.text=msg
  1165.     dw.visible=true
  1166.     pbBottomLeftLines(dw,2)
  1167.     commands=[_INTL("Yes"),_INTL("No")]
  1168.     cw = Window_CommandPokemon.new(commands)
  1169.     cw.viewport=helpwindow.viewport
  1170.     pbBottomRight(cw)
  1171.     cw.y-=dw.height
  1172.     cw.index=0
  1173.     loop do
  1174.       cw.visible=!dw.busy?
  1175.       Graphics.update
  1176.       Input.update
  1177.       cw.update
  1178.       block_given? ? yield : dw.update
  1179.       if Input.trigger?(Input::B) && dw.resume && !dw.busy?
  1180.         cw.dispose
  1181.         dw.visible=oldvisible
  1182.         pbPlayCancelSE()
  1183.         return false
  1184.       end
  1185.       if Input.trigger?(Input::C) && dw.resume && !dw.busy?
  1186.         cwIndex=cw.index
  1187.         cw.dispose
  1188.         dw.visible=oldvisible
  1189.         pbPlayDecisionSE()
  1190.         return (cwIndex==0)?true:false
  1191.       end
  1192.     end
  1193.   end
  1194.  
  1195.   def self.pbShowCommands(helpwindow,helptext,commands)
  1196.     ret=-1
  1197.     oldvisible=helpwindow.visible
  1198.     helpwindow.visible=helptext ? true : false
  1199.     helpwindow.letterbyletter=false
  1200.     helpwindow.text=helptext ? helptext : ""
  1201.     cmdwindow=Window_CommandPokemon.new(commands)
  1202.     begin
  1203.       cmdwindow.viewport=helpwindow.viewport
  1204.       pbBottomRight(cmdwindow)
  1205.       helpwindow.resizeHeightToFit(helpwindow.text,480-cmdwindow.width)
  1206.       pbBottomLeft(helpwindow)
  1207.       loop do
  1208.         Graphics.update
  1209.         Input.update
  1210.         yield
  1211.         cmdwindow.update
  1212.         if Input.trigger?(Input::B)
  1213.           ret=-1
  1214.           pbPlayCancelSE()
  1215.           break
  1216.         end
  1217.         if Input.trigger?(Input::C)
  1218.           ret=cmdwindow.index
  1219.           pbPlayDecisionSE()
  1220.           break
  1221.         end
  1222.       end
  1223.     ensure
  1224.       cmdwindow.dispose if cmdwindow
  1225.     end
  1226.     helpwindow.visible=oldvisible
  1227.     return ret
  1228.   end
  1229. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top