Advertisement
JonathantheHedgehog

Bag

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