Advertisement
TechSkylander1518

TM Case v19

Nov 4th, 2021
594
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.56 KB | None | 0 0
  1. ItemHandlers::UseInField    .add(:TMCASE,proc { |item|
  2.   TMCase.new
  3.   next 1
  4. })
  5.  
  6.  
  7. class Window_TMCase < Window_DrawableCommand
  8.   attr_reader :pocket
  9.  
  10.   def initialize(bag,filterlist,pocket,x,y,width,height)
  11.     @bag        = bag
  12.     @filterlist = filterlist
  13.     @pocket     = pocket
  14.     @adapter = PokemonMartAdapter.new
  15.     super(x,y,width,height)
  16.     @selarrow  = AnimatedBitmap.new("Graphics/Pictures/selarrow")
  17.     self.windowskin = nil
  18.   end
  19.  
  20.   def dispose
  21.     super
  22.   end
  23.  
  24.   def pocket=(value)
  25.     @pocket = value
  26.     @item_max = (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
  27.     self.index = @bag.getChoice(@pocket)
  28.   end
  29.  
  30.   def page_row_max; return 5; end
  31.   def page_item_max; return 5; end
  32.  
  33.   def item
  34.     return 0 if @filterlist && !@filterlist[@pocket][self.index]
  35.     thispocket = @bag.pockets[@pocket]
  36.     item = (@filterlist) ? thispocket[@filterlist[@pocket][self.index]] : thispocket[self.index]
  37.     return (item) ? item[0] : 0
  38.   end
  39.  
  40.   def itemCount
  41.     return (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
  42.   end
  43.  
  44.   def itemRect(item)
  45.     if item<0 || item>=@item_max || item<self.top_item ||
  46.        item>self.top_item+self.page_item_max
  47.       return Rect.new(0,0,0,0)
  48.     else
  49.       cursor_width = (self.width-self.borderX-(@column_max-1)*@column_spacing) / @column_max
  50.       x = item % @column_max * (cursor_width + @column_spacing)
  51.       y = item / @column_max * @row_height - @virtualOy
  52.       return Rect.new(x, y, cursor_width, @row_height)
  53.     end
  54.   end
  55.  
  56.   def drawCursor(index,rect)
  57.     if self.index==index
  58.       bmp = @selarrow.bitmap
  59.       pbCopyBitmap(self.contents,bmp,rect.x,rect.y+24)
  60.     end
  61.   end
  62.  
  63.   def drawItem(index,_count,rect)
  64.     textpos = []
  65.     rect = Rect.new(rect.x+16,rect.y+16,rect.width-16,rect.height)
  66.     ypos = rect.y+4
  67.     thispocket = @bag.pockets[@pocket]
  68.     if index==self.itemCount-1
  69.       textpos.push([_INTL("CLOSE"),rect.x,ypos,false,self.baseColor,self.shadowColor])
  70.     else
  71.       item = (@filterlist) ? thispocket[@filterlist[@pocket][index]][0] : thispocket[index][0]
  72.       baseColor   = self.baseColor
  73.       shadowColor = self.shadowColor
  74.       textpos.push(
  75.          [@adapter.getDisplayName(item),rect.x,ypos,false,baseColor,shadowColor]
  76.       )
  77.       if !GameData::Item.get(item).is_important?   # Not an HM (or infinite TM)
  78.         qty = (@filterlist) ? thispocket[@filterlist[@pocket][index]][1] : thispocket[index][1]
  79.         qtytext = _ISPRINTF("x{1: 3d}",qty)
  80.         xQty    = rect.x+rect.width-self.contents.text_size(qtytext).width-16
  81.         textpos.push([qtytext,xQty,ypos,false,baseColor,shadowColor])
  82.       end
  83.     end
  84.     pbDrawTextPositions(self.contents,textpos)
  85.   end
  86.  
  87.   def refresh
  88.     @item_max = itemCount()
  89.     self.update_cursor_rect
  90.     dwidth  = self.width-self.borderX
  91.     dheight = self.height-self.borderY
  92.     self.contents = pbDoEnsureBitmap(self.contents,dwidth,dheight)
  93.     self.contents.clear
  94.     for i in 0...@item_max
  95.       next if i<self.top_item || i>self.top_item+self.page_item_max
  96.       drawItem(i,@item_max,itemRect(i))
  97.     end
  98.     drawCursor(self.index,itemRect(self.index))
  99.   end
  100.  
  101.   def update
  102.     super
  103.     @uparrow.visible   = false
  104.     @downarrow.visible = false
  105.   end
  106. end
  107.  
  108.  
  109.  
  110.  
  111. class TMCase
  112.  
  113.   BASE=Color.new(248,248,248)
  114.   SHADOW=Color.new(96,96,96)
  115.   STATBASE=Color.new(64,64,64)
  116.   STATSHADOW=Color.new(216,216,192)
  117.   MOVE = true #set to false if you don't want the position of the disc to move
  118.  
  119.  
  120.   def initialize
  121.     @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
  122.     @viewport.z = 99999
  123.     @sprites = {}
  124.     @sprites["bg"] = Sprite.new(@viewport)
  125.     @sprites["bg"].bitmap = Bitmap.new("Graphics/Pictures/TM Case/bg")
  126.     @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  127.     @sprites["doverlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  128.     pbSetSystemFont(@sprites["overlay"].bitmap)
  129.     pbSetSystemFont(@sprites["bg"].bitmap)
  130.     pbSetSystemFont(@sprites["doverlay"].bitmap)
  131.     @power="---"
  132.     @accuracy="---"
  133.     @pp="---"
  134.     @description="---"
  135.     @type="normal"
  136.     @category=0
  137.     @sprites["case"] = Sprite.new(@viewport)
  138.     @sprites["case"].bitmap = Bitmap.new("Graphics/Pictures/TM Case/TM Case")
  139.     @sprites["case"].x = 24
  140.     @sprites["case"].y = 112
  141.     @sprites["case"].z = 3
  142.     @sprites["disc"] = Sprite.new(@viewport)
  143.     @sprites["disc"].bitmap = Bitmap.new("Graphics/Pictures/TM Case/tm_#{@type}")
  144.     @sprites["disc"].x = 58
  145.     @sprites["disc"].y = 76
  146.     @sprites["disc"].z = 1
  147.     @sprites["disc"].visible = false
  148.     @sprites["sticker"] = Sprite.new(@viewport)
  149.     @sprites["sticker"].bitmap = Bitmap.new("Graphics/Pictures/TM Case/hmsticker")
  150.     @sprites["sticker"].x = @sprites["disc"].x
  151.     @sprites["sticker"].y = @sprites["disc"].y
  152.     @sprites["sticker"].z = 2
  153.     @sprites["sticker"].visible = false
  154.     @sprites["itemlist"] = Window_TMCase.new($PokemonBag,nil,4,188,-22,344,40+32+7*32)
  155.     @sprites["itemlist"].viewport    = @viewport
  156.     @sprites["itemlist"].pocket      = 4
  157.     @sprites["itemlist"].index       = 0
  158.     @sprites["itemlist"].baseColor   = Color.new(96,96,96)
  159.     @sprites["itemlist"].shadowColor = Color.new(208,208,200)
  160.     @typebitmap    = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  161.     @catbitmap    = AnimatedBitmap.new(_INTL("Graphics/Pictures/category"))
  162.     overlay = @sprites["overlay"].bitmap
  163.     pbDrawTextPositions(@sprites["bg"].bitmap,[[_INTL("TM CASE"),86,6,2,BASE,SHADOW]])
  164.     overlay.font.size=26
  165.     itemlist=@sprites["itemlist"]
  166.     if itemlist.index<itemlist.itemCount-1
  167.         movestats
  168.         @sprites["disc"].visible = true
  169.     else
  170.         @power = "---"
  171.         @accuracy= "---"
  172.         @pp = "---"
  173.         @description = "---"
  174.     end
  175.     textpos = [
  176.          [_INTL("#{@power}   "),154,292,2,STATBASE,STATSHADOW],
  177.          [_INTL("#{@accuracy}%  "),154,317,2,STATBASE,STATSHADOW],
  178.          [_INTL("#{@pp} PP"),154,343,2,STATBASE,STATSHADOW]
  179.     ]
  180.     drawTextEx(@sprites["doverlay"].bitmap,192,244,320,4,@description,BASE,SHADOW)
  181.     pbDrawTextPositions(overlay,textpos)
  182.     pbFadeInAndShow(@sprites)
  183.     main
  184.   end
  185.  
  186.  
  187.   def movestats
  188.       overlay=@sprites["overlay"].bitmap
  189.       itemlist=@sprites["itemlist"]
  190.       move = GameData::Item.get(itemlist.item).move
  191.     # Get data for selected move
  192.       if move
  193.         moveData = GameData::Move.try_get(move)
  194.         @power = moveData.base_damage
  195.         @power = "---" if @power == 0 || @power == 1
  196.         @category = moveData.category
  197.         @accuracy = moveData.accuracy
  198.         @accuracy = "---" if @accuracy == 0
  199.         @pp   = moveData.total_pp
  200.         @pp = "---" if @pp == 0
  201.         @description   = moveData.description
  202.         type = moveData.type
  203.         type = 0 if type == nil
  204.         @category = 0 if @category == nil
  205.         @description = "" if @description == nil
  206.         type = GameData::Type.try_get(type)
  207.         @type = type.real_name.downcase
  208.         typerect = Rect.new(0,type.id_number*28,64,28)
  209.         overlay.blt(114,244,@typebitmap.bitmap,typerect)
  210.         catrect = Rect.new(0,@category*28,64,28)
  211.         overlay.blt(114,272,@catbitmap.bitmap,catrect)
  212.         @sprites["disc"].bitmap = Bitmap.new("Graphics/Pictures/TM Case/tm_#{@type}")
  213.       else
  214.         @power = "---"
  215.         @accuracy= "---"
  216.         @pp = "---"
  217.         @category = 0
  218.         @description = ""
  219.       end
  220.   end
  221.  
  222.  
  223.   def main
  224.     loop do
  225.       @sprites["doverlay"].bitmap.clear
  226.       overlay=@sprites["overlay"].bitmap
  227.       overlay.clear
  228.       itemlist=@sprites["itemlist"]
  229.       @sprites["disc"].visible=(itemlist.index<itemlist.itemCount-1)
  230.       if itemlist.index<itemlist.itemCount-1
  231.         movestats
  232.       else
  233.           @power = ""
  234.           @accuracy= ""
  235.           @pp = ""
  236.           @description = ""
  237.       end
  238.       @sprites["sticker"].visible = (GameData::Item.get(itemlist.item).is_HM?) if itemlist.index<itemlist.itemCount-1
  239.       @sprites["sticker"].x = @sprites["disc"].x
  240.       @sprites["sticker"].y = @sprites["disc"].y
  241.       textpos = [
  242.          [_INTL("#{@power}   "),154,292,2,STATBASE,STATSHADOW],
  243.          [_INTL("#{@accuracy}%  "),154,317,2,STATBASE,STATSHADOW],
  244.          [_INTL("#{@pp} PP"),154,343,2,STATBASE,STATSHADOW]
  245.         ]
  246.       pbDrawTextPositions(overlay,textpos)
  247.       drawTextEx(@sprites["doverlay"].bitmap,192,244,320,4,@description,BASE,SHADOW)
  248.       Graphics.update
  249.       Input.update
  250.       if Input.trigger?(Input::RIGHT) && $game_variables[1]==8
  251.         $game_variables[1]=1
  252.         break
  253.       elsif Input.trigger?(Input::LEFT) && $game_variables[1]==8
  254.         $game_variables[1]=0
  255.         break
  256.       elsif Input.trigger?(Input::DOWN)  || Input.repeat?(Input::DOWN)
  257.           if itemlist.itemCount>1
  258.             pbPlayCursorSE
  259.             if itemlist.index<itemlist.itemCount-1
  260.               itemlist.index+=1
  261.             else
  262.               itemlist.index=0
  263.               @sprites["disc"].x = 58
  264.               @sprites["disc"].y = 76
  265.             end
  266.           end
  267.           if itemlist.index<itemlist.itemCount-1 && itemlist.index>0 &&
  268.             MOVE==true && @sprites["disc"].x > 24
  269.               @sprites["disc"].x -= 1
  270.               @sprites["disc"].y += 1
  271.           end
  272.       elsif Input.trigger?(Input::UP)  || Input.repeat?(Input::UP)
  273.         if itemlist.itemCount>1
  274.             pbPlayCursorSE
  275.             if itemlist.index>0
  276.               itemlist.index-=1
  277.               if @sprites["disc"].x < 58  && MOVE==true && itemlist.index < 35
  278.                   @sprites["disc"].x += 1
  279.                   @sprites["disc"].y -= 1
  280.                 end
  281.             else
  282.               itemlist.index=itemlist.itemCount-1
  283.               if MOVE==true
  284.                   @sprites["disc"].x = (58-[itemlist.itemCount,34].min)
  285.                   @sprites["disc"].y = (76+[itemlist.itemCount,34].min)
  286.              end
  287.             end
  288.         end
  289.       elsif Input.trigger?(Input::C)
  290.         if itemlist.index<itemlist.itemCount-1
  291.           pbUseItem($PokemonBag,itemlist.item)
  292.           itemlist.refresh
  293.         else
  294.           break
  295.         end
  296.       elsif Input.trigger?(Input::A)
  297.         choice = pbMessage(_INTL("Sort by"),
  298.                 [_INTL("Number"),
  299.                 _INTL("Type"),
  300.                 _INTL("Category"),
  301.                 _INTL("Base Power"),
  302.                 _INTL("Accuracy"),
  303.                 _INTL("Name"),
  304.                 _INTL("Cancel")
  305.                 ])
  306.         sortarray = []
  307.           for i in 0...$PokemonBag.pockets[4].length
  308.             item = $PokemonBag.pockets[4][i][0]
  309.             move = GameData::Item.get(item).move
  310.             moveData = GameData::Move.try_get(move)
  311.             type = moveData.type
  312.             cat = moveData.category
  313.             power =  moveData.base_damage
  314.             accuracy =  moveData.accuracy
  315.             name = moveData.real_name
  316.             sortarray.push [item,type,cat,power,accuracy,name]
  317.           end
  318.         if choice == 0
  319.           $PokemonBag.pockets[4].sort!
  320.         else
  321.           sortarray.sort!  { |a,b| (a[choice]==b[choice]) ? a[0]<=>b[0] : a[choice]<=>b[choice] }
  322.           for i in 0...$PokemonBag.pockets[4].length
  323.             $PokemonBag.pockets[4][i][0]=sortarray[i][0]
  324.           end
  325.           itemlist.refresh
  326.         end
  327.       elsif Input.trigger?(Input::B)
  328.         break
  329.       end
  330.     end
  331.     pbSEPlay("GUI menu close",80)
  332.     pbFadeOutAndHide(@sprites)
  333.     $PokemonBag.pockets[4].sort!
  334.     dispose
  335.   end
  336.  
  337.   def dispose
  338.     pbDisposeSpriteHash(@sprites)
  339.     @viewport.dispose
  340.   end
  341. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement