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

Region Restricted Movement

$
0
0

Region Restricted Movement
 
image.png
 
Overview
This script lets you create regions on the map that the player/events can't pass through.
You can specific the forbidden regions for each event individually or all of them(globally), as well
as having multiple forbidden regions per event/player if you desire.
 
Install
Paste the script in the Script Editor under Materials and above Main.
 
Usage

Please see the attached demo below if any of this is confusing.
 
First create regions on the map you don't want crossed.
 
Use any of the following script calls within a movement route,
(note these work for both player and event and are for use in a movement routes only):
move_down_region(region)  - where region is the id of the region
 
You can also have up to 6 forbidden regions per script call, and do all direction and random:
move_down_region(region1,region2,....region6)
move_left_region(region1,region2,....region6)
move_right_region(region1,region2,....region6)
move_up_region(region1,region2,....region6)
move_random_region(region1,region2,....region6)
 
You can also use globally forbidden regions on either all events, the player, or both.
You can add as many as you want.
Use any of the following script calls, these will work outside of movement route:
 ---for forbidding the player
player_forbid_region_add(region)
player_forbid_region_remove(region)
player_forbid_region_reset
 
---for forbidding all events
events_forbid_region_add(region)
events_forbid_region_remove(region)
events_forbid_region_reset
---for forbidding all events and player
all_forbid_region_add(region)
all_forbid_region_remove(region)
all_forbid_region_reset
 


 
Script

#===============================================================================# Region Restricted Movement Script By pizzacat# v1# July 19, 2015#===============================================================================## ---Description---## This script lets you create regions that the player/events can't pass/through# Using this script you can set specific regions for specific events or the player# with movement routes as well as on a global level.#-------------------------------------------------------------------------------## ---Installation---# place this script below Materials and above Main in the Script Editor.#-------------------------------------------------------------------------------## ------How to use in movement routes-------# ------------------------------------------# First draw a region(s) on the map you don't want to the event/player to pass,# you can create as many regions as you want, the following supports up to 6 per# event/player.# Second, in a movement route for the Event, choose script and use # any of the follow methods:##   move_down_region(forbidden_region)#   move_left_region(forbidden_region)#   move_right_region(forbidden_region)#   move_up_region(forbidden_region)#   move_random_region(forbidden_region)## forbidden_region is the ID number of the region you don't want the # event/player to pass.# have up to 6 forbidden regions per method above, like:# move_down_region(forbidden_region1,forbidden_region2,......,forbidden_region6)# Event/player will not pass any forbidden regions## ------How to use globally--------# ---------------------------------# You can also simply forbid all movement pass regions# You can have as many globally forbidden regions as you want# use the following script calls(can be done outside a movement route):## ---for forbidding the player#  player_forbid_region_add(region)#  player_forbid_region_remove(region)#  player_forbid_region_reset## ---for forbidding all events#  events_forbid_region_add(region)#  events_forbid_region_remove(region)#  events_forbid_region_reset## ---for forbidding all events and player#  all_forbid_region_add(region)#  all_forbid_region_remove(region)#  all_forbid_region_reset## use methods with "add" to forbid a region, "remove" to re-allow a region,# "reset" to allow all regions again.#-------------------------------------------------------------------------------###code starts belowmodule PIZZA  module REGION    ####below are used to set GLOBAL regions to forbid all from passing     #Can be set while is running with script calls using        # Creates an empty array to hold player forbidden regions.    FP = Array[]    # Creates an empty array to hold events forbidden regions.    FE = Array[]    # Creates an empty array to hold All(Player+Event) forbidden regions.    FA = Array[]    endendclass Game_Interpreter  ##creates methods    def player_forbid_region_add(region)    #forbids the player to move in a region    PIZZA::REGION::FP.push(region)  end    def player_forbid_region_remove(region)    #removes a previously added forbidden regions    PIZZA::REGION::FP.delete(region)  end    def player_forbid_region_reset    #removes all forbidden regions    while (PIZZA::REGION::FP.empty? == false)      PIZZA::REGION::FP.pop()    end  end    def events_forbid_region_add(region)    #forbids the player to move in a region    PIZZA::REGION::FE.push(region)  end    def events_forbid_region_remove(region)    #removes a previously added forbidden regions    PIZZA::REGION::FE.delete(region)  end    def events_forbid_region_reset    #removes all forbidden regions    while (PIZZA::REGION::FE.empty? == false)      PIZZA::REGION::FE.pop()    end  end    def all_forbid_region_add(region)    #forbids the player to move in a region    PIZZA::REGION::FA.push(region)  end    def all_forbid_region_remove(region)    #removes a previously added forbidden regions    PIZZA::REGION::FA.delete(region)  end    def all_forbid_region_reset    #removes all forbidden regions    while (PIZZA::REGION::FA.empty? == false)      PIZZA::REGION::FA.pop()    end  end  endclass Game_Character < Game_CharacterBase  ##----------------------------------------------#  handles global regions##----------------------------------------------  #alias method to passable?  alias pizza_passable passable?  def passable?(x, y, d)    return false if (passable_region?(d) == false)    return pizza_passable(x, y, d)  end    #checks if passable global regions  def passable_region?(d)    if (self.is_a?(Game_Player) == true)      region = region_get(d)      PIZZA::REGION::FP.each_index do |index|          return false if (region == PIZZA::REGION::FP[index])      end      PIZZA::REGION::FA.each_index do |index|          return false if (region == PIZZA::REGION::FA[index])      end      elsif (self.is_a?(Game_Event) == true)      region = region_get(d)      PIZZA::REGION::FE.each_index do |index|          return false if (region == PIZZA::REGION::FE[index])      end      PIZZA::REGION::FA.each_index do |index|          return false if (region == PIZZA::REGION::FA[index])      end     end    return true  end    ##----------------------------------------------  #  Methods for player/indivdual events  #  All methods below are to be used with  #  movement routes  ##----------------------------------------------    def move_random_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #checks if not moving to a forbidden region(s), moves randomly if none    #freg is short for forbidden region, set to -1 to not use extras    d = 2 + rand(4) * 2 #new random direction    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_down_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves down if doesn't pass a region that is forbidden    d = 2    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_left_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves left if doesn't pass a region that is forbidden    d = 4    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_right_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves right if doesn't pass a region that is forbidden    d = 6    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_up_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves up if doesn't pass a region that is forbidden    d = 8    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def region_get(d)    #gets the region at a given facing direction    #d = facing direction to check    case d    when 1; region = $game_map.region_id(@x-1, @y+1)    when 2; region = $game_map.region_id(@x, @y+1)    when 3; region = $game_map.region_id(@x+1, @y+1)    when 4; region = $game_map.region_id(@x-1, @y)    when 5; region = $game_map.region_id(@x, @y)    when 6; region = $game_map.region_id(@x+1, @y)    when 7; region = $game_map.region_id(@x-1, @y-1)    when 8; region = $game_map.region_id(@x, @y-1)    when 9; region = $game_map.region_id(@x+1, @y-1)    end    return region  endend

 

Script Demo

Download here


Viewing all articles
Browse latest Browse all 416

Trending Articles



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