As I mentioned in an earlier post, the game I want to make is heavily inspired by XCOM: Enemy Within and XCOM2. A big part of both these games is a world map split into countries as part of the strategy layer. So it should be no surprise that my game has a world map, especially if you read my post about making tools for my game. In my case, it’s not the whole world – part of the fantasy element is that you don’t have easy ways to traverse the whole world, but I’m calling it the world map anyway.
Starting Out
Not long after I started talking about building a game, a friend asked me if I had any thoughts on what it might look like. I did, but I’d been mostly imagining it in my head, which you can’t really share with people, so I sketched out my world map thoughts and took a picture. I apologise for my atrocious handwriting.

For those who can’t read my writing (I don’t blame you!), these are the things I wanted to achieve:
- A map that you can move around and zoom in/out of
- There is a main base where your adventurers set out from
- Quests pop up on the map and have an icon displayed at their location
- Clicking on a new quest lets you choose a party to send on that quest
- It is obvious whether the quest has a party dispatched or not
- You can view quest information from the icon
- When you send out a party, you can see their progress towards the quest site on the map
- A party can have a random encounter while traveling
- Resources are displayed on the screen
- There is a list of upcoming events
Easy, right?
Version 1
For the first version of the world map, I made a static image in about two minutes using Inkarnate. The lore I have in mind for my game means it takes place in a wasteland covered in ice and snow. This is not the most interesting thing to depict and I feel like the quick map I made looks really boring. But, it worked as a prototype.
I then wrote code to generate quests at random locations on the map and add a quest marker, which used the Godot icon that comes with the editor as a placeholder.
This was the result.

The player could move the camera around and zoom in and out. Overall, it didn’t look brilliant, but it did work, and I was quite pleased with my progress.
Next, I made it so that the camera would fly over to the quest icon that appeared and display a popup with the quest information where the player could choose to send a party or ignore the quest

If the player chose to send a party, the quest icon changed so there was an indicator on the top right corner, which I left a beautiful placeholder pink.

At this point, I then wanted to add a party icon traveling along a path to the quest icon, and I realised that I didn’t like the options available to me. The way I wanted the paths to work is that they would take the “best” route there and the game would calculate how long that route would take to travel. But I had no way to determine which areas of the map would be difficult to traverse, or how long it would take. On top of that, I’d also decided that I wanted to add something new to the map – the concept of Regions, which would affect the difficulty of the quests within them.
I now know that I could solve these problems using a static image as the background. In fact, the way I end up doing things would work just fine with the image background. But, as I mentioned at the start of this section, I thought my map was boring, and I wanted to try out something else.
Version 2
In Pathfinder 2E there is a mode of gameplay called “Hexploration.” It’s not a new concept really – this is something which comes from earlier tabletop RPGs. The idea is that a large map is broken down into hexagonal tiles, or hexes, and each hex is predominantly occupied by one terrain type, e.g. plains, forest, mountains, etc. Some hexes can take longer to traverse depending on the terrain, and some contain points of interest. This representation seems like a good fit for my requirements.
So I rebuilt my map with hexagonal tiles, using several of Godot’s TileMapLayer components to achieve different results. I also made a tool for editing the map, which is the subject of another post. Having the map defined as discrete tiles with distinct terrain and features made it much easier for me to define regions. I’ve made all the tiles and low detail features myself using Krita. While I know they’re not very good, I think they capture the feel of a tabletop RPG quite well.

Each region has a level range and a list of available quest types. I’ve assigned the level ranges based on what feels right at the moment, so I’m sure they’ll need changing later when I’m focusing on balancing the game, but they’ll do for now. At the start of the game, a region can be visible or hidden, and the player can only see the outlines of hidden regions bordering visible regions. Quests will only spawn in regions which are visible. This is not a mechanic which was in my original sketch, so I’m already causing scope creep for myself, but I feel that it makes the map a more interactive part of the game and it also ensures that the early game quests aren’t too high level for the player’s available adventurers.
Scouts and Scouting

So how does a player reveal a hidden region?
This is where the icon (it’s supposed to be a telescope, all hail my incredible artistic talent) and number under the region name comes into play.
This icon indicates the number of scouts assigned to a region. The player can increase or decrease how many scouts are assigned, and more scouts means that the region will be revealed faster. They’ll need to assign at least one scout to start revealing a region. Scouts can also be assigned to a visible region where they will discover quests. If no scouts are assigned to a visible region, then no quests will be spawned.
Quests
Now that I have a hex-grid based map with regions, I changed how quests are spawned. They now appear in a random hex within a region that doesn’t already have a quest in it. I also made my own simple icon based on the Pathfinder 2 theme colours and the RPG trope of quest givers having an exclamation mark over their heads. Clicking on this icon displays a window with quest information and a button to send a party on the quest.
My first pass did cause some problems, such as quests spawning underneath the region name, making it impossible to click on them. I solved this by setting it up so that some hexes cannot have quest spawns.


Traveling to a Quest
With quests spawning, the next item on my list was finding a path to a given hex from a starting hex, which I can define in my map editor. A quick search suggested using the A* pathing algorithm and mapping my hex grid to cube coordinates. I might do a separate post on this topic in the future, but for now it will suffice to say that I had some trouble getting it working with different tiles having different movement costs, but eventually managed to get it working.

You’ll notice that the paths tend to avoid mountains and prioritise hexes without any significant features. An interesting side effect of revealing new regions is that the best route to some areas changes as clearer terrain is discovered. I quite like this and might try to edit my map so it appears more often. The total movement cost is then used to calculate how long it will take to reach the quest. This is something I’m really pleased with – it’s working exactly as I intended.

And since we have quests and a route to them, it’s time to send a party on a quest!
When the party embarks, the quest icon changes to a question mark (once again inspired by RPG tropes) with inverted colours compared to the new quest marker so it stands out. An icon that represents the party also appears and starts moving towards the quest marker. The player can click on either icon to bring up a summary of the quest.
The party icon moves at the right speed for the terrain – so it moves slowly through forest and mountains, but quickly across open plains – and the line indicating the path to the quest vanishes as the party moves along it


Finally, once the party arrives, the player is prompted to begin or abandon the quest. The popup has a summary of the quest information on it, although I do need to add a button to view the party sent.
Reviewing my aims
Let’s look back at the list of things I wanted on the world map and cross off the ones that I’ve accomplished so far:
A map that you can move around and zoom in/out ofThere is a main base where your adventurers set out from1Quests pop up on the map and have an icon displayed at their locationClicking on a new quest lets you choose a party to send on that questIt is obvious whether the quest has a party dispatched or notYou can view quest information from the iconWhen you send out a party, you can see their progress towards the quest site on the map- A party can have a random encounter while traveling
- Resources are displayed on the screen
- There is a list of upcoming events
1 Technically there is a hex where quest paths start from and the party icon spawns, rather than a home base icon, but I’m counting it anyway.
That’s 7/10 objectives complete!
I’ve held off on doing random encounters as the party travels because I’m not sure how I want to handle it, or if it’s something I really want to put in the game. The world map does need some other events going on to make it more engaging, but I think that those events might be better if they’re not tied to quests.
The resources and upcoming events display I’m doing as part of a world map HUD, which isn’t finished yet. I’ve been thinking about how I want to display information and what else might need to be on the HUD, but nothing I’ve done feels quite right yet, including the region name display plates that are in many of the screenshots in this post.
Considering that I had no game dev experience at the beginning of the year, though, I’m quite proud of what I’ve accomplished in my (very limited) free time. I know there are far more impressive projects out there done by some incredibly talented people, but this one is mine and I’m enjoying it.