World maps can help players traverse entire continents in moments instead of having to walk across large mostly-empty maps to reach their destination, but what exactly do we need to do to make a world map work?
The size our world map needs to be depends on what we want to happen on that map. Do we want our player to fight battles while they travel from town node to town node? Then we’ll want to have enough distance between nodes on our world map to make sure that a battle or two is likely, or adjust the Encounter Steps in the map properties window to be lower than the default 30 (just keep in mind that going too low could lead to battles almost every step, which usually isn’t fun for players). What if we want to use the world map to explain how our player can go from a forest town to a far-off desert town quickly? Then we can make the map pretty small, with roads that lead straight to the next node.
For this tutorial, let’s make a small world map that lets our player see the entire world on a single screen. We’ll have 9 different locations we can visit from the world map, so each spot needs an event.
Each event can be pretty simple, with a message about which location it is and yes/no choice where ‘yes’ transfers our player to the location’s map.
Giving each location their own event gives us some extra freedom when it comes to controlling where our player can go and any cutscenes that play before they visit a new location. If we wanted to keep our player from visiting the right side of our map until they’ve completed a quest in the castle, for example, we could use two pages in our bridge event to block their path until a switch is flipped.
Once that switch is On, our player can cross the bridge and even visit a bridge map for access to sidequests or cutscenes.
We could also make certain nodes like towns seem to grow and change as the game progresses by sending our player to a different map depending on where they are in the game. Their home village may be small in the beginning, but as our player makes new friends and invites people to live in their village then we could change the event’s page to be a village map with more houses and NPCs wandering around. Or if a major plot point is our player failing to save a town, then it makes sense to have them visit a destroyed town map instead of the happy original map after that dramatic scene.
Once our world map leads to all of our locations, we need to make sure our player can get back to the world map. There are a few ways we could set up these exits, such as a normal map transfer or talking to an NPC who owns a wagon-powered travel agency. No matter which choice we decide on, the event’s content can be similar to our world map’s events: a yes/no choice that sends our player to the world map.
We could also give our player a map item so that they can return to the world map no matter where they currently are. A non-consumable key item that calls a common event is perfect for this.
Our item’s common event could be as simple as our other events, but there’s one thing we need to keep in mind: our map item doesn’t know where our player should appear on the world map without some help! To make sure our player appears in the right spot, we need to set a variable to the current map ID and then use conditional branches to transfer our player properly.
But what about sub-maps? If our locations contain more than one map, then we’ll need to also check those map IDs or else our player won’t be able to travel to the world map from anywhere. We can do that with multiple conditional branches (one for each map) or combine areas by setting the conditional branch to check if the variable equals one of the map IDs. If we wanted to check if the map ID was 2, 3, or 110, then we’d write our script call as $gameVariables.value(1) == 2 || $gameVariables.value(1) == 3 || $gameVariables.value(1) == 110 .
Another option is to use some eventing logic from our previous camp item tutorial to check the map’s notetag and have the conditional branches run if they match. That way we could create a village with tons of interior maps, and as long as each map has <village 1> in their note section and the conditional branch checks for the code $dataMap.note.includes(“<village 1>”), then our common event will set our player to the village location on the world map no matter which village house the map item is used in.
Our world map is working now, but what if we wanted to make sure our player stays on the paths and doesn’t wander off into the grass or mountains? Then we’ll need to adjust our overworld tileset. By setting all of the ground tiles except the path to be impassable we can force our player to stay on the path.
If we want to use our overworld tileset elsewhere (such as for a minigame or cutscene), then blocking every A2 tile won’t work. So instead of setting the ground to be impassable, what if we used a B tile to outline the path in a blockage? We can add a new tileset to our overworld that has an obvious “do not pass” tile in it that’s set to be impassable, and then place that tile all around the path.
Once we’ve outlined our path, we can edit our tileset again to remove the impassable tile’s image. That leaves us with a world map that looks nice but keeps our player from escaping the path and wandering off into the wilderness.
And with that, our world maps are ready to go! Do you use world maps in your game?