Jimmy Griffiths | Programmer
Avery Dibble | Programmer
Josh Mahler | Programmer
Max Johnson | Designer
Brad Ellis | Designer
Jared Ciano | Designer
Alexis Wilson | Artist
Jonah Vita | Artist
Stefan Marshall | Artist
Boot Sequence was our Production II project, done in Montreal.
Boot Sequence is a co-op roguelite where players play as a party of knights and wizards who have found their way into an ancient technologically advanced facility. They find some special boots which they can use to help them fight against the hordes of angry robots.
My responsibilities on this project included everything related to level generation, repository management, and the art pipeline.
Levels were generated using the Wave Function Collapse algorithm.
Wave Function Collapse is a common heuristic used by humans. In fact, it's almost like solving a game of Sudoku. We start with a set of inputs, and a blank slate for output. We initialize everything in the output to be everything, since we haven't solved yet. Then, we begin solving by collapsing all possibilities at one point to one thing, propagating the changes of that out.
If that didn't make sense, don't worry. The idea is based on quantum physics theory where a "wave" that encompasses everything collapses down to one thing when observed at a point in time.
To give a more concrete example that helped me at first, imagine planning a wedding. You have a bunch of guests, and need to give everyone a place to sit at dinner. But, you don't want to put Grandma Jo next to Uncle Jim, because they'll argue incessantly. And you can't put Grandpa Bill next to Uncle Jim either. And, there are a few people who probably shouldn't sit next to Uncle Jim.
So, you write out a list at the table. Right now, everyone could possibly sit here. To start, we can just solve for Uncle Jim. You put him in a seat, and by doing so, remove Grandpa Bill and Grandma Jo from the possibilities of sitting near Uncle Jim. Now, at this table, we have some other possibilities that should be pretty easy to solve, so we can keep solving and propagating these changes across the seats.
Above, you can see the inputs for our level generation. Each texture represents a part in the physical world. But, we use these small cubes with textures on them, because it's easier to set up connections - the way that we know what can be next to where.
I set it up that way so that designers could just go in, make one environment piece to represent one of these, set the connections, and the algorithm would take care of the rest.
Below, you can see an example of what a level generated in this way looks like.
And then, with the mapping system I set up, it looks something like this:
I worked with other programmers to ensure optimization of code.
Managed to repository. Removing unnecessary files, keeping branches together.
Worked on overall architecture
Worked with artists to make sure models and animations got in.
Worked with artists on optimization of art assets and post-processing effects.