Advertisement
Diego-Mertens

para vazquinho

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