About this blog
A Guide to Learning the Hard Way
Entries in this blog
There are people here on Gamedev that have been active for a very long time. I sometimes wish I could ask, or get reasonable data on, exactly how many posts have been put up in the "For Beginners" forum from people who want to make the next great MMORPG. Each one has a million and two big huge industry changing ideas and will not be deterred. They take all advice to start with something smaller generally politely (with some exception), but will not give it up. Each one believes they can do it, that its just a matter of perseverance, time, patience, etc. And after all, this idea is better than all the others, its so good that it is destined to succeed!
Hi there, fancy meeting you here!
I'm sure there are some people reading this and giggling to themselves, but I'm not hear to dump on newbies. We were all there once. That's why the majority of us are here now, as it happens. We all had and still have big dreams and big ideas about amazing games with great features that have never been done before. One of the big steps to learning how to make a game is simply coming to an understanding of the immense undertaking it is to create one from start to finish. One must learn about scope, and one must learn that a scope that is too big will often mean that your game never ever gets finished.
Why am I writing about this, you may ask? Well, I'm struggling with scope myself, right now. The game I am making... its substantial. It's not an MMO or anything crazy like that... but its pretty close to full fledged 16 bit era RPG, and I am all alone. I had some people playtest my game recently, and allow me to quote from one of the more useful feedback emails I got:
[size=8]YOUR SCOPE IS THIS BIG!!!
So... am I giving up? Scaling back the project? Well... no, I'm not. Why not? Well... because I'm still having fun with what I'm doing, to be honest. My progress continues moving forward, and I'm to the point where I have created something that is almost playable as a game. It's nowhere near being "fun", but I spend a few hours of every day improving, and the iterative process is keeping me going. Every single day, the game is better than it was before, and most of the time its something noticeable. I have a scripted introductory battle (with plans for a brief tutorial). I have in game help menus, battles that can be successfully completed, experience that is distributed, perks that can be selected and added to characters. I'm proud of what I've done so far, and I'm proud of the things I have yet to accomplish but know that I will.
What's the point, then? On the one hand I started this article admonishing newbies for having their head in the clouds, on the other I'm telling people how I ignored the advice of many of the people around me telling me to tone it back. Well, I think my point is that there is a balance point. There is a difference between an ambitious (but attainable) project, and one which is just pretty damned close to unattainable, which is what a beginner trying to make an MMO is.
My point is that scope matters, and trying to run before you can walk will doom your project to failure... But maybe... just maybe, you can run immediately after you walk, no? Maybe you can get up on your feet, take a few steps and say and just start sprinting.
I guess the key is that I'm enjoying myself. If that's true, then just freaking keeping doing what your doing people!
Well, today I want to talk about efficiency. This is not, however, about the technical aspects of writing efficient code. That is not my area of expertise. There are plenty of people on this very site and others that can talk at great length about that topic. No, I am here to talk about making the most effective use of limited time in one's life to achieve reasonable goals.
That was a mouthful, so let me say it another way:
I Don't Have All the Time in the World! There, I said it, I apologize for for breaking the illusion that I am a timeless being. I know you were thinking it, don't tell me you weren't.
So how then do I make the most of the time I do have to actually make meaningful progress on a game that unfortunately is not my first priority right now? How do I use a spare half an hour to actually get something done? Well, as with many things it all comes down to planning and thinking.
What I have made it a point to do in the recent past is to actually use a lot of the hidden minutes in my day productively. You will often find me making my 30 minute commute to work in silence. No radio, no podcasts, no music of any sort. I do this because I am then able to think. And rather than the wandering thoughts of showertime, I try my best to focus. I think about my game and what my most immediate goals are. I think about my code and what current problems I'm facing and think through various solutions until I find one I like.
Want to know what else I do? I carry a little notepad, and I often scribble down thoughts in it. There is almost nothing worse in my mind than sitting down to write some code and remembering that I had an idea I had wanted to put in only to realize that I forgot what the idea actually was. It's infuriating, so I solved that problem.
In fact, I have a number of other little habits (most of which would be fairly unique to me, so I won't bore you) that pretty much all come down to pre-planning my next few steps. It's amazing how little thinking I do when I actually sit down to work.
Most of the thinking I do about my project has already taken place by the time I sit down to do it.
Obviously, there are snags. There are eventualities that I didn't think of ahead of time, and these have to be dealt with. But all I'm talking about is a framework. I almost never sit down to work and find I don't know what I'm going to work on. And I'll tell you, my progress is much better as a result.
Well, here we are. It's about 10 months since I last posted an entry in this journal, and that entry was all about sticking with it and not dropping things. Does this qualify as irony?
What often happens in the world of non-professional game developers is this thing called "Life". Many of us hobbyist types have day jobs. We have families, sometimes children, and a boatload of other commitments. When time becomes stretched, the hobby project is usually the first thing to suffer. My own story is nothing special. Through a combination of real world crises, and a more general despair at a percieved lack of progress, I let myself lag and eventually stop working on my project altogether for a several month period. Old story, nothing new to see here.
So why am I writing? Because, I've picked myself up, and I want to help you do the same!
As many people have written before me, there is a cycle to this sort of thing. The more you work on a project (of any sort), the easier it is to continue working on it. At the same time, if you start to slack off, it becomes easier to continue the trend. There is a sort of inertia at work. Most if not all projects have plenty of positive momentum in the beginning. Everyone is full of great ideas, big dreams, and lofty goals... And there is absolutely nothing wrong with that. Those people who are more experienced in the world of game design are always quick to warn newbies to the craft to temper those goals with a dose of realism, and there is nothing wrong with that either. Dream big, but understand that the momentum you have at the start will not keep up throughout the process.
So what's a fledgling developer to do? Well, how about a bullet point list of tips!
My starting point for this entry is this... I've been a hobbyist type developer for a number of years. I have, at various times, started a project (always on my own) worked on it for a few weeks, then dropped it. Most of the time I would move away from programming entirely in between projects. I never talked about my ideas, got input on my design, or anything like that. In some sense that's fine... until the more recent past I never viewed myself as a game developer, I was just a guy who messed around with code once in awhile. But that said, now that I really am making this a focus in my life, I realize the importance of putting myself out there.
- Recognize that your time available for working on your project will vary. Keep a step or two ahead as best as you can and try to plan out when you will have time to work and schedule yourself mentally.
- Recognize that there is nothing wrong with lulls in progress for any reason. It happens, and its nothing to be ashamed of. I myself have been working on my project regularly since the fall, but I haven't updated my webpage or this journal because I felt some shame for letting myself fall off like I did. I regret this, but I submit to you that you need not do the same.
- When time is in short supply, work on the smallest of goals. I had about an hour of free time before work this morning, I used it to work out a particular bug that I've known about forever but hadn't gotten around to fixing until today. It was a simple, straightforward, and acheivable goal that could be taken care of in just an hour.
- Keep yourself involved in whatever community you've chosen to be a part of. It's amazing how much it can help just to have someone ask you about your project. Its amazing what a motivating factor it is to have someone care enough to mention it. If you never tell anyone about it, you can rest assured that no one will ask.
- Last but certainly not least... it is never, ever, EVER too late to go pick up your project again. You should never give in to that little voice that tells you its too late and you'll never remember what you were working on, or you should just start over. The hobbyist developer relies so much on the ability to motivate one's self. You absolutely must motivate yourself.
So here I am... I'm quite happy with the progress on my own game. I would even say I'm a little bit proud of what I've accomplished so far, which, for whatever its worth, is kind of a rare occurance. So all you out there, get to work, don't worry about the small stuff, and let me know of any interesting ways you have found to motivate yourself!
I've been keeping this journal here. This is Entry #4, so its not exactly a huge achievement, admittedly, but its one thing I'm doing. I have a small website with terrible looking screenshots, and I keep a more informal journal there as well. That journal details the game itself and the direction I'm moving in on that game. I've also started attending meetings of my local IGDA chapter, and if I am able to make the time I'd like to catch on with the indie developer community in Boston (the biggest city near me).
The thing is, all these things help me in two ways...
- The first way is obvious... it puts my name out there, it helps me network, meet people, and it gives me additional resources when I'm doubting my design, or I'd like some individual guidance from someone who might have been in my position before. I had some business cards made, and I have a small collection of them from other people.
- The second and less obvious way it helps me is that is pushes me forward. See, when I kept everything to myself I had no real reason to push myself to finish anything. It was just a past-time, nothing more. Now, not only do I have a lot more desire to make progress on my project so that I can show it off, I've also gotten a great deal of encouragement from many different people. It's easy to look at the process of making a game and just despair at the enormity of it all. Having people around you that are going through the same thing is an amazing feeling.
As I've tried to say on this journal before... I am not a professional developer. The game I'm working on is nothing special, and like many, I'm full of big ideas with little of substance to show for it. But I have more confidence in myself and my project now than I have ever had in anything before, and I owe so much of that to the fact that I have taken significant steps to join a community of people trying very hard to do the same.
I'm coding my game in C++. I chose to go this route because I have learned some over the years and C++ is mostly what I've learned with. I've done previous small projects with it as well.
Once upon a time, as a newbie, I was incredibly insistent on learning how to do everything myself. It didn't matter to me that I was constantly reinventing the wheel, as they say, as I just told myself I was learning. Why should I use std::list when I can make my own linked list class? Sure mine is error prone, horribly inefficient, and has half the functionality of std::list... but its mine! I must've created several different "button" classes as well. I told myself each time that it was better than the last one and therefore worth it... but I would wager that none could hold a candle to what was freely available to use both at the time and now.
Now, I'm a stubborn person, I freely admit that. I'm the kind of person that does things the hard way purely to spite those who tell me not to. That said, I also like to think I learn from my mistakes.
In my current project, I'm using C++. I'm using SFML 2. I'm also using SFGUI for my menu system, and while it isn't implemented in my game yet, I intend to also use the Thor library for further graphical effects on top of SFML. I've implemented Boost and make liberal use of all that the standard library has to give me. I will also not hesitate to bring in additional resources as I go.
When you start to incorporate additional resources, you will have linker errors, nothing will compile, the new resources won't make sense to you, you'll have to learn a whole new way of thinking about certain things that may or may not be the way you prefer to think about it. Before to long you'll have to learn how to compile a library on your own. But, I'm here right now to say to you It is absolutely, positively, no question about it, worth every second of your time.
If your goal is to create a finished game, this is the way to go!
A few disclaimers:
No, I'm not trying to say that learning how things work isn't valuable, I'm talking from the perspective of someone whose goal is more towards creating a finished product.
Also, whenever using some 3rd part library, make SURE you are familiar with the licensing terms and understand what is expected of you should you ever have a finished product you wish to release commercially.
Journal Entry #2
In this entry, I want to talk a little bit about a very simple thing that many people do when they first start out making a game. Specifically, I'm talking about a ToDo list. The thing is, when you start about a project either alone or with a few friends, the thing you need to keep on top of is motivation. When you aren't being paid, when the payoff to whatever you're working on is months if not years away, it gets to be extremely difficult to maintain consistent motivation on your project. I work full time, and I have a life outside of work. Finding time to work on my game is often hard, and when I do have some time with no specific responsibilities, its even harder to convince myself to word on code rather than, say play a game.
That said, I have been fighting this battle daily, and mostly I've been winning. What follows is several things that I have done to help myself stay motivated.
Greetings all and welcome to my Dev Journal.
- Keep a TODO list: What I mean by this is keep and maintain a list of short term goals when it comes to developing your game. Some people use fancy programs, which are all fine and good. I have a simple TODO.txt file that I keep right in my code directory. There are several uses for it... specifically it keeps me focused on my immediate goals, and it helps me track progress. The most important part about it, for me, is marking things as **DONE**. What you see there is literally what I put down in my file. Marking things off is one of my greatest motivations, as is seeing a huge list of things I've already accomplished. See, its very easy, especially early on, to despair at how much you have left to do and how seemingly little you've done so far. It often seems like you aren't making any progress at all. Having that list of tasks manages that. This leads into my next point as well.
- Keep Moving Forward: Another way in which you should manage your progress is to make sure you are regularly improving your game outwardly. Now, there are absolutely times when you'll be working on some aspect of your game that's going to take 5 or 8 or 15 hours of work to finish. During that time you may not have much to show for yourself outwardly. Your game will look just like it did when you started... This leads to a feeling that again, you aren't making any progress. I would say the best way to combat this is to consistently give yourself small tasks you can do in the midst of the big ones. An example would be... I'm currently working on some basic enemy AI, which is something I've never done before. I'm proceeding slowly and not being overly ambitious. Even so, its taking time. So, that being said, I've been doing little things in my game. Today I put in some code to enable some new mouseover events to happen. Tomorrow, I intend to upgrade the camera functionality on my map just a bit. These are pretty simple and straightforward tasks, but they give me something to show for my work, and allows me to continuously feel that I'm making progress.
There are absolutely many other techniques for maintaining one's motivation, but I wanted to share a few of the things that work for me. It's very easy to get overwhelmed by the mountain of work that you have ahead of you. It's easy to feel like you'll never finish so why bother trying. The thing is, when you climb a mountain, you aren't constantly looking at the summit. Instead, you just focus on the next handhold, the next ledge, the next marker. It's the same with this. Keep your focus small, and keep on moving.
Like many here, I am an aspiring game developer, and this journal is my attempt to give something back to the community. The purpose of this journal is to detail my trials, tribulations, and lessons learned as I progress in the development of my upcoming game, entitled "The Village and the Nation." For those interested in a little more information about the game itself and where it currently stands, feel free to check out my wordpress page here:
For my initial entry, I am going to talk a little bit about who I am, what my experiences are, and what I hope to accomplish by keeping this journal. For the most part, I intend to use this journal to talk about game development, both technically and creatively, as I myself go through the process of creating a game as a (mostly) one man team. So without further adieu...
I have been kind of a hobbyist/dabbler in game design for many years. I've had many half hearted efforts at creating a game, many false starts where I got in over my head and gave up on whatever project I had in my head at the time, but also some small successes. I have successfully created a lot of the basic clones that people often make when they get started. I've made pong, breakout, snake, and a mario-like sidescroller that was reasonably playable. I also made a text based RPG that I dabbled with for a long time. I'm not sure whether you would call it finished, or if it would even have a finishing point, but it was playable. I just had a kind of continuous process of coming up with a new feature to add, adding it, working out the bugs, and then moving on to another one. There was never a grand vision, it was all about learning.
About a year ago, and for various reasons, I arrived at the conclusion that I would need to be changing careers. I'm in my 30s, and for the moment I have a steady, stable job, but its not a career. And so, I set about learning what I felt I needed to learn to launch towards a career in Game Development. In February of this year, I started down the path of creating a full game for release to others. I have committed myself to doing things the "right" way this time around. Before I ever wrote a line of code, I created a design document. I drew sketches and concept art. I drew class diagrams and planned out the technical aspects of my game. I knew much if not all of it would change, but I gave myself a solid starting point.
The point of this game, if you're wondering, is to use as a springboard. I have no delusions of grandeur, I know that this project will not make millions... heck, it likely won't make any money at all. But I intend to finish it, and release it into the wild. I intend to use this experience to either, find myself a real job, or, if the stars align, start my own studio.
So, now that you know just a little bit about me and where I am coming from, I'm going to explain why I wish to keep this journal here on gamedev. Thing is, I'm no expert in anything really. I am somewhere between complete novice and intermediate in most of the areas necessary to game development. I thought long and hard about whethere there was some topic on which I could write an article, as a sort of payback to the GameDev community who has helped me so much. I concluded that no, I really shouldn't be writing articles just yet.
On the other hand, I believe that my first hand experiences as someone who is in the process of developing his very first real game could definately be valuable. I will talk about the stumbling blocks and how I overcame them. I will point out various resources that help me, and give advice as to what I find to be most helpful to the beginning designer. I will also talk about my successes, and how it feels when you actually do make forward progress.
In short, I am here to give keep a log of the day to day process of creating a game from the point of view of someone who has never done anything of this level before. I am going to commit to a minimum of one update per week, though I hope to update more often than that as time permits.
As for you, dear reader, as me questions. Let me know how I'm doing, and by all means I would love some constructive comments on how I might present myself better. Until next time!