added details of program to readme, including tldr feature section.
This commit is contained in:
@@ -1,45 +1,85 @@
|
|||||||
# RPG City Maker Reborn
|
# RPG City Maker Reborn
|
||||||
|
|
||||||
**Pre-release Notice:** This project is currently in a pre-release state, functionality is very incomplete and subject to change.
|
Pre-release project for generating fantasy town/city maps with configurable terrain, water, roads, buildings, and trees.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
A remake in go of a program that generates maps of rpg like towns. Inspied by Roleplaying City Map Generator, this project aims to modernize the application by adding native support for modern operating systems (windows and linux, for now, mac os support and testing added later) and allow exporting with modern image formats like jpg, png and webp while also supporting large images sizing without the requirment of making multiple smaller images.
|
RPG City Maker Reborn is a Go + Fyne desktop app inspired by the original Roleplaying City Map Generator. It supports large image sizes, deterministic seeded generation, and exporting canvas/heightmap/bump map/masks in modern image formats.
|
||||||
|
|
||||||
## Acknowledgments
|
## Current Features
|
||||||
|
|
||||||
* Inspired by the original [Roleplaying City Map Generator](https://www.rpglibrary.org/software/rpg_city_map_generator/).
|
- Deterministic generation with a user-provided seed (same settings + same seed = same output).
|
||||||
* Thanks to the developers of Go, Fyne, and all the other open-source libraries that make this project possible.
|
- Terrain generation with detail and roughness controls.
|
||||||
|
- Lakes with multiple shapes (`circle`, `oval`, `procedural`) and edge roughness.
|
||||||
|
- Rivers with width range, curviness, width variability, and edge roughness.
|
||||||
|
- Roads with:
|
||||||
|
- Widths scaled by image size (percent of average image dimension).
|
||||||
|
- Junction angle constraint. (this needs some work)
|
||||||
|
- Exit roads.
|
||||||
|
- Building-driven road count via `Buildings Per Road`.
|
||||||
|
- Bridge generation and reduced probability for repeated bridges over the same water body.
|
||||||
|
- Distribution model that transitions from compact/organic to near full-canvas coverage.
|
||||||
|
- Buildings with:
|
||||||
|
- Size scaled by image size (percent of average image dimension).
|
||||||
|
- Shapes: `squares`, `circles`, `rectangles`, `mixed`, `procedural`.
|
||||||
|
- Mixed/procedural shape-ratio sliders.
|
||||||
|
- Procedural complexity controls (`Min`, `Max`, `Complexity Ratio`).
|
||||||
|
- Automatic cap of requested building count based on image size and average building size.
|
||||||
|
- Trees with:
|
||||||
|
- Size scaled by image size (percent of average image dimension).
|
||||||
|
- Coverage target by map area.
|
||||||
|
- Clumpiness controlling distribution style (spread vs clustered), not just raw count.
|
||||||
|
- Trees are removed on water, roads, or buildings.
|
||||||
|
- Export:
|
||||||
|
- Canvas, heightmap, bump map exports as `PNG`, `JPG`, `WEBP`.
|
||||||
|
- Mask export package as `Folder`, `tar.gz`, or `zip`.
|
||||||
|
- Saved masks include lakes, rivers, trees, roads, bridges, and buildings.
|
||||||
|
- Timeout protection: generation steps for lakes, rivers, roads, buildings, and trees continue with partial results if a step exceeds 1 minute, and the UI shows which steps timed out.
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
|
|
||||||
|
All settings below are currently implemented in the UI.
|
||||||
|
|
||||||
| Setting | Description | Range |
|
| Setting | Description | Range |
|
||||||
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --- | --- | --- |
|
||||||
| **Detail** | Controls the level of detail in the generated map, implemented using Perlin noise. A higher value increases the frequency of the noise, resulting in more intricate and frequent variations in the terrain. At 100%, the terrain will be extremely varied and complex. At 1%, the terrain will be very smooth with gentle variations. | `1` (less detail) to `100` (more detail) |
|
| **Detail** | Terrain noise detail level. | `1` to `100` |
|
||||||
| **Roughness** | Adjusts the overall roughness of the terrain by controlling the octaves of the Perlin noise. A higher value adds more octaves, creating a more rugged and mountainous landscape. At 100%, expect sharp cliffs and deep valleys. At 0%, the terrain will be mostly flat. | `0` (smoother) to `100` (rougher) |
|
| **Roughness** | Visual roughness overlay on terrain. | `0` to `100` |
|
||||||
| **Width** | The width of the generated map in pixels. This directly corresponds to the output image width. | `10` to `8192` |
|
| **Width** | Output image width in pixels. | `10` to `8192` |
|
||||||
| **Height** | The height of the generated map in pixels. This directly corresponds to the output image height. | `10` to `8192` |
|
| **Height** | Output image height in pixels. | `10` to `8192` |
|
||||||
| **Lakes** | The number of lakes to generate on the map. | `0` to `100` |
|
| **Seed** | Base random seed for deterministic generation. | Any integer |
|
||||||
| **Lake Size Lower** | The minimum size of a generated lake, as a percentage of the smaller of the map's width or height. | `1%` to `100%` |
|
| **Lakes** | Number of lakes to generate. | `0` to `15` |
|
||||||
| **Lake Size Upper** | The maximum size of a generated lake, as a percentage of the smaller of the map's width or height. | `1%` to `100%` |
|
| **Min Lake Size** | Minimum lake size (% of map area heuristic). | `1%` to `100%` |
|
||||||
| **Min Tree Size** | The minimum size of a generated tree as a percentage of the average image dimension (`(width + height) / 2`). | `0.2%` to `15%` in `0.2%` steps |
|
| **Max Lake Size** | Maximum lake size (% of map area heuristic). | `1%` to `100%` |
|
||||||
| **Max Tree Size** | The maximum size of a generated tree as a percentage of the average image dimension (`(width + height) / 2`). | `0.2%` to `15%` in `0.2%` steps |
|
| **Lake Edge Roughness** | Irregularity/noise along lake boundaries. | `0%` to `100%` |
|
||||||
| **Tree Coverage** | The density of trees on the map, as a percentage of the total land area. At 100%, the land will be completely covered in trees, forming a dense forest. At 0%, there will be no trees. | `0%` (no trees) to `100%` (dense forest) |
|
| **Lake Shape** | Lake shape mode. | `circle`, `oval`, `procedural` |
|
||||||
| **Tree Clumpiness** | Controls how much trees are clumped together. At 100%, trees will be tightly clustered in a few areas. At 0%, they will be distributed evenly across the map. | `0%` (evenly distributed) to `100%` (highly clumped) |
|
| **Rivers** | Number of rivers to generate. | `0` to `5` |
|
||||||
| **Seed** | The random seed used for generation. Using the same seed will produce the exact same map every time. This is useful for sharing and reproducing maps. | Any integer |
|
| **Min River Width** | Minimum river width (% of smaller image dimension). | `1%` to `100%` |
|
||||||
| **Rivers** | The number of rivers to generate on the map. | `0` to `100` |
|
| **Max River Width** | Maximum river width (% of smaller image dimension). | `1%` to `100%` |
|
||||||
| **Min River Width** | The minimum width of a generated river, as a percentage of the smaller of the map's width or height. | `1%` to `100%` |
|
| **River Curvyness** | River path curviness. | `0%` to `100%` |
|
||||||
| **Max River Width** | The maximum width of a generated river, as a percentage of the smaller of the map's width or height. | `1%` to `100%` |
|
| **River Width Variability** | Width fluctuation along rivers. | `0%` to `100%` |
|
||||||
| **River Curvyness** | How curvy the rivers are. At 100%, rivers will meander significantly. At 0%, they will be perfectly straight lines. | `0%` (straight) to `100%` (very curvy) |
|
| **River Edge Roughness** | Irregularity/noise along river edges. | `0%` to `100%` |
|
||||||
| **Min Road Width** | The minimum width of a generated road as a percentage of the average image dimension (`(width + height) / 2`). | `0.1%` to `5%` in `0.1%` steps |
|
| **Min Tree Size** | Minimum tree size as % of average image dimension `((width+height)/2)`. | `0.2%` to `15%` in `0.2%` steps |
|
||||||
| **Max Road Width** | The maximum width of a generated road as a percentage of the average image dimension (`(width + height) / 2`). | `0.1%` to `5%` in `0.1%` steps |
|
| **Max Tree Size** | Maximum tree size as % of average image dimension `((width+height)/2)`. | `0.2%` to `15%` in `0.2%` steps |
|
||||||
| **Buildings Per Road** | Controls internal road count by setting how many buildings correspond to one road segment. Lower values create more roads; higher values create fewer roads. | `1` to `20` |
|
| **Tree Coverage** | Target coverage of map area by trees. | `1%` to `100%` |
|
||||||
| **Road Exits** | The number of roads that start at the edge of the map and extend inwards. | `0` to `100` |
|
| **Tree Clumpiness** | Distribution style of trees (spread vs clustered forest). | `0%` to `100%` |
|
||||||
| **Minimum Road Angle** | The minimum angle allowed between two roads at a junction. Higher values reduce tightly packed, nearly parallel branches. | `0°` to `180°` |
|
| **Min Road Width** | Minimum road width as % of average image dimension `((width+height)/2)`. | `0.1%` to `5%` in `0.1%` steps |
|
||||||
| **Road Curvyness** | How curvy the roads are. At 100%, roads will have many twists and turns. At 0%, they will be perfectly straight. | `0%` (straight) to `100%` (very curvy) |
|
| **Max Road Width** | Maximum road width as % of average image dimension `((width+height)/2)`. | `0.1%` to `5%` in `0.1%` steps |
|
||||||
| **Road Distribution** | Controls the distribution of roads. At 100%, roads will be spread out across the entire map. At 0%, they will be clustered in the center. | `0%` (centered) to `100%` (spread out) |
|
| **Buildings Per Road** | Number of buildings represented by one internal road segment (lower = more roads). | `1` to `20` |
|
||||||
| **Num Buildings** | The number of buildings to generate. | `0` to `1000` |
|
| **Road Exits** | Number of edge-connected exit roads. | `0` to `100` |
|
||||||
| **Min Building Size** | The minimum size of a generated building as a percentage of the average image dimension (`(width + height) / 2`). | `0.5%` to `25%` in `0.5%` steps |
|
| **Minimum Road Angle** | Minimum allowed angle between roads at a junction. | `0°` to `180°` |
|
||||||
| **Max Building Size** | The maximum size of a generated building as a percentage of the average image dimension (`(width + height) / 2`). | `0.5%` to `25%` in `0.5%` steps |
|
| **Road Curvyness** | Curviness of generated roads. | `0%` to `100%` |
|
||||||
| **Building Distro** | Controls the distribution of buildings. At 100%, buildings will be spread out across the entire map. At 0%, they will be always near a road. | `0%` (centered) to `100%` (spread out) |
|
| **Distribution** (Roads tab) | Road POI spread from compact center to broad/full-map coverage. | `0%` to `100%` |
|
||||||
| **Building Shape** | The shape of the buildings. | `squares` or `circles` |
|
| **Number of Buildings** | Requested building count before fit-cap. | `0` to `10000` |
|
||||||
|
| **Min Building Size** | Minimum building size as % of average image dimension `((width+height)/2)`. | `0.5%` to `25%` in `0.5%` steps |
|
||||||
|
| **Max Building Size** | Maximum building size as % of average image dimension `((width+height)/2)`. | `0.5%` to `25%` in `0.5%` steps |
|
||||||
|
| **Building Distribution** | Placement preference from near roads toward random map-wide placement. | `0%` to `100%` |
|
||||||
|
| **Building Shape** | Primary building generation mode. | `squares`, `circles`, `rectangles`, `mixed`, `procedural` |
|
||||||
|
| **Squares / Circles / Rectangles** | Shape ratio sliders used by `mixed` and `procedural` building modes. | `0%` to `100%` each (normalized together) |
|
||||||
|
| **Min Building Complexity** | Minimum number of shape components in procedural buildings. | `1` to `6` |
|
||||||
|
| **Max Building Complexity** | Maximum number of shape components in procedural buildings. | `1` to `6` |
|
||||||
|
| **Building Complexity Ratio** | Chance to use a random complexity between min and max. | `0%` to `100%` |
|
||||||
|
|
||||||
|
## Acknowledgments
|
||||||
|
|
||||||
|
- Inspired by the original [Roleplaying City Map Generator](https://www.rpglibrary.org/software/rpg_city_map_generator/)
|
||||||
|
- Thanks to the maintainers of Go, Fyne, and other open-source projects that make this one possible.
|
||||||
|
|||||||
Reference in New Issue
Block a user