Settlement Generation Challenge 2021

This is the overview page for the fourth iteration of the GDMC AI Settlement Generation Challenge in Minecraft, running in 2021. This competition is in the past, but this page exists to document the rules and outcomes of this past competition.

Submissions for 2021 have closed on the 31st of May, 2021.

The Settlement Generation Challenge is about writing an algorithm that can create a settlement for a given, unknown Minecraft map. The challenge is to produce an algorithm that is adaptive towards the provided map, creates a settlement that satisfies a range of functional requirement - but also looks good and evokes an interesting narrative. The goal is to basically produce an algorithm that can rival the state of the art of what humans can produce. So far there have been 3 iterations of the challenge: once in 2018, and in 2019, and in 2020.

To participate, you have to write a program that can build a settlement for an unknown Minecraft map. After you submit your algorithm, we will run it on 3 previously unseen maps, and a panel of human judges will then evaluate the resulting settlement, based on a set of criteria focusses on Adaptation to the Environment and Terrain, Functionality from an Embodied Perspective, Narrative Integration, and Visual Aesthetics.

Results Video

gdmc-profile.png


Previous Years 2018, 2019, 2020
Conferences FDG
Submission Languages Python, Java, other
Submission Types
  • HTTP Interface via Forge Mod
  • MCEdit Filter
  • Participants Choice
Deadlines:
  • Submission: 31. of May, 2021
  • Results: August, 2021

Overview

To participate, you, or a team, have to write some code that can generate a Minecraft Settlement for an unseen Minecraft map. We accept submission in several frameworks, see below. You submit the code, together with some additional information to us before the deadline. We then apply this code to usually 3 competition maps selected by the organizers, which are not known before the deadline. The resulting settlements will then be sent to a range of expert and volunteer judges, who use Minecraft to look at and interact with the settlements, and then assign scores to each generator. We then announce the results - including who got the highest score and relating the settlements, code, and feedback publicly, both online and at a suitable scientific conference.

Rules

  • To participate you need to submit your code to our website before the deadline.
  • Team submissions are allowed.
  • Anyone is able to participate.
  • One submission per person / team only (We have considered exceptions for academic supervisors who led several teams - please contact us to discuss)
  • Unless you object specifically, we will publish the code and attached documentation after the evaluation period.
  • You keep ownership and rights to your own code and work - but unless you object we assume we can share it and use it in our material.
  • If you have any further questions about the rules, please aks them on our discord, so we can clarify: Join Discord

Winners will be announced during the 2021 Foundation of Digital Games Conference. At the same time we will also publish the detailed evaluation results online for each algorithm. Once the results have been announced we will also publish the competition maps, the settlements generated by the algorithms, and the participants description of their algorithm. We also encourage participants to publish their code, but this will not be mandatory. Unless participants object to sharing their code, we will make it available on our website with an appropriate open source license. If they decline, we will not publish the code. In either case, the organizers will not take exclusive ownership of the code. You can find previous years maps, code, resulting settlement, evaluation scores and other things on our website.

Evaluation

The submitted algorithms will be judged based on a set of 3, different, unknown maps. Example training maps will be provided. The competition maps will not be publicly available until after the competition. Every submitted algorithm will be run on the same 3 unknown maps, and the resulting maps with settlements will be anonymized and given to the judges. The judges will also be able to see the 3 maps in their natural state, before the algorithm was applied. We might change the number of maps if submissions are getting too high.

The algorithms are given (dependent on the framework) a map and a 3d bounding box they should generate a settlement in. The algorithm should be able to run on maps of varying sizes - and should not run substantially longer than 10 minutes on a regular PC, and not exceed 2 Gbit of RAM for a single map. In the past we have usually used maps of around 256 by 256 blocks, that were generated by the standard Minecraft terrain generator. But the algorithm will be given the exact dimensions of the map when it is run and should be able to adapt to slightly bigger or smaller maps. For example, a competition map might be 200 by 300 in size.

The competition is judged by a set of human judges who are either members of the advisory board or delegates selected by the organization team. If a member of the advisory board or the organization team ends up submitting an algorithm themselves, they will be excluded from the evaluation process for that year, i.e. they will not be allowed to nominate judges or judge themselves.

The plan is to have all judges evaluate all algorithms and average their scores. If this is not possible, due to high number of submissions, there might be several evaluation rounds, where earlier rounds are used to reduce the number of submissions by evaluating a lower number of maps with only a subsection of the judges.

The judges will then evaluate all 3 maps for a given algorithm by spawning at the central point (for the x and z coordinate) of the map. While the judges are in creative mode, they are encouraged to walk through the settlement from a survival perspective. They are given a set of evaluation criteria (see Evaluation Criteria) and are asked to assign points based on the performance of the algorithm across all maps. The sum of the points is the score of the algorithm. The algorithm with the highest score wins.

New Evaluation Methods in 2021

For 2021 we plan to add two modifications to the evaluation in comparison to the 2020 maps.

First, we will include one larger map, possibly around 1000 by 1000 blocks. Here the challenge is to a.) make sure the algorithm still finished in the allotted 10 min. time window and b.) to figure out where to built on the map. Judges will spawn in the middle point of the map, and the generators should ensure in some form (sign, road, etc.) that judges are able to find the generated settlement on the map.

