Advertisement
Guest User

Untitled

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