- The map should have a few different types of terrain that each have a slightly different flavor.
- The map should be able to change between games in order to increase replayability.
- When the map generates it should do so in a way that makes sense. Water tiles should be more likely to be near other water tiles, hills should be more likely to be created near other hills, buildings should be scattered around on land but shouldn't spawn randomly in the ocean, etc.
- Mostly the map should look nice. I'd like to avoid using a lot of ASCII/Nethackesque visuals. The map and features on the map should be fairly self-explanatory with respect to what is out there.
I've been playing around with Google Sheets for a few weeks in order to create a program that will generate the map. I've spent a lot of time looking around on the Google Function sheet in order to find the right combinations of commands to get the map to do what I wanted in a somewhat elegant fashion. Some of my efforts are a little more brute force than I had hoped to be able to create but I think that I finally have something that I like. One of the big issues I've seen so far is that there is no way to keep every random field from changing each time an alteration was made to the spreadsheet. I'll have to find a way to get around this otherwise every input from the user will cause a new map to generate.
So far I feel good about how I've been able to address the design goals. I've created several different terrain types (Water, Fields, Trees, Hills and Buildings) that seem to generate in a natural(ish) fashion. Water is less common as you get closer to the interior of the island and trees and hills become more common.
I have the map embedded below or you can access the spreadsheet itself if you are interested in looking at the functions that I've used. If you access the spreadsheet directly you should be able to cause a new island to be generated by changing the name of the island. Let me know if you have any questions, comments or ideas!
Next step: Creating an interface that hides most of the map and allows the user to navigate around and only see a small portion of the map based on their avatar's sight.