Secondly, since we want to move more towards co-creativity we will have one map that has already some structures build on them, similar to a player starting a settlement. We acknowledge that this is challenging, and are interested in how this can be dealt with. Participants are allowed to ignore, destroy, modify, or built over the existing structure, but we assume that judges will reward adaptivity to existing structures in their scoring.

Evaluation Criteria

We defined a set of evaluation criteria based on what we believe the challenges in moving towards more human-like settlement generation are. So, when evaluation the generated settlements judges are asked to score each generator in four categories: Adaptability, Functionality, Narrative and Aesthetics. For further details, read on at 'Challenges' below.

Chronicle Challenge

We are also still running the optional bonus challenge: Chronicle Generation. This is an optional challenge, that is evaluated separately from the regular competition. Contestants will have to indicate that their entry is competing in this challenge during submission.
For the chronicle challenge, the generator needs to produce a written book in Minecraft and places it inside the generated settlement – ideally in a place where it is easily found. The book should contain a text that is in some form about the settlement (in English) and contain some form of narrative related to the settlement or how it came about. The entries are evaluated based on how well the given chronicle fits the generated settlement and on overall quality. For further details, read on at 'Challenges' below.

Submission

See valid submission methods page to see all current methods.

Challenges

This section is about the specific challenges in generating a Minecraft settlement on a given map. We believe that these are some of the core obstacles that need to be overcome to move closer to human-level design. We should point out, though, that this list is not exhaustive. It is likely that there are other challenges and obstacles to get to human-like settlement generation. Furthermore, we consider the challenges outlined here ambitious goals to move towards, and do not expect them to be fully solved right away.
The evaluation criteria that will be given to the judges are based on these challenges, because we want participants to address these problems.

Adaptation to Environment and Terrain

Real-life human settlements are adapted towards their surrounding environment and terrain in multiple ways. On a per-building basis, houses and structures reflect the climate conditions they are built in. Furthermore, the environment of a settlement might also dictate the available resources for construction, and certain conditions might require specific types of buildings, such as irrigation, shelter, etc. A house in the cold climate of Edinburgh, for example, might be built sturdy, to protect against wind and cold and keep the warmth in. Likewise, the easy availability of stone might influence the choice of building material.

Real-life settlements are also adapted to the immediate terrain they are in. Natural features, such as mountains or lakes, play a role in the selection of where to settle. Some terrain features can be both positive and negative for a specific settlement, and settlements are often built to take advantage of the benefits and to compensate for the problems. A river, for example, might provide more food and added mobility via ship travel, but might also limit mobility by foot, and be a potential flooding hazard. A settlement might subsequently be built close to the river (or even more likely, at a good location to cross the river), to take advantage of the benefits. The same settlement might also build a dam to protect against flooding, and houses close to the water might sit on stilts. If the settlement dumps waste into the river there might also be a development of different districts, where better, more desirable houses are further up on the river.

On the other hand, humans change the terrain and environment in a limited fashion to better suit their needs. While it might be impossible to remove a mountain or an ocean, it might be possible to build a canal or tunnel.

In summary, human settlements are shaped by and in turn shape the terrain and environment around them. If we study human-built settlements in Minecraft, we can see that these principles are realized in some existing builds. AI settlement generators, on the other hand, struggle to adapt to environment and terrain. They often rely on flattening large areas and then building settlements that do not reflect the surrounding map at all. Similarly, the houses and structures built by them are often templates that get placed as a whole unit, and are in no way reflective of the environment they are in. As part of this challenge, we encourage participants to develop generators that produce different settlements for different kinds of maps, reflecting the available materials, surrounding terrain and environmental conditions. In particular, successful entries should generate settlement that fit into the topography of the map without changing it too much, and build structures that fit into the topography. We also encourage participants of the challenge to think of other ways in which the given maps influences the generated settlement, ideally in such a fashion that it is evident to a human observer what kind of adaptation happened. Ideally, different maps should lead to different settlements, and it should be clear in which way the settlements where shaped by the map. Also note, that there is some overlap with the other three criteria, as their particular solutions are also often ideally adapted to the underlying map.

Functionality from an Embodied Perspective

Minecraft is not just a creativity tool, but also a game. Subsequently, a Minecraft settlement is not just an aesthetic artifact; it also needs to fulfill certain functional roles. One big aspect of this is accessibility and mobility. Is it actually possible to walk through the settlement and reach its different parts? Are there doors into the buildings, are the bridges over the river? How easy is it to navigate the settlement? A second big function a settlement provides is protection from various dangers. Is the settlement well lit, or does it otherwise prohibit mobs from spawning? Does the settlement manage to keep dangerous mobs outside? Are there other forms of defenses and traps to protect the player? Finally, there is also a need to obtain food and process it - so is there an accessible way to produce food and not starve? This list of functional requirements is not exhaustive - it is just meant to give some examples.

This criterion does have a certain overlap with the challenge of adaptivity. Certain functionality only needs to be provided in some cases. For example, bridges compensate for reduced mobility introduced by obstacles. They are an adaptation to reduce the negative effects of the terrain. Other functionality takes advantage of given terrain features, such as river lock further enhancing the mobility of an existing waterway.

