Advertisement
Guest User

party

a guest
Jul 23rd, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 91.21 KB | None | 0 0
  1. #=====================================================================================
  2. # * BW2 Party Script by shiney570. (Originally written for the Essentials BW2 Mod)
  3. #=====================================================================================
  4.  
  5. # Data structure representing mail that the Pokémon can hold
  6. class PokemonMail
  7. attr_accessor :item,:message,:sender,:poke1,:poke2,:poke3
  8.  
  9. def initialize(item,message,sender,poke1=nil,poke2=nil,poke3=nil)
  10. @item=item # Item represented by this mail
  11. @message=message # Message text
  12. @sender=sender # Name of the message's sender
  13. @poke1=poke1 # [species,gender,shininess,form,shadowness,is egg]
  14. @poke2=poke2
  15. @poke3=poke3
  16. end
  17. end
  18.  
  19.  
  20.  
  21. def pbMoveToMailbox(pokemon)
  22. $PokemonGlobal.mailbox=[] if !$PokemonGlobal.mailbox
  23. return false if $PokemonGlobal.mailbox.length>=10
  24. return false if !pokemon.mail
  25. $PokemonGlobal.mailbox.push(pokemon.mail)
  26. pokemon.mail=nil
  27. return true
  28. end
  29.  
  30. def pbStoreMail(pkmn,item,message,poke1=nil,poke2=nil,poke3=nil)
  31. raise _INTL("Pokémon already has mail") if pkmn.mail
  32. pkmn.mail=PokemonMail.new(item,message,$Trainer.name,poke1,poke2,poke3)
  33. end
  34.  
  35. def pbDisplayMail(mail,bearer=nil)
  36. sprites={}
  37. viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  38. viewport.z=99999
  39. addBackgroundPlane(sprites,"background","mailbg",viewport)
  40. sprites["card"]=IconSprite.new(0,0,viewport)
  41. sprites["card"].setBitmap(pbMailBackFile(mail.item))
  42. sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,viewport)
  43. overlay=sprites["overlay"].bitmap
  44. pbSetSystemFont(overlay)
  45. if $ItemData[mail.item][ITEMTYPE]==2
  46. if mail.poke1
  47. sprites["bearer"]=IconSprite.new(64,288,viewport)
  48. bitmapFileName=pbCheckPokemonIconFiles(mail.poke1,mail.poke1[5])
  49. sprites["bearer"].setBitmap(bitmapFileName)
  50. sprites["bearer"].src_rect.set(0,0,64,64)
  51. end
  52. if mail.poke2
  53. sprites["bearer2"]=IconSprite.new(144,288,viewport)
  54. bitmapFileName=pbCheckPokemonIconFiles(mail.poke2,mail.poke2[5])
  55. sprites["bearer2"].setBitmap(bitmapFileName)
  56. sprites["bearer2"].src_rect.set(0,0,64,64)
  57. end
  58. if mail.poke3
  59. sprites["bearer3"]=IconSprite.new(224,288,viewport)
  60. bitmapFileName=pbCheckPokemonIconFiles(mail.poke3,mail.poke3[5])
  61. sprites["bearer3"].setBitmap(bitmapFileName)
  62. sprites["bearer3"].src_rect.set(0,0,64,64)
  63. end
  64. end
  65. baseForDarkBG=Color.new(248,248,248)
  66. shadowForDarkBG=Color.new(72,80,88)
  67. baseForLightBG=Color.new(80,80,88)
  68. shadowForLightBG=Color.new(168,168,176)
  69. if mail.message && mail.message!=""
  70. isDark=isDarkBackground(sprites["card"].bitmap,Rect.new(48,48,Graphics.width-96,32*7))
  71. drawTextEx(overlay,48,48,Graphics.width-96,7,mail.message,
  72. isDark ? baseForDarkBG : baseForLightBG,
  73. isDark ? shadowForDarkBG : shadowForLightBG)
  74. end
  75. if mail.sender && mail.sender!=""
  76. isDark=isDarkBackground(sprites["card"].bitmap,Rect.new(336,322,144,32*1))
  77. drawTextEx(overlay,336,322,144,1,_INTL("{1}",mail.sender),
  78. isDark ? baseForDarkBG : baseForLightBG,
  79. isDark ? shadowForDarkBG : shadowForLightBG)
  80. end
  81. pbFadeInAndShow(sprites)
  82. loop do
  83. Graphics.update
  84. Input.update
  85. pbUpdateSpriteHash(sprites)
  86. if Input.trigger?(Input::B) || Input.trigger?(Input::C)
  87. break
  88. end
  89. end
  90. pbFadeOutAndHide(sprites)
  91. pbDisposeSpriteHash(sprites)
  92. viewport.dispose
  93. end
  94.  
  95.  
  96. ###########################
  97.  
  98.  
  99. class PokeSelectionPlaceholderSprite < SpriteWrapper
  100. attr_accessor :text
  101.  
  102. def initialize(pokemon,index,viewport=nil)
  103. @index=index
  104. super(viewport)
  105. @xvalues=[2,259,2,259,2,259]
  106. @yvalues=[24,40,119,135,217,233]
  107. @pbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_notexists") #panel
  108. self.bitmap=@pbitmap.bitmap
  109. self.x=@xvalues[index]
  110. self.y=@yvalues[index]
  111. @text=nil
  112. end
  113.  
  114. def update
  115. super
  116. @pbitmap.update
  117. self.bitmap=@pbitmap.bitmap
  118. end
  119.  
  120. def update_pos
  121. self.x=@xvalues[@index]
  122. self.y=@yvalues[@index]
  123. end
  124.  
  125. def selected
  126. return false
  127. end
  128.  
  129. def selected=(value)
  130. end
  131.  
  132. def preselected
  133. return false
  134. end
  135.  
  136. def preselected=(value)
  137. end
  138.  
  139. def switching
  140. return false
  141. end
  142.  
  143. def switching=(value)
  144. end
  145.  
  146. def refresh
  147. end
  148.  
  149. def dispose
  150. @pbitmap.dispose
  151. super
  152. end
  153. end
  154.  
  155.  
  156.  
  157. class PokeSelectionConfirmCancelSprite < SpriteWrapper
  158. attr_reader :selected
  159.  
  160. def initialize(text,x,y,narrowbox=false,viewport=nil)
  161. super(viewport)
  162. @refreshBitmap=true
  163. @bgsprite=ChangelingSprite.new(0,0,viewport)
  164. @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/Universal/empty")
  165. @bgsprite.addBitmap("selbitmap","Graphics/Pictures/Universal/empty")
  166. @bgsprite.changeBitmap("deselbitmap")
  167. @overlaysprite=BitmapSprite.new(@bgsprite.bitmap.width,@bgsprite.bitmap.height,viewport)
  168. @yoffset=8 #8
  169. ynarrow=narrowbox ? -6 : 0
  170. pbSetSystemFont(@overlaysprite.bitmap)
  171. textpos=[[text,56,8+ynarrow,2,Color.new(255,255,255),Color.new(132,132,132)]]
  172. pbDrawTextPositions(@overlaysprite.bitmap,textpos)
  173. @overlaysprite.z=self.z+1 # For compatibility with RGSS2
  174. self.x=x
  175. self.y=y
  176. end
  177.  
  178. def dispose
  179. @overlaysprite.bitmap.dispose
  180. @overlaysprite.dispose
  181. @bgsprite.dispose
  182. super
  183. end
  184.  
  185. def viewport=(value)
  186. super
  187. refresh
  188. end
  189.  
  190. def color=(value)
  191. super
  192. refresh
  193. end
  194.  
  195. def x=(value)
  196. super
  197. refresh
  198. end
  199.  
  200. def y=(value)
  201. super
  202. refresh
  203. end
  204.  
  205. def selected=(value)
  206. @selected=value
  207. refresh
  208. end
  209.  
  210. def refresh
  211. @bgsprite.changeBitmap((@selected) ? "selbitmap" : "deselbitmap")
  212. if @bgsprite && !@bgsprite.disposed?
  213. @bgsprite.x=self.x
  214. @bgsprite.y=self.y
  215. @overlaysprite.x=self.x
  216. @overlaysprite.y=self.y
  217. @bgsprite.color=self.color
  218. @overlaysprite.color=self.color
  219. end
  220. end
  221. end
  222.  
  223.  
  224.  
  225. class PokeSelectionCancelSprite < PokeSelectionConfirmCancelSprite
  226. def initialize(viewport=nil)
  227. super(_INTL("Cancelar"),398,328,false,viewport)
  228. end
  229. end
  230.  
  231.  
  232.  
  233. class PokeSelectionConfirmSprite < PokeSelectionConfirmCancelSprite
  234. def initialize(viewport=nil)
  235. super(_INTL("Confirmar"),398,308,true,viewport)
  236. end
  237. end
  238.  
  239.  
  240.  
  241. class PokeSelectionCancelSprite2 < PokeSelectionConfirmCancelSprite
  242. def initialize(viewport=nil)
  243. super(_INTL("Cancelar"),398,346,true,viewport)
  244. end
  245. end
  246.  
  247.  
  248.  
  249. class ChangelingSprite < SpriteWrapper
  250. def initialize(x=0,y=0,viewport=nil)
  251. super(viewport)
  252. self.x=x
  253. self.y=y
  254. @bitmaps={}
  255. @currentBitmap=nil
  256. end
  257.  
  258. def addBitmap(key,path)
  259. if @bitmaps[key]
  260. @bitmaps[key].dispose
  261. end
  262. @bitmaps[key]=AnimatedBitmap.new(path)
  263. end
  264.  
  265. def changeBitmap(key)
  266. @currentBitmap=@bitmaps[key]
  267. self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  268. end
  269.  
  270. def dispose
  271. return if disposed?
  272. for bm in @bitmaps.values; bm.dispose; end
  273. @bitmaps.clear
  274. super
  275. end
  276.  
  277. def update
  278. return if disposed?
  279. for bm in @bitmaps.values; bm.update; end
  280. self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  281. end
  282. end
  283.  
  284.  
  285.  
  286. class PokeSelectionSprite < SpriteWrapper
  287. attr_reader :selected
  288. attr_reader :preselected
  289. attr_reader :switching
  290. attr_reader :pokemon
  291. attr_reader :active
  292. attr_accessor :text
  293.  
  294. def initialize(pokemon,index,viewport=nil)
  295. @index=index
  296. super(viewport)
  297. @pokemon=pokemon
  298. active=(index==0)
  299. @active=active
  300. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  301. @viewport.z=99999
  302. @sprites={}
  303. if active # Rounded panel
  304. @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel")
  305. @selbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_select")
  306. @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_faint")
  307. @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_faint_select")
  308. @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_switch")
  309. @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_switch")
  310. else # Rectangular panel
  311. @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel")
  312. @selbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_select")
  313. @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_faint")
  314. @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_faint_select")
  315. @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_switch")
  316. @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/Party/panel_switch")
  317. end
  318. @spriteXOffset=14 # 28
  319. @spriteYOffset=-5 #0
  320. @pokeballXOffset=5000
  321. @pokeballYOffset=5000
  322. @pokenameX=79
  323. @pokenameY=8
  324. @levelX=18
  325. @levelY=55
  326.  
  327. @statusX=92 #statucuo
  328. @statusY=60
  329. @genderX=209
  330. @genderY=40-24
  331. @hpX=213
  332. @hpY=53
  333. @hpbarX=87
  334. @hpbarY=38
  335. @gaugeX=119# 128
  336. @gaugeY=46
  337. @itemXOffset=50-2
  338. @itemYOffset=64-24
  339. @annotX=96
  340. @annotY=48
  341. @xvalues=[2,259,2,259,2,259]
  342. @yvalues=[24,40,119,135,217,233]
  343. @text=nil
  344. @statuses=AnimatedBitmap.new(_INTL("Graphics/Pictures/statuses"))
  345. @hpbar=AnimatedBitmap.new("Graphics/Pictures/Party/hp_bar")
  346. @hpbarfnt=AnimatedBitmap.new("Graphics/Pictures/Party/hp_bar")
  347. @hpbarswap=AnimatedBitmap.new("Graphics/Pictures/Party/hp_bar")
  348. @pokeballsprite=ChangelingSprite.new(0,0,viewport)
  349. @pokeballsprite.addBitmap("pokeballdesel","Graphics/Pictures/partyBall")
  350. @pokeballsprite.addBitmap("pokeballsel","Graphics/Pictures/partyBallSel")
  351. @pkmnsprite=PokemonIconSprite.new(pokemon,viewport)
  352. @pkmnsprite.active=active
  353. @itemsprite=ChangelingSprite.new(0,0,viewport)
  354. @itemsprite.addBitmap("itembitmap","Graphics/Pictures/Party/item")
  355. @itemsprite.addBitmap("mailbitmap","Graphics/Pictures/Party/mail")
  356. @spriteX=@xvalues[index]
  357. @spriteY=@yvalues[index]
  358. @refreshBitmap=true
  359. @refreshing=false
  360. @preselected=false
  361. @switching=false
  362. @pkmnsprite.z=self.z+2 # For compatibility with RGSS2
  363. @itemsprite.z=self.z+3 # For compatibility with RGSS2
  364. @pokeballsprite.z=self.z+1 # For compatibility with RGSS2
  365. self.selected=false
  366. self.x=@spriteX
  367. self.y=@spriteY
  368. refresh
  369. end
  370.  
  371. def update_pos
  372. self.x=@xvalues[@index]
  373. self.y=@yvalues[@index]
  374. end
  375.  
  376. def refresh
  377. return if @refreshing
  378. return if disposed?
  379. @refreshing=true
  380. if !self.bitmap || self.bitmap.disposed?
  381. self.bitmap=BitmapWrapper.new(@selbitmap.width,@selbitmap.height)
  382. end
  383. if @pkmnsprite && !@pkmnsprite.disposed?
  384. @pkmnsprite.x=self.x+@spriteXOffset
  385. @pkmnsprite.y=self.y+@spriteYOffset
  386. @pkmnsprite.color=pbSrcOver(@pkmnsprite.color,self.color)
  387. @pkmnsprite.selected=self.selected
  388. end
  389. if @pokeballsprite && !@pokeballsprite.disposed?
  390. @pokeballsprite.x=self.x+@pokeballXOffset
  391. @pokeballsprite.y=self.y+@pokeballYOffset
  392. @pokeballsprite.color=self.color
  393. @pokeballsprite.changeBitmap(self.selected ? "pokeballsel" : "pokeballdesel")
  394. end
  395. if @itemsprite && !@itemsprite.disposed?
  396. @itemsprite.visible=(@pokemon.item>0)
  397. if @itemsprite.visible
  398. @itemsprite.changeBitmap(@pokemon.mail ? "mailbitmap" : "itembitmap")
  399. @itemsprite.x=self.x+@itemXOffset
  400. @itemsprite.y=self.y+@itemYOffset
  401. @itemsprite.color=self.color
  402. end
  403. end
  404. if @refreshBitmap
  405. @refreshBitmap=false
  406. self.bitmap.clear if self.bitmap
  407. if self.selected
  408. if self.preselected
  409. self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  410. self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  411. elsif @switching
  412. self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  413. elsif @pokemon.hp<=0 && !@pokemon.isEgg?
  414. self.bitmap.blt(0,0,@selfntbitmap.bitmap,Rect.new(0,0,@selfntbitmap.width,@selfntbitmap.height))
  415. else
  416. self.bitmap.blt(0,0,@selbitmap.bitmap,Rect.new(0,0,@selbitmap.width,@selbitmap.height))
  417. end
  418. else
  419. if self.preselected
  420. self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  421. elsif @pokemon.hp<=0 && !@pokemon.isEgg?
  422. self.bitmap.blt(0,0,@deselfntbitmap.bitmap,Rect.new(0,0,@deselfntbitmap.width,@deselfntbitmap.height))
  423. else
  424. self.bitmap.blt(0,0,@deselbitmap.bitmap,Rect.new(0,0,@deselbitmap.width,@deselbitmap.height))
  425. end
  426. end
  427. base=Color.new(88,56,56)
  428. shadow=Color.new(204,188,169)
  429. pbSetSystemFont(self.bitmap)
  430. pokename=@pokemon.name
  431. textpos=[[pokename,@pokenameX,@pokenameY,0,base,shadow]]
  432. if !@pokemon.isEgg?
  433. if !@text || @text.length==0
  434. tothp=@pokemon.totalhp
  435. textpos.push([_ISPRINTF("{1: 3d} /{2: 3d}",@pokemon.hp,tothp),
  436. @hpX,@hpY,1,base,shadow])
  437. barbg=(@pokemon.hp<=0) ? @hpbarfnt : @hpbar
  438. barbg=(self.preselected || (self.selected && @switching)) ? @hpbarswap : barbg
  439. pbSetSmallFont(self.bitmap) # ADDED
  440. self.bitmap.blt(@hpbarX,@hpbarY,barbg.bitmap,Rect.new(0,0,@hpbar.width,@hpbar.height))#@hpbar.height
  441. hpgauge=@pokemon.totalhp==0 ? 0 : (self.hp*94/@pokemon.totalhp)# *94 *96
  442. hpgauge=1 if hpgauge==0 && self.hp>0
  443. hpzone=0
  444. hpzone=1 if self.hp<=(@pokemon.totalhp/2).floor
  445. hpzone=2 if self.hp<=(@pokemon.totalhp/4).floor
  446. hpcolors=[
  447. Color.new(131,150,84),Color.new(107,132,73), # Green
  448. Color.new(253,225,134),Color.new(222,179,111), # Orange
  449. Color.new(173,73,61),Color.new(137,47,49) # Red
  450. ]
  451. # fill with HP color
  452. self.bitmap.fill_rect(@gaugeX,@gaugeY,hpgauge,2,hpcolors[hpzone*2])
  453. self.bitmap.fill_rect(@gaugeX,@gaugeY+2,hpgauge,2,hpcolors[hpzone*2+1])
  454. if @pokemon.hp==0 || @pokemon.status>0
  455. status=(@pokemon.hp==0) ? 5 : @pokemon.status-1
  456. statusrect=Rect.new(0,16*status,44,16)
  457. self.bitmap.blt(@statusX,@statusY,@statuses.bitmap,statusrect)
  458. end
  459. end
  460. if @pokemon.isMale?
  461. textpos.push([_INTL("?"),@genderX,@genderY,0,Color.new(0,112,248),Color.new(120,184,232)])
  462. elsif @pokemon.isFemale?
  463. textpos.push([_INTL("?"),@genderX,@genderY,0,Color.new(232,32,16),Color.new(248,168,184)])
  464. end
  465. end
  466. pbDrawTextPositions(self.bitmap,textpos)
  467. if !@pokemon.isEgg? && @pokemon.status==0 && @pokemon.hp>0
  468. pbSetSmallFont(self.bitmap)
  469. leveltext=[([_INTL("Lv.{1}",@pokemon.level),@levelX,@levelY,0,base,shadow])]
  470. pbDrawTextPositions(self.bitmap,leveltext)
  471. end
  472. if @text && @text.length>0
  473. pbSetSystemFont(self.bitmap)
  474. annotation=[[@text,@annotX,@annotY,0,base,shadow]]
  475. pbDrawTextPositions(self.bitmap,annotation)
  476. end
  477. end
  478. @refreshing=false
  479. end
  480.  
  481. def update
  482. super
  483. @pokeballsprite.update if @pokeballsprite && !@pokeballsprite.disposed?
  484. @itemsprite.update if @itemsprite && !@itemsprite.disposed?
  485. if @pkmnsprite && !@pkmnsprite.disposed?
  486. @pkmnsprite.update
  487. end
  488. end
  489. end
  490.  
  491.  
  492. ##############################
  493.  
  494.  
  495. class PokemonScreen_Scene
  496. def pbShowCommands(helptext,commands,index=0)
  497. ret=-1
  498. helpwindow=@sprites["helpwindow"]
  499. helpwindow.visible=true
  500. using(cmdwindow=Window_CommandPokemon.new(commands)) {
  501. cmdwindow.z=@viewport.z+1
  502. cmdwindow.index=index
  503. pbBottomRight(cmdwindow)
  504. helpwindow.text=""
  505. helpwindow.resizeHeightToFit(helptext,Graphics.width-cmdwindow.width)
  506. helpwindow.text=helptext
  507. pbBottomLeft(helpwindow)
  508. loop do
  509. Graphics.update
  510. Input.update
  511. cmdwindow.update
  512. self.update
  513. if Input.trigger?(Input::B)
  514. pbPlayCancelSE()
  515. ret=-1
  516. break
  517. end
  518. if Input.trigger?(Input::C)
  519. pbPlayDecisionSE()
  520. ret=cmdwindow.index
  521. break
  522. end
  523. end
  524. }
  525. return ret
  526. end
  527.  
  528. def update
  529. pbUpdateSpriteHash(@sprites)
  530. for i in 0...$Trainer.party.length
  531. @sprites["pokemon#{i}"].update_pos
  532. end
  533. end
  534.  
  535. def pbSetHelpText(helptext)
  536. helpwindow=@sprites["helpwindow"]
  537. pbBottomLeftLines(helpwindow,1)
  538. helpwindow.text=helptext
  539. helpwindow.width=398
  540. helpwindow.visible=true
  541. end
  542.  
  543. # Showing Formechange Animation.
  544. def pbAnimForme(anim,partynum,form=0,nform=-1)
  545. @sprites["formeanim"]=Sprite.new(@viewport)
  546. if form!=0
  547. bitmap=AnimatedBitmapWrapper.new("Graphics/Pictures/Party/animform#{anim}_#{form}",1)
  548. else
  549. bitmap=AnimatedBitmapWrapper.new("Graphics/Pictures/Party/animform#{anim}",1)
  550. end
  551. @sprites["formeanim"].bitmap=bitmap.bitmap
  552. @sprites["formeanim"].z=999999
  553. @sprites["formeanim"].x=@sprites["pokemon#{partynum}"].x+5+48
  554. @sprites["formeanim"].ox=@sprites["formeanim"].bitmap.width/2
  555. @sprites["formeanim"].oy=@sprites["formeanim"].bitmap.height/2
  556. @sprites["formeanim"].y=@sprites["pokemon#{partynum}"].y-10+48
  557. @sprites["formeanim"].zoom_x=0.5
  558. @sprites["formeanim"].zoom_y=0.5
  559. changed=false if nform!=-1
  560. loop do
  561. bitmap.play
  562. @sprites["formeanim"].bitmap=bitmap.bitmap.clone
  563. Graphics.update
  564. Input.update
  565. pbUpdateSceneMap
  566. update
  567. if nform!=-1 && !changed
  568. if bitmap.middle?
  569. @party[partynum].form=nform if nform!=-1
  570. pbRefresh if nform!=-1
  571. changed=true
  572. end
  573. end
  574. @sprites["formeanim"].dispose if bitmap.finished?
  575. break if @sprites["formeanim"].disposed?
  576. end
  577. end
  578.  
  579. # Showing Formechange Animation of Kyurem + Zekrom/Reshiram.
  580. def pbAnimFormeFusion(anim,partynum,anim2,partynum2,nform=-1,nform2=-1)
  581. @sprites["formeanim"]=Sprite.new
  582. @sprites["formeanim"].z=999999
  583. @sprites["formeanim"].x=@sprites["pokemon#{partynum}"].x-30
  584. @sprites["formeanim"].y=@sprites["pokemon#{partynum}"].y-40
  585. bitmap=AnimatedBitmapWrapper.new("Graphics/Pictures/Party/animform#{anim}",1)
  586. @sprites["formeanim"].bitmap=bitmap.bitmap
  587. @sprites["formeanim"].zoom_x=0.5
  588. @sprites["formeanim"].zoom_y=0.5
  589.  
  590. @sprites["formeanim2"]=Sprite.new
  591. @sprites["formeanim2"].z=999999
  592. @sprites["formeanim2"].x=@sprites["pokemon#{partynum2}"].x-30
  593. @sprites["formeanim2"].y=@sprites["pokemon#{partynum2}"].y-40
  594. @sprites["formeanim2"].zoom_x=0.5
  595. @sprites["formeanim2"].zoom_y=0.5
  596. bitmap2=AnimatedBitmapWrapper.new("Graphics/Pictures/Party/animform#{anim2}",1)
  597. @sprites["formeanim2"].bitmap=bitmap2.bitmap
  598. changed=false if nform!=-1
  599. changed2=false if nform2!=-1
  600. loop do
  601. bitmap.play
  602. bitmap2.play
  603. @sprites["formeanim"].bitmap=bitmap.bitmap.clone
  604. @sprites["formeanim2"].bitmap=bitmap2.bitmap.clone
  605. Graphics.update
  606. Input.update
  607. pbUpdateSceneMap
  608. update
  609. if nform!=-1 && !changed
  610. if bitmap.middle?
  611. @party[partynum].form=nform if nform!=-1
  612. pbRefresh if nform!=-1
  613. changed=true
  614. end
  615. end
  616. @sprites["formeanim"].dispose if bitmap.finished?
  617. @sprites["formeanim2"].dispose if bitmap.finished?
  618. break if @sprites["formeanim"].disposed? && @sprites["formeanim2"].disposed?
  619. end
  620. end
  621.  
  622.  
  623. def pbStartScene(party,starthelptext,annotations=nil,multiselect=false)
  624. @sprites={}
  625. @party=party
  626. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  627. @viewport.z=99999
  628. @multiselect=multiselect
  629. addBackgroundPlane(@sprites,"/Party/background","/party/background",@viewport)
  630. @downbg=Sprite.new(@viewport)
  631. @downbg.bitmap=BitmapCache.load_bitmap("Graphics/Pictures/Universal/down_bg")
  632. @downbg.y=336
  633. @sprites["messagebox"]=Window_AdvancedTextPokemon.new("")
  634. @sprites["helpwindow"]=Window_UnformattedTextPokemon.new(starthelptext)
  635. @sprites["messagebox"].viewport=@viewport
  636. @sprites["messagebox"].visible=false
  637. @sprites["messagebox"].letterbyletter=true
  638. @sprites["helpwindow"].viewport=@viewport
  639. @sprites["helpwindow"].visible=true
  640. @sprites["exit"]=IconSprite.new(0,0,@viewport)
  641. @sprites["exit"].setBitmap("Graphics/Pictures/Menu/exit")
  642. @sprites["exit"].x = 459
  643. @sprites["exit"].y = 346
  644. pbBottomLeftLines(@sprites["messagebox"],2)
  645. pbBottomLeftLines(@sprites["helpwindow"],1)
  646. pbSetHelpText(starthelptext)
  647. # Add party Pokémon sprites
  648. for i in 0...6
  649. if @party[i]
  650. @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  651. @party[i],i,@viewport)
  652. else
  653. @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  654. @party[i],i,@viewport)
  655. end
  656. if annotations
  657. @sprites["pokemon#{i}"].text=annotations[i]
  658. end
  659. end
  660. if @multiselect
  661. @sprites["pokemon6"]=PokeSelectionConfirmSprite.new(@viewport)
  662. @sprites["pokemon7"]=PokeSelectionCancelSprite2.new(@viewport)
  663. else
  664. @sprites["pokemon6"]=PokeSelectionCancelSprite.new(@viewport)
  665. end
  666. # Select first Pokémon
  667. @activecmd=0
  668. @sprites["pokemon0"].selected=true
  669. pbFadeInAndShow(@sprites) { update }
  670. end
  671.  
  672. def pbEndScene
  673. pbFadeOutAndHide(@sprites) { update }
  674. pbDisposeSpriteHash(@sprites)
  675. @viewport.dispose
  676. end
  677.  
  678. def pbChangeSelection(key,currentsel)
  679. numsprites=(@multiselect) ? 8 : 7
  680. case key
  681. when Input::LEFT
  682. begin
  683. currentsel-=1
  684. end while currentsel>0 && currentsel<@party.length && !@party[currentsel]
  685. if currentsel>=@party.length && currentsel<6
  686. currentsel=@party.length-1
  687. end
  688. currentsel=numsprites-1 if currentsel<0
  689. when Input::RIGHT
  690. begin
  691. currentsel+=1
  692. end while currentsel<@party.length && !@party[currentsel]
  693. if currentsel==@party.length
  694. currentsel=6
  695. elsif currentsel==numsprites
  696. currentsel=0
  697. end
  698. when Input::UP
  699. if currentsel>=6
  700. begin
  701. currentsel-=1
  702. end while currentsel>0 && !@party[currentsel]
  703. else
  704. begin
  705. currentsel-=2
  706. end while currentsel>0 && !@party[currentsel]
  707. end
  708. if currentsel>=@party.length && currentsel<6
  709. currentsel=@party.length-1
  710. end
  711. currentsel=numsprites-1 if currentsel<0
  712. when Input::DOWN
  713. if currentsel>=5
  714. currentsel+=1
  715. else
  716. currentsel+=2
  717. currentsel=6 if currentsel<6 && !@party[currentsel]
  718. end
  719. if currentsel>=@party.length && currentsel<6
  720. currentsel=6
  721. elsif currentsel>=numsprites
  722. currentsel=0
  723. end
  724. end
  725. return currentsel
  726. end
  727.  
  728. def pbRefresh
  729. for i in 0...6
  730. sprite=@sprites["pokemon#{i}"]
  731. if sprite
  732. if sprite.is_a?(PokeSelectionSprite)
  733. sprite.pokemon=sprite.pokemon
  734. else
  735. sprite.refresh
  736. end
  737. end
  738. end
  739. end
  740.  
  741. def pbRefreshSingle(i)
  742. sprite=@sprites["pokemon#{i}"]
  743. if sprite
  744. if sprite.is_a?(PokeSelectionSprite)
  745. sprite.pokemon=sprite.pokemon
  746. else
  747. sprite.refresh
  748. end
  749. end
  750. end
  751.  
  752. def pbHardRefresh
  753. oldtext=[]
  754. lastselected=-1
  755. for i in 0...6
  756. oldtext.push(@sprites["pokemon#{i}"].text)
  757. lastselected=i if @sprites["pokemon#{i}"].selected
  758. @sprites["pokemon#{i}"].dispose
  759. end
  760. lastselected=@party.length-1 if lastselected>=@party.length
  761. lastselected=0 if lastselected<0
  762. for i in 0...6
  763. if @party[i]
  764. @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  765. @party[i],i,@viewport)
  766. else
  767. @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  768. @party[i],i,@viewport)
  769. end
  770. @sprites["pokemon#{i}"].text=oldtext[i]
  771. end
  772. pbSelect(lastselected)
  773. end
  774.  
  775. def pbPreSelect(pkmn)
  776. @activecmd=pkmn
  777. end
  778.  
  779. def pbChoosePokemon(switching=false)
  780. for i in 0...6
  781. @sprites["pokemon#{i}"].preselected=(switching&&i==@activecmd)
  782. @sprites["pokemon#{i}"].switching=switching
  783. end
  784. pbRefresh
  785. loop do
  786. Graphics.update
  787. Input.update
  788. self.update
  789. oldsel=@activecmd
  790. key=-1
  791. key=Input::DOWN if Input.repeat?(Input::DOWN)
  792. key=Input::RIGHT if Input.repeat?(Input::RIGHT)
  793. key=Input::LEFT if Input.repeat?(Input::LEFT)
  794. key=Input::UP if Input.repeat?(Input::UP)
  795. if key>=0
  796. @activecmd=pbChangeSelection(key,@activecmd)
  797. end
  798. if @activecmd!=oldsel # Changing selection
  799. pbPlayCursorSE()
  800. numsprites=(@multiselect) ? 8 : 7
  801. for i in 0...numsprites
  802. @sprites["pokemon#{i}"].selected=(i==@activecmd)
  803. end
  804. end
  805. if Input.trigger?(Input::B)
  806. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit2")
  807. pbWait(10)
  808. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit")
  809. return -1
  810. end
  811. if Input.trigger?(Input::C)
  812. pbPlayDecisionSE()
  813. cancelsprite=(@multiselect) ? 7 : 6
  814. return (@activecmd==cancelsprite) ? -1 : @activecmd
  815. end
  816. if defined?($mouse)
  817. if $mouse.leftClick?(@sprites["exit"])
  818. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit2")
  819. pbWait(10)
  820. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit")
  821. return -1
  822. end
  823. x=[2,259,2,259,2,259] # X Position of the panels.
  824. y=[24,40,119,135,217,233] # Y Positions of the panels
  825. for i in 0...$Trainer.party.length
  826. if $mouse.inAreaLeft?(x[i],y[i],251,85)
  827. @sprites["pokemon#{@activecmd}"].selected=false
  828. @activecmd=i
  829. @sprites["pokemon#{i}"].selected=true
  830. pbPlayDecisionSE()
  831. cancelsprite=(@multiselect) ? 7 : 6
  832. return (@activecmd==cancelsprite) ? -1 : @activecmd
  833. end
  834. end
  835.  
  836. end
  837.  
  838. end
  839. end
  840.  
  841. def pbSelect(item)
  842. @activecmd=item
  843. numsprites=(@multiselect) ? 8 : 7
  844. for i in 0...numsprites
  845. @sprites["pokemon#{i}"].selected=(i==@activecmd)
  846. end
  847. end
  848.  
  849. def pbDisplay(text)
  850. @sprites["messagebox"].text=text
  851. @sprites["messagebox"].visible=true
  852. @sprites["helpwindow"].visible=false
  853. pbPlayDecisionSE()
  854. loop do
  855. Graphics.update
  856. Input.update
  857. self.update
  858. if @sprites["messagebox"].busy? && Input.trigger?(Input::C)
  859. pbPlayDecisionSE() if @sprites["messagebox"].pausing?
  860. @sprites["messagebox"].resume
  861. end
  862. if !@sprites["messagebox"].busy? &&
  863. (Input.trigger?(Input::C) || Input.trigger?(Input::B))
  864. break
  865. end
  866. end
  867. @sprites["messagebox"].visible=false
  868. @sprites["helpwindow"].visible=true
  869. end
  870.  
  871. def pbSwitchBegin(oldid,newid)
  872. oldsprite=@sprites["pokemon#{oldid}"]
  873. newsprite=@sprites["pokemon#{newid}"]
  874. 22.times do
  875. oldsprite.x+=(oldid&1)==0 ? -12 : 12
  876. newsprite.x+=(newid&1)==0 ? -12 : 12
  877. Graphics.update
  878. Input.update
  879. pbUpdateSpriteHash(@sprites)
  880. end
  881. end
  882.  
  883. def pbSwitchEnd(oldid,newid)
  884. oldsprite=@sprites["pokemon#{oldid}"]
  885. newsprite=@sprites["pokemon#{newid}"]
  886. oldsprite.pokemon=@party[oldid]
  887. newsprite.pokemon=@party[newid]
  888. 22.times do
  889. oldsprite.x-=(oldid&1)==0 ? -12 : 12
  890. newsprite.x-=(newid&1)==0 ? -12 : 12
  891. Graphics.update
  892. Input.update
  893. pbUpdateSpriteHash(@sprites)
  894. end
  895. for i in 0...6
  896. @sprites["pokemon#{i}"].preselected=false
  897. @sprites["pokemon#{i}"].switching=false
  898. end
  899. pbRefresh
  900. end
  901.  
  902. def pbDisplayConfirm(text)
  903. ret=-1
  904. @sprites["messagebox"].text=text
  905. @sprites["messagebox"].visible=true
  906. @sprites["helpwindow"].visible=false
  907. using(cmdwindow=Window_CommandPokemon.new([_INTL("Yes"),_INTL("No")])){
  908. cmdwindow.z=@viewport.z+1
  909. cmdwindow.visible=false
  910. pbBottomRight(cmdwindow)
  911. cmdwindow.y-=@sprites["messagebox"].height
  912. loop do
  913. Graphics.update
  914. Input.update
  915. cmdwindow.visible=true if !@sprites["messagebox"].busy?
  916. cmdwindow.update
  917. self.update
  918. if Input.trigger?(Input::B) && !@sprites["messagebox"].busy?
  919. ret=false
  920. break
  921. end
  922. if Input.trigger?(Input::C) && @sprites["messagebox"].resume && !@sprites["messagebox"].busy?
  923. ret=(cmdwindow.index==0)
  924. break
  925. end
  926. end
  927. }
  928. @sprites["messagebox"].visible=false
  929. @sprites["helpwindow"].visible=true
  930. return ret
  931. end
  932.  
  933. def pbAnnotate(annot)
  934. for i in 0...6
  935. if annot
  936. @sprites["pokemon#{i}"].text=annot[i]
  937. end
  938. end
  939. end
  940.  
  941. def pbSummary(pkmnid)
  942. oldsprites=pbFadeOutAndHide(@sprites)
  943. scene=PokemonSummaryScene.new
  944. screen=PokemonSummary.new(scene)
  945. screen.pbStartScreen(@party,pkmnid)
  946. pbFadeInAndShow(@sprites,oldsprites)
  947. end
  948.  
  949. def pbChooseItem(bag)
  950. oldsprites=pbFadeOutAndHide(@sprites)
  951. @sprites["helpwindow"].visible=false
  952. @sprites["messagebox"].visible=false
  953. scene=PokemonBag_Scene.new
  954. screen=PokemonBagScreen.new(scene,bag)
  955. ret=screen.pbGiveItemScreen
  956. pbFadeInAndShow(@sprites,oldsprites)
  957. return ret
  958. end
  959.  
  960. def pbMessageFreeText(text,startMsg,maxlength)
  961. return Kernel.pbMessageFreeText(
  962. _INTL("Please enter a message (max. {1} characters).",maxlength),
  963. _INTL("{1}",startMsg),false,maxlength,Graphics.width) { update }
  964. end
  965. end
  966.  
  967.  
  968. ######################################
  969.  
  970.  
  971. class PokemonScreen
  972. def initialize(scene,party)
  973. @party=party
  974. @scene=scene
  975. end
  976.  
  977. def pbAnimForme(anim, partynum,form=0,nform=-1)
  978. @scene.pbAnimForme(anim, partynum,form,nform)
  979. end
  980.  
  981. def pbAnimFormeFusion(anim, partynum, anim2, partynum2,nform=-1,nform2=-1)
  982. @scene.pbAnimFormeFusion(anim, partynum, anim2, partynum2,nform,nform2)
  983. end
  984.  
  985. def pbHardRefresh
  986. @scene.pbHardRefresh
  987. end
  988.  
  989. def pbRefresh
  990. @scene.pbRefresh
  991. end
  992.  
  993. def pbRefreshSingle(i)
  994. @scene.pbRefreshSingle(i)
  995. end
  996.  
  997. def pbDisplay(text)
  998. @scene.pbDisplay(text)
  999. end
  1000.  
  1001. def pbConfirm(text)
  1002. return @scene.pbDisplayConfirm(text)
  1003. end
  1004.  
  1005. def pbSwitch(oldid,newid)
  1006. if oldid!=newid
  1007. @scene.pbSwitchBegin(oldid,newid)
  1008. tmp=@party[oldid]
  1009. @party[oldid]=@party[newid]
  1010. @party[newid]=tmp
  1011. @scene.pbSwitchEnd(oldid,newid)
  1012. end
  1013. end
  1014.  
  1015. def pbMailScreen(item,pkmn,pkmnid)
  1016. message=""
  1017. loop do
  1018. message=@scene.pbMessageFreeText(
  1019. _INTL("Please enter a message (max. 256 characters)."),"",256)
  1020. if message!=""
  1021. # Store mail if a message was written
  1022. poke1=poke2=poke3=nil
  1023. if $Trainer.party[pkmnid+2]
  1024. p=$Trainer.party[pkmnid+2]
  1025. poke1=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  1026. poke1.push(true) if p.isEgg?
  1027. end
  1028. if $Trainer.party[pkmnid+1]
  1029. p=$Trainer.party[pkmnid+1]
  1030. poke2=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  1031. poke2.push(true) if p.isEgg?
  1032. end
  1033. poke3=[pkmn.species,pkmn.gender,pkmn.isShiny?,(pkmn.form rescue 0),(pkmn.isShadow? rescue false)]
  1034. poke3.push(true) if pkmn.isEgg?
  1035. pbStoreMail(pkmn,item,message,poke1,poke2,poke3)
  1036. return true
  1037. else
  1038. return false if pbConfirm(_INTL("Stop giving the Pokémon Mail?"))
  1039. end
  1040. end
  1041. end
  1042.  
  1043. def pbTakeMail(pkmn)
  1044. if !pkmn.hasItem?
  1045. pbDisplay(_INTL("{1} isn't holding anything.",pkmn.name))
  1046. elsif !$PokemonBag.pbCanStore?(pkmn.item)
  1047. pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
  1048. elsif pkmn.mail
  1049. if pbConfirm(_INTL("Send the removed mail to your PC?"))
  1050. if !pbMoveToMailbox(pkmn)
  1051. pbDisplay(_INTL("Your PC's Mailbox is full."))
  1052. else
  1053. pbDisplay(_INTL("The mail was sent to your PC."))
  1054. pkmn.setItem(0)
  1055. end
  1056. elsif pbConfirm(_INTL("If the mail is removed, the message will be lost. OK?"))
  1057. pbDisplay(_INTL("Mail was taken from the Pokémon."))
  1058. $PokemonBag.pbStoreItem(pkmn.item)
  1059. pkmn.setItem(0)
  1060. pkmn.mail=nil
  1061. end
  1062. else
  1063. $PokemonBag.pbStoreItem(pkmn.item)
  1064. itemname=PBItems.getName(pkmn.item)
  1065. if isConst?(pkmn.item,PBItems,:GRISEOUSORB) && isConst?(pkmn.species,PBSpecies,:GIRATINA)
  1066. pkmn.setItem(0)
  1067. pbAnimForme(pkmn.species,pkmnid,0,0) # Giratina Anim
  1068. end
  1069. pbDisplay(_INTL("Received the {1} from {2}.",itemname,pkmn.name))
  1070. pkmn.setItem(0)
  1071. end
  1072. end
  1073.  
  1074. def pbGiveMail(item,pkmn,pkmnid=0)
  1075. thisitemname=PBItems.getName(item)
  1076. if pkmn.isEgg?
  1077. pbDisplay(_INTL("Eggs can't hold items."))
  1078. return false
  1079. end
  1080. if pkmn.mail
  1081. pbDisplay(_INTL("Mail must be removed before holding an item."))
  1082. return false
  1083. end
  1084. if pkmn.item!=0
  1085. itemname=PBItems.getName(pkmn.item)
  1086. pbDisplay(_INTL("{1} is already holding one {2}.\1",pkmn.name,itemname))
  1087. if pbConfirm(_INTL("Would you like to switch the two items?"))
  1088. $PokemonBag.pbDeleteItem(item)
  1089. if !$PokemonBag.pbStoreItem(pkmn.item)
  1090. if !$PokemonBag.pbStoreItem(item) # Compensate
  1091. raise _INTL("Can't re-store deleted item in bag")
  1092. end
  1093. pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
  1094. else
  1095. if pbIsMail?(item)
  1096. if pbMailScreen(item,pkmn,pkmnid)
  1097. pkmn.setItem(item)
  1098. pbDisplay(_INTL("The {1} was taken and replaced with the {2}.",itemname,thisitemname))
  1099. return true
  1100. else
  1101. if !$PokemonBag.pbStoreItem(item) # Compensate
  1102. raise _INTL("Can't re-store deleted item in bag")
  1103. end
  1104. end
  1105. else
  1106. pkmn.setItem(item)
  1107. if isConst?(item,PBItems,:GRISEOUSORB) && isConst?(pkmn.species,PBSpecies,:GIRATINA)
  1108. newform=pkmn.form==0 ? 1 : 0
  1109. pbAnimForme(pkmn.species, pkmnid,0,newform) # Giratina Anim
  1110. end
  1111. pbDisplay(_INTL("The {1} was taken and replaced with the {2}.",itemname,thisitemname))
  1112. return true
  1113. end
  1114. end
  1115. end
  1116. else
  1117. if !pbIsMail?(item) || pbMailScreen(item,pkmn,pkmnid) # Open the mail screen if necessary
  1118. $PokemonBag.pbDeleteItem(item)
  1119. pkmn.setItem(item)
  1120. if isConst?(item,PBItems,:GRISEOUSORB) && isConst?(pkmn.species,PBSpecies,:GIRATINA)
  1121. newform=pkmn.form==0 ? 1 : 0
  1122. pbAnimForme(pkmn.species, pkmnid,0,newform) # Giratina Anim
  1123. end
  1124. pbDisplay(_INTL("{1} was given the {2} to hold.",pkmn.name,thisitemname))
  1125. return true
  1126. end
  1127. end
  1128. return false
  1129. end
  1130.  
  1131. def pbPokemonGiveScreen(item)
  1132. @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  1133. pkmnid=@scene.pbChoosePokemon
  1134. ret=false
  1135. if pkmnid>=0
  1136. ret=pbGiveMail(item,@party[pkmnid],pkmnid)
  1137. end
  1138. pbRefreshSingle(pkmnid)
  1139. @scene.pbEndScene
  1140. return ret
  1141. end
  1142.  
  1143. def pbPokemonGiveMailScreen(mailIndex)
  1144. @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  1145. pkmnid=@scene.pbChoosePokemon
  1146. if pkmnid>=0
  1147. pkmn=@party[pkmnid]
  1148. if pkmn.item!=0 || pkmn.mail
  1149. pbDisplay(_INTL("This Pokémon is holding an item. It can't hold mail."))
  1150. elsif pkmn.isEgg?
  1151. pbDisplay(_INTL("Eggs can't hold mail."))
  1152. else
  1153. pbDisplay(_INTL("Mail was transferred from the Mailbox."))
  1154. pkmn.mail=$PokemonGlobal.mailbox[mailIndex]
  1155. pkmn.setItem(pkmn.mail.item)
  1156. $PokemonGlobal.mailbox.delete_at(mailIndex)
  1157. pbRefreshSingle(pkmnid)
  1158. end
  1159. end
  1160. @scene.pbEndScene
  1161. end
  1162.  
  1163. def pbStartScene(helptext,doublebattle,annotations=nil)
  1164. @scene.pbStartScene(@party,helptext,annotations)
  1165. end
  1166.  
  1167. def pbChoosePokemon(helptext=nil)
  1168. @scene.pbSetHelpText(helptext) if helptext
  1169. return @scene.pbChoosePokemon
  1170. end
  1171.  
  1172. def pbChooseMove(pokemon,helptext)
  1173. movenames=[]
  1174. for i in pokemon.moves
  1175. break if i.id==0
  1176. if i.totalpp==0
  1177. movenames.push(_INTL("{1} (PP: ---)",PBMoves.getName(i.id),i.pp,i.totalpp))
  1178. else
  1179. movenames.push(_INTL("{1} (PP: {2}/{3})",PBMoves.getName(i.id),i.pp,i.totalpp))
  1180. end
  1181. end
  1182. return @scene.pbShowCommands(helptext,movenames)
  1183. end
  1184.  
  1185. def pbEndScene
  1186. @scene.pbEndScene
  1187. end
  1188.  
  1189. # Checks for identical species
  1190. def pbCheckSpecies(array)
  1191. for i in 0...array.length
  1192. for j in i+1...array.length
  1193. return false if array[i].species==array[j].species
  1194. end
  1195. end
  1196. return true
  1197. end
  1198.  
  1199. # Checks for identical held items
  1200. def pbCheckItems(array)
  1201. for i in 0...array.length
  1202. next if !array[i].hasItem?
  1203. for j in i+1...array.length
  1204. return false if array[i].item==array[j].item
  1205. end
  1206. end
  1207. return true
  1208. end
  1209.  
  1210. def pbPokemonMultipleEntryScreenEx(ruleset)
  1211. annot=[]
  1212. statuses=[]
  1213. ordinals=[
  1214. _INTL("INELIGIBLE"),
  1215. _INTL("NOT ENTERED"),
  1216. _INTL("BANNED"),
  1217. _INTL("FIRST"),
  1218. _INTL("SECOND"),
  1219. _INTL("THIRD"),
  1220. _INTL("FOURTH"),
  1221. _INTL("FIFTH"),
  1222. _INTL("SIXTH")
  1223. ]
  1224. if !ruleset.hasValidTeam?(@party)
  1225. return nil
  1226. end
  1227. ret=nil
  1228. addedEntry=false
  1229. for i in 0...@party.length
  1230. if ruleset.isPokemonValid?(@party[i])
  1231. statuses[i]=1
  1232. else
  1233. statuses[i]=2
  1234. end
  1235. end
  1236. for i in 0...@party.length
  1237. annot[i]=ordinals[statuses[i]]
  1238. end
  1239. @scene.pbStartScene(@party,_INTL("Choose Pokémon and confirm."),annot,true)
  1240. loop do
  1241. realorder=[]
  1242. for i in 0...@party.length
  1243. for j in 0...@party.length
  1244. if statuses[j]==i+3
  1245. realorder.push(j)
  1246. break
  1247. end
  1248. end
  1249. end
  1250. for i in 0...realorder.length
  1251. statuses[realorder[i]]=i+3
  1252. end
  1253. for i in 0...@party.length
  1254. annot[i]=ordinals[statuses[i]]
  1255. end
  1256. @scene.pbAnnotate(annot)
  1257. if realorder.length==ruleset.number && addedEntry
  1258. @scene.pbSelect(6)
  1259. end
  1260. @scene.pbSetHelpText(_INTL("Choose Pokémon and confirm."))
  1261. pkmnid=@scene.pbChoosePokemon
  1262. addedEntry=false
  1263. if pkmnid==6 # Confirm was chosen
  1264. ret=[]
  1265. for i in realorder
  1266. ret.push(@party[i])
  1267. end
  1268. error=[]
  1269. if !ruleset.isValid?(ret,error)
  1270. pbDisplay(error[0])
  1271. ret=nil
  1272. else
  1273. break
  1274. end
  1275. end
  1276. if pkmnid<0 # Canceled
  1277. break
  1278. end
  1279. cmdEntry=-1
  1280. cmdNoEntry=-1
  1281. cmdSummary=-1
  1282. commands=[]
  1283. if (statuses[pkmnid] || 0) == 1
  1284. commands[cmdEntry=commands.length]=_INTL("Entry")
  1285. elsif (statuses[pkmnid] || 0) > 2
  1286. commands[cmdNoEntry=commands.length]=_INTL("No Entry")
  1287. end
  1288. pkmn=@party[pkmnid]
  1289. commands[cmdSummary=commands.length]=_INTL("Summary")
  1290. commands[commands.length]=_INTL("Cancel")
  1291. command=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands) if pkmn
  1292. if cmdEntry>=0 && command==cmdEntry
  1293. if realorder.length>=ruleset.number && ruleset.number>0
  1294. pbDisplay(_INTL("No more than {1} Pokémon may enter.",ruleset.number))
  1295. else
  1296. statuses[pkmnid]=realorder.length+3
  1297. addedEntry=true
  1298. pbRefreshSingle(pkmnid)
  1299. end
  1300. elsif cmdNoEntry>=0 && command==cmdNoEntry
  1301. statuses[pkmnid]=1
  1302. pbRefreshSingle(pkmnid)
  1303. elsif cmdSummary>=0 && command==cmdSummary
  1304. @scene.pbSummary(pkmnid)
  1305. end
  1306. end
  1307. @scene.pbEndScene
  1308. return ret
  1309. end
  1310.  
  1311. def pbChooseAblePokemon(ableProc,allowIneligible=false)
  1312. annot=[]
  1313. eligibility=[]
  1314. for pkmn in @party
  1315. elig=ableProc.call(pkmn)
  1316. eligibility.push(elig)
  1317. annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1318. end
  1319. ret=-1
  1320. @scene.pbStartScene(@party,
  1321. @party.length>1 ? _INTL("Escoge un pokémon.") : _INTL("Escoge un pokémon o cancela."),annot)
  1322. loop do
  1323. @scene.pbSetHelpText(
  1324. @party.length>1 ? _INTL("Escoge un pokémon.") : _INTL("Escoge un pokémon o cancela."))
  1325. pkmnid=@scene.pbChoosePokemon
  1326. if pkmnid<0
  1327. break
  1328. elsif !eligibility[pkmnid] && !allowIneligible
  1329. pbDisplay(_INTL("This Pokémon can't be chosen."))
  1330. else
  1331. ret=pkmnid
  1332. break
  1333. end
  1334. end
  1335. @scene.pbEndScene
  1336. return ret
  1337. end
  1338.  
  1339. def pbRefreshAnnotations(ableProc) # For after using an evolution stone
  1340. annot=[]
  1341. for pkmn in @party
  1342. elig=ableProc.call(pkmn)
  1343. annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1344. end
  1345. @scene.pbAnnotate(annot)
  1346. end
  1347.  
  1348. def pbPokemonDebug(pkmn,pkmnid)
  1349. command=0
  1350. loop do
  1351. command=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),[
  1352. _INTL("HP/Status"),
  1353. _INTL("Level"),
  1354. _INTL("Species"),
  1355. _INTL("Moves"),
  1356. _INTL("Gender"),
  1357. _INTL("Ability"),
  1358. _INTL("Nature"),
  1359. _INTL("Shininess"),
  1360. _INTL("Form"),
  1361. _INTL("Happiness"),
  1362. _INTL("EV/IV/pID"),
  1363. _INTL("Pokérus"),
  1364. _INTL("Ownership"),
  1365. _INTL("Nickname"),
  1366. _INTL("Poké Ball"),
  1367. _INTL("Ribbons"),
  1368. _INTL("Egg"),
  1369. _INTL("Shadow Pokémon"),
  1370. _INTL("Make Mystery Gift"),
  1371. _INTL("Duplicate"),
  1372. _INTL("Delete"),
  1373. _INTL("Cancel")
  1374. ],command)
  1375. case command
  1376. ### Cancel ###
  1377. when -1, 21
  1378. break
  1379. ### HP/Status ###
  1380. when 0
  1381. cmd=0
  1382. loop do
  1383. cmd=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),[
  1384. _INTL("Set HP"),
  1385. _INTL("Status: Sleep"),
  1386. _INTL("Status: Poison"),
  1387. _INTL("Status: Burn"),
  1388. _INTL("Status: Paralysis"),
  1389. _INTL("Status: Frozen"),
  1390. _INTL("Fainted"),
  1391. _INTL("Heal")
  1392. ],cmd)
  1393. # Break
  1394. if cmd==-1
  1395. break
  1396. # Set HP
  1397. elsif cmd==0
  1398. params=ChooseNumberParams.new
  1399. params.setRange(0,pkmn.totalhp)
  1400. params.setDefaultValue(pkmn.hp)
  1401. newhp=Kernel.pbMessageChooseNumber(
  1402. _INTL("Set the Pokémon's HP (max. {1}).",pkmn.totalhp),params) { @scene.update }
  1403. if newhp!=pkmn.hp
  1404. pkmn.hp=newhp
  1405. pbDisplay(_INTL("{1}'s HP was set to {2}.",pkmn.name,pkmn.hp))
  1406. pbRefreshSingle(pkmnid)
  1407. end
  1408. # Set status
  1409. elsif cmd>=1 && cmd<=5
  1410. if pkmn.hp>0
  1411. pkmn.status=cmd
  1412. pkmn.statusCount=0
  1413. if pkmn.status==PBStatuses::SLEEP
  1414. params=ChooseNumberParams.new
  1415. params.setRange(0,9)
  1416. params.setDefaultValue(0)
  1417. sleep=Kernel.pbMessageChooseNumber(
  1418. _INTL("Set the Pokémon's sleep count."),params) { @scene.update }
  1419. pkmn.statusCount=sleep
  1420. end
  1421. pbDisplay(_INTL("{1}'s status was changed.",pkmn.name))
  1422. pbRefreshSingle(pkmnid)
  1423. else
  1424. pbDisplay(_INTL("{1}'s status could not be changed.",pkmn.name))
  1425. end
  1426. # Faint
  1427. elsif cmd==6
  1428. pkmn.hp=0
  1429. pbDisplay(_INTL("{1}'s HP was set to 0.",pkmn.name))
  1430. pbRefreshSingle(pkmnid)
  1431. # Heal
  1432. elsif cmd==7
  1433. pkmn.heal
  1434. pbDisplay(_INTL("{1} was fully healed.",pkmn.name))
  1435. pbRefreshSingle(pkmnid)
  1436. end
  1437. end
  1438. ### Level ###
  1439. when 1
  1440. params=ChooseNumberParams.new
  1441. params.setRange(1,PBExperience::MAXLEVEL)
  1442. params.setDefaultValue(pkmn.level)
  1443. level=Kernel.pbMessageChooseNumber(
  1444. _INTL("Set the Pokémon's level (max. {1}).",PBExperience::MAXLEVEL),params) { @scene.update }
  1445. if level!=pkmn.level
  1446. pkmn.level=level
  1447. pkmn.calcStats
  1448. pbDisplay(_INTL("{1}'s level was set to {2}.",pkmn.name,pkmn.level))
  1449. pbRefreshSingle(pkmnid)
  1450. end
  1451. ### Species ###
  1452. when 2
  1453. species=pbChooseSpecies(pkmn.species)
  1454. if species!=0
  1455. oldspeciesname=PBSpecies.getName(pkmn.species)
  1456. pkmn.species=species
  1457. pkmn.calcStats
  1458. oldname=pkmn.name
  1459. pkmn.name=PBSpecies.getName(pkmn.species) if pkmn.name==oldspeciesname
  1460. pbDisplay(_INTL("{1}'s species was changed to {2}.",oldname,PBSpecies.getName(pkmn.species)))
  1461. pbSeenForm(pkmn)
  1462. pbRefreshSingle(pkmnid)
  1463. end
  1464. ### Moves ###
  1465. when 3
  1466. cmd=0
  1467. loop do
  1468. cmd=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),[
  1469. _INTL("Teach move"),
  1470. _INTL("Forget move"),
  1471. _INTL("Reset movelist"),
  1472. _INTL("Reset initial moves")],cmd)
  1473. # Break
  1474. if cmd==-1
  1475. break
  1476. # Teach move
  1477. elsif cmd==0
  1478. move=pbChooseMoveList
  1479. if move!=0
  1480. pbLearnMove(pkmn,move)
  1481. pbRefreshSingle(pkmnid)
  1482. end
  1483. # Forget move
  1484. elsif cmd==1
  1485. move=pbChooseMove(pkmn,_INTL("Choose move to forget."))
  1486. if move>=0
  1487. movename=PBMoves.getName(pkmn.moves[move].id)
  1488. pbDeleteMove(pkmn,move)
  1489. pbDisplay(_INTL("{1} forgot {2}.",pkmn.name,movename))
  1490. pbRefreshSingle(pkmnid)
  1491. end
  1492. # Reset movelist
  1493. elsif cmd==2
  1494. pkmn.resetMoves
  1495. pbDisplay(_INTL("{1}'s moves were reset.",pkmn.name))
  1496. pbRefreshSingle(pkmnid)
  1497. # Reset initial moves
  1498. elsif cmd==3
  1499. pkmn.pbRecordFirstMoves
  1500. pbDisplay(_INTL("{1}'s moves were set as its first-known moves.",pkmn.name))
  1501. pbRefreshSingle(pkmnid)
  1502. end
  1503. end
  1504. ### Gender ###
  1505. when 4
  1506. if pkmn.gender==2
  1507. pbDisplay(_INTL("{1} is genderless.",pkmn.name))
  1508. else
  1509. cmd=0
  1510. loop do
  1511. oldgender=(pkmn.isMale?) ? _INTL("male") : _INTL("female")
  1512. msg=[_INTL("Gender {1} is natural.",oldgender),
  1513. _INTL("Gender {1} is being forced.",oldgender)][pkmn.genderflag ? 1 : 0]
  1514. cmd=@scene.pbShowCommands(msg,[
  1515. _INTL("Make male"),
  1516. _INTL("Make female"),
  1517. _INTL("Remove override")],cmd)
  1518. # Break
  1519. if cmd==-1
  1520. break
  1521. # Make male
  1522. elsif cmd==0
  1523. pkmn.setGender(0)
  1524. if pkmn.isMale?
  1525. pbDisplay(_INTL("{1} is now male.",pkmn.name))
  1526. else
  1527. pbDisplay(_INTL("{1}'s gender couldn't be changed.",pkmn.name))
  1528. end
  1529. # Make female
  1530. elsif cmd==1
  1531. pkmn.setGender(1)
  1532. if pkmn.isFemale?
  1533. pbDisplay(_INTL("{1} is now female.",pkmn.name))
  1534. else
  1535. pbDisplay(_INTL("{1}'s gender couldn't be changed.",pkmn.name))
  1536. end
  1537. # Remove override
  1538. elsif cmd==2
  1539. pkmn.genderflag=nil
  1540. pbDisplay(_INTL("Gender override removed."))
  1541. end
  1542. pbSeenForm(pkmn)
  1543. pbRefreshSingle(pkmnid)
  1544. end
  1545. end
  1546. ### Ability ###
  1547. when 5
  1548. cmd=0
  1549. loop do
  1550. abils=pkmn.getAbilityList
  1551. oldabil=PBAbilities.getName(pkmn.ability)
  1552. commands=[]
  1553. for i in 0...abils[0].length
  1554. commands.push((abils[1][i]<2 ? "" : "(H) ")+PBAbilities.getName(abils[0][i]))
  1555. end
  1556. commands.push(_INTL("Remove override"))
  1557. msg=[_INTL("Ability {1} is natural.",oldabil),
  1558. _INTL("Ability {1} is being forced.",oldabil)][pkmn.abilityflag ? 1 : 0]
  1559. cmd=@scene.pbShowCommands(msg,commands,cmd)
  1560. # Break
  1561. if cmd==-1
  1562. break
  1563. # Set ability override
  1564. elsif cmd>=0 && cmd<abils[0].length
  1565. pkmn.setAbility(abils[1][cmd])
  1566. # Remove override
  1567. elsif cmd==abils[0].length
  1568. pkmn.abilityflag=nil
  1569. end
  1570. pbRefreshSingle(pkmnid)
  1571. end
  1572. ### Nature ###
  1573. when 6
  1574. cmd=0
  1575. loop do
  1576. oldnature=PBNatures.getName(pkmn.nature)
  1577. commands=[]
  1578. (PBNatures.getCount).times do |i|
  1579. commands.push(PBNatures.getName(i))
  1580. end
  1581. commands.push(_INTL("Remove override"))
  1582. msg=[_INTL("Nature {1} is natural.",oldnature),
  1583. _INTL("Nature {1} is being forced.",oldnature)][pkmn.natureflag ? 1 : 0]
  1584. cmd=@scene.pbShowCommands(msg,commands,cmd)
  1585. # Break
  1586. if cmd==-1
  1587. break
  1588. # Set nature override
  1589. elsif cmd>=0 && cmd<PBNatures.getCount
  1590. pkmn.setNature(cmd)
  1591. pkmn.calcStats
  1592. # Remove override
  1593. elsif cmd==PBNatures.getCount
  1594. pkmn.natureflag=nil
  1595. end
  1596. pbRefreshSingle(pkmnid)
  1597. end
  1598. ### Shininess ###
  1599. when 7
  1600. cmd=0
  1601. loop do
  1602. oldshiny=(pkmn.isShiny?) ? _INTL("shiny") : _INTL("normal")
  1603. msg=[_INTL("Shininess ({1}) is natural.",oldshiny),
  1604. _INTL("Shininess ({1}) is being forced.",oldshiny)][pkmn.shinyflag!=nil ? 1 : 0]
  1605. cmd=@scene.pbShowCommands(msg,[
  1606. _INTL("Make shiny"),
  1607. _INTL("Make normal"),
  1608. _INTL("Remove override")],cmd)
  1609. # Break
  1610. if cmd==-1
  1611. break
  1612. # Make shiny
  1613. elsif cmd==0
  1614. pkmn.makeShiny
  1615. # Make normal
  1616. elsif cmd==1
  1617. pkmn.makeNotShiny
  1618. # Remove override
  1619. elsif cmd==2
  1620. pkmn.shinyflag=nil
  1621. end
  1622. pbRefreshSingle(pkmnid)
  1623. end
  1624. ### Form ###
  1625. when 8
  1626. params=ChooseNumberParams.new
  1627. params.setRange(0,100)
  1628. params.setDefaultValue(pkmn.form)
  1629. f=Kernel.pbMessageChooseNumber(
  1630. _INTL("Set the Pokémon's form."),params) { @scene.update }
  1631. if f!=pkmn.form
  1632. pkmn.form=f
  1633. pbDisplay(_INTL("{1}'s form was set to {2}.",pkmn.name,pkmn.form))
  1634. pbSeenForm(pkmn)
  1635. pbRefreshSingle(pkmnid)
  1636. end
  1637. ### Happiness ###
  1638. when 9
  1639. params=ChooseNumberParams.new
  1640. params.setRange(0,255)
  1641. params.setDefaultValue(pkmn.happiness)
  1642. h=Kernel.pbMessageChooseNumber(
  1643. _INTL("Set the Pokémon's happiness (max. 255)."),params) { @scene.update }
  1644. if h!=pkmn.happiness
  1645. pkmn.happiness=h
  1646. pbDisplay(_INTL("{1}'s happiness was set to {2}.",pkmn.name,pkmn.happiness))
  1647. pbRefreshSingle(pkmnid)
  1648. end
  1649. ### EV/IV/pID ###
  1650. when 10
  1651. stats=[_INTL("HP"),_INTL("Attack"),_INTL("Defense"),
  1652. _INTL("Speed"),_INTL("Sp. Attack"),_INTL("Sp. Defense")]
  1653. cmd=0
  1654. loop do
  1655. persid=sprintf("0x%08X",pkmn.personalID)
  1656. cmd=@scene.pbShowCommands(_INTL("Personal ID is {1}.",persid),[
  1657. _INTL("Set EVs"),
  1658. _INTL("Set IVs"),
  1659. _INTL("Randomise pID")],cmd)
  1660. case cmd
  1661. # Break
  1662. when -1
  1663. break
  1664. # Set EVs
  1665. when 0
  1666. cmd2=0
  1667. loop do
  1668. evcommands=[]
  1669. for i in 0...stats.length
  1670. evcommands.push(stats[i]+" (#{pkmn.ev[i]})")
  1671. end
  1672. cmd2=@scene.pbShowCommands(_INTL("Change which EV?"),evcommands,cmd2)
  1673. if cmd2==-1
  1674. break
  1675. elsif cmd2>=0 && cmd2<stats.length
  1676. params=ChooseNumberParams.new
  1677. params.setRange(0,255)
  1678. params.setDefaultValue(pkmn.ev[cmd2])
  1679. params.setCancelValue(pkmn.ev[cmd2])
  1680. f=Kernel.pbMessageChooseNumber(
  1681. _INTL("Set the EV for {1} (max. 255).",stats[cmd2]),params) { @scene.update }
  1682. pkmn.ev[cmd2]=f
  1683. pkmn.totalhp
  1684. pkmn.calcStats
  1685. pbRefreshSingle(pkmnid)
  1686. end
  1687. end
  1688. # Set IVs
  1689. when 1
  1690. cmd2=0
  1691. loop do
  1692. hiddenpower=pbHiddenPower(pkmn.iv)
  1693. msg=_INTL("Hidden Power:\n{1}, power {2}.",PBTypes.getName(hiddenpower[0]),hiddenpower[1])
  1694. ivcommands=[]
  1695. for i in 0...stats.length
  1696. ivcommands.push(stats[i]+" (#{pkmn.iv[i]})")
  1697. end
  1698. ivcommands.push(_INTL("Randomise all"))
  1699. cmd2=@scene.pbShowCommands(msg,ivcommands,cmd2)
  1700. if cmd2==-1
  1701. break
  1702. elsif cmd2>=0 && cmd2<stats.length
  1703. params=ChooseNumberParams.new
  1704. params.setRange(0,31)
  1705. params.setDefaultValue(pkmn.iv[cmd2])
  1706. params.setCancelValue(pkmn.iv[cmd2])
  1707. f=Kernel.pbMessageChooseNumber(
  1708. _INTL("Set the IV for {1} (max. 31).",stats[cmd2]),params) { @scene.update }
  1709. pkmn.iv[cmd2]=f
  1710. pkmn.calcStats
  1711. pbRefreshSingle(pkmnid)
  1712. elsif cmd2==ivcommands.length-1
  1713. pkmn.iv[0]=rand(32)
  1714. pkmn.iv[1]=rand(32)
  1715. pkmn.iv[2]=rand(32)
  1716. pkmn.iv[3]=rand(32)
  1717. pkmn.iv[4]=rand(32)
  1718. pkmn.iv[5]=rand(32)
  1719. pkmn.calcStats
  1720. pbRefreshSingle(pkmnid)
  1721. end
  1722. end
  1723. # Randomise pID
  1724. when 2
  1725. pkmn.personalID=rand(256)
  1726. pkmn.personalID|=rand(256)<<8
  1727. pkmn.personalID|=rand(256)<<16
  1728. pkmn.personalID|=rand(256)<<24
  1729. pkmn.calcStats
  1730. pbRefreshSingle(pkmnid)
  1731. end
  1732. end
  1733. ### Pokérus ###
  1734. when 11
  1735. cmd=0
  1736. loop do
  1737. pokerus=(pkmn.pokerus) ? pkmn.pokerus : 0
  1738. msg=[_INTL("{1} doesn't have Pokérus.",pkmn.name),
  1739. _INTL("Has strain {1}, infectious for {2} more days.",pokerus/16,pokerus%16),
  1740. _INTL("Has strain {1}, not infectious.",pokerus/16)][pkmn.pokerusStage]
  1741. cmd=@scene.pbShowCommands(msg,[
  1742. _INTL("Give random strain"),
  1743. _INTL("Make not infectious"),
  1744. _INTL("Clear Pokérus")],cmd)
  1745. # Break
  1746. if cmd==-1
  1747. break
  1748. # Give random strain
  1749. elsif cmd==0
  1750. pkmn.givePokerus
  1751. # Make not infectious
  1752. elsif cmd==1
  1753. strain=pokerus/16
  1754. p=strain<<4
  1755. pkmn.pokerus=p
  1756. # Clear Pokérus
  1757. elsif cmd==2
  1758. pkmn.pokerus=0
  1759. end
  1760. end
  1761. ### Ownership ###
  1762. when 12
  1763. cmd=0
  1764. loop do
  1765. gender=[_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender]
  1766. msg=[_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID),
  1767. _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID)
  1768. ][pkmn.isForeign?($Trainer) ? 1 : 0]
  1769. cmd=@scene.pbShowCommands(msg,[
  1770. _INTL("Make player's"),
  1771. _INTL("Set OT's name"),
  1772. _INTL("Set OT's gender"),
  1773. _INTL("Random foreign ID"),
  1774. _INTL("Set foreign ID")],cmd)
  1775. # Break
  1776. if cmd==-1
  1777. break
  1778. # Make player's
  1779. elsif cmd==0
  1780. pkmn.trainerID=$Trainer.id
  1781. pkmn.ot=$Trainer.name
  1782. pkmn.otgender=$Trainer.gender
  1783. # Set OT's name
  1784. elsif cmd==1
  1785. newot=pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,7)
  1786. pkmn.ot=newot
  1787. # Set OT's gender
  1788. elsif cmd==2
  1789. cmd2=@scene.pbShowCommands(_INTL("Set OT's gender."),
  1790. [_INTL("Male"),_INTL("Female"),_INTL("Unknown")])
  1791. pkmn.otgender=cmd2 if cmd2>=0
  1792. # Random foreign ID
  1793. elsif cmd==3
  1794. pkmn.trainerID=$Trainer.getForeignID
  1795. # Set foreign ID
  1796. elsif cmd==4
  1797. params=ChooseNumberParams.new
  1798. params.setRange(0,65535)
  1799. params.setDefaultValue(pkmn.publicID)
  1800. val=Kernel.pbMessageChooseNumber(
  1801. _INTL("Set the new ID (max. 65535)."),params) { @scene.update }
  1802. pkmn.trainerID=val
  1803. pkmn.trainerID|=val<<16
  1804. end
  1805. end
  1806. ### Nickname ###
  1807. when 13
  1808. cmd=0
  1809. loop do
  1810. speciesname=PBSpecies.getName(pkmn.species)
  1811. msg=[_INTL("{1} has the nickname {2}.",speciesname,pkmn.name),
  1812. _INTL("{1} has no nickname.",speciesname)][pkmn.name==speciesname ? 1 : 0]
  1813. cmd=@scene.pbShowCommands(msg,[
  1814. _INTL("Rename"),
  1815. _INTL("Erase name")],cmd)
  1816. # Break
  1817. if cmd==-1
  1818. break
  1819. # Rename
  1820. elsif cmd==0
  1821. newname=pbEnterPokemonName(_INTL("",speciesname),0,10,"",pkmn)#("{1}'s nickname?",speciesname),0,10,"",pkmn)
  1822. pkmn.name=(newname=="") ? speciesname : newname
  1823. pbRefreshSingle(pkmnid)
  1824. # Erase name
  1825. elsif cmd==1
  1826. pkmn.name=speciesname
  1827. end
  1828. end
  1829. ### Poké Ball ###
  1830. when 14
  1831. cmd=0
  1832. loop do
  1833. oldball=PBItems.getName(pbBallTypeToBall(pkmn.ballused))
  1834. commands=[]; balls=[]
  1835. for key in $BallTypes.keys
  1836. item=getID(PBItems,$BallTypes[key])
  1837. balls.push([key,PBItems.getName(item)]) if item && item>0
  1838. end
  1839. balls.sort! {|a,b| a[1]<=>b[1]}
  1840. for i in 0...commands.length
  1841. cmd=i if pkmn.ballused==balls[i][0]
  1842. end
  1843. for i in balls
  1844. commands.push(i[1])
  1845. end
  1846. cmd=@scene.pbShowCommands(_INTL("{1} used.",oldball),commands,cmd)
  1847. if cmd==-1
  1848. break
  1849. else
  1850. pkmn.ballused=balls[cmd][0]
  1851. end
  1852. end
  1853. ### Ribbons ###
  1854. when 15
  1855. cmd=0
  1856. loop do
  1857. commands=[]
  1858. for i in 1..PBRibbons.maxValue
  1859. commands.push(_INTL("{1} {2}",
  1860. pkmn.hasRibbon?(i) ? "[X]" : "[ ]",PBRibbons.getName(i)))
  1861. end
  1862. cmd=@scene.pbShowCommands(_INTL("{1} ribbons.",pkmn.ribbonCount),commands,cmd)
  1863. if cmd==-1
  1864. break
  1865. elsif cmd>=0 && cmd<commands.length
  1866. if pkmn.hasRibbon?(cmd+1)
  1867. pkmn.takeRibbon(cmd+1)
  1868. else
  1869. pkmn.giveRibbon(cmd+1)
  1870. end
  1871. end
  1872. end
  1873. ### Egg ###
  1874. when 16
  1875. cmd=0
  1876. loop do
  1877. msg=[_INTL("Not an egg"),
  1878. _INTL("Egg with eggsteps: {1}.",pkmn.eggsteps)][pkmn.isEgg? ? 1 : 0]
  1879. cmd=@scene.pbShowCommands(msg,[
  1880. _INTL("Make egg"),
  1881. _INTL("Make Pokémon"),
  1882. _INTL("Set eggsteps to 1")],cmd)
  1883. # Break
  1884. if cmd==-1
  1885. break
  1886. # Make egg
  1887. elsif cmd==0
  1888. if pbHasEgg?(pkmn.species) ||
  1889. pbConfirm(_INTL("{1} cannot be an egg. Make egg anyway?",PBSpecies.getName(pkmn.species)))
  1890. pkmn.level=EGGINITIALLEVEL
  1891. pkmn.calcStats
  1892. pkmn.name=_INTL("Egg")
  1893. dexdata=pbOpenDexData
  1894. pbDexDataOffset(dexdata,pkmn.species,21)
  1895. pkmn.eggsteps=dexdata.fgetw
  1896. dexdata.close
  1897. pkmn.hatchedMap=0
  1898. pkmn.obtainMode=1
  1899. pbRefreshSingle(pkmnid)
  1900. end
  1901. # Make Pokémon
  1902. elsif cmd==1
  1903. pkmn.name=PBSpecies.getName(pkmn.species)
  1904. pkmn.eggsteps=0
  1905. pkmn.hatchedMap=0
  1906. pkmn.obtainMode=0
  1907. pbRefreshSingle(pkmnid)
  1908. # Set eggsteps to 1
  1909. elsif cmd==2
  1910. pkmn.eggsteps=1 if pkmn.eggsteps>0
  1911. end
  1912. end
  1913. ### Shadow Pokémon ###
  1914. when 17
  1915. cmd=0
  1916. loop do
  1917. msg=[_INTL("Not a Shadow Pokémon."),
  1918. _INTL("Heart gauge is {1}.",pkmn.heartgauge)][(pkmn.isShadow? rescue false) ? 1 : 0]
  1919. cmd=@scene.pbShowCommands(msg,[
  1920. _INTL("Make Shadow"),
  1921. _INTL("Lower heart gauge")],cmd)
  1922. # Break
  1923. if cmd==-1
  1924. break
  1925. # Make Shadow
  1926. elsif cmd==0
  1927. if !(pkmn.isShadow? rescue false) && pkmn.respond_to?("makeShadow")
  1928. pkmn.makeShadow
  1929. pbDisplay(_INTL("{1} is now a Shadow Pokémon.",pkmn.name))
  1930. pbRefreshSingle(pkmnid)
  1931. else
  1932. pbDisplay(_INTL("{1} is already a Shadow Pokémon.",pkmn.name))
  1933. end
  1934. # Lower heart gauge
  1935. elsif cmd==1
  1936. if (pkmn.isShadow? rescue false)
  1937. prev=pkmn.heartgauge
  1938. pkmn.adjustHeart(-700)
  1939. Kernel.pbMessage(_INTL("{1}'s heart gauge was lowered from {2} to {3} (now stage {4}).",
  1940. pkmn.name,prev,pkmn.heartgauge,pkmn.heartStage))
  1941. pbReadyToPurify(pkmn)
  1942. else
  1943. Kernel.pbMessage(_INTL("{1} is not a Shadow Pokémon.",pkmn.name))
  1944. end
  1945. end
  1946. end
  1947. ### Make Mystery Gift ###
  1948. when 18
  1949. pbCreateMysteryGift(0,pkmn)
  1950. ### Duplicate ###
  1951. when 19
  1952. if pbConfirm(_INTL("Are you sure you want to copy this Pokémon?"))
  1953. clonedpkmn=pkmn.clone
  1954. clonedpkmn.iv=pkmn.iv.clone
  1955. clonedpkmn.ev=pkmn.ev.clone
  1956. pbStorePokemon(clonedpkmn)
  1957. pbHardRefresh
  1958. pbDisplay(_INTL("The Pokémon was duplicated."))
  1959. break
  1960. end
  1961. ### Delete ###
  1962. when 20
  1963. if pbConfirm(_INTL("Are you sure you want to delete this Pokémon?"))
  1964. @party[pkmnid]=nil
  1965. @party.compact!
  1966. pbHardRefresh
  1967. pbDisplay(_INTL("The Pokémon was deleted."))
  1968. break
  1969. end
  1970. end
  1971. end
  1972. end
  1973.  
  1974. def pbPokemonScreen
  1975. @scene.pbStartScene(@party,
  1976. @party.length>1 ? _INTL("Escoge un pokémon.") : _INTL("Choose Pokémon or cancel."),nil)
  1977. loop do
  1978. @scene.pbSetHelpText(
  1979. @party.length>1 ? _INTL("Escoge un pokémon.") : _INTL("Choose Pokémon or cancel."))
  1980. pkmnid=@scene.pbChoosePokemon
  1981. if pkmnid<0
  1982. break
  1983. end
  1984. pkmn=@party[pkmnid]
  1985. commands=[]
  1986. cmdSummary=-1
  1987. cmdSwitch=-1
  1988. cmdItem=-1
  1989. cmdDebug=-1
  1990. cmdMail=-1
  1991. # Build the commands
  1992. commands[cmdSummary=commands.length]=_INTL("Summary")
  1993. if $DEBUG
  1994. # Commands for debug mode only
  1995. commands[cmdDebug=commands.length]=_INTL("Debug")
  1996. end
  1997. cmdMoves=[-1,-1,-1,-1]
  1998. for i in 0...pkmn.moves.length
  1999. move=pkmn.moves[i]
  2000. # Check for hidden moves and add any that were found
  2001. if !pkmn.isEgg? && (
  2002. isConst?(move.id,PBMoves,:MILKDRINK) ||
  2003. isConst?(move.id,PBMoves,:SOFTBOILED) ||
  2004. HiddenMoveHandlers.hasHandler(move.id)
  2005. )
  2006. commands[cmdMoves[i]=commands.length]=PBMoves.getName(move.id)
  2007. end
  2008. end
  2009. commands[cmdSwitch=commands.length]=_INTL("Switch") if @party.length>1
  2010. if !pkmn.isEgg?
  2011. if pkmn.mail
  2012. commands[cmdMail=commands.length]=_INTL("Mail")
  2013. else
  2014. commands[cmdItem=commands.length]=_INTL("Item")
  2015. end
  2016. end
  2017. commands[commands.length]=_INTL("Cancel")
  2018. command=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands)
  2019. havecommand=false
  2020. for i in 0...4
  2021. if cmdMoves[i]>=0 && command==cmdMoves[i]
  2022. havecommand=true
  2023. if isConst?(pkmn.moves[i].id,PBMoves,:SOFTBOILED) ||
  2024. isConst?(pkmn.moves[i].id,PBMoves,:MILKDRINK)
  2025. if pkmn.hp<=pkmn.totalhp/5
  2026. pbDisplay(_INTL("Not enough HP..."))
  2027. break
  2028. end
  2029. @scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
  2030. oldpkmnid=pkmnid
  2031. loop do
  2032. @scene.pbPreSelect(oldpkmnid)
  2033. pkmnid=@scene.pbChoosePokemon(true)
  2034. break if pkmnid<0
  2035. newpkmn=@party[pkmnid]
  2036. if newpkmn.isEgg? || newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp || pkmnid==oldpkmnid
  2037. pbDisplay(_INTL("This item can't be used on that Pokémon."))
  2038. else
  2039. pkmn.hp-=pkmn.totalhp/5
  2040. hpgain=pbItemRestoreHP(newpkmn,pkmn.totalhp/5)
  2041. @scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",newpkmn.name,hpgain))
  2042. pbRefresh
  2043. end
  2044. end
  2045. break
  2046. elsif Kernel.pbCanUseHiddenMove?(pkmn,pkmn.moves[i].id)
  2047. @scene.pbEndScene
  2048. if isConst?(pkmn.moves[i].id,PBMoves,:FLY)
  2049. scene=PokemonRegionMapScene.new(-1,false)
  2050. screen=PokemonRegionMap.new(scene)
  2051. ret=screen.pbStartFlyScreen
  2052. if ret
  2053. $PokemonTemp.flydata=ret
  2054. return [pkmn,pkmn.moves[i].id]
  2055. end
  2056. @scene.pbStartScene(@party,
  2057. @party.length>1 ? _INTL("Escoge un pokémon.") : _INTL("Choose Pokémon or cancel."))
  2058. break
  2059. end
  2060. return [pkmn,pkmn.moves[i].id]
  2061. else
  2062. break
  2063. end
  2064. end
  2065. end
  2066. next if havecommand
  2067. if cmdSummary>=0 && command==cmdSummary
  2068. @scene.pbSummary(pkmnid)
  2069. elsif cmdSwitch>=0 && command==cmdSwitch
  2070. @scene.pbSetHelpText(_INTL("Move to where?"))
  2071. oldpkmnid=pkmnid
  2072. pkmnid=@scene.pbChoosePokemon(true)
  2073. if pkmnid>=0 && pkmnid!=oldpkmnid
  2074. pbSwitch(oldpkmnid,pkmnid)
  2075. end
  2076. elsif cmdDebug>=0 && command==cmdDebug
  2077. pbPokemonDebug(pkmn,pkmnid)
  2078. elsif cmdMail>=0 && command==cmdMail
  2079. command=@scene.pbShowCommands(_INTL("Do what with the mail?"),[_INTL("Read"),_INTL("Take"),_INTL("Cancel")])
  2080. case command
  2081. when 0 # Read
  2082. pbFadeOutIn(99999){
  2083. pbDisplayMail(pkmn.mail,pkmn)
  2084. }
  2085. when 1 # Take
  2086. pbTakeMail(pkmn)
  2087. pbRefreshSingle(pkmnid)
  2088. end
  2089. elsif cmdItem>=0 && command==cmdItem
  2090. command=@scene.pbShowCommands(_INTL("Do what with an item?"),[_INTL("Give"),_INTL("Take"),_INTL("Cancel")])
  2091. case command
  2092. when 0 # Give
  2093. item=@scene.pbChooseItem($PokemonBag)
  2094. if item>0
  2095. pbGiveMail(item,pkmn,pkmnid)
  2096. pbRefreshSingle(pkmnid)
  2097. end
  2098. when 1 # Take
  2099. pbTakeMail(pkmn)
  2100. pbRefreshSingle(pkmnid)
  2101. end
  2102. end
  2103. end
  2104. @scene.pbEndScene
  2105. return nil
  2106. end
  2107. end
  2108.  
  2109. #===============================================================================
  2110. # Adding the Formechange animation.
  2111. #===============================================================================
  2112. module ItemHandlers
  2113. def self.triggerUseOnPokemon(item,pokemon,scene,chosen)
  2114. # Returns whether item was used
  2115. if !UseOnPokemon[item]
  2116. return false
  2117. else
  2118. return UseOnPokemon.trigger(item,pokemon,scene,chosen)
  2119. end
  2120. end
  2121. end
  2122.  
  2123. def pbUseItem(bag,item,bagscene=nil)
  2124. found=false
  2125. if $ItemData[item][ITEMUSE]==3 || $ItemData[item][ITEMUSE]==4 # TM or HM
  2126. machine=$ItemData[item][ITEMMACHINE]
  2127. ret=true
  2128. return 0 if machine==nil
  2129. if $Trainer.pokemonCount==0
  2130. Kernel.pbMessage(_INTL("There is no Pokémon."))
  2131. return 0
  2132. end
  2133. movename=PBMoves.getName(machine)
  2134. if pbIsHiddenMachine?(item)
  2135. Kernel.pbMessage(_INTL("\\se[accesspc]Booted up an HM."))
  2136. Kernel.pbMessage(_INTL("It contained {1}.\1",movename))
  2137. else
  2138. Kernel.pbMessage(_INTL("\\se[accesspc]Booted up a TM."))
  2139. Kernel.pbMessage(_INTL("It contained {1}.\1",movename))
  2140. end
  2141. if !Kernel.pbConfirmMessage(_INTL("Teach {1} to a Pokémon?",movename))
  2142. return 0
  2143. elsif pbMoveTutorChoose(machine,nil,true)
  2144. bag.pbDeleteItem(item) if pbIsTechnicalMachine?(item) && !INFINITETMS
  2145. return 1
  2146. else
  2147. return 0
  2148. end
  2149. elsif $ItemData[item][ITEMUSE]==1 || $ItemData[item][ITEMUSE]==5 # Item is usable on a Pokémon
  2150. if $Trainer.pokemonCount==0
  2151. Kernel.pbMessage(_INTL("There is no Pokémon."))
  2152. return 0
  2153. end
  2154. ret=false
  2155. annot=nil
  2156. if pbIsEvolutionStone?(item)
  2157. annot=[]
  2158. for pkmn in $Trainer.party
  2159. elig=(pbCheckEvolution(pkmn,item)>0)
  2160. annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  2161. end
  2162. end
  2163. pbFadeOutIn(99999){
  2164. scene=PokemonScreen_Scene.new
  2165. screen=PokemonScreen.new(scene,$Trainer.party)
  2166. screen.pbStartScene(_INTL("Use on which Pokémon?"),false,annot)
  2167. loop do
  2168. scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
  2169. chosen=screen.pbChoosePokemon
  2170. if chosen>=0
  2171. pokemon=$Trainer.party[chosen]
  2172. if !pbCheckUseOnPokemon(item,pokemon,screen)
  2173. pbPlayBuzzerSE()
  2174. else
  2175. ret=ItemHandlers.triggerUseOnPokemon(item,pokemon,screen,chosen)
  2176. if ret && $ItemData[item][ITEMUSE]==1 # Usable on Pokémon, consumed
  2177. bag.pbDeleteItem(item)
  2178. end
  2179. if bag.pbQuantity(item)<=0
  2180. Kernel.pbMessage(_INTL("You used your last {1}.",
  2181. PBItems.getName(item))) if bag.pbQuantity(item)<=0
  2182. break
  2183. end
  2184. end
  2185. else
  2186. ret=false
  2187. break
  2188. end
  2189. end
  2190. screen.pbEndScene
  2191. bagscene.pbRefresh if bagscene
  2192. }
  2193. return ret ? 1 : 0
  2194. elsif $ItemData[item][ITEMUSE]==2 # Item is usable from bag
  2195. intret=ItemHandlers.triggerUseFromBag(item)
  2196. case intret
  2197. when 0
  2198. return 0
  2199. when 1 # Item used
  2200. return 1
  2201. when 2 # Item used, end screen
  2202. return 2
  2203. when 3 # Item used, consume item
  2204. bag.pbDeleteItem(item)
  2205. return 1
  2206. when 4 # Item used, end screen and consume item
  2207. bag.pbDeleteItem(item)
  2208. return 2
  2209. else
  2210. Kernel.pbMessage(_INTL("Can't use that here."))
  2211. return 0
  2212. end
  2213. else
  2214. Kernel.pbMessage(_INTL("Can't use that here."))
  2215. return 0
  2216. end
  2217. end
  2218.  
  2219. ItemHandlers::UseOnPokemon.add(:GRACIDEA,proc{|item,pokemon,scene,chose|
  2220. if isConst?(pokemon.species,PBSpecies,:SHAYMIN) && pokemon.form==0 &&
  2221. pokemon.hp>=0 && pokemon.status!=PBStatuses::FROZEN &&
  2222. !PBDayNight.isNight?(pbGetTimeNow)
  2223. scene.pbAnimForme(pokemon.species,chose,0,1) #SHAYMIN ANIM
  2224. #pokemon.form=1
  2225. scene.pbRefresh
  2226. scene.pbDisplay(_INTL("{1} changed Forme!",pokemon.name))
  2227. next true
  2228. else
  2229. scene.pbDisplay(_INTL("It had no effect."))
  2230. next false
  2231. end
  2232. })
  2233.  
  2234. ItemHandlers::UseOnPokemon.add(:REVEALGLASS,proc{|item,pokemon,scene,chose|
  2235. if (isConst?(pokemon.species,PBSpecies,:TORNADUS) ||
  2236. isConst?(pokemon.species,PBSpecies,:THUNDURUS) ||
  2237. isConst?(pokemon.species,PBSpecies,:LANDORUS)) && pokemon.hp>=0
  2238. newform=(pokemon.form==0) ? 1 : 0
  2239. scene.pbAnimForme(pokemon.species,chose,0,newform) #KAMI ANIM
  2240. scene.pbRefresh
  2241. scene.pbDisplay(_INTL("{1} changed Forme!",pokemon.name))
  2242. next true
  2243. else
  2244. scene.pbDisplay(_INTL("It had no effect."))
  2245. next false
  2246. end
  2247. })
  2248.  
  2249. ItemHandlers::UseOnPokemon.add(:DNASPLICERS,proc{|item,pokemon,scene,chose|
  2250. if isConst?(pokemon.species,PBSpecies,:KYUREM) && pokemon.hp>=0
  2251. if pokemon.fused!=nil
  2252. if $Trainer.party.length>=6
  2253. scene.pbDisplay(_INTL("Your party is full! You can't unfuse {1}.",pokemon.name))
  2254. next false
  2255. else
  2256. scene.pbAnimForme(pokemon.species,chose,pokemon.form)
  2257. $Trainer.party[$Trainer.party.length]=pokemon.fused
  2258. pokemon.fused=nil
  2259. pokemon.form=0
  2260. scene.pbHardRefresh
  2261. scene.pbDisplay(_INTL("{1} changed Forme!",pokemon.name))
  2262. next true
  2263. end
  2264. else
  2265. chosen=scene.pbChoosePokemon(_INTL("Fuse with which Pokémon?"))
  2266. if chosen>=0
  2267. poke2=$Trainer.party[chosen]
  2268. if (isConst?(poke2.species,PBSpecies,:RESHIRAM) ||
  2269. isConst?(poke2.species,PBSpecies,:ZEKROM)) && poke2.hp>=0
  2270.  
  2271. newform=1 if isConst?(poke2.species,PBSpecies,:RESHIRAM)
  2272. newform=2 if isConst?(poke2.species,PBSpecies,:ZEKROM)
  2273.  
  2274. scene.pbAnimFormeFusion(pokemon.species,chose,poke2.species,chosen,newform)
  2275. pokemon.form=1 if isConst?(poke2.species,PBSpecies,:RESHIRAM)
  2276. pokemon.form=2 if isConst?(poke2.species,PBSpecies,:ZEKROM)
  2277. pokemon.fused=poke2
  2278.  
  2279. pbRemovePokemonAt(chosen)
  2280. scene.pbHardRefresh
  2281. scene.pbDisplay(_INTL("{1} changed Forme!",pokemon.name))
  2282. next true
  2283. elsif pokemon==poke2
  2284. scene.pbDisplay(_INTL("{1} can't be fused with itself!",pokemon.name))
  2285. else
  2286. scene.pbDisplay(_INTL("{1} can't be fused with {2}.",poke2.name,pokemon.name))
  2287. end
  2288. else
  2289. next false
  2290. end
  2291. end
  2292. else
  2293. scene.pbDisplay(_INTL("It had no effect."))
  2294. next false
  2295. end
  2296. })
  2297.  
  2298. #===============================================================================
  2299. # UseOnPokemon handlers
  2300. #===============================================================================
  2301.  
  2302. ItemHandlers::UseOnPokemon.add(:FIRESTONE,proc{|item,pokemon,scene,chose|
  2303. if (pokemon.isShadow? rescue false)
  2304. scene.pbDisplay(_INTL("It won't have any effect."))
  2305. next false
  2306. end
  2307. newspecies=pbCheckEvolution(pokemon,item)
  2308. if newspecies<=0
  2309. scene.pbDisplay(_INTL("It won't have any effect."))
  2310. next false
  2311. else
  2312. pbFadeOutInWithMusic(99999){
  2313. evo=PokemonEvolutionScene.new
  2314. evo.pbStartScreen(pokemon,newspecies)
  2315. evo.pbEvolution(false)
  2316. evo.pbEndScreen
  2317. scene.pbRefreshAnnotations(proc{|p| pbCheckEvolution(p,item)>0 })
  2318. scene.pbRefresh
  2319. }
  2320. next true
  2321. end
  2322. })
  2323.  
  2324. ItemHandlers::UseOnPokemon.copy(:FIRESTONE,
  2325. :THUNDERSTONE,:WATERSTONE,:LEAFSTONE,:MOONSTONE,
  2326. :SUNSTONE,:DUSKSTONE,:DAWNSTONE,:SHINYSTONE)
  2327.  
  2328. ItemHandlers::UseOnPokemon.add(:POTION,proc{|item,pokemon,scene,chose|
  2329. next pbHPItem(pokemon,20,scene)
  2330. })
  2331.  
  2332. ItemHandlers::UseOnPokemon.add(:SUPERPOTION,proc{|item,pokemon,scene,chose|
  2333. next pbHPItem(pokemon,50,scene)
  2334. })
  2335.  
  2336. ItemHandlers::UseOnPokemon.add(:HYPERPOTION,proc{|item,pokemon,scene,chose|
  2337. next pbHPItem(pokemon,200,scene)
  2338. })
  2339.  
  2340. ItemHandlers::UseOnPokemon.add(:MAXPOTION,proc{|item,pokemon,scene,chose|
  2341. next pbHPItem(pokemon,pokemon.totalhp-pokemon.hp,scene)
  2342. })
  2343.  
  2344. ItemHandlers::UseOnPokemon.add(:BERRYJUICE,proc{|item,pokemon,scene,chose|
  2345. next pbHPItem(pokemon,20,scene)
  2346. })
  2347.  
  2348. ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR,proc{|item,pokemon,scene,chose|
  2349. next pbHPItem(pokemon,20,scene)
  2350. })
  2351.  
  2352. ItemHandlers::UseOnPokemon.add(:SWEETHEART,proc{|item,pokemon,scene,chose|
  2353. next pbHPItem(pokemon,20,scene)
  2354. })
  2355.  
  2356. ItemHandlers::UseOnPokemon.add(:FRESHWATER,proc{|item,pokemon,scene,chose|
  2357. next pbHPItem(pokemon,50,scene)
  2358. })
  2359.  
  2360. ItemHandlers::UseOnPokemon.add(:SODAPOP,proc{|item,pokemon,scene,chose|
  2361. next pbHPItem(pokemon,60,scene)
  2362. })
  2363.  
  2364. ItemHandlers::UseOnPokemon.add(:LEMONADE,proc{|item,pokemon,scene,chose|
  2365. next pbHPItem(pokemon,80,scene)
  2366. })
  2367.  
  2368. ItemHandlers::UseOnPokemon.add(:MOOMOOMILK,proc{|item,pokemon,scene,chose|
  2369. next pbHPItem(pokemon,100,scene)
  2370. })
  2371.  
  2372. ItemHandlers::UseOnPokemon.add(:ORANBERRY,proc{|item,pokemon,scene,chose|
  2373. next pbHPItem(pokemon,10,scene)
  2374. })
  2375.  
  2376. ItemHandlers::UseOnPokemon.add(:SITRUSBERRY,proc{|item,pokemon,scene,chose|
  2377. next pbHPItem(pokemon,(pokemon.totalhp/4).floor,scene)
  2378. })
  2379.  
  2380. ItemHandlers::UseOnPokemon.add(:AWAKENING,proc{|item,pokemon,scene,chose|
  2381. if pokemon.hp<=0 || pokemon.status!=PBStatuses::SLEEP
  2382. scene.pbDisplay(_INTL("It won't have any effect."))
  2383. next false
  2384. else
  2385. pokemon.status=0
  2386. pokemon.statusCount=0
  2387. scene.pbRefresh
  2388. scene.pbDisplay(_INTL("{1} woke up.",pokemon.name))
  2389. next true
  2390. end
  2391. })
  2392.  
  2393. ItemHandlers::UseOnPokemon.copy(:AWAKENING,:CHESTOBERRY,:BLUEFLUTE,:POKEFLUTE)
  2394.  
  2395. ItemHandlers::UseOnPokemon.add(:ANTIDOTE,proc{|item,pokemon,scene,chose|
  2396. if pokemon.hp<=0 || pokemon.status!=PBStatuses::POISON
  2397. scene.pbDisplay(_INTL("It won't have any effect."))
  2398. next false
  2399. else
  2400. pokemon.status=0
  2401. pokemon.statusCount=0
  2402. scene.pbRefresh
  2403. scene.pbDisplay(_INTL("{1} was cured of its poisoning.",pokemon.name))
  2404. next true
  2405. end
  2406. })
  2407.  
  2408. ItemHandlers::UseOnPokemon.copy(:ANTIDOTE,:PECHABERRY)
  2409.  
  2410. ItemHandlers::UseOnPokemon.add(:BURNHEAL,proc{|item,pokemon,scene,chose|
  2411. if pokemon.hp<=0 || pokemon.status!=PBStatuses::BURN
  2412. scene.pbDisplay(_INTL("It won't have any effect."))
  2413. next false
  2414. else
  2415. pokemon.status=0
  2416. scene.pbRefresh
  2417. scene.pbDisplay(_INTL("{1}'s burn was healed.",pokemon.name))
  2418. next true
  2419. end
  2420. })
  2421.  
  2422. ItemHandlers::UseOnPokemon.copy(:BURNHEAL,:RAWSTBERRY)
  2423.  
  2424. ItemHandlers::UseOnPokemon.add(:PARLYZHEAL,proc{|item,pokemon,scene,chose|
  2425. if pokemon.hp<=0 || pokemon.status!=PBStatuses::PARALYSIS
  2426. scene.pbDisplay(_INTL("It won't have any effect."))
  2427. next false
  2428. else
  2429. pokemon.status=0
  2430. pokemon.statusCount=0
  2431. scene.pbRefresh
  2432. scene.pbDisplay(_INTL("{1} was cured of paralysis.",pokemon.name))
  2433. next true
  2434. end
  2435. })
  2436.  
  2437. ItemHandlers::UseOnPokemon.copy(:PARLYZHEAL,:CHERIBERRY)
  2438.  
  2439. ItemHandlers::UseOnPokemon.add(:ICEHEAL,proc{|item,pokemon,scene,chose|
  2440. if pokemon.hp<=0 || pokemon.status!=PBStatuses::FROZEN
  2441. scene.pbDisplay(_INTL("It won't have any effect."))
  2442. next false
  2443. else
  2444. pokemon.status=0
  2445. scene.pbRefresh
  2446. scene.pbDisplay(_INTL("{1} was thawed out.",pokemon.name))
  2447. next true
  2448. end
  2449. })
  2450.  
  2451. ItemHandlers::UseOnPokemon.copy(:ICEHEAL,:ASPEARBERRY)
  2452.  
  2453. ItemHandlers::UseOnPokemon.add(:FULLHEAL,proc{|item,pokemon,scene,chose|
  2454. if pokemon.hp<=0 || pokemon.status==0
  2455. scene.pbDisplay(_INTL("It won't have any effect."))
  2456. next false
  2457. else
  2458. pokemon.status=0
  2459. pokemon.statusCount=0
  2460. scene.pbRefresh
  2461. scene.pbDisplay(_INTL("{1} became healthy.",pokemon.name))
  2462. next true
  2463. end
  2464. })
  2465.  
  2466. ItemHandlers::UseOnPokemon.copy(:FULLHEAL,
  2467. :LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMBERRY)
  2468.  
  2469. ItemHandlers::UseOnPokemon.add(:FULLRESTORE,proc{|item,pokemon,scene,chose|
  2470. if pokemon.hp<=0 || (pokemon.status==0 && pokemon.hp==pokemon.totalhp)
  2471. scene.pbDisplay(_INTL("It won't have any effect."))
  2472. next false
  2473. else
  2474. hpgain=pbItemRestoreHP(pokemon,pokemon.totalhp-pokemon.hp)
  2475. pokemon.status=0
  2476. pokemon.statusCount=0
  2477. scene.pbRefresh
  2478. if hpgain>0
  2479. scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",pokemon.name,hpgain))
  2480. else
  2481. scene.pbDisplay(_INTL("{1} became healthy.",pokemon.name))
  2482. end
  2483. next true
  2484. end
  2485. })
  2486.  
  2487. ItemHandlers::UseOnPokemon.add(:REVIVE,proc{|item,pokemon,scene,chose|
  2488. if pokemon.hp>0
  2489. scene.pbDisplay(_INTL("It won't have any effect."))
  2490. next false
  2491. else
  2492. pokemon.status=0
  2493. pokemon.hp=(pokemon.totalhp/2).floor
  2494. scene.pbRefresh
  2495. scene.pbDisplay(_INTL("{1}'s HP was restored.",pokemon.name))
  2496. next true
  2497. end
  2498. })
  2499.  
  2500. ItemHandlers::UseOnPokemon.add(:MAXREVIVE,proc{|item,pokemon,scene,chose|
  2501. if pokemon.hp>0
  2502. scene.pbDisplay(_INTL("It won't have any effect."))
  2503. next false
  2504. else
  2505. pokemon.status=0
  2506. pokemon.hp=pokemon.totalhp
  2507. scene.pbRefresh
  2508. scene.pbDisplay(_INTL("{1}'s HP was restored.",pokemon.name))
  2509. next true
  2510. end
  2511. })
  2512.  
  2513. ItemHandlers::UseOnPokemon.add(:ENERGYPOWDER,proc{|item,pokemon,scene,chose|
  2514. if pbHPItem(pokemon,50,scene)
  2515. pokemon.changeHappiness("powder")
  2516. next true
  2517. end
  2518. next false
  2519. })
  2520.  
  2521. ItemHandlers::UseOnPokemon.add(:ENERGYROOT,proc{|item,pokemon,scene,chose|
  2522. if pbHPItem(pokemon,200,scene)
  2523. pokemon.changeHappiness("Energy Root")
  2524. next true
  2525. end
  2526. next false
  2527. })
  2528.  
  2529. ItemHandlers::UseOnPokemon.add(:HEALPOWDER,proc{|item,pokemon,scene,chose|
  2530. if pokemon.hp<=0 || pokemon.status==0
  2531. scene.pbDisplay(_INTL("It won't have any effect."))
  2532. next false
  2533. else
  2534. pokemon.status=0
  2535. pokemon.statusCount=0
  2536. pokemon.changeHappiness("powder")
  2537. scene.pbRefresh
  2538. scene.pbDisplay(_INTL("{1} became healthy.",pokemon.name))
  2539. next true
  2540. end
  2541. })
  2542.  
  2543. ItemHandlers::UseOnPokemon.add(:REVIVALHERB,proc{|item,pokemon,scene,chose|
  2544. if pokemon.hp>0
  2545. scene.pbDisplay(_INTL("It won't have any effect."))
  2546. next false
  2547. else
  2548. pokemon.status=0
  2549. pokemon.hp=pokemon.totalhp
  2550. pokemon.changeHappiness("Revival Herb")
  2551. scene.pbRefresh
  2552. scene.pbDisplay(_INTL("{1}'s HP was restored.",pokemon.name))
  2553. next true
  2554. end
  2555. })
  2556.  
  2557. ItemHandlers::UseOnPokemon.add(:ETHER,proc{|item,pokemon,scene,chose|
  2558. move=scene.pbChooseMove(pokemon,_INTL("Restore which move?"))
  2559. if move>=0
  2560. if pbRestorePP(pokemon,move,10)==0
  2561. scene.pbDisplay(_INTL("It won't have any effect."))
  2562. next false
  2563. else
  2564. scene.pbDisplay(_INTL("PP was restored."))
  2565. next true
  2566. end
  2567. end
  2568. next false
  2569. })
  2570.  
  2571. ItemHandlers::UseOnPokemon.copy(:ETHER,:LEPPABERRY)
  2572.  
  2573. ItemHandlers::UseOnPokemon.add(:MAXETHER,proc{|item,pokemon,scene,chose|
  2574. move=scene.pbChooseMove(pokemon,_INTL("Restore which move?"))
  2575. if move>=0
  2576. if pbRestorePP(pokemon,move,pokemon.moves[move].totalpp-pokemon.moves[move].pp)==0
  2577. scene.pbDisplay(_INTL("It won't have any effect."))
  2578. next false
  2579. else
  2580. scene.pbDisplay(_INTL("PP was restored."))
  2581. next true
  2582. end
  2583. end
  2584. next false
  2585. })
  2586.  
  2587. ItemHandlers::UseOnPokemon.add(:ELIXIR,proc{|item,pokemon,scene,chose|
  2588. pprestored=0
  2589. for i in 0...pokemon.moves.length
  2590. pprestored+=pbRestorePP(pokemon,i,10)
  2591. end
  2592. if pprestored==0
  2593. scene.pbDisplay(_INTL("It won't have any effect."))
  2594. next false
  2595. else
  2596. scene.pbDisplay(_INTL("PP was restored."))
  2597. next true
  2598. end
  2599. })
  2600.  
  2601. ItemHandlers::UseOnPokemon.add(:MAXELIXIR,proc{|item,pokemon,scene,chose|
  2602. pprestored=0
  2603. for i in 0...pokemon.moves.length
  2604. pprestored+=pbRestorePP(pokemon,i,pokemon.moves[i].totalpp-pokemon.moves[i].pp)
  2605. end
  2606. if pprestored==0
  2607. scene.pbDisplay(_INTL("It won't have any effect."))
  2608. next false
  2609. else
  2610. scene.pbDisplay(_INTL("PP was restored."))
  2611. next true
  2612. end
  2613. })
  2614.  
  2615. ItemHandlers::UseOnPokemon.add(:PPUP,proc{|item,pokemon,scene,chose|
  2616. move=scene.pbChooseMove(pokemon,_INTL("Boost PP of which move?"))
  2617. if move>=0
  2618. if pokemon.moves[move].totalpp==0 || pokemon.moves[move].ppup>=3
  2619. scene.pbDisplay(_INTL("It won't have any effect."))
  2620. next false
  2621. else
  2622. pokemon.moves[move].ppup+=1
  2623. movename=PBMoves.getName(pokemon.moves[move].id)
  2624. scene.pbDisplay(_INTL("{1}'s PP increased.",movename))
  2625. next true
  2626. end
  2627. end
  2628. })
  2629.  
  2630. ItemHandlers::UseOnPokemon.add(:PPMAX,proc{|item,pokemon,scene,chose|
  2631. move=scene.pbChooseMove(pokemon,_INTL("Boost PP of which move?"))
  2632. if move>=0
  2633. if pokemon.moves[move].totalpp==0 || pokemon.moves[move].ppup>=3
  2634. scene.pbDisplay(_INTL("It won't have any effect."))
  2635. next false
  2636. else
  2637. pokemon.moves[move].ppup=3
  2638. movename=PBMoves.getName(pokemon.moves[move].id)
  2639. scene.pbDisplay(_INTL("{1}'s PP increased.",movename))
  2640. next true
  2641. end
  2642. end
  2643. })
  2644.  
  2645. ItemHandlers::UseOnPokemon.add(:HPUP,proc{|item,pokemon,scene,chose|
  2646. if pbRaiseEffortValues(pokemon,0)==0
  2647. scene.pbDisplay(_INTL("It won't have any effect."))
  2648. next false
  2649. else
  2650. scene.pbRefresh
  2651. scene.pbDisplay(_INTL("{1}'s HP increased.",pokemon.name))
  2652. pokemon.changeHappiness("vitamin")
  2653. next true
  2654. end
  2655. })
  2656.  
  2657. ItemHandlers::UseOnPokemon.add(:PROTEIN,proc{|item,pokemon,scene,chose|
  2658. if pbRaiseEffortValues(pokemon,1)==0
  2659. scene.pbDisplay(_INTL("It won't have any effect."))
  2660. next false
  2661. else
  2662. scene.pbDisplay(_INTL("{1}'s Attack increased.",pokemon.name))
  2663. pokemon.changeHappiness("vitamin")
  2664. next true
  2665. end
  2666. })
  2667.  
  2668. ItemHandlers::UseOnPokemon.add(:IRON,proc{|item,pokemon,scene,chose|
  2669. if pbRaiseEffortValues(pokemon,2)==0
  2670. scene.pbDisplay(_INTL("It won't have any effect."))
  2671. next false
  2672. else
  2673. scene.pbDisplay(_INTL("{1}'s Defense increased.",pokemon.name))
  2674. pokemon.changeHappiness("vitamin")
  2675. next true
  2676. end
  2677. })
  2678.  
  2679. ItemHandlers::UseOnPokemon.add(:CALCIUM,proc{|item,pokemon,scene,chose|
  2680. if pbRaiseEffortValues(pokemon,4)==0
  2681. scene.pbDisplay(_INTL("It won't have any effect."))
  2682. next false
  2683. else
  2684. scene.pbDisplay(_INTL("{1}'s Special Attack increased.",pokemon.name))
  2685. pokemon.changeHappiness("vitamin")
  2686. next true
  2687. end
  2688. })
  2689.  
  2690. ItemHandlers::UseOnPokemon.add(:ZINC,proc{|item,pokemon,scene,chose|
  2691. if pbRaiseEffortValues(pokemon,5)==0
  2692. scene.pbDisplay(_INTL("It won't have any effect."))
  2693. next false
  2694. else
  2695. scene.pbDisplay(_INTL("{1}'s Special Defense increased.",pokemon.name))
  2696. pokemon.changeHappiness("vitamin")
  2697. next true
  2698. end
  2699. })
  2700.  
  2701. ItemHandlers::UseOnPokemon.add(:CARBOS,proc{|item,pokemon,scene,chose|
  2702. if pbRaiseEffortValues(pokemon,3)==0
  2703. scene.pbDisplay(_INTL("It won't have any effect."))
  2704. next false
  2705. else
  2706. scene.pbDisplay(_INTL("{1}'s Speed increased.",pokemon.name))
  2707. pokemon.changeHappiness("vitamin")
  2708. next true
  2709. end
  2710. })
  2711.  
  2712. ItemHandlers::UseOnPokemon.add(:HEALTHWING,proc{|item,pokemon,scene,chose|
  2713. if pbRaiseEffortValues(pokemon,0,1,false)==0
  2714. scene.pbDisplay(_INTL("It won't have any effect."))
  2715. next false
  2716. else
  2717. scene.pbRefresh
  2718. scene.pbDisplay(_INTL("{1}'s HP increased.",pokemon.name))
  2719. pokemon.changeHappiness("vitamin")
  2720. next true
  2721. end
  2722. })
  2723.  
  2724. ItemHandlers::UseOnPokemon.add(:MUSCLEWING,proc{|item,pokemon,scene,chose|
  2725. if pbRaiseEffortValues(pokemon,1,1,false)==0
  2726. scene.pbDisplay(_INTL("It won't have any effect."))
  2727. next false
  2728. else
  2729. scene.pbDisplay(_INTL("{1}'s Attack increased.",pokemon.name))
  2730. pokemon.changeHappiness("vitamin")
  2731. next true
  2732. end
  2733. })
  2734.  
  2735. ItemHandlers::UseOnPokemon.add(:RESISTWING,proc{|item,pokemon,scene,chose|
  2736. if pbRaiseEffortValues(pokemon,2,1,false)==0
  2737. scene.pbDisplay(_INTL("It won't have any effect."))
  2738. next false
  2739. else
  2740. scene.pbDisplay(_INTL("{1}'s Defense increased.",pokemon.name))
  2741. pokemon.changeHappiness("vitamin")
  2742. next true
  2743. end
  2744. })
  2745.  
  2746. ItemHandlers::UseOnPokemon.add(:GENIUSWING,proc{|item,pokemon,scene,chose|
  2747. if pbRaiseEffortValues(pokemon,4,1,false)==0
  2748. scene.pbDisplay(_INTL("It won't have any effect."))
  2749. next false
  2750. else
  2751. scene.pbDisplay(_INTL("{1}'s Special Attack increased.",pokemon.name))
  2752. pokemon.changeHappiness("vitamin")
  2753. next true
  2754. end
  2755. })
  2756.  
  2757. ItemHandlers::UseOnPokemon.add(:CLEVERWING,proc{|item,pokemon,scene,chose|
  2758. if pbRaiseEffortValues(pokemon,5,1,false)==0
  2759. scene.pbDisplay(_INTL("It won't have any effect."))
  2760. next false
  2761. else
  2762. scene.pbDisplay(_INTL("{1}'s Special Defense increased.",pokemon.name))
  2763. pokemon.changeHappiness("vitamin")
  2764. next true
  2765. end
  2766. })
  2767.  
  2768. ItemHandlers::UseOnPokemon.add(:SWIFTWING,proc{|item,pokemon,scene,chose|
  2769. if pbRaiseEffortValues(pokemon,3,1,false)==0
  2770. scene.pbDisplay(_INTL("It won't have any effect."))
  2771. next false
  2772. else
  2773. scene.pbDisplay(_INTL("{1}'s Speed increased.",pokemon.name))
  2774. pokemon.changeHappiness("vitamin")
  2775. next true
  2776. end
  2777. })
  2778.  
  2779. ItemHandlers::UseOnPokemon.add(:RARECANDY,proc{|item,pokemon,scene,chose|
  2780. if pokemon.level>=PBExperience::MAXLEVEL || (pokemon.isShadow? rescue false)
  2781. scene.pbDisplay(_INTL("It won't have any effect."))
  2782. next false
  2783. else
  2784. pbChangeLevel(pokemon,pokemon.level+1,scene)
  2785. scene.pbHardRefresh
  2786. next true
  2787. end
  2788. })
  2789.  
  2790. ItemHandlers::UseOnPokemon.add(:POMEGBERRY,proc{|item,pokemon,scene,chose|
  2791. next pbRaiseHappinessAndLowerEV(pokemon,scene,0,[
  2792. _INTL("{1} adores you!\nThe base HP fell!",pokemon.name),
  2793. _INTL("{1} turned friendly.\nThe base HP can't fall!",pokemon.name),
  2794. _INTL("{1} turned friendly.\nThe base HP fell!",pokemon.name)
  2795. ])
  2796. })
  2797.  
  2798. ItemHandlers::UseOnPokemon.add(:KELPSYBERRY,proc{|item,pokemon,scene,chose|
  2799. next pbRaiseHappinessAndLowerEV(pokemon,scene,1,[
  2800. _INTL("{1} adores you!\nThe base Attack fell!",pokemon.name),
  2801. _INTL("{1} turned friendly.\nThe base Attack can't fall!",pokemon.name),
  2802. _INTL("{1} turned friendly.\nThe base Attack fell!",pokemon.name)
  2803. ])
  2804. })
  2805.  
  2806. ItemHandlers::UseOnPokemon.add(:QUALOTBERRY,proc{|item,pokemon,scene,chose|
  2807. next pbRaiseHappinessAndLowerEV(pokemon,scene,2,[
  2808. _INTL("{1} adores you!\nThe base Defense fell!",pokemon.name),
  2809. _INTL("{1} turned friendly.\nThe base Defense can't fall!",pokemon.name),
  2810. _INTL("{1} turned friendly.\nThe base Defense fell!",pokemon.name)
  2811. ])
  2812. })
  2813.  
  2814. ItemHandlers::UseOnPokemon.add(:HONDEWBERRY,proc{|item,pokemon,scene,chose|
  2815. next pbRaiseHappinessAndLowerEV(pokemon,scene,4,[
  2816. _INTL("{1} adores you!\nThe base Special Attack fell!",pokemon.name),
  2817. _INTL("{1} turned friendly.\nThe base Special Attack can't fall!",pokemon.name),
  2818. _INTL("{1} turned friendly.\nThe base Special Attack fell!",pokemon.name)
  2819. ])
  2820. })
  2821.  
  2822. ItemHandlers::UseOnPokemon.add(:GREPABERRY,proc{|item,pokemon,scene,chose|
  2823. next pbRaiseHappinessAndLowerEV(pokemon,scene,5,[
  2824. _INTL("{1} adores you!\nThe base Special Defense fell!",pokemon.name),
  2825. _INTL("{1} turned friendly.\nThe base Special Defense can't fall!",pokemon.name),
  2826. _INTL("{1} turned friendly.\nThe base Special Defense fell!",pokemon.name)
  2827. ])
  2828. })
  2829.  
  2830. ItemHandlers::UseOnPokemon.add(:TAMATOBERRY,proc{|item,pokemon,scene,chose|
  2831. next pbRaiseHappinessAndLowerEV(pokemon,scene,3,[
  2832. _INTL("{1} adores you!\nThe base Speed fell!",pokemon.name),
  2833. _INTL("{1} turned friendly.\nThe base Speed can't fall!",pokemon.name),
  2834. _INTL("{1} turned friendly.\nThe base Speed fell!",pokemon.name)
  2835. ])
  2836. })
  2837. ItemHandlers::UseOnPokemon.add(:GRACIDEA,proc{|item,pokemon,scene,chose|
  2838. if isConst?(pokemon.species,PBSpecies,:SHAYMIN) && pokemon.form==0 &&
  2839. pokemon.hp>=0 && pokemon.status!=PBStatuses::FROZEN &&
  2840. !PBDayNight.isNight?(pbGetTimeNow)
  2841. pokemon.form=1
  2842. scene.pbRefresh
  2843. scene.pbDisplay(_INTL("{1} changed Forme!",pokemon.name))
  2844. next true
  2845. else
  2846. scene.pbDisplay(_INTL("It had no effect."))
  2847. next false
  2848. end
  2849. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement