Guest User

Untitled

a guest
Dec 9th, 2018
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 45.38 KB | None | 0 0
  1. #===============================================================================
  2. # Heart symbol for starter Pokémon (used in the party screen)
  3. #===============================================================================
  4. class StarterIconSprite < SpriteWrapper
  5. def initialize(x,y,pokemon,viewport=nil)
  6. super(viewport)
  7. self.x = x
  8. self.y = y
  9. @pokemon = pokemon
  10. @special = 0
  11. self.special = @pokemon.special
  12. end
  13.  
  14. def pokemon=(value)
  15. @pokemon = value
  16. self.special = @pokemon.special
  17. end
  18.  
  19. def special=(value)
  20. return if @special==value
  21. @special = value
  22. @animbitmap.dispose if @animbitmap
  23. @animbitmap = nil
  24. if @special && @special==true
  25. @animbitmap = AnimatedBitmap.new(pbStarterIconFile)
  26. self.bitmap = @animbitmap.bitmap
  27. else
  28. self.bitmap = nil
  29. end
  30. end
  31.  
  32. def dispose
  33. @animbitmap.dispose if @animbitmap
  34. super
  35. end
  36.  
  37. def update
  38. super
  39. self.special = @pokemon.special
  40. if @animbitmap
  41. @animbitmap.update
  42. self.bitmap = @animbitmap.bitmap
  43. end
  44. end
  45. end
  46.  
  47. def pbStarterIconFile # Used in the party screen
  48. bitmapFileName = sprintf("Graphics/Pictures/Party/icon_heart")
  49. return bitmapFileName
  50. end
  51.  
  52. def pbHeldItemIconFile(item) # Used in the party screen
  53. return nil if !item || item==0
  54. if pbIsMail?(item)
  55. namebase = "mail"
  56. elsif pbIsMegaStone?(item)
  57. namebase = "mega"
  58. # Uncomment this part if using Amethyst's Z-Move add-on
  59. #elsif pbIsZCrystal?(item) || pbIsZCrystal2?(item)
  60. # namebase = "z_crystal"
  61. else
  62. namebase = "item"
  63. end
  64. bitmapFileName = sprintf("Graphics/Pictures/Party/icon_%s_%s",namebase,getConstantName(PBItems,item)) rescue nil
  65. if !pbResolveBitmap(bitmapFileName)
  66. bitmapFileName = sprintf("Graphics/Pictures/Party/icon_%s_%03d",namebase,item)
  67. if !pbResolveBitmap(bitmapFileName)
  68. bitmapFileName = sprintf("Graphics/Pictures/Party/icon_%s",namebase)
  69. end
  70. end
  71. return bitmapFileName
  72. end
  73.  
  74. def easyItemType(item)
  75. type=0
  76. type=1 if pbIsMail?(item)
  77. type=2 if pbIsMegaStone?(item)
  78. # Uncomment this part if using Amethyst's Z-Move add-on
  79. #type=3 if pbIsZCrystal?(item) || pbIsZCrystal2?(item)
  80. return type
  81. end
  82.  
  83. #===============================================================================
  84. # Item held icon (used in the party screen)
  85. #===============================================================================
  86. class HeldItemIconSprite < SpriteWrapper
  87. def initialize(x,y,pokemon,viewport=nil)
  88. super(viewport)
  89. self.x = x
  90. self.y = y
  91. @pokemon = pokemon
  92. @item = 0
  93. self.item = @pokemon.item
  94. @mode = 0 # 0=item; 1=mail; 2=mega; 3=zcrystal
  95. @mode=easyItemType(@pokemon.item)
  96. end
  97.  
  98. def mode
  99. return @mode
  100. end
  101.  
  102. def pokemon=(value)
  103. @pokemon = value
  104. self.item = @pokemon.item
  105. end
  106.  
  107. def item=(value)
  108. return if @item==value
  109. @item = value
  110. @animbitmap.dispose if @animbitmap
  111. @animbitmap = nil
  112. if @item && @item>0
  113. @animbitmap = AnimatedBitmap.new(pbHeldItemIconFile(value))
  114. self.bitmap = @animbitmap.bitmap
  115. else
  116. self.bitmap = nil
  117. end
  118. end
  119.  
  120. def dispose
  121. @animbitmap.dispose if @animbitmap
  122. super
  123. end
  124.  
  125. def update
  126. super
  127. self.item = @pokemon.item
  128. if @animbitmap
  129. @animbitmap.update
  130. self.bitmap = @animbitmap.bitmap
  131. end
  132. end
  133. end
  134. #===============================================================================
  135. # Pokémon party buttons and menu
  136. #===============================================================================
  137. class PokemonPartyConfirmCancelSprite < SpriteWrapper
  138. attr_reader :selected
  139.  
  140. def initialize(text,x,y,narrowbox=false,viewport=nil)
  141. super(viewport)
  142. @refreshBitmap = true
  143. @bgsprite = ChangelingSprite.new(0,0,viewport)
  144. if narrowbox
  145. @bgsprite.addBitmap("desel","Graphics/Pictures/Party/icon_cancel_narrow")
  146. @bgsprite.addBitmap("sel","Graphics/Pictures/Party/icon_cancel_narrow_sel")
  147. else
  148. @bgsprite.addBitmap("desel","Graphics/Pictures/Party/icon_cancel")
  149. @bgsprite.addBitmap("sel","Graphics/Pictures/Party/icon_cancel_sel")
  150. end
  151. @bgsprite.changeBitmap("desel")
  152. @overlaysprite = BitmapSprite.new(@bgsprite.bitmap.width,@bgsprite.bitmap.height,viewport)
  153. @overlaysprite.z = self.z+1
  154. pbSetSystemFont(@overlaysprite.bitmap)
  155. @yoffset = 8
  156. textpos = [[text,56,(narrowbox) ? 2 : 8,2,Color.new(248,248,248),Color.new(40,40,40)]]
  157. pbDrawTextPositions(@overlaysprite.bitmap,textpos)
  158. self.x = x
  159. self.y = y
  160. end
  161.  
  162. def dispose
  163. @bgsprite.dispose
  164. @overlaysprite.bitmap.dispose
  165. @overlaysprite.dispose
  166. super
  167. end
  168.  
  169. def viewport=(value)
  170. super
  171. refresh
  172. end
  173.  
  174. def x=(value)
  175. super
  176. refresh
  177. end
  178.  
  179. def y=(value)
  180. super
  181. refresh
  182. end
  183.  
  184. def color=(value)
  185. super
  186. refresh
  187. end
  188.  
  189. def selected=(value)
  190. if @selected!=value
  191. @selected = value
  192. refresh
  193. end
  194. end
  195.  
  196. def refresh
  197. if @bgsprite && !@bgsprite.disposed?
  198. @bgsprite.changeBitmap((@selected) ? "sel" : "desel")
  199. @bgsprite.x = self.x
  200. @bgsprite.y = self.y
  201. @bgsprite.color = self.color
  202. end
  203. if @overlaysprite && !@overlaysprite.disposed?
  204. @overlaysprite.x = self.x
  205. @overlaysprite.y = self.y
  206. @overlaysprite.color = self.color
  207. end
  208. end
  209. end
  210.  
  211.  
  212.  
  213. class PokemonPartyCancelSprite < PokemonPartyConfirmCancelSprite
  214. def initialize(viewport=nil)
  215. super(_INTL("CANCEL"),398,328,false,viewport)
  216. end
  217. end
  218.  
  219.  
  220.  
  221. class PokemonPartyConfirmSprite < PokemonPartyConfirmCancelSprite
  222. def initialize(viewport=nil)
  223. super(_INTL("CONFIRM"),398,308,true,viewport)
  224. end
  225. end
  226.  
  227.  
  228.  
  229. class PokemonPartyCancelSprite2 < PokemonPartyConfirmCancelSprite
  230. def initialize(viewport=nil)
  231. super(_INTL("CANCEL"),398,346,true,viewport)
  232. end
  233. end
  234.  
  235.  
  236.  
  237. class Window_CommandPokemonColor < Window_CommandPokemon
  238. def initialize(commands,width=nil)
  239. @colorKey = []
  240. for i in 0...commands.length
  241. if commands[i].is_a?(Array)
  242. @colorKey[i] = commands[i][1]
  243. commands[i] = commands[i][0]
  244. end
  245. end
  246. super(commands,width)
  247. end
  248.  
  249. def drawItem(index,count,rect)
  250. pbSetSystemFont(self.contents) if @starting
  251. rect = drawCursor(index,rect)
  252. base = self.baseColor
  253. shadow = self.shadowColor
  254. if @colorKey[index] && @colorKey[index]==1
  255. base = Color.new(0,80,160)
  256. shadow = Color.new(128,192,240)
  257. end
  258. pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,@commands[index],base,shadow)
  259. end
  260. end
  261.  
  262.  
  263.  
  264. #===============================================================================
  265. # Pokémon party panels
  266. #===============================================================================
  267. class PokemonPartyBlankPanel < SpriteWrapper
  268. attr_accessor :text
  269.  
  270. def initialize(pokemon,index,viewport=nil)
  271. super(viewport)
  272. self.x = [0,256,0,256,0,256][index]
  273. self.y = [0,16,96,112,192,208][index]
  274. @panelbgsprite = AnimatedBitmap.new("Graphics/Pictures/Party/panel_blank")
  275. self.bitmap = @panelbgsprite.bitmap
  276. @text = nil
  277. end
  278.  
  279. def dispose
  280. @panelbgsprite.dispose
  281. super
  282. end
  283.  
  284. def selected; return false; end
  285. def selected=(value); end
  286. def preselected; return false; end
  287. def preselected=(value); end
  288. def switching; return false; end
  289. def switching=(value); end
  290. def refresh; end
  291. end
  292.  
  293.  
  294.  
  295. class PokemonPartyPanel < SpriteWrapper
  296. attr_reader :pokemon
  297. attr_reader :active
  298. attr_reader :selected
  299. attr_reader :preselected
  300. attr_reader :switching
  301. attr_accessor :text
  302.  
  303. def initialize(pokemon,index,viewport=nil)
  304. super(viewport)
  305. @pokemon = pokemon
  306. @active = (index==0) # true = rounded panel, false = rectangular panel
  307. @refreshing = true
  308. self.x = [0,256,0,256,0,256][index]
  309. self.y = [0,16,96,112,192,208][index]
  310. @panelbgsprite = ChangelingSprite.new(0,0,viewport)
  311. @panelbgsprite.z = self.z
  312. if @active # Rounded panel
  313. @panelbgsprite.addBitmap("able","Graphics/Pictures/Party/panel_round")
  314. @panelbgsprite.addBitmap("ablesel","Graphics/Pictures/Party/panel_round_sel")
  315. @panelbgsprite.addBitmap("fainted","Graphics/Pictures/Party/panel_round_faint")
  316. @panelbgsprite.addBitmap("faintedsel","Graphics/Pictures/Party/panel_round_faint_sel")
  317. @panelbgsprite.addBitmap("swap","Graphics/Pictures/Party/panel_round_swap")
  318. @panelbgsprite.addBitmap("swapsel","Graphics/Pictures/Party/panel_round_swap_sel")
  319. @panelbgsprite.addBitmap("swapsel2","Graphics/Pictures/Party/panel_round_swap_sel2")
  320. else # Rectangular panel
  321. @panelbgsprite.addBitmap("able","Graphics/Pictures/Party/panel_rect")
  322. @panelbgsprite.addBitmap("ablesel","Graphics/Pictures/Party/panel_rect_sel")
  323. @panelbgsprite.addBitmap("fainted","Graphics/Pictures/Party/panel_rect_faint")
  324. @panelbgsprite.addBitmap("faintedsel","Graphics/Pictures/Party/panel_rect_faint_sel")
  325. @panelbgsprite.addBitmap("swap","Graphics/Pictures/Party/panel_rect_swap")
  326. @panelbgsprite.addBitmap("swapsel","Graphics/Pictures/Party/panel_rect_swap_sel")
  327. @panelbgsprite.addBitmap("swapsel2","Graphics/Pictures/Party/panel_rect_swap_sel2")
  328. end
  329. @hpbgsprite = ChangelingSprite.new(0,0,viewport)
  330. @hpbgsprite.z = self.z+1
  331. @hpbgsprite.addBitmap("able","Graphics/Pictures/Party/overlay_hp_back")
  332. @hpbgsprite.addBitmap("fainted","Graphics/Pictures/Party/overlay_hp_back_faint")
  333. @hpbgsprite.addBitmap("swap","Graphics/Pictures/Party/overlay_hp_back_swap")
  334. @ballsprite = ChangelingSprite.new(0,0,viewport)
  335. @ballsprite.z = self.z+1
  336. @ballsprite.addBitmap("desel","Graphics/Pictures/Party/icon_ball")
  337. @ballsprite.addBitmap("sel","Graphics/Pictures/Party/icon_ball_sel")
  338. @pkmnsprite = PokemonIconSprite.new(pokemon,viewport)
  339. @pkmnsprite.active = @active
  340. @pkmnsprite.z = self.z+2
  341. @helditemsprite = HeldItemIconSprite.new(0,0,@pokemon,viewport)
  342. @mode=@helditemsprite.mode
  343. @helditemsprite.z = self.z+3
  344. @overlaysprite = BitmapSprite.new(Graphics.width,Graphics.height,viewport)
  345. @overlaysprite.z = self.z+4
  346. # New
  347. @startersprite = StarterIconSprite.new(0,0,@pokemon,viewport)
  348. @startersprite.z = self.z+5
  349.  
  350. @hpbar = AnimatedBitmap.new("Graphics/Pictures/Party/overlay_hp")
  351. @statuses = AnimatedBitmap.new(_INTL("Graphics/Pictures/statuses"))
  352. @selected = false
  353. @preselected = false
  354. @switching = false
  355. @text = nil
  356. @refreshBitmap = true
  357. @refreshing = false
  358. refresh
  359. end
  360.  
  361. def dispose
  362. @panelbgsprite.dispose
  363. @hpbgsprite.dispose
  364. @ballsprite.dispose
  365. @pkmnsprite.dispose
  366. @helditemsprite.dispose
  367. @overlaysprite.bitmap.dispose
  368. @overlaysprite.dispose
  369. @startersprite.bitmap.dispose
  370. @startersprite.dispose
  371. @hpbar.dispose
  372. @statuses.dispose
  373. super
  374. end
  375.  
  376. def x=(value)
  377. super
  378. refresh
  379. end
  380.  
  381. def y=(value)
  382. super
  383. refresh
  384. end
  385.  
  386. def color=(value)
  387. super
  388. refresh
  389. end
  390.  
  391. def text=(value)
  392. if @text!=value
  393. @text = value
  394. @refreshBitmap = true
  395. refresh
  396. end
  397. end
  398.  
  399. def pokemon=(value)
  400. @pokemon = value
  401. @pkmnsprite.pokemon = value if @pkmnsprite && !@pkmnsprite.disposed?
  402. @helditemsprite.pokemon = value if @helditemsprite && !@helditemsprite.disposed?
  403. @startersprite.pokemon = value if @startersprite && !@startersprite.disposed?
  404. @refreshBitmap = true
  405. refresh
  406. end
  407.  
  408. def selected=(value)
  409. if @selected!=value
  410. @selected = value
  411. refresh
  412. end
  413. end
  414.  
  415. def preselected=(value)
  416. if @preselected!=value
  417. @preselected = value
  418. refresh
  419. end
  420. end
  421.  
  422. def switching=(value)
  423. if @switching!=value
  424. @switching = value
  425. refresh
  426. end
  427. end
  428.  
  429. def hp; return @pokemon.hp; end
  430.  
  431. def refresh
  432. return if disposed?
  433. return if @refreshing
  434. @refreshing = true
  435. if @panelbgsprite && !@panelbgsprite.disposed?
  436. if self.selected
  437. if self.preselected; @panelbgsprite.changeBitmap("swapsel2")
  438. elsif @switching; @panelbgsprite.changeBitmap("swapsel")
  439. elsif @pokemon.fainted?; @panelbgsprite.changeBitmap("faintedsel")
  440. else; @panelbgsprite.changeBitmap("ablesel")
  441. end
  442. else
  443. if self.preselected; @panelbgsprite.changeBitmap("swap")
  444. elsif @pokemon.fainted?; @panelbgsprite.changeBitmap("fainted")
  445. else; @panelbgsprite.changeBitmap("able")
  446. end
  447. end
  448. @panelbgsprite.x = self.x
  449. @panelbgsprite.y = self.y
  450. @panelbgsprite.color = self.color
  451. end
  452. if @hpbgsprite && !@hpbgsprite.disposed?
  453. @hpbgsprite.visible = (!@pokemon.egg? && !(@text && @text.length>0))
  454. if @hpbgsprite.visible
  455. if self.preselected || (self.selected && @switching); @hpbgsprite.changeBitmap("swap")
  456. elsif @pokemon.fainted?; @hpbgsprite.changeBitmap("fainted")
  457. else; @hpbgsprite.changeBitmap("able")
  458. end
  459. @hpbgsprite.x = self.x+96
  460. @hpbgsprite.y = self.y+50
  461. @hpbgsprite.color = self.color
  462. end
  463. end
  464. if @ballsprite && !@ballsprite.disposed?
  465. @ballsprite.changeBitmap((self.selected) ? "sel" : "desel")
  466. @ballsprite.x = self.x+10
  467. @ballsprite.y = self.y
  468. @ballsprite.color = self.color
  469. end
  470. if @pkmnsprite && !@pkmnsprite.disposed?
  471. @pkmnsprite.x = self.x+28
  472. @pkmnsprite.y = self.y
  473. @pkmnsprite.color = self.color
  474. @pkmnsprite.selected = self.selected
  475. end
  476. if @helditemsprite && !@helditemsprite.disposed?
  477. if @helditemsprite.visible
  478. if @mode==0 # item
  479. @helditemsprite.x = self.x+62
  480. @helditemsprite.y = self.y+48
  481. elsif @mode==1 # mail
  482. @helditemsprite.x = self.x+62
  483. @helditemsprite.y = self.y+48
  484. elsif @mode==2 # mega stone
  485. @helditemsprite.x = self.x+62
  486. @helditemsprite.y = self.y+48-4*2
  487. # Uncomment this part if using Amethyst's Z-Move add-on
  488. #elsif @mode==3 # z-crystal
  489. #@helditemsprite.x = self.x+62
  490. #@helditemsprite.y = self.y+48-2
  491. end
  492. @helditemsprite.color = self.color
  493. end
  494. end
  495. if @overlaysprite && !@overlaysprite.disposed?
  496. @overlaysprite.x = self.x
  497. @overlaysprite.y = self.y
  498. @overlaysprite.color = self.color
  499. end
  500. if @startersprite && !@startersprite.disposed?
  501. if @startersprite.visible
  502. @startersprite.x = self.x+62-62+18*2
  503. @startersprite.y = self.y+48-2*2
  504. @startersprite.color = self.color
  505. end
  506. end
  507. if @refreshBitmap
  508. @refreshBitmap = false
  509. @overlaysprite.bitmap.clear if @overlaysprite.bitmap
  510. basecolor = Color.new(248,248,248)
  511. shadowcolor = Color.new(40,40,40)
  512. pbSetSystemFont(@overlaysprite.bitmap)
  513. textpos = []
  514. # Draw Pokémon name
  515. textpos.push([@pokemon.name,96,16,0,basecolor,shadowcolor])
  516. if !@pokemon.egg?
  517. if !@text || @text.length==0
  518. # Draw HP numbers
  519. textpos.push([sprintf("% 3d /% 3d",@pokemon.hp,@pokemon.totalhp),224,60,1,basecolor,shadowcolor])
  520. # Draw HP bar
  521. if @pokemon.hp>0
  522. hpzone = 0
  523. hpzone = 1 if @pokemon.hp<=(@pokemon.totalhp/2).floor
  524. hpzone = 2 if @pokemon.hp<=(@pokemon.totalhp/4).floor
  525. hprect = Rect.new(0,hpzone*8,[@pokemon.hp*96/@pokemon.totalhp,2].max,8)
  526. @overlaysprite.bitmap.blt(128,52,@hpbar.bitmap,hprect)
  527. end
  528. # Draw status
  529. status = -1
  530. status = 6 if @pokemon.pokerusStage==1
  531. status = @pokemon.status-1 if @pokemon.status>0
  532. status = 5 if @pokemon.hp<=0
  533. if status>=0
  534. statusrect = Rect.new(0,16*status,44,16)
  535. @overlaysprite.bitmap.blt(78,68,@statuses.bitmap,statusrect)
  536. end
  537. end
  538. # Draw gender icon
  539. if @pokemon.isMale?
  540. textpos.push([_INTL("♂"),224,16,0,Color.new(0,112,248),Color.new(120,184,232)])
  541. elsif @pokemon.isFemale?
  542. textpos.push([_INTL("♀"),224,16,0,Color.new(232,32,16),Color.new(248,168,184)])
  543. end
  544. end
  545. pbDrawTextPositions(@overlaysprite.bitmap,textpos)
  546. # Draw level text
  547. if !@pokemon.egg?
  548. pbDrawImagePositions(@overlaysprite.bitmap,[[
  549. "Graphics/Pictures/Party/overlay_lv",20,70,0,0,22,14]])
  550. pbSetSmallFont(@overlaysprite.bitmap)
  551. pbDrawTextPositions(@overlaysprite.bitmap,[
  552. [@pokemon.level.to_s,42,62,0,basecolor,shadowcolor]
  553. ])
  554. end
  555. # Draw annotation text
  556. if @text && @text.length>0
  557. pbSetSystemFont(@overlaysprite.bitmap)
  558. pbDrawTextPositions(@overlaysprite.bitmap,[
  559. [@text,96,58,0,basecolor,shadowcolor]
  560. ])
  561. end
  562. end
  563. @refreshing = false
  564. end
  565.  
  566. def update
  567. super
  568. @panelbgsprite.update if @panelbgsprite && !@panelbgsprite.disposed?
  569. @hpbgsprite.update if @hpbgsprite && !@hpbgsprite.disposed?
  570. @ballsprite.update if @ballsprite && !@ballsprite.disposed?
  571. @pkmnsprite.update if @pkmnsprite && !@pkmnsprite.disposed?
  572. @helditemsprite.update if @helditemsprite && !@helditemsprite.disposed?
  573. @startersprite.update if @startersprite && !@startersprite.disposed?
  574. end
  575. end
  576.  
  577.  
  578.  
  579. #===============================================================================
  580. # Pokémon party visuals
  581. #===============================================================================
  582. class PokemonParty_Scene
  583. def pbStartScene(party,starthelptext,annotations=nil,multiselect=false)
  584. @sprites = {}
  585. @party = party
  586. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  587. @viewport.z = 99999
  588. @multiselect = multiselect
  589. addBackgroundPlane(@sprites,"partybg","Party/bg",@viewport)
  590. @sprites["messagebox"] = Window_AdvancedTextPokemon.new("")
  591. @sprites["messagebox"].viewport = @viewport
  592. @sprites["messagebox"].visible = false
  593. @sprites["messagebox"].letterbyletter = true
  594. pbBottomLeftLines(@sprites["messagebox"],2)
  595. @sprites["helpwindow"] = Window_UnformattedTextPokemon.new(starthelptext)
  596. @sprites["helpwindow"].viewport = @viewport
  597. @sprites["helpwindow"].visible = true
  598. pbBottomLeftLines(@sprites["helpwindow"],1)
  599. pbSetHelpText(starthelptext)
  600. # Add party Pokémon sprites
  601. for i in 0...6
  602. if @party[i]
  603. @sprites["pokemon#{i}"] = PokemonPartyPanel.new(@party[i],i,@viewport)
  604. else
  605. @sprites["pokemon#{i}"] = PokemonPartyBlankPanel.new(@party[i],i,@viewport)
  606. end
  607. @sprites["pokemon#{i}"].text = annotations[i] if annotations
  608. end
  609. if @multiselect
  610. @sprites["pokemon6"] = PokemonPartyConfirmSprite.new(@viewport)
  611. @sprites["pokemon7"] = PokemonPartyCancelSprite2.new(@viewport)
  612. else
  613. @sprites["pokemon6"] = PokemonPartyCancelSprite.new(@viewport)
  614. end
  615. # Select first Pokémon
  616. @activecmd = 0
  617. @sprites["pokemon0"].selected = true
  618. pbFadeInAndShow(@sprites) { update }
  619. end
  620.  
  621. def pbEndScene
  622. pbFadeOutAndHide(@sprites) { update }
  623. pbDisposeSpriteHash(@sprites)
  624. @viewport.dispose
  625. end
  626.  
  627. def pbDisplay(text)
  628. @sprites["messagebox"].text = text
  629. @sprites["messagebox"].visible = true
  630. @sprites["helpwindow"].visible = false
  631. pbPlayDecisionSE
  632. loop do
  633. Graphics.update
  634. Input.update
  635. self.update
  636. if @sprites["messagebox"].busy?
  637. if Input.trigger?(Input::C)
  638. pbPlayDecisionSE if @sprites["messagebox"].pausing?
  639. @sprites["messagebox"].resume
  640. end
  641. else
  642. if Input.trigger?(Input::B) || Input.trigger?(Input::C)
  643. break
  644. end
  645. end
  646. end
  647. @sprites["messagebox"].visible = false
  648. @sprites["helpwindow"].visible = true
  649. end
  650.  
  651. def pbDisplayConfirm(text)
  652. ret = -1
  653. @sprites["messagebox"].text = text
  654. @sprites["messagebox"].visible = true
  655. @sprites["helpwindow"].visible = false
  656. using(cmdwindow = Window_CommandPokemon.new([_INTL("Yes"),_INTL("No")])) {
  657. cmdwindow.visible = false
  658. pbBottomRight(cmdwindow)
  659. cmdwindow.y -= @sprites["messagebox"].height
  660. cmdwindow.z = @viewport.z+1
  661. loop do
  662. Graphics.update
  663. Input.update
  664. cmdwindow.visible = true if !@sprites["messagebox"].busy?
  665. cmdwindow.update
  666. self.update
  667. if !@sprites["messagebox"].busy?
  668. if Input.trigger?(Input::B)
  669. ret = false
  670. break
  671. elsif Input.trigger?(Input::C) && @sprites["messagebox"].resume
  672. ret = (cmdwindow.index==0)
  673. break
  674. end
  675. end
  676. end
  677. }
  678. @sprites["messagebox"].visible = false
  679. @sprites["helpwindow"].visible = true
  680. return ret
  681. end
  682.  
  683. def pbShowCommands(helptext,commands,index=0)
  684. ret = -1
  685. helpwindow = @sprites["helpwindow"]
  686. helpwindow.visible = true
  687. using(cmdwindow = Window_CommandPokemonColor.new(commands)) {
  688. cmdwindow.z = @viewport.z+1
  689. cmdwindow.index = index
  690. pbBottomRight(cmdwindow)
  691. helpwindow.resizeHeightToFit(helptext,Graphics.width-cmdwindow.width)
  692. helpwindow.text = helptext
  693. pbBottomLeft(helpwindow)
  694. loop do
  695. Graphics.update
  696. Input.update
  697. cmdwindow.update
  698. self.update
  699. if Input.trigger?(Input::B)
  700. pbPlayCancelSE
  701. ret = -1
  702. break
  703. elsif Input.trigger?(Input::C)
  704. pbPlayDecisionSE
  705. ret = cmdwindow.index
  706. break
  707. end
  708. end
  709. }
  710. return ret
  711. end
  712.  
  713. def pbMessageFreeText(text,startMsg,maxlength) # Unused
  714. return Kernel.pbMessageFreeText(
  715. _INTL("Please enter a message (max. {1} characters).",maxlength),
  716. startMsg,false,maxlength,Graphics.width) { update }
  717. end
  718.  
  719. def pbSetHelpText(helptext)
  720. helpwindow = @sprites["helpwindow"]
  721. pbBottomLeftLines(helpwindow,1)
  722. helpwindow.text = helptext
  723. helpwindow.width = 398
  724. helpwindow.visible = true
  725. end
  726.  
  727. def pbAnnotate(annot)
  728. for i in 0...6
  729. @sprites["pokemon#{i}"].text = (annot) ? annot[i] : nil
  730. end
  731. end
  732.  
  733. def pbSelect(item)
  734. @activecmd = item
  735. numsprites = (@multiselect) ? 8 : 7
  736. for i in 0...numsprites
  737. @sprites["pokemon#{i}"].selected = (i==@activecmd)
  738. end
  739. end
  740.  
  741. def pbPreSelect(item)
  742. @activecmd = item
  743. end
  744.  
  745. def pbSwitchBegin(oldid,newid)
  746. oldsprite = @sprites["pokemon#{oldid}"]
  747. newsprite = @sprites["pokemon#{newid}"]
  748. 16.times do
  749. oldsprite.x += (oldid&1)==0 ? -16 : 16
  750. newsprite.x += (newid&1)==0 ? -16 : 16
  751. Graphics.update
  752. Input.update
  753. self.update
  754. end
  755. end
  756.  
  757. def pbSwitchEnd(oldid,newid)
  758. oldsprite = @sprites["pokemon#{oldid}"]
  759. newsprite = @sprites["pokemon#{newid}"]
  760. oldsprite.pokemon = @party[oldid]
  761. newsprite.pokemon = @party[newid]
  762. 16.times do
  763. oldsprite.x -= (oldid&1)==0 ? -16 : 16
  764. newsprite.x -= (newid&1)==0 ? -16 : 16
  765. Graphics.update
  766. Input.update
  767. self.update
  768. end
  769. for i in 0...6
  770. @sprites["pokemon#{i}"].preselected = false
  771. @sprites["pokemon#{i}"].switching = false
  772. end
  773. pbRefresh
  774. end
  775.  
  776. def pbClearSwitching
  777. for i in 0...6
  778. @sprites["pokemon#{i}"].preselected = false
  779. @sprites["pokemon#{i}"].switching = false
  780. end
  781. end
  782.  
  783. def pbSummary(pkmnid)
  784. oldsprites = pbFadeOutAndHide(@sprites)
  785. scene = PokemonSummary_Scene.new
  786. screen = PokemonSummaryScreen.new(scene)
  787. screen.pbStartScreen(@party,pkmnid)
  788. pbFadeInAndShow(@sprites,oldsprites)
  789. end
  790.  
  791. def pbChooseItem(bag)
  792. ret = 0
  793. pbFadeOutIn(99999){
  794. scene = PokemonBag_Scene.new
  795. screen = PokemonBagScreen.new(scene,bag)
  796. ret = screen.pbChooseItemScreen(Proc.new{|item| pbCanHoldItem?(item) })
  797. }
  798. return ret
  799. end
  800.  
  801. def pbUseItem(bag,pokemon)
  802. ret = 0
  803. pbFadeOutIn(99999){
  804. scene = PokemonBag_Scene.new
  805. screen = PokemonBagScreen.new(scene,bag)
  806. ret = screen.pbChooseItemScreen(Proc.new{|item|
  807. next false if !pbCanUseOnPokemon?(item)
  808. if pbIsMachine?(item)
  809. move = pbGetMachine(item)
  810. next false if pokemon.hasMove?(move) || !pokemon.isCompatibleWithMove?(move)
  811. end
  812. next true
  813. })
  814. }
  815. return ret
  816. end
  817.  
  818. def pbChoosePokemon(switching=false,initialsel=-1,canswitch=0)
  819. for i in 0...6
  820. @sprites["pokemon#{i}"].preselected = (switching && i==@activecmd)
  821. @sprites["pokemon#{i}"].switching = switching
  822. end
  823. @activecmd = initialsel if initialsel>=0
  824. pbRefresh
  825. loop do
  826. Graphics.update
  827. Input.update
  828. self.update
  829. oldsel = @activecmd
  830. key = -1
  831. key = Input::DOWN if Input.repeat?(Input::DOWN)
  832. key = Input::RIGHT if Input.repeat?(Input::RIGHT)
  833. key = Input::LEFT if Input.repeat?(Input::LEFT)
  834. key = Input::UP if Input.repeat?(Input::UP)
  835. if key>=0
  836. @activecmd = pbChangeSelection(key,@activecmd)
  837. end
  838. if @activecmd!=oldsel # Changing selection
  839. pbPlayCursorSE
  840. numsprites = (@multiselect) ? 8 : 7
  841. for i in 0...numsprites
  842. @sprites["pokemon#{i}"].selected = (i==@activecmd)
  843. end
  844. end
  845. cancelsprite = (@multiselect) ? 7 : 6
  846. if Input.trigger?(Input::A) && canswitch==1 && @activecmd!=cancelsprite
  847. pbPlayDecisionSE
  848. return [1,@activecmd]
  849. elsif Input.trigger?(Input::A) && canswitch==2
  850. return -1
  851. elsif Input.trigger?(Input::B)
  852. return -1
  853. elsif Input.trigger?(Input::C)
  854. pbPlayDecisionSE
  855. return (@activecmd==cancelsprite) ? -1 : @activecmd
  856. end
  857. end
  858. end
  859.  
  860. def pbChangeSelection(key,currentsel)
  861. numsprites = (@multiselect) ? 8 : 7
  862. case key
  863. when Input::LEFT
  864. begin
  865. currentsel -= 1
  866. end while currentsel>0 && currentsel<@party.length && !@party[currentsel]
  867. if currentsel>=@party.length && currentsel<6
  868. currentsel = @party.length-1
  869. end
  870. currentsel = numsprites-1 if currentsel<0
  871. when Input::RIGHT
  872. begin
  873. currentsel += 1
  874. end while currentsel<@party.length && !@party[currentsel]
  875. if currentsel==@party.length
  876. currentsel = 6
  877. elsif currentsel==numsprites
  878. currentsel = 0
  879. end
  880. when Input::UP
  881. if currentsel>=6
  882. begin
  883. currentsel -= 1
  884. end while currentsel>0 && !@party[currentsel]
  885. else
  886. begin
  887. currentsel -= 2
  888. end while currentsel>0 && !@party[currentsel]
  889. end
  890. if currentsel>=@party.length && currentsel<6
  891. currentsel = @party.length-1
  892. end
  893. currentsel = numsprites-1 if currentsel<0
  894. when Input::DOWN
  895. if currentsel>=5
  896. currentsel += 1
  897. else
  898. currentsel += 2
  899. currentsel = 6 if currentsel<6 && !@party[currentsel]
  900. end
  901. if currentsel>=@party.length && currentsel<6
  902. currentsel = 6
  903. elsif currentsel>=numsprites
  904. currentsel = 0
  905. end
  906. end
  907. return currentsel
  908. end
  909.  
  910. def pbHardRefresh
  911. oldtext = []
  912. lastselected = -1
  913. for i in 0...6
  914. oldtext.push(@sprites["pokemon#{i}"].text)
  915. lastselected = i if @sprites["pokemon#{i}"].selected
  916. @sprites["pokemon#{i}"].dispose
  917. end
  918. lastselected = @party.length-1 if lastselected>=@party.length
  919. lastselected = 0 if lastselected<0
  920. for i in 0...6
  921. if @party[i]
  922. @sprites["pokemon#{i}"] = PokemonPartyPanel.new(@party[i],i,@viewport)
  923. else
  924. @sprites["pokemon#{i}"] = PokemonPartyBlankPanel.new(@party[i],i,@viewport)
  925. end
  926. @sprites["pokemon#{i}"].text = oldtext[i]
  927. end
  928. pbSelect(lastselected)
  929. end
  930.  
  931. def pbRefresh
  932. for i in 0...6
  933. sprite = @sprites["pokemon#{i}"]
  934. if sprite
  935. if sprite.is_a?(PokemonPartyPanel)
  936. sprite.pokemon = sprite.pokemon
  937. else
  938. sprite.refresh
  939. end
  940. end
  941. end
  942. end
  943.  
  944. def pbRefreshSingle(i)
  945. sprite = @sprites["pokemon#{i}"]
  946. if sprite
  947. if sprite.is_a?(PokemonPartyPanel)
  948. sprite.pokemon = sprite.pokemon
  949. else
  950. sprite.refresh
  951. end
  952. end
  953. end
  954.  
  955. def update
  956. pbUpdateSpriteHash(@sprites)
  957. end
  958. end
  959.  
  960.  
  961.  
  962. #===============================================================================
  963. # Pokémon party mechanics
  964. #===============================================================================
  965. class PokemonPartyScreen
  966. attr_reader :scene
  967. attr_reader :party
  968.  
  969. def initialize(scene,party)
  970. @scene = scene
  971. @party = party
  972. end
  973.  
  974. def pbStartScene(helptext,doublebattle,annotations=nil)
  975. @scene.pbStartScene(@party,helptext,annotations)
  976. end
  977.  
  978. def pbChoosePokemon(helptext=nil)
  979. @scene.pbSetHelpText(helptext) if helptext
  980. return @scene.pbChoosePokemon
  981. end
  982.  
  983. def pbPokemonGiveScreen(item)
  984. @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  985. pkmnid = @scene.pbChoosePokemon
  986. ret = false
  987. if pkmnid>=0
  988. ret = pbGiveItemToPokemon(item,@party[pkmnid],self,pkmnid)
  989. end
  990. pbRefreshSingle(pkmnid)
  991. @scene.pbEndScene
  992. return ret
  993. end
  994.  
  995. def pbPokemonGiveMailScreen(mailIndex)
  996. @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  997. pkmnid = @scene.pbChoosePokemon
  998. if pkmnid>=0
  999. pkmn = @party[pkmnid]
  1000. if pkmn.hasItem? || pkmn.mail
  1001. pbDisplay(_INTL("This Pokémon is holding an item. It can't hold mail."))
  1002. elsif pkmn.egg?
  1003. pbDisplay(_INTL("Eggs can't hold mail."))
  1004. else
  1005. pbDisplay(_INTL("Mail was transferred from the Mailbox."))
  1006. pkmn.mail = $PokemonGlobal.mailbox[mailIndex]
  1007. pkmn.setItem(pkmn.mail.item)
  1008. $PokemonGlobal.mailbox.delete_at(mailIndex)
  1009. pbRefreshSingle(pkmnid)
  1010. end
  1011. end
  1012. @scene.pbEndScene
  1013. end
  1014.  
  1015. def pbEndScene
  1016. @scene.pbEndScene
  1017. end
  1018.  
  1019. def pbUpdate
  1020. @scene.update
  1021. end
  1022.  
  1023. def pbHardRefresh
  1024. @scene.pbHardRefresh
  1025. end
  1026.  
  1027. def pbRefresh
  1028. @scene.pbRefresh
  1029. end
  1030.  
  1031. def pbRefreshSingle(i)
  1032. @scene.pbRefreshSingle(i)
  1033. end
  1034.  
  1035. def pbDisplay(text)
  1036. @scene.pbDisplay(text)
  1037. end
  1038.  
  1039. def pbConfirm(text)
  1040. return @scene.pbDisplayConfirm(text)
  1041. end
  1042.  
  1043. def pbShowCommands(helptext,commands,index=0)
  1044. @scene.pbShowCommands(helptext,commands,index)
  1045. end
  1046.  
  1047. # Checks for identical species
  1048. def pbCheckSpecies(array) # Unused
  1049. for i in 0...array.length
  1050. for j in i+1...array.length
  1051. return false if array[i].species==array[j].species
  1052. end
  1053. end
  1054. return true
  1055. end
  1056.  
  1057. # Checks for identical held items
  1058. def pbCheckItems(array) # Unused
  1059. for i in 0...array.length
  1060. next if !array[i].hasItem?
  1061. for j in i+1...array.length
  1062. return false if array[i].item==array[j].item
  1063. end
  1064. end
  1065. return true
  1066. end
  1067.  
  1068. def pbSwitch(oldid,newid)
  1069. if oldid!=newid
  1070. @scene.pbSwitchBegin(oldid,newid)
  1071. tmp = @party[oldid]
  1072. @party[oldid] = @party[newid]
  1073. @party[newid] = tmp
  1074. @scene.pbSwitchEnd(oldid,newid)
  1075. end
  1076. end
  1077.  
  1078. def pbChooseMove(pokemon,helptext,index=0)
  1079. movenames = []
  1080. for i in pokemon.moves
  1081. break if i.id==0
  1082. if i.totalpp==0
  1083. movenames.push(_INTL("{1} (PP: ---)",PBMoves.getName(i.id),i.pp,i.totalpp))
  1084. else
  1085. movenames.push(_INTL("{1} (PP: {2}/{3})",PBMoves.getName(i.id),i.pp,i.totalpp))
  1086. end
  1087. end
  1088. return @scene.pbShowCommands(helptext,movenames,index)
  1089. end
  1090.  
  1091. def pbRefreshAnnotations(ableProc) # For after using an evolution stone
  1092. annot = []
  1093. for pkmn in @party
  1094. elig = ableProc.call(pkmn)
  1095. annot.push((elig) ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1096. end
  1097. @scene.pbAnnotate(annot)
  1098. end
  1099.  
  1100. def pbClearAnnotations
  1101. @scene.pbAnnotate(nil)
  1102. end
  1103.  
  1104. def pbPokemonMultipleEntryScreenEx(ruleset)
  1105. annot = []
  1106. statuses = []
  1107. ordinals = [
  1108. _INTL("INELIGIBLE"),
  1109. _INTL("NOT ENTERED"),
  1110. _INTL("BANNED"),
  1111. _INTL("FIRST"),
  1112. _INTL("SECOND"),
  1113. _INTL("THIRD"),
  1114. _INTL("FOURTH"),
  1115. _INTL("FIFTH"),
  1116. _INTL("SIXTH")
  1117. ]
  1118. return nil if !ruleset.hasValidTeam?(@party)
  1119. ret = nil
  1120. addedEntry = false
  1121. for i in 0...@party.length
  1122. statuses[i] = (ruleset.isPokemonValid?(@party[i])) ? 1 : 2
  1123. end
  1124. for i in 0...@party.length
  1125. annot[i] = ordinals[statuses[i]]
  1126. end
  1127. @scene.pbStartScene(@party,_INTL("Choose Pokémon and confirm."),annot,true)
  1128. loop do
  1129. realorder = []
  1130. for i in 0...@party.length
  1131. for j in 0...@party.length
  1132. if statuses[j]==i+3
  1133. realorder.push(j)
  1134. break
  1135. end
  1136. end
  1137. end
  1138. for i in 0...realorder.length
  1139. statuses[realorder[i]] = i+3
  1140. end
  1141. for i in 0...@party.length
  1142. annot[i] = ordinals[statuses[i]]
  1143. end
  1144. @scene.pbAnnotate(annot)
  1145. if realorder.length==ruleset.number && addedEntry
  1146. @scene.pbSelect(6)
  1147. end
  1148. @scene.pbSetHelpText(_INTL("Choose Pokémon and confirm."))
  1149. pkmnid = @scene.pbChoosePokemon
  1150. addedEntry = false
  1151. if pkmnid==6 # Confirm was chosen
  1152. ret = []
  1153. for i in realorder; ret.push(@party[i]); end
  1154. error = []
  1155. break if ruleset.isValid?(ret,error)
  1156. pbDisplay(error[0])
  1157. ret = nil
  1158. end
  1159. break if pkmnid<0 # Canceled
  1160. cmdEntry = -1
  1161. cmdNoEntry = -1
  1162. cmdSummary = -1
  1163. commands = []
  1164. if (statuses[pkmnid] || 0) == 1
  1165. commands[cmdEntry = commands.length] = _INTL("Entry")
  1166. elsif (statuses[pkmnid] || 0) > 2
  1167. commands[cmdNoEntry = commands.length] = _INTL("No Entry")
  1168. end
  1169. pkmn = @party[pkmnid]
  1170. commands[cmdSummary = commands.length] = _INTL("Summary")
  1171. commands[commands.length] = _INTL("Cancel")
  1172. command = @scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands) if pkmn
  1173. if cmdEntry>=0 && command==cmdEntry
  1174. if realorder.length>=ruleset.number && ruleset.number>0
  1175. pbDisplay(_INTL("No more than {1} Pokémon may enter.",ruleset.number))
  1176. else
  1177. statuses[pkmnid] = realorder.length+3
  1178. addedEntry = true
  1179. pbRefreshSingle(pkmnid)
  1180. end
  1181. elsif cmdNoEntry>=0 && command==cmdNoEntry
  1182. statuses[pkmnid] = 1
  1183. pbRefreshSingle(pkmnid)
  1184. elsif cmdSummary>=0 && command==cmdSummary
  1185. @scene.pbSummary(pkmnid)
  1186. end
  1187. end
  1188. @scene.pbEndScene
  1189. return ret
  1190. end
  1191.  
  1192. def pbChooseAblePokemon(ableProc,allowIneligible=false)
  1193. annot = []
  1194. eligibility = []
  1195. for pkmn in @party
  1196. elig = ableProc.call(pkmn)
  1197. eligibility.push(elig)
  1198. annot.push((elig) ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1199. end
  1200. ret = -1
  1201. @scene.pbStartScene(@party,
  1202. (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),annot)
  1203. loop do
  1204. @scene.pbSetHelpText(
  1205. (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1206. pkmnid = @scene.pbChoosePokemon
  1207. break if pkmnid<0
  1208. if !eligibility[pkmnid] && !allowIneligible
  1209. pbDisplay(_INTL("This Pokémon can't be chosen."))
  1210. else
  1211. ret = pkmnid
  1212. break
  1213. end
  1214. end
  1215. @scene.pbEndScene
  1216. return ret
  1217. end
  1218.  
  1219. def pbChooseTradablePokemon(ableProc,allowIneligible=false)
  1220. annot = []
  1221. eligibility = []
  1222. for pkmn in @party
  1223. elig = ableProc.call(pkmn)
  1224. elig = false if pkmn.egg? || (pkmn.isShadow? rescue false)
  1225. eligibility.push(elig)
  1226. annot.push((elig) ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1227. end
  1228. ret = -1
  1229. @scene.pbStartScene(@party,
  1230. (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),annot)
  1231. loop do
  1232. @scene.pbSetHelpText(
  1233. (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1234. pkmnid = @scene.pbChoosePokemon
  1235. break if pkmnid<0
  1236. if !eligibility[pkmnid] && !allowIneligible
  1237. pbDisplay(_INTL("This Pokémon can't be chosen."))
  1238. else
  1239. ret = pkmnid
  1240. break
  1241. end
  1242. end
  1243. @scene.pbEndScene
  1244. return ret
  1245. end
  1246.  
  1247. def pbPokemonScreen
  1248. @scene.pbStartScene(@party,
  1249. (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),nil)
  1250. loop do
  1251. @scene.pbSetHelpText((@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1252. pkmnid = @scene.pbChoosePokemon(false,-1,1)
  1253. break if (pkmnid.is_a?(Numeric) && pkmnid<0) || (pkmnid.is_a?(Array) && pkmnid[1]<0)
  1254. if pkmnid.is_a?(Array) && pkmnid[0]==1 # Switch
  1255. @scene.pbSetHelpText(_INTL("Move to where?"))
  1256. oldpkmnid = pkmnid[1]
  1257. pkmnid = @scene.pbChoosePokemon(true,-1,2)
  1258. if pkmnid>=0 && pkmnid!=oldpkmnid
  1259. pbSwitch(oldpkmnid,pkmnid)
  1260. end
  1261. next
  1262. end
  1263. pkmn = @party[pkmnid]
  1264. commands = []
  1265. cmdSummary = -1
  1266. cmdDebug = -1
  1267. cmdMoves = [-1,-1,-1,-1]
  1268. cmdSwitch = -1
  1269. cmdMail = -1
  1270. cmdItem = -1
  1271. # Build the commands
  1272. commands[cmdSummary = commands.length] = _INTL("Summary")
  1273. commands[cmdDebug = commands.length] = _INTL("Debug") if $DEBUG
  1274. for i in 0...pkmn.moves.length
  1275. move = pkmn.moves[i]
  1276. # Check for hidden moves and add any that were found
  1277. if !pkmn.egg? && (isConst?(move.id,PBMoves,:MILKDRINK) ||
  1278. isConst?(move.id,PBMoves,:SOFTBOILED) ||
  1279. HiddenMoveHandlers.hasHandler(move.id))
  1280. commands[cmdMoves[i] = commands.length] = [PBMoves.getName(move.id),1]
  1281. end
  1282. end
  1283. commands[cmdSwitch = commands.length] = _INTL("Switch") if @party.length>1
  1284. if !pkmn.egg?
  1285. if pkmn.mail
  1286. commands[cmdMail = commands.length] = _INTL("Mail")
  1287. else
  1288. commands[cmdItem = commands.length] = _INTL("Item")
  1289. end
  1290. end
  1291. commands[commands.length] = _INTL("Cancel")
  1292. command = @scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands)
  1293. havecommand = false
  1294. for i in 0...4
  1295. if cmdMoves[i]>=0 && command==cmdMoves[i]
  1296. havecommand = true
  1297. if isConst?(pkmn.moves[i].id,PBMoves,:SOFTBOILED) ||
  1298. isConst?(pkmn.moves[i].id,PBMoves,:MILKDRINK)
  1299. amt = [(pkmn.totalhp/5).floor,1].max
  1300. if pkmn.hp<=amt
  1301. pbDisplay(_INTL("Not enough HP..."))
  1302. break
  1303. end
  1304. @scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
  1305. oldpkmnid = pkmnid
  1306. loop do
  1307. @scene.pbPreSelect(oldpkmnid)
  1308. pkmnid = @scene.pbChoosePokemon(true,pkmnid)
  1309. break if pkmnid<0
  1310. newpkmn = @party[pkmnid]
  1311. movename = PBMoves.getName(pkmn.moves[i].id)
  1312. if pkmnid==oldpkmnid
  1313. pbDisplay(_INTL("{1} can't use {2} on itself!",pkmn.name,movename))
  1314. elsif newpkmn.egg?
  1315. pbDisplay(_INTL("{1} can't be used on an Egg!",movename))
  1316. elsif newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp
  1317. pbDisplay(_INTL("{1} can't be used on that Pokémon.",movename))
  1318. else
  1319. pkmn.hp -= amt
  1320. hpgain = pbItemRestoreHP(newpkmn,amt)
  1321. @scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",newpkmn.name,hpgain))
  1322. pbRefresh
  1323. end
  1324. break if pkmn.hp<=amt
  1325. end
  1326. @scene.pbSelect(oldpkmnid)
  1327. pbRefresh
  1328. break
  1329. elsif Kernel.pbCanUseHiddenMove?(pkmn,pkmn.moves[i].id)
  1330. if Kernel.pbConfirmUseHiddenMove(pkmn,pkmn.moves[i].id)
  1331. @scene.pbEndScene
  1332. if isConst?(pkmn.moves[i].id,PBMoves,:FLY)
  1333. scene = PokemonRegionMap_Scene.new(-1,false)
  1334. screen = PokemonRegionMapScreen.new(scene)
  1335. ret = screen.pbStartFlyScreen
  1336. if ret
  1337. $PokemonTemp.flydata=ret
  1338. return [pkmn,pkmn.moves[i].id]
  1339. end
  1340. @scene.pbStartScene(@party,
  1341. (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1342. break
  1343. end
  1344. return [pkmn,pkmn.moves[i].id]
  1345. end
  1346. else
  1347. break
  1348. end
  1349. end
  1350. end
  1351. next if havecommand
  1352. if cmdSummary>=0 && command==cmdSummary
  1353. @scene.pbSummary(pkmnid)
  1354. elsif cmdDebug>=0 && command==cmdDebug
  1355. pbPokemonDebug(pkmn,pkmnid)
  1356. elsif cmdSwitch>=0 && command==cmdSwitch
  1357. @scene.pbSetHelpText(_INTL("Move to where?"))
  1358. oldpkmnid = pkmnid
  1359. pkmnid = @scene.pbChoosePokemon(true)
  1360. if pkmnid>=0 && pkmnid!=oldpkmnid
  1361. pbSwitch(oldpkmnid,pkmnid)
  1362. end
  1363. elsif cmdMail>=0 && command==cmdMail
  1364. command = @scene.pbShowCommands(_INTL("Do what with the mail?"),
  1365. [_INTL("Read"),_INTL("Take"),_INTL("Cancel")])
  1366. case command
  1367. when 0 # Read
  1368. pbFadeOutIn(99999){ pbDisplayMail(pkmn.mail,pkmn) }
  1369. when 1 # Take
  1370. if pbTakeItemFromPokemon(pkmn,self)
  1371. pbRefreshSingle(pkmnid)
  1372. end
  1373. end
  1374. elsif cmdItem>=0 && command==cmdItem
  1375. itemcommands = []
  1376. cmdUseItem = -1
  1377. cmdGiveItem = -1
  1378. cmdTakeItem = -1
  1379. cmdMoveItem = -1
  1380. # Build the commands
  1381. itemcommands[cmdUseItem=itemcommands.length] = _INTL("Use")
  1382. itemcommands[cmdGiveItem=itemcommands.length] = _INTL("Give")
  1383. itemcommands[cmdTakeItem=itemcommands.length] = _INTL("Take") if pkmn.hasItem?
  1384. itemcommands[cmdMoveItem=itemcommands.length] = _INTL("Move") if pkmn.hasItem? && !pbIsMail?(pkmn.item)
  1385. itemcommands[itemcommands.length] = _INTL("Cancel")
  1386. command = @scene.pbShowCommands(_INTL("Do what with an item?"),itemcommands)
  1387. if cmdUseItem>=0 && command==cmdUseItem # Use
  1388. item = @scene.pbUseItem($PokemonBag,pkmn)
  1389. if item>0
  1390. pbUseItemOnPokemon(item,pkmn,self)
  1391. pbRefreshSingle(pkmnid)
  1392. end
  1393. elsif cmdGiveItem>=0 && command==cmdGiveItem # Give
  1394. item = @scene.pbChooseItem($PokemonBag)
  1395. if item>0
  1396. if pbGiveItemToPokemon(item,pkmn,self,pkmnid)
  1397. pbRefreshSingle(pkmnid)
  1398. end
  1399. end
  1400. elsif cmdTakeItem>=0 && command==cmdTakeItem # Take
  1401. if pbTakeItemFromPokemon(pkmn,self)
  1402. pbRefreshSingle(pkmnid)
  1403. end
  1404. elsif cmdMoveItem>=0 && command==cmdMoveItem # Move
  1405. item = pkmn.item
  1406. itemname = PBItems.getName(item)
  1407. @scene.pbSetHelpText(_INTL("Move {1} to where?",itemname))
  1408. oldpkmnid = pkmnid
  1409. loop do
  1410. @scene.pbPreSelect(oldpkmnid)
  1411. pkmnid = @scene.pbChoosePokemon(true,pkmnid)
  1412. break if pkmnid<0
  1413. newpkmn = @party[pkmnid]
  1414. if pkmnid==oldpkmnid
  1415. break
  1416. elsif newpkmn.egg?
  1417. pbDisplay(_INTL("Eggs can't hold items."))
  1418. elsif !newpkmn.hasItem?
  1419. newpkmn.setItem(item)
  1420. pkmn.setItem(0)
  1421. @scene.pbClearSwitching
  1422. pbRefresh
  1423. pbDisplay(_INTL("{1} was given the {2} to hold.",newpkmn.name,itemname))
  1424. break
  1425. elsif pbIsMail?(newpkmn.item)
  1426. pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",newpkmn.name))
  1427. else
  1428. newitem = newpkmn.item
  1429. newitemname = PBItems.getName(newitem)
  1430. if isConst?(newitem,PBItems,:LEFTOVERS)
  1431. pbDisplay(_INTL("{1} is already holding some {2}.\1",newpkmn.name,newitemname))
  1432. elsif ['a','e','i','o','u'].include?(newitemname[0,1].downcase)
  1433. pbDisplay(_INTL("{1} is already holding an {2}.\1",newpkmn.name,newitemname))
  1434. else
  1435. pbDisplay(_INTL("{1} is already holding a {2}.\1",newpkmn.name,newitemname))
  1436. end
  1437. if pbConfirm(_INTL("Would you like to switch the two items?"))
  1438. newpkmn.setItem(item)
  1439. pkmn.setItem(newitem)
  1440. @scene.pbClearSwitching
  1441. pbRefresh
  1442. pbDisplay(_INTL("{1} was given the {2} to hold.",newpkmn.name,itemname))
  1443. pbDisplay(_INTL("{1} was given the {2} to hold.",pkmn.name,newitemname))
  1444. break
  1445. end
  1446. end
  1447. end
  1448. end
  1449. end
  1450. end
  1451. @scene.pbEndScene
  1452. return nil
  1453. end
  1454. end
  1455.  
  1456.  
  1457.  
  1458. def pbPokemonScreen
  1459. return if !$Trainer
  1460. pbFadeOutIn(99999){
  1461. sscene = PokemonParty_Scene.new
  1462. sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  1463. sscreen.pbPokemonScreen
  1464. }
  1465. end
Add Comment
Please, Sign In to add comment