This should also be considered, not just from a player perspective, but also under the assumption that the NPC villagers living in the settlement have similar needs. There is crossover here with the next section, because some functionality displayed in typical human-build settlement is not functional in the strict sense. For example, in reality a lot of houses have pitched roof to ensure better rain water runoff. In Minecraft, this is not necessary (as rain does not pool on the ground), but players still build houses with pitched roofs. This narrative functionality alludes to a functionality we understand, yet is not strictly functional in Minecraft. We still encourage the inclusion of such functional elements. Ideally, these narrative functionalities should also be adaptive to the environment. So, pitched roofs should be more popular in a rainy swamp than in a dry dessert, etc.

In summary, the fact that there is an actual player in the world gives us an embodied perspective. The avatar can interact with the world in a variety of different ways, and a settlement can provide different affordances to the player. The challenge in this competition is to produce a generator that can ensure that the settlement provides a maximum of functionality and affordances for the player, while also satisfying the other criteria.

Believable and Evocative Narrative

Human settlements are not just collections of functional buildings, but they also tell a story about how they came about, who are the people living there, and how they see the world. When we look at human-created Minecraft settlements, we can often see how certain human or imagined cultures are reflected in the created buildings. There are cities that resemble ancient Rome, mythical Elven forest outposts, and modern US cities. Often, the buildings also reflect very clear narrative ideas, such as “this is a defensive mining outpost built in a harsh environment”, or “this is a capital city, built to impress foreign and domestic visitors alike”. These settlements are evocative, i.e. they manage to transport this story by looks alone. Relating to the earlier challenge of adaptivity, the better settlements also evoke narratives that work well with the terrain and biome they are in. The narrative they evoke should fit the terrain and environment of the given map, and ideally arise from it. Different maps should result in different narratives.

Human settlements also reflect how they came about. Medieval cores of modern cities, for example, tell a part of a settlement's origin story. This is something rarely seen, even in human-made Minecraft builds, as settlements here are created with the final state in mind. But procedural content generation does have a tradition of simulationist approaches, which would be a possibility for this challenge. An AI could simulate people living and building a settlement over several stages, rebuilding or replacing structures, or slowly modernizing them. This could solve several of the previous problems, as buildings and the overall settlement would be the actual result of an adaptive process, and the produce of an actual sequence of events forming the basis for a possible narrative.

There is also a certain overlap between narrative and functional requirements. How easy the player can obtain wood for building and further process it is a functional requirement. To satisfy this a settlement could have a nearby forest and a workbench nearby. But to make this work with a narrative of a settlement that relies on wood production it might also be good to build a structure that looks like a sawmill, and a street to transport the goods to town. This would not produce any additional functionality to the player (or the digital villagers), but it would tell a narrative that aligns with the functionality provided to the player. Similarly, there could also be elements that have purely narrative functionality, i.e. structures that have a believable fictional use that is not immediately reflected in the game mechanics. For example, a settlement could have an aqueduct to provide water, even though Minecraft characters do not need to drink.

To summarize, the particular challenge here is not just about narrative generation, but also about generating a narrative that fits with the generated settlement, and ensuring that this narrative is communicated to the player with the generated structures. Inspiration by existing, historical or imagined cultures can help to transport this narrative. The aim is to produce something that is both believable and evocative, while still being aligned with the previous criteria.

Visual Aesthetics

Aesthetics are arguably subjective, yet architects and city planners usually follow a range of principles when it comes to designing a settlement or a house. While untrained humans manage to intuitively realize these principles with some success, it is difficult to design an algorithm with automated aesthetic judgment. Existing Minecraft mods that add structures to the world circumvent this problem by hand-designing appropriate templates, and then building a settlement out of those templates. This solution has several problems: it allows for little variation between the buildings, as they all need to be pre-designed, and it also allows for little adaptation of the buildings to the surrounding buildings, the underlying terrain, etc. Buildings are sometimes parameterized, and hence reflect some specific environmental settings, such as available materials or the climate they are in. This makes them more adaptive, but there seems to be trade-off between controlling the exact look of a structure, and making it adaptable towards uncontrolled environmental factors. The challenge in our case is to ensure that buildings still follow basic design principles while being adaptive, functional and evocative.

There is also the further problem that the overall settlement itself should follow certain aesthetic rules. How buildings are aligned and what sight lines exist can play an important role for the overall feel of the settlement. Finally, there is also the question of how well the particular aesthetic expression chosen aligns with the other challenges. For example, a settlement which has a narrative of being a foreboding fortress, and is designed with that functionality, should also have an aesthetic that reflects this.

Bonus Challenge: Chronicle

While cities implicitly tell a story about their inhabitants, cities also often have explicit stories about their history. These chronicles contain notable events that affected and shaped the settlement, such as fires, wars of periods of vibrant trade. The can also provide a lot of additional context, such as what was the function or reason for the settlement during different time periods, or what ideas and philosophies have shaped the settlements development. They also often contain stories about important people that shaped the city. Basically, anything that could be written about a city and would be achieved in the city is appropriate.

For this challenge, your task is to create a chronicle that is currently stored in the city. It should be written as a Minecraft book, and should contain text relating to the generated city. This challenge relates back to several of our earlier criteria, such as adaptivity and narrative. The chronicle should be adapted to the actual generated city, and should the story of that specific city. The less generic this story is, the better. The chronicle challenge is optional, and entries will be evaluated based on the overall quality of the chronicle, and how well it fits with the different cities generated.

