In this article we go over the “Region” property in your tiles. Tile regions are unique to RPG Maker VX Ace.
It explains what a region is, how you can use them, what RPG Maker uses them for by default, how you can manipulate it for your own purposes, and finally a sample list of what other scripters have been using regions for.
What is a Region
It’s just a number. Really. Take a look at the following diagram:
Working with Regions
The map editor allows you to edit tile regions. To access the region editor, press F7, or press the colourful icon in the toolbar.
You will see 64 different regions available to colour your map with (63 numbered regions, and the Zero-Region which is not numbered).
By default, any tile that does not have a region, is the Zero-Region, with a region ID of 0.
To set a region, simply pick a region from the palette and spread it over your tiles.
Regions and Encounters
A built-in use case for regions is in the map encounter system, which you can access from map properties.
From here, you can choose which regions an encounter will appear in. For example, maybe certain troops only appear in water, or only appear in grasslands. Some troops may be encountered more frequently in certain regions, and less frequently in other regions.
Tile Regions and Events
You can use tile region information in your events. While conditional branches do not support checking a tile’s region event directly, you can accomplish this using variables.
On the third page of the event commands, you will see a command called “Get Location Info”. When you click on it, a dialog will appear asking you what kind of information you want on a particular tile. The tile can be specified directly, or via variables. When this command is executed, it will check the specified tile and store the region in the designated variable. You can then use this variable for other commands such as conditional branches or script calls.
So for example, if you store the player’s (x, y) position in variables 2 and 3, you can designate the tile you want the command to check using those two variables and you will be able to check the player’s current region in your events.
Accessing a Character’s Current Region
If you want to avoid the “Get Location Info” step, you can access the region a character is standing on directly. A character can be the player, an event, a follower, or a vehicle.
The region ID can be obtained via script calls:
You can then use this in your conditional branch’s script call directly. So actually conditional branches do support checking regions.
How Regions are Stored in Data
Region ID’s are stored with each tile. All tile are stored in a Tilemap, which holds all of the information about a map’s tiles including the tile ID’s, terrain tags, various tile properties such as damage tile or counter tile, and of course the region ID.
Tile data is stored in a 3-dimensional RGSS Table with 4 components for each tile. Each component corresponds to a different layer for each tile. Indeed, RPG Maker VX Ace supports layered tiles, but you really only have control over the bottom layer and the top layer (the middle layer is handled by auto-tiles).
These are the four components of a tile:
- Tile ID for bottom layer
- Tile ID for middle layer
- Tile ID for top layer
- Shadows and Region ID’s
All IDs are stored as unsigned 2-byte integers. Notice that the region data is stored with the shadow data. This is because regions occupy the upper 8 bits of the integer, while shadows occupy the lower 4 bits.
As an aside, if you do some math, you will see that there are 4 unused bits. I don’t know why this is. It seems like RPG Maker could have supported a lot more regions quite easily with no additional effort or space.
Programmatically Accessing Regions
Game_Map, there is a method called
region_id that returns the region ID of the tile at the specified position.
def region_id(x, y) valid?(x, y) ? @map.data[x, y, 3] >> 8 : 0 end
Here, we can see that the map accesses the 4th component of the tile info and then bit-shifts it to the right by 8. For those that don’t know what bit-shifting is, this is how it looks. I use a region ID of 3 as my example:
The top number shows 768 (in base 10), which is obviously not the right region ID. However, after bit-shifting, we get the number on the bottom, which is equal to 3 (in base 10).
To change the region ID of a tile, you would need to perform some bit-masking on the 4th component of a tile. Remember that this component stores more than just region information; only the high-order 8 bits are used for region. So if you’re manipulating this value, you should remember to keep the other bits intact.
I will assume you understand bitwise operators. We will be using bitwise AND and OR to set our region ID. Here is the general procedure
- Pick a number. Let’s say 11
- Convert it to binary. That is 0000 1011. This is our new value.
- Remember that we are working with 2 byte integers and don’t want to alter the lower 8 bits. So add ones to the end of your number. Now we have 0000 1011 1111 1111. In hex, this is 0x0BFF
- Take the original region and apply a 1111 1111 0000 0000 (0xFF00) OR mask to it to mask all the region bits to 1 and leave the other bits intact
- Take your new value and apply an AND mask to it. This will turn off the corresponding region bits, while leaving the other bits intact.
In code, it looks like this
class Game_Map def change_region_id(x, y, id) mask = id << 8 | 0x00FF # (1, 2, 3) data[x, y, 3] |= 0xFF00 # (4) data[x, y, 3] &= mask # (5) end end
Now you can change regions on your map with a simple script call. More work will be required if you want to preserve these changes when you reload the map.
Other things you can do with Regions
Regions can be used for a variety of things, though having a limitation of 1 region might make it a bit difficult. Here are some scripts that use region ID’s:
- Map Regions – Create separate “regions” on your map with unique names, music, battlebacks, and so on.
- Region Events – Extend an event’s trigger region to any tiles you want using regions
- Region Fog – hide or show a “fog” over a set of tiles using regions
- Random Event Positions – use regions to specify where an event may be randomly located
- Tile Swap – change all tiles in a specified region to a different tile
- Neon Black’s Terrain Tags – Special visual terrain effects such as moving over or under tiles
- Yanfly’s Move Restrict Region – Prevent characters from moving onto certain regions
Have a script you want to recommend for this list? Just leave it in the comments or use the contact form.
As you can see, regions are just numbers. But this information can be used in a variety of ways. Understanding how regions work and how you can use them effectively will allow you to create more advanced mechanics in your game.
Spread the Word
If you liked the post and feel that others could benefit from it, consider tweeting it or sharing it on whichever social media channels that you use. You can also follow @HimeWorks on Twitter or like my Facebook page to get the latest updates or suggest topics that you would like to read about.