Additions to the engine for a full-fledged game

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Additions to the engine for a full-fledged game

      If you were to actually develop a fully-fledged game(ex: something like Battlefield 2 or Quake 3, not something too old, nothing too new/AAA) what features will I have to add/remove to the current state of the GCC engine?
      "I'm here to kick ass and chew bubble gum and I'm all out of gum."- Duke Nukem
    • For one thing, adding rendering optimizations to the scene graph, ie. BSP sorting. There are also alot of game specific systems that are needed all dependent on the game.

      Also you will almost definitely need an animation system whether it be 2D or 3D,
      PC - Custom Built
      CPU: 3rd Gen. Intel i7 3770 3.4Ghz
      GPU: ATI Radeon HD 7959 3GB
      RAM: 16GB

      Laptop - Alienware M17x
      CPU: 3rd Gen. Intel i7 - Ivy Bridge
      GPU: NVIDIA GeForce GTX 660M - 2GB GDDR5
      RAM: 8GB Dual Channel DDR3 @ 1600mhz

      The post was edited 1 time, last by mholley519 ().

    • The short answer: a staggering amount. A professional engine like Frostbite (use by Battlefield) represents dozens of engineers working for years. The Sims Medieval had well over a million lines of code just for the engine (I think it was around 1.5 million). There was another million or so for the game specific code. Medieval was based on The Sims 3 engine, which was built from scratch. The Sims 3 took about six years, most of that work was just the engine along with some core gameplay systems. They had dozens of engineers to support it.

      The reality is that one or two programmers simply can't create an engine of that quality. Mike and I are both seasoned veterans with complimentary skills. If we quit our jobs and focused 100% on creating an engine from scratch, we might get something of Battlefield or Quake 3 quality in about a decade.

      A more direct answer to your question depends on the kind of game you want to make. All of the code in GCC is derived from real techniques used in professional games Mike and I have worked on. However, the implementations of these techniques are very much geared towards teaching rather than actually being production-ready code.

      For example, the pathing system I wrote is a good, functional model for how to write a simple A* search algorithm to go through a graph of nodes and find a good path from one to another. It's loosley based on the pathing system used in Rat Race. That pathing system had all sorts of extra things that I didn't bother including, like a tool for adding nodes & arcs, a dynamic avoidance system so that actors would avoid each other when traveling in opposite directions along the same arc, a method for efficiently changing weights at run-time, a much better way for finding nodes, etc. It had more features and was much more optimized, but it was also harder for a novice game programmer to understand. There are a lot of optimizations that would have to be made before this could be used. For example, when an actor needs to path somewhere, it finds the closest node by doing a brute-force O(n) search to find the closest node. A more reasonable approach would be to spatially partition all of the nodes with a quadtree (or octree if you want multiple floors) so that you can narrow your search to a much smaller set. We had one programmer who spent 50% - 75% of his time for about 6+ months to get it working just right. I took it over when he left the company and probably spent another 2+ weeks trying to fix even more edge cases.

      RatRace was an adventure game with a very small world. The pathing problems we solved for that game were relatively trivial compared to something like Battlefield 2, especially when you have fully destructible terrain and multiple ways to manuever (jumping, ducking, crawling, etc.) Or what about Skyrim? There's no way you can keep the entire navmesh in memory, so you need to stream it. But how do I navigate from one point in the world to another point in the world that hasn't been loaded yet? How do NPCs behave?

      On The Sims, my full-time job is dealing with Sim behavior and NPC management. I have a small team that grows and shrinks depending on priorities, but it's always me. I've been doing this for about a year and a half on this project. At peak, I've had three other engineers working full-time under me. Currently I have one and will likely be getting a second.

      These examples are very small compared to the mammoth amount of work that goes into a professional engine.

      If you want to make games, you have two options. The first is to go the professional route. This is where you learn a bunch of stuff and join a company that makes games.

      The advantage to this is that you get to make big games that are impossible to make with only one or two people. This is one of the reasons I'm in this industry as a professional engineer. I love collaborating with other engineers and making something that's bigger and better than any of could do alone. We have nearly 200 people on the team I'm on. It would be impossible to make this game alone. Another huge advantage is that you learn an incredible amount working at a real studio. It's hard to find information about how to do something well. A lot of times, I read game programming forums and see novices giving bad advice. The blind lead the blind. That's actually a big part of why I try to remain as active as possible on these forums. All of the engineers I work with at EA are very smart and I've learned a considerable amount from them. Another interesting advantage of working at a studio is that you tend to meet some really amazing people. I've met some of my best friends at work. We all share the same interests (gaming, programming, science in general, etc) so it's only natural.

      The disadvantage to working at a studio is that you're generally making someone else's games, and they are often not a game you would care about. You have to love the process of making games for this to work. If you look at my resume, you'll see games like Brain Quest, which was an edutainment game aimed at kids. I hated working on it, but that's what was keeping the lights on at Planet Moon, so I did it. With a bit of luck, you can break into a game you're really, truly excited about, like the game I'm working on now.

      The second option for making games, which is what many of you seem to be aiming for, is to go the indie route. This is great because it's 100% your game rather than belonging to another company. However, there's no funding except for what you pay for yourself. That usually means that it's just you and a friend. The scope of the game has to reflect the massive lack of manpower. That doesn't mean your game has to suck, but it does mean that you won't be creating the next Battlefield. FTL is a great example of an indie game that was incredible. Those guys did an amazing job on this game and I had a blast playing it, but it's clearly very reduced in scope. Artemis is another example of a great game that we played many times at my office and had a blast, but again, the creator had to make a lot of concessions due to the lack of time.

      Those are the two major options for making games. A common thing I see if someone wanting to be independent and trying to make a game that's way out of their league. If you're new to game programming (or programming in general), you should trying to make VERY simple games. You should probably be cloning games, like Tetris, Breakout, Battleship, Blackjack, or any other simple game just so you can get your feet wet. Most people who make successful indie games are industry veterans who wanted to give the indie life a try.

      -Rez
    • OK, thanks for the very thorough answer, you saved me from the trouble of making my own "professional engine", I have another question, if I was to make an indie game like the Walking Dead, Torchlight 2, FTL, Amnesia, Minecraft, Limbo, etc. How much would you remove/add compared to a professional engine, and what would you add/remove?
      "I'm here to kick ass and chew bubble gum and I'm all out of gum."- Duke Nukem

      The post was edited 1 time, last by ZeroXen ().

    • Originally posted by rezination

      The reality is that one or two programmers simply can't create an engine of that quality. Mike and I are both seasoned veterans with complimentary skills. If we quit our jobs and focused 100% on creating an engine from scratch, we might get something of Battlefield or Quake 3 quality in about a decade.



      This is the thing I fear the most. And the reason why it bothers me is because finding the job in the large good company is something unreal. All those companies want workers with outstanding qualities and experience which you can not get unless.. you work in a such company already :) Moreover, most of those companies are concentrated not in the country I live in, which make it even little more unreal (if it's possible)!

      And going indie route is actually not that great to my regret. Working for almost 3 years in small companies and all of those are crappy as hell. Another problem that small companies usually use some 3d party tools/engines which large companies does not use often, making your technical experience inapplicable to the large scale development.. Which makes me even more sad :)

      I'm trying to learn the things on my own, but I feel at the time I grasp the knowledge it'll be totally outdated again. If someone has the recipe how to break this loop, I'll gladly listen to it!
      Looking for a job!
      My LinkedIn Profile
    • Originally posted by ZeroXen
      OK, thanks for the very thorough answer, you saved me from the trouble of making my own "professional engine", I have another question, if I was to make an indie game like the Walking Dead, Torchlight 2, FTL, Amnesia, Minecraft, Limbo, etc. How much would you remove/add compared to a professional engine, and what would you add/remove?


      You just mentioned several games that are all VERY different from each other so again, it depends on the kind of game you want to make. FTL and Amnesia probably couldn't share any code at all with each other, except some of the basic utility code used in every engine.

      The first thing I'd recommend is focus. If you're an inexperienced programmer, I'd start by making something dirt simple. A common mistake I see if newbie programmers trying to bite off more than they can realistically handle. If this is your first game, you really should be trying to build one of the games I mentioned in my previous post.

      If you're an experienced developer (or you choose to ignore my advice), then my suggestion is to focus on a single project idea. One huge difference between an indie game and a professional game is focus. FTL focuses very much on ship management. That's their core mechanic and they use it in a lot of interesting ways. But that's it. There's no flying around since you just jump from node to node, there's not really a story except that you're trying to reach the federation fleet, and in general, it's a really simple game that all comes together very nicely. Even this relatively simple game took two people about two years to create, and these are professional game developers who quit their jobs at 2K Games to make it.

      So, figure out what you want to spend the next 2 - 4 years of your life building (yes, it will take at least that long if you want something that's really high quality). The next step is to build out a simple design document that captures all these ideas. Once you have a clear idea of the thing you're actually building, then you can try to figure out the tech involved.

      I'm sure you were hoping for some specifics, like "optimize the renderer and rebuild this system, then add these nine things", but I can't really give any until I know what you're actually building.

      If you want a starting place, take a look at the "A Game of Teapot Wars" chapter in GCC and read the last few paragraphs. In there, I challenge you to turn Teapot Wars in to something awesome. I think you should absolutely do that. Turn that little demo into something that's fun and don't worry about all the things you'll have to change. The reality is that you probably shouldn't bother changing a system until you truly have a need to. Sure, the pathing system could be heavily optimized, but if your game takes place in an office building with small rooms, the one I wrote will be just fine. If it's not broken or causing you problems, don't fix it.

      By the way, no one has ever accepted that challenge. In fact, the vast majority of all games never even come close to getting finished because people try to start out too big. Don't fall into that trap.

      -Rez
    • Originally posted by devast3d
      This is the thing I fear the most. And the reason why it bothers me is because finding the job in the large good company is something unreal. All those companies want workers with outstanding qualities and experience which you can not get unless.. you work in a such company already :) Moreover, most of those companies are concentrated not in the country I live in, which make it even little more unreal (if it's possible)!

      The first part of your statement is untrue. When hiring junior engineers, I look for enthusiasm and skill. I want to see someone who's made a few games on their own. I don't care if they're not perfect, I just care that they're finished and that there's something interesting and creative there. The specifics depend on the position they're going for. For example, an aspiring graphics engineer should show me some really cool graphics demos. As an AI programmer, I have simulations and AI tech demos that I tend to show.

      Unfortunately, the second part of your statement is true. In order to work as a professional game programmer, you really have to be where the game companies are. I'm not sure how work visas are handled out there. There are a number of studios in the UK, especially in various parts of England. If you want to be a professional developer, you'll have to find a way to live where the companies are.


      And going indie route is actually not that great to my regret. Working for almost 3 years in small companies and all of those are crappy as hell. Another problem that small companies usually use some 3d party tools/engines which large companies does not use often, making your technical experience inapplicable to the large scale development.. Which makes me even more sad :)

      I'm not sure I agree with that. Engines like Unity are applicable to professional development. I don't know of a lot of companies actually using Unity, but the fact that you can conform to an engine and can create something interesting is what I'm looking for.


      I'm trying to learn the things on my own, but I feel at the time I grasp the knowledge it'll be totally outdated again. If someone has the recipe how to break this loop, I'll gladly listen to it!

      It's all about doing it. Make games. Make as many as you possibly can, then make even more. Ever new game should add a new challenge. When building my current engine, I decided to use a multi-threaded renderer and resource loader because I wanted to understand the intricacies of multi-threaded programming better. I use Direct3D rather than a 3rd party wrapper like DXUT because I wanted to force myself to learn those APIs. In my current project, I created a day/night cycle because I wanted to experiment with lighting. Every new project should have a programming goal on top of a design goal.

      -Rez
    • The first part of your statement is untrue. When hiring junior engineers, I look for enthusiasm and skill. I want to see someone who's made a few games on their own. I don't care if they're not perfect, I just care that they're finished and that there's something interesting and creative there. The specifics depend on the position they're going for. For example, an aspiring graphics engineer should show me some really cool graphics demos. As an AI programmer, I have simulations and AI tech demos that I tend to show.


      Well, maybe I have not searched thoroughly, should give it more attention and try to find beginner positions, although it's a bit frustrating to go all over again, as I know the basics and even more. But better this than nothing!

      Unfortunately, the second part of your statement is true. In order to work as a professional game programmer, you really have to be where the game companies are. I'm not sure how work visas are handled out there. There are a number of studios in the UK, especially in various parts of England. If you want to be a professional developer, you'll have to find a way to live where the companies are.


      You say UK is a good place to go for the game development? I'm actually thinking about where to go (at least TRY to go). AFAIK most of the game developers are situated in USA/Europe, but honestly I don't know anything about country or city where I should move. If taking UK into consideration what city can you advice to look at? I mean the city with several game companies or so.

      I'm not sure I agree with that. Engines like Unity are applicable to professional development. I don't know of a lot of companies actually using Unity, but the fact that you can conform to an engine and can create something interesting is what I'm looking for.


      The funny thing that I'm professional Unity3d developer and despite that Unity is getting more and more attention, I can't find any serious development, I do search from time to time and there are not many positions involving unity programming as well.. Even here in Moscow, which has many Unity3d developers according to Unity statistics. Anyway most of the jobs require C++/DX/OGL and NOT Unity3d/C#...

      It's all about doing it. Make games. Make as many as you possibly can, then make even more.

      I'm trying :) Got a game almost released for the iOS. Still it's nothing compared to serious development, hehe. I Guess I have to do it harder!
      Looking for a job!
      My LinkedIn Profile
    • Originally posted by rezination
      Specifically around the London area.

      -Rez

      Thanks for the direction :) Maybe I'll be lucky someday and some company will help me to move.

      --

      Found interesting site which shows game developments studio locations all over the world
      gamedevmap.com/
      Maybe someone who has the same problems will find it useful.
      Looking for a job!
      My LinkedIn Profile

      The post was edited 1 time, last by devast3d ().

    • Some solid sage advice, Rez. On the aspect of code, what I tend to do, is start small, personally at the moment my team work on Android/iOS games, because there dirt cheap to make, don't have to be overly complex, and you can make a solid return on them! A good way to support yourself (specifically indie developers).

      I find, a better alternative than just creating what you "think" you should have, is creating what you need for the project. Take what you have with GCC for example, you can create some pretty basic games with that, but the time may come when you need to extend that functionality to do something else. You do it, and hello, you've just added a new feature to the engine, something you can reuse over, and over again, whether that is a whole new platform/renderer or just a shader.

      Build as you go along, I found for me personally was a better alternative, it aids in learning and doesn't through you to far into things and end up getting stressed over all the functionality you want to include. (Thats not to say that some of the code you will produce won't be specific to certain games, but you'll find a lot of reusable code as you go along that you can fit nicely into your engine.)

      The post was edited 1 time, last by thedevsykes ().

    • Originally posted by rezination
      Unfortunately, the second part of your statement is true. In order to work as a professional game programmer, you really have to be where the game companies are. I'm not sure how work visas are handled out there....
      -Rez


      As a game programmer living in a 3rd world country, i can testify to the visa issue... After graduating in full sail, i had a really hard time looking for a job even if i was in the states at that time. I've gone through so many interviews and most of them went fairly well. Until we got to the visa thing of course. I kept on insisting that i can even financially support an immigration lawyer if the company doesn't want to. But its pretty hard to convince someone to hire an international fresh graduate and waste time on filling up documents and providing requirements for the work visa where you can quickly hire a native and start working the next day after. So i ended up wasting a year and spending all my money living in the states jobless...

      Luckily though, one of the companies i've been interviewed was very much interested in me that, even though they couldn't provide me a working visa, they contacted me back here in the Philippines if i was interested in doing some contract work with them. After a year they tried getting me back to the states but after months of working with an immigration lawyer they decided to stop because it was taking too much time and the project we were working on would be finished by the time I would get there anyway.

      1.5 years after working with F9, another company, Id Software, wanted to hire me. They had the resources and a dedicated lawyer that works on the immigration stuff. I did pretty well with the interviews and it was pretty much just the visa issue left. Unfortunately the immigration department said that i had to wait until october for the next working visa application to open... That was around February or March that time. So i had to wait for 7 months. When i asked again about my status they said they've already filled out all of their available vacant positions... :(
    • I realized my story was a bit depressing for us living in the not so fortunate places. But i'm not saying that its impossible for us to get a job at these big studios though.

      Like myself, even though i live in the Philippines, I was still able to get a job at these big studios as a contract engineer doing outsourcing jobs.

      An important advice i can give is, besides having the skills, is networking and your attitude towards work and other people. You need to have connections. Its almost impossible to get a job if you don't know anyone in the industry especially for us. And also your attitude. You won't get a job if you don't work well with other people. I got a job at Foundation 9 not because i was extremely smart but because the studio manager saw that my attitude towards work was capable working with the great people in the studio. I got a chance to have an interview with some of the great engineers and the tech director at ID because i know one of their HRs. That HR helped me because i left a very good impression at the previous company's tech director the HR worked for.; Midway

      So follow Rez's advice and impress the hell out of Rez and Mike. They're your keys to getting into the industry! :D

      The post was edited 1 time, last by BrentChua ().

    • Foundation 9 played a big part of my career life especially when i was just starting out. I would have stopped if it wasn't for them. It was because of them that made me continue on this very volatile industry. Once you finally get into the industry, it'll pretty much be smooth sailing. Just continue on working and keep on learning something new.

      The thing with Id wasn't really a loss for me. Even though i didn't get the job i've known some great people and the HR is still willing to help me if any opportunity comes.

      The post was edited 1 time, last by BrentChua ().