Examples

Here is a link of videos of good, human-created settlements that showcase some of the things we are looking for in a generator.

FAQ

Here is a short FAQ.

Entry Descriptions

Submission descriptions are taken from the user-input "about" box or written by the authors themselves.

Porter Hickey

Submitted by Alex Porter & Matthew Hickey, Computer Engineering Class of 2021, Memorial University of Newfoundland.
For execution instructions, see the README in the zip. The description below explains some of the design decisions of our generator.
We serialized several buildings from various publicly available Minecraft worlds to populate our settlement. These buildings include various houses, public buildings (churches), and outposts (barracks). Our building generator detects the biome where the specific lot (not the average for the whole settlement) is being built and changes the building's materials to adapt to the biome (e.g. stone to sandstone in a desert). This feature includes the ability to build any building over a river or ocean biome on wooden planks. The building generator favours flatter sections of the build area for greater adaptability.
For building roads between buildings in a settlement, Prim's Algorithm and A* search were used. First, Prim's algorithm was used to find a minimum spanning tree (MST) for all building plots in the settlement, then A* would find optimal paths along each edge of the MST and place the road. The roads are placed such that a Minecraft player can navigate by only walking and jumping. Along the path, streetlights were spawned randomly to illuminate the way. The nature of an MST for choosing how to connect the buildings in the settlement leads to organic-looking roads that give the sense that the road network grew along with the settlement.
A fence is built along the perimeter of the village for protection, but has gaps in the middle of each of the sides (this is buggy) so that people can enter and exit the settlement.
To add a sense of life to the settlement, villagers are spawned next to each building, and iron golems are spawned along the roads.
We had a lot of fun experimenting for our first GDMC, and perhaps in the future we can improve upon this submission, and implement features that we never got the chance to finish.

Brianna & Kyle

We aimed for a natural-looking settlement that adapts to the given environment as much as possible while also being functional for players and aesthetically pleasing.
First, our generator searches for relatively flat land in the given terrain and places a variety of different house designs in these flat areas. This helps to keep our settlement looking natural as we avoid altering the given landscape too much. Our houses include fully furnished interiors with useful items for players such as crafting tables for added functionality.
Then, we used the A* pathfinding algorithm with the diagonal manhattan distance heuristic to construct paths between the houses. Our pathfinding algorithm has a penalty for large height changes to avoid height changes greater than 1 block so that they are easily walkable by players. The paths also have a consistent width of 3 blocks wherever possible in order to improve the appearance of our paths.
Additionally, our settlements include features for adapting to different biomes and for adapting to water. For different biomes, the building materials for houses, paths, fences, and other decorative items change to better fit the biome they are in. For example, in desert biomes the houses are constructed using mostly sandstone blocks while in ice biomes they are constructed using mostly ice blocks. To achieve this, we iterate through a portion of the blocks in the given terrain, checking their block types and then determining the biome type based on the most commonly found block types. Furthermore, we check for water when placing houses and paths and if they are placed over water, they will be placed on a platform to improve the functionality of our generated settlement.
We also have a general theme of a gardening and farming village to improve both the aesthetic and narrative of our settlement. This was achieved through adding gardens, flowers, and other decorations related to the theme around the settlement. For instance, one of our house designs has an attached farm.
Overall, our generator produces a settlement that focuses on being highly adaptive to the natural elements of many different types of terrain. It is also quite functional for players and has several decorative features to improve the aesthetic and narrative of the settlement.

William, Selina, Ho Kiu, Rhys

Demo Video
Detailed generation technique: CO600___Generative_Design_in_Minecraft_Challenge.pdf

Cristopher Yates

This generator is an MCEdit filter (and several schematic files). Although there are three options that can be changed in the MCEdit GUI, I strongly recommend keeping them at their default values.
This generator uses Poisson Disc Distribution to get a bunch of pseudo-random points in the selected area (that are a specified distance apart), then places a bunch of premade schematics at those points. While it's doing that it keeps track of all the positions of the entrances of all of the structures, and after they're all placed it connects them with an A* path. There are some building-specific randomizations to keep everything from looking completely identical, and some additional details such as streetlights and the path block changing when over water.
This generator also simulates a specified number of families over a specified number of generations and generates certain details in the settlement accordingly (such as a cemetery that includes tombstones for all members of previous generations, family crests in the form of banners on each tombstone, and flags on each of the houses showing the family of the current inhabitants)

Keywarn

My generator uses an agent based method. Agents explore the area by themselves, labelling valuable building sites and the materials found in those areas. Builder agents then create buildings and structures, laying down roads as they go.
Due to the slightly computation-intensive nature of my agent based simulation (and a lack of optimisation due to time constraints), the generator only works on relatively small areas (to be under the 10 minute time-limit). Given a larger area, it will trim it down and only build a settlement in a small subset of the area.
More information and my thesis can be found here

aith (solo-team)

My entry is an iterative agent simulation that uses human-like behaviour to create organic settlements. It also generates a chronicle for the chronicle challenge! It uses Nils' HTTP Server.

For a detailed explanation, see the WIP paper draft!

I'll include an example save, where a large settlement is generated at position (88, 68, -52).
Big thanks to:

  • Max Kreminski, the academic advisor on this project
  • Nevas Buildings for their permission to use and edit their beautiful buildings!
  • Asiiah Song & Jim Whitehead for their TownSim generator, which largely inspired the road generation system!
  • Nils Gawlik for their http server, which let's me communicate with a running Minecraft process!
  • Blinkenlights for their optimization help!
  • Troy, Ryan, & Trent for their pathfinding code in their 2020 entry!

Nils Gawlik

With this generator my goal was to create something that makes use of image processing algorithms and explores to which extent they can be used for this competition. There are different steps to the generation process, but ultimately they are all variations of the same concept: Interpret the build area as a 2d image and then use image processing algorithms to transform it into something new. Basically all operations in this generator are done in this pixel representation, including operations which you might normally think of as generating discrete objects - like placing doors or building staircases.
This approach led to a cityscape which is more dynamic and chaotic then other methods which make use of a rigid structure or hierarchy. I made sure that the algorithm allows for 'happy accidents' like narrow gaps, walkways, overhangs and buildings that connect to each other, which are resolved by later image processing steps to their best ability, sometimes creating interesting emergent outcomes.
As the generator stands right now, it should be seen as a proof-of-concept, showcasing the viability of this method. The code is somewhat experimental, and lacks much of the attention to detail that would make the settlement feel more alive.

LIGC

Python

The World Foundry

This generator creates a dungeon settlement under the surface of the Overworld. The settlement is also a playable game environment, with the player tasked with recovering treasure and relics from the vaults in the deepest part of the dungeon.
There are a few techniques used in this submission:
1. The dungeon is modular 3D tiles, built where the underground is 'solid' enough for each room to be placed. The tiles are encoded within the script, and modified during placement. No additional files are needed. The lowest level of the dungeon is where most of the game-goal items are placed. The tile management system is part of the procedural framework. To my view, the dungeon compound resembles secret bases players make on PvP servers. The lowest level of the dungeon exposes the VOID as a gameplay challenge.
2. The game is a scavenger hunt for special artefacts described in the book at the spawn location in the centre of the map. I have provided the co-ordinates for clarity and leave it to the player whether they will use them in preference to exploring and hunting. The item management system is part of the procedural framework.
3. The Chronicle challenge is attempted with some light procedural elements, mostly centred around the provenance of the relics.
I hope you enjoy playing this submission.

Lisa

The main concept for this generator is to simulate the developing village as an entity with needs that can be fulfilled by the different buildings. The different needs that this village has are: food, housing, jobs, resources and social. The different buildings that can be built fall into two categories: the buildings that use the “house” template with different utility items inside, and the buildings that do not use the “house” template. Buildings that use the house template are: house (satisfies housing), cleric, crafter, smith, blacksmith and enchanter. All aforementioned buildings but the house satisfy jobs and resources in different ratios. The buildings with different templates are farm (satisfies food), fountain (satisfies social), and pasture (satisfies food and resources). A special case is the tower: it fulfills no function, but it is the first building that is placed during the simulation, and therefore marks the spot the village is growing from. It also contains the chronicle.
Every simulation tick the values of the needs go down by an amount depending on how many buildings that satisfy that particular need are already built, and depending on the simulated population of the village (three houses might be more than enough for two people, but for eight inhabitants that will be a small housing crisis). For the first building, a spot is chosen that is biased towards the middle of the map, relatively flat, and close to certain features that might be useful for starting a settlement (namely: water, cliffs, and/or lava). After that, for every type of building a number of different spots close to the already existing village will be examined, and the least expensive of these spots will be suggested to build that type of building on. For every type of building, the effect it will have on the needs of the village will be simulated and balanced with the costs of building that building at that spot. The best building that satisfies the needs of the village without costing too much will be built. If the population has crossed a certain threshold, there is a chance for a city wall to be build.
Because of the simulation-based approach, competing in the chronicle challenge as well was simple. Every time something is built some information about the reasons why it was built is saved. In the tower that is built usually at a central location, you will find a chest containing a chronicle. It specifies when all different buildings were built and why, as well as some statistics on the developing village.
This submission is part of a Master's thesis, in which the focus is on prototyping this type of simulation-based village generator. Therefore, certain parts of the competition that were not relevant to the research have been given less attention.

MAU_AE_JF

[NOTICE: this generator is not optimized to handle the 1000x1000 area (it takes several hours) it can complete the 256x256 area in approx 9 minutes on a home computer with a 3.6 GHz processor.Also if the settlement is far from the center of the selection of selection a white arrow above the center points towards the settlement]
Multi agent settlement generator
This generator uses several different kinds of agents which are traversing the world and suggesting changes depending on the type of agent. Its design is heavily influenced by Lechtner et al, procedural city mod paper (Lechner, Thomas, Ben Watson, and Uri Wilensky. "Procedural city modeling." In 1st Midwestern Graphics Conference. 2003.). We thought this was interesting to do for the competition because only a few have used agents previously.
The road system and the building yards are created with the use of three different agents. These are an “Extender Agent” which roams freely through the terrain and when they find a spot too far from the existing road network suggest a new road from its position to the closest existing road.
Then the second type, the “Connector Agents”, roam on the road network and evaluate if the distance from its own position to another sampled point on the road network is too long when traversing the road network. In that case the Connector suggests a direct connection between those two points.
The third agent dealing with the shape of the settlement is the Plotting Agents. These roam freely within the range of the road network and evaluate if plots of suitable size can be placed in the area where they are.
These three agents work to create a somewhat organic looking settlement and outputs a road network and a list of plots for the buildings to be generated.
Houses are generated on top of these plots, utilizing all of the area provided unless it reached a maximum limit of building size. The houses are a basic rectangle shape with a gable roof. A randomizer decides if the house will have another level. If the building has another level the stairs will be placed in the building in a non intrusive way. After it’s construction, an agent traverses an abstracted 2d array of the floorplan, placing furniture from a small pool of different furniture, the number of furniture is dependent on the size of the house. The floorplan is then fed back to the house generator to generate the specific block in the level.

