Click here to Skip to main content
15,889,931 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Fellow CodeProject users!

Firstly, I want to state my prior experiences as a developer. So, I am currently running a project (web project - can be called a webiste but it's much more) and on my webiste I have tutorials. There are over 300 tutorials and 5 tutorial series (I started it a year ago), so I have some experience regarding web development (I developed my web-site from ground-zero, using XHTML, CSS and PHP (I didn't use Javascript) - don't need MySQL or any kind of CMS since I don't upload tutorials on daily/weekly bases).

OK, so that's my only experience (I'm 16 btw.). So, I have a project that's currently active (and I post new tutorials on it when users votes are collected and when the whole new serie - which they voted for - is finished). Now, I think that's quite an achievement for a guy 16-yo, but recently I wanted to make my own game.

Before I go further, I just want to say that I have a solid grasp of C++ (because I created 100 tutorials about it).

Now, a fellow programmer (he actually graduated on university and is currently running his own firm) recommended me to start writing a game in OGRE 3D. A game would be simple, you have a map, an airplane and then you input coordinates in a text file (multiple coordinates). Then, airplane drives to the 1st coordinate (x, y), then (using interpolation) goes to the 2nd coordinate and so on.

This would be the base game, of course. Afterwards, I would add more and more features - which would finally result in creating a flight simulator.

So, I am asking you, how much would it take me to get it done (with learning and actually writing the code). I also have to go to school and study for it, but if I had 1 hour a day (more on weekends), how long would it take me to get the game done?

As I said, my only experience is in web dev section, but my C++ knowledge is solid, yet I have no clue about Ogre.

I was thinking about reading Beginning Ogre 1.7 book first (couple books of my interest before that - Speed Reading and Memory), then trying to build this first-stage game. Also, how long do you think it would take me to build the game (just the first-stage)?

Also, would it be possible that I run the two projects simultaneously? I mean, the current project (tutorials) is also a large-scope one, since I have 124 subscribers (I think that's a large amount of subscribers because my tutorials are on Croatian).

Bear in mind that if the users vote for a programming language I don't know, I will have to learn it (but it doesn't take a long time to learn the syntax).

So, would it be possible to run these two projects together? Also, one other friend recommended me joining his project on GitHub, but I think this project (Ogre, from ground-zero) would be much more rewarding and I think that I would gain more experience (btw. this GitHub project is 2D game).

I am kinda lost right now, so these few days I am going to read a book about Speed Reading and Memory (later during this year about other things, not related to Computer Science) and after that I will decide (based on answers) what to do.

Thanks in advance!
Posted
Comments
Sergey Alexandrovich Kryukov 20-Aug-13 18:47pm    
Even though you explained some of your background, no one can give you clear estimate of how much would it take you. People are so different!
The mere fact that you assume that some strangers can advise you on time estimate and other things looks weird.

And if some of us strangers still gives you some answer, my advice is: don't trust it! You are the one who should know better.
—SA
[no name] 20-Aug-13 20:30pm    
Despite your background you lack experience. There is a lot of difference between learning syntax and real world application development. You could ask the question how long will it take me to learn Latin? Who can answer that? If this project seems like a good idea go for it.

Please see my comment to the question.

Here the only thing I can advise: try this and that, there is no another way. But! Try it on a well-devised by small prototype (as you always should do, move from a prototype to prototype). This way, you can get useful experience (including the experience if time estimates, which may server very well in future). At the same time, it can save you from wasting your life along some wrong lines. Later on, you more develop intuition will probably help to skip some technologies, frameworks, etc., which don't worth the effort.

By the way: working on reasonable small but non-trivial prototype may help you with other, more important things: focusing on fundamentals of science and technology. Start using some tools/libraries (and so on), but not take it too serious at first, until you make sure you can depend on it, but remember: the main strength should be in powerful mastership in the fundamentals. Then you can easily learn (or even invent) the particular technicalties.

—SA
 
Share this answer
 
Comments
CPallini 21-Aug-13 8:33am    
5.
Sergey Alexandrovich Kryukov 21-Aug-13 9:36am    
Thank you, Carlo.
—SA
pasztorpisti 21-Aug-13 9:53am    
Previously fived, just forget the comment! BTW comment sending seems to be buggy and auto-reposting from me. Work in progress on the site or just my machine???
Sergey Alexandrovich Kryukov 21-Aug-13 9:59am    
I know about buggy posting, it's usual when the server is more busy. Thank you for voting.
In my previous comment, I found that Carlo probably forgot to vote for your post.
—SA
pasztorpisti 21-Aug-13 10:08am    
No problem, intention is what matters. :-) I'm not anymore collecting the points. Still I find the reputation history table interesting because it shows quite well the active spots around my postings...
My first advice: don't start something just because someone has recommended it. You should start doing something only if you feel motivated about it. Game programming is probably more difficult than you would think.

I have been in the games industry for several years by now and I'm working on serious games with complex engines. I think I can give you good advice regarding game programming. There are very simple games and very complex ones. For example writing a 2D amoeba is relatively simple even if you put in multiplayer mode but writing a performance critical 3D first person multiplayer shooter game has so many difficulties from several aspects (difficulties when rendering because depending on level design you may see too many polygons, network/feedback speed problems: you often have to aid this with client side physics prediction, strategy games: serialization problems/bugs all the time...).

One thing is for sure: you should work yourself up gradually as Sergey recommended. At the beginning you may be able to work yourself up quickly sometimes with large steps especially if you are eager and motivated but the limit is only the blue sky... You will see that game programming consists of so many complex technical challenges that you simply cant learn everything even in 10 years but don't be sad: Only a fraction of that knowledge is enough to create a good game! :-)

So what is the difference between the 2D amoeba and the first person shooter or 3rd person adventure game or startegy game with cutting edge technology???
A game engine is a (big) piece of helper library that can be used to create games. This library contains code that is often needed in some kind of games. A game engine itself is usually a library that consists of some of the following libraries:
- physics simulation
- networking
- renderer
- 2D/3D engine (that is used to store the objects of the world)
- sound system
- animation system
- AI system
- particle system: to show explosions, smoke, muzzle fire, ...
- any other useful libraries, for example I've seen libs that simulated a flock of birds and stupid animals (just for the sake of visuals) in a more cheaper way than creating the same as objects in the engine as full fledged world objects.
- Tools: Level Editor
- Tools: plugins for popular modeller programs like Maya,ZBrush to export created objects/animations as data that is consumable by the engine
- Tools: any other tool that makes the work/collaboration of a game developer team faster

You may be surprised for example that I've mentioned here a sound system, what does a sound system contain? A PlaySound() funcion??? A good sound system may be capable of very powerful features that you wouldn't think of as a beginner. For exmaple if you are in a tunnel with your game character you may want some reverb on your sounds. Good sound libraries have 3D support, you can specify the location of the camera and you can specify a location when playing the sound and the engine automatically plays the sound well in a multi-speaker environment by using the location/rotation of the camera and the sound source (additionally the sound sorce may have angle, direction parameter, and so on...). A sound system among many other libraries is one that developers often buy as a pre-baked solution because it has a very well defined interface that doesn't really have to change for different kind of games, for example fmod is a very good general purpose sound system. Often buying a good pre-baked solution along with its sources + having a good professional in that area is the best you can have. If the solution doesn't have a feature or is buggy then you have a professional who can kick the ass of the library until it does what you want it to do... For some problems pre-baked solutions cover 90-100% of the cases (like in case of a sound lib) but in some other areas sometimes you need totally unique solutions depending on the kind of game: For example in case of physics, networking, rendering, animation, AI, particles. It has a reason that serious games are often written under the supervision of at least one specialized professional from each of these areas, by having a professional for each of these the limit in creativity is the sky, the technical/hardware limits, and the available time but not the technical knowledge. Still, you can create a lot of very good games with pre-baked solutions only. Many small teams and indie developers do that for example by purchasing a game engine like Unity. Unity is also a game engine that is glued together from pre-baked solutions. Its a gluecode between pre-baked libraries plus a set of tools that help people in collaboration and game creation. Even if you are purchasing a game engine you have to be able to choose the most suitable engine for the kind of game you are about to create... The game engine must be either well suited for your game or you have to choose one that can be customized for your needs/game with the least effort!

So... What you are about to do is learning about a renderer: ogre. In my opinion this is a very good choice when it comes to a renderer, I would also use ogre if I wanted to create my own game however before jumping into the middle of a game engine on a specific library first I would recommend you to learn the basics that is needed to glue together different libraries that are usually present in a game engine.

Fact: You don't have to be able to write the different parts of a game engine (like renderer, physics, sound system, ...) especially if you are a one-man army. What you have to know is the interface and the capabilities that these libraries usually have. If you know what kind of magic can be achieved by calling the public methods/funcs of these libraries that you can plan and predict what kind of games can you put together from the libraries you know well.

A simple game engine can support only 2D and only a few of these sub-libraries. If you are interested in rendering then you can learn rendering and you can choose a game that requires only minimal or zero knowledge from other areas. Another interesting thing: A space of the game logic can be 2D while you can still render it using a 3D engine using fancy 3D objects and effects (you can do that with a simply amoeba game). In fact, most cool games are 2D games because average people are more comfortable in controlling a 2D game. Physics is also simpler to implement in 2D and 2D physics can be more stable than 3D because of less degrees of freedom in case of your objects and 2D physics games can be really big fun to play! Consider this, a 2D game can be very-very competitive in both fun factor and in income on the market! You can still render the "game state" with a 3D renderer if you want!

Before starting to write any games I would learn the very basics, some 2D or 3D arithmetics. BTW, how good are you about basic 3D math? In case of 3D games I would recommend this as the very first book: http://www.amazon.com/Primer-Graphics-Development-Wordware-Library/dp/1556229119[^]
If you think you have to learn that book then don't forget to put into practice everything you learnt from the book. Write simple console applications that do some calculations and output the result on the console. If you have to time and the mood then copy-paste together some opengl code that visualizes your input data/geometry along with the result output.

After the basics you have to start to explore the interface of the typical libraries used for games, first its OK to start with simpler games that use at most one or more libraries of a typical game engine (for example a renderer). Again, you don't have to be able to write these libs alone, you have to be able to use them and you have to be able to write tools that shorten the development time. Becoming an expert in writing one of these libraries may take ages (5-10 years) but learning writing one such lib on a medium OKish level (that is already extremely useful!!!) can be achieved in half-one year if you are good and fast. If you can glue together different engine libraries (engine, physics, ...) into a usable game engine and you can write tools that can be used to build the game levels and you can create plugins for popular editors (like photoshop/maya) so as to make it possible to export data from these programs in the format of your engine then you are already a very-very good game developer even if you are not able to write any of the used libraries yourself (for example a hi-end renderer)!!!
 
Share this answer
 
v5
Comments
CPallini 21-Aug-13 8:34am    
5+.
However, I deserve a 5 too, for reading it all. :-)
pasztorpisti 21-Aug-13 8:39am    
Thank you! :-) My virtual five for your patience: +5
Sergey Alexandrovich Kryukov 21-Aug-13 9:39am    
Me too, I read and voted 5, but I'm not complaining: interesting enough; 2D amoeba, yes... :-)
And one of us forgot to vote... checking up... I voted...
—SA
pasztorpisti 21-Aug-13 9:51am    
Thank you! :-) Once I've seen an amoeba where the grid extended into 3 dimensions - it was terrible to play and visualize. People are much better in handling 2D in most cases from both the aspect of visuals and input methods. I'm not a good game designer but I've learnt a lot about "software user interface ergonomy" in the games industry. Software design suits me more...
Sergey Alexandrovich Kryukov 21-Aug-13 10:32am    
Ah, here... About 3D. At some point, I found that human perception of 3D is widely misunderstood. Especially when used to read all I could reach about the research on this... some facts are really amazing. But the root of all of the phenomena is: people vision is conceptually 2D, stereo effects can be very strong in some cases, but most people dramatically over-estimate them: there is no stereo effects at few meters and longer distance. Actually, all 3D is related to... muscle activity of a person, first of all, the ability to turn the head/eyes and move the body (to "pick behind"). Did you think about it.

At that time, I created scientific 2D and 3D graphics. It was fairly simple if rendering, but, unlike most other systems, animated. (Think experimental research and continues tracking of the data coming from data acquisition.) If you look at, say, Excel 3D graphs, and most of other, you would see too many colors and lack of 3D. I only made 3 colors at that time (lighted, shadow and back side of a surface, triangulated), but it looked really 3D (forget usual ambiguity). Why? Just one simple detail: the scene could be interactively rotated about two axes. Do you see the point? 3D only really appears in first-person motion, not even due to the motion of the scene itself... This way, you simulate the person's natural ability to "reach behind the corner". The trick is: even if you see nothing new, just move the camera only slightly, but with your own hands.

Technically speaking, there is nothing complex or poorly known. But people doing scientific graphics are probably still missing it...

—SA
Actually, I am in the same position (or even worse). And doing some background gamedev too.
And, being in this mess for YEARS, I highly DISENCOURAGE you to run more than two large projects at a time. The best solution to me is ONE activity that brings income (I have to eat, ok), and ONE other project. Currently I have to support far more than that, but that's a project lifecycle problems.

As for gamedev, I can only tell one thing: learning a new engine is a year of work and your particular task is (for a starter): 1 week of modeling (if it's a production-grade task), a few days of coding. In GoldSource those dots were path_corners :)
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900