Scrapped

Steam
Published on:

SCRAPPED is a first person simulation game where you work as an "art-generator" at Gestalt Industries. Make collages based on commissions delivered to your anachronistic computer, using more than a hundred assorted pieces of media to meet these requests. After work, chat with your coworkers at the "Digital Water Cooler" - under the watchful eye of your superiors.

Showcase Video

Developed with: Unity, C#, Perforce

Development time: 6 months

Team size: 6 people (hybrid)

Over a strict 6-month development period, my partner and I took Scrapped from an idea through prototyping, successive rounds of development and iteration, and dozens of user tests up to a full release on commercial platforms. Throughout development I acted as designer, engineer, interface designer, QA researched, artist, and marketer, with my main responsibilites being the development of core game systems. My design partner and I divided ownership of the key mechanics - I primarily designed and built the main collaging gameplay, the unlockable art library, and the general game flow / progression.

Code Sample - Creating Dev Tools

We designed the scoring system to compare the images used in each collage against the prompt using a series of tags, meaning our small hybrid team needed a way to easily assign - and edit - dozens of attributes attached to hundreds of images. To accomplish this, I built a system to load these images and their associated tags from spreadsheets. This allowed myself and the rest of the team to quickly and efficiently fill out content for the game directly in the spreadsheet and rapidly test new additions.

Each image has a four predetermined attributes - a name, category, source link, and filepath - as well as a variable number of the tags used for scoring. These attributes are processed in the following function:

public void LoadArt() //loads artwork from the spreadsheet, generates Artwork ScriptableObjects from it, and stores them in a list
{
TextAsset tags = Resources.Load <TextAsset>(currentReelName); //load in the spreadsheet
string[] lines = tags.text.Split('\n'); //split the spreadsheet into lines
for (int i = 1; i < lines.Length; i++) //for each line in the spreadsheet:
{
string[] words = lines[i].Split(','); //split the line into individual cells, by splitting on a comma
Artwork newArt = ScriptableObject.CreateInstance <Artwork>(); //create a blank SO
//assign fields on the ScriptableObject:
newArt.name = words[0];
newArt.texture = Resources.Load <Texture2D>(words[3]);
//assign tags on the ScriptableObject:
for (int j = 4; j < words.Length; j++) //for each tag on this line
{
if (words[j] != "" && words[j] != String.Empty) //sometimes the spreadsheet has blank cells, so this weeds them out, which improves performance in later functions
{
Artwork.Tag currentTag;
if (System.Enum.TryParse <Artwork.Tag>(words[j], out currentTag)) //if this is a valid Tag
{
newArt.tags.Add(currentTag); //add it to this artwork's list
}
else //since only valid tags get passed through, an invalid one doesn't affect the player - but we still want to flag it so it can be fixed.
{
Debug.Log("FAILED TO PARSE TAG '" + words[j] + "', at Row " + (i + 1) + ", Column " + (j + 1));
}
}
}
allArtwork.Add(newArt); //add it to the list of all artwork ScriptableObjects
}
}

In fact, loading from a spreadsheet worked so well that we decided to adapt that framework to run the dialogue system as well, which enabled us to expand the team and work with a writer who had no experience with Unity.