Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

> Super Simple Vehicle Script
amaranth
post Dec 21 2008, 07:11 PM
Post #1


Level 6
Group Icon

Group: Member
Posts: 78
Type: Developer
RM Skill: Masterful




I'm moving all of my scripts from rmxp.org to this site. I like it here better.

Introduction
This is a vehicle system that is similar to the Final Fantasy system. In this system, you get vehicles (a canoe, ship, and dragon), the world tileset for Aveyond 2 (free to use in freeware games), and some autotiles.

Demo
You can download the demo here: DOWNLOAD VEHICLE SYSTEM DEMO HERE

Screenshot


Script
You really should download the demo, because this system uses a mixture of script, map events, common events, variables, and switches. However, if you think you can figure it out on your own, here is the vehicle system script:
CODE
class Game_Character
  def passable?(x, y, d)
    
    # Get new coordinates
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    
    # If coordinates are outside of map
    unless $game_map.valid?(new_x, new_y)
      return false
    end
    
    # If through is ON
    if @through
      return true
    end
        
    # If unable to leave first move tile in designated direction
    unless $game_map.passable?(x, y, d, self)
      return false
    end
    
    # If unable to enter move tile in designated direction
    unless $game_map.passable?(new_x, new_y, 10 - d)
      return false
    end
        
    #check terrain for vehicle
    check_terrain(new_x, new_y)    
      
    # Loop all events
    for event in $game_map.events.values
      # If event coordinates are consistent with move destination
      if event.x == new_x and event.y == new_y
        @state = true
        # If through is OFF
        unless event.through
          # If self is event
          if self != $game_player
            return false
          end
          # With self as the player and partner graphic as character
          if event.character_name != ""
            return false
          end
        end
      end
    end
    
    if @state == false
      return false
    end      
    
    # If player coordinates are consistent with move destination
    if $game_player.x == new_x and $game_player.y == new_y
      # If through is OFF
      unless $game_player.through
        # If your own graphic is the character
        if @character_name != ""
          return false
        end
      end
    end
      
    
    return true
    
  end
  
  #--------------------------------------------------------------------------
  # * Check the terrain for the vehicle
  #   @terrain (0=none, 1=river, 2=ocean, 3=air, 4=ground)
  #   @vehicle (0=foot, 1=canoe, 2=boat, 3=dragon)
  #   @state (true=passable tile, false=unpassable tile)
  #--------------------------------------------------------------------------
  def check_terrain(new_x, new_y)  
    @state = false
    @terrain = $game_map.terrain_tag(new_x, new_y)
    @vehicle = $game_variables[1]
    
    @state = true if @vehicle == 0 && @terrain == 4  #foot & ground
    @state = true if @vehicle == 1 && @terrain == 3  #canoe & river
    @state = true if @vehicle == 2 && @terrain == 2  #boat & ocean
    @state = true if @vehicle == 3                   #dragon
    @state = true if @terrain == 0
  end

end

class Game_Player < Game_Character
  
  alias in_vehicle_alias update
  #--------------------------------------------------------------------------
  # * Memorize actor graphic
  #--------------------------------------------------------------------------      
  def actor_memorize
    @actor_name = $game_actors[1].character_name
    @actor_hue = $game_actors[1].character_hue
    @battler_name = $game_actors[1].battler_name
    @battler_hue = $game_actors[1].battler_hue
    return true
  end

  #--------------------------------------------------------------------------
  # * Restore actor graphic
  #--------------------------------------------------------------------------      
  def actor_restore
    actor = $game_actors[1]
    actor.set_graphic(@actor_name.to_s, @actor_hue, @battler_name.to_s, @battler_hue)
    $game_player.refresh
    return true
  end    
  
  #--------------------------------------------------------------------------
  # * Enter a vehicle
  #--------------------------------------------------------------------------        
  def enter_vehicle(type)
    
    $game_system.menu_disabled = true
    $game_system.save_disabled = true    
    
    if type != "dragon"
      @through = true
      move_forward
      @through = false    
    end
    
    actor_memorize
    actor = $game_actors[1]    
    actor.set_graphic(type, @actor_hue, @battler_name.to_s, @battler_hue)
    
    $game_switches[1] = false    #Canoe Off    
    $game_switches[2] = false    #Boat Off    
    $game_switches[3] = false    #Dragon Off        
    
    if type == "canoe"
      $game_variables[1] = 1       #set terrian
      $game_switches[1] = true    #Canoe On
      Audio.bgm_play("Audio/BGM/047-Positive05", 100, 100) #play canoe music
  
    elsif type == "boat"
      $game_variables[1] = 2       #set terrian
      $game_switches[2] = true    #Boat On      
      Audio.bgm_play("Audio/BGM/046-Positive04", 100, 100) #play ship music
      
    elsif type == "dragon"
      $game_variables[1] = 3       #set terrian
      $game_switches[3] = true    #Dragon On  
      Audio.bgm_play("Audio/BGM/045-Positive03", 100, 100) #play dragon music
      
    end
    
    $game_player.refresh
    $game_map.refresh
    
    return true
  end

  #--------------------------------------------------------------------------
  # * Enter a vehicle
  #--------------------------------------------------------------------------        
  def exit_vehicle

    $game_system.menu_disabled = false    
    $game_system.save_disabled = false
    
    if @terrain == 4
            
      if $game_switches[1] == true      #getting off canoe
        canoe = $game_map.events[1]     #get canoe event
        canoe.moveto(x, y)              #move to player's x, y coords
        $game_switches[1] = false       #Canoe Off  
        $game_variables[2] = x          #set canoe x coord
        $game_variables[3] = y          #set canoe y coord
        @through = true
        move_forward
        @through = false          
        
      elsif $game_switches[2] == true   #getting off boat
        boat = $game_map.events[2]      #get boat event
        boat.moveto(x, y)               #move to player's x, y coords        
        $game_switches[2] = false       #Boat Off    
        $game_variables[4] = x          #set boat x coord
        $game_variables[5] = y          #set boate y coord  
        @through = true
        move_forward
        @through = false                  
        
      elsif $game_switches[3] == true   #getting off dragon
        dragon = $game_map.events[3]    #get dragon event
        dragon.moveto(x, y)             #move to player's x, y coords        
        $game_switches[3] = false       #Dragon Off    
        $game_variables[6] = x          #set dragon x coord
        $game_variables[7] = y          #set dragon y coord        
      end
      
      # get off vehicle
      actor_restore
    
      # reset terrain
      $game_variables[1] = 0          
    
      # play walking music
      Audio.bgm_play("Audio/BGM/044-Positive02", 100, 100) #play music
      
      $game_player.refresh  
      $game_map.refresh    
    
    end
  
  end
  
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    in_vehicle_alias
    # if not on ground terrain, check for boat exit
    if $game_variables[1] != 0
      if Input.trigger?(Input::C)
        exit_vehicle
      end  
    end
  end

end


Add An Additional Vehicle
1. Create a switch for your new vehicle. Call it "using vehicle" (replace vehicle with the name of your vehicle).

2. Create two variables for your vehicle. Call them "vehicle x" and "vehicle y" (replace vehicle with the name of your vehicle).

3. Add an event on your map for your new vehicle. Set it up to look like the other vehicle events. Modify the switches on the event so that they are for your vehicle, not the dragon, canoe, or boat vehicle. Modify the script call in the event so that it is for your vehicle. For example:
CODE
$game_player.enter_vehicle("hovercraft")


4. Put your vehicle sprite in your project's "characters" folder. Make sure that the name of the vehicle is exactly what you specified in step 3. For example, hovercraft.png

5. Get a peice of paper and write down the slot numbers for your switch, your variables, and the event you created for your vehicle. You will need to reference them later in your code.

6. Open the script editor and go to the Vehicle Script section.

7. In def check_terrain, add a new if statement for your vehicle. For example:
CODE
    @state = true if @vehicle == 4 && @terrain == 5  #hovercraft & swamp


8. In def enter_vehicle, add the switch you created for your vehicle to the list. For example:
CODE
    $game_switches[283] = false    #turn off the "using hovercraft" switch


9. In def enter_vehicle, add a new if statement for your vehicle. For example:
CODE
    elsif type == "hovercraft"
      $game_variables[1] = 5       #set terrian
      $game_switches[4] = true    #Hovercraft On  
      Audio.bgm_play("Audio/BGM/045-Positive03", 100, 100)


