Monday, 23 November 2015

Reflections on a practice production


As you may or may not know I study game development and have just finished up my first year. Our final assessment piece was a practice production which ran for around 5 weeks. There were a few different themes to go by but we ended up with "4 player pub game". Going with this theme we created a cartoonish vehicle melee combat game named "Lava Dome Derby". The entire process was incredibly eye opening, and if you are planning a career around any sort of programming, I highly recommend doing something similar.

In the beginning...

The first thing we did was have a meeting as a group during lunch to discuss ideas. It didn't take long to reach a consensus that a car based combat game would be the way to go. Reasons included simple mechanics and the fact that unity came with a car controller out of the box, saving us programmers a lot of effort (however this turned out not to be the case as you will see soon enough). This was a fairly informal discussion though some basic notes were taken and contact details were exchanged. 

After this, we briefly split off to our separate classrooms. I started reading up on the unity engine, the other programmer started investigating the car controller, the artists started working on some concepts and the designers started organising our first proper meeting. 

The original concept had 4 unique vehicles

The first true meeting was focused on scope, schedule and preparation for presenting our pitch to a potential client (in this case, the teachers and staff). After our pitch we received feedback saying that our core ideas were solid, however the scope was probably too large considering the small time frame and it was suggested we stick to one polished vehicle as opposed to 4 average ones, which we agreed with. In the end we decided to go with the punching glove car.

The original arena concept featuring ramps which were later removed for misbehaving

Enter Production phase Alpha

This is where the tears and heartache start. Immediately on implementing the car controller we ran into a pretty nasty bug. If the player held the brake key long enough to bring the car to a stop, it would never start again. After a lot of digging, googling, and slamming heads against desks we admitted defeat and asked our Almighty Wizard of a teacher to try and help us out. After many confused looks and head shakes, he found the problem. It turns out the code that is shipped with Unity was bugged. There was a missing "else" statement that was supposed to reset brake torque...

It was around this point in production where I suffered several hard hitting incidents one after the other. This led to a decline in my mental and physical health which greatly affected my attendance and contribution to the team. Its the things you don't expect that can hurt a project the most. Never the less the group persevered and made excellent progress, implementing all core gameplay elements.

Enter Production phase Beta

The beta phase of production was where some cracks started to show in the teams foundations. This was the beginning of a rise in tension and breakdown of communication. Design specifications started to become vague requiring basic things to needlessly be redone several times, Artists were adding assets and changes without clearing it with anyone but each other, the designers were not seeing eye to eye on a few things and I was still absent quite a lot. However, having said that, we were still rather productive. The ramps were removed because they caused issues with collision and took up too much space. The power up system was also scrapped and replaced with a boost ability which had a 3 second cooldown. This greatly improved gameplay and added to the pace.

Another bug was discovered with the unity car controller, this time involving the reverse torque (we didn't get time to fix this either). Last and definitely not least, the map was redesigned based on feedback from both external play testers and in house testing. It was looking as badass as ever and featured a dropping centre platform that would end you faster than you could say "oh shi-". This gave the map a much more dynamic feel and added an extra gameplay element which forced you to be on your toes.

Behold, the glorious Arena v2

Enter Production phase Gold

As we entered gold we were starting to fall behind schedule and the teams patience was really put to the test. The previously mentioned tension and communication issues started to grow along with the project size. At one point we were working on about 4 different builds with no version control. This again caused things to needlessly be redone (The menu specifically comes to mind) and big changes were being made without everyone being informed.

Though it wasn't all bad news!

There was a game swap day prepared where the teams got to swap and test out each others game. We received some pretty conflicting, but overall, positive feedback. I wasn't there for that event but the other programmer introduced the tweaks that were requested.

Dawn of the final day, 24 hours remain

The map was once again redone, this time adding platforms around the edges that could also drop after a warning light went off and walls around the edges which could be exploited with the boost. While I wish this wasn't literally done on the last day, it did make a big difference and I was quite pleased with it, though it did initially introduce some problems with collision and causing wheels to get stuck (Though these were later resolved post production). I spent the rest of the afternoon adding the menu, UI tweaks, game timer, and victory screens. Lastly I merged all the builds together and added some public variables for the designers to tweak before heading off to provide support from home.

The final dome design

So what have we learned?

  • For the love of god use github or any other version control software, not google drive.
  • Use UML diagrams and flowcharts effectively. I know they are not fun but they really do help.
  • Be realistic in terms of scope verse time.
  • Have lead roles. This would have drastically reduced communications problems and helped maintain a constant and obvious direction.
  • If you are having problems, get help, don't cave.
There are more things but I haven't slept much these last few days and would like to remedy that. 

One last thing, despite all the negatives, we did way better than I expected and I am very proud of the team!