How to make a paradox-style grand strategy map with selectable provinces using bitmap?

I’m in the process of designing a paradox-style grand-strategy game with a large map containing thousands of provinces. I plan on creating the map in a similar style to Paradox; by having a .bmp color file showing all of the games provinces, each with a unique RGB color and code that the game will reference when clicking on the map for the player to interact with the subsequent province. This will be applied over my heightmap as a texture, and when the player clicked on a particular part of the map, the game will check a dictionary with all the RGB codes and their respective provinces and call back with one based on the color of the region the player clicked on.

This should give you an idea of what I’m talking about

Each of these provinces (particularly those on land) will have their own script/text file attached to each of them that displays their current stats (such as development/population/buildings ect.) in addition, whenever the player clicks on the map, the game will check the area he clicked on and what RGB code the province he clicked on had. This will be used for a variety of the games interactions, such as moving armies and building upgrades among many other things.

Unfortunately, I’m not particularly sure how I should go about this. I have around a year of experience working in unity, but most of that is with scene/world creation and basic scripting. I’ve been trying to find info on how people suggest creating this sort of system, but much of it is outdated or confusing.

Can anyone here walk me through step-by-step what I’ll need to do to create such a province system in Unity using C#? What else will I need to know in order to get this working? Specifically, how can I get the game to check the color code for the part of the map they clicked on, and call back to a dictionary file to reference it’s code their and it’s respective province to then allow the player to interact with said province?

1 Like

@ferrarijames51, well that is a major, major challenge!

It’s relatively easy to get the color of a texture underneath a mouse point. See the Texture2D Class in the documentation, specifically the GetPixels function.

That said, the example map you show has the potential to be huge - hopefully if your map is similar it is only used as an overview map for selecting areas and is not something you actually want to zoom in on because of the memory considerations.

The only sane ways to handle thousands of provinces would be to have several levels of zoom, perhaps breaking the map into quadrants at each level of zoom.

Or to work out way to store everything in some kind of compressed format (e.g. SVG ) and dynamically create the map, zoom levels, province detail based on that compressed representation.

Either way you are going to have to define thousands of provinces? It’s really not feasible unless you find a way of auto generating and storing the whole thing, maps included. A couple hundred would be a stretch, but thousands?

Hi, @ferrarijames51,
How is going? I’m pretty interested in the paradox-style games.