Monday, August 26, 2019

A look back at an old project

Concept


A couple of years ago, some friends and I were working on a side project designed to capture the feeling of games like Stardew Valley, but expand on the gameplay and exploration aspects.

Our initial concept was to include a large procedurally generated wilderness area that would be different for every playthrough. Items found in this area would also be randomized according to some rules, in order to reduce the advantage a player could gain by looking up information on a wiki.

For example: similar to Stardew, we wanted to feature a cooking system in the game. The effects of the dish created would differ depending on the properties of the ingredients the player includes, but the ingredients available are different for every playthrough. This means that some discovery and experimentation is required to cook meals that are optimal for the results the player wants.

Procedural Systems

For this project we were using the Unity Engine, which at the time has recently released an update to its built-in tile map system. I used these features to create a system for rendering connected tile textures
Terrain sprites by Max Alford
Connected tiles in-game

After this, based on a method from Jasper Flick's wonderful tutorials at catlikecoding.com, I used Perlin Noise to generate a ground map, and additional noise layers to lay down trees and clutter items. 

Underlying noise layer for terrain height
Voroni noise used for placing clusters of trees
Result of combining the layers

I also began work on the randomized items that would be collected on these maps, specifically herbs and spices. I used word lists and a handful of grammar rules to create names, and assign to them an appropriate sprite and a set of stats, which were written to a JSON file.
'Southern Golden Snakebloom'
Examples of spice generator output

Looking Back

Unfortunately, the project fell to the wayside due to scheduling conflicts between my team members and I. Due to this, some of the planned features, such as large-scale terrain objects, additional clutter layers, and generated descriptions for items were never finished.

If I were to do this project over from scratch, I would plan out the terrain system in much more detail, using concept art and an analysis of the gameplay requirements of maps to inform the generation methods I use. I would also work with the rest of the team on gameplay and character control before diving too far into any procedural system. This way, the generated content can be properly tested, and the requirements better defined, before too much work is done on procedural systems that are discarded due to not meshing with the mechanics.

Sunday, August 18, 2019

Introduction

Who am I?

I am a hobbyist game developer with a focus on C# and the Unity engine. Most of my projects feature some kind of procedural generation, and many are more like generative art than they are games.

Procedural cyberpunk cityscape

Satellite tracker using data from CelesTrak.com

Plant using a procedural mesh

Other than C#, I have developed applications with Python and C++, and explored different sub-fields of computer science such as 3D rendering and machine learning.

Many of my older projects, both solo and collaborative work, can be found on github or itch.io (links at the top of the page).

Recently I have begun learning Blender and Substance Designer so that I can improve the visual quality of my Unity projects.

Purpose of This Blog

I intend to use this website as a record of progress on my projects, to keep track of work done, to explain what I'm doing and why, and to document technical challenges I encounter and how I solved them. My goal is to post at least once a week, summarizing everything done since the previous post.

If you have any questions about my work, feedback, or if you want to collaborate on a project together, you can leave a comment here or email me at [email protected]