Advertisement
Guest User

Untitled

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