Now that I've finished Game #1, I can look back and point out the things I did well and the things I did wrong. I find it easier if I talk about what I did wrong first.
What I Did Wrong
I picked a bad time to work on it
The past 3 weeks were some of my busiest yet, so throwing this game project in there was not a healthy choice. I think I overworked myself for the last 2 working days. I exceeded my allotted time by a day, which is a pretty serious issue, since the whole point of this project is to teach myself discipline and management skills.
I didn't allocate enough time for sound
I always knew from a technical standpoint that sound was going to be a breeze to put in, but picking the right sounds took longer than I thought. This was one reason I went over 7 days; since I was already past that point, I thought I might as well make a song to go with it. That was more of a relaxing endpiece than a stringent requirement.
I considered dropping sound completely, but I considered it too important. I think the sound added greatly to the aesthetics. I couldn't imagine playing it without the clicks, beeps and drops. Next time I will work on adding placeholder sound earlier in the game's progress, to keep me thinking about it and to get a better gauge of what sounds are working well.
I didn't plan out the gameplay details enough
I wasn't exactly sure what the gameplay was going to be like until maybe the 4th day. Prior to that, I was sort of expecting a Tetris-like endurance match, with randomly generated levels. It ended up being more of a puzzle,which made me wish I designed the framework of the programming a bit better. It is generally structured pretty well, but in the last 2 days it got really messy with me trying to just get everything working. I basically ended up making almost every member variable public, which I guess isn't that big of a deal for a 1-man week-long project, but I wanted to maintain good programming practices for this project, since that kind of sloppiness will slow me down in the long run for a bigger project.
Never ever use 1-indexed anythings
Another programming mistake: some reason in my mind I started indexing the columns and rows of the game grid at 1. I thought it would be intuitive, since the actual user interface made more sense with a 1-indexed system. It felt better to say, "drop a block in column 1" rather than column 0. I shouldn't have let this carry over into my programming, because the whole system ended up really inconsistent, with arbitrary increments and decrements everywhere. It caused quite a few out of bound array errors.
I didn't put enough time into level design
Had I known that this game was going to be puzzlely from the start, I might have put more effort into the levels. I think there were a lot of interesting level varations and strategies that I missed because I didn't give enough time to think about them. A related problem is that I had no idea how to scale the difficulty. I was so used to the game by then that none of the levels were any challenge to me. I didn't realize it was difficult until my roomate came in and struggled with the first few test levels. For the record, I can beat hard mode in about 4 minutes.
I didn't do enough work early in the week
Although I'm sure this is a universal problem, most of my work was heavily skewed towards the last few days. I wasted precious time early on, thinking I had everything on schedule. I planned out those buffer days in my schedule, but those were completly obliterated. I spend my first day just sketching a rough design document and thinking about some of the gameplay ideas. My last day was a 14 hour coding marathon. Unless I'm making a really well-though out design document, I should have some programming started by day 1.
What I Did Right
I'm glad I used HGE
I'm really happy how well Haaf's Game Engine worked. It was extremely simple to use, and has great documentation and example projects. I think it'll be my tool of choice in the future if I ever need to make a quick 2D prototype for an idea. Playing a sound only takes a single line of code. Making those waving flags was a breeze. All those particle effects were simple to play with, and came with a nice particle effect editor. Even the water was very easy (it's just a variation of the flag wave).
I did overlook a few features, though. I ended up spending a few hours writing a resource manager before I realized there was already (a better) one implemented in HGE. I'll need to keep in mind to skim through all the features of the tools that I'm using.
Whiteboards are awesome
I have a nice, large whiteboard on my wall, and it really helped me plan out my attack for each day. Here is what it looked like for a very busy Day 7:
The physical act of writing down things helped me get in the flow of work better. It also broke up the monotony by forcing me to stand up and walk around a bit. Also, it makes the process feel more professional, which I think gave me a small increase of motivation.
I cheated on the "gui"
This one's a maybe. As you can probably tell, all the text in the game is just an image. On one hand, it saved me the time of figuring out the font system in HGE and how to integrate it into a GUI, all properly aligned and stuff. On the other hand, I actually wrote all the text by hand, pixel by pixel. I just really liked that visual style and it didn't take as much time as you'd think. The problem's with that are obvious: it's not flexible, not scalable (both in the graphical sense and quantitative sense), and takes a decent amount of time to do. However, I think I ended saving a small amount of time by doing it, so I put it in the positive half. Despite this, I'm not going to ever do it again.
The art style fit my time budget
Originally I was going for a more elegant style, but of course, I had no time for that. This is the final result, and I'm happy with it. Keeping everything black-outlined and grid aligned was easy for deciding how to draw other things, and easy for me to work with in my programming.
I had strong motivation
Working on the game was fun the entire time, and this was largely due to knowing that people actually care about the results. Simply getting a reply on this blog is a much bigger motivational boost than it probably seems. I'm glad to know that you guys are following this.
Conclusion
All in all, I am happy with the way things turned out. The biggest concern of mine is that I went over the allotted 7 days, but that's something I'll be more wary of in the future. I was planning on not doing any programming this spring break, which just started, but I'm already getting in the mood for a next game. I'm reading a fascinating book, The Art of Game Design, by Jesse Schell, and it's already inspired me with so many new ideas.
6 comments:
Tips and things, from Jayenkai - Poking his nose in again!!
I picked a bad time to work on it
There's never a good time to work on AGameAWeek. For example, right now I'm working on the following.
1. A complete reworking of my website, to make things easier/better for theme designers to work their magic (Socoder.net)
2. A collection of games for the DS (Platdude's Retro Collection 2)
and 3. My silly idea to post a new game every Tuesday.
Ocassionally, that feels like a really dumb idea!
I didn't allocate enough time for sound
I never do that either. But in the world of AGameAWeek, it's not much of a worry.
A thing I've found is that retro=easier! Beeps, bops, pings and a few bangs will usually be enough to get you through most events. Insert Jingles rather than full tracks, and you can pad things out, and then if you like your jingle, bump it up to a full blown title track. Bingo.
I didn't plan out the gameplay details enough
Freeform coding at it's finest.
You added in the Flags, and the multiple breathers pretty late in development.
This did NOT ruin the game. It only made it better.
In "proper" development, when you've a great big team, and suddenly adding something in becomes tricky, it can really ruin a project. (Upend the Tea Table!!)
But, it's just you. Sticking to coding practices is good, but sometimes you don't really know how a game's going to play until you actually start to play it.
Think the basics, but not the bulk.
(Or, occasionally in my case, sit down blank, start coding, and see where the game takes you!!)
Never ever use 1-indexed anythings
I LOVE 1 index! But it depends entirely on the language. Base your game on how strings flow in the language (Basic=1, C=0) because 9/10 times that'll be the main cause of any problems.
Plus, don't forget that if you DO start at 1, then you can always look up x or y -1 without having it be "-1".. It'll be 0. And 0's safe..
I didn't put enough time into level design
Making games by yourself always creates the "But it's really easy!" issue. Personally I've gotten to the stage where I really don't bother anymore. My site's getting bog-all viewers per week, but those who are visiting seem to be enjoying the lack of easy levels, and Tutorials and things like that. The games start where they're enjoyable. That's the way games used to be :D
I didn't do enough work early in the week
Your plans should never get too big. It's only a week.. Keep it simple, and if you've enough time you can add crazy bits later!
A skeleton engine might be useful.
In my case, it's a simple "open window, titlescreen loop, online highscore engine, game loop" setup. Very very basic, with next to nothing in it, but it's quicker to open that and Start, then to have a blank screen every project.
I'm glad I used HGE
Indeed. You managed to pull off a wonderful looking game, in a very short time. Well done :D
I've been using BlitzBasic for so long that I'm pretty much set in my ways, but your game's given me reasons to have a nosey around, and see what else is out there. (Although, I usually do hop back to Blitz!)
But either way, if the engines there, that's 100 less things to worry about. You can get down to the nitty gritty without worrying about the 1000-lines that will open a window!
Whiteboards are awesome
Absolutely..
But notepads retain! Keep a copy of this stuff jotted down for future looking-back fun.
I cheated on the "gui"
Cheated maybe, but the gui looks great, and in the end that's all that matters.
Probably a good idea to figure out the fonts, though ;)
The art style fit my time budget (By this point, I really hope the bold tags are working!)
The art's great. It's good to know there's a decent artist working on these. My art sucks ;)
I had strong motivation
I'm a nosey bugger, so I'll be sticking around for a while. Keep it going, it's fun to do!
And, absolutely. Feedback is the coder's best friend.
Conclusion
\o/ You did it \o/ yeay \o/
Wow long post and a long comment from Jayenkai. All i can say to all this that I agree with Jayenkai and I am happy that you made it. I use the SDL library for my game so it is a lot of code but HGE seams to be good.
@ Jayenkai
Thanks for the tips! I think my project was slightly too big for 1 week (or maybe I just spent too much time on polish).
@ RedReaper
yeah, you should definitely give HGE a try, once you see the code for some of the demo projects you'll see how clean and simple it is.
I think I will stick with SDL. I don't know but I feel really comfortable with it. It is a lot more coding but that way I am preaparing myself for something bigger like DirectX or idk.
That's cool. I have been using Irrlicht for the longest time, and I might use it again for a future project. Although it's 3D, so it has a different use.
By the way, for those of you who couldn't get the game working on Vista: Make sure you have the Visual C++ 2008 Redistributable Package installed.
hi - just tried your game - that was an awesome job - it really makes kind of fun! Keep up that great work!
Post a Comment