12 Games in 12 Months, Game 1: Week 1
12G12M 1GAM programming
Week one is done. It wasn't that long, only 3 days really, as on the New Year I wasn't working, due to it being a day off. I had unfortunately bit more things to do than I anticipated - to be precise I had to do coding for my day job over evenings and even on the weekend, but I found some time to write game.
The goal for the first week was simple enough: Write a minigame in which you move around with a marine, and shoot monsters that follow you and want to eat you. The assumption was that if there will be not enough time to add more features, I can always take the minigame and polish it properly. As I have written in the previous entry, the goal was to have marines walking on planet, but implementation took bit more than I had time allocated for it, and so that feature has been cut. After all, what's the point of having pretty looking game if it's unplayable?
So, CUT CUT CUT! Gameplay is all that matters!
Speaking of making a playable game - how do you get there from nothing? If you're making a one evening game, it's easy to keep things under control, but on longer projects, especially if you make them with other people, it's good to have some kind of a plan. What I usually employ is a methodology called scrum. To keep it simple enough: the creation of the game is divided into short time periods called 'sprints'. Why are they called that? No idea. But let's not dwell on that. Each sprint has certain set of goals that must be met. These goals may be 'implement shadows', 'create sounds for Boss #2', 'add death animation to Blob enemy', or whatever you can think of. It's good to keep them simple, as this way you can really see the progress. Writing 'programming a game' as a task sort of defeats the purpose, as you can't really see any progress for too long.
Usually when you meet IRL with people you work on projects, it's good to have real life board to display the progress, but if you're working with your online friends, you don't have such luxury. What comes handy then is some online software for tracking the project status. In our project we use Trello , which I used at my day job already, and quite liked. It gives you good enough overview of what's going on, and labels to give quick visual feedback on what each task is about. Here's screenshot of one we're using:
Each of the coloured labels has a different meaning:
- Green label is anything related to programming. If you see this label on a task duplicated by task with another label, it means coding backend for it. For example enemies need both graphic part (models, animation, textures), and coding (AI, spawning, interaction).
- Yellow label is anything to do with graphics. 2D and 3D objects, menus, concept art, or animations, it goes all here.
- Orange label is sounds. Music, SFX, voices go here.
- Red is design. It's a catch all for both things that need to be still polished or designed, and general Quality Control. Sprints fall under this, as finishing a sprint means passing quality check to see if it actually works.
- Purple means temporary. Tasks with this field means that they only have to implement certain part of the full task to be 'good enough' for current sprint. Usually it's better to divide the tasks to give as clear distinction between what needs to be done and what doesn't, but I use this to give whoever is working on the task some leeway - if you can implement more features, great. If not, just implement the minimal amount, and we're still on the path to finish game without any delays.
- Blue means that task is to be done for the current sprint. Simple as that.
As you can see, the tasks are divided into couple lists: To Do, Current Sprint, Doing, Done, and Final. The distinction is as follows:
- To Do has all the tasks that need to be done to finish the project. Obviously listing all of them at the beginning is nearly impossible, but here's where all the tasks that are thought up start.
- Current Sprint is tasks that need to be done during this sprint. They are technically the same as 'To Do', but this distinction helps them to not drown in the sea of other tasks for the game, and it means they're easier for people to browse.
- Under Doing you put whatever feature you're working on at the moment, so that your friends can keep track of what you do, and if you are on your own, it's a quick reminder of what you were doing, so you can resume where you left off on previous day.
- Done is a feature that is completed for current sprint. Feature put here needs to be tested, and from there it can move to 3 places: 1) if it's not good enough, it goes back to 'To Do', and needs to be re-done in some sprint (preferably current). 2) if it is good enough, but it's temporary, the description of the feature changes to reflects that, and is put back into 'To Do', so that it can be fully implemented. 3) if it is good enough and not temporary, after the sprint is checked, it moves to 'Final'. Congratulations, you're one step closer to completion.
Doing this (like writing a full Design Document) might seem unnecessary to some of you, especially if you work alone, or think it's just a dumb waste of time for things that aren't game development, but make no mistake - this does make the workflow smoother, and if there's even two of you, it does help a lot. So give it a try, and if you like it, write me a line. I'd love to hear about your experience.
Oh yeah, I also bought a sketch book and couple pencils (2H, 2B, and 2x HB), and I will be studying drawing in my (definitely slowly disappearing) past time. I want to get better with 2D art, especially to be good at concept art. I know it takes years, but I'm not backing off. Oh yeah, if you know of any good online course (especially free online course ;) ) or videos on drawing, I'd gladly hear bout it as well.
Well, that's it for today. Next week is looming already (no, really, it starts in 15 minutes here), so I better go to bed. This week it's time to implement nearly all elements of the gameplay. See you then!
So far in the series 12 Games In 12 Months:
2. Game 1: Intro
3. Game 1: Week 1