Advertisement
Diego-Mertens

para vasquinho

Jun 26th, 2019
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 63.38 KB | None | 0 0
  1. class PokeSelectionPlaceholderSprite < SpriteWrapper
  2. attr_accessor :text
  3.  
  4. def initialize(pokemon,index,viewport=nil)
  5. super(viewport)
  6. xvalues=[0,256,0,256,0,256]
  7. yvalues=[50,50,148,148,246,246]
  8. @pbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelBlank")
  9. self.bitmap=@pbitmap.bitmap
  10. self.x=xvalues[index]
  11. self.y=yvalues[index]
  12. @text=nil
  13. end
  14.  
  15. def update
  16. super
  17. @pbitmap.update
  18. self.bitmap=@pbitmap.bitmap
  19. end
  20.  
  21. def selected
  22. return false
  23. end
  24.  
  25. def selected=(value)
  26. end
  27.  
  28. def preselected
  29. return false
  30. end
  31.  
  32. def preselected=(value)
  33. end
  34.  
  35. def switching
  36. return false
  37. end
  38.  
  39. def switching=(value)
  40. end
  41.  
  42. def refresh
  43. end
  44.  
  45. def dispose
  46. @pbitmap.dispose
  47. super
  48. end
  49. end
  50.  
  51.  
  52.  
  53. class PokeSelectionConfirmCancelSprite < SpriteWrapper
  54. attr_reader :selected
  55.  
  56. def initialize(text,x,y,narrowbox=false,viewport=nil)
  57. super(viewport)
  58. @refreshBitmap=true
  59. @bgsprite=ChangelingSprite.new(0,0,viewport)
  60. if narrowbox
  61. @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/partyCancelNarrow")
  62. @bgsprite.addBitmap("selbitmap","Graphics/Pictures/partyCancelSelNarrow")
  63. else
  64. @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/partyCancel")
  65. @bgsprite.addBitmap("selbitmap","Graphics/Pictures/partyCancelSel")
  66. end
  67. @bgsprite.changeBitmap("deselbitmap")
  68. @overlaysprite=BitmapSprite.new(@bgsprite.bitmap.width,@bgsprite.bitmap.height,viewport)
  69. @yoffset=8
  70. ynarrow=narrowbox ? -6 : 0
  71. pbSetSystemFont(@overlaysprite.bitmap)
  72. textpos=[[text,56,8+ynarrow,2,Color.new(248,248,248),Color.new(40,40,40)]]
  73. pbDrawTextPositions(@overlaysprite.bitmap,textpos)
  74. @overlaysprite.z=self.z+1 # For compatibility with RGSS2
  75. self.x=x
  76. self.y=y
  77. end
  78.  
  79. def dispose
  80. @overlaysprite.bitmap.dispose
  81. @overlaysprite.dispose
  82. @bgsprite.dispose
  83. super
  84. end
  85.  
  86. def viewport=(value)
  87. super
  88. refresh
  89. end
  90.  
  91. def color=(value)
  92. super
  93. refresh
  94. end
  95.  
  96. def x=(value)
  97. super
  98. refresh
  99. end
  100.  
  101. def y=(value)
  102. super
  103. refresh
  104. end
  105.  
  106. def selected=(value)
  107. @selected=value
  108. refresh
  109. end
  110.  
  111. def refresh
  112. @bgsprite.changeBitmap((@selected) ? "selbitmap" : "deselbitmap")
  113. if @bgsprite && !@bgsprite.disposed?
  114. @bgsprite.x=self.x
  115. @bgsprite.y=self.y
  116. @overlaysprite.x=self.x
  117. @overlaysprite.y=self.y
  118. @bgsprite.color=self.color
  119. @overlaysprite.color=self.color
  120. end
  121. end
  122. end
  123.  
  124.  
  125.  
  126. class PokeSelectionCancelSprite < PokeSelectionConfirmCancelSprite
  127. def initialize(viewport=nil)
  128. super(_INTL("SALIR"),398,328,false,viewport)
  129. end
  130. end
  131.  
  132.  
  133.  
  134. class PokeSelectionConfirmSprite < PokeSelectionConfirmCancelSprite
  135. def initialize(viewport=nil)
  136. super(_INTL("CONFIRMAR"),398,308,true,viewport)
  137. end
  138. end
  139.  
  140.  
  141.  
  142. class PokeSelectionCancelSprite2 < PokeSelectionConfirmCancelSprite
  143. def initialize(viewport=nil)
  144. super(_INTL("SALIR"),398,346,true,viewport)
  145. end
  146. end
  147.  
  148.  
  149.  
  150. class ChangelingSprite < SpriteWrapper
  151. def initialize(x=0,y=0,viewport=nil)
  152. super(viewport)
  153. self.x=x
  154. self.y=y
  155. @bitmaps={}
  156. @currentBitmap=nil
  157. end
  158.  
  159. def addBitmap(key,path)
  160. if @bitmaps[key]
  161. @bitmaps[key].dispose
  162. end
  163. @bitmaps[key]=AnimatedBitmap.new(path)
  164. end
  165.  
  166. def changeBitmap(key)
  167. @currentBitmap=@bitmaps[key]
  168. self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  169. end
  170.  
  171. def dispose
  172. return if disposed?
  173. for bm in @bitmaps.values; bm.dispose; end
  174. @bitmaps.clear
  175. super
  176. end
  177.  
  178. def update
  179. return if disposed?
  180. for bm in @bitmaps.values; bm.update; end
  181. self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  182. end
  183. end
  184.  
  185.  
  186.  
  187. class PokeSelectionSprite < SpriteWrapper
  188. attr_reader :selected
  189. attr_reader :preselected
  190. attr_reader :switching
  191. attr_reader :pokemon
  192. attr_reader :active
  193. attr_accessor :text
  194.  
  195. def initialize(pokemon,index,viewport=nil)
  196. super(viewport)
  197. @pokemon=pokemon
  198. active=(index==0)
  199. @active=active
  200. if active # Rounded panel
  201. @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRound")
  202. @selbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSel")
  203. @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundFnt")
  204. @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSelFnt")
  205. @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSwap")
  206. @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSelSwap")
  207. else # Rectangular panel
  208. @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRect")
  209. @selbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSel")
  210. @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectFnt")
  211. @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSelFnt")
  212. @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSwap")
  213. @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSelSwap")
  214. end
  215. @spriteXOffset=28
  216. @spriteYOffset=0
  217. @pokeballXOffset=10
  218. @pokeballYOffset=0
  219. @pokenameX=96
  220. @pokenameY=16
  221. @levelX=20
  222. @levelY=62
  223. @statusX=80
  224. @statusY=68
  225. @genderX=224
  226. @genderY=16
  227. @hpX=224
  228. @hpY=60
  229. @hpbarX=96
  230. @hpbarY=50
  231. @gaugeX=128
  232. @gaugeY=52
  233. @itemXOffset=62
  234. @itemYOffset=48
  235. @annotX=96
  236. @annotY=58
  237. xvalues=[0,256,0,256,0,256]
  238. yvalues=[50,50,148,148,246,246]
  239. @text=nil
  240. @statuses=AnimatedBitmap.new(_INTL("Graphics/Pictures/statuses"))
  241. @hpbar=AnimatedBitmap.new("Graphics/Pictures/partyHP")
  242. @hpbarfnt=AnimatedBitmap.new("Graphics/Pictures/partyHPfnt")
  243. @hpbarswap=AnimatedBitmap.new("Graphics/Pictures/partyHPswap")
  244. @pokeballsprite=ChangelingSprite.new(0,0,viewport)
  245. @pokeballsprite.addBitmap("pokeballdesel","Graphics/Pictures/partyBall")
  246. @pokeballsprite.addBitmap("pokeballsel","Graphics/Pictures/partyBallSel")
  247. @pkmnsprite=PokemonIconSprite.new(pokemon,viewport)
  248. @pkmnsprite.active=active
  249. @itemsprite=ChangelingSprite.new(0,0,viewport)
  250. @itemsprite.addBitmap("itembitmap","Graphics/Pictures/item")
  251. @itemsprite.addBitmap("mailbitmap","Graphics/Pictures/mail")
  252. @spriteX=xvalues[index]
  253. @spriteY=yvalues[index]
  254. @refreshBitmap=true
  255. @refreshing=false
  256. @preselected=false
  257. @switching=false
  258. @pkmnsprite.z=self.z+2 # For compatibility with RGSS2
  259. @itemsprite.z=self.z+3 # For compatibility with RGSS2
  260. @pokeballsprite.z=self.z+1 # For compatibility with RGSS2
  261. self.selected=false
  262. self.x=@spriteX
  263. self.y=@spriteY
  264. refresh
  265. end
  266.  
  267. def dispose
  268. @selbitmap.dispose
  269. @statuses.dispose
  270. @hpbar.dispose
  271. @deselbitmap.dispose
  272. @itemsprite.dispose
  273. @pkmnsprite.dispose
  274. @pokeballsprite.dispose
  275. self.bitmap.dispose
  276. super
  277. end
  278.  
  279. def selected=(value)
  280. @selected=value
  281. @refreshBitmap=true
  282. refresh
  283. end
  284.  
  285. def text=(value)
  286. @text=value
  287. @refreshBitmap=true
  288. refresh
  289. end
  290.  
  291. def pokemon=(value)
  292. @pokemon=value
  293. if @pkmnsprite && !@pkmnsprite.disposed?
  294. @pkmnsprite.pokemon=value
  295. end
  296. @refreshBitmap=true
  297. refresh
  298. end
  299.  
  300. def preselected=(value)
  301. if value!=@preselected
  302. @preselected=value
  303. refresh
  304. end
  305. end
  306.  
  307. def switching=(value)
  308. if value!=@switching
  309. @switching=value
  310. refresh
  311. end
  312. end
  313.  
  314. def color=(value)
  315. super
  316. refresh
  317. end
  318.  
  319. def x=(value)
  320. super
  321. refresh
  322. end
  323.  
  324. def y=(value)
  325. super
  326. refresh
  327. end
  328.  
  329. def hp
  330. return @pokemon.hp
  331. end
  332.  
  333. def refresh
  334. return if @refreshing
  335. return if disposed?
  336. @refreshing=true
  337. if !self.bitmap || self.bitmap.disposed?
  338. self.bitmap=BitmapWrapper.new(@selbitmap.width,@selbitmap.height)
  339. end
  340. if @pkmnsprite && !@pkmnsprite.disposed?
  341. @pkmnsprite.x=self.x+@spriteXOffset
  342. @pkmnsprite.y=self.y+@spriteYOffset
  343. @pkmnsprite.color=pbSrcOver(@pkmnsprite.color,self.color)
  344. @pkmnsprite.selected=self.selected
  345. end
  346. if @pokeballsprite && !@pokeballsprite.disposed?
  347. @pokeballsprite.x=self.x+@pokeballXOffset
  348. @pokeballsprite.y=self.y+@pokeballYOffset
  349. @pokeballsprite.color=self.color
  350. @pokeballsprite.changeBitmap(self.selected ? "pokeballsel" : "pokeballdesel")
  351. end
  352. if @itemsprite && !@itemsprite.disposed?
  353. @itemsprite.visible=(@pokemon.item>0)
  354. if @itemsprite.visible
  355. @itemsprite.changeBitmap(@pokemon.mail ? "mailbitmap" : "itembitmap")
  356. @itemsprite.x=self.x+@itemXOffset
  357. @itemsprite.y=self.y+@itemYOffset
  358. @itemsprite.color=self.color
  359. end
  360. end
  361. if @refreshBitmap
  362. @refreshBitmap=false
  363. self.bitmap.clear if self.bitmap
  364. if self.selected
  365. if self.preselected
  366. self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  367. self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  368. elsif @switching
  369. self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  370. elsif @pokemon.hp<=0 && !@pokemon.isEgg?
  371. self.bitmap.blt(0,0,@selfntbitmap.bitmap,Rect.new(0,0,@selfntbitmap.width,@selfntbitmap.height))
  372. else
  373. self.bitmap.blt(0,0,@selbitmap.bitmap,Rect.new(0,0,@selbitmap.width,@selbitmap.height))
  374. end
  375. else
  376. if self.preselected
  377. self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  378. elsif @pokemon.hp<=0 && !@pokemon.isEgg?
  379. self.bitmap.blt(0,0,@deselfntbitmap.bitmap,Rect.new(0,0,@deselfntbitmap.width,@deselfntbitmap.height))
  380. else
  381. self.bitmap.blt(0,0,@deselbitmap.bitmap,Rect.new(0,0,@deselbitmap.width,@deselbitmap.height))
  382. end
  383. end
  384. base=Color.new(248,248,248)
  385. shadow=Color.new(40,40,40)
  386. pbSetSystemFont(self.bitmap)
  387. pokename=@pokemon.name
  388. textpos=[[pokename,@pokenameX,@pokenameY,0,base,shadow]]
  389. if !@pokemon.isEgg?
  390. if !@text || @text.length==0
  391. tothp=@pokemon.totalhp
  392. textpos.push([_ISPRINTF("{1: 3d}/{2: 3d}",@pokemon.hp,tothp),
  393. @hpX,@hpY,1,base,shadow])
  394. barbg=(@pokemon.hp<=0) ? @hpbarfnt : @hpbar
  395. barbg=(self.preselected || (self.selected && @switching)) ? @hpbarswap : barbg
  396. self.bitmap.blt(@hpbarX,@hpbarY,barbg.bitmap,Rect.new(0,0,@hpbar.width,@hpbar.height))
  397. hpgauge=@pokemon.totalhp==0 ? 0 : (self.hp*96/@pokemon.totalhp)
  398. hpgauge=1 if hpgauge==0 && self.hp>0
  399. hpzone=0
  400. hpzone=1 if self.hp<=(@pokemon.totalhp/2).floor
  401. hpzone=2 if self.hp<=(@pokemon.totalhp/4).floor
  402. hpcolors=[
  403. Color.new(24,192,32),Color.new(96,248,96), # Green
  404. Color.new(232,168,0),Color.new(248,216,0), # Orange
  405. Color.new(248,72,56),Color.new(248,152,152) # Red
  406. ]
  407. # fill with HP color
  408. self.bitmap.fill_rect(@gaugeX,@gaugeY,hpgauge,2,hpcolors[hpzone*2])
  409. self.bitmap.fill_rect(@gaugeX,@gaugeY+2,hpgauge,4,hpcolors[hpzone*2+1])
  410. self.bitmap.fill_rect(@gaugeX,@gaugeY+6,hpgauge,2,hpcolors[hpzone*2])
  411. if @pokemon.hp==0 || @pokemon.status>0
  412. status=(@pokemon.hp==0) ? 5 : @pokemon.status-1
  413. statusrect=Rect.new(0,16*status,44,16)
  414. self.bitmap.blt(@statusX,@statusY,@statuses.bitmap,statusrect)
  415. end
  416. end
  417. if @pokemon.isMale?
  418. textpos.push([_INTL("♂"),@genderX,@genderY,0,Color.new(0,112,248),Color.new(120,184,232)])
  419. elsif @pokemon.isFemale?
  420. textpos.push([_INTL("♀"),@genderX,@genderY,0,Color.new(232,32,16),Color.new(248,168,184)])
  421. end
  422. end
  423. pbDrawTextPositions(self.bitmap,textpos)
  424. if !@pokemon.isEgg?
  425. pbSetSmallFont(self.bitmap)
  426. leveltext=[([_INTL("Nv.{1}",@pokemon.level),@levelX,@levelY,0,base,shadow])]
  427. pbDrawTextPositions(self.bitmap,leveltext)
  428. end
  429. if @text && @text.length>0
  430. pbSetSystemFont(self.bitmap)
  431. annotation=[[@text,@annotX,@annotY,0,base,shadow]]
  432. pbDrawTextPositions(self.bitmap,annotation)
  433. end
  434. end
  435. @refreshing=false
  436. end
  437.  
  438. def update
  439. super
  440. @pokeballsprite.update if @pokeballsprite && !@pokeballsprite.disposed?
  441. @itemsprite.update if @itemsprite && !@itemsprite.disposed?
  442. if @pkmnsprite && !@pkmnsprite.disposed?
  443. @pkmnsprite.update
  444. end
  445. end
  446. end
  447.  
  448.  
  449. ##############################
  450.  
  451.  
  452. class PokemonScreen_Scene
  453. def pbShowCommands(helptext,commands,index=0)
  454. ret=-1
  455. helpwindow=@sprites["helpwindow"]
  456. helpwindow.visible=true
  457. using(cmdwindow=Window_CommandPokemon.new(commands)) {
  458. cmdwindow.z=@viewport.z+1
  459. cmdwindow.index=index
  460. pbBottomRight(cmdwindow)
  461. helpwindow.text=""
  462. helpwindow.resizeHeightToFit(helptext,Graphics.width-cmdwindow.width)
  463. helpwindow.text=helptext
  464. pbBottomLeft(helpwindow)
  465. loop do
  466. Graphics.update
  467. Input.update
  468. cmdwindow.update
  469. self.update
  470. if Input.trigger?(Input::B)
  471. pbPlayCancelSE()
  472. ret=-1
  473. break
  474. end
  475. if Input.trigger?(Input::C)
  476. pbPlayDecisionSE()
  477. ret=cmdwindow.index
  478. break
  479. end
  480. end
  481. }
  482. return ret
  483. end
  484.  
  485. def update
  486. pbUpdateSpriteHash(@sprites)
  487. end
  488.  
  489. def pbSetHelpText(helptext)
  490. helpwindow=@sprites["helpwindow"]
  491. pbBottomLeftLines(helpwindow,1)
  492. helpwindow.text=helptext
  493. helpwindow.width=398
  494. helpwindow.visible=true
  495. end
  496.  
  497. def pbStartScene(party,starthelptext,annotations=nil,multiselect=false)
  498. @sprites={}
  499. @party=party
  500. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  501. @viewport.z=99999
  502. @multiselect=multiselect
  503. addBackgroundPlane(@sprites,"partybg","partybg",@viewport)
  504. @sprites["messagebox"]=Window_AdvancedTextPokemon.new("")
  505. @sprites["helpwindow"]=Window_UnformattedTextPokemon.new(starthelptext)
  506. @sprites["messagebox"].viewport=@viewport
  507. @sprites["messagebox"].visible=false
  508. @sprites["messagebox"].letterbyletter=true
  509. @sprites["helpwindow"].viewport=@viewport
  510. @sprites["helpwindow"].visible=true
  511. pbBottomLeftLines(@sprites["messagebox"],2)
  512. pbBottomLeftLines(@sprites["helpwindow"],1)
  513. pbSetHelpText(starthelptext)
  514. # Add party Pokémon sprites
  515. for i in 0...6
  516. if @party[i]
  517. @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  518. @party[i],i,@viewport)
  519. else
  520. @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  521. @party[i],i,@viewport)
  522. end
  523. if annotations
  524. @sprites["pokemon#{i}"].text=annotations[i]
  525. end
  526. end
  527. if @multiselect
  528. @sprites["pokemon6"]=PokeSelectionConfirmSprite.new(@viewport)
  529. @sprites["pokemon7"]=PokeSelectionCancelSprite2.new(@viewport)
  530. else
  531. @sprites["pokemon6"]=PokeSelectionCancelSprite.new(@viewport)
  532. end
  533. # Select first Pokémon
  534. @activecmd=0
  535. @sprites["pokemon0"].selected=true
  536. pbFadeInAndShow(@sprites) { update }
  537. end
  538.  
  539. def pbEndScene
  540. pbFadeOutAndHide(@sprites) { update }
  541. pbDisposeSpriteHash(@sprites)
  542. @viewport.dispose
  543. end
  544.  
  545. def pbChangeSelection(key,currentsel)
  546. numsprites=(@multiselect) ? 8 : 7
  547. case key
  548. when Input::LEFT
  549. begin
  550. currentsel-=1
  551. end while currentsel>0 && currentsel<@party.length && !@party[currentsel]
  552. if currentsel>=@party.length && currentsel<6
  553. currentsel=@party.length-1
  554. end
  555. currentsel=numsprites-1 if currentsel<0
  556. when Input::RIGHT
  557. begin
  558. currentsel+=1
  559. end while currentsel<@party.length && !@party[currentsel]
  560. if currentsel==@party.length
  561. currentsel=6
  562. elsif currentsel==numsprites
  563. currentsel=0
  564. end
  565. when Input::UP
  566. if currentsel>=6
  567. begin
  568. currentsel-=1
  569. end while currentsel>0 && !@party[currentsel]
  570. else
  571. begin
  572. currentsel-=2
  573. end while currentsel>0 && !@party[currentsel]
  574. end
  575. if currentsel>=@party.length && currentsel<6
  576. currentsel=@party.length-1
  577. end
  578. currentsel=numsprites-1 if currentsel<0
  579. when Input::DOWN
  580. if currentsel>=5
  581. currentsel+=1
  582. else
  583. currentsel+=2
  584. currentsel=6 if currentsel<6 && !@party[currentsel]
  585. end
  586. if currentsel>=@party.length && currentsel<6
  587. currentsel=6
  588. elsif currentsel>=numsprites
  589. currentsel=0
  590. end
  591. end
  592. return currentsel
  593. end
  594.  
  595. def pbRefresh
  596. for i in 0...6
  597. sprite=@sprites["pokemon#{i}"]
  598. if sprite
  599. if sprite.is_a?(PokeSelectionSprite)
  600. sprite.pokemon=sprite.pokemon
  601. else
  602. sprite.refresh
  603. end
  604. end
  605. end
  606. end
  607.  
  608. def pbRefreshSingle(i)
  609. sprite=@sprites["pokemon#{i}"]
  610. if sprite
  611. if sprite.is_a?(PokeSelectionSprite)
  612. sprite.pokemon=sprite.pokemon
  613. else
  614. sprite.refresh
  615. end
  616. end
  617. end
  618.  
  619. def pbHardRefresh
  620. oldtext=[]
  621. lastselected=-1
  622. for i in 0...6
  623. oldtext.push(@sprites["pokemon#{i}"].text)
  624. lastselected=i if @sprites["pokemon#{i}"].selected
  625. @sprites["pokemon#{i}"].dispose
  626. end
  627. lastselected=@party.length-1 if lastselected>=@party.length
  628. lastselected=0 if lastselected<0
  629. for i in 0...6
  630. if @party[i]
  631. @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  632. @party[i],i,@viewport)
  633. else
  634. @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  635. @party[i],i,@viewport)
  636. end
  637. @sprites["pokemon#{i}"].text=oldtext[i]
  638. end
  639. pbSelect(lastselected)
  640. end
  641.  
  642. def pbPreSelect(pkmn)
  643. @activecmd=pkmn
  644. end
  645.  
  646. def pbChoosePokemon(switching=false,initialsel=-1)
  647. for i in 0...6
  648. @sprites["pokemon#{i}"].preselected=(switching && i==@activecmd)
  649. @sprites["pokemon#{i}"].switching=switching
  650. end
  651. @activecmd=initialsel if initialsel>=0
  652. pbRefresh
  653. loop do
  654. Graphics.update
  655. Input.update
  656. self.update
  657. oldsel=@activecmd
  658. key=-1
  659. key=Input::DOWN if Input.repeat?(Input::DOWN)
  660. key=Input::RIGHT if Input.repeat?(Input::RIGHT)
  661. key=Input::LEFT if Input.repeat?(Input::LEFT)
  662. key=Input::UP if Input.repeat?(Input::UP)
  663. if key>=0
  664. @activecmd=pbChangeSelection(key,@activecmd)
  665. end
  666. if @activecmd!=oldsel # Changing selection
  667. pbPlayCursorSE()
  668. numsprites=(@multiselect) ? 8 : 7
  669. for i in 0...numsprites
  670. @sprites["pokemon#{i}"].selected=(i==@activecmd)
  671. end
  672. end
  673. if Input.trigger?(Input::B)
  674. return -1
  675. end
  676. if Input.trigger?(Input::C)
  677. pbPlayDecisionSE()
  678. cancelsprite=(@multiselect) ? 7 : 6
  679. return (@activecmd==cancelsprite) ? -1 : @activecmd
  680. end
  681. end
  682. end
  683.  
  684. def pbSelect(item)
  685. @activecmd=item
  686. numsprites=(@multiselect) ? 8 : 7
  687. for i in 0...numsprites
  688. @sprites["pokemon#{i}"].selected=(i==@activecmd)
  689. end
  690. end
  691.  
  692. def pbDisplay(text)
  693. @sprites["messagebox"].text=text
  694. @sprites["messagebox"].visible=true
  695. @sprites["helpwindow"].visible=false
  696. pbPlayDecisionSE()
  697. loop do
  698. Graphics.update
  699. Input.update
  700. self.update
  701. if @sprites["messagebox"].busy? && Input.trigger?(Input::C)
  702. pbPlayDecisionSE() if @sprites["messagebox"].pausing?
  703. @sprites["messagebox"].resume
  704. end
  705. if !@sprites["messagebox"].busy? &&
  706. (Input.trigger?(Input::C) || Input.trigger?(Input::B))
  707. break
  708. end
  709. end
  710. @sprites["messagebox"].visible=false
  711. @sprites["helpwindow"].visible=true
  712. end
  713.  
  714. def pbSwitchBegin(oldid,newid)
  715. oldsprite=@sprites["pokemon#{oldid}"]
  716. newsprite=@sprites["pokemon#{newid}"]
  717. 22.times do
  718. oldsprite.x+=(oldid&1)==0 ? -12 : 12
  719. newsprite.x+=(newid&1)==0 ? -12 : 12
  720. Graphics.update
  721. Input.update
  722. self.update
  723. end
  724. end
  725.  
  726. def pbSwitchEnd(oldid,newid)
  727. oldsprite=@sprites["pokemon#{oldid}"]
  728. newsprite=@sprites["pokemon#{newid}"]
  729. oldsprite.pokemon=@party[oldid]
  730. newsprite.pokemon=@party[newid]
  731. 22.times do
  732. oldsprite.x-=(oldid&1)==0 ? -12 : 12
  733. newsprite.x-=(newid&1)==0 ? -12 : 12
  734. Graphics.update
  735. Input.update
  736. self.update
  737. end
  738. for i in 0...6
  739. @sprites["pokemon#{i}"].preselected=false
  740. @sprites["pokemon#{i}"].switching=false
  741. end
  742. pbRefresh
  743. end
  744.  
  745. def pbDisplayConfirm(text)
  746. ret=-1
  747. @sprites["messagebox"].text=text
  748. @sprites["messagebox"].visible=true
  749. @sprites["helpwindow"].visible=false
  750. using(cmdwindow=Window_CommandPokemon.new([_INTL("Si"),_INTL("No")])){
  751. cmdwindow.z=@viewport.z+1
  752. cmdwindow.visible=false
  753. pbBottomRight(cmdwindow)
  754. cmdwindow.y-=@sprites["messagebox"].height
  755. loop do
  756. Graphics.update
  757. Input.update
  758. cmdwindow.visible=true if !@sprites["messagebox"].busy?
  759. cmdwindow.update
  760. self.update
  761. if Input.trigger?(Input::B) && !@sprites["messagebox"].busy?
  762. ret=false
  763. break
  764. end
  765. if Input.trigger?(Input::C) && @sprites["messagebox"].resume && !@sprites["messagebox"].busy?
  766. ret=(cmdwindow.index==0)
  767. break
  768. end
  769. end
  770. }
  771. @sprites["messagebox"].visible=false
  772. @sprites["helpwindow"].visible=true
  773. return ret
  774. end
  775.  
  776. def pbAnnotate(annot)
  777. for i in 0...6
  778. if annot
  779. @sprites["pokemon#{i}"].text=annot[i]
  780. else
  781. @sprites["pokemon#{i}"].text=nil
  782. end
  783. end
  784. end
  785.  
  786. def pbSummary(pkmnid)
  787. oldsprites=pbFadeOutAndHide(@sprites)
  788. scene=PokemonSummaryScene.new
  789. screen=PokemonSummary.new(scene)
  790. screen.pbStartScreen(@party,pkmnid)
  791. pbFadeInAndShow(@sprites,oldsprites)
  792. end
  793.  
  794. def pbChooseItem(bag)
  795. oldsprites=pbFadeOutAndHide(@sprites)
  796. @sprites["helpwindow"].visible=false
  797. @sprites["messagebox"].visible=false
  798. scene=PokemonBag_Scene.new
  799. screen=PokemonBagScreen.new(scene,bag)
  800. ret=screen.pbGiveItemScreen
  801. pbFadeInAndShow(@sprites,oldsprites)
  802. return ret
  803. end
  804.  
  805. def pbUseItem(bag,pokemon)
  806. oldsprites=pbFadeOutAndHide(@sprites)
  807. @sprites["helpwindow"].visible=false
  808. @sprites["messagebox"].visible=false
  809. scene=PokemonBag_Scene.new
  810. screen=PokemonBagScreen.new(scene,bag)
  811. ret=screen.pbUseItemScreen(pokemon)
  812. pbFadeInAndShow(@sprites,oldsprites)
  813. return ret
  814. end
  815.  
  816. def pbMessageFreeText(text,startMsg,maxlength)
  817. return Kernel.pbMessageFreeText(
  818. _INTL("Ingrese un mensaje (máx. {1} caracteres).",maxlength),
  819. _INTL("{1}",startMsg),false,maxlength,Graphics.width) { update }
  820. end
  821. end
  822.  
  823.  
  824. ######################################
  825.  
  826.  
  827. class PokemonScreen
  828. def initialize(scene,party)
  829. @party=party
  830. @scene=scene
  831. end
  832.  
  833. def pbHardRefresh
  834. @scene.pbHardRefresh
  835. end
  836.  
  837. def pbRefresh
  838. @scene.pbRefresh
  839. end
  840.  
  841. def pbRefreshSingle(i)
  842. @scene.pbRefreshSingle(i)
  843. end
  844.  
  845. def pbDisplay(text)
  846. @scene.pbDisplay(text)
  847. end
  848.  
  849. def pbConfirm(text)
  850. return @scene.pbDisplayConfirm(text)
  851. end
  852.  
  853. def pbSwitch(oldid,newid)
  854. if oldid!=newid
  855. @scene.pbSwitchBegin(oldid,newid)
  856. tmp=@party[oldid]
  857. @party[oldid]=@party[newid]
  858. @party[newid]=tmp
  859. @scene.pbSwitchEnd(oldid,newid)
  860. end
  861. end
  862.  
  863. def pbMailScreen(item,pkmn,pkmnid)
  864. message=""
  865. loop do
  866. message=@scene.pbMessageFreeText(
  867. _INTL("Ingresa un mensaje (máx. de 256 caracteres)."),"",256)
  868. if message!=""
  869. # Store mail if a message was written
  870. poke1=poke2=poke3=nil
  871. if $Trainer.party[pkmnid+2]
  872. p=$Trainer.party[pkmnid+2]
  873. poke1=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  874. poke1.push(true) if p.isEgg?
  875. end
  876. if $Trainer.party[pkmnid+1]
  877. p=$Trainer.party[pkmnid+1]
  878. poke2=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  879. poke2.push(true) if p.isEgg?
  880. end
  881. poke3=[pkmn.species,pkmn.gender,pkmn.isShiny?,(pkmn.form rescue 0),(pkmn.isShadow? rescue false)]
  882. poke3.push(true) if pkmn.isEgg?
  883. pbStoreMail(pkmn,item,message,poke1,poke2,poke3)
  884. return true
  885. else
  886. return false if pbConfirm(_INTL("¿Quieres dejar al Pokémon sin la carta?"))
  887. end
  888. end
  889. end
  890.  
  891. def pbTakeMail(pkmn)
  892. if !pkmn.hasItem?
  893. pbDisplay(_INTL("{1} no está llevando nada.",pkmn.name))
  894. elsif !$PokemonBag.pbCanStore?(pkmn.item)
  895. pbDisplay(_INTL("La mochila está llena. No se puede le puede quitar el objeto al Pokémon."))
  896. elsif pkmn.mail
  897. if pbConfirm(_INTL("¿Quieres enviar la carta a tu PC?"))
  898. if !pbMoveToMailbox(pkmn)
  899. pbDisplay(_INTL("El buzón de la PC está lleno."))
  900. else
  901. pbDisplay(_INTL("La carta fue enviada a tu PC."))
  902. pkmn.setItem(0)
  903. end
  904. elsif pbConfirm(_INTL("Si le quitas la carta, perderás el mensaje. ¿Estás de acuerdo?"))
  905. pbDisplay(_INTL("Se ha quitado la carta al Pokémon."))
  906. $PokemonBag.pbStoreItem(pkmn.item)
  907. pkmn.setItem(0)
  908. pkmn.mail=nil
  909. end
  910. else
  911. $PokemonBag.pbStoreItem(pkmn.item)
  912. itemname=PBItems.getName(pkmn.item)
  913. pbDisplay(_INTL("Recibiste {1} de {2}.",itemname,pkmn.name))
  914. pkmn.setItem(0)
  915. end
  916. end
  917.  
  918. def pbGiveMail(item,pkmn,pkmnid=0)
  919. thisitemname=PBItems.getName(item)
  920. if pkmn.isEgg?
  921. pbDisplay(_INTL("Los huevos no pueden llevar objetos."))
  922. return false
  923. elsif pkmn.mail
  924. pbDisplay(_INTL("Quitar la carta de {1} antes de darle otro objeto.",pkmn.name))
  925. return false
  926. end
  927. if pkmn.item!=0
  928. itemname=PBItems.getName(pkmn.item)
  929. pbDisplay(_INTL("¡{1} ya lleva una unidad de {2}.\1",pkmn.name,itemname))
  930. if pbConfirm(_INTL("¿Quieres cambiar un objeto por el otro?"))
  931. $PokemonBag.pbDeleteItem(item)
  932. if !$PokemonBag.pbStoreItem(pkmn.item)
  933. if !$PokemonBag.pbStoreItem(item) # Compensate
  934. raise _INTL("No se puede recuperar objeto descartado de la mochila")
  935. end
  936. pbDisplay(_INTL("La Mochila está llena. No se puede quitar el objeto del Pokémon."))
  937. else
  938. if pbIsMail?(item)
  939. if pbMailScreen(item,pkmn,pkmnid)
  940. pkmn.setItem(item)
  941. pbDisplay(_INTL("¡Se ha sustituido {1} por {2}!",itemname,thisitemname))
  942. return true
  943. else
  944. if !$PokemonBag.pbStoreItem(item) # Compensate
  945. raise _INTL("No se puede recuperar objeto descartado de la mochila.")
  946. end
  947. end
  948. else
  949. pkmn.setItem(item)
  950. pbDisplay(_INTL("¡Se ha sustituido {1} por {2}!",itemname,thisitemname))
  951. return true
  952. end
  953. end
  954. end
  955. else
  956. if !pbIsMail?(item) || pbMailScreen(item,pkmn,pkmnid) # Open the mail screen if necessary
  957. $PokemonBag.pbDeleteItem(item)
  958. pkmn.setItem(item)
  959. pbDisplay(_INTL("¡{1} lleva ahora {2}!",pkmn.name,thisitemname))
  960. return true
  961. end
  962. end
  963. return false
  964. end
  965.  
  966. def pbPokemonGiveScreen(item)
  967. @scene.pbStartScene(@party,_INTL("¿Dar a qué Pokémon?"))
  968. pkmnid=@scene.pbChoosePokemon
  969. ret=false
  970. if pkmnid>=0
  971. ret=pbGiveMail(item,@party[pkmnid],pkmnid)
  972. end
  973. pbRefreshSingle(pkmnid)
  974. @scene.pbEndScene
  975. return ret
  976. end
  977.  
  978. def pbPokemonGiveMailScreen(mailIndex)
  979. @scene.pbStartScene(@party,_INTL("¿Dar a qué Pokémon?"))
  980. pkmnid=@scene.pbChoosePokemon
  981. if pkmnid>=0
  982. pkmn=@party[pkmnid]
  983. if pkmn.item!=0 || pkmn.mail
  984. pbDisplay(_INTL("Este Pokémon ya lleva un objeto. No puede llevar una carta."))
  985. elsif pkmn.isEgg?
  986. pbDisplay(_INTL("Los Huevos no pueden llevar una carta."))
  987. else
  988. pbDisplay(_INTL("La carta ha sido transferida desde la casilla."))
  989. pkmn.mail=$PokemonGlobal.mailbox[mailIndex]
  990. pkmn.setItem(pkmn.mail.item)
  991. $PokemonGlobal.mailbox.delete_at(mailIndex)
  992. pbRefreshSingle(pkmnid)
  993. end
  994. end
  995. @scene.pbEndScene
  996. end
  997.  
  998. def pbStartScene(helptext,doublebattle,annotations=nil)
  999. @scene.pbStartScene(@party,helptext,annotations)
  1000. end
  1001.  
  1002. def pbChoosePokemon(helptext=nil)
  1003. @scene.pbSetHelpText(helptext) if helptext
  1004. return @scene.pbChoosePokemon
  1005. end
  1006.  
  1007. def pbChooseMove(pokemon,helptext)
  1008. movenames=[]
  1009. for i in pokemon.moves
  1010. break if i.id==0
  1011. if i.totalpp==0
  1012. movenames.push(_INTL("{1} (PP: ---)",PBMoves.getName(i.id),i.pp,i.totalpp))
  1013. else
  1014. movenames.push(_INTL("{1} (PP: {2}/{3})",PBMoves.getName(i.id),i.pp,i.totalpp))
  1015. end
  1016. end
  1017. return @scene.pbShowCommands(helptext,movenames)
  1018. end
  1019.  
  1020. def pbEndScene
  1021. @scene.pbEndScene
  1022. end
  1023.  
  1024. # Checks for identical species
  1025. def pbCheckSpecies(array)
  1026. for i in 0...array.length
  1027. for j in i+1...array.length
  1028. return false if array[i].species==array[j].species
  1029. end
  1030. end
  1031. return true
  1032. end
  1033.  
  1034. # Checks for identical held items
  1035. def pbCheckItems(array)
  1036. for i in 0...array.length
  1037. next if !array[i].hasItem?
  1038. for j in i+1...array.length
  1039. return false if array[i].item==array[j].item
  1040. end
  1041. end
  1042. return true
  1043. end
  1044.  
  1045. def pbPokemonMultipleEntryScreenEx(ruleset)
  1046. annot=[]
  1047. statuses=[]
  1048. ordinals=[
  1049. _INTL("NO APTO"),
  1050. _INTL("NO REGISTRADO"),
  1051. _INTL("INHABILITADO"),
  1052. _INTL("PRIMERO"),
  1053. _INTL("SEGUNDO"),
  1054. _INTL("TERCERO"),
  1055. _INTL("CUARTO"),
  1056. _INTL("QUINTO"),
  1057. _INTL("SEXTO")
  1058. ]
  1059. if !ruleset.hasValidTeam?(@party)
  1060. return nil
  1061. end
  1062. ret=nil
  1063. addedEntry=false
  1064. for i in 0...@party.length
  1065. if ruleset.isPokemonValid?(@party[i])
  1066. statuses[i]=1
  1067. else
  1068. statuses[i]=2
  1069. end
  1070. end
  1071. for i in 0...@party.length
  1072. annot[i]=ordinals[statuses[i]]
  1073. end
  1074. @scene.pbStartScene(@party,_INTL("Elije un Pokémon y confirma."),annot,true)
  1075. loop do
  1076. realorder=[]
  1077. for i in 0...@party.length
  1078. for j in 0...@party.length
  1079. if statuses[j]==i+3
  1080. realorder.push(j)
  1081. break
  1082. end
  1083. end
  1084. end
  1085. for i in 0...realorder.length
  1086. statuses[realorder[i]]=i+3
  1087. end
  1088. for i in 0...@party.length
  1089. annot[i]=ordinals[statuses[i]]
  1090. end
  1091. @scene.pbAnnotate(annot)
  1092. if realorder.length==ruleset.number && addedEntry
  1093. @scene.pbSelect(6)
  1094. end
  1095. @scene.pbSetHelpText(_INTL("Elije un Pokémon y confirma."))
  1096. pkmnid=@scene.pbChoosePokemon
  1097. addedEntry=false
  1098. if pkmnid==6 # Confirm was chosen
  1099. ret=[]
  1100. for i in realorder
  1101. ret.push(@party[i])
  1102. end
  1103. error=[]
  1104. if !ruleset.isValid?(ret,error)
  1105. pbDisplay(error[0])
  1106. ret=nil
  1107. else
  1108. break
  1109. end
  1110. end
  1111. if pkmnid<0 # Canceled
  1112. break
  1113. end
  1114. cmdEntry=-1
  1115. cmdNoEntry=-1
  1116. cmdSummary=-1
  1117. commands=[]
  1118. if (statuses[pkmnid] || 0) == 1
  1119. commands[cmdEntry=commands.length]=_INTL("Participa")
  1120. elsif (statuses[pkmnid] || 0) > 2
  1121. commands[cmdNoEntry=commands.length]=_INTL("No participa")
  1122. end
  1123. pkmn=@party[pkmnid]
  1124. commands[cmdSummary=commands.length]=_INTL("Datos")
  1125. commands[commands.length]=_INTL("Salir")
  1126. command=@scene.pbShowCommands(_INTL("¿Qué hacer con {1}?",pkmn.name),commands) if pkmn
  1127. if cmdEntry>=0 && command==cmdEntry
  1128. if realorder.length>=ruleset.number && ruleset.number>0
  1129. pbDisplay(_INTL("No pueden participar más de {1} Pokémon.",ruleset.number))
  1130. else
  1131. statuses[pkmnid]=realorder.length+3
  1132. addedEntry=true
  1133. pbRefreshSingle(pkmnid)
  1134. end
  1135. elsif cmdNoEntry>=0 && command==cmdNoEntry
  1136. statuses[pkmnid]=1
  1137. pbRefreshSingle(pkmnid)
  1138. elsif cmdSummary>=0 && command==cmdSummary
  1139. @scene.pbSummary(pkmnid)
  1140. end
  1141. end
  1142. @scene.pbEndScene
  1143. return ret
  1144. end
  1145.  
  1146. def pbChooseAblePokemon(ableProc,allowIneligible=false)
  1147. annot=[]
  1148. eligibility=[]
  1149. for pkmn in @party
  1150. elig=ableProc.call(pkmn)
  1151. eligibility.push(elig)
  1152. annot.push(elig ? _INTL("PUEDE") : _INTL("NO PUEDE"))
  1153. end
  1154. ret=-1
  1155. @scene.pbStartScene(@party,
  1156. @party.length>1 ? _INTL("Elije un Pokémon.") : _INTL("Elije un Pokémon o cancela."),annot)
  1157. loop do
  1158. @scene.pbSetHelpText(
  1159. @party.length>1 ? _INTL("Elije un Pokémon.") : _INTL("Elije un Pokémon o cancela."))
  1160. pkmnid=@scene.pbChoosePokemon
  1161. if pkmnid<0
  1162. break
  1163. elsif !eligibility[pkmnid] && !allowIneligible
  1164. pbDisplay(_INTL("Este Pokémon no puede ser elegido."))
  1165. else
  1166. ret=pkmnid
  1167. break
  1168. end
  1169. end
  1170. @scene.pbEndScene
  1171. return ret
  1172. end
  1173.  
  1174. def pbRefreshAnnotations(ableProc) # For after using an evolution stone
  1175. annot=[]
  1176. for pkmn in @party
  1177. elig=ableProc.call(pkmn)
  1178. annot.push(elig ? _INTL("PUEDE") : _INTL("NO PUEDE"))
  1179. end
  1180. @scene.pbAnnotate(annot)
  1181. end
  1182.  
  1183. def pbClearAnnotations
  1184. @scene.pbAnnotate(nil)
  1185. end
  1186.  
  1187. def pbPokemonDebug(pkmn,pkmnid)
  1188. command=0
  1189. loop do
  1190. command=@scene.pbShowCommands(_INTL("¿Qué hacer con {1}?",pkmn.name),[
  1191. _INTL("PS/Estado"),
  1192. _INTL("Nivel"),
  1193. _INTL("Especie"),
  1194. _INTL("Movimientos"),
  1195. _INTL("Género"),
  1196. _INTL("Habilidad"),
  1197. _INTL("Naturaleza"),
  1198. _INTL("Shininess"),
  1199. _INTL("Forma"),
  1200. _INTL("Felicidad"),
  1201. _INTL("EV/IV/pID"),
  1202. _INTL("Pokérus"),
  1203. _INTL("EO"),
  1204. _INTL("Apodo"),
  1205. _INTL("Poké Ball"),
  1206. _INTL("Cintas"),
  1207. _INTL("Huevo"),
  1208. _INTL("Pokémon Oscuro"),
  1209. _INTL("Hacer Reg. Mist."),
  1210. _INTL("Duplicar"),
  1211. _INTL("Borrar"),
  1212. _INTL("Salir")
  1213. ],command)
  1214. case command
  1215. ### Cancel ###
  1216. when -1, 21
  1217. break
  1218. ### HP/Status ###
  1219. when 0
  1220. cmd=0
  1221. loop do
  1222. cmd=@scene.pbShowCommands(_INTL("¿Qué hacer con {1}?",pkmn.name),[
  1223. _INTL("Setear PS"),
  1224. _INTL("Estado: Dormido"),
  1225. _INTL("Estado: Envenenado"),
  1226. _INTL("Estado: Quemado"),
  1227. _INTL("Estado: Paralizado"),
  1228. _INTL("Estado: Congelado"),
  1229. _INTL("Debilitar"),
  1230. _INTL("Curar")
  1231. ],cmd)
  1232. # Break
  1233. if cmd==-1
  1234. break
  1235. # Set HP
  1236. elsif cmd==0
  1237. params=ChooseNumberParams.new
  1238. params.setRange(0,pkmn.totalhp)
  1239. params.setDefaultValue(pkmn.hp)
  1240. newhp=Kernel.pbMessageChooseNumber(
  1241. _INTL("Establecer los PS del Pokémon (máx. {1}).",pkmn.totalhp),params) { @scene.update }
  1242. if newhp!=pkmn.hp
  1243. pkmn.hp=newhp
  1244. pbDisplay(_INTL("Los PS de {1} se establecieron en {2}.",pkmn.name,pkmn.hp))
  1245. pbRefreshSingle(pkmnid)
  1246. end
  1247. # Set status
  1248. elsif cmd>=1 && cmd<=5
  1249. if pkmn.hp>0
  1250. pkmn.status=cmd
  1251. pkmn.statusCount=0
  1252. if pkmn.status==PBStatuses::SLEEP
  1253. params=ChooseNumberParams.new
  1254. params.setRange(0,9)
  1255. params.setDefaultValue(0)
  1256. sleep=Kernel.pbMessageChooseNumber(
  1257. _INTL("Establecer el contador de sueño del Pokémon."),params) { @scene.update }
  1258. pkmn.statusCount=sleep
  1259. end
  1260. pbDisplay(_INTL("El estado de {1} fue cambiado.",pkmn.name))
  1261. pbRefreshSingle(pkmnid)
  1262. else
  1263. pbDisplay(_INTL("El estado de {1} no pudo ser cambiado.",pkmn.name))
  1264. end
  1265. # Faint / Debilitado
  1266. elsif cmd==6
  1267. pkmn.hp=0
  1268. pbDisplay(_INTL("Los PS de {1} están en 0.",pkmn.name))
  1269. pbRefreshSingle(pkmnid)
  1270. # Heal / Curado
  1271. elsif cmd==7
  1272. pkmn.heal
  1273. pbDisplay(_INTL("{1} está completamente curado.",pkmn.name))
  1274. pbRefreshSingle(pkmnid)
  1275. end
  1276. end
  1277. ### Level ###
  1278. when 1
  1279. params=ChooseNumberParams.new
  1280. params.setRange(1,PBExperience::MAXLEVEL)
  1281. params.setDefaultValue(pkmn.level)
  1282. level=Kernel.pbMessageChooseNumber(
  1283. _INTL("Establecer el nivel del Pokémon (máx. {1}).",PBExperience::MAXLEVEL),params) { @scene.update }
  1284. if level!=pkmn.level
  1285. pkmn.level=level
  1286. pkmn.calcStats
  1287. pbDisplay(_INTL("El nivel del {1} se estableció en {2}.",pkmn.name,pkmn.level))
  1288. pbRefreshSingle(pkmnid)
  1289. end
  1290. ### Species ###
  1291. when 2
  1292. species=pbChooseSpecies(pkmn.species)
  1293. if species!=0
  1294. oldspeciesname=PBSpecies.getName(pkmn.species)
  1295. pkmn.species=species
  1296. pkmn.calcStats
  1297. oldname=pkmn.name
  1298. pkmn.name=PBSpecies.getName(pkmn.species) if pkmn.name==oldspeciesname
  1299. pbDisplay(_INTL("La especie de {1} fue cambiada a {2}.",oldname,PBSpecies.getName(pkmn.species)))
  1300. pbSeenForm(pkmn)
  1301. pbRefreshSingle(pkmnid)
  1302. end
  1303. ### Moves ###
  1304. when 3
  1305. cmd=0
  1306. loop do
  1307. cmd=@scene.pbShowCommands(_INTL("¿Qué hacer con {1}?",pkmn.name),[
  1308. _INTL("Enseñar movimiento"),
  1309. _INTL("Olvidar movimiento"),
  1310. _INTL("Restaurar lista de mov."),
  1311. _INTL("Restaurar mov. iniciales")],cmd)
  1312. # Break
  1313. if cmd==-1
  1314. break
  1315. # Teach move
  1316. elsif cmd==0
  1317. move=pbChooseMoveList
  1318. if move!=0
  1319. pbLearnMove(pkmn,move)
  1320. pbRefreshSingle(pkmnid)
  1321. end
  1322. # Forget move
  1323. elsif cmd==1
  1324. move=pbChooseMove(pkmn,_INTL("Seleccione el movimiento a olvidar."))
  1325. if move>=0
  1326. movename=PBMoves.getName(pkmn.moves[move].id)
  1327. pkmn.pbDeleteMoveAtIndex(move)
  1328. pbDisplay(_INTL("{1} olvidó {2}.",pkmn.name,movename))
  1329. pbRefreshSingle(pkmnid)
  1330. end
  1331. # Reset movelist
  1332. elsif cmd==2
  1333. pkmn.resetMoves
  1334. pbDisplay(_INTL("Los movimientos de {1} fueron restablecidos.",pkmn.name))
  1335. pbRefreshSingle(pkmnid)
  1336. # Reset initial moves
  1337. elsif cmd==3
  1338. pkmn.pbRecordFirstMoves
  1339. pbDisplay(_INTL("{1} recuperó sus movimientos iniciales.",pkmn.name))
  1340. pbRefreshSingle(pkmnid)
  1341. end
  1342. end
  1343. ### Gender ###
  1344. when 4
  1345. if pkmn.gender==2
  1346. pbDisplay(_INTL("{1} no tiene género.",pkmn.name))
  1347. else
  1348. cmd=0
  1349. loop do
  1350. oldgender=(pkmn.isMale?) ? _INTL("macho") : _INTL("hembra")
  1351. msg=[_INTL("El género {1} es natural.",oldgender),
  1352. _INTL("El género {1} es forzado.",oldgender)][pkmn.genderflag ? 1 : 0]
  1353. cmd=@scene.pbShowCommands(msg,[
  1354. _INTL("Hacer macho"),
  1355. _INTL("Hacer hembra"),
  1356. _INTL("Quitar cambio")],cmd)
  1357. # Break
  1358. if cmd==-1
  1359. break
  1360. # Make male
  1361. elsif cmd==0
  1362. pkmn.setGender(0)
  1363. if pkmn.isMale?
  1364. pbDisplay(_INTL("Ahora {1} es macho.",pkmn.name))
  1365. else
  1366. pbDisplay(_INTL("El género de {1} no se puedo cambiar.",pkmn.name))
  1367. end
  1368. # Make female
  1369. elsif cmd==1
  1370. pkmn.setGender(1)
  1371. if pkmn.isFemale?
  1372. pbDisplay(_INTL("Ahora {1} es hembra.",pkmn.name))
  1373. else
  1374. pbDisplay(_INTL("El género de {1} no se puede cambiar.",pkmn.name))
  1375. end
  1376. # Remove override
  1377. elsif cmd==2
  1378. pkmn.genderflag=nil
  1379. pbDisplay(_INTL("Se quitó el cambio de género."))
  1380. end
  1381. pbSeenForm(pkmn)
  1382. pbRefreshSingle(pkmnid)
  1383. end
  1384. end
  1385. ### Ability ###
  1386. when 5
  1387. cmd=0
  1388. loop do
  1389. abils=pkmn.getAbilityList
  1390. oldabil=PBAbilities.getName(pkmn.ability)
  1391. commands=[]
  1392. for i in abils
  1393. commands.push((i[1]<2 ? "" : "(H) ")+PBAbilities.getName(i[0]))
  1394. end
  1395. commands.push(_INTL("Quitar cambio"))
  1396. msg=[_INTL("La habilidad {1} es natural.",oldabil),
  1397. _INTL("La habilidad {1} es forzada.",oldabil)][pkmn.abilityflag!=nil ? 1 : 0]
  1398. cmd=@scene.pbShowCommands(msg,commands,cmd)
  1399. # Break
  1400. if cmd==-1
  1401. break
  1402. # Set ability override
  1403. elsif cmd>=0 && cmd<abils.length
  1404. pkmn.setAbility(abils[cmd][1])
  1405. # Remove override
  1406. elsif cmd==abils.length
  1407. pkmn.abilityflag=nil
  1408. end
  1409. pbRefreshSingle(pkmnid)
  1410. end
  1411. ### Nature ###
  1412. when 6
  1413. cmd=0
  1414. loop do
  1415. oldnature=PBNatures.getName(pkmn.nature)
  1416. commands=[]
  1417. (PBNatures.getCount).times do |i|
  1418. commands.push(PBNatures.getName(i))
  1419. end
  1420. commands.push(_INTL("Quitar cambio"))
  1421. msg=[_INTL("La naturaleza {1} es natural.",oldnature),
  1422. _INTL("La naturaleza {1} es forzada.",oldnature)][pkmn.natureflag ? 1 : 0]
  1423. cmd=@scene.pbShowCommands(msg,commands,cmd)
  1424. # Break
  1425. if cmd==-1
  1426. break
  1427. # Set nature override
  1428. elsif cmd>=0 && cmd<PBNatures.getCount
  1429. pkmn.setNature(cmd)
  1430. pkmn.calcStats
  1431. # Remove override
  1432. elsif cmd==PBNatures.getCount
  1433. pkmn.natureflag=nil
  1434. end
  1435. pbRefreshSingle(pkmnid)
  1436. end
  1437. ### Shininess ###
  1438. when 7
  1439. cmd=0
  1440. loop do
  1441. oldshiny=(pkmn.isShiny?) ? _INTL("shiny") : _INTL("normal")
  1442. msg=[_INTL("Shininess ({1}) es natural.",oldshiny),
  1443. _INTL("Shininess ({1}) es forzado.",oldshiny)][pkmn.shinyflag!=nil ? 1 : 0]
  1444. cmd=@scene.pbShowCommands(msg,[
  1445. _INTL("Hacer shiny"),
  1446. _INTL("Hacer normal"),
  1447. _INTL("Quitar cambio")],cmd)
  1448. # Break
  1449. if cmd==-1
  1450. break
  1451. # Make shiny
  1452. elsif cmd==0
  1453. pkmn.makeShiny
  1454. # Make normal
  1455. elsif cmd==1
  1456. pkmn.makeNotShiny
  1457. # Remove override
  1458. elsif cmd==2
  1459. pkmn.shinyflag=nil
  1460. end
  1461. pbRefreshSingle(pkmnid)
  1462. end
  1463. ### Form ###
  1464. when 8
  1465. params=ChooseNumberParams.new
  1466. params.setRange(0,100)
  1467. params.setDefaultValue(pkmn.form)
  1468. f=Kernel.pbMessageChooseNumber(
  1469. _INTL("Establecer la forma del Pokémon."),params) { @scene.update }
  1470. if f!=pkmn.form
  1471. pkmn.form=f
  1472. pbDisplay(_INTL("La forma de {1} se cambió a {2}.",pkmn.name,pkmn.form))
  1473. pbSeenForm(pkmn)
  1474. pbRefreshSingle(pkmnid)
  1475. end
  1476. ### Happiness ###
  1477. when 9
  1478. params=ChooseNumberParams.new
  1479. params.setRange(0,255)
  1480. params.setDefaultValue(pkmn.happiness)
  1481. h=Kernel.pbMessageChooseNumber(
  1482. _INTL("Establecer la felicidad de Pokémon (máx. 255)."),params) { @scene.update }
  1483. if h!=pkmn.happiness
  1484. pkmn.happiness=h
  1485. pbDisplay(_INTL("La felicidad de {1} fue establecida en {2}.",pkmn.name,pkmn.happiness))
  1486. pbRefreshSingle(pkmnid)
  1487. end
  1488. ### EV/IV/pID ###
  1489. when 10
  1490. stats=[_INTL("PS"),_INTL("Ataque"),_INTL("Defensa"),
  1491. _INTL("Velocidad"),_INTL("At. Esp."),_INTL("Def. Esp.")]
  1492. cmd=0
  1493. loop do
  1494. persid=sprintf("0x%08X",pkmn.personalID)
  1495. cmd=@scene.pbShowCommands(_INTL("ID personal es {1}.",persid),[
  1496. _INTL("Setear EVs"),
  1497. _INTL("Setear IVs"),
  1498. _INTL("Randomise pID")],cmd)
  1499. case cmd
  1500. # Break
  1501. when -1
  1502. break
  1503. # Set EVs
  1504. when 0
  1505. cmd2=0
  1506. loop do
  1507. evcommands=[]
  1508. for i in 0...stats.length
  1509. evcommands.push(stats[i]+" (#{pkmn.ev[i]})")
  1510. end
  1511. cmd2=@scene.pbShowCommands(_INTL("¿Cuál EV cambiar?"),evcommands,cmd2)
  1512. if cmd2==-1
  1513. break
  1514. elsif cmd2>=0 && cmd2<stats.length
  1515. params=ChooseNumberParams.new
  1516. params.setRange(0,PokeBattle_Pokemon::EVSTATLIMIT)
  1517. params.setDefaultValue(pkmn.ev[cmd2])
  1518. params.setCancelValue(pkmn.ev[cmd2])
  1519. f=Kernel.pbMessageChooseNumber(
  1520. _INTL("SEstablecer el EV para {1} (máx. {2}).",
  1521. stats[cmd2],PokeBattle_Pokemon::EVSTATLIMIT),params) { @scene.update }
  1522. pkmn.ev[cmd2]=f
  1523. pkmn.totalhp
  1524. pkmn.calcStats
  1525. pbRefreshSingle(pkmnid)
  1526. end
  1527. end
  1528. # Set IVs
  1529. when 1
  1530. cmd2=0
  1531. loop do
  1532. hiddenpower=pbHiddenPower(pkmn.iv)
  1533. msg=_INTL("Poder Oculto:\n{1}, potencia {2}.",PBTypes.getName(hiddenpower[0]),hiddenpower[1])
  1534. ivcommands=[]
  1535. for i in 0...stats.length
  1536. ivcommands.push(stats[i]+" (#{pkmn.iv[i]})")
  1537. end
  1538. ivcommands.push(_INTL("Hacer aleatorio"))
  1539. cmd2=@scene.pbShowCommands(msg,ivcommands,cmd2)
  1540. if cmd2==-1
  1541. break
  1542. elsif cmd2>=0 && cmd2<stats.length
  1543. params=ChooseNumberParams.new
  1544. params.setRange(0,31)
  1545. params.setDefaultValue(pkmn.iv[cmd2])
  1546. params.setCancelValue(pkmn.iv[cmd2])
  1547. f=Kernel.pbMessageChooseNumber(
  1548. _INTL("Establecer el IV para {1} (máx. 31).",stats[cmd2]),params) { @scene.update }
  1549. pkmn.iv[cmd2]=f
  1550. pkmn.calcStats
  1551. pbRefreshSingle(pkmnid)
  1552. elsif cmd2==ivcommands.length-1
  1553. pkmn.iv[0]=rand(32)
  1554. pkmn.iv[1]=rand(32)
  1555. pkmn.iv[2]=rand(32)
  1556. pkmn.iv[3]=rand(32)
  1557. pkmn.iv[4]=rand(32)
  1558. pkmn.iv[5]=rand(32)
  1559. pkmn.calcStats
  1560. pbRefreshSingle(pkmnid)
  1561. end
  1562. end
  1563. # Randomise pID
  1564. when 2
  1565. pkmn.personalID=rand(256)
  1566. pkmn.personalID|=rand(256)<<8
  1567. pkmn.personalID|=rand(256)<<16
  1568. pkmn.personalID|=rand(256)<<24
  1569. pkmn.calcStats
  1570. pbRefreshSingle(pkmnid)
  1571. end
  1572. end
  1573. ### Pokérus ###
  1574. when 11
  1575. cmd=0
  1576. loop do
  1577. pokerus=(pkmn.pokerus) ? pkmn.pokerus : 0
  1578. msg=[_INTL("{1} no tiene Pokérus.",pkmn.name),
  1579. _INTL("Tiene grado {1}, infectado por {2} días más.",pokerus/16,pokerus%16),
  1580. _INTL("Tiene grado {1}, no infectado.",pokerus/16)][pkmn.pokerusStage]
  1581. cmd=@scene.pbShowCommands(msg,[
  1582. _INTL("Dar grado aleatorio"),
  1583. _INTL("Hacer no infectado"),
  1584. _INTL("Limpiar Pokérus")],cmd)
  1585. # Break
  1586. if cmd==-1
  1587. break
  1588. # Give random strain
  1589. elsif cmd==0
  1590. pkmn.givePokerus
  1591. # Make not infectious
  1592. elsif cmd==1
  1593. strain=pokerus/16
  1594. p=strain<<4
  1595. pkmn.pokerus=p
  1596. # Clear Pokérus
  1597. elsif cmd==2
  1598. pkmn.pokerus=0
  1599. end
  1600. end
  1601. ### Ownership ###
  1602. when 12
  1603. cmd=0
  1604. loop do
  1605. gender=[_INTL("Masculino"),_INTL("Femenino"),_INTL("Desconocido")][pkmn.otgender]
  1606. msg=[_INTL("Pokémon del jugador\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID),
  1607. _INTL("Pokémon extranjero\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID)
  1608. ][pkmn.isForeign?($Trainer) ? 1 : 0]
  1609. cmd=@scene.pbShowCommands(msg,[
  1610. _INTL("Hacer del jugador"),
  1611. _INTL("Setear nombre del EO"),
  1612. _INTL("Setear género del EO"),
  1613. _INTL("ID extranjero aleatorio"),
  1614. _INTL("Setear ID extranjero")],cmd)
  1615. # Break
  1616. if cmd==-1
  1617. break
  1618. # Make player's
  1619. elsif cmd==0
  1620. pkmn.trainerID=$Trainer.id
  1621. pkmn.ot=$Trainer.name
  1622. pkmn.otgender=$Trainer.gender
  1623. # Set OT's name
  1624. elsif cmd==1
  1625. newot=pbEnterPlayerName(_INTL("Nombre del EO de {1}",pkmn.name),1,7)
  1626. pkmn.ot=newot
  1627. # Set OT's gender
  1628. elsif cmd==2
  1629. cmd2=@scene.pbShowCommands(_INTL("Establecer el género del EO."),
  1630. [_INTL("Masculino"),_INTL("Femenino"),_INTL("Desconocido")])
  1631. pkmn.otgender=cmd2 if cmd2>=0
  1632. # Random foreign ID
  1633. elsif cmd==3
  1634. pkmn.trainerID=$Trainer.getForeignID
  1635. # Set foreign ID
  1636. elsif cmd==4
  1637. params=ChooseNumberParams.new
  1638. params.setRange(0,65535)
  1639. params.setDefaultValue(pkmn.publicID)
  1640. val=Kernel.pbMessageChooseNumber(
  1641. _INTL("Setear el nuevo ID (máx. 65535)."),params) { @scene.update }
  1642. pkmn.trainerID=val
  1643. pkmn.trainerID|=val<<16
  1644. end
  1645. end
  1646. ### Nickname ###
  1647. when 13
  1648. cmd=0
  1649. loop do
  1650. speciesname=PBSpecies.getName(pkmn.species)
  1651. msg=[_INTL("{1} tiene el apodo {2}.",speciesname,pkmn.name),
  1652. _INTL("{1} no tiene apodo.",speciesname)][pkmn.name==speciesname ? 1 : 0]
  1653. cmd=@scene.pbShowCommands(msg,[
  1654. _INTL("Renombrar"),
  1655. _INTL("Borrar nombre")],cmd)
  1656. # Break
  1657. if cmd==-1
  1658. break
  1659. # Rename
  1660. elsif cmd==0
  1661. newname=pbEnterPokemonName(_INTL("Apodo de {1}",speciesname),0,10,"",pkmn)
  1662. pkmn.name=(newname=="") ? speciesname : newname
  1663. pbRefreshSingle(pkmnid)
  1664. # Erase name
  1665. elsif cmd==1
  1666. pkmn.name=speciesname
  1667. end
  1668. end
  1669. ### Poké Ball ###
  1670. when 14
  1671. cmd=0
  1672. loop do
  1673. oldball=PBItems.getName(pbBallTypeToBall(pkmn.ballused))
  1674. commands=[]; balls=[]
  1675. for key in $BallTypes.keys
  1676. item=getID(PBItems,$BallTypes[key])
  1677. balls.push([key,PBItems.getName(item)]) if item && item>0
  1678. end
  1679. balls.sort! {|a,b| a[1]<=>b[1]}
  1680. for i in 0...commands.length
  1681. cmd=i if pkmn.ballused==balls[i][0]
  1682. end
  1683. for i in balls
  1684. commands.push(i[1])
  1685. end
  1686. cmd=@scene.pbShowCommands(_INTL("Usada {1}.",oldball),commands,cmd)
  1687. if cmd==-1
  1688. break
  1689. else
  1690. pkmn.ballused=balls[cmd][0]
  1691. end
  1692. end
  1693. ### Ribbons ###
  1694. when 15
  1695. cmd=0
  1696. loop do
  1697. commands=[]
  1698. for i in 1..PBRibbons.maxValue
  1699. commands.push(_INTL("{1} {2}",
  1700. pkmn.hasRibbon?(i) ? "[X]" : "[ ]",PBRibbons.getName(i)))
  1701. end
  1702. cmd=@scene.pbShowCommands(_INTL("{1} cintas.",pkmn.ribbonCount),commands,cmd)
  1703. if cmd==-1
  1704. break
  1705. elsif cmd>=0 && cmd<commands.length
  1706. if pkmn.hasRibbon?(cmd+1)
  1707. pkmn.takeRibbon(cmd+1)
  1708. else
  1709. pkmn.giveRibbon(cmd+1)
  1710. end
  1711. end
  1712. end
  1713. ### Egg ###
  1714. when 16
  1715. cmd=0
  1716. loop do
  1717. msg=[_INTL("No es un huevo"),
  1718. _INTL("Huevo con pasos: {1}.",pkmn.eggsteps)][pkmn.isEgg? ? 1 : 0]
  1719. cmd=@scene.pbShowCommands(msg,[
  1720. _INTL("Hacer huevo"),
  1721. _INTL("Hacer Pokémon"),
  1722. _INTL("Setear pasos en 1")],cmd)
  1723. # Break
  1724. if cmd==-1
  1725. break
  1726. # Make egg
  1727. elsif cmd==0
  1728. if pbHasEgg?(pkmn.species) ||
  1729. pbConfirm(_INTL("{1} no puede ser un huevo. ¿Hacerlo huevo de todas formas?",PBSpecies.getName(pkmn.species)))
  1730. pkmn.level=EGGINITIALLEVEL
  1731. pkmn.calcStats
  1732. pkmn.name=_INTL("Huevo")
  1733. dexdata=pbOpenDexData
  1734. pbDexDataOffset(dexdata,pkmn.species,21)
  1735. pkmn.eggsteps=dexdata.fgetw
  1736. dexdata.close
  1737. pkmn.hatchedMap=0
  1738. pkmn.obtainMode=1
  1739. pbRefreshSingle(pkmnid)
  1740. end
  1741. # Make Pokémon
  1742. elsif cmd==1
  1743. pkmn.name=PBSpecies.getName(pkmn.species)
  1744. pkmn.eggsteps=0
  1745. pkmn.hatchedMap=0
  1746. pkmn.obtainMode=0
  1747. pbRefreshSingle(pkmnid)
  1748. # Set eggsteps to 1
  1749. elsif cmd==2
  1750. pkmn.eggsteps=1 if pkmn.eggsteps>0
  1751. end
  1752. end
  1753. ### Shadow Pokémon ###
  1754. when 17
  1755. cmd=0
  1756. loop do
  1757. msg=[_INTL("No es un Pokémon Oscuro."),
  1758. _INTL("Medidor del corazón en {1}.",pkmn.heartgauge)][(pkmn.isShadow? rescue false) ? 1 : 0]
  1759. cmd=@scene.pbShowCommands(msg,[
  1760. _INTL("Hacer Oscuro"),
  1761. _INTL("Bajar medidor del corazón")],cmd)
  1762. # Break
  1763. if cmd==-1
  1764. break
  1765. # Make Shadow
  1766. elsif cmd==0
  1767. if !(pkmn.isShadow? rescue false) && pkmn.respond_to?("makeShadow")
  1768. pkmn.makeShadow
  1769. pbDisplay(_INTL("{1} ahora es un Pokémon Oscuro.",pkmn.name))
  1770. pbRefreshSingle(pkmnid)
  1771. else
  1772. pbDisplay(_INTL("{1} ya es un Pokémon Oscuro.",pkmn.name))
  1773. end
  1774. # Lower heart gauge
  1775. elsif cmd==1
  1776. if (pkmn.isShadow? rescue false)
  1777. prev=pkmn.heartgauge
  1778. pkmn.adjustHeart(-700)
  1779. Kernel.pbMessage(_INTL("El medidor del corazón de {1} bajo de {2} a {3} (ahora etapa {4}).",
  1780. pkmn.name,prev,pkmn.heartgauge,pkmn.heartStage))
  1781. pbReadyToPurify(pkmn)
  1782. else
  1783. Kernel.pbMessage(_INTL("{1} no es un Pokémon Oscuro.",pkmn.name))
  1784. end
  1785. end
  1786. end
  1787. ### Make Mystery Gift ###
  1788. when 18
  1789. pbCreateMysteryGift(0,pkmn)
  1790. ### Duplicate ###
  1791. when 19
  1792. if pbConfirm(_INTL("¿Estás seguro de que quieres copiar este Pokémon?"))
  1793. clonedpkmn=pkmn.clone
  1794. clonedpkmn.iv=pkmn.iv.clone
  1795. clonedpkmn.ev=pkmn.ev.clone
  1796. pbStorePokemon(clonedpkmn)
  1797. pbHardRefresh
  1798. pbDisplay(_INTL("El Pokémon fue duplicado."))
  1799. break
  1800. end
  1801. ### Delete ###
  1802. when 20
  1803. if pbConfirm(_INTL("¿Estás seguro de que quieres borrar este Pokémon?"))
  1804. @party[pkmnid]=nil
  1805. @party.compact!
  1806. pbHardRefresh
  1807. pbDisplay(_INTL("El Pokémon fue borrado."))
  1808. break
  1809. end
  1810. end
  1811. end
  1812. end
  1813.  
  1814. def pbPokemonScreen
  1815. @scene.pbStartScene(@party,@party.length>1 ? _INTL("Elije un Pokémon.") : _INTL("Elije un Pokémon o cancela."),nil)
  1816. loop do
  1817. @scene.pbSetHelpText(@party.length>1 ? _INTL("Elije un Pokémon.") : _INTL("Elije un Pokémon o cancela."))
  1818. pkmnid=@scene.pbChoosePokemon
  1819. break if pkmnid<0
  1820. pkmn=@party[pkmnid]
  1821. commands = []
  1822. cmdSummary = -1
  1823. cmdDebug = -1
  1824. cmdMoves = [-1,-1,-1,-1]
  1825. cmdSwitch = -1
  1826. cmdMail = -1
  1827. cmdItem = -1
  1828. # Build the commands
  1829. commands[cmdSummary=commands.length] = _INTL("Datos")
  1830. commands[cmdDebug=commands.length] = _INTL("Depurador") if $DEBUG
  1831. for i in 0...pkmn.moves.length
  1832. move=pkmn.moves[i]
  1833. # Check for hidden moves and add any that were found
  1834. if !pkmn.isEgg? && (isConst?(move.id,PBMoves,:MILKDRINK) ||
  1835. isConst?(move.id,PBMoves,:SOFTBOILED) ||
  1836. HiddenMoveHandlers.hasHandler(move.id))
  1837. commands[cmdMoves[i]=commands.length] = PBMoves.getName(move.id)
  1838. end
  1839. end
  1840. commands[cmdSwitch=commands.length] = _INTL("Mover") if @party.length>1
  1841. if !pkmn.isEgg?
  1842. if pkmn.mail
  1843. commands[cmdMail=commands.length] = _INTL("Carta")
  1844. else
  1845. commands[cmdItem=commands.length] = _INTL("Objeto")
  1846. end
  1847. end
  1848. commands[commands.length] = _INTL("Salir")
  1849. command=@scene.pbShowCommands(_INTL("¿Qué hacer con {1}?",pkmn.name),commands)
  1850. havecommand=false
  1851. for i in 0...4
  1852. if cmdMoves[i]>=0 && command==cmdMoves[i]
  1853. havecommand=true
  1854. if isConst?(pkmn.moves[i].id,PBMoves,:SOFTBOILED) ||
  1855. isConst?(pkmn.moves[i].id,PBMoves,:MILKDRINK)
  1856. amt=[(pkmn.totalhp/5).floor,1].max
  1857. if pkmn.hp<=amt
  1858. pbDisplay(_INTL("No tiene PS suficientes..."))
  1859. break
  1860. end
  1861. @scene.pbSetHelpText(_INTL("¿En cuál Pokémon usarlo?"))
  1862. oldpkmnid=pkmnid
  1863. loop do
  1864. @scene.pbPreSelect(oldpkmnid)
  1865. pkmnid=@scene.pbChoosePokemon(true,pkmnid)
  1866. break if pkmnid<0
  1867. newpkmn=@party[pkmnid]
  1868. if pkmnid==oldpkmnid
  1869. pbDisplay(_INTL("¡{1} no puede usar {2} en sí mismo!",pkmn.name,PBMoves.getName(pkmn.moves[i].id)))
  1870. elsif newpkmn.isEgg?
  1871. pbDisplay(_INTL("¡{1} no puede usarse en un Huevo!",PBMoves.getName(pkmn.moves[i].id)))
  1872. elsif newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp
  1873. pbDisplay(_INTL("{1} no puede usarse en ese Pokémon.",PBMoves.getName(pkmn.moves[i].id)))
  1874. else
  1875. pkmn.hp-=amt
  1876. hpgain=pbItemRestoreHP(newpkmn,amt)
  1877. @scene.pbDisplay(_INTL("{1} recuperó {2} puntos de salud.",newpkmn.name,hpgain))
  1878. pbRefresh
  1879. end
  1880. break if pkmn.hp<=amt
  1881. end
  1882. break
  1883. elsif Kernel.pbCanUseHiddenMove?(pkmn,pkmn.moves[i].id)
  1884. @scene.pbEndScene
  1885. if isConst?(pkmn.moves[i].id,PBMoves,:FLY)
  1886. scene=PokemonRegionMapScene.new(-1,false)
  1887. screen=PokemonRegionMap.new(scene)
  1888. ret=screen.pbStartFlyScreen
  1889. if ret
  1890. $PokemonTemp.flydata=ret
  1891. return [pkmn,pkmn.moves[i].id]
  1892. end
  1893. @scene.pbStartScene(@party,
  1894. @party.length>1 ? _INTL("Elige un Pokémon.") : _INTL("Elige un Pokémon o cancela."))
  1895. break
  1896. end
  1897. return [pkmn,pkmn.moves[i].id]
  1898. else
  1899. break
  1900. end
  1901. end
  1902. end
  1903. next if havecommand
  1904. if cmdSummary>=0 && command==cmdSummary
  1905. @scene.pbSummary(pkmnid)
  1906. elsif cmdDebug>=0 && command==cmdDebug
  1907. pbPokemonDebug(pkmn,pkmnid)
  1908. elsif cmdSwitch>=0 && command==cmdSwitch
  1909. @scene.pbSetHelpText(_INTL("¿A qué posición mover?"))
  1910. oldpkmnid=pkmnid
  1911. pkmnid=@scene.pbChoosePokemon(true)
  1912. if pkmnid>=0 && pkmnid!=oldpkmnid
  1913. pbSwitch(oldpkmnid,pkmnid)
  1914. end
  1915. elsif cmdMail>=0 && command==cmdMail
  1916. command=@scene.pbShowCommands(_INTL("¿Qué quieres hacer con la carta?"),
  1917. [_INTL("Leer"),_INTL("Quitar"),_INTL("Salir")])
  1918. case command
  1919. when 0 # Read
  1920. pbFadeOutIn(99999){
  1921. pbDisplayMail(pkmn.mail,pkmn)
  1922. }
  1923. when 1 # Take
  1924. pbTakeMail(pkmn)
  1925. pbRefreshSingle(pkmnid)
  1926. end
  1927. elsif cmdItem>=0 && command==cmdItem
  1928. itemcommands = []
  1929. cmdUseItem = -1
  1930. cmdGiveItem = -1
  1931. cmdTakeItem = -1
  1932. cmdMoveItem = -1
  1933. # Build the commands
  1934. itemcommands[cmdUseItem=itemcommands.length] = _INTL("Usar")
  1935. itemcommands[cmdGiveItem=itemcommands.length] = _INTL("Dar")
  1936. itemcommands[cmdTakeItem=itemcommands.length] = _INTL("Quitar") if pkmn.hasItem?
  1937. itemcommands[cmdMoveItem=itemcommands.length] = _INTL("Mover") if pkmn.hasItem? && !pbIsMail?(pkmn.item)
  1938. itemcommands[itemcommands.length] = _INTL("Salir")
  1939. command=@scene.pbShowCommands(_INTL("¿Qué quieres hacer con él?"),itemcommands)
  1940. if cmdUseItem>=0 && command==cmdUseItem # Use
  1941. item=@scene.pbUseItem($PokemonBag,pkmn)
  1942. if item>0
  1943. pbUseItemOnPokemon(item,pkmn,self)
  1944. pbRefreshSingle(pkmnid)
  1945. end
  1946. elsif cmdGiveItem>=0 && command==cmdGiveItem # Give
  1947. item=@scene.pbChooseItem($PokemonBag)
  1948. if item>0
  1949. pbGiveMail(item,pkmn,pkmnid)
  1950. pbRefreshSingle(pkmnid)
  1951. end
  1952. elsif cmdTakeItem>=0 && command==cmdTakeItem # Take
  1953. pbTakeMail(pkmn)
  1954. pbRefreshSingle(pkmnid)
  1955. elsif cmdMoveItem>=0 && command==cmdMoveItem # Move
  1956. item=pkmn.item
  1957. itemname=PBItems.getName(item)
  1958. @scene.pbSetHelpText(_INTL("¿A qué Pokémon quieres darle {1}?",itemname))
  1959. oldpkmnid=pkmnid
  1960. loop do
  1961. @scene.pbPreSelect(oldpkmnid)
  1962. pkmnid=@scene.pbChoosePokemon(true,pkmnid)
  1963. break if pkmnid<0
  1964. newpkmn=@party[pkmnid]
  1965. if pkmnid==oldpkmnid
  1966. break
  1967. elsif newpkmn.isEgg?
  1968. pbDisplay(_INTL("Un Huevo no puede llevar un objeto."))
  1969. elsif !newpkmn.hasItem?
  1970. newpkmn.setItem(item)
  1971. pkmn.setItem(0)
  1972. pbRefresh
  1973. pbDisplay(_INTL("Le has dado {2} a {1}.",newpkmn.name,itemname))
  1974. break
  1975. elsif pbIsMail?(newpkmn.item)
  1976. pbDisplay(_INTL("Debes tomar la carta de {1} antes de darle otro objeto.",newpkmn.name))
  1977. else
  1978. newitem=newpkmn.item
  1979. newitemname=PBItems.getName(newitem)
  1980. pbDisplay(_INTL("{1} ya está llevando {2}.\1",newpkmn.name,newitemname))
  1981. if pbConfirm(_INTL("¿Quieres intercambiar estos objetos?"))
  1982. newpkmn.setItem(item)
  1983. pkmn.setItem(newitem)
  1984. pbRefresh
  1985. pbDisplay(_INTL("Le has dado {2} a {1}.",newpkmn.name,itemname))
  1986. pbDisplay(_INTL("Le has dado {2} a {1}.",pkmn.name,newitemname))
  1987. break
  1988. end
  1989. end
  1990. end
  1991. end
  1992. end
  1993. end
  1994. @scene.pbEndScene
  1995. return nil
  1996. end
  1997. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement