Advertisement
Guest User

shiny algo3

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