C++ programmer, hobby game development

Started by
7 comments, last by KaiserJohan 13 years, 1 month ago
Hello,

I'm looking into starting a hobby game development but I'm not sure what to start with. I feel confident in C++/Java/C# but I prefer C++. I've done mostly win32 programming in C++.

I havn't taken any graphics courses or touched any graphics API so I'm not sure where to start. My goal is something like Starcraft 1/Warcraft 2/Red Alert 1/Settlers. I've read about OpenGL and DirectX, although as I understand it niether are graphic engines but rather API's. Do I need a graphic engine?

So, should I go with DirectX, OpenGL or try some higher level stuff like a graphic engine? As I mentioned, programming itself is not the problem, it's the API and graphic concepts.

If I need to clarify anything more just tell!

Thanks
Advertisement

Hello,

I'm looking into starting a hobby game development but I'm not sure what to start with. I feel confident in C++/Java/C# but I prefer C++. I've done mostly win32 programming in C++.

I havn't taken any graphics courses or touched any graphics API so I'm not sure where to start. My goal is something like Starcraft 1/Warcraft 2/Red Alert 1/Settlers. I've read about OpenGL and DirectX, although as I understand it niether are graphic engines but rather API's. Do I need a graphic engine?

So, should I go with DirectX, OpenGL or try some higher level stuff like a graphic engine? As I mentioned, programming itself is not the problem, it's the API and graphic concepts.

If I need to clarify anything more just tell!

Thanks


I'm probably not the most qualified to answer this, but I think I can coax some more information out of you that might help people formulate advice.

1) Do you have a particular platform you wish to target? PC/Mac/Linux/Console/iPhone/Droid?
2) How would you like this game to be distributed? Do you want it to be playable in a web browser, or are you comfortable making people download an exe and run it?
3) You say "like Starcraft 1, Warcraft 2 etc." I take this to mean a classic, 2D, sprite based, isometric RTS? Or are you planning on doing 3D? Either way, what sort of graphical effects are you looking to have in the game?
4) What scale is this game going to be? Are you looking to fit 10,0000 units on screen or 20? Is the game world going to be free and continuous, or divided up into levels? If the latter, how large are you planning on making these levels? Are we talking map sizes comparable to Starcraft or something that would take an hour or two to traverse?
5) Multi-player or single player?
5) Are you pinched for free time and want to get this done quick, or does the pace the project progresses not really matter?
6) Why are you making this game? Is it to sell? Is it because you just have a neat idea you've always wanted to make? Are you looking to change careers and join the video game industry and want to make a sweet portfolio piece?

[quote name='KaiserJohan' timestamp='1302294512' post='4796087']
Hello,

I'm looking into starting a hobby game development but I'm not sure what to start with. I feel confident in C++/Java/C# but I prefer C++. I've done mostly win32 programming in C++.

I havn't taken any graphics courses or touched any graphics API so I'm not sure where to start. My goal is something like Starcraft 1/Warcraft 2/Red Alert 1/Settlers. I've read about OpenGL and DirectX, although as I understand it niether are graphic engines but rather API's. Do I need a graphic engine?

So, should I go with DirectX, OpenGL or try some higher level stuff like a graphic engine? As I mentioned, programming itself is not the problem, it's the API and graphic concepts.

If I need to clarify anything more just tell!

Thanks


I'm probably not the most qualified to answer this, but I think I can coax some more information out of you that might help people formulate advice.

1) Do you have a particular platform you wish to target? PC/Mac/Linux/Console/iPhone/Droid?
2) How would you like this game to be distributed? Do you want it to be playable in a web browser, or are you comfortable making people download an exe and run it?
3) You say "like Starcraft 1, Warcraft 2 etc." I take this to mean a classic, 2D, sprite based, isometric RTS? Or are you planning on doing 3D? Either way, what sort of graphical effects are you looking to have in the game?
4) What scale is this game going to be? Are you looking to fit 10,0000 units on screen or 20? Is the game world going to be free and continuous, or divided up into levels? If the latter, how large are you planning on making these levels? Are we talking map sizes comparable to Starcraft or something that would take an hour or two to traverse?
5) Multi-player or single player?
5) Are you pinched for free time and want to get this done quick, or does the pace the project progresses not really matter?
6) Why are you making this game? Is it to sell? Is it because you just have a neat idea you've always wanted to make? Are you looking to change careers and join the video game industry and want to make a sweet portfolio piece?
[/quote]

1) Windows is the primary target, although I don't mind portability.
2) I'd have it distributed as an exe rather than rendered in a browser.
3) I guess, I am not sure of the definition. I'd want to do something like Supreme Commander but if it's too much I'll settle with some isometric RTS. I just don't want to find out midway through I'm in way over my head :P
4) I want the scale to be very big, in fact my idea is something like Supreme commander mixed with oldschool city management games like Caesar/Pharaoh/Zeus or Red Alert.
5) Single player most likely, I've done alot of network programming so if I decide to add it, it won't be a problem.
6) I'm just making it for fun, I don't have any limitations, although I'd still like to see some simple reward for the effort before there's thousands of lines of code.
7) No, I am a system developer by trade and I'm a hardcore gamer too and I just want to have fun with a hobby project, I am not looking to join the video game industry.

Hope this helps. Thanks for the questions :D

1) Windows is the primary target, although I don't mind portability.
2) I'd have it distributed as an exe rather than rendered in a browser.
3) I guess, I am not sure of the definition. I'd want to do something like Supreme Commander but if it's too much I'll settle with some isometric RTS. I just don't want to find out midway through I'm in way over my head :P
4) I want the scale to be very big, in fact my idea is something like Supreme commander mixed with oldschool city management games like Caesar/Pharaoh/Zeus or Red Alert.
5) Single player most likely, I've done alot of network programming so if I decide to add it, it won't be a problem.
6) I'm just making it for fun, I don't have any limitations, although I'd still like to see some simple reward for the effort before there's thousands of lines of code.
7) No, I am a system developer by trade and I'm a hardcore gamer too and I just want to have fun with a hobby project, I am not looking to join the video game industry.

Hope this helps. Thanks for the questions :D


Oh man, I love that zoom feature on SupCom. So freaking cool. I'm guessing then you're going for 3D graphics; it would be pretty tough to do that zoom-in with sprites!

Yeah, you could do this with C++ and DirectX/OpenGL. There is a learning curve and a lot of boilerplate code that goes into developing this way, but it can be quite rewarding and you have pretty much supreme command over the software you're making. You can roll your own code, or track down existing libraries and engines written in C++. The whole C++/DirectX thing is my soft spot as a developer, so I'm not a huge help here, but I do know there are plenty of libraries out there to make working with DirectX/OpenGL less onerous. As for whether you should use DirectX or OpenGL, my experience lay with DirectX, but I've heard that it "really doesn't matter a lot" in most cases and you should just pick one.

Another likely candidate would be to use XNA/C# .Net. XNA is a framework designed to simplify making games. It's not an engine, but it streamlines a lot of the really gritty, lower level aspects of Direct3D for you. Plus, I personally love developing in C# a lot, but you mentioned that you'd like to use C++.

One thing I would encourage you to do is try making a few smaller games first, or a few proof-of-concept mockups of some of your game mechanics. You learn a lot about making and designing games through experience, and it's really hard to just hock up a magnum opus from scratch. Even a knowledgeable mechanical engineer is going to have to burn through a few prototypes before he designs a sweet car.

Like say you wanted to do a novel method of troop movement, such as assigning a squad a leader and stepping into a 3rd person view from the leader's perspective to assume direct control. You move the leader directly, and the squad follows, mixing a tactical squad-based game with an RTS. This might sound like a super sweet mechanic in your head, but when you actually dump months into the game and make it, you find that it just doesn't work. It's clunky, it slows the game down, the camera sucks, whatever. It's just a wash. Now you're stuck trying to unravel a tangled design that hinges on a weak mechanic.

Instead of waiting to get to that point, you can make a small demo that's designed to test the specific mechanic. Make a little mini-game that revolves around that troop movement to see if you can tweak it to work right, or just scrap it and hit the drawing board again, and more importantly, revise aspects of your design that hinged upon this mechanic. It's easier to throw away 2 weeks of worth than it is 6 months. I call this the "Voltron design pattern"; make sure your mechanics are solid before hooking them together. Of course, it's not foolproof, two systems may seem great in isolation and not coordinate well, but it's a useful tool.
PropheticEdge provides some excellent comments. Just for your information, if you decide to go with Windows/DirectX, Microsoft can pretty much set you up with everything you need. The free versions of Visual Studio (Express edition, I believe) are an excellent interface. You'll also need the DirectX SDK which is also free for the download, contains quite a few example projects and good documentation. You might examine a few of those examples, looking at the docs for explanations of the functions, etc. There are several sites with acceptable tutorials around the web, but be careful. Some of them are a bit dated, and some teach less-than-adequate coding styles.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

I'm using VS2010 premium in my work so I have access to it. Should I do OpenGL or DirectX or SDL though? I'm just afraid that less documentation for directx would mean I get stuck at some point.
OpenGL and DirectX are about on a par in terms of functionality and render graphics in a broadly similar way - skills in either one are transferable in a lot of cases. The APIs are of course designed differently; the best is a matter of preference. DirectX is limited to Microsoft OSs. After a while discussions about which is best tend to turn into a religious debate.

SDL works on top of OpenGL, handling things like image loading, audio, creating a window for rendering and checking keyboard/controller state transparently across multiple platforms. It's a fairly thin wrapper around OS-specific stuff - you still have full access to OpenGL once you've created a buffer for rendering to, and in fact you'll probably avoid SDL's own drawing functionality as it is limited to 2D and does not take advantage of hardware acceleration.

The main differences in the API's are that GL is function call based and DX is COM based, if you have no problems with COM coding this will make you learning curve for GL and D3D nearly the same.

Worked on titles: CMR:DiRT2, DiRT 3, DiRT: Showdown, GRID 2, theHunter, theHunter: Primal, Mad Max, Watch Dogs: Legion

I havn't been doing anything COM-related.

This topic is closed to new replies.

Advertisement