Galv’s Vehicle On Off Locations V.1.5

Demo – Version 1.4 > (demo uses old version)

#------------------------------------------------------------------------------#
#  Galv's Vehicle On Off Locations
#------------------------------------------------------------------------------#
#  For: RPGMAKER VX ACE
#  Version 1.5
#------------------------------------------------------------------------------#
#  2013-01-22 - Version 1.5 - added ability to use terrain tags as well
#  2013-01-17 - Version 1.4 - added 'cannot board' message and optimised code
#  2012-10-24 - Version 1.3 - updated alias names for compatability
#  2012-10-18 - Version 1.2 - Added ability to specify different regions for
#                           - boat and possible to use multiple regions for each
#  2012-09-26 - Version 1.1 - Changed name from 'Galv's Port Docking'
#                           - Added landing zone region for airship
#  2012-09-26 - Version 1.0 - release
#------------------------------------------------------------------------------#
#  Specify regions that you can disembark/embark for boats, ships and airships.
#  Player can only get on or off those vehicles from the specified regions.
#
#  Instructions:
#  Specify the region numbers you want to use for each vehicle in the settings.
#  Paint the tiles you want each vehicle to be able to land/embark at with the
#  specified region numbers.
#
#------------------------------------------------------------------------------#

($imported ||= {})["Galv_Vehicle_On_Off"] = true
module Vehicle_On_Off

#------------------------------------------------------------------------------#
#  SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#

  BOAT_REGIONS = [0,1]    # Ships can only land at these region and
                          # the player can only board from these region.
  BOAT_TERRAIN = []       # Can use terrain tags as well for this.
  
  
  SHIP_REGIONS = [1]      # Ships can only land at these region and
                          # the player can only board from these region.
  SHIP_TERRAIN = []       # Can use terrain tags as well for this.
  
  
  AIRSHIP_REGIONS = [2]   # Airships can only land on an airship region
  AIRSHIP_TERRAIN = []    # Can use terrain tags as well for this.

  # NOTES:
  
  # When no region tile is painted, it is 0
  # Terrain tags can be set in your database tilesets and are 0 by default

  # You can add as many regions as needed for these. For example:
  # SHIP_REGIONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
  # SHIP_TERRAIN = [5,6,3]

  
  B_MSG = "I can't board from here!"  # Message displayed when can't board.
                                      # Make this B_MSG = "" to not use this.

#------------------------------------------------------------------------------#
#  END SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#

end

class Game_Vehicle < Game_Character
  alias galv_vonoff_land_ok? land_ok?
  def land_ok?(x, y, d)
    return false unless $game_map.vland?(x,y,d,@type)
    galv_vonoff_land_ok?(x, y, d)
  end
end # Game_Vehicle < Game_Character

class Game_Player < Game_Character
  alias galv_vonoff_get_on_vehicle get_on_vehicle
  def get_on_vehicle
    front_x = $game_map.round_x_with_direction(@x, @direction)
    front_y = $game_map.round_y_with_direction(@y, @direction)
    region = $game_map.region_id($game_player.x, $game_player.y)
    terrain = $game_map.terrain_tag($game_player.x, $game_player.y)
    board = false
    if $game_map.boat.pos?(front_x, front_y)
      board = true if Vehicle_On_Off::BOAT_REGIONS.include?(region) ||
      Vehicle_On_Off::BOAT_TERRAIN.include?(terrain)
    elsif $game_map.ship.pos?(front_x, front_y)
      board = true if Vehicle_On_Off::SHIP_REGIONS.include?(region) ||
      Vehicle_On_Off::SHIP_TERRAIN.include?(terrain)
    elsif $game_map.airship.pos?(@x, @y)
      board = true
    else
      board = nil
    end
    return vehicle_msg if board == false
    galv_vonoff_get_on_vehicle
  end
  
  def vehicle_msg
    $game_message.add(Vehicle_On_Off::B_MSG) if Vehicle_On_Off::B_MSG != ""
  end
end # Game_Player < Game_Character

class Game_Map
  def vland?(x,y,d,type)
    check_dir(x, y, d)
    case type
    when :boat
      regions = Vehicle_On_Off::BOAT_REGIONS
      terrain = Vehicle_On_Off::BOAT_TERRAIN
    when :ship
      regions = Vehicle_On_Off::SHIP_REGIONS
      terrain = Vehicle_On_Off::SHIP_TERRAIN
    when :airship
      regions = Vehicle_On_Off::AIRSHIP_REGIONS
      terrain = Vehicle_On_Off::AIRSHIP_TERRAIN
      @front_x = $game_player.x; @front_y = $game_player.y
    end
    regions.include?(region_id(@front_x, @front_y)) ||
    terrain.include?(terrain_tag(@front_x, @front_y))
  end

  def check_dir(x, y, d)
    @front_x = round_x_with_direction(x, d)
    @front_y = round_y_with_direction(y, d)
  end
end # Game_Map
Advertisements

5 thoughts on “Galv’s Vehicle On Off Locations V.1.5

  1. Warrior of Myth says:

    Very good Galv. It’s excellet for my project!

  2. When I first started my project, I was looking for a script like this, now that I finally found one, I can refine my overworld map! Thanks a lot for this!

  3. dj0zymandias says:

    This is pure perfection. No more landing the airship where ever.

  4. Amyrakunejo says:

    Now this is something every RPG Game should have, no matter the engine used to create it.

    I personally like the Terrain Tag addition; this allows me to use the Region Tags for monster encounters instead.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s