• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Catching Tutorial

1,224
Posts
10
Years
  • Working on recreating a catching tutorial, by manually creating most of the battle scene. Mildly rudimentary, but it mostly seems to work. Only problem is, the ball thrown to catch the pokemon does not show up, and I can't figure out why. I recreated the pokeballThrow method in this class to suit my needs, and that's where it should be appearing.

    Have a look and let me know if you see what's wrong.

    Code:
    class LearnToScene
      BLANK      = 0
      MESSAGEBOX = 1
      COMMANDBOX = 2
      FIGHTBOX   = 3
      
      def update
        pbUpdateSpriteHash(@sprites)
      end
      
      def pbMiddleScene
        loop do
          Graphics.update
          Input.update
            #if @sceneover==true
            if Input.trigger?(Input::C)
              break
            end
         end
      end
      
      def pbEndScene ##This ends everything
        $game_map.autoplay
        pbFadeOutAndHide(@sprites) { update }
        pbDisposeSpriteHash(@sprites)
        @viewport.dispose
        $scene = Scene_Map.new 
      end
      
     
    def initialize
      @sprites={}
        @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
        @viewport.z=50
        @viewport2=Viewport.new(0,0,Graphics.width,Graphics.height)
        @viewport2.z=9999
        @sprites["background"]=IconSprite.new(0,0,@viewport2)
        @sprites["background"].setBitmap("Graphics/Battlebacks/battlebgField")
        @sprites["commandwindow"]=CommandMenuDisplay.new(@viewport2)
        @sprites["fightwindow"]=FightMenuDisplay.new(nil,@viewport2)
        @sprites["fightwindow"].visible=false
        @sprites["playerbase"]=IconSprite.new(-100,Graphics.height-160,@viewport2)
        @sprites["playerbase"].setBitmap("Graphics/Battlebacks/playerbaseField")
        @sprites["opponentbase"]=IconSprite.new(300,65,@viewport2)
        @sprites["opponentbase"].setBitmap("Graphics/Battlebacks/enemybaseField")
        @sprites["player"]=AnimatedSprite.create("Graphics/Characters/trback000",5,128,@viewport2)
        @sprites["player"].x=50
        @sprites["player"].y=Graphics.height-224
        @sprites["player"].visible=true
        @opponentpoke=PokeBattle_Pokemon.new(PBSpecies::WEEDLE,5,$Trainer)
        @playerpoke=PokeBattle_Pokemon.new(PBSpecies::PIDGEY,10,$Trainer)
        @sprites["opponent"]=PokemonSprite.new(@viewport2)
        @sprites["opponent"].setPokemonBitmap(@opponentpoke)
        @sprites["opponent"].mirror=false
        @sprites["opponent"].color=Color.new(0,0,0,0)
        @sprites["shadow1"]=IconSprite.new(Graphics.width - 120,(Graphics.height * 3/4)-158,@viewport2)
        @sprites["shadow1"].setBitmap("Graphics/Pictures/battleShadow")
        @sprites["shadow1"].z-=2
        pbPositionPokemonSprite(@sprites["opponent"],Graphics.width - 142,(Graphics.height * 3/4) - 250)
        Kernel.pbMessage("A wild Weedle appeared!")
        Kernel.pbMessage("Go Pidgey!")
        @sprites["playerpoke"]=PokemonSprite.new(@viewport2)
        @sprites["playerpoke"].setPokemonBitmap(@playerpoke,true)
        @sprites["playerpoke"].mirror=false
        @sprites["playerpoke"].color=Color.new(0,0,0,0)
        @sprites["playerpoke"].x=50
        @sprites["playerpoke"].y=Graphics.height-256
        @sprites["playerpoke"].visible=false
        @sprites["ball"]=IconSprite.new(50,Graphics.height-160,@viewport2)
        @sprites["ball"].setBitmap("Graphics/Pictures/ball00")
        @sprites["ball"].visible=false
        for i in 1..20
           @sprites["player"].x-=4
           sleep(1/5)
           @sprites["player"].frame=(i/4).floor
           @sprites["ball"].visible=true if i==5
           if i%2==0
             if i<11
               @sprites["ball"].y-=20
             else
               @sprites["ball"].y+=20
             end
           end
           @sprites["ball"].x+=5
           Graphics.update
        end
        @sprites["ball"].visible=false
        @sprites["playerpoke"].visible=true
        Graphics.update
        textpos=[
         ["What will",20,306,0,Color.new(64,64,64),Color.new(176,176,176)],
         [(_INTL("Pidgey do?")),20,336,0,Color.new(64,64,64),Color.new(176,176,176)],
        ]
        @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport2) 
        pbSetSystemFont(@sprites["overlay"].bitmap)
        pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
        Graphics.update
        sleep(3/2)
        pbSEPlay("Choose")
        @sprites["commandwindow"].index=2
        @sprites["commandwindow"].refresh
        Graphics.update
        sleep(3/2)
        pbSEPlay("Choose")
        @sprites["commandwindow"].index=0
        @sprites["commandwindow"].refresh
        Graphics.update
        sleep(3/2)
        pbSEPlay("Choose")
        @sprites["commandwindow"].index=1
        @sprites["commandwindow"].refresh
        Graphics.update
        sleep(3/2)
        pbSEPlay("Select")
        @sprites["background2"]=IconSprite.new(0,0,@viewport2)
        @sprites["background2select"]=IconSprite.new(184,5,@viewport2)
        @sprites["background2pocket"]=IconSprite.new(30,20,@viewport2)
        @sprites["background2icon"]=IconSprite.new(24,Graphics.height-72,@viewport2)
        @sprites["background2select"].setBitmap("Graphics/Pictures/bagSel")
        @sprites["background2pocket"].setBitmap("Graphics/Pictures/bag1")
        @sprites["background2icon"].setBitmap("Graphics/Icons/itemBack")
        @sprites["background2"].setBitmap("Graphics/Pictures/bagbg1")
        @sprites["overlay2"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport2) 
        pbSetSystemFont(@sprites["overlay2"].bitmap)
        @sprites["overlay2"].bitmap.font.size=35
        textpos2=[
        ["CLOSE BAG",200,10,0,Color.new(88,88,80),Color.new(168,184,184)]
        ]
        pbDrawTextPositions(@sprites["overlay2"].bitmap,textpos2)
        Graphics.update
        sleep(3/2)
        pbSEPlay("Choose")
        @sprites["background2"].setBitmap("Graphics/Pictures/bagbg2")
        Graphics.update
        sleep(3/2)
        pbSEPlay("Choose")
        @sprites["overlay2"].bitmap.clear
        textpos2=[
        ["Pokeball",200,10,0,Color.new(88,88,80),Color.new(168,184,184)],
        ["CLOSE BAG",200,45,0,Color.new(88,88,80),Color.new(168,184,184)]
        ]
        pbDrawTextPositions(@sprites["overlay2"].bitmap,textpos2)
        @sprites["background2"].setBitmap("Graphics/Pictures/bagbg3")
        @sprites["background2icon"].setBitmap("Graphics/Icons/item267")
        Graphics.update
        sleep(3/2)
        pbSEPlay("Select")
        pbDisposeSprite(@sprites,"overlay2")
        pbDisposeSprite(@sprites,"background2")
        pbDisposeSprite(@sprites,"background2select")
        pbDisposeSprite(@sprites,"background2pocket")
        pbDisposeSprite(@sprites,"background2icon")
        Graphics.update
        sleep(3/2)
        pbDisposeSprite(@sprites,"overlay")
        @sprites["playerpoke"].visible=false
        @sprites["player"].frame=1
        10.times do
          @sprites["player"].x+=5
          Graphics.update
        end
        #@sprites["ball"].visible=true
        pokeballThrow2(4,@sprites["shadow1"],@sprites["opponent"],self)
        10.times do
          @sprites["player"].x-=5
          Graphics.update
        end
        Kernel.pbMessage("Congratulations!  Weedle was caught!")
        #for i in 1..20
        #   sleep(1/5)
        #   @sprites["player"].frame=(i/4).floor
        #   @sprites["player"].frame=4 if @sprites["player"].frame>4
        #   if i%2==0
        #     if i<11
        #       @sprites["ball"].y-=40
        #     else
        #      @sprites["ball"].y+=15
        #     end
        #   end
        #   @sprites["ball"].x+=13
        #   Graphics.update
        #end
        
        
        
        
      end  
    end
    
    
    class LearnToScreen
      def initialize(scene)
        @scene=scene
      end
    
      def pbStartScene
        #@scene.pbStart
        @scene.pbMiddleScene
        @scene.pbEndScene
      end
    end
    
    
    def pbLearnToCatch
        scene=LearnToScene.new
        screen=LearnToScreen.new(scene)
        return screen.pbStartScene
    end
      
      
    def pokeballThrow2(shakes,targetshadow,targetpoke,scene,burst=-1)
      ball="Graphics/Pictures/ball00"
      ballopen="Graphics/Pictures/ball00_open"
      oldvisible=targetshadow.visible
      targetshadow.visible=false
      # sprites
      spritePoke=targetpoke
      spriteBall=IconSprite.new(0,0,@viewport)
      #spriteBall.setBitmap(ball)
      # pictures
      pictureBall=PictureEx.new(spriteBall.z+1)
      picturePoke=PictureEx.new(spritePoke.z)
      dims=[spritePoke.x,spritePoke.y]
      center=getSpriteCenter(targetpoke)
      ballendy=PokeBattle_SceneConstants::FOEBATTLER_Y-4
      # starting positions
      pictureBall.moveVisible(1,true)
      pictureBall.moveName(1,ball)
      pictureBall.moveOrigin(1,PictureOrigin::Center)
      pictureBall.moveXY(0,1,10,180)
      picturePoke.moveVisible(1,true)
      picturePoke.moveOrigin(1,PictureOrigin::Center)
      picturePoke.moveXY(0,1,center[0],center[1])
      # directives
      picturePoke.moveSE(1,"Audio/SE/throw")
      pictureBall.moveCurve(30,1,150,70,30+Graphics.width/2,10,center[0],center[1])
      pictureBall.moveAngle(30,1,-1080)
      pictureBall.moveAngle(0,pictureBall.totalDuration,0)
      delay=pictureBall.totalDuration+4
      picturePoke.moveTone(10,delay,Tone.new(0,-224,-224,0))
      delay=picturePoke.totalDuration
      picturePoke.moveSE(delay,"Audio/SE/recall")
      pictureBall.moveName(delay+4,ballopen)
      loop do
        pictureBall.update
        picturePoke.update
        setPictureIconSprite(spriteBall,pictureBall)
        setPictureSprite(spritePoke,picturePoke)
        Graphics.update
        Input.update
        break if !pictureBall.running? && !picturePoke.running?
      end
      # Burst animation here
      if burst>=0
        scene.pbCommonAnimation("BallBurst#{burst}",nil,nil)
      end
      pictureBall.clearProcesses
      picturePoke.clearProcesses
      delay=0
      picturePoke.moveZoom(15,delay,0)
      picturePoke.moveXY(15,delay,center[0],center[1])
      picturePoke.moveSE(delay+10,"Audio/SE/jumptoball")
      picturePoke.moveVisible(delay+15,false)
      pictureBall.moveName(picturePoke.totalDuration+2,ball)
      delay=picturePoke.totalDuration+6
      pictureBall.moveXY(15,delay,center[0],ballendy)
      pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop")
      pictureBall.moveXY(10,pictureBall.totalDuration+2,center[0],ballendy-((ballendy-center[1])*2/3))
      pictureBall.moveXY(10,pictureBall.totalDuration+2,center[0],ballendy)
      pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop")
      pictureBall.moveXY(6,pictureBall.totalDuration+2,center[0],ballendy-((ballendy-center[1])*1/3))
      pictureBall.moveXY(6,pictureBall.totalDuration+2,center[0],ballendy)
      pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop")
      pictureBall.moveXY(3,pictureBall.totalDuration+2,center[0],ballendy-((ballendy-center[1])*1/6))
      pictureBall.moveXY(3,pictureBall.totalDuration+2,center[0],ballendy)
      pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop")
      picturePoke.moveXY(0,pictureBall.totalDuration,center[0],ballendy)
      delay=pictureBall.totalDuration+18# if shakes==0
      [shakes,3].min.times do
        pictureBall.moveSE(delay,"Audio/SE/ballshake")
        pictureBall.moveXY(3,delay,center[0]-8,ballendy)
        pictureBall.moveAngle(3,delay,20) # positive means counterclockwise
        delay=pictureBall.totalDuration
        pictureBall.moveXY(6,delay,center[0]+8,ballendy)
        pictureBall.moveAngle(6,delay,-20) # negative means clockwise
        delay=pictureBall.totalDuration
        pictureBall.moveXY(3,delay,center[0],ballendy)
        pictureBall.moveAngle(3,delay,0)
        delay=pictureBall.totalDuration+18
      end
      if shakes<4
        picturePoke.moveSE(delay,"Audio/SE/recall")
        pictureBall.moveName(delay,ballopen)
        pictureBall.moveVisible(delay+10,false)
        picturePoke.moveVisible(delay,true)
        picturePoke.moveZoom(15,delay,100)
        picturePoke.moveXY(15,delay,center[0],center[1])
        picturePoke.moveTone(0,delay,Tone.new(248,248,248,248))
        picturePoke.moveTone(24,delay,Tone.new(0,0,0,0))
        delay=picturePoke.totalDuration
      end
      pictureBall.moveXY(0,delay,center[0],ballendy)
      picturePoke.moveOrigin(picturePoke.totalDuration,PictureOrigin::TopLeft)
      picturePoke.moveXY(0,picturePoke.totalDuration,dims[0],dims[1])
      loop do
        pictureBall.update
        picturePoke.update
        setPictureIconSprite(spriteBall,pictureBall)
        setPictureSprite(spritePoke,picturePoke)
        Graphics.update
        Input.update
        break if !pictureBall.running? && !picturePoke.running?
      end
      if shakes<4
        targetshadow.visible=oldvisible
        spriteBall.dispose
      else
        spriteBall.tone=Tone.new(-64,-64,-64,128)
        pbSEPlay("balldrop",100,150)
        @sprites["capture"]=spriteBall
        spritePoke.visible=false
      end
    end
     

    venom12

    Pokemon Crystal Rain Relased
    476
    Posts
    17
    Years
    • Age 33
    • Seen Dec 28, 2023
    In def pokeballThrow2 edit the line
    Code:
    spriteBall=IconSprite.new(0,0,@viewport)
    to
    Code:
    spriteBall=IconSprite.new(0,0,@viewport2)
     
    1
    Posts
    4
    Years
    • Age 29
    • Seen Sep 5, 2019
    This post is old, but as a basis this is a great script!
    Is there any possiblity to adapt this to v17 of Essentials? I'm searching for such a tutorial script for my game.
    The script is working without an error, but unfortunately the menu is not shown, the pokemon position is wrong and ball animation is still missing.

    I am not much experienced in ruby scripting, but I will try my best. Is there anyone who is fit in scripting and might help?
     
    Back
    Top