Advertisement
TechSkylander1518

v19 EBDX intros

Nov 22nd, 2022
1,233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 114.55 KB | None | 0 0
  1. SHOW_LINEUP_WILD = true
  2.  
  3. def pbAnim1(viewport)
  4.     # load ball sprite
  5.     ball = Sprite.new(viewport)
  6.     ball.bitmap = pbBitmap("Graphics/Transitions/Common/ball")
  7.     ball.center!(true)
  8.     ball.zoom_x = 0
  9.     ball.zoom_y = 0
  10.     # spin ball into place
  11.     16.times do
  12.       ball.angle += 22.5
  13.       ball.zoom_x += 0.0625
  14.       ball.zoom_y += 0.0625
  15.       pbWait(1)
  16.     end
  17.     # take screenshot
  18.     bmp = Graphics.snap_to_bitmap
  19.     pbWait(8)
  20.     # dispose ball sprite
  21.     ball.dispose
  22.     # black background
  23.     black = Sprite.new(viewport)
  24.     black.bitmap = Bitmap.new(viewport.width,viewport.height)
  25.     black.bitmap.fill_rect(0,0,viewport.width,viewport.height,Color.black)
  26.     # split screenshot into two halves
  27.     field1 = Sprite.new(viewport)
  28.     field1.bitmap = Bitmap.new(viewport.width, viewport.height)
  29.     field1.bitmap.blt(0, 0, bmp, viewport.rect)
  30.     field1.src_rect.height = viewport.height/2
  31.     field2 = Sprite.new(viewport)
  32.     field2.bitmap = field1.bitmap.clone
  33.     field2.y = viewport.height/2
  34.     field2.src_rect.height = viewport.height/2
  35.     field2.src_rect.y = viewport.height/2
  36.     # move halves off screen
  37.     16.times do
  38.       field1.x -= viewport.width/16
  39.       field2.x += viewport.width/16
  40.       pbWait(1)
  41.     end
  42.     viewport.color = Color.new(0,0,0,255)
  43.     # dispose unused sprites
  44.     black.dispose
  45.     field1.dispose
  46.     field2.dispose
  47.   end
  48.  
  49.  
  50.  
  51.     #-----------------------------------------------------------------------------
  52.   # second variant trainer battle animation
  53.   #-----------------------------------------------------------------------------
  54.   def pbAnim2(viewport)
  55.     # take screenshot and draw black background
  56.     bmp = Graphics.snap_to_bitmap
  57.     black = Sprite.new(viewport)
  58.     black.bitmap = Bitmap.new(viewport.width,viewport.height)
  59.     black.bitmap.fill_rect(0,0,viewport.width,viewport.height,Color.black)
  60.     # split screenshot into two halves
  61.     field1 = Sprite.new(viewport)
  62.     field1.bitmap = Bitmap.new(viewport.width, viewport.height)
  63.     field1.bitmap.blt(0, 0, bmp, viewport.rect)
  64.     field1.src_rect.height = viewport.height/2
  65.     field2 = Sprite.new(viewport)
  66.     field2.bitmap = field1.bitmap.clone
  67.     field2.y = viewport.height/2
  68.     field2.src_rect.height = viewport.height/2
  69.     field2.src_rect.y = viewport.height/2
  70.     # draw ballsprites for transition
  71.     ball1 = Sprite.new(viewport)
  72.     ball1.bitmap = pbBitmap("Graphics/Transitions/Common/ball")
  73.     ball1.center!
  74.     ball1.x = viewport.width + ball1.ox
  75.     ball1.y = viewport.height/4
  76.     ball1.zoom_x = 0.5
  77.     ball1.zoom_y = 0.5
  78.     ball2 = Sprite.new(viewport)
  79.     ball2.bitmap = pbBitmap("Graphics/Transitions/Common/ball")
  80.     ball2.center!
  81.     ball2.y = (viewport.height/4)*3
  82.     ball2.x = -ball2.ox
  83.     ball2.zoom_x = 0.5
  84.     ball2.zoom_y = 0.5
  85.     # move ballsprites on screen
  86.     16.times do
  87.       ball1.x -= (viewport.width/8)
  88.       ball2.x += (viewport.width/8)
  89.       pbWait(1)
  90.     end
  91.     # move screenshots
  92.     32.times do
  93.       field1.x -= (viewport.width/16)
  94.       field1.y -= (viewport.height/32)
  95.       field2.x += (viewport.width/16)
  96.       field2.y += (viewport.height/32)
  97.       pbWait(1)
  98.     end
  99.     viewport.color = Color.new(0,0,0,255)
  100.     # dispose unused sprites
  101.     black.dispose
  102.     ball1.dispose
  103.     ball2.dispose
  104.     field1.dispose
  105.     field2.dispose
  106.   end
  107.   #-----------------------------------------------------------------------------
  108.   # third variant trainer battle animation
  109.   #-----------------------------------------------------------------------------
  110.   def pbAnim3(viewport)
  111.     # hash to store all sprites
  112.     balls = {}
  113.     rects = {}
  114.     # creates blank ball bitmap
  115.     ball = Bitmap.new(viewport.height/6,viewport.height/6)
  116.     bmp = pbBitmap("Graphics/Transitions/Common/ball")
  117.     ball.stretch_blt(Rect.new(0,0,ball.width,ball.height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  118.     # creates necessary sprites
  119.     for i in 0...6
  120.       # black rectangles
  121.       rects["#{i}"] = Sprite.new(viewport)
  122.       rects["#{i}"].bitmap = Bitmap.new(2,viewport.height/6)
  123.       rects["#{i}"].bitmap.fill_rect(0,0,2,viewport.height/6,Color.black)
  124.       rects["#{i}"].x = (i%2==0) ? -32 : viewport.width+32
  125.       rects["#{i}"].ox = (i%2==0) ? 0 : 2
  126.       rects["#{i}"].y = (viewport.height/6)*i
  127.       rects["#{i}"].zoom_x = 0
  128.       # ballsprites
  129.       balls["#{i}"] = Sprite.new(viewport)
  130.       balls["#{i}"].bitmap = ball
  131.       balls["#{i}"].center!
  132.       balls["#{i}"].x = rects["#{i}"].x
  133.       balls["#{i}"].y = rects["#{i}"].y + rects["#{i}"].bitmap.height/2
  134.     end
  135.     # moves sprites across screen
  136.     for j in 0...28
  137.       for i in 0...6
  138.         balls["#{i}"].x += (i%2==0) ? 24 : -24
  139.         balls["#{i}"].angle -= (i%2==0) ? 32 : -32
  140.         rects["#{i}"].zoom_x += 12
  141.       end
  142.       pbWait(1)
  143.     end
  144.     viewport.color = Color.new(0,0,0,255)
  145.     # disposes unused sprites
  146.     pbDisposeSpriteHash(balls)
  147.     pbDisposeSpriteHash(rects)
  148.   end
  149.   #-----------------------------------------------------------------------------
  150.   # plays the little rainbow sequence before the animation (can be standalone)
  151.   #-----------------------------------------------------------------------------
  152.   def rainbowIntro(viewport=nil)
  153.     viewport = viewport if !viewport && !viewport.nil?
  154.     @sprites = {} if !@sprites
  155.     # takes screenshot
  156.     bmp = Graphics.snap_to_bitmap
  157.     # creates non-blurred overlay
  158.     @sprites["bg1"] = Sprite.new(viewport)
  159.     @sprites["bg1"].bitmap = Bitmap.new(viewport.width, viewport.height)
  160.     @sprites["bg1"].bitmap.blt(0, 0, bmp, viewport.rect)
  161.     @sprites["bg1"].center!(true)
  162.     # creates blurred overlay
  163.     @sprites["bg2"] = Sprite.new(viewport)
  164.     @sprites["bg2"].bitmap = @sprites["bg1"].bitmap.clone
  165.     @sprites["bg2"].blur_sprite(3)
  166.     @sprites["bg2"].center!(true)
  167.     @sprites["bg2"].opacity = 0
  168.     # creates rainbow rings
  169.     for i in 1..2
  170.       z = [0.35,0.1]
  171.       @sprites["glow#{i}"] = Sprite.new(viewport)
  172.       @sprites["glow#{i}"].bitmap = pbBitmap("Graphics/Transitions/Common/glow")
  173.       @sprites["glow#{i}"].ox = @sprites["glow#{i}"].bitmap.width/2
  174.       @sprites["glow#{i}"].oy = @sprites["glow#{i}"].bitmap.height/2
  175.       @sprites["glow#{i}"].x = viewport.width/2
  176.       @sprites["glow#{i}"].y = viewport.height/2
  177.       @sprites["glow#{i}"].zoom_x = z[i-1]
  178.       @sprites["glow#{i}"].zoom_y = z[i-1]
  179.       @sprites["glow#{i}"].opacity = 0
  180.     end
  181.     # main animation
  182.     for i in 0...32
  183.       # zooms in the two screenshots
  184.       @sprites["bg1"].zoom_x += 0.02
  185.       @sprites["bg1"].zoom_y += 0.02
  186.       @sprites["bg2"].zoom_x += 0.02
  187.       @sprites["bg2"].zoom_y += 0.02
  188.       # fades in the blurry screenshot
  189.       @sprites["bg2"].opacity += 12
  190.       # fades to white
  191.       if i >= 16
  192.         @sprites["bg2"].tone.red += 16
  193.         @sprites["bg2"].tone.green += 16
  194.         @sprites["bg2"].tone.blue += 16
  195.       end
  196.       # zooms in rainbow rings
  197.       if i >= 28
  198.         @sprites["glow1"].opacity += 64
  199.         @sprites["glow1"].zoom_x += 0.02
  200.         @sprites["glow1"].zoom_y += 0.02
  201.       end
  202.       Graphics.update
  203.     end
  204.     viewport.color = Color.new(255,255,255,0)
  205.     # second part of animation
  206.     for i in 0...48
  207.       # zooms in rainbow rings
  208.       @sprites["glow1"].zoom_x += 0.02
  209.       @sprites["glow1"].zoom_y += 0.02
  210.       if i >= 8
  211.         @sprites["glow2"].opacity += 64
  212.         @sprites["glow2"].zoom_x += 0.02
  213.         @sprites["glow2"].zoom_y += 0.02
  214.       end
  215.       # fades viewport to white
  216.       if i >= 32
  217.         viewport.color.alpha += 16
  218.       end
  219.       Graphics.update
  220.     end
  221.     # disposes of the elements
  222.     pbDisposeSpriteHash(@sprites)
  223.     #EliteBattle.set(:colorAlpha,255)
  224.     return true
  225.   end
  226.   #-----------------------------------------------------------------------------
  227.   # displays the animation for the evil team logo (can be standalone)
  228.   #-----------------------------------------------------------------------------
  229.   def evilTeam(viewport = nil, trainerid = -1)
  230.     viewport = viewport if !viewport && !viewport.nil?
  231.     @sprites = {} if !@sprites
  232.     viewport.color = Color.new(0,0,0,0)
  233.     # fades viewport to black
  234.     8.times do
  235.       viewport.color.alpha += 32
  236.       pbWait(1)
  237.     end
  238.     bitmaps = [
  239.       "Graphics/Transitions/EvilTeam/background",
  240.       "Graphics/Transitions/EvilTeam/swirl",
  241.       "Graphics/Transitions/EvilTeam/ray0",
  242.       "Graphics/Transitions/EvilTeam/ray1",
  243.       "Graphics/Transitions/EvilTeam/logo0",
  244.       "Graphics/Transitions/EvilTeam/logo1",
  245.       "Graphics/Transitions/EvilTeam/ring0",
  246.       "Graphics/Transitions/EvilTeam/ring1"
  247.     ]
  248.     # try resolve the bitmaps
  249.     bitmaps = self.resolveBitmaps(bitmaps, trainerid) if trainerid >= 0
  250.     # creates background graphic
  251.     @sprites["bg"] = Sprite.new(viewport)
  252.     @sprites["bg"].bitmap = pbBitmap(bitmaps[0])
  253.     @sprites["bg"].color = Color.black
  254.     # creates background swirl
  255.     @sprites["bg2"] = Sprite.new(viewport)
  256.     @sprites["bg2"].bitmap = pbBitmap(bitmaps[1])
  257.     @sprites["bg2"].ox = @sprites["bg2"].bitmap.width/2
  258.     @sprites["bg2"].oy = @sprites["bg2"].bitmap.height/2
  259.     @sprites["bg2"].x = viewport.width/2
  260.     @sprites["bg2"].y = viewport.height/2
  261.     @sprites["bg2"].visible = false
  262.     # sets up all particles
  263.     speed = []
  264.     for j in 0...16
  265.       @sprites["e1_#{j}"] = Sprite.new(viewport)
  266.       bmp = pbBitmap(bitmaps[2])
  267.       @sprites["e1_#{j}"].bitmap = Bitmap.new(bmp.width,bmp.height)
  268.       w = bmp.width/(1 + rand(3))
  269.       @sprites["e1_#{j}"].bitmap.stretch_blt(Rect.new(0,0,w,bmp.height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  270.       @sprites["e1_#{j}"].oy = @sprites["e1_#{j}"].bitmap.height/2
  271.       @sprites["e1_#{j}"].angle = rand(360)
  272.       @sprites["e1_#{j}"].opacity = 0
  273.       @sprites["e1_#{j}"].x = viewport.width/2
  274.       @sprites["e1_#{j}"].y = viewport.height/2
  275.       speed.push(4 + rand(5))
  276.     end
  277.     # creates logo
  278.     @sprites["logo"] = Sprite.new(viewport)
  279.     @sprites["logo"].bitmap = pbBitmap(bitmaps[4])
  280.     @sprites["logo"].ox = @sprites["logo"].bitmap.width/2
  281.     @sprites["logo"].oy = @sprites["logo"].bitmap.height/2
  282.     @sprites["logo"].x = viewport.width/2
  283.     @sprites["logo"].y = viewport.height/2
  284.     @sprites["logo"].memorize_bitmap
  285.     @sprites["logo"].bitmap = pbBitmap(bitmaps[5])
  286.     @sprites["logo"].zoom_x = 2
  287.     @sprites["logo"].zoom_y = 2
  288.     @sprites["logo"].z = 50
  289.     # creates flash ring graphic
  290.     @sprites["ring"] = Sprite.new(viewport)
  291.     @sprites["ring"].bitmap = pbBitmap(bitmaps[6])
  292.     @sprites["ring"].ox = @sprites["ring"].bitmap.width/2
  293.     @sprites["ring"].oy = @sprites["ring"].bitmap.height/2
  294.     @sprites["ring"].x = viewport.width/2
  295.     @sprites["ring"].y = viewport.height/2
  296.     @sprites["ring"].zoom_x = 0
  297.     @sprites["ring"].zoom_y = 0
  298.     @sprites["ring"].z = 100
  299.     # creates secondary particles
  300.     for j in 0...32
  301.       @sprites["e2_#{j}"] = Sprite.new(viewport)
  302.       bmp = pbBitmap(bitmaps[3])
  303.       @sprites["e2_#{j}"].bitmap = bmp
  304.       @sprites["e2_#{j}"].oy = @sprites["e2_#{j}"].bitmap.height/2
  305.       @sprites["e2_#{j}"].angle = rand(360)
  306.       @sprites["e2_#{j}"].opacity = 0
  307.       @sprites["e2_#{j}"].x = viewport.width/2
  308.       @sprites["e2_#{j}"].y = viewport.height/2
  309.       @sprites["e2_#{j}"].z = 100
  310.     end
  311.     # creates secondary flash ring
  312.     @sprites["ring2"] = Sprite.new(viewport)
  313.     @sprites["ring2"].bitmap = pbBitmap(bitmaps[7])
  314.     @sprites["ring2"].ox = @sprites["ring2"].bitmap.width/2
  315.     @sprites["ring2"].oy = @sprites["ring2"].bitmap.height/2
  316.     @sprites["ring2"].x = viewport.width/2
  317.     @sprites["ring2"].y = viewport.height/2
  318.     @sprites["ring2"].visible = false
  319.     @sprites["ring2"].zoom_x = 0
  320.     @sprites["ring2"].zoom_y = 0
  321.     @sprites["ring2"].z = 100
  322.     # first phase of animation
  323.     for i in 0...32
  324.       viewport.color.alpha -= 8 if viewport.color.alpha > 0
  325.       @sprites["logo"].zoom_x -= 1/32.0
  326.       @sprites["logo"].zoom_y -= 1/32.0
  327.       for j in 0...16
  328.         next if j > i/4
  329.         if @sprites["e1_#{j}"].ox < -(viewport.width/2)
  330.           speed[j] = 4 + rand(5)
  331.           @sprites["e1_#{j}"].opacity = 0
  332.           @sprites["e1_#{j}"].ox = 0
  333.           @sprites["e1_#{j}"].angle = rand(360)
  334.           bmp = pbBitmap(bitmaps[3])
  335.           @sprites["e1_#{j}"].bitmap.clear
  336.           w = bmp.width/(1 + rand(3))
  337.           @sprites["e1_#{j}"].bitmap.stretch_blt(Rect.new(0,0,w,bmp.height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  338.         end
  339.         @sprites["e1_#{j}"].opacity += speed[j]
  340.         @sprites["e1_#{j}"].ox -=  speed[j]
  341.       end
  342.       pbWait(1)
  343.     end
  344.     # configures logo graphic
  345.     @sprites["logo"].color = Color.white
  346.     @sprites["logo"].restore_bitmap
  347.     @sprites["ring2"].visible = true
  348.     @sprites["bg2"].visible = true
  349.     viewport.color = Color.white
  350.     # final animation of background and particles
  351.     for i in 0...144
  352.       if i >= 128
  353.         viewport.color.alpha += 16
  354.       else
  355.         viewport.color.alpha -= 16 if viewport.color.alpha > 0
  356.       end
  357.       @sprites["logo"].color.alpha -= 16 if @sprites["logo"].color.alpha > 0
  358.       @sprites["bg"].color.alpha -= 8 if @sprites["bg"].color.alpha > 0
  359.       for j in 0...16
  360.         if @sprites["e1_#{j}"].ox < -(viewport.width/2)
  361.           speed[j] = 4 + rand(5)
  362.           @sprites["e1_#{j}"].opacity = 0
  363.           @sprites["e1_#{j}"].ox = 0
  364.           @sprites["e1_#{j}"].angle = rand(360)
  365.           bmp = pbBitmap(bitmaps[2])
  366.           @sprites["e1_#{j}"].bitmap.clear
  367.           w = bmp.width/(1 + rand(3))
  368.           @sprites["e1_#{j}"].bitmap.stretch_blt(Rect.new(0,0,w,bmp.height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  369.         end
  370.         @sprites["e1_#{j}"].opacity += speed[j]
  371.         @sprites["e1_#{j}"].ox -=  speed[j]
  372.       end
  373.       for j in 0...32
  374.         next if j > i*2
  375.         @sprites["e2_#{j}"].ox -= 16
  376.         @sprites["e2_#{j}"].opacity += 16
  377.       end
  378.       @sprites["ring"].zoom_x += 0.1
  379.       @sprites["ring"].zoom_y += 0.1
  380.       @sprites["ring"].opacity -= 8
  381.       @sprites["ring2"].zoom_x += 0.2 if @sprites["ring2"].zoom_x < 3
  382.       @sprites["ring2"].zoom_y += 0.2 if @sprites["ring2"].zoom_y < 3
  383.       @sprites["ring2"].opacity -= 16
  384.       @sprites["bg2"].angle += 2 if $PokemonSystem.screensize < 2
  385.       pbWait(1)
  386.     end
  387.     # disposes all sprites
  388.     pbDisposeSpriteHash(@sprites)
  389.     # fades viewport
  390.     8.times do
  391.       viewport.color.red -= 255/8.0
  392.       viewport.color.green -= 255/8.0
  393.       viewport.color.blue -= 255/8.0
  394.       pbWait(1)
  395.     end
  396.     #EliteBattle.set(:colorAlpha,0)
  397.     return true
  398.   end
  399.   #-----------------------------------------------------------------------------
  400.   # plays Team Skull styled intro animation
  401.   #-----------------------------------------------------------------------------
  402.   def teamSkull(viewport = nil, trainerid = -1)
  403.     viewport = viewport if !viewport && !viewport.nil?
  404.     # set up initial variables
  405.     @sprites = {} if !@sprites
  406.     @fpIndex = 0
  407.     @spIndex = 0
  408.     pbWait(4)
  409.     # get list of required graphics
  410.     bitmaps = [
  411.       "Graphics/Transitions/Skull/background",
  412.       "Graphics/Transitions/Skull/smoke",
  413.       "Graphics/Transitions/Skull/logo",
  414.       "Graphics/Transitions/Skull/shine",
  415.       "Graphics/Transitions/Skull/rainbow",
  416.       "Graphics/Transitions/Skull/glow",
  417.       "Graphics/Transitions/Skull/burst",
  418.       "Graphics/Transitions/Skull/ray",
  419.       "Graphics/Transitions/Skull/particle",
  420.       "Graphics/Transitions/Skull/paint0",
  421.       "Graphics/Transitions/Skull/splat0",
  422.       "Graphics/Transitions/Skull/splat1",
  423.       "Graphics/Transitions/Skull/splat2"
  424.     ]
  425.     # try resolve the bitmaps
  426.     bitmaps = self.resolveBitmaps(bitmaps, trainerid) if trainerid >= 0
  427.     # set up background
  428.     @sprites["bg"] = Sprite.new(viewport)
  429.     @sprites["bg"].bitmap = pbBitmap(bitmaps[0])
  430.     @sprites["bg"].color = Color.new(0,0,0,92)
  431.     # set up smoke particles
  432.     for j in 0...20
  433.       @sprites["s#{j}"] = Sprite.new(viewport)
  434.       @sprites["s#{j}"].bitmap = pbBitmap(bitmaps[1])
  435.       @sprites["s#{j}"].center!(true)
  436.       @sprites["s#{j}"].opacity = 0
  437.     end
  438.     # set up ray particles
  439.     for i in 0...16
  440.       @sprites["r#{i}"] = Sprite.new(viewport)
  441.       @sprites["r#{i}"].opacity = 0
  442.     end
  443.     # set up logo
  444.     @sprites["logo"] = Sprite.new(viewport)
  445.     @sprites["logo"].bitmap = pbBitmap(bitmaps[2])
  446.     @sprites["logo"].center!(true)
  447.     @sprites["logo"].z = 9999
  448.     @sprites["logo"].zoom_x = 2
  449.     @sprites["logo"].zoom_y = 2
  450.     @sprites["logo"].color = Color.black
  451.     # set up logo shine
  452.     @sprites["shine"] = Sprite.new(viewport)
  453.     @sprites["shine"].bitmap = pbBitmap(bitmaps[3])
  454.     @sprites["shine"].center!(true)
  455.     @sprites["shine"].x -= 72
  456.     @sprites["shine"].y -= 64
  457.     @sprites["shine"].z = 99999
  458.     @sprites["shine"].opacity = 0
  459.     @sprites["shine"].zoom_x = 0.6
  460.     @sprites["shine"].zoom_y = 0.4
  461.     @sprites["shine"].angle = 30
  462.     # set up rainbow particle
  463.     @sprites["rainbow"] = Sprite.new(viewport)
  464.     @sprites["rainbow"].bitmap = pbBitmap(bitmaps[4])
  465.     @sprites["rainbow"].center!(true)
  466.     @sprites["rainbow"].z = 99999
  467.     @sprites["rainbow"].opacity = 0
  468.     # set up logo glow
  469.     @sprites["glow"] = Sprite.new(viewport)
  470.     @sprites["glow"].bitmap = pbBitmap(bitmaps[5])
  471.     @sprites["glow"].center!(true)
  472.     @sprites["glow"].opacity = 0
  473.     @sprites["glow"].z = 9
  474.     @sprites["glow"].zoom_x = 0.6
  475.     @sprites["glow"].zoom_y = 0.6
  476.     # set up burst sprite
  477.     @sprites["burst"] = Sprite.new(viewport)
  478.     @sprites["burst"].bitmap = pbBitmap(bitmaps[6])
  479.     @sprites["burst"].center!(true)
  480.     @sprites["burst"].zoom_x = 0
  481.     @sprites["burst"].zoom_y = 0
  482.     @sprites["burst"].opacity = 0
  483.     @sprites["burst"].z = 999
  484.     @sprites["burst"].color = Color.new(255,255,255,0)
  485.     # set up particles
  486.     for j in 0...24
  487.       @sprites["p#{j}"] = Sprite.new(viewport)
  488.       @sprites["p#{j}"].bitmap = pbBitmap(bitmaps[8])
  489.       @sprites["p#{j}"].center!(true)
  490.       @sprites["p#{j}"].center!
  491.       z = 1 - rand(81)/100.0
  492.       @sprites["p#{j}"].zoom_x = z
  493.       @sprites["p#{j}"].zoom_y = z
  494.       @sprites["p#{j}"].param = 1 + rand(8)
  495.       r = 256 + rand(65)
  496.       cx, cy = randCircleCord(r)
  497.       @sprites["p#{j}"].ex = @sprites["p#{j}"].x - r + cx
  498.       @sprites["p#{j}"].ey = @sprites["p#{j}"].y - r + cy
  499.       r = rand(33)/100.0
  500.       @sprites["p#{j}"].x = viewport.width/2 - (@sprites["p#{j}"].ex - viewport.width/2)*r
  501.       @sprites["p#{j}"].y = viewport.height/2 - (viewport.height/2 - @sprites["p#{j}"].ey)*r
  502.       @sprites["p#{j}"].visible = false
  503.     end
  504.     # set up paint strokes
  505.     x = [viewport.width/3,viewport.width+32,16,-32,2*viewport.width/3,viewport.width+32,0,viewport.width+64]
  506.     y = [viewport.height+32,viewport.height+32,-32,viewport.height/2,viewport.height+64,viewport.height/2,viewport.height-64,viewport.height/2+32]
  507.     a = [50,135,-70,10,105,165,-30,190]
  508.     for j in 0...8
  509.       @sprites["sl#{j}"] = Sprite.new(viewport)
  510.       @sprites["sl#{j}"].bitmap = pbBitmap(bitmaps[9])
  511.       @sprites["sl#{j}"].oy = @sprites["sl#{j}"].bitmap.height/2
  512.       @sprites["sl#{j}"].z = j < 2 ? 999 : 99999
  513.       @sprites["sl#{j}"].ox = -@sprites["sl#{j}"].bitmap.width
  514.       @sprites["sl#{j}"].x = x[j]
  515.       @sprites["sl#{j}"].y = y[j]
  516.       @sprites["sl#{j}"].angle = a[j]
  517.       @sprites["sl#{j}"].param = (@sprites["sl#{j}"].bitmap.width/8)
  518.     end
  519.     # set up paint splats
  520.     for j in 0...12
  521.       @sprites["sp#{j}"] = Sprite.new(viewport)
  522.       @sprites["sp#{j}"].bitmap = pbBitmap(bitmaps[10 + rand(3)])
  523.       @sprites["sp#{j}"].center!
  524.       @sprites["sp#{j}"].x = rand(viewport.width)
  525.       @sprites["sp#{j}"].y = rand(viewport.height)
  526.       @sprites["sp#{j}"].visible = false
  527.       z = 1 + rand(40)/100.0
  528.       @sprites["sp#{j}"].zoom_x = z
  529.       @sprites["sp#{j}"].zoom_y = z
  530.       @sprites["sp#{j}"].z = 99999
  531.     end
  532.     # begin animation
  533.     for i in 0...32
  534.       viewport.color.alpha -= 16
  535.       @sprites["logo"].zoom_x -= 1/32.0
  536.       @sprites["logo"].zoom_y -= 1/32.0
  537.       @sprites["logo"].color.alpha -= 8
  538.       for j in 0...16
  539.         next if j > @fpIndex/2
  540.         if @sprites["r#{j}"].opacity <= 0
  541.           bmp = pbBitmap(bitmaps[7])
  542.           w = rand(65) + 16
  543.           @sprites["r#{j}"].bitmap = Bitmap.new(w,bmp.height)
  544.           @sprites["r#{j}"].bitmap.stretch_blt(@sprites["r#{j}"].bitmap.rect,bmp,bmp.rect)
  545.           @sprites["r#{j}"].center!(true)
  546.           @sprites["r#{j}"].ox = -(64 + rand(17))
  547.           @sprites["r#{j}"].zoom_x = 1
  548.           @sprites["r#{j}"].zoom_y = 1
  549.           @sprites["r#{j}"].angle = rand(360)
  550.           @sprites["r#{j}"].param = 2 + rand(5)
  551.         end
  552.         @sprites["r#{j}"].ox -= @sprites["r#{j}"].param
  553.         @sprites["r#{j}"].zoom_x += 0.001*@sprites["r#{j}"].param
  554.         @sprites["r#{j}"].zoom_y -= 0.001*@sprites["r#{j}"].param
  555.         if @sprites["r#{j}"].ox > -128
  556.           @sprites["r#{j}"].opacity += 8
  557.         else
  558.           @sprites["r#{j}"].opacity -= 2*@sprites["r#{j}"].param
  559.         end
  560.       end
  561.       if i >= 24
  562.         @sprites["shine"].opacity += 48
  563.         @sprites["shine"].zoom_x += 0.02
  564.         @sprites["shine"].zoom_y += 0.02
  565.       end
  566.       @fpIndex += 1
  567.       Graphics.update
  568.     end
  569.     viewport.color = Color.new(0,0,0,0)
  570.     for i in 0...128
  571.       @sprites["shine"].opacity -= 16
  572.       @sprites["shine"].zoom_x += 0.02
  573.       @sprites["shine"].zoom_y += 0.02
  574.       if i < 8
  575.         z = (i < 4) ? 0.02 : -0.02
  576.         @sprites["logo"].zoom_x -= z
  577.         @sprites["logo"].zoom_y -= z
  578.       end
  579.       for j in 0...16
  580.         if @sprites["r#{j}"].opacity <= 0
  581.           bmp = pbBitmap(bitmaps[7])
  582.           w = rand(65) + 16
  583.           @sprites["r#{j}"].bitmap = Bitmap.new(w,bmp.height)
  584.           @sprites["r#{j}"].bitmap.stretch_blt(@sprites["r#{j}"].bitmap.rect,bmp,bmp.rect)
  585.           @sprites["r#{j}"].center!(true)
  586.           @sprites["r#{j}"].ox = -(64 + rand(17))
  587.           @sprites["r#{j}"].zoom_x = 1
  588.           @sprites["r#{j}"].zoom_y = 1
  589.           @sprites["r#{j}"].angle = rand(360)
  590.           @sprites["r#{j}"].param = 2 + rand(5)
  591.         end
  592.         @sprites["r#{j}"].ox -= @sprites["r#{j}"].param
  593.         @sprites["r#{j}"].zoom_x += 0.001*@sprites["r#{j}"].param
  594.         @sprites["r#{j}"].zoom_y -= 0.001*@sprites["r#{j}"].param
  595.         if @sprites["r#{j}"].ox > -128
  596.           @sprites["r#{j}"].opacity += 8
  597.         else
  598.           @sprites["r#{j}"].opacity -= 2*@sprites["r#{j}"].param
  599.         end
  600.       end
  601.       for j in 0...24
  602.         @sprites["p#{j}"].visible = true
  603.         next if @sprites["p#{j}"].opacity <= 0
  604.         x = (@sprites["p#{j}"].ex - viewport.width/2)/(4.0*@sprites["p#{j}"].param)
  605.         y = (viewport.height/2 - @sprites["p#{j}"].ey)/(4.0*@sprites["p#{j}"].param)
  606.         @sprites["p#{j}"].x -= x
  607.         @sprites["p#{j}"].y -= y
  608.         @sprites["p#{j}"].opacity -= @sprites["p#{j}"].param
  609.       end
  610.       for j in 0...20
  611.         if @sprites["s#{j}"].opacity <= 0
  612.           @sprites["s#{j}"].opacity = 255
  613.           r = 160 + rand(33)
  614.           cx, cy = randCircleCord(r)
  615.           @sprites["s#{j}"].center!(true)
  616.           @sprites["s#{j}"].ex = @sprites["s#{j}"].x - r + cx
  617.           @sprites["s#{j}"].ey = @sprites["s#{j}"].y - r + cy
  618.           @sprites["s#{j}"].toggle = rand(2)==0 ? 2 : -2
  619.           @sprites["s#{j}"].param = 2 + rand(4)
  620.           z = 1 - rand(41)/100.0
  621.           @sprites["s#{j}"].zoom_x = z
  622.           @sprites["s#{j}"].zoom_y = z
  623.         end
  624.         @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @sprites["s#{j}"].ex)*0.02
  625.         @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @sprites["s#{j}"].ey)*0.02
  626.         @sprites["s#{j}"].opacity -= @sprites["s#{j}"].param*1.5
  627.         @sprites["s#{j}"].angle += @sprites["s#{j}"].toggle if $PokemonSystem.screensize < 2
  628.         @sprites["s#{j}"].zoom_x -= 0.002
  629.         @sprites["s#{j}"].zoom_y -= 0.002
  630.       end
  631.       # phase 2
  632.       @sprites["bg"].color.alpha -= 2
  633.       @sprites["glow"].opacity += (i < 6) ? 48 : -24
  634.       @sprites["glow"].zoom_x += 0.05
  635.       @sprites["glow"].zoom_y += 0.05
  636.       @sprites["rainbow"].zoom_x += 0.01
  637.       @sprites["rainbow"].zoom_y += 0.01
  638.       @sprites["rainbow"].opacity += (i < 16) ? 32 : -16
  639.       @sprites["burst"].zoom_x += 0.2
  640.       @sprites["burst"].zoom_y += 0.2
  641.       @sprites["burst"].color.alpha += 20
  642.       @sprites["burst"].opacity += 16
  643.       if i >= 72
  644.         for j in 0...8
  645.           next if j > @spIndex/6
  646.           @sprites["sl#{j}"].ox += @sprites["sl#{j}"].param if @sprites["sl#{j}"].ox < 0
  647.         end
  648.         for j in 0...12
  649.           next if @spIndex < 4
  650.           next if j > (@spIndex-4)/4
  651.           @sprites["sp#{j}"].visible = true
  652.         end
  653.         @spIndex += 1
  654.       end
  655.       viewport.color.alpha += 16 if i >= 112
  656.       Graphics.update
  657.     end
  658.     # dispose all sprites
  659.     pbDisposeSpriteHash(@sprites)
  660.     #EliteBattle.set(:colorAlpha, 0)
  661.     return true
  662.   end
  663.  
  664.  
  665.  
  666.     #-----------------------------------------------------------------------------
  667.   #  special animation for Regis
  668.   #-----------------------------------------------------------------------------
  669.   def animRegi(viewport)
  670.     fp = {}
  671.     # gets main index
  672.     #index = self.regiIndex?
  673.     index = 2
  674.     # gets viewport size
  675.     width = viewport.width
  676.     height = viewport.height
  677.     # sets viewport to black, transparent
  678.     viewport.color = Color.new(0,0,0,0)
  679.     # defines necessary sprites
  680.     fp["back"] = Sprite.new(viewport)
  681.     fp["back"].snap_screen
  682.     fp["back"].blur_sprite
  683.     c = index < 3 ? 0 : 255
  684.     fp["back"].color = Color.new(c,c,c,128*(index < 3 ? 1 : 2))
  685.     fp["back"].z = 99999
  686.     fp["back"].opacity = 0
  687.     # positioning matrix for all the Regi dots
  688.     x = [
  689.       [width*0.5,width*0.25,width*0.75,width*0.25,width*0.75,width*0.25,width*0.75],
  690.       [width*0.5,width*0.3,width*0.7,width*0.15,width*0.85,width*0.3,width*0.7],
  691.       [width*0.5,width*0.325,width*0.675,width*0.5,width*0.5,width*0.15,width*0.85],
  692.       [width*0.5,width*0.5,width*0.5,width*0.5,width*0.35,width*0.65,width*0.5]
  693.     ]
  694.     y = [
  695.       [height*0.5,height*0.5,height*0.5,height*0.25,height*0.75,height*0.75,height*0.25],
  696.       [height*0.5,height*0.25,height*0.75,height*0.5,height*0.5,height*0.75,height*0.25],
  697.       [height*0.5,height*0.5,height*0.5,height*0.25,height*0.75,height*0.5,height*0.5],
  698.       [height*0.9,height*0.74,height*0.58,height*0.4,height*0.25,height*0.25,height*0.1]
  699.     ]
  700.     # draws necessary dots
  701.     for j in 0...14
  702.       fp[j] = Sprite.new(viewport)
  703.       fp[j].bitmap = pbBitmap("Graphics/Transitions/Species/regi")
  704.       fp[j].src_rect.set(96*(j/7),100*index,96,100)
  705.       fp[j].ox = fp[j].src_rect.width/2
  706.       fp[j].oy = fp[j].src_rect.height/2
  707.       fp[j].x = x[index][j%7]
  708.       fp[j].y = y[index][j%7]
  709.       fp[j].opacity = 0
  710.       fp[j].z = 99999
  711.     end
  712.     # fades to black
  713.     8.times do
  714.       fp["back"].opacity += 32
  715.       pbWait(1)
  716.     end
  717.     k = -2
  718.     # fades in regi dots
  719.     for i in 0...72
  720.       if index < 3
  721.         k += 2 if i%8 == 0
  722.       else
  723.         k += (k==3 ? 2 : 1) if i%4 == 0
  724.       end
  725.       k = 6 if k > 6
  726.       for j in 0..k
  727.         fp[j].opacity += 32
  728.         fp[j+7].opacity += 26 if fp[j].opacity >= 255
  729.         fp[j].visible = fp[j+7].opacity < 255
  730.       end
  731.       fp["back"].color.alpha += 2 if fp["back"].color.alpha < 255
  732.       pbWait(1)
  733.     end
  734.     # fades viewport to black
  735.     8.times do
  736.       viewport.color.alpha += 32
  737.       pbWait(1)
  738.     end
  739.     # disposes unused sprites
  740.     pbDisposeSpriteHash(fp)
  741.     return true
  742.   end
  743.   #-----------------------------------------------------------------------------
  744.   #  wild animation for outdoor battles
  745.   #-----------------------------------------------------------------------------
  746.   def pbOutdoor(viewport,variant = false)
  747.     # gets screen size
  748.     hz = 8
  749.     vz = 6
  750.     width = viewport.width/hz
  751.     height = viewport.height/vz
  752.     bmp = Graphics.snap_to_bitmap
  753.     # generates all sprite particles
  754.     sps = {}
  755.     if variant
  756.       sps["black"] = Sprite.new(viewport)
  757.       sps["black"].create_rect(viewport.width,viewport.height,Color.black)
  758.     end
  759.     for j in 0...(hz*vz)
  760.       # renders rectangle
  761.       sps[j] = Sprite.new(viewport)
  762.       sps[j].ox = width/2
  763.       # decides which snaking pattern to take
  764.       pat = j < (hz*vz)/2 ? (j/hz)%2 == 0 : (j/hz)%2 == 1
  765.       # determines positioning
  766.       x = pat ? (width/2 + width*(j%hz)) : (viewport.width - width/2 - width*(j%hz))
  767.       y = height * (j/hz)
  768.       sps[j].x = x
  769.       sps[j].y = y
  770.       if variant
  771.         sps[j].bitmap = Bitmap.new(width,height)
  772.         sps[j].bitmap.blt(0,0,bmp,Rect.new(x-width/2,y,width,height))
  773.       else
  774.         sps[j].create_rect(width,height,Color.black)
  775.       end
  776.       sps[j].zoom_x = variant ? 1 : 0
  777.     end
  778.     # animates pattern
  779.     for i in 0...40
  780.       for j in 0...(hz*vz)
  781.         k = j < (hz*vz)/2 ? j : (hz*vz) - j
  782.         next if k > i*0.75
  783.         if variant
  784.           sps[j].zoom_x -= 0.15 if sps[j].zoom_x > 0
  785.         else
  786.           sps[j].zoom_x += 0.15 if sps[j].zoom_x < 1
  787.         end
  788.       end
  789.       pbWait(1)
  790.     end
  791.     # ensures viewport is set to black
  792.     viewport.color = Color.new(0,0,0,255)
  793.     # disposes unused sprites
  794.     pbDisposeSpriteHash(sps)
  795.     return true
  796.   end
  797.   #-----------------------------------------------------------------------------
  798.   #  wild animation for indoor battles
  799.   #-----------------------------------------------------------------------------
  800.   def pbIndoor(viewport)
  801.     # draws blank bitmap upon which to draw snaking pattern
  802.     screen = Sprite.new(viewport)
  803.     screen.bitmap = Bitmap.new(viewport.width,viewport.height)
  804.     black = Color.black
  805.     # gets screen size
  806.     width = viewport.width
  807.     height = viewport.height/16
  808.     # animates pattern draw
  809.     for i in 1..16
  810.       for j in 0...16
  811.         x = (j%2 == 0) ? 0 : viewport.width - i*(width/16)
  812.         screen.bitmap.fill_rect(x,j*height,i*(width/16),height,black)
  813.       end
  814.       pbWait(1)
  815.     end
  816.     # ensures viewport is black
  817.     viewport.color = Color.new(0,0,0,255)
  818.     pbWait(10)
  819.     # disposes unused sprite
  820.     screen.dispose
  821.     return true
  822.   end
  823.   #-----------------------------------------------------------------------------
  824.   #  wild animation for cave battles
  825.   #-----------------------------------------------------------------------------
  826.   def pbCave(viewport)
  827.     # draws blank bitmap upon which to draw snaking pattern
  828.     screen = Sprite.new(viewport)
  829.     screen.bitmap = Bitmap.new(viewport.width,viewport.height)
  830.     black = Color.black
  831.     # gets screen size
  832.     width = viewport.width/4
  833.     height = viewport.height/4
  834.     # draws all sprite elements
  835.     sprites = {}
  836.     for i in 0...16
  837.       sprites[i] = Sprite.new(viewport)
  838.       sprites[i].bitmap = Bitmap.new(width,height)
  839.       sprites[i].bitmap.fill_rect(0,0,width,height,black)
  840.       sprites[i].ox = width/2
  841.       sprites[i].oy = height/2
  842.       sprites[i].x = width/2 + width*(i%4)
  843.       sprites[i].y = viewport.height - height/2 - height*(i/4)
  844.       sprites[i].zoom_x = 0
  845.       sprites[i].zoom_y = 0
  846.     end
  847.     # pattern sequence definition
  848.     seq = [[0],[4,1],[8,5,2],[12,9,6,3],[13,10,7],[14,11],[15]]
  849.     # animate sequence
  850.     for i in 0...seq.length
  851.       5.times do
  852.         for j in 0...seq[i].length
  853.           n = seq[i][j]
  854.           sprites[n].zoom_x += 0.2
  855.           sprites[n].zoom_y += 0.2
  856.         end
  857.         pbWait(1)
  858.       end
  859.     end
  860.     # ensures viewport is black
  861.     viewport.color=Color.new(0,0,0,255)
  862.     pbWait(1)
  863.     # disposes unused sprites
  864.     pbDisposeSpriteHash(sprites)
  865.     screen.dispose
  866.     return true
  867.   end
  868.   #-----------------------------------------------------------------------------
  869.   #  wild animation for water encounters
  870.   #-----------------------------------------------------------------------------
  871.   def pbWater(viewport)
  872.     # gets snapshot of screen
  873.     bmp = Graphics.snap_to_bitmap
  874.     split = 12
  875.     n = viewport.height/split
  876.     sprites = {}
  877.     # creates black bg
  878.     black = Sprite.new(viewport)
  879.     black.bitmap = Bitmap.new(viewport.width,viewport.height)
  880.     black.bitmap.fill_rect(0,0,black.bitmap.width,black.bitmap.height,Color.black)
  881.     # splits the screen into proper segments
  882.     for i in 0...n
  883.       sprites[i] = Sprite.new(viewport)
  884.       sprites[i].bitmap = Bitmap.new(viewport.width, viewport.height)
  885.       sprites[i].bitmap.blt(0, 0, bmp, viewport.rect)
  886.       sprites[i].ox = sprites[i].bitmap.width/2
  887.       sprites[i].x = viewport.width/2
  888.       sprites[i].y = i*split
  889.       sprites[i].src_rect.set(0, i*split, sprites[i].bitmap.width, split)
  890.       sprites[i].color = Color.new(0, 0, 0, 0)
  891.     end
  892.     # animates wave motion
  893.     for f in 0...64
  894.       for i in 0...n
  895.         o = Math.sin(f - i*0.5)
  896.         sprites[i].x = viewport.width/2 + 16*o if f >= i
  897.         sprites[i].color.alpha += 25.5 if sprites[i].color.alpha < 255 && f >= (64 - (48-i))
  898.       end
  899.       pbWait(1)
  900.     end
  901.     # ensures viewport is black
  902.     viewport.color = Color.new(0,0,0,255)
  903.     # disposes unused sprites
  904.     pbDisposeSpriteHash(sprites)
  905.     return true
  906.   end
  907.   #-----------------------------------------------------------------------------
  908.   #  wild animation for minor legendaries
  909.   #-----------------------------------------------------------------------------
  910.   def minorLegendary(viewport,special = false)
  911.     # initial metrics
  912.     bmp = Graphics.snap_to_bitmap
  913.     max = 50
  914.     amax = 4
  915.     frames = {}
  916.     zoom = 1
  917.     # sets viewport color
  918.     viewport.color = special ? Color.new(64,64,64,0) : Color.new(255,255,155,0)
  919.     # animates initial viewport color
  920.     20.times do
  921.       viewport.color.alpha+=2
  922.       pbWait(1)
  923.     end
  924.     # animates screen blur pattern
  925.     for i in 0...(max + 20)
  926.       if !(i%2 == 0)
  927.         zoom += (i > max*0.75) ? 0.3 : -0.01
  928.         angle = 0 if angle.nil?
  929.         angle = (i%3 == 0) ? rand(amax*2) - amax : angle
  930.         # creates necessary sprites
  931.         frames[i] = Sprite.new(viewport)
  932.         frames[i].bitmap = Bitmap.new(viewport.width, viewport.height)
  933.         frames[i].bitmap.blt(0, 0, bmp, viewport.rect)
  934.         frames[i].center!(true)
  935.         frames[i].angle = angle
  936.         frames[i].zoom = zoom
  937.         frames[i].tone = Tone.new(i/4,i/4,i/4)
  938.         frames[i].opacity = 30
  939.       end
  940.       # colors viewport
  941.       if i >= max
  942.         viewport.color.alpha += 12
  943.         if special
  944.           viewport.color.red -= 64/20.0
  945.           viewport.color.green -= 64/20.0
  946.           viewport.color.blue -= 64/20.0
  947.         else
  948.           viewport.color.blue += 5
  949.         end
  950.       end
  951.       pbWait(1)
  952.     end
  953.     # ensures viewport goes to black
  954.     frames[(max+19)].tone = Tone.new(255,255,255)
  955.     pbWait(10)
  956.     10.times do
  957.       next if special
  958.       viewport.color.red-=25.5
  959.       viewport.color.green-=25.5
  960.       viewport.color.blue-=25.5
  961.       pbWait(1)
  962.     end
  963.     # disposes unused sprites
  964.     pbDisposeSpriteHash(frames)
  965.     return true
  966.   end
  967.   #-----------------------------------------------------------------------------
  968.   #  animation for B/W legendaries
  969.   #-----------------------------------------------------------------------------
  970.   def bwLegendary(viewport,special = false)
  971.     bmp = pbBitmap("Graphics/Transitions/Common/zoomStreak")
  972.     n = 10
  973.     sprites = {}
  974.     # generate black backdrop
  975.     sprites["bg"] = Sprite.new(viewport)
  976.     sprites["bg"].full_rect(Color.new(0, 0, 0, 128))
  977.     sprites["bg"].opacity = 0
  978.     # generate zoom sphere
  979.     sprites["sp"] = Sprite.new(viewport)
  980.     sprites["sp"].bitmap = pbBitmap("Graphics/Transitions/Common/zoomSphere")
  981.     sprites["sp"].center!(true)
  982.     sprites["sp"].zoom_x = 0
  983.     sprites["sp"].zoom_y = 0
  984.     sprites["sp"].opacity = 0
  985.     # generate all the sprites
  986.     for i in 0...n
  987.       sprites["s#{i}"] = Sprite.new(viewport)
  988.       sprites["s#{i}"].bitmap = bmp
  989.       sprites["s#{i}"].oy = 48
  990.       sprites["s#{i}"].ox = sprites["s#{i}"].bitmap.width + viewport.width/2
  991.       sprites["s#{i}"].x = viewport.width/2
  992.       sprites["s#{i}"].y = viewport.height/2
  993.       sprites["s#{i}"].angle = i * (360/n)
  994.     end
  995.     # animate in
  996.     for j in 0...48
  997.       for i in 0...n
  998.         if j < 8
  999.           sprites["s#{i}"].ox -= (viewport.width/16)
  1000.         elsif j < 16
  1001.           sprites["s#{i}"].src_rect.width -= sprites["s#{i}"].bitmap.width/8
  1002.           sprites["s#{i}"].src_rect.x += sprites["s#{i}"].bitmap.width/8
  1003.           sprites["s#{i}"].ox -= sprites["s#{i}"].bitmap.width/8
  1004.           sprites["s#{i}"].zoom_y -= 0.125
  1005.           sprites["s#{i}"].tone.all += 32
  1006.         end
  1007.         sprites["s#{i}"].angle -= 4 if j < 16
  1008.       end
  1009.       # animate viewport tone
  1010.       if j >= 8
  1011.         viewport.tone.all += (j < 32) ? 4 : -32
  1012.       end
  1013.       # animate sphere
  1014.       if j >= 16 && j < 32
  1015.         sprites["sp"].zoom_x += 0.2
  1016.         sprites["sp"].zoom_y += 0.2
  1017.         sprites["sp"].opacity += 32
  1018.       end
  1019.       sprites["bg"].opacity += 16
  1020.       pbWait(1)
  1021.     end
  1022.     # dispose
  1023.     pbDisposeSpriteHash(sprites)
  1024.     return true
  1025.   end
  1026.   #-----------------------------------------------------------------------------
  1027.   #  animation for B/W legendaries
  1028.   #-----------------------------------------------------------------------------
  1029.   def bwLegendary2(viewport)
  1030.     sprites = {}
  1031.     # generate black backdrop
  1032.     sprites["bg"] = Sprite.new(viewport)
  1033.     sprites["bg"].full_rect(Color.new(0, 0, 0, 128))
  1034.     sprites["bg"].opacity = 0
  1035.     # generate bar sprite
  1036.     sprites["bar"] = Sprite.new(viewport)
  1037.     sprites["bar"].bitmap = pbBitmap("Graphics/Transitions/Common/hStreak")
  1038.     sprites["bar"].oy = sprites["bar"].bitmap.height/2
  1039.     sprites["bar"].y = viewport.height/2
  1040.     sprites["bar"].x = -viewport.width
  1041.     # generate shine sprite
  1042.     sprites["s1"] = Sprite.new(viewport)
  1043.     sprites["s1"].bitmap = pbBitmap("Graphics/Transitions/Common/shine2")
  1044.     sprites["s1"].center!(true)
  1045.     sprites["s1"].zoom = 0
  1046.     # generate shine fill sprite
  1047.     sprites["s2"] = Sprite.new(viewport)
  1048.     sprites["s2"].bitmap = pbBitmap("Graphics/Transitions/Common/shine")
  1049.     sprites["s2"].center!(true)
  1050.     sprites["s2"].zoom = 0
  1051.     sprites["s2"].opacity = 0
  1052.     # begin animation part 1
  1053.     4.times do
  1054.       sprites["bg"].opacity += 64
  1055.       sprites["bar"].x += viewport.width/4
  1056.       pbWait(1)
  1057.     end
  1058.     # animate bar out
  1059.     8.times do
  1060.       sprites["bar"].zoom_y -= 0.125
  1061.       sprites["bar"].opacity -= 8
  1062.       pbWait(1)
  1063.     end
  1064.     # animate spark
  1065.     for i in 0...8
  1066.       sprites["s1"].zoom += i < 4 ? 0.25 : -0.25
  1067.       sprites["s1"].angle += 8
  1068.       pbWait(1)
  1069.     end
  1070.     # animate full shine
  1071.     viewport.color = Color.new(255, 255, 255, 0)
  1072.     for i in 0...16
  1073.       sprites["s2"].zoom += 0.25
  1074.       sprites["s2"].opacity += 32
  1075.       viewport.color.alpha += 32 if i >= 8
  1076.       Graphics.update
  1077.     end
  1078.     viewport.color = Color.white
  1079.     16.times { Graphics.update }
  1080.     # dispose
  1081.     pbDisposeSpriteHash(sprites)
  1082.     # fade to black
  1083.     16.times do
  1084.       viewport.color.red -= 8
  1085.       viewport.color.green -= 8
  1086.       viewport.color.blue -= 8
  1087.       Graphics.update
  1088.     end
  1089.     viewport.color = Color.black
  1090.     2.times { Graphics.update   }
  1091.     return true
  1092.   end
  1093.   #-----------------------------------------------------------------------------
  1094.   #  wild animation for Pokemon that are higher level than your party leader
  1095.   #-----------------------------------------------------------------------------
  1096.   def pbOverlevel(viewport)
  1097.     # gets screen size
  1098.     height = viewport.height/4
  1099.     width = viewport.width/10
  1100.     # creates a sprite of screen
  1101.     backdrop = Sprite.new(viewport)
  1102.     backdrop.snap_screen
  1103.     # creates blank sprite
  1104.     sprite = Sprite.new(viewport)
  1105.     sprite.bitmap = Bitmap.new(viewport.width, viewport.height)
  1106.     # animates gradient pattern
  1107.     for j in 0...4
  1108.       y = [0,2,1,3]
  1109.       for i in 1..10
  1110.         sprite.bitmap.fill_rect(0,height*y[j],width*i,height,Color.white)
  1111.         backdrop.tone.red += 3
  1112.         backdrop.tone.green += 3
  1113.         backdrop.tone.blue += 3
  1114.         pbWait(1)
  1115.       end
  1116.     end
  1117.     # ensures viewport is black
  1118.     viewport.color = Color.new(0,0,0,0)
  1119.     10.times do
  1120.       viewport.color.alpha += 25.5
  1121.       pbWait(1)
  1122.     end
  1123.     # disposes unused sprites
  1124.     backdrop.dispose
  1125.     sprite.dispose
  1126.     return true
  1127.   end
  1128.  
  1129.  
  1130. #===============================================================================
  1131. #  The main class responsible for loading up the S/M styled Pokemon transitions
  1132. #  Only for single Pokemon battles
  1133. #===============================================================================
  1134. class SunMoonSpeciesTransitions
  1135.   attr_accessor :speed
  1136.   attr_reader :started
  1137.   #-----------------------------------------------------------------------------
  1138.   #  creates the transition handler
  1139.   #-----------------------------------------------------------------------------
  1140.   def initialize(*args)
  1141.     return if args.length < 3
  1142.     @started = false
  1143.     # sets up main viewports
  1144.     @viewport = args[0]
  1145.     @viewport.color = Color.new(255, 255, 255, 0)#EliteBattle.get(:colorAlpha))
  1146.     #EliteBattle.set(:colorAlpha, 0)
  1147.     # sets up variables
  1148.     @disposed = false
  1149.     @sentout = false
  1150.     @scene = args[1]
  1151.     # sets up Pokemon parameters
  1152.     @poke = args[2]
  1153.     @species = @poke.species
  1154.     @form = @poke.form
  1155.     @speed = 1
  1156.     @sprites = {}
  1157.     # retreives additional parameters
  1158.     self.getParameters(@species)
  1159.     # initializes the backdrop
  1160.     args = "@viewport,@species"
  1161.     var = @variant == "trainer" ? "default" : @variant
  1162.     # check if can continue
  1163.     unless var.is_a?(String) && !var.empty?
  1164.     #  EliteBattle.log.error("Cannot get VS sequence variant for Sun/Moon battle transition for species: #{@species}!")
  1165.       var = "default"
  1166.     end
  1167.     # loag background effect
  1168.     @sprites["background"] = eval("SunMoon#{var.capitalize}Background.new(#{args})")
  1169.     @sprites["background"].speed = 24
  1170.     # graphics for bars covering the viewport
  1171.     @sprites["bar1"] = Sprite.new(@viewport)
  1172.     @sprites["bar1"].create_rect(@viewport.width,@viewport.height/2,Color.black)
  1173.     @sprites["bar1"].z = 999
  1174.     @sprites["bar2"] = Sprite.new(@viewport)
  1175.     @sprites["bar2"].create_rect(@viewport.width,@viewport.height/2 + 2,Color.black)
  1176.     @sprites["bar2"].oy = @sprites["bar2"].bitmap.height
  1177.     @sprites["bar2"].y = @viewport.height + 2
  1178.     @sprites["bar2"].z = 999
  1179.     # "electricity" effect that scrolls horizontally behind the Pokemon
  1180.     @sprites["streak"] = ScrollingSprite.new(@viewport)
  1181.     @sprites["streak"].setBitmap("Graphics/Transitions/Species/light")
  1182.     @sprites["streak"].x = @viewport.width
  1183.     @sprites["streak"].y = @viewport.height/2
  1184.     @sprites["streak"].z = 400
  1185.     @sprites["streak"].speed = 64
  1186.     @sprites["streak"].oy = @sprites["streak"].bitmap.height/2
  1187.     # initializes particles
  1188.     for j in 0...24
  1189.       n = ["A","B"][rand(2)]
  1190.       @sprites["p#{j}"] = Sprite.new(@viewport)
  1191.       str = "Graphics/Transitions/Species/particle#{n}#{@species}"
  1192.       str = "Graphics/Transitions/Species/particle#{n}" if !pbResolveBitmap(str)
  1193.       @sprites["p#{j}"].bitmap = pbBitmap(str)
  1194.       @sprites["p#{j}"].ox = @sprites["p#{j}"].bitmap.width/2
  1195.       @sprites["p#{j}"].oy = @sprites["p#{j}"].bitmap.height/2
  1196.       @sprites["p#{j}"].x = @viewport.width + 48
  1197.       y = @viewport.height*0.5*0.72 + rand(0.28*@viewport.height)
  1198.       @sprites["p#{j}"].y = y
  1199.       @sprites["p#{j}"].speed = rand(4) + 1
  1200.       @sprites["p#{j}"].z = 450
  1201.       @sprites["p#{j}"].z += 1 if rand(2) == 0
  1202.     end
  1203.     # determines the extension for the Pokemon bitmap
  1204.     str = pbCheckPokemonBitmapFiles([@species,false,@poke.isFemale?,@poke.isShiny?,(@poke.form rescue 0),(@poke.isShadow? rescue false)]).split("/")
  1205.     str = str[str.length - 1]
  1206.     str = "#{@species}" if !pbResolveBitmap("Graphics/Transitions/species#{str}") # fallback
  1207.     # initializes the necessary Pokemon graphic
  1208.     @sprites["poke1"] = Sprite.new(@viewport)
  1209.     @sprites["poke1"].bitmap = pbBitmap("Graphics/Transitions/species#{str}")
  1210.     @sprites["poke1"].ox = @sprites["poke1"].bitmap.width/2
  1211.     @sprites["poke1"].oy = @sprites["poke1"].bitmap.height*0.35
  1212.     @sprites["poke1"].x = @viewport.width/2
  1213.     @sprites["poke1"].y = @viewport.height/2
  1214.     @sprites["poke1"].glow(Color.new(101,136,194),35,false)
  1215.     @sprites["poke1"].src_rect.height = 0
  1216.     @sprites["poke1"].toggle = -1
  1217.     @sprites["poke1"].z = 350
  1218.     @sprites["poke1"].visible = false
  1219.     @sprites["poke2"] = Sprite.new(@viewport)
  1220.     @sprites["poke2"].bitmap = pbBitmap("Graphics/Transitions/species#{str}")
  1221.     @sprites["poke2"].ox = @sprites["poke2"].bitmap.width/2
  1222.     @sprites["poke2"].oy = @sprites["poke2"].bitmap.height*0.35
  1223.     @sprites["poke2"].x = @viewport.width
  1224.     @sprites["poke2"].y = @viewport.height/2
  1225.     @sprites["poke2"].opacity = 0
  1226.     @sprites["poke2"].z = 350
  1227.   end
  1228.   #-----------------------------------------------------------------------------
  1229.   #  starts the animation
  1230.   #-----------------------------------------------------------------------------
  1231.   def start
  1232.     @started = true
  1233.     return if self.disposed?
  1234.     for i in 0...64
  1235.       @sprites["background"].reduceAlpha(16) if i < 16
  1236.       @sprites["streak"].x -= 64 if @sprites["streak"].x > 0
  1237.       @sprites["streak"].update if @sprites["streak"].x <= 0
  1238.       @sprites["streak"].opacity -= 16 if i >= 48
  1239.       @sprites["bar1"].zoom_y -= 0.02 if @sprites["bar1"].zoom_y > 0.72
  1240.       @sprites["bar2"].zoom_y -= 0.02 if @sprites["bar2"].zoom_y > 0.72
  1241.       @sprites["poke2"].opacity += 16
  1242.       @sprites["poke2"].x -= (@sprites["poke2"].x - @viewport.width/2)*0.1
  1243.       for j in 0...24
  1244.         next if j > i/2
  1245.         @sprites["p#{j}"].x -= 32*@sprites["p#{j}"].speed
  1246.       end
  1247.       @sprites["background"].update
  1248.       Graphics.update
  1249.     end
  1250.     @sprites["background"].speed = 4
  1251.     # changes focus to Pokemon graphic
  1252.     for i in 0...8
  1253.       @sprites["bar1"].zoom_y -= 0.72/8
  1254.       @sprites["bar2"].zoom_y -= 0.72/8
  1255.       @sprites["poke1"].y -= 4
  1256.       @sprites["poke2"].y -= 4
  1257.       if i >= 4
  1258.         @viewport.color.alpha += 64
  1259.       end
  1260.       self.update
  1261.       Graphics.update
  1262.     end
  1263.     # flash and impact of screen
  1264.     @sprites["poke1"].oy = @sprites["poke1"].bitmap.height/2
  1265.     @sprites["poke1"].y = @viewport.height/2
  1266.     @sprites["poke1"].visible = true
  1267.     @sprites["poke2"].oy = @sprites["poke2"].bitmap.height/2
  1268.     @sprites["poke2"].y = @viewport.height/2
  1269.     @sprites["impact"] = Sprite.new(@viewport)
  1270.     @sprites["impact"].bitmap = pbBitmap("Graphics/Pictures/impact")
  1271.     @sprites["impact"].ox = @sprites["impact"].bitmap.width/2
  1272.     @sprites["impact"].oy = @sprites["impact"].bitmap.height/2
  1273.     @sprites["impact"].x = @viewport.width/2
  1274.     @sprites["impact"].y = @viewport.height/2
  1275.     @sprites["impact"].z = 999
  1276.     @sprites["impact"].opacity = 0
  1277.     pbSEPlay(GameData::Species.cry_filename(@species, @form))
  1278.     #@scene.pbShowPartyLineup(0) if SHOW_LINEUP_WILD
  1279.     @sprites["background"].show
  1280.     k = -1
  1281.     # fades flash
  1282.     for i in 0...32
  1283.       @viewport.color.alpha -= 16 if @viewport.color.alpha > 0
  1284.       @sprites["poke2"].y += k*6 if i < 16
  1285.       k *= -1 if i%2 == 0
  1286.       @sprites["impact"].opacity += (i < 24) ? 64 : -32
  1287.       @sprites["impact"].angle += 180 if i%4 == 0
  1288.       @sprites["impact"].mirror = !@sprites["impact"].mirror if i%4 == 2
  1289.       self.update
  1290.       Graphics.update
  1291.     end
  1292.   end
  1293.   #-----------------------------------------------------------------------------
  1294.   #  main update call
  1295.   #-----------------------------------------------------------------------------
  1296.   def update
  1297.     return if self.disposed?
  1298.     @sprites["poke1"].src_rect.height += 40 if @sprites["poke1"].src_rect.height < 640
  1299.     @sprites["poke1"].opacity -= 2*@sprites["poke1"].toggle
  1300.     @sprites["poke1"].toggle *= -1 if @sprites["poke1"].opacity <= 0 || @sprites["poke1"].opacity >= 255
  1301.     @sprites["background"].update
  1302.   end
  1303.   #-----------------------------------------------------------------------------
  1304.   #  called before Trainer sends out their Pokemon
  1305.   #-----------------------------------------------------------------------------
  1306.   def finish
  1307.     return if self.disposed?
  1308.     @scene.clearMessageWindow(true)
  1309.     @sprites["ov1"] = Sprite.new(@viewport)
  1310.     @sprites["ov1"].snap_screen
  1311.     @sprites["ov1"].center!(true)
  1312.     @sprites["ov1"].z = 99999
  1313.     @sprites["ov2"] = Sprite.new(@viewport)
  1314.     @sprites["ov2"].bitmap = @sprites["ov1"].bitmap.clone
  1315.     @sprites["ov2"].blur_sprite(3)
  1316.     @sprites["ov2"].center!(true)
  1317.     @sprites["ov2"].z = 99999
  1318.     @sprites["ov2"].opacity = 0
  1319.     # final zooming transition
  1320.     for i in 0...32
  1321.       @sprites["ov1"].zoom_x += 0.02
  1322.       @sprites["ov1"].zoom_y += 0.02
  1323.       @sprites["ov2"].zoom_x += 0.02
  1324.       @sprites["ov2"].zoom_y += 0.02
  1325.       @sprites["ov2"].opacity += 12
  1326.       if i >= 16
  1327.         @sprites["ov2"].tone.all += 16
  1328.       end
  1329.       Graphics.update
  1330.     end
  1331.     @viewport.color = Color.white
  1332.     self.dispose
  1333.     8.times { Graphics.update }
  1334.     EliteBattle.set(:smAnim, false)
  1335.     # fades out viewport and shows battlebox
  1336.     @scene.sprites["dataBox_1"].appear
  1337.     @scene.sprites["dataBox_1"].position
  1338.     # apply for Player follower
  1339.     #if !EliteBattle.follower(@scene.battle).nil?
  1340.     #  @scene.sprites["dataBox_#{EliteBattle.follower(@scene.battle)}"].appear
  1341.     #  @scene.sprites["dataBox_#{EliteBattle.follower(@scene.battle)}"].position
  1342.     #end
  1343.     for i in 0...16
  1344.       @viewport.color.alpha -= 16
  1345.       @scene.wait
  1346.     end
  1347.   end
  1348.   #-----------------------------------------------------------------------------
  1349.   #  disposes all sprites
  1350.   #-----------------------------------------------------------------------------
  1351.   def dispose
  1352.     @disposed = true
  1353.     pbDisposeSpriteHash(@sprites)
  1354.   end
  1355.   #-----------------------------------------------------------------------------
  1356.   #  checks if disposed
  1357.   #-----------------------------------------------------------------------------
  1358.   def disposed?; return @disposed; end
  1359.   #-----------------------------------------------------------------------------
  1360.   #  compatibility for pbFadeOutAndHide
  1361.   #-----------------------------------------------------------------------------
  1362.   def color; end
  1363.   def color=(val); end
  1364.   #-----------------------------------------------------------------------------
  1365.   #  fetches secondary parameters for the animations
  1366.   #-----------------------------------------------------------------------------
  1367.   def getParameters(trainerid)
  1368.     # method used to check if battling against a registered evil team member
  1369.     #@evilteam = EliteBattle.canTransition?("evilTeam", trainerid, @form)
  1370.     # methods used to determine special variants
  1371.     @variant = "trainer"
  1372.     #for ext in EliteBattle.smTransitions?
  1373.     #  @variant = ext if EliteBattle.canTransition?("#{ext}SM", trainerid, @form)
  1374.     #end
  1375.   end
  1376.   #-----------------------------------------------------------------------------
  1377. end
  1378.  
  1379.  
  1380.  
  1381. #===============================================================================
  1382. #  Tech here- made this class to make it easier to make trainer intros
  1383. #===============================================================================
  1384. class SunMoonTrainerTransitions
  1385.   attr_accessor :speed
  1386.   attr_reader :started
  1387.   #-----------------------------------------------------------------------------
  1388.   #  creates the transition handler
  1389.   #-----------------------------------------------------------------------------
  1390.   def initialize(*args)
  1391.     return if args.length < 3
  1392.     @started = false
  1393.     # sets up main viewports
  1394.     @viewport = args[0]
  1395.     @viewport.color = Color.new(255, 255, 255, 0)#EliteBattle.get(:colorAlpha))
  1396.     #EliteBattle.set(:colorAlpha, 0)
  1397.     # sets up variables
  1398.     @disposed = false
  1399.     @sentout = false
  1400.     @scene = args[1]
  1401.     # sets up Pokemon parameters
  1402.     @trainer = args[2]
  1403.     @fullname = args[3]
  1404.     @speed = 1
  1405.     @variant = args[4]
  1406.     @sprites = {}
  1407.     # retreives additional parameters
  1408.     #self.getParameters(@trainer)
  1409.     # initializes the backdrop
  1410.     args = "@viewport,@trainer"
  1411.     var = @variant
  1412.     # check if can continue
  1413.     unless var.is_a?(String) && !var.empty?
  1414.       var = "default"
  1415.     end
  1416.     # loag background effect
  1417.     @sprites["background"] = eval("SunMoon#{var.capitalize}Background.new(#{args})")
  1418.     @sprites["background"].speed = 24
  1419.     # graphics for bars covering the viewport
  1420.     @sprites["bar1"] = Sprite.new(@viewport)
  1421.     @sprites["bar1"].create_rect(@viewport.width,@viewport.height/2,Color.black)
  1422.     @sprites["bar1"].z = 999
  1423.     @sprites["bar2"] = Sprite.new(@viewport)
  1424.     @sprites["bar2"].create_rect(@viewport.width,@viewport.height/2 + 2,Color.black)
  1425.     @sprites["bar2"].oy = @sprites["bar2"].bitmap.height
  1426.     @sprites["bar2"].y = @viewport.height + 2
  1427.     @sprites["bar2"].z = 999
  1428.     # "electricity" effect that scrolls horizontally behind the Trainer
  1429.     @sprites["streak"] = ScrollingSprite.new(@viewport)
  1430.     @sprites["streak"].setBitmap("Graphics/Transitions/Species/light")
  1431.     @sprites["streak"].x = @viewport.width
  1432.     @sprites["streak"].y = @viewport.height/2
  1433.     @sprites["streak"].z = 400
  1434.     @sprites["streak"].speed = 64
  1435.     @sprites["streak"].oy = @sprites["streak"].bitmap.height/2
  1436.     # initializes particles
  1437.     for j in 0...24
  1438.       n = ["A","B"][rand(2)]
  1439.       @sprites["p#{j}"] = Sprite.new(@viewport)
  1440.       str = "Graphics/Transitions/Species/particle#{n}#{@species}"
  1441.       str = "Graphics/Transitions/Species/particle#{n}" if !pbResolveBitmap(str)
  1442.       @sprites["p#{j}"].bitmap = pbBitmap(str)
  1443.       @sprites["p#{j}"].ox = @sprites["p#{j}"].bitmap.width/2
  1444.       @sprites["p#{j}"].oy = @sprites["p#{j}"].bitmap.height/2
  1445.       @sprites["p#{j}"].x = @viewport.width + 48
  1446.       y = @viewport.height*0.5*0.72 + rand(0.28*@viewport.height)
  1447.       @sprites["p#{j}"].y = y
  1448.       @sprites["p#{j}"].speed = rand(4) + 1
  1449.       @sprites["p#{j}"].z = 450
  1450.       @sprites["p#{j}"].z += 1 if rand(2) == 0
  1451.     end
  1452.     @trainer = @trainer.to_s.rjust(3,"0")
  1453.     str = "#{@trainer}"
  1454.     # initializes the necessary trainer graphic
  1455.     @sprites["trainer1"] = Sprite.new(@viewport)
  1456.     @sprites["trainer1"].bitmap = pbBitmap("Graphics/Trainers/#{str}")
  1457.     @sprites["trainer1"].ox = @sprites["trainer1"].bitmap.width/2
  1458.     @sprites["trainer1"].oy = @sprites["trainer1"].bitmap.height*0.35
  1459.     @sprites["trainer1"].x = @viewport.width/2
  1460.     @sprites["trainer1"].y = @viewport.height/2
  1461.     @sprites["trainer1"].zoom_x = 2
  1462.     @sprites["trainer1"].zoom_y = 2
  1463.     @sprites["trainer1"].glow(Color.new(101,136,194),35,false)
  1464.     @sprites["trainer1"].src_rect.height = 0
  1465.     @sprites["trainer1"].toggle = -1
  1466.     @sprites["trainer1"].z = 350
  1467.     @sprites["trainer1"].visible = false
  1468.     @sprites["trainer2"] = Sprite.new(@viewport)
  1469.     @sprites["trainer2"].bitmap = pbBitmap("Graphics/Trainers/#{str}")
  1470.     @sprites["trainer2"].ox = @sprites["trainer2"].bitmap.width/2
  1471.     @sprites["trainer2"].oy = @sprites["trainer2"].bitmap.height*0.35
  1472.     @sprites["trainer2"].x = @viewport.width
  1473.     @sprites["trainer2"].y = @viewport.height/2
  1474.     @sprites["trainer2"].opacity = 0
  1475.     @sprites["trainer2"].z = 350
  1476.     @sprites["trainer2"].zoom_x = 2
  1477.     @sprites["trainer2"].zoom_y = 2
  1478.   end
  1479.   #-----------------------------------------------------------------------------
  1480.   #  starts the animation
  1481.   #-----------------------------------------------------------------------------
  1482.   def start
  1483.     @started = true
  1484.     return if self.disposed?
  1485.     for i in 0...64
  1486.       @sprites["background"].reduceAlpha(16) if i < 16
  1487.       @sprites["streak"].x -= 64 if @sprites["streak"].x > 0
  1488.       @sprites["streak"].update if @sprites["streak"].x <= 0
  1489.       @sprites["streak"].opacity -= 16 if i >= 48
  1490.       @sprites["bar1"].zoom_y -= 0.02 if @sprites["bar1"].zoom_y > 0.72
  1491.       @sprites["bar2"].zoom_y -= 0.02 if @sprites["bar2"].zoom_y > 0.72
  1492.       @sprites["trainer2"].opacity += 16
  1493.       @sprites["trainer2"].x -= (@sprites["trainer2"].x - @viewport.width/2)*0.1
  1494.       for j in 0...24
  1495.         next if j > i/2
  1496.         @sprites["p#{j}"].x -= 32*@sprites["p#{j}"].speed
  1497.       end
  1498.       @sprites["background"].update
  1499.       Graphics.update
  1500.     end
  1501.     @sprites["background"].speed = 4
  1502.     # changes focus to Trainer graphic
  1503.     for i in 0...8
  1504.       @sprites["bar1"].zoom_y -= 0.72/8
  1505.       @sprites["bar2"].zoom_y -= 0.72/8
  1506.       @sprites["trainer1"].y -= 4
  1507.       @sprites["trainer2"].y -= 4
  1508.       if i >= 4
  1509.         @viewport.color.alpha += 64
  1510.       end
  1511.       self.update
  1512.       Graphics.update
  1513.     end
  1514.     # flash and impact of screen
  1515.     @sprites["trainer1"].oy = @sprites["trainer1"].bitmap.height/2
  1516.     @sprites["trainer1"].y = @viewport.height/2
  1517.     @sprites["trainer1"].visible = true
  1518.     @sprites["trainer2"].oy = @sprites["trainer2"].bitmap.height/2
  1519.     @sprites["trainer2"].y = @viewport.height/2
  1520.     @sprites["impact"] = Sprite.new(@viewport)
  1521.     @sprites["impact"].bitmap = pbBitmap("Graphics/Transitions/impact")
  1522.     @sprites["impact"].ox = @sprites["impact"].bitmap.width/2
  1523.     @sprites["impact"].oy = @sprites["impact"].bitmap.height/2
  1524.     @sprites["impact"].x = @viewport.width/2
  1525.     @sprites["impact"].y = @viewport.height/2
  1526.     @sprites["impact"].z = 999
  1527.     @sprites["impact"].opacity = 0
  1528.     pbSEPlay(GameData::Species.cry_filename(@species, @form))
  1529.     #@scene.pbShowPartyLineup(0) if SHOW_LINEUP_WILD
  1530.     @sprites["background"].show
  1531.     k = -1
  1532.     # fades flash
  1533.     for i in 0...32
  1534.       @viewport.color.alpha -= 16 if @viewport.color.alpha > 0
  1535.       @sprites["trainer2"].y += k*6 if i < 16
  1536.       k *= -1 if i%2 == 0
  1537.       @sprites["impact"].opacity += (i < 24) ? 64 : -32
  1538.       @sprites["impact"].angle += 180 if i%4 == 0
  1539.       @sprites["impact"].mirror = !@sprites["impact"].mirror if i%4 == 2
  1540.       self.update
  1541.       Graphics.update
  1542.     end
  1543.   end
  1544.   #-----------------------------------------------------------------------------
  1545.   #  main update call
  1546.   #-----------------------------------------------------------------------------
  1547.   def update
  1548.     return if self.disposed?
  1549.     @sprites["trainer1"].src_rect.height += 40 if @sprites["trainer1"].src_rect.height < 640
  1550.     @sprites["trainer1"].opacity -= 2*@sprites["trainer1"].toggle
  1551.     @sprites["trainer1"].toggle *= -1 if @sprites["trainer1"].opacity <= 0 || @sprites["trainer1"].opacity >= 255
  1552.     @sprites["background"].update
  1553.   end
  1554.   #-----------------------------------------------------------------------------
  1555.   #  called before Trainer sends out their Pokemon
  1556.   #-----------------------------------------------------------------------------
  1557.   def finish
  1558.     return if self.disposed?
  1559.     pbMessage(_INTL("You are challenged by {1}!",@fullname))
  1560.     #@scene.clearMessageWindow(true)
  1561.     @sprites["ov1"] = Sprite.new(@viewport)
  1562.     @sprites["ov1"].snap_screen
  1563.     @sprites["ov1"].center!(true)
  1564.     @sprites["ov1"].z = 99999
  1565.     @sprites["ov2"] = Sprite.new(@viewport)
  1566.     @sprites["ov2"].bitmap = @sprites["ov1"].bitmap.clone
  1567.     @sprites["ov2"].blur_sprite(3)
  1568.     @sprites["ov2"].center!(true)
  1569.     @sprites["ov2"].z = 99999
  1570.     @sprites["ov2"].opacity = 0
  1571.     # final zooming transition
  1572.     for i in 0...32
  1573.       @sprites["ov1"].zoom_x += 0.02
  1574.       @sprites["ov1"].zoom_y += 0.02
  1575.       @sprites["ov2"].zoom_x += 0.02
  1576.       @sprites["ov2"].zoom_y += 0.02
  1577.       @sprites["ov2"].opacity += 12
  1578.       if i >= 16
  1579.         @sprites["ov2"].tone.all += 16
  1580.       end
  1581.       Graphics.update
  1582.     end
  1583.     @viewport.color = Color.white
  1584.     self.dispose
  1585.     8.times { Graphics.update }
  1586.     #EliteBattle.set(:smAnim, false)
  1587.     # fades out viewport and shows battlebox
  1588.     #@scene.sprites["dataBox_1"].appear
  1589.     #@scene.sprites["dataBox_1"].position
  1590.     # apply for Player follower
  1591.     #if !EliteBattle.follower(@scene.battle).nil?
  1592.     #  @scene.sprites["dataBox_#{EliteBattle.follower(@scene.battle)}"].appear
  1593.     #  @scene.sprites["dataBox_#{EliteBattle.follower(@scene.battle)}"].position
  1594.     #end
  1595.     for i in 0...16
  1596.       @viewport.color.alpha -= 16
  1597.       #@scene.wait
  1598.     end
  1599.   end
  1600.   #-----------------------------------------------------------------------------
  1601.   #  disposes all sprites
  1602.   #-----------------------------------------------------------------------------
  1603.   def dispose
  1604.     @disposed = true
  1605.     pbDisposeSpriteHash(@sprites)
  1606.   end
  1607.   #-----------------------------------------------------------------------------
  1608.   #  checks if disposed
  1609.   #-----------------------------------------------------------------------------
  1610.   def disposed?; return @disposed; end
  1611.   #-----------------------------------------------------------------------------
  1612.   #  compatibility for pbFadeOutAndHide
  1613.   #-----------------------------------------------------------------------------
  1614.   def color; end
  1615.   def color=(val); end
  1616.   #-----------------------------------------------------------------------------
  1617.   #  fetches secondary parameters for the animations
  1618.   #-----------------------------------------------------------------------------
  1619.   def getParameters(trainerid)
  1620.     # method used to check if battling against a registered evil team member
  1621.     #@evilteam = EliteBattle.canTransition?("evilTeam", trainerid, @form)
  1622.     # methods used to determine special variants
  1623.     @variant = "trainer"
  1624.     #for ext in EliteBattle.smTransitions?
  1625.     #  @variant = ext if EliteBattle.canTransition?("#{ext}SM", trainerid, @form)
  1626.     #end
  1627.   end
  1628.   #-----------------------------------------------------------------------------
  1629. end
  1630.  
  1631. #===============================================================================
  1632. #  function used to alter selected graphics based on trainer context
  1633. #===============================================================================
  1634. def checkForTrainerVariant(files, trainerid, evilteam = false, teamskull = false)
  1635.   for i in 0...files.length
  1636.     str = sprintf("%s%s", files[i], trainerid)
  1637.     str2 = sprintf("%s_%s", files[i], trainerid)
  1638.     evl = files[i] + "Evil"
  1639.     skl = files[i] + "Skull"
  1640.     files[i] = evl if pbResolveBitmap(evl) && evilteam
  1641.     files[i] = skl if pbResolveBitmap(skl) && teamskull
  1642.     files[i] = str if pbResolveBitmap(str)
  1643.     files[i] = str2 if pbResolveBitmap(str2)
  1644.   end
  1645.   return files
  1646. end
  1647. #===============================================================================
  1648. #  New class used to render the Sun & Moon styled VS background
  1649. #===============================================================================
  1650. class SunMoonDefaultBackground
  1651.   attr_reader :speed
  1652.   # main method to create the background
  1653.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  1654.     @viewport = viewport
  1655.     @trainerid = trainerid
  1656.     @evilteam = evilteam
  1657.     @teamskull = teamskull
  1658.     @disposed = false
  1659.     @speed = 1
  1660.     @sprites = {}
  1661.     # reverts to default
  1662.     files = ["Graphics/Transitions/Default/background",
  1663.           "Graphics/Transitions/Default/layer",
  1664.           "Graphics/Transitions/Default/final"
  1665.          ]
  1666.     # gets specific graphics
  1667.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  1668.     # creates the 3 background layers
  1669.     for i in 0...3
  1670.       @sprites["bg#{i}"] = ScrollingSprite.new(@viewport)
  1671.       @sprites["bg#{i}"].setBitmap(files[i], false, (i > 0))
  1672.       @sprites["bg#{i}"].z = 200
  1673.       @sprites["bg#{i}"].center!(true)
  1674.       @sprites["bg#{i}"].angle = - 8 if $PokemonSystem.screensize < 2
  1675.       @sprites["bg#{i}"].color = Color.black
  1676.     end
  1677.   end
  1678.   # sets the speed of the sprites
  1679.   def speed=(val)
  1680.     for i in 0...3
  1681.       @sprites["bg#{i}"].speed = val*(i + 1)
  1682.     end
  1683.   end
  1684.   # updates the background
  1685.   def update
  1686.     return if self.disposed?
  1687.     for i in 0...3
  1688.       @sprites["bg#{i}"].update
  1689.     end
  1690.   end
  1691.   # used to fade in from black
  1692.   def reduceAlpha(factor)
  1693.     for i in 0...3
  1694.       @sprites["bg#{i}"].color.alpha -= factor
  1695.     end
  1696.   end
  1697.   # disposes of everything
  1698.   def dispose
  1699.     @disposed = true
  1700.     pbDisposeSpriteHash(@sprites)
  1701.   end
  1702.   # checks if disposed
  1703.   def disposed?; return @disposed; end
  1704.   # used to show other elements
  1705.   def show; end
  1706. end
  1707. #===============================================================================
  1708. #  New class used to render the special Sun & Moon styled VS background
  1709. #===============================================================================
  1710. class SunMoonSpecialBackground
  1711.   attr_reader :speed
  1712.   # main method to create the background
  1713.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  1714.     @viewport = viewport
  1715.     @trainerid = trainerid
  1716.     @evilteam = evilteam
  1717.     @disposed = false
  1718.     @speed = 1
  1719.     @sprites = {}
  1720.     # get files
  1721.     files = [
  1722.       "Graphics/Transitions/Special/background",
  1723.       "Graphics/Transitions/Special/ring",
  1724.       "Graphics/Transitions/Special/particle"
  1725.     ]
  1726.     # gets specific graphics
  1727.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  1728.     # creates the background
  1729.     @sprites["background"] = RainbowSprite.new(@viewport)
  1730.     @sprites["background"].setBitmap(files[0])
  1731.     @sprites["background"].color = Color.black
  1732.     @sprites["background"].z = 200
  1733.     @sprites["background"].center!(true)
  1734.     # handles the particles for the animation
  1735.     @vsFp = {}
  1736.     @fpDx = []
  1737.     @fpDy = []
  1738.     @fpIndex = 0
  1739.     # loads ring effect
  1740.     @sprites["ring"] = Sprite.new(@viewport)
  1741.     @sprites["ring"].bitmap = pbBitmap(files[1])
  1742.     @sprites["ring"].center!
  1743.     @sprites["ring"].x = @viewport.width/2
  1744.     @sprites["ring"].y = @viewport.height
  1745.     @sprites["ring"].zoom_x = 0
  1746.     @sprites["ring"].zoom_y = 0
  1747.     @sprites["ring"].z = 500
  1748.     @sprites["ring"].visible = false
  1749.     @sprites["ring"].color = Color.black
  1750.     # loads sparkle particles
  1751.     for j in 0...32
  1752.       @sprites["s#{j}"] = Sprite.new(@viewport)
  1753.       @sprites["s#{j}"].bitmap = pbBitmap(files[2])
  1754.       @sprites["s#{j}"].center!
  1755.       @sprites["s#{j}"].opacity = 0
  1756.       @sprites["s#{j}"].z = 220
  1757.       @sprites["s#{j}"].color = Color.black
  1758.       @fpDx.push(0)
  1759.       @fpDy.push(0)
  1760.     end
  1761.     @fpSpeed = []
  1762.     @fpOpac = []
  1763.     # loads scrolling particles
  1764.     for j in 0...3
  1765.       k = j+1
  1766.       speed = 2 + rand(5)
  1767.       @sprites["p#{j}"] = ScrollingSprite.new(@viewport)
  1768.       @sprites["p#{j}"].setBitmap("Graphics/Transitions/Special/glow#{j}")
  1769.       @sprites["p#{j}"].speed = speed*4
  1770.       @sprites["p#{j}"].direction = -1
  1771.       @sprites["p#{j}"].opacity = 0
  1772.       @sprites["p#{j}"].z = 220
  1773.       @sprites["p#{j}"].zoom_y = 1 + rand(10)*0.005
  1774.       @sprites["p#{j}"].color = Color.black
  1775.       @sprites["p#{j}"].center!(true)
  1776.       @fpSpeed.push(speed)
  1777.       @fpOpac.push(4) if j > 0
  1778.     end
  1779.   end
  1780.   # sets the speed of the sprites
  1781.   def speed=(val)
  1782.     val = 16 if val > 16
  1783.     for j in 0...3
  1784.       @sprites["p#{j}"].speed = val*2
  1785.     end
  1786.   end
  1787.   # updates the background
  1788.   def update
  1789.     return if self.disposed?
  1790.     # updates background
  1791.     @sprites["background"].update
  1792.     # updates ring
  1793.     if @sprites["ring"].visible && @sprites["ring"].opacity > 0
  1794.       @sprites["ring"].zoom_x += 0.2
  1795.       @sprites["ring"].zoom_y += 0.2
  1796.       @sprites["ring"].opacity -= 16
  1797.     end
  1798.     # updates sparkle particles
  1799.     for j in 0...32
  1800.       next if !@sprites["ring"].visible
  1801.       next if !@sprites["s#{j}"] || @sprites["s#{j}"].disposed?
  1802.       next if j > @fpIndex/4
  1803.       if @sprites["s#{j}"].opacity <= 1
  1804.         width = @viewport.width
  1805.         height = @viewport.height
  1806.         x = rand(width*0.75) + width*0.125
  1807.         y = rand(height*0.50) + height*0.25
  1808.         @fpDx[j] = x + rand(width*0.125)*(x < width/2 ? -1 : 1)
  1809.         @fpDy[j] = y - rand(height*0.25)
  1810.         z = [1,0.75,0.5,0.25][rand(4)]
  1811.         @sprites["s#{j}"].zoom_x = z
  1812.         @sprites["s#{j}"].zoom_y = z
  1813.         @sprites["s#{j}"].x = x
  1814.         @sprites["s#{j}"].y = y
  1815.         @sprites["s#{j}"].opacity = 255
  1816.         @sprites["s#{j}"].angle = rand(360)
  1817.       end
  1818.       @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @fpDx[j])*0.05
  1819.       @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @fpDy[j])*0.05
  1820.       @sprites["s#{j}"].opacity -= @sprites["s#{j}"].opacity*0.05
  1821.       @sprites["s#{j}"].zoom_x -= @sprites["s#{j}"].zoom_x*0.05
  1822.       @sprites["s#{j}"].zoom_y -= @sprites["s#{j}"].zoom_y*0.05
  1823.     end
  1824.     # updates scrolling particles
  1825.     for j in 0...3
  1826.       next if !@sprites["p#{j}"] || @sprites["p#{j}"].disposed?
  1827.       @sprites["p#{j}"].update
  1828.       if j == 0
  1829.         @sprites["p#{j}"].opacity += 5 if @sprites["p#{j}"].opacity < 155
  1830.       else
  1831.         @sprites["p#{j}"].opacity += @fpOpac[j-1]*(@fpSpeed[j]/2)
  1832.       end
  1833.       next if @fpIndex < 24
  1834.       @fpOpac[j-1] *= -1 if (@sprites["p#{j}"].opacity >= 255 || @sprites["p#{j}"].opacity < 65)
  1835.     end
  1836.     @fpIndex += 1 if @fpIndex < 150
  1837.   end
  1838.   # used to fade in from black
  1839.   def reduceAlpha(factor)
  1840.     for key in @sprites.keys
  1841.       @sprites[key].color.alpha -= factor
  1842.     end
  1843.   end
  1844.   # disposes of everything
  1845.   def dispose
  1846.     @disposed = true
  1847.     pbDisposeSpriteHash(@sprites)
  1848.   end
  1849.   # checks if disposed
  1850.   def disposed?; return @disposed; end
  1851.   # used to show other elements
  1852.   def show
  1853.     for j in 0...3
  1854.       @sprites["p#{j}"].visible = true
  1855.     end
  1856.     @sprites["ring"].visible = true
  1857.     @fpIndex = 0
  1858.   end
  1859. end
  1860. #===============================================================================
  1861. #  New class used to render the Sun & Moon kahuna VS background
  1862. #===============================================================================
  1863. class SunMoonEliteBackground
  1864.   attr_reader :speed
  1865.   # main method to create the background
  1866.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  1867.     @viewport = viewport
  1868.     @trainerid = trainerid
  1869.     @evilteam = evilteam
  1870.     @disposed = false
  1871.     @speed = 1
  1872.     @sprites = {}
  1873.     @fpIndex = 0
  1874.     # checks for appropriate files
  1875.     bg = ["Graphics/Transitions/Elite/background",
  1876.           "Graphics/Transitions/Elite/vacuum",
  1877.           "Graphics/Transitions/Elite/shine"
  1878.          ]
  1879.     # gets specific graphics
  1880.     bg = checkForTrainerVariant(bg, trainerid, @evilteam, @teamskull)
  1881.     # creates the background
  1882.     @sprites["background"] = Sprite.new(@viewport)
  1883.     @sprites["background"].bitmap = pbBitmap(bg[0])
  1884.     @sprites["background"].center!(true)
  1885.     @sprites["background"].color = Color.black
  1886.     @sprites["background"].z = 200
  1887.     # creates particles flying out of the center
  1888.     for j in 0...16
  1889.       @sprites["e#{j}"] = Sprite.new(@viewport)
  1890.       bmp = pbBitmap("Graphics/Transitions/Elite/particle")
  1891.       @sprites["e#{j}"].bitmap = Bitmap.new(bmp.width,bmp.height)
  1892.       w = bmp.width/(1 + rand(3))
  1893.       @sprites["e#{j}"].bitmap.stretch_blt(Rect.new(0,0,w,bmp.height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  1894.       @sprites["e#{j}"].oy = @sprites["e#{j}"].bitmap.height/2
  1895.       @sprites["e#{j}"].angle = rand(360)
  1896.       @sprites["e#{j}"].opacity = 0
  1897.       @sprites["e#{j}"].x = @viewport.width/2
  1898.       @sprites["e#{j}"].y = @viewport.height/2
  1899.       @sprites["e#{j}"].speed = (4 + rand(5))
  1900.       @sprites["e#{j}"].z = 220
  1901.       @sprites["e#{j}"].color = Color.black
  1902.     end
  1903.     # creates vacuum waves
  1904.     for j in 0...3
  1905.       @sprites["ec#{j}"] = Sprite.new(@viewport)
  1906.       @sprites["ec#{j}"].bitmap = pbBitmap(bg[1])
  1907.       @sprites["ec#{j}"].center!(true)
  1908.       @sprites["ec#{j}"].zoom_x = 1.5
  1909.       @sprites["ec#{j}"].zoom_y = 1.5
  1910.       @sprites["ec#{j}"].opacity = 0
  1911.       @sprites["ec#{j}"].z = 205
  1912.       @sprites["ec#{j}"].color = Color.black
  1913.     end
  1914.     # creates center glow
  1915.     @sprites["shine"] = Sprite.new(@viewport)
  1916.     @sprites["shine"].bitmap = pbBitmap(bg[2])
  1917.     @sprites["shine"].center!(true)
  1918.     @sprites["shine"].z = 210
  1919.     @sprites["shine"].visible = false
  1920.   end
  1921.   # sets the speed of the sprites
  1922.   def speed=(val); end
  1923.   # updates the background
  1924.   def update
  1925.     return if self.disposed?
  1926.     # background and shine
  1927.     @sprites["background"].angle += 1 if $PokemonSystem.screensize < 2
  1928.     @sprites["shine"].angle -= 1 if $PokemonSystem.screensize < 2
  1929.     # updates (and resets) the particles flying from the center
  1930.     for j in 0...16
  1931.       next if !@sprites["shine"].visible
  1932.       if @sprites["e#{j}"].ox < -(@sprites["e#{j}"].viewport.width/2)
  1933.         @sprites["e#{j}"].speed = 4 + rand(5)
  1934.         @sprites["e#{j}"].opacity = 0
  1935.         @sprites["e#{j}"].ox = 0
  1936.         @sprites["e#{j}"].angle = rand(360)
  1937.         bmp = pbBitmap("Graphics/Transitions/Elite/particle")
  1938.         @sprites["e#{j}"].bitmap.clear
  1939.         w = bmp.width/(1 + rand(3))
  1940.         @sprites["e#{j}"].bitmap.stretch_blt(Rect.new(0,0,w,bmp.height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  1941.       end
  1942.       @sprites["e#{j}"].opacity += @sprites["e#{j}"].speed
  1943.       @sprites["e#{j}"].ox -=  @sprites["e#{j}"].speed
  1944.     end
  1945.     # updates the vacuum waves
  1946.     for j in 0...3
  1947.       next if j > @fpIndex/50
  1948.       if @sprites["ec#{j}"].zoom_x <= 0
  1949.         @sprites["ec#{j}"].zoom_x = 1.5
  1950.         @sprites["ec#{j}"].zoom_y = 1.5
  1951.         @sprites["ec#{j}"].opacity = 0
  1952.       end
  1953.       @sprites["ec#{j}"].opacity +=  8
  1954.       @sprites["ec#{j}"].zoom_x -= 0.01
  1955.       @sprites["ec#{j}"].zoom_y -= 0.01
  1956.     end
  1957.     @fpIndex += 1 if @fpIndex < 150
  1958.   end
  1959.   # used to show other elements
  1960.   def show
  1961.     @sprites["shine"].visible = true
  1962.   end
  1963.   # used to fade in from black
  1964.   def reduceAlpha(factor)
  1965.     for key in @sprites.keys
  1966.       @sprites[key].color.alpha -= factor
  1967.     end
  1968.   end
  1969.   # disposes of everything
  1970.   def dispose
  1971.     @disposed = true
  1972.     pbDisposeSpriteHash(@sprites)
  1973.   end
  1974.   # checks if disposed
  1975.   def disposed?; return @disposed; end
  1976.  
  1977. end
  1978. #===============================================================================
  1979. #  New class used to render the Mother Beast Lusamine styled VS background
  1980. #===============================================================================
  1981. class SunMoonCrazyBackground
  1982.   attr_accessor :speed
  1983.   # main method to create the background
  1984.   def initialize(viewport,trainerid,evilteam=false,teamskull=false)
  1985.     @viewport = viewport
  1986.     @trainerid = trainerid
  1987.     @evilteam = evilteam
  1988.     @disposed = false
  1989.     @speed = 1
  1990.     @sprites = {}
  1991.     # draws a black backdrop
  1992.     @sprites["bg"] = Sprite.new(@viewport)
  1993.     @sprites["bg"].create_rect(@viewport.width,@viewport.height,Color.black)
  1994.     @sprites["bg"].z = 200
  1995.     @sprites["bg"].color = Color.black
  1996.     # draws the 3 circular patterns that change hue
  1997.     for j in 0...3
  1998.       @sprites["b#{j}"] = RainbowSprite.new(@viewport)
  1999.       @sprites["b#{j}"].setBitmap("Graphics/Transitions/Crazy/ring#{j}",8)
  2000.       @sprites["b#{j}"].center!(true)
  2001.       @sprites["b#{j}"].zoom_x = 0.6 + 0.6*j
  2002.       @sprites["b#{j}"].zoom_y = 0.6 + 0.6*j
  2003.       @sprites["b#{j}"].opacity = 64 + 64*(1+j)
  2004.       @sprites["b#{j}"].z = 250
  2005.       @sprites["b#{j}"].color = Color.black
  2006.     end
  2007.     # draws all the particles
  2008.     for j in 0...64
  2009.       @sprites["p#{j}"] = Sprite.new(@viewport)
  2010.       @sprites["p#{j}"].z = 300
  2011.       width = 16 + rand(48)
  2012.       height = 16 + rand(16)
  2013.       @sprites["p#{j}"].bitmap = Bitmap.new(width,height)
  2014.       bmp = pbBitmap("Graphics/Transitions/Crazy/particle")
  2015.       @sprites["p#{j}"].bitmap.stretch_blt(Rect.new(0,0,width,height),bmp,Rect.new(0,0,bmp.width,bmp.height))
  2016.       @sprites["p#{j}"].bitmap.hue_change(rand(360))
  2017.       @sprites["p#{j}"].ox = width/2
  2018.       @sprites["p#{j}"].oy = height + 192 + rand(32)
  2019.       @sprites["p#{j}"].angle = rand(360)
  2020.       @sprites["p#{j}"].speed = 1 + rand(4)
  2021.       @sprites["p#{j}"].x = @viewport.width/2
  2022.       @sprites["p#{j}"].y = @viewport.height/2
  2023.       @sprites["p#{j}"].zoom_x = (@sprites["p#{j}"].oy/192.0)*1.5
  2024.       @sprites["p#{j}"].zoom_y = (@sprites["p#{j}"].oy/192.0)*1.5
  2025.       @sprites["p#{j}"].color = Color.black
  2026.     end
  2027.     @frame = 0
  2028.   end
  2029.   # sets the speed of the sprites
  2030.   def speed=(val); end
  2031.   # updates the background
  2032.   def update
  2033.     return if self.disposed?
  2034.     # updates the 3 circular patterns changing their hue
  2035.     for j in 0...3
  2036.       @sprites["b#{j}"].zoom_x -= 0.025
  2037.       @sprites["b#{j}"].zoom_y -= 0.025
  2038.       @sprites["b#{j}"].opacity -= 4
  2039.       if @sprites["b#{j}"].zoom_x <= 0 || @sprites["b#{j}"].opacity <= 0
  2040.         @sprites["b#{j}"].zoom_x = 2.25
  2041.         @sprites["b#{j}"].zoom_y = 2.25
  2042.         @sprites["b#{j}"].opacity = 255
  2043.       end
  2044.       @sprites["b#{j}"].update if @frame%8==0
  2045.     end
  2046.     # animates all the particles
  2047.     for j in 0...64
  2048.       @sprites["p#{j}"].angle -= @sprites["p#{j}"].speed
  2049.       @sprites["p#{j}"].opacity -= @sprites["p#{j}"].speed
  2050.       @sprites["p#{j}"].oy -= @sprites["p#{j}"].speed/2 if @sprites["p#{j}"].oy > @sprites["p#{j}"].bitmap.height
  2051.       @sprites["p#{j}"].zoom_x = (@sprites["p#{j}"].oy/192.0)*1.5
  2052.       @sprites["p#{j}"].zoom_y = (@sprites["p#{j}"].oy/192.0)*1.5
  2053.       if @sprites["p#{j}"].zoom_x <= 0 || @sprites["p#{j}"].oy <= 0 || @sprites["p#{j}"].opacity <= 0
  2054.         @sprites["p#{j}"].angle = rand(360)
  2055.         @sprites["p#{j}"].oy = @sprites["p#{j}"].bitmap.height + 192 + rand(32)
  2056.         @sprites["p#{j}"].zoom_x = (@sprites["p#{j}"].oy/192.0)*1.5
  2057.         @sprites["p#{j}"].zoom_y = (@sprites["p#{j}"].oy/192.0)*1.5
  2058.         @sprites["p#{j}"].opacity = 255
  2059.         @sprites["p#{j}"].speed = 1 + rand(4)
  2060.       end
  2061.     end
  2062.     @frame += 1
  2063.     @frame = 0 if @frame > 128
  2064.   end
  2065.   # used to fade in from black
  2066.   def reduceAlpha(factor)
  2067.     for key in @sprites.keys
  2068.       @sprites[key].color.alpha -= factor
  2069.     end
  2070.   end
  2071.   # disposes of everything
  2072.   def dispose
  2073.     @disposed = true
  2074.     pbDisposeSpriteHash(@sprites)
  2075.   end
  2076.   # checks if disposed
  2077.   def disposed?; return @disposed; end
  2078.   # used to show other elements
  2079.   def show; end
  2080.  
  2081. end
  2082. #===============================================================================
  2083. #  New class used to render the ultra squad Sun & Moon styled VS background
  2084. #===============================================================================
  2085. class SunMoonUltraBackground
  2086.   attr_reader :speed
  2087.   # main method to create the background
  2088.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2089.     @viewport = viewport
  2090.     @trainerid = trainerid
  2091.     @evilteam = evilteam
  2092.     @disposed = false
  2093.     @speed = 1
  2094.     @fpIndex = 0
  2095.     @sprites = {}
  2096.     # allows for custom graphics as well
  2097.     files = ["Graphics/Transitions/Ultra/background",
  2098.              "Graphics/Transitions/Ultra/overlay",
  2099.              "Graphics/Transitions/Ultra/shine",
  2100.              "Graphics/Transitions/Ultra/ring",
  2101.              "Graphics/Transitions/Ultra/particle"
  2102.     ]
  2103.     # gets specific graphics
  2104.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  2105.     # creates the background layer
  2106.     @sprites["background"] = RainbowSprite.new(@viewport)
  2107.     @sprites["background"].setBitmap(files[0],2)
  2108.     @sprites["background"].color = Color.black
  2109.     @sprites["background"].z = 200
  2110.     @sprites["background"].center!(true)
  2111.     @sprites["paths"] = RainbowSprite.new(@viewport)
  2112.     @sprites["paths"].setBitmap(files[1],2)
  2113.     @sprites["paths"].center!(true)
  2114.     @sprites["paths"].color = Color.black
  2115.     @sprites["paths"].z = 200
  2116.     @sprites["paths"].opacity = 215
  2117.     @sprites["paths"].toggle = 1
  2118.     @sprites["paths"].visible = false
  2119.     # creates the shine effect
  2120.     @sprites["shine"] = Sprite.new(@viewport)
  2121.     @sprites["shine"].bitmap = pbBitmap(files[2])
  2122.     @sprites["shine"].center!(true)
  2123.     @sprites["shine"].color = Color.black
  2124.     @sprites["shine"].z = 200
  2125.     # creates the hexagonal zoom patterns
  2126.     for i in 0...12
  2127.       @sprites["h#{i}"] = Sprite.new(@viewport)
  2128.       @sprites["h#{i}"].bitmap = pbBitmap(files[3])
  2129.       @sprites["h#{i}"].center!(true)
  2130.       @sprites["h#{i}"].color = Color.black
  2131.       @sprites["h#{i}"].z = 220
  2132.       z = 1
  2133.       @sprites["h#{i}"].zoom_x = z
  2134.       @sprites["h#{i}"].zoom_y = z
  2135.       @sprites["h#{i}"].opacity = 255
  2136.     end
  2137.     for i in 0...16
  2138.       @sprites["p#{i}"] = Sprite.new(@viewport)
  2139.       @sprites["p#{i}"].bitmap = pbBitmap(files[4])
  2140.       @sprites["p#{i}"].oy = @sprites["p#{i}"].bitmap.height/2
  2141.       @sprites["p#{i}"].x = @viewport.width/2
  2142.       @sprites["p#{i}"].y = @viewport.height/2
  2143.       @sprites["p#{i}"].angle = rand(360)
  2144.       @sprites["p#{i}"].color = Color.black
  2145.       @sprites["p#{i}"].z = 210
  2146.       @sprites["p#{i}"].visible = false
  2147.     end
  2148.     160.times do
  2149.       self.update(true)
  2150.     end
  2151.   end
  2152.   # sets the speed of the sprites
  2153.   def speed=(val)
  2154.   end
  2155.   # updates the background
  2156.   def update(skip=false)
  2157.     return if self.disposed?
  2158.     if !skip
  2159.       @sprites["background"].update
  2160.       @sprites["shine"].angle -= 1 if $PokemonSystem.screensize < 2
  2161.       @sprites["paths"].update
  2162.       @sprites["paths"].opacity -= @sprites["paths"].toggle*2
  2163.       @sprites["paths"].toggle *= -1 if @sprites["paths"].opacity <= 85 || @sprites["paths"].opacity >= 215
  2164.     end
  2165.     for i in 0...12
  2166.       next if i > @fpIndex/32
  2167.       if @sprites["h#{i}"].opacity <= 0
  2168.         @sprites["h#{i}"].zoom_x = 1
  2169.         @sprites["h#{i}"].zoom_y = 1
  2170.         @sprites["h#{i}"].opacity = 255
  2171.       end
  2172.       @sprites["h#{i}"].zoom_x += 0.003*(@sprites["h#{i}"].zoom_x**2)
  2173.       @sprites["h#{i}"].zoom_y += 0.003*(@sprites["h#{i}"].zoom_y**2)
  2174.       @sprites["h#{i}"].opacity -= 1
  2175.     end
  2176.     for i in 0...16
  2177.       next if i > @fpIndex/8
  2178.       if @sprites["p#{i}"].opacity <= 0
  2179.         @sprites["p#{i}"].ox = 0
  2180.         @sprites["p#{i}"].angle = rand(360)
  2181.         @sprites["p#{i}"].zoom_x = 1
  2182.         @sprites["p#{i}"].zoom_y = 1
  2183.         @sprites["p#{i}"].opacity = 255
  2184.       end
  2185.       @sprites["p#{i}"].opacity -= 2
  2186.       @sprites["p#{i}"].ox -= 4
  2187.       @sprites["p#{i}"].zoom_x += 0.001
  2188.       @sprites["p#{i}"].zoom_y += 0.001
  2189.     end
  2190.     @fpIndex += 1 if @fpIndex < 512
  2191.   end
  2192.   # used to fade in from black
  2193.   def reduceAlpha(factor)
  2194.     for key in @sprites.keys
  2195.       @sprites[key].color.alpha -= factor
  2196.     end
  2197.   end
  2198.   # disposes of everything
  2199.   def dispose
  2200.     @disposed = true
  2201.     pbDisposeSpriteHash(@sprites)
  2202.   end
  2203.   # checks if disposed
  2204.   def disposed?; return @disposed; end
  2205.   # used to show other elements
  2206.   def show
  2207.     for i in 0...16
  2208.       @sprites["p#{i}"].visible = true
  2209.     end
  2210.     @sprites["paths"].visible = true
  2211.   end
  2212. end
  2213. #===============================================================================
  2214. #  New class used to render a custom Sun & Moon styled VS background
  2215. #===============================================================================
  2216. class SunMoonDigitalBackground
  2217.   attr_reader :speed
  2218.   # main method to create the background
  2219.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2220.     @viewport = viewport
  2221.     @trainerid = trainerid
  2222.     @evilteam = evilteam
  2223.     @disposed = false
  2224.     @speed = 1
  2225.     @sprites = {}
  2226.     @tiles = []
  2227.     @data = []
  2228.     @fpIndex = 0
  2229.     # allows for custom graphics as well
  2230.     files = ["Graphics/Transitions/Digital/background",
  2231.              "Graphics/Transitions/Digital/particle",
  2232.              "Graphics/Transitions/Digital/shine"
  2233.     ]
  2234.     # gets specific graphics
  2235.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  2236.     # creates the background layer
  2237.     @sprites["bg"] = Sprite.new(@viewport)
  2238.     @sprites["bg"].bitmap = pbBitmap(files[0])
  2239.     @sprites["bg"].z = 200
  2240.     @sprites["bg"].color = Color.black
  2241.     @sprites["bg"].center!(true)
  2242.     for i in 0...16
  2243.       @sprites["p#{i}"] = Sprite.new(@viewport)
  2244.       @sprites["p#{i}"].bitmap = pbBitmap(files[1])
  2245.       @sprites["p#{i}"].z = 205
  2246.       @sprites["p#{i}"].color = Color.black
  2247.       @sprites["p#{i}"].oy = @sprites["p#{i}"].bitmap.height/2
  2248.       @sprites["p#{i}"].x = @viewport.width/2
  2249.       @sprites["p#{i}"].y = @viewport.height/2
  2250.       @sprites["p#{i}"].angle = rand(16)*22.5
  2251.       @sprites["p#{i}"].visible = false
  2252.     end
  2253.     @sprites["shine"] = Sprite.new(@viewport)
  2254.     @sprites["shine"].bitmap = pbBitmap(files[2])
  2255.     @sprites["shine"].center!
  2256.     @sprites["shine"].x = @viewport.width/2
  2257.     @sprites["shine"].y = @viewport.height/2
  2258.     @sprites["shine"].color = Color.black
  2259.     @sprites["shine"].z = 210
  2260.     @sprites["shine"].toggle = 1
  2261.     # draws all the little tiles
  2262.     tile_size = 32.0
  2263.     opacity = 25
  2264.     offset = 2
  2265.     @x = (@viewport.width/tile_size).ceil
  2266.     @y = (@viewport.height/tile_size).ceil
  2267.     for i in 0...@x
  2268.       for j in 0...@y
  2269.         sprite = Sprite.new(@viewport)
  2270.         sprite.bitmap = Bitmap.new(tile_size,tile_size)
  2271.         sprite.bitmap.fill_rect(offset,offset,tile_size-offset*2,tile_size-offset*2,Color.new(255,255,255,opacity))
  2272.         sprite.x = i * tile_size
  2273.         sprite.y = j * tile_size
  2274.         sprite.color = Color.black
  2275.         sprite.visible = false
  2276.         sprite.z = 220
  2277.         o = opacity + rand(156)
  2278.         sprite.opacity = 0
  2279.         @tiles.push(sprite)
  2280.         @data.push([o,rand(5)+4])
  2281.       end
  2282.     end
  2283.   end
  2284.   # sets the speed of the sprites
  2285.   def speed=(val)
  2286.   end
  2287.   # updates the background
  2288.   def update(skip=false)
  2289.     return if self.disposed?
  2290.     for i in 0...@tiles.length
  2291.       @tiles[i].opacity += @data[i][1]
  2292.       @data[i][1] *= -1 if @tiles[i].opacity <= 0 || @tiles[i].opacity >= @data[i][0]
  2293.     end
  2294.     for i in 0...16
  2295.       next if i > @fpIndex/16
  2296.       if @sprites["p#{i}"].ox < - @viewport.width/2
  2297.         @sprites["p#{i}"].angle = rand(16)*22.5
  2298.         @sprites["p#{i}"].ox = 0
  2299.         @sprites["p#{i}"].opacity = 255
  2300.         @sprites["p#{i}"].zoom_x = 1
  2301.         @sprites["p#{i}"].zoom_y = 1
  2302.       end
  2303.       @sprites["p#{i}"].zoom_x += 0.001
  2304.       @sprites["p#{i}"].zoom_y += 0.001
  2305.       @sprites["p#{i}"].opacity -= 4
  2306.       @sprites["p#{i}"].ox -= 4
  2307.     end
  2308.     @sprites["shine"].zoom_x += 0.04*@sprites["shine"].toggle
  2309.     @sprites["shine"].zoom_y += 0.04*@sprites["shine"].toggle
  2310.     @sprites["shine"].toggle *= -1 if @sprites["shine"].zoom_x <= 1 || @sprites["shine"].zoom_x >= 1.4
  2311.     @fpIndex += 1 if @fpIndex < 256
  2312.   end
  2313.   # used to fade in from black
  2314.   def reduceAlpha(factor)
  2315.     for tile in @tiles
  2316.       tile.color.alpha -= factor
  2317.     end
  2318.     for key in @sprites.keys
  2319.       next if key == "bg"
  2320.       @sprites[key].color.alpha -= factor
  2321.     end
  2322.     self.update
  2323.   end
  2324.   # disposes of everything
  2325.   def dispose
  2326.     @disposed = true
  2327.     for tile in @tiles
  2328.       tile.dispose
  2329.     end
  2330.     pbDisposeSpriteHash(@sprites)
  2331.   end
  2332.   # checks if disposed
  2333.   def disposed?; return @disposed; end
  2334.   # used to show other elements
  2335.   def show
  2336.     for i in 0...16
  2337.       @sprites["p#{i}"].visible = true
  2338.     end
  2339.     for tile in @tiles
  2340.       tile.visible = true
  2341.     end
  2342.     @sprites["bg"].color.alpha = 0
  2343.   end
  2344. end
  2345. #===============================================================================
  2346. #  New class used to render a custom Sun & Moon styled VS background
  2347. #===============================================================================
  2348. class SunMoonPlasmaBackground
  2349.   attr_reader :speed
  2350.   # main method to create the background
  2351.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2352.     @viewport = viewport
  2353.     @trainerid = trainerid
  2354.     @evilteam = evilteam
  2355.     @disposed = false
  2356.     @speed = 1
  2357.     @sprites = {}
  2358.     @tiles = []
  2359.     @data = []
  2360.     @fpIndex = 0
  2361.     # allows for custom graphics as well
  2362.     files = ["Graphics/Transitions/Plasma/background",
  2363.              "Graphics/Transitions/Plasma/beam",
  2364.              "Graphics/Transitions/Plasma/streaks",
  2365.              "Graphics/Transitions/Plasma/shine",
  2366.              "Graphics/Transitions/Plasma/particle"
  2367.     ]
  2368.     # gets specific graphics
  2369.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  2370.     # creates the background layer
  2371.     @sprites["bg"] = Sprite.new(@viewport)
  2372.     @sprites["bg"].bitmap = pbBitmap(files[0])
  2373.     @sprites["bg"].z = 200
  2374.     @sprites["bg"].color = Color.black
  2375.     @sprites["bg"].center!(true)
  2376.     # creates plasma beam
  2377.     for i in 0...2
  2378.       @sprites["beam#{i}"] = ScrollingSprite.new(@viewport)
  2379.       @sprites["beam#{i}"].setBitmap(files[i+1])
  2380.       @sprites["beam#{i}"].speed = [32,48][i]
  2381.       @sprites["beam#{i}"].center!
  2382.       @sprites["beam#{i}"].x = @viewport.width/2
  2383.       @sprites["beam#{i}"].y = @viewport.height/2 - 16
  2384.       @sprites["beam#{i}"].zoom_y = 0
  2385.       @sprites["beam#{i}"].z = 210
  2386.       @sprites["beam#{i}"].color = Color.black
  2387.     end
  2388.     @sprites["shine"] = Sprite.new(@viewport)
  2389.     @sprites["shine"].bitmap = pbBitmap(files[3])
  2390.     @sprites["shine"].center!
  2391.     @sprites["shine"].x = @viewport.width
  2392.     @sprites["shine"].y = @viewport.height/2 - 16
  2393.     @sprites["shine"].z = 220
  2394.     @sprites["shine"].visible = false
  2395.     @sprites["shine"].toggle = 1
  2396.     for i in 0...32
  2397.       @sprites["p#{i}"] = Sprite.new(@viewport)
  2398.       @sprites["p#{i}"].bitmap = pbBitmap(files[4])
  2399.       @sprites["p#{i}"].center!
  2400.       @sprites["p#{i}"].opacity = 0
  2401.       @sprites["p#{i}"].z = 215
  2402.       @sprites["p#{i}"].visible = false
  2403.     end
  2404.   end
  2405.   # sets the speed of the sprites
  2406.   def speed=(val)
  2407.     @speed = val
  2408.   end
  2409.   # updates the background
  2410.   def update(skip=false)
  2411.     return if self.disposed?
  2412.     @sprites["shine"].angle += 8 if $PokemonSystem.screensize < 2
  2413.     @sprites["shine"].zoom_x -= 0.04*@sprites["shine"].toggle
  2414.     @sprites["shine"].zoom_y -= 0.04*@sprites["shine"].toggle
  2415.     @sprites["shine"].toggle *= -1 if @sprites["shine"].zoom_x <= 0.8 || @sprites["shine"].zoom_x >= 1.2
  2416.     for i in 0...2
  2417.       @sprites["beam#{i}"].update
  2418.     end
  2419.     for i in 0...32
  2420.       next if i > @fpIndex/4
  2421.       if @sprites["p#{i}"].opacity <= 0
  2422.         @sprites["p#{i}"].x = @sprites["shine"].x
  2423.         @sprites["p#{i}"].y = @sprites["shine"].y
  2424.         r = 256 + rand(129)
  2425.         cx, cy = randCircleCord(r)
  2426.         @sprites["p#{i}"].ex = @sprites["shine"].x - (cx - r).abs
  2427.         @sprites["p#{i}"].ey = @sprites["shine"].y - r/2 + cy/2
  2428.         z = 0.4 + rand(7)/10.0
  2429.         @sprites["p#{i}"].zoom_x = z
  2430.         @sprites["p#{i}"].zoom_y = z
  2431.         @sprites["p#{i}"].opacity = 255
  2432.       end
  2433.       @sprites["p#{i}"].opacity -= 8
  2434.       @sprites["p#{i}"].x -= (@sprites["p#{i}"].x - @sprites["p#{i}"].ex)*0.1
  2435.       @sprites["p#{i}"].y -= (@sprites["p#{i}"].y - @sprites["p#{i}"].ey)*0.1
  2436.     end
  2437.     @fpIndex += 1 if @fpIndex < 512
  2438.   end
  2439.   # used to fade in from black
  2440.   def reduceAlpha(factor)
  2441.     for key in @sprites.keys
  2442.       next if key == "bg"
  2443.       @sprites[key].color.alpha -= factor
  2444.     end
  2445.     for i in 0...2
  2446.       @sprites["beam#{i}"].zoom_y += 0.1 if @sprites["beam#{i}"].color.alpha <= 164 && @sprites["beam#{i}"].zoom_y < 1
  2447.     end
  2448.   end
  2449.   # disposes of everything
  2450.   def dispose
  2451.     @disposed = true
  2452.     pbDisposeSpriteHash(@sprites)
  2453.   end
  2454.   # checks if disposed
  2455.   def disposed?; return @disposed; end
  2456.   # used to show other elements
  2457.   def show
  2458.     @sprites["bg"].color.alpha = 0
  2459.     for key in @sprites.keys
  2460.       @sprites[key].visible = true
  2461.     end
  2462.   end
  2463. end
  2464. #===============================================================================
  2465. #  New class used to render a custom Sun & Moon styled VS background
  2466. #===============================================================================
  2467. class SunMoonGoldBackground
  2468.   attr_reader :speed
  2469.   # main method to create the background
  2470.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2471.     @viewport = viewport
  2472.     @trainerid = trainerid
  2473.     @evilteam = evilteam
  2474.     @disposed = false
  2475.     @speed = 1
  2476.     @sprites = {}
  2477.     @tiles = []
  2478.     @data = []
  2479.     @fpIndex = 0
  2480.     # allows for custom graphics as well
  2481.     files = ["Graphics/Transitions/Gold/background",
  2482.              "Graphics/Transitions/Gold/swirl",
  2483.              "Graphics/Transitions/Gold/particleA"
  2484.     ]
  2485.     # gets specific graphics
  2486.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  2487.     # creates the background layer
  2488.     @sprites["bg"] = Sprite.new(@viewport)
  2489.     @sprites["bg"].bitmap = pbBitmap(files[0])
  2490.     @sprites["bg"].z = 200
  2491.     @sprites["bg"].color = Color.black
  2492.     @sprites["bg"].center!(true)
  2493.  
  2494.     @sprites["shine"] = Sprite.new(@viewport)
  2495.     @sprites["shine"].bitmap = pbBitmap(files[1])
  2496.     @sprites["shine"].center!(true)
  2497.     @sprites["shine"].z = 210
  2498.     @sprites["shine"].toggle = 1
  2499.     for i in 0...32
  2500.       @sprites["p#{i}"] = Sprite.new(@viewport)
  2501.       @sprites["p#{i}"].bitmap = pbBitmap(files[2])
  2502.       @sprites["p#{i}"].center!
  2503.       @sprites["p#{i}"].opacity = 0
  2504.       @sprites["p#{i}"].z = 215
  2505.       @sprites["p#{i}"].visible = false
  2506.     end
  2507.   end
  2508.   # sets the speed of the sprites
  2509.   def speed=(val)
  2510.     @speed = val
  2511.   end
  2512.   # updates the background
  2513.   def update(skip=false)
  2514.     return if self.disposed?
  2515.     @sprites["shine"].angle += 2 if $PokemonSystem.screensize < 2
  2516.     @sprites["shine"].zoom_x -= 0.005*@sprites["shine"].toggle
  2517.     @sprites["shine"].zoom_y -= 0.005*@sprites["shine"].toggle
  2518.     @sprites["shine"].toggle *= -1 if @sprites["shine"].zoom_x <= 0.9 || @sprites["shine"].zoom_x >= 1.1
  2519.     for i in 0...32
  2520.       next if i > @fpIndex/4
  2521.       if @sprites["p#{i}"].opacity <= 0
  2522.         @sprites["p#{i}"].x = @sprites["shine"].x
  2523.         @sprites["p#{i}"].y = @sprites["shine"].y
  2524.         r = 192 + rand(64)
  2525.         cx, cy = randCircleCord(r)
  2526.         @sprites["p#{i}"].ex = @sprites["shine"].x - (cx - r)
  2527.         @sprites["p#{i}"].ey = @sprites["shine"].y - r/2 + cy/2
  2528.         z = 0.8 + rand(7)/10.0
  2529.         @sprites["p#{i}"].zoom_x = z
  2530.         @sprites["p#{i}"].zoom_y = z
  2531.         @sprites["p#{i}"].opacity = 255
  2532.       end
  2533.       @sprites["p#{i}"].opacity -= 6
  2534.       @sprites["p#{i}"].x -= (@sprites["p#{i}"].x - @sprites["p#{i}"].ex)*0.08
  2535.       @sprites["p#{i}"].y -= (@sprites["p#{i}"].y - @sprites["p#{i}"].ey)*0.08
  2536.     end
  2537.     @fpIndex += 1 if @fpIndex < 512
  2538.   end
  2539.   # used to fade in from black
  2540.   def reduceAlpha(factor)
  2541.     for key in @sprites.keys
  2542.       @sprites[key].color.alpha -= factor
  2543.     end
  2544.   end
  2545.   # disposes of everything
  2546.   def dispose
  2547.     @disposed = true
  2548.     pbDisposeSpriteHash(@sprites)
  2549.   end
  2550.   # checks if disposed
  2551.   def disposed?; return @disposed; end
  2552.   # used to show other elements
  2553.   def show
  2554.     for key in @sprites.keys
  2555.       @sprites[key].visible = true
  2556.     end
  2557.   end
  2558. end
  2559. #===============================================================================
  2560. #  New class used to render a custom Sun & Moon styled VS background
  2561. #===============================================================================
  2562. class SunMoonCrystalBackground
  2563.   attr_reader :speed
  2564.   # main method to create the background
  2565.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2566.     @viewport = viewport
  2567.     @trainerid = trainerid
  2568.     @evilteam = evilteam
  2569.     @disposed = false
  2570.     @speed = 1
  2571.     @sprites = {}
  2572.     @tiles = []
  2573.     @data = []
  2574.     @fpIndex = 0
  2575.     @fpDx = []
  2576.     @fpDy = []
  2577.     # allows for custom graphics as well
  2578.     files = ["Graphics/Transitions/Crystal/background",
  2579.              "Graphics/Transitions/Crystal/overlay"
  2580.     ]
  2581.     # gets specific graphics
  2582.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  2583.     # creates the background layer
  2584.     @sprites["bg"] = Sprite.new(@viewport)
  2585.     @sprites["bg"].bitmap = pbBitmap(files[0])
  2586.     @sprites["bg"].z = 200
  2587.     @sprites["bg"].color = Color.black
  2588.     @sprites["bg"].center!(true)
  2589.     # creates overlay
  2590.     @sprites["overlay"] = Sprite.new(@viewport)
  2591.     @sprites["overlay"].bitmap = pbBitmap(files[1])
  2592.     @sprites["overlay"].z = 200
  2593.     @sprites["overlay"].color = Color.black
  2594.     @sprites["overlay"].visible = false
  2595.     @sprites["overlay"].opacity = 0
  2596.     @sprites["overlay"].toggle = 1
  2597.     @sprites["overlay"].center!(true)
  2598.     # draws the crystalline shine
  2599.     for i in 1..26
  2600.       o = i < 10 ? 64 : 128
  2601.       @sprites["c#{i}"] = Sprite.new(@viewport)
  2602.       bmp = pbBitmap(sprintf("Graphics/Transitions/Crystal/cr%03d",i))
  2603.       @sprites["c#{i}"].bitmap = Bitmap.new(bmp.width,bmp.height)
  2604.       @sprites["c#{i}"].bitmap.blt(0,0,bmp,bmp.rect,o-rand(64))
  2605.       bmp.dispose
  2606.       @sprites["c#{i}"].opacity = 0
  2607.       @sprites["c#{i}"].toggle = 1
  2608.       @sprites["c#{i}"].speed = 1 + rand(4)
  2609.       @sprites["c#{i}"].param = 128 - rand(92)
  2610.       @sprites["c#{i}"].end_y = rand(32)
  2611.       @sprites["c#{i}"].z = 200
  2612.       @sprites["c#{i}"].center!(true)
  2613.     end
  2614.     # loads sparkle particles
  2615.     for j in 0...32
  2616.       @sprites["s#{j}"] = Sprite.new(@viewport)
  2617.       @sprites["s#{j}"].bitmap = pbBitmap("Graphics/Transitions/Crystal/particle")
  2618.       @sprites["s#{j}"].ox = @sprites["s#{j}"].bitmap.width/2
  2619.       @sprites["s#{j}"].oy = @sprites["s#{j}"].bitmap.height/2
  2620.       @sprites["s#{j}"].opacity = 0
  2621.       @sprites["s#{j}"].z = 220
  2622.       @sprites["s#{j}"].color = Color.black
  2623.       @sprites["s#{j}"].visible = false
  2624.       @fpDx.push(0)
  2625.       @fpDy.push(0)
  2626.     end
  2627.   end
  2628.   # sets the speed of the sprites
  2629.   def speed=(val)
  2630.     @speed = val
  2631.   end
  2632.   # updates the background
  2633.   def update(skip=false)
  2634.     return if self.disposed?
  2635.     @speed = 16 if @speed > 16
  2636.     # updates overlay
  2637.     @sprites["overlay"].opacity += 4*@sprites["overlay"].toggle
  2638.     @sprites["overlay"].toggle *= -1 if @sprites["overlay"].opacity <= 0 || @sprites["overlay"].opacity >= 255
  2639.     # updates crystal particles
  2640.     for i in 1..26
  2641.       next if @fpIndex < @sprites["c#{i}"].end_y
  2642.       @sprites["c#{i}"].opacity += @sprites["c#{i}"].toggle*@sprites["c#{i}"].speed*(@speed/4)
  2643.       @sprites["c#{i}"].toggle *= -1 if @sprites["c#{i}"].opacity <= 0 || @sprites["c#{i}"].opacity >= @sprites["c#{i}"].param
  2644.     end
  2645.     # updates sparkle particles
  2646.     for j in 0...32
  2647.       next if !@sprites["s#{j}"] || @sprites["s#{j}"].disposed?
  2648.       next if j > @fpIndex/4
  2649.       if @sprites["s#{j}"].opacity <= 1
  2650.         width = @viewport.width
  2651.         height = @viewport.height
  2652.         x = rand(width*0.75) + width*0.125
  2653.         y = rand(height*0.50) + height*0.25
  2654.         @fpDx[j] = x + rand(width*0.125)*(x < width/2 ? -1 : 1)
  2655.         @fpDy[j] = y - rand(height*0.25)
  2656.         z = [1,0.75,0.5,0.25][rand(4)]
  2657.         @sprites["s#{j}"].zoom_x = z
  2658.         @sprites["s#{j}"].zoom_y = z
  2659.         @sprites["s#{j}"].x = x
  2660.         @sprites["s#{j}"].y = y
  2661.         @sprites["s#{j}"].opacity = 255
  2662.         @sprites["s#{j}"].angle = rand(360)
  2663.       end
  2664.       @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @fpDx[j])*0.05
  2665.       @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @fpDy[j])*0.05
  2666.       @sprites["s#{j}"].opacity -= @sprites["s#{j}"].opacity*0.05
  2667.       @sprites["s#{j}"].zoom_x -= @sprites["s#{j}"].zoom_x*0.05
  2668.       @sprites["s#{j}"].zoom_y -= @sprites["s#{j}"].zoom_y*0.05
  2669.     end
  2670.     @fpIndex += 1 if @fpIndex < 512
  2671.   end
  2672.   # used to fade in from black
  2673.   def reduceAlpha(factor)
  2674.     for key in @sprites.keys
  2675.       next if key == "bg"
  2676.       @sprites[key].color.alpha -= factor
  2677.     end
  2678.     self.update
  2679.   end
  2680.   # disposes of everything
  2681.   def dispose
  2682.     @disposed = true
  2683.     pbDisposeSpriteHash(@sprites)
  2684.   end
  2685.   # checks if disposed
  2686.   def disposed?; return @disposed; end
  2687.   # used to show other elements
  2688.   def show
  2689.     @sprites["bg"].color.alpha = 0
  2690.     @sprites["overlay"].visible = true
  2691.     for j in 0...32
  2692.       @sprites["s#{j}"].visible = true
  2693.     end
  2694.   end
  2695. end
  2696. #===============================================================================
  2697. #  New class used to render the Sun & Moon styled VS background
  2698. #===============================================================================
  2699. class SunMoonSpaceBackground
  2700.   attr_reader :speed
  2701.   # main method to create the background
  2702.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2703.     @viewport = viewport
  2704.     @trainerid = trainerid
  2705.     @evilteam = evilteam
  2706.     @teamskull = teamskull
  2707.     @disposed = false
  2708.     @speed = 1
  2709.     @sprites = {}
  2710.     # reverts to default
  2711.     files = [
  2712.       "Graphics/Transitions/Space/background"
  2713.     ]
  2714.     # gets specific graphics
  2715.     files = checkForTrainerVariant(files, trainerid, @evilteam, @teamskull)
  2716.     # creates the background
  2717.     @sprites["bg1"] = Sprite.new(@viewport)
  2718.     @sprites["bg1"].bitmap = pbBitmap(files[0])
  2719.     @sprites["bg1"].color = Color.black
  2720.     @sprites["bg1"].z = 200
  2721.     @sprites["bg1"].center!(true)
  2722.     # creates all the star particles
  2723.     for i in 0...64
  2724.       @sprites["s#{i}"] = Sprite.new(@viewport)
  2725.       @sprites["s#{i}"].bitmap = pbBitmap(sprintf("Graphics/Transitions/Space/star%03d",rand(6)+1))
  2726.       @sprites["s#{i}"].center!
  2727.       zm = [0.4,0.4,0.5,0.6,0.7][rand(5)]
  2728.       @sprites["s#{i}"].zoom_x = zm
  2729.       @sprites["s#{i}"].zoom_y = zm
  2730.       @sprites["s#{i}"].x = rand(@viewport.width + 1)
  2731.       @sprites["s#{i}"].y = rand(@viewport.height + 1)
  2732.       o = 85 + rand(130)
  2733.       s = 2 + rand(4)
  2734.       @sprites["s#{i}"].speed = s
  2735.       @sprites["s#{i}"].toggle = 1
  2736.       @sprites["s#{i}"].param = o
  2737.       @sprites["s#{i}"].opacity = o
  2738.       @sprites["s#{i}"].z = 200
  2739.       @sprites["s#{i}"].visible = false
  2740.     end
  2741.     # initializes particles
  2742.     @sprites["shine2"] = Sprite.new(@viewport)
  2743.     @sprites["shine2"].bitmap = pbBitmap("Graphics/Transitions/Space/shine002")
  2744.     @sprites["shine2"].center!(true)
  2745.     @sprites["shine2"].z = 200
  2746.     @sprites["shine2"].toggle = 1
  2747.     @sprites["shine2"].speed = 1
  2748.     # initializes particles
  2749.     for j in 0...16
  2750.       @sprites["p#{j}"] = Sprite.new(@viewport)
  2751.       @sprites["p#{j}"].bitmap = pbBitmap("Graphics/Transitions/Space/shine001")
  2752.       @sprites["p#{j}"].center!(true)
  2753.       @sprites["p#{j}"].z = 200
  2754.       x, y = randCircleCord(256)
  2755.       p = rand(100)
  2756.       @sprites["p#{j}"].end_x = @sprites["p#{j}"].x - 256 + x
  2757.       @sprites["p#{j}"].end_y = @sprites["p#{j}"].y - 256 + y
  2758.       @sprites["p#{j}"].x -= (@sprites["p#{j}"].x - @sprites["p#{j}"].end_x)*(p/100.0)
  2759.       @sprites["p#{j}"].y -= (@sprites["p#{j}"].y - @sprites["p#{j}"].end_y)*(p/100.0)
  2760.       @sprites["p#{j}"].speed = 4
  2761.       @sprites["p#{j}"].opacity = 255 - 255*(p/100.0)
  2762.     end
  2763.   end
  2764.   # sets the speed of the sprites
  2765.   def speed=(val)
  2766.     @sprites["shine2"].speed = val/4
  2767.   end
  2768.   # updates the background
  2769.   def update
  2770.     return if self.disposed?
  2771.     # updates star particles
  2772.     for i in 0...64
  2773.       @sprites["s#{i}"].opacity += @sprites["s#{i}"].speed*@sprites["s#{i}"].toggle
  2774.       if @sprites["s#{i}"].opacity > @sprites["s#{i}"].param || @sprites["s#{i}"].opacity < 10
  2775.         @sprites["s#{i}"].toggle *= -1
  2776.       end
  2777.     end
  2778.     # updates particle effect
  2779.     for j in 0...16
  2780.       if @sprites["p#{j}"].opacity == 0
  2781.         @sprites["p#{j}"].opacity = 255
  2782.         @sprites["p#{j}"].center!(true)
  2783.         x, y = randCircleCord(256)
  2784.         @sprites["p#{j}"].end_x = @sprites["p#{j}"].x - 256 + x
  2785.         @sprites["p#{j}"].end_y = @sprites["p#{j}"].y - 256 + y
  2786.       end
  2787.       @sprites["p#{j}"].x -= (@sprites["p#{j}"].x - @sprites["p#{j}"].end_x)*0.01*@sprites["p#{j}"].speed
  2788.       @sprites["p#{j}"].y -= (@sprites["p#{j}"].y - @sprites["p#{j}"].end_y)*0.01*@sprites["p#{j}"].speed
  2789.       @sprites["p#{j}"].opacity -= 2*@sprites["p#{j}"].speed
  2790.     end
  2791.     # updates particle effect
  2792.     @sprites["shine2"].toggle *= -1 if @sprites["shine2"].zoom_x >= 1.16 || @sprites["shine2"].zoom_x <= 0.84
  2793.     @sprites["shine2"].zoom_x += 0.005*@sprites["shine2"].toggle*@sprites["shine2"].speed
  2794.     @sprites["shine2"].zoom_y += 0.005*@sprites["shine2"].toggle*@sprites["shine2"].speed
  2795.   end
  2796.   # used to fade in from black
  2797.   def reduceAlpha(factor)
  2798.     @sprites["bg1"].color.alpha -= factor
  2799.   end
  2800.   # disposes of everything
  2801.   def dispose
  2802.     @disposed = true
  2803.     pbDisposeSpriteHash(@sprites)
  2804.   end
  2805.   # checks if disposed
  2806.   def disposed?; return @disposed; end
  2807.   # used to show other elements
  2808.   def show
  2809.     for i in 0...64
  2810.       @sprites["s#{i}"].visible = true
  2811.     end
  2812.   end
  2813. end
  2814. #===============================================================================
  2815. #  New class used to render the Sun & Moon styled VS background
  2816. #===============================================================================
  2817. class SunMoonForestBackground
  2818.   attr_reader :speed
  2819.   # main method to create the background
  2820.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2821.     @viewport = viewport
  2822.     @trainerid = trainerid
  2823.     @evilteam = evilteam
  2824.     @teamskull = teamskull
  2825.     @disposed = false
  2826.     @speed = 1
  2827.     @fpIndex = 0
  2828.     @sprites = {}
  2829.     # reverts to default
  2830.     # reverts to default
  2831.     bg = ["Graphics/Transitions/Forest/background",
  2832.           "Graphics/Transitions/Forest/overlay",
  2833.           "Graphics/Transitions/Forest/glow",
  2834.           "Graphics/Transitions/Forest/radial",
  2835.           "Graphics/Transitions/Forest/shine",
  2836.           "Graphics/Transitions/Forest/ray"
  2837.          ]
  2838.     # gets specific graphics
  2839.     bg = checkForTrainerVariant(bg, trainerid, @evilteam, @teamskull)
  2840.     # creates the background
  2841.     @sprites["bg1"] = Sprite.new(@viewport)
  2842.     @sprites["bg1"].bitmap = pbBitmap(bg[0])
  2843.     @sprites["bg1"].color = Color.black
  2844.     @sprites["bg1"].z = 200
  2845.     @sprites["bg1"].center!(true)
  2846.     # creates glow
  2847.     @sprites["glow"] = Sprite.new(@viewport)
  2848.     @sprites["glow"].bitmap = pbBitmap(bg[2])
  2849.     @sprites["glow"].color = Color.black
  2850.     @sprites["glow"].toggle = 1
  2851.     @sprites["glow"].z = 200
  2852.     @sprites["glow"].center!(true)
  2853.     # creates spinning element
  2854.     @sprites["rad"] = Sprite.new(@viewport)
  2855.     @sprites["rad"].bitmap = pbBitmap(bg[3])
  2856.     @sprites["rad"].center!(true)
  2857.     #@sprites["rad"].color = Color.black
  2858.     @sprites["rad"].z = 200
  2859.     # creates the overlay
  2860.     @sprites["ol1"] = Sprite.new(@viewport)
  2861.     @sprites["ol1"].bitmap = pbBitmap(bg[1])
  2862.     @sprites["ol1"].z = 202
  2863.     @sprites["ol1"].visible = false
  2864.     @sprites["ol1"].center!(true)
  2865.     # initializes particles
  2866.     @sprites["shine"] = Sprite.new(@viewport)
  2867.     @sprites["shine"].bitmap = pbBitmap(bg[4])
  2868.     @sprites["shine"].center!(true)
  2869.     @sprites["shine"].z = 200
  2870.     # initializes light rays
  2871.     rangle = []
  2872.     for i in 0...8; rangle.push((360/8)*i +  15); end
  2873.     for j in 0...8
  2874.       @sprites["r#{j}"] = Sprite.new(@viewport)
  2875.       @sprites["r#{j}"].bitmap = pbBitmap(bg[5])
  2876.       @sprites["r#{j}"].ox = 0
  2877.       @sprites["r#{j}"].oy = @sprites["r#{j}"].bitmap.height/2
  2878.       @sprites["r#{j}"].opacity = 0
  2879.       @sprites["r#{j}"].zoom_x = 0
  2880.       @sprites["r#{j}"].zoom_y = 0
  2881.       @sprites["r#{j}"].x = @viewport.width/2
  2882.       @sprites["r#{j}"].y = @viewport.height/2
  2883.       a = rand(rangle.length)
  2884.       @sprites["r#{j}"].angle = rangle[a]
  2885.       @sprites["r#{j}"].z = 200
  2886.       @sprites["r#{j}"].visible = false
  2887.       rangle.delete_at(a)
  2888.     end
  2889.   end
  2890.   # sets the speed of the sprites
  2891.   def speed=(val); end
  2892.   # updates the background
  2893.   def update
  2894.     return if self.disposed?
  2895.     # updates the rays
  2896.     for j in 0...8
  2897.       next if j > @fpIndex/8
  2898.       if @sprites["r#{j}"].opacity == 0
  2899.         @sprites["r#{j}"].opacity = 255
  2900.         @sprites["r#{j}"].zoom_x = 0
  2901.         @sprites["r#{j}"].zoom_y = 0
  2902.       end
  2903.       @sprites["r#{j}"].opacity -= 3
  2904.       @sprites["r#{j}"].zoom_x += 0.02
  2905.       @sprites["r#{j}"].zoom_y += 0.02
  2906.     end
  2907.     # updates particle effect
  2908.     @sprites["shine"].angle -= 1 if $PokemonSystem.screensize < 2
  2909.     # bg animation
  2910.     @sprites["rad"].angle += 1 if $PokemonSystem.screensize < 2
  2911.     @sprites["glow"].opacity -= @sprites["glow"].toggle
  2912.     @sprites["glow"].toggle *= -1 if @sprites["glow"].opacity <= 125 || @sprites["glow"].opacity >= 255
  2913.     @fpIndex += 1 if @fpIndex < 256
  2914.   end
  2915.   # used to fade in from black
  2916.   def reduceAlpha(factor)
  2917.     @sprites["bg1"].color.alpha -= factor
  2918.     @sprites["glow"].color.alpha -= factor
  2919.   end
  2920.   # disposes of everything
  2921.   def dispose
  2922.     @disposed = true
  2923.     pbDisposeSpriteHash(@sprites)
  2924.   end
  2925.   # checks if disposed
  2926.   def disposed?; return @disposed; end
  2927.   # used to show other elements
  2928.   def show
  2929.     @sprites["ol1"].visible = true
  2930.     for j in 0...8
  2931.       @sprites["r#{j}"].visible = true
  2932.     end
  2933.     @sprites["shine"].visible = true
  2934.   end
  2935. end
  2936. #===============================================================================
  2937. #  New class used to render the Sun & Moon styled VS background
  2938. #===============================================================================
  2939. class SunMoonWavesBackground
  2940.   attr_reader :speed
  2941.   # main method to create the background
  2942.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  2943.     @viewport = viewport
  2944.     @trainerid = trainerid
  2945.     @evilteam = evilteam
  2946.     @teamskull = teamskull
  2947.     @disposed = false
  2948.     @reveal = false
  2949.     @speed = 1
  2950.     @sprites = {}
  2951.     # reverts to default
  2952.     bg = ["Graphics/Transitions/Waves/waves1",
  2953.           "Graphics/Transitions/Waves/waves2",
  2954.           "Graphics/Transitions/Waves/waves3",
  2955.           "Graphics/Transitions/Waves/background"
  2956.          ]
  2957.     # gets specific graphics
  2958.     bg = checkForTrainerVariant(bg, trainerid, @evilteam, @teamskull)
  2959.     # create background layer
  2960.     @sprites["bg"] = Sprite.new(@viewport)
  2961.     @sprites["bg"].bitmap = pbBitmap(bg[3])
  2962.     @sprites["bg"].color = Color.new(0, 0, 0, 160)
  2963.     @sprites["bg"].z = 200
  2964.     @sprites["bg"].center!(true)
  2965.     # creates the 3 wave layers
  2966.     for i in 0...3
  2967.       @sprites["w#{i}"] = ScrollingSprite.new(@viewport)
  2968.       @sprites["w#{i}"].direction = 1 * (i%2 == 0 ? 1 : -1)
  2969.       @sprites["w#{i}"].speed = 6 + 4*(i)
  2970.       @sprites["w#{i}"].setBitmap(bg[i])
  2971.       @sprites["w#{i}"].z = 210
  2972.       @sprites["w#{i}"].center!(true)
  2973.       @sprites["w#{i}"].color = Color.black
  2974.     end
  2975.     # create bubbles
  2976.     for i in 0...18
  2977.       @sprites["b#{i}"] = Sprite.new(@viewport)
  2978.       @sprites["b#{i}"].z = 205
  2979.       @sprites["b#{i}"].y = -32
  2980.     end
  2981.   end
  2982.   # sets the speed of the sprites
  2983.   def speed=(val); end
  2984.   # updates the background
  2985.   def update
  2986.     return if self.disposed?
  2987.     for i in 0...3
  2988.       @sprites["w#{i}"].update
  2989.     end
  2990.     return if !@reveal
  2991.     for i in 0...18
  2992.       if @sprites["b#{i}"].y <= -32
  2993.         r = rand(12)
  2994.         @sprites["b#{i}"].bitmap = Bitmap.new(16 + r*4, 16 + r*4)
  2995.         @sprites["b#{i}"].bitmap.bmp_circle
  2996.         @sprites["b#{i}"].center!
  2997.         @sprites["b#{i}"].y = @viewport.height + 32
  2998.         @sprites["b#{i}"].x = 32 + rand(@viewport.width - 64)
  2999.         @sprites["b#{i}"].ex = @sprites["b#{i}"].x
  3000.         @sprites["b#{i}"].toggle = rand(2) == 0 ? 1 : -1
  3001.         @sprites["b#{i}"].speed = 1 + 10/((r + 1)*0.4)
  3002.         @sprites["b#{i}"].opacity = 32 + rand(65)
  3003.       end
  3004.       min = @viewport.height/4
  3005.       max = @viewport.height/2
  3006.       scale = (2*Math::PI)/((@sprites["b#{i}"].bitmap.width/64.0)*(max - min) + min)
  3007.       @sprites["b#{i}"].y -= @sprites["b#{i}"].speed
  3008.       @sprites["b#{i}"].x = @sprites["b#{i}"].ex + @sprites["b#{i}"].bitmap.width*0.25*Math.sin(@sprites["b#{i}"].y*scale)*@sprites["b#{i}"].toggle
  3009.     end
  3010.   end
  3011.   # used to fade in from black
  3012.   def reduceAlpha(factor)
  3013.     for i in 0...3
  3014.       @sprites["w#{i}"].color.alpha -= factor
  3015.     end
  3016.   end
  3017.   # disposes of everything
  3018.   def dispose
  3019.     @disposed = true
  3020.     pbDisposeSpriteHash(@sprites)
  3021.   end
  3022.   # checks if disposed
  3023.   def disposed?; return @disposed; end
  3024.   # used to show other elements
  3025.   def show
  3026.     @sprites["bg"].color.alpha = 0
  3027.     @reveal = true
  3028.   end
  3029. end
  3030. #===============================================================================
  3031. #  New class used to render the Sun & Moon styled VS background
  3032. #===============================================================================
  3033. class SunMoonFlamesBackground
  3034.   attr_reader :speed
  3035.   # main method to create the background
  3036.   def initialize(viewport, trainerid, evilteam = false, teamskull = false)
  3037.     @viewport = viewport
  3038.     @trainerid = trainerid
  3039.     @evilteam = evilteam
  3040.     @teamskull = teamskull
  3041.     @disposed = false
  3042.     @reveal = false
  3043.     @speed = 1
  3044.     @frame = 0
  3045.     @fpIndex = 0
  3046.     @sprites = {}
  3047.     # reverts to default
  3048.     bg = ["Graphics/Transitions/Flames/fire",
  3049.           "Graphics/Transitions/Flames/streak",
  3050.           "Graphics/Transitions/Flames/background",
  3051.           "Graphics/Transitions/Flames/overlay"
  3052.          ]
  3053.     # gets specific graphics
  3054.     bg = checkForTrainerVariant(bg, trainerid, @evilteam, @teamskull)
  3055.     # create background layer
  3056.     @sprites["bg"] = Sprite.new(@viewport)
  3057.     @sprites["bg"].bitmap = pbBitmap(bg[2])
  3058.     @sprites["bg"].color = Color.new(0, 0, 0, 160)
  3059.     @sprites["bg"].z = 200
  3060.     @sprites["bg"].center!(true)
  3061.     @sprites["ol"] = Sprite.new(@viewport)
  3062.     @sprites["ol"].bitmap = pbBitmap(bg[3])
  3063.     @sprites["ol"].color = Color.black
  3064.     @sprites["ol"].z = 220
  3065.     @sprites["ol"].center!(true)
  3066.     # create streak
  3067.     @sprites["st"] = Sprite.new(@viewport)
  3068.     @sprites["st"].bitmap = pbBitmap(bg[1])
  3069.     @sprites["st"].z = 220
  3070.     @sprites["st"].visible = false
  3071.     @sprites["st"].center!(true)
  3072.     # create fire particles
  3073.     @amt = @viewport.rect.width/32 + 1
  3074.     for k in 0...@amt*2
  3075.       i = (@amt*2 - 1) - k
  3076.       @sprites["f#{i}"] = Sprite.new(@viewport)
  3077.       @sprites["f#{i}"].bitmap = pbBitmap(bg[0])
  3078.       @sprites["f#{i}"].src_rect.width /= 4
  3079.       @sprites["f#{i}"].src_rect.x = rand(4)*@sprites["f#{i}"].src_rect.width
  3080.       @sprites["f#{i}"].ox = @sprites["f#{i}"].src_rect.width/2
  3081.       @sprites["f#{i}"].x = 32*(i%@amt)
  3082.       @sprites["f#{i}"].y = @viewport.height - 108
  3083.       @sprites["f#{i}"].param = rand(@amt*2)
  3084.       @sprites["f#{i}"].color = Color.black
  3085.       @sprites["f#{i}"].speed = 8
  3086.       @sprites["f#{i}"].toggle = 2
  3087.       if i >= @amt
  3088.         @sprites["f#{i}"].x += 16
  3089.         @sprites["f#{i}"].opacity = 164 - rand(33)
  3090.         @sprites["f#{i}"].z = 210
  3091.       else
  3092.         @sprites["f#{i}"].src_rect.height -= 8
  3093.         @sprites["f#{i}"].z = 210 - rand(2)
  3094.       end
  3095.       @sprites["f#{i}"].oy = @sprites["f#{i}"].src_rect.height
  3096.       @sprites["f#{i}"].zoom_y = 0.6 + rand(41)/100.0
  3097.     end
  3098.   end
  3099.   # sets the speed of the sprites
  3100.   def speed=(val); end
  3101.   # updates the background
  3102.   def update
  3103.     return if self.disposed?
  3104.     @sprites["st"].x += 32
  3105.     @sprites["st"].x = -@viewport.width if @sprites["st"].x > @viewport.width*8
  3106.     # updates fire particles
  3107.     @frame += 1
  3108.     for i in 0...@amt*2
  3109.       next if @frame < 3
  3110.       @sprites["f#{i}"].src_rect.x += @sprites["f#{i}"].src_rect.width
  3111.       @sprites["f#{i}"].src_rect.x = 0 if @sprites["f#{i}"].src_rect.x >= @sprites["f#{i}"].bitmap.width
  3112.       next if @sprites["f#{i}"].param > @fpIndex/2
  3113.       @sprites["f#{i}"].color.alpha += @sprites["f#{i}"].toggle*@sprites["f#{i}"].speed if @reveal
  3114.       @sprites["f#{i}"].zoom_y += @sprites["f#{i}"].toggle*0.02
  3115.       @sprites["f#{i}"].toggle *= -1 if @sprites["f#{i}"].color.alpha <= 0 || @sprites["f#{i}"].color.alpha >= 128
  3116.     end
  3117.     @frame = 0 if @frame > 2
  3118.     @fpIndex += 1 if @fpIndex < 512
  3119.     return if !@reveal
  3120.  
  3121.   end
  3122.   # used to fade in from black
  3123.   def reduceAlpha(factor)
  3124.     @sprites["bg"].color.alpha -= factor
  3125.     for i in 0...@amt*2
  3126.       @sprites["f#{i}"].color.alpha -= factor
  3127.     end
  3128.   end
  3129.   # disposes of everything
  3130.   def dispose
  3131.     @disposed = true
  3132.     pbDisposeSpriteHash(@sprites)
  3133.   end
  3134.   # checks if disposed
  3135.   def disposed?; return @disposed; end
  3136.   # used to show other elements
  3137.   def show
  3138.     @sprites["bg"].color.alpha = 0
  3139.     @sprites["ol"].color.alpha = 0
  3140.     @sprites["st"].visible = true
  3141.     for i in 0...@amt*2
  3142.       c = [
  3143.         Color.new(234,202,91,0),
  3144.         Color.new(236,177,89,0),
  3145.         Color.new(200,56,52,0)
  3146.       ]
  3147.       @sprites["f#{i}"].color = c[rand(c.length)]
  3148.     end
  3149.     @reveal = true
  3150.   end
  3151. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement