Windfall
This game was the final production of an internship program called Dadiu, in which students from different universities spend a semester together as a game studio. In the 9th semester of my master's program, I had the opportunity to complete an internship and felt it was the chance for me to expand my horizons. As I was already strong with Unity development, I got immediately recruited to one of the teams. We were 18 in total: 4 Unity developers, 7 3D artists, 2 gameplay designers, 2 audio designers, 1 QA tester, a producer, and a director.

During the internship, we received tutoring from industry professionals and lecturers from Triband and Io Interactive. We produced two games during the internship, and Windfall was the final graduation project that took 6 weeks. The whole experience was hectic and chaotic, but I got to do it with the new friends I made, not just on our own team. The interaction with other teams provided plenty of friendly competition and support. The showcases were the highlight of the whole experience. Everyone sat down in a cozy circle to check out the games other teams made.
​​​

We had limited time to make the graduation game. Therefore, we created a common vision for the Windfall gameworld that is interesting to design, develop, and play. The highlight of the game was the floating islands, which had their own distinct atmospheres and secrets to explore. The unique game world and fluent traversal create a game that gives players a sense of flow while scratching the exploration itch. No island was ever the same, due to our procedural generation system.
​​​​​

The Unity developers' task was generating the floating islands, trying to follow the art director's vision and the sketch examples. We first defined a set of technical features for the islands:
-
The islands have a center of mass.
-
There might be disconnected elements and holes.
-
There should be multiple elevation zones, such as mountains, steep terrain, and low valleys.
-
The bottom part is a mirror image of the top.

Next, we split the island generation process into three parts: 1) generating the 2D outline of the island, 2) turning the 2D outline into a 3D surface, and 3) finally adding the bottom of the island. We implemented a game of life algorithm that grows organic shapes using a set of cell-based rules. Iteration time, number of neighboring cells required to survive and grow, let us control the types of shapes generated.

The 2D shape was converted to a 3D mesh by displacing the height of its vertices. This was done by blending three levels of Perlin noise. Large displacements created the big mountain areas and low valleys. Medium displacement added definition and detail. Finally, small-scale displacements created surface imperfections and details.

The island was made whole by replicating the top part and stitching the two meshes together using Unity edge detection. We used shader graph to texture the islands. A system evaluated and assigned textures to different mesh areas, based on steepness and elevation. For example, a steep mountain area was textured as rocky, while flat areas were textured as grasslands.

We combined several of our previous ideas to populate the islands with game objects. Object groups were assigned based on elevation zone, so we don't suddenly spawn houses at the mountain top. To arrange them in a nice and organic setting, we used the barnickling principle. The very first object was a landmark, so big objects spanned first. Around landmarks, medium 3D objects spawned. Finally, around medium objects, there spanned even smaller ones. Using the algorithm, we could create different spread densities by controlling the allowed distance between objects.

We supplemented procedural generation with hand-built gameplay sections, as designing a system to generate meaningful, flowy platforming sections needed more time, Unity developers, and ideally both. Placing handmade clusters as the landmarks using the procedural generation algorithm was the natural solution.