10. In def exit_vehicle, add a new if statement for your vehicle. For example:
CODE
      elsif $game_switches[4] == true   #getting off hovercraft
        dragon = $game_map.events[4]  #get hovercraft event
        dragon.moveto(x, y)                 #move to player's x, y coords        
        $game_switches[4] = false        #turn "using hovercraft" off    
        $game_variables[8] = x             #set hovercraft x coord
        $game_variables[9] = y             #set hovercraft y coord


Credits
SephirothSpawn: I made this script after studying SephirothSpawn's (mr. talented!) vehicle script.
DerVVulfman: Enhancing the system!

Bugs
If you find a bug, let me know! I'm crazy busy right now, but I will try to fix any problems. Or, if an advanced scripter wants to take over this project, feel free to do so (again, i'm crazy busy with work). There are some gotchas with this system:
1. Don't use terrain flags on any map but your world map. (if you do, put an if statement in the code so that the vehicle system only works with your world map.
2. If you use a tileset background for an event on your world map, your vehicle will go over it. Use an empty character sprite if you run into problems.

This post has been edited by amaranth: Dec 21 2008, 07:12 PM


__________________________
Go to the top of the page
 
+Quote Post
   

Posts in this topic
- amaranth   Super Simple Vehicle Script   Dec 21 2008, 07:11 PM
- - Blizzard   That looks nice. It seems to me that it's bett...   Dec 22 2008, 03:20 AM
- - Akumasenshi   Hmm, now if I only I had a good Futuristic Motorcy...   Jan 26 2009, 08:08 AM
- - inRedGames   I added a new vehicle but when I get in it and mov...   Jan 29 2009, 10:58 PM
- - whoooopdeeeedo   I am having the same situation. When I have the ch...   Feb 7 2009, 05:43 PM
- - Hadeki   Um... I really like this script. But where did you...   Apr 6 2009, 11:04 AM
- - Neyon   Can I post this script in other blog ?   Jan 26 2010, 07:44 AM
- - Neyon   WOW This script is awesome, I was looking for it   Jan 26 2010, 07:52 AM
- - CJC   This script works well, except it changes the BGM ...   Feb 12 2010, 08:08 AM
- - Night5h4d3   I cant say this will work (but I hope it will), be...   Feb 12 2010, 10:13 AM
- - CJC   After glancing at that I figure it will probably w...   Feb 13 2010, 02:19 AM
- - LegacyX   There is a script that allows you to move events f...   Feb 13 2010, 03:09 AM
- - CJC   Thanks, man. It's much appreciated.   Feb 17 2010, 10:48 AM
- - Gatos   I was wondering if its possible to use this script...   Mar 1 2010, 08:27 AM
- - jomarcenter   i could use your world map so i can create game ea...   Mar 31 2010, 05:02 AM
- - karldaylo   i have this error.. help please   May 6 2011, 05:57 AM
- - Night_Runner   So you pasted the script in the right place? In y...   May 6 2011, 11:35 PM
|- - karldaylo   QUOTE (Night_Runner @ May 6 2011, 11:35 P...   May 8 2011, 05:25 AM
- - Haku   Can someone put the demo please? I can not run the...   May 12 2011, 06:46 AM
- - Haku   UP please ^^   May 16 2011, 05:51 AM
- - brewmeister   @Haku, what are you asking? The Demo link in the ...   May 16 2011, 09:37 AM
- - Haku   My problem is that every time you change the map a...   May 16 2011, 03:45 PM
- - brewmeister   Ok, I think I understand. She left out a step, an...   May 17 2011, 09:43 AM
|- - Haku   QUOTE (brewmeister @ May 17 2011, 10:43 A...   May 17 2011, 09:47 AM
- - brewmeister   QUOTE I do not think you understand very well the ...   May 17 2011, 03:22 PM
- - Haku   Thanks brewmeister!   May 24 2011, 08:32 AM
- - Princessbinas   i thinkboth are broken because the boat goes ove l...   Aug 27 2011, 08:41 AM


Closed TopicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 23rd May 2013 - 01:32 PM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker