My junior year at UC San Diego, I was lucky to have been able to take CSE 125, a course on Software System Design and Implementation. The goal of CSE 125 is to experience the design and implementation of a large, complex software system with a team. Over the course of 10 weeks, the group is to complete a real-time, 3D, multiplayer game that communicates across networks and demo it for the final.
The first thing we did was establish a team and our roles. My team, Butter*, consisted of Jennifer Fang as the Project Manager, Trevor Pottinger as the Development Lead, Thinh Nguyen as the Head of Graphics Rendering Engine, Yixin Zhu and Arick Chow as the Heads of Graphics Physics Engine, Rohan Halliyal as the Head of Game Logic, and me as the UI Specialist and Design Lead.
I was lucky to have been placed in a team of people that naturally got along and shared the same vision as everyone else. Upon our first meeting, we knew that we wanted a WebGL game that was simple yet addicting. After much discussion, we settled on "French Maid," a game that would consist of players running around a house sucking up dust mites.
Being the Design Lead was actually more time consuming than I thought because the physics team is dependent on your work. I immediately went to work, making models that the rest of the team can temporarily use for collision detection.
As collision detection, particle systems, and networking were being developed, I began doodling concept art and creating dummy home pages with HTML and CSS for the team to use as reference. It was around this time that we decided to change the concept to include dust bunnies instead of dust mites, and the name of our game to "Dust Busters" instead.
When this was done, I began modeling the different characters for the game. I used AutoDesk 3Ds Max, a free 3D modeling and rendering software, to shape the main player model, bunnies, and house.
Once my models were shaped, I used Photoshop to texture them. Texturing proved to be a difficult task because I was not familiar with wrapping and how it worked. Wrapping is the process of applying a bitmap onto a 3D surface. This process can be rather difficult because the shape of the 3D surface can distort the images mapped on the model.
By Week 5, I had finished the bunny and character model and it was up to Yixin and Arick to implement them into the game. While they were doing that, I helped Trevor with networking and learned a thing or two about websockets, a type of web technology providing full-duplex communications channels over a single TCP connection.
The game was at its bare minimum by Week 7. So the team split off to work on different features. Jennifer worked on implementing a more complex environment, Thinh and Arick worked on better camera control and game play, Yixin worked on a better AI algorithm for the dust bunnies as well as a power-up feature, Trevor worked on optimizing the network, Rohan worked on implementing a chat and display name feature, and I worked on further stylizing the general user-interface.
I ended up stylizing the home and instruction pages even further, adding doodles and moving clouds to give the game a more child-like appearance.
It was crunch time by Week 10! Time to perfect and refine everything! It was time for Yixin, Trevor, and I to import animations into the game. We were unfortunately unable to import the main character's walking animation into the game itself because it caused a problem with the collision detection machine, but we were able to program vibrations when the character activated the vacuum cleaner and a shrinking effect to the bunnies when they were caught. A few more things we added this week were more sound effects and a better "End Game" screen.
Finally, it was the day of the demo. Our game ended up receiving many comments for its sheer simplicity and its ability to be shared across networks. We were the first group ever in the history of this course to tackle a web-based game. Other games required users to download the game on their own device to play, but our game only required Google Chrome and a link to a website.
Overall, it was a crazy, hectic, stressful, but GREAT quarter. I’m happy and sad that the quarter is over. I'm glad that I can finally catch up on some sleep (I pulled three consecutive all-nighters the days leading up to the demo), but it's hard to believe that I won't be going in CS Lab 220 anytime soon! Not to mention, I'm a bit bummed that the friends I made this quarter are all leaving me to graduate! Bittersweet, yes, but I think in the end, everything went smooth like Butter*.