Region Restricted Movement

pizzacat

Warper
Member
Joined
Mar 7, 2014
Messages
2
Reaction score
3
Primarily Uses
Region Restricted Movement
 

 
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
 
Last edited by a moderator:

Miss Nile

Veteran
Veteran
Joined
Jul 6, 2012
Messages
462
Reaction score
407
First Language
Egyptian Arabic
Primarily Uses
RMMV
Hey, this is quite a useful script. ^^ It can be especially helpful for puzzles or certain event movements. Good job and thanks for sharing!
 
Joined
Jul 14, 2016
Messages
1
Reaction score
0
First Language
English
Primarily Uses
Wow, this could be use for parallax overlaying
 

Anchovy

A Fish Called Amy
Veteran
Joined
Jan 9, 2019
Messages
40
Reaction score
25
First Language
English
Primarily Uses
RMMV
Is this available for RMMV? It seems like exactly what I need!
 

pizzacat

Warper
Member
Joined
Mar 7, 2014
Messages
2
Reaction score
3
Primarily Uses
@Anchovy
Sorry there isn't one at the moment. I haven't really looked into RPG Maker MV much yet, but I do know how to write basic games from scratch in javascript/html5, so I may try to convert the script eventually in the future.
 

Anchovy

A Fish Called Amy
Veteran
Joined
Jan 9, 2019
Messages
40
Reaction score
25
First Language
English
Primarily Uses
RMMV
@Anchovy
Sorry there isn't one at the moment. I haven't really looked into RPG Maker MV much yet, but I do know how to write basic games from scratch in javascript/html5, so I may try to convert the script eventually in the future.
Thanks for the reply and for your help with RMVX!
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Finally figured out how to make a signature with a pic that leads to a link, it's so cool! Click the image to check out my demo! :kaopride:
When you are very focus making a game on a Monday morning and doing your very best to make it perfect for your players. Than smile to take a break and realize it is Friday... o_o
Are there any vocalists on RPG Maker Forums that would want to sing together in a group, duet or make a whole channel together?
Here it is in all its leggy glory! I apologize in advance.

Forum statistics

Threads
98,180
Messages
950,147
Members
129,483
Latest member
g_loyola
Top