Quantcast
Channel: RGSS3 Scripts (RMVX Ace) Latest Topics
Viewing all articles
Browse latest Browse all 416

Stairs Movement

$
0
0

Stairs Movement v1.0
FenixFyreX


Introduction
This script allows movement on a diagonal line to emulate scaling staircases.

Features
- Easily designate a staircase via a region
- Change the speed at which steps are taken to match the pace of moving up/down the staircase
- Alter the y coordinate offset of the character sprite to match the tileset staircase center

Screenshots
Not really applicable as you'd need to see it in action. Just put it in your project, set up a staircase, and try it out.

How to Use
1> Install the script below the default scripts and above Main.
2> Edit the script config to change the staircase region id to your liking.
3> Create a staircase on the map with your tileset.
4> Along the path of the staircase, put that region down.
5> Playtest!

Demo
Mediafire - Stairs Movement

Script
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=## Stairs Movement v 1.1#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=### FenixFyreX## Final Fantasy VI had stairs that the player actually walked up. Their direction# became two way on these stairs, left or right. This script replicates that# feature.##-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#StairsRegionID = 10   # The region ID to use for designating staircasesStairsOffset   = 4    # The height of one tileset staircase plank (about 4px)CharAnimSpeed  = 2    # The speed at which a sprite cycles through frames#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=## End of Config. Do not edit below.#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#class Game_Map  def stairs?(x,y)    region_id(x,y) == StairsRegionID  endendclass Game_CharacterBase    # give other coders access to checking stairs status  attr_reader :on_stairs, :stairs_d  alias on_stairs? on_stairs    # check whether character is on stairs  def check_stairs    @on_stairs = stairs?(0)  end    # Checks if there are any sets of stairs in the given direction  def stairs?(d)    return case d    when 0      $game_map.stairs?(@x,@y)    when 2      $game_map.stairs?(@x-1,@y+1) || $game_map.stairs?(@x+1,@y+1)    when 4      $game_map.stairs?(@x-1,@y-1) || $game_map.stairs?(@x-1,@y+1)    when 6      $game_map.stairs?(@x+1,@y-1) || $game_map.stairs?(@x+1,@y+1)    when 8      $game_map.stairs?(@x-1,@y-1) || $game_map.stairs?(@x+1,@y-1)    else      false    end  end    # Checks passability in the given direction for stairs  def stairs_passable?(x, y, d)    x2 = $game_map.round_x_with_direction(x, d)    y2 = $game_map.round_y_with_direction(y, d)    return false unless $game_map.valid?(x2, y2)    return true if @through || debug_through?    return false unless map_passable?(x, y, d)    return false if collide_with_characters?(x2, y2)    return true  end    # Moves the character in the given direction diagonally up or down stairs  def move_diag_stairs(d, horz, vert, turn_ok)    x,y = @x+horz,@y+vert    horz = [4,6][[-1,1].index(horz)]    vert = [8,2][[-1,1].index(vert)]    @move_succeed = stairs_passable?(x,y,d)    d = [4,6][[[4,8],[6,8],[4,2],[6,2]].index([horz,vert])%2]    set_direction(d) if turn_ok    if @move_succeed      @x = $game_map.round_x_with_direction(@x, horz)      @y = $game_map.round_y_with_direction(@y, vert)      @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))      @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))      increase_steps    end  end    # Returns the stair vector for the given direction  def stair_vector(d)    x,y = 0,0    case d    when 4,6      x = [-1,1][[4,6].index(d)]      y = $game_map.stairs?(@x+x,@y-1) ? -1 : 1    when 2,8      y = [-1,1][[8,2].index(d)]      x = $game_map.stairs?(@x-1,@y+y) ? -1 : 1    end    [x,y]  end    # Checks whether or not the character is not getting on or off stairs  def midstairs?    @on_stairs && stairs?(reverse_dir(@direction))  end    # Alters original move method to put stairs into effect  alias move_straight_no_stairs move_straight  def move_straight(d, turn_ok = true)    if on_stairs? && stairs?(d)      @stairs_d = d      move_diag_stairs(d, *stair_vector(d), turn_ok)    else      d = @direction if @on_stairs && [2,8].include?(d)      move_straight_no_stairs(d, turn_ok)    end    check_stairs  end    alias move_diagonal_for_stairs move_diagonal  def move_diagonal(horz, vert)    if self.is_a?(Game_Follower) && @preceding_character.on_stairs?      check_stairs      if on_stairs? && stairs?(@preceding_character.stairs_d)        d = @preceding_character.stairs_d        move_diag_stairs(d, *stair_vector(d), true)      else        move_diagonal_for_stairs(horz, vert)      end    else      move_diagonal_for_stairs(horz, vert)    end  end    # Shift the y coordinate of the character's sprite to compensate for stairs  alias shift_y_for_stairs shift_y  def shift_y(*a,&bl)    shift_y_for_stairs(*a,&bl) + (midstairs? ? StairsOffset : 0)  end    # Update the sprite more to create pace-per-step effect on stairs  alias update_anime_count_for_stairs update_anime_count  def update_anime_count(*a,&bl)    ac = @anime_count    update_anime_count_for_stairs(*a,&bl)    @anime_count += CharAnimSpeed if midstairs?  endendclass Game_Player < Game_Character  alias move_straight_for_stairs move_straight  def move_straight(*a,&bl)    @followers.move if stairs_passable?(@x,@y,a[0]) if on_stairs?    move_straight_for_stairs(*a,&bl)  endend#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=## End of Script#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#


Credit and Thanks
- FenixFyreX

Changelog & Bug Fixes
Version 1.1
- Fixed bug where followers wouldn't follow the player up or down stairs.

Viewing all articles
Browse latest Browse all 416

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>