Rainbow Parliament

Hello! We are a group of high school students from China!
The style of buildings we choose to build is futurism of soviet union. And we found several books about them and one of which is pioneer of soviet architecture
The main algorithm we used to generate the buildings is the Wave Function Collapse Algorithm
We tried to include dynamic generating probability to restrict the number of each kind of building that we will generate but that generally failed. However, we do think that it would be a interesting direction to think about (I haven't seen any related research about that. Maybe it is because I did not do the research deep enough)
Each tile would be either buildings or road, so the buildings have width of multiple of 9, for example, the library have the size of 27 * 18

We failed to include our chronicle in the chest inside of map, but we still would like to share this fascinating story with you guys:

In 1991, the world was shocked by the August 19 coup in the already unstable Union of Soviet Socialist Republics (USSR). The hard-line faction of the Central Committee of the Communist Party of the Soviet Union (CPSU), formed to prevent the "liberalization and federalization" of the Soviet Union by Gorbachev, General Secretary of the CPSU, and Yeltsin, Secretary of the Moscow City Council, marched the army into the center of Moscow on August 19, 1991 and declared martial law and a curfew, while the state security forces involved in the coup arrested and detained many officials deemed "threatening. "On August 20, due to liberal opposition and a prolonged standoff, the hard-line Soviet defense minister, Marshal Yazov, ordered "Operation Thunderbolt". The Emergency Committee immediately called on the independent and non-independent republics and armies to unite with the Emergency Committee in order to preserve the unity of the Soviet Union. The following day, serious bloody clashes between the army and citizens in the streets were brutally suppressed by the overwhelming superiority of the army, and order in the streets was restored on August 22. Gorbachev, who was scheduled to return to Moscow on the 20th, arrived at Sheremetyevo airport from Crimea in the early hours of the following day after hearing about the coup on the 19th, only to be arrested by NSDAP troops who had been waiting for him. Threatened by hardliners, Gorbachev declared a state of emergency in the country. With the General Secretary and the central government in the hands of the hardliners, the liberal wing of the Communist Party of the Soviet Union lost its power, and some officials fled to the West, while others who did not make it were imprisoned by the KGB in Lubyanka and the Gulag on charges of treason. The Central Asian steppes were home to Muslim communities. The Soviet Red Army's "stabilization" operations in Central Asia were much easier than in the nationalist Ukraine and the Baltic States, which were backed by NATO in the west. The Central Asian states and pro-Soviet Belarus, still somewhat nostalgic for the Soviet Union, were quickly stabilized, but an organized armed rebellion broke out on the Caucasus and European borders until November, and scattered guerrilla resistance in the forests and mountains continued into the following year. On September 1, 1992, after a series of internal conflicts and political purges, the battered and almost disconnected Soviet Union announced to the world for the first time that the rebels of the bourgeoisie, right opportunism and foreign intervention had been defeated. The Soviet Union retained all its territories except Estonia, Latvia and Lithuania, and Yanayev, the former Soviet vice president and hard-line political leader, became general secretary of the Central Committee of the Communist Party of the Soviet Union, while Gorbachev was imprisoned and exiled to the United States. The fragility and instability of the "new" regime led the Communist Party to adopt a tightly planned economy, the existence of the ruble was temporarily abolished, the concept of food stamps was reintroduced, and the country returned to the wartime communism of the Civil War. the huge Soviet economy a severe blow
On February 13, 1998, Yanayev resigned as General Secretary of the Communist Party of the Soviet Union for health reasons, and the post was handed over to Vladimir Klyuchkov, Chairman of the KGB and former member of the State Emergency Committee (the Group of Eight), while Vladimir Putin, 46, was elected Chairman of the KGB. On August 19, 1999, the eighth anniversary of the August 19 coup, Chechnya and Azerbaijan in the Caucasus were under the control of Western powers and the support of Muslim countries such as Iran declared independence from the union. The Soviet Union declared that it did not recognize the independent regimes and issued an ultimatum to the rebels - withdraw the declaration of independence or face repression - but the ultimatum was ignored by the rebels. on August 28, the Soviet Red Army invaded Chechnya and Azerbaijan, and in the first few months, the Soviet forces made considerable progress with superior numbers and equipment, but as they penetrated deeper and deeper into rebel territory, resistance became more extreme and intense, and with NATO military and personnel assistance, Soviet forces struggled in the mountains and the streets of Grozny, making the Caucasus on the Caspian coast the Soviet Union's second Afghanistan. At the same time, the invasion and intervention of the U.S. and other NATO countries in the Middle East countries led directly to a trade embargo against the West with members of the Organization of Petroleum Exporting Countries (OPEC) such as Iran, Iraq and Saudi Arabia leading to the third oil crisis, which had an impact on the West unprecedented since the previous two oil crises, but which also provided an opportunity for another Soviet revival later.
Two years later, in February 2001, the so-called "Caspian War" was resolved through the intervention and mediation of the United Nations, with the Soviet Union recognizing the independence of the two countries and establishing a demilitarized zone on the border. The loss of Chechnya and Azerbaijan's oil-producing regions at the expense of the Soviet people was a huge blow to the stability of Soviet society, with demonstrations and reactionary slogans demanding reform in the streets and even the intention of some of the constituent states to secede, while the government's response to these troubles was stretched to the limit by the economic depression and the inefficiency of the bureaucracy. As a former diplomat, Klyuchkov had frequent contacts with Western circles and an in-depth understanding of the advantages and disadvantages of Western social systems, and was therefore very committed to "scientific socialist" reforms to save the Soviet economy and institutions. With the active cooperation of Putin and other top officials, Klyuchkov then launched a series of economic reforms: compared to Gorbachev's reforms a few years earlier, he eliminated a great deal of government control and monopoly power over business, encouraged private enterprise, and set up experimental special economic zones in Siberia. In addition to the development of a market economy, the Soviet Union took advantage of the third oil crisis to export large quantities of oil and gas to the West from the huge oil and gas fields in Siberia, which filled the treasury, improved the economy and provided a large number of jobs, and even brought the prices of crude oil and gas on the international market down to lower than they had been before the oil crisis. In just two years, the Soviet Union emerged from a "wartime communist" society with a staggering 55% GDP growth rate. The streets of the Soviet Union were cleared of their former depression, people's living standards were booming, imported goods became readily available, and a large number of Siberian oil and gas workers and entrepreneurs in special economic zones became the national heroes of the new era. Siberia had a very important place in this great Soviet renaissance and made this barren tundra of coniferous forests an economic center of the western USSR on a par with the rest of the world.
Krasnoyarsk, on the banks of the Yenisei River, played an important role as a pivot in this great renaissance. On September 19, 2003, Krasnoyarsk was renamed Yenisegrad in honor and recognition of the city's contribution to infrastructure and construction.
As the economy took off, the newborn country returned to the world stage once again. The impression of a superior standard of living and economy in the Soviet Union became widely known through the experiences of foreigners visiting the Soviet Union and through the propaganda of the government itself. The country previously considered by the West to be the "source of the Red Scare" has now become a power comparable to or even more powerful than the United States.
When Klyuchkov died on November 23, 2007, Putin became General Secretary of the Communist Party of the Soviet Union and announced the launch of the First Decade Plan. Electronic and information technology developed rapidly during this decade.

Rexos and XeonoX

Ask me on Discord, we have a lot of things to say and not enough time to write before the deadline: XeonoX#8802

Tsukuba Team

This Minecraft Settlement Generator is generating a coherent minecraft village. In that village, there are unique interactions between villagers using books in their house. There is a system of death, with a death record in the village and a cemetery. In the Town Hall, there is a special book presenting the village, so feel free to get into the Town Hall first. Murders often takes place in the village, so be sure to look around for any clue.
Based on the size of the area the player has set, the program will decide if it will try to generate X village within there is Y Houses if the area is larger than 500 block. Then it will decide on the location of the first house of the first village. From that, it will then place houses at a random distance (but acceptable) from each other in connected area, discovering new chunk after an other and adding materials unlocked thanks to that. When the program decide to place a new house, it will look at houses already built and ressources available to then decide which house will be built. After building a complete village, it will try to implement in the world a new village if it's possible or if there is time left.
If you want to contact us for any question, you can do so via discord : Izzypizi#7987 Tamalou-Max#0432 Harckyl#0032

Beautiful_Kaaskoders

Our village is inspired by old dutch cities like: Naarden, Den Briel (aka Brielle), Hellevoetsluis, Leiden and the old city centre of Amsterdam. (and many more…)

It is generated as follows:
First, we look for the flattest area to build our village using the Beautiful_startingpoint filter.
Then, we take that area, flatten it and provide a (mostly) smooth transition to the rest of the world (which remains mostly unaltered).
The next step is to generate the outer walls and canals. For the outer walls and canals, we use two circles and jump between them randomly to create a shape based on the Renaissance style star forts.
When the final shape of the city is determined we reserve plots for the houses, both for single houses as well as blocks of houses that are built next to each other.
The houses themselves can vary slightly in dimensions, the number of floors, window layout and facade/roof-decoration.
For each house there is a 1/4 probability that it will have a randomly selected bright color like the houses in Willemstad, Curaçao. Otherwise, the houses will be made out of regular orange bricks.
When the houses are built the location of the bridges is determined using an evolutionary algorithm that minimizes the maximal distance from each door to a bridge.
Finally, some street lights and trees/bushes are added to improve the overall atmosphere/mood of the city.

As an easter egg to Leiden, we have added exactly one Iron, Redstone, and Lapis Lazuli block to the streets of our city (although some of these might be buried beneath the outer wall). All our filters have the prefix 'Beautiful_' to allow us to more easily find our own filters and test them, this also became a running joke during development, hence our team and generator names

Leiden University MGAI team 1

This code creates a procedurally generated city based on Eixample, Barcelona.
The program is written to work for Python 3.6 or newer. The required modules are listed in requirements.txt.
This script works combined with the Minecraft HTTP Interface.
After a successful installation the city can be spawned by running the main.py file, no arguments required. By default it places structures at origin 0,0,0 within a 128 by 128 horizontal space. This can be changed by setting the current buildarea with the `/setbuiltarea fromX fromY fromZ toX toY toZ` command in Minecraft.
In `main.py`, the variable `USE_THREADING` can be set to `True`. This will enable multi-threading, which somewhat speeds up the generation process. Due keep in mind that in very large building areas (eg. larger than ~200x200) this may slow down the process instead of speeding it up, and can even crash the Forge Minecraft server due to it being overwhelmed by requests.

CharlieMDRz

I expanded on my team's submission for GDMC 2020 named LesCharretiers. In summary, the steps of my settlement algorithm are the following:
1) Terrain analysis: height maps, biomes, water/lava surfaces, trees
2) Splitting the buildable area in several districts (w Kmeans) and determine which ones will become towns
3) Iteratively spawn parcels on arbitrary "interest functions" (based on the paper "Procedural Generation of Villages on Arbitrary Terrains")
3') Connect each new parcel to the road network and create optional road cycles
4) Clean the road network by removing unnecessary road points
5) Expand all the parcels as much as possible
6) Smoothen the terrain around roads and parcels (gaussian blur on the height map)
7) Generate all the elements

