#===============================================================================# 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