Region Restricted Movement

pizzacat

Warper
Member
Joined
Mar 7, 2014
Messages
2
Reaction score
3
Primarily Uses
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
 
Last edited:

Miss Nile

Veteran
Veteran
Joined
Jul 6, 2012
Messages
464
Reaction score
411
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

so hopefully tomorrow i get to go home from the hospital i've been here for 5 days already and it's driving me mad. I miss my family like crazy but at least I get to use my own toiletries and my own clothes. My mom is coming to visit soon i can't wait to see her cause i miss her the most. :kaojoy:
Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.
Do you Find Tilesetting or Looking for Tilesets/Plugins more fun? Personally I like making my tileset for my Game (Cretaceous Park TM) xD

Forum statistics

Threads
105,868
Messages
1,017,074
Members
137,578
Latest member
JamesLightning
Top