Sign in to follow this  
Sugavanas

Create a Game Engine

Recommended Posts

landagen    376
It seems like your primary focus on this is to learn. So with that in mind, here is my suggestion. First figure out what you want to learn exactly? whether it is 3d rendering, 3d sound, image loading, networking, etc. I would possibly start with a library like SFML. This will handle some of the details that you may not care about in the beginning. For instance, it can help you create a window on a variety of platforms with a common interface. It also does things such as loading a variety of images and can do audio. The nice thing about it is it is fully open source and free to use for commercial purposes. What you can do is use the library on things you don't want to focus on learning, but then the things you do want to focus on you can not use the library. For instance, I want to write my own 3d rendering engine so I will not be using SFML's 3d graphics library. As you go along and feel like you want to tackle other areas, you can strip out the library from your code. If you try to write everything yourself you will become frustrated with your progress.

The key to any engine making is to have a game that you develop along side of it. This gives you a good testing platform and good usage information. You may find that the interface you thought would be great for a particular functionality is actually not very good. Pick the kind of game you would like to design your engine for such as an FPS, RPG, or RTS. Developing a game alongside your engine will also give your audience a good demo.

Share this post


Link to post
Share on other sites
3Ddreamer    3826
Hi,

For someone with no programming experience, creating a game engine will require [i]many[/i] things, some mentioned here.  One important requirement is that you make games for a year or years before starting to create a game engine.

There are many types of game engine designs.  Some are about the complexity of a game but others are far more complicated than a game. Some game engines are integreted with a game.  Some games have part of the game engine delivered with the game so the user can make missions, characters, skins (paint jobs on objects), maps, and so forth, as a modder or even professional artist.

I would estimate that the game engine of a typical AAA popular game which had huge sales took years with at least several distinct but connected teams of tech people and artists.  A few indy game developers have had success with being a one person band and created their own game engine for a successful marketed game but this demands years of programming experience.

As you research the making of a game, then you will slowly but surely learn about game engines if you read with a wise choice of sources.

Game creators must outnumber game engine creators by quite a gigantic amount.  1 to 100? It must be more like 1 to 1000 or much more. It would be interest to know...

At any rate, you will need to be very experienced in a language and know much about the development environment with it to accomplish a very successful game engine.

It is doable yet be prepared for the possibility of the equivalent to a Masters or Doctorate amount of research.  A simpler game engine might take a couple years or more at least. There is nothing wrong with aiming that high, but just so you know!


Clinton

Share this post


Link to post
Share on other sites
TroyBob    103
Hey there,

If you truly are motived and determined to make a game engine then I applaud you. As people have already have pointed out this is an enormous task with a lot of different and challenging topics to cover, but there are quite a lot of good resources out there to point you in the right direction. It would honestly take me far too long to type out all the things you need to learn to make a game engine, but I do recommend that you still have a game in mind to develop using the engine that you create.

As for resources I recommend the following:
Game Engine Architecture by Jason Gregory [url="http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135"]http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/156881413[/url]
Game Coding Complete (4th Edition) [url="http://www.amazon.com/Game-Coding-Complete-Fourth-Edition/dp/1133776574/ref=pd_sim_b_1"]http://www.amazon.com/Game-Coding-Complete-Fourth-Edition/dp/1133776574/ref=pd_sim_b_1[/url]

Read those books very thoroughly and slowly, they do a good job of covering most of the general topics associated with developing a game engine.

There really isn't much else that I can say to help you at this point apart from the face that you're going have to put your head down and work really hard.

Share this post


Link to post
Share on other sites
MrJoshL    810
My Advice:
If you are very enthusiastic on creating a computer game (especially 3D), and prepared to work hard, be prepared to buy a [b][i][u]LOT[/u][/i][/b] of books.

Share this post


Link to post
Share on other sites
Debunez    160
[quote name='TroyBob' timestamp='1351345054' post='4994408']
Hey there,

If you truly are motived and determined to make a game engine then I applaud you. As people have already have pointed out this is an enormous task with a lot of different and challenging topics to cover, but there are quite a lot of good resources out there to point you in the right direction. It would honestly take me far too long to type out all the things you need to learn to make a game engine, but I do recommend that you still have a game in mind to develop using the engine that you create.

As for resources I recommend the following:
Game Engine Architecture by Jason Gregory [url="http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135"]http://www.amazon.co...ry/dp/156881413[/url]
Game Coding Complete (4th Edition) [url="http://www.amazon.com/Game-Coding-Complete-Fourth-Edition/dp/1133776574/ref=pd_sim_b_1"]http://www.amazon.co.../ref=pd_sim_b_1[/url]

Read those books very thoroughly and slowly, they do a good job of covering most of the general topics associated with developing a game engine.

There really isn't much else that I can say to help you at this point apart from the face that you're going have to put your head down and work really hard.
[/quote]

I would have recommended Game Coding Complete 4th edition however that book requires or rather is better used if you have some skill with DirectX prior to reading it. Using it alongside Frank Luna's book Intro to 3D Game Programming with DirectX9/11 would probably be a better idea.

Share this post


Link to post
Share on other sites
Sugavanas    212
[quote name='3Ddreamer' timestamp='1351308195' post='4994332']


At any rate, you will need to be very experienced in a language and know much about the development environment with it to accomplish a very successful game engine.

It is doable yet be prepared for the possibility of the equivalent to a Masters or Doctorate amount of research. A simpler game engine might take a couple years or more at least. There is nothing wrong with aiming that high, but just so you know!


Clinton
[/quote]


i don't care hw many years it takes for me to complete a game or a game engine, i have already mentioned that i am juz 13 and the main reason for me is to learn things. Can anyone say me the best language to create games



[quote name='TroyBob' timestamp='1351345054' post='4994408']
Hey there,

If you truly are motived and determined to make a game engine then I applaud you. As people have already have pointed out this is an enormous task with a lot of different and challenging topics to cover, but there are quite a lot of good resources out there to point you in the right direction. It would honestly take me far too long to type out all the things you need to learn to make a game engine, but I do recommend that you still have a game in mind to develop using the engine that you create.

As for resources I recommend the following:
Game Engine Architecture by Jason Gregory [url="http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135"]http://www.amazon.co...ry/dp/156881413[/url]
Game Coding Complete (4th Edition) [url="http://www.amazon.com/Game-Coding-Complete-Fourth-Edition/dp/1133776574/ref=pd_sim_b_1"]http://www.amazon.co.../ref=pd_sim_b_1[/url]

Read those books very thoroughly and slowly, they do a good job of covering most of the general topics associated with developing a game engine.

There really isn't much else that I can say to help you at this point apart from the face that you're going have to put your head down and work really hard.
[/quote]

thanks i will buy those books and start leaning it. I have a great story in my mind but i don't have enough programming skills to develop it so i think to spend more years learning and then start with the story


[quote name='MrJoshL' timestamp='1351357242' post='4994453']
My Advice:
If you are very enthusiastic on creating a computer game (especially 3D), and prepared to work hard, be prepared to buy a [b][i][u]LOT[/u][/i][/b] of books.
[/quote]

Thanks for your advice but can u suggest me some books.


[quote name='Debunez' timestamp='1351390269' post='4994612']
[quote name='TroyBob' timestamp='1351345054' post='4994408']
Hey there,

If you truly are motived and determined to make a game engine then I applaud you. As people have already have pointed out this is an enormous task with a lot of different and challenging topics to cover, but there are quite a lot of good resources out there to point you in the right direction. It would honestly take me far too long to type out all the things you need to learn to make a game engine, but I do recommend that you still have a game in mind to develop using the engine that you create.

As for resources I recommend the following:
Game Engine Architecture by Jason Gregory [url="http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135"]http://www.amazon.co...ry/dp/156881413[/url]
Game Coding Complete (4th Edition) [url="http://www.amazon.com/Game-Coding-Complete-Fourth-Edition/dp/1133776574/ref=pd_sim_b_1"]http://www.amazon.co.../ref=pd_sim_b_1[/url]

Read those books very thoroughly and slowly, they do a good job of covering most of the general topics associated with developing a game engine.

There really isn't much else that I can say to help you at this point apart from the face that you're going have to put your head down and work really hard.
[/quote]

I would have recommended Game Coding Complete 4th edition however that book requires or rather is better used if you have some skill with DirectX prior to reading it. Using it alongside Frank Luna's book Intro to 3D Game Programming with DirectX9/11 would probably be a better idea.
[/quote]

Can you send me some links, about other books

Share this post


Link to post
Share on other sites
DeafTV    1705
You must learn to crawl before you can walk and you must learn to walk before you can run.

Creating a game engine with little to no programming experience is extremely hard if not impossible. I would suggest fist learning a language like python, java, or maybe c#. You'll see a lot of talk about c++ and how it is used in the great games but don't fall for it. Talking from personal experience, as a beginner you should not start with c++ as you will regret it. If you're really wanting to create an engine I would start with java but learn the basics and slowly progress towards and engine.

The progression route I would take would be: get a book on the language and do any and all exercises, write a text based game, try and write a pong clone, try to write your own basic game (keep in mind it won't be perfect, but you'll learn a lot), and most importantly [i]practice[/i].

That's just my opinion and what I've found to work for most people. I can't recommend any good books, but I would also combine some online tutorials with a book so you can get another perspective on things as well. Don't give up, but be patient and work towards a game engine. Rome wasn't built in a day [img]http://public.gamedev.net//public/style_emoticons/default/wink.png[/img]

Share this post


Link to post
Share on other sites
MrJoshL    810
Use XNA. It is the easiest route to a 3D game engine. Here are some books I suggest (in this order).
[u]Algebra II[/u] by Mcgraw-Hill
[u]Trigonometry[/u] by Mcgraw-Hill
[u]The C Programming Language[/u] [OR] a book on C#
[maybe a linear algebra book and/or calculus book, depends on what you do]
[u]Computer Graphics, Principles and Practice[/u] (you may not need this, depending on how much you learn off of the web)
[u]Real Time Rendering[/u], 3rd edition
[u]OpenGL Programming Guide[/u]
[u]Game Engine Architecture[/u]
There are of course many other books on topics like AI, audio, physics, algorithms, and general programming. I wouldn't say you need EVERY SINGLE ONE of these books, as you can supplement your knowledge from papers on the web. But trigonometry is a must and also Algebra II, more so trigonometry. You have to have a firm grounding in computer graphics and definitely mathematics. Save yourself the sanity and failure. Use Unity or UDK. Edited by MrJoshL

Share this post


Link to post
Share on other sites
MrJoshL    810
By the way. Never, EVER start with C++. I did. I still use C. It is very difficult to think in an OOP manner. C is procedural, a little bit more natural to think about, and OpenCL for a beginner is just mind-boggling (along with being useless for games). Choose C#, as you can use XNA, and can publish your game (and 9 others) on Xbox LIVE and/or Windows Phone for $100. I made an XNA game (sidescrolling adventure) in about a week or two, that being the first time working on a game and programming. XNA even has a step by step video tutorial with it, something I have yet to find anywhere else. The game I made was stupid and AWFULLY BORING, and violated about 15 different trademarks, so I couldn't sell it, but it was still progress. I have embarked now on programming a simple 3D game with OpenGL 2.0 (from 2004) and C, and even that is extremely difficult. If you want to program for a platform that is non-Microsoft, learn C. It is pretty much tied with Java for the most popular language (even though popularity doesn't matter) and is safer than C++. But yet again, you won't get yourself off the ground without some good mathematics.

Share this post


Link to post
Share on other sites
Animate2D    182
I just published a mobile 2D cutout style animation tool on google play as somewhat of a stepping stone toward creating a game engine that allows you to focus more so on the artistic content of game development rather than the technical. I started with character animation loop development as the first tool in a series of tools. Please checkout my post on gamedev [url="http://www.gamedev.net/topic/633527-feedback-on-animate2d-mobile-2d-character-animation-tool-in-the-cutout-style/"]here[/url] or [url="http://www.gamedev.net/topic/633525-feedback-on-animate2d-mobile-2d-character-animation-tool-in-the-cutout-style/"]here[/url] as I don't quite know the properly location for it according to the post http://www.gamedev.net/topic/574344-does-my-post-belong-here/ it seems to indicate it belonged in this room.

Share this post


Link to post
Share on other sites
ByteTroll    3035
[quote name='Hodgman' timestamp='1351434819' post='4994716']
[quote name='Sugavanas' timestamp='1351415147' post='4994658']
i don't care hw many years it takes for me to complete a game or a game engine, i have already mentioned that i am juz 13 and the main reason for me is to learn things. Can anyone say me the best language to create games
[/quote]There is no best language. The best one is the one that you can use -- e.g. some people would say, for example, "Java is crap", but the guy who made Minecraft was comfortable making games with Java, so he made a game using Java and got $200000000... There's no right or wrong choices [i]in general[/i], the answer depends on your personal situation.

Right now, the best language for you is one that's easy to learn. Common suggestions for easy to learn languages that you can easily make games with, are Python or C#, but there are also many others.
Eventually, I'd suggest that you learn C++, but I wouldn't recommend you start that until you're comfortable programming in other languages first, because it's a painful language to learn.

An Engine programmer will be proficient in many languages, so there's no need to rush straight to "the right language" immediately. I work as an engine programmer, and I regularly use C#, C++, Lua and batch. To begin with, you can make an engine using one language, but in the long run, you are going to be able to use many of them, so don't rush [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

Also, keep in mind that talented people almost never build their [url="http://en.wikipedia.org/wiki/Magnum_opus"]magnum opus[/url] as their first work.
e.g.
* If you want to build space-shuttles, you don't start building one at 13 and work on it for a lifetime -- you start building toy rockets and motorbikes, then go to college, then get a job at NASA.
* If you want to build sky-scrapers, you play with lego, learn to draw, go to college, get a job designing houses, and build bigger and bigger things until you're finally working on giant towers.

Likewise, your first game engine should be very limited in scope. In order to not get carried away trying to make something too large, try and attach it to a particular game. As you take this journey of learning, there'll be points where it will be better to start your next step (mostly) from scratch, rather than trying to continue building atop what you've made so far. The foundations of an engine that you write today in 2012, aren't going to be strong enough to support development of engine code that you want to write in 2022. So, think of some achievable games that you want to make, and design your first engine around the requirements of those games only.
e.g. Before UDK there was the Unreal 3, which was created alongside [i]Gears of War[/i]. Before that, there was Unreal 2.5, which was created for [i]UT2004[/i], before that was Unreal 2 for [i]UT2003[/i], before that was Unreal for [i]Unreal[/i].
Likewise, John Carmack made the Doom engine, then threw it out and made the Quake engine, then threw that out for Quake 2, then threw that out for Quake 3, then threw that out for Doom 3, etc...

I guess what I'm trying to say is, don't get caught up planning some project that will take you "I don't care how many years", because by then, you're going to be a much better programmer, and you'll have moved on past your initial code. e.g. John Carmack wouldn't want to use the Doom 1 engine code in Doom 4 -- he's thrown it out and written it again, because he's a different programmer now than he was then. It's great to have a big long-term goal ([i]e.g. be a competent engine programmer[/i]), but you need to find the short-term stepping stones to getting there, and keep them in sight ([i]e.g. build a 'Pong' engine, build a 'Mario' engine[/i]).
[/quote]

This is really solid advice. Nice job Hodgman!

Share this post


Link to post
Share on other sites
alvaro    21246
[quote name='3Ddreamer' timestamp='1351481269' post='4994926']
Some of the advice in this thread is just right and some is completely wrong, so take care.
[/quote]

That's a strange comment. Wouldn't it make sense to point out which is which, in your opinion? And while you are at it you could justify your classification.

Share this post


Link to post
Share on other sites
3Ddreamer    3826
Hi, alvaro

I believe that the reason it seems strange to you is because there is more to the issue than the surface which you see.

The people much more experienced and moderators should handle this delicate situation instead of me, so I am 100% justified to take a "Hey, we've got a problem here," kind of approach. Since you have a reputation of over 3,000, I wonder why [i]you[/i] haven't taken care of the loose ends.

Fair criticism I have here. On face value, a legitimate question you had. Now let's see who is experienced and bold enough to point at the wrong advice in detail to correct them.


Clinton

Share this post


Link to post
Share on other sites
Alain Menard    175
I think the name "engine" is being overused a bit. Plenty of people seem to be using it when they are in fact talking about a basic framework or "skeleton" project type on which to build their program from. I'm presently learning Directx with the help of Rastertek online tutorials, and even he use the term "engine" and at other time "framework".

Framework don't necessarly include logics or loops, which most engine do. At least, this is how I understand engines.

Share this post


Link to post
Share on other sites
SuperVGA    1132
Sugavanvas, welcome to GameDev!

When I turned 13, i switched from QBasic to Visual Basic 4.
As you haven't yet programmed anything, I encourage you to build a small python game!
You can get a simple python installer for windows (and other platforms) [url="http://www.python.org/download/"]here[/url].

To write a python program, you simply save .py -files in notepad (or gedit etc.) containing the program.

Check out some simple python programs here: [url="http://wiki.python.org/moin/SimplePrograms"]http://wiki.python.o.../SimplePrograms[/url]

To run the program, you may just be able to doubleclick the .py -file, otherwise, open up "cmd.exe",
go to the folder contianing your .py program, and enter "python myprogram.py".
Experiment with the sample code a bit. Search the internet for clarifications and supplementary tutorials.

When you're comfortable with this, I "challenge" you to write a python program that:
[code]
A: Asks you for the result of a random multiplication within the 10x10 table, ex. "What is 7 * 3?"

B: Awaits input.

C: Responds whether you typed in the right thing, or got it wrong.

D: Jumps back to A.
[/code]

My father made me program this in QBasic, to improve my algebra and programming skills. -Must've been when I was around 12.
(Don't worry, you can do [url="http://www.pygame.org/news.html"]3D and such[/url] in python, too! But save that for later. First, write simple text games.)

Good luck! [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Edited by SuperVGA

Share this post


Link to post
Share on other sites
ZDG    317
Small advice. Buy a cheap "learn video game programming" book for c++ or c sharp. Start there and use the information to build your own projects. These books will teach you how to implement your graphics device either through DirectX or OpenGL which is very important. Additionally it will teach you proper game engine structuring for Object-Oriented design. Edited by Bad Unicorn

Share this post


Link to post
Share on other sites
mic_k    192
hi, i think it's a matter of choice.
starting from the very bottom, or direct to the high-tech, depend on our own characteristic and purpose.

some want to write game and implement/sell the result soon as possible.
or, perhaps some want to experience just the game production-cycle, not into detail.
and, maybe some want to learn programming tech, or hobby in the graph-design process.

what the best suit me, so must search, listen & try/learn it.. after experience it what next to do.. i think so..

have fun in development

Share this post


Link to post
Share on other sites
3Ddreamer    3826
[quote name='AMenard' timestamp='1351521664' post='4995069']
I'm presently learning Directx with the help of Rastertek online tutorials, and even he use the term "engine" and at other time "framework".
[/quote]

Personally, I will be creating things with distinction in the terms: game source code, game engine source code, higher level framework, and lower level framework. It is possible to architect clear boundries between these four areas in the same game development system. This begs the natural questions: What if I need to make major changes? Would it be better for future changes if I make orderly boundries between these major levels? For me, the answers would be a definate [u]yes[/u]! If I form a [i]team[/i] around me who uses my system, then could it be much more efficient and easier to understand if there are clear distinctions in the above mentioned four levels? Again, for me the answer is an obvious [u]yes[/u]! From a purely coding perspective, would this be most efficient to organize these levels? My answer for me is [u]yes[/u]!

The need for preparing our game development minds for future demands might cause us to desire a better use and understanding of words in this field.

Would I be better served by a "spaghetti" type of fully intergrated system with no clear boundries? In my case, I just say [u]no[/u]! [img]http://public.gamedev.net//public/style_emoticons/default/laugh.png[/img] I'll have the spaghetti only for meal time, thank you very much! [img]http://public.gamedev.net//public/style_emoticons/default/laugh.png[/img] Would I be best served by doing and saying anything I feel in creating my game development system? I simply say [u]no[/u]!


It is very feasible (though maybe not easy) for a game developer to have different uses for the terms: game source code, game engine source code, higher level framework, and lower level framework. I recommend seeking expert books and industry publications in print and through the internet to cut through much of the confusion out there. A lot can be learned by how corporations use these terms in describing their software. My opinion is that software industry and game development organizations lead us in establishing standards, including definitions. This would prevent much confusion caused by arbitrary use of terms by individuals, in my opinion.

All these are only suggestions, but I hope that people can get something here. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

Clinton

Share this post


Link to post
Share on other sites
cdoty    733
[quote name='Dave' timestamp='1351171524' post='4993784']
[quote name='Inukai' timestamp='1351142460' post='4993685']
[url="http://scientificninja.com/blog/write-games-not-engines"]http://scientificnin...mes-not-engines[/url]
[/quote]

This is really bad advice.
[/quote]

It's actually pretty solid advice, but it's missing a few caveats.

You need to be disciplined enough to take the time to refactor and clean up your code. If you're writing a bunch of functions to handle sprites, combine those functions into a unit of some sort (class, namespace, etc.). And, combine functions into generic versions when possible.

And, you need to be able to admit that the current solution isn't working very well, and start over. If you're doing this all along, you should never have to throw out the entire code base but only rewrite a specific module. The longer a bad module is left in place, the harder it is to remove or repair.

The idea boils down to iterating on the existing code until you can complete the game; and not writing code before you need it. It also accounts for the fact that it incredibly hard to anticipate every bit of code you need to complete a game. Edited by cdoty

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this