Hunternif

My project is a medieval castle generator. The current implementation uses something like gradient descent to detect mountains. Then it selects the biggest mountain and puts and arranges towers around the mountain's perimeter. The towers are connected together by walls. Finally, each tower has a smaller turrets built on top of it, placed at random angles and sizes. The last part was inspired and partly copied from Zivbot's Grand Castle Generator

Terje Schjelderup

I wanted to go for a top-down approach, like a city planner or architect would do for planning a new town or city. Going from the input world, to an area plan (where to put the town) to placing roads, filling out the area with more roads, splitting the area between roads into plots, and finally building houses (and maybe other structures) on those plots. The hierarchical structure of the generator resembles a layered network stack, in that each task of the pipeline acts only at its own abstraction layer, and changes at one layer mostly affects the layer below and above only. Hopefully this has resulted in a generator that is easily extended in the future, which I hope to do for future iterations of the GDMC competition.

ICE_JIT_ft_WFC

Some of you might want to but still cannot make a trip to Japan these days. Here we proudly present a solution to you through this competition platform. Into our settlements, we have tried our best to introduce all the very, very Japanese aspects and elements, including Japanese-style rowhouses, bridges, two-storied shrines, shrine gates, and five-storied pagodas + even hidden (transparent) Ninja treasure chests. Our settlements should also be mysteriously beautiful at night due to light up, which helps prevent mobs from spawning. This generator is a slightly enhanced version of our 2020 generator ICE_JIT, by introducing buildings generated by Wave Function Collapse (WFC).

