Giter Club home page Giter Club logo

mapgen2's Introduction

No Maintenance Intended

After working on a Perlin-noise-based map generator I had wanted something with islands and rivers and volcanoes and lava. However, I had a lot of trouble getting that map generator to generate any more than what it did at first. This project was my exploration of several different techniques for map generation.

The goal is to make continent/island style maps (surrounded by water) that can be used by a variety of games. I had originally intended to write a reusable C++ library but ended up writing the code in Actionscript.

The most important features I want are nice island/continent coastlines, mountains, and rivers. Non goals include impassable areas (except for the ocean), maze-like structures, or realistic height maps. The high level approach is to

  1. Make a coastline.
  2. Set elevation to distance from coastline. Mountains are farthest from the coast.
  3. Create rivers in valleys, flowing down to the coast.

The implementation generates a vector map with roughly 1,000 polygons, instead of a tile/grid map with roughly 1,000,000 tiles. In games the polygons can be used for distinct areas with their own story and personality, places for towns and resources, quest locations, conquerable territory, etc. Polygon boundaries are used for rivers. Polygon-to-polygon routes are used for roads. Forests, oceans, rivers, swamps, etc. can be named. Polygons are rendered into a bitmap to produce the tile map, but the underlying polygon structure is still available.

The full process is described here.

History

  • I started out with C++ code that used mountains, soil erosion, water flow, water erosion, water evaporation, volanoes, lava flow, and other physical processes to sculpt terrain expressed in a 2d array of tiles. However as described in this blog post I decided to abandon this approach.

  • Since my initial approach failed, I wrote several small prototypes to figure out how to make rivers, coastlines, and mountains. These are the key features I want to support. I will then figure out how to combine them into a map.

  • The voronoi_set.as prototype worked well and I continued adding to it (instead of converting to C++). It supports terrain types: ocean, land, beach, lake, forest, swamp, desert, ice, rocky, grassland, savannah. It has rivers and roads. I decided not to convert it to C++ for now. Instead, I've refactored it into the core map generation (Map.as), display and GUI (mapgen2.as), graph representation (graph/*.as), decorative elements (Roads.as, Lava.as), and noisy edge generation (NoisyEdges.as).

Requirements

These third-party requirements have been added to the third-party directory:

Make sure you run git submodule update --init to check out the third-party libraries.

Compiling

To compile mapgen2.as to mapgen2.swf, use the following command:

mxmlc -source-path+=third-party/PM_PRNG -source-path+=third-party/as3delaunay/src -source-path+=third-party/as3corelib/src mapgen2.as

mapgen2's People

Contributors

amitp avatar jterrace avatar retinaburn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mapgen2's Issues

function creation inside loop

I'm currently porting Map.as to Lua so I'm reading the code very thoroughly. I just stumbled about something that I'd consider bad performance, but I have no experience in ActionScript at all, or means to test my findings, so I might be wrong.

In the loop start at Map.as:375 over the libedges function you create the function addToCornerList and addToCenterList. I think if those two are created outside the loop it should be the same result at better performance?

Problem with compiler

I have the following error when I execute mxmlc -source-path+=third-party/PM_PRNG -source-path+=third-party/as3delaunay/src -source-path+=third_party/as3corelib mapgen2.as

$ mxmlc -source-path+=third-party/PM_PRNG -source-path+=third-party/as3delaunay
/src -source-path+=third_party/as3corelib mapgen2.as
Cargando el archivo de configuraci¾n C:\Users\SabinaPC\Desktop\holas\frameworks
flex-config.xml
Adobe Flex Compiler (mxmlc)
Version 4.6.0 build 23201
Copyright (c) 2004-2011 Adobe Systems, Inc. Reservados todos los derechos.

command line: Error: no se puede abrir æthird_party/as3corelibÆ

Use la ayuda de 'mxmlc para obtener informaci¾n sobre el uso de la lÝnea de coma
ndos.

I download the source, write git submodule update --init and i don have error messages. I am new in it and I'm fascinated with your proyect

Variable && itself in map.as

On line 480 in map.as, you use:

if (!s.water && !s.water){
newElevation += 1;
}

Is this intentional? If so, why? Did you intend to use:

if (!q.water && !s.water){
newElevation += 1;
}

Noisy edge function doesn't handle all quadrilateral shape

I found buildNoisyEdges function couldn't handle this form of quadrilateral because intersections of 2 lines (edge.v0, edge.v1 and edge.d0, edge.d1) will lie outside of their quadrilateral and makes its noisy edge overlap neighboring edges.

u07_l2_t1_text_final_3_files_image001 1

I think this can be solved can restructure this shape into solvable one that you wrote on your blog.

For example:
20190201_212922

Where:
A, B: Voronoi points.
C, D: Delaunay points.
H: intersection of AB and CD.

We can try to reform this ACBD into AC1BD1 before passing it into buildNoisyEdges function. C1 and D1 are intersections of a line that goes through B and AC / AD respectively.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.