This is it! The end of the semester and the end of this project. Discarnate and the whole Rats with Hats team has been absolutely fantastic in the face of the apocalypse and the loss of VR equipment, pulling through with one of the most polished production 2 games I've seen in a long time. However, this post isn't going to be about the game as a whole or the inner workings of the team, as that will come later once our trailer is done being edited. This post is going to go through my personal contributions to this project and team over the course of this semester, and yes, it is following a prompt for an assignment.
As the Lead Programmer of the team (both overall and for the Systems sub-team), I had a hand in almost every aspect of the game itself, but I also did a bit of administrative work, so I'll start with that.
Contributions
At the beginning of the project, we were only 5 people, and so our repository structure was very simple, and made our development more like waterfall than agile. After Greenlight, we added another 5 people, and divided into 2 sub-teams for Content and Systems. This meant that some big changes needed to happen within the repository. Since we were using Git, I decided to have everyone (or as many as possible) use the same GUI client (Fork) because it used to be free. I then decided to use Git Flow to help all of us transition from waterfall to agile. Git Flow is a set of Git script plugins to streamline the creation and merging of feature branches, and it made a night-and-day difference for our team. We were able to bulldoze through so many huge obstacles like not having VR headsets, or the world ending for a few months, or transitioning to online classes, and part of that success stemmed from the parallel development we were using. Another Git structure decision I made was to give artists their own branch that was completely unrelated from the project itself. This branch had no Unity project, and only contained 2D and 3D assets, which reduced the pressure on the artists since they didn't have to worry about making multiple branches or messing up the project accidentally. Overall, this whole system worked extremely well for the team. Of course, there were some issues like a massive merge conflict that deleted a bunch of stuff due to an outdated feature branch, but we got through it.
The last bit of admin work I did was to be more of a support character towards the end of the project. We have 3 programmers and 1 designer on Systems team, and at the end of the project we only had a few features running concurrently, and they were big ones. It didn't make sense for me to commit all of my time to just one feature, or to start a new one. I chose to be support for the other 3 members of the team, and I ended up helping our AI programmer Lance fix the newt AI in its early stages; our UI/Narrative/gameplay scripting designer Giancarlo fix a nasty UI-in-VR bug; our general programmer Nick implement multiple fluid physics libraries, among other minor things. This support role was mainly to reduce any impediments, such as figuring out the NVIDIA Flex wasn't going to work for our VR project due to performance, so I bought Obi Fluid, which is a more stable, performant fluid library.
As for my own code work, I was the VR guy. This includes movement, object interaction, and visual experience in VR. I ended up implementing both slide locomotion and teleporting, because I know some people get motion sick very easily with slide locomotion. Additionally, anything that had to do with creating object interaction was up to me, so I got to create tools that allow objects to have "sub-interactables". An example is our potion bottles: they have removable corks, but those corks can only be pulled out if the player first grabs the bottle itself. The tool enables interaction on the cork after receiving that message, and facilitates removing the cork and putting it back in. This tool was also used on the newt to remove the eyes. Some other SteamVR work I had to do involved actually modifying Valve's code to provide some extra functionality to our interactive objects. I did the same sort of modifications to some Obi Fluid objects as well, making those fully VR compatible. Outside of VR and fluids, I also did quite a bit of experimenting with rope physics, and even though it didn't end up making it into the game, it sure was fun to whip it around and destroy everything. Overall, I touched the majority of the code base in some way, and the only exception to that was the Narrative system since I know Giancarlo is a narrative system master.
Deliverables
As for deliverables, I was in charge of keeping documentation in order. Admittedly, that fell apart after Greenlight because of COVID-19 and the disruptions it caused. What we did end up with, however, turned out to be equally as good: individual documents for each mechanic! This way, the Content team was able to take our systems and tools, and follow easy instructions to implement them in the final scene. While it isn't as pleasing to the eye or to an executive, it works for developers. I also created the QA builds and the Alpha builds.
Mindset
My mindset for this whole project was to keep it realistic. At Champlain College, we tend to be way too optimistic about what we think we can get done in a semester, and my team was no exception. I wanted to make sure we kept everything really in scope, while still pushing us to get that extra 110%, and I think that worked out. As online classes started up, some of my colleagues were still thinking that we'd be able to have 2 full levels in the game, art and all. I kept pushing back on that, because I knew some of our team members didn't have a good living situation to work in anymore, and I knew that productivity was going to take a massive dive a few weeks in (which it did). The scope we ended up going for was one full level and nothing more, and we completed that goal on time, while still working almost right to the buzzer. Another thing I tried to do with my mindset during the quarantine part of this project was to make everyone else's life easier. We'd all been going through some really rough things, with quite a few of us getting displaced by Stay at Home orders, and all of us getting absolutely slammed with crazy amounts of work during our first two weeks of online classes (even the other professors were amazed at the sheer quantity). I wanted to alleviate some of that craziness by appearing laid back and relaxed during meetings, while still getting things done and setting high-ish goals. Above all, I wanted to appear motivated, even though I really didn't feel it at all.
Challenges
Where do I start? At first, we were developing specifically for Oculus, and targeting the Oculus store as our primary market This was a challenge enough, since I was the sole programmer, and hadn't done VR development before. Right after Greenlight, we lost access to our only Oculus headset, and then had to refactor the project to use SteamVR rather than Oculus's source, which was about a week and a half long, 20-30 hour adventure. Next, we had to get our hands on some Vive headsets to continue development, which was also a struggle. Thanks to an awesome classmate (thank you Chase you're a legend), I got my hands on a Vive to continue development. After that, COVID-19 happened, and transitioned us to online classes and working from home. That was, of course, the biggest obstacle of all. Kel, our professor/executive producer, thought that we'd scrap the project and try for something smaller, another proof-of-concept project. But we decided to keep pushing forwards. I think we made it through quarantine development through sheer willpower and the desire to see our ideas come to life in VR, which was a first for all of us. I'm still amazed that we accomplished so much in such little time, with so many big challenges.
Lessons Learned
I definitely got my share of learning from this whole experience. After being a Lead and making a lot of decisions, I'm now used to being in this position. I'm getting good at making big design decisions, way more confident in my Git abilities, and better at communicating with teammates about what needs to be done and why, which I've found is a big part of being a Lead. I actually feel really comfortable in this role, which I didn't really expect.
Keeping a consistent mindset is also something I learned throughout this project. At the beginning, we weren't sure about anything, and we didn't even know if we'd make it through Greenlight, but all throughout that uncertainty, and all the challenges we faced afterwards, keeping a consistently confident mindset helped me keep my sanity. That doesn't even apply to just this project, it applies to everything I did this semester.
On the technical side, this was my first VR development experience, and I learned about as much technical stuff from this project as I did in a few of my programming courses. VR development is such a unique space to work in as a programmer, and I think it offers a ton of hidden possibilities. If I had a headset of my own, I'd be experimenting a lot. Having exposure to multiple types of fluid libraries (Flex and Obi) also gave me some really good insights as to how fluids are generally done in games.
Comments