Digital Awakening
Member
Can anyone get this thread pinned?
Introduction
Since there are some who want to develop games for GP2X but have no clue on how to do it or are looking at some simple solutions I would like to help them get started with SDL. I'm very new to this myself and I just heard about GP2X a few weeks ago. But I got some link recommendations from people on this board and found out that this wasn't as hard as I first thought.
So what is this SDL all about then? SDL stands for Simple DirectMedia Layer. Basically it makes 2D programming in C and C++ quite simple and it's supproted by GP2X. SDL also makes OpenGL easier but since GP2X is a 2D console we should stick to the 2D stuff. If you have any basic knowledge about programming then you shouldn't have much trouble with SDL once you get started. My precious coding experience is mainly Dark Basic Pro and PHP, not very advanced or low level like C/C++. You can check out my website if you want to see what I've done before.
Game development
For those who have never developed a complete game I would like to mention a few things before we start. It is quite easy to make a good game with some basic programming and art skills if you have a good idea and know how to make what skills you have work together. Game developing is mostly about structuring and composing. Structuring because there's a lot of things that needs to work together, you really should plan before you start. Composing because even simple things can look and work amazingly when you combine them, if one thing is great but the rest sucks then the whole game will suck or if you have only a few great things then it's barely a game.
It's quite easy to get a prototype up and running and that's usually the funniest part. But most people can't complete a game because a game is so much more then what you see when you are playing it. Menus, options, savefiles, maps, databases etc. There are many aspects of the game that requires a lot of thinking and planning before you even start coding. If you start with a prototype and try to make a game from it you will usually end up with so called spaghetti code because you make quick solutions to every problem you run into. The code gets hard to follow and development time increases and fixing bugs and adding new features becomes harder and harder. Been there done that and not going back.
So the best thing to do is to start with small games to build experience. And make sure that you focus on 1 game, complete it and have it properly and fully tested before you go on to the next game. With more experience you can make bigger and more advanced games. Halfmade games rarely get you anywhere and it's likely that you keep on developing halfmade games. As a lot of people have commented on in this thread there are mainly 2 different views on this stick with 1 project thing. If you want to be regarded as a games developer I think it's important that you finish what you set out to do, that will also convince others that you are capable of doing so.
Note that I mention GAMES developer, a lot of people can do a lot of cool things but not solid games that are appreciated by gamers. The best of ideas rarly get much attention if the gamers don't like to play your creation. Interest fades quickly with a prototype. It is however important that you can abort a project that is either more then you can handle or if you have completly lost your interest in. If you have enough experience you should make code that can be reused in future projects so that you can cut down on development time. Don't forget that complete games builds a fan base and are good reference for larger team projects, higher educations or getting a job. Employers look for people that can complete projects even if they don't develop software.
It is important that you have not just a spark but a burning fire because game developing is hard work and you need to figure out many things and look for a lot of information on your own if you want to learn and if you want to make your games. It's easy to give up or constantly rely on others but that will never make you a good games developer.
I would like to add another tip for all who want to be game developers: Play a lot of games and figure out what is good and what is bad with every game. If you think that everything is good in every game you play then you will hardly be a good developer. Even the best of games usually have some parts that could have been better, but there are some exeptions that are just perfect in every way.
Also remeber that programming isn't everything. Learn a 2D and a 3D package. 3D is good because prerendered stuff can easily look a lot better then 2D if you aren't a great 2D artist. Even something as simple as an icon for a GUI can look amazing when it gets propperly shaded. You don't need to be an amazing artist to make a game look good as long as you know how to make simple things look solid. It's all about composing again. And also remember that code and art is not all. You will need sounds and often music before your game becomes a really solid product that gamers will appreciate and continue to play.
Getting started
Actually the best thing to start with is to learn many things about the tools you are working with and then how you combine them to more advanced things. Before you can learn anything you need to get everything up and running. Dev-C++ is a freeware development software that you can use when developing with SDL. To get this and SDL installed you should head over to Sol's SDL tutorial where you will find step by step instructions.
Sol's SDL tutorial
Sol's tutorial teaches you not only to install everything you need but also how to do some basic SDL programming and a step by step guide to make a simple game. If you don't want to do the whole tutorial, although it's good experience if you have little or no programming experience. There are more tutorials on SDL out there. Over at Cone3D Programming there are 6 tutorials on SDL programming, all of them are for 2D. They cover a lot of basic 2D stuff that you probably will find useful. I have never used these myself as I'm not gonna start developing for GP2X until in Dec or Jan as I have other things to do.
Cone3D tutorials
Once you have done the tutorials that you like it's always a good idea to get better knowledge. Dev-C++ comes with an introduction to C programming that you might find useful if you have any questions about programming in general. But you should also check out the SDL manual so that you know every command that is available for you to use. The more commands you know about the easier it will be to plan your games. If you have an idea but not a clue on how to code it then you need to learn your tools and then figure out how to solve the problem with what you got. The SDL
SDL website
The SDL website also have links to more tutorials on various subjects and other stuff you might find useful.
Books
lucoxade have recomended the book: "Programming Linux Games by John R. Hall, ISBN: 1886411492" as a great start for SDL and C++ programming including how to develop games. Sounds to me like a great book to pick up. He mentiones that it's a bit old but still a relevant and useful, can't see why it would not be as this is hardly anything that will change a lot.
I would like to recomend another book: "Game Design - Theory & Practice by Richard Rouse III, ISBN:1-55622-735-3". It got nothing to do with games programming but a whole lot to do with games designing. If you want to improve your design skills this is a great book and I agree with 99.9% of what he writes. The book is quite some years old but games design principles still aplies and it's getting more and more important today. As you may agree game design is not always as great today as it was before. The book also have a bunch of analysis on successfull games, that are even older then the book, like Tetris. There are also a few intervies with people like Sid Meier. Great layout and illustrations contribute to make this book a fun read.
Good luck with your game development!
If anyone would like to add or change anything in this little guide then feel free to make a post about it.
Introduction
Since there are some who want to develop games for GP2X but have no clue on how to do it or are looking at some simple solutions I would like to help them get started with SDL. I'm very new to this myself and I just heard about GP2X a few weeks ago. But I got some link recommendations from people on this board and found out that this wasn't as hard as I first thought.
So what is this SDL all about then? SDL stands for Simple DirectMedia Layer. Basically it makes 2D programming in C and C++ quite simple and it's supproted by GP2X. SDL also makes OpenGL easier but since GP2X is a 2D console we should stick to the 2D stuff. If you have any basic knowledge about programming then you shouldn't have much trouble with SDL once you get started. My precious coding experience is mainly Dark Basic Pro and PHP, not very advanced or low level like C/C++. You can check out my website if you want to see what I've done before.
Game development
For those who have never developed a complete game I would like to mention a few things before we start. It is quite easy to make a good game with some basic programming and art skills if you have a good idea and know how to make what skills you have work together. Game developing is mostly about structuring and composing. Structuring because there's a lot of things that needs to work together, you really should plan before you start. Composing because even simple things can look and work amazingly when you combine them, if one thing is great but the rest sucks then the whole game will suck or if you have only a few great things then it's barely a game.
It's quite easy to get a prototype up and running and that's usually the funniest part. But most people can't complete a game because a game is so much more then what you see when you are playing it. Menus, options, savefiles, maps, databases etc. There are many aspects of the game that requires a lot of thinking and planning before you even start coding. If you start with a prototype and try to make a game from it you will usually end up with so called spaghetti code because you make quick solutions to every problem you run into. The code gets hard to follow and development time increases and fixing bugs and adding new features becomes harder and harder. Been there done that and not going back.
So the best thing to do is to start with small games to build experience. And make sure that you focus on 1 game, complete it and have it properly and fully tested before you go on to the next game. With more experience you can make bigger and more advanced games. Halfmade games rarely get you anywhere and it's likely that you keep on developing halfmade games. As a lot of people have commented on in this thread there are mainly 2 different views on this stick with 1 project thing. If you want to be regarded as a games developer I think it's important that you finish what you set out to do, that will also convince others that you are capable of doing so.
Note that I mention GAMES developer, a lot of people can do a lot of cool things but not solid games that are appreciated by gamers. The best of ideas rarly get much attention if the gamers don't like to play your creation. Interest fades quickly with a prototype. It is however important that you can abort a project that is either more then you can handle or if you have completly lost your interest in. If you have enough experience you should make code that can be reused in future projects so that you can cut down on development time. Don't forget that complete games builds a fan base and are good reference for larger team projects, higher educations or getting a job. Employers look for people that can complete projects even if they don't develop software.
It is important that you have not just a spark but a burning fire because game developing is hard work and you need to figure out many things and look for a lot of information on your own if you want to learn and if you want to make your games. It's easy to give up or constantly rely on others but that will never make you a good games developer.
I would like to add another tip for all who want to be game developers: Play a lot of games and figure out what is good and what is bad with every game. If you think that everything is good in every game you play then you will hardly be a good developer. Even the best of games usually have some parts that could have been better, but there are some exeptions that are just perfect in every way.
Also remeber that programming isn't everything. Learn a 2D and a 3D package. 3D is good because prerendered stuff can easily look a lot better then 2D if you aren't a great 2D artist. Even something as simple as an icon for a GUI can look amazing when it gets propperly shaded. You don't need to be an amazing artist to make a game look good as long as you know how to make simple things look solid. It's all about composing again. And also remember that code and art is not all. You will need sounds and often music before your game becomes a really solid product that gamers will appreciate and continue to play.
Getting started
Actually the best thing to start with is to learn many things about the tools you are working with and then how you combine them to more advanced things. Before you can learn anything you need to get everything up and running. Dev-C++ is a freeware development software that you can use when developing with SDL. To get this and SDL installed you should head over to Sol's SDL tutorial where you will find step by step instructions.
Sol's SDL tutorial
Sol's tutorial teaches you not only to install everything you need but also how to do some basic SDL programming and a step by step guide to make a simple game. If you don't want to do the whole tutorial, although it's good experience if you have little or no programming experience. There are more tutorials on SDL out there. Over at Cone3D Programming there are 6 tutorials on SDL programming, all of them are for 2D. They cover a lot of basic 2D stuff that you probably will find useful. I have never used these myself as I'm not gonna start developing for GP2X until in Dec or Jan as I have other things to do.
Cone3D tutorials
Once you have done the tutorials that you like it's always a good idea to get better knowledge. Dev-C++ comes with an introduction to C programming that you might find useful if you have any questions about programming in general. But you should also check out the SDL manual so that you know every command that is available for you to use. The more commands you know about the easier it will be to plan your games. If you have an idea but not a clue on how to code it then you need to learn your tools and then figure out how to solve the problem with what you got. The SDL
SDL website
The SDL website also have links to more tutorials on various subjects and other stuff you might find useful.
Books
lucoxade have recomended the book: "Programming Linux Games by John R. Hall, ISBN: 1886411492" as a great start for SDL and C++ programming including how to develop games. Sounds to me like a great book to pick up. He mentiones that it's a bit old but still a relevant and useful, can't see why it would not be as this is hardly anything that will change a lot.
I would like to recomend another book: "Game Design - Theory & Practice by Richard Rouse III, ISBN:1-55622-735-3". It got nothing to do with games programming but a whole lot to do with games designing. If you want to improve your design skills this is a great book and I agree with 99.9% of what he writes. The book is quite some years old but games design principles still aplies and it's getting more and more important today. As you may agree game design is not always as great today as it was before. The book also have a bunch of analysis on successfull games, that are even older then the book, like Tetris. There are also a few intervies with people like Sid Meier. Great layout and illustrations contribute to make this book a fun read.
Good luck with your game development!
If anyone would like to add or change anything in this little guide then feel free to make a post about it.