Making Mario 1-1 in MonoGame
What I Made
I remember playing the original Super Mario Brothers after I found my parents’ old NES in our garage one summer. I put many many hours playing the iconic game but I never beat it. I became obsessed once again many years later.
When I was in my 3rd year of college, I was tasked of working with a team of other students I’ve never met before to make Mario level 1 world 1 from scratch in a language (C#) and game engine (MonoGame) none of us had ever used before.
Why I Made it
As part of my Computer Science degree at Ohio State I had to take a “project” class. I could choose from three options and I went with the game design project since I had never done something like that before. I learned a lot more than I could have imagined.
What I learned
First, we had to learn C# and all of it’s oddities. The language proved to be easy to pick up but switching between languages between my other classes caused a lot of dumb errors and non-standard code. I grew to really like C# since the documentation was thorough and the object-oriented tools were really intuitive to me.
Next we learned project management. Five busy students with other classes and jobs is a great environment to learn how to collaborate. We used Microsoft tools to manage everything and we had in-class meetings with our teacher to guide us.
The biggest thing I learned was that each member of the team needs to document what they are working on to an extent that if they disappear, someone else can pick it up without much effort. This became relevant to me when one of our group members suddenly dropped the class without any warning. Our group fell way behind in our sprint since 20% of the work was suddenly unaccounted for. After that, we all were very specific in our assigned tasks and talked frequently to make sure at least one other person understood what we were working on.
The last and most time consuming aspect of this project was actually using MonoGame to make Mario. I focused on the game physics and level creation. These ended up being very intertwined because there were many bugs related to the collision in the game that caused me major headaches. Once we reached the last sprint, I finally ironed out the, sometimes hilarious, collision and physics bugs. I was only able to work these things out once I sat down with my team members and talked through what they had worked on in order to understand how my contributions interacted with the rest of the game. This taught me that sometimes over-abstraction is counterproductive.
In the end the remaining four members of our team because close friends. We had a great time hanging out late at night working together in a Discord call.