Advertisement
Guest User

Untitled

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