Need help with PirateMap?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

fogleman
226 Stars 15 Forks 24 Commits 4 Opened issues

Description

Procedurally generate pirate treasure maps.

Services available

!
?

Need anything else?

Contributors list

# 2,235
OpenGL
C
glsl
SQLite
22 commits
# 138,047
Objecti...
Shell
gltf
C#
1 commit

Pirate Maps

Procedurally generated pirate treasure maps. X marks the spot!

Example

Dependencies

I used several excellent third party libraries...

  • cairo
    for rendering
  • colour
    for color interpolation
  • noise
    for simplex noise
  • Pillow
    for saving debug images of noise layers
  • pyhull
    for delaunay triangulation
  • Shapely
    for all kinds of 2D geometry operations

How to Run

The script will generate several random maps and save them as PNG files.

git clone https://github.com/fogleman/PirateMap.git
cd PirateMap
pip install -r requirements.txt
python main.py

How it Works

It took me a while to decide on an approach for generating the land masses. I didn't want to just generate some simplex noise, threshold it and render it. I wanted to actually compute a polygonal shape that I could do further operations on. So here's how that works...

  • generate a layer of simplex noise with several octaves, with decreasing values as the edge of the image is approached
  • fill the screen with randomly positioned points evenly spaced using the poisson disc algorithm
  • filter the poisson points to those where the corresponding noise value is above some threshold
  • take these points and compute a "concave" hull or alpha shape with them

Shapely's

buffer
function is used heavily for padding or cleaning up shapes.

I also wrote an

xkcdify
function to add some perturbations to some of the polygons, namely the different water color gradations.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.