Results

Entry Author Adaptability Functionality Narrative Aesthetic Overall Score Chronicle Quality Chronicle Fit Overall Chronicle Score Files
1 Brianna & Kyle 3.65 4.04 3.06 4.92 3.91 - - -
2 Porter Hickey 3.56 4.39 4.03 6.28 4.56 - - -
3 William, Selina, Ho Kiu, Rhys 3.91 5.59 4.29 5.71 4.88 - - -
4 Keywarn 4.07 2.29 2.00 2.97 2.83 - - -
5 Cristopher Yates 3.79 4.24 4.94 5.32 4.57 - - -
6 Nils Gawlik 3.51 4.72 4.99 6.37 4.90 - - -
7 aith (solo-team) 4.29 4.51 5.27 5.55 4.91 4.55 5.00 4.77
8 The World Foundry 1.66 3.22 4.45 4.31 3.41 5.30 4.60 4.95
9 LIGC 4.90 3.96 3.35 3.99 4.05 - - -
10 MAU_AE_JF 3.65 3.06 2.41 3.18 3.07 - - -
11 Lisa 2.91 3.37 3.46 3.37 3.28 3.64 4.73 4.18
12 Rexos and XeonoX 2.65 2.76 3.12 4.38 3.23 - - -
13 Rainbow Parliament 1.06 2.65 3.47 5.32 3.13 - - -
14 Beautiful_Kaaskoders 2.82 4.71 4.00 5.35 4.22 - - -
15 Tsukuba Team 4.68 5.72 5.60 5.37 5.34 - - -
16 CharlieMDRz 4.93 4.43 4.62 4.69 4.67 - - -
17 Leiden University MGAI team 1 1.47 2.21 3.06 4.35 2.77 - - -
18 Terje Schjelderup 4.32 2.50 2.63 2.99 3.11 - - -
19 Hunternif 3.18 1.18 2.71 4.09 2.79 - - -
20 ICE_JIT_ft_WFC 3.64 3.68 4.31 5.12 4.19 - - -
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License