Advertisement
Vendily

downgrade

Jan 1st, 2019
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 77.37 KB | None | 0 0
  1. def pbHeldItemIconFile(item)   # Used in the party screen
  2.   return nil if !item || item==0
  3.   if pbIsMail?(item)
  4.     namebase = "mail"
  5.   elsif pbIsMegaStone?(item)
  6.     namebase = "mega"
  7.   # Uncomment this part if using Amethyst's Z-Move add-on
  8.   elsif pbIsZCrystal?(item)
  9.     namebase = "z_crystal"
  10.   else
  11.     namebase = "item"
  12.   end
  13.   bitmapFileName = sprintf("Graphics/Pictures/%s_%s",namebase,getConstantName(PBItems,item)) rescue nil
  14.   if !pbResolveBitmap(bitmapFileName)
  15.     bitmapFileName = sprintf("Graphics/Pictures/%s_%03d",namebase,item)
  16.     if !pbResolveBitmap(bitmapFileName)
  17.       bitmapFileName = sprintf("Graphics/Pictures/%s",namebase)
  18.     end
  19.   end
  20.   return bitmapFileName
  21. end
  22.  
  23. def easyItemType(item)
  24.   type=0
  25.   type=1 if pbIsMail?(item)
  26.   type=2 if pbIsMegaStone?(item)
  27.   # Uncomment this part if using Amethyst's Z-Move add-on
  28.   type=3 if pbIsZCrystal?(item)
  29.   return type
  30. end
  31.  
  32. class HeldItemIconSprite < SpriteWrapper
  33.   def initialize(x,y,pokemon,viewport=nil)
  34.     super(viewport)
  35.     self.x = x
  36.     self.y = y
  37.     @pokemon = pokemon
  38.     @item = 0
  39.     self.item = @pokemon.item
  40.     @mode = 0 # 0=item; 1=mail; 2=mega; 3=zcrystal
  41.     @mode=easyItemType(@pokemon.item)
  42.   end
  43.  
  44.   def mode
  45.     return @mode
  46.   end
  47.  
  48.   def pokemon=(value)
  49.     @pokemon = value
  50.     self.item = @pokemon.item
  51.   end
  52.  
  53.   def item=(value)
  54.     return if @item==value
  55.     @item = value
  56.     @animbitmap.dispose if @animbitmap
  57.     @animbitmap = nil
  58.     if @item && @item>0
  59.       @animbitmap = AnimatedBitmap.new(pbHeldItemIconFile(value))
  60.       self.bitmap = @animbitmap.bitmap
  61.     else
  62.       self.bitmap = nil
  63.     end
  64.   end
  65.  
  66.   def dispose
  67.     @animbitmap.dispose if @animbitmap
  68.     super
  69.   end
  70.  
  71.   def update
  72.     super
  73.     self.item = @pokemon.item
  74.     if @animbitmap
  75.       @animbitmap.update
  76.       self.bitmap = @animbitmap.bitmap
  77.     end
  78.   end
  79. end
  80.  
  81.  
  82. class PokeSelectionPlaceholderSprite < SpriteWrapper
  83.   attr_accessor :text
  84.  
  85.   def initialize(pokemon,index,viewport=nil)
  86.     super(viewport)
  87.     xvalues=[0,256,0,256,0,256]
  88.     yvalues=[0,16,96,112,192,208]
  89.     @pbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelBlank")
  90.     self.bitmap=@pbitmap.bitmap
  91.     self.x=xvalues[index]
  92.     self.y=yvalues[index]
  93.     @text=nil
  94.   end
  95.  
  96.   def update
  97.     super
  98.     @pbitmap.update
  99.     self.bitmap=@pbitmap.bitmap
  100.   end
  101.  
  102.   def selected
  103.     return false
  104.   end
  105.  
  106.   def selected=(value)
  107.   end
  108.  
  109.   def preselected
  110.     return false
  111.   end
  112.  
  113.   def preselected=(value)
  114.   end
  115.  
  116.   def switching
  117.     return false
  118.   end
  119.  
  120.   def switching=(value)
  121.   end
  122.  
  123.   def refresh
  124.   end
  125.  
  126.   def dispose
  127.     @pbitmap.dispose
  128.     super
  129.   end
  130. end
  131.  
  132.  
  133.  
  134. class PokeSelectionConfirmCancelSprite < SpriteWrapper
  135.   attr_reader :selected
  136.  
  137.   def initialize(text,x,y,narrowbox=false,viewport=nil)
  138.     super(viewport)
  139.     @refreshBitmap=true
  140.     @bgsprite=ChangelingSprite.new(0,0,viewport)
  141.     if narrowbox
  142.       @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/partyCancelNarrow")
  143.       @bgsprite.addBitmap("selbitmap","Graphics/Pictures/partyCancelSelNarrow")
  144.     else
  145.       @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/partyCancel")
  146.       @bgsprite.addBitmap("selbitmap","Graphics/Pictures/partyCancelSel")
  147.     end
  148.     @bgsprite.changeBitmap("deselbitmap")
  149.     @overlaysprite=BitmapSprite.new(@bgsprite.bitmap.width,@bgsprite.bitmap.height,viewport)
  150.     @yoffset=8
  151.     ynarrow=narrowbox ? -6 : 0
  152.     pbSetSystemFont(@overlaysprite.bitmap)
  153.     textpos=[[text,56,8+ynarrow,2,Color.new(248,248,248),Color.new(40,40,40)]]
  154.     pbDrawTextPositions(@overlaysprite.bitmap,textpos)
  155.     @overlaysprite.z=self.z+1 # For compatibility with RGSS2
  156.     self.x=x
  157.     self.y=y
  158.   end
  159.  
  160.   def dispose
  161.     @overlaysprite.bitmap.dispose
  162.     @overlaysprite.dispose
  163.     @bgsprite.dispose
  164.     super
  165.   end
  166.  
  167.   def viewport=(value)
  168.     super
  169.     refresh
  170.   end
  171.  
  172.   def color=(value)
  173.     super
  174.     refresh
  175.   end
  176.  
  177.   def x=(value)
  178.     super
  179.     refresh
  180.   end
  181.  
  182.   def y=(value)
  183.     super
  184.     refresh
  185.   end
  186.  
  187.   def selected=(value)
  188.     @selected=value
  189.     refresh
  190.   end
  191.  
  192.   def refresh
  193.     @bgsprite.changeBitmap((@selected) ? "selbitmap" : "deselbitmap")
  194.     if @bgsprite && !@bgsprite.disposed?
  195.       @bgsprite.x=self.x
  196.       @bgsprite.y=self.y
  197.       @overlaysprite.x=self.x
  198.       @overlaysprite.y=self.y
  199.       @bgsprite.color=self.color
  200.       @overlaysprite.color=self.color
  201.     end
  202.   end
  203. end
  204.  
  205.  
  206.  
  207. class PokeSelectionCancelSprite < PokeSelectionConfirmCancelSprite
  208.   def initialize(viewport=nil)
  209.     super(_INTL("CANCEL"),398,328,false,viewport)
  210.   end
  211. end
  212.  
  213.  
  214.  
  215. class PokeSelectionConfirmSprite < PokeSelectionConfirmCancelSprite
  216.   def initialize(viewport=nil)
  217.     super(_INTL("CONFIRM"),398,308,true,viewport)
  218.   end
  219. end
  220.  
  221.  
  222.  
  223. class PokeSelectionCancelSprite2 < PokeSelectionConfirmCancelSprite
  224.   def initialize(viewport=nil)
  225.     super(_INTL("CANCEL"),398,346,true,viewport)
  226.   end
  227. end
  228.  
  229. class Window_CommandPokemonColor < Window_CommandPokemon
  230.   def initialize(commands,width=nil)
  231.     @colorKey = []
  232.     for i in 0...commands.length
  233.       if commands[i].is_a?(Array)
  234.         @colorKey[i] = commands[i][1]
  235.         commands[i] = commands[i][0]
  236.       end
  237.     end
  238.     super(commands,width)
  239.   end
  240.  
  241.   def drawItem(index,count,rect)
  242.     pbSetSystemFont(self.contents) if @starting
  243.     rect = drawCursor(index,rect)
  244.     base   = self.baseColor
  245.     shadow = self.shadowColor
  246.     if @colorKey[index] && @colorKey[index]==1
  247.       base   = Color.new(0,80,160)
  248.       shadow = Color.new(128,192,240)
  249.     end
  250.     pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,@commands[index],base,shadow)
  251.   end
  252. end
  253.  
  254. class ChangelingSprite < SpriteWrapper
  255.   def initialize(x=0,y=0,viewport=nil)
  256.     super(viewport)
  257.     self.x=x
  258.     self.y=y
  259.     @bitmaps={}
  260.     @currentBitmap=nil
  261.   end
  262.  
  263.   def addBitmap(key,path)
  264.     if @bitmaps[key]
  265.       @bitmaps[key].dispose
  266.     end
  267.     @bitmaps[key]=AnimatedBitmap.new(path)
  268.   end
  269.  
  270.   def changeBitmap(key)
  271.     @currentBitmap=@bitmaps[key]
  272.     self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  273.   end
  274.  
  275.   def dispose
  276.     return if disposed?
  277.     for bm in @bitmaps.values; bm.dispose; end
  278.     @bitmaps.clear
  279.     super
  280.   end
  281.  
  282.   def update
  283.     return if disposed?
  284.     for bm in @bitmaps.values; bm.update; end
  285.     self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  286.   end
  287. end
  288.  
  289.  
  290.  
  291. class PokeSelectionSprite < SpriteWrapper
  292.   attr_reader :selected
  293.   attr_reader :preselected
  294.   attr_reader :switching
  295.   attr_reader :pokemon
  296.   attr_reader :active
  297.   attr_accessor :text
  298.  
  299.   def initialize(pokemon,index,viewport=nil)
  300.     super(viewport)
  301.     @pokemon=pokemon
  302.     active=(index==0)
  303.     @active=active
  304.     if active # Rounded panel
  305.       @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRound")
  306.       @selbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSel")
  307.       @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundFnt")
  308.       @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSelFnt")
  309.       @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSwap")
  310.       @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSelSwap")
  311.     else # Rectangular panel
  312.       @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRect")
  313.       @selbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSel")
  314.       @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectFnt")
  315.       @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSelFnt")
  316.       @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSwap")
  317.       @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSelSwap")
  318.     end
  319.     @spriteXOffset=28
  320.     @spriteYOffset=0
  321.     @pokeballXOffset=10
  322.     @pokeballYOffset=0
  323.     @pokenameX=96
  324.     @pokenameY=16
  325.     @levelX=20
  326.     @levelY=62
  327.     @statusX=80
  328.     @statusY=68
  329.     @genderX=224
  330.     @genderY=16
  331.     @hpX=224
  332.     @hpY=60
  333.     @hpbarX=96
  334.     @hpbarY=50
  335.     @gaugeX=128
  336.     @gaugeY=52
  337.     @itemXOffset=62
  338.     @itemYOffset=48
  339.     @annotX=96
  340.     @annotY=58
  341.     xvalues=[0,256,0,256,0,256]
  342.     yvalues=[0,16,96,112,192,208]
  343.     @text=nil
  344.     @statuses=AnimatedBitmap.new(_INTL("Graphics/Pictures/statuses"))
  345.     @hpbar=AnimatedBitmap.new("Graphics/Pictures/partyHP")
  346.     @hpbarfnt=AnimatedBitmap.new("Graphics/Pictures/partyHPfnt")
  347.     @hpbarswap=AnimatedBitmap.new("Graphics/Pictures/partyHPswap")
  348.     @pokeballsprite=ChangelingSprite.new(0,0,viewport)
  349.     for i in 0..29
  350.       @pokeballsprite.addBitmap(sprintf("%ddesel",i),sprintf("Graphics/Pictures/partyBall%d",i))
  351.       @pokeballsprite.addBitmap(sprintf("%dsel",i),sprintf("Graphics/Pictures/partyBallSel%d",i))
  352.     end
  353.     @pkmnsprite=PokemonIconSprite.new(pokemon,viewport)
  354.     @pkmnsprite.active=active
  355.     @itemsprite=HeldItemIconSprite.new(0,0,@pokemon,viewport)
  356.     @spriteX=xvalues[index]
  357.     @spriteY=yvalues[index]
  358.     @refreshBitmap=true
  359.     @refreshing=false
  360.     @preselected=false
  361.     @switching=false
  362.     @pkmnsprite.z=self.z+2 # For compatibility with RGSS2
  363.     @itemsprite.z=self.z+3 # For compatibility with RGSS2
  364.     @pokeballsprite.z=self.z+1 # For compatibility with RGSS2
  365.     self.selected=false
  366.     self.x=@spriteX
  367.     self.y=@spriteY
  368.     refresh
  369.   end
  370.  
  371.   def dispose
  372.     @selbitmap.dispose
  373.     @statuses.dispose
  374.     @hpbar.dispose
  375.     @deselbitmap.dispose
  376.     @itemsprite.dispose
  377.     @pkmnsprite.dispose
  378.     @pokeballsprite.dispose
  379.     self.bitmap.dispose
  380.     super
  381.   end
  382.  
  383.   def selected=(value)
  384.     @selected=value
  385.     @refreshBitmap=true
  386.     refresh
  387.   end
  388.  
  389.   def text=(value)
  390.     @text=value
  391.     @refreshBitmap=true
  392.     refresh
  393.   end
  394.  
  395.   def pokemon=(value)
  396.     @pokemon=value
  397.     if @pkmnsprite && !@pkmnsprite.disposed?
  398.       @pkmnsprite.pokemon=value
  399.     end
  400.     @refreshBitmap=true
  401.     refresh
  402.   end
  403.  
  404.   def preselected=(value)
  405.     if value!=@preselected
  406.       @preselected=value
  407.       refresh
  408.     end
  409.   end
  410.  
  411.   def switching=(value)
  412.     if value!=@switching
  413.       @switching=value
  414.       refresh
  415.     end
  416.   end
  417.  
  418.   def color=(value)
  419.     super
  420.     refresh
  421.   end
  422.  
  423.   def x=(value)
  424.     super
  425.     refresh
  426.   end
  427.  
  428.   def y=(value)
  429.     super
  430.     refresh
  431.   end
  432.  
  433.   def hp
  434.     return @pokemon.hp
  435.   end
  436.  
  437.   def refresh
  438.     return if @refreshing
  439.     return if disposed?
  440.     @refreshing=true
  441.     if !self.bitmap || self.bitmap.disposed?
  442.       self.bitmap=BitmapWrapper.new(@selbitmap.width,@selbitmap.height)
  443.     end
  444.     if @pkmnsprite && !@pkmnsprite.disposed?
  445.       @pkmnsprite.x=self.x+@spriteXOffset
  446.       @pkmnsprite.y=self.y+@spriteYOffset
  447.       @pkmnsprite.color=pbSrcOver(@pkmnsprite.color,self.color)
  448.       @pkmnsprite.selected=self.selected
  449.     end
  450.     if @pokeballsprite && !@pokeballsprite.disposed?
  451.       @pokeballsprite.x=self.x+@pokeballXOffset
  452.       @pokeballsprite.y=self.y+@pokeballYOffset
  453.       @pokeballsprite.color=self.color
  454.       @pokeballsprite.changeBitmap(self.selected ? sprintf("%dsel",@pokemon.ballused) : sprintf("%ddesel",@pokemon.ballused))
  455.     end
  456.     if @itemsprite && !@itemsprite.disposed?
  457.       @itemsprite.visible=(@pokemon.item>0)
  458.       if @itemsprite.visible
  459.         case @itemsprite.mode
  460.         when 0# item
  461.           @itemsprite.x     = self.x+@itemXOffset
  462.           @itemsprite.y     = self.y+@itemYOffset
  463.         when 1 # mail
  464.           @itemsprite.x     = self.x+@itemXOffset
  465.           @itemsprite.y     = self.y+@itemYOffset
  466.         when 2 # mega stone
  467.           @itemsprite.x     = self.x+@itemXOffset
  468.           @itemsprite.y     = self.y+@itemYOffset-4*2
  469.         # Uncomment this part if using Amethyst's Z-Move add-on
  470.         when 3 # z-crystal
  471.           @itemsprite.x     = self.x+@itemXOffset
  472.           @itemsprite.y     = self.y+@itemYOffset-2
  473.         end
  474.         @itemsprite.color=self.color
  475.       end
  476.     end
  477.     if @refreshBitmap
  478.       @refreshBitmap=false
  479.       self.bitmap.clear if self.bitmap
  480.       if self.selected
  481.         if self.preselected
  482.           self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  483.           self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  484.         elsif @switching
  485.           self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  486.         elsif @pokemon.hp<=0 && !@pokemon.isEgg?
  487.           self.bitmap.blt(0,0,@selfntbitmap.bitmap,Rect.new(0,0,@selfntbitmap.width,@selfntbitmap.height))
  488.         else
  489.           self.bitmap.blt(0,0,@selbitmap.bitmap,Rect.new(0,0,@selbitmap.width,@selbitmap.height))
  490.         end
  491.       else
  492.         if self.preselected
  493.           self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  494.         elsif @pokemon.hp<=0 && !@pokemon.isEgg?
  495.           self.bitmap.blt(0,0,@deselfntbitmap.bitmap,Rect.new(0,0,@deselfntbitmap.width,@deselfntbitmap.height))
  496.         else
  497.           self.bitmap.blt(0,0,@deselbitmap.bitmap,Rect.new(0,0,@deselbitmap.width,@deselbitmap.height))
  498.         end
  499.       end
  500.       base=Color.new(248,248,248)
  501.       shadow=Color.new(40,40,40)
  502.       pbSetSystemFont(self.bitmap)
  503.       pokename=@pokemon.name
  504.       textpos=[[pokename,@pokenameX,@pokenameY,0,base,shadow]]
  505.       if !@pokemon.isEgg?
  506.         if !@text || @text.length==0
  507.           tothp=@pokemon.totalhp
  508.           textpos.push([_ISPRINTF("{1: 3d}/{2: 3d}",@pokemon.hp,tothp),
  509.              @hpX,@hpY,1,base,shadow])
  510.           barbg=(@pokemon.hp<=0) ? @hpbarfnt : @hpbar
  511.           barbg=(self.preselected || (self.selected && @switching)) ? @hpbarswap : barbg
  512.           self.bitmap.blt(@hpbarX,@hpbarY,barbg.bitmap,Rect.new(0,0,@hpbar.width,@hpbar.height))
  513.           hpgauge=@pokemon.totalhp==0 ? 0 : (self.hp*96/@pokemon.totalhp)
  514.           hpgauge=1 if hpgauge==0 && self.hp>0
  515.           hpzone=0
  516.           hpzone=1 if self.hp<=(@pokemon.totalhp/2).floor
  517.           hpzone=2 if self.hp<=(@pokemon.totalhp/4).floor
  518.           hpcolors=[
  519.              Color.new(24,192,32),Color.new(96,248,96),   # Green
  520.              Color.new(232,168,0),Color.new(248,216,0),   # Orange
  521.              Color.new(248,72,56),Color.new(248,152,152)  # Red
  522.           ]
  523.           # fill with HP color
  524.           self.bitmap.fill_rect(@gaugeX,@gaugeY,hpgauge,2,hpcolors[hpzone*2])
  525.           self.bitmap.fill_rect(@gaugeX,@gaugeY+2,hpgauge,4,hpcolors[hpzone*2+1])
  526.           self.bitmap.fill_rect(@gaugeX,@gaugeY+6,hpgauge,2,hpcolors[hpzone*2])
  527.           if @pokemon.hp==0 || @pokemon.status>0
  528.             status=(@pokemon.hp==0) ? 5 : @pokemon.status-1
  529.             statusrect=Rect.new(0,16*status,44,16)
  530.             self.bitmap.blt(@statusX,@statusY,@statuses.bitmap,statusrect)
  531.           end
  532.         end
  533.         if @pokemon.isMale?
  534.           textpos.push([_INTL("♂"),@genderX,@genderY,0,Color.new(0,112,248),Color.new(120,184,232)])
  535.         elsif @pokemon.isFemale?
  536.           textpos.push([_INTL("♀"),@genderX,@genderY,0,Color.new(232,32,16),Color.new(248,168,184)])
  537.         end
  538.       end
  539.       pbDrawTextPositions(self.bitmap,textpos)
  540.       if !@pokemon.isEgg?
  541.         pbSetSmallFont(self.bitmap)
  542.         leveltext=[([_INTL("Lv.{1}",@pokemon.level),@levelX,@levelY,0,base,shadow])]
  543.         pbDrawTextPositions(self.bitmap,leveltext)
  544.       end
  545.       if @text && @text.length>0
  546.         pbSetSystemFont(self.bitmap)
  547.         annotation=[[@text,@annotX,@annotY,0,base,shadow]]
  548.         pbDrawTextPositions(self.bitmap,annotation)
  549.       end
  550.     end
  551.     @refreshing=false
  552.   end
  553.  
  554.   def update
  555.     super
  556.     @pokeballsprite.update if @pokeballsprite && !@pokeballsprite.disposed?
  557.     @itemsprite.update if @itemsprite && !@itemsprite.disposed?
  558.     if @pkmnsprite && !@pkmnsprite.disposed?
  559.       @pkmnsprite.update
  560.     end
  561.   end
  562. end
  563.  
  564.  
  565. ##############################
  566.  
  567.  
  568. class PokemonScreen_Scene
  569.   def pbShowCommands(helptext,commands,index=0)
  570.     ret = -1
  571.     helpwindow = @sprites["helpwindow"]
  572.     helpwindow.visible = true
  573.     using(cmdwindow = Window_CommandPokemonColor.new(commands)) {
  574.       cmdwindow.z     = @viewport.z+1
  575.       cmdwindow.index = index
  576.       pbBottomRight(cmdwindow)
  577.       helpwindow.resizeHeightToFit(helptext,Graphics.width-cmdwindow.width)
  578.       helpwindow.text = helptext
  579.       pbBottomLeft(helpwindow)
  580.       loop do
  581.         Graphics.update
  582.         Input.update
  583.         cmdwindow.update
  584.         self.update
  585.         if Input.trigger?(Input::B)
  586.           pbPlayCancelSE
  587.           ret = -1
  588.           break
  589.         elsif Input.trigger?(Input::C)
  590.           pbPlayDecisionSE
  591.           ret = cmdwindow.index
  592.           break
  593.         end
  594.       end
  595.     }
  596.     return ret
  597.   end
  598.  
  599.   def update
  600.     pbUpdateSpriteHash(@sprites)
  601.   end
  602.  
  603.   def pbSetHelpText(helptext)
  604.     helpwindow=@sprites["helpwindow"]
  605.     pbBottomLeftLines(helpwindow,1)
  606.     helpwindow.text=helptext
  607.     helpwindow.width=398
  608.     helpwindow.visible=true
  609.   end
  610.  
  611.   def pbStartScene(party,starthelptext,annotations=nil,multiselect=false)
  612.     @sprites={}
  613.     @party=party
  614.     @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  615.     @viewport.z=99999
  616.     @multiselect=multiselect
  617.     addBackgroundPlane(@sprites,"partybg","partybg",@viewport)
  618.     @sprites["messagebox"]=Window_AdvancedTextPokemon.new("")
  619.     @sprites["helpwindow"]=Window_UnformattedTextPokemon.new(starthelptext)
  620.     @sprites["messagebox"].viewport=@viewport
  621.     @sprites["messagebox"].visible=false
  622.     @sprites["messagebox"].letterbyletter=true
  623.     @sprites["helpwindow"].viewport=@viewport
  624.     @sprites["helpwindow"].visible=true
  625.     pbBottomLeftLines(@sprites["messagebox"],2)
  626.     pbBottomLeftLines(@sprites["helpwindow"],1)
  627.     pbSetHelpText(starthelptext)
  628.     # Add party Pokémon sprites
  629.     for i in 0...6
  630.       if @party[i]
  631.         @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  632.            @party[i],i,@viewport)
  633.       else
  634.         @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  635.            @party[i],i,@viewport)
  636.       end
  637.       if annotations
  638.         @sprites["pokemon#{i}"].text=annotations[i]
  639.       end
  640.     end
  641.     if @multiselect
  642.       @sprites["pokemon6"]=PokeSelectionConfirmSprite.new(@viewport)
  643.       @sprites["pokemon7"]=PokeSelectionCancelSprite2.new(@viewport)
  644.     else
  645.       @sprites["pokemon6"]=PokeSelectionCancelSprite.new(@viewport)
  646.     end
  647.     # Select first Pokémon
  648.     @activecmd=0
  649.     @sprites["pokemon0"].selected=true
  650.     pbFadeInAndShow(@sprites) { update }
  651.   end
  652.  
  653.   def pbEndScene
  654.     pbFadeOutAndHide(@sprites) { update }
  655.     pbDisposeSpriteHash(@sprites)
  656.     @viewport.dispose
  657.   end
  658.  
  659.   def pbChangeSelection(key,currentsel)
  660.     numsprites=(@multiselect) ? 8 : 7
  661.     case key
  662.     when Input::LEFT
  663.       begin
  664.         currentsel-=1
  665.       end while currentsel>0 && currentsel<@party.length && !@party[currentsel]
  666.       if currentsel>=@party.length && currentsel<6
  667.         currentsel=@party.length-1
  668.       end
  669.       currentsel=numsprites-1 if currentsel<0
  670.     when Input::RIGHT
  671.       begin
  672.         currentsel+=1
  673.       end while currentsel<@party.length && !@party[currentsel]
  674.       if currentsel==@party.length
  675.         currentsel=6
  676.       elsif currentsel==numsprites
  677.         currentsel=0
  678.       end
  679.     when Input::UP
  680.       if currentsel>=6
  681.         begin
  682.           currentsel-=1
  683.         end while currentsel>0 && !@party[currentsel]
  684.       else
  685.         begin
  686.           currentsel-=2
  687.         end while currentsel>0 && !@party[currentsel]
  688.       end
  689.       if currentsel>=@party.length && currentsel<6
  690.         currentsel=@party.length-1
  691.       end
  692.       currentsel=numsprites-1 if currentsel<0
  693.     when Input::DOWN
  694.       if currentsel>=5
  695.         currentsel+=1
  696.       else
  697.         currentsel+=2
  698.         currentsel=6 if currentsel<6 && !@party[currentsel]
  699.       end
  700.       if currentsel>=@party.length && currentsel<6
  701.         currentsel=6
  702.       elsif currentsel>=numsprites
  703.         currentsel=0
  704.       end
  705.     end
  706.     return currentsel
  707.   end
  708.  
  709.   def pbRefresh
  710.     for i in 0...6
  711.       sprite=@sprites["pokemon#{i}"]
  712.       if sprite
  713.         if sprite.is_a?(PokeSelectionSprite)
  714.           sprite.pokemon=sprite.pokemon
  715.         else
  716.           sprite.refresh
  717.         end
  718.       end
  719.     end
  720.   end
  721.  
  722.   def pbRefreshSingle(i)
  723.     sprite=@sprites["pokemon#{i}"]
  724.     if sprite
  725.       if sprite.is_a?(PokeSelectionSprite)
  726.         sprite.pokemon=sprite.pokemon
  727.       else
  728.         sprite.refresh
  729.       end
  730.     end
  731.   end
  732.  
  733.   def pbHardRefresh
  734.     oldtext=[]
  735.     lastselected=-1
  736.     for i in 0...6
  737.       oldtext.push(@sprites["pokemon#{i}"].text)
  738.       lastselected=i if @sprites["pokemon#{i}"].selected
  739.       @sprites["pokemon#{i}"].dispose
  740.     end
  741.     lastselected=@party.length-1 if lastselected>=@party.length
  742.     lastselected=0 if lastselected<0
  743.     for i in 0...6
  744.       if @party[i]
  745.         @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  746.         @party[i],i,@viewport)
  747.       else
  748.         @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  749.         @party[i],i,@viewport)
  750.       end
  751.       @sprites["pokemon#{i}"].text=oldtext[i]
  752.     end
  753.     pbSelect(lastselected)
  754.   end
  755.  
  756.   def pbPreSelect(pkmn)
  757.     @activecmd=pkmn
  758.   end
  759.  
  760.   def pbChoosePokemon(switching=false,initialsel=-1,canswitch=0)
  761.     for i in 0...6
  762.       @sprites["pokemon#{i}"].preselected = (switching && i==@activecmd)
  763.       @sprites["pokemon#{i}"].switching   = switching
  764.     end
  765.     @activecmd = initialsel if initialsel>=0
  766.     pbRefresh
  767.     loop do
  768.       Graphics.update
  769.       Input.update
  770.       self.update
  771.       oldsel = @activecmd
  772.       key = -1
  773.       key = Input::DOWN if Input.repeat?(Input::DOWN)
  774.       key = Input::RIGHT if Input.repeat?(Input::RIGHT)
  775.       key = Input::LEFT if Input.repeat?(Input::LEFT)
  776.       key = Input::UP if Input.repeat?(Input::UP)
  777.       if key>=0
  778.         @activecmd = pbChangeSelection(key,@activecmd)
  779.       end
  780.       if @activecmd!=oldsel # Changing selection
  781.         pbPlayCursorSE
  782.         numsprites = (@multiselect) ? 8 : 7
  783.         for i in 0...numsprites
  784.           @sprites["pokemon#{i}"].selected = (i==@activecmd)
  785.         end
  786.       end
  787.       cancelsprite = (@multiselect) ? 7 : 6
  788.       if Input.trigger?(Input::A) && canswitch==1 && @activecmd!=cancelsprite
  789.         pbPlayDecisionSE
  790.         return [1,@activecmd]
  791.       elsif Input.trigger?(Input::A) && canswitch==2
  792.         return -1
  793.       elsif Input.trigger?(Input::B)
  794.         return -1
  795.       elsif Input.trigger?(Input::C)
  796.         pbPlayDecisionSE
  797.         return (@activecmd==cancelsprite) ? -1 : @activecmd
  798.       end
  799.     end
  800.   end
  801.  
  802.   def pbSelect(item)
  803.     @activecmd=item
  804.     numsprites=(@multiselect) ? 8 : 7
  805.     for i in 0...numsprites
  806.       @sprites["pokemon#{i}"].selected=(i==@activecmd)
  807.     end
  808.   end
  809.  
  810.   def pbPreSelect(item)
  811.     @activecmd = item
  812.   end
  813.  
  814.   def pbSwitchBegin(oldid,newid)
  815.     oldsprite = @sprites["pokemon#{oldid}"]
  816.     newsprite = @sprites["pokemon#{newid}"]
  817.     #oldball   = @sprites["partyBallSel#{@pokemon.ballused}"]
  818.     16.times do
  819.       oldsprite.x += (oldid&1)==0 ? -16 : 16
  820.       newsprite.x += (newid&1)==0 ? -16 : 16
  821.       Graphics.update
  822.       Input.update
  823.       self.update
  824.     end
  825.   end
  826.  
  827.   def pbSwitchEnd(oldid,newid)
  828.     oldsprite = @sprites["pokemon#{oldid}"]
  829.     newsprite = @sprites["pokemon#{newid}"]
  830.     oldsprite.pokemon = @party[oldid]
  831.     newsprite.pokemon = @party[newid]
  832.     16.times do
  833.       oldsprite.x -= (oldid&1)==0 ? -16 : 16
  834.       newsprite.x -= (newid&1)==0 ? -16 : 16
  835.       Graphics.update
  836.       Input.update
  837.       self.update
  838.     end
  839.     for i in 0...6
  840.       @sprites["pokemon#{i}"].preselected = false
  841.       @sprites["pokemon#{i}"].switching   = false
  842.     end
  843.     pbRefresh
  844.   end
  845.  
  846.   def pbClearSwitching
  847.     for i in 0...6
  848.       @sprites["pokemon#{i}"].preselected = false
  849.       @sprites["pokemon#{i}"].switching   = false
  850.     end
  851.   end
  852.  
  853.   def pbDisplay(text)
  854.     @sprites["messagebox"].text=text
  855.     @sprites["messagebox"].visible=true
  856.     @sprites["helpwindow"].visible=false
  857.     pbPlayDecisionSE()
  858.     loop do
  859.       Graphics.update
  860.       Input.update
  861.       self.update
  862.       if @sprites["messagebox"].busy? && Input.trigger?(Input::C)
  863.         pbPlayDecisionSE() if @sprites["messagebox"].pausing?
  864.         @sprites["messagebox"].resume
  865.       end
  866.       if !@sprites["messagebox"].busy? &&
  867.          (Input.trigger?(Input::C) || Input.trigger?(Input::B))
  868.         break
  869.       end
  870.     end
  871.     @sprites["messagebox"].visible=false
  872.     @sprites["helpwindow"].visible=true
  873.   end
  874.  
  875.   def pbSwitchBegin(oldid,newid)
  876.     oldsprite=@sprites["pokemon#{oldid}"]
  877.     newsprite=@sprites["pokemon#{newid}"]
  878.     22.times do
  879.       oldsprite.x+=(oldid&1)==0 ? -12 : 12
  880.       newsprite.x+=(newid&1)==0 ? -12 : 12
  881.       Graphics.update
  882.       Input.update
  883.       self.update
  884.     end
  885.   end
  886.  
  887.   def pbSwitchEnd(oldid,newid)
  888.     oldsprite=@sprites["pokemon#{oldid}"]
  889.     newsprite=@sprites["pokemon#{newid}"]
  890.     oldsprite.pokemon=@party[oldid]
  891.     newsprite.pokemon=@party[newid]
  892.     22.times do
  893.       oldsprite.x-=(oldid&1)==0 ? -12 : 12
  894.       newsprite.x-=(newid&1)==0 ? -12 : 12
  895.       Graphics.update
  896.       Input.update
  897.       self.update
  898.     end
  899.     for i in 0...6
  900.       @sprites["pokemon#{i}"].preselected=false
  901.       @sprites["pokemon#{i}"].switching=false
  902.     end
  903.     pbRefresh
  904.   end
  905.  
  906.   def pbDisplayConfirm(text)
  907.     ret=-1
  908.     @sprites["messagebox"].text=text
  909.     @sprites["messagebox"].visible=true
  910.     @sprites["helpwindow"].visible=false
  911.     using(cmdwindow=Window_CommandPokemon.new([_INTL("Yes"),_INTL("No")])){
  912.        cmdwindow.z=@viewport.z+1
  913.        cmdwindow.visible=false
  914.        pbBottomRight(cmdwindow)
  915.        cmdwindow.y-=@sprites["messagebox"].height
  916.        loop do
  917.          Graphics.update
  918.          Input.update
  919.          cmdwindow.visible=true if !@sprites["messagebox"].busy?
  920.          cmdwindow.update
  921.          self.update
  922.          if Input.trigger?(Input::B) && !@sprites["messagebox"].busy?
  923.            ret=false
  924.            break
  925.          end
  926.          if Input.trigger?(Input::C) && @sprites["messagebox"].resume && !@sprites["messagebox"].busy?
  927.            ret=(cmdwindow.index==0)
  928.            break
  929.          end
  930.        end
  931.     }
  932.     @sprites["messagebox"].visible=false
  933.     @sprites["helpwindow"].visible=true
  934.     return ret
  935.   end
  936.  
  937.   def pbAnnotate(annot)
  938.     for i in 0...6
  939.       if annot
  940.         @sprites["pokemon#{i}"].text=annot[i]
  941.       else
  942.         @sprites["pokemon#{i}"].text=nil
  943.       end
  944.     end
  945.   end
  946.  
  947.   def pbSummary(pkmnid)
  948.     oldsprites=pbFadeOutAndHide(@sprites)
  949.     scene=PokemonSummaryScene.new
  950.     screen=PokemonSummary.new(scene)
  951.     screen.pbStartScreen(@party,pkmnid)
  952.     pbFadeInAndShow(@sprites,oldsprites)
  953.   end
  954.  
  955.   def pbChooseItem(bag)
  956.     oldsprites=pbFadeOutAndHide(@sprites)
  957.     @sprites["helpwindow"].visible=false
  958.     @sprites["messagebox"].visible=false
  959.     scene=PokemonBag_Scene.new
  960.     screen=PokemonBagScreen.new(scene,bag)
  961.     ret=screen.pbGiveItemScreen
  962.     pbFadeInAndShow(@sprites,oldsprites)
  963.     return ret
  964.   end
  965.  
  966.   def pbUseItem(bag,pokemon)
  967.     oldsprites=pbFadeOutAndHide(@sprites)
  968.     @sprites["helpwindow"].visible=false
  969.     @sprites["messagebox"].visible=false
  970.     scene=PokemonBag_Scene.new
  971.     screen=PokemonBagScreen.new(scene,bag)
  972.     ret=screen.pbUseItemScreen(pokemon)
  973.     pbFadeInAndShow(@sprites,oldsprites)
  974.     return ret
  975.   end
  976.  
  977.   def pbMessageFreeText(text,startMsg,maxlength)
  978.     return Kernel.pbMessageFreeText(
  979.        _INTL("Please enter a message (max. {1} characters).",maxlength),
  980.        _INTL("{1}",startMsg),false,maxlength,Graphics.width) { update }
  981.   end
  982. end
  983.  
  984.  
  985. ######################################
  986.  
  987.  
  988. class PokemonScreen
  989.   def initialize(scene,party)
  990.     @party=party
  991.     @scene=scene
  992.   end
  993.  
  994.   def pbHardRefresh
  995.     @scene.pbHardRefresh
  996.   end
  997.  
  998.   def pbRefresh
  999.     @scene.pbRefresh
  1000.   end
  1001.  
  1002.   def pbRefreshSingle(i)
  1003.     @scene.pbRefreshSingle(i)
  1004.   end
  1005.  
  1006.   def pbDisplay(text)
  1007.     @scene.pbDisplay(text)
  1008.   end
  1009.  
  1010.   def pbConfirm(text)
  1011.     return @scene.pbDisplayConfirm(text)
  1012.   end
  1013.  
  1014.   def pbSwitch(oldid,newid)
  1015.     if oldid!=newid
  1016.       @scene.pbSwitchBegin(oldid,newid)
  1017.       tmp=@party[oldid]
  1018.       @party[oldid]=@party[newid]
  1019.       @party[newid]=tmp
  1020.       @scene.pbSwitchEnd(oldid,newid)
  1021.     end
  1022.   end
  1023.  
  1024.   def pbMailScreen(item,pkmn,pkmnid)
  1025.     message=""
  1026.     loop do
  1027.       message=@scene.pbMessageFreeText(
  1028.          _INTL("Please enter a message (max. 256 characters)."),"",256)
  1029.       if message!=""
  1030.         # Store mail if a message was written
  1031.         poke1=poke2=poke3=nil
  1032.         if $Trainer.party[pkmnid+2]
  1033.           p=$Trainer.party[pkmnid+2]
  1034.           poke1=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  1035.           poke1.push(true) if p.isEgg?
  1036.         end
  1037.         if $Trainer.party[pkmnid+1]
  1038.           p=$Trainer.party[pkmnid+1]
  1039.           poke2=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  1040.           poke2.push(true) if p.isEgg?
  1041.         end
  1042.         poke3=[pkmn.species,pkmn.gender,pkmn.isShiny?,(pkmn.form rescue 0),(pkmn.isShadow? rescue false)]
  1043.         poke3.push(true) if pkmn.isEgg?
  1044.         pbStoreMail(pkmn,item,message,poke1,poke2,poke3)
  1045.         return true
  1046.       else
  1047.         return false if pbConfirm(_INTL("Stop giving the Pokémon Mail?"))
  1048.       end
  1049.     end
  1050.   end
  1051.  
  1052.   def pbTakeMail(pkmn)
  1053.     if !pkmn.hasItem?
  1054.       pbDisplay(_INTL("{1} isn't holding anything.",pkmn.name))
  1055.     elsif !$PokemonBag.pbCanStore?(pkmn.item)
  1056.       pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
  1057.     elsif pkmn.mail
  1058.       if pbConfirm(_INTL("Send the removed mail to your PC?"))
  1059.         if !pbMoveToMailbox(pkmn)
  1060.           pbDisplay(_INTL("Your PC's Mailbox is full."))
  1061.         else
  1062.           pbDisplay(_INTL("The mail was sent to your PC."))
  1063.           pkmn.setItem(0)
  1064.         end
  1065.       elsif pbConfirm(_INTL("If the mail is removed, the message will be lost. OK?"))
  1066.         pbDisplay(_INTL("Mail was taken from the Pokémon."))
  1067.         $PokemonBag.pbStoreItem(pkmn.item)
  1068.         pkmn.setItem(0)
  1069.         pkmn.mail=nil
  1070.       end
  1071.     else
  1072.       $PokemonBag.pbStoreItem(pkmn.item)
  1073.       itemname=PBItems.getName(pkmn.item)
  1074.       pbDisplay(_INTL("Received the {1} from {2}.",itemname,pkmn.name))
  1075.       pkmn.setItem(0)
  1076.     end
  1077.   end
  1078.  
  1079.   def pbGiveMail(item,pkmn,pkmnid=0)
  1080.     thisitemname=PBItems.getName(item)
  1081.     if pkmn.isEgg?
  1082.       pbDisplay(_INTL("Eggs can't hold items."))
  1083.       return false
  1084.     elsif pkmn.mail
  1085.       pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",pkmn.name))
  1086.       return false
  1087.     end
  1088.     if pkmn.item!=0
  1089.       itemname=PBItems.getName(pkmn.item)
  1090.       pbDisplay(_INTL("{1} is already holding {2}.\1",pkmn.name,itemname))
  1091.       if pbConfirm(_INTL("Would you like to switch the two items?"))
  1092.         $PokemonBag.pbDeleteItem(item)
  1093.         if !$PokemonBag.pbStoreItem(pkmn.item)
  1094.           if !$PokemonBag.pbStoreItem(item) # Compensate
  1095.             raise _INTL("Can't re-store deleted item in bag")
  1096.           end
  1097.           pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
  1098.         else
  1099.           if pbIsMail?(item)
  1100.             if pbMailScreen(item,pkmn,pkmnid)
  1101.               pkmn.setItem(item)
  1102.               pbDisplay(_INTL("The {1} was taken and replaced with the {2}.",itemname,thisitemname))
  1103.               return true
  1104.             else
  1105.               if !$PokemonBag.pbStoreItem(item) # Compensate
  1106.                 raise _INTL("Can't re-store deleted item in bag")
  1107.               end
  1108.             end
  1109.           else
  1110.             pkmn.setItem(item)
  1111.             pbDisplay(_INTL("Took the Pokémon's {1} and gave it the {2}.",itemname,thisitemname))
  1112.             return true
  1113.           end
  1114.         end
  1115.       end
  1116.     else
  1117.       if !pbIsMail?(item) || pbMailScreen(item,pkmn,pkmnid) # Open the mail screen if necessary
  1118.         $PokemonBag.pbDeleteItem(item)
  1119.         pkmn.setItem(item)
  1120.         pbDisplay(_INTL("The Pokémon is now holding the {1}.",thisitemname))
  1121.         return true
  1122.       end
  1123.     end
  1124.     return false
  1125.   end
  1126.  
  1127.   def pbPokemonGiveScreen(item)
  1128.     @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  1129.     pkmnid=@scene.pbChoosePokemon
  1130.     ret=false
  1131.     if pkmnid>=0
  1132.       ret=pbGiveMail(item,@party[pkmnid],pkmnid)
  1133.     end
  1134.     pbRefreshSingle(pkmnid)
  1135.     @scene.pbEndScene
  1136.     return ret
  1137.   end
  1138.  
  1139.   def pbPokemonGiveMailScreen(mailIndex)
  1140.     @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  1141.     pkmnid=@scene.pbChoosePokemon
  1142.     if pkmnid>=0
  1143.       pkmn=@party[pkmnid]
  1144.       if pkmn.item!=0 || pkmn.mail
  1145.         pbDisplay(_INTL("This Pokémon is holding an item. It can't hold mail."))
  1146.       elsif pkmn.isEgg?
  1147.         pbDisplay(_INTL("Eggs can't hold mail."))
  1148.       else
  1149.         pbDisplay(_INTL("Mail was transferred from the Mailbox."))
  1150.         pkmn.mail=$PokemonGlobal.mailbox[mailIndex]
  1151.         pkmn.setItem(pkmn.mail.item)
  1152.         $PokemonGlobal.mailbox.delete_at(mailIndex)
  1153.         pbRefreshSingle(pkmnid)
  1154.       end
  1155.     end
  1156.     @scene.pbEndScene
  1157.   end
  1158.  
  1159.   def pbStartScene(helptext,doublebattle,annotations=nil)
  1160.     @scene.pbStartScene(@party,helptext,annotations)
  1161.   end
  1162.  
  1163.   def pbChoosePokemon(helptext=nil)
  1164.     @scene.pbSetHelpText(helptext) if helptext
  1165.     return @scene.pbChoosePokemon
  1166.   end
  1167.  
  1168.   def pbChooseMove(pokemon,helptext)
  1169.     movenames=[]
  1170.     for i in pokemon.moves
  1171.       break if i.id==0
  1172.       if i.totalpp==0
  1173.         movenames.push(_INTL("{1} (PP: ---)",PBMoves.getName(i.id),i.pp,i.totalpp))
  1174.       else
  1175.         movenames.push(_INTL("{1} (PP: {2}/{3})",PBMoves.getName(i.id),i.pp,i.totalpp))
  1176.       end
  1177.     end
  1178.     return @scene.pbShowCommands(helptext,movenames)
  1179.   end
  1180.  
  1181.   def pbEndScene
  1182.     @scene.pbEndScene
  1183.   end
  1184.  
  1185.   # Checks for identical species
  1186.   def pbCheckSpecies(array)
  1187.     for i in 0...array.length
  1188.       for j in i+1...array.length
  1189.         return false if array[i].species==array[j].species
  1190.       end
  1191.     end
  1192.     return true
  1193.   end
  1194.  
  1195. # Checks for identical held items
  1196.   def pbCheckItems(array)
  1197.     for i in 0...array.length
  1198.       next if !array[i].hasItem?
  1199.       for j in i+1...array.length
  1200.         return false if array[i].item==array[j].item
  1201.       end
  1202.     end
  1203.     return true
  1204.   end
  1205.  
  1206.   def pbPokemonMultipleEntryScreenEx(ruleset)
  1207.     annot=[]
  1208.     statuses=[]
  1209.     ordinals=[
  1210.        _INTL("INELIGIBLE"),
  1211.        _INTL("NOT ENTERED"),
  1212.        _INTL("BANNED"),
  1213.        _INTL("FIRST"),
  1214.        _INTL("SECOND"),
  1215.        _INTL("THIRD"),
  1216.        _INTL("FOURTH"),
  1217.        _INTL("FIFTH"),
  1218.        _INTL("SIXTH")
  1219.     ]
  1220.     if !ruleset.hasValidTeam?(@party)
  1221.       return nil
  1222.     end
  1223.     ret=nil
  1224.     addedEntry=false
  1225.     for i in 0...@party.length
  1226.       if ruleset.isPokemonValid?(@party[i])
  1227.         statuses[i]=1
  1228.       else
  1229.         statuses[i]=2
  1230.       end  
  1231.     end
  1232.     for i in 0...@party.length
  1233.       annot[i]=ordinals[statuses[i]]
  1234.     end
  1235.     @scene.pbStartScene(@party,_INTL("Choose Pokémon and confirm."),annot,true)
  1236.     loop do
  1237.       realorder=[]
  1238.       for i in 0...@party.length
  1239.         for j in 0...@party.length
  1240.           if statuses[j]==i+3
  1241.             realorder.push(j)
  1242.             break
  1243.           end
  1244.         end
  1245.       end
  1246.       for i in 0...realorder.length
  1247.         statuses[realorder[i]]=i+3
  1248.       end
  1249.       for i in 0...@party.length
  1250.         annot[i]=ordinals[statuses[i]]
  1251.       end
  1252.       @scene.pbAnnotate(annot)
  1253.       if realorder.length==ruleset.number && addedEntry
  1254.         @scene.pbSelect(6)
  1255.       end
  1256.       @scene.pbSetHelpText(_INTL("Choose Pokémon and confirm."))
  1257.       pkmnid=@scene.pbChoosePokemon
  1258.       addedEntry=false
  1259.       if pkmnid==6 # Confirm was chosen
  1260.         ret=[]
  1261.         for i in realorder
  1262.           ret.push(@party[i])
  1263.         end
  1264.         error=[]
  1265.         if !ruleset.isValid?(ret,error)
  1266.           pbDisplay(error[0])
  1267.           ret=nil
  1268.         else
  1269.           break
  1270.         end
  1271.       end
  1272.       if pkmnid<0 # Canceled
  1273.         break
  1274.       end
  1275.       cmdEntry=-1
  1276.       cmdNoEntry=-1
  1277.       cmdSummary=-1
  1278.       commands=[]
  1279.       if (statuses[pkmnid] || 0) == 1
  1280.         commands[cmdEntry=commands.length]=_INTL("Entry")
  1281.       elsif (statuses[pkmnid] || 0) > 2
  1282.         commands[cmdNoEntry=commands.length]=_INTL("No Entry")
  1283.       end
  1284.       pkmn=@party[pkmnid]
  1285.       commands[cmdSummary=commands.length]=_INTL("Summary")
  1286.       commands[commands.length]=_INTL("Cancel")
  1287.       command=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands) if pkmn
  1288.       if cmdEntry>=0 && command==cmdEntry
  1289.         if realorder.length>=ruleset.number && ruleset.number>0
  1290.           pbDisplay(_INTL("No more than {1} Pokémon may enter.",ruleset.number))
  1291.         else
  1292.           statuses[pkmnid]=realorder.length+3
  1293.           addedEntry=true
  1294.           pbRefreshSingle(pkmnid)
  1295.         end
  1296.       elsif cmdNoEntry>=0 && command==cmdNoEntry
  1297.         statuses[pkmnid]=1
  1298.         pbRefreshSingle(pkmnid)
  1299.       elsif cmdSummary>=0 && command==cmdSummary
  1300.         @scene.pbSummary(pkmnid)
  1301.       end
  1302.     end
  1303.     @scene.pbEndScene
  1304.     return ret
  1305.   end
  1306.  
  1307.   def pbChooseAblePokemon(ableProc,allowIneligible=false)
  1308.     annot=[]
  1309.     eligibility=[]
  1310.     for pkmn in @party
  1311.       elig=ableProc.call(pkmn)
  1312.       eligibility.push(elig)
  1313.       annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1314.     end
  1315.     ret=-1
  1316.     @scene.pbStartScene(@party,
  1317.        @party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),annot)
  1318.     loop do
  1319.       @scene.pbSetHelpText(
  1320.          @party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1321.       pkmnid=@scene.pbChoosePokemon
  1322.       if pkmnid<0
  1323.         break
  1324.       elsif !eligibility[pkmnid] && !allowIneligible
  1325.         pbDisplay(_INTL("This Pokémon can't be chosen."))
  1326.       else
  1327.         ret=pkmnid
  1328.         break
  1329.       end
  1330.     end
  1331.     @scene.pbEndScene
  1332.     return ret
  1333.   end
  1334.  
  1335.   def pbRefreshAnnotations(ableProc)   # For after using an evolution stone
  1336.     annot=[]
  1337.     for pkmn in @party
  1338.       elig=ableProc.call(pkmn)
  1339.       annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1340.     end
  1341.     @scene.pbAnnotate(annot)
  1342.   end
  1343.  
  1344.   def pbClearAnnotations
  1345.     @scene.pbAnnotate(nil)
  1346.   end
  1347.  
  1348.   def pbPokemonDebug(pkmn,pkmnid)
  1349.     command=0
  1350.     loop do
  1351.       command=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),[
  1352.          _INTL("HP/Status"),
  1353.          _INTL("Level"),
  1354.          _INTL("Species"),
  1355.          _INTL("Moves"),
  1356.          _INTL("Gender"),
  1357.          _INTL("Ability"),
  1358.          _INTL("Nature"),
  1359.          _INTL("Shininess"),
  1360.          _INTL("Form"),
  1361.          _INTL("Happiness"),
  1362.          _INTL("Affection"),
  1363.          _INTL("EV/IV/pID"),
  1364.          _INTL("Pokérus"),
  1365.          _INTL("Ownership"),
  1366.          _INTL("Nickname"),
  1367.          _INTL("Poké Ball"),
  1368.          _INTL("Ribbons"),
  1369.          _INTL("Egg"),
  1370.          _INTL("Shadow Pokémon"),
  1371.          _INTL("Make Mystery Gift"),
  1372.          _INTL("Duplicate"),
  1373.          _INTL("Force Evo"),
  1374.          _INTL("Delta"),
  1375.          _INTL("Delete"),
  1376.          _INTL("Cancel")
  1377.       ],command)
  1378.       case command
  1379.       ### Cancel ###
  1380.       when -1, 24
  1381.         break
  1382.       ### HP/Status ###
  1383.       when 0
  1384.         cmd=0
  1385.         loop do
  1386.           cmd=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),[
  1387.              _INTL("Set HP"),
  1388.              _INTL("Status: Sleep"),
  1389.              _INTL("Status: Poison"),
  1390.              _INTL("Status: Burn"),
  1391.              _INTL("Status: Paralysis"),
  1392.              _INTL("Status: Frozen"),
  1393.              _INTL("Fainted"),
  1394.              _INTL("Heal")
  1395.           ],cmd)
  1396.           # Break
  1397.           if cmd==-1
  1398.             break
  1399.           # Set HP
  1400.           elsif cmd==0
  1401.             params=ChooseNumberParams.new
  1402.             params.setRange(0,pkmn.totalhp)
  1403.             params.setDefaultValue(pkmn.hp)
  1404.             newhp=Kernel.pbMessageChooseNumber(
  1405.                _INTL("Set the Pokémon's HP (max. {1}).",pkmn.totalhp),params) { @scene.update }
  1406.             if newhp!=pkmn.hp
  1407.               pkmn.hp=newhp
  1408.               pbDisplay(_INTL("{1}'s HP was set to {2}.",pkmn.name,pkmn.hp))
  1409.               pbRefreshSingle(pkmnid)
  1410.             end
  1411.           # Set status
  1412.           elsif cmd>=1 && cmd<=5
  1413.             if pkmn.hp>0
  1414.               pkmn.status=cmd
  1415.               pkmn.statusCount=0
  1416.               if pkmn.status==PBStatuses::SLEEP
  1417.                 params=ChooseNumberParams.new
  1418.                 params.setRange(0,9)
  1419.                 params.setDefaultValue(0)
  1420.                 sleep=Kernel.pbMessageChooseNumber(
  1421.                    _INTL("Set the Pokémon's sleep count."),params) { @scene.update }
  1422.                 pkmn.statusCount=sleep
  1423.               end
  1424.               pbDisplay(_INTL("{1}'s status was changed.",pkmn.name))
  1425.               pbRefreshSingle(pkmnid)
  1426.             else
  1427.               pbDisplay(_INTL("{1}'s status could not be changed.",pkmn.name))
  1428.             end
  1429.           # Faint
  1430.           elsif cmd==6
  1431.             pkmn.hp=0
  1432.             pbDisplay(_INTL("{1}'s HP was set to 0.",pkmn.name))
  1433.             pbRefreshSingle(pkmnid)
  1434.           # Heal
  1435.           elsif cmd==7
  1436.             pkmn.heal
  1437.             pbDisplay(_INTL("{1} was fully healed.",pkmn.name))
  1438.             pbRefreshSingle(pkmnid)
  1439.           end
  1440.         end
  1441.       ### Level ###
  1442.       when 1
  1443.         params=ChooseNumberParams.new
  1444.         params.setRange(1,PBExperience::MAXLEVEL)
  1445.         params.setDefaultValue(pkmn.level)
  1446.         level=Kernel.pbMessageChooseNumber(
  1447.            _INTL("Set the Pokémon's level (max. {1}).",PBExperience::MAXLEVEL),params) { @scene.update }
  1448.         if level!=pkmn.level
  1449.           pkmn.level=level
  1450.           pkmn.calcStats
  1451.           pbDisplay(_INTL("{1}'s level was set to {2}.",pkmn.name,pkmn.level))
  1452.           pbRefreshSingle(pkmnid)
  1453.         end
  1454.       ### Species ###
  1455.       when 2
  1456.         species=pbChooseSpecies(pkmn.species)
  1457.         if species!=0
  1458.           oldspeciesname=PBSpecies.getName(pkmn.species)
  1459.           pkmn.species=species
  1460.           pkmn.calcStats
  1461.           oldname=pkmn.name
  1462.           pkmn.name=PBSpecies.getName(pkmn.species) if pkmn.name==oldspeciesname
  1463.           pbDisplay(_INTL("{1}'s species was changed to {2}.",oldname,PBSpecies.getName(pkmn.species)))
  1464.           pbSeenForm(pkmn)
  1465.           pbRefreshSingle(pkmnid)
  1466.         end
  1467.       ### Moves ###
  1468.       when 3
  1469.         cmd=0
  1470.         loop do
  1471.           cmd=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),[
  1472.              _INTL("Teach move"),
  1473.              _INTL("Forget move"),
  1474.              _INTL("Reset movelist"),
  1475.              _INTL("Reset initial moves")],cmd)
  1476.           # Break
  1477.           if cmd==-1
  1478.             break
  1479.           # Teach move
  1480.           elsif cmd==0
  1481.             move=pbChooseMoveList
  1482.             if move!=0
  1483.               pbLearnMove(pkmn,move)
  1484.               pbRefreshSingle(pkmnid)
  1485.             end
  1486.           # Forget move
  1487.           elsif cmd==1
  1488.             move=pbChooseMove(pkmn,_INTL("Choose move to forget."))
  1489.             if move>=0
  1490.               movename=PBMoves.getName(pkmn.moves[move].id)
  1491.               pkmn.pbDeleteMoveAtIndex(move)
  1492.               pbDisplay(_INTL("{1} forgot {2}.",pkmn.name,movename))
  1493.               pbRefreshSingle(pkmnid)
  1494.             end
  1495.           # Reset movelist
  1496.           elsif cmd==2
  1497.             pkmn.resetMoves
  1498.             pbDisplay(_INTL("{1}'s moves were reset.",pkmn.name))
  1499.             pbRefreshSingle(pkmnid)
  1500.           # Reset initial moves
  1501.           elsif cmd==3
  1502.             pkmn.pbRecordFirstMoves
  1503.             pbDisplay(_INTL("{1}'s moves were set as its first-known moves.",pkmn.name))
  1504.             pbRefreshSingle(pkmnid)
  1505.           end
  1506.         end
  1507.       ### Gender ###
  1508.       when 4
  1509.         if pkmn.gender==2
  1510.           pbDisplay(_INTL("{1} is genderless.",pkmn.name))
  1511.         else
  1512.           cmd=0
  1513.           loop do
  1514.             oldgender=(pkmn.isMale?) ? _INTL("male") : _INTL("female")
  1515.             msg=[_INTL("Gender {1} is natural.",oldgender),
  1516.                  _INTL("Gender {1} is being forced.",oldgender)][pkmn.genderflag ? 1 : 0]
  1517.             cmd=@scene.pbShowCommands(msg,[
  1518.                _INTL("Make male"),
  1519.                _INTL("Make female"),
  1520.                _INTL("Remove override")],cmd)
  1521.             # Break
  1522.             if cmd==-1
  1523.               break
  1524.             # Make male
  1525.             elsif cmd==0
  1526.               pkmn.setGender(0)
  1527.               if pkmn.isMale?
  1528.                 pbDisplay(_INTL("{1} is now male.",pkmn.name))
  1529.               else
  1530.                 pbDisplay(_INTL("{1}'s gender couldn't be changed.",pkmn.name))
  1531.               end
  1532.             # Make female
  1533.             elsif cmd==1
  1534.               pkmn.setGender(1)
  1535.               if pkmn.isFemale?
  1536.                 pbDisplay(_INTL("{1} is now female.",pkmn.name))
  1537.               else
  1538.                 pbDisplay(_INTL("{1}'s gender couldn't be changed.",pkmn.name))
  1539.               end
  1540.             # Remove override
  1541.             elsif cmd==2
  1542.               pkmn.genderflag=nil
  1543.               pbDisplay(_INTL("Gender override removed."))
  1544.             end
  1545.             pbSeenForm(pkmn)
  1546.             pbRefreshSingle(pkmnid)
  1547.           end
  1548.         end
  1549.       ### Ability ###
  1550.       when 5
  1551.         cmd=0
  1552.         loop do
  1553.           abils=pkmn.getAbilityList
  1554.           oldabil=PBAbilities.getName(pkmn.ability)
  1555.           commands=[]
  1556.           for i in abils
  1557.             commands.push((i[1]<2 ? "" : "(H) ")+PBAbilities.getName(i[0]))
  1558.           end
  1559.           commands.push(_INTL("Remove override"))
  1560.           msg=[_INTL("Ability {1} is natural.",oldabil),
  1561.                _INTL("Ability {1} is being forced.",oldabil)][pkmn.abilityflag!=nil ? 1 : 0]
  1562.           cmd=@scene.pbShowCommands(msg,commands,cmd)
  1563.           # Break
  1564.           if cmd==-1
  1565.             break
  1566.           # Set ability override
  1567.           elsif cmd>=0 && cmd<abils.length
  1568.             pkmn.setAbility(abils[cmd][1])
  1569.           # Remove override
  1570.           elsif cmd==abils.length
  1571.             pkmn.abilityflag=nil
  1572.           end
  1573.           pbRefreshSingle(pkmnid)
  1574.         end
  1575.       ### Nature ###
  1576.       when 6
  1577.         cmd=0
  1578.         loop do
  1579.           oldnature=PBNatures.getName(pkmn.nature)
  1580.           commands=[]
  1581.           (PBNatures.getCount).times do |i|
  1582.             commands.push(PBNatures.getName(i))
  1583.           end
  1584.           commands.push(_INTL("Remove override"))
  1585.           msg=[_INTL("Nature {1} is natural.",oldnature),
  1586.                _INTL("Nature {1} is being forced.",oldnature)][pkmn.natureflag ? 1 : 0]
  1587.           cmd=@scene.pbShowCommands(msg,commands,cmd)
  1588.           # Break
  1589.           if cmd==-1
  1590.             break
  1591.           # Set nature override
  1592.           elsif cmd>=0 && cmd<PBNatures.getCount
  1593.             pkmn.setNature(cmd)
  1594.             pkmn.calcStats
  1595.           # Remove override
  1596.           elsif cmd==PBNatures.getCount
  1597.             pkmn.natureflag=nil
  1598.           end
  1599.           pbRefreshSingle(pkmnid)
  1600.         end
  1601.       ### Shininess ###
  1602.       when 7
  1603.         cmd=0
  1604.         loop do
  1605.           oldshiny=(pkmn.isShiny?) ? _INTL("shiny") : _INTL("normal")
  1606.           msg=[_INTL("Shininess ({1}) is natural.",oldshiny),
  1607.                _INTL("Shininess ({1}) is being forced.",oldshiny)][pkmn.shinyflag!=nil ? 1 : 0]
  1608.           cmd=@scene.pbShowCommands(msg,[
  1609.                _INTL("Make shiny"),
  1610.                _INTL("Make normal"),
  1611.                _INTL("Remove override")],cmd)
  1612.           # Break
  1613.           if cmd==-1
  1614.             break
  1615.           # Make shiny
  1616.           elsif cmd==0
  1617.             pkmn.makeShiny
  1618.           # Make normal
  1619.           elsif cmd==1
  1620.             pkmn.makeNotShiny
  1621.           # Remove override
  1622.           elsif cmd==2
  1623.             pkmn.shinyflag=nil
  1624.           end
  1625.           pbRefreshSingle(pkmnid)
  1626.         end
  1627.       ### Form ###
  1628.       when 8
  1629.         params=ChooseNumberParams.new
  1630.         params.setRange(0,100)
  1631.         params.setDefaultValue(pkmn.form)
  1632.         f=Kernel.pbMessageChooseNumber(
  1633.            _INTL("Set the Pokémon's form."),params) { @scene.update }
  1634.         if f!=pkmn.form
  1635.           pkmn.form=f
  1636.           pbDisplay(_INTL("{1}'s form was set to {2}.",pkmn.name,pkmn.form))
  1637.           pbSeenForm(pkmn)
  1638.           pbRefreshSingle(pkmnid)
  1639.         end
  1640.       ### Happiness ###
  1641.       when 9
  1642.         params=ChooseNumberParams.new
  1643.         params.setRange(0,255)
  1644.         params.setDefaultValue(pkmn.happiness)
  1645.         h=Kernel.pbMessageChooseNumber(
  1646.            _INTL("Set the Pokémon's happiness (max. 255)."),params) { @scene.update }
  1647.         if h!=pkmn.happiness
  1648.           pkmn.happiness=h
  1649.           pbDisplay(_INTL("{1}'s happiness was set to {2}.",pkmn.name,pkmn.happiness))
  1650.           pbRefreshSingle(pkmnid)
  1651.         end
  1652.       ### Affection ###
  1653.       when 10
  1654.         params=ChooseNumberParams.new
  1655.         params.setRange(0,255)
  1656.         params.setDefaultValue(pkmn.amie_affection)
  1657.         l=Kernel.pbMessageChooseNumber(
  1658.            _INTL("Set the Pokémon's affection (max. 255)."),params) { @scene.update }
  1659.         if l!=pkmn.amie_affection
  1660.           pkmn.amie_affection=l
  1661.           pbDisplay(_INTL("{1}'s affection was set to {2}.",pkmn.name,pkmn.amie_affection))
  1662.           pbRefreshSingle(pkmnid)
  1663.         end
  1664.       ### EV/IV/pID ###
  1665.       when 11
  1666.         stats=[_INTL("HP"),_INTL("Attack"),_INTL("Defense"),
  1667.                _INTL("Speed"),_INTL("Sp. Attack"),_INTL("Sp. Defense")]
  1668.         cmd=0
  1669.         loop do
  1670.           persid=sprintf("0x%08X",pkmn.personalID)
  1671.           cmd=@scene.pbShowCommands(_INTL("Personal ID is {1}.",persid),[
  1672.              _INTL("Set EVs"),
  1673.              _INTL("Set IVs"),
  1674.              _INTL("Randomise pID")],cmd)
  1675.           case cmd
  1676.           # Break
  1677.           when -1
  1678.             break
  1679.           # Set EVs
  1680.           when 0
  1681.             cmd2=0
  1682.             loop do
  1683.               evcommands=[]
  1684.               for i in 0...stats.length
  1685.                 evcommands.push(stats[i]+" (#{pkmn.ev[i]})")
  1686.               end
  1687.               cmd2=@scene.pbShowCommands(_INTL("Change which EV?"),evcommands,cmd2)
  1688.               if cmd2==-1
  1689.                 break
  1690.               elsif cmd2>=0 && cmd2<stats.length
  1691.                 params=ChooseNumberParams.new
  1692.                 params.setRange(0,PokeBattle_Pokemon::EVSTATLIMIT)
  1693.                 params.setDefaultValue(pkmn.ev[cmd2])
  1694.                 params.setCancelValue(pkmn.ev[cmd2])
  1695.                 f=Kernel.pbMessageChooseNumber(
  1696.                    _INTL("Set the EV for {1} (max. {2}).",
  1697.                       stats[cmd2],PokeBattle_Pokemon::EVSTATLIMIT),params) { @scene.update }
  1698.                 pkmn.ev[cmd2]=f
  1699.                 pkmn.totalhp
  1700.                 pkmn.calcStats
  1701.                 pbRefreshSingle(pkmnid)
  1702.               end
  1703.             end
  1704.           # Set IVs
  1705.           when 1
  1706.             cmd2=0
  1707.             loop do
  1708.               hiddenpower=pbHiddenPower(pkmn.iv)
  1709.               msg=_INTL("Hidden Power:\n{1}, power {2}.",PBTypes.getName(hiddenpower[0]),hiddenpower[1])
  1710.               ivcommands=[]
  1711.               for i in 0...stats.length
  1712.                 ivcommands.push(stats[i]+" (#{pkmn.iv[i]})")
  1713.               end
  1714.               ivcommands.push(_INTL("Randomise all"))
  1715.               cmd2=@scene.pbShowCommands(msg,ivcommands,cmd2)
  1716.               if cmd2==-1
  1717.                 break
  1718.               elsif cmd2>=0 && cmd2<stats.length
  1719.                 params=ChooseNumberParams.new
  1720.                 params.setRange(0,31)
  1721.                 params.setDefaultValue(pkmn.iv[cmd2])
  1722.                 params.setCancelValue(pkmn.iv[cmd2])
  1723.                 f=Kernel.pbMessageChooseNumber(
  1724.                    _INTL("Set the IV for {1} (max. 31).",stats[cmd2]),params) { @scene.update }
  1725.                 pkmn.iv[cmd2]=f
  1726.                 pkmn.calcStats
  1727.                 pbRefreshSingle(pkmnid)
  1728.               elsif cmd2==ivcommands.length-1
  1729.                 pkmn.iv[0]=rand(32)
  1730.                 pkmn.iv[1]=rand(32)
  1731.                 pkmn.iv[2]=rand(32)
  1732.                 pkmn.iv[3]=rand(32)
  1733.                 pkmn.iv[4]=rand(32)
  1734.                 pkmn.iv[5]=rand(32)
  1735.                 pkmn.calcStats
  1736.                 pbRefreshSingle(pkmnid)
  1737.               end
  1738.             end
  1739.           # Randomise pID
  1740.           when 2
  1741.             pkmn.personalID=rand(256)
  1742.             pkmn.personalID|=rand(256)<<8
  1743.             pkmn.personalID|=rand(256)<<16
  1744.             pkmn.personalID|=rand(256)<<24
  1745.             pkmn.calcStats
  1746.             pbRefreshSingle(pkmnid)
  1747.           end
  1748.         end
  1749.       ### Pokérus ###
  1750.       when 12
  1751.         cmd=0
  1752.         loop do
  1753.           pokerus=(pkmn.pokerus) ? pkmn.pokerus : 0
  1754.           msg=[_INTL("{1} doesn't have Pokérus.",pkmn.name),
  1755.                _INTL("Has strain {1}, infectious for {2} more days.",pokerus/16,pokerus%16),
  1756.                _INTL("Has strain {1}, not infectious.",pokerus/16)][pkmn.pokerusStage]
  1757.           cmd=@scene.pbShowCommands(msg,[
  1758.                _INTL("Give random strain"),
  1759.                _INTL("Make not infectious"),
  1760.                _INTL("Clear Pokérus")],cmd)
  1761.           # Break
  1762.           if cmd==-1
  1763.             break
  1764.           # Give random strain
  1765.           elsif cmd==0
  1766.             pkmn.givePokerus
  1767.           # Make not infectious
  1768.           elsif cmd==1
  1769.             strain=pokerus/16
  1770.             p=strain<<4
  1771.             pkmn.pokerus=p
  1772.           # Clear Pokérus
  1773.           elsif cmd==2
  1774.             pkmn.pokerus=0
  1775.           end
  1776.         end
  1777.       ### Ownership ###
  1778.       when 13
  1779.         cmd=0
  1780.         loop do
  1781.           gender=[_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender]
  1782.           msg=[_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID),
  1783.                _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID)
  1784.               ][pkmn.isForeign?($Trainer) ? 1 : 0]
  1785.           cmd=@scene.pbShowCommands(msg,[
  1786.                _INTL("Make player's"),
  1787.                _INTL("Set OT's name"),
  1788.                _INTL("Set OT's gender"),
  1789.                _INTL("Random foreign ID"),
  1790.                _INTL("Set foreign ID")],cmd)
  1791.           # Break
  1792.           if cmd==-1
  1793.             break
  1794.           # Make player's
  1795.           elsif cmd==0
  1796.             pkmn.trainerID=$Trainer.id
  1797.             pkmn.ot=$Trainer.name
  1798.             pkmn.otgender=$Trainer.gender
  1799.           # Set OT's name
  1800.           elsif cmd==1
  1801.             newot=pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,7)
  1802.             pkmn.ot=newot
  1803.           # Set OT's gender
  1804.           elsif cmd==2
  1805.             cmd2=@scene.pbShowCommands(_INTL("Set OT's gender."),
  1806.                [_INTL("Male"),_INTL("Female"),_INTL("Unknown")])
  1807.             pkmn.otgender=cmd2 if cmd2>=0
  1808.           # Random foreign ID
  1809.           elsif cmd==3
  1810.             pkmn.trainerID=$Trainer.getForeignID
  1811.           # Set foreign ID
  1812.           elsif cmd==4
  1813.             params=ChooseNumberParams.new
  1814.             params.setRange(0,65535)
  1815.             params.setDefaultValue(pkmn.publicID)
  1816.             val=Kernel.pbMessageChooseNumber(
  1817.                _INTL("Set the new ID (max. 65535)."),params) { @scene.update }
  1818.             pkmn.trainerID=val
  1819.             pkmn.trainerID|=val<<16
  1820.           end
  1821.         end
  1822.       ### Nickname ###
  1823.       when 14
  1824.         cmd=0
  1825.         loop do
  1826.           formcheck = MultipleForms.call("speciesName",pkmn)
  1827.           if formcheck!=nil
  1828.             speciesname=formcheck
  1829.           else
  1830.             speciesname=PBSpecies.getName(pkmn.species)
  1831.           end
  1832.           msg=[_INTL("{1} has the nickname {2}.",speciesname,pkmn.name),
  1833.                _INTL("{1} has no nickname.",speciesname)][pkmn.name==speciesname ? 1 : 0]
  1834.           cmd=@scene.pbShowCommands(msg,[
  1835.                _INTL("Rename"),
  1836.                _INTL("Erase name")],cmd)
  1837.           # Break
  1838.           if cmd==-1
  1839.             break
  1840.           # Rename
  1841.           elsif cmd==0
  1842.             newname=pbEnterPokemonName(_INTL("{1}'s nickname?",speciesname),0,13,"",pkmn)
  1843.             pkmn.name=(newname=="") ? speciesname : newname
  1844.             pbRefreshSingle(pkmnid)
  1845.           # Erase name
  1846.           elsif cmd==1
  1847.             pkmn.name=speciesname
  1848.           end
  1849.         end
  1850.       ### Poké Ball ###
  1851.       when 15
  1852.         cmd=0
  1853.         loop do
  1854.           oldball=PBItems.getName(pbBallTypeToBall(pkmn.ballused))
  1855.           commands=[]; balls=[]
  1856.           for key in $BallTypes.keys
  1857.             item=getID(PBItems,$BallTypes[key])
  1858.             balls.push([key,PBItems.getName(item)]) if item && item>0
  1859.           end
  1860.           balls.sort! {|a,b| a[1]<=>b[1]}
  1861.           for i in 0...commands.length
  1862.             cmd=i if pkmn.ballused==balls[i][0]
  1863.           end
  1864.           for i in balls
  1865.             commands.push(i[1])
  1866.           end
  1867.           cmd=@scene.pbShowCommands(_INTL("{1} used.",oldball),commands,cmd)
  1868.           if cmd==-1
  1869.             break
  1870.           else
  1871.             pkmn.ballused=balls[cmd][0]
  1872.           end
  1873.         end
  1874.       ### Ribbons ###
  1875.       when 16
  1876.         cmd=0
  1877.         loop do
  1878.           commands=[]
  1879.           for i in 1..PBRibbons.maxValue
  1880.             commands.push(_INTL("{1} {2}",
  1881.                pkmn.hasRibbon?(i) ? "[X]" : "[  ]",PBRibbons.getName(i)))
  1882.           end
  1883.           cmd=@scene.pbShowCommands(_INTL("{1} ribbons.",pkmn.ribbonCount),commands,cmd)
  1884.           if cmd==-1
  1885.             break
  1886.           elsif cmd>=0 && cmd<commands.length
  1887.             if pkmn.hasRibbon?(cmd+1)
  1888.               pkmn.takeRibbon(cmd+1)
  1889.             else
  1890.               pkmn.giveRibbon(cmd+1)
  1891.             end
  1892.           end
  1893.         end
  1894.       ### Egg ###
  1895.       when 17
  1896.         cmd=0
  1897.         loop do
  1898.           msg=[_INTL("Not an egg"),
  1899.                _INTL("Egg with eggsteps: {1}.",pkmn.eggsteps)][pkmn.isEgg? ? 1 : 0]
  1900.           cmd=@scene.pbShowCommands(msg,[
  1901.                _INTL("Make egg"),
  1902.                _INTL("Make Pokémon"),
  1903.                _INTL("Set eggsteps to 1")],cmd)
  1904.           # Break
  1905.           if cmd==-1
  1906.             break
  1907.           # Make egg
  1908.           elsif cmd==0
  1909.             if pbHasEgg?(pkmn.species) ||
  1910.                pbConfirm(_INTL("{1} cannot be an egg. Make egg anyway?",PBSpecies.getName(pkmn.species)))
  1911.               pkmn.level=EGGINITIALLEVEL
  1912.               pkmn.calcStats
  1913.               pkmn.name=_INTL("Egg")
  1914.               dexdata=pbOpenDexData
  1915.               pbDexDataOffset(dexdata,pkmn.species,21)
  1916.               pkmn.eggsteps=dexdata.fgetw
  1917.               dexdata.close
  1918.               pkmn.hatchedMap=0
  1919.               pkmn.obtainMode=1
  1920.               pbRefreshSingle(pkmnid)
  1921.             end
  1922.           # Make Pokémon
  1923.           elsif cmd==1
  1924.             pkmn.name=PBSpecies.getName(pkmn.species)
  1925.             pkmn.eggsteps=0
  1926.             pkmn.hatchedMap=0
  1927.             pkmn.obtainMode=0
  1928.             pbRefreshSingle(pkmnid)
  1929.           # Set eggsteps to 1
  1930.           elsif cmd==2
  1931.             pkmn.eggsteps=1 if pkmn.eggsteps>0
  1932.           end
  1933.         end
  1934.       ### Shadow Pokémon ###
  1935.       when 18
  1936.         cmd=0
  1937.         loop do
  1938.           msg=[_INTL("Not a Shadow Pokémon."),
  1939.                _INTL("Heart gauge is {1}.",pkmn.heartgauge)][(pkmn.isShadow? rescue false) ? 1 : 0]
  1940.           cmd=@scene.pbShowCommands(msg,[
  1941.              _INTL("Make Shadow"),
  1942.              _INTL("Lower heart gauge")],cmd)
  1943.           # Break
  1944.           if cmd==-1
  1945.             break
  1946.           # Make Shadow
  1947.           elsif cmd==0
  1948.             if !(pkmn.isShadow? rescue false) && pkmn.respond_to?("makeShadow")
  1949.               pkmn.makeShadow
  1950.               pbDisplay(_INTL("{1} is now a Shadow Pokémon.",pkmn.name))
  1951.               pbRefreshSingle(pkmnid)
  1952.             else
  1953.               pbDisplay(_INTL("{1} is already a Shadow Pokémon.",pkmn.name))
  1954.             end
  1955.           # Lower heart gauge
  1956.           elsif cmd==1
  1957.             if (pkmn.isShadow? rescue false)
  1958.               prev=pkmn.heartgauge
  1959.               pkmn.adjustHeart(-700)
  1960.               Kernel.pbMessage(_INTL("{1}'s heart gauge was lowered from {2} to {3} (now stage {4}).",
  1961.                  pkmn.name,prev,pkmn.heartgauge,pkmn.heartStage))
  1962.               pbReadyToPurify(pkmn)
  1963.             else
  1964.               Kernel.pbMessage(_INTL("{1} is not a Shadow Pokémon.",pkmn.name))
  1965.             end
  1966.           end
  1967.         end
  1968.       ### Make Mystery Gift ###
  1969.       when 19
  1970.         pbCreateMysteryGift(0,pkmn)
  1971.       ### Duplicate ###
  1972.       when 20
  1973.         if pbConfirm(_INTL("Are you sure you want to copy this Pokémon?"))
  1974.           clonedpkmn=pkmn.clone
  1975.           clonedpkmn.iv=pkmn.iv.clone
  1976.           clonedpkmn.ev=pkmn.ev.clone
  1977.           pbStorePokemon(clonedpkmn)
  1978.           pbHardRefresh
  1979.           pbDisplay(_INTL("The Pokémon was duplicated."))
  1980.           break
  1981.         end
  1982.       ## Force Evolution##  
  1983.       when 21  
  1984.         pbForceEvo(pkmn)
  1985.         pbHardRefresh
  1986.       ### Delta ###
  1987.       when 22
  1988.         cmd=0
  1989.         loop do
  1990.           olddelta=(pkmn.isDelta?) ? _INTL("delta") : _INTL("normal")
  1991.           msg=[_INTL("Delta ({1}) is natural.",olddelta),
  1992.                _INTL("Delta ({1}) is being forced.",olddelta)][pkmn.deltaflag!=nil ? 1 : 0]
  1993.           cmd=@scene.pbShowCommands(msg,[
  1994.                _INTL("Make delta"),
  1995.                _INTL("Make normal"),
  1996.                _INTL("Remove override")],cmd)
  1997.           # Break
  1998.           if cmd==-1
  1999.             break
  2000.           # Make shiny
  2001.           elsif cmd==0
  2002.             pkmn.makeDelta
  2003.             typecommand=0
  2004.             typecommand2=0
  2005.             loop do
  2006.               typecommand=@scene.pbShowCommands(_INTL("Choose type 1."),[
  2007.                 _INTL("Normal"),
  2008.                 _INTL("Fighting"),
  2009.                 _INTL("Flying"),
  2010.                 _INTL("Poison"),
  2011.                 _INTL("Ground"),
  2012.                 _INTL("Rock"),
  2013.                 _INTL("Bug"),
  2014.                 _INTL("Ghost"),
  2015.                 _INTL("Steel"),
  2016.                 _INTL("Fire"),
  2017.                 _INTL("Water"),
  2018.                 _INTL("Grass"),
  2019.                 _INTL("Electric"),
  2020.                 _INTL("Psychic"),
  2021.                 _INTL("Ice"),
  2022.                 _INTL("Dragon"),
  2023.                 _INTL("Dark"),
  2024.                 _INTL("Fairy")],typecommand)
  2025.                 if typecommand==-1
  2026.                   break
  2027.                 elsif typecommand==0
  2028.                   pkmn.deltatype=getConst(PBTypes,:NORMAL)
  2029.                 elsif typecommand==1
  2030.                   pkmn.deltatype=getConst(PBTypes,:FIGHTING)
  2031.                 elsif typecommand==2
  2032.                   pkmn.deltatype=getConst(PBTypes,:FLYING)
  2033.                 elsif typecommand==3
  2034.                   pkmn.deltatype=getConst(PBTypes,:POISON)
  2035.                 elsif typecommand==4
  2036.                   pkmn.deltatype=getConst(PBTypes,:GROUND)
  2037.                 elsif typecommand==5
  2038.                   pkmn.deltatype=getConst(PBTypes,:ROCK)
  2039.                 elsif typecommand==6
  2040.                   pkmn.deltatype=getConst(PBTypes,:BUG)
  2041.                 elsif typecommand==7
  2042.                   pkmn.deltatype=getConst(PBTypes,:GHOST)
  2043.                 elsif typecommand==8
  2044.                   pkmn.deltatype=getConst(PBTypes,:STEEL)
  2045.                 elsif typecommand==9
  2046.                   pkmn.deltatype=getConst(PBTypes,:FIRE)
  2047.                 elsif typecommand==10
  2048.                   pkmn.deltatype=getConst(PBTypes,:WATER)
  2049.                 elsif typecommand==11
  2050.                   pkmn.deltatype=getConst(PBTypes,:GRASS)
  2051.                 elsif typecommand==12
  2052.                   pkmn.deltatype=getConst(PBTypes,:ELECTRIC)
  2053.                 elsif typecommand==13
  2054.                   pkmn.deltatype=getConst(PBTypes,:PSYCHIC)
  2055.                 elsif typecommand==14
  2056.                   pkmn.deltatype=getConst(PBTypes,:ICE)
  2057.                 elsif typecommand==15
  2058.                   pkmn.deltatype=getConst(PBTypes,:DRAGON)
  2059.                 elsif typecommand==16
  2060.                   pkmn.deltatype=getConst(PBTypes,:DARK)
  2061.                 elsif typecommand==17
  2062.                   pkmn.deltatype=getConst(PBTypes,:FAIRY)
  2063.                 end
  2064.               typecommand2=@scene.pbShowCommands(_INTL("Choose type 2."),[
  2065.                 _INTL("Normal"),
  2066.                 _INTL("Fighting"),
  2067.                 _INTL("Flying"),
  2068.                 _INTL("Poison"),
  2069.                 _INTL("Ground"),
  2070.                 _INTL("Rock"),
  2071.                 _INTL("Bug"),
  2072.                 _INTL("Ghost"),
  2073.                 _INTL("Steel"),
  2074.                 _INTL("Fire"),
  2075.                 _INTL("Water"),
  2076.                 _INTL("Grass"),
  2077.                 _INTL("Electric"),
  2078.                 _INTL("Psychic"),
  2079.                 _INTL("Ice"),
  2080.                 _INTL("Dragon"),
  2081.                 _INTL("Dark"),
  2082.                 _INTL("Fairy")],typecommand2)
  2083.                 if typecommand2==-1
  2084.                   break
  2085.                 elsif typecommand2==0
  2086.                   pkmn.deltatype2=getConst(PBTypes,:NORMAL)
  2087.                 elsif typecommand2==1
  2088.                   pkmn.deltatype2=getConst(PBTypes,:FIGHTING)
  2089.                 elsif typecommand2==2
  2090.                   pkmn.deltatype2=getConst(PBTypes,:FLYING)
  2091.                 elsif typecommand2==3
  2092.                   pkmn.deltatype2=getConst(PBTypes,:POISON)
  2093.                 elsif typecommand2==4
  2094.                   pkmn.deltatype2=getConst(PBTypes,:GROUND)
  2095.                 elsif typecommand2==5
  2096.                   pkmn.deltatype2=getConst(PBTypes,:ROCK)
  2097.                 elsif typecommand2==6
  2098.                   pkmn.deltatype2=getConst(PBTypes,:BUG)
  2099.                 elsif typecommand2==7
  2100.                   pkmn.deltatype2=getConst(PBTypes,:GHOST)
  2101.                 elsif typecommand2==8
  2102.                   pkmn.deltatype2=getConst(PBTypes,:STEEL)
  2103.                 elsif typecommand2==9
  2104.                   pkmn.deltatype2=getConst(PBTypes,:FIRE)
  2105.                 elsif typecommand2==10
  2106.                   pkmn.deltatype2=getConst(PBTypes,:WATER)
  2107.                 elsif typecommand2==11
  2108.                   pkmn.deltatype2=getConst(PBTypes,:GRASS)
  2109.                 elsif typecommand2==12
  2110.                   pkmn.deltatype2=getConst(PBTypes,:ELECTRIC)
  2111.                 elsif typecommand2==13
  2112.                   pkmn.deltatype2=getConst(PBTypes,:PSYCHIC)
  2113.                 elsif typecommand2==14
  2114.                   pkmn.deltatype2=getConst(PBTypes,:ICE)
  2115.                 elsif typecommand2==15
  2116.                   pkmn.deltatype2=getConst(PBTypes,:DRAGON)
  2117.                 elsif typecommand2==16
  2118.                   pkmn.deltatype2=getConst(PBTypes,:DARK)
  2119.                 elsif typecommand2==17
  2120.                   pkmn.deltatype2=getConst(PBTypes,:FAIRY)
  2121.                 end
  2122.               end
  2123.              
  2124.           # Make normal
  2125.           elsif cmd==1
  2126.             pkmn.makeNotDelta
  2127.           # Remove override
  2128.           elsif cmd==2
  2129.             pkmn.deltaflag=nil
  2130.           end
  2131.           pbRefreshSingle(pkmnid)
  2132.         end
  2133.       ### Delete ###
  2134.       when 23
  2135.         if pbConfirm(_INTL("Are you sure you want to delete this Pokémon?"))
  2136.           @party[pkmnid]=nil
  2137.           @party.compact!
  2138.           pbHardRefresh
  2139.           pbDisplay(_INTL("The Pokémon was deleted."))
  2140.           break
  2141.         end
  2142.       end
  2143.     end
  2144.   end
  2145.  
  2146.   def pbForceEvo(pokemon,usefirst=false)
  2147.     newspecies=0
  2148.     for form in pbGetEvolvedFormData(pokemon.species,pokemon)
  2149.       newspecies=form[2] if newspecies<=0 || !usefirst
  2150.     end
  2151.     if newspecies>0
  2152.       evo=PokemonEvolutionScene.new
  2153.       evo.pbStartScreen(pokemon,newspecies)
  2154.       evo.pbEvolution
  2155.       evo.pbEndScreen
  2156.     end
  2157.   end
  2158.  
  2159.   def pbForceDeEvo(pokemon)
  2160.     newspecies=pbGetPreviousForm(pokemon.species,pokemon)
  2161.     return if !newspecies
  2162.     return if newspecies==pokemon.species
  2163.     if newspecies>0
  2164.       evo=PokemonEvolutionScene.new
  2165.       evo.pbStartScreen(pokemon,newspecies)
  2166.       evo.pbEvolution
  2167.       evo.pbEndScreen
  2168.     end
  2169.   end
  2170.  
  2171.   def pbForceBabyEvo(pokemon)
  2172.     newspecies=pbGetBabySpecies(pokemon.species)
  2173.     return if !newspecies
  2174.     return if newspecies==pokemon.species
  2175.     if newspecies>0
  2176.       evo=PokemonEvolutionScene.new
  2177.       evo.pbStartScreen(pokemon,newspecies)
  2178.       evo.pbEvolution
  2179.       evo.pbEndScreen
  2180.     end
  2181.   end
  2182.  
  2183.   def pbPokemonScreen
  2184.     @scene.pbStartScene(@party,
  2185.        (@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),nil)
  2186.     loop do
  2187.       @scene.pbSetHelpText((@party.length>1) ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  2188.       pkmnid = @scene.pbChoosePokemon(false,-1,1)
  2189.       break if (pkmnid.is_a?(Numeric) && pkmnid<0) || (pkmnid.is_a?(Array) && pkmnid[1]<0)
  2190.       if pkmnid.is_a?(Array) && pkmnid[0]==1   # Switch
  2191.         @scene.pbSetHelpText(_INTL("Move to where?"))
  2192.         oldpkmnid = pkmnid[1]
  2193.         pkmnid = @scene.pbChoosePokemon(true,-1,2)
  2194.         if pkmnid>=0 && pkmnid!=oldpkmnid
  2195.           pbSwitch(oldpkmnid,pkmnid)
  2196.         end
  2197.         next
  2198.       end
  2199.       pkmn = @party[pkmnid]
  2200.       commands   = []
  2201.       cmdMoves   = [-1,-1,-1,-1]
  2202.       cmdSummary = -1
  2203.       cmdDebug   = -1
  2204.       cmdSwitch  = -1
  2205.       cmdMail    = -1
  2206.       cmdItem    = -1
  2207.       # Build the commands
  2208.       for i in 0...pkmn.moves.length
  2209.         move = pkmn.moves[i]
  2210.         # Check for hidden moves and add any that were found
  2211.         if !pkmn.isEgg? && (isConst?(move.id,PBMoves,:MILKDRINK) ||
  2212.                             isConst?(move.id,PBMoves,:SOFTBOILED) ||
  2213.                             isConst?(move.id,PBMoves,:CLAMP) ||
  2214.                             HiddenMoveHandlers.hasHandler(move.id))
  2215.           commands[cmdMoves[i] = commands.length] = [PBMoves.getName(move.id),1]
  2216.         end
  2217.       end
  2218.       commands[cmdSummary = commands.length]      = _INTL("Summary")
  2219.       commands[cmdDebug = commands.length]        = _INTL("Debug") if $DEBUG
  2220.       commands[cmdSwitch=commands.length]       = _INTL("Switch") if @party.length>1
  2221.       if !pkmn.isEgg?
  2222.         if pkmn.mail
  2223.           commands[cmdMail=commands.length]     = _INTL("Mail")
  2224.         else
  2225.           commands[cmdItem=commands.length]     = _INTL("Item")
  2226.         end
  2227.       end
  2228.       commands[commands.length]                 = _INTL("Cancel")
  2229.       command=@scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands)
  2230.       havecommand=false
  2231.       for i in 0...4
  2232.         if cmdMoves[i]>=0 && command==cmdMoves[i]
  2233.           havecommand=true
  2234.           if isConst?(pkmn.moves[i].id,PBMoves,:SOFTBOILED) ||
  2235.              isConst?(pkmn.moves[i].id,PBMoves,:MILKDRINK)
  2236.             amt=[(pkmn.totalhp/5).floor,1].max
  2237.             if pkmn.hp<=amt
  2238.               pbDisplay(_INTL("Not enough HP..."))
  2239.               break
  2240.             end
  2241.             @scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
  2242.             oldpkmnid=pkmnid
  2243.             loop do
  2244.               @scene.pbPreSelect(oldpkmnid)
  2245.               pkmnid=@scene.pbChoosePokemon(true,pkmnid)
  2246.               break if pkmnid<0
  2247.               newpkmn=@party[pkmnid]
  2248.               if pkmnid==oldpkmnid
  2249.                 pbDisplay(_INTL("{1} can't use {2} on itself!",pkmn.name,PBMoves.getName(pkmn.moves[i].id)))
  2250.               elsif newpkmn.isEgg?
  2251.                 pbDisplay(_INTL("{1} can't be used on an Egg!",PBMoves.getName(pkmn.moves[i].id)))
  2252.               elsif newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp
  2253.                 pbDisplay(_INTL("{1} can't be used on that Pokémon.",PBMoves.getName(pkmn.moves[i].id)))
  2254.               else
  2255.                 pkmn.hp-=amt
  2256.                 hpgain=pbItemRestoreHP(newpkmn,amt)
  2257.                 @scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",newpkmn.name,hpgain))
  2258.                 pbRefresh
  2259.               end
  2260.               break if pkmn.hp<=amt
  2261.             end
  2262.             break
  2263.             elsif isConst?(pkmn.moves[i].id,PBMoves,:CLAMP)
  2264.               @scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
  2265.               oldpkmnid=pkmnid
  2266.               oldpkmn=pkmn
  2267.               loop do
  2268.               @scene.pbPreSelect(pkmnid)
  2269.               pkmnid=@scene.pbChoosePokemon(true)
  2270.               break if pkmnid<0
  2271.               newpkmn=@party[pkmnid]
  2272.               oldlvl=newpkmn.level
  2273.               oldclamp=newpkmn.clamped
  2274.               oldmark=newpkmn.markings
  2275.               if newpkmn.species==PBSpecies::SLOWPOKE && oldpkmn.species==PBSpecies::SHELLDER
  2276.                 if newpkmn.item==PBItems::KINGSROCK || newpkmn.level>=37
  2277.                   newpkmn.clamped=1
  2278.                   newpkmn.markings=8
  2279.                   newspecies=pbCheckEvolution(newpkmn)
  2280.                   if newspecies>0
  2281.                     pbDisplay(_INTL("{1} clamped down on the Pokémon!",pkmn.name))
  2282.                     pbFadeOutInWithMusic(99999){
  2283.                     evo=PokemonEvolutionScene.new
  2284.                     evo.pbStartScreen(newpkmn,newspecies)
  2285.                     evo.pbEvolution
  2286.                     evo.pbEndScreen
  2287.                   }
  2288.                   end
  2289.                 newpkmn.level=oldlvl
  2290.                 newpkmn.clamped=oldclamp
  2291.                 newpkmn.markings=oldmark
  2292.                 newpkmn=@party[pkmnid]
  2293.                 #@party[oldpkmnid]=nil
  2294.                 oldpkmn.form=1
  2295.                 @party.compact!
  2296.                 pbHardRefresh
  2297.                 pbRefresh
  2298.                 break
  2299.                 else
  2300.                   pbDisplay(_INTL("It won't work."))
  2301.                 end
  2302.                 else
  2303.                 pbDisplay(_INTL("Why would you do that?"))
  2304.               end
  2305.             end
  2306.             break
  2307.           elsif Kernel.pbCanUseHiddenMove?(pkmn,pkmn.moves[i].id)
  2308.             @scene.pbEndScene
  2309.             if isConst?(pkmn.moves[i].id,PBMoves,:FLY)
  2310.               $game_variables[95]=pkmn
  2311.               scene=PokemonRegionMapScene.new(-1,false)
  2312.               screen=PokemonRegionMap.new(scene)
  2313.               ret=screen.pbStartFlyScreen
  2314.               if ret
  2315.                 $PokemonTemp.flydata=ret
  2316.                 return [pkmn,pkmn.moves[i].id]
  2317.               end
  2318.               @scene.pbStartScene(@party,
  2319.                  @party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  2320.               break
  2321.             end
  2322.             return [pkmn,pkmn.moves[i].id]
  2323.           else
  2324.             break
  2325.           end
  2326.         end
  2327.       end
  2328.       next if havecommand
  2329.       if cmdSummary>=0 && command==cmdSummary
  2330.         @scene.pbSummary(pkmnid)
  2331.       elsif cmdDebug>=0 && command==cmdDebug
  2332.         pbPokemonDebug(pkmn,pkmnid)
  2333.       elsif cmdSwitch>=0 && command==cmdSwitch
  2334.         @scene.pbSetHelpText(_INTL("Move to where?"))
  2335.         oldpkmnid=pkmnid
  2336.         pkmnid=@scene.pbChoosePokemon(true)
  2337.         if pkmnid>=0 && pkmnid!=oldpkmnid
  2338.           pbSwitch(oldpkmnid,pkmnid)
  2339.         end
  2340.       elsif cmdMail>=0 && command==cmdMail
  2341.         command=@scene.pbShowCommands(_INTL("Do what with the mail?"),
  2342.            [_INTL("Read"),_INTL("Take"),_INTL("Cancel")])
  2343.         case command
  2344.         when 0 # Read
  2345.           pbFadeOutIn(99999){
  2346.              pbDisplayMail(pkmn.mail,pkmn)
  2347.           }
  2348.         when 1 # Take
  2349.           pbTakeMail(pkmn)
  2350.           pbRefreshSingle(pkmnid)
  2351.         end
  2352.       elsif cmdItem>=0 && command==cmdItem
  2353.         itemcommands = []
  2354.         cmdUseItem   = -1
  2355.         cmdGiveItem  = -1
  2356.         cmdTakeItem  = -1
  2357.         cmdMoveItem  = -1
  2358.         # Build the commands
  2359.         itemcommands[cmdUseItem=itemcommands.length]  = _INTL("Use")
  2360.         itemcommands[cmdGiveItem=itemcommands.length] = _INTL("Give")
  2361.         itemcommands[cmdTakeItem=itemcommands.length] = _INTL("Take") if pkmn.hasItem?
  2362.         itemcommands[cmdMoveItem=itemcommands.length] = _INTL("Move") if pkmn.hasItem? && !pbIsMail?(pkmn.item)
  2363.         itemcommands[itemcommands.length]             = _INTL("Cancel")
  2364.         command=@scene.pbShowCommands(_INTL("Do what with an item?"),itemcommands)
  2365.         if cmdUseItem>=0 && command==cmdUseItem   # Use
  2366.           item=@scene.pbUseItem($PokemonBag,pkmn)
  2367.           if item>0
  2368.             pbUseItemOnPokemon(item,pkmn,self)
  2369.             pbRefreshSingle(pkmnid)
  2370.           end
  2371.         elsif cmdGiveItem>=0 && command==cmdGiveItem   # Give
  2372.           item=@scene.pbChooseItem($PokemonBag)
  2373.           if item>0
  2374.             pbGiveMail(item,pkmn,pkmnid)
  2375.             pbRefreshSingle(pkmnid)
  2376.           end
  2377.         elsif cmdTakeItem>=0 && command==cmdTakeItem   # Take
  2378.           pbTakeMail(pkmn)
  2379.           pbRefreshSingle(pkmnid)
  2380.         elsif cmdMoveItem>=0 && command==cmdMoveItem   # Move
  2381.           item=pkmn.item
  2382.           itemname=PBItems.getName(item)
  2383.           @scene.pbSetHelpText(_INTL("Give {1} to which Pokémon?",itemname))
  2384.           oldpkmnid=pkmnid
  2385.           loop do
  2386.             @scene.pbPreSelect(oldpkmnid)
  2387.             pkmnid=@scene.pbChoosePokemon(true,pkmnid)
  2388.             break if pkmnid<0
  2389.             newpkmn=@party[pkmnid]
  2390.             if pkmnid==oldpkmnid
  2391.               break
  2392.             elsif newpkmn.isEgg?
  2393.               pbDisplay(_INTL("Eggs can't hold items."))
  2394.             elsif !newpkmn.hasItem?
  2395.               newpkmn.setItem(item)
  2396.               pkmn.setItem(0)
  2397.               pbRefresh
  2398.               pbDisplay(_INTL("{1} was given the {2} to hold.",newpkmn.name,itemname))
  2399.               break
  2400.             elsif pbIsMail?(newpkmn.item)
  2401.               pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",newpkmn.name))
  2402.             else
  2403.               newitem=newpkmn.item
  2404.               newitemname=PBItems.getName(newitem)
  2405.               if isConst?(newitem,PBItems,:LEFTOVERS)
  2406.                 pbDisplay(_INTL("{1} is already holding some {2}.\1",newpkmn.name,newitemname))
  2407.               elsif ['a','e','i','o','u'].include?(newitemname[0,1].downcase)
  2408.                 pbDisplay(_INTL("{1} is already holding an {2}.\1",newpkmn.name,newitemname))
  2409.               else
  2410.                 pbDisplay(_INTL("{1} is already holding a {2}.\1",newpkmn.name,newitemname))
  2411.               end
  2412.               if pbConfirm(_INTL("Would you like to switch the two items?"))
  2413.                 newpkmn.setItem(item)
  2414.                 pkmn.setItem(newitem)
  2415.                 pbRefresh
  2416.                 pbDisplay(_INTL("{1} was given the {2} to hold.",newpkmn.name,itemname))
  2417.                 pbDisplay(_INTL("{1} was given the {2} to hold.",pkmn.name,newitemname))
  2418.                 break
  2419.               end
  2420.             end
  2421.           end
  2422.         end
  2423.       end
  2424.     end
  2425.     @scene.pbEndScene
  2426.     return nil
  2427.   end  
  2428. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement