• 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.

Rock Climb working wonky

220
Posts
13
Years
    • Seen Nov 29, 2021
    So I've been playing around getting a version of Rock Climb to work, and I've come up with the following:
    Code:
    def Kernel.pbNERockwall(event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      event.move_right
      event.move_speed = 2
      loop do
        event.move_right
        event.move_up
        terrain = pbGetTerrainTag(event)
        break if !PBTerrain.isRockwall?(terrain)
      end
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
    
    def Kernel.pbSERockwall(event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      event.move_right
      event.move_speed = 2
      loop do
        event.move_down
        event.move_right
        terrain = pbGetTerrainTag(event)
        break if !PBTerrain.isRockwall?(terrain)
      end
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
    
    def Kernel.pbSWRockwall(event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      event.move_left
      event.move_speed = 2
      loop do
        event.move_down
        event.move_left
        terrain = pbGetTerrainTag(event)
        break if !PBTerrain.isRockwall?(terrain)
      end
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
    
    def Kernel.pbNWRockwall(event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      event.move_left
      event.move_speed = 2
      loop do
        event.move_up
        event.move_left
        terrain = pbGetTerrainTag(event)
        break if !PBTerrain.isRockwall?(terrain)
      end
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end

    The problem is, the first movement before the loop just... doesn't occur. Thus the character ends up off by a tile.

    Update: Swapping the first one to "Kernel.pbJumpToward" works, now I just need to figure out how to get it move off without moving up/down too.

    Update 2: Changed the code to include a length variable, but there's now a new issue: Going up and left is fine, works perfectly. Going down and right, they go down one step, then jumps to the final destination.

    Code:
    def Kernel.pbNERockwall(i,event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      Kernel.pbJumpToward
      event.move_speed = 2
      loop do
        event.move_right
        event.move_up
        i=i-1
        break if i<2
      end
      Kernel.pbJumpToward
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
    
    def Kernel.pbSERockwall(i,event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      Kernel.pbJumpToward
      event.move_speed = 2
      loop do
        event.move_down
        event.move_right
        i=i-1
        break if i<2
      end
      Kernel.pbJumpToward
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
    
    def Kernel.pbSWRockwall(i,event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      Kernel.pbJumpToward
      event.move_speed = 2
      loop do
        event.move_down
        event.move_left
        i=i-1
        break if i<2
      end
      Kernel.pbJumpToward
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
    
    def Kernel.pbNWRockwall(i,event=nil)
      event = $game_player if !event
      return if !event
      oldthrough   = event.through
      oldmovespeed = event.move_speed
      terrain = Kernel.pbFacingTerrainTag
      return if !PBTerrain.isRockwall?(terrain)
      event.through = true
      Kernel.pbJumpToward
      event.move_speed = 2
      loop do
        event.move_up
        event.move_left
        i=i-1
        break if i<2
      end
      Kernel.pbJumpToward
      event.through    = oldthrough
      event.move_speed = oldmovespeed
    end
     
    Last edited:
